clewis@mnetor.UUCP (Chris Lewis) (04/18/85)
I am in the process of trying to write a troff to HP laserjet filter. The current status is that it works just about perfectly on 12 point text using the HP native fonts. I have two more major problems to surmount: 1) I need special characters and different size fonts 2) Recognizing end of page (eg: where to place the formfeed in the laser output stream) The reason why I am replying to the MacFonts stuff is that it occured to me that I could use the MacFonts font files for the laserjet. Does anybody know how to take the MacFont files from these postings, decode them, and then transform them into something useable by a UNIX program (lines of bits would be preferable)? Further, how does one change the font size? (eg: scaling algorithm, or are all pitches present in the font file?). (BTW: is MacFonts public domain?) Once I do this, I will be able to determine which graphics density mode to use on the laserjet and emit special/different size characters as graphics bitmaps (I'm not sure which density mode will allow me to do a whole page without overrunning the laser's graphics mode byte limit). We only have a binary UNIX license on our Pyramid, and Pyrcorp seems to have chosen not to give us the BSD fonts. The second problem is due to how troff outputs page breaks - it doesn't really. The C/A/T typesetter is essentially a random relative "cursor-motion" device, where the "y" position can essentially be infinite. On a C/A/T or versatec, the macro packages have arranged to print some sort of page break sequence (usually two dashes at either side of the page). This is where you use the guillotine. However, in contrast, you cannot do this on a laser jet because the y positioning will just hit the bottom margin and overprint subsequent stuff. And, the page break characters are different for every macro package. Hence, I have to figger out where to emit the formfeed. I am using a kludge now: 1) after every cumulative "y" set of movements that is EXACTLY 11 inches in troff motion units, I emit a formfeed and reset the laserjet absolute y coordinate to 0 (beginning of page) 2) Ignore all printing within a couple of vertical motions of the top of page - this is to delete the cut marks. Unfortunately, this won't work on anything else than 11-inch-designed troff output. Maybe I could override the page-break characters AFTER the macros are defined, so I could recognize them easily, but I'm not sure how to do this without blowing up the other parts of macro footers/trailers. Preferably, I would like to get troff to emit a pseudo C/A/T opcode (one that isn't already used). The guys at U of Toronto did this for versatec stuff, but they did it by modifying troff source, but this is unacceptable. I want my filter to work on a stock troff. Ps: Does anybody know where the character is supposed to appear with respect to the C/A/T x-y coordinates? (eg: is the coordinate the lower left corner of the glyph?) Thanks very much, -- Chris Lewis, Computer X (CANADA) Ltd. UUCP: {allegra, linus, ihnp4}!utzoo!mnetor!clewis BELL: (416)-475-1300 ext. 321