[alt.sources] Psroff 2.0 Part 05 of 16

clewis@ecicrl.UUCP (Chris Lewis) (11/17/90)

Submitted-by: Chris Lewis <clewis@ecicrl.uucp>
Archive-name: psroff2.0/Part05

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then feed it
# into a shell via "sh file" or similar.  To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix@uunet.uu.net if you want that tool.
# Contents:  TROUBLE fonts.lj/S.28.pk.UU man/dumpft.1.S troff2.c
# Wrapped by clewis@ecicrl on Fri Nov 16 23:35:46 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
echo If this archive is complete, you will see the following message:
echo '          "shar: End of archive 5 (of 16)."'
if test -f 'TROUBLE' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'TROUBLE'\"
else
  echo shar: Extracting \"'TROUBLE'\" \(15761 characters\)
  sed "s/^X//" >'TROUBLE' <<'END_OF_FILE'
X		Psroff 2.0 Trouble Shooting.... 2.2 90/10/30
X
X		(psroff 1.0 users can use this to a certain extent)
X
XThese are some pointers to possible solutions to problems with psroff.
XAfter correcting a problem, you usually need to do:
X
X	make all
X	su root
X	make install
X	make installwidths
X
XThis is assuming that you got clean compiles (you should be able
Xto fix your own compile problems).
X
XIMPORTANT NOTE: MANY configuration difficulties can be detected
Xby "make check".  If you do encounter a problem, I suggest that
Xyou run "make check" first and correct any "ERROR"'s it reports
Xthat apply to the configuration (driver/printer) you wish to use.
XIf you encounter problems you cannot solve and wish to ask me for
Xhelp, I will want you to send me a copy of "make check"'s output....
X
XDefinitions:
X	- LIBDIR - default /usr/lib/troff2 (config option in Makefile)
X	  LJ drivers pick up font files from LIBDIR/lib/lj.
X	- FONTDIR - by default "/usr/lib/font" (config option in Makefile).
X	  Must be /usr/lib/font unless you have a '-F' troff, see
X	  "width option" below.
X	- "width tables".  psroff's install generates CAT compatible width
X	  tables and installs them into $FONTDIR/<widthname>/ft*, where
X	  "widthname" is a token denoting the "set" of widths.  Postscript
X	  printers (or ditroff driving postscript) use ps.  These are
X	  the only widths I distribute directly.  The Makefile will
X	  install widths into widthname "lj" if you have laserjet fonts
X	  installed in the right place.
X	- "width option", most troff's support a way of telling it where
X	  to look for the width tables.  Some support -T<widthname> (Xenix
X	  f'r instance).  Others (Sun specifically, probably other BSD
X	  derivitives) need "-F<directory>/<widthname>/ftXX".  Check your
X	  man pages for troff.  This is should be specified by "trofftype"
X	  in lib/psroff.lib.S.  If you have a "-T" version of troff,
X	  FONTDIR *must* be /usr/lib/font.  If your troff supports neither
X	  -T or -F (some real old versions of Xenix, V7 perchance), you
X	  will have to install the width tables in FONTDIR directly and
X	  specify trofftype as "".  Which will also mean that you can
X	  only support one set of width tables.  (Unless you make binary
X	  patches to your troff)
X	- "psroff debug" - rerun the psroff command, additionally specifying
X	  "-F" in the command line.  This permit's troff's stderr to be
X	  seen.  Correct any problems that it tells you about.  (eg:
X	  "width option").  If you see lines of the form:
X		M<string>
X	  These are back-end directives and they're supposed to be
X	  there during psroff debug - ignore them.
X	- HEADERSIZE: some troff's need an a.out.h header on the front
X	  of the width table files.  HEADERSIZE (defs.h) allows you to
X	  specify an arbitrary number of bytes on the front of the table
X	  in the width file.  Check /usr/lib/font/ftR (should be part
X	  of your original troff installation.  Is ftR 224 bytes long?
X	  If so, HEADERSIZE should be zero.  If not (eg: Ultrix, possibly
X	  older BSD's, some older Xenix, V7), you will have to specify
X	  HEADERSIZE.  Ultrix wants 32.  (should be the size of an
X	  a.out header structure - od -c may give you some hints).
X	  Another way to tell is to run "file" on /usr/lib/font/ftR.
X	  Does it say "data"?  Then it probably needs HEADERSIZE 0.
X	  If it says "executable" or "object" of some kind, you will
X	  have to set HEADERSIZE.  If you get it right, but troff
X	  is still going wierd, set HEADERSIZE 0, and set COMPILE on
X	  in the Makefile (for some reason your troff is expecting
X	  a *real* a.out.h header, but I've never seen a troff that
X	  really needs this, but this is a way of getting the size
X	  right without having to guess/write a program to find the
X	  a.out.h size.
X
XNOTE for PSROFF 1.0 users:
X
X    psroff 1.0 does not have a psroff.lib file, so changes (eg:
X    width option specifications) have to be made directly to
X    the psroff.sh shell script.  Further, in the library, many of
X    the files are reversed - eg: lj.lib in release 2.0 is lib.lj in 1.0.
X
X
XMost initial problems are due to width table installation/specification -
Xthis varies from system to system and is *very* confusing.  I'm sorry about
Xthat, but there's no other way.  As a simple guide: if the /usr/lib/font/ftR
Xfile in your original troff installation is not 224 bytes long, you *will*
Xhave to set HEADERSIZE or (remotely) COMPILE.
X
XAfter successful installation/testing, most problems are due to troff
Xerrors that you don't get to see.
X
XBuild/Execute gross failures:
X
XShell scripts die horrible deaths:
X
X    Particularly with error messages from "test".  Does your "test"
X    support -x?  If not, make sure that you've got SHELL and STARTSHELL
X    set properly in the Makefile (The shell scripts assume V7 and/or USG
X    versions of the Bourne Shell.  Older BSD and some BSD derivitives
X    (aka Ultrix) need a USG compatible shell - look for "sh5" somewhere
X    on your system).  ksh, bash and ash *should* work (untested).
X    Maybe one of these days I'll make the shell scripts work with
X    older shells/versions of test.
X
XThe makefile doesn't work:
X
X    This *assumes* System V compatible MAKE.  If the makefile blows
X    (syntax errors in particular), search your system for a System V
X    compatible version of make.  Ultrix: /usr/bin/s5make.  Gnumake should
X    work fine.  Most Suns need a change here too.
X
XOperational problems:
X
XNEW INSTALL: No output, or output truncated (possibly after some really
Xwild garble in the output):
X
X    Troff is probably exploding.  Run psroff debug - check in particular:
X    for troff error messages about bad -T or -F options ("trofftype" see
X    width tables and width option above) or not being able to find the
X    width tables (did they really install?).  If troff is core-dumping,
X    it's probably a HEADERSIZE (above) problem, but it's possibly a
X    problem with the width of a specific character (Xenix doesn't
X    like zero (or sometimes really narrow) characters - try
X    tests/dumpft < <width table file> > /tmp/FOO and look for errors
X    and really narrow (0 or 1 unit) characters.  Particularly \(ul/_/\(ru).
X
X    Other possibilities: bad output settings (ptr and lparg), bad
X    troff input.
X
XWORKING INSTALL (eg: it's worked fine before): same symptoms as previous.
X
X    Troff is probably exploding, but probably not due to width tables.
X    Run psroff debug.  Check for and correct troff error messages (eg:
X    line too long) in your document.  This could even be troff not being
X    able to find a file you specified to psroff.
X
XCharacter widths wildly and inconsistently off:
X
X    Probably HEADERSIZE.
X
XCharacter widths annoyingly, inconsistently, but not wildly off:
X
X    Remotely HEADERSIZE, more probably -T/-F trofftype omitted/wrong,
X    or the width tables are simply wrong for the specific font or printer
X    (you may want to experiment with the "width" option in lib/psroff.lib.S).
X    Use "ps" for postscript printers and some others.
X
XCharacter widths uniformly off with ditroff:
X
X    - "-R" wrong or omitted in psroff.lib.S t2arg.  Check DESC file
X      for proper value (default 300) and that the gfnttab log doesn't
X      complain about a missing resolution during width table build.
X    - DESC file has wrong resolution (default is 300).  Try adjusting.
X      The ps widths use 720 (in DESC file)
X    - width option.
X
XCharacter widths uniformly off with non-ditroff:
X
X    - wrong width tables - try using the right ones: check width option.
X    - scaling bug in pk2ditwid/dit2catwid/gfnttab: contact me.
X
XA very few characters have bad widths:
X
X    - manually adjust the widths/width<widthname>/* files and
X      cd utils; make widths; su root; make installwidths.
X
Xoutput wacko with psfig, pic or grap (eg: overstrikes etc.):
X
X    psroff doesn't work with pic, grap or psfig.  Buy ditroff and throw
X    psroff in the garbage.  (There may eventually be support for pic,
X    grap and psfig, but don't rely on it).  I have some stuff to allow
X    limited psfig functionality with psroff, but I decided not to release
X    it at this point.  Ask me if you *really* need it - '.sR "I..."'
X    and '.sR "P...."' can more than replace psfig with the addition
X    of some difficulty of use.
X
Xoutput wacko during a table (output possibly truncated):
X
X    run psroff debug - probably line too long (table too wide).
X
Xoutput looks pretty good, but wierd things happen in spots:
X
X    are you using ditroff features that CAT troff doesn't support?
X    Eg: \X, \D, .sy, some "odd" permutations of \f, .ft, .fp?   Font
X    numbers > 4?  CAT Troff (and hence psroff) doesn't support them.
X    (CAT Troff does not work with pic or grap either)
X
XLooks good, but every second line has overstrikes at the end, the alternate
Xlines are indented:
X
X    ".po" + ".ll" setting too high (CAT troff imposes 7.54" limit on total).
X    Reduce ".po" and compensate with "-O" option to psroff.  I've had
X    some rumors of *some* kinds of Xenix troff having a shorter maximum
X    width.
X
XRight shifted when compared to ditroff/nroff/cat troff with packages
Xother than psroff:
X
X    See -O option and macro adapter description for psroff.
X
XUtter garbage output:
X
X    Are you specifying the right driver?
X
XMM ".MT" macro doesn't appear to work properly:
X
X    If you use a special directive (".sR" or ".fp" as modified by
X    the adapter macros) before ".MT", .MT will get buggered up.
X    Sorry, no workaround (though most requests other than ".fp"
X    can be issued by psroff -P options).  This isn't really a bug -
X    a limitation of CAT troff's ability to pass additional directives
X    to the backend without interfering with the typesetter state.
X    Maybe one of these days I'll get around to figuring out a better
X    mechanism.
X
XPage headers wrong or present on the first page when they shouldn't be:
X
X    See previous (replace ".MT" with page header macros in discussion).
X
Xline lengths a bit different from nroff/ditroff/other non-psroff CAT troff:
X
X    See macro adapter discussion in psroff/troff2ps man pages.
X
X".sR" doesn't appear to work at all:
X
X    Run psroff debug - do you see lines of the form "M<sR macro argument>"?
X    If not, you probably didn't get the macro adapters properly initialized.
X    psroff as distributed has adapters for MS, MM and MAN.  If you're
X    using different ones, or invoking the macros by /usr/lib/tmac paths,
X    or using no macros at all, the adapters and .sR definition won't be
X    picked up.  You will have to hand-craft your own macro adapter using
X    common.pre and common.post, using one of the example tmac's.
X    (all in adapters/* in distribution or LIBDIR/adapters after install)
X
X".sR" causes breaks/font loads don't happen at the right time:
X
X    It has to unfortunately.  If you want to load fonts (.fp) during a line,
X    *don't*.  Issue the ".fp"'s where it's safe to have a break.  Ditto
X    other ".sR" directives.  There's no restrictions on changing to
X    an *already loaded* font (eg: .ft directives).  The psroff -P option
X    may help (not .fp's, sorry...)
X
XSome things appear really wierd (eg: strings of character repeats
Xin page number on MM headers):
X
X    Your CAT troff may not support \g (pure V7 troffs f'r instance).
X    Experiment.  You may have to bugger around with the macros to
X    remove dependence on \g.  (which is supposed to return a code
X    denoting the output format of a number register, and is usually
X    used to determine whether a number register has ever been set)
X
XME macros don't seem to work:
X
X    A friend noted:
X
X    In order to make them useable, I had to modify them somewhat.  The
X    problem was with the following syntax:
X
X	.if t \
X	\{
X	.	zz
X	.\}
X
X    Our (Xenix) troff required the following instead:
X
X	.if t \{\
X	.	zz
X	.\}
X
X    This was required for all occurances of "\{".  It seems "\{" MUST
X    terminate a line, and MUST be followed by a "\<NEWLINE>".  Even a ".\{"
X    didn't help any.
X
XEverything okay, but some characters missing (or wrong) on output:
X(ditroff drivers may complain about characters not found)
X
X    Chances are that your printer or set of fonts doesn't support
X    that character.  Postscript driving should be perfect.  Some
X    ditroff drivers don't have character sets that are a superset
X    of CAT troff.  There are a few minor problems with LJ character
X    sets.  psdit, xproof, xtroff are missing a few CAT characters.
X    You may be able to resolve these by adding translation overrides
X    to the appropriate *.fonts file (see jt.fonts for examples).
X    Some ditroff's have different meanings for the same character
X    spec.  ("@" in some ditroff drivers is a different character)
X
XMy ditroff driver dies with errors about lines starting with "#":
X
X    define NOCHATTER.
X
XMy postscript printer server gets upset:
X
X    define NOCHATTER
X
XI get postscript printer errors on last page, or last page missing:
X
X    Have you got a DEC LN03 or some other printer that doesn't
X    like trailing control-D's?  Define "NOCONTROLD" in defs.h
X
XDitroff driver doesn't work/gives errors:
X
X    check, recheck, and check again for ditroff backend config
X    (lparg/ptr in psroff.lib.S).  Try "psroff -t" and then
X    hand feeding the stdout to your backend manually.  Experiment
X    with "-d" setting in t2arg in psroff.lib.S.  If related
X    to specific characters, maybe adding translation overrides
X    in the appropriate *.fonts file will help
X
XLaserjet printers get confused and loses settings (eg: copy count etc)
X
X    Be aware of the fact that lj.lib has a RESET command.  If you
X    have some sort of spooler that's emitting commands to the printer
X    outside of the control of psroff (eg: copy count set before
X    psroff output), you may have to change it.
X
XLaserjet: wrong font selection (particularly when the result is
X10 point Courier), troff2ps compaining that it can't find a font
Xfile:
X
X    - lj.fonts incorrect.
X    - Don't have any good font files - buy some good ROMAN8's for
X      Roman, Italic and Bold, or use TeX fonts and "make buildljfonts".
X
XLaserjet: lousey/wrong/missing characters (non-S font):
X
X    - You got crummy fonts.  Go buy or steal some good ROMAN8's in Roman,
X      Italic and Bold at CAT troff's supported point sizes.
X      TeX's PK fonts will work, but non-alphanumeric characters will
X      often be wrong (particularly box drawing and backslash)
X    - Get a Pacific Page or HP Postscript cartridge.
X
XMy laserjet stalls, gives "too complex" messages, doesn't switch fonts
Xsometimes:
X
X    - Some HPLJ clones don't support incremental downloading.  undefine
X      INCR and try again.  Plain laserjets (the old ones) don't support
X      font downloading at all.  Sigh...
X    - Ran out of memory - (INCR on): simplify document to use less fonts
X      or reduce MDLF.
X    - Ran out of memory - (INCR and PARTIAL off): turn on PARTIAL
X    - Too many fonts previously loaded - adjust PRELOAD.
X    - double check MDLF.
X
XManual pages look great except the page footers are at the top of the
Xnext page.  MM and MS work fine.
X
X    - You're IBM AIX right?  Sigh....  The man macros in AIX explicitly
X      set page length to something other than 11 inches.  Supply
X      "-rM1" to psroff, and the macros will select 11 inches.  Or,
X      you could insert a ".nr M 1" the beginning of adapters/tmac.an.
X
XSQTroff ditroff backend sometimes barfs on psroff ditroff output:
X
X    It do do that don't it?  SQTroff ditroff format is apparently
X    slightly different.  Then again, if you got SQTroff, why you have
X    psroff?
X
Xxproof sometimes dies with "too many font" messages:
X
X    - AT&T's fault.  (Each symbol character is a separate font, xproof
X      is configured for a maximum of 50 or so fonts... duh...)
X
XThe Bell Symbol (\(bs) isn't:
X
X    It ain't supposed to be.
X
XPsroff is wonderful:
X
X    Thank you!
END_OF_FILE
  if test 15761 -ne `wc -c <'TROUBLE'`; then
    echo shar: \"'TROUBLE'\" unpacked with wrong size!
  fi
  # end of 'TROUBLE'
fi
if test -f 'fonts.lj/S.28.pk.UU' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fonts.lj/S.28.pk.UU'\"
else
  echo shar: Extracting \"'fonts.lj/S.28.pk.UU'\" \(17561 characters\)
  sed "s/^X//" >'fonts.lj/S.28.pk.UU' <<'END_OF_FILE'
Xtable
X !"#$%&'()*+,-./0123456789:;<=>?
X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
Xbegin 644 fonts.lj/S.28.pk
XM]UD``<``````````!":N``0FKH#Q(0```%I3=/=6URU_3575357535753575
XM]-5=5-5=5-5=5-5=7TU5U4U5U4U5U4U5U4U5U?3575357535753575]-5=5-
XM5=5-5=5-5=7TU5U4U5U4U5U4U5U4JBL4J3L%IVKTIWKEIHKDIB)JQ:0S:L2D
XM-6JEHS9JI*UJI*YJA:YJA+!J9;!J9+%J5;)J1+-J-;3VHDM6H5MFH$MVGUN&
XMGDN6G5NFG$NVFUNVFTO6F5O6F4OVF$OVEUOVETP6E5P6E4PVDUPVDTQ&DEQ?
XM:13':%QVA,AG7)9DRF5<MD3,8US?8DSF%<_Y'1^-)]1M1=9-8[JA"R0```"-
XM>#3V,KJQW+'*N=2XQ;[.O<'"RL&]Q\7%NLG"M8L+C,O[*UBVLGNKRQNGM*M+
XMBYL+YK*;BWMZP6L(O+:UG$:7O[:SG&:&PK6QC)5VQ+6HRU9<>TB,U%7)M&C.
XM5%RK1(T$-<RT*-%27-O--"3/NM1"30N-5!71M]6=.UUXT[38C4M->-6TUHUK
XM35C7M-2-BTTXU[73G5M]%135N-!"34NL]"33O,U271@K3,4TT(2TRE1<Z&M,
XME53-B+3'5ERXJUQ&=<F+&UPFAL:;.VOWEL2;6VO(L&P:M[>XFR:^L+FXM*M'
XMNK&\NGLK:+6RO\RXL(M<+)NL7%Q[W!RL+!O<Z^Q;C4N<JQW+&Z"`0B4```!L
XM6DSV0K,MR->3U/E=+BE]#YG0XI?2^5U)/7C<(`7>WQ`!'QWP!=XMR->3U/E=
XM+BE]#YG0XI?2^5U)/7C<*S"PW"8```!O6C3V,L>P%JQ,;>PL'+V<7`SM7'K2
XMT<F=7.P,:WQ<N\B<'$R*R8Q</&G*?)PL2,QLS!PHS&SL'`C,;1P*?.73P(?.
XM75MWSUUK5]!-BT?/78P"?03:Q]%-O%T5W,317=PM)-[!TTW\#30!"]/T`1O2
XM0!*]%`$L#00!+!ST`1PL]=_$STW\7.3>Q\U=QRP,U-MTO-3;=;S%V7>\Q==X
XMP,M=9ZP,M=.,#!RET8PL');/C$PLALR<;#QVR:R,3&?%O+Q<2;P,[+K2T<G`
XMSM7'P<O9Q</&WL/'H!:PH+$J````;T!"Z3TCW#%MFRU[35MM.1G1DYSY6<V7
XMG+F9R9L)QYLIQ9M)PYMIP9N)OYNIO9O(O8OHNXP(N8PHMXPYM9Q)LYQIL9R)
XMJ<J8G,EISI2="2G2M]2UUK/8L=KZVK'8L]:UU+?2DIT)2<Z6G,F)RIJ<B;&<
XM:;.<2;6<.+>,*+F,"+N+Z+V+R;V;J;^;B<&;:<.;2<6;*<>;"<F9G+EYS96<
XM^3G1D9T[;5M->RV6(]PQ@`XM````;U(&\A\=<0_QUQ"@7SP```!0/3KW.=\M
XMY=M]F=>=>=>=:M:M:M:M:=>=>=:M:M:M:M:=>=:M:M:M:M:=>=>=>=CXVYVY
XMVYVYVZVJVJVJVYVYVZVJVJVJVYVYVYVZVJVJVJVYVYVYVYVWW5WR$*!?/0``
XM`%`].O<Y$M]=U]N=N=N=N=NMJMJMJMN=N=N=NMJMJMJMN=N=NMJMJMJMN=N=
XMN=N=OXV)UYUYUYUJUJUJUJUIUYUJUJUJUJUIUYUYUJUJUJUJUIUYUYUYV7VU
XMWBWPN$5#````5T=/^$[B`G3P*,'"S\7"P-3!P[UZP[V)P[VGP_O;?"O<;"XK
XMW5PKWDPOO>7!Y+WTP>*P$$X!#`L!_!`=Q`$>3:U0<-!$````=&)1]U"F;3^`
XMT8+/^$S?ALOXC)BL?V&%Q6.%Q%6$PV6%P?9X6_:!A;Y8.$O6@X6[]H6%N6AX
XM6X:(A+=HF%MEBX2U:+A;/VC86Q:/A;!9&$KVD86M]I.%JVE86J67A*EI>%J%
XMF82G:9A:7VFX6C:=A:)9^$H6GX6?]J&%G6HX6<6EA)MJ6%F?:GA9=JF%EFJH
XM25:KA91:V$DVK861]J^%CVL86.6SA(UK.%B_:UA8EK>%B%N82':YA89;N$A6
XMNX6#]KV%@?TGU%_6/]@0SK#>2````&Q:4?=/VL("O,`BU`'-@!?#P,,!+!R,
XM'?O.O<O2O9K6K6O8O3K<K1K>K/H!"LV@$JRZ`4K)H!:L>@&*Q;`8O#L!J\*@
XM'*P;`<N_L!ZY^P(+?``@P&L"*U_``BP$L"2SP`),`N+`=-Y'P"N$WDBQZ<"`
XM%HS/A-Y(P!N$WDBRP'3>1\`OP`),`_L"2TP`(L!?L"*W^P(+G[`>N_L!R\&P
XM&KPZ`:K%H!BL:P%KQ[`4O)L!*\NP$+S;WKT*W*T[V+U;UKV+TKV\#.P-[!R,
XM$!+#P,,!?8`<U`(LP"O"VI#G2P```&!24?E0O4`38!'BC?^@W>*BV^*DV?IM
XM>HUE&BUE*AU6*BU%.BTV2BTE6BTE:AT6:BT%>BT%BASVBBSEFBS6H*+,6AHL
XMQ:*ARVHJ+*6CHLI:2AR?6EHL=J:BQEIZ+&6HH<5JBBQ%J:+#:JHL):NBPEK*
XM'!:LHL!:VBP%KJ&_:NHKY:^BO6L**\6QHKQ;*ANVLJ*Z6SHKEK2BN%M:*X6V
XMH;=K:BMEMZ*V6XH;5KBBM%N:*S:ZHK);NBLEO*&Q:\HK!;VBL%OJ&O];^BK6
XMP**K?`HJN,"AJIOZ.GH[VDHZBYJ'Y+"NMI`N3@```%U-3OA-'H`1)==1XEV9
XMY=M``COE3!2PZ,FPY4P4`"U>5-N>/946U6+H`1&X)%````!H6$_X3@`9RL'>
XMP<G`WL#+X"2]Z\O!W,')P]K#KDU\;7"`T5(```!E4T_W3AU4_63]=):PGEEK
XM:7:6N)1Y6ZDGEKN0B6NY"):[B0EKJ)&5NWDI6[:2EKII.6NEE):Y:4EKE965
XMN5E9:Y26EKA)>6MTF):V29E;=)F5MDF9:U2:ELR6S);,E<R6S);,ELR6S)7-
XME<R6S);,E<V4SI+/D=&-&-&-&-&-&-&-&-&+9)Z+=)V+A)R+A)R+E)N+I)J+
XMM)F+M9B+Q9>+QI:+U9:+UI6+YI2+YY.+]Y*+^)&+^0D(OY"0B^DHB]E'B[EV
XMBUGEU4UCXM9=5+!N4P```#@R/_DRT,/2S,O1Q]3#PJO"O%?!K+/`G<C=C=?>
XM?>?>?>]][WWN)][DC>^=VMR]R]O!V</8Q-?%UL;5Q]3(T\K1R]'+T<O1RM+)
XMT\C5QM;$V,/9P=N]WYWHWO??;???;457U<36P]C!W(QPL()4````;%I0]T_"
XMD!"<W$V</(R-3(Q,S1R\'.SLZ]#,T)TLK2?4R-1=;&UDU\37.L'"P\+`HHQ<
XM'!P,6";)O`O)86R[NLN\VJK-K.J9SJSZ><^M"7C043TH:=$]CX6`*O@X`L<W
XM`M<H`M@7`O]Q<"_"`QX\$#'``S[:L#+!`OQ0(>3=S,"Q50```&533_=.V.0!
XML"K3`XP#OIH#C6`M`2`C`:`<`@`7TSI-,!+1BIT=W0NLT-J]&M*]?-*M/-2]
XM2M6]'-6M;+S6K7R<UZV,?\V*V<7-FMK#_0V:VM`LVJV\'FT-JMO0'-JMO"_0
XMV:VM`\V:VL7\V*V<?->MC)S6K7R\U:ULT;U*U;U,TJT\U[T:TKVM"ZS0W=&*
XMG1`2TSI-,!<"`!P!H",!("W6`WZ:`[P#C3`JY`&]D+"K5P```&Q:3_=.S>3<
XM`BQ`,,`#/HK=K1K1H<'/K/T,VLW#'#S*S,-<'+K+P:P,JLK`P;RJRKP_O)K)
XMO%K)K)K&^\BLB\?HK(K(K(O'K'O)XZQZQZRKQJQKRZQJQJS+Q:Q;S?K%K%K/
XMK$K$K0O#K#O1K#K#K3K"K"K5K!K!K7K`K`K9JZNMNYJ;W<!Z?``0P%I<`!/#
XM&APP%MH!O4`AS@*<0#'IH#/``PQ`(N3<S:#J6````&554/A/Q[8!/"VLC4SL
XMZWL+?)M+JTQK+`LL.RQ+*_LLBRO++*LKJQSK&WLM"RM++2LK+[+4LK"RUK*;
XM+8LGL]BS:RVK);/:LT^RW+(_L]RS+GLMZR*SW+,^*RW+)+/:LU^RVK)_LMBR
XMFQV+&K+6LK"QUK&R^QU+&TL=*QMOL-*PN+#0L+JM"KRLZKZ<Z;^LRL"<R<*<
XMJ<2,J,;XR(R(QHMTM'QGM(M7Q'M4%+1\1[1"2U;$:U0O2V;":V0DMUPEMT-+
XM9L!K9$2W7`6W1%MEP%ME1K5<!;5DP;[!7DP+[`?[^^OXOL"^0'C260```'=D
XM4?=.!P':/]A?UGU(']*#^%O6A86[:'A+M8B%N6B82Y6*A;=HOX6U:-A;-H^$
XMLUD(6Q:1^%KVDX6M:5A*U9:%JVEX2J:8A:EIGX6G:;A:5IV$I5GH6C:?^%H6
XMH86?:CA)]:2%G6I?A9MJ>%F6J8296JA9=JN$EUK(65:M^%DVKX61:QA)%;*%
XMCVL_A8UK6%BVMX2+6XA8EKF$B&NH6':[^%A6O86#:_A(-<"%@6P?A7;#A5;%
XMA%7&A3;'^%%LF*R_B,WX;/^$T8+3^`U6I[#=6@```$Q#4O=0T\$!;)`0S=S1
XMV+K`U8Q:TWR:T&S9SFSYS%TIRTU)R5U8R)TIQ_K2G%^].<3[U)PZU:PXUJPW
XMUZ`=YKURQ[SL7!O+RKO)SIO'T8O%P,%VP,2\5EP,*\E4P,&LQ3P+O.0L&JT4
XM'`JM)!P)O3Q(O4Q'O6PG^]?":]C"7\#8P5P-G!7`V<!<'9P%P-JV_`V<!<'9
XMML#9P&_`V;?`V+B]FXO8N;V*J]>ZO7J_O6K!K5K"K4K#O2K%K1K'K/K)G.K*
XMK+O,K)O.O$P-'!K"U-77TMO.W\D!;!V`@*Q<````;U)J\E#433?0D,Z2S)3*
XME<F4RI3*E,J4RI3*E,F5R97)E<F5R97)E<F4RI3*E,J4RI3*E,F5R97)E<F5
XMR97)E<F4RI3*E,J4RI3*E,J4RI3+D\V1SY/-E<V5SI3.E,Z4SI3.E,Z4SI7-
XME<V5S97-E<V5SI3.E,Z4SI3.E,Z4SI7-E<V5S97-E<V5SI3.E,Z4SI3.E,Z4
XMSI3.E,Z2T)#2?40`9TU2#_'7$("K7@```&]2:O)0%-1]*0T)+.E,V5SI3.E,
XMZ4SI3.E,Z4SI7-E<V5S97-E<V5SI3.E,Z4SI3.E,Z4SI7-E<V5S97-E<V5SI
XM3.E,Z4SI3.E,Z4SI3.E<V3SY'-D\N5R97)E,J4RI3*E,J4RI3)E<F5R97)E<
XMF5R97)E,J4RI3*E,J4RI3)E<F5R97)E<F5R97)E,J4RI3*E,J4RI3*E,J4S)
XM+.D-!]-`!L#5(/\=<:@*7P```#HZ!0#E#W"PN&$```!=2C3W,M"P'\<!C,`4
XMT`$,%[WKP9RCPKQ*QTP:QZQDP)RIQ5JLR<1*K.G#2:SYPECZT9P4BM*K5ZU)
XMM'O4FE>M6I1[U:A7K7F$>]>75[UY='O8EE>]B56+V)5(P-BC6+V:)9O9HDJ]
XMFA6KV<.ZVL+`K;P,&MN\+ZVZP^*MN<6=JL6=F\6M;"Q9U</&G2<9QIT(*;1)
XMS86959R::91ZQ+F(6+K!P(1[TL/%P<['P\7(R\')P--XL1AB````44EG^E`!
XM3``>Q@&,L!3.`1N+W9PYVXQXV(R8UWS(U6SXTVT(TETHT5TYSUU)SEU9S5UI
XMS%UYS$V)RUUZREV)RTV9REV9RDV:R5V9RDV:R5V9RDV9REV9RDV9RTV)RUUY
XMS%Q,))S4P]#.3"S\]<'/T$PL_03#S\],3/S5Q<))S$V9R_3:G)7;G(3<G(]-
XMRL9=RL9-VL;TW;Q%W;Q.)-Z\-=W`P^)-Z\-=W`PUW;Q$WKQ$W<##7=O$;<O$
XM;;O%;;K%?:O%C9K&C8K'C7K'K6G(0EU*R$)M*LE#;0G*5&S:RT9\JLQ'C&O-
XM2*P,#.6=/03`S]),++U$Q<767-'>XD`H4"CB0"A0*.)`*%`HXD`H4"CB0"DP
XM*I"78P```$M%2OHRJJ#.I;@Z2JM4HZRS6AL+%*&RKUFUKDFVK5BXJUBF6EJD
XMFAI**H6)JIJ$B*Z*97>Q>F2&LWI%=K5J1(6W:B5UN5HDA;I*%82[6@24O$E9
XM.]6$RE=<M'3,1ES%5,Y$7.]$3/0USU)-%!7104TITN*-/B?4]M7B76]-;B75
XM;5]=7C;4XVU.-M3C;575]M9-<[&PQ60```!!-5/X4-6MS$U\C4RM&GC/C!;-
XM?%7+?'7)?(7(?*3(?++(<!&`$7`1Y(`1D!"M^][`W<+;P]O$VL3:Q=G%V<7:
XMQ-K$ULC3R]#.SK/"RZ?"R:K`R)P<#%K#O$K%K#K'K"G)G!K*C`K,>ZS7J\YJ
XMK/:;SVFM!H^]%7O25_O19L#15_O25[T6>]%7O25[T6>]%8O0:?K06JSUNLYK
XMK.7!G-;!G-7#G+7$G*;%G(;'C';(G%;*K!?,N8S\W1RM7&VL$!,=(+!-90``
XM`#PK,_<QS\/,R,C+QLW$SL/"S\'1P-*].M2M2M2M2]/[T_O3^]/CV5V'YKU>
XM.M;YUJUIU_G7G.&)RTBL=IK#F[F\'0Q<S)Q]#`P`H*!F````0CAH^%#'';/:
XM3878Y$V5V4*RRKO'O,6]P[_!P,&"ML"&L<*-1]5]5]1]5]5]5]5]9M9M9M9]
XM5]5]9M9]7WU7U??5]]7WU8U??5C5XGU8U>-]7EC5XIU?G4K3L-.M.QTK'1L]
XM"TSK?,N<J\Q[[%P</"P</!PL+!Q+_'O,FYS;;/L]*PU)U>*-9]9M;WQ$LVQ6
XML&QJ9LBYR[;.L]*;@,#!9P```$H_2ODRJ-N];-74TM'2U]#3S;I4F:>H5X>,
XMEEB5?2ADF4;4E%J2;6A$N178@UO1V9),T-J22]#;D5O0VY%,S<D4R]V13+W-
XM'+W9(\K>G4K>G4G>K3K>K3^=^=2=ZM.MZM/YWYU)WJTZWJT_G?G4G>K3K>K3
XM^=^=2=ZM.MZM/YWYU)WJTZWJT_G?G4G>K3K>K3^=^=2=ZM2-^M1P$)UT`1D"
XMCZ`H^0*/H"CY`H^@*/D"CZ`H^0*/H"CY`J<"Q-2PO6@```!$-5+W4-2-["V<
XM77Q]2DC2B7T(M\Z,",N<)\J<.,F,5\B,:,:,>,6<><.<B<+YRHP9RXP*RYN<
XMR:K,FIS9FLV?BLVGO-IZSJ]KSJ:L^O6\Z_2\^TO.M,#.M/O/M`%3XP%3`53[
XMS[2\[`2\ZT^\^T^\ZUK/IOK.MJSJ>LVW^LVHG-J9S9J<RJG,FYRZP(RYP?C*
XMG"G(G#G'G%C'C&C&C(?%C)C#G*?"G+C`C.>XT'F-*$K4Q]?%V<+>C4"P5VD`
XM```V(S3U,L)-%\_YS?K-^<VLWBG-K-XIS:S>*<VLWYS:S?G-K-^<VLWYS:S?
XMG(0:R$&<C#R$&<A1G(0IQU*,=3C&5(Q&6,-FC!>(J)E;O*PL?&P\J<>PKVH`
XM``!4033U,L)`'WTWQYS[QIS,/$K*Q<2LC'Q)R(&\2<:#O#K%=:Q*PW>L2<-Y
XMC%G!?`7&K`?8JVVII]N9;<IWW:5]^4@!"2@!''`2R0$-'8U-38T:C'T)P\+/
XMG'O-K)K,K*K+G,G+G,K)K-G)K-G"3SG.G"0JS:P5*LVL%#G.G"0YSIP5*LZ<
XM%#K.G`4YSYP$2<^;4ZT(M$K0F52=*'99TX5FG4Q7C6PX?8P;3<BPL+EK````
XM54)1]D_"D!S"`8Q`%\0!G"`;P`&[`<^P'/L!S[`<^P'/L!R@'+`<H!S[`<^P
XM'/L!R@'+`<H!S[`<^P'/L!R@'+`<H!S[`<^P'+`:P`&<$!C#`5Q0%'&P$G*P
XM$72]]UO>=[VXB]J*K9B[UXP:UHPKU(Q*TXQ;T)QKSYR+S9R;S)RZRYS+R9SJ
XMR)S[Q:T:Q*TKPKTKP;U+N]6ZO7M\#8ML#:I<#;M+W:.]ZRH!"QD!'`%P$[)0
XM%I#`L6P```!71TKX,M=`-'`27>D!!]V=^-RM^-RMZ=SYWYV_K>K;^=^=OZWJ
XMV_G?G;^MZMOYWYV_K>K;^=^=OZWJV_G?G;^MZMOYWYVZWJVZWJM/F=^<2*WJ
XMM8K>JTFMVL2:W+Q(O<NTG-K+2<V="EG-C1I)T=5AF5G2TV.)2M/0=)=:UGEI
XM1J`5G4NAV;TLE-72S0F+UXT?H##Y`P^@,/D##Z`P^0,/H##Y`P^@,/D#)P-$
XM`T"PEFT```!(/3/V,KK61,?4<_Q].1R-*BQ]*:O3G`G3FZTJNM*<"=.<"=*<
XM"M*<"M&L"=*<&=&L"M&<&M"<*=&<*="<*L^L*L^<.<^<2<Z<2LVL2LV<6<V<
XM:<R<:LN<>LJ<B<J<F<F<FLB<JL><N<><R<6LRL2<ZL.<^<*M"<"M&KK2J:U)
XMBM:5O7H[V<K;R-W%W\,!+``6<!F@MVX```!"-VC[4,8=H]E-==?D3878N,>]
XMP<&^P[S%NL:YLDMKFQBQN['/L<^PT+#0L<^QT+#0L="PT+'0XK#0L=#BL-+B
XML-&QT;#2L-*P6TOL6]Q;W$OL.]P[S$O(6VO(TXTXTWU'U/?4?4]]3WU/?4C4
XMXGU(U/G3K3K2L-&RT+/.MLRXRKK(O,:^Q,##P<'#P</!PL+`Q+[&O,BYR[;.
XMM-"QTYU(U.)\%;-\)[%L.P:,2\Q[G+M-&;2P@6\```!'.#3W,M"]W'ULS2T,
XM[!>\R\&<F\2<>LB,6<J<*LR<"LVJK/F?K0IZTI:M.5O3I*U*.]2CK4ORO4OQ
XMO5L;U,S4L?O5L;U,`;U+*M6R^M2SK4I*T[2M.E^M*GG1J)T*FLZKG-K!G+K"
XMG*K$G(K&G%K)K!O+N,#/S]+,U\;=O1"@E7````!41S/Y,;7;L]^Q`0H!*0$X
XM`4<!1P%'JQ6R6^BT2S2^>V2S2]:W6S2]6X6R6\6Y2S6[6Y6S6[2Z6S6[.[6R
XM74XELUTVLUTUM%TULVTO:S;1XFM&T'M&T&M7SO>U?-][6,R+6<N+:,M[>,J+
XM>,J+><B+B<B+BL:;BL:;BPQ)NJQ)NK#"JZL,+YO*PHOHPWOWQDP5N<"O<0``
XM`$H\2O@R`7H"'4`<V`&-L!:FL!*KD!"=&=Z-2-V-6=N->=F-B=B-J=:-N=6=
XMN=2=RM.-VM*=VOT9WJT)WZ_0G>O\G?O)WLNMZ\^=^[K>RZWKSYW[OZWKR=Z]
XM"=ZM"MV]"MVM&=VM*MRM&]NM*]JM/-BM30UJU-'5K5T]*=>2;*V).&S8I-K:
XMI=?<F-+?FJ`1^@)?D"7Z`E^0)?H"7Y`E^@)?D"7Z`E^0)W`I0"F@CW(```!3
XM13/X,<#.OM*ZU;C7MMFUVK/;L]NSM)LL2QM;#"L+BPP*NZOZO9OJOYO*P)O)
XMP9NYPXNJPYN9Q)N*Q)N)Q9MZQ9MYQIMYQ:MJQ9M_G&FWG%JVK%FW^<:;?YQ9
XMN/G$FYG#F[C#B\C"F\C!F^B_F_B_C!>]G"B[G$BYG&BVG)FRK+J+'-P-&\U;
XM?;L-`*!2<P```$-`,_DQM=2SV+'9K;G<C=?=?=>K1<:+=<5[E<1KM<1;M<1;
XMQ<-;U<-+UL,[YM]M[B;>]][VWN)]WB?=^-U]WBC<^=SXW.*=OCG<C=??7,"P
XMKW0```!00C3Y,L*-A<+!U(P,/2JL71J72,_`=8C.P&68SL!5J<W`1;G-P$3`
XMG.LUP)SZ)<&="23!K1@DP9TW%<&=-Q3!K484P9U;P*U5(\&=9<:==,6M9<7Y
XMUTQ:UTQ9UUQ*UTQ9V$Q9UUQ9UTQ:UEQ9UTQIUEQIUDQYU5QIUDQYU5QYU%R)
XMU$RHTURIT5RYT%S)SUSIS5SYS%T9R6TYQVU:PWU\&)V<_=S`$,@!?`S@D0-U
XM````5D5G]D_$/7]=;TUO76]-;UUO36]=;TUO76]-;UUO36]=;TSZG$L+ZVN+
XMNTHU5J&QHH6:"NH*%**:N@HTHYJ9I%I8IYI5IHI)ITIXHYJ$J(H9J%J)F:E:
XMF(FJ2JEIJTJX::I:N%FK6KDZ"K2LDYK$K)\IK%K)&@K$K9&:U*V1FL6LJJQ:
XMR1^:U*V1FL6LH!FL6LDIK$K9**U*R3BL6LDYJUJY2:M*N@2:M*N5FJ6JEXJE
XMJ9B:E*F:"*E*B:&:=:>:.*=:::6*9*::>*5*2@J8HUHJ"LFA6@H:Z@E)H;&B
XM9%H[6ZN;:]L<2ISO76]-;UUO36]=;TUO76]-;UUN)-<\,+#L=@```%E)2O@R
XMB@(<,!4FQ@$D3)WU-DP=U36,#;4UJ]I42\#854P,#65CPKU5S,#37.O270O0
XM71O/73O-74O,76O*77O)79O'7;K&7<O$7>K#7?O!4!"\!0$KI0$[E0%:A0%K
XM5@&*1@&;)@&Z%@',0!W#`?P0(,`"*@(_L".@(L`"#!`?PP'<0!QAH!MBL!ED
XMH!AEL!98H!59L!-:L!)<"P$%P;WUPZWEQ+W%QJVUQ[V5R;UURKUES+U%S;TU
XMS[T5T+T%TKSET\#,75O"-EUL#`15V,"T1=JZ4UV\"%-=W!1C7?R40!+&8@%<
XM,"&HP3)W````7U%G^4\"PP0.)`/U`_XD`_4#_B0#]0/^)`/U`_XD`_4#_B0#
XM]0/^)`/U`<C>3771T-Q-6,TMM-2JU-E=2I=(V$U,=8C734QEF-=-3%6IU5U,
XM1;G535Q$R=5-:S7)U4UZ)="=1=B230K43:@DT)U4VW%="=5-MQ30K47<84T)
XMU4W;RM5-U2/0G63=75G57>34K53>74^=9-Y-2M5=Y-2=9-Y=.M9-Y-2==-Y-
XM2=9=U=2=9-Y-2M9-U=2==-Q=6=9=Q=6=9-Q=;YUDVUUYU5VEV)U4VEV9U4V5
XMVIU4V%VYU%UUW9TTUFWITTU6`0G233<!*=!=)P$[M-%P%LE,@!G'2:`;TQ5<
XM`?`6`C`2`HW`,=(#CB0#]0/^)`/U`_XD`_4#_B0#]0/^)`/U`_0$$P(0H,IX
XM````6DTT^C(!I;0]F+-->K%=>K!=>QE=BQE-FQA=FQ==JQ=-RP9=VE7?E4`1
XMA%`2=$`3<U`48T`58TQ#PU-<-<)33#?!4TPHP5)<*,%#3#C!0TPIP4-,*,%2
XM7"C!0TPXP4-,*,%33"C!1$PHP%1,)\%43"?`55P6P&5<%K]F7`;`9FOGOV=K
XMV;UH>[J[B'NK&YB8M[.WFPBUM;2PL*L+JPL;&S.T&Q2TL\,L.TPDP;;`7`M[
XM][ZYO8O+RZL+J^N+*WPK.WL\:KN;\-`.>0```!T$=/16$A`!RA(0L$=Z````
XM-"-T^%;1;-K+C.;/;0;0;0]M#VT.UVT/;0]M!M!M!M!L]LY\SXTWTVTVTFTF
XMTFTO;2]M+M=M+VTO;2;2;2;3;2C1K1:X27L````T(W3X5GT*TGTGTGTFTFTO
XM;2]M+M=M+VTETFTFTETUTVTUTWT_C,?/70;07171;0;171]M#M=M#VT/;0;0
XM;/?.?.?+K-?0H(%\````;UH[]CFWH!`K6UW$LKK92POM=)P=9(Q-1'QM-&R=
XM!5LXM<]5L+.SSE2KBRRU2;RQRE1[^QR&-\*PQF1L2QQ&1L:PPG-LBQOW1<JQ
XMO)1<RQN*1<ZSL[!5S[6+-5T,EDT\9TU,2$UL&4U[ZP39NK)-RUM2`0H`A9`K
XM(`$]$"T04!Q]````;UH\]CH;(0\BL`!N^R$/(;(`;OL"#R&R$+"+?@```#0G
XM=/I6$MCTUUU_3777XDUUU_3777]-==?TUUU_3777XDUUU_3777]-==?TUUU_
XM3777XDUUU_3777]-==?TUUU_3777XDUUU_3777]-==?TUUU_3777]-==?B37
XM77]-==?TUUU_3777]-==?B3777]-==?TUUU_3777]-==?B3777]-=?UTV"&@
XM\G\```!L6E/V4+:PQ[#$M[^WO[N[N[N_M[^WP[/#M,:L:RL9LXLYL;"K6P:P
XMM:F;FDJYF(O)*;R'B^M[Z&?`M<!U?"L\)T?#L<-T;%K%8WQ:Q7+VQXQV)LAL
XMAA?(;(LLELFQRSRK'F`CL@(7XA8"%B<!]S8!]D]P'75P&W:`&8=P&7B`%XF`
XM%8L/@!.+*`$8M(WXMHW8MYVYN)V9NIUYO)U9OITYP)T9PISYQ*RZQJR:R*QZ
XMRJQ:S9PYT*OZTJO:U*NZUJN:V:M:W*LZWJL:`0JJ`3F)`6EI`8E)`:A(`<@H
XM`>M0(/LP(K$"3Z`F^`*/8"I-`+!&H0```$HP9O-/RR`1]-]MV-OZV<#7PM7$
XMT\;1R,Z!88RW-C?(A&2,2599P*9FJ+=GM+EIL:MKQ\!L##PVPZQ6Q4X#');?
XM3*!@2J(```"->"KV,<=-WUW&W%W&W%W&W&W&W/;<<-MPVW#;<=IQVG)PW$`0
XM$`$`+<UG+7<=AQV'#9<-EPV?;:;:;:;;7;;;7;;;]=Q'\+!&HP```$HP9O-/
XMRDW^`Q;)3%;%K#;#P\!L#'MKH;EIM+=GN*9FK`E66<2$9(R'-C?+@6&,[(T<
XM;3Q-7"U\#9^MN-UM_T`1++!@2J0```"->"KV,7]-SUVVVUVVVUVVVFVFVO;9
XM<-EPV7#8<=AQUW+6W"`!`!`03<<'+:<=IQVW#;<-MPW/;<;<;<;<7<;<7<;<
XM]=U,<,#-I@```$H]1OH_(P*V`J@"B@)L`DT`(]("'4`?8;`>8L`<9,`:9L`8
XM9\`7:<`5:\`3;0L!)M'`$&T\WFU<W&ULVVV,V6VLUVW+UFW<U&W\TF`1S08!
XM+,8!3*8!;(8!BW8!G%8!O#8!W!8![5\"#3`>U0'<%@&\-@&<5@&+=@%LA@%,
XMI@$LQ@$<T&W\TFW<U&W+UFVLUVV,V6ULVVU<W&T\WFT<`0;0L!)KP!-IP!5G
XMP!=FP!ADP!IBP!QAL![4`?T@(=`"/`)*`F@"A@+#`K#`S:@```!*/4;Z/P+#
XM`K8"B`)J`DP"/0`AT@']0!ZQ8!S"8!K$8!C&8!?'8!7)8!/+8!*]!@$,T6WL
XMTVW,U6V\UFV<V&U\VFUKW&U,W6TLWVT,`1;,`2:L`4:,`69[`89<`98\`;8<
XM`=U0'M/P(-4!YAP!UCP!MEP!EGL!AHP!9JP!1LP!)M#`$6TLWVU,W6UKW&U\
XMVFV<V&V\UFW,U6WLTV`0S18!*]!@$\M@%<E@%\=@&,9@&L1@',)@'K%@']0"
XM'2`CT`),`FH"B`*F`L,0J`JP````.CH%`%@/<)!$M0```&!+1?9#(]@Q[%;5
XMH]-Q;38O?1<WSW2,V%C+AIR9>@Q:":##H*&AOZ&CH[FCIJ6QI:FJI:JLR;#%
XMM,&YN\"SRJ>SD$2V````8$M%]D.SI\JSP+NYP;3%L,FLJJ6JJ:6QI::CN:.C
XMH;^AH:##H)H,6@><F6C+A8S81\]S]]%R;387TZ/L758CV#&0?;<```!@0U#R
XM1+BVM;NQOJ[!K,.JQ*JFQZ3*HLNAS:'-H,Z@SISYSYT(T(T(T7T8T(T??1?2
XM;2]])M)]+B;2?2XFT]@0`10>)M-]/B;3?3;3]]-M-]/WTHTHTGTHTHTHT9T9
XMT9T:#0H-"ASZ'0HLZDS:;*Q*W#KL&QOK2[N+88!ZN@```&]24/)$J;:FNZ*^
XMG\&=PYO$FY?'E<J3RY+-DLV1SI'.D,^0SY#0C0C0C1?1C0C1]]%])M+WTFTG
XMTN)M)]+I)M-]/B;3?3;3]]-M-]/WTHTHTGTHTHTHT9#1D-&0T9'0D="2SY+0
XMD\Z5S9?*Q)[#G\&BOJ6[J;80@'J[````;U)0\D0K6INZ6^HL&?PY_#RI?-E<
XMZ3T)+/DM"1T)'1D-&0T9#1C2C2C2?2C2C2]]-]-M/WTVTWT^)M-^DM-M)^+2
XM;2?2;2]])M)]'WT8T(T7T8T(T(T)#/D,^0SI'.D<V2S9++D\J5QY><PYO#G<
XM&?OJ*[I[6I"`@[X```!O4FKR4*FVIKNBOI_!G<.;Q)N7QY7*D\N2S9+-D<Z1
XMSI#/D,^0T(T(T(T7T8T(T7T8T7TFTGTO;2?2XFTGTND6TWT^)M-]/VTWTVTW
XMTHTGTHTHTGTHTHTHT9#1D-&0T9'0D="2SY+0D\Z5S9?*Q)[#G\&BOJ6[J;8`
XM9VU$X]9-08"#OP```&]2:O)0*UJ;NEOJ+!G\.?P\J7S97.D]"2SY+0D="1T9
XM#1D-&0T8THTHTGTHTHTGTHTGTVTWT_;3?3XFTWZ1TVTGXM)M)]+VTGTFTGT8
XMT7T8T(T7T8T(T(T)#/D,^0SI'.D<V2S9++D\J5QY><PYO#G<&?OJ*[I[4`:4
XMU$X]9-1`@!+(````8$LA]BD=`0XQT>H,QLXBH$K,````2C4T]C:ZL,RVQ[K#
XMOK_"N\:XR+;*M,RRSK#]"=)_U%XM8^+8$`'GXAV#XM9?U'TI_0L,ZRS+3*ML
XMBXQKO"O[[#NL>VS+"Z"A),T```"->&CV4-BW`UPP+,D"71`?U0&ML!6ZM;H!
XM&VP;;=M<>UVK+/LM>RT[+3L=FQT+#=L,ZPW[#+L`$[#(H!>L:@&:Q*`;K"D!
XM^<"0(9OI`CF\D"6;J0)YN8`IBX@"N+:`+8M7`O>T@"^+*`,8L7`S>P@#.*<#
XM5Y]P-WA@.6=P.79@.V7W`[=&`]8W`]<N-@/V%P/[+K`$&R`_?C%@/V)P/7-@
XM/63W`[=6`[9G`Y=V`Y:/<#=Y<#5Z@#.+!P,WL8`QBR@"^+1P+WM8`MBV@"N+
XMB`*8N9`GFZD"6;R0(YOI`AG`D!^<*@&ZQ*`9K&H!>LBP`3L,NPW[#.L-VPT+
XM'9L=.RT[+7LL^RVK7'M=VVP;8!&ZM;H!7;`:U0']$"7)`LPP-;?8L#S.````
XM/RUH]E#(7;?9Z9V>9]OE7=\\N+.X/!<WP1QC,PCS,\8<%S?!.+.XRSW>1=OD
XM?9[0G9[#?;ZEW3R0L%_/````/RUH]E#(7;?9Z)V>1]OD7,'$/$%JDYH\-37#
XM$)@<-37#.I.:RSW>1=OD?9Z)V7VU`Y7;?9YYV>5]OD7*BSN#P7-\$<8S,(\S
XM/&'!<WP3BSN,KD7;Y7V>>=E]M<B@A-4````_.6CV4,^-2QT;//M<UT?+:%RF
XMA\EGC(9ZQG:P_&9[#\5WL,5IG%>GQGL%Q_?6C6XGUN.-9];DC5^=7BC5Y)U.
XM6=3EG4Y9U.2=7BC5^=7DC6?6XXUN)]:-;WQUL'QGI\69;%^P=\7[!VQK!GQJ
XM=LB';)>&REALMT?-M<^ST;'4C/#!"=@```!*-U_W5P'$`EXF`C<"/V`3M7`0
XMU";>W]P!';J;VITIV(U9UHUJU(ULTWU\TGV-#0?8<7Q]AB>WV6-Z?8<WGWV6
XM5WC8=8;WV6=UC8=X3XV&B$C7>(/XV&J"C7>H*-=K@OC6>X&=9LU=5\U?U6T-
XM74?0U?U&T=73?1U?TVTM72?2U?TFT]71?3U?T6U-70?4U?T&U=7'U=7&UM6W
XMUI&+?6@HMM>"BGUX**;8@IEM>2F'UY*8;8DXAMB$AWV(2';9A7=MEVA7V(:%
XM;9AW5MEX@WV(GW-ME[<7V'QQ;9?0T-A]'0UXTKUXU*UHUIU)V)TIV<FML!'<
XMW]URU`$&:P$V`C<"/B8"5`'`D6;9````9UIJ^E&\I-ZLU[+2MLZBHJ+*H*J@
XMQIL)PXM(P(N(O7O'NVP&N6PFMUQEM5R%LUREL5S%KUSEK5T%K$TDJUTEJ5U%
XMJ$UDIUUEI5V%I$VDHUVEHDW$H5W%H$WDE=Y8]`$$=;J+162XI+)&2V6$L45;
XM1:,Z]42T2G*O1$LTJ2KD1+)*LJU#6Q2M*L4DL5K2K4)+%*Q*U"2P6K:L0O2O
XM6K>L05KFJWK)KUK5KHKUKCKX^N;*CZY<N.>M;+FL;*44K&RD)*U<I"XDK6R4
XM):U<A32M7(1$K6QT1*Y;$JI$6M:P*I54KEKRJD9*]:XJI&6N6M*J5TKUK"JD
XMA+!:HJM(6P6H*K64L5IBK$H%L6HCK%H4LW=*U*);2DKEHTMXL4I%V%I5UEIT
XMUDJ%U%J5TEJTTDK%T%K5SEKUS%L5RELUR%M5QEMVPFN6P&NWO'O8N(P(M(PY
XML)QJ"JH,JBHJ+.MM*RUZS>I+P#`1V@```#\R-/HS%L'6YG9M86P06`S@````
XM7!YTV%4/[L%L6`WA````7!YTV%?L%F;`\L!%X@```%PA=-A5`03>;=?<C;C:
XMG:G:G:G:G:G:^=J=J=JMJ=JMFMJ=JMGZV?K9O9K9^]CBO8XKV.*]C\V.*]CC
XMS8^]C@-<V,!6XP```%PB=NY7V>`3S9O9XLV/S9O9S9O9O9S9O9O9O9O9O9O9
XMK:K9K:K9K:G:G:G<]M^=Z=Z=VMVMRMVMRMR]N]N]N]N]N]K-J]N]K-J]K\VN
XM+-J]K@$\R$/D````7"%TV%?@-<V?O9X\V>*]G\V>*]KBO:XKVOO:K:O:^MOZ
XMVZVYVZVZVYVZVYW)W/G<G<G<G<G<G<G=C=C=?>8!!%@-\````%P?=.M5#^[!
XM;69`#/$```!<'W3K5U[K(/O(1O(```!<(G3N54`1;??>C>G=G=G=G=G=G=G=
XMG=G<K<G=G<K<K<G<K<^MSZW/K;O;K;O;K;^]OBO:S:XKVOS:^]KDS:O:X#7`
XMR%3S````7"%VV%?@$\V;V>+-G\V;V<V;VOO:O:O:O:K;K;K;K<K;K<G<K<K<
XMG=G]YMN=F=FMBMF=FMFMBMFMFMFMF]B]B]C[V+V,V+V/S7XLV+V.`3S8P$CT
XM````7")T[E?9X#7-F]GDS9^]G\V>*]G-GBO9^]JMJ]JMJ]KZVOK:^MJMN=NM
XMJMN=N=NMN=N=N=N=N=N=N=N=N=N-U]YM]`$0V`OU````7`QVV%<`6*#8"_8`
XM``"-A03\(``A8&")^P```(UX1/8^E5VVVG#:;:<-IMIPV7#:;:<-EPV7#9]P
XMV7#9<-EPV,&(Q(7%A,:"R(')?W+7<M9SU7/5=-1TTW;1=\]YSGK0>-)YU'C6
XM=M=UUW77=-ATV'/9<MIRV7+:R(/'A,:&Q(?#B,"+<-MPVW#;<-OW#;<-MPVV
XMVW#;<-MMMPVVVW#;;<6PV`O\````/S(T^C,`HJ!@B?T```"->$3V/K!=QMMP
XMVVVW#;;;<-MPVVVW#;<-MPV_<-MPVW#;<(O!A\2&Q87&A,B#R-IRV7+9<]ES
XMV'38=-=VUG?5>=-ZTGC1><]XT';2==-UU'34=-5SUG+6<M=R@<>"QX/&A,2&
XMPXG`V7#9<-EPV7#9]PV7#9<-IMIPV7#:;:<-IMIPVFVUE5`<_@```&]:6O94
X7ACK^@F"%LA#R&RA>?6"%LA#R&R'U]O;:
X`
Xend
END_OF_FILE
  if test 17561 -ne `wc -c <'fonts.lj/S.28.pk.UU'`; then
    echo shar: \"'fonts.lj/S.28.pk.UU'\" unpacked with wrong size!
  fi
  # end of 'fonts.lj/S.28.pk.UU'
fi
if test -f 'man/dumpft.1.S' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man/dumpft.1.S'\"
else
  echo shar: Extracting \"'man/dumpft.1.S'\" \(3122 characters\)
  sed "s/^X//" >'man/dumpft.1.S' <<'END_OF_FILE'
X.\"Copyright 1988 by Chris Lewis 2.1 90/07/18
X.TH DUMPFT 1 local
X.SH NAME
Xdumpft \- Look at troff font width files
X.SH SYNOPSIS
X.B dumpft
X.B "[-s]"
X.B "[-t]"
X.B "[-w]"
X.B "[-f]"
X.B "[-d]"
X.BI "[-h" skip "]"
X.BI "[" options "]"
X< width
X.SH DESCRIPTION
XThe
X.B dumpft
Xprogram allows you to look at CAT troff width files.
XIt produces on standard output a ditroff-like width table.
XThe unitwidth is 6 and the resolution is 432, so the numbers
Xyou see are precisely the same as are in the CAT file.
X.P
XThe produced width table can be modified and used with
X.B dit2catwid
Xto generate new width tables, but you should specify
Xthe
X.B -d
Xoption.
XThe
X.B -d
Xoption tells dumpft to generate the widths with a unitwidth of 10
Xand resolution 300 which matches the
X.B dit2catwid
Xdefaults.
X.RB ( dit2catwid
Xdoesn't support changing unitwidth (yet)).
X.P
XThe
X.B -s
Xoption tells
X.B dumpft
Xthat the width table it's reading is for the
Xsymbol font
X(usually
X.BR ftS ")."
X.P
XThe
X.B -t
Xoption tells
X.B dumpft
Xto dump the names of each of the characters in the font table
Xa form suitable for wrapping .TS/.TE around to generate a full
Xset of CAT troff character tables.
X.P
XThe
X.B -w
Xoption tells
X.B dumpft
Xto dump all of the characters in the font table
Xas a set of strings for inclusion in troff
Xdocuments.
X.P
XSimilarly, the
X.B -f
Xoption tells psroff to generate a formatted example of all CAT troff
Xcharacters in the R, I, B and S fonts.
X.P
XFor various reasons, you might want to look at CAT troff width tables
Xfrom systems that have different width file formats.
XCAT troff width files vary from system to system by how much extraneous
Xjunk is prepended to the actual 224 byte table.
XOften, width tables are generated by compiling a C char array.
XSome vendors remove the a.out header from the beginning of the resultant
Xobject file, and others leave it there.
XIn order to interpret the width tables the program must skip over
Xthe junk (if any).
X.P
XThe
X.BI "-h" skip
Xtells
X.B dumpft
Xto skip \fIskip\fP bytes before reading the table.
XThe default
Xskip is set to what you built
X.B psroff
Xwith (HEADERSIZE define), you only need to specify
X.B -h
Xif you're reading width files from another system.
X.P
XFYI: Xenix usually has HEADERSIZE 0.
XSun and Ultrix (and probably other BSD derived systems)
Xshould have HEADERSIZE 32.
X.P
XIf you have difficulties setting HEADERSIZE correctly, you might
Xwant to use this option with varying settings
Xon /usr/lib/font/ftR (as supplied by your vendor) until
X.B dumpft
Xstops screeching about missing widths.
X.P
X.B Dumpft
Xprovides error messages on stderr if width entries are
Xmissing or extra ones are found.
XIf you get lots of error messages, you're probably looking at a S
Xfont file without
Xthe
X.B -s
Xoption or vice-versa, or HEADERSIZE is wrong.
X.P
XFor the curious, the full set of width table entries are in the
Xsource for
X.B cattab.c
Xin the psroff source directory.
X.SH FILES
X.if t .ta 2.5i
X.if n .ta 3.5i
X%%FONTDIR%%/<width>/ft*	psroff-built width tables.
X.br
X%%FONTDIR%%/ft*	CAT width tables from your vendor.
X.SH "SEE ALSO"
Xtroff2ps(1L), troff(1), cat(5L) and
Xcattab.c source.
X.SH AUTHOR
XWritten by Chris Lewis
END_OF_FILE
  if test 3122 -ne `wc -c <'man/dumpft.1.S'`; then
    echo shar: \"'man/dumpft.1.S'\" unpacked with wrong size!
  fi
  # end of 'man/dumpft.1.S'
fi
if test -f 'troff2.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'troff2.c'\"
else
  echo shar: Extracting \"'troff2.c'\" \(15815 characters\)
  sed "s/^X//" >'troff2.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:		troff2.c
X	Author: 	Chris Lewis
X	Specs:		Troff interpreter, needs a driver to work.
X */
X
X#include "defs.h"
X
X#ifndef	lint
Xstatic char SCCSid[] =
X    "@(#)troff2.c: 2.2 Copyright 90/08/10 15:15:35 Chris Lewis";
X#endif
X
X#define	ESC	0x80
X#define	FLASH	0x00
X#define	CONTROL	0x40
X#define	LEAD	0x60
X#define	SIZE	0x50
X
X#define	DOWN	0
X#define	UP	1
X#define	LOWER	2
X#define	UPPER	3
X#define	FORWARD	4
X#define	BACKWARD 5
X
X#ifdef	BSDHACK
Xint	magnify_lead = 0;
X#endif
X
Xchar ptab[15] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36};
Xint	points;
X
Xint	xpos, ypos;
X
X#ifdef	VDEBUG
Xchar *words[] = {
X	"down", "up", "lower", "upper", "forward", "backwards"
X	};
X#endif
X
X
X#define	CTOINT(val,sig)	((~c)&sig)
X
Xint pagelength;
Xint pageoffset;
Xint pageyoffset;
X
Xchar *version, *shortversion;
X
Xint dumpflag = 0;
X
X#define	CFONT (((mag == UPPER)<<2)|((rail == UPPER)<<1)|(tilt==DOWN))
X#ifdef	FONT4
X#define	calcfont	font = (CFONT >> 1)
X#else
X#define	calcfont	font = CFONT
X#endif
X
Xchar *progname;
Xchar *printer;
Xchar *device = {"alw"};
Xchar **prologs = (char **) NULL;
X#define	PROCHUNK	20
Xint procount;
X
X#ifdef	L_cuserid
X#define	nmMAX	L_cuserid
X#else
X#define	nmMAX	16
X#endif
X
Xchar username[nmMAX];
X
Xdouble calc();
X
Xchar *driver = "ps";
X#ifdef	OPT
Xchar *widthtables = (char *)NULL;
Xchar *widthptr;
Xint optimize = 0;
X#endif
X
Xextern char *realloc();
X
X#define	OPTLIST	"d:O:Y:T:VD:l:MR:P::zp:W:Z"
X
X/*	On 386/ix 1.0.6 profiling has a bug in it that leaves
X	two extra longs on the stack between the stack frame and
X	arguments on entry to main */
X#ifdef	PROFBUG
X
Xmain(j1, j2, argc, argv)
Xlong j1, j2;
Xint argc;
Xchar **argv; {
X
X#else
X
Xmain(argc, argv)
Xint	argc;
Xchar	**argv; {
X
X#endif
X	register int nc, c;
X	register int units;
X	register int font, rail, mag, tilt, half, escape, lead;
X
X	extern int getopt();
X	extern char *optarg;
X
X#ifdef	L_cuserid
X	extern char *cuserid();
X
X	(void) cuserid(username);
X	if (!username[0])
X#else
X
X	extern char *getlogin();
X
X	progname = getlogin();
X	if (progname)
X	    strcpy(username, progname);
X	else
X	    /* I could read /etc/passwd, but hell, why? */
X#endif
X	    sprintf(username, "uid=%d", getuid());
X
X	/* some compilers complain about floating point in initializers... */
X	pagelength = DEFPL * TROFFRESOLUTION;
X	pageoffset = DEFOFF * TROFFRESOLUTION;
X	pageyoffset = DEFYOFF * TROFFRESOLUTION;
X
X	progname = strrchr(argv[0], '/');
X	if (progname)
X	    progname++;
X	else
X	    progname = argv[0];
X
X	version = T2VERSION + 4;
X	shortversion = strchr(version, '-') + 2;
X
X	while((c = getopt(argc, argv, OPTLIST)) != EOF)
X	    switch (c) {
X#ifdef	OPT
X		case 'Z':
X		    optimize = 1;
X		    break;
X		case 'W':
X		    widthtables = mustmalloc(strlen(optarg) + 10, "widthname");
X		    strcpy(widthtables, optarg);
X		    strcat(widthtables, "/");
X		    break;
X#else
X		case 'Z':
X		case 'W':
X		    fprintf(stderr,
X			"%s: optimization disabled; -Z/-W ignored (%s)\n",
X			progname, "see OPT in defs.h");
X		    break;
X#endif
X		case 'P':
X		    if (!prologs) {
X			prologs = (char **) mustmalloc(PROCHUNK * sizeof(char*),
X			    "prologs");
X			procount = 0;
X		    }
X		    prologs[procount++] = optarg;
X		    /* insert the null */
X		    if ((procount % PROCHUNK) == 0) {
X			prologs = (char **) realloc((char *) prologs,
X			    (procount + PROCHUNK) * sizeof(char *));
X		    }
X		    prologs[procount] = (char *) NULL;
X		    break;
X		case 'p':
X		    printer = optarg;
X		    break;
X		case 'd':
X		    device = optarg;
X		    break;
X		case 'z':
X		    dumpflag++;
X		    break;
X		case 'T':
X		    driver = optarg;
X		    break;
X		case 'R':
X#if	defined(DT)
X		    {
X			extern int dtresolution;
X			dtresolution = atoi(optarg);
X			if (dtresolution == 0) {
X			    fprintf(stderr, "%s: Invalid resolution: %s\n",
X				progname, optarg);
X			    exit(1);
X			}
X		    }
X		    break;
X#else
X		    fprintf(stderr, "%s: Resolution not supported\n",
X			progname);
X		    exit(1);
X#endif
X		case 'M':
X		    metrics = 1;
X		    break;
X		case 'V':
X		    printf("%s: %s\n", progname, version);
X		    exit(0);
X		case 'D':
X#ifdef	DEBUG
X		    setdebug(optarg, "diagnostics");
X		    break;
X#else
X		    fprintf(stderr, "%s: DEBUG disabled - recompile\n",
X			progname);
X		    exit(1);
X#endif
X		case 'O':
X		    pageoffset = calc(optarg);
X		    break;
X		case 'Y':
X		    pageyoffset = calc(optarg);
X		    break;
X		case 'l':
X		    pagelength = calc(optarg);
X		    if (pagelength == 0) {
X			fprintf(stderr, "%s: Bad pagelength %s\n", progname,
X			    optarg);
X			exit(1);
X		    }
X		    break;
X		case '?':
X		default:
X		    usage();
X		    exit(1);
X	    }
X
X	getdriver(driver);
X
X	if (!printer)
X	    printer = driver;
X
X#ifdef	OPT
X	if (!widthtables) {
X	    widthtables = mustmalloc(strlen(driver) + strlen(FONTDIR) + 20,
X		"widthname");
X	    sprintf(widthtables, "%s/%s/", FONTDIR, driver);
X	}
X	widthptr = widthtables + strlen(widthtables);
X#endif
X
X	loadfont(be->bestdfont, be->besymfont);
X#ifdef	DEBUG
X	if (debug & D_SPEC) {
X	    for (c = 0; c < procount; c++) {
X		DBP((D_SPEC, "Prolog %d: %s\n", c, prologs[c]));
X	    }
X	}
X#endif
X
X	if (dumpflag) {
X
X	    printf("Font table:\n\n");
X	    for (c = 0; fonttable[c].tab[0]; c++)
X		printf("%-3s %-20s %-20s %-20s\n",
X		    fonttable[c].tab[0],
X		    fonttable[c].tab[1],
X		    fonttable[c].tab[2],
X		    fonttable[c].tab[3]);
X
X	    dumptables(be);
X	    exit(0);
X	}
X
X	resetState();
X	if (be->beprolog)
X	    (*be->beprolog)();
X
X	/* An Initialize sequence *usually* comes in first, but what the
X	    hey ... */
X	xpos = 0;
X	ypos = -153;
X	escape = FORWARD;
X	lead = FORWARD;
X	half = LOWER;
X	rail = LOWER;
X	mag = LOWER;
X	tilt = DOWN;
X	calcfont;
X
X	while ((c = getc(stdin)) != EOF) {
X		switch(c) {
X		case 0x00:
X			DBP((D_CAT,"NOP\n"));
X			break;
X		/* Flash (print character) codes */
X		case 0x01: case 0x02: case 0x03: case 0x04:
X		case 0x05: case 0x06: case 0x07: case 0x08:
X		case 0x09: case 0x0a: case 0x0b: case 0x0c:
X		case 0x0d: case 0x0e: case 0x0f: case 0x10:
X		case 0x11: case 0x12: case 0x13: case 0x14:
X		case 0x15: case 0x16: case 0x17: case 0x18:
X		case 0x19: case 0x1a: case 0x1b: case 0x1c:
X		case 0x1d: case 0x1e: case 0x1f: case 0x20:
X		case 0x21: case 0x22: case 0x23: case 0x24:
X		case 0x25: case 0x26: case 0x27: case 0x28:
X		case 0x29: case 0x2a: case 0x2b: case 0x2c:
X		case 0x2d: case 0x2e: case 0x2f: case 0x30:
X		case 0x31: case 0x32: case 0x33: case 0x34:
X		case 0x35: case 0x36: case 0x37: case 0x38:
X		case 0x39: case 0x3a: case 0x3b: case 0x3c:
X		case 0x3d: case 0x3e: case 0x3f:
X			/* This is terribly kludgey:
X				In 432 units per inch, 4752 is 11 inches.
X				When we go beyond this, we subtract 4752
X				continually until we're back in range.
X			*/
X			while (ypos >= pagelength) {
X			       ypos -= pagelength;
X			    DBP((D_CAT,"Page break\n"));
X			    if (be->bepage)
X				(*be->bepage) ();
X			}
X			/*c = c&0x3f;	Isn't necessary */
X			/*	Find the C/A/T code */
X			if (half == UPPER) {
X			    if (c > 46) {
X				fprintf(stderr, "%s: Illegal upper flash: %d\n",
X				    progname, c);
X				exit(1);
X			    }
X			    nc = c + 62;
X			} else
X			    nc = c - 1;
X
X			DBP((D_CAT,"nc=%d;pnts=%d;x,y=%d,%d;fnt=%d;\n",
X			    nc,points,xpos,ypos,font));
X#ifdef	VDEBUG
X			DBP((D_CAT,"  rail=%s;mag=%s;tilt=%s;half=%s\n",
X			    words[rail], words[mag],words[tilt], words[half]));
X#endif
X
X#ifdef OPT
X			canoninsert(xpos, ypos, font, points, nc);
X#else
X			if (be->beputchar)
X			    (*be->beputchar)(xpos, ypos, font, points, nc,
X				(char *) NULL);
X#endif
X
X			break;
X		/* Control codes */
X		case 0x40:
X			DBP((D_CAT,"Initialize\n"));
X			xpos = 0;
X			ypos = -153;
X			escape = FORWARD;
X			lead = FORWARD;
X			half = LOWER;
X			rail = LOWER;
X			mag = LOWER;
X			tilt = DOWN;
X			calcfont;
X			break;
X		case 0x41:
X			DBP((D_CAT,"Rail lower\n"));
X			rail = LOWER;
X			calcfont;
X			break;
X		case 0x42:
X			DBP((D_CAT,"Rail upper\n"));
X			rail = UPPER;
X			calcfont;
X			break;
X		case 0x43:
X			DBP((D_CAT,"Mag upper\n"));
X			mag = UPPER;
X			calcfont;
X			break;
X		case 0x44:
X			DBP((D_CAT,"Mag lower\n"));
X			mag = LOWER;
X			calcfont;
X			break;
X		case 0x45:
X			DBP((D_CAT,"half lower\n"));
X			half = LOWER;
X			break;
X		case 0x46:
X			DBP((D_CAT,"half upper\n"));
X			half = UPPER;
X			break;
X		case 0x47:
X			DBP((D_CAT,"Escape forward\n"));
X			escape = FORWARD;
X			break;
X		case 0x48:
X			DBP((D_CAT,"Escape backward\n"));
X			escape = BACKWARD;
X			break;
X		case 0x49:
X			DBP((D_CAT,"STOP\n"));
X			break;
X		case 0x4a:
X			DBP((D_CAT,"Lead forward\n"));
X			lead = FORWARD;
X			break;
X		case 0x4b:
X			DBP((D_CAT,"Software cut!\n"));
X			break;
X		case 0x4c:
X			DBP((D_CAT,"Lead backward\n"));
X			lead = BACKWARD;
X			break;
X		case 0x4d:
X#ifdef	SPECIAL
X#define	SPSIZ	256
X			{
X			    static char specialbuf[SPSIZ], *sbp;
X			    sbp = specialbuf;
X#ifdef	OPT
X			    canonflush();
X#endif
X			    while((c = getc(stdin)) != EOF && c != '\n') {
X				if (!c)	/* some troff's add NOP's when
X					   the internal output buffer is
X					   flushed */
X				    continue;
X				if (sbp < &specialbuf[SPSIZ]-2)
X				*sbp++ = c;
X			    }
X			    *sbp = '\0';
X
X			    DBP((D_SPEC,"SPECIAL SEQUENCE: %s!\n", specialbuf));
X			    dospecial(specialbuf);
X			    break;
X			}
X#else
X			fprintf(stderr, "%s: Illegal C/A/T code - %s\n",
X			    progname, "special sequences are disabled");
X			exit(1);
X#endif
X#ifdef	BSDHACK
X		case 0x4e:
X			magnify_lead = 1;
X			break;
X#endif
X#ifdef	FONT8
X		case 0x4e:
X			DBP((D_CAT,"Tilt up\n"));
X			tilt = UP;
X			calcfont;
X			break;
X		case 0x4f:
X			DBP((D_CAT,"Tilt down\n"));
X			tilt = DOWN;
X			calcfont;
X			break;
X#endif
X
X		/* Size changes */
X		case 0x50: case 0x51: case 0x52: case 0x53:
X		case 0x54: case 0x55: case 0x56: case 0x57:
X		case 0x58: case 0x59: case 0x5a: case 0x5b:
X		case 0x5c: case 0x5d: case 0x5e: case 0x5f:
X		    /* basic code is the points = ptab[c] line.
X		       The rest of the brain-damage is due to the
X		       fact that switching from some of the fonts
X		       to some of the others blow the horizontal
X		       position - see the cat(5) manual page
X		       about single vs. doubler point sizes. */
X		    {	static lastc = 0;
X			c &= 0xf;
X			points = ptab[c];
X
X			DBP((D_CAT,"SPoints:%d;lastc:%5d;c:%d;xpos:%d\n",
X			    points, lastc, c, xpos));
X			if (lastc <= 8 && c > 8) /* single -> doubler */
X			    xpos -= 55;
X			else if (lastc > 8 && c <= 8) /* doubler -> single */
X			    xpos += 55;
X
X			DBP((D_CAT,"EPoints:%d;lastc:%5d;c:%d;xpos:%d\n",
X			    points, lastc, c, xpos));
X			lastc = c;
X			break;
X		    }
X		/* Lead (vertical motion) codes */
X		case 0x60: case 0x61: case 0x62: case 0x63:
X		case 0x64: case 0x65: case 0x66: case 0x67:
X		case 0x68: case 0x69: case 0x6a: case 0x6b:
X		case 0x6c: case 0x6d: case 0x6e: case 0x6f:
X		case 0x70: case 0x71: case 0x72: case 0x73:
X		case 0x74: case 0x75: case 0x76: case 0x77:
X		case 0x78: case 0x79: case 0x7a: case 0x7b:
X		case 0x7c: case 0x7d: case 0x7e: case 0x7f:
X
X#ifdef	OPT
X			canonflush();
X#endif
X
X			DBP((D_CAT,"Lead(vertical) %02x\n", c&0x1f));
X			units = CTOINT(c,0x1f);
X#ifdef	BSDHACK
X			if (magnify_lead) {
X			    units *= 64;
X			    magnify_lead = 0;
X			}
X#endif
X			if (lead == FORWARD)
X			    ypos += 3*units;
X			else
X			    ypos -= 3*units;
X			break;
X		/* Escape (horizontal motion) codes */
X		case 0x80: case 0x81: case 0x82: case 0x83:
X#ifndef lint
X		case 0x84: case 0x85: case 0x86: case 0x87:
X		case 0x88: case 0x89: case 0x8a: case 0x8b:
X		case 0x8c: case 0x8d: case 0x8e: case 0x8f:
X		case 0x90: case 0x91: case 0x92: case 0x93:
X		case 0x94: case 0x95: case 0x96: case 0x97:
X		case 0x98: case 0x99: case 0x9a: case 0x9b:
X		case 0x9c: case 0x9d: case 0x9e: case 0x9f:
X		case 0xa0: case 0xa1: case 0xa2: case 0xa3:
X		case 0xa4: case 0xa5: case 0xa6: case 0xa7:
X		case 0xa8: case 0xa9: case 0xaa: case 0xab:
X		case 0xac: case 0xad: case 0xae: case 0xaf:
X		case 0xb0: case 0xb1: case 0xb2: case 0xb3:
X		case 0xb4: case 0xb5: case 0xb6: case 0xb7:
X		case 0xb8: case 0xb9: case 0xba: case 0xbb:
X		case 0xbc: case 0xbd: case 0xbe: case 0xbf:
X		case 0xc0: case 0xc1: case 0xc2: case 0xc3:
X		case 0xc4: case 0xc5: case 0xc6: case 0xc7:
X		case 0xc8: case 0xc9: case 0xca: case 0xcb:
X		case 0xcc: case 0xcd: case 0xce: case 0xcf:
X		case 0xd0: case 0xd1: case 0xd2: case 0xd3:
X		case 0xd4: case 0xd5: case 0xd6: case 0xd7:
X		case 0xd8: case 0xd9: case 0xda: case 0xdb:
X		case 0xdc: case 0xdd: case 0xde: case 0xdf:
X		case 0xe0: case 0xe1: case 0xe2: case 0xe3:
X		case 0xe4: case 0xe5: case 0xe6: case 0xe7:
X		case 0xe8: case 0xe9: case 0xea: case 0xeb:
X		case 0xec: case 0xed: case 0xee: case 0xef:
X		case 0xf0: case 0xf1: case 0xf2: case 0xf3:
X		case 0xf4: case 0xf5: case 0xf6: case 0xf7:
X		case 0xf8: case 0xf9: case 0xfa: case 0xfb:
X		case 0xfc: case 0xfd: case 0xfe:
X#endif
X
X			units = CTOINT(c,0x7f);
X			if (escape == FORWARD)
X			    xpos += units;
X			else
X			    xpos -= units;
X			DBP((D_CAT,"ESC (hor): %02x\n", c&0x7f));
X			break;
X
X		case 0xff:
X			DBP((D_CAT,"Illegal: %02x\n", c));
X			break;
X		}
X	}
X#ifdef	OPT
X	canonflush();
X#endif
X	if (be->bepage)
X	    (*be->bepage)();
X	if (be->beepilog)
X	    (*be->beepilog) ();
X	exit(0);
X	/* NOTREACHED */
X}
X
Xusage() {
X    fprintf(stderr, "usage: %s [-Ttype][-V]\n", progname);
X    fprintf(stderr, "  ... see troff2ps manpage for full description of %s\n",
X	OPTLIST);
X}
X
Xdouble
Xcalc(s)
Xregister char *s; {
X    double retval = 0.0;
X    char scale;
X    switch (sscanf(s, "%lf%c", &retval, &scale)) {
X	case 0:
X	case EOF:
X	    retval = 0.0;
X	case 1:
X	    retval *= TROFFRESOLUTION; /* default is inches */
X	    break;
X	case 2:
X	    switch(scale) {
X		default:
X		    fprintf(stderr, "%s: bad scale %c\n", progname, scale);
X		    retval = 0.0;
X		case 'i':
X		    retval *= TROFFRESOLUTION;
X		case 'u':
X		    break;
X		case 'c':
X		    retval *= TROFFRESOLUTION * 50. / 127.;
X		    break;
X		case 'P':
X		    retval *= 72.;
X		    break;
X	    }
X	    break;
X    }
X    return(retval);
X}
X
X#ifdef	SPECIAL
X
Xdospecial(string)
Xchar *string; {
X    char buffer[512];
X    buffer[0] = '\0';
X
X    DBP((D_SPEC,"Dospecial: (%d) %s\n", strlen(string), string));
X    while (*string)
X	switch(*string) {
X	    case 'D':
X		if (be->bedraw)
X		    (*be->bedraw)(specXPos, specYPos, string+1);
X		*string = '\0';
X		return;
X	    case 'E':
X		fprintf(stderr, "%s\n", string+1);
X		*string = '\0';
X		return;
X	    case 'P':
X		if (be->bepassthru)
X		    (*be->bepassthru)(string+1);
X		else
X		    printf("%s\n", string+1);
X		/* reset driver state! */
X		resetState();
X		*string = '\0';
X		return;
X	    case 'S': {
X
X		    register FILE *fin;
X		    register int rc, n;
X		    char buf[BUFSIZ];
X		    DBP((D_SPEC,"SYSTEM: %s\n", string+1));
X
X		    rc = -1;
X		    n = 0;
X		    fin = popen(string+1, "r");
X
X		    if (fin) {
X			while(rc = fread(buf, sizeof(char), BUFSIZ, fin)) {
X			    n += rc;
X			    fwrite(buf, sizeof(char), rc, stdout);
X			}
X			DBP((D_SPEC,"System: %d bytes read\n", n));
X			rc = pclose(fin);
X		    }
X		    if (!fin || rc) {
X			fprintf(stderr,
X			    "%s: SYSTEM request failed, command:\n  '%s'\n",
X			    progname, string+1);
X			exit(1);
X		    }
X		    /* reset driver state! */
X		    resetState();
X		    *string = '\0';
X		    return;
X		}
X	    case 'F':
X		if (be->befontsel)
X		    (*be->befontsel)(*(string+1), string+2);
X		*string ='\0';
X		return;
X#ifdef	FORM
X	    case 'L':
X		strcpy(buffer+2, string+1);
X		buffer[1] = '+';
X		*string = '\0';
X		string = buffer;
X	    case 'O':
X		if (be->beoverlay)
X		    (*be->beoverlay)(string+1);
X		*string = '\0';
X		return;
X#endif
X	    case 'i':
X		strcpy(buffer, "b");
X
X	    case 'I':
X		strcat(buffer, "include ");
X		strcat(buffer, string+1);
X		interp(buffer, (be->bexlat && *string == 'F') ? be->bexlat:
X		    FNULL, driver);
X		return;
X
X	    default:
X		fprintf(stderr, "%s: Illegal special sequence %s\n", progname, string);
X		return;
X	}
X}
X
X#endif
END_OF_FILE
  if test 15815 -ne `wc -c <'troff2.c'`; then
    echo shar: \"'troff2.c'\" unpacked with wrong size!
  fi
  # end of 'troff2.c'
fi
echo shar: End of archive 5 \(of 16\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 16 archives.
    echo "Read the README to get started with psroff installation"
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still must unpack the following archives:
    echo "        " ${MISSING}
fi
exit 0
-- 
Chris Lewis, Phone: TBA
UUCP: uunet!utai!lsuc!ecicrl!clewis
Moderator of the Ferret Mailing List (ferret-request@eci386)
Psroff mailing list (psroff-request@eci386)