home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume14 / mp-2.4.5 / patch02 < prev    next >
Text File  |  1990-09-15  |  56KB  |  1,845 lines

  1. Newsgroups: comp.sources.misc
  2. X-UNIX-From: rburridge@Sun.COM
  3. subject: v14i091: Official patch #7 for mp v2.4.
  4. from: rburridge@Sun.COM (Rich Burridge)
  5. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  6.  
  7. Posting-number: Volume 14, Issue 91
  8. Submitted-by: rburridge@Sun.COM (Rich Burridge)
  9. Archive-name: mp-2.4.5/patch02
  10.  
  11. [Brandon, could you post this to comp.sources.misc please? I've already
  12.  posted a copy to comp.sources.bugs. Thanks].
  13.  
  14. Mp is a Postscript pretty printer for mail,news and ordinary files.
  15.  
  16. This is official patch #7 for mp v2.4.
  17.  
  18. ** Mp v2.4 was posted to comp.sources.misc last week at patchlevel #5. **
  19.  
  20. It makes the following changes:
  21.  
  22.     *  From Johan Vromans <jv@mh.nl>
  23.        Completely revised how mp now does it's processing. See the new
  24.        section in the README file entitled "How mp works" for more details.
  25.        Introduces a new prologue file mp.pro.l.ps for handling the standard
  26.        printing in landscape mode with 2 columns. Changes to most other
  27.        files. The MANIFEST and FILES files have been updated.
  28.  
  29.     *  From James F. Blake <jim@doctor.chem.yale.edu>
  30.        From Rainer Klute <klute@unido.informatik.uni-dortmund.de>
  31.        Mp crashed with a segmentation violation if the mail message has no
  32.        subject line.
  33.  
  34.     *  From Bruno Pillard <bp@chorus.fr>
  35.        Added the printing of the username below the date when printing
  36.        news articles.
  37.  
  38.        Fixed two typos in the mailp shell script, and added the installation
  39.        of mailp to the Makefile.dist file. Support for the PRINTER variable
  40.        has also been added to mailp.
  41.  
  42.     *  From Ran Ever-Hadani <nsc!taux01.nsc.com!crehta@Sun.COM>
  43.        When mp -a is invoked from within the nn news reader, the "Article
  44.        from" header was displayed incorrectly.
  45.  
  46.     *  From Lupe Christoph <lupe@alanya.Germany.Sun.COM>
  47.        The -f (filofax) and -t (Time Manager) options didn't print
  48.        correctly on a PostScript print which has page reversal set. Johan
  49.        Vromans work on the restructuring of the PostScript and the way
  50.        prologues are handled, has fixed this.
  51.        
  52.     *  From John Little <gaijin@ale.Japan.Sun.COM>
  53.        The NAME environment variable (if set) should be processed the same
  54.        way as the GECOS passwd field. See the GECOSFIELDS and GECOSLENGTH
  55.        definitions in Makefile.dist for more details.
  56.  
  57. TO INSTALL:
  58. -----------
  59.  
  60. A shar file is included below which contains patch #7 and the new prologue
  61. file, mp.pro.l.ps. Unpack these (in the mp source directory) using sh.
  62.  
  63. Apply the patch with Larry Wall's patch program. Copy Makefile.dist to
  64. Makefile and adjust for your site. Then do a "make". Check the paper size
  65. in each of the prologue files that you use is correct for your site (US
  66. Letter or A4), then do a "make install".
  67.  
  68. If you need to get patch #6 then it can be obtained from the automatic
  69. mail archive server, by sending a message to rb-archive-server@Aus.Sun.COM
  70. containing the line:
  71.  
  72. send mp patch6
  73.  
  74. If this is all getting too confusing for you, then the latest complete mp
  75. distribution can be obtained from the same address, by sending a message
  76. containing the lines:
  77.  
  78. send mp part1
  79. send mp part2
  80.  
  81. If the mail is likely to go back through any sites that impose a size limit,
  82. then I suggest you divide the above request up into two separate mail
  83. messages.
  84.  
  85. You can also include a path line in these requests to indicate the mail
  86. path that the archive server should use to send the files to you. Such a
  87. path line could be:
  88.  
  89. path uunet.uu.net!hostname!user
  90.  
  91. Note that this is uunet.uu.net and not just uunet. Sun.COM doesn't recognise
  92. just uunet.
  93.  
  94. Rich Burridge,          DOMAIN: richb@Aus.Sun.COM
  95. Sun Microsystems.       ACSNET: richb@sunaus.sun.oz
  96. PHONE: +61 2 413 2666   UUCP:   {uunet,mcvax,ukc}!munnari!sunaus.oz!richb
  97.  
  98. ------CUT HERE------patch.7 + mp.pro.l.ps------CUT HERE------
  99. #! /bin/sh
  100. # this is a shell archive, meaning:
  101. # 1. Remove everything above the #! /bin/sh line
  102. # 2. Save the resulting text in a file.
  103. # 3. Execute the file with /bin/sh to create the files:
  104. #    patch.7
  105. #    mp.pro.l.ps
  106. # This archive created: Fri Sep  7 14:19:11 EST 1990
  107. #
  108. #
  109. export PATH; PATH=/bin:$PATH
  110. #
  111. if [ -f patch.7 ]
  112. then
  113. echo shar: will not over-write existing file patch.7
  114. else
  115. echo shar: extracting 'patch.7',    47191 characters
  116. cat > patch.7 <<'Funky_Stuff'
  117.  
  118. ------- README -------
  119. *** /tmp/da08326    Fri Sep  7 14:17:27 1990
  120. --- README    Fri Sep  7 13:41:52 1990
  121. ***************
  122. *** 11,17 ****
  123.   
  124.   1. What is mp?
  125.   2. Getting started.
  126. ! 3. Acknowledgements.
  127.   --------------------------------------------------------------------------
  128.   
  129.   
  130. --- 11,18 ----
  131.   
  132.   1. What is mp?
  133.   2. Getting started.
  134. ! 3. How mp works.
  135. ! 4. Acknowledgements.
  136.   --------------------------------------------------------------------------
  137.   
  138.   
  139. ***************
  140. *** 54,66 ****
  141.   
  142.   See the Makefile for a detailed description of each of these definitions.
  143.   
  144. ! Once you are happy with these settings, then you should do a "make" followed
  145. ! by a "make install" which will compile the mp program and put the files in
  146.   their default locations. You will probably have to be super-user when you do
  147. ! the "make install"
  148.   
  149.   
  150. ! 3. Acknowledgements.
  151.   --------------------
  152.   
  153.   The original version of mp was written by Steve Holden in the ICON language,
  154. --- 55,123 ----
  155.   
  156.   See the Makefile for a detailed description of each of these definitions.
  157.   
  158. ! Once you are happy with these settings, then you should do a "make", which
  159. ! will compile the mp program.
  160. ! You should then check each of the PostScript prologue files (these have an
  161. ! extension of .ps) and set the paper size correctly for your site. The paper
  162. ! size is defaulted to US Letter size, so this will work successfully on A4
  163. ! sized paper but not use all of the paper.
  164. ! This should be followed by a "make install" which will put the files in
  165.   their default locations. You will probably have to be super-user when you do
  166. ! the "make install".
  167.   
  168.   
  169. ! 3. How mp works.
  170. ! ----------------
  171. ! When mp processes a file, it first reads the designated prologue and
  172. ! extracts data from the following lines:
  173. !    %%PageLength nn    - the number of lines per page
  174. !    %%LineLength nn    - the number of chars on a line
  175. !    %%NumCols nn               - the number of columns per page
  176. ! Then it reads the input files and reshapes them into PostScript using the
  177. ! following structuring conventions:
  178. !       %%Page: ? 1
  179. !       (1) newpage     <- physical page #1
  180. !       ...data...
  181. !       (1) 1 endcol    <- logical page #1, 1st col on this page
  182. !       ...data...
  183. !       (2) 2 endcol    <- logical page #2, 2nd col on this page
  184. !       ...data...
  185. !       (3) 3 endcol    <- logical page #3, 3rd col on this page
  186. !       (1) endpage     <- physical page #1
  187. !       %%Page: ? 2
  188. !       (2) newpage     <- physical page #2
  189. !       ...data...
  190. !       (4) 1 endcol    <- logical page #4, 1st col on this page
  191. !       ...data...
  192. !       (5) 2 endcol    <- logical page #5, 2nd col on this page
  193. !       (3) endpage     <- physical page #2
  194. !       endfile         <- end of first or only input file
  195. !       %%Page....      <
  196. !       ....            <- 2nd input file, if any
  197. !       endfile         <
  198. !       ...             <- more, if any
  199. !       %%Trailer
  200. !       %%Pages: nn
  201. !       %%EOF
  202. ! Prologue files need to supply the above procedures, which may be empty.
  203. ! The following prologues are supplied with mp:
  204. !       mp.pro.ps               standard prologue
  205. !       mp.pro.alt.ps           alternative prologue, page nos. bottom right
  206. !       mp.pro.l.ps             standard prologue, landscape, 2 columns
  207. !       mp.pro.filofax.ps       filofax prologue
  208. !       mp.pro.timeman.ps       time manager prologue
  209. ! 4. Acknowledgements.
  210.   --------------------
  211.   
  212.   The original version of mp was written by Steve Holden in the ICON language,
  213. ***************
  214. *** 77,83 ****
  215.   made substantial improvements to the programs user friendliness and
  216.   robustness. Sam Manogharan added support for printing multiple files
  217.   specified on the command line, and subject line filename print for ordinary
  218. ! files. The landscape mode was written by Michael Tuchiarone.
  219.   
  220.   Thanks go also to Bill Shannon, Roger De Salis, L. Jill Debord, Frederick
  221.   Avolio, Mark Prior, Stephen Frede, Craig Bishop, Jimmy Aitken, Hugues Leroy,
  222. --- 134,142 ----
  223.   made substantial improvements to the programs user friendliness and
  224.   robustness. Sam Manogharan added support for printing multiple files
  225.   specified on the command line, and subject line filename print for ordinary
  226. ! files. The landscape mode was written by Michael Tuchiarone. The revising
  227. ! and tidying up of the PostScript structuring and the way that the prologue
  228. ! files are handled was done by Johan Vromans.
  229.   
  230.   Thanks go also to Bill Shannon, Roger De Salis, L. Jill Debord, Frederick
  231.   Avolio, Mark Prior, Stephen Frede, Craig Bishop, Jimmy Aitken, Hugues Leroy,
  232. ***************
  233. *** 84,91 ****
  234.   Bertrand Decouty, David Fiedler, Scott A. Jordahl, David Boone, Steve Cliffe,
  235.   Maureen Chew, Brian Kohn, Walter Underwood, Mike Khaw, Rick Gunderson, Johan
  236.   Vromans, Brachet, Pierre Mareschal, Roger Riggs, Larry Tsui, Mike Bundschuh,
  237. ! Amos Shapir, Bruce G Barnett and Pauline van Winsen for bug reports and/or
  238. ! bug fixes plus enhancements.
  239.   
  240.   My thanks also goes to Glenn Reid from Adobe Systems for the backspacefont.ps
  241.   code used in the prologue files. I'm grateful to all these people, plus
  242. --- 143,151 ----
  243.   Bertrand Decouty, David Fiedler, Scott A. Jordahl, David Boone, Steve Cliffe,
  244.   Maureen Chew, Brian Kohn, Walter Underwood, Mike Khaw, Rick Gunderson, Johan
  245.   Vromans, Brachet, Pierre Mareschal, Roger Riggs, Larry Tsui, Mike Bundschuh,
  246. ! Amos Shapir, Bruce G Barnett, Pauline van Winsen, James F. Blake, Bruno
  247. ! Pillard, Rainer Klute, Ran Ever-Hadani, Lupe Christoph and John Little for
  248. ! bug reports and/or bug fixes plus enhancements.
  249.   
  250.   My thanks also goes to Glenn Reid from Adobe Systems for the backspacefont.ps
  251.   code used in the prologue files. I'm grateful to all these people, plus
  252.  
  253. ------- mp.pro.ps -------
  254. *** /tmp/da08329    Fri Sep  7 14:17:27 1990
  255. --- mp.pro.ps    Fri Sep  7 10:10:12 1990
  256. ***************
  257. *** 20,25 ****
  258. --- 20,26 ----
  259.   %
  260.   /fullwidth 8.5 inch def
  261.   /fullheight 11 inch def
  262.   /leftedge 0 def
  263.   /rightedge fullwidth def
  264.   /bottomedge 0 def
  265. ***************
  266. *** 82,89 ****
  267.       0.75 setgray fill
  268.   } def
  269.   
  270. ! /endpage    % page_number endpage --
  271.   {
  272.     gsave
  273.       fontH
  274.       leftedge 50 add topedge 56 sub    % bottom lt corner
  275. --- 83,98 ----
  276.       0.75 setgray fill
  277.   } def
  278.   
  279. ! /endpage        % page_number endpage --
  280.   {
  281. +   showpage              % display it
  282. + } def
  283. + /endfile { } def    % nothing needed
  284. + /endcol            % page_number col_number endcol --
  285. + {
  286. +   pop            % get rid of col_number
  287.     gsave
  288.       fontH
  289.       leftedge 50 add topedge 56 sub    % bottom lt corner
  290. ***************
  291. *** 115,126 ****
  292.       0 setgray
  293.       leftedge 50 add bottomedge 54 add moveto Subject show
  294.     grestore
  295. -   showpage              % display it
  296. -   newpage               % reset parameters for next
  297.   } def
  298.   
  299. ! /newpage
  300.   {
  301.     LandscapeMode {setlandscape} if
  302.     /lct 0 def
  303.     /ypos topedge 92 sub def
  304. --- 124,134 ----
  305.       0 setgray
  306.       leftedge 50 add bottomedge 54 add moveto Subject show
  307.     grestore
  308.   } def
  309.   
  310. ! /newpage    % page_number newpage --
  311.   {
  312. +   pop        % pageno
  313.     LandscapeMode {setlandscape} if
  314.     /lct 0 def
  315.     /ypos topedge 92 sub def
  316. ***************
  317. *** 141,157 ****
  318.     /LandscapeMode true def
  319.     /rightedge fullheight def
  320.     /topedge fullwidth def
  321. -   newpage
  322.   } def
  323.   
  324. - /endcol
  325. - {
  326. -   /lct 0 def
  327. -   /ypos topedge 92 sub def
  328. -   /xpos rightedge leftedge sub 2 div def
  329. -   xpos ypos moveto
  330. - } def
  331.   /showline
  332.   {
  333.     show
  334. --- 149,156 ----
  335. ***************
  336. *** 158,162 ****
  337.     /ypos ypos FontSize sub def
  338.     xpos ypos moveto
  339.   } def
  340. - newpage                    % establish first page parameters
  341. --- 157,159 ----
  342.  
  343. ------- mailp -------
  344. *** /tmp/da08332    Fri Sep  7 14:17:28 1990
  345. --- mailp    Fri Sep  7 12:38:53 1990
  346. ***************
  347. *** 13,23 ****
  348.   
  349.   case $0 in
  350.       *mailp)    PROG=mp       ;; 
  351. !     *newsp)       PROG=mp       ;;
  352.       *digestp)  PROG="mp -d"     ;;
  353.       *filep)       PROG="mp -o"  ;;
  354. !     *filofaxp) PROG="mp -f      ;;
  355. !     *timemanp) PROG="mp -t      ;;
  356.       *)    echo Unknown pretty printer: $0
  357.           exit;;
  358.   esac
  359. --- 13,23 ----
  360.   
  361.   case $0 in
  362.       *mailp)    PROG=mp       ;; 
  363. !     *newsp)       PROG="mp -a"  ;;
  364.       *digestp)  PROG="mp -d"     ;;
  365.       *filep)       PROG="mp -o"  ;;
  366. !     *filofaxp) PROG="mp -f"     ;;
  367. !     *timemanp) PROG="mp -t"     ;;
  368.       *)    echo Unknown pretty printer: $0
  369.           exit;;
  370.   esac
  371. ***************
  372. *** 28,33 ****
  373.   fi
  374.   while [ $# -gt 0 ]
  375.   do
  376. !     /bin/cat $1 | ${BIN}/${PROG} | lpr -h -Plw
  377.       shift
  378.   done
  379. --- 28,33 ----
  380.   fi
  381.   while [ $# -gt 0 ]
  382.   do
  383. !     /bin/cat $1 | ${BIN}/${PROG} | lpr -h -P${PRINTER:-ps}
  384.       shift
  385.   done
  386.  
  387. ------- mp.pro.timeman.ps -------
  388. *** /tmp/da08335    Fri Sep  7 14:17:28 1990
  389. --- mp.pro.timeman.ps    Fri Sep  7 09:50:58 1990
  390. ***************
  391. *** 5,10 ****
  392. --- 5,11 ----
  393.   %%CreationDate: see above
  394.   %%PageLength 60
  395.   %%LineLength 80
  396. + %%NumCols 3
  397.   %%DocumentFonts: Times-Bold Times-Roman Courier
  398.   %%Pages: (atend)
  399.   %%EndComments
  400. ***************
  401. *** 34,40 ****
  402.    
  403.   /CourierBack backspacefont
  404.    
  405. ! /FontSize 12 def
  406.   /font1d /Times-Bold            findfont def
  407.   /font2d /Times-Roman           findfont def
  408.   /font3d /CourierBack           findfont def
  409. --- 35,41 ----
  410.    
  411.   /CourierBack backspacefont
  412.    
  413. ! /FontSize 11 def
  414.   /font1d /Times-Bold            findfont def
  415.   /font2d /Times-Roman           findfont def
  416.   /font3d /CourierBack           findfont def
  417. ***************
  418. *** 44,54 ****
  419.   
  420.   /BoldFont      { font1d FontSize scalefont setfont } def
  421.   /pf            { font2d FontSize scalefont setfont } def
  422. ! /sf            { font3d 11       scalefont setfont } def
  423.   /fontH         { fontHd setfont } def
  424.   /fontD         { fontH2 setfont } def
  425.   /fontN         { fontNd setfont } def
  426.   
  427.   sf
  428.   %% stick in all the fudge factors here. May need changing for page sizes,
  429.   %% laserwriter setups etc?
  430. --- 45,56 ----
  431.   
  432.   /BoldFont      { font1d FontSize scalefont setfont } def
  433.   /pf            { font2d FontSize scalefont setfont } def
  434. ! /sf            { font3d 10       scalefont setfont } def
  435.   /fontH         { fontHd setfont } def
  436.   /fontD         { fontH2 setfont } def
  437.   /fontN         { fontNd setfont } def
  438.   
  439.   sf
  440.   %% stick in all the fudge factors here. May need changing for page sizes,
  441.   %% laserwriter setups etc?
  442. ***************
  443. *** 57,68 ****
  444.   /filowidth 520 def
  445.   /filoheight 1024 def
  446.   /margin 12 def
  447. - /xleft binderspace 6 add def
  448.   /yco filoheight 50 sub def            % space at the top
  449.   /xright filowidth binderspace add 30 sub def    % space at right
  450.   
  451. ! /endpage
  452.   {
  453.     gsave
  454.       fontH
  455.       % draw the top for owner
  456. --- 59,92 ----
  457.   /filowidth 520 def
  458.   /filoheight 1024 def
  459.   /margin 12 def
  460.   /yco filoheight 50 sub def            % space at the top
  461.   /xright filowidth binderspace add 30 sub def    % space at right
  462. + /xleft binderspace 6 add def
  463.   
  464. ! 0.5 0.5 scale
  465. ! 90 rotate
  466. ! -50 filoheight neg translate
  467. ! /newpage        % page_number newpage --
  468. ! { pop
  469. !   gsave            % save state for easy restore
  470. !   margin 0 translate
  471. !   /ypos filoheight 110 sub def
  472. !   xleft ypos moveto
  473. ! } def
  474. ! /endpage        % page_number endpage --
  475. ! { pop             % get rid of page_number
  476. !   showpage
  477. !   grestore
  478. ! } def
  479. ! /endfile { } def    % -- endfile --
  480. ! /endcol            % page_number column_number endcol --
  481.   {
  482. +   /thiscol exch def    % column_number
  483.     gsave
  484.       fontH
  485.       % draw the top for owner
  486. ***************
  487. *** 106,127 ****
  488.       dup stringwidth pop 2 div neg xright 10 sub add 46 moveto show
  489.       fontH
  490.     grestore
  491. !   modu 2 eq eof 0 ne or { showpage } if    % do a 'form feed'
  492. !                     % if ready for it
  493. !   eof 0 eq { newpage } if    % reset parameters for next if not end of file
  494.   } def
  495.   
  496. - /endfile
  497. - {
  498. -      /eof 1 def
  499. -      endpage
  500. - } def
  501.   /xo 36 def
  502.   /yo 0 def
  503.   /pageno 0 def
  504. - /modu pageno 3 mod def    % get mod to work out page pos
  505. - /eof 0 def
  506.   
  507.   /weearc            % draws a little arc to show where the holes go
  508.   { newpath
  509. --- 130,145 ----
  510.       dup stringwidth pop 2 div neg xright 10 sub add 46 moveto show
  511.       fontH
  512.     grestore
  513. !   filopage            % draw neccessary page breaks
  514. !   grestore gsave        % back to default
  515. !   filowidth thiscol mul margin add 0 translate
  516. !   /ypos filoheight 110 sub def
  517. !   xleft ypos moveto
  518.   } def
  519.   
  520.   /xo 36 def
  521.   /yo 0 def
  522.   /pageno 0 def
  523.   
  524.   /weearc            % draws a little arc to show where the holes go
  525.   { newpath
  526. ***************
  527. *** 132,142 ****
  528.   
  529.   /filopage
  530.   { gsave
  531. ! %  24 -118 translate
  532. !   /xstart filowidth modu mul def
  533. !   /xstart xstart binderspace add def
  534.     /xfin xstart filowidth add def
  535. !   modu 0 eq {        % first break
  536.       /yo 130 def    % show where the holes should be punched
  537.       weearc        % except that they will normally be off the edge of
  538.       /yo 238 def    % the page
  539. --- 150,158 ----
  540.   
  541.   /filopage
  542.   { gsave
  543. !   /xstart binderspace margin sub def
  544.     /xfin xstart filowidth add def
  545. !   thiscol 0 eq {        % first break
  546.       /yo 130 def    % show where the holes should be punched
  547.       weearc        % except that they will normally be off the edge of
  548.       /yo 238 def    % the page
  549. ***************
  550. *** 159,188 ****
  551.     grestore
  552.   } def
  553.   
  554. - /newpage
  555. - { 
  556. -   pageno 0 eq {            % set initial values for landscape drawing
  557. -         0.5 0.5 scale
  558. -         90 rotate
  559. -         -50 0 translate
  560. -         gsave            % save state for easy restore
  561. -     /eof 0 def
  562. -   } {
  563. -         grestore gsave        % return to preferred original state
  564. -   } ifelse            % initial setup
  565. -   /modu pageno 3 mod def    % get mod to work out page pos
  566. -   0 0 filoheight sub translate    % initial position (-filoheight)
  567. -   filopage            % draw neccessary page breaks
  568. -   /times filowidth modu mul def % shift origin as far right as needed
  569. -   /times times margin add def    % move right by fudge factor 12
  570. -   times 0 translate
  571. -   /lct 0 def
  572. -   /ypos filoheight 110 sub def
  573. -   xleft ypos moveto
  574. -   /pageno pageno 1 add def    % add one for the next time
  575. - } def
  576.   /showline
  577.   {
  578.     show
  579. --- 175,180 ----
  580. ***************
  581. *** 189,193 ****
  582.     /ypos ypos 12 sub def
  583.     xleft ypos moveto
  584.   } def
  585. - newpage            % establish first page parameters
  586. --- 181,183 ----
  587.  
  588. ------- mp.pro.filofax.ps -------
  589. *** /tmp/da08338    Fri Sep  7 14:17:29 1990
  590. --- mp.pro.filofax.ps    Fri Sep  7 09:50:56 1990
  591. ***************
  592. *** 5,10 ****
  593. --- 5,11 ----
  594.   %%CreationDate: see above
  595.   %%PageLength 60
  596.   %%LineLength 80
  597. + %%NumCols 3
  598.   %%DocumentFonts: Times-Bold Times-Roman Courier
  599.   %%Pages: (atend)
  600.   %%EndComments
  601. ***************
  602. *** 58,69 ****
  603.   /filowidth 484 def
  604.   /filoheight 972 def
  605.   /margin 12 def
  606. - /xleft binderspace 6 add def
  607.   /yco filoheight 50 sub def            % space at the top
  608.   /xright filowidth binderspace add 30 sub def    % space at right
  609.   
  610. ! /endpage
  611.   {
  612.     gsave
  613.       fontH
  614.       % draw the top for owner
  615. --- 59,92 ----
  616.   /filowidth 484 def
  617.   /filoheight 972 def
  618.   /margin 12 def
  619.   /yco filoheight 50 sub def            % space at the top
  620.   /xright filowidth binderspace add 30 sub def    % space at right
  621. + /xleft binderspace 6 add def
  622.   
  623. ! 0.5 0.5 scale
  624. ! 90 rotate
  625. ! -50 filoheight neg translate
  626. ! /newpage        % page_number newpage --
  627. ! { pop
  628. !   gsave            % save state for easy restore
  629. !   margin 0 translate
  630. !   /ypos filoheight 110 sub def
  631. !   xleft ypos moveto
  632. ! } def
  633. ! /endpage        % page_number endpage --
  634. ! { pop             % get rid of page_number
  635. !   showpage
  636. !   grestore
  637. ! } def
  638. ! /endfile { } def    % -- endfile --
  639. ! /endcol            % page_number column_number endcol --
  640.   {
  641. +   /thiscol exch def    % column_number
  642.     gsave
  643.       fontH
  644.       % draw the top for owner
  645. ***************
  646. *** 107,128 ****
  647.       dup stringwidth pop 2 div neg xright 10 sub add 46 moveto show
  648.       fontH
  649.     grestore
  650. !   modu 2 eq eof 0 ne or { showpage } if    % do a 'form feed'
  651. !                     % if ready for it
  652. !   eof 0 eq { newpage } if    % reset parameters for next if not end of file
  653.   } def
  654.   
  655. - /endfile
  656. - {
  657. -      /eof 1 def
  658. -      endpage
  659. - } def
  660.   /xo 36 def
  661.   /yo 0 def
  662.   /pageno 0 def
  663. - /modu pageno 3 mod def    % get mod to work out page pos
  664. - /eof 0 def
  665.   
  666.   /weearc            % draws a little arc to show where the holes go
  667.   { newpath
  668. --- 130,145 ----
  669.       dup stringwidth pop 2 div neg xright 10 sub add 46 moveto show
  670.       fontH
  671.     grestore
  672. !   filopage            % draw neccessary page breaks
  673. !   grestore gsave        % back to default
  674. !   filowidth thiscol mul margin add 0 translate
  675. !   /ypos filoheight 110 sub def
  676. !   xleft ypos moveto
  677.   } def
  678.   
  679.   /xo 36 def
  680.   /yo 0 def
  681.   /pageno 0 def
  682.   
  683.   /weearc            % draws a little arc to show where the holes go
  684.   { newpath
  685. ***************
  686. *** 133,143 ****
  687.   
  688.   /filopage
  689.   { gsave
  690. ! %  24 -118 translate
  691. !   /xstart filowidth modu mul def
  692. !   /xstart xstart binderspace add def
  693.     /xfin xstart filowidth add def
  694. !   modu 0 eq {        % first break
  695.       /yo 130 def    % show where the holes should be punched
  696.       weearc        % except that they will normally be off the edge of
  697.       /yo 238 def    % the page
  698. --- 150,158 ----
  699.   
  700.   /filopage
  701.   { gsave
  702. !   /xstart binderspace margin sub def
  703.     /xfin xstart filowidth add def
  704. !   thiscol 0 eq {        % first break
  705.       /yo 130 def    % show where the holes should be punched
  706.       weearc        % except that they will normally be off the edge of
  707.       /yo 238 def    % the page
  708. ***************
  709. *** 160,189 ****
  710.     grestore
  711.   } def
  712.   
  713. - /newpage
  714. - { 
  715. -   pageno 0 eq {            % set initial values for landscape drawing
  716. -         0.5 0.5 scale
  717. -         90 rotate
  718. -         -50 0 translate
  719. -         gsave            % save state for easy restore
  720. -     /eof 0 def
  721. -   } {
  722. -         grestore gsave        % return to preferred original state
  723. -   } ifelse            % initial setup
  724. -   /modu pageno 3 mod def    % get mod to work out page pos
  725. -   0 0 filoheight sub translate    % initial position (-filoheight)
  726. -   filopage            % draw neccessary page breaks
  727. -   /times filowidth modu mul def % shift origin as far right as needed
  728. -   /times times margin add def    % move right by fudge factor 12
  729. -   times 0 translate
  730. -   /lct 0 def
  731. -   /ypos filoheight 110 sub def
  732. -   xleft ypos moveto
  733. -   /pageno pageno 1 add def    % add one for the next time
  734. - } def
  735.   /showline
  736.   {
  737.     show
  738. --- 175,180 ----
  739. ***************
  740. *** 190,194 ****
  741.     /ypos ypos 12 sub def
  742.     xleft ypos moveto
  743.   } def
  744. - newpage            % establish first page parameters
  745. --- 181,183 ----
  746.  
  747. ------- header.c -------
  748. *** /tmp/da08341    Fri Sep  7 14:17:30 1990
  749. --- header.c    Fri Sep  7 13:29:36 1990
  750. ***************
  751. *** 127,132 ****
  752. --- 127,133 ----
  753.             get_header(APP_FROMHDR,   &apparently_from) ;
  754.             get_header(APP_TOHDR,     &apparently_to) ;
  755.             get_header(NEWSGROUPSHDR, &newsgroups) ;
  756. +           get_header(NEWSGROUPHDR,  &newsgroups) ;
  757.             get_header(REPLYHDR,      &reply_to) ;
  758.   
  759.             get_mult_hdr(TOHDR,       to) ;
  760. ***************
  761. *** 137,142 ****
  762. --- 138,145 ----
  763.   
  764.             if (doc_type != DO_NEWS && EQUAL(NEWSGROUPSHDR))
  765.               doc_type = DO_NEWS ;
  766. +           if (doc_type != DO_NEWS && EQUAL(NEWSGROUPHDR))
  767. +             doc_type = DO_NEWS ;
  768.           }
  769.         get_header(FROMHDR, &from) ;
  770.         get_header(SUBJECTHDR, &subject) ;
  771. ***************
  772. *** 201,207 ****
  773.         if (cc[0])           show_mult_hdr(CCHDR,     cc) ;
  774.         if (reply_to)        mixedshow(REPLYHDR,      reply_to) ;
  775.         if (newsgroups)      mixedshow(NEWSGROUPSHDR, newsgroups) ;
  776. !       if (subject[0])      mixedshow(SUBJECTHDR,    subject) ;
  777.         if (date)            mixedshow(DATEHDR,       date) ;
  778.       }
  779.   }
  780. --- 204,210 ----
  781.         if (cc[0])           show_mult_hdr(CCHDR,     cc) ;
  782.         if (reply_to)        mixedshow(REPLYHDR,      reply_to) ;
  783.         if (newsgroups)      mixedshow(NEWSGROUPSHDR, newsgroups) ;
  784. !       if (subject)         mixedshow(SUBJECTHDR,    subject) ;
  785.         if (date)            mixedshow(DATEHDR,       date) ;
  786.       }
  787.   }
  788.  
  789. ------- main.c -------
  790. *** /tmp/da08344    Fri Sep  7 14:17:30 1990
  791. --- main.c    Fri Sep  7 13:27:04 1990
  792. ***************
  793. *** 30,35 ****
  794. --- 30,38 ----
  795.    *
  796.    *  Landscape mode added by Michael Tuciarone.
  797.    *
  798. +  *  Revision of the PostScript structuring and the way that the prologue
  799. +  *  files are handled by Johan Vromans
  800. +  *
  801.    *----------------------------------------------------------------------
  802.    *
  803.    *  Copyright (c) Steve Holden and Rich Burridge.
  804. ***************
  805. *** 49,58 ****
  806.    
  807.   bool article  = FALSE ;       /* Set for news in "Article from " format. */
  808.   bool digest   = FALSE ;       /* Are we are printing a mail digest (-d) */
  809. - bool filofax  = FALSE ;       /* Set if we are printing a filofax file. */
  810.   bool folder   = FALSE ;       /* Set if we are printing a mail folder. */
  811.   bool text_doc = FALSE ;       /* Printing normal text (-o) */
  812. - bool timeman  = FALSE ;       /* Set if we are printing a Time Manager file. */
  813.    
  814.   /* Header definitions. */
  815.    
  816. --- 52,60 ----
  817.    
  818.   bool article  = FALSE ;       /* Set for news in "Article from " format. */
  819.   bool digest   = FALSE ;       /* Are we are printing a mail digest (-d) */
  820.   bool folder   = FALSE ;       /* Set if we are printing a mail folder. */
  821. + bool landscape = FALSE ;      /* Set if we are printing in landscape mode. */
  822.   bool text_doc = FALSE ;       /* Printing normal text (-o) */
  823.    
  824.   /* Header definitions. */
  825.    
  826. ***************
  827. *** 65,70 ****
  828. --- 67,73 ----
  829.   char *SUBJECTHDR    = "Subject:" ;
  830.   char *DATEHDR       = "Date:" ;
  831.   char *NEWSGROUPSHDR = "Newsgroups:" ;
  832. + char *NEWSGROUPHDR  = "Newsgroup:" ;
  833.   char *REPLYHDR      = "Reply_to:" ;
  834.   
  835.   /* Header lines. */
  836. ***************
  837. *** 91,96 ****
  838. --- 94,100 ----
  839.   char *progname    = NULL ;        /* Name of this program. */
  840.   char *prologue    = PROLOGUE ;    /* Name of PostScript prologue file. */
  841.   char proname[MAXPATHLEN] ;        /* Full pathname of the prologue file. */
  842. + char *whoami      = NULL ;        /* Login name of user. */
  843.   
  844.   /* Other globals. */
  845.   
  846. ***************
  847. *** 98,106 ****
  848.   
  849.   int colct = 0;              /* Column count on current page. */
  850.   int cmdfiles = 0 ;          /* Set if file to print given on command line. */
  851. - int landscape = 0;          /* Set if in landscape (wide) mode. */
  852.   int linect = 0 ;            /* Line count on current page. */
  853.   int llen = LINELENGTH ;     /* Number of characters per line. */
  854.   int optind ;                /* Optional command line argument indicator. */
  855.   int pageno = 1 ;            /* Page number within message. */
  856.   int plen = PAGELENGTH ;     /* Number of lines per page. */
  857. --- 102,110 ----
  858.   
  859.   int colct = 0;              /* Column count on current page. */
  860.   int cmdfiles = 0 ;          /* Set if file to print given on command line. */
  861.   int linect = 0 ;            /* Line count on current page. */
  862.   int llen = LINELENGTH ;     /* Number of characters per line. */
  863. + int numcols = 1 ;           /* Number of columns per page */
  864.   int optind ;                /* Optional command line argument indicator. */
  865.   int pageno = 1 ;            /* Page number within message. */
  866.   int plen = PAGELENGTH ;     /* Number of lines per page. */
  867. ***************
  868. *** 137,144 ****
  869.   
  870.     show_prologue(proname) ;    /* Send prologue file to output. */
  871.   
  872. -   if (landscape) PRINTF("\nLandscape\n") ;
  873.     FPUTS("%%EndProlog\n", stdout) ;
  874.   
  875.     if (argc - optind != 0) cmdfiles = 1 ;
  876. --- 141,146 ----
  877. ***************
  878. *** 205,212 ****
  879.         textshow(nextline) ;
  880.         readline() ;
  881.       }    
  882. !   if (filofax || timeman) endfile() ;
  883. !   else endpage() ;
  884.     FCLOSE(fp) ;
  885.   }
  886.   
  887. --- 207,215 ----
  888.         textshow(nextline) ;
  889.         readline() ;
  890.       }    
  891. !   if (numcols) endcol() ;
  892. !   endpage() ;
  893. !   endfile() ;
  894.     FCLOSE(fp) ;
  895.   }
  896.   
  897.  
  898. ------- misc.c -------
  899. *** /tmp/da08347    Fri Sep  7 14:17:31 1990
  900. --- misc.c    Fri Sep  7 14:12:47 1990
  901. ***************
  902. *** 20,35 ****
  903.   void
  904.   do_date()        /* Output Postscript definition for the date and time. */
  905.   {
  906.     long clock ;           /* Used by the localtime function call. */
  907.     struct tm *tm ;        /* Used by the localtime and asctime calls. */
  908.   
  909.     if (date == NULL)
  910.       {
  911.         clock = time((time_t *) 0) ;
  912.         tm = localtime(&clock) ;
  913. !       psdef("TimeNow", asctime(tm)) ;
  914.       }
  915. !   else psdef("TimeNow", date) ;
  916.   }
  917.   
  918.   
  919. --- 20,48 ----
  920.   void
  921.   do_date()        /* Output Postscript definition for the date and time. */
  922.   {
  923. +   char *ptr ;            /* Pointer to current time or date string. */
  924. +   int len ;
  925.     long clock ;           /* Used by the localtime function call. */
  926.     struct tm *tm ;        /* Used by the localtime and asctime calls. */
  927. +   char *timenow ;        /* Used to set TimeNow field with users name. */
  928.   
  929.     if (date == NULL)
  930.       {
  931.         clock = time((time_t *) 0) ;
  932.         tm = localtime(&clock) ;
  933. !       ptr = asctime(tm) ;
  934. !       ptr[24] = '\0' ;
  935.       }
  936. !   else ptr = date ;
  937. !   if (article != TRUE) psdef("TimeNow", ptr) ;
  938. !   else
  939. !     {
  940. !       len = strlen(ptr) ;
  941. !       timenow = malloc((unsigned) (len + 6 + strlen(whoami) + 1)) ;
  942. !       SPRINTF(timenow, "%s  - (%s)", ptr, whoami) ;
  943. !       psdef("TimeNow", timenow) ;
  944. !     }
  945.   }
  946.   
  947.   
  948. ***************
  949. *** 95,104 ****
  950.                      break ;
  951.           case 'd' : digest = TRUE ;       /* Print digest. */
  952.                      break ;
  953. !         case 'f' : filofax = TRUE ;      /* Print filofax file. */
  954.                      SPRINTF(proname, "%s/mp.pro.filofax.ps", prologue) ;
  955.                      break ;
  956. !         case 'l' : landscape = TRUE ;    /* Print in landscape mode. */
  957.                      break ;
  958.           case 'm' : folder = TRUE ;       /* Print mail folder. */
  959.                      break ;
  960. --- 108,118 ----
  961.                      break ;
  962.           case 'd' : digest = TRUE ;       /* Print digest. */
  963.                      break ;
  964. !         case 'f' :                       /* Filofax output. */
  965.                      SPRINTF(proname, "%s/mp.pro.filofax.ps", prologue) ;
  966.                      break ;
  967. !         case 'l' : landscape = TRUE ;    /* Landscape printing. */
  968. !                    SPRINTF(proname, "%s/mp.pro.l.ps", prologue) ;
  969.                      break ;
  970.           case 'm' : folder = TRUE ;       /* Print mail folder. */
  971.                      break ;
  972. ***************
  973. *** 110,116 ****
  974.           case 's' : if (strlen(optarg))
  975.                        gsubject = optarg ;        /* New subject line. */
  976.                      break ;
  977. !         case 't' : timeman = TRUE ;     /* Print Time Manager file. */
  978.                      SPRINTF(proname, "%s/mp.pro.timeman.ps", prologue) ;
  979.                      break ;
  980.           case 'v' : FPRINTF(stderr,
  981. --- 124,130 ----
  982.           case 's' : if (strlen(optarg))
  983.                        gsubject = optarg ;        /* New subject line. */
  984.                      break ;
  985. !         case 't' :                              /* Time Manager output. */
  986.                      SPRINTF(proname, "%s/mp.pro.timeman.ps", prologue) ;
  987.                      break ;
  988.           case 'v' : FPRINTF(stderr,
  989. ***************
  990. *** 123,131 ****
  991.   void
  992.   init_setup()            /* Set default values for various options. */
  993.   {
  994. !   char *c, *ptr ;
  995.     int amp_cnt = 0 ;     /* Number of ampersands in gecos field. */
  996. !   int i, j, n, spaces ;
  997.     int namefields ;      /* Number of "words" from passwd gecos. */
  998.     int namelength ;      /* Maximum number of characters from passwd gecos. */
  999.     struct passwd *pp ;
  1000. --- 137,145 ----
  1001.   void
  1002.   init_setup()            /* Set default values for various options. */
  1003.   {
  1004. !   char *c ;
  1005.     int amp_cnt = 0 ;     /* Number of ampersands in gecos field. */
  1006. !   int i ;
  1007.     int namefields ;      /* Number of "words" from passwd gecos. */
  1008.     int namelength ;      /* Maximum number of characters from passwd gecos. */
  1009.     struct passwd *pp ;
  1010. ***************
  1011. *** 151,161 ****
  1012.       }
  1013.     owner = malloc((unsigned) (strlen(c) + 1)) ;
  1014.     STRCPY(owner, c) ;
  1015.    
  1016.   /*  Have a look for the users gecos (normally real name), so that its a bit
  1017.    *  more recognisable. If this field is too long, then we need to truncate
  1018.    *  sensibly. We also need to check a few things. If we've extracted
  1019. !  *  three "words" or have found a comma, then exit. If an ampersand is
  1020.    *  found, this is expanded to the users name in capitals.
  1021.    */    
  1022.        
  1023. --- 165,177 ----
  1024.       }
  1025.     owner = malloc((unsigned) (strlen(c) + 1)) ;
  1026.     STRCPY(owner, c) ;
  1027. +   whoami = malloc((unsigned) (strlen(c) + 1)) ;   /* Save User login name */
  1028. +   STRCPY(whoami, c) ;
  1029.    
  1030.   /*  Have a look for the users gecos (normally real name), so that its a bit
  1031.    *  more recognisable. If this field is too long, then we need to truncate
  1032.    *  sensibly. We also need to check a few things. If we've extracted
  1033. !  *  namefields "words" or have found a comma, then exit. If an ampersand is
  1034.    *  found, this is expanded to the users name in capitals.
  1035.    */    
  1036.        
  1037. ***************
  1038. *** 168,198 ****
  1039.         owner = malloc((unsigned) (strlen(pp->pw_gecos) +
  1040.                                    amp_cnt * strlen(c) + 1)) ;
  1041.   
  1042. !       n = spaces = 0 ;
  1043. !       ptr = pp->pw_gecos ;
  1044. !       for (i = 0; i < strlen(pp->pw_gecos); i++)
  1045. !         {
  1046. !                if (*ptr == ',') break ;
  1047. !           else if (*ptr == '&')
  1048. !             {
  1049. !               if (islower(c[0])) owner[n++] = toupper(c[0]) ;   
  1050. !               for (j = 1; j < strlen(c); j++)                 
  1051. !                 owner[n++] = c[j] ;
  1052. !               *ptr++ ;
  1053. !             }
  1054. !           else if (*ptr == ' ')
  1055. !             {
  1056. !               if (++spaces == namefields) break ;
  1057. !               else owner[n++] = *ptr++ ;
  1058. !             }
  1059. !           else owner[n++] = *ptr++ ;
  1060. !           if (n >= namelength) break ;
  1061. !         }
  1062. !       if (n > namelength) n = namelength ;
  1063. !       owner[n] = '\0' ;
  1064.       }
  1065. -   if ((nameptr = getenv("NAME")) != NULL)
  1066. -     STRCPY(owner, nameptr) ;
  1067.   
  1068.     if (text_doc) doc_type = DO_TEXT ;
  1069.     switch (doc_type)
  1070. --- 184,194 ----
  1071.         owner = malloc((unsigned) (strlen(pp->pw_gecos) +
  1072.                                    amp_cnt * strlen(c) + 1)) ;
  1073.   
  1074. !       if ((nameptr = getenv("NAME")) != NULL)
  1075. !         process_name_field(c, nameptr, namefields, namelength) ;
  1076. !       else
  1077. !         process_name_field(c, pp->pw_gecos, namefields, namelength) ;
  1078.       }
  1079.   
  1080.     if (text_doc) doc_type = DO_TEXT ;
  1081.     switch (doc_type)
  1082. ***************
  1083. *** 205,210 ****
  1084. --- 201,239 ----
  1085.         case DO_NEWS : message_for = digest ? "News digest for " : "News for " ;
  1086.                        break ;
  1087.       }
  1088. + }
  1089. + /* Extract user name from $NAME or passwd GECOS. */
  1090. + process_name_field(c, ptr, fields, length)
  1091. + char *c, *ptr ;
  1092. + int fields, length ;
  1093. + {
  1094. +   int i, j, n, spaces, slen ;
  1095. +   n = spaces = 0 ;
  1096. +   slen = strlen(ptr) ;
  1097. +   for (i = 0; i < slen; i++)
  1098. +     {
  1099. +            if (*ptr == ',') break ;
  1100. +       else if (*ptr == '&')
  1101. +         {
  1102. +           if (islower(c[0])) owner[n++] = toupper(c[0]) ;
  1103. +           for (j = 1; j < strlen(c); j++)
  1104. +             owner[n++] = c[j] ;
  1105. +           *ptr++ ;
  1106. +         } 
  1107. +       else if (*ptr == ' ')
  1108. +         {
  1109. +           if (++spaces == fields) break ;
  1110. +           else owner[n++] = *ptr++ ;
  1111. +         } 
  1112. +       else owner[n++] = *ptr++ ;
  1113. +       if (n >= length) break ;
  1114. +     } 
  1115. +   if (n > length) n = length ;
  1116. +   owner[n] = '\0' ;
  1117.   }
  1118.   
  1119.   
  1120.  
  1121. ------- print.c -------
  1122. *** /tmp/da08350    Fri Sep  7 14:17:32 1990
  1123. --- print.c    Fri Sep  7 12:27:21 1990
  1124. ***************
  1125. *** 31,37 ****
  1126.   endcol()
  1127.   {
  1128.     linect = 0 ;
  1129. !   PRINTF("endcol\n") ;
  1130.   }
  1131.   
  1132.   
  1133. --- 31,39 ----
  1134.   endcol()
  1135.   {
  1136.     linect = 0 ;
  1137. !   PRINTF("(%d) %d endcol\n", pageno, ++colct) ;
  1138. !   if (landscape == TRUE && colct != numcols) return ;
  1139. !   pageno++ ;
  1140.   }
  1141.   
  1142.   
  1143. ***************
  1144. *** 38,44 ****
  1145.   endfile()
  1146.   {
  1147.     linect = 0 ;
  1148. !   PRINTF("(%1d) endfile\n", pageno) ;
  1149.   }
  1150.   
  1151.   
  1152. --- 40,46 ----
  1153.   endfile()
  1154.   {
  1155.     linect = 0 ;
  1156. !   PRINTF("endfile\n") ;
  1157.   }
  1158.   
  1159.   
  1160. ***************
  1161. *** 51,57 ****
  1162.   endpage()
  1163.   {
  1164.     linect = 0 ;
  1165. !   PRINTF("(%1d) endpage\n", pageno++) ;
  1166.   }
  1167.   
  1168.   
  1169. --- 53,59 ----
  1170.   endpage()
  1171.   {
  1172.     linect = 0 ;
  1173. !   PRINTF("(%1d) endpage\n", tpn) ;
  1174.   }
  1175.   
  1176.   
  1177. ***************
  1178. *** 158,167 ****
  1179.   /* Check for new line or page length. */
  1180.    
  1181.         SSCANF(buf, "%s %d", tmpstr, &t2) ;
  1182. !       if (strcmp(tmpstr, "%%PageLength") == 0)
  1183.           plen = t2 ;               /* Change the page length. */
  1184.         else if (strcmp(tmpstr, "%%LineLength") == 0)
  1185.           llen = t2 ;               /* Change the line length. */
  1186.       }
  1187.     FCLOSE(pf) ;
  1188.   }
  1189. --- 160,171 ----
  1190.   /* Check for new line or page length. */
  1191.    
  1192.         SSCANF(buf, "%s %d", tmpstr, &t2) ;
  1193. !            if (strcmp(tmpstr, "%%PageLength") == 0)
  1194.           plen = t2 ;               /* Change the page length. */
  1195.         else if (strcmp(tmpstr, "%%LineLength") == 0)
  1196.           llen = t2 ;               /* Change the line length. */
  1197. +       else if (strcmp(tmpstr, "%%NumCols")    == 0)
  1198. +         numcols = t2 ;            /* Change the number of columns. */
  1199.       }
  1200.     FCLOSE(pf) ;
  1201.   }
  1202. ***************
  1203. *** 176,181 ****
  1204. --- 180,186 ----
  1205.   startpage()
  1206.   {
  1207.     PRINTF("%%%%Page: ? %1d\n", ++tpn) ;
  1208. +   PRINTF("(%1d) newpage\n", tpn) ;
  1209.     set_defs() ;
  1210.   }
  1211.   
  1212. ***************
  1213. *** 195,206 ****
  1214.   {
  1215.     if (++linect > plen || end_of_page == TRUE)
  1216.       {
  1217. !       if (landscape && colct == 0)
  1218. !         {
  1219. !           colct++ ;
  1220. !           endcol() ;
  1221. !           return ;
  1222. !         }
  1223.         colct = 0 ;
  1224.         endpage() ;
  1225.         linect = 0 ;
  1226. --- 200,207 ----
  1227.   {
  1228.     if (++linect > plen || end_of_page == TRUE)
  1229.       {
  1230. !       endcol() ;
  1231. !       if (colct < numcols) return ;
  1232.         colct = 0 ;
  1233.         endpage() ;
  1234.         linect = 0 ;
  1235.  
  1236. ------- CHANGES -------
  1237. *** /tmp/da08353    Fri Sep  7 14:17:32 1990
  1238. --- CHANGES    Fri Sep  7 13:43:34 1990
  1239. ***************
  1240. *** 180,182 ****
  1241. --- 180,219 ----
  1242.   
  1243.          I've also left it defaulted at the US Letter size, so it should still
  1244.          continue to work for A4 sites, but not use all of the paper.
  1245. + v2.4 - patchlevel 7. - 7th September 1990.
  1246. +     *  From Johan Vromans <jv@mh.nl>
  1247. +        Completely revised how mp now does it's processing. See the new
  1248. +        section in the README file entitled "How mp works" for more details.
  1249. +        Introduces a new prologue file mp.pro.l.ps for handling the standard
  1250. +        printing in landscape mode with 2 columns. Changes to most other
  1251. +        files. The MANIFEST and FILES files have been updated.
  1252. +     *  From James F. Blake <jim@doctor.chem.yale.edu>
  1253. +        From Rainer Klute <klute@unido.informatik.uni-dortmund.de>
  1254. +        Mp crashed with a segmentation violation if the mail message has no
  1255. +        subject line.
  1256. +     *  From Bruno Pillard <bp@chorus.fr>
  1257. +        Added the printing of the username below the date when printing
  1258. +        news articles.
  1259. +        Fixed two typos in the mailp shell script, and added the installation
  1260. +        of mailp to the Makefile.dist file. Support for the PRINTER variable
  1261. +        has also been added to mailp.
  1262. +     *  From Ran Ever-Hadani <nsc!taux01.nsc.com!crehta@Sun.COM>
  1263. +        When mp -a is invoked from within the nn news reader, the "Article
  1264. +        from" header was displayed incorrectly.
  1265. +     *  From Lupe Christoph <lupe@alanya.Germany.Sun.COM>
  1266. +        The -f (filofax) and -t (Time Manager) options didn't print
  1267. +        correctly on a PostScript print which has page reversal set. Johan
  1268. +        Vromans work on the restructuring of the PostScript and the way
  1269. +        prologues are handled, has fixed this.
  1270. +     *  From John Little <gaijin@ale.Japan.Sun.COM>
  1271. +        The NAME environment variable (if set) should be processed the same
  1272. +        way as the GECOS passwd field. See the GECOSFIELDS and GECOSLENGTH
  1273. +        definitions in Makefile.dist for more details.
  1274.  
  1275. ------- patchlevel.h -------
  1276. *** /tmp/da08356    Fri Sep  7 14:17:33 1990
  1277. --- patchlevel.h    Fri Sep  7 09:52:59 1990
  1278. ***************
  1279. *** 14,17 ****
  1280.    *  reported to me then an attempt will be made to fix them.
  1281.    */
  1282.   
  1283. ! #define  PATCHLEVEL  6
  1284. --- 14,17 ----
  1285.    *  reported to me then an attempt will be made to fix them.
  1286.    */
  1287.   
  1288. ! #define  PATCHLEVEL  7
  1289.  
  1290. ------- extern.h -------
  1291. *** /tmp/da08359    Fri Sep  7 14:17:34 1990
  1292. --- extern.h    Fri Sep  7 13:27:38 1990
  1293. ***************
  1294. *** 21,26 ****
  1295. --- 21,27 ----
  1296.   extern char *FROMHDR ;
  1297.   extern char *FROM_HDR ;          /* UNIX From header */
  1298.   extern char *NEWSGROUPSHDR ;
  1299. + extern char *NEWSGROUPHDR ;
  1300.   extern char *REPLYHDR ;
  1301.   extern char *SUBJECTHDR ;
  1302.   extern char *TOHDR ;
  1303. ***************
  1304. *** 46,57 ****
  1305.   extern char *progname ;      /* Name of this program. */
  1306.   extern char *prologue ;      /* Name of PostScript prologue file. */
  1307.   extern char proname[] ;      /* Full pathname of the prologue file. */
  1308.   
  1309.   extern int colct ;           /* Column count on current page. */
  1310.   extern int cmdfiles ;        /* Set if file to print given on command line. */
  1311. - extern int landscape ;       /* Set if in landscape (wide) mode. */
  1312.   extern int linect ;          /* Line count on current page. */
  1313.   extern int llen ;            /* Number of characters per line. */
  1314.   extern int optind ;          /* Optional command line argument indicator. */
  1315.   extern int pageno ;          /* Page number within message. */
  1316.   extern int plen ;            /* Number of lines per page. */
  1317. --- 47,59 ----
  1318.   extern char *progname ;      /* Name of this program. */
  1319.   extern char *prologue ;      /* Name of PostScript prologue file. */
  1320.   extern char proname[] ;      /* Full pathname of the prologue file. */
  1321. + extern char *whoami ;        /* Login name of user. */
  1322.   
  1323.   extern int colct ;           /* Column count on current page. */
  1324.   extern int cmdfiles ;        /* Set if file to print given on command line. */
  1325.   extern int linect ;          /* Line count on current page. */
  1326.   extern int llen ;            /* Number of characters per line. */
  1327. + extern int numcols ;         /* Number of columns per page */
  1328.   extern int optind ;          /* Optional command line argument indicator. */
  1329.   extern int pageno ;          /* Page number within message. */
  1330.   extern int plen ;            /* Number of lines per page. */
  1331. ***************
  1332. *** 59,68 ****
  1333.   
  1334.   extern bool article ;        /* Set for news in "Article from " format. */
  1335.   extern bool digest ;         /* Are we are printing a mail digest (-d) */
  1336. - extern bool filofax ;        /* Set if we are printing a filofax file. */
  1337.   extern bool folder ;         /* Set if we are printing a mail folder. */
  1338.   extern bool text_doc ;       /* Printing normal text (-o) */
  1339. - extern bool timeman ;        /* Set if we are printing a Time Manager file. */
  1340.   
  1341.   extern bool end_of_file ;    /* EOF indicator */
  1342.   extern bool end_of_line ;    /* Is a newline removed from this line */
  1343. --- 61,69 ----
  1344.   
  1345.   extern bool article ;        /* Set for news in "Article from " format. */
  1346.   extern bool digest ;         /* Are we are printing a mail digest (-d) */
  1347.   extern bool folder ;         /* Set if we are printing a mail folder. */
  1348. + extern bool landscape ;      /* Set if we are printing in landscape mode. */
  1349.   extern bool text_doc ;       /* Printing normal text (-o) */
  1350.   
  1351.   extern bool end_of_file ;    /* EOF indicator */
  1352.   extern bool end_of_line ;    /* Is a newline removed from this line */
  1353.  
  1354. ------- Makefile.dist -------
  1355. *** /tmp/da08362    Fri Sep  7 14:17:34 1990
  1356. --- Makefile.dist    Fri Sep  7 13:14:47 1990
  1357. ***************
  1358. *** 55,61 ****
  1359. --- 55,65 ----
  1360.   LIBDIR   = /usr/local/lib
  1361.   MANDIR   = /usr/man/man$(MANSECT)
  1362.   MANSECT  = l
  1363. + #---------------------------------------------------------------------
  1364. + #  Alternate names for the mailp frontend
  1365.   #
  1366. + MAILPNAMES = newsp digestp filep filofaxp timemanp
  1367. + #---------------------------------------------------------------------
  1368.   #  Compilation flags and standard macro definitions.
  1369.   #
  1370.   CFLAGS   = -g $(GECOSFIELDS) $(GECOSLENGTH) $(NOINDEX) $(PROLOGUE)
  1371. ***************
  1372. *** 72,83 ****
  1373.   HDRS     = extern.h mp.h patchlevel.h
  1374.   OTHERS   = README Makefile.dist mailp mp.1 \
  1375.          MANIFEST FILES CHANGES TODO \
  1376. !        mp.el mp.pro.ps mp.pro.alt.ps mp.pro.filofax.ps \
  1377. !        mp.pro.timeman.ps Data
  1378.   
  1379.   SFILES1  = $(SRCS) $(HDRS) README MANIFEST FILES CHANGES TODO
  1380. ! SFILES2  = Makefile.dist mailp mp.1 mp.el Data \
  1381. !        mp.pro.ps mp.pro.alt.ps mp.pro.filofax.ps mp.pro.timeman.ps
  1382.   
  1383.   all:       $(BINARIES)
  1384.   
  1385. --- 76,87 ----
  1386.   HDRS     = extern.h mp.h patchlevel.h
  1387.   OTHERS   = README Makefile.dist mailp mp.1 \
  1388.          MANIFEST FILES CHANGES TODO \
  1389. !        mp.el mp.pro.ps mp.pro.alt.ps mp.pro.l.ps \
  1390. !        mp.pro.filofax.ps mp.pro.timeman.ps Data
  1391.   
  1392.   SFILES1  = $(SRCS) $(HDRS) README MANIFEST FILES CHANGES TODO
  1393. ! SFILES2  = Makefile.dist mailp mp.1 mp.el Data mp.pro.ps mp.pro.l.ps \
  1394. !        mp.pro.alt.ps mp.pro.filofax.ps mp.pro.timeman.ps
  1395.   
  1396.   all:       $(BINARIES)
  1397.   
  1398. ***************
  1399. *** 93,103 ****
  1400.          @echo "adjust the definitions of fullwidth and fullheight, at the"
  1401.          @echo "start of the mp.pro.ps file, then reinstall."
  1402.          @echo
  1403. !        install -s -m 751 mp $(BINDIR)
  1404. !        install -c -m 644 mp.1 $(MANDIR)/mp.$(MANSECT)
  1405. !        install -c -m 644 mp.pro.ps $(LIBDIR)
  1406. !        install -c -m 644 mp.pro.filofax.ps $(LIBDIR)
  1407. !        install -c -m 644 mp.pro.timeman.ps $(LIBDIR)
  1408.   
  1409.   clean:;    rm -rf mp *.o core
  1410.   
  1411. --- 97,117 ----
  1412.          @echo "adjust the definitions of fullwidth and fullheight, at the"
  1413.          @echo "start of the mp.pro.ps file, then reinstall."
  1414.          @echo
  1415. !        -install -s -m 751 mp $(BINDIR)
  1416. !        -install -c -m 644 mp.1 $(MANDIR)/mp.$(MANSECT)
  1417. !        -install -c -m 644 mp.pro.ps $(LIBDIR)
  1418. !        -install -c -m 644 mp.pro.l.ps $(LIBDIR)
  1419. !        -install -c -m 644 mp.pro.alt.ps $(LIBDIR)
  1420. !        -install -c -m 644 mp.pro.filofax.ps $(LIBDIR)
  1421. !        -install -c -m 644 mp.pro.timeman.ps $(LIBDIR)
  1422. !        -install -c -m 755 mailp $(BINDIR)
  1423. !        @echo Making mailp links
  1424. !        -@for name in $(MAILPNAMES); do \
  1425. !         echo -n $$name " "; \
  1426. !         rm -f $(BINDIR)/$$name; \
  1427. !         ln $(BINDIR)/mailp $(BINDIR)/$$name; \
  1428. !        done
  1429. !        @echo
  1430.   
  1431.   clean:;    rm -rf mp *.o core
  1432.   
  1433.  
  1434. ------- TODO -------
  1435. *** /tmp/da08365    Fri Sep  7 14:17:35 1990
  1436. --- TODO    Fri Sep  7 12:35:35 1990
  1437. ***************
  1438. *** 28,36 ****
  1439.      suspicions are aroused in that the default operand stack size mentioned by
  1440.      Adobe in their red book is 500.
  1441.   
  1442. ! 5/ From Larry W. Virden <lwv27%cas.BITNET@CUNYVM.CUNY.Edu>
  1443. !    Instead of having the lpr going to -Plw in the shell script, have it
  1444. !    go to -P$(PRINTER:lw} ... so folks who use the PRINTER variable get it.
  1445.   
  1446.   6/ From Lupe Christoph <lupe@alanya.Germany.Sun.COM>
  1447.      There are so many personal organisers all over the world that you need a
  1448. --- 28,42 ----
  1449.      suspicions are aroused in that the default operand stack size mentioned by
  1450.      Adobe in their red book is 500.
  1451.   
  1452. ! 5/ From Michael Kerstetter <msk@betelgeuse.boeing.com>
  1453. !    Needs the inclusion of command line options to turn off the top and
  1454. !    bottom banners. In the context of 'mp', if banners were being used,
  1455. !    I envision the top and bottom banners just being reversed, if banners
  1456. !    were off, I'd envision just the page number appearing at the bottom
  1457. !    of the page.  Finally, a lot of the printing I do is just quick, few
  1458. !    frills printing of ASCII files, and to support that I would find it
  1459. !    convenient to be able to define left, right, top, and bottom margins
  1460. !    in the 'mp' command line.
  1461.   
  1462.   6/ From Lupe Christoph <lupe@alanya.Germany.Sun.COM>
  1463.      There are so many personal organisers all over the world that you need a
  1464. ***************
  1465. *** 42,66 ****
  1466.      substitutes a few variables. Or you can use short PostScript fragments,
  1467.      one for each personal organisers.
  1468.   
  1469. ! 7/ From Lupe Christoph <lupe@alanya.Germany.Sun.COM>
  1470. !    The Time Manager and Filofax prologue files don't work correctly with
  1471. !    printers that are setup for page reversal. The solution (which I've
  1472. !    yet to implement), comes from Johan Vromans:
  1473. !    "The problem is caused by the fact that you insert a "%Page: ? nn"
  1474. !     before each *LOGICAL* page. It should be inserted only before *PHYSICAL*
  1475. !     pages.  For filofax and timemanager (3 cols/page) that means that you
  1476. !     need something like:
  1477. !         %% Preamble
  1478. !         %%Page: ? 1
  1479. !         ..page1..
  1480. !         endpage
  1481. !         ..page2..
  1482. !         endpage
  1483. !         ..page3..
  1484. !         endpage
  1485. !         %%Page: ? 2
  1486. !         ..page4..
  1487. !         endpage
  1488. !         ..."
  1489. --- 48,53 ----
  1490.      substitutes a few variables. Or you can use short PostScript fragments,
  1491.      one for each personal organisers.
  1492.   
  1493. ! 7/ From Johan Vromans <jv@mh.nl>
  1494. !    A command line option to have page numbers reset to 1 when printing a
  1495. !    new element of a mailfolder or digest.
  1496.  
  1497. ------- MANIFEST -------
  1498. *** /tmp/da08368    Fri Sep  7 14:17:35 1990
  1499. --- MANIFEST    Fri Sep  7 09:58:43 1990
  1500. ***************
  1501. *** 21,26 ****
  1502. --- 21,27 ----
  1503.   TODO                                   |    1
  1504.   mp.el                                  |    2
  1505.   mp.pro.ps                              |    2
  1506. + mp.pro.l.ps                            |    2
  1507.   mp.pro.alt.ps                          |    2
  1508.   mp.pro.filofax.ps                      |    2
  1509.   mp.pro.timeman.ps                      |    2
  1510.  
  1511. ------- FILES -------
  1512. *** /tmp/da08371    Fri Sep  7 14:17:36 1990
  1513. --- FILES    Fri Sep  7 10:01:50 1990
  1514. ***************
  1515. *** 22,28 ****
  1516. --- 22,30 ----
  1517.   CHANGES             - change history. Will be updated with each new patch.
  1518.   TODO                - bugs and suggested enhancements. Volunteers?
  1519.   mp.el               - emacs code to print with mp.
  1520.   mp.pro.ps           - standard mp prologue file.
  1521. + mp.pro.l.ps         - standard mp prologue file for landscape (2 columns).
  1522.   mp.pro.alt.ps       - alternative mp prologue file.
  1523.   mp.pro.filofax.ps   - mp Filofax prologue file.
  1524.   mp.pro.timeman.ps   - mp Time Manager prologue file.
  1525.  
  1526. ------- mp.pro.alt.ps -------
  1527. *** /tmp/da08374    Fri Sep  7 14:17:36 1990
  1528. --- mp.pro.alt.ps    Fri Sep  7 11:28:39 1990
  1529. ***************
  1530. *** 20,25 ****
  1531. --- 20,26 ----
  1532.   %
  1533.   /fullwidth 8.5 inch def
  1534.   /fullheight 11 inch def
  1535.   /leftedge 0 def
  1536.   /rightedge fullwidth def
  1537.   /bottomedge 0 def
  1538. ***************
  1539. *** 82,89 ****
  1540.       0.75 setgray fill
  1541.   } def
  1542.   
  1543. ! /endpage    % page_number endpage --
  1544.   {
  1545.     gsave
  1546.       fontH
  1547.       leftedge 50 add topedge 56 sub    % bottom lt corner
  1548. --- 83,98 ----
  1549.       0.75 setgray fill
  1550.   } def
  1551.   
  1552. ! /endpage        % page_number endpage --
  1553.   {
  1554. +   showpage        % display it
  1555. + } def
  1556. + /endfile { } def    % nothing needed
  1557. + /endcol            % page_number col_number endcol --
  1558. + {
  1559. +   pop            % get rid of col_number
  1560.     gsave
  1561.       fontH
  1562.       leftedge 50 add topedge 56 sub    % bottom lt corner
  1563. ***************
  1564. *** 108,119 ****
  1565.          exch 2 div rightedge 54 sub exch sub    % x-centered
  1566.          exch moveto show
  1567.     grestore
  1568. -   showpage              % display it
  1569. -   newpage               % reset parameters for next
  1570.   } def
  1571.   
  1572. ! /newpage
  1573.   {
  1574.     LandscapeMode {setlandscape} if
  1575.     /lct 0 def
  1576.     /ypos topedge 92 sub def
  1577. --- 117,127 ----
  1578.          exch 2 div rightedge 54 sub exch sub    % x-centered
  1579.          exch moveto show
  1580.     grestore
  1581.   } def
  1582.   
  1583. ! /newpage    % page_number newpage --
  1584.   {
  1585. +   pop        % pageno
  1586.     LandscapeMode {setlandscape} if
  1587.     /lct 0 def
  1588.     /ypos topedge 92 sub def
  1589. ***************
  1590. *** 134,150 ****
  1591.     /LandscapeMode true def
  1592.     /rightedge fullheight def
  1593.     /topedge fullwidth def
  1594. -   newpage
  1595.   } def
  1596.   
  1597. - /endcol
  1598. - {
  1599. -   /lct 0 def
  1600. -   /ypos topedge 92 sub def
  1601. -   /xpos rightedge leftedge sub 2 div def
  1602. -   xpos ypos moveto
  1603. - } def
  1604.   /showline
  1605.   {
  1606.     show
  1607. --- 142,149 ----
  1608. ***************
  1609. *** 151,155 ****
  1610.     /ypos ypos FontSize sub def
  1611.     xpos ypos moveto
  1612.   } def
  1613. - newpage                    % establish first page parameters
  1614. --- 150,152 ----
  1615. Funky_Stuff
  1616. len=`wc -c < patch.7`
  1617. if [ $len !=    47191 ] ; then
  1618. echo error: patch.7 was $len bytes long, should have been    47191
  1619. fi
  1620. fi # end of overwriting check
  1621. if [ -f mp.pro.l.ps ]
  1622. then
  1623. echo shar: will not over-write existing file mp.pro.l.ps
  1624. else
  1625. echo shar: extracting 'mp.pro.l.ps',     3909 characters
  1626. cat > mp.pro.l.ps <<'Funky_Stuff'
  1627. %!PS-Adobe-1.0
  1628. %%Creator: Steve Holden
  1629. %%Modified: Rich Burridge
  1630. %%Title: @(#)mp.pro.l.ps 1.2 90/09/07
  1631. %%CreationDate: see above
  1632. %%PageLength 60
  1633. %%LineLength 80
  1634. %%NumCols 2
  1635. %%DocumentFonts: Times-Bold Times-Roman Courier
  1636. %%Pages: (atend)
  1637. %%EndComments
  1638.  
  1639. /inch { 72 mul } def
  1640. %
  1641. %  IMPORTANT NOTE: The following two variables should be set correctly.
  1642. %                  Reasonable values for fullwidth and fullheight are
  1643. %                  8.5/11 inch for US Letter, and 8.5/11.4 inch for A4.
  1644. %                  Since sites usually have one single format of paper,
  1645. %                  mp should be installed with either the USLetter or A4
  1646. %                  values.
  1647. %
  1648. /fullwidth 8.5 inch def
  1649. /fullheight 11 inch def
  1650.  
  1651. /leftedge 0 def
  1652. /rightedge fullheight def
  1653. /bottomedge 0 def
  1654. /topedge fullwidth def
  1655. /LandscapeMode true def
  1656.  
  1657. %Title: backspacefont.ps suggested by Glenn Reid (Adobe Systems).
  1658.  
  1659. /backspacefont {
  1660.     /Courier findfont dup length dict begin
  1661.         { %forall
  1662.             1 index /FID eq { pop pop } { def } ifelse
  1663.         } forall
  1664.         currentdict /UniqueID known { %if
  1665.               /UniqueID UniqueID 16#800000 xor def
  1666.         } if
  1667.         CharStrings length 1 add dict begin
  1668.             CharStrings { def } forall
  1669.           /backspace { -600 0 setcharwidth } bind def
  1670.             currentdict
  1671.       end
  1672.         /CharStrings exch def
  1673.         /Encoding Encoding 256 array copy def
  1674.         Encoding 8 /backspace put
  1675.         currentdict
  1676.     end
  1677.     definefont
  1678. } bind def
  1679.  
  1680. /CourierBack backspacefont
  1681.  
  1682. /FontSize 9 def
  1683. /font1d /Times-Bold            findfont def
  1684. /font2d /Times-Roman           findfont def
  1685. /font3d /CourierBack           findfont def
  1686. /fontHd /Helvetica-BoldOblique findfont 14 scalefont def
  1687. /fontH2 /Helvetica-BoldOblique findfont 10 scalefont def
  1688. /fontNd /Times-Bold            findfont 12 scalefont def
  1689.  
  1690. /BoldFont      { font1d FontSize scalefont setfont } def
  1691. /pf            { font2d FontSize scalefont setfont } def
  1692. /sf            { font3d FontSize scalefont setfont } def
  1693. /fontH         { fontHd setfont } def
  1694. /fontD         { fontH2 setfont } def
  1695. /fontN         { fontNd setfont } def
  1696.  
  1697. /graybox    % x1 y1 x2 y2 graybox --
  1698. {
  1699.     newpath
  1700.       4 -1 roll 2 copy            % y2 x1
  1701.       10 sub exch moveto
  1702.       4 -1 roll 2 copy            % x1 y1
  1703.       10 180 270 arc
  1704.       4 -1 roll 1 copy 3 -1 roll    % x2 y1
  1705.       10 270 0 arc
  1706.       3 -1 roll 1 copy 3 1 roll        % x1 y2 x2 y2
  1707.       10 0 90 arc
  1708.       10 90 180 arc
  1709.     closepath
  1710.     0.75 setgray fill
  1711. } def
  1712.  
  1713. /endpage        % page_number endpage --
  1714. {
  1715.   showpage              % display it
  1716. } def
  1717.  
  1718. /endfile { } def    % nothing needed
  1719.  
  1720. /endcol            % page_number col_number endcol --
  1721. {
  1722.   pop            % get rid of column number
  1723.   gsave
  1724.     fontH
  1725.     leftedge 50 add topedge 56 sub    % bottom lt corner
  1726.     rightedge 50 sub topedge 36 sub    % top rt corner
  1727.     graybox
  1728.     newpath
  1729.       rightedge leftedge sub 2 div topedge 46 sub 15 0 360 arc
  1730.       gsave
  1731.         1 setgray fill
  1732.       grestore
  1733.     closepath
  1734.     0 setgray stroke
  1735.     leftedge 50 add topedge 52 sub moveto
  1736.     MailFor show
  1737.     User show
  1738.     fontD
  1739.     rightedge 50 sub TimeNow stringwidth pop sub
  1740.     topedge 52 sub moveto TimeNow show
  1741.     % center the page number
  1742.     fontN
  1743.     dup stringwidth
  1744.        topedge 52 sub exch sub                % y-centered
  1745.        exch 2 div rightedge leftedge sub 2 div exch sub    % x-centered
  1746.        exch moveto show
  1747.     fontH
  1748.     leftedge 50 add bottomedge 50 add    % bottom lt corner
  1749.     rightedge 50 sub bottomedge 70 add    % top rt corner
  1750.     graybox
  1751.     0 setgray
  1752.     leftedge 50 add bottomedge 54 add moveto Subject show
  1753.   grestore
  1754.   /ypos topedge 92 sub def
  1755.   /xpos rightedge leftedge sub 2 div def
  1756.   xpos ypos moveto
  1757. } def
  1758.  
  1759. /newpage
  1760. {
  1761.   pop
  1762.   LandscapeMode
  1763.   {
  1764.     612 0 translate
  1765.     90 rotate
  1766.     /FontSize 7 def
  1767.   } if
  1768.   /lct 0 def
  1769.   /ypos topedge 92 sub def
  1770.   /xpos leftedge 50 add def
  1771.   xpos ypos moveto
  1772.   sf
  1773. } def
  1774.  
  1775. /showline
  1776. {
  1777.   show
  1778.   /ypos ypos FontSize sub def
  1779.   xpos ypos moveto
  1780. } def
  1781. Funky_Stuff
  1782. len=`wc -c < mp.pro.l.ps`
  1783. if [ $len !=     3909 ] ; then
  1784. echo error: mp.pro.l.ps was $len bytes long, should have been     3909
  1785. fi
  1786. fi # end of overwriting check
  1787.  
  1788.