rsalz@uunet.uu.net (Rich Salz) (10/18/89)
Submitted-by: Chris Lewis <eci386!clewis@uunet.uu.net> Posting-number: Volume 20, Issue 33 Archive-name: psroff/part01 Normal UNIX troff only prints its output on WANG C/A/T Phototypesetters. This package contains a generic interface between standard troff and other types of printers. The package has a driver for PostScript printers (Eg: Apple Laserwriters), a partial implementation of a driver for HP Laserjet family printers, and a Ditroff output option. In fact, this package can be used to, in effect, upgrade CAT troff to be ditroff. There are limitations, but you get what you pay for. #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 6)." # Contents: MANIFEST README confid.ps dt.h font font/C font/CB font/CO # font/S2 fonts.dt fonts.lj fonts.ps gfnttab.sh lethead.ps lib.dt # lib.lj lib.lk lj.h ps.h psroff.1 psroff.sh t2conf.c tmac.t2 # upload.sh utils.c PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(3082 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X MANIFEST 1 This shipping list X Makefile 3 Makefile X README 1 Read this first X cat.5 3 Man page describing CAT Troff output X chartab.m 3 troff test job to display whole character set X confid.ps 1 sample Postscript inclusion X defs.h 2 Main configuration include X dit2catwid.c 3 converts ditroff width tables to CAT X dt.c 5 ditroff driver X dt.h 1 ditroff driver include file X font 1 font directory X font/B 2 font width table X font/BB 2 font width table X font/BI 2 font width table X font/BO 2 font width table X font/BR 2 font width table X font/BX 2 font width table X font/C 1 font width table X font/CB 1 font width table X font/CO 1 font width table X font/CX 2 font width table X font/H 2 font width table X font/HB 2 font width table X font/HO 2 font width table X font/HX 2 font width table X font/I 2 font width table X font/PA 2 font width table X font/PB 2 font width table X font/R 2 font width table X font/S 2 font width table X font/S2 1 font width table (special for bracket font) X fonts.dt 1 ditroff font definitions X fonts.lj 1 lj font definitions X fonts.lk 3 lk font definitions X fonts.ps 1 postscript font definitions X genftable.ps 4 Postscript width table generator X gfnttab.sh 1 create and install CAT width tables X lethead.ps 1 sample letter head postscript include X lib.dt 1 ditroff predef X lib.lj 1 lj predef X lib.lk 1 lk predef X lib.ps 4 postscript predef X lj.c 4 lj driver X lj.h 1 lj driver include X ljtables.c 6 lj/lk character set definitions X ltest.m 3 test script X ps.c 5 postscript driver X ps.h 1 postscript include X psroff.1 1 man page for psroff X psroff.sh 1 psroff shell script X psxlate.c 3 page order flipper X showfont.sh 3 display postscript font with width info X t2conf.c 1 troff2 backend manager X tmac.t2 1 sample custom macros X troff2.c 4 troff2 mainline X troff2ps.1 3 manpage for troff2 X upload.sh 1 dumb width uploader for postscript X utils.c 1 misc functions for troff2 END_OF_FILE if test 3082 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(11311 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X README 1.8 89/08/29 X XNormal UNIX troff only prints its output on WANG C/A/T Phototypesetters. XThis package contains a generic interface between standard troff and Xother types of printers. The package has a driver for PostScript printers X(Eg: Apple Laserwriters), a partial implementation of a driver for HP XLaserjet family printers, and a Ditroff output option. X XIn fact, this package can be used to, in effect, upgrade CAT troff Xto be ditroff. There are limitations, but you get what you pay for. X XI had announced more than once that this was being shipped to Xcomp.sources.unix, but something new kept coming up. I had sent Xthe last incarnation to Rich Salz, then I discovered tpscript and Xdecided to include a little stuff from that to make mine more Xcomplete - so I asked him to cancel. A couple of months ago, a new Xversion was sent off to him, but it hasn't appeared yet. X XApplicability: X - You must have CAT troff, not ditroff. X - Printers: X - if you have a laserjet, you should be able to use this X package. However, if you can get a copy of jetroff, X you can use psroff to convert to ditroff output, and X then use jetroff to print that - until font downloading X is in my HPLJ driver, jetroff will be much better than X my stuff. X - if you have a postscript printer use postscript output. X Or, generate ditroff and use tpscript. Output is more X or less identical. X - if you have ditroff backends, then use ditroff. X XThis is an ALPHA release. What this means is that this thing is good Xenough for use, but there are rough edges. I would encourage people to Xfiddle with it (particularly the mapping tables) and PLEASE PLEASE PLEASE Xsend me your changes so that I can encorporate them into new releases and Xupdates. This package, along with some tweaks to troff are currently Xin production at our site. X XCredit where credit's due: genftable.ps, font/* and some of the character Xdrawing and spacing stuff (bracket font) is from ditroff2ps/tpscript: X X Copyright: 1985, Stephen Frede, UNSW Australia X Use it and copy it as much as you want, but don't pretend you X wrote it, or sell it for profit. X XExcellent stuff. X X Remarks: X - This was developed with a relatively old (eg: V7) troff, and X may be missing some of the special characters ("\(XX" sequences) X that later versions of troff have. Entries for these characters X can be found in the ps.c file, (standardFont and symbolFont arrays) X as "NOCODE"/"unassigned" entries. Ditto ljtables.c X Please let me know what they are if you figger them out. X Note that the X & Y shifts shown in these tables are: X 1) in the native resolution of the device (1/72's for troff2ps, X 1/720's for troff2lj) (not troff 1/432's). X 2) Are then *multiplied* by the current point size. X (eg: in troff2ps, .1 becomes .1*1/72*current point size X inches) X X - The PostScript driver is essentially complete. It uses the X built-in fonts on the AppleLaser. A few characters not in X these fonts are faked by the invocation of drawing routines X defined in the file "lib.ps" (which is the definitions of things X needed by the driver) Or the bracket font (also in lib.ps). X Eg: 1/2, 1/4, 3/4, circle, bell system logo and box are X constructed by PostScript subroutines and/or the bracket font. The X Bell System logo isn't really - try this: X \s36\(bs\s0 X The first person to correctly identify what it is (without reading X lib.ps) gets a pat on the back ;-) X X The only two characters that don't exactly map properly are X left and right hand. I use double arrows instead. (so does X tpscript by the way - great minds think alike) X X - Regarding font width tables, there are several ways to go with X Postscript: X X showfont: modify showfont to have the appropriate command X to print to your printer. Typing: X showfont <fontname> X (eg: showfont Times-Roman) will dump the entire X Postscript Times-Roman font (plus some constructions X that troff2ps uses) in a table. Each character is X in a box, along with several numbers. The number X in the center at the bottom of the box is the width X you should put in your troff tables for that character. X X upload: modify it to have the appropriate command to print X to your printer. Then, arrange (somehow) to X capture in a file anything that the printer sends X *back* to the computer. (Eg: with stock System X V printer: X cat < /dev/<laserprinterdevice> > /tmp/upload& X X Run upload. /tmp/upload will then contain metrics X on all of the fonts in your printer. X dit2catwid.c: takes ditroff like font tables and converts them X to CAT codes suitable for (at least) Xenix troff. X genftable: fire it off to your Postscript printer, and it X will send back a shar file containing ditroff X style char tables. (Neat - thanks Michael!) X font/*: font tables for ditroff. (also thanks Michael!) X X - There is some code to allow the use of arbitrary commands to X the driver - see the .sR macro in tmac.t2, and troff2's X interpreter. This is *extremely* awkward to use (blame troff), X but can be useful after a fashion. Not documented particularly X well.... Our troff has been modified to emit a fake CAT code X with ".fp", so don't expect ".fp's" to work except by changing X fonts.?? However, you can do the same thing by using X X .sR "FnAB" X X where "F" is the font number (1-3 - don't redefine 4!) and X AB is the font name found in the proper lib.* file. ltest.m X has an example of the ".fp" version, change to the ".sR" version X to make it work on an unmodified troff. X X troff2 has 8-font troff support, but: X a) it's never been tested. X b) I'm no longer convinced that the cat.5 man page is X correct on how the decoding works. X X - The laserjet driver is pretty simple minded - it should position X each character correctly, and perform the font selections. X HOWEVER, it does not do font downloads. Therefore, if the desired X font doesn't exist, the laserjet will select some other font X according to its heuristics. In fact, I've not tested this X incarnation of the LJ driver much (because I don't have access to X one), but it should be very close to working this much. I am X thinking on a generic font downloading facility which will X take any format font file and download it to any printer style. X The current incarnation should work on all members of the X Laserjet. Font downloading will not work on "old Laserjets" unless X they've been upgraded to a plus. Further, the symbolFont table X has not been properly updated. X X Roadmap: X troff2.c: main function - performs the C/A/T translation X to function calls (via t2conf.c) X defs.h: General definitions. X t2conf.c: Table of functions for the two drivers. You can X add new drivers to this by appending to the X list. Please use the naming conventions I am X using. X utils.c: Routines used by other programs (eg: testps) X ps.h,ps.c: PostScript driver X lj.h,lj.c: Laserjet driver (including K incarnation) X ljtables.c: lj widths and adjustment table X dt.h,dt.c: Ditroff driver. X fonts.[ps|lj|dt] correspondance between troff name and method X of selection on the printer for Postscript, HPLJ, X and ditroff. X X All of the above are compiled and linked to create troff2ps. X Note: troff2ps examines the last two characters in the name it X is called with to determine which printer driver to use. X Therefore, invoking troff2ps as "troff2ps" will use the PostScript X driver. If you link troff2ps to "troff2lj", and run troff2lj, X it will emit Laserjet codes. Additionally, if you use the "-dxx" X option, troff2ps will use the "xx" driver. Eg: troff2ps -dlj X will print laserjet codes. X X Extra stuff: X Makefile: makes everything X lib.ps: PostScript library. Moved to LIBDIR/pslib by makefile. X prepended onto Postscript output by troff2ps. X confid.ps: Sample include file (actually produces a forms overlay) X lethead.ps: Ditto X lib.lj: Laserjet library. Moved to LIBDIR/ljlib by makefile. X Currently empty. prepended onto Laserjet output by X troff2lj. X ltest.m: Test document. Copied to ltest.m by Makefile. X chartab.m: another test document. (use tbl) X testps.c: PostScript driver tester. X testps <fonts> X will display postscript on standard output to show X the characters in the <fonts> list, where each X character is A thru O. See ps.c for the font names. X At the end, testps will always display a page of X ZapfDingbats. X testps AB will display two pages of Times-Roman, X two pages of Times-Italic along with a page of X ZapfDingbats. X "testps -" will display only the ZapfDingbats. X "testps" will display oodles of stuff. X psroff.sh: Driver to wrap around troff to invoke the translators. X Final result put in BINDIR/psroff, possibly linked X to BINDIR/ljroff etc. X psxlate.c: (Incomplete) PostScript postfilter. It will currently X reverse page order and is called by psroff (according X to "OUTPUT" definition in Makefile). X No manual page yet (it's not complete). X tmac.t2.sh: Some useful extensions on mm - invokes mm package. X Copied to tmac.t2 by Makefile. Intended to X eventually have some driver-specific tuning. X You would use it as "psroff -mt2 ...." instead X of "nroff -mm ...". X You really should customize this. Note that the X ".sR" facility will not work without the definition X contained herein. X fonts.ps: List of troff ".fp" font name to Laserwriter font X name translations. Note: stock troff cannot make X use of .fp changes because the stupid thing doesn't X tell the back end that the font has changed. Please X contact me and I can send you a couple of changes X to make to troff (if you have source). X fonts.lj/lk: ditto for Laserjet X psroff.1.sh: Manual page. Copied to psroff.1 by Makefile X troff2ps.1.sh: Manual page. Copied to psroff.1 by Makefile X XInstructions for building: X - edit Makefile and change: X LIBDIR Where the non-user accessible stuff should go. X INDIR Where the user-accessible stuff should go. X PSOUTPUT Output command to print PostScript stuff. X LJOUTPUT Output command to print Laserjet stuff. X DTOUTPUT Output command to print Ditroff stuff. X - edit defs.h and define either BSD or ATT. If you set ATT, set X SVR3 too if you are running SVR3. X - Type X make X This will build everything. X make install X Will install everything, including the new font width tables. X You can even issue this from a non-root user, but it will prompt X you for the password on every thing it needs to do as root. X If you want "ljroff", you will have to manually link INDIR/psroff X to INDIR/ljroff. Ditto lkroff and dttroff. X X XPLEASE PLEASE PLEASE! If you have any problems with it, or would like Xto make some suggestions for changing it, or have implemented a new driver X(hint hint) please contact me at: X--------------------------------- XChris Lewis, R.H. Lathwell & Associates: Elegant Communications Inc. XUUCP: {uunet!attcan, utcsri!utzoo, utai}!lsuc!ecicrl!clewis XUUCP: {uunet!attcan, utcsri!utzoo, utai}!lsuc!gate!eci386!clewis XPhone: (416)-595-5425 END_OF_FILE if test 11311 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi chmod +x 'README' # end of 'README' fi if test -f 'confid.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'confid.ps'\" else echo shar: Extracting \"'confid.ps'\" \(628 characters\) sed "s/^X//" >'confid.ps' <<'END_OF_FILE' X% Copyright 1985, 1986, 1987, 1988 Chris Lewis X% All Rights Reserved X% X% Permission to copy and further distribute is freely given provided X% this copyright notice remains intact and that this software is not X% sold for profit. X% X% Project: Generic Troff drivers X% Module: pslib.sh X% Author: Chris Lewis X% Specs: Confidential overlay inclusion. X%ident @(#)pslib.sh: 1.2 Copyright 89/04/21 11:48:20 Chris Lewis" X X/Confidential { X gsave X .99 setgray X /Courier-Bold findfont 80 scalefont setfont X 0 0 moveto X 54 rotate X 0 -80 rmoveto X 1 2 scale X ( ECI:Confidential) show X grestore X} def END_OF_FILE if test 628 -ne `wc -c <'confid.ps'`; then echo shar: \"'confid.ps'\" unpacked with wrong size! fi # end of 'confid.ps' fi if test -f 'dt.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dt.h'\" else echo shar: Extracting \"'dt.h'\" \(1257 characters\) sed "s/^X//" >'dt.h' <<'END_OF_FILE' X/* Copyright 1985, 1986, 1987, 1988 Chris Lewis X All Rights Reserved X X Permission to copy and further distribute is freely given provided X this copyright notice remains intact and that this software is not X sold for profit. X X Project: Generic Troff drivers X Module: dt.h X Author: Chris Lewis X Specs: Ditroff driver definitions X Hacked from ps.h X */ X X#ifndef SVR3 X#ifndef lint Xstatic char dtID[] = "@(#)dt.h: 1.1 Copyright 89/06/14 17:40:54 Chris Lewis"; X#endif X#else X#ident "@(#)dt.h: 1.1 Copyright 89/06/14 17:40:54 Chris Lewis" X#endif X X/* This is actually done in the back-end */ X#define DTRESOLUTION 432 X/* Length scaling factor */ X#define DTSCALEFACTOR ((double) DTRESOLUTION / TROFFRESOLUTION) X/* Troff assumes 7.5" paper width, most macro packages print in X 6.5" area within that. Sooo, we'll center the paperwidth on the X physical page - implying .5" inch physical margins.*/ X#define TROFF2DTX(x) ((x) * DTSCALEFACTOR + DTRESOLUTION / 2) X/* 11" paper length */ X#define TROFF2DTY(y) ((y) * DTSCALEFACTOR) X Xextern double pagelength; X X#define DTLIB "lib" X#define DTFONTS "fonts" X Xextern int dtProlog(), dtEpilog(), dtChar(), dtPage(), dtFontSel(); X X#define DTNAME "dt" X X#ifdef DT Xstruct troff2befont dtSymFont[], dtStdFont[]; X#endif END_OF_FILE if test 1257 -ne `wc -c <'dt.h'`; then echo shar: \"'dt.h'\" unpacked with wrong size! fi # end of 'dt.h' fi if test ! -d 'font' ; then echo shar: Creating directory \"'font'\" mkdir 'font' fi if test -f 'font/C' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'font/C'\" else echo shar: Extracting \"'font/C'\" \(2660 characters\) sed "s/^X//" >'font/C' <<'END_OF_FILE' X# Courier Xname C Xinternalname Courier X# fixed width Xspacewidth 60 Xcharset X! 60 2 041 X" 60 2 042 X# 60 3 043 X$ 60 3 044 X% 60 2 045 X& 60 2 046 X' 60 2 047 X( 60 3 050 X) 60 3 051 X* 60 2 052 X+ 60 2 053 X, 60 1 054 X- 60 0 055 Xhy " X. 60 0 056 X/ 60 3 057 Xsl " X0 60 2 060 X1 60 2 061 X2 60 2 062 X3 60 2 063 X4 60 2 064 X5 60 2 065 X6 60 2 066 X7 60 2 067 X8 60 2 070 X9 60 2 071 X: 60 0 072 X; 60 1 073 X< 60 2 074 X= 60 0 075 X> 60 2 076 X? 60 2 077 X@ 60 3 0100 XA 60 2 0101 XB 60 2 0102 XC 60 2 0103 XD 60 2 0104 XE 60 2 0105 XF 60 2 0106 XG 60 2 0107 XH 60 2 0110 XI 60 2 0111 XJ 60 2 0112 XK 60 2 0113 XL 60 2 0114 XM 60 2 0115 XN 60 2 0116 XO 60 2 0117 XP 60 2 0120 XQ 60 3 0121 XR 60 2 0122 XS 60 2 0123 XT 60 2 0124 XU 60 2 0125 XV 60 2 0126 XW 60 2 0127 XX 60 2 0130 XY 60 2 0131 XZ 60 2 0132 X[ 60 3 0133 X\ 60 3 0134 X] 60 3 0135 Xa^ 60 2 0136 asciicircum X_ 60 1 0137 Xru " X` 60 2 0140 Xa 60 0 0141 Xb 60 2 0142 Xc 60 0 0143 Xd 60 2 0144 Xe 60 0 0145 Xf 60 2 0146 Xg 60 1 0147 Xh 60 2 0150 Xi 60 2 0151 Xj 60 3 0152 Xk 60 2 0153 Xl 60 2 0154 Xm 60 0 0155 Xn 60 0 0156 Xo 60 0 0157 Xp 60 1 0160 Xq 60 1 0161 Xr 60 0 0162 Xs 60 0 0163 Xt 60 2 0164 Xu 60 0 0165 Xv 60 0 0166 Xw 60 0 0167 Xx 60 0 0170 Xy 60 1 0171 Xz 60 0 0172 X{ 60 3 0173 X| 60 3 0174 X} 60 3 0175 Xa~ 60 0 0176 asciitilde XI! 60 1 0241 exclamdown Xct 60 2 0242 cent Xpo 60 2 0243 sterling X$J 60 2 0245 yen Xsc 60 3 0247 section Xfm 60 2 0251 quotesingle Xn' " Xlq 60 2 0252 quotedblleft Xd< 60 0 0253 guillemotleft Xl< 60 0 0254 guilsinglleft Xr> 60 0 0255 guilsinglright X\- 60 0 0261 endash Xdg 60 3 0262 dagger Xdd 60 3 0263 daggerdbl Xpp 60 3 0266 paragraph Xbu 60 0 0267 bullet Xbq 60 2 0271 quotedblbase Xrq 60 2 0272 quotedblright Xd> 60 0 0273 guillemotright XI? 60 1 0277 questiondown Xga 60 2 0301 grave X\` " Xaa 60 2 0302 acute X\' " X^ 60 2 0303 circumflex X~ 60 2 0304 tilde Xma 60 2 0305 macron Xbe 60 2 0306 breve Xdt 60 2 0307 dotaccent X.. 60 2 0310 dieresis Xum " Xri 60 2 0312 ring Xcd 60 1 0313 cedilla X'' 60 2 0315 hungarumlaut Xog 60 1 0316 ogonek Xhc 60 2 0317 caron Xem 60 0 0320 emdash Xa: 60 2 0321 adieresis Xo: 60 2 0322 odieresis Xu: 60 2 0323 udieresis XA: 60 2 0324 Adieresis XO: 60 2 0325 Odieresis XU: 60 2 0326 Udieresis XPL 60 2 0350 Lslash XO/ 60 2 0351 Oslash Xui 60 0 0365 dotlessi XPl 60 2 0370 lslash Xo/ 60 2 0371 oslash Xss 60 2 0373 germandbls X12 120 2 0100 1/2 faked - code is irrelevent X13 120 2 0100 1/3 faked - code is irrelevent X14 120 2 0100 1/4 faked - code is irrelevent X18 120 2 0100 1/8 faked - code is irrelevent X23 120 2 0100 2/3 faked - code is irrelevent X34 120 2 0100 3/4 faked - code is irrelevent X38 120 2 0100 3/8 faked - code is irrelevent X58 120 2 0100 5/8 faked - code is irrelevent X78 120 2 0100 7/8 faked - code is irrelevent Xsq 100 3 0100 square box END_OF_FILE if test 2660 -ne `wc -c <'font/C'`; then echo shar: \"'font/C'\" unpacked with wrong size! fi # end of 'font/C' fi if test -f 'font/CB' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'font/CB'\" else echo shar: Extracting \"'font/CB'\" \(2667 characters\) sed "s/^X//" >'font/CB' <<'END_OF_FILE' X# Courier-Bold Xname CB Xinternalname CourierB X# fixed width Xspacewidth 60 Xcharset X! 60 2 041 X" 60 2 042 X# 60 3 043 X$ 60 3 044 X% 60 2 045 X& 60 2 046 X' 60 2 047 X( 60 3 050 X) 60 3 051 X* 60 2 052 X+ 60 2 053 X, 60 1 054 X- 60 0 055 Xhy " X. 60 0 056 X/ 60 3 057 Xsl " X0 60 2 060 X1 60 2 061 X2 60 2 062 X3 60 2 063 X4 60 2 064 X5 60 2 065 X6 60 2 066 X7 60 2 067 X8 60 2 070 X9 60 2 071 X: 60 0 072 X; 60 1 073 X< 60 2 074 X= 60 0 075 X> 60 2 076 X? 60 2 077 X@ 60 3 0100 XA 60 2 0101 XB 60 2 0102 XC 60 2 0103 XD 60 2 0104 XE 60 2 0105 XF 60 2 0106 XG 60 2 0107 XH 60 2 0110 XI 60 2 0111 XJ 60 2 0112 XK 60 2 0113 XL 60 2 0114 XM 60 2 0115 XN 60 2 0116 XO 60 2 0117 XP 60 2 0120 XQ 60 3 0121 XR 60 2 0122 XS 60 2 0123 XT 60 2 0124 XU 60 2 0125 XV 60 2 0126 XW 60 2 0127 XX 60 2 0130 XY 60 2 0131 XZ 60 2 0132 X[ 60 3 0133 X\ 60 3 0134 X] 60 3 0135 Xa^ 60 2 0136 asciicircum X_ 60 1 0137 Xru " X` 60 2 0140 Xa 60 0 0141 Xb 60 2 0142 Xc 60 0 0143 Xd 60 2 0144 Xe 60 0 0145 Xf 60 2 0146 Xg 60 1 0147 Xh 60 2 0150 Xi 60 2 0151 Xj 60 3 0152 Xk 60 2 0153 Xl 60 2 0154 Xm 60 0 0155 Xn 60 0 0156 Xo 60 0 0157 Xp 60 1 0160 Xq 60 1 0161 Xr 60 0 0162 Xs 60 0 0163 Xt 60 2 0164 Xu 60 0 0165 Xv 60 0 0166 Xw 60 0 0167 Xx 60 0 0170 Xy 60 1 0171 Xz 60 0 0172 X{ 60 3 0173 X| 60 3 0174 X} 60 3 0175 Xa~ 60 0 0176 asciitilde XI! 60 1 0241 exclamdown Xct 60 2 0242 cent Xpo 60 2 0243 sterling X$J 60 2 0245 yen Xsc 60 3 0247 section Xfm 60 2 0251 quotesingle Xn' " Xlq 60 2 0252 quotedblleft Xd< 60 0 0253 guillemotleft Xl< 60 0 0254 guilsinglleft Xr> 60 0 0255 guilsinglright X\- 60 0 0261 endash Xdg 60 3 0262 dagger Xdd 60 3 0263 daggerdbl Xpp 60 3 0266 paragraph Xbu 60 0 0267 bullet Xbq 60 2 0271 quotedblbase Xrq 60 2 0272 quotedblright Xd> 60 0 0273 guillemotright XI? 60 1 0277 questiondown Xga 60 2 0301 grave X\` " Xaa 60 2 0302 acute X\' " X^ 60 2 0303 circumflex X~ 60 2 0304 tilde Xma 60 2 0305 macron Xbe 60 2 0306 breve Xdt 60 2 0307 dotaccent X.. 60 2 0310 dieresis Xum " Xri 60 2 0312 ring Xcd 60 1 0313 cedilla X'' 60 2 0315 hungarumlaut Xog 60 1 0316 ogonek Xhc 60 2 0317 caron Xem 60 0 0320 emdash Xa: 60 2 0321 adieresis Xo: 60 2 0322 odieresis Xu: 60 2 0323 udieresis XA: 60 2 0324 Adieresis XO: 60 2 0325 Odieresis XU: 60 2 0326 Udieresis XPL 60 2 0350 Lslash XO/ 60 3 0351 Oslash Xui 60 0 0365 dotlessi XPl 60 2 0370 lslash Xo/ 60 3 0371 oslash Xss 60 2 0373 germandbls X12 120 2 0100 1/2 faked - code is irrelevent X13 120 2 0100 1/3 faked - code is irrelevent X14 120 2 0100 1/4 faked - code is irrelevent X18 120 2 0100 1/8 faked - code is irrelevent X23 120 2 0100 2/3 faked - code is irrelevent X34 120 2 0100 3/4 faked - code is irrelevent X38 120 2 0100 3/8 faked - code is irrelevent X58 120 2 0100 5/8 faked - code is irrelevent X78 120 2 0100 7/8 faked - code is irrelevent Xsq 100 3 0100 square box END_OF_FILE if test 2667 -ne `wc -c <'font/CB'`; then echo shar: \"'font/CB'\" unpacked with wrong size! fi # end of 'font/CB' fi if test -f 'font/CO' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'font/CO'\" else echo shar: Extracting \"'font/CO'\" \(2670 characters\) sed "s/^X//" >'font/CO' <<'END_OF_FILE' X# Courier-Oblique Xname CO Xinternalname CourierO X# fixed width Xspacewidth 60 Xcharset X! 60 2 041 X" 60 2 042 X# 60 3 043 X$ 60 3 044 X% 60 2 045 X& 60 2 046 X' 60 2 047 X( 60 3 050 X) 60 3 051 X* 60 2 052 X+ 60 2 053 X, 60 1 054 X- 60 0 055 Xhy " X. 60 0 056 X/ 60 3 057 Xsl " X0 60 2 060 X1 60 2 061 X2 60 2 062 X3 60 2 063 X4 60 2 064 X5 60 2 065 X6 60 2 066 X7 60 2 067 X8 60 2 070 X9 60 2 071 X: 60 0 072 X; 60 1 073 X< 60 2 074 X= 60 0 075 X> 60 2 076 X? 60 2 077 X@ 60 3 0100 XA 60 2 0101 XB 60 2 0102 XC 60 2 0103 XD 60 2 0104 XE 60 2 0105 XF 60 2 0106 XG 60 2 0107 XH 60 2 0110 XI 60 2 0111 XJ 60 2 0112 XK 60 2 0113 XL 60 2 0114 XM 60 2 0115 XN 60 2 0116 XO 60 2 0117 XP 60 2 0120 XQ 60 3 0121 XR 60 2 0122 XS 60 2 0123 XT 60 2 0124 XU 60 2 0125 XV 60 2 0126 XW 60 2 0127 XX 60 2 0130 XY 60 2 0131 XZ 60 2 0132 X[ 60 3 0133 X\ 60 3 0134 X] 60 3 0135 Xa^ 60 2 0136 asciicircum X_ 60 1 0137 Xru " X` 60 2 0140 Xa 60 0 0141 Xb 60 2 0142 Xc 60 0 0143 Xd 60 2 0144 Xe 60 0 0145 Xf 60 2 0146 Xg 60 1 0147 Xh 60 2 0150 Xi 60 2 0151 Xj 60 3 0152 Xk 60 2 0153 Xl 60 2 0154 Xm 60 0 0155 Xn 60 0 0156 Xo 60 0 0157 Xp 60 1 0160 Xq 60 1 0161 Xr 60 0 0162 Xs 60 0 0163 Xt 60 2 0164 Xu 60 0 0165 Xv 60 0 0166 Xw 60 0 0167 Xx 60 0 0170 Xy 60 1 0171 Xz 60 0 0172 X{ 60 3 0173 X| 60 3 0174 X} 60 3 0175 Xa~ 60 0 0176 asciitilde XI! 60 1 0241 exclamdown Xct 60 2 0242 cent Xpo 60 2 0243 sterling X$J 60 2 0245 yen Xsc 60 3 0247 section Xfm 60 2 0251 quotesingle Xn' " Xlq 60 2 0252 quotedblleft Xd< 60 0 0253 guillemotleft Xl< 60 0 0254 guilsinglleft Xr> 60 0 0255 guilsinglright X\- 60 0 0261 endash Xdg 60 3 0262 dagger Xdd 60 3 0263 daggerdbl Xpp 60 3 0266 paragraph Xbu 60 0 0267 bullet Xbq 60 2 0271 quotedblbase Xrq 60 2 0272 quotedblright Xd> 60 0 0273 guillemotright XI? 60 1 0277 questiondown Xga 60 2 0301 grave X\` " Xaa 60 2 0302 acute X\' " X^ 60 2 0303 circumflex X~ 60 2 0304 tilde Xma 60 2 0305 macron Xbe 60 2 0306 breve Xdt 60 2 0307 dotaccent X.. 60 2 0310 dieresis Xum " Xri 60 2 0312 ring Xcd 60 1 0313 cedilla X'' 60 2 0315 hungarumlaut Xog 60 1 0316 ogonek Xhc 60 2 0317 caron Xem 60 0 0320 emdash Xa: 60 2 0321 adieresis Xo: 60 2 0322 odieresis Xu: 60 2 0323 udieresis XA: 60 2 0324 Adieresis XO: 60 2 0325 Odieresis XU: 60 2 0326 Udieresis XPL 60 2 0350 Lslash XO/ 60 2 0351 Oslash Xui 60 0 0365 dotlessi XPl 60 2 0370 lslash Xo/ 60 2 0371 oslash Xss 60 2 0373 germandbls X12 120 2 0100 1/2 faked - code is irrelevent X13 120 2 0100 1/3 faked - code is irrelevent X14 120 2 0100 1/4 faked - code is irrelevent X18 120 2 0100 1/8 faked - code is irrelevent X23 120 2 0100 2/3 faked - code is irrelevent X34 120 2 0100 3/4 faked - code is irrelevent X38 120 2 0100 3/8 faked - code is irrelevent X58 120 2 0100 5/8 faked - code is irrelevent X78 120 2 0100 7/8 faked - code is irrelevent Xsq 100 3 0100 square box END_OF_FILE if test 2670 -ne `wc -c <'font/CO'`; then echo shar: \"'font/CO'\" unpacked with wrong size! fi # end of 'font/CO' fi if test -f 'font/S2' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'font/S2'\" else echo shar: Extracting \"'font/S2'\" \(856 characters\) sed "s/^X//" >'font/S2' <<'END_OF_FILE' X# "Symbol" Xname S2 Xinternalname BracketFont Xspecial Xcharset Xbv 50 2 0101 bold vertical Xlt 50 2 0102 left top of big curly bracket Xlk 50 2 0103 left centre of big curly bracket Xlb 50 2 0104 left bottom of big curly bracket Xrt 50 2 0105 right top of big curly bracket Xrk 50 2 0106 right centre of big curly bracket Xrb 50 2 0107 right bottom of big curly bracket Xlc 50 2 0110 left ceiling (left top of big square bracket) Xlf 50 2 0111 left floor (left bottom of big square bracket) Xrc 50 2 0112 right ceiling (right top of big square bracket) Xrf 50 2 0113 right floor (right bottom of big square bracket) Xbr 0 2 0114 box vertical rule (matches ul) Xrn 50 2 0115 root en extender Xci 100 3 0116 circle X\| 17 0 0117 1/6em narrow space X\^ 8 0 0120 1/12 em narrow space Xr1 80 0 0121 reversible reaction ( chemical ) Xr2 80 0 0122 reversible reaction - 2 full arrows END_OF_FILE if test 856 -ne `wc -c <'font/S2'`; then echo shar: \"'font/S2'\" unpacked with wrong size! fi # end of 'font/S2' fi if test -f 'fonts.dt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.dt'\" else echo shar: Extracting \"'fonts.dt'\" \(632 characters\) sed "s/^X//" >'fonts.dt' <<'END_OF_FILE' X#@(#)fonts.dt 1.1 89/06/14 X# DO NOT CHANGE THE ORDER OF THE FIRST FOUR LINES - THESE ARE X# THE DEFAULT TROFF FONTS IN POSITIONS 1-4. IN PARTICULAR, IF X# SYMBOL ISN'T THE FOURTH ENTRY, BOXES, TABLES, AND OTHER FANCY X# CHARACTERS DON'T WORK SHIT. XR Times-Roman XI Times-Italic XB Times-Bold XS Symbol XBI Times-BoldItalic XH Helvetica XHI Helvetica-Oblique XHB Helvetica-Bold XHo Helvetica-BoldOblique XCW Courier XZC ZapfChancery-MediumItalic XA AvantGarde-Book XAI AvantGarde-BookOblique XAB AvantGarde-Demi XAi AvantGarde-DemiItalic XAP APL Xh Helvetica-Narrow Xhi Helvetica-Narrow-Oblique Xhb Helvetica-Narrow-Bold XhI Helvetica-Narrow-BoldOblique END_OF_FILE if test 632 -ne `wc -c <'fonts.dt'`; then echo shar: \"'fonts.dt'\" unpacked with wrong size! fi # end of 'fonts.dt' fi if test -f 'fonts.lj' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.lj'\" else echo shar: Extracting \"'fonts.lj'\" \(1341 characters\) sed "s/^X//" >'fonts.lj' <<'END_OF_FILE' X#@(#)fonts.lj 1.1 89/05/02 X# four fields: X# troff-name english-name HPLJ-code-to-transmit flags X# flags of interest: 02 indicates that it's a built-in font. X# \nnn sequences are only recognized in the HPLJ-code field. X# Don't put in *any* extraneous spaces. X# +----------------------------- Symbol set X# | +---------------------- 0=fixed, 1=proportional X# | | +-------------------- 0=upright, 1=italics X# | | | +----------------- stroke weight -7...7 X# | | | | +-------------- Typeface X# | | | | | X# | | | | | +----------- 2 == builtin X# | | | | | | X# v v v v v v XR Times-Roman \033(8U\033(s1p0s00b05T 2 XI Times-Italic \033(8U\033(s1p1s-3b05T 2 XB Times-Bold \033(8U\033(s1p0s03b05T 2 XS Symbol \033(8U\033(s0p0s00b03T 2 XBI Times-BoldItalic \033(8U\033(s1p1s03b05T 2 XCW Courier \033(8U\033(s0p0s00b03T 2 XCI Courier-Italic \033(8U\033(s0p1s-3b03T 2 XCB Courier-Bold \033(8U\033(s0p0s03b03T 2 XL LinePrinter \033(8U\033(s0p0s00b00T 2 XLI LinePrinter-Ital \033(8U\033(s0p1s-3b00T 2 XLB LinePrinter-Bold \033(8U\033(s0p0s03b00T 2 END_OF_FILE if test 1341 -ne `wc -c <'fonts.lj'`; then echo shar: \"'fonts.lj'\" unpacked with wrong size! fi # end of 'fonts.lj' fi if test -f 'fonts.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.ps'\" else echo shar: Extracting \"'fonts.ps'\" \(669 characters\) sed "s/^X//" >'fonts.ps' <<'END_OF_FILE' X#@(#)fonts.ps 1.9 89/08/22 X# DO NOT CHANGE THE ORDER OF THE FIRST FOUR LINES - THESE ARE X# THE DEFAULT TROFF FONTS IN POSITIONS 1-5. IN PARTICULAR, IF X# SYMBOL ISN'T THE FOURTH ENTRY AND BRACKETFONT ISN'T THE FIFTH, X# BOXES, TABLES, AND OTHER FANCY CHARACTERS DON'T WORK SHIT. X# Don't try to directly reference font 5..... X XR Times-Roman XI Times-Italic XB Times-Bold XS Symbol X.. BracketFont XBB Bookman-Demi XBI Times-BoldItalic XBO Bookman-LightItalic XBR Bookman-Light XBX Bookman-DemiItalic XC Courier XCB Courier-Bold XCO Courier-Oblique XCX Courier-BoldOblique XH Helvetica XHB Helvetica-Bold XHO Helvetica-Oblique XHX Helvetica-BoldOblique XPA Palatino-Roman XPB Palatino-Bold END_OF_FILE if test 669 -ne `wc -c <'fonts.ps'`; then echo shar: \"'fonts.ps'\" unpacked with wrong size! fi # end of 'fonts.ps' fi if test -f 'gfnttab.sh' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'gfnttab.sh'\" else echo shar: Extracting \"'gfnttab.sh'\" \(612 characters\) sed "s/^X//" >'gfnttab.sh' <<'END_OF_FILE' X: X# 1.2 89/08/25 Xtrap "exit 1" 0 1 2 3 15 Xif [ ! -d /usr/lib/oldfonts ] Xthen X if mkdir /usr/lib/oldfonts X then X : X else X exit 1 X fi X cp /usr/lib/font/* /usr/lib/oldfonts Xfi Xset -e Xrm -f /tmp/S Xcp font/S /tmp/S Xchmod 644 /tmp/S Xsed -e '1,/charset/d' font/S2 >> /tmp/S Xfor i in font/[A-Z]* Xdo X case $i in X font/S) X echo "Generating font S" X ./dit2catwid -s /tmp/S font/R font/ftS X ;; X font/S2) X continue X ;; X *) X echo "Generating font `basename $i`" X ./dit2catwid /tmp/S $i font/ft`basename $i` X ;; X esac Xdone Xset -ex Xmv font/ft* /usr/lib/font Xtrap "" 0 Xexit 0 END_OF_FILE if test 612 -ne `wc -c <'gfnttab.sh'`; then echo shar: \"'gfnttab.sh'\" unpacked with wrong size! fi # end of 'gfnttab.sh' fi if test -f 'lethead.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lethead.ps'\" else echo shar: Extracting \"'lethead.ps'\" \(976 characters\) sed "s/^X//" >'lethead.ps' <<'END_OF_FILE' X% Copyright 1985, 1986, 1987, 1988 R.H. Lathwell Associates: X% Elegant Communications Inc. All Rights Reserved X% X% Permission to copy and further distribute is freely given provided X% this copyright notice remains intact and that this software is not X% sold for profit. X% X% Project: Generic Troff drivers X% Module: lhead.ps.sh X% Author: Chris Lewis X% Specs: LetterHead overlay inclusion. X%ident @(#)lhead.ps.sh: 1.3 Copyright 89/04/21 11:47:29 Chris Lewis" X X/LetterHead { X /Logosave save def X matrix currentmatrix setmatrix 180 740 translate X % Box X newpath 0 12 moveto 0 32 rlineto 250 0 rlineto 0 -32 rlineto closepath fill X % Type in box X /Helvetica findfont 16 scalefont setfont X 9 17 moveto 1 setgray (R.H. LATHWELL ASSOCIATES:)show X % Type below box. X /Helvetica findfont 12 scalefont setfont X 25 0 moveto 0 setgray (ELEGANT COMMUNICATIONS, INC.)show X % Underline. X -162 -4 moveto 630 0 rlineto stroke X Logosave restore X} def END_OF_FILE if test 976 -ne `wc -c <'lethead.ps'`; then echo shar: \"'lethead.ps'\" unpacked with wrong size! fi # end of 'lethead.ps' fi if test -f 'lib.dt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lib.dt'\" else echo shar: Extracting \"'lib.dt'\" \(448 characters\) sed "s/^X//" >'lib.dt' <<'END_OF_FILE' X% Copyright 1985, 1986, 1987, 1988 Chris Lewis X% All Rights Reserved X% X% Permission to copy and further distribute is freely given provided X% this copyright notice remains intact and that this software is not X% sold for profit. X% X% Project: Generic Troff drivers X% Module: lib.dt X% Author: Chris Lewis X% Specs: Predefinitions for Ditroff X% X%ident @(#)lib.dt: 1.1 Copyright 89/06/21 11:37:47 Chris Lewis" X%There is nothing here yet. END_OF_FILE if test 448 -ne `wc -c <'lib.dt'`; then echo shar: \"'lib.dt'\" unpacked with wrong size! fi # end of 'lib.dt' fi if test -f 'lib.lj' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lib.lj'\" else echo shar: Extracting \"'lib.lj'\" \(1151 characters\) sed "s/^X//" >'lib.lj' <<'END_OF_FILE' X% Copyright 1985, 1986, 1987, 1988 Chris Lewis X% All Rights Reserved X% X% Permission to copy and further distribute is freely given provided X% this copyright notice remains intact and that this software is not X% sold for profit. X% X% Project: Generic Troff drivers X% Module: lib.lj X% Author: Chris Lewis X% Specs: Predefinitions for HP Laserjet X% This is an ASCII file that is translated into X% binary by the lj driver. Using the following X% Escape conventions: X% %comment X% line from % to end of line ignored. X% \nnnnnn ..... X% each group of 3 digits is interpreted as an X% octal bytes. Terminated by next non-octal X% character. X% \xnnnnnn ... X% Each group of 2 digits is interpreted as a X% hexidecimal byte. Terminated by next non-hex X% character. X% tabs, spaces and newlines are ignored (you have to X% use hex or octal to pass them). X% All others passed straight through. X% For example: X% \xAABB \022 A %hello X% Passes the following bytes: 0xAA, 0xBB, 022, and "A" X% through to the laserjet. X%ident @(#)lib.lj: 1.1 Copyright 89/05/02 17:34:07 Chris Lewis" X%There is nothing here yet. END_OF_FILE if test 1151 -ne `wc -c <'lib.lj'`; then echo shar: \"'lib.lj'\" unpacked with wrong size! fi # end of 'lib.lj' fi if test -f 'lib.lk' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lib.lk'\" else echo shar: Extracting \"'lib.lk'\" \(1151 characters\) sed "s/^X//" >'lib.lk' <<'END_OF_FILE' X% Copyright 1985, 1986, 1987, 1988 Chris Lewis X% All Rights Reserved X% X% Permission to copy and further distribute is freely given provided X% this copyright notice remains intact and that this software is not X% sold for profit. X% X% Project: Generic Troff drivers X% Module: lib.lk X% Author: Chris Lewis X% Specs: Predefinitions for HP Laserjet X% This is an ASCII file that is translated into X% binary by the lj driver. Using the following X% Escape conventions: X% %comment X% line from % to end of line ignored. X% \nnnnnn ..... X% each group of 3 digits is interpreted as an X% octal bytes. Terminated by next non-octal X% character. X% \xnnnnnn ... X% Each group of 2 digits is interpreted as a X% hexidecimal byte. Terminated by next non-hex X% character. X% tabs, spaces and newlines are ignored (you have to X% use hex or octal to pass them). X% All others passed straight through. X% For example: X% \xAABB \022 A %hello X% Passes the following bytes: 0xAA, 0xBB, 022, and "A" X% through to the laserjet. X%ident @(#)lib.lk: 1.1 Copyright 89/05/02 17:34:12 Chris Lewis" X%There is nothing here yet. END_OF_FILE if test 1151 -ne `wc -c <'lib.lk'`; then echo shar: \"'lib.lk'\" unpacked with wrong size! fi # end of 'lib.lk' fi if test -f 'lj.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lj.h'\" else echo shar: Extracting \"'lj.h'\" \(1352 characters\) sed "s/^X//" >'lj.h' <<'END_OF_FILE' X/* Copyright 1985, 1986, 1987, 1988 Chris Lewis X All Rights Reserved X X Permission to copy and further distribute is freely given provided X this copyright notice remains intact and that this software is not X sold for profit. X X Project: Generic Troff drivers X Module: lj.h X Author: Chris Lewis X Specs: Laserjet Driver definitions X Hacked from ps.h X */ X X#ifndef SVR3 X#ifndef lint Xstatic char ljID[] = "@(#)lj.h: 1.4 Copyright 89/04/21 11:47:35 Chris Lewis"; X#endif X#else X#ident "@(#)lj.h: 1.4 Copyright 89/04/21 11:47:35 Chris Lewis" X#endif X X/* We're using decipoints */ X#define LJRESOLUTION 720 X/* Length scaling factor */ X#define LJSCALEFACTOR ((double) LJRESOLUTION / TROFFRESOLUTION) X/* Troff assumes 7.5" paper width, most macro packages print in X 6.5" area within that. Sooo, we'll center the paperwidth on the X physical page - implying .5" inch physical margins.*/ X#define TROFF2LJX(x) ((x) * LJSCALEFACTOR + LJRESOLUTION / 2) X/* 11" paper length */ X#define TROFF2LJY(y) ((y) * LJSCALEFACTOR) X Xextern double pagelength; X X#define LASTLJFONT ('O') X X#define LJLIB "lib" X#define LJFONTS "fonts" X Xextern int ljProlog(), ljEpilog(), ljChar(), ljPage(), ljFontSel(); X X#define LJNAME "lj" X#define LKNAME "lk" X X#ifdef LJ Xstruct troff2befont ljSymFont[], ljStdFont[]; X#endif X#ifdef LK Xstruct troff2befont lkSymFont[], lkStdFont[]; X#endif END_OF_FILE if test 1352 -ne `wc -c <'lj.h'`; then echo shar: \"'lj.h'\" unpacked with wrong size! fi # end of 'lj.h' fi if test -f 'ps.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ps.h'\" else echo shar: Extracting \"'ps.h'\" \(1405 characters\) sed "s/^X//" >'ps.h' <<'END_OF_FILE' X/* Copyright 1985, 1986, 1987, 1988 Chris Lewis X All Rights Reserved X X Permission to copy and further distribute is freely given provided X this copyright notice remains intact and that this software is not X sold for profit. X X Project: Generic Troff drivers X Module: ps.h X Author: Chris Lewis X Specs: PostScript Driver definitions X */ X X#ifndef SVR3 X#ifndef lint Xstatic char psID[] = "@(#)ps.h: 1.14 Copyright 89/04/21 11:47:53 Chris Lewis"; X#endif X#else X#ident "@(#)ps.h: 1.14 Copyright 89/04/21 11:47:53 Chris Lewis" X#endif X X/* Points per inch (default PostScript resolution) */ X#define PSRESOLUTION 72 X/* Length scaling factor */ X#define PSSCALEFACTOR ((double) PSRESOLUTION / TROFFRESOLUTION) X/* Troff assumes 7.5" paper width, most macro packages print in X 6.5" area within that. Sooo, we'll center the paperwidth on the X physical page - implying .5" inch physical margins.*/ X#define TROFF2PSX(x) ((x) * PSSCALEFACTOR + PSRESOLUTION / 2) X/* 11" paper length (note the reversed sign!) */ X#define TROFF2PSY(y) ((pagelength - (y)) * PSSCALEFACTOR) X Xextern double pagelength; X X#define LASTPSFONT ('O') X X#define FONTMACRO X X#define PSLIB "lib.ps" X#define PSFONTS "fonts.ps" X#define EMITPS printf X X/* Entry points: */ Xextern int psProlog(), psEpilog(), psChar(), psPage(), psFontSel(), X psOverlay(), psXlate(), psBin(); X X#define PSNAME "ps" X Xstruct troff2befont psSymFont[], psStdFont[]; END_OF_FILE if test 1405 -ne `wc -c <'ps.h'`; then echo shar: \"'ps.h'\" unpacked with wrong size! fi # end of 'ps.h' fi if test -f 'psroff.1' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'psroff.1'\" else echo shar: Extracting \"'psroff.1'\" \(2522 characters\) sed "s/^X//" >'psroff.1' <<'END_OF_FILE' X.\"Copyright 1988 by Chris Lewis 1.3 89/05/18 X.TH PSROFF 1 local X.SH NAME Xpsroff,ljroff,xxroff \- troff replacement for PostScript or HP Printers. X.SH SYNOPSIS X.IB xx roff X[-D] [-X] X.RI "[-d" xx "]" X.RI "[-rL" length "]" X.RI [ troffopts ] files ... X.SH DESCRIPTION X.I Psroff Xis functionally equivalent for X.I troff Xfor printing on PostScript or HP Laserjet printers. X.I Troffopts Xcan be any of the normal X.I troff Xarguments, in particular -m directives for specifying macro package. XNote that the semantics of "-t" are changed - it means send the Postscript X(or HP Laserjet) output to stdout. XThe "-X" option does a "set -x" for debugging. XThe "-D" option passes the "-D" option through to troff2ps. X.P X.I Psroff Xcan be made to generate several different printer output formats. XIt selects which one by one of two methods. XFirst, X.I psroff Xlooks at the first two characters in it's name for printer type. XThus, you can link "psroff" to "ljroff" - invocation of the latter will Xgenerate LaserJet codes. XAdditionally, you can override this by specifying Xthe X.RI -d xx Xoption, where X.I xx Xwill select which printer codes to generate. X.P X.I Psroff Xinvokes X.I troff Xto do the document formatting, then sends the output Xto X.I troff2ps Xto do the generation of the correct printer codes. X.P XSince X.I troff2ps Xrequires that it knows the page length, the "-rL" option should be Xused (see the documentation for MM and X.I troff2ps Xfor more details). X.SH BUGS XOld-fashioned CAT troff doesn't have a mechanism for passing arbitrary Xcommands to the CAT - eg: overlays, and physical font mounting etc. XIn order to support these things, a macro ".sR" was invented that Xpasses special directives to the back end by means of a magic pseudo XCAT code 'M', followed by an ASCII string containing the directive. XUnfortunately, the only way to get that to the back end from troff Xthat I have found so far is to embed the 'M<string>' in a ``.tm'' troff Xdirective. XThe ``.tm'' puts it's string to stderr, so psroff has been modified to Xmerge the stdout (CAT codes using -t option to troff) and stderr (.tm Xdirectives) together. X.P XUnfortunately, this means that you don't get to see troff-generated Xerrors except as "illegal flash" errors from troff2ps, or varying Xdegrees of extreme garbage on the printer. XIf you encounter mangled output, try running Xtroff instead of psroff, with the ``-t'' option, and direct stdout Xto /dev/null. XThen you will see troff's stderr. X.SH "SEE ALSO" Xtroff(1), troff2ps(1L), mm(5?) X.SH AUTHOR XWritten by Chris Lewis END_OF_FILE if test 2522 -ne `wc -c <'psroff.1'`; then echo shar: \"'psroff.1'\" unpacked with wrong size! fi # end of 'psroff.1' fi if test -f 'psroff.sh' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'psroff.sh'\" else echo shar: Extracting \"'psroff.sh'\" \(1772 characters\) sed "s/^X//" >'psroff.sh' <<'END_OF_FILE' X: X# Copyright 1985, 1986, 1987, 1988 Chris Lewis X# All Rights Reserved X# X# Permission to copy and further distribute is freely given provided X# this copyright notice remains intact and that this software is not X# sold for profit. X# X# Project: Generic Troff drivers X# Module: psroff.sh X# Author: Chris Lewis X# Specs: troff driver X# X#ident "@(#)psroff.sh: 1.15 Copyright 89/07/14 14:47:46 Chris Lewis" Xterm=false Xtype=`basename $0 | sed -e 's/^\(..\).*/\1/'` Xcopies=1 Xfor i in $* Xdo X case $i in X -X) X set -x X ;; X -t) X term=true X ;; X -T*) X device=`echo $i | sed -e 's/-T//'` X ;; X -d*) X type=`echo $i | sed -e 's/-d//'` X ;; X -n*) X copies=`echo $i | sed -e 's/-n//'` X ;; X -D | -m) X debug="$debug $i" X ;; X -) X files="$files $i" X ;; X -rL*) X eval `echo $i | sed -e 's/-rL\(..*\)\(.\)$/length=\1 prec=\2/'` X if [ -z "$length" -o -z "$prec" ] X then X echo "Bad length definition ($i) - must have value and scale" \ X >&2 X exit 1 X fi X length="-l$length$prec" X args="$args $i" X ;; X -*) X args="$args $i" X ;; X *) X files="$files $i" X if [ ! -r $i ] X then X echo "$0: cannot open $i" >&2 X exit 1 X fi X ;; X esac Xdone X Xif [ -x troff2ps ] Xthen X t2=./troff2ps Xelse X t2=%%LIBDIR%%/troff2ps Xfi X X# If you add a driver, you will have to add it here too: Xcase $type in X lj | lk) OUTPUT="%%LJOUTPUT%%" ;; X ps) OUTPUT="%%PSOUTPUT%%" ;; X dt) OUTPUT="%%DTOUTPUT%%" ;; X *) X echo "$0: don't understand $type drivers" >&2 X exit 1 X ;; Xesac Xif $term Xthen X ( troff -t $args $files 2>&1 ) | $t2 $length -d$type $debug $device X exit $? Xelse X eval "( troff -t $args $files 2>&1 ) | $t2 $length -d$type $debug $device $OUTPUT" X exit $? Xfi END_OF_FILE if test 1772 -ne `wc -c <'psroff.sh'`; then echo shar: \"'psroff.sh'\" unpacked with wrong size! fi # end of 'psroff.sh' fi if test -f 't2conf.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'t2conf.c'\" else echo shar: Extracting \"'t2conf.c'\" \(1916 characters\) sed "s/^X//" >'t2conf.c' <<'END_OF_FILE' X/* Copyright 1985, 1986, 1987, 1988 Chris Lewis X All Rights Reserved X X Permission to copy and further distribute is freely given provided X this copyright notice remains intact and that this software is not X sold for profit. X X Project: Generic Troff drivers X Module: t2conf.c X Author: Chris Lewis X Specs: Switch for alternate backends. X */ X X#include "defs.h" X X#ifndef SVR3 X#ifndef lint Xstatic char SCCSid[] = "@(#)t2conf.c: 1.7 Copyright 89/06/14 17:39:52 Chris Lewis"; X#endif X#else X#ident "@(#)t2conf.c: 1.7 Copyright 89/06/14 17:39:52 Chris Lewis" X#endif X X#ifdef PS X#include "ps.h" X#endif X X#if defined(LJ) || defined(LK) X#include "lj.h" X#endif X X#ifdef DT X#include "dt.h" X#endif X Xstruct backend B[] = { X/* bename, beprolog, beepilog, bechar, bepage, befontsel */ X/* beoverlay, bebin bexlat, bestdfont, besymfont */ X X#ifdef PS X { PSNAME, psProlog, psEpilog, psChar, psPage, psFontSel, X psOverlay, psBin, psXlate, psStdFont, psSymFont }, X#endif X X#ifdef DT X { DTNAME, dtProlog, dtEpilog, dtChar, dtPage, dtFontSel, X NULL, NULL, NULL, dtStdFont, dtSymFont }, X#endif X X#ifdef LJ X { LJNAME, ljProlog, ljEpilog, ljChar, ljPage, ljFontSel, X NULL, NULL, NULL, ljStdFont, ljSymFont }, X#endif X#ifdef LK X { LKNAME, ljProlog, ljEpilog, ljChar, ljPage, ljFontSel, X NULL, NULL, NULL, lkStdFont, lkSymFont }, X#endif X X { NULL } X}; X X Xgetdriver(name) Xchar *name; { X X be = BNULL; X if (B[0].bename == NULL) { X fprintf(stderr, "%s: No drivers configured!\n", progname); X exit(1); X } X X if (B[1].bename == NULL) { X if (strcmp(B[0].bename, name)) { X fprintf(stderr, "%s: Asked for driver '%s', only %s exists\n", X progname, name, B[0].bename); X exit(1); X } X be = &B[0]; X return; X } X for (be = B; be->bename != NULL; be++) X if (strcmp(name, be->bename) == 0) X return; X fprintf(stderr, "%s: No driver called '%s' configured\n", progname, name); X exit(1); X} END_OF_FILE if test 1916 -ne `wc -c <'t2conf.c'`; then echo shar: \"'t2conf.c'\" unpacked with wrong size! fi # end of 't2conf.c' fi if test -f 'tmac.t2' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'tmac.t2'\" else echo shar: Extracting \"'tmac.t2'\" \(2036 characters\) sed "s/^X//" >'tmac.t2' <<'END_OF_FILE' X.\" Copyright 1985, 1986, 1987, 1988 Chris Lewis X.\" All Rights Reserved X.\" X.\" Permission to copy and further distribute is freely given provided X.\" this copyright notice remains intact and that this software is not X.\" sold for profit. X.\" X.\" Project: Generic Troff drivers X.\" Module: tmac.eci.sh X.\" Author: Chris Lewis X.\" Specs: MM Prolog X.\"ident "@(#)tmac.eci.sh: 1.27 Copyright 89/08/22 14:59:42 Chris Lewis" X.\"endif X.so /usr/lib/tmac/tmac.m X.tr \(bs X.ds}2 Elegant Communications Inc. X.dsIn \*(}2 X.dsBU \s+2\(bu\s0 X'lg 0 X.desR X.\"Output request sequence - thru .tm - caught by backend X.if t \{\ X.\"M is illegal C/A/T opcode - triggers troff2 to start collecting. X.\"newline is terminator X'tm M\\$1 X\} X.. X.de eX X.ie \\w'\\$1'=0 .ds ee X.el .ds ee "\\$1 X.DS \\$2 \\$3 X\!.fp 1 C X.\"\!.lg 0 X\!.cs 1 24 X.ss 24 X\!.br X.. X.de eE X\!.fp 1 R X\!.cs 1 X.ss 12 X\!.br X\.if \\w'\\*(ee'>0 .FG "\\*(ee" X.DE X.. X.ds HP +4 +2 X.ds HF 3 3 2 2 X.OH "'''Elegant Communications Inc.'" X.EH "'''Elegant Communications Inc.'" X.PH "''''" X.if t .PF "''\s8481 University Avenue, Suite 602, Toronto, Canada, M5G 2E9 (416)-595-5425, FAX (416) 595-5439\s0''" X.if n .PF "''481 University Avenue, Suite 602, Toronto, Canada''" X.\".OF "'Page \\\\nP''\\\\*(DT'" X.OF "'\\\\*(DT''Page \\\\nP'" X.EF "'\\\\*(DT''Page \\\\nP'" X.de nH X.OF "''''" X.EF "''''" X.PF "''''" X.OH "''''" X.EH "''''" X.PH "''''" X.. X.de aD X.SP 3 X.DS XElegant Communications Inc. X481 University Avenue, XSuite 602 XToronto, Ontario XM5G 2E9 X XPhone: (416) 595-5425 XFax: (416) 595-5439 X.DE X.. X.\" Appendix Macros X.de AH X.if \\n(aH=0\{ X.nr aH 1 X.nr h1 0\} X.nr;1 0\\$1 X.if!\\n(;1 .)D "aH:bad arg:\\$1" X.if2-\\n(;1 .nr h2 0 1 X.if3-\\n(;1 .nr h3 0 1 X.if4-\\n(;1 .nr h4 0 1 X.if5-\\n(;1 .nr h5 0 1 X.if6-\\n(;1 .nr h6 0 1 X.if7-\\n(;1 .nr h7 0 1 X.nr h\\n(;1 +1 X.afh1 A X.ds}0 \\n(h1. X.if0\\$1-1 .as }0 \\n(h2 X.if0\\$1-2 .as }0 .\\n(h3 X.if0\\$1-3 .as }0 .\\n(h4 X.if0\\$1-4 .as }0 .\\n(h5 X.if0\\$1-5 .as }0 .\\n(h6 X.if0\\$1-6 .as }0 .\\n(h7 X.nr Hu \\n(;1 X.HU "Appendix \\*(}0\\ \\ \\$2" X.. X.rm )k END_OF_FILE if test 2036 -ne `wc -c <'tmac.t2'`; then echo shar: \"'tmac.t2'\" unpacked with wrong size! fi chmod +x 'tmac.t2' # end of 'tmac.t2' fi if test -f 'upload.sh' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'upload.sh'\" else echo shar: Extracting \"'upload.sh'\" \(1284 characters\) sed "s/^X//" >'upload.sh' <<'END_OF_FILE' X: X#@(#)upload 1.1 89/05/18 Xrlp -dgate!AppleLaser << 'END' X X/savearea save def X X/tmp 1 string def X X/myscale { X 2 mul round cvi X} def X X/dumpwidths { X X dup X ( ) cvs print X (\n) print X findfont 18 scalefont setfont X 0 1 255 X { X newpath X /i exch def X 0 0 moveto X tmp 0 i put X X tmp stringwidth pop /width exch def X X % Set current point again. X 0 0 moveto X /curx currentpoint pop def X X % retrieve bounding box info. X tmp false charpath flattenpath pathbbox X /ury exch def X /urx exch def X /lly exch def X /llx exch def X X % calc left bearing as leftx - curx X X /lbear llx curx sub myscale def X X % calc height as upper y - lower y X X /heights ury lly sub myscale def X X % calc right bearing as width - upper x X X /rbear width urx curx sub sub myscale def X X i ( ) cvs print (,) print X lbear ( ) cvs print (,) print X width myscale ( ) cvs print (,) print X rbear ( ) cvs print (,) print X heights ( ) cvs print (\n) print X X X } X for X} def X XFontDirectory { X pop X ( ) cvs print X (\n) print X} forall X XFontDirectory { X pop X dup ( ) cvs (cmr10-300) ne { X dumpwidths X } if X} forall X Xsavearea restore XEND END_OF_FILE if test 1284 -ne `wc -c <'upload.sh'`; then echo shar: \"'upload.sh'\" unpacked with wrong size! fi # end of 'upload.sh' fi if test -f 'utils.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'utils.c'\" else echo shar: Extracting \"'utils.c'\" \(2125 characters\) sed "s/^X//" >'utils.c' <<'END_OF_FILE' X/* Copyright 1985, 1986, 1987, 1988 Chris Lewis X All Rights Reserved X X Permission to copy and further distribute is freely given provided X this copyright notice remains intact and that this software is not X sold for profit. X X Project: Generic Troff drivers X Module: utils.c X Author: Chris Lewis X Specs: Utility functions X */ X X#include "defs.h" X X#ifndef SVR3 X#ifndef lint Xstatic char SCCSid[] = "@(#)utils.c: 1.7 Copyright 89/07/17 10:58:36 Chris Lewis"; X#endif X#else X#ident "@(#)utils.c: 1.7 Copyright 89/07/17 10:58:36 Chris Lewis" X#endif X X#ifdef DEBUG Xdebugprintf(fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Xchar *fmt; Xint a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; { X char buf[BUFSIZ]; X sprintf(buf, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); X fprintf(diagFile, buf); X} X#endif X Xchar *skipblanks(p) Xregister char *p; { X while (*p && isspace(*p)) p++; X return(p); X} X Xchar *gettok(p, bp) Xregister char *p, *bp; { X p = skipblanks(p); X while(*p && !isspace(*p)) *bp++ = *p++; X *bp = '\0'; X return(p); X} X Xinterp(buf, xlator, suffix) Xchar *buf, *suffix; FUNC xlator; { X register char *p, *ep; X char token[512]; X p = gettok(buf, token); X if (0 == strcmp(token, "include") || 0 == strcmp(token, "binclude")) { X int binary; X FILE *inc; X binary = (token[0] == 'b') ? 1: 0; X p = gettok(p, token); X strcat(token, suffix); X if (!(inc = fopen(token, "r"))) { X char nbuf[512]; X if (token[0] != '/') { X sprintf(nbuf, "%s/%s", LIBDIR, token); X inc = fopen(nbuf, "r"); X } X } X if (!inc) { X fprintf(stderr, "%s: cannot open file %s\n", progname, token); X exit(1); X } else { X if (binary || !xlator) X while ((binary = fread(token, 1, sizeof(token), inc)) > 0) X fwrite(token, 1, binary, stdout); X else X (*xlator)(inc); X fclose(inc); X } X } X X else { X fprintf(stderr, "%s: unknown directive: %s\n", progname, token); X exit(1); X } X} X Xchar nodename[25]; Xgetnodename() { X FILE *uuname; X int c; X if ((uuname = popen("uuname -l", "r")) == NULL) X strcpy(nodename, "<noname>"); X else { X fscanf(uuname, "%s", nodename); X pclose(uuname); X } X} END_OF_FILE if test 2125 -ne `wc -c <'utils.c'`; then echo shar: \"'utils.c'\" unpacked with wrong size! fi # end of 'utils.c' fi echo shar: End of archive 1 \(of 6\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 6 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 6 archives. echo "Read README to install psroff" rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net. Use a domain-based address or give alternate paths, or you may lose out.