home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / psroff3.0 / patch15 < prev    next >
Text File  |  1993-05-02  |  102KB  |  3,968 lines

  1. Newsgroups: comp.sources.unix
  2. From: clewis@ferret.ocunix.on.ca (Chris Lewis)
  3. Subject: v26i207: psroff 3.0, Patch15
  4. Sender: unix-sources-moderator@efficacy.home.vix.com
  5. Approved: WhoAmI@efficacy.home.vix.com
  6.  
  7. Submitted-By: clewis@ferret.ocunix.on.ca (Chris Lewis)
  8. Posting-Number: Volume 26, Issue 207
  9. Archive-Name: psroff3.0/patch15
  10.  
  11. Archive-name: psroff3.0/Patch.15
  12. Submitted-by: clewis@ferret.ocunix.on.ca (Chris Lewis)
  13.  
  14.     This is official patch 15 for Psroff 3.0.
  15.     Please apply it by:
  16.     cd <psroff source directory>
  17.     patch -N -p < <this file>
  18.     
  19.     The base release of psroff3.0 and first four patches were in
  20.     comp.sources.unix volume 24.
  21.  
  22. This is a monster.  Sorry.  Lots of teensy little changes, plus one
  23. major functionality upgrade and LJ-critical bug fix.  If this is truncated
  24. at your site, please let me know.
  25.  
  26. This is probably going to be the last feature upgrade before Psroff 4.0.
  27. Subsequent patches to 3.0 are only going to be bug fixes.  The only
  28. thing currently scheduled for Psroff 4.0 is some cleanup and hp2pbm
  29. integration.  If you have any other feature suggestions for Psroff 4.0
  30. please email me.
  31.  
  32. These patches will also be available on ftp.cs.toronto.edu in
  33. pub/psroff-3.0.  A fully patched set of shars will be available
  34. on ftp.uunet.ca in distrib/chris_lewis/psroff3.0pl15.
  35.  
  36. Changes:
  37.     1) Now supports landscape/simplex/duplex/page feed/spooler
  38.        passthru options with LJ and PS.  See psroff(1) for details.
  39.        Note Makefile config for PAPER and ORIENTATION.
  40.        Thanks to Dave Wexelblat for pestering me enough to do it.
  41.     2) Bug fix to prevent dumping on some machines when LJ fonts
  42.        are on-the-fly scaled.
  43.     3) Resolved malloc typing for once and all.  See MALLRET in
  44.        defs.h.
  45.     4) Many niggly doc fixes.
  46.     5) Fixed cmtt.ROMAN8 so that buildljfonts/calcfonts/pk2sfp-created
  47.        Courier fonts have digits.
  48.     6) Fixed pk.c rounding bug in point size whilst reading SFP
  49.        (results in bad widths generated from SFPs - especially
  50.        via calcfonts without sfp2pk)
  51.     7) \(ss support in LJ personalities (widths probably off)
  52.     8) Numerous build and install nigglies.
  53.     9) -man macros should now support -rL<length> hack.
  54.  
  55. Patchwrapped: 930113022141
  56.  
  57. Index: ./man/pk2sfp.1.S
  58. *** /tmp/PATCHold/./man/pk2sfp.1.S    Wed Jan 13 01:55:15 1993
  59. --- ./man/pk2sfp.1.S    Wed Jan 13 01:55:23 1993
  60. ***************
  61. *** 1,4 ****
  62. ! .\"Copyright 1988 by Chris Lewis 92/05/19
  63.   .TH PK2SFP %%MANEXT%% "Psroff %%T2VERSION%%"
  64.   .SH NAME
  65.   pk2sfp,pk2ditwid,pktype,pk2ps \- PK/SFP format font file handling utilities
  66. --- 1,4 ----
  67. ! .\"Copyright 1988 by Chris Lewis 92/12/05
  68.   .TH PK2SFP %%MANEXT%% "Psroff %%T2VERSION%%"
  69.   .SH NAME
  70.   pk2sfp,pk2ditwid,pktype,pk2ps \- PK/SFP format font file handling utilities
  71. ***************
  72. *** 233,239 ****
  73.   Right?
  74.   .PP
  75.   Well, not always.
  76. ! Not only to the formats change from one font format to another, but
  77.   .B encodings
  78.   do too.
  79.   If you simply converted Knuth's fonts in PK format to SFP and used them
  80. --- 233,239 ----
  81.   Right?
  82.   .PP
  83.   Well, not always.
  84. ! Not only do the formats change from one font format to another, but
  85.   .B encodings
  86.   do too.
  87.   If you simply converted Knuth's fonts in PK format to SFP and used them
  88. Index: ./man/psroff.1.S
  89. *** /tmp/PATCHold/./man/psroff.1.S    Wed Jan 13 01:55:56 1993
  90. --- ./man/psroff.1.S    Wed Jan 13 01:56:02 1993
  91. ***************
  92. *** 1,4 ****
  93. ! .\"Copyright 1988 by Chris Lewis 2.8 91/10/01
  94.   .TH PSROFF %%MANEXT%% "Psroff %%T2VERSION%%"
  95.   .SH NAME
  96.   psroff,ljroff,xxroff,catconv \- troff to PostScript or other printers
  97. --- 1,4 ----
  98. ! .\"Copyright 1988 by Chris Lewis 2.11 93/01/10
  99.   .TH PSROFF %%MANEXT%% "Psroff %%T2VERSION%%"
  100.   .SH NAME
  101.   psroff,ljroff,xxroff,catconv \- troff to PostScript or other printers
  102. ***************
  103. *** 8,18 ****
  104. --- 8,21 ----
  105.   .BI "[\-d" ptr "]"
  106.   .BI "[\-rL" length "]"
  107.   .BI "[\-P" prologs "]"
  108. + .BI "[\-l" lpargs "]"
  109.   .BI "[\-D" deb "]"
  110.   [\-X] [\-M] [\-F]
  111.   .BI "[\-R" nn "]"
  112.   .BI "[\-O" off "]"
  113.   .BI "[\-Y" off "]"
  114. + .BI "[\-pO" orientation "]"
  115. + .BI "[\-pS" paper "]"
  116.   .BI [ troffopts ]
  117.   files ...
  118.   .sp
  119. ***************
  120. *** 29,35 ****
  121.   can be any of the normal
  122.   .I troff
  123.   arguments, in particular \-m directives for specifying macro package.
  124. ! Note that the semantics of "\-t" are changed - it means send the Postscript
  125.   (or HP Laserjet) output to stdout rather than the printer.
  126.   .PP
  127.   Most of the options you shouldn't need to use, except for
  128. --- 32,38 ----
  129.   can be any of the normal
  130.   .I troff
  131.   arguments, in particular \-m directives for specifying macro package.
  132. ! Note that the semantics of ``\-t'' are changed - it means send the Postscript
  133.   (or HP Laserjet) output to stdout rather than the printer.
  134.   .PP
  135.   Most of the options you shouldn't need to use, except for
  136. ***************
  137. *** 63,69 ****
  138. --- 66,163 ----
  139.   .IR troff ,
  140.   and
  141.   must be invoked *after* \-T if \-T is used.
  142. + .SH "PAPER AND PRINT SPOOLER CONTROL"
  143.   .PP
  144. + The ``\-pO'' option allows you to specify the paper orientation.
  145. + Possible values are
  146. + .B landscape
  147. + and
  148. + .BR portrait .
  149. + Default is
  150. + .BR %%ORIENTATION%% .
  151. + .PP
  152. + The ``\-pS'' option allows you to specify the size of paper.
  153. + Legal values are: 
  154. + .BR letter ,
  155. + .BR legal ,
  156. + .BR executive ,
  157. + .BR a4 ,
  158. + .BR com ,
  159. + .BR monarch ,
  160. + .BR c5 ,
  161. + and
  162. + .BR dl .
  163. + The default is
  164. + .BR %%PAPER%% .
  165. + .PP
  166. + Both paper and orientation can be shortened to minimum distinguishing
  167. + length.
  168. + Eg: ``\-pOlet'' specifies letter.
  169. + .PP
  170. + .B "IMPORTANT NOTE:"
  171. + Specifying orientation or paper size does
  172. + .B NOT
  173. + tell
  174. + .I troff
  175. + itself anything about text geometry.
  176. + It just tells the backends what commands to issue to get the paper in the
  177. + correct orientation, and how large the text areas could possibly be.
  178. + You have to tell
  179. + .I troff
  180. + yourself what the page length or width should be.
  181. + For example, with the
  182. + .B "\-mm"
  183. + macros, specifying "\-rL8.5i" to psroff will do the right thing when you're
  184. + trying to do landscape on ``letter'' size paper.
  185. + The adapter libraries may also make this work with other macro packages
  186. + (especially 
  187. + .BR "-man" "),"
  188. + but
  189. + if not, you're on your own.
  190. + With the
  191. + .B ME
  192. + macros try specifying a ``.pl''.
  193. + .PP
  194. + The ``\-P'' option is especially useful here using an ``X'' suffix.
  195. + Each different printer type supports additional features such as
  196. + duplex, simplex, envelope feed and so on.
  197. + Consult the
  198. + .IB type ".lib"
  199. + file for precise details of what is available.
  200. + However, 
  201. + .BR lj ,
  202. + .BR lj3 ,
  203. + .BR lj3u
  204. + and
  205. + .B ps
  206. + all support ``duplex_short'' (short side binding), ``duplex_long'' (long
  207. + side binding) and ``simplex'' plus various bin control codes.
  208. + You can, for example, print landscape duplex with:
  209. + .BR "``\-pOland \-PXduplex_short''" .
  210. + .PP
  211. + NOTE: the control codes are implemented using HP's PCL and
  212. + PostScript extensions (ie: ``settumble'' and ``setdumplexmode'').
  213. + A given PCL or PostScript printer may not implement these features
  214. + at all, or implement them in a different way.
  215. + Theoretically, if your printer doesn't support these features, the
  216. + mode selects will be ignored.
  217. + .PP
  218. + Details of how this is done, and enough hints to extend it yourself
  219. + can be seen in the appropriate
  220. + .IB type ".lib"
  221. + file.
  222. + .PP
  223. + The ``\-l'' option passes its argument through to the print spooler.
  224. + Eg: \-l'\-onobanner' passes ``\-onobanner'' through to the print spooler.
  225. + Consult your print spooler's manual page (probably
  226. + .B lp
  227. + or
  228. + .BR lpr )
  229. + for further details of what options can be used.
  230. + With
  231. + .B lp
  232. + you may have to consult the printer interface file under /usr/spool/lp/interface.
  233. + .PP
  234.   .I Psroff
  235.   can be made to generate several different printer output formats.
  236.   If the environment variable PSROFF is set, it is used.
  237. ***************
  238. *** 84,89 ****
  239. --- 178,185 ----
  240.   understands ``ps'' (postscript), ``tp'' (ditroff\(->tpscript also postscript),
  241.   ``jt'' (ditroff\(->jetroff (HP PCL)),
  242.   ``lj'' (HP PCL),
  243. + ``lj3'' (HP PCL5),
  244. + ``lj3u'' (HP PCL5 with CG Univers base fonts),
  245.   and
  246.   ``dt'' (Ditroff output, no printer).
  247.   However, this list may be different at your site - see
  248. Index: ./man/psxlate.1.S
  249. *** /tmp/PATCHold/./man/psxlate.1.S    Wed Jan 13 01:56:36 1993
  250. --- ./man/psxlate.1.S    Wed Jan 13 01:56:42 1993
  251. ***************
  252. *** 1,4 ****
  253. ! .\"Copyright 1991 by Chris Lewis 2.9 92/11/11
  254.   .TH PSXLATE %%MANEXT%% "Psroff %%T2VERSION%%"
  255.   .SH NAME
  256.   psxlate \- General Postscript page flipper etcetera
  257. --- 1,4 ----
  258. ! .\"Copyright 1991 by Chris Lewis 2.10 92/12/22
  259.   .TH PSXLATE %%MANEXT%% "Psroff %%T2VERSION%%"
  260.   .SH NAME
  261.   psxlate \- General Postscript page flipper etcetera
  262. ***************
  263. *** 23,30 ****
  264.   have pages that are prefixed with ``%%Page:'' comments and have a trailer
  265.   prefixed by ``%%Trailer:''.
  266.   Case is significant.
  267. ! It also PostScript that contains embedded EPS files provided that they are
  268. ! compliant with the DSC and use BeginDocument/EndDocument.
  269.   .PP
  270.   If you have
  271.   .B psnup
  272. --- 23,31 ----
  273.   have pages that are prefixed with ``%%Page:'' comments and have a trailer
  274.   prefixed by ``%%Trailer:''.
  275.   Case is significant.
  276. ! .B Psxlate
  277. ! will also work with PostScript that contains embedded EPS files,
  278. ! provided that they are compliant with the DSC and use BeginDocument/EndDocument.
  279.   .PP
  280.   If you have
  281.   .B psnup
  282. ***************
  283. *** 51,57 ****
  284.   .PP
  285.   On the other hand, if the file starts with ``%!'', but not ``%!PS-Adobe-'',
  286.   the file is treated as Postscript, but since it can't be trusted to
  287. ! conform to the DSC, none of the convertions are performed -
  288.   .B psxlate
  289.   does nothing to the file.
  290.   .PP
  291. --- 52,58 ----
  292.   .PP
  293.   On the other hand, if the file starts with ``%!'', but not ``%!PS-Adobe-'',
  294.   the file is treated as Postscript, but since it can't be trusted to
  295. ! conform to the DSC, none of the conversions are performed -
  296.   .B psxlate
  297.   does nothing to the file.
  298.   .PP
  299. ***************
  300. *** 61,67 ****
  301.   does not manipulate the file in-memory,
  302.   hence there are fewer restrictions on the size of the file.
  303.   The only restrictions are that
  304. ! .B Psxlate
  305.   has to allocate sufficient memory to hold the longest line of Postscript,
  306.   plus 2 long integers per page (possibly doubled - see notes) and that
  307.   there is enough disk space for an additional copy of the file.
  308. --- 62,68 ----
  309.   does not manipulate the file in-memory,
  310.   hence there are fewer restrictions on the size of the file.
  311.   The only restrictions are that
  312. ! .B psxlate
  313.   has to allocate sufficient memory to hold the longest line of Postscript,
  314.   plus 2 long integers per page (possibly doubled - see notes) and that
  315.   there is enough disk space for an additional copy of the file.
  316. ***************
  317. *** 265,284 ****
  318.   Otherwise the second pass will print upside-down.
  319.   .PP
  320.   Also note that the Apple LaserWriter IINT printer has a nasty habit of
  321. ! curling the paper bad enough during the first pass that the second pass
  322. ! may jam or wrinkle.
  323.   .PP
  324.   If groff is used as the troff processor, then the resulting PostScript file
  325.   can be edited and made to print upside-down.
  326.   Then the paper can be moved from the output tray to the paper tray,
  327.   without turning it around 180 degrees.
  328.   .PP
  329.   Place the following lines into an executable file named
  330.   .BR upsxlate :
  331.   .PP
  332.   .nf
  333.   #!/bin/sh
  334.   sed -e "/1 -1 scale/s/scale/scale 612 PL translate 180 rotate/" | psxlate $*
  335.   .fi
  336.   .PP
  337.   Using the exact same syntax as
  338. --- 266,290 ----
  339.   Otherwise the second pass will print upside-down.
  340.   .PP
  341.   Also note that the Apple LaserWriter IINT printer has a nasty habit of
  342. ! curling the leading edge of the paper bad enough during the first pass
  343. ! that the second pass may jam or wrinkle.
  344.   .PP
  345.   If groff is used as the troff processor, then the resulting PostScript file
  346.   can be edited and made to print upside-down.
  347.   Then the paper can be moved from the output tray to the paper tray,
  348.   without turning it around 180 degrees.
  349. + By turning the paper around,
  350. + the trailing edge of the previous printing pass is used,
  351. + which isn't curled and won't jam in the LWIINT printer.
  352.   .PP
  353.   Place the following lines into an executable file named
  354.   .BR upsxlate :
  355.   .PP
  356.   .nf
  357. + .in +12p
  358.   #!/bin/sh
  359.   sed -e "/1 -1 scale/s/scale/scale 612 PL translate 180 rotate/" | psxlate $*
  360. + .in -12p
  361.   .fi
  362.   .PP
  363.   Using the exact same syntax as
  364. ***************
  365. *** 302,307 ****
  366. --- 308,339 ----
  367.   When the second batch is printed, all of the even pages will be done in
  368.   ascending order.
  369.   When completed, the output stack will be in the correct order.
  370. + .PP
  371. + If you are using FrameMaker, the PostScript output can also be edited so that
  372. + it too can be turned upside down.
  373. + But, the PostScript prologue that is used does not contain the correct magic
  374. + header.
  375. + To fix this problem, edit the FrameMaker file
  376. + .I .fminit2.0.ps/postscript_prolog
  377. + and change to first line to
  378. + .IR %!PS-Adobe-3.0 .
  379. + The 3.0 is necessary for NeWSprint 2.0 rev C.
  380. + Any other value will cause NeWSprint to always print the file in ascending
  381. + order.
  382. + .PP
  383. + To print FrameMaker files upside down,
  384. + place the following lines into an executable file called
  385. + .BR fupsxlate :
  386. + .PP
  387. + .nf
  388. + .in +12p
  389. + #!/bin/csh
  390. + sed -e "/3.86 setmiterlimit/s/setmiterlimit/setmiterlimit 612 792 translate 180 rotate/" | psxlate $*
  391. + .in -12p
  392. + .fi
  393. + .PP
  394. + The 612 and 792 must be changed to reflect the size of the paper you are using.
  395. + The values shown are for letter paper.
  396.   .PP
  397.   On a non-reversing printer, the
  398.   .B \-r
  399. Index: ./lib/Makefile
  400. *** /tmp/PATCHold/./lib/Makefile    Wed Jan 13 01:57:19 1993
  401. --- ./lib/Makefile    Wed Jan 13 01:57:22 1993
  402. ***************
  403. *** 1,4 ****
  404. ! #2.5 92/03/03
  405.   
  406.   include ../makeincl
  407.   
  408. --- 1,4 ----
  409. ! #2.6 92/12/02
  410.   
  411.   include ../makeincl
  412.   
  413. ***************
  414. *** 25,30 ****
  415. --- 25,31 ----
  416.       cd $(LIBDIR)/lib ; rm -f $(LIBS) lj3u.lib
  417.       cp $(LIBS) $(LIBDIR)/lib
  418.       cd $(LIBDIR)/lib ; \
  419. +         chmod 444 $(LIBS) ; \
  420.           for i in lj3u ; \
  421.           do \
  422.           ln lj3.lib $$i.lib ; \
  423. Index: ./lib/lj.fonts
  424. *** /tmp/PATCHold/./lib/lj.fonts    Wed Jan 13 01:57:51 1993
  425. --- ./lib/lj.fonts    Wed Jan 13 01:57:55 1993
  426. ***************
  427. *** 1,4 ****
  428. ! #@(#)lj.fonts 2.1 90/07/18
  429.   #    four fields:
  430.   #
  431.   #    troff-name english-name HPLJ-code-to-transmit flags
  432. --- 1,4 ----
  433. ! #@(#)lj.fonts 2.2 92/12/22
  434.   #    four fields:
  435.   #
  436.   #    troff-name english-name HPLJ-code-to-transmit flags
  437. ***************
  438. *** 68,71 ****
  439. --- 68,72 ----
  440.   LB LinePrinter-Bold \033(8U\033(s0p0s03b00T nnnnnnnnnnnnnnn
  441.   H  Helvetica-Roman  \033(8U\033(s1p0s00b04T nnnnpnnnnnnnnnn
  442.   HI Helvetica-Italic \033(8U\033(s1p1s-3b04T nnnnpnnnnnnnnnn
  443. + HO Helvetica-Italic \033(8U\033(s1p1s-3b04T nnnnpnnnnnnnnnn
  444.   HB Helvetica-Bold   \033(8U\033(s1p0s03b04T nnnnnnnnnnnnnnn
  445. Index: ./lib/lj.lib
  446. *** /tmp/PATCHold/./lib/lj.lib    Wed Jan 13 01:58:21 1993
  447. --- ./lib/lj.lib    Wed Jan 13 01:58:26 1993
  448. ***************
  449. *** 29,36 ****
  450.   %            \xAABB \022 A %hello
  451.   %            Passes the following bytes: 0xAA, 0xBB, 022, and "A"
  452.   %            through to the laserjet.
  453. ! %ident  @(#)lj.lib: 2.1 Copyright 90/07/18 16:52:26 Chris Lewis"
  454. ! \033E\033&k2G            %reset printer, set CR=CR,LF=CRLF,FF=CRFF */
  455. ! \033&l6d66p0o0e66f0L        %letter size, portrait, no perf skip */
  456.   \0339                %reset side margins */
  457.   \033&a0r0C            %move cursor to 0,0 */
  458. --- 29,97 ----
  459.   %            \xAABB \022 A %hello
  460.   %            Passes the following bytes: 0xAA, 0xBB, 022, and "A"
  461.   %            through to the laserjet.
  462. ! %ident  @(#)lj.lib: 2.3 Copyright 93/01/07 01:45:29 Chris Lewis"
  463. ! \033E                % comment-out if your spooler resets
  464. !                 % the printer between jobs.  This is
  465. !                 % the preferable configuration - allows
  466. !                 % the spooler to supply defaults.  Ie:
  467. !                 % spooler-imposed default duplexing.
  468. ! \033&k2G            %set CR=CR,LF=CRLF,FF=CRFF */
  469. ! %    Orientation handling.
  470. ! #if _eval(landscape)
  471. !     \033&l1O
  472. ! #elif _eval(portrait)
  473. !     \033&l0O
  474. ! #elif _eval(reverse_portrait)
  475. !     \033&l2O
  476. ! #elif _eval(reverse_landscape)
  477. !     \033&l3O
  478. ! #elif default
  479. !     %    Default orientation.  Leave both undefined if you want the spooler
  480. !     %    to control things.
  481. !     \033&l0O            % uncomment for portrait default
  482. !     %\033&l1O            % uncomment for landscape default
  483. ! #endif
  484. ! %    Simplex/Duplex handling.  If your spooler can handle
  485. ! %    duplexing options (and you've removed the reset), comment
  486. ! %    out all entries in the default section.  Generally speaking,
  487. ! %    you don't have to do anything if your printer doesn't support
  488. ! %    these options.
  489. ! #if _eval(duplex_long)
  490. !     \033&l1S
  491. ! #elif _eval(duplex_short)
  492. !     \033&l2S
  493. ! #elif _eval(simplex)
  494. !     \033&l0S
  495. ! #elif default
  496. !     %\033&l0S            % uncomment for simplex default
  497. !     \033&l1S            % uncomment for duplex_long default
  498. !     %\033&l2S            % uncomment for duplex_short default
  499. ! #endif
  500. ! %    Paper input control:
  501. ! #if (paper_upper)
  502. !     \033&l1H
  503. ! #elif (paper_manual)
  504. !     \033&l2H
  505. ! #elif (envelope_manual)
  506. !     \033&l3H
  507. ! #elif (paper_lower)
  508. !     \033&l4H
  509. ! #elif (paper_deck)
  510. !     \033&l5H
  511. ! #elif (envelope_feeder)
  512. !     \033&l6H
  513. ! #elif (print_current)
  514. !     \033&l0H
  515. ! #elif default
  516. !     \033&l0H
  517. ! #endif
  518. ! \033&l0l0E            % no perf skip, no top margin
  519. ! \033*r0F            % rasters follow page orientation
  520.   \0339                %reset side margins */
  521.   \033&a0r0C            %move cursor to 0,0 */
  522. Index: ./lib/lj3.fonts
  523. *** /tmp/PATCHold/./lib/lj3.fonts    Wed Jan 13 01:58:59 1993
  524. --- ./lib/lj3.fonts    Wed Jan 13 01:59:06 1993
  525. ***************
  526. *** 1,4 ****
  527. ! #@(#)lj3.fonts 2.14 92/04/12
  528.   #    Laserjet III fonts file.
  529.   #    See lj.fonts for more explanation.
  530.   #    The first ten fonts are the built-in scaleable typefaces.
  531. --- 1,4 ----
  532. ! #@(#)lj3.fonts 2.16 93/01/02
  533.   #    Laserjet III fonts file.
  534.   #    See lj.fonts for more explanation.
  535.   #    The first ten fonts are the built-in scaleable typefaces.
  536. ***************
  537. *** 53,59 ****
  538.   co N \033(7J\245\033(8U
  539.   sq N \033(7J\273\033(8U
  540.   symbol
  541. ! br N | -80 0
  542.   eq S =
  543.   ts S \133
  544.   mi S -
  545. --- 53,60 ----
  546.   co N \033(7J\245\033(8U
  547.   sq N \033(7J\273\033(8U
  548.   symbol
  549. ! br N | -110 0
  550. ! ul N _ -10 0
  551.   eq S =
  552.   ts S \133
  553.   mi S -
  554. ***************
  555. *** 156,158 ****
  556. --- 157,160 ----
  557.   ~a    N    \342
  558.   ~n    N    \267
  559.   ~o    N    \352
  560. + ss    N    \336
  561. Index: ./lib/lj3.lib
  562. *** /tmp/PATCHold/./lib/lj3.lib    Wed Jan 13 01:59:52 1993
  563. --- ./lib/lj3.lib    Wed Jan 13 01:59:58 1993
  564. ***************
  565. *** 29,43 ****
  566.   %            \xAABB \022 A %hello
  567.   %            Passes the following bytes: 0xAA, 0xBB, 022, and "A"
  568.   %            through to the laserjet.
  569. ! %ident  @(#)lj3.lib: 2.4 Copyright 92/04/12 22:01:19 Chris Lewis"
  570. ! \033E\033&k2G            %reset printer, set CR=CR,LF=CRLF,FF=CRFF 
  571. ! \033&l6d66p0o0e66f0L        %letter size, portrait, no perf skip
  572. ! \0339                %reset side margins
  573. ! \033&a0h0V            %move cursor to 0,0
  574. ! \033*c6120x7920y0T\033\045 1B    %set HP-GL/2 picture frame, go to HP-GL/2
  575. ! IN;WU0;PW0.2;SP1;        %initialize, pen widths in MM, 0.36MM for pen 1
  576. ! LA1,4,2,4;            %set round line caps & joins
  577.   TR0;                %set transparency mode off
  578. ! IP0,11176,8636,0;        %set orientation to match PCL
  579. ! SC0,2550,0,3300;PU0,0;        %scale HP-GL/2 to 300dpi dots like PCL
  580.   \033\045 1A            %return to PCL mode
  581. --- 29,108 ----
  582.   %            \xAABB \022 A %hello
  583.   %            Passes the following bytes: 0xAA, 0xBB, 022, and "A"
  584.   %            through to the laserjet.
  585. ! %ident  @(#)lj3.lib: 2.6 Copyright 93/01/07 01:45:32 Chris Lewis"
  586. ! \033E                % comment-out if your spooler resets
  587. !                 % the printer between jobs.  This is
  588. !                 % the preferable configuration - allows
  589. !                 % the spooler to supply defaults.  Ie:
  590. !                 % spooler-imposed default duplexing.
  591. ! \033&k2G            %set CR=CR,LF=CRLF,FF=CRFF */
  592. ! %    Orientation handling.
  593. ! #if _eval(landscape)
  594. !     \033&l1O
  595. ! #elif _eval(portrait)
  596. !     \033&l0O
  597. ! #elif _eval(reverse_portrait)
  598. !     \033&l2O
  599. ! #elif _eval(reverse_landscape)
  600. !     \033&l3O
  601. ! #elif default
  602. !     %    Default orientation.  Leave both undefined if you want the spooler
  603. !     %    to control things.
  604. !     \033&l0O            % uncomment for portrait default
  605. !     %\033&l1O            % uncomment for landscape default
  606. ! #endif
  607. ! %    Simplex/Duplex handling.  If your spooler can handle
  608. ! %    duplexing options (and you've removed the reset), comment
  609. ! %    out all entries in the default section.  Generally speaking,
  610. ! %    you don't have to do anything if your printer doesn't support
  611. ! %    these options.
  612. ! #if _eval(duplex_long)
  613. !     \033&l1S
  614. ! #elif _eval(duplex_short)
  615. !     \033&l2S
  616. ! #elif _eval(simplex)
  617. !     \033&l0S
  618. ! #elif default
  619. !     %\033&l0S            % uncomment for simplex default
  620. !     \033&l1S            % uncomment for duplex_long default
  621. !     %\033&l2S            % uncomment for duplex_short default
  622. ! #endif
  623. ! %    Paper input control:
  624. ! #if (paper_upper)
  625. !     \033&l1H
  626. ! #elif (paper_manual)
  627. !     \033&l2H
  628. ! #elif (envelope_manual)
  629. !     \033&l3H
  630. ! #elif (paper_lower)
  631. !     \033&l4H
  632. ! #elif (paper_deck)
  633. !     \033&l5H
  634. ! #elif (envelope_feeder)
  635. !     \033&l6H
  636. ! #elif (print_current)
  637. !     \033&l0H
  638. ! #elif default
  639. !     \033&l0H
  640. ! #endif
  641. ! \033&l0l0E            %no perf skip, no top margin
  642. ! \033*r0F            %rasters follow page orientation
  643. ! \0339                %reset side margins */
  644. ! \033&a0r0C            %move cursor to 0,0 */
  645. ! %    HP/GL2 control
  646. ! \033*c_eval(pagewidth,d)x_eval(pagelength,d)y0T    % HP/GL pictureframe
  647. ! \033\045 1B            %go into HP-GL/2
  648. ! IN;WU0;PW0.2;SP1;        %initialize, penwidths in MM, .2MM for pen 1
  649. ! LA1,4,2,4;            %round line caps and joins
  650.   TR0;                %set transparency mode off
  651. !                 %set orientation to match PCL
  652. ! IP0,_eval(pagelength,1016),_eval(pagewidth,1016),0;
  653. !                 %scale HP-GL/2 to 300dpi dots like PCL
  654. ! SC0,_eval(pagewidth),0,_eval(pagelength);PU0,0;
  655.   \033\045 1A            %return to PCL mode
  656. Index: ./lib/ps.fonts
  657. *** /tmp/PATCHold/./lib/ps.fonts    Wed Jan 13 02:00:34 1993
  658. --- ./lib/ps.fonts    Wed Jan 13 02:00:38 1993
  659. ***************
  660. *** 1,4 ****
  661. ! #@(#)ps.fonts 2.6 92/05/21 01:56:49
  662.   #    DO NOT CHANGE THE ORDER OF THE FIRST FOUR LINES - THESE ARE
  663.   #    THE DEFAULT TROFF FONTS IN POSITIONS 1-5.  IN PARTICULAR, IF
  664.   #    SYMBOL ISN'T THE FOURTH ENTRY AND BRACKETFONT ISN'T THE FIFTH,
  665. --- 1,4 ----
  666. ! #@(#)ps.fonts 2.7 92/12/02 01:57:04
  667.   #    DO NOT CHANGE THE ORDER OF THE FIRST FOUR LINES - THESE ARE
  668.   #    THE DEFAULT TROFF FONTS IN POSITIONS 1-5.  IN PARTICULAR, IF
  669.   #    SYMBOL ISN'T THE FOURTH ENTRY AND BRACKETFONT ISN'T THE FIFTH,
  670. ***************
  671. *** 24,35 ****
  672. --- 24,38 ----
  673.   BR    Bookman-Light
  674.   BX    Bookman-DemiItalic
  675.   C    Courier
  676. + CW    Courier
  677.   CB    Courier-Bold
  678.   CO    Courier-Oblique
  679. + CI    Courier-Oblique
  680.   CX    Courier-BoldOblique
  681.   H    Helvetica
  682.   HB    Helvetica-Bold
  683.   HO    Helvetica-Oblique
  684. + HI    Helvetica-Oblique
  685.   HX    Helvetica-BoldOblique
  686.   Hb    Helvetica-Narrow-Bold
  687.   Hr    Helvetica-Narrow
  688. ***************
  689. *** 115,118 ****
  690.   AE    N    \341
  691.   Ye    N    \245
  692.   ..    N    \310
  693. --- 118,121 ----
  694.   AE    N    \341
  695.   Ye    N    \245
  696.   ..    N    \310
  697. ! ss    N    \373
  698. Index: ./lib/ps.lib
  699. *** /tmp/PATCHold/./lib/ps.lib    Wed Jan 13 02:01:18 1993
  700. --- ./lib/ps.lib    Wed Jan 13 02:01:25 1993
  701. ***************
  702. *** 9,15 ****
  703.   %    Module:        ps.lib
  704.   %    Author:     Chris Lewis
  705.   %    Specs:        Predefinitions for PostScript
  706. ! %ident  @(#)ps.lib: 92/08/09 Copyright 92/08/09 23:48:32 Chris Lewis"
  707.   
  708.   /Y { 3 1 roll dup /CurY exch def moveto show } bind def
  709.   /X { exch CurY moveto show } bind def
  710. --- 9,15 ----
  711.   %    Module:        ps.lib
  712.   %    Author:     Chris Lewis
  713.   %    Specs:        Predefinitions for PostScript
  714. ! %ident  @(#)ps.lib: 2.18 Copyright 92/12/30 02:43:45 Chris Lewis"
  715.   
  716.   /Y { 3 1 roll dup /CurY exch def moveto show } bind def
  717.   /X { exch CurY moveto show } bind def
  718. ***************
  719. *** 227,232 ****
  720. --- 227,240 ----
  721.   
  722.   %    Emitted at beginning of page.
  723.   /StartPage {
  724. + #if _eval(landscape)
  725. +     % landscape pages.
  726. +     _eval(pagelength) 0 translate 90 rotate
  727. + #elif _eval(portrait)
  728. +     % portrait pages.
  729. + #elif default
  730. +     % default (portrait)
  731. + #endif
  732.       Form
  733.   } def
  734.   
  735. ***************
  736. *** 561,563 ****
  737. --- 569,619 ----
  738.       currentpoint 18 sub exch pop 8.5 72 mul 2 idiv exch translate
  739.   } def
  740.   /PE { SAVE restore } def
  741. + #if _eval(simplex)
  742. +     statusdict /setduplexmode known {
  743. +     statusdict begin
  744. +         false setduplexmode
  745. +     end
  746. +     } if
  747. + #elif _eval(duplex_long)
  748. +     statusdict /settumble known {
  749. +     statusdict begin
  750. +         true setduplexmode
  751. +         false settumble
  752. +     end
  753. +     } if
  754. + #elif _eval(duplex_short)
  755. +     statusdict /settumble known {
  756. +     statusdict begin
  757. +         true setduplexmode
  758. +         true settumble
  759. +     end
  760. +     } if
  761. + #elif default
  762. + %    Uncomment for default set by psroff, instead of via spooler.
  763. + %    statusdict /setduplexmode known {
  764. + %    statusdict begin
  765. + %        false setduplexmode
  766. + %    end
  767. + %    } if
  768. + #endif
  769. + #if _eval(paper_upper)
  770. +     userdict /setpapertray known {
  771. +     userdict begin
  772. +         0 setpapertray
  773. +     end
  774. +     } if
  775. + #elif _eval(paper_lower)
  776. +     userdict /setpapertray known {
  777. +     userdict begin
  778. +         1 setpapertray
  779. +     end
  780. +     } if
  781. + #elif _eval(envelope)
  782. +     userdict /setpapertray known {
  783. +     userdict begin
  784. +         2 setpapertray
  785. +     end
  786. +     } if
  787. + #endif
  788. Index: ./lib/psrofflib.S
  789. *** /tmp/PATCHold/./lib/psrofflib.S    Wed Jan 13 02:02:00 1993
  790. --- ./lib/psrofflib.S    Wed Jan 13 02:02:07 1993
  791. ***************
  792. *** 1,4 ****
  793. ! #    2.28 92/06/01
  794.   #    This file controls psroff, you can insert additional printer
  795.   #    types here.  These are eval'd *late* in processing, so that
  796.   #    you can insert $copies etc.
  797. --- 1,4 ----
  798. ! #    2.29 92/12/02
  799.   #    This file controls psroff, you can insert additional printer
  800.   #    types here.  These are eval'd *late* in processing, so that
  801.   #    you can insert $copies etc.
  802. ***************
  803. *** 262,274 ****
  804.   cdps    lparg="> /tmp/dps$$; %%LIBDIR%%/dodps /tmp/dps$$; rm /tmp/dps$$'
  805.   
  806.   #    Using groff (gtroff actually) and driving LJ3:
  807. ! #    You have to copy the lj3 widths to gtroff's width directories.
  808. ! #    Standard groff install:
  809. ! #    copy widths/widthlj3/[A-Z]* /usr/local/lib/groff/font/devlj3
  810. ! #    copy widths/widthlj3u/[A-Z]* /usr/local/lib/groff/font/devlj3u
  811. ! #    Remove the ligatures from devlj3*/[A-Z]
  812.   #
  813. ! troff=gtroff
  814.   trofftype='-T$width'
  815.   glj3    width=lj3 t2arg='-Tlj3 -plj3 -N -Z -O0 -W%%FONTDIR%%/lj3 -G1'
  816.   glj3    lparg='| lp -og -d$ptr -n$copies' ptr=laser
  817. --- 262,273 ----
  818.   cdps    lparg="> /tmp/dps$$; %%LIBDIR%%/dodps /tmp/dps$$; rm /tmp/dps$$'
  819.   
  820.   #    Using groff (gtroff actually) and driving LJ3:
  821. ! #    "make installwidths" installs the width tables and driver
  822. ! #    entries so that groff -T{lj3,lj3u,lj} will work as well as
  823. ! #    psroff -Tg{lj3,lj3u,lj}
  824.   #
  825. ! #    Assumes "standard" install location
  826. ! troff=/usr/local/bin/gtroff
  827.   trofftype='-T$width'
  828.   glj3    width=lj3 t2arg='-Tlj3 -plj3 -N -Z -O0 -W%%FONTDIR%%/lj3 -G1'
  829.   glj3    lparg='| lp -og -d$ptr -n$copies' ptr=laser
  830. ***************
  831. *** 275,280 ****
  832. --- 274,282 ----
  833.   #    Univers base:
  834.   glj3u    width=lj3u t2arg='-Tlj3 -plj3u -N -Z -O0 -W%%FONTDIR%%/lj3u -G1'
  835.   glj3u    lparg='| lp -og -d$ptr -n$copies' ptr=laser
  836. + #    Groff driving HP Laserjet PCL4
  837. + glj    width=lj t2arg='-Tlj -N -Z -O0 -W%%FONTDIR%%/lj -G1'
  838. + glj    lparg='| lp -og -d$ptr -n$copies' ptr=laser
  839.   #
  840.   #    Driving a Epson 24 pin printer with hp2pbm/pbm2e24/CAT troff
  841.   #    The quoting in lparg is very picky.
  842. Index: ./lib/lj3u.fonts
  843. *** /tmp/PATCHold/./lib/lj3u.fonts    Wed Jan 13 02:02:39 1993
  844. --- ./lib/lj3u.fonts    Wed Jan 13 02:02:42 1993
  845. ***************
  846. *** 1,4 ****
  847. ! #@(#)lj3u.fonts 2.8 92/04/12
  848.   #    Laserjet III fonts file.  Shuffled for Universal as primary typeface.
  849.   #    See lj.fonts for more explanation.
  850.   #    The first ten fonts are the built-in scaleable typefaces.
  851. --- 1,4 ----
  852. ! #@(#)lj3u.fonts 2.10 93/01/02
  853.   #    Laserjet III fonts file.  Shuffled for Universal as primary typeface.
  854.   #    See lj.fonts for more explanation.
  855.   #    The first ten fonts are the built-in scaleable typefaces.
  856. ***************
  857. *** 53,59 ****
  858.   co N \033(7J\245\033(8U
  859.   sq N \033(7J\273\033(8U
  860.   symbol
  861. ! br N | -80 0
  862.   eq S =
  863.   ts S \133
  864.   mi S -
  865. --- 53,60 ----
  866.   co N \033(7J\245\033(8U
  867.   sq N \033(7J\273\033(8U
  868.   symbol
  869. ! br N | -110 0
  870. ! ul N _ -10 0
  871.   eq S =
  872.   ts S \133
  873.   mi S -
  874. ***************
  875. *** 156,158 ****
  876. --- 157,160 ----
  877.   ~a    N    \342
  878.   ~n    N    \267
  879.   ~o    N    \352
  880. + ss    N    \336
  881. Index: ./widths/widthps/B
  882. 2c2
  883. < #2.3 92/08/09
  884. ---
  885. > #2.4 92/12/02
  886. 185a186
  887. > ss    56    2    0373    germandbls
  888. Index: ./widths/widthps/BI
  889. 2c2
  890. < #2.3 92/08/09
  891. ---
  892. > #2.4 92/12/02
  893. 185a186
  894. > ss    50    2    0373    germandbls
  895. Index: ./widths/widthps/C
  896. 2c2
  897. < #2.3 92/08/09
  898. ---
  899. > #2.4 92/12/02
  900. 180a181
  901. > ss    60    2    0373    germandbls
  902. Index: ./widths/widthps/CB
  903. 2c2
  904. < #2.3 92/08/09
  905. ---
  906. > #2.4 92/12/02
  907. 180a181
  908. > ss    60    2    0373    germandbls
  909. Index: ./widths/widthps/CO
  910. 2c2
  911. < #2.3 92/08/09
  912. ---
  913. > #2.4 92/12/02
  914. 180a181
  915. > ss    60    2    0373    germandbls
  916. Index: ./widths/widthps/CX
  917. 2c2
  918. < #2.3 92/08/09
  919. ---
  920. > #2.4 92/12/02
  921. 180a181
  922. > ss    60    2    0373    germandbls
  923. Index: ./widths/widthps/DESC
  924. 1c1
  925. < #    2.5 92/06/06 (From tpscript) extended for use with ditroff
  926. ---
  927. > #    2.6 92/12/02 (From tpscript) extended for use with ditroff
  928. 32c32
  929. < ul vS vs ~= ~A ~N ~O ~a ~n ~o
  930. ---
  931. > ul vS vs ~= ~A ~N ~O ~a ~n ~o ss
  932. Index: ./widths/widthps/H
  933. 2c2
  934. < #2.3 92/08/09
  935. ---
  936. > #2.4 92/12/02
  937. 185a186
  938. > ss    61    2    0373    germandbls
  939. Index: ./widths/widthps/HB
  940. 2c2
  941. < #2.4 92/08/09
  942. ---
  943. > #2.5 92/12/02
  944. 185a186
  945. > ss    61    2    0373    germandbls
  946. Index: ./widths/widthps/HO
  947. 2c2
  948. < #2.4 92/08/09
  949. ---
  950. > #2.5 92/12/02
  951. 185a186
  952. > ss    61    2    0373    germandbls
  953. Index: ./widths/widthps/HX
  954. 2c2
  955. < #2.4 92/08/09
  956. ---
  957. > #2.5 92/12/02
  958. 185a186
  959. > ss    61    2    0373    germandbls
  960. Index: ./widths/widthps/I
  961. 2c2
  962. < #2.3 92/08/09
  963. ---
  964. > #2.4 92/12/02
  965. 185a186
  966. > ss    50    3    0373    germandbls
  967. Index: ./widths/widthps/R
  968. 2c2
  969. < #2.3 92/08/09
  970. ---
  971. > #2.4 92/12/02
  972. 185a186
  973. > ss    50    2    0373    germandbls
  974. Index: ./widths/widthlj3/DESC
  975. *** /tmp/PATCHold/./widths/widthlj3/DESC    Wed Jan 13 02:10:41 1993
  976. --- ./widths/widthlj3/DESC    Wed Jan 13 02:10:44 1993
  977. ***************
  978. *** 1,4 ****
  979. ! #    2.5 92/02/13
  980.   #    special fonts have to go at the end or else troff
  981.   #    won't know about their numbers unless you do .fp
  982.   #
  983. --- 1,4 ----
  984. ! #    2.6 93/01/01
  985.   #    special fonts have to go at the end or else troff
  986.   #    won't know about their numbers unless you do .fp
  987.   #
  988. ***************
  989. *** 23,26 ****
  990.   dg di em eq es ff fi fl fm ga gr hy ib if ip is lb lc lf lh
  991.   lk lt mi mo mu no oA oa or pd pl pt r! r? rb rc rf rg rh rk
  992.   rn rt ru sb sc sl sp sq sr ts ua ul ~= ~A ~N ~O ~a ~n ~o vs
  993. ! vS
  994. --- 23,26 ----
  995.   dg di em eq es ff fi fl fm ga gr hy ib if ip is lb lc lf lh
  996.   lk lt mi mo mu no oA oa or pd pl pt r! r? rb rc rf rg rh rk
  997.   rn rt ru sb sc sl sp sq sr ts ua ul ~= ~A ~N ~O ~a ~n ~o vs
  998. ! vS ss
  999. Index: ./widths/widthlj3/I
  1000. *** /tmp/PATCHold/./widths/widthlj3/I    Wed Jan 13 02:11:22 1993
  1001. --- ./widths/widthlj3/I    Wed Jan 13 02:11:25 1993
  1002. ***************
  1003. *** 1,5 ****
  1004.   # Times-Italic
  1005. ! #2.6 92/03/03
  1006.   name I
  1007.   internalname TmsItalic
  1008.   ligatures fi fl 0
  1009. --- 1,5 ----
  1010.   # Times-Italic
  1011. ! #2.7 93/01/01
  1012.   name I
  1013.   internalname TmsItalic
  1014.   ligatures fi fl 0
  1015. ***************
  1016. *** 193,195 ****
  1017. --- 193,196 ----
  1018.   ~a    18    2    0342    atilde
  1019.   ~n    18    2    0267    ntilde
  1020.   ~o    18    2    0352    otilde
  1021. + ss    18    2    0336    germandbls (width a guess)
  1022. Index: ./widths/widthlj3/R
  1023. *** /tmp/PATCHold/./widths/widthlj3/R    Wed Jan 13 02:11:54 1993
  1024. --- ./widths/widthlj3/R    Wed Jan 13 02:11:58 1993
  1025. ***************
  1026. *** 1,5 ****
  1027.   # Times-Roman
  1028. ! #2.6 92/03/03
  1029.   name R
  1030.   internalname TmsRoman
  1031.   ligatures fi fl 0
  1032. --- 1,5 ----
  1033.   # Times-Roman
  1034. ! #2.7 93/01/01
  1035.   name R
  1036.   internalname TmsRoman
  1037.   ligatures fi fl 0
  1038. ***************
  1039. *** 193,195 ****
  1040. --- 193,196 ----
  1041.   ~a    16    2    0342    atilde
  1042.   ~n    18    2    0267    ntilde
  1043.   ~o    18    2    0352    otilde
  1044. + ss    18    2    0336    germandbls (width a guess)
  1045. Index: ./widths/widthlj3/X
  1046. *** /tmp/PATCHold/./widths/widthlj3/X    Wed Jan 13 02:12:28 1993
  1047. --- ./widths/widthlj3/X    Wed Jan 13 02:12:31 1993
  1048. ***************
  1049. *** 1,5 ****
  1050.   # Times-BoldItalic
  1051. ! #2.7 92/03/03
  1052.   name X
  1053.   internalname TmsBdIt
  1054.   ligatures fi fl 0
  1055. --- 1,5 ----
  1056.   # Times-BoldItalic
  1057. ! #2.8 93/01/01
  1058.   name X
  1059.   internalname TmsBdIt
  1060.   ligatures fi fl 0
  1061. ***************
  1062. *** 193,195 ****
  1063. --- 193,196 ----
  1064.   ~a    18    2    0342    atilde
  1065.   ~n    20    2    0267    ntilde
  1066.   ~o    18    2    0352    otilde
  1067. + ss    18    2    0336    germandbls (width a guess)
  1068. Index: ./widths/widthlj3/B
  1069. *** /tmp/PATCHold/./widths/widthlj3/B    Wed Jan 13 02:13:01 1993
  1070. --- ./widths/widthlj3/B    Wed Jan 13 02:13:05 1993
  1071. ***************
  1072. *** 1,5 ****
  1073.   # Times-Bold
  1074. ! #2.6 92/03/03
  1075.   name B
  1076.   internalname TmsBold
  1077.   ligatures fi fl 0
  1078. --- 1,5 ----
  1079.   # Times-Bold
  1080. ! #2.7 93/01/01
  1081.   name B
  1082.   internalname TmsBold
  1083.   ligatures fi fl 0
  1084. ***************
  1085. *** 193,195 ****
  1086. --- 193,196 ----
  1087.   ~a    18    2    0342    atilde
  1088.   ~n    20    2    0267    ntilde
  1089.   ~o    18    2    0352    otilde
  1090. + ss    18    2    0336    germandbls (width a guess)
  1091. Index: ./widths/Makefile
  1092. *** /tmp/PATCHold/./widths/Makefile    Wed Jan 13 02:13:33 1993
  1093. --- ./widths/Makefile    Wed Jan 13 02:13:38 1993
  1094. ***************
  1095. *** 4,10 ****
  1096.   #    See the LICENSE file for a full description of the restrictions
  1097.   #    under which this software is provided.
  1098.   #
  1099. ! #2.20 91/12/26
  1100.   SCRIPTS    = gfnttab genext installdit
  1101.   TD    = testdir
  1102.   PSW    = \
  1103. --- 4,10 ----
  1104.   #    See the LICENSE file for a full description of the restrictions
  1105.   #    under which this software is provided.
  1106.   #
  1107. ! #2.22 92/12/22
  1108.   SCRIPTS    = gfnttab genext installdit
  1109.   TD    = testdir
  1110.   PSW    = \
  1111. ***************
  1112. *** 18,23 ****
  1113. --- 18,24 ----
  1114.       widthps/BI widthps/Hr widthps/PI widthps/BO widthps/H \
  1115.       widthps/Hx widthps/PR \
  1116.       widthlj/DESC
  1117. + ALIASES    = widthps/CW widthps/CI widthps/HI
  1118.   LJ3W    = \
  1119.       widthlj3/DESC widthlj3/S2 \
  1120.           widthlj3/B widthlj3/I widthlj3/R widthlj3/S widthlj3/X \
  1121. ***************
  1122. *** 26,36 ****
  1123.   
  1124.   include ../makeincl
  1125.   
  1126. ! all:    subst.done $(PSW) $(LJ3W) lj3ext dit2catwid $(SCRIPTS) ljwidths \
  1127.       widths extensions
  1128.   
  1129. ! unsccswidths:    $(PSW) $(LJ3W)
  1130.   
  1131.   lj3ext:        $(LJ3W)
  1132.       @$(IGNORESH) for i in R I B X ; \
  1133.       do \
  1134. --- 27,39 ----
  1135.   
  1136.   include ../makeincl
  1137.   
  1138. ! all:    subst.done $(PSW) $(ALIASES) $(LJ3W) lj3ext dit2catwid $(SCRIPTS) ljwidths \
  1139.       widths extensions
  1140.   
  1141. ! unsccswidths:    $(PSW) $(ALIASES) $(LJ3W)
  1142.   
  1143. + aliases:    $(ALIASES)
  1144.   lj3ext:        $(LJ3W)
  1145.       @$(IGNORESH) for i in R I B X ; \
  1146.       do \
  1147. ***************
  1148. *** 47,52 ****
  1149. --- 50,71 ----
  1150.       @eval `echo $@ | sed -e 's/\(.*\)\/\([^\/]*\)$$/d=\1 f=s.\2 n=&/'` ; \
  1151.           cd $$d ; echo Extracting $$n ; $(GET) -s $(GFLAGS) $$f
  1152.   
  1153. + #    Aliasing/compability with Transcript etc.
  1154. + widthps/CW:    widthps/C
  1155. +     rm -f widthps/CW tmp
  1156. +     sed -e 's/name C[     ]*$$/name CW/' widthps/C > tmp
  1157. +     mv tmp widthps/CW
  1158. + widthps/CI:    widthps/CO
  1159. +     rm -f widthps/CI tmp
  1160. +     sed -e 's/name CO[     ]*$$/name CI/' widthps/CO > tmp
  1161. +     mv tmp widthps/CI
  1162. + widthps/HI:    widthps/HO
  1163. +     rm -f widthps/HI tmp
  1164. +     sed -e 's/name HO[     ]*$$/name HI/' widthps/HO > tmp
  1165. +     mv tmp widthps/HI
  1166.   ditwidths:
  1167.       cd ../lib ; $(MAKE) psrofflib
  1168.       ./installdit
  1169. ***************
  1170. *** 201,206 ****
  1171. --- 220,226 ----
  1172.               args= ; \
  1173.               fi ; \
  1174.               echo "Creating widthlj/$$font from $$file" ; \
  1175. +             echo ../utils/pk2ditwid $$args $$file ; \
  1176.               ../utils/pk2ditwid $$args $$file >> pk2dit.log \
  1177.               2>> pk2dit.err ; \
  1178.               if [ $$? != 0 ] ; \
  1179. ***************
  1180. *** 294,299 ****
  1181. --- 314,320 ----
  1182.       rm -f gfnttab.log pk2dit.log pk2sep.log pk2dit.err pk2sep.err
  1183.       rm -f */[A-Z]*.out */*.ext lj3ext
  1184.       rm -f widthlj3/U[RIBX] widthlj3u/T[RIBX]
  1185. +     rm -f $(ALIASES)
  1186.   
  1187.   dit2catwid.o:    ../defs.h
  1188.   
  1189. Index: ./widths/dit2catwid.c
  1190. *** /tmp/PATCHold/./widths/dit2catwid.c    Wed Jan 13 02:14:05 1993
  1191. --- ./widths/dit2catwid.c    Wed Jan 13 02:14:13 1993
  1192. ***************
  1193. *** 10,16 ****
  1194.   
  1195.   #ifndef    lint
  1196.   static char SCCSID[] =
  1197. !     "@(#)dit2catwid.c 2.10 Copyright 91/10/17 19:56:13 Chris Lewis";
  1198.   #endif
  1199.   
  1200.   #include <stdio.h>
  1201. --- 10,16 ----
  1202.   
  1203.   #ifndef    lint
  1204.   static char SCCSID[] =
  1205. !     "@(#)dit2catwid.c 2.11 Copyright 92/12/04 23:18:26 Chris Lewis";
  1206.   #endif
  1207.   
  1208.   #include <stdio.h>
  1209. ***************
  1210. *** 334,340 ****
  1211.   mustmalloc(n)
  1212.   register int n; {
  1213.       register char *p;
  1214. -     extern char *malloc();
  1215.       p = malloc(n);
  1216.       if (!p) {
  1217.       fprintf(stderr, "%s: cannot alloc %d bytes\n", progname, n);
  1218. --- 334,339 ----
  1219. Index: ./widths/widthlj3u/B
  1220. *** /tmp/PATCHold/./widths/widthlj3u/B    Wed Jan 13 02:14:50 1993
  1221. --- ./widths/widthlj3u/B    Wed Jan 13 02:14:51 1993
  1222. ***************
  1223. *** 1,5 ****
  1224.   # Univers-Bold
  1225. ! #2.6 92/03/03
  1226.   name B
  1227.   internalname UniBold
  1228.   ligatures fi fl 0
  1229. --- 1,5 ----
  1230.   # Univers-Bold
  1231. ! #2.7 93/01/02
  1232.   name B
  1233.   internalname UniBold
  1234.   ligatures fi fl 0
  1235. ***************
  1236. *** 193,195 ****
  1237. --- 193,196 ----
  1238.   ~a    19    2    0342    atilde
  1239.   ~n    21    2    0267    ntilde
  1240.   ~o    21    2    0352    otilde
  1241. + ss    18    2    0336    germandbls (width a guess)
  1242. Index: ./widths/widthlj3u/I
  1243. *** /tmp/PATCHold/./widths/widthlj3u/I    Wed Jan 13 02:15:10 1993
  1244. --- ./widths/widthlj3u/I    Wed Jan 13 02:15:13 1993
  1245. ***************
  1246. *** 1,5 ****
  1247.   # Univers-Italic
  1248. ! #2.6 92/03/03
  1249.   name I
  1250.   internalname UniItalic
  1251.   ligatures fi fl 0
  1252. --- 1,5 ----
  1253.   # Univers-Italic
  1254. ! #2.7 93/01/02
  1255.   name I
  1256.   internalname UniItalic
  1257.   ligatures fi fl 0
  1258. ***************
  1259. *** 193,195 ****
  1260. --- 193,196 ----
  1261.   ~a    19    2    0342    atilde
  1262.   ~n    21    2    0267    ntilde
  1263.   ~o    21    2    0352    otilde
  1264. + ss    18    2    0336    germandbls (width a guess)
  1265. Index: ./widths/widthlj3u/R
  1266. *** /tmp/PATCHold/./widths/widthlj3u/R    Wed Jan 13 02:15:30 1993
  1267. --- ./widths/widthlj3u/R    Wed Jan 13 02:15:32 1993
  1268. ***************
  1269. *** 1,5 ****
  1270.   # Univers-Roman
  1271. ! #2.6 92/03/03
  1272.   name R
  1273.   internalname UniRoman
  1274.   ligatures fi fl 0
  1275. --- 1,5 ----
  1276.   # Univers-Roman
  1277. ! #2.7 93/01/02
  1278.   name R
  1279.   internalname UniRoman
  1280.   ligatures fi fl 0
  1281. ***************
  1282. *** 193,195 ****
  1283. --- 193,196 ----
  1284.   ~a    19    2    0342    atilde
  1285.   ~n    21    2    0267    ntilde
  1286.   ~o    21    2    0352    otilde
  1287. + ss    18    2    0336    germandbls (width a guess)
  1288. Index: ./widths/widthlj3u/X
  1289. *** /tmp/PATCHold/./widths/widthlj3u/X    Wed Jan 13 02:15:40 1993
  1290. --- ./widths/widthlj3u/X    Wed Jan 13 02:15:41 1993
  1291. ***************
  1292. *** 1,5 ****
  1293.   # Univers-BoldItalic
  1294. ! #2.6 92/03/03
  1295.   name X
  1296.   internalname UniBdIt
  1297.   ligatures fi fl 0
  1298. --- 1,5 ----
  1299.   # Univers-BoldItalic
  1300. ! #2.7 93/01/02
  1301.   name X
  1302.   internalname UniBdIt
  1303.   ligatures fi fl 0
  1304. ***************
  1305. *** 193,195 ****
  1306. --- 193,196 ----
  1307.   ~a    19    2    0342    atilde
  1308.   ~n    21    2    0267    ntilde
  1309.   ~o    21    2    0352    otilde
  1310. + ss    18    2    0336    germandbls (width a guess)
  1311. Index: ./widths/widthlj3u/DESC
  1312. *** /tmp/PATCHold/./widths/widthlj3u/DESC    Wed Jan 13 02:15:50 1993
  1313. --- ./widths/widthlj3u/DESC    Wed Jan 13 02:15:51 1993
  1314. ***************
  1315. *** 1,4 ****
  1316. ! #    2.3 92/02/13
  1317.   #    special fonts have to go at the end or else troff
  1318.   #    won't know about their numbers unless you do .fp
  1319.   #
  1320. --- 1,4 ----
  1321. ! #    2.4 93/01/01
  1322.   #    special fonts have to go at the end or else troff
  1323.   #    won't know about their numbers unless you do .fp
  1324.   #
  1325. ***************
  1326. *** 23,26 ****
  1327.   dg di em eq es ff fi fl fm ga gr hy ib if ip is lb lc lf lh
  1328.   lk lt mi mo mu no oA oa or pd pl pt r! r? rb rc rf rg rh rk
  1329.   rn rt ru sb sc sl sp sq sr ts ua ul ~= ~A ~N ~O ~a ~n ~o vs
  1330. ! vS
  1331. --- 23,26 ----
  1332.   dg di em eq es ff fi fl fm ga gr hy ib if ip is lb lc lf lh
  1333.   lk lt mi mo mu no oA oa or pd pl pt r! r? rb rc rf rg rh rk
  1334.   rn rt ru sb sc sl sp sq sr ts ua ul ~= ~A ~N ~O ~a ~n ~o vs
  1335. ! vS ss
  1336. Index: ./utils/maps/cmtt.ROMAN8
  1337. *** /tmp/PATCHold/./utils/maps/cmtt.ROMAN8    Wed Jan 13 02:16:00 1993
  1338. --- ./utils/maps/cmtt.ROMAN8    Wed Jan 13 02:16:01 1993
  1339. ***************
  1340. *** 1,4 ****
  1341. ! #    2.1 90/07/18
  1342.   #    cmtt family roman.
  1343.   !
  1344.   0x22    0x22    "
  1345. --- 1,4 ----
  1346. ! #    2.2 92/12/30
  1347.   #    cmtt family roman.
  1348.   !
  1349.   0x22    0x22    "
  1350. ***************
  1351. *** 15,30 ****
  1352.   -
  1353.   .
  1354.   /
  1355. ! 0
  1356. ! 1
  1357. ! 2
  1358. ! 3
  1359. ! 4
  1360. ! 5
  1361. ! 6
  1362. ! 7
  1363. ! 8
  1364. ! 9
  1365.   :
  1366.   ;
  1367.   <
  1368. --- 15,30 ----
  1369.   -
  1370.   .
  1371.   /
  1372. ! 0x30
  1373. ! 0x31
  1374. ! 0x32
  1375. ! 0x33
  1376. ! 0x34
  1377. ! 0x35
  1378. ! 0x36
  1379. ! 0x37
  1380. ! 0x38
  1381. ! 0x39
  1382.   :
  1383.   ;
  1384.   <
  1385. Index: ./utils/Makefile
  1386. *** /tmp/PATCHold/./utils/Makefile    Wed Jan 13 02:16:13 1993
  1387. --- ./utils/Makefile    Wed Jan 13 02:16:14 1993
  1388. ***************
  1389. *** 4,10 ****
  1390.   #    See the LICENSE file for a full description of the restrictions
  1391.   #    under which this software is provided.
  1392.   #
  1393. ! #2.12 92/10/30
  1394.   SCRIPTS    = psdtwd showfont mkenctab calcfonts catconv dodps
  1395.   PROGRAMS = hpinterp psxlate pk2sfp pk2ditwid pktype dumpft pk2ps lj2ps \
  1396.       asc2ps
  1397. --- 4,10 ----
  1398.   #    See the LICENSE file for a full description of the restrictions
  1399.   #    under which this software is provided.
  1400.   #
  1401. ! #2.13 92/12/04
  1402.   SCRIPTS    = psdtwd showfont mkenctab calcfonts catconv dodps
  1403.   PROGRAMS = hpinterp psxlate pk2sfp pk2ditwid pktype dumpft pk2ps lj2ps \
  1404.       asc2ps
  1405. ***************
  1406. *** 34,39 ****
  1407. --- 34,43 ----
  1408.       cd ../ ; ./troff2ps -Tlj -z > utils/T
  1409.       ./mkenctab T ljtab.c
  1410.       rm -f T
  1411. + ../lib/lj.fonts:
  1412. +     cd ../lib ; make lj.fonts
  1413.   
  1414.   #    This isn't perfect, but close
  1415.   ../debug.o ../pk.o ../cattab.o ../pkscale.o: ../defs.h ../pk.h
  1416. Index: ./utils/catconv.S
  1417. *** /tmp/PATCHold/./utils/catconv.S    Wed Jan 13 02:16:23 1993
  1418. --- ./utils/catconv.S    Wed Jan 13 02:16:24 1993
  1419. ***************
  1420. *** 10,16 ****
  1421.   #
  1422.   #    This does a very simpleminded conversion of ditroff-only-isms
  1423.   #    (such as graphics) into something handleable by CAT troff.
  1424. ! #    1.12 92/11/26
  1425.   $cc{'em'}=1; $cc{'ru'}=1; $cc{'14'}=1; $cc{'12'}=1; $cc{'hy'}=1;
  1426.   $cc{'34'}=1; $cc{'fi'}=1; $cc{'fl'}=1; $cc{'ff'}=1; $cc{'ct'}=1;
  1427.   $cc{'Fl'}=1; $cc{'Fi'}=1; $cc{'de'}=1; $cc{'dg'}=1; $cc{'rg'}=1;
  1428. --- 10,16 ----
  1429.   #
  1430.   #    This does a very simpleminded conversion of ditroff-only-isms
  1431.   #    (such as graphics) into something handleable by CAT troff.
  1432. ! #    1.13 92/12/22
  1433.   $cc{'em'}=1; $cc{'ru'}=1; $cc{'14'}=1; $cc{'12'}=1; $cc{'hy'}=1;
  1434.   $cc{'34'}=1; $cc{'fi'}=1; $cc{'fl'}=1; $cc{'ff'}=1; $cc{'ct'}=1;
  1435.   $cc{'Fl'}=1; $cc{'Fi'}=1; $cc{'de'}=1; $cc{'dg'}=1; $cc{'rg'}=1;
  1436. ***************
  1437. *** 114,120 ****
  1438.           } else {
  1439.           printf STDERR "Don't know the width of \\($char";
  1440.           }
  1441. !         $newline .= "\\ka\\o'\\(bs\\(bs'C$char\\(bs\\h'|\\nau+\\w\"$w\"'";
  1442.       }
  1443.       }
  1444.       $newline .= $line;
  1445. --- 114,120 ----
  1446.           } else {
  1447.           printf STDERR "Don't know the width of \\($char";
  1448.           }
  1449. !         $newline .= "\\ka\\o'\\(bs\\(bs'C$char\\(bs\\h'|\\nau+\\w$w'";
  1450.       }
  1451.       }
  1452.       $newline .= $line;
  1453. Index: ./utils/pk2ditwid.c
  1454. *** /tmp/PATCHold/./utils/pk2ditwid.c    Wed Jan 13 02:16:32 1993
  1455. --- ./utils/pk2ditwid.c    Wed Jan 13 02:16:33 1993
  1456. ***************
  1457. *** 10,16 ****
  1458.   
  1459.   #ifndef    lint
  1460.   static char SCCSID[] =
  1461. !     "@(#)pk2ditwid.c 2.5 Copyright 92/11/26 19:45:39 Chris Lewis";
  1462.   #endif
  1463.   
  1464.   #include "defs.h"
  1465. --- 10,16 ----
  1466.   
  1467.   #ifndef    lint
  1468.   static char SCCSID[] =
  1469. !     "@(#)pk2ditwid.c 2.6 Copyright 92/12/22 09:02:30 Chris Lewis";
  1470.   #endif
  1471.   
  1472.   #include "defs.h"
  1473. ***************
  1474. *** 32,38 ****
  1475.   FILE *fout = NULL;
  1476.   char *progname;
  1477.   
  1478. ! #define    UNITWIDTH    10
  1479.   
  1480.   main(argc, argv)
  1481.   int argc;
  1482. --- 32,39 ----
  1483.   FILE *fout = NULL;
  1484.   char *progname;
  1485.   
  1486. ! int unitwidth = 10;
  1487. ! int outputres = OUTRES;
  1488.   
  1489.   main(argc, argv)
  1490.   int argc;
  1491. ***************
  1492. *** 45,52 ****
  1493.       struct enctab *et;
  1494.   
  1495.       progname = argv[0];
  1496. !     while((c = getopt(argc, argv, "AD:sS")) != EOF) {
  1497.       switch(c) {
  1498.           case 's':
  1499.           silent = 1;
  1500.           break;
  1501. --- 46,69 ----
  1502.       struct enctab *et;
  1503.   
  1504.       progname = argv[0];
  1505. !     while((c = getopt(argc, argv, "AD:sSr:u:")) != EOF) {
  1506.       switch(c) {
  1507. +         case 'u':
  1508. +         unitwidth = atoi(optarg);
  1509. +         if (unitwidth < 1) {
  1510. +             fprintf(stderr, "%s: invalid unitwidth: -u%s\n",
  1511. +             progname, optarg);
  1512. +             exit(1);
  1513. +         }
  1514. +         break;
  1515. +         case 'r':
  1516. +         outputres = atoi(optarg);
  1517. +         if (outputres < 1) {
  1518. +             fprintf(stderr, "%s: invalid outputres: -u%s\n",
  1519. +             progname, optarg);
  1520. +             exit(1);
  1521. +         }
  1522. +         break;
  1523.           case 's':
  1524.           silent = 1;
  1525.           break;
  1526. ***************
  1527. *** 123,129 ****
  1528.       if (allflag) {
  1529.           fprintf(fout,
  1530.           "Width: width of character at %d points at %dDPI\n",
  1531. !         UNITWIDTH, OUTRES);
  1532.           fprintf(fout,
  1533.           "Kern: 2 for ascenders, 1 for descenders or'd together\n");
  1534.           fprintf(fout, "Code: Hexidecimal code\n");
  1535. --- 140,146 ----
  1536.       if (allflag) {
  1537.           fprintf(fout,
  1538.           "Width: width of character at %d points at %dDPI\n",
  1539. !         unitwidth, outputres);
  1540.           fprintf(fout,
  1541.           "Kern: 2 for ascenders, 1 for descenders or'd together\n");
  1542.           fprintf(fout, "Code: Hexidecimal code\n");
  1543. ***************
  1544. *** 131,140 ****
  1545.       } else {
  1546.           fprintf(fout, "# %s\n", buf);
  1547.           fprintf(fout, "# Generated by pk2ditwid\n");
  1548.           fprintf(fout, "name %s\n", buf);
  1549.           if (buf[0] == 'S')
  1550.           fprintf(fout, "special\n");
  1551. !         fprintf(fout, "spacewidth 22\n");
  1552.           fprintf(fout, "charset\n");
  1553.       }
  1554.   
  1555. --- 148,159 ----
  1556.       } else {
  1557.           fprintf(fout, "# %s\n", buf);
  1558.           fprintf(fout, "# Generated by pk2ditwid\n");
  1559. +         fprintf(fout, "# -u%d -r%d\n", unitwidth, outputres);
  1560.           fprintf(fout, "name %s\n", buf);
  1561.           if (buf[0] == 'S')
  1562.           fprintf(fout, "special\n");
  1563. !         fprintf(fout, "spacewidth %d\n", 22 * unitwidth * outputres / 
  1564. !         (10 * OUTRES));
  1565.           fprintf(fout, "charset\n");
  1566.       }
  1567.   
  1568. ***************
  1569. *** 145,153 ****
  1570.                   /* get # pixels */
  1571.           long widval = ((double) pc->pkc_dx / pow2(16)) *
  1572.                   /* normalize by actual resolution */
  1573. !                   ((double) OUTRES / pk->pkp_res) *
  1574.                   /* normalize to UNITWIDTH points */
  1575. !                   ((double) UNITWIDTH * pow2(20) / pk->pkp_ds) +
  1576.                   /* round ... */
  1577.                     0.5;
  1578.           int kern = ((pk->pkp_kh < pc->pkc_y_off) << 1) |
  1579. --- 164,172 ----
  1580.                   /* get # pixels */
  1581.           long widval = ((double) pc->pkc_dx / pow2(16)) *
  1582.                   /* normalize by actual resolution */
  1583. !                   ((double) outputres / pk->pkp_res) *
  1584.                   /* normalize to UNITWIDTH points */
  1585. !                   ((double) unitwidth * pow2(20) / pk->pkp_ds) +
  1586.                   /* round ... */
  1587.                     0.5;
  1588.           int kern = ((pk->pkp_kh < pc->pkc_y_off) << 1) |
  1589. ***************
  1590. *** 208,216 ****
  1591.                   /* get # pixels */
  1592.           long widval = ((double) pc->pkc_dx / pow2(16)) *
  1593.                   /* normalize by actual resolution */
  1594. !                   ((double) OUTRES / p->pkp_res) *
  1595.                   /* normalize to UNITWIDTH points */
  1596. !                   ((double) UNITWIDTH * pow2(20) / p->pkp_ds) +
  1597.                   /* round ... */
  1598.                     0.5;
  1599.           int kern = ((p->pkp_kh < pc->pkc_y_off) << 1) |
  1600. --- 227,235 ----
  1601.                   /* get # pixels */
  1602.           long widval = ((double) pc->pkc_dx / pow2(16)) *
  1603.                   /* normalize by actual resolution */
  1604. !                   ((double) outputres / p->pkp_res) *
  1605.                   /* normalize to UNITWIDTH points */
  1606. !                   ((double) unitwidth * pow2(20) / p->pkp_ds) +
  1607.                   /* round ... */
  1608.                     0.5;
  1609.           int kern = ((p->pkp_kh < pc->pkc_y_off) << 1) |
  1610. Index: ./utils/psxlate.c
  1611. *** /tmp/PATCHold/./utils/psxlate.c    Wed Jan 13 02:16:44 1993
  1612. --- ./utils/psxlate.c    Wed Jan 13 02:16:46 1993
  1613. ***************
  1614. *** 23,29 ****
  1615.    */
  1616.   #ifndef    lint
  1617.   static char SCCSid[] =
  1618. !     "@(#)psxlate.c: 2.20 Copyright 92/03/12 01:11:56 Chris Lewis";
  1619.   #endif
  1620.   
  1621.   #ifdef    ALONE
  1622. --- 23,29 ----
  1623.    */
  1624.   #ifndef    lint
  1625.   static char SCCSid[] =
  1626. !     "@(#)psxlate.c: 2.21 Copyright 92/12/04 23:16:31 Chris Lewis";
  1627.   #endif
  1628.   
  1629.   #ifdef    ALONE
  1630. ***************
  1631. *** 243,249 ****
  1632.   FILE *in;
  1633.   FILE *out;
  1634.   char *buffer; {
  1635. -     extern char *malloc();
  1636.       long offset;
  1637.       int state = PROLOG;
  1638.       int seen;
  1639. --- 243,248 ----
  1640. ***************
  1641. *** 574,580 ****
  1642.       register char *p;
  1643.       register long curlength;
  1644.       register int ch;
  1645. -     extern char *realloc();
  1646.   
  1647.       if (count != (long *) NULL)
  1648.       *count = curcount;
  1649. --- 573,578 ----
  1650. Index: ./tests/exttab.m
  1651. *** /tmp/PATCHold/./tests/exttab.m    Wed Jan 13 02:16:59 1993
  1652. --- ./tests/exttab.m    Wed Jan 13 02:17:00 1993
  1653. ***************
  1654. *** 1,4 ****
  1655. ! .\" DITROFF extensions 1.5
  1656.   .DS
  1657.   .EQ
  1658.   G(z)~mark =~ e sup { ln ~ G(z) }
  1659. --- 1,6 ----
  1660. ! .\" DITROFF extensions 1.7
  1661. ! .ps 20
  1662. ! .vs 24p
  1663.   .DS
  1664.   .EQ
  1665.   G(z)~mark =~ e sup { ln ~ G(z) }
  1666. ***************
  1667. *** 45,51 ****
  1668.   _
  1669.   \(vs    \e(vs    \(~A    \e(~A    \(~N    \e(~N    \(~O    \e(~O
  1670.   _
  1671. ! \(~a    \e(~a    \(~n    \e(~n    \(~o    \e(~o    
  1672.   .TE
  1673.   .bp
  1674.   .sp 1i
  1675. --- 47,53 ----
  1676.   _
  1677.   \(vs    \e(vs    \(~A    \e(~A    \(~N    \e(~N    \(~O    \e(~O
  1678.   _
  1679. ! \(~a    \e(~a    \(~n    \e(~n    \(~o    \e(~o    \(ss    \e(ss
  1680.   .TE
  1681.   .bp
  1682.   .sp 1i
  1683. Index: ./adapters/tmac.an.S
  1684. *** /tmp/PATCHold/./adapters/tmac.an.S    Wed Jan 13 02:17:19 1993
  1685. --- ./adapters/tmac.an.S    Wed Jan 13 02:17:21 1993
  1686. ***************
  1687. *** 1,4 ****
  1688. ! .\"@(#)ident tmac.an 2.1 90/07/18
  1689.   .so %%LIBDIR%%/adapters/cmn.pre
  1690.   .so %%RTMACDIR%%/tmac.an
  1691.   .\"Default offset (my version of the man macros uses it).
  1692. --- 1,4 ----
  1693. ! .\"@(#)ident tmac.an 2.2 93/01/01
  1694.   .so %%LIBDIR%%/adapters/cmn.pre
  1695.   .so %%RTMACDIR%%/tmac.an
  1696.   .\"Default offset (my version of the man macros uses it).
  1697. ***************
  1698. *** 6,11 ****
  1699. --- 6,14 ----
  1700.   .\"See if someone's using the -rO option (ala MM)
  1701.   .if \nO .nr )O \nOu
  1702.   .po \n()Ou
  1703. + .\"Fix up page length (my version of the man macros uses it)
  1704. + .if \nL .nr )L \nLu
  1705. + .pl \n()Lu
  1706.   .\"Clobber cut marks.
  1707.   .rm }C
  1708.   .so %%LIBDIR%%/adapters/cmn.post
  1709. Index: ./utils.c
  1710. *** /tmp/PATCHold/./utils.c    Wed Jan 13 02:17:39 1993
  1711. --- ./utils.c    Wed Jan 13 02:17:41 1993
  1712. ***************
  1713. *** 12,18 ****
  1714.   
  1715.   #ifndef    lint
  1716.   static char SCCSid[] =
  1717. !     "@(#)utils.c: 2.26 Copyright 92/07/09 23:34:53 Chris Lewis";
  1718.   #endif
  1719.   
  1720.   #ifndef    HEADERSIZE
  1721. --- 12,18 ----
  1722.   
  1723.   #ifndef    lint
  1724.   static char SCCSid[] =
  1725. !     "@(#)utils.c: 2.31 Copyright 92/12/31 23:54:10 Chris Lewis";
  1726.   #endif
  1727.   
  1728.   #ifndef    HEADERSIZE
  1729. ***************
  1730. *** 33,38 ****
  1731. --- 33,50 ----
  1732.   
  1733.   extern struct cattab tabN[], tabS[];
  1734.   
  1735. + char *
  1736. + mystrstr(str, pat)
  1737. + register char *str, *pat; {
  1738. +     register int n = strlen(pat);
  1739. +     while(*str && (str = strchr(str, *pat))) {
  1740. +     if (strncmp(str, pat, n) == 0)
  1741. +         return(str);
  1742. +     str++;
  1743. +     }
  1744. +     return((char *) NULL);
  1745. + }
  1746.   int lastFont, lastPoints;
  1747.   int lastYPos, lastXPos;
  1748.   
  1749. ***************
  1750. *** 43,50 ****
  1751.   struct troff2befont *extchars;
  1752.   struct cattab *extidx;
  1753.   
  1754. - extern char *malloc();
  1755.   char *skipblanks(p)
  1756.   register char *p; {
  1757.       while (*p && isspace(*p)) p++;
  1758. --- 55,60 ----
  1759. ***************
  1760. *** 59,64 ****
  1761. --- 69,348 ----
  1762.       return(p);
  1763.   }
  1764.   
  1765. + #define    PROCHUNK    20
  1766. + int procount;
  1767. + #define ST_PASSTHRU    0
  1768. + #define ST_IFPASSTHRU    1
  1769. + #define ST_IFSKIPPING    2
  1770. + #define ST_IFDONE    3
  1771. + #ifdef DEBUG
  1772. + char *stpr[] = {"passstate", "ifpassstate", "ifskipstate", "ifdonestate"};
  1773. + #endif
  1774. + #define    SEE_NONE    0
  1775. + #define    SEE_IFELSE    1
  1776. + #define    SEE_ENDIF    2
  1777. + #ifdef DEBUG
  1778. + char *sepr[] = {"none", "ifelse", "endif"};
  1779. + #endif
  1780. + void
  1781. + insprolog(arg)
  1782. + char *arg; {
  1783. +     if (!prologs) {
  1784. +     prologs = (char **) mustmalloc(PROCHUNK * sizeof(char*), "prologs");
  1785. +     procount = 0;
  1786. +     }
  1787. +     prologs[procount] = (char *) mustmalloc(strlen(arg)+1, "prolog item");
  1788. +     strcpy(prologs[procount++], arg);
  1789. +     /* insert the null */
  1790. +     if ((procount % PROCHUNK) == 0)
  1791. +     prologs = (char **) realloc((char *) prologs,
  1792. +         (procount + PROCHUNK) * sizeof(char *));
  1793. +     prologs[procount] = (char *) NULL;
  1794. + }
  1795. + #ifdef DEBUG
  1796. + dumpprologs() {
  1797. +     char **pp;
  1798. +     if (!(debug&D_SPEC) || !prologs)
  1799. +     return;
  1800. +     for (pp = prologs; *pp; pp++)
  1801. +     DBP((D_SPEC, "S prologs: %s\n", *pp));
  1802. + }
  1803. + #endif
  1804. + void
  1805. + setnp(param, value)
  1806. + char *param;
  1807. + int value; {
  1808. +     char buf[30];
  1809. +     sprintf(buf, "X%s=%d", param, value);
  1810. +     insprolog(buf);
  1811. + }
  1812. + static int outputres;
  1813. + setparams(outres)
  1814. + int outres; {
  1815. +     char buf[30];
  1816. +     outputres = outres;
  1817. +     setnp("pagelength", pagelength * outres / TROFFRESOLUTION);
  1818. +     setnp("pagewidth", pagewidth * outres / TROFFRESOLUTION);
  1819. +     setnp("pagexoffset", pageoffset * outres / TROFFRESOLUTION);
  1820. +     setnp("pageyoffset", pageyoffset * outres / TROFFRESOLUTION);
  1821. +     insprolog("Xdefault=1");
  1822. + }
  1823. + static
  1824. + preeval(line)
  1825. + char *line; {
  1826. +     int ret;
  1827. +     if (!*line)
  1828. +     return(0);
  1829. +     while(*line && isspace(*line)) line++;
  1830. +     ret = atoi(line);
  1831. +     DBP((D_SPEC, "S preeval: '%s', returns %d\n", line, ret));
  1832. +     return(ret);
  1833. + }
  1834. + static
  1835. + seetok(line, tok, len)
  1836. + char *line, *tok;
  1837. + int len; {
  1838. +     register char *t = line, *f;
  1839. +     line++;
  1840. +     while(*line && isspace(*line)) line++;
  1841. +     DBP((D_SPEC, "S seetok: (%s,%s,%d)\n", line, tok, len));
  1842. +     if (strncmp(line, tok, len) == 0 &&
  1843. +     (!*(line+len) || isspace(*(line+len)) )) {
  1844. +     for (f = line+len; *f && isspace(*f); f++);
  1845. +     if (!*f)
  1846. +         *t = '\0';
  1847. +     else
  1848. +         while(*t++ = *f++);
  1849. +     return(1);
  1850. +     } else
  1851. +     return(0);
  1852. + }
  1853. + char *
  1854. + findval(var)
  1855. + char *var; {
  1856. +     register char **pro, *pp;
  1857. +     int vlen = strlen(var);
  1858. +     if (pro = prologs)
  1859. +     for(;*pro ; pro++)
  1860. +         if (**pro == 'X') {
  1861. +         pp = (*pro) + 1;
  1862. +         if (strncmp(var, pp, vlen) == 0)
  1863. +             if (*(pp + vlen) == '\0') {
  1864. +             return("1");
  1865. +             } else if (*(pp + vlen) == '=') {
  1866. +             return(pp + vlen + 1);
  1867. +             }
  1868. +         }
  1869. +     return("");
  1870. + }
  1871. + #define    EVAL    "_eval("
  1872. + #define LENEVAL    6
  1873. + static void
  1874. + domacros(line)
  1875. + char *line; {
  1876. +     char temp[512];
  1877. +     register char *varptr, *restptr, *subs, *modptr;
  1878. +     int value;
  1879. +     while((varptr = mystrstr(line, EVAL))) {
  1880. +     if (!(restptr = strchr(varptr + LENEVAL, ')'))) {
  1881. +         fprintf(stderr, "%s: malformed _eval() in line: %s\n", progname, line);
  1882. +         return;
  1883. +     }
  1884. +     *varptr = '\0';
  1885. +     varptr += LENEVAL;
  1886. +     *restptr++ = '\0';
  1887. +     if (modptr = strchr(varptr, ','))
  1888. +         *modptr++ = '\0';
  1889. +     DBP((D_SPEC, "S _eval(%s), line: %s|SUBS|%s\n", varptr, line, restptr));
  1890. +     subs = findval(varptr);
  1891. +     strcpy(temp, line);
  1892. +     if (!modptr)
  1893. +         strcat(temp, subs);
  1894. +     else {
  1895. +         value = atoi(subs);
  1896. +         
  1897. +         if (isdigit(*modptr))
  1898. +         value *= atoi(modptr);
  1899. +         else
  1900. +         switch(*modptr) {
  1901. +             case 'i':
  1902. +             break;
  1903. +             case 'd':
  1904. +             value *= 720;
  1905. +             break;
  1906. +             case 'c':
  1907. +             value *= 2.54;
  1908. +             break;
  1909. +             case 'p':
  1910. +             value *= 72;
  1911. +             break;
  1912. +             case 'P':
  1913. +             value *= 6;
  1914. +             break;
  1915. +         }
  1916. +         value /= outputres;
  1917. +         subs = temp + strlen(temp);
  1918. +         sprintf(subs, "%d", value);
  1919. +     }
  1920. +     strcat(temp, restptr);
  1921. +     strcpy(line, temp);
  1922. +     DBP((D_SPEC, "S evalresult: %s\n", line));
  1923. +     }
  1924. + }
  1925. + /*    FSA to do preprocessing:
  1926. +         #ifelse <condition>
  1927. +         #ifelse <condition2>
  1928. +         #endif
  1929. +     Returns 1 to pass thru the line.  otherwise 0 means skip it.
  1930. +  */
  1931. + int
  1932. + preproc(line, state)
  1933. + char *line;
  1934. + int *state; {
  1935. +     int seenflag = SEE_NONE;
  1936. +     register char *p;
  1937. +     if (p = strchr(line, '\n'))
  1938. +     *p = '\0';
  1939. +     domacros(line);
  1940. +     if (line[0] == '#') {
  1941. +     if (seetok(line, "if", 2) ||
  1942. +         seetok(line, "elif", 4))
  1943. +         seenflag = SEE_IFELSE;
  1944. +     else if (seetok(line, "endif", 5))
  1945. +         seenflag = SEE_ENDIF;
  1946. +     else {
  1947. +         fprintf(stderr, "%s: invalid preprocessor directive: %s\n", progname,
  1948. +         line);
  1949. +         return(0);
  1950. +     }
  1951. +     DBP((D_SPEC, "S preproc: '%s', line: %s\n", sepr[seenflag], line));
  1952. +     }
  1953. +     switch(*state) {
  1954. +     case ST_PASSTHRU:
  1955. +         switch (seenflag) {
  1956. +             case SEE_NONE:
  1957. +             break;
  1958. +         case SEE_ENDIF:
  1959. +             fprintf(stderr, "%s: ifelse-less endif\n", progname);
  1960. +             break;
  1961. +         case SEE_IFELSE:
  1962. +             if (preeval(line))
  1963. +             *state = ST_IFPASSTHRU;
  1964. +             else
  1965. +             *state = ST_IFSKIPPING;
  1966. +             break;
  1967. +         }
  1968. +         break;
  1969. +     case ST_IFPASSTHRU:
  1970. +         switch(seenflag) {
  1971. +         case SEE_NONE:
  1972. +             break;
  1973. +         case SEE_IFELSE:
  1974. +             *state = ST_IFDONE;
  1975. +             break;
  1976. +         case SEE_ENDIF:
  1977. +             *state = ST_PASSTHRU;
  1978. +             break;
  1979. +         }
  1980. +         break;
  1981. +     case ST_IFSKIPPING:
  1982. +         switch(seenflag) {
  1983. +         case SEE_NONE:
  1984. +             break;
  1985. +         case SEE_IFELSE:
  1986. +             if (preeval(line))
  1987. +             *state = ST_IFPASSTHRU;
  1988. +             break;
  1989. +         case SEE_ENDIF:
  1990. +             *state = ST_PASSTHRU;
  1991. +             break;
  1992. +         }
  1993. +         break;
  1994. +     case ST_IFDONE:
  1995. +         if (seenflag == SEE_ENDIF)
  1996. +         *state = ST_PASSTHRU;
  1997. +         break;
  1998. +     }
  1999. +     if (seenflag != SEE_NONE || *state == ST_IFSKIPPING || *state == ST_IFDONE)
  2000. +     seenflag = 0;
  2001. +     else
  2002. +     seenflag = 1;
  2003. +     DBP((D_SPEC, "S preproc(%s:%s) line: %s\n", seenflag == 1?"pass":"skip",
  2004. +     stpr[*state], line));
  2005. +     return(seenflag);
  2006. + }
  2007.   interp(buf, xlator, suf)
  2008.   char *buf, *suf; FUNC xlator; {
  2009.       register char *p;
  2010. ***************
  2011. *** 69,87 ****
  2012.       FILE *inc;
  2013.       binary = (token[0] == 'b') ? 1: 0;
  2014.       p = gettok(p, token);
  2015. !     DBP((D_SPEC, "Trying to include %s\n", token));
  2016.       if (!(inc = fopen(token, "r"))) {
  2017.           strcat(token, ".");
  2018.           strcat(token, suf);
  2019. !         DBP((D_SPEC, "Trying to include %s\n", token));
  2020.           if (!(inc = fopen(token, "r"))) {
  2021.           char nbuf[512];
  2022.           if (token[0] != '/') {
  2023.               sprintf(nbuf, "%s/%s", "lib", token);
  2024. !             DBP((D_SPEC, "Trying to include %s\n", nbuf));
  2025.               if (!(inc = fopen(nbuf, "r"))) {
  2026.               sprintf(nbuf, "%s/%s", LIBDIR, token);
  2027. !             DBP((D_SPEC, "Trying to include %s\n", nbuf));
  2028.               inc = fopen(nbuf, "r");
  2029.               }
  2030.           }
  2031. --- 353,371 ----
  2032.       FILE *inc;
  2033.       binary = (token[0] == 'b') ? 1: 0;
  2034.       p = gettok(p, token);
  2035. !     DBP((D_SPEC, "S include %s?\n", token));
  2036.       if (!(inc = fopen(token, "r"))) {
  2037.           strcat(token, ".");
  2038.           strcat(token, suf);
  2039. !         DBP((D_SPEC, "S include %s?\n", token));
  2040.           if (!(inc = fopen(token, "r"))) {
  2041.           char nbuf[512];
  2042.           if (token[0] != '/') {
  2043.               sprintf(nbuf, "%s/%s", "lib", token);
  2044. !             DBP((D_SPEC, "S include %s?\n", nbuf));
  2045.               if (!(inc = fopen(nbuf, "r"))) {
  2046.               sprintf(nbuf, "%s/%s", LIBDIR, token);
  2047. !             DBP((D_SPEC, "S include %s?\n", nbuf));
  2048.               inc = fopen(nbuf, "r");
  2049.               }
  2050.           }
  2051. ***************
  2052. *** 91,97 ****
  2053.           fprintf(stderr, "%s: cannot open file %s\n", progname, token);
  2054.           exit(1);
  2055.       } else {
  2056. !         DBP((D_SPEC, "Successfull include\n"));
  2057.           if (binary || !xlator)
  2058.           while ((binary = fread(token, 1, sizeof(token), inc)) > 0)
  2059.               fwrite(token, 1, binary, stdout);
  2060. --- 375,381 ----
  2061.           fprintf(stderr, "%s: cannot open file %s\n", progname, token);
  2062.           exit(1);
  2063.       } else {
  2064. !         DBP((D_SPEC, "S include successful\n"));
  2065.           if (binary || !xlator)
  2066.           while ((binary = fread(token, 1, sizeof(token), inc)) > 0)
  2067.               fwrite(token, 1, binary, stdout);
  2068. ***************
  2069. *** 210,216 ****
  2070.               }
  2071.   
  2072.               if (state == READEXT) {
  2073. -                 extern char *realloc();
  2074.                   if (!(extcount % EXTCHUNK)) {
  2075.                   if (!extchars) {
  2076.                       extchars = (struct troff2befont *)
  2077. --- 494,499 ----
  2078. ***************
  2079. *** 284,290 ****
  2080.       if (debug&D_CAT) {
  2081.       static char wid[4] = { 2, 25, 30, 10 };
  2082.       for (count = 0; count < tableindex; count++) {
  2083. !         DBP((D_CAT, "font %2d:", count));
  2084.           for(i = 0; i < 4; i++) {
  2085.           if (fonttable[count].tab[i])
  2086.               DBP((D_CAT, " %-*s", wid[i],
  2087. --- 567,573 ----
  2088.       if (debug&D_CAT) {
  2089.       static char wid[4] = { 2, 25, 30, 10 };
  2090.       for (count = 0; count < tableindex; count++) {
  2091. !         DBP((D_CAT, "C font %2d:", count));
  2092.           for(i = 0; i < 4; i++) {
  2093.           if (fonttable[count].tab[i])
  2094.               DBP((D_CAT, " %-*s", wid[i],
  2095. ***************
  2096. *** 430,436 ****
  2097.   #endif
  2098.       register struct fonttable *p;
  2099.       int intfont;
  2100. !     DBP((D_SPEC, "FontSel: %s -> %s\n", from, to));
  2101.   
  2102.       intfont = atoi(from);
  2103.   
  2104. --- 713,719 ----
  2105.   #endif
  2106.       register struct fonttable *p;
  2107.       int intfont;
  2108. !     DBP((D_SPEC, "S FontSel: %s -> %s\n", from, to));
  2109.   
  2110.       intfont = atoi(from);
  2111.   
  2112. ***************
  2113. *** 449,455 ****
  2114.       intfont = INTFONTS - 1;
  2115.       if (strcmp(to, "S") == 0) {
  2116.       symidx = intfont;
  2117. !     DBP((D_CAT, "Special font is: %d\n", symidx));
  2118.       }
  2119.   
  2120.       for (p = fonttable; p->troffName; p++)
  2121. --- 732,738 ----
  2122.       intfont = INTFONTS - 1;
  2123.       if (strcmp(to, "S") == 0) {
  2124.       symidx = intfont;
  2125. !     DBP((D_CAT, "C Special font is: %d\n", symidx));
  2126.       }
  2127.   
  2128.       for (p = fonttable; p->troffName; p++)
  2129. ***************
  2130. *** 472,478 ****
  2131.   #ifdef    DEBUG
  2132.       for (i = 0; i < INTFONTS; i++)
  2133.       if (xlatetable[i])
  2134. !         DBP((D_SPEC, "Font %d->%s\n", i+1, xlatetable[i]->fontName));
  2135.   #endif
  2136.   }
  2137.   
  2138. --- 755,761 ----
  2139.   #ifdef    DEBUG
  2140.       for (i = 0; i < INTFONTS; i++)
  2141.       if (xlatetable[i])
  2142. !         DBP((D_SPEC, "S Font %d->%s\n", i+1, xlatetable[i]->fontName));
  2143.   #endif
  2144.   }
  2145.   
  2146. ***************
  2147. *** 506,515 ****
  2148.   }
  2149.   
  2150.   doprologs() {
  2151.       if (!prologs)
  2152.       return;
  2153. !     while(*prologs)
  2154. !     dospecial(*prologs++);
  2155.   }
  2156.   
  2157.   #ifdef    OPT
  2158. --- 789,800 ----
  2159.   }
  2160.   
  2161.   doprologs() {
  2162. +     register char **pp;
  2163.       if (!prologs)
  2164.       return;
  2165. !     for(pp = prologs;*pp;pp++)
  2166. !     if (**pp != 'X')
  2167. !         dospecial(*pp);
  2168.   }
  2169.   
  2170.   #ifdef    OPT
  2171. ***************
  2172. *** 524,530 ****
  2173.       p->widthtable = mustmalloc(224, "widthtable");
  2174.       strcpy(widthptr, "ft");
  2175.       strcat(widthptr, p->troffName);
  2176. !     DBP((D_SPEC, "Attempting to read font file %s\n", widthtables));
  2177.       if (f = fopen(widthtables, "r")) {
  2178.       for (c = 0; c < HEADERSIZE; c++) getc(f);
  2179.   #ifdef    ASCIIWIDTHS
  2180. --- 809,815 ----
  2181.       p->widthtable = mustmalloc(224, "widthtable");
  2182.       strcpy(widthptr, "ft");
  2183.       strcat(widthptr, p->troffName);
  2184. !     DBP((D_SPEC, "S Attempting to read font file %s\n", widthtables));
  2185.       if (f = fopen(widthtables, "r")) {
  2186.       for (c = 0; c < HEADERSIZE; c++) getc(f);
  2187.   #ifdef    ASCIIWIDTHS
  2188. ***************
  2189. *** 536,549 ****
  2190.           progname, widthtables);
  2191.           free(p->widthtable);
  2192.           p->widthtable = (char *) 1;
  2193. !         DBP((D_SPEC, "Load of %s failed\n", widthtables));
  2194.       } else {
  2195.           for (c = 0; c < 224; c++)
  2196.           p->widthtable[c] &= 0x3f;
  2197. !         DBP((D_SPEC, "Load of %s succeeded\n", widthtables));
  2198.       }
  2199.       } else {
  2200. !     DBP((D_SPEC, "Failed to open widthtable %s\n", widthtables));
  2201.       free(p->widthtable);
  2202.       p->widthtable = (char *) 1;
  2203.       /* This isn't really the right way to do this, but.... */
  2204. --- 821,834 ----
  2205.           progname, widthtables);
  2206.           free(p->widthtable);
  2207.           p->widthtable = (char *) 1;
  2208. !         DBP((D_SPEC, "S Load of %s failed\n", widthtables));
  2209.       } else {
  2210.           for (c = 0; c < 224; c++)
  2211.           p->widthtable[c] &= 0x3f;
  2212. !         DBP((D_SPEC, "S Load of %s succeeded\n", widthtables));
  2213.       }
  2214.       } else {
  2215. !     DBP((D_SPEC, "S Failed to open widthtable %s\n", widthtables));
  2216.       free(p->widthtable);
  2217.       p->widthtable = (char *) 1;
  2218.       /* This isn't really the right way to do this, but.... */
  2219. Index: ./ps.c
  2220. *** /tmp/PATCHold/./ps.c    Wed Jan 13 02:17:57 1993
  2221. --- ./ps.c    Wed Jan 13 02:18:00 1993
  2222. ***************
  2223. *** 15,21 ****
  2224.   
  2225.   #ifndef    lint
  2226.   static char SCCSid[] =
  2227. !     "@(#)ps.c: 2.21 Copyright 92/11/26 19:41:28 Chris Lewis";
  2228.   #endif
  2229.   
  2230.   /*    ps.c will generate some additional "print" commands to cause
  2231. --- 15,21 ----
  2232.   
  2233.   #ifndef    lint
  2234.   static char SCCSid[] =
  2235. !     "@(#)ps.c: 2.22 Copyright 92/12/20 23:07:00 Chris Lewis";
  2236.   #endif
  2237.   
  2238.   /*    ps.c will generate some additional "print" commands to cause
  2239. ***************
  2240. *** 524,534 ****
  2241.       long curtime;
  2242.       register struct fonttable *p;
  2243.   
  2244.       currentPage = 0;
  2245.       pagePending = 1;
  2246.   
  2247. -     library = libopen(printer, "lib");
  2248.       time(&curtime);
  2249.       strcpy(buffer, ctime(&curtime));
  2250.       *strchr(buffer, '\n') = '\0';
  2251. --- 524,534 ----
  2252.       long curtime;
  2253.       register struct fonttable *p;
  2254.   
  2255. +     setparams(PSRESOLUTION);
  2256.       currentPage = 0;
  2257.       pagePending = 1;
  2258.   
  2259.       time(&curtime);
  2260.       strcpy(buffer, ctime(&curtime));
  2261.       *strchr(buffer, '\n') = '\0';
  2262. ***************
  2263. *** 560,565 ****
  2264. --- 560,567 ----
  2265.       printf("flush\n");
  2266.   #endif
  2267.       printf("usertime /btime exch def\n");
  2268. +     library = libopen(printer, "lib");
  2269.       psXlate(library, "lib.ps");
  2270.   
  2271.       for (p = fonttable; p->troffName; p++) {
  2272. ***************
  2273. *** 606,616 ****
  2274.   FILE *library;
  2275.   char *libname; {
  2276.       char buf[512];
  2277.       printf("%%%%BeginDocument: %s\n", libname);
  2278. !     while (fgets(buf, sizeof(buf), library))
  2279.       if (0 == strncmp(buf, "%%%", 3))
  2280.           interp(&buf[3], psXlate, "ps");
  2281. !     else
  2282.           /* some backends don't like extra %! - eg: PageView */
  2283.           if (0 == strncmp(buf, "%!", 2)) {
  2284.           buf[1] = '%';
  2285. --- 608,622 ----
  2286.   FILE *library;
  2287.   char *libname; {
  2288.       char buf[512];
  2289. +     int state = 0;
  2290.       printf("%%%%BeginDocument: %s\n", libname);
  2291. !     while (fgets(buf, sizeof(buf), library)) {
  2292. !     if (!preproc(buf, &state))
  2293. !         continue;
  2294.       if (0 == strncmp(buf, "%%%", 3))
  2295.           interp(&buf[3], psXlate, "ps");
  2296. !     else {
  2297.           /* some backends don't like extra %! - eg: PageView */
  2298.           if (0 == strncmp(buf, "%!", 2)) {
  2299.           buf[1] = '%';
  2300. ***************
  2301. *** 617,622 ****
  2302. --- 623,631 ----
  2303.           fputs(&buf[1], stdout);
  2304.           } else
  2305.           fputs(buf, stdout);
  2306. +         putchar('\n');
  2307. +     }
  2308. +     }
  2309.       printf("%%%%EndDocument\n");
  2310.   }
  2311.   
  2312. Index: ./dit.c
  2313. *** /tmp/PATCHold/./dit.c    Wed Jan 13 02:18:20 1993
  2314. --- ./dit.c    Wed Jan 13 02:18:22 1993
  2315. ***************
  2316. *** 12,18 ****
  2317.   
  2318.   #ifndef    lint
  2319.   static char SCCSid[] =
  2320. !     "@(#)dit.c: 1.20 Copyright 92/07/09 23:35:14 Chris Lewis";
  2321.   #endif
  2322.   
  2323.   extern struct cattab tabN[], tabS[], *extidx;
  2324. --- 12,18 ----
  2325.   
  2326.   #ifndef    lint
  2327.   static char SCCSid[] =
  2328. !     "@(#)dit.c: 1.23 Copyright 92/12/04 23:39:55 Chris Lewis";
  2329.   #endif
  2330.   
  2331.   extern struct cattab tabN[], tabS[], *extidx;
  2332. ***************
  2333. *** 28,35 ****
  2334.   
  2335.   struct cattab *ditsearch(str)
  2336.   char *str; {
  2337. -     /* should do binary search */
  2338.       register int l, mid, h, k;
  2339.       l = 0;
  2340.       h = extcount - 1;
  2341.   #ifdef    NEVER
  2342. --- 28,35 ----
  2343.   
  2344.   struct cattab *ditsearch(str)
  2345.   char *str; {
  2346.       register int l, mid, h, k;
  2347. +     struct cattab *dp;
  2348.       l = 0;
  2349.       h = extcount - 1;
  2350.   #ifdef    NEVER
  2351. ***************
  2352. *** 40,48 ****
  2353.       while(l <= h) {
  2354.       mid = (l + h) >> 1;
  2355.       k = strcmp(str, spctab[mid]->ch_name);
  2356. !     if (k == 0)
  2357. !         return(spctab[mid]);
  2358. !     else if (k < 0)
  2359.           h = mid - 1;
  2360.       else
  2361.           l = mid + 1;
  2362. --- 40,52 ----
  2363.       while(l <= h) {
  2364.       mid = (l + h) >> 1;
  2365.       k = strcmp(str, spctab[mid]->ch_name);
  2366. !     if (k == 0) {
  2367. !         dp = spctab[mid];
  2368. !         DBP((D_CAT,
  2369. !         "D ditsearch(%s) -> ch_name: %s, set: %d, catidx: %d, wididx: %d, desc: %s\n",
  2370. !         str, dp->ch_name, dp->ch_set, dp->ch_catidx, dp->ch_wididx, dp->ch_desc));
  2371. !         return(dp);
  2372. !     } else if (k < 0)
  2373.           h = mid - 1;
  2374.       else
  2375.           l = mid + 1;
  2376. ***************
  2377. *** 58,72 ****
  2378.   addtab(table)
  2379.   struct cattab *table; {
  2380.       register struct cattab *p;
  2381. -     extern char *realloc();
  2382.   
  2383.       for (p = table; p->ch_name != NOC; p++) {
  2384. !     DBP((D_CAT, "Addtab: %s\n", p->ch_name));
  2385. !     if (p->ch_desc != NOC && p->ch_catidx != NTC)
  2386. !         if (strlen(p->ch_name) == 1)
  2387.           dittab[p->ch_name[0]] = p;
  2388. !         else {
  2389. !         DBP((D_CAT, "AddtabS: %s %d\n", p->ch_name, extcount));
  2390.           if (extcount > 0 && !(extcount%EXTCHUNK)) {
  2391.               spctab = (struct cattab **) realloc(spctab,
  2392.               sizeof(struct cattab *) * (extcount + EXTCHUNK + 1));
  2393. --- 62,75 ----
  2394.   addtab(table)
  2395.   struct cattab *table; {
  2396.       register struct cattab *p;
  2397.   
  2398.       for (p = table; p->ch_name != NOC; p++) {
  2399. !     if (p->ch_desc != NOC && p->ch_catidx != NTC) {
  2400. !         DBP((D_CAT, "D addtab: %s, desc: %s, catidx: %d\n", p->ch_name,
  2401. !         p->ch_desc, p->ch_catidx));
  2402. !         if (strlen(p->ch_name) == 1) {
  2403.           dittab[p->ch_name[0]] = p;
  2404. !         } else {
  2405.           if (extcount > 0 && !(extcount%EXTCHUNK)) {
  2406.               spctab = (struct cattab **) realloc(spctab,
  2407.               sizeof(struct cattab *) * (extcount + EXTCHUNK + 1));
  2408. ***************
  2409. *** 76,87 ****
  2410.           }
  2411.           spctab[extcount++] = p;
  2412.           }
  2413.       }
  2414.   }
  2415.   
  2416.   fixtab() {
  2417.       register int i;
  2418. -     extern char *malloc();
  2419.   
  2420.       dittab = (struct cattab **) mustmalloc(sizeof(struct cattab *) * 256,
  2421.       "dittab");
  2422. --- 79,90 ----
  2423.           }
  2424.           spctab[extcount++] = p;
  2425.           }
  2426. +     }
  2427.       }
  2428.   }
  2429.   
  2430.   fixtab() {
  2431.       register int i;
  2432.   
  2433.       dittab = (struct cattab **) mustmalloc(sizeof(struct cattab *) * 256,
  2434.       "dittab");
  2435. ***************
  2436. *** 100,135 ****
  2437.       dittab['-'] = &tabN[31];
  2438.       dittab['_'] = &tabS[31];
  2439.   
  2440. !     DBP((D_CAT, "End addtab: %d characters\n", extcount));
  2441.   
  2442.       spctab[extcount] = NULL;
  2443.   
  2444. -     DBP((D_CAT, "After NULL\n"));
  2445. - #ifdef DEBUG
  2446. -     if (debug&D_CAT) {
  2447. -     for (ts = spctab; *ts; ts++)
  2448. -         DBP((D_CAT, "%s -> %08x (%d)\n", (*ts)->ch_name, *ts,
  2449. -         (*ts)->ch_catidx));
  2450. -     }
  2451. - #endif
  2452.       qsort(spctab, extcount, sizeof (struct cattab *), catcmp);
  2453.   
  2454. -     DBP((D_CAT, "After qsort\n"));
  2455.   #ifdef DEBUG
  2456.       if (debug&D_CAT) {
  2457.   
  2458.       for (ts = spctab; *ts; ts++)
  2459. !         DBP((D_CAT, "%s -> %08x (%d)\n", (*ts)->ch_name, *ts,
  2460.           (*ts)->ch_catidx));
  2461.   
  2462.       for (i = 0; i < 256; i++)
  2463.           if (dittab[i])
  2464. !         DBP((D_CAT, "%d:%02x:%c: %d/%d\n", i, i, i, dittab[i]->ch_set,
  2465.           dittab[i]->ch_catidx));
  2466.       }
  2467.   #endif
  2468. --- 103,127 ----
  2469.       dittab['-'] = &tabN[31];
  2470.       dittab['_'] = &tabS[31];
  2471.   
  2472. !     DBP((D_CAT, "D end addtab: %d characters\n", extcount));
  2473.   
  2474.       spctab[extcount] = NULL;
  2475.   
  2476.       qsort(spctab, extcount, sizeof (struct cattab *), catcmp);
  2477.   
  2478.   #ifdef DEBUG
  2479.       if (debug&D_CAT) {
  2480. +     int i;
  2481. +     DBP((D_CAT, "D after qsort\n"));
  2482.   
  2483.       for (ts = spctab; *ts; ts++)
  2484. !         DBP((D_CAT, "D %s -> %08x (%d)\n", (*ts)->ch_name, *ts,
  2485.           (*ts)->ch_catidx));
  2486.   
  2487.       for (i = 0; i < 256; i++)
  2488.           if (dittab[i])
  2489. !         DBP((D_CAT, "D %d:%02x:%c: %d/%d\n", i, i, i, dittab[i]->ch_set,
  2490.           dittab[i]->ch_catidx));
  2491.       }
  2492.   #endif
  2493. ***************
  2494. *** 152,158 ****
  2495.       register struct cattab *last = (struct cattab *) NULL;
  2496.       char special[512];
  2497.       fixtab();
  2498. -     DBP((D_CAT, "Finished fixtab\n"));
  2499.       cmd = skipwhite();
  2500.       if (cmd == 0x40) {
  2501.       fprintf(stderr, "%s: illegal starting sequence for ditroff.\n",
  2502. --- 144,149 ----
  2503. ***************
  2504. *** 172,178 ****
  2505.           case 's':
  2506.           points = getnum();
  2507.           points /= sizescale;
  2508. !         DBP((D_CAT, "Pointsize %d\n", points));
  2509.           break;
  2510.           case 'f':
  2511.           font = getnum();
  2512. --- 163,169 ----
  2513.           case 's':
  2514.           points = getnum();
  2515.           points /= sizescale;
  2516. !         DBP((D_CAT, "D point: %d\n", points));
  2517.           break;
  2518.           case 'f':
  2519.           font = getnum();
  2520. ***************
  2521. *** 186,192 ****
  2522.               font = INTFONTS - 1;
  2523.           else
  2524.               font--;
  2525. !         DBP((D_CAT, "Font %d\n", font));
  2526.           break;
  2527.           case '0':
  2528.           case '1':
  2529. --- 177,183 ----
  2530.               font = INTFONTS - 1;
  2531.           else
  2532.               font--;
  2533. !         DBP((D_CAT, "D font: %d\n", font));
  2534.           break;
  2535.           case '0':
  2536.           case '1':
  2537. ***************
  2538. *** 260,265 ****
  2539. --- 251,257 ----
  2540.           while((ch = getchar()) != EOF && !isspace(ch))
  2541.               special[i++] = ch;
  2542.           special[i] = '\0';
  2543. +         DBP((D_CAT, "D C%s, font: %d\n", special, font));
  2544.           if (last && strcmp(last->ch_name, special) == 0)
  2545.               p = last;
  2546.           else {
  2547. ***************
  2548. *** 276,286 ****
  2549.                   p->ch_set == N ? -font-1 : -symidx-1,
  2550.                   points, p->ch_catidx,
  2551.                   extchars[p->ch_catidx].t2b_charseq);
  2552. !             else
  2553. !             ditemit(xpos, ypos,
  2554. !                 p->ch_set == N ? font : symidx,
  2555. !                 points, p->ch_catidx, (char *) NULL);
  2556. !             DBP((D_CAT, "Special %s\n", special));
  2557.           }
  2558.           break;
  2559.           case 'x':
  2560. --- 268,282 ----
  2561.                   p->ch_set == N ? -font-1 : -symidx-1,
  2562.                   points, p->ch_catidx,
  2563.                   extchars[p->ch_catidx].t2b_charseq);
  2564. !             else {
  2565. !             int mfont = font;
  2566. !             if (font == symidx && p->ch_set == N)
  2567. !                 mfont = 0;
  2568. !             else if (font != symidx && p->ch_set == S)
  2569. !                 mfont = symidx;
  2570. !             ditemit(xpos, ypos, mfont, points, p->ch_catidx,
  2571. !                 (char *) NULL);
  2572. !             }
  2573.           }
  2574.           break;
  2575.           case 'x':
  2576. ***************
  2577. *** 301,307 ****
  2578.               while((ch = getchar()) != EOF && ch != '\n')
  2579.               special[i++] = ch;
  2580.               special[i] = '\0';
  2581. !             DBP((D_CAT, "Command %s\n", special));
  2582.               i = sscanf(special, "%s %s %s %s", cmd, a1, a2, a3);
  2583.               if (i <= 0) {
  2584.               fprintf(stderr, "%s: bad x command: %s\n",
  2585. --- 297,303 ----
  2586.               while((ch = getchar()) != EOF && ch != '\n')
  2587.               special[i++] = ch;
  2588.               special[i] = '\0';
  2589. !             DBP((D_CAT, "D x: %s\n", special));
  2590.               i = sscanf(special, "%s %s %s %s", cmd, a1, a2, a3);
  2591.               if (i <= 0) {
  2592.               fprintf(stderr, "%s: bad x command: %s\n",
  2593. ***************
  2594. *** 320,326 ****
  2595.                   exit(1);
  2596.                   }
  2597.                   sprintf(special, "F%s%s", a1, a2);
  2598. !                 DBP((D_CAT, "FONT %s %s\n", a1, a2));
  2599.   
  2600.                   if (be->befontsel)
  2601.                   (*be->befontsel)(a1,a2);
  2602. --- 316,322 ----
  2603.                   exit(1);
  2604.                   }
  2605.                   sprintf(special, "F%s%s", a1, a2);
  2606. !                 DBP((D_CAT, "D load: %s %s\n", a1, a2));
  2607.   
  2608.                   if (be->befontsel)
  2609.                   (*be->befontsel)(a1,a2);
  2610. ***************
  2611. *** 340,358 ****
  2612.                   exit(1);
  2613.                   }
  2614.                   halfdtres = indtres / 2;
  2615. !                 DBP((D_CAT, "RES %d\n", indtres));
  2616.                   break;
  2617.               case 'i':
  2618. !                 DBP((D_CAT, "INIT\n"));
  2619.                   if (be->beprolog)
  2620.                   (*be->beprolog)();
  2621.                   resetState();
  2622.                   break;
  2623.               case 't':
  2624. !                 DBP((D_CAT, "TRAILER\n"));
  2625.                   break;
  2626.               case 's':
  2627. !                 DBP((D_CAT, "STOP\n"));
  2628.                   return;
  2629.               case 'T':
  2630.                   if (i != 2) {
  2631. --- 336,354 ----
  2632.                   exit(1);
  2633.                   }
  2634.                   halfdtres = indtres / 2;
  2635. !                 DBP((D_CAT, "D res: %d\n", indtres));
  2636.                   break;
  2637.               case 'i':
  2638. !                 DBP((D_CAT, "D init\n"));
  2639.                   if (be->beprolog)
  2640.                   (*be->beprolog)();
  2641.                   resetState();
  2642.                   break;
  2643.               case 't':
  2644. !                 DBP((D_CAT, "D trailer\n"));
  2645.                   break;
  2646.               case 's':
  2647. !                 DBP((D_CAT, "D stop\n"));
  2648.                   return;
  2649.               case 'T':
  2650.                   if (i != 2) {
  2651. ***************
  2652. *** 362,368 ****
  2653.                   }
  2654.                   device = mustmalloc(strlen(a1) + 1, "device");
  2655.                   strcpy(device, a1);
  2656. !                 DBP((D_CAT, "TYPE %s\n", a1));
  2657.                   break;
  2658.               case 'X':
  2659.                   switch(a1[0]) {
  2660. --- 358,364 ----
  2661.                   }
  2662.                   device = mustmalloc(strlen(a1) + 1, "device");
  2663.                   strcpy(device, a1);
  2664. !                 DBP((D_CAT, "D type: %s\n", a1));
  2665.                   break;
  2666.               case 'X':
  2667.                   switch(a1[0]) {
  2668. ***************
  2669. *** 384,394 ****
  2670.           break;
  2671.           case 'H':
  2672.           xpos = getnum();
  2673. !         DBP((D_CAT, "Hor: %d\n", xpos));
  2674.           break;
  2675.           case 'h':
  2676.           xpos += getnum();
  2677. !         DBP((D_CAT, "Hor (inc): %d\n", xpos));
  2678.           break;
  2679.           case 'V':
  2680.   #ifdef    OPT
  2681. --- 380,390 ----
  2682.           break;
  2683.           case 'H':
  2684.           xpos = getnum();
  2685. !         DBP((D_CAT, "D H: %d\n", xpos));
  2686.           break;
  2687.           case 'h':
  2688.           xpos += getnum();
  2689. !         DBP((D_CAT, "D Hi: %d\n", xpos));
  2690.           break;
  2691.           case 'V':
  2692.   #ifdef    OPT
  2693. ***************
  2694. *** 395,401 ****
  2695.           canonflush();
  2696.   #endif
  2697.           ypos = getnum();
  2698. !         DBP((D_CAT, "Ver: %d\n", ypos));
  2699.           break;
  2700.           case 'v':
  2701.   #ifdef    OPT
  2702. --- 391,397 ----
  2703.           canonflush();
  2704.   #endif
  2705.           ypos = getnum();
  2706. !         DBP((D_CAT, "D V: %d\n", ypos));
  2707.           break;
  2708.           case 'v':
  2709.   #ifdef    OPT
  2710. ***************
  2711. *** 402,413 ****
  2712.           canonflush();
  2713.   #endif
  2714.           ypos += getnum();
  2715. !         DBP((D_CAT, "Ver (inc): %d\n", ypos));
  2716.           break;
  2717.           break;
  2718.           case 'p':
  2719.           ch = getnum();
  2720. !         DBP((D_CAT, "Page %d\n", ch));
  2721.           if (be->bepage)
  2722.               (*be->bepage)();
  2723.           break;
  2724. --- 398,409 ----
  2725.           canonflush();
  2726.   #endif
  2727.           ypos += getnum();
  2728. !         DBP((D_CAT, "D Vi: %d\n", ypos));
  2729.           break;
  2730.           break;
  2731.           case 'p':
  2732.           ch = getnum();
  2733. !         DBP((D_CAT, "D page: %d\n", ch));
  2734.           if (be->bepage)
  2735.               (*be->bepage)();
  2736.           break;
  2737. ***************
  2738. *** 435,441 ****
  2739.           while((ch = getchar()) != EOF && ch != '\n')
  2740.               special[i++] = ch;
  2741.           special[i] = '\0';
  2742. !         DBP((D_CAT, "#/D/! %s\n", special));
  2743.   
  2744.           switch(cmd) {
  2745.               case '#':
  2746. --- 431,437 ----
  2747.           while((ch = getchar()) != EOF && ch != '\n')
  2748.               special[i++] = ch;
  2749.           special[i] = '\0';
  2750. !         DBP((D_CAT, "D passthru: %s\n", special));
  2751.   
  2752.           switch(cmd) {
  2753.               case '#':
  2754. ***************
  2755. *** 471,478 ****
  2756.                   for (i = 0; i < ct; i++)
  2757.                   values[i] = DIT2CAT(values[i]);
  2758.   
  2759. ! DBP((D_CAT, "Draw: xpos,ypos,opcode,ct,special = %d,%d,%d,%d,%s\n",
  2760. !     xpos, ypos, opcode, ct, special));
  2761.   
  2762.               if (be->bedraw)
  2763.                   (*be->bedraw)(DIT2CAT(xpos), DIT2CAT(ypos),
  2764. --- 467,474 ----
  2765.                   for (i = 0; i < ct; i++)
  2766.                   values[i] = DIT2CAT(values[i]);
  2767.   
  2768. !             DBP((D_CAT, "D D: xpos,ypos,opcode,ct,special = %d,%d,%d,%d,%s\n",
  2769. !                 xpos, ypos, opcode, ct, special));
  2770.   
  2771.               if (be->bedraw)
  2772.                   (*be->bedraw)(DIT2CAT(xpos), DIT2CAT(ypos),
  2773. ***************
  2774. *** 500,506 ****
  2775.       while((c = getchar()) != EOF && isdigit(c))
  2776.       ret = ret * 10 + (c - '0');
  2777.       ungetc(c, stdin);
  2778. -     DBP((D_CAT, "Getnum: %d\n", ret));
  2779.       return(ret);
  2780.   }
  2781.   
  2782. --- 496,501 ----
  2783. ***************
  2784. *** 508,514 ****
  2785.   int x, y;
  2786.   int font, points, troffChar;
  2787.   register char *sequence; {
  2788. !     DBP((D_CAT, "x,y: %d/%d -> ", x, y));
  2789.       x = DIT2CAT(x);
  2790.       y = DIT2CAT(y);
  2791.       DBP((D_CAT, "%d/%d (font,points,ch = %d,%d,%d)\n", x, y, font, points,
  2792. --- 503,509 ----
  2793.   int x, y;
  2794.   int font, points, troffChar;
  2795.   register char *sequence; {
  2796. !     DBP((D_CAT, "D E: x,y: %d/%d -> ", x, y));
  2797.       x = DIT2CAT(x);
  2798.       y = DIT2CAT(y);
  2799.       DBP((D_CAT, "%d/%d (font,points,ch = %d,%d,%d)\n", x, y, font, points,
  2800. ***************
  2801. *** 526,528 ****
  2802. --- 521,524 ----
  2803.   #endif
  2804.   }
  2805.   #endif
  2806. Index: ./troff2.c
  2807. *** /tmp/PATCHold/./troff2.c    Wed Jan 13 02:18:35 1993
  2808. --- ./troff2.c    Wed Jan 13 02:18:37 1993
  2809. ***************
  2810. *** 12,18 ****
  2811.   
  2812.   #ifndef    lint
  2813.   static char SCCSid[] =
  2814. !     "@(#)troff2.c: 2.27 Copyright 92/08/09 23:41:28 Chris Lewis";
  2815.   #endif
  2816.   
  2817.   #define    ESC    0x80
  2818. --- 12,18 ----
  2819.   
  2820.   #ifndef    lint
  2821.   static char SCCSid[] =
  2822. !     "@(#)troff2.c: 2.29 Copyright 92/12/20 23:07:29 Chris Lewis";
  2823.   #endif
  2824.   
  2825.   #define    ESC    0x80
  2826. ***************
  2827. *** 47,52 ****
  2828. --- 47,53 ----
  2829.   #define    CTOINT(val,sig)    ((~c)&sig)
  2830.   
  2831.   int pagelength;
  2832. + int pagewidth;
  2833.   int pageoffset;
  2834.   int pageyoffset;
  2835.   
  2836. ***************
  2837. *** 66,73 ****
  2838.   char *device = {"alw"};
  2839.   char **prologs = (char **) NULL;
  2840.   char *pstrailer = "\004";
  2841. - #define    PROCHUNK    20
  2842. - int procount;
  2843.   
  2844.   #ifdef    L_cuserid
  2845.   #define    nmMAX    L_cuserid
  2846. --- 67,72 ----
  2847. ***************
  2848. *** 90,98 ****
  2849.   int    sizescale;
  2850.   #endif
  2851.   
  2852. - extern char *realloc();
  2853.   
  2854. ! #define    OPTLIST    "d:O:Y:T:VD:l:MR:P::zp:W:ZNnSG:g:"
  2855.   
  2856.   /*    On 386/ix 1.0.6 profiling has a bug in it that leaves
  2857.       two extra longs on the stack between the stack frame and
  2858. --- 89,96 ----
  2859.   int    sizescale;
  2860.   #endif
  2861.   
  2862.   
  2863. ! #define    OPTLIST    "d:O:Y:T:VD:l:w:MR:P::zp:W:ZNnSG:g:"
  2864.   
  2865.   /*    On 386/ix 1.0.6 profiling has a bug in it that leaves
  2866.       two extra longs on the stack between the stack frame and
  2867. ***************
  2868. *** 118,123 ****
  2869. --- 116,122 ----
  2870.   
  2871.       extern int getopt();
  2872.       extern char *optarg;
  2873. +     extern void insprolog();
  2874.   
  2875.   #ifdef    L_cuserid
  2876.   
  2877. ***************
  2878. *** 136,145 ****
  2879. --- 135,147 ----
  2880.           sprintf(username, "uid=%d", getuid());
  2881.   
  2882.       /* some compilers complain about floating point in initializers... */
  2883.       pagelength = DEFPL * TROFFRESOLUTION;
  2884. +     pagewidth = DEFPW * TROFFRESOLUTION;
  2885.       pageoffset = DEFOFF * TROFFRESOLUTION;
  2886.       pageyoffset = DEFYOFF * TROFFRESOLUTION;
  2887.   
  2888.       progname = strrchr(argv[0], '/');
  2889.       if (progname)
  2890.           progname++;
  2891. ***************
  2892. *** 189,206 ****
  2893.               break;
  2894.   #endif
  2895.           case 'P':
  2896. !             if (!prologs) {
  2897. !             prologs = (char **) mustmalloc(PROCHUNK * sizeof(char*),
  2898. !                 "prologs");
  2899. !             procount = 0;
  2900. !             }
  2901. !             prologs[procount++] = optarg;
  2902. !             /* insert the null */
  2903. !             if ((procount % PROCHUNK) == 0) {
  2904. !             prologs = (char **) realloc((char *) prologs,
  2905. !                 (procount + PROCHUNK) * sizeof(char *));
  2906. !             }
  2907. !             prologs[procount] = (char *) NULL;
  2908.               break;
  2909.           case 'p':
  2910.               printer = optarg;
  2911. --- 191,197 ----
  2912.               break;
  2913.   #endif
  2914.           case 'P':
  2915. !             insprolog(optarg);
  2916.               break;
  2917.           case 'p':
  2918.               printer = optarg;
  2919. ***************
  2920. *** 276,287 ****
  2921.               exit(1);
  2922.               }
  2923.               break;
  2924.           case '?':
  2925.           default:
  2926.               usage();
  2927.               exit(1);
  2928.           }
  2929. !     
  2930.   #ifdef    OPT
  2931.       if (dtopt)
  2932.           optimize = 1;
  2933. --- 267,286 ----
  2934.               exit(1);
  2935.               }
  2936.               break;
  2937. +         case 'w':
  2938. +             pagewidth = calc(optarg);
  2939. +             if (pagewidth == 0) {
  2940. +             fprintf(stderr, "%s: Bad pagewidth %s\n", progname,
  2941. +                 optarg);
  2942. +             exit(1);
  2943. +             }
  2944. +             break;
  2945.           case '?':
  2946.           default:
  2947.               usage();
  2948.               exit(1);
  2949.           }
  2950.   #ifdef    OPT
  2951.       if (dtopt)
  2952.           optimize = 1;
  2953. ***************
  2954. *** 303,313 ****
  2955.   
  2956.       loadfont(be->bestdfont, be->besymfont);
  2957.   #ifdef    DEBUG
  2958. !     if (debug & D_SPEC) {
  2959. !         for (c = 0; c < procount; c++) {
  2960. !         DBP((D_SPEC, "Prolog %d: %s\n", c, prologs[c]));
  2961. !         }
  2962. !     }
  2963.   #endif
  2964.   
  2965.       if (dumpflag) {
  2966. --- 302,308 ----
  2967.   
  2968.       loadfont(be->bestdfont, be->besymfont);
  2969.   #ifdef    DEBUG
  2970. !     dumpprologs();
  2971.   #endif
  2972.   
  2973.       if (dumpflag) {
  2974. Index: ./defs.h
  2975. *** /tmp/PATCHold/./defs.h    Wed Jan 13 02:18:52 1993
  2976. --- ./defs.h    Wed Jan 13 02:18:54 1993
  2977. ***************
  2978. *** 9,15 ****
  2979.    */
  2980.   
  2981.   /*    Official Release and Patch level:    */
  2982. ! #define    T2VERSION    "@(#)PSROFF Copyright 92/10/30 Chris Lewis - R3 PL14"
  2983.   
  2984.   /*    Configuration parameters:
  2985.    */
  2986. --- 9,15 ----
  2987.    */
  2988.   
  2989.   /*    Official Release and Patch level:    */
  2990. ! #define    T2VERSION    "@(#)PSROFF Copyright 93/01/03 Chris Lewis - R3 PL15"
  2991.   
  2992.   /*    Configuration parameters:
  2993.    */
  2994. ***************
  2995. *** 81,86 ****
  2996. --- 81,93 ----
  2997.   #define    HEADERSIZE 0    /* size of header in bytes */
  2998.   #undef    ASCIIWIDTHS    /* For RISC/Ultrix */
  2999.   
  3000. + /* If you have malloc.h, leave this undefined.  If you don't have a
  3001. +    malloc.h, define it to be the base type returned by malloc() and
  3002. +    realloc().  Ie: if your malloc returns (char *), set MALLRET to char.
  3003. +  */
  3004. + #undef MALLRET
  3005.   /* What do your CAT codes look like?
  3006.   
  3007.      If BSDHACK defined, the code to magnify the next lead by 64 replaces the
  3008. ***************
  3009. *** 166,178 ****
  3010.   #define SPACEOPT    /* hyperoptimization */
  3011.   #define OPTSIZ 200    /* size of optimizer buffer */
  3012.   
  3013. ! #define    DEFPL  11    /* Default page length (11 inches).
  3014. !                DO NOT change unless you absolutely HAVE to.
  3015. !                You should only need to change this if you
  3016. !                desire your printer to use something different
  3017. !                as default.  If so, you'll HAVE to change
  3018. !                your macro package to agree on the default - RT
  3019. !                owners take note! (the man macros are wrong) */
  3020.   
  3021.   #define    DEFOFF 0.5    /* Default page offset.  DO NOT change unless you
  3022.                  absolutely HAVE to.  You should only need this
  3023. --- 173,186 ----
  3024.   #define SPACEOPT    /* hyperoptimization */
  3025.   #define OPTSIZ 200    /* size of optimizer buffer */
  3026.   
  3027. ! #define    DEFPL  11    /* Default page length (11 inches). */
  3028. ! #define    DEFPW  8.5    /* Default page length (8.5 inches).
  3029. !                Don't change these.  The PAPER mechanism
  3030. !                in psroff (with -l/-w options to troff2ps)
  3031. !                should handle everything the backend needs
  3032. !                to know).  Convincing the macros to use
  3033. !                different sizes is a different story.
  3034. !                -rL works with -mm */
  3035.   
  3036.   #define    DEFOFF 0.5    /* Default page offset.  DO NOT change unless you
  3037.                  absolutely HAVE to.  You should only need this
  3038. ***************
  3039. *** 246,251 ****
  3040. --- 254,265 ----
  3041.   #include <stdio.h>
  3042.   #include <ctype.h>
  3043.   
  3044. + #ifndef MALLRET
  3045. + #include <malloc.h>
  3046. + #else
  3047. + extern MALLRET *malloc(), *realloc();
  3048. + #endif
  3049.   #ifdef BSD
  3050.   #include <strings.h>
  3051.   #define    strchr    index
  3052. ***************
  3053. *** 362,368 ****
  3054.   
  3055.   extern int symidx;        /* index of symbol font */
  3056.   
  3057. ! #define    INTFONTS    10    /* maximum number of builtin fonts */
  3058.   
  3059.   extern struct fonttable fonttable[MAXFONTS+1];
  3060.   extern struct fonttable *xlatetable[INTFONTS];
  3061. --- 376,386 ----
  3062.   
  3063.   extern int symidx;        /* index of symbol font */
  3064.   
  3065. ! #define    INTFONTS    15    /* Max simultaneously mounted fonts.
  3066. !                    Don't put more than INTFONTS-1 fonts
  3067. !                    into a ditroff DESC file.  Most
  3068. !                    DWB's have a compiled-in max of 10
  3069. !                    (max DESC value of 9) */
  3070.   
  3071.   extern struct fonttable fonttable[MAXFONTS+1];
  3072.   extern struct fonttable *xlatetable[INTFONTS];
  3073. ***************
  3074. *** 391,396 ****
  3075. --- 409,415 ----
  3076.   extern int pageoffset;
  3077.   extern int pageyoffset;
  3078.   extern int pagelength;
  3079. + extern int pagewidth;
  3080.   extern int pagePending;
  3081.   int dtopt;
  3082.   
  3083. Index: ./Makefile
  3084. *** /tmp/PATCHold/./Makefile    Wed Jan 13 02:19:13 1993
  3085. --- ./Makefile    Wed Jan 13 02:19:24 1993
  3086. ***************
  3087. *** 7,13 ****
  3088.   #    Function: Upper level makefile; configuration options.
  3089.   #
  3090.   #
  3091. ! #ident  "@(#)Makefile: 2.35 Copyright 92/10/30 02:28:20 Chris Lewis"
  3092.   
  3093.   #    If you're not sure whether you have a System V make, leave
  3094.   #    this alone, and run the make anyways.  If it dies horribly
  3095. --- 7,13 ----
  3096.   #    Function: Upper level makefile; configuration options.
  3097.   #
  3098.   #
  3099. ! #ident  "@(#)Makefile: 2.37 Copyright 93/01/10 10:51:43 Chris Lewis"
  3100.   
  3101.   #    If you're not sure whether you have a System V make, leave
  3102.   #    this alone, and run the make anyways.  If it dies horribly
  3103. ***************
  3104. *** 52,57 ****
  3105. --- 52,67 ----
  3106.   #    is really wierd.
  3107.   RTMACDIR = /usr/lib/tmac
  3108.   
  3109. + #    Default paper size: valid are: letter, legal, executive, a4,
  3110. + #    com-10, monarch, c5, dl.  Note: it is up to you to get troff
  3111. + #    to get the right page length.  This only makes arrangements with
  3112. + #    the backend.  With -mm, -rL will do the trick.  Other macro
  3113. + #    packages use other arrangements...
  3114. + PAPER    = letter
  3115. + #    Default output orientation
  3116. + ORIENTATION = portrait
  3117.   #    upper level man directory, with subdirectories man1, man2 etc.
  3118.   #    Could be /usr/man/mann, /usr/man/manl, /usr/man/man1, /usr/man/l_man/man1
  3119.   MANDIR    = /usr/man/mann
  3120. ***************
  3121. *** 203,208 ****
  3122. --- 213,220 ----
  3123.                -e 's;%%SFP2PK%%;$(SFP2PK);' \
  3124.                -e 's;%%PKFONTS%%;$(PKFONTS);' \
  3125.                -e 's;%%NEWFONTS%%;$(NEWFONTS);' \
  3126. +              -e 's;%%PAPER%%;$(PAPER);' \
  3127. +              -e 's;%%ORIENTATION%%;$(ORIENTATION);' \
  3128.                -e 's;%%T2DIR%%;$(T2DIR);' \
  3129.                -e 's;%%MAKEDEV%%;$(MAKEDEV);' \
  3130.                -e 's;%%PERL%%;$(PERL);' \
  3131. ***************
  3132. *** 289,302 ****
  3133.       if [ "$$files" != 'fonts.lj/*.pk' ] ; \
  3134.       then \
  3135.           cp fonts.lj/*.pk $(LJF) ; \
  3136. -         chmod 644 $(LJF)/* ; \
  3137.       fi
  3138.       $(IGNORESH) files=`echo fonts.lj/*.sfp` ; \
  3139.       if [ "$$files" != 'fonts.lj/*.sfp' ] ; \
  3140.       then \
  3141.           cp fonts.lj/*.sfp $(LJF) ; \
  3142. -         chmod 644 $(LJF)/* ; \
  3143.       fi
  3144.       @echo "don't panic if the next line dies"
  3145.       $(IGNORESH) test -z "$(PKFONTS)" -o ! -d "$(NEWFONTS)" \
  3146.           || cp $(NEWFONTS)/* $(LJF)
  3147. --- 301,313 ----
  3148.       if [ "$$files" != 'fonts.lj/*.pk' ] ; \
  3149.       then \
  3150.           cp fonts.lj/*.pk $(LJF) ; \
  3151.       fi
  3152.       $(IGNORESH) files=`echo fonts.lj/*.sfp` ; \
  3153.       if [ "$$files" != 'fonts.lj/*.sfp' ] ; \
  3154.       then \
  3155.           cp fonts.lj/*.sfp $(LJF) ; \
  3156.       fi
  3157. +     cd $(LJF); chmod 644 *
  3158.       @echo "don't panic if the next line dies"
  3159.       $(IGNORESH) test -z "$(PKFONTS)" -o ! -d "$(NEWFONTS)" \
  3160.           || cp $(NEWFONTS)/* $(LJF)
  3161. ***************
  3162. *** 372,377 ****
  3163. --- 383,389 ----
  3164.   lj.o:    defs.h lj.h pkc.h pk.h
  3165.   ljdraw.o:    defs.h lj.h
  3166.   lj3draw.o:    defs.h lj.h
  3167. + pkscale.o:    defs.h pk.h
  3168.   
  3169.   pk.o:    defs.h pk.h pkc.h
  3170.   pkc.o:    defs.h pk.h pkc.h
  3171. ***************
  3172. *** 412,419 ****
  3173.       echo ".ds pt \"($(TTYPE))" >> TEST1
  3174.       echo ".ds 2d \"`date`" >> TEST1
  3175.       echo ".sp" > TEST2
  3176. !     echo ".ps 10" >> TEST2
  3177. !     echo ".vs 12p" >> TEST2
  3178.       echo ".ad 1" >> TEST2
  3179.       echo "DEFS.H DEFINITIONS:" >> TEST2
  3180.       sed -n -e '/Edit no more/q' \
  3181. --- 424,431 ----
  3182.       echo ".ds pt \"($(TTYPE))" >> TEST1
  3183.       echo ".ds 2d \"`date`" >> TEST1
  3184.       echo ".sp" > TEST2
  3185. !     echo ".ps 9" >> TEST2
  3186. !     echo ".vs 10p" >> TEST2
  3187.       echo ".ad 1" >> TEST2
  3188.       echo "DEFS.H DEFINITIONS:" >> TEST2
  3189.       sed -n -e '/Edit no more/q' \
  3190. Index: ./psroff.S
  3191. *** /tmp/PATCHold/./psroff.S    Wed Jan 13 02:19:56 1993
  3192. --- ./psroff.S    Wed Jan 13 02:19:57 1993
  3193. ***************
  3194. *** 7,17 ****
  3195.   #
  3196.   #    Specs:        troff2ps driver
  3197.   #
  3198. ! #ident  "@(#)psroff.sh: 2.23 Copyright 92/08/09 23:44:43 Chris Lewis"
  3199.   
  3200.   LIBDIR="%%LIBDIR%%"
  3201.   FONTDIR="%%FONTDIR%%"
  3202.   
  3203.   term=false
  3204.   fail=false
  3205.   if [ -n "$PSROFF" ]
  3206. --- 7,20 ----
  3207.   #
  3208.   #    Specs:        troff2ps driver
  3209.   #
  3210. ! #ident  "@(#)psroff.sh: 2.28 Copyright 93/01/10 01:20:52 Chris Lewis"
  3211.   
  3212.   LIBDIR="%%LIBDIR%%"
  3213.   FONTDIR="%%FONTDIR%%"
  3214. + paper=%%PAPER%%
  3215. + orientation=%%ORIENTATION%%
  3216.   
  3217. + xlpargs=
  3218.   term=false
  3219.   fail=false
  3220.   if [ -n "$PSROFF" ]
  3221. ***************
  3222. *** 27,33 ****
  3223.       fi
  3224.   fi
  3225.   copies=1
  3226. ! for i in $*
  3227.   do
  3228.       case $i in
  3229.       -F)
  3230. --- 30,36 ----
  3231.       fi
  3232.   fi
  3233.   copies=1
  3234. ! for i in "$@"
  3235.   do
  3236.       case $i in
  3237.       -F)
  3238. ***************
  3239. *** 58,63 ****
  3240. --- 61,86 ----
  3241.       -m* | -c*)
  3242.           macros="$macros `echo $i | sed -e 's/-[cm]//'`"
  3243.           ;;
  3244. +     -pS*)
  3245. +         case $i in
  3246. +         -pSlet*) paper=letter ;;
  3247. +         -pSleg*) paper=legal ;;
  3248. +         -pSe*) paper=executive ;;
  3249. +         -pSa4) paper=a4 ;;
  3250. +         -pSco*) paper='com-10' ;;
  3251. +         -pSm*) paper=monarch ;;
  3252. +         -pSc5) paper=c5 ;;
  3253. +         -pSd*) paper=dl ;;
  3254. +         *) echo "$0: Illegal paper selection: $i" >&2 ; exit 1 ;;
  3255. +         esac
  3256. +         ;;
  3257. +     -pO*)
  3258. +         case $i in
  3259. +         -pOl*) orientation=landscape ;;
  3260. +         -pOp*) orientation=portrait ;;
  3261. +         *) echo "$0: Illegal orientation: $i" >&2 ; exit 1 ;;
  3262. +         esac
  3263. +         ;;
  3264.       -)
  3265.           files="$files $i"
  3266.           ;;
  3267. ***************
  3268. *** 78,83 ****
  3269. --- 101,109 ----
  3270.       -g*)
  3271.           garg=$i
  3272.           ;;
  3273. +     -l*)
  3274. +         xlpargs="$xlpargs `echo $i | sed 's/^-l//'`"
  3275. +         ;;
  3276.       -*)
  3277.           args="$args $i"
  3278.           ;;
  3279. ***************
  3280. *** 127,132 ****
  3281. --- 153,180 ----
  3282.       echo "$0: Can't find psrofflib in ., lib, or $LIBDIR/lib" >&2
  3283.       exit 1
  3284.   fi
  3285. + case "$paper-$orientation" in
  3286. +     letter-landscape) pctrl="-l8.50i -w11.00i -PXlandscape" ;;
  3287. +     letter-portrait) pctrl="-l11.00i -w8.50i -PXportrait" ;;
  3288. +     legal-landscape) pctrl="-l8.50i -w14.00i -PXlandscape" ;;
  3289. +     legal-portrait) pctrl="-l14.00i -w8.50i -PXportrait" ;;
  3290. +     executive-landscape) pctrl="-l7.25i -w10.50i -PXlandscape" ;;
  3291. +     executive-portrait) pctrl="-l10.50i -w7.25i -PXportrait" ;;
  3292. +     a4-landscape) pctrl="-l8.27i -w11.69i -PXlandscape" ;;
  3293. +     a4-portrait) pctrl="-l11.69i -w8.27i -PXportrait" ;;
  3294. +     com-10-landscape) pctrl="-l4.12i -w9.50i -PXlandscape" ;;
  3295. +     com-10-portrait) pctrl="-l9.50i -w4.12i -PXportrait" ;;
  3296. +     monarch-landscape) pctrl="-l3.87i -w7.50i -PXlandscape" ;;
  3297. +     monarch-portrait) pctrl="-l7.50i -w3.87i -PXportrait" ;;
  3298. +     c5-landscape) pctrl="-l6.38i -w9.01i -PXlandscape" ;;
  3299. +     c5-portrait) pctrl="-l9.01i -w6.38i -PXportrait" ;;
  3300. +     dl-landscape) pctrl="-l4.33i -w8.66i -PXlandscape" ;;
  3301. +     dl-portrait) pctrl="-l8.66i -w4.33i -PXportrait" ;;
  3302. +     *)
  3303. +     echo "$0: Can't find $paper-$orientation in permissible values" >&2
  3304. +     exit 1
  3305. +     ;;
  3306. + esac
  3307.   
  3308.   F=''
  3309.   #    If your system has no awk (or a busted one), you may have to
  3310. ***************
  3311. *** 302,307 ****
  3312. --- 350,356 ----
  3313.   if $term
  3314.   then
  3315.       lparg='| cat'
  3316. +     xlpargs=
  3317.   fi
  3318.   
  3319.   #    Okay, let's DO it!
  3320. ***************
  3321. *** 336,342 ****
  3322.       $troff $otroff $widtharg $args $ml - 2>&1
  3323.       else
  3324.       $troff $widtharg $args $ml -
  3325. !     fi | eval "$t2 $t2arg $lparg"
  3326.       rc=$?
  3327.   
  3328.   fi
  3329. --- 385,391 ----
  3330.       $troff $otroff $widtharg $args $ml - 2>&1
  3331.       else
  3332.       $troff $widtharg $args $ml -
  3333. !     fi | eval "$t2 $pctrl $t2arg $lparg $xlpargs"
  3334.       rc=$?
  3335.   
  3336.   fi
  3337. Index: ./lj.c
  3338. *** /tmp/PATCHold/./lj.c    Wed Jan 13 02:20:17 1993
  3339. --- ./lj.c    Wed Jan 13 02:20:19 1993
  3340. ***************
  3341. *** 32,38 ****
  3342.   
  3343.   #ifndef    lint
  3344.   static char SCCSid[] =
  3345. !     "@(#)lj.c: 2.13 Copyright 92/11/26 19:43:30 Chris Lewis";
  3346.   #endif
  3347.   
  3348.   struct troff2befont ljStdFont[108] = {
  3349. --- 32,38 ----
  3350.   
  3351.   #ifndef    lint
  3352.   static char SCCSid[] =
  3353. !     "@(#)lj.c: 2.15 Copyright 92/12/20 23:06:02 Chris Lewis";
  3354.   #endif
  3355.   
  3356.   struct troff2befont ljStdFont[108] = {
  3357. ***************
  3358. *** 306,312 ****
  3359.   ljPage() {
  3360.       if (!pagePending) {
  3361.       emitrast();
  3362. !     printf("\033&l0H");
  3363.       }
  3364.       pagePending = 1;
  3365.   }
  3366. --- 306,312 ----
  3367.   ljPage() {
  3368.       if (!pagePending) {
  3369.       emitrast();
  3370. !     putchar('\f');
  3371.       }
  3372.       pagePending = 1;
  3373.   }
  3374. ***************
  3375. *** 798,803 ****
  3376. --- 798,805 ----
  3377.       sprintf(LJF, "%s/lj", LIBDIR);
  3378.   #endif
  3379.   
  3380. +     setparams(LJRESOLUTION);
  3381.       /* to ensure that the strings are long enough for indexing and
  3382.          are sufficiently initialized */
  3383.   
  3384. ***************
  3385. *** 897,976 ****
  3386.       Strip out line termination.
  3387.   */
  3388.   
  3389.   ljXlate(library)
  3390.   FILE *library; {
  3391. !     char buf[4];
  3392. !     int c, i;
  3393. !     c = getc(library);
  3394. !     while(!feof(library)) {
  3395.   
  3396. !       nextchar:
  3397. !     switch(c) {
  3398. !         case '%':
  3399. !         /* strip from percent sign to end of line */
  3400. !         /* If line is %%%<something> pass onto interp */
  3401. !         if (((c = getc(library)) == '%') &&
  3402. !             ((c = getc(library)) == '%')) {
  3403. !             char buf2[4];
  3404. !             sprintf(buf2, ".%s", be->bename);
  3405. !             fgets(buf, strlen(buf), library);
  3406. !             interp(buf, ljXlate, buf2);
  3407. !             break;
  3408. !         }
  3409. !         while ((c = getc(library)) != EOF && c != '\n');
  3410. !         break;
  3411. !         case '\n':    /* throw away real newlines. */
  3412. !         break;
  3413. !         case '\\':
  3414. !         c = getc(library);
  3415. !         if (c == 'x' || c == 'X') {
  3416. !             i = 0;
  3417. !             while(1) {
  3418. !             c = getc(library);
  3419. !             if (c == EOF || !((c >= '0' && c <= '9') ||
  3420. !                       (c >= 'A' && c <= 'F') ||
  3421. !                       (c >= 'a' && c <= 'f')))
  3422. !                 goto nextchar;
  3423. !             buf[i++] = c;
  3424. !             if (i == 2) {
  3425. !                 buf[i] = '\0';
  3426. !                 sscanf(buf, "%x", &i);
  3427. !                 putchar(i);
  3428. !                 i = 0;
  3429. !             }
  3430.               }
  3431. !         } else {
  3432. !             buf[0] = c;
  3433. !             i = 1;
  3434. !             while(1) {
  3435. !             c = getc(library);
  3436. !             if (c == EOF || c < '0' || c > '7')
  3437. !                 goto nextchar;
  3438. !             buf[i++] = c;
  3439. !             if (i == 3) {
  3440. !                 buf[i] = '\0';
  3441. !                 sscanf(buf, "%o", &i);
  3442. !                 putchar(i);
  3443. !                 i = 0;
  3444.               }
  3445.               }
  3446. -         }
  3447.           /* NOTREACHED */
  3448.   
  3449. !         case ' ': case '\t':
  3450. !         break;
  3451. !         case EOF:
  3452. !         fprintf(stderr, "%s: Unexpected eof on ljlib\n", progname);
  3453. !         break;
  3454.   
  3455. !         default:
  3456. !         putchar(c);
  3457.       }
  3458. !     c = getc(library);
  3459.       }
  3460.   }
  3461.   
  3462. --- 899,989 ----
  3463.       Strip out line termination.
  3464.   */
  3465.   
  3466. + #define mgetc(p) (*(p+1) ? *(++p): EOF)
  3467.   ljXlate(library)
  3468.   FILE *library; {
  3469. !     char buf[5];
  3470. !     char line[512], *p;
  3471. !     int state = 0;
  3472. !     register int c;
  3473. !     int i;
  3474.   
  3475. !     while(fgets(line, sizeof(line), library)) {
  3476. !     if (!preproc(line, &state))
  3477. !         continue;
  3478. !     p = line;
  3479. !     while((c = *p++) != '\0') {
  3480. !       nextchar:
  3481. !         switch(c) {
  3482. !         case '%':
  3483. !             /* strip from percent sign to end of line */
  3484. !             /* If line is %%%<something> pass onto interp */
  3485. !             if ( *p == '%' && *(p+1) == '%' ) {
  3486. !             char buf2[14];
  3487. !             sprintf(buf2, ".%s", be->bename);
  3488. !             interp(p+2, ljXlate, buf2);
  3489. !             }
  3490. !             goto nextline;
  3491. !         case '\\':
  3492. !             c = *p++;
  3493. !             if (c == '\\') {
  3494. !             putchar(c);
  3495. !             continue;
  3496.               }
  3497. !             if (c == 'x' || c == 'X') {
  3498. !             i = 0;
  3499. !             while(1) {
  3500. !                 c = *p++;
  3501. !                 if (!c || !((c >= '0' && c <= '9') ||
  3502. !                        (c >= 'A' && c <= 'F') ||
  3503. !                        (c >= 'a' && c <= 'f')))
  3504. !                 goto nextchar;
  3505. !                 buf[i++] = c;
  3506. !                 if (i == 2) {
  3507. !                 buf[i] = '\0';
  3508. !                 sscanf(buf, "%x", &i);
  3509. !                 putchar(i);
  3510. !                 i = 0;
  3511. !                 }
  3512. !             }
  3513. !             } else {
  3514. !             buf[0] = c;
  3515. !             i = 1;
  3516. !             while(1) {
  3517. !                 c = *p++;
  3518. !                 if (!c || c < '0' || c > '7')
  3519. !                 goto nextchar;
  3520. !                 buf[i++] = c;
  3521. !                 if (i == 3) {
  3522. !                 buf[i] = '\0';
  3523. !                 sscanf(buf, "%o", &i);
  3524. !                 putchar(i);
  3525. !                 i = 0;
  3526. !                 }
  3527.               }
  3528.               }
  3529.           /* NOTREACHED */
  3530.   
  3531. !         case ' ': case '\t': case '\n':
  3532. !             break;
  3533.   
  3534. !         default:
  3535. !             putchar(c);
  3536. !             break;
  3537. !         }
  3538.       }
  3539. !       nextline:
  3540. !     ;
  3541.       }
  3542.   }
  3543.   
  3544. Index: ./ljdraw.c
  3545. *** /tmp/PATCHold/./ljdraw.c    Wed Jan 13 02:20:39 1993
  3546. --- ./ljdraw.c    Wed Jan 13 02:20:41 1993
  3547. ***************
  3548. *** 32,41 ****
  3549.   
  3550.   #ifndef    lint
  3551.   static char SCCSid[] =
  3552. !     "@(#)ljdraw.c: 1.2 Copyright 92/11/26 19:39:27 Chris Lewis";
  3553.   #endif
  3554.   
  3555. ! static int ljLine();
  3556.   
  3557.   /*    Do ditroff drawing command in s from origX,origY.
  3558.       If opcode 0 just moveto
  3559. --- 32,42 ----
  3560.   
  3561.   #ifndef    lint
  3562.   static char SCCSid[] =
  3563. !     "@(#)ljdraw.c: 1.6 Copyright 93/01/10 00:40:10 Chris Lewis";
  3564.   #endif
  3565.   
  3566. ! static int ljLine(), ljPos(), lineseg();
  3567. ! int asetbit();
  3568.   
  3569.   /*    Do ditroff drawing command in s from origX,origY.
  3570.       If opcode 0 just moveto
  3571. ***************
  3572. *** 537,543 ****
  3573.   /*    the fill range 0..1000 selects one of these 8
  3574.       rows.  Each row describes a 8x8 fill pattern.
  3575.    */
  3576. ! static char fillpat[9][8] = {
  3577.       { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
  3578.       { 0xc3, 0xa5, 0x24, 0xe9, 0xe9, 0x24, 0xa5, 0xc3 },
  3579.       { 0xe7, 0xc3, 0x24, 0x3c, 0x3c, 0x24, 0xc3, 0xe7 },
  3580. --- 538,544 ----
  3581.   /*    the fill range 0..1000 selects one of these 8
  3582.       rows.  Each row describes a 8x8 fill pattern.
  3583.    */
  3584. ! static unsigned char fillpat[9][8] = {
  3585.       { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
  3586.       { 0xc3, 0xa5, 0x24, 0xe9, 0xe9, 0x24, 0xa5, 0xc3 },
  3587.       { 0xe7, 0xc3, 0x24, 0x3c, 0x3c, 0x24, 0xc3, 0xe7 },
  3588. ***************
  3589. *** 562,568 ****
  3590.       register int t, td;
  3591.       static int lastind = -1;
  3592.       register int ind = fill/125;
  3593. !     register char fp = fillpat[ind][y&7];
  3594.   
  3595.   #ifdef DEBUG
  3596.       if (lastind != ind) {
  3597. --- 563,569 ----
  3598.       register int t, td;
  3599.       static int lastind = -1;
  3600.       register int ind = fill/125;
  3601. !     register unsigned char fp = fillpat[ind][y&7];
  3602.   
  3603.   #ifdef DEBUG
  3604.       if (lastind != ind) {
  3605. ***************
  3606. *** 669,675 ****
  3607.   
  3608.   /* only supports drawing resolution of 300 at the moment. */
  3609.   #define DRAWRES    300
  3610. - #define BYTESPERLINE (8 * DRAWRES) / 8
  3611.   #define RESMULT (LJRESOLUTION / DRAWRES)
  3612.   #define ESCLEN 25
  3613.   
  3614. --- 670,675 ----
  3615. ***************
  3616. *** 705,719 ****
  3617.       return(end - start);
  3618.   }
  3619.   
  3620.   emitrast()
  3621.   {
  3622.       int bperline;
  3623. -     int numx = BYTESPERLINE * 8;
  3624. -     int numy = pagelength;
  3625.       register char *ip, *lineanch, *nip;
  3626.       register currow, bcount;
  3627.       int linecount = 0;
  3628.   
  3629.       bperline = ((numx + 7) / 8);
  3630.   
  3631.       if (!thispage)
  3632. --- 705,721 ----
  3633.       return(end - start);
  3634.   }
  3635.   
  3636. + static int numx, numy;
  3637.   emitrast()
  3638.   {
  3639.       int bperline;
  3640.       register char *ip, *lineanch, *nip;
  3641.       register currow, bcount;
  3642.       int linecount = 0;
  3643.   
  3644. +     numx = pagewidth * LJRESOLUTION/TROFFRESOLUTION;
  3645. +     numy = pagelength * LJRESOLUTION/TROFFRESOLUTION;
  3646.       bperline = ((numx + 7) / 8);
  3647.   
  3648.       if (!thispage)
  3649. ***************
  3650. *** 753,774 ****
  3651.   asetbit(x, y)
  3652.   register int x, y; {
  3653.       thispage = 1;
  3654. !     if (y < 0 || y > pagelength) {
  3655. !     /*fprintf(stderr, "y (%d) too big or small (0..%d)\n", y, pagelength);*/
  3656.       return;
  3657.       }
  3658. !     if (x < 0 || x > BYTESPERLINE * 8) {
  3659. !     /*fprintf(stderr, "x (%d) too big or small (0..%d)\n", x, BYTESPERLINE*8);*/
  3660.       return;
  3661.       }
  3662.       if (!ljraster) {
  3663. !     ljraster = (char **) mustmalloc(pagelength * sizeof(char *),
  3664.           "ljraster pointers");
  3665. !     clrarray(ljraster, pagelength * sizeof(char *));
  3666.       }
  3667.       if (!ljraster[y]) {
  3668. !     ljraster[y] = (char *) mustmalloc(BYTESPERLINE, "ljraster line");
  3669. !     clrarray(ljraster[y], BYTESPERLINE);
  3670.       }
  3671.       ljraster[y][x >> 3] |= (0x80 >> (x & 0x7));
  3672.   }
  3673. --- 755,776 ----
  3674.   asetbit(x, y)
  3675.   register int x, y; {
  3676.       thispage = 1;
  3677. !     if (y < 0 || y >= numy) {
  3678. !     /*fprintf(stderr, "y (%d) too big or small (0..%d)\n", y, numy);*/
  3679.       return;
  3680.       }
  3681. !     if (x < 0 || x >= numx) {
  3682. !     /*fprintf(stderr, "x (%d) too big or small (0..%d)\n", x, numx);*/
  3683.       return;
  3684.       }
  3685.       if (!ljraster) {
  3686. !     ljraster = (char **) mustmalloc(numy * sizeof(char *),
  3687.           "ljraster pointers");
  3688. !     clrarray(ljraster, numy * sizeof(char *));
  3689.       }
  3690.       if (!ljraster[y]) {
  3691. !     ljraster[y] = (char *) mustmalloc(numx/8, "ljraster line");
  3692. !     clrarray(ljraster[y], numx/8);
  3693.       }
  3694.       ljraster[y][x >> 3] |= (0x80 >> (x & 0x7));
  3695.   }
  3696. Index: ./debug.c
  3697. *** /tmp/PATCHold/./debug.c    Wed Jan 13 02:20:53 1993
  3698. --- ./debug.c    Wed Jan 13 02:20:54 1993
  3699. ***************
  3700. *** 11,17 ****
  3701.   
  3702.   #ifndef    lint
  3703.   static char SCCSid[] =
  3704. !     "@(#)debug.c: 2.7 Copyright 92/01/23 14:24:37 Chris Lewis";
  3705.   #endif
  3706.   
  3707.   #ifdef    DEBUG
  3708. --- 11,17 ----
  3709.   
  3710.   #ifndef    lint
  3711.   static char SCCSid[] =
  3712. !     "@(#)debug.c: 2.8 Copyright 92/12/04 23:18:42 Chris Lewis";
  3713.   #endif
  3714.   
  3715.   #ifdef    DEBUG
  3716. ***************
  3717. *** 104,110 ****
  3718.   mustmalloc(n, msg)
  3719.   int n;
  3720.   char *msg; {
  3721. -     extern char *malloc();
  3722.       register char *p = malloc((unsigned) n);
  3723.       if (!p) {
  3724.       fprintf(stderr, "%s: Out of space! (requesting %d bytes, key: %s)\n",
  3725. --- 104,109 ----
  3726. Index: ./lj3draw.c
  3727. *** /tmp/PATCHold/./lj3draw.c    Wed Jan 13 02:21:02 1993
  3728. --- ./lj3draw.c    Wed Jan 13 02:21:03 1993
  3729. ***************
  3730. *** 29,35 ****
  3731.   
  3732.   #ifndef    lint
  3733.   static char SCCSid[] =
  3734. !     "@(#)lj3draw.c: 1.3 Copyright 92/11/26 19:42:32 Chris Lewis";
  3735.   #endif
  3736.   
  3737.   #define to_deg(a)    ((180.0/M_PI) * (a))
  3738. --- 29,35 ----
  3739.   
  3740.   #ifndef    lint
  3741.   static char SCCSid[] =
  3742. !     "@(#)lj3draw.c: 1.5 Copyright 92/12/22 02:16:58 Chris Lewis";
  3743.   #endif
  3744.   
  3745.   #define to_deg(a)    ((180.0/M_PI) * (a))
  3746. ***************
  3747. *** 82,88 ****
  3748. --- 82,92 ----
  3749.       double w, t1, t2, t3;
  3750.       char *command;
  3751.       Pt *p;
  3752. +     static xscale, yscale = 0;
  3753. +     extern char *findval();
  3754.   
  3755. +     xscale = pagewidth * LJRESOLUTION / TROFFRESOLUTION;
  3756. +     yscale = pagelength * LJRESOLUTION / TROFFRESOLUTION;
  3757.   
  3758.       /* map absolute beginning position */
  3759.       origX = TROFF2LJX(origX);
  3760. ***************
  3761. *** 198,206 ****
  3762.           /* Use 'CI r;' for ellipse, 'WG r,0,360;' for filled ellipse */
  3763.           ENTER_HPGL2;
  3764.           printf("PU;PR%d,0;SC0,%d,0,%d;", numbers[0]/2, 
  3765. !         (int)(XSCALE * ((float)numbers[1]/numbers[0])), YSCALE);
  3766.           printf("%s%d%s;SC0,%d,0,%d", command, numbers[1]/2,
  3767. !         (opcode == 'E' ? ",0,360" : ""), XSCALE, YSCALE);
  3768.           EXIT_HPGL2;
  3769.           break;
  3770.       case 'p':
  3771. --- 202,210 ----
  3772.           /* Use 'CI r;' for ellipse, 'WG r,0,360;' for filled ellipse */
  3773.           ENTER_HPGL2;
  3774.           printf("PU;PR%d,0;SC0,%d,0,%d;", numbers[0]/2, 
  3775. !         (int)(xscale * ((float)numbers[1]/numbers[0])), yscale);
  3776.           printf("%s%d%s;SC0,%d,0,%d", command, numbers[1]/2,
  3777. !         (opcode == 'E' ? ",0,360" : ""), xscale, yscale);
  3778.           EXIT_HPGL2;
  3779.           break;
  3780.       case 'p':
  3781. Index: ./pkscale.c
  3782. *** /tmp/PATCHold/./pkscale.c    Wed Jan 13 02:21:18 1993
  3783. --- ./pkscale.c    Wed Jan 13 02:21:19 1993
  3784. ***************
  3785. *** 12,18 ****
  3786.   #ifdef    PK
  3787.   
  3788.   #ifndef lint
  3789. ! static char SCCSid[] = "@(#)pkscale.c 1.3 Copyright 92/10/30 02:27:04 Chris Lewis";
  3790.   #endif
  3791.   
  3792.   #include "pk.h"
  3793. --- 12,18 ----
  3794.   #ifdef    PK
  3795.   
  3796.   #ifndef lint
  3797. ! static char SCCSid[] = "@(#)pkscale.c 1.4 Copyright 92/12/04 23:12:13 Chris Lewis";
  3798.   #endif
  3799.   
  3800.   #include "pk.h"
  3801. ***************
  3802. *** 101,106 ****
  3803. --- 101,107 ----
  3804.       npc->pkc_sfpr = r = (struct ras *) mustmalloc(sizeof(struct ras),
  3805.           "SFP raster header for scale");
  3806.       
  3807. +     npc->pkc_pkr = (int8 *) NULL;
  3808.       npc->pkc_height = scalenum(sf, npc->pkc_height)+1;
  3809.       npc->pkc_width = scalenum(sf, npc->pkc_width)+1;
  3810.       npc->pkc_dx = scalenum(sf, npc->pkc_dx);
  3811. Index: ./pk.c
  3812. *** /tmp/PATCHold/./pk.c    Wed Jan 13 02:21:29 1993
  3813. --- ./pk.c    Wed Jan 13 02:21:31 1993
  3814. ***************
  3815. *** 13,19 ****
  3816.   #ifdef    PK
  3817.   
  3818.   #ifndef lint
  3819. ! static char SCCSid[] = "@(#)pk.c 2.4 Copyright 92/03/12 01:11:09 Chris Lewis";
  3820.   #endif
  3821.   
  3822.   #define    DRAW
  3823. --- 13,19 ----
  3824.   #ifdef    PK
  3825.   
  3826.   #ifndef lint
  3827. ! static char SCCSid[] = "@(#)pk.c 2.7 Copyright 93/01/05 23:46:55 Chris Lewis";
  3828.   #endif
  3829.   
  3830.   #define    DRAW
  3831. ***************
  3832. *** 32,38 ****
  3833.   
  3834.   static FILE *fin;
  3835.   static char *filename;    /* name of *current* font being read */
  3836. - extern char *malloc();
  3837.   
  3838.   static long flag_byte;
  3839.   static repeatcount;
  3840. --- 32,37 ----
  3841. ***************
  3842. *** 674,681 ****
  3843.       sfp_hmi = (double) c / 4 + .5;
  3844.   
  3845.       c = get2int();    /* retrieved *height* */
  3846. !     p->pkp_ds = (c * POINT * pow2(20)) / (OUTRES*4);
  3847. !     p->pkp_npts = (p->pkp_ds / pow2(20)) + 0.5;
  3848.   
  3849.       get2int();    /* dummy */
  3850.       get1int();    /* dummy */
  3851. --- 673,680 ----
  3852.       sfp_hmi = (double) c / 4 + .5;
  3853.   
  3854.       c = get2int();    /* retrieved *height* */
  3855. !     p->pkp_npts = (double) (c * POINT) / (OUTRES * 4) + 0.5;
  3856. !     p->pkp_ds = p->pkp_npts * pow2(20);
  3857.   
  3858.       get2int();    /* dummy */
  3859.       get1int();    /* dummy */
  3860. ***************
  3861. *** 863,870 ****
  3862.   
  3863.       fputshort((long) p->pkp_symset, sfp);
  3864.   
  3865. !     fputshort((long) (OUTRES * p->pkp_npts * 4) / 120, sfp);
  3866. !     fputshort((long) (p->pkp_npts * (OUTRES / POINT) * 4), sfp);
  3867.       fputshort(0, sfp);
  3868.       fputc(0, sfp);
  3869.       fputc(p->pkp_style, sfp);
  3870. --- 862,869 ----
  3871.   
  3872.       fputshort((long) p->pkp_symset, sfp);
  3873.   
  3874. !     fputshort((long) (p->pkp_npts * OUTRES * 4 / 120), sfp);
  3875. !     fputshort((long) (p->pkp_npts * OUTRES * 4 / POINT), sfp);
  3876.       fputshort(0, sfp);
  3877.       fputc(0, sfp);
  3878.       fputc(p->pkp_style, sfp);
  3879.