Modifying GutenPrint? PPD files to work with eComStation's pscript.drv
After running pin.exe 60 or 70 times, writing my own PPDs, & learning far more about this stuff than I ever wanted to know, I can now get perfectly printed pages on my Epson Stylus C40UX.
As it turns out, only a few minor changes were needed to get the PPD from your package (stp-escp2-c40ux.5.0.ppd.gz) to work. Perhaps the following will be of use to you or Bart or whomever:
1- The divide-by-zero trap is caused by this stuff in the PPDs:
*Resolution None/Automatic?: ""
The "*Resolution" keyword _must_ be followed by a numeric value (e.g. 360x360). Using 'None' sets dots-per-inch to zero, causing a trap when the driver tries to do some scaling operation. Changing "*DefaultResolution?"" to one of the other values listed & eliminating the "*Resolution None" line fixes the issue.
Fixing this causes a non-fatal conflict. For many printers, CUPS uses its "*StpQuality?" keyword to set DPI. Forcing *Resolution to be valid (because the IBM driver demands it) causes whatever value *StpQuality? set previously to be overridden. These two entries will have to be reconciled (knowing what "/cupsCompression" & "/cupsRowFeed" do would help).
2- The entries which control DPI *have* to be set identically in the driver's Properties pages & in the "Set Printer Options" web page. If they're not, the output is scaled incorrectly. I had the driver using 8pt type but it was printing out at 24pt. Eventually I found that the driver was set to 360x360 while CUPS itself was set to 360x120.
3- "*LanguageEncoding?: UTF-8" is a non-issue - at least for Western European languages. AFAICT, the first 256 characters of UTF-8 are IsoLatin1. Change this manually & ppdenc works great. In any case, the only non-CP850 character I found in my PPD (0xD7) translated to a multiplication sign. It's used in some of the paper sizes (e.g. 4x6). I used a search & replace to change them to lowercase 'x' before running ppdenc. The only difference between before & after was "IsoLatin1" became "OS2-850".
4- On the 'Output' page of the driver's job properties, "Use printer device fonts" has to be unchecked (at least when printing plain-text files). If not, I get this error: "[Job 38] /invalidfont in findfont". OS/2's lpd then reports that it got an invalid size for the file it received and aborts the print job. The primary downside to this is that the PS files get monstrously large because they require the font to be embedded.
5- PPD keywords that don't have any Postscript code associated with them are not emitted by the driver, e.g.
*StpInkType? CMYK/CMYK Colour: ""
Consequently, most of the entries on the 'Features' page of the driver properties have no effect whatsoever (and 80% of each PPD is inert filler).
6- My PPD had 60 forms listed but the driver can only handle 30 entries - the rest are ignored.