clewis@ecicrl.UUCP (Chris Lewis) (11/17/90)
Submitted-by: Chris Lewis <clewis@ecicrl.uucp> Archive-name: psroff2.0/Part06 #! /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: Makefile dt.c fonts.lj/S.24.pk.UU lib/lethead.ps # lib/ps.lib # Wrapped by clewis@ecicrl on Fri Nov 16 23:36:00 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 6 (of 16)."' if test -f 'Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile'\" else echo shar: Extracting \"'Makefile'\" \(12208 characters\) sed "s/^X//" >'Makefile' <<'END_OF_FILE' X# Copyright 1985, 1986, 1987, 1988, 1989, 1990 Chris Lewis X# All Rights Reserved X# X# This makefile requires System V compatible "make". *Not* V7 X# vanilla BSD or Ultrix or Sun. Most modern systems will have X# a copy of the SV one somewhere (eg: .../s5bin/make). 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: Makefile X# Author: Chris Lewis X# Specs: Makefile for Generic Troff drivers X# Note: This is a System V Makefile, so you may X# have some problems making a few of the items. X# X#ident "@(#)Makefile: 2.2 Copyright 90/08/10 15:22:08 Chris Lewis" X X# Use s5make on Ultrix and Sun! X X# Set to where you want the user-interfaces to go XBINDIR = /usr/lbin X#BINDIR = /usr/tmp/bin X X# Testing type (default postscript (ps)): X# Use lj for laserjet. XTTYPE = ps X X# Libraries for Troff2 internals, created if it doesn't exist. X# This *must* be a directory all by itself with no other stuff X# in it. XLIBDIR = /usr/lib/troff2 X#LIBDIR = /usr/tmp/troff2 X X# Directory for Laserjet fonts. XLJF = $(LIBDIR)/lib/lj X X# nroff/troff macro directory for tmac.t2. XT2DIR = /usr/lib/tmac X X# Where your real macros are XRTMACDIR = /usr/lib/tmac X#RTMACDIR = /usr/tmp/tmac X X# upper level man directory, with subdirectories man1, man2 etc. XMANDIR = /usr/man/l_man X#MANDIR = /usr/tmp/man X X# Change this at your peril - your troff *must* support -F! X# (font width files (ft??) are placed under FONTDIR/<width>/ft??) X# (see lib/psrofflib.S) XFONTDIR = /usr/lib/font X#FONTDIR = /usr/tmp/font X X# Comment this out if you don't have shared libraries ala 386/ix XLIBFLAGS = -lc_s X X# Bourne shell. *All* Bourne shells with the exception of extremely X# braindamaged ones (such as Ultrix or vanilla BSD) will work fine. X# Ultrix/Dynix may need the ... s5bin/sh one. Korn or bash X# *should* work just fine, but I've never tested 'em. X# X# This is also here for make, but if you have SHELL defined in your X# *own* environment, you can't trust this to work anyways. X# XSHELL = /bin/sh X X# Try "make testbug" If make stops, uncomment IGNORESH and X# try "make testbug" again. If it still stops, complain to your X# vendor - your shell is BADLY broken. X#IGNORESH = set +e ; X X# How to ensure that shell scripts use the *right* shell. X# "#! /bin/sh" may work for you. ": /bin/sh" may work for you. X# X# Frankly, none of this crap is necessary on a sane O/S. X# (Even Xenix gets this right for crying out loud! But *noooo* X# Not Ultrix or Sun or Dynix BSD universe....) X# X# ": /usr/bin/sh5" works for Ultrix. X# Do not use $(SHELL) in this line because if your environment has X# SHELL defined, it may *override* the above SHELL definition. X# X# If you have to get a "#" into STARTSHELL, the Makefile won't X# like it. In that case, if you have a System V compatible echo X# (one that understands \nnn), use: X# STARTSHELL = "`echo '\043! <your shell here>'`" X# If you don't have a System V compatible echo (eg: Ultrix or X# pure BSD), use this instead: X# STARTSHELL = `cat STARTSHELL` X# then create a file called STARTSHELL with the right stuff X# in it. Eg: echo "#! <your shell here>" > STARTSHELL X# X# System V usually: XSTARTSHELL = : /bin/sh X# System V echo compliance, but needs #!: (Xenix?) X#STARTSHELL = `echo '\043! /bin/sh'` X# Pure BSD (ala Ultrix) echo "#! /bin/sh" > STARTSHELL" first. X#STARTSHELL = `cat STARTSHELL` X X# Whether you need "cc -c"'d font width tables for troff. XCOMPILE = X X# Compile flags needed to compile things on your machine. X# Usually just -O X# X# PROFBUG is for 386/ix 1.0.6 mcrt making a mistake on argument X# vector on entry to main. Only troff2.c has the additional parts X# to make profiling work on 386ix. You'd normally want just -p X# and/or -g. X# X#CCFLAGS = -p -g -DPROFBUG X# Chris's wierd, not yet quite working NULL dereference checker X#CCFLAGS = -O -Ya,`pwd/t` -g -DNULLCHECK X# Chris's other wierd, but working, NULL dereference checker. X#CCFLAGS = -O `pwd`/ifile XCCFLAGS = -O X X# If you're using gcc or something else, change this: XCC = cc X X# Do not comment any of the following out. If you aren't going X# to use TeX PK fonts with HP Laserjet output, just NEVER execute X# makebuildljfonts. X# X# If you have Rick Richardson's sfp2pk, set it's full path here: X# Only of interest for LJ/buildfonts. If you don't have sfp2pk, X# leave this alone, the code won't try to run it. XSFP2PK = /usr4/public/bin/sfp2pk X# If you have TeX fonts onboard, list the directories that X# contain them. Only of interest for LJ/buildfonts. X# You can always set this to "/", it'll just take a long time, but X# it will find ALL PK's on your system. XPKFONTS = /usr/lib/font/devjet /usr5/texfonts/fonts X# Where you want to build fonts, set this to the name of the X# directory where you want to make them. Caution: this could be X# enormous... (5000+ blocks) XNEWFONTS = /tmp/newfonts X X# Dinna touch from here on X X.SUFFIXES: .S .S~ X X.S~: X @rm -f $@ X $(GET) -p $(GFLAGS) $< | ./sedscript > $@ X @chmod 444 $@ X X.S~.S: X @rm -f $@ X $(GET) -p $(GFLAGS) $< > $@ X @chmod 444 $@ X X.S: X rm -f $@ X ./sedscript < $@.S > $@ X @chmod 444 $@ X X# Main stuff: X XMAIN = troff2.o opt.o utils.o t2conf.o cattab.o debug.o X X# Drivers: X XBACKENDS = lj.o pk.o pkc.o ps.o dt.o X X# Creation of sedscript for parameterization. X XSEDSCRIPT = "sed -e 's;%%LIBDIR%%;$(LIBDIR);g' \ X -e 's;%%LJF%%;$(LJF);g' \ X -e 's;%%STARTSHELL%%;'\"$(STARTSHELL)\"';g' \ X -e 's;%%COMPILE%%;$(COMPILE);g' \ X -e 's;%%FONTDIR%%;$(FONTDIR);g' \ X -e 's;%%MANDIR%%;$(MANDIR);g' \ X -e 's;%%CCFLAGS%%;$(CCFLAGS);' \ X -e 's;%%CC%%;$(CC);' \ X -e 's;%%LIBFLAGS%%;$(LIBFLAGS);' \ X -e 's;%%SFP2PK%%;$(SFP2PK);' \ X -e 's;%%PKFONTS%%;$(PKFONTS);' \ X -e 's;%%NEWFONTS%%;$(NEWFONTS);' \ X -e 's^%%IGNORESH%%^$(IGNORESH)^' \ X -e 's;%%RTMACDIR%%;$(RTMACDIR);g'" X XDEFINES = '-DLIBDIR="$(LIBDIR)/lib"' '-DFONTDIR="$(FONTDIR)"'\ X '-DLJF="$(LJF)"' $(CCFLAGS) XCFLAGS = $(DEFINES) X X Xall: troff2ps subst.done makeincl psroff README TROUBLE LASERFONTS submakes X Xsubst.done: sedscript X rm -f psroff makeincl X touch subst.done X Xsubmakes: X cd adapters ; $(MAKE) all X cd lib ; $(MAKE) all X cd man ; $(MAKE) all X cd utils ; $(MAKE) all X cd widths ; $(MAKE) all X cd tests ; $(MAKE) all X Xpsroff: psroff.S sedscript X @echo "Extracting $@ with variable substitutions" X @rm -f $(@) ; ./sedscript < $@.S > T ; chmod 555 T ; mv T $@ X Xmakeincl: makeincl.S sedscript X @echo "Extracting $@ with variable substitutions" X @rm -f $(@) ; ./sedscript < $@.S > T ; chmod 555 T ; mv T $@ X Xaudit: audit.S sedscript X @echo "Extracting $@ with variable substitutions" X @rm -f $(@) ; ./sedscript < $@.S > T ; chmod 555 T ; mv T $@ X Xunpackljfonts: X @ $(IGNORESH) find . -name '*.UU' -print | \ X while read i ; \ X do \ X ft=`echo $$i | sed -e 's/.UU//'` ; \ X if [ -s $$ft ] ; \ X then \ X echo "Removing $$i" ; \ X rm -f $$i ; \ X else \ X rm -f $$ft ; \ X echo "uudecoding $$i -> $$ft" ; \ X uudecode < $$i ; \ X if [ ! -s $$ft ] ; \ X then \ X echo "Whoops - uudecode failed on $$i - bad path?" ; \ X exit 1 ; \ X else \ X rm $$i ; \ X fi ; \ X fi ; \ X done X Xbuildljfonts: unpackljfonts X make troff2ps makeincl X cd lib ; make lj.fonts lj.lib X cd utils ; make buildfonts X Xinstallljfonts: X test -d $(LIBDIR) || mkdir $(LIBDIR) X test -d $(LIBDIR)/lib || mkdir $(LIBDIR)/lib X test -d $(LIBDIR)/lib/lj || mkdir $(LIBDIR)/lib/lj X $(IGNORESH) files=`echo fonts.lj/*.pk` ; \ X if [ "$$files" != 'fonts.lj/*.pk' ] ; \ X then \ X cp fonts.lj/*.pk $(LJF) ; \ X fi X $(IGNORESH) files=`echo fonts.lj/*.sfp` ; \ X if [ "$$files" != 'fonts.lj/*.sfp' ] ; \ X then \ X cp fonts.lj/*.sfp $(LJF) ; \ X fi X $(IGNORESH) test -z "$(PKFONTS)" -o ! -d "$(NEWFONTS)" \ X || cp $(NEWFONTS)/* $(LJF) X Xregister: X make troff2ps makeincl X cd lib ; make lj.fonts lj.lib X cd widths ; make ljwidths widths X @echo "Now su to root and type 'make installwidths'" X Xinstallwidths: makeincl X cd widths; $(MAKE) installwidths X Xinstall: makeincl X test -d $(BINDIR) || mkdir $(BINDIR) X test -d $(MANDIR) || mkdir $(MANDIR) X test -d $(LIBDIR) || mkdir $(LIBDIR) X test -d $(LIBDIR)/adapters || mkdir $(LIBDIR)/adapters X test -d $(LIBDIR)/lib || mkdir $(LIBDIR)/lib X test -d $(RTMACDIR) || mkdir $(RTMACDIR) X test -d $(FONTDIR) || mkdir $(FONTDIR) X rm -f $(BINDIR)/psroff.old X -cp $(BINDIR)/psroff $(BINDIR)/psroff.old X cp psroff $(BINDIR)/psroff X rm -f $(LIBDIR)/troff2ps.old X -cp $(LIBDIR)/troff2ps $(LIBDIR)/troff2ps.old X cp troff2ps $(LIBDIR)/troff2ps X cd lib ; $(MAKE) install X cd adapters ; $(MAKE) install X cd man ; $(MAKE) install X cd utils ; $(MAKE) install X cd widths; $(MAKE) install X Xtroff2ps: $(MAIN) $(BACKENDS) X $(CC) $(CFLAGS) -o troff2ps $(MAIN) $(BACKENDS) $(LIBFLAGS) X X# The following is commented out because make has a bug in that X# even if you don't want to make lint, it insists on making X# the .c's from the SCCS files. Dumb stupid.... X#lint: $(MAIN:.o=.c) $(BACKENDS:.o=.c) X# lint -p $(CFLAGS) $(MAIN:.o=.c) $(BACKENDS:.o=.c) > output.lint X X# Drivers include dependencies - add to this list if you're adding X# drivers. Xt2conf.o: defs.h ps.h lj.h dt.h Xps.o: defs.h ps.h Xdt.o: defs.h dt.h Xlj.o: defs.h lj.h pkc.h pk.h X Xpk.o: defs.h pk.h pkc.h Xpkc.o: defs.h pk.h pkc.h Xcattab.o: defs.h pk.h Xdebug.o: defs.h pk.h X Xtroff2.o utils.o opt.o: defs.h X Xsedscript: Makefile X rm -f sedscript ; echo $(SEDSCRIPT) > T ; chmod 755 T ; mv T sedscript X Xclean: makeincl X rm -f core *.o troff2ps psroff diagnostics audit X rm -fr mon.out output.lint TEST* X rm -fr FONTS X cd adapters ; $(MAKE) clean X cd man ; $(MAKE) clean X cd utils ; $(MAKE) clean X cd lib ; $(MAKE) clean X cd widths ; $(MAKE) clean X cd tests ; $(MAKE) clean X rm -f sedscript makeincl subst.done */subst.done X X# Yes, this is a little wierd, but in this way I can figure X# out what you are... XTEST: Makefile defs.h tests/testtab.m makeincl X cd lib ; make X rm -f TEST1 TEST2 X PATH=.:$(LIBDIR):$$PATH \ X troff2ps -V | sed -e 's/^.*- \(.*\)/.ds 2v "\1/' > TEST1 X echo ".ds 2d \"`date`" >> TEST1 X echo ".sp" > TEST2 X echo ".ps 10" >> TEST2 X echo ".vs 12p" >> TEST2 X echo ".ad 1" >> TEST2 X echo "DEFS.H DEFINITIONS:" >> TEST2 X sed -n -e '/Edit no more/q' \ X -e '/T2VERSION/d' \ X -e '/LIBDIR/d' \ X -e 's/[ ]*\/\*.*//' \ X -e '/^.define[ ]*\([^ ]*\)[ ]*\(.*\)$$/s//define \1=\2;/' \ X -e 's/=;/;/' \ X -e 's/^define //p' \ X -e '/^.undef[ ]*\([^ ]*\).*/s//!\1;/p' \ X defs.h >> TEST2 X #echo ".br" >> TEST2 X echo "MAKEFILE DEFINITIONS:" >> TEST2 X echo "LIBDIR = $(LIBDIR);" >> TEST2 X echo "LJF = $(LJF);" >> TEST2 X echo "STARTSHELL = $(STARTSHELL); " >> TEST2 X echo "SHELL = $(SHELL); " >> TEST2 X echo "COMPILE = $(COMPILE);" >> TEST2 X echo "FONTDIR = $(FONTDIR);" >> TEST2 X echo "MANDIR = $(MANDIR);" >> TEST2 X echo "CCFLAGS = $(CCFLAGS);" >> TEST2 X echo "CC = $(CC);" >> TEST2 X echo "LIBFLAGS = $(LIBFLAGS);" >> TEST2 X echo "RTMACDIR = $(RTMACDIR);" >> TEST2 X echo "PKFONTS = $(PKFONTS);" >> TEST2 X echo "NEWFONTS = $(NEWFONTS);" >> TEST2 X echo "IGNORESH = $(IGNORESH);" >> TEST2 X echo "SFP2PK = $(SFP2PK)." >> TEST2 X echo "TTYPE = $(TTYPE)." >> TEST2 X @echo "Don't worry if the uname/grep fails" X -grep '^trofftype' lib/psrofflib >> TEST2 X echo "Uname results:" >> TEST2 X -uname -a >> TEST2 X cat TEST1 tests/testtab.m TEST2 > TEST X rm -f TEST1 TEST2 X Xtest: TEST X tbl TEST | PATH=.:$(LIBDIR):$$PATH psroff -T$(TTYPE) X Xcheck: audit sedscript makeincl X cd lib ; $(MAKE) X ./audit X Xcheckinstall: audit sedscript makeincl X cd lib ; $(MAKE) X ./audit install X X# This is how I build a release - don't even try running this...! Xbuildrelease: clean unpackljfonts X $(IGNORESH) t=`find . -name 'p.*' -print`; \ X if [ -n "$$t" ] ; \ X then \ X echo "files still out: $$t" ; \ X exit 1 ; \ X fi X make buildfinal X Xbuildfinal: X make troff2ps makeincl X cd lib ; make lj.fonts lj.lib X cd utils ; make tmaps buildSfonts X cd utils ; make keepbuiltfonts X make test X make clean X t/cleantree X t/mkmanifest X t/mkkits X t/cleantree X X# Impossible file, we hope.... XWF = /cowsnovskibumsteinpastafazoola/bdkdkdk Xtestbug: X @ $(IGNORESH) if [ -r $(WF) ] ; \ X then \ X echo "Bizarre - are you sure you have $(WF)?" ; \ X else \ X echo "IGNORESH set correctly" ; \ X fi END_OF_FILE if test 12208 -ne `wc -c <'Makefile'`; then echo shar: \"'Makefile'\" unpacked with wrong size! fi # end of 'Makefile' fi if test -f 'dt.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dt.c'\" else echo shar: Extracting \"'dt.c'\" \(13509 characters\) sed "s/^X//" >'dt.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: dt.c X Author: Chris Lewis X Specs: Ditroff driver X */ X X#include "defs.h" X X#ifndef lint Xstatic char SCCSid[] = X "@(#)dt.c: 2.3 Copyright 90/10/22 14:52:55 Chris Lewis"; X#endif X X/* These two tables are always included so that we have the X official character mapping tables. X */ X Xstruct troff2befont dtStdFont[108] = { X X/* Note on X-shift, Y-shift and point scale factor: X The first two are shifts in the baseline position of the X character, and the third is a multiplier of the point size. X If they are zero, nothing happens. If they are non-zero, X they are first multiplied by .01, then (in the case of the X shifts), multiplied by the current points to get a shift X value in TROFF2PS[XY] coordinates. In the case of point scale X factor, it is multiplied by <currentpointsize> * .01 and becomes X the pointsize of the sequence to be emitted. X */ X/* +-------------------------------- Troff character number X | X | +--------------------------- N: standard fonts X | | S: symbol font X | | D: draw macro X | | n: new font X | | X | | +------------------------ X-shift (scaled by point) X | | | Note: positive is right. X | | | X | | | +--------------------- Y-shift (scaled by point) X | | | | Note: positive is up. X | | | | X | | | | +------------------ Point scale factor X | | | | | X | | | | | +-------------- Sequence X | | | | | | X v v v v v v */ X /* 0*/ {N, 0, 0, 0, "h"}, X /* 1*/ {N, 0, 0, 0, "t"}, X /* 2*/ {N, 0, 0, 0, "n"}, X /* 3*/ {N, 0, 0, 0, "m"}, X /* 4*/ {N, 0, 0, 0, "l"}, X /* 5*/ {N, 0, 0, 0, "i"}, X /* 6*/ {N, 0, 0, 0, "z"}, X /* 7*/ {N, 0, 0, 0, "s"}, X /* 8*/ {N, 0, 0, 0, "d"}, X /* 9*/ {N, 0, 0, 0, "b"}, X /* 10*/ {N, 0, 0, 0, "x"}, X /* 11*/ {N, 0, 0, 0, "f"}, X /* 12*/ {N, 0, 0, 0, "j"}, X /* 13*/ {N, 0, 0, 0, "u"}, X /* 14*/ {N, 0, 0, 0, "k"}, X /* 15*/ {N, 0, 0, 0, NOC}, X /* 16*/ {N, 0, 0, 0, "p"}, X /* 17*/ {N, 0, 0, 0, "em"}, X /* 18*/ {N, 0, 0, 0, ";"}, X /* 19*/ {N, 0, 0, 0, NOC}, X /* 20*/ {N, 0, 0, 0, "a"}, X /* 21*/ {N, 0, 0, 0, "ru"}, X /* 22*/ {N, 0, 0, 0, "c"}, X /* 23*/ {N, 0, 0, 0, "`"}, X /* 24*/ {N, 0, 0, 0, "e"}, X /* 25*/ {N, 0, 0, 0, "'"}, X /* 26*/ {N, 0, 0, 0, "o"}, X /* 27*/ {N, 0, 0, 0, "14"}, X /* 28*/ {N, 0, 0, 0, "r"}, X /* 29*/ {N, 0, 0, 0, "12"}, X /* 30*/ {N, 0, 0, 0, "v"}, X /* 31*/ {N, 0, 0, 0, "hy"}, X /* 32*/ {N, 0, 0, 0, "w"}, X /* 33*/ {N, 0, 0, 0, "q"}, X /* 34*/ {N, 0, 0, 0, "/"}, X /* 35*/ {N, 0, 0, 0, "."}, X /* 36*/ {N, 0, 0, 0, "g"}, X /* 37*/ {N, 0, 0, 0, "34"}, X /* 38*/ {N, 0, 0, 0, ","}, X /* 39*/ {N, 0, 0, 0, "&"}, X /* 40*/ {N, 0, 0, 0, "y"}, X /* 41*/ {N, 0, 0, 0, NOC}, X /* 42*/ {N, 0, 0, 0, "%"}, X /* 43*/ {N, 0, 0, 0, NOC}, X /* 44*/ {N, 0, 0, 0, "Q"}, X /* 45*/ {N, 0, 0, 0, "T"}, X /* 46*/ {N, 0, 0, 0, "O"}, X /* 47*/ {N, 0, 0, 0, "H"}, X /* 48*/ {N, 0, 0, 0, "N"}, X /* 49*/ {N, 0, 0, 0, "M"}, X /* 50*/ {N, 0, 0, 0, "L"}, X /* 51*/ {N, 0, 0, 0, "R"}, X /* 52*/ {N, 0, 0, 0, "G"}, X /* 53*/ {N, 0, 0, 0, "I"}, X /* 54*/ {N, 0, 0, 0, "P"}, X /* 55*/ {N, 0, 0, 0, "C"}, X /* 56*/ {N, 0, 0, 0, "V"}, X /* 57*/ {N, 0, 0, 0, "E"}, X /* 58*/ {N, 0, 0, 0, "Z"}, X /* 59*/ {N, 0, 0, 0, "D"}, X /* 60*/ {N, 0, 0, 0, "B"}, X /* 61*/ {N, 0, 0, 0, "S"}, X /* 62*/ {N, 0, 0, 0, "Y"}, X /*from here on are actually code 1-45, upper half of font */ X /* 63*/ {N, 0, 0, 0, "F"}, X /* 64*/ {N, 0, 0, 0, "X"}, X /* 65*/ {N, 0, 0, 0, "A"}, X /* 66*/ {N, 0, 0, 0, "W"}, X /* 67*/ {N, 0, 0, 0, "J"}, X /* 68*/ {N, 0, 0, 0, "U"}, X /* 69*/ {N, 0, 0, 0, "K"}, X /* 70*/ {N, 0, 0, 0, "0"}, X /* 71*/ {N, 0, 0, 0, "1"}, X /* 72*/ {N, 0, 0, 0, "2"}, X /* 73*/ {N, 0, 0, 0, "3"}, X /* 74*/ {N, 0, 0, 0, "4"}, X /* 75*/ {N, 0, 0, 0, "5"}, X /* 76*/ {N, 0, 0, 0, "6"}, X /* 77*/ {N, 0, 0, 0, "7"}, X /* 78*/ {N, 0, 0, 0, "8"}, X /* 79*/ {N, 0, 0, 0, "9"}, X /* 80*/ {N, 0, 0, 0, "*"}, X /* 81*/ {N, 0, 0, 0, "-"}, X /* 82*/ {N, 0, 0, 0, "fi"}, X /* 83*/ {N, 0, 0, 0, "fl"}, X /* 84*/ {N, 0, 0, 0, "ff"}, X /* 85*/ {N, 0, 0, 0, "ct"}, X /* 86*/ {N, 0, 0, 0, "Fl"}, X /* 87*/ {N, 0, 0, 0, "Fi"}, X /* 88*/ {N, 0, 0, 0, "("}, X /* 89*/ {N, 0, 0, 0, ")"}, X /* 90*/ {N, 0, 0, 0, "["}, X /* 91*/ {N, 0, 0, 0, "]"}, X /* 92*/ {N, 0, 0, 0, "de"}, X /* 93*/ {N, 0, 0, 0, "dg"}, X /* 94*/ {N, 0, 0, 0, "="}, X /* 95*/ {N, 0, 0, 0, "rg"}, X /* 96*/ {N, 0, 0, 0, ":"}, X /* 97*/ {N, 0, 0, 0, "+"}, X /* 98*/ {N, 0, 0, 0, NOC}, X /* 99*/ {N, 0, 0, 0, "!"}, X /*100*/ {N, 0, 0, 0, "bu"}, X /*101*/ {N, 0, 0, 0, "?"}, X /*102*/ {N, 0, 0, 0, "fm"}, X /*103*/ {N, 0, 0, 0, "|"}, X /*104*/ {N, 0, 0, 0, NOC}, X /*105*/ {N, 0, 0, 0, "co"}, X /*106*/ {N, 0, 0, 0, "sq"}, X /*107*/ {N, 0, 0, 0, "$"} X}; X Xstruct troff2befont dtSymFont[] = { X/* +-------------------------------- Troff character number X | X | +--------------------------- N: standard fonts X | | S: symbol font X | | D: draw macro X | | X | | +------------------------ X-shift (scaled by point) X | | | Note: positive is right. X | | | X | | | +--------------------- Y-shift (scaled by point) X | | | | Note: positive is up. X | | | | X | | | | +------------------ Point scale factor X | | | | | X | | | | | +-------------- Sequence X | | | | | | X | | | | | | X v v v v v v */ X /* 0*/ {S, 0, 0, 0, "*q"}, X /* 1*/ {S, 0, 0, 0, "*h"}, X /* 2*/ {S, 0, 0, 0, "*n"}, X /* 3*/ {S, 0, 0, 0, "*m"}, X /* 4*/ {S, 0, 0, 0, "*l"}, X /* 5*/ {S, 0, 0, 0, "*i"}, X /* 6*/ {S, 0, 0, 0, "*z"}, X /* 7*/ {S, 0, 0, 0, "*s"}, X /* 8*/ {S, 0, 0, 0, "*d"}, X /* 9*/ {S, 0, 0, 0, "*b"}, X /* 10*/ {S, 0, 0, 0, "*c"}, X /* 11*/ {S, 0, 0, 0, "*y"}, X /* 12*/ {S, 0, 0, 0, "*f"}, X /* 13*/ {S, 0, 0, 0, "*u"}, X /* 14*/ {S, 0, 0, 0, "*k"}, X /* 15*/ {S, 0, 0, 0, NOC}, X /* 16*/ {S, 0, 0, 0, "*p"}, X /* 17*/ {S, 0, 0, 0, "@"}, X /* 18*/ {S, 0, 0, 0, "da"}, X /* 19*/ {S, 0, 0, 0, NOC}, X /* 20*/ {S, 0, 0, 0, "*a"}, X /* 21*/ {S, 0, 0, 0, "or"}, X /* 22*/ {S, 0, 0, 0, "*x"}, X /* 23*/ {N, 0, 0, 0, "\""}, X /* 24*/ {S, 0, 0, 0, "*e"}, X /* 25*/ {S, 0, 0, 0, "eq"}, X /* 26*/ {S, 0, 0, 0, "*o"}, X /* 27*/ {S, 0, 0, 0, "<-"}, X /* 28*/ {S, 0, 0, 0, "*r"}, X /* 29*/ {S, 0, 0, 0, "ua"}, X /* 30*/ {S, 0, 0, 0, "*t"}, X /* 31*/ {S, 0, 0, 0, "ul"}, X /* 32*/ {N, 0, 0, 0, "\\"}, X /* 33*/ {S, 0, 0, 0, "*Q"}, X /* 34*/ {S, 0, 0, 0, "bs"}, X /* 35*/ {S, 0, 0, 0, "if"}, X /* 36*/ {S, 0, 0, 0, "*g"}, X /* 37*/ {S, 0, 0, 0, "ip"}, X /* 38*/ {S, 0, 0, 0, "pt"}, X /* 39*/ {S, 0, 0, 0, "rh"}, X /* 40*/ {S, 0, 0, 0, "*w"}, X /* 41*/ {S, 0, 0, 0, NOC}, X /* 42*/ {S, 0, 0, 0, "gr"}, X /* 43*/ {S, 0, 0, 0, NOC}, X /* 44*/ {S, 0, 0, 0, "*F"}, X /* 45*/ {S, 0, 0, 0, "*H"}, X /* 46*/ {S, 0, 0, 0, "*W"}, X /* 47*/ {S, 0, 0, 0, "cu"}, X /* 48*/ {S, 0, 0, 0, "rn"}, X /* 49*/ {S, 0, 0, 0, "ts"}, X /* 50*/ {S, 0, 0, 0, "*L"}, X /* 51*/ {S, 0, 0, 0, "mi"}, X /* 52*/ {S, 0, 0, 0, "*G"}, X /* 53*/ {S, 0, 0, 0, "is"}, X /* 54*/ {S, 0, 0, 0, "*P"}, X /* 55*/ {S, 0, 0, 0, "sb"}, X /* 56*/ {S, 0, 0, 0, "sp"}, X /* 57*/ {S, 0, 0, 0, "ap"}, X /* 58*/ {S, 0, 0, 0, "pd"}, X /* 59*/ {S, 0, 0, 0, "*D"}, X /* 60*/ {S, 0, 0, 0, "sr"}, X /* 61*/ {S, 0, 0, 0, "*S"}, X /* 62*/ {S, 0, 0, 0, "~="}, X /* 63*/ {S, 0, 0, 0, ">"}, X /* 64*/ {S, 0, 0, 0, "*C"}, X /* 65*/ {S, 0, 0, 0, "<"}, X /* 66*/ {S, 0, 0, 0, "/"}, X /* 67*/ {S, 0, 0, 0, "ca"}, X /* 68*/ {S, 0, 0, 0, "*U"}, X /* 69*/ {S, 0, 0, 0, "no"}, X /* 70*/ {S, 0, 0, 0, "rc"}, X /* 71*/ {S, 0, 0, 0, "lt"}, X /* 72*/ {S, 0, 0, 0, "bv"}, X /* 73*/ {S, 0, 0, 0, "lk"}, X /* 74*/ {S, 0, 0, 0, "lb"}, X /* 75*/ {S, 0, 0, 0, "rt"}, X /* 76*/ {S, 0, 0, 0, "rk"}, X /* 77*/ {S, 0, 0, 0, "rb"}, X /* 78*/ {S, 0, 0, 0, "rf"}, X /* 79*/ {S, 0, 0, 0, "lf"}, X /* 80*/ {S, 0, 0, 0, "lc"}, X /* 81*/ {S, 0, 0, 0, "mu"}, X /* 82*/ {S, 0, 0, 0, "di"}, X /* 83*/ {S, 0, 0, 0, "+-"}, X /* 84*/ {S, 0, 0, 0, "<="}, X /* 85*/ {S, 0, 0, 0, ">="}, X /* 86*/ {S, 0, 0, 0, "=="}, X /* 87*/ {S, 0, 0, 0, "!="}, X /* 88*/ {S, 0, 0, 0, "{"}, X /* 89*/ {S, 0, 0, 0, "}"}, X /* 90*/ {N, 0, 0, 0, "aa"}, X /* 91*/ {N, 0, 0, 0, "ga"}, X /* 92*/ {S, 0, 0, 0, "^"}, X /* 93*/ {S, 0, 0, 0, "#"}, X /* 94*/ {S, 0, 0, 0, "lh"}, X /* 95*/ {S, 0, 0, 0, "mo"}, X /* 96*/ {N, 0, 0, 0, "~"}, X /* 97*/ {S, 0, 0, 0, "es"}, X /* 98*/ {S, 0, 0, 0, NOC}, X /* 99*/ {N, 0, 0, 0, "dd"}, X /*100*/ {S, 0, 0, 0, "br"}, X /*101*/ {S, 0, 0, 0, "**"}, X /*102*/ {S, 0, 0, 0, "ib"}, X /*103*/ {S, 0, 0, 0, "ci"}, X /*104*/ {S, 0, 0, 0, NOC}, X /*105*/ {S, 0, 0, 0, "pl"}, X /*106*/ {S, 0, 0, 0, "->"}, X /*107*/ {N, 0, 0, 0, "sc"} X}; X X#ifdef DT X#include "dt.h" X X#define USED 01 X Xint dtresolution = DTRESOLUTION; X XdtPage() { X pagePending = 1; X} X Xstatic XdoPageStart() { X currentPage++; X pagePending = 0; X printf("p%d\n", currentPage); X} X X XdtSetFont(font, points) Xint font, points; { X if (lastPoints != points || font != lastFont) { X if (!(fonttable[font].flags)&USED) X printf("x font %d %s\n", font+1, fonttable[font].troffName); X fonttable[font].flags |= USED; X printf("f%d\n", font+1); X printf("s%d\n", points); X lastPoints = points; X lastFont = font; X } X} X XdtChar(x, y, font, points, troffChar, sequence) Xlong x, y; Xint font, points, troffChar; Xchar *sequence; { X register int nx = TROFF2DTX(x), ny = TROFF2DTY(y); X register struct troff2befont *rp; X if (pagePending) { X resetState(); X doPageStart(); X } X X DBP((D_BEND,"x,y=%d,%d; font=%d, points=%d, tc=%d\n", X x, y, font, points, troffChar)); X X if (font == 3) { X rp = &be->besymfont[troffChar]; X } else { X rp = &be->bestdfont[troffChar]; X } X X switch(rp->t2b_font) { X /* Only fonts with "N" are subject to font translation */ X case N: X if (font == 3) X font = 0; /* Special chars are Courier */ X else { X DBP((D_BEND, "dtSetChar %d->%s (%s)\n", font, X xlatetable[font]->troffName, X xlatetable[font]->fontName)); X font = xlatetable[font] - fonttable; X } X break; X case S: X font = 3; X break; X case D: X break; X default: X /* Typically used when the R and S fonts don't have the X character desired, so select the font via the index X in the fonts.?? file */ X font = rp->t2b_font; X break; X } X X if (!sequence) X sequence = rp->t2b_charseq; X X if (!sequence) { X fprintf(stderr, "No coding for %d\n", troffChar); X return; X } X X /* We're committed now - the "if" statements avoid floating X arithmetic on slow machines */ X X if (rp->t2b_scale) points *= (.01 * rp->t2b_scale); X if (rp->t2b_xc) nx += points * (.01 * rp->t2b_xc); X if (rp->t2b_yc) ny += points * (.01 * rp->t2b_yc); X X dtSetFont(font, points); X#ifdef NOTYET X if (rp->t2b_font == D) X printf("H%d\nV%d\nc%s\n", nx, ny, sequence); X else { X#endif X /* print an nnc sequence if we can...may even be able to avoid X the newline. */ X X if (lastYPos == ny && X sequence[1] == 0 && X lastXPos != -1 && X (nx - lastXPos) > 0 && (nx - lastXPos) < 100) { X X printf("%02d%c\n",(nx - lastXPos), sequence[0]); X X } else { X X printf("H%d\n", nx); X X if (lastYPos != ny) { X printf("V%d\n", ny); X lastYPos = ny; X } X if (sequence[1]) X printf("C%s\n", sequence); X else X printf("c%s\n", sequence); X } X lastXPos = nx; X#ifdef NOTYET X } X#endif X} X XdtProlog() { X extern char *ctime(); X extern char *strchr(); X extern char nodename[]; X extern char *device; X char buffer[30]; X long curtime; X#ifdef OPT X extern int optimize; X X optimize = 0; X#endif X X currentPage = 0; X pagePending = 1; X X time(&curtime); X strcpy(buffer, ctime(&curtime)); X *strchr(buffer, '\n') = '\0'; X X getnodename(); X X#ifndef NOCHATTER X printf("#Title: (stdin)\n"); X printf("#Creator: %s %s\n", progname, shortversion); X printf("#PsroffVersion: %s\n", version); X printf("#CreationDate: %s\n", buffer); X printf("#For: %s\n", username); X printf("#Pages: (atend)\n"); X printf("#DocumentFonts: (atend)\n"); X printf("#EndComments\n"); X#endif X printf("x T %s\n", device); X printf("x res %d %d %d\n", dtresolution, 1, 1); X printf("x init\n"); X doprologs(); X X} X XdtPassthru(s) Xregister char *s; { X printf("x X %s\n", s); X} X XdtEpilog() { X printf("x trailer\n"); X printf("x stop\n"); X} X X#ifdef INSPECIAL XdtDraw(origX, origY, s) Xint origX, origY; Xregister char *s; { X register int temp, t2; X DBP((D_CAT, "dtDraw: (%d,%d): %s\n", origX, origY, s)); X printf("H%d\n", TROFF2DTX(origX)); X printf("V%d\n", TROFF2DTY(origY)); X putchar('D'); X putchar(*s); X s++; X /* We just pass these thru, scaling them to output resolution */ X for (;*s;s++) { X if (isspace(*s)) X putchar(' '); X else if (!isdigit(*s)) X putchar(*s); X else { X temp = *s - '0'; X while(isdigit(*(s+1))) { X temp = temp * 10 + (*++s - '0'); X } X t2 = temp * dtresolution / TROFFRESOLUTION; X DBP((D_CAT, "dtDraw (scale): %d -> %d\n", temp, t2)); X printf("%d", t2); X } X } X putchar('\n'); X} X#endif X X#endif /* DT */ END_OF_FILE if test 13509 -ne `wc -c <'dt.c'`; then echo shar: \"'dt.c'\" unpacked with wrong size! fi # end of 'dt.c' fi if test -f 'fonts.lj/S.24.pk.UU' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.lj/S.24.pk.UU'\" else echo shar: Extracting \"'fonts.lj/S.24.pk.UU'\" \(14167 characters\) sed "s/^X//" >'fonts.lj/S.24.pk.UU' <<'END_OF_FILE' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 fonts.lj/S.24.pk XM]UD``8``````````!":N``0FKI#0(0```$U(8_E)VRV_3979397939793979 XM3979]-E=E-E=E-E=E-E=E-E=GTV5V4V5V4V5V4V5V?397939793979397939 XM79]-E=E-E=E+4;E;0KE+-;=;)K=+(1:U6Q$FM4L"-K5*\6:S6N%VLTN&L5N& XML4N6L%NFKTNVKEO&K4O6K%OO:K2_:J7`:I3!:H7":G3#:F7#:F3%:D7%:D3' XM:C3':B7':B3):@7):@3+:%RVA,QG7-9DSF5<_V1-%B718DTF%=/Z#5^-9]AM XMA=I-H\*PVR0```!I7"WZ*\2=Z='$U\/,R-/'R,S/R\7/RZIL/1R8PUP7K#Q8 XMQEML/!PXR4EL7!P7S$A<?!M\U67*P)?/15S,!WT41,[`9M)$3/P$;4,TT,`V XMU4)-'`%M<R/3QM<Q34Q-B-7"VFU\':;7P-MMC`VFV<#9;:P-AMO`UVVL'7;: XMPM6-C$U$$]?&TS(]=AP-%"358\#00SU&3`ST1-)FP,Y$31=\#,54SWG`RE9< XMU[P<=83,?!P<5I3)C#P<-K7&C%PZ?!7#C)T<-JK+S\7+S\S(Q]/(S,/7Q-&= XMZ<20/"4```!213WZ-K@==].=&AS^*CS:7-XJ//H=&=-]<0`VK9$)4=D`-J'7 XM?3G1H<_BH\VES>*CSZ'1G3?7&X"PLR8```!21BWZ*\.-J<#"U,"L;0PHRLS` XM$WS<F,-JO&?%;!K$?%7$K";'3'G`;'3)FFR$RIALA,R77)/.E5R4SI1LE,^3 XM7*/1D5RSTL'+32P<L]2\P]6LP]6<T]:<P]>,P]><L]B<H]>LH]>\E-7!R3U< XM')/449R#TU.<=-%DG'/159QTSU><<\YHG&3,:IQDRFP)Q4R6PJQ$QGQ*Q%PW XMQKPUN,G&B1P,S$K&T,+`PM3`PIVH$+"&*@```%(S,_$Q$]\Q7=O;P=EQ?7<W XMU75]-W?1>7SWM\U\%\M\-\E\5\=\=\5\E\-\M\%\U[?/>7T7=]-U?5<WUW%] XMG!V[W9WWWYW;V\'9<7UW-]5U?3=WT7E\][?-?!?+?#?)?%?'?'?%?)?#?+?! XM?->WSWE]%W?3=7U7-]=Q?9P=N]U1/?,0$`TM````4C\%]QH5L=L5L:!6/``` XM`$8U-/@RURUETWT9SZSISYSYSYSYSYSYSJSJSJSJSISYSYSYSYSYSYSYSYT/ XMC3G3G3G3G3G3G3G3G3G3K2K2K2K3G3G3G3G3G3G3G3G3G3?577(0H%8]```` XM1C4T^#(1V%U7TYTYTYTYTYTYTYTYTYTZTJTJTJTYTYTYTYTYTYTYTYTYT_C0 XMG/G/G/G/G/G/G/G/G.K.K.K.K.G/G/G/G/G/G/G/G/G1?376+7"X-T,```!" XM.43\0^(!J\#*P,"LZL"=",#YTFP)TUP/G43`XIU4OCG6.YUDXJG7/MRI`3L! XM'"U^+3S@H+=$````6$U&^T7*,!Y0'/<!KY`8^P`6^R`40:`3,J`20Z`1-*`0 XM\VK>.*W$BPVSJMI*L-D[&MA+&PUSLZUDM*U3M:U$MJTSMZTDN*T3N:T#NZSD XMN[#-.]K,2]L,L[^LI+^PR3P:R$PJQSPZQDQ*Q3Q:Q$QJPSQZPO/)K`/+J^3+ XML+T\VKQ,VPNSSZNDS["Y/1JX32JW/3JV34JU/5JT36JS/7JR\]FK`]NI3;L( XM/=I_`<7P'C\"`0;PH)Y(````4D5&^D3"L-NXU+[/J:RXMHQXNHQ'OGP8P(OH XMPHO(Q(NGR'N(R(MHRHM(S(LWSGLHSHL/C0B?C2A_C4A9U)3XUH/BG6DH<\0W XM@?ESQ#>WYWRGM_<\0WD8<\0W@N*=:3^-:$G4E?C4AITI>-*)^-"+#XSHLHS( XMM(RHMGRGN'R'NGQGO'Q'OHP(P(OHPXNHQIMIR;";#.OM.ZVK#""@J$L```!) XM0$;\1<0@$O0!#VWN*-SBK:XK'8L]<QK7,IUC.M7S2=0UK3\VG2-ZT3B=!(K/ XM.:SSJ<Y*K-.PK-.QG,2QK+.RK+.SG*2SK).TK).UG(.VK'\[><8[BL7SN9Q# XMNJPSNYPDNZP3O*P3O9P$O:OSOJOSOYODOZO3P*O3P9O$P:NSPJNSPYNCQ*N? XM/%FX/&JW/'FV3'FV7&JT;&JRG%L*LL&S;BN;>_"0,$X```!&/4/\0BYL]$QT XM/B3)0N0\LP`;KD.W.LYKVLY#MS`!]N4\U_RT$\LR3)0N;1&X(%````!/1D3\ XM0PMHO4O%K4K'X!V=2<>]*\7!T,&.+1P-$+"J4@```$P_1/I#$!\P($`?2]3$ XM6]C`6MN5O;AKVW>]MGO<6+W$F]M9K<2;VTJ]I+K;.[VCP+V3P;V$P:V3P;V# XMPKUSPZ`9L!FP&?L!FP&;`9H!FP&;`9^P&:`:@!SV`>0!Y`'D`>0!Y`'D`>0! XMY-D\9-H\5-L\1-M,--P\0]T\,]X\)-U,%-Y,!-]+3?6D`02D`064`0:$`0=T XM`0ADWZ5-[`1-K%/P'S`@0!\PL%Y3````)R8W_"O*O+QL;*PHE\!\-*;'*ETV XMTVTVTVU%U%U/74XEU&U/75XFU/?3C2G2G1O0P,_!SL+-P\S$S,3,P\S$S,/- XMPL[!S[T9THTWU.)M1=1M1<M%7,P<Z])L,+!C5````%)%1?I$J-6,7"S\+!Q, XMW$O'R<><G'R7R\7+7-P\U,[!SC>KNZ<EPIN<)23%B8Q4%,=Y?'?\EW?);*=7 XMRFRV5LL\YS<!GV-@&U-0'.)A8!U14![CL!_M>0'[`<PP$>+5QK"/50```$P_ XM1/I#P^+4W,(!>@&N>`&,,!#+V-/2LH.\Z6AYRIB)G'BHN,2;C`G!C!C"BYP8 XMPIF<*,.7^<.,25^<2,63K$C%HIQ8QI'GK%C&H9Q8QI*L2,6C^<2,65^<.,27 XMG"C#F9P8PIN,&,*,&;C`G$BHN,>8B9RI:'G.LH.]+3V,L!##`7YX`:H!?"W. XM+4Q`H(A7````4D5$^D.WXL73L]Z@$>:,6+J+NYN(N;RWBXL4FVBWF9M8MIL/ XMBUBVBRXHM(M8M.L(LXM(MGLXLXM^*+*+.+A[*+-[F+&+*+F+&+)[M[&+)[N+ XM"+%[U["+%[YZBP>_B8J,!YB8PGB(C$=X>,:%AHR).$C,MQK/OM.YVK$!#G@! XM&MZST^+%N+"@6````$Q!1?M$SL$!3)W<_7N[TJQ:SYR9S)S9R9SYQITYPYU9 XMP?G7FYV9GYVY?YW97ZW:2=^3YZWZ.=^4XJW:7YW9?BG;F9V9OXV8P?C7C#?7 XM?$C5C%?5?';5;(?3?);3;+]M%LU=%<]<]<([7/6VP$STP&P%S5P#\3P$S4P# XM+SP4RTP3),$\L\%#/!/+/!-$P#RSP$3CR,G(7\?)QVQ\K&.HMUD```!834;[ XM0P;_$"`_`>7P''K=.+#;2:VSL/K9.RK7.SK62TK5.UK42VK3.WK22XK1.YL, XM]+JL\[NPS4O*S3O;#+2^K+/`^LD\*L<\.L9,2L4\6L1,:L,\>L),BL$\FPOT XMRJOSR["]3,J]/-L+M,ZKL]"KD]&KA-*K<].K9-2K4]6K1-:K,]>PL4V*L3V; XM"DVJH]NPA-RH/>^F,!"D,!&C0!*B,!.A0!3[(!;[`!CY`:]P'%`>/*"PM%H` XM```X-T?\1<^=[%V&EM5,)M%,9<],ALQ,ILI,QLA,YL<\]L9-!L5\U\.<UL/B XMG-?"^,]\)=%P%'`4Y(T1Q8RL&YQ\:9Q<IYPXP%:<&,1%G`C&0ZM\DSFWRS*9 XMC-(IB,[!>,_`>="WC1MHTK7YTJ6=.EG3E:TY6=25^=.5K3AITY;YTX>=*(C3 XMB/C2B8T8J-%[C0?!?0?!C.?#?-?$?,?&?*?(?(?*?%?-?"C/B9T\K7Q=V]*@ XMBEP```!2/U3W00$#WVW(VJV+#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L- XM>PU[#7L->PU[#7L->PU[#7L->PU[#7L-BMJ-RMNPV[#;L-NPV[#;L-NPV[#; XML-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;K<C>8!`P`\<! XM(0DA`2&@B5X```!2/U3W01,!!MZ-RMNPV[#;L-NPV[#;L-NPV[#;L-NPV[#; XML-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;K<C:K8L->PU[#7L->PU[ XM#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L->PV*VHW& XMWS`$`0$A"2$!(=@*7P```#(R!0#I#\"PD6$```!$.BW\*\N0$</=Q]F6C5BW XMTWPGPDM\1\%)C&;!.8QWP#B,EZ1_C*>C>,N(1IS'@WC-=T:<UW-ISG9&G.A3 XM><Z$1ISX0WG/@T><^#-ZSX)'G1<4B=%Q.9T;F=&J^-*;C2C`XXTGPGT)PGSZ XMPWS;PWRU)X)7R5-W-GQ65W-WPG=F2(B:9$K)PL#!Q<6L6LMGH.9B````.SM9 XM_D7.C4M,^XRX=\AK)L9;5L1+=L);EL!;IK];M[U;Q[Q;U[Q+Y[M+][I,![H\ XM"+E,![E,%[D\)[A,&+@\)[A,)[@\)[D\%[E,%KH\%[H\![I+*P)[L[&YO?.P XMN;U+"[NSL[`WNCP8N3PGN$PWMSQ'M_/$BU3%>U/&BT\\6;-,6;/B/&FR3%JR XMXCQILDQ:LO3%FS3$FS7$FS7$BT7#FT7#BT?!BU,3P)M3%+^+8Q2^BV0DO(MS XM1+J+@T6X>Z-6M(ND=K"+PYN[X["WP#LK+"3<XCW$W.(]Q-SB/<3<XCW/3<"@ XM@6,````V.$#_*[:-.QODL;:\2PN+I*N[DZO;=)O[8YL&L+1(BRBT.'MGLDA; XMEK(X6[:Q-UO5L$=+]+`X/!24=,%).#PSA(/#1SA,-&30\V/11$T40],S33\S XM/4,DU#(]4Q35\Q/6?6XFU_78XDV>(]GTV3V>--CB3878XTV.--D]HKRPEF0` XM```O*T?\1<^-3!T,7-=URVM,AL),9L0\9<5,1L8L3VV.-MA]CXV(UZU;U;U, XM#4P=3`U,#4P-/!S\7,R,ITK(AJQGF<5[G"C!C!C#?!C$;`C%:XQVF<=IC)6) XMR5?BG*1^*<M&K*1^*<M'G*2/C+2/C*2?C)2HR$P'R$P'QTP8Q5PGQ4Q'PTQ7 XMPDQWP$R8A<S&S\/2O)"P0V4````K(RS\*LK`R,3$QL.<R,Z,V,Z,Z,Z,Z<V< XMZ,[YS?G-K-_1;0:LWFG/XHT/?0C0?1?1?'&7Q$E\%JB'PLC%P\N;L'IF```` XM+BQ9^T3.YCW3*M'%S\;-Q\O(RU2LM=I=I=I=I=I=I=I=KUVEVEVO7:7:]=KU XMVO7:]=IMKUVFVN)=IMKC7:Y6VO?:;:]]F-F-B=>];`U<+3Q-'&S\C-RLS)SL XMC/QM'#U,'6K8C9?:XVVO7,.US5E<YF70P].]AL7`BV<````U,4#]*X;5G1K1 XMT+T*U(1'=G=S9F6G5&<UT'0W<ET7-(84U&,Y84U'(XO5<4BM9Q.9UW$YC8N) XMU[^8V'T'V7SXV(SWV7SXV(SWV7SXV(SWV7SXV(SWV7SXV(SWV7SXV(SWV7T' XMV(T&V8T&V7TCVW`<^`'/<!SX`<]P'/@!SW`<^`'.)P'6`?/2L*9H````,2M' XM_$7.?6O2P\YU;,:%RVELEK;';`;&?`?$?";#?#;"C#?!?$?`?%>XQ7M\9ZC& XM>GQWF,>'G'AXR(:<B&C(GUG(E8R86<F%^<B4^<F4G(HZR)2<F4_;/;3YR92< XMBCK(E/G)E/G(E8R97XR):,B'C'EXQXA\B(]\>)]\:*?%BWQ7P'Q(P6Q'PFPW XMPWP7Q6P6QFP&R%MLEI;+9VS61\_"TKUGS\!*:0```"4;+?HKP]EM?B?6C6XG XMUHUN)]:-;B?6C6]]:-;WUHUO?6C6]]:-%/%](QC107TC)]%"?00VT4-M!$;$ XM5J5GA896O2T,U'T@L(UJ````/3,M^BO`,!)LML-\F<)\;!P7Q<+`C#4IP(PD XM2,%\%5C!?`1WP8M)3#BDT7E=)X33ATU(5=5U37<UUX%MC!VLC3S,[/S(G`RG XMP:R7PYQXQ)QHQ8QO?'?%C'>T*,=[,_?(>S*,AZ0HR'HS?):S-\EJ0HR6HSC) XM>$-\IW1'RV<U?,9%5L[!9L^I/46@L(1K````/3)&^D3`?>O<P-VM[YWIWOC? XMXHW_C>G>^-Z=[XW^*-_XWIWOC>G>^-_BC?^-[YW*V\#9P=A1C74XU52-15C3 XM5XT5B,]XG->HS'N,M\"<E\*,A\.,=\6,5\:,1\>,.,B,&,F,",J:C,B8S8B, XMZ6C0A8T82=*"G3@HU)%]:!;8@4VGH)]L````/SA`_"NV/8:]2Z>\:Y][M[B+ XMJ+B+I[GWNWN(NHN(NGN?>[>XBZBXBZ>Y][M[B+J+B+I[GWNWN(NHN(NGN?>[ XM>XBZBXBZ>Y][M[B+J)-XNGE'BZ>3A[MY-XNHDWBYF#B;B).)MYDWJVJ$>PM$ XM%H.+"S0G9(L;!3=4BT=E<UB_BRESL[&J=IM6L/C5]]7XU??5^-7WU?C5XGUF XMV#V0L'AM````-#$L^RNGT#3#S6+#S7/"S7F,UYC,CY?->GS(I\QZ?->O?,>W XMRXI\Q[]\M\!\I\!\J,!\I\%\E\)\A\)\B,)\A\-\=\1\9\1\9\5\5\9\1\=\ XM-\=\-\A\)LI\!\M[?+>VS7E\YW?0=FT71]-R?5PM?`V*W%WPL(AN````+BM9 XM_43-YCW,//QLO)Q\S&D<+%E:QIU9U9U9U9U:U9U:U?G5K5YIU_G7G7DL#)S, XMC+R<K(RL=CP<A=E=E=E=E=E=GUV5V6V?79XEV>-MGWV(V(UZU<#4P=/#T<7/ XMQL[(S<G,RLS)S<?/Q=##T\'5K7C8?9;9]<H\!<M*;+A6SL31P-9\(,!N;P`` XM`#,M+?PKVI`4TM[7VI>-=\?4C1?2?4?(U8J-=Y^-B'C:=HVX2=N$C<@YW(*= XMV/*=R?&=V1G<U]R1^=V1G<H9W)*-V2^-R3C<A(VY2-J5C:AWV8B->*?7>WUG XMT'TXTGT8U'N->'C;UM_2`4G:L'IP````/3@L_2K!WL`!&0$X`4<!5@%'>CL\ XMEL`[/(7!2SR$PCM,=,,[3&3#2SQSQ$L\9,0[3'+$2TV?2TV$P$V/2UUUM==, XM!=;B7`757!757`;4]L!M1<%M/VP7T?;"?0]\-\Y\1\Y\2,R,2,Q\6<M\:,M\ XM9\QLALT\L\6PCW$````V,$#\*]&-G"U,;1=GSGE\QL!\IL)\AL-\=L5\5L9\ XM1L=\-\>,)LB,%\B/P'R8M\J+?)FHR9^GRII\FIC)FO?*F8R:F,F:?*FGRHJ, XMF:C)BWR9M\F+^,B,",>,&<6,&L2,*\*,-Q3`C$<DI\6"9HQH/%R';!RGB,SX XMW/?<^-SWW/C<]]SXW.)]UM\P$+!Y<@```#PW+/TJRM3(V,7:P]S"W<#=P:BL XMZ<"<R,1\N,6,F,=\B,A\A\IL=\M\7WS'Q/?-?#C-?#?.?#?-C"C-?#]\Y\-\ XMV,*,U\-\Y\-\V,/WS7Q6S'QFS&QVRWQVRGR'R'RFR&RVQVS6Q'SVPGT6P&U' XM>-;'VL/?C7"@2',````O,BS]*K+)L<R<Z,]]!L]WLCOVLTOEM4ODMDO4MTO$ XMMTO3N$O$N$O2N%TETDTN-='B71]M%='C;0XFT.)\_C?/?1;2/$"PBW0````Y XM,RW]*[703`K,>,'*AU1LBE1FR*1(;'I#EL>C26QZ))?)CR.GRG%)C+;Q.GS9 XMF,U!.GSDPGSDP8SDP7SSP8SSP7T#P7STP(SSP7T#P7STP7SSP8SDP7SSPGSD XMPGSCPWS4PWS3Q'S$Q'RTQ7RSQGRDQGR4R'QTR7QDRWPUS7P5SYAM+'UL/;G* XMH,YU````/S99^T3*\]?TU_/7]-?SU_37\]?TU_/7]-?SU_37/1M<B[P[^_A3 XM9[QX.'N'E)>V>DI[-[$[%[%[([)K![)+-I>S2S:'M#M'9[4[5EBT2U='M4M7 XM\WMCMG\GMDMG\7MSMW%[9+:UMDMG'WMSMW%[9+:!>V2V<GMCMH)[8[9S>U2U XM@WM4M71[4[5V:U.T=VM$M'=[-+-Y:S.S>GLCLGL6L4L6M&L$I[9J.GN'@WB[ XMA46+^_P[O(M-'TU_/7]-?SU_37\]?TU_/7]-<\F@M'8```!!.4#\*X?5L<HE XMM,<T1)Q4-&G#1#>L%$2)P$4ZF^2XF]2ZB\2[FZ2]BY2^FW6_BV7`FU3"BT3# XMBS3$FQ3&BP3'BDR8A,J'3+ADS81,Z#3/@ET(%-&QTK#4G5^-?XU9U+#2L=%! XMC04HST.,Y$C-1HRT>,I(C)2HQTL(QDL9Q$LXPTM(PDM9P%MHOUMYODN8O4NI XMNTO(NDO9N$OIHU3`F$1,&G-$PY9#3%E$0\>T4LJQU7B@]W<```!%/EG]1-'S XMWTW^(]]-_B/?3?XCWTW^(]]-_B/?3?\\5;L[-+&K=+)XLK8[*'5&M3L:5&:U XM.QI$AK-+&D.6LSLJ-):S.RHDE[,[2".GLDM7(Z>R.V<4F+([=A.GLSN%$Z>R XM2XF8LCN4$Z>S.Y2S>S.Y2RBR2Y2R>S.Z.RBS.Z.R>T.Z.R>S2Y2QBS.Z.R>T XM.Z.R>T.Y2R>S2Y.RBS.Y2R][0[A+-[-+=+1[,[=+5[,[<[9[,[9+9[)+5+=[ XM([5+E[$[1+I[$[-+QZ2Q6]B3L5OX@Z7"ECAL6P%%?)O<ZXU+'93?XCWTW^(] XM]-_B/?3?XCWTW_/*H*!X````0CPM_BO:2R+->DRXH\NH3+ITS*<\VF3-I4T( XM5-%T32=#U&--1C/64SUD-+P[Q#.\6[0SNVNT)+MKLS.\:[,SNWNS,[MKM"2[ XM:[,SO&NS,[MKM#.[:[-#NVND0[M;M$.[6Z13NTNE7TN5N59+AKA76VBV6%M9 XMM'AK*QLGE["SJ+"5D96K&\*[LKL[JTN5N+:V>WN+2;2[L;&QOWMWND`->0`` XM`!D$8_9)$A#_$A"P17H````M'F/Y2<U<I,Q,Q,U,U,U<SUS4S>T5S4S?7,7, XM7-3,7,3+7)71703/7/3.7.7.]<Y,[M%<Y,[USESDSTSTT$T$T5"X17L````M XM'F/Y25T5T$SUSTSESESO7.3.[17.3.]<Y<Y,],]-!-!-%<I,Q,Q,U,U,U<SU XMS4S>T5S4S?7,7,7-3,7,3+7)7-"P9'P```!212_Z+\)P$AP,'>.<7<.,C:-L XMO9-<[61-#50[?!TT.,&]%2?%K04FR)SE)LJ<U27-G*8ESIR&)="L5R71O!@T XMT\%[--701-;.4]G+8]K(@]S%D][!P!`2<`3-`G$+,0)QD!Q]````4D4O^B\= XMD0E1V0!!C9$)4=D`08V1"5'9$+!Y?@```"TB8_M)$M/TTETO3272]-)=+B32 XM72]-)=+TTETO3272]-)=+TTETN)-)=+TTETO3272]-)=+TTETO3272XDTETO XM3272]-)=+TTETO3272]-)=+B3272]-)=+TTETO3272]-)=+TTETN)-)=+TTE XMTO327])-,A"0OG\```!214CZ1:.+&*VEJ:6HJ:6II:RAK*.NFNH8B@>@B)>C XMA8HWAJ9S>F9VJ'%ZAE:J86JF1:RAK%1:V:U3:MFM8O6O>O46L%L*'[%;&@LC XMLJ#FT:'/;B%<]2;-8US51LME7+5FR6=<E8;':6Q6H?;#:C;!:E:_:G:]:H>[ XM>I>Y>K>W>M>U>O>S>Q>Q>S>O>U>M>W>K>Y>I>[>G>]>E>_>C?!>A?#>7Q7=\ XM=G;)96RV-LWV%L^AT?G3]]7UUSMPL#NA````-258^$3&+6\]5=/WT9S[S<', XM,5$\LR4CR%)27%4U-<-%54P%9665=756E986I:K`7`3@)\1=4\5P-Z(```!I XM7"/Z*<`M+STO/2/131/2/131313170715M`PO!T,U<U<Y<Y,],]-`]`]!-`] XM#ST//1**L#NC````-258^$3%/5X"=<1,!<"J6F%I66575UE65EP$553#4U-< XM524ER#)2/+,5$\S!S;SYT??375\]<L5P.:0```!I7"/Z*8HM'ST//0/030/0 XM/03/3/3.7.7-7-T"!?'3/09=%=!=%-%-%-$](]%-$]+STO/2+`"PA*8````U XM+C7],A/>;<?;G9O7P=7"U%&M)3K059SU:LU8K+6IRENLA<&L9<.L1<2L-<:L XM%<BK7*FERZA<VF7/I%T*-=*A74PM;`U,+2H5T*-<^D7-IERZA<J:7(JUQJP5 XMQ*PUPZQ%P:QENLA:G*6*RU:LU5G/4ZT%&M+"U,'5O7G9?;;=/>"PA*@````U XM+C7],MX]UMM]F=>]7!U,+2H5T*-<^57-IERZA<FJ7(JUQJP5Q*PUPYQ5P:QE XMNLA:G*6*RU:LU4K/4ZT%&M+"U,#6PM11K24ZT%2L]6K-6*RUJ<I;K(7!K&7# XMG%7$K#7&K!7(JUR:I<NH7-IESY5="C72H5U,+5P=>]F=M]QMXQ#8"K`````R XM,@4`2P_`L#NU````1CD\^CH3`5,>W5`3L!%A4!%2;?8UWU1MUE;;9GV7>-6) XMC3BYSYP;R;Q,'!P<?9RM7/S]7)W,'*"P.[8```!&.3SZ.LK!W,G5S\_5RMG' XMP<'!Q+R;P9SYN-.)C5AWV79MME;=9%WU-M]B4!%18!&^W0$U$P%3$*!AMP`` XM`$8S/_<WO[V\PKC%ML>TR+2QRJS9SHSXSWT'T6T6T6TETFT6TETFTO72;2XE XMTFTO73UQ"@'UTVT^)=-M/UTVTUTVTVTUTVTVTVTGTGTHT8T9T*T+'-R+?'N, XM6[PK^]&@6KH```!2/S_W-[_)O,ZXT;;3M-2TL=:MF=J-N-M]Q]UMUMUMWVW6 XMWEWFWO7>;>XEWFWNA=]M_B7?;?]=]M]=]M_VWVWVWVWGWGWHW8W9W*W+'9U+ XM?3N-&[SK_)&@6KL```!2/S_W-QR;_.N]&XT[?4V;'<K<G=C=C>?>?>;?;?;? XM]M]M]=]M_UWVW^)=]NC?7>;BWEWFWO7>;>7>;=]MUMUMUMU]Q]N-N-J=FM:Q XMM-2TT[;1N,Z\R;^09;X```!2/U3W0;"ZK;^IPJ?$I<6EHL>@RIRXS(S'S7SF XMSFSFSO;.;/7/;/]<]L_B7/;/Z%T&T.)=!M#UT&T%T&T/;0;0;0;/?/?/C.C. XMG-H,VBRL6HQ*G"K+^PN@`[K132+3/2/1$)!DOP```%(_5/=!&ZL+^LPJG$J, XM7*HLV@S9SHSHSWSWSVT&T&T/;0;070;0]=!M#B70;HT%SVXL]<]L_USVSUSV XMSO;.;.;.;.?-?,C,C+G*H,>BI<6EQ*?"J;^MN@`]'1/2/3+231.@$L@```!& XM.1SZ(QW!"`'=ZZV5VC&P-LP````U*"GZ+,2-#$RLC&S,/.P="]*?U'UE_8/B XMVA`!G.(=H_V%UG_4G2O0P<[#S,;(RL30C$"`T<T```!I7%KZ1:Z5T)_(I<*K XMO:^YEI66M9.?D[&2I9*ND:F1K)"MD*F0L9"FBUBDBWBBBYB@>]>>>_><?!>; XM;#::;%:8;':6]LEI1LMI-<U9)LUI!L]H]=%7;19ETU5M-D]=53;58N-==1;7 XMDNDMF2UVXQ774FU6/UU51M-E735FT6?UT5AL]I!LUI)<U9-LMI3VR6EFQVF& XMQ6FFPVFWP7G'OWGGO7H(N8HHMXI(M8II"QD*F0K9"LD:F1KI*EDK&3GY.UEI XM66N:^]J\*ER)_0E:X+`LS@```"\C6OI%Q#TNE]'F73Y3QF@X8K4U!C4ULF@X XM;&XST^1='L]]'L-=/E/$L$S/````+R-:^D7$/2YWT>5=/C/&:#ABM34&-36R XM:#AL;C/3Y5T>=](P)STN=]'D73Y#Q98VD<$S,$0S/!&6-I0<`\`<?C/3Y%T> XM=](\0+!KU0```"PK6OI%U%V)U<#25$T59,]67/5(XLU4G,9)S%6<Q6?-6#SN XM)MGUV>1MA]CD;8XWV&V.5]>-?E?7C7Y7V&V.-]CD;8?8Y&V?79XFSCA<UV7, XME5S)1LSBE%S81<]67/1ET41=+`U9V%U`P,+8````-2I2^TH!(P&>)0%VVX1= XMG1%=?9U8:=5L;4;0?272C0;2G%TYM=.Y;346A=126%TV)7;34V9=1456TV1D XMXFTU5C?297+VTU=B;29V+VTEAA?1:-'BT5G1T&G1_06M'&K1XL6]&VO1^US1 XMILT?I=#1EM#1XI71T8;1?Q:%TF)G;28O=ETG)U;2<^)E7396-M)F]C739U)M XM-885TVE1736ZTER=)M"-%M)]!M1L;5EHUMC7U]E4C<4!=@%^)0&3`2"1-=D` XM``!:3UK[1;>CU*O-L<BUQ**AHL"@J:"]BOBZBSBW>W>U:[:S:]:Q7!6O7#6M XM7%6K7'6I7)6H3+2G7+6E7-6D3/2C7/6B312A716@3325TUA-5'755DM8L$9+ XM-%.N15L3H2K%1+!*,JQ$2O2E*K0UKDIRJE)*Y:<JM"2M6I*J0DK4JBJD)*Q: XMA:E!6K:G:IGZQ:AJJ*MJAJJ*MJE*N*M<..BJ;#FI;"44J6PD)*I<)"]*IL%" XM6J7`4TJEK2IT1*IJPJ=$6J6K*G54JTJRIT9*M:H:A&6K6H*G5TK$J!J$A:Q* XM8:A92M2D&I2@6N.A*I6A2O1RJTHEL8K%HTSTI%S5I5RUITRTJ%R5J5QUJUQ5 XMK5PUKUP5L6O6LVNVM7MWMXLXNHKXO:"IH,"BH:+$M<BQS:O4H[=`$=H````W XM+"W[+!=1T^;V_3%U$(@,X````%`;8]Y(#K[>EX@-X0```%`;8]Y*[>DI<.#` XM.^(```!0'6/>2-Q-IME]B->-:=:=:=:=>->->=:=;YUIUOG6G6^M7ZU>*M7Z XMU;U>*M6]7ZU>2]6M7@++U<!)XP```%`=9?!*U>W[XM2]3[U:U;U:U:U:U:UI XMUIUIU:U:U9U9UIU*UGV5VWV:V9V)V9V*UZV)V)V)UZUZUZUZUKUJUOO6XKUN XMW[#(.>0```!0'6/>2N`LO6K6Y+UOK6O6XJUKUOK7XJU_K7^M>=CYV)V/G8G8 XMG8C9C8G8G8G8G9C9C9?:;<2(#?````!0&V/N2`X.WI>2@`SQ````4!MC[DJ7 XM[>#KR#GR````4!UC\$A-QMI]F-F-F=B=B=B=B-F-B=B=CYV)V/G8G7^M?ZU^ XM*M?ZUKUN*M:];ZUN2]:M;@++R$GS````4!UEWDKM^];BO6^]:M:]:M>M>M>M XM>=B=B=BM>MB=F=B=FME]M=E]:M2=:=6=6M6M6=:=:=:M6M6M6M6]6M7[U.*] XM3M^]4,`[]````%`=8_!*U>`LO5K5Y+U?K5O5XJU;U?K5XJU?K5^M:=;YUIUO XMG6G6G7C7C7G6G6G6G6C7C8?9;:3<V`OU````4`MEWDH`19"8"O8```!I:`,` XM&P_@@&;[````:5PY^C2J3>]=U=UMU=U=UMU=U=UMQMQMQMQMS*G\R=SIO/F= XM"9?:C:C9C8D=>1U9/4E-:2V)39D]N1VY'<C=C<C=?=T)S/G,Z=S)_*H6WFWF XMWFWFWEWUWFWEWUWFWEW_7?2\V`O\````-RPM^RP`>^"`9OT```!I7#GZ-+Q- XM_UWUWFWEWUWFWEWUWFWFWFWFWFH<J?S)W.G,^<T-U]V-R-V-R1VY';D]F4V) XM+6E-23U9'7D=B-F-J-IYG0F<^;SIW,G\K<;<;<;<;<;=7=7=;=7=7=;=7=]= XBY*J0&_X```!214?Z1+<]?K5;?9$)4=FWZQ6WV1"5'9'U]M7= X` Xend END_OF_FILE if test 14167 -ne `wc -c <'fonts.lj/S.24.pk.UU'`; then echo shar: \"'fonts.lj/S.24.pk.UU'\" unpacked with wrong size! fi # end of 'fonts.lj/S.24.pk.UU' fi if test -f 'lib/lethead.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lib/lethead.ps'\" else echo shar: Extracting \"'lib/lethead.ps'\" \(973 characters\) sed "s/^X//" >'lib/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: 2.1 Copyright 90/07/18 16:52:18 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 973 -ne `wc -c <'lib/lethead.ps'`; then echo shar: \"'lib/lethead.ps'\" unpacked with wrong size! fi # end of 'lib/lethead.ps' fi if test -f 'lib/ps.lib' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lib/ps.lib'\" else echo shar: Extracting \"'lib/ps.lib'\" \(11215 characters\) sed "s/^X//" >'lib/ps.lib' <<'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.lib X% Author: Chris Lewis X% Specs: Predefinitions for PostScript X%ident @(#)ps.lib: 2.2 Copyright 90/10/12 13:15:42 Chris Lewis" X X/Y { 3 1 roll dup /CurY exch def moveto show } bind def X/X { exch CurY moveto show } bind def X/hits 0 def X/misses 0 def X/pagecount 0 def X X/drawfraction { X /denominator exch def X /numerator exch def X /origY exch def X /origX exch def X origX curPoints 4.7 div add origY moveto X (/) show X curFont findfont curPoints .5 mul cvi scalefont setfont X origX origY curPoints 3 div add moveto X numerator show X origX curPoints 2.5 div add origY moveto X denominator show X curFont findfont curPoints scalefont setfont X origX origY moveto X} def X X/mySetLineWidth { X curPoints 3 72 div mul setlinewidth X} def X X/do12 { X (1) (2) drawfraction X} def X X/do14 { X (1) (4) drawfraction X} def X X/do34 { X (3) (4) drawfraction X} def X X/doff { X moveto X (f) show curPoints 20 div neg 0 rmoveto (f) show X} def X X/doFi { X moveto X (f) show curPoints 20 div neg 0 rmoveto (\256) show X} def X X/doFl { X moveto X (f) show curPoints 20 div neg 0 rmoveto (\257) show X} def X X% This should be sort of a font-caching mechanism - eg: X% remember each font/point combination requested, and X% if the setting is not already known, *then* do the findfont/scalefont. X% Otherwise, simply retrieve it. X% However, even with simply recalculating the font each time, it X% isn't *that* slow. Eg: 20 seconds or so for *very* "font-changy" X% pages. X% X% Trial font cache - I can't think in Polish... ;-) X/SetFont { X /curPoints exch def X /curFont exch def X % Concatenate the curFont string with the curPoints to create X % a new name and assign to cF X X /cF 50 string def X X cF 0 X cF curFont cF cvs % cF 0 string "curFont" X length dup % cF 0 "curFont\0\0..." N N X curPoints 10 string cvs % cF 0 "curFont\0\0..." N N "points" X dup length % cF 0 "curFont\0\0..." N N "points" M X 3 -1 roll add % cF 0 "curFont\0\0..." N "points" M+N X 4 1 roll % cF 0 M+N "curFont\0\0..." N "points" X putinterval % cF 0 M+N (cF <- "curFontpoints") X getinterval % "curFontpoints" X X /cF exch def X cF X cvn % /curFontpoints X X where { X /hits hits 1 add def X pop X } { X /misses misses 1 add def X cF curFont findfont curPoints scalefont def X } ifelse X cF load setfont X} def X X/metrics { X /psize 16 def X /Times-Roman psize SetFont X /charcount exch def X /curpos 720 def X /xpos 72 def X xpos curpos (Execution Summary:) Y X /curpos curpos psize sub def X xpos 36 add curpos (Font cache hits: )Y X hits ( ) cvs show X /curpos curpos psize sub def X xpos 36 add curpos (Font cache misses: )Y X misses ( ) cvs show X /curpos curpos psize sub def X xpos 36 add curpos (Character count: )Y X charcount ( ) cvs show X /curpos curpos psize sub def X xpos 36 add curpos (Page count: )Y X pagecount ( ) cvs show X /curpos curpos psize sub def X xpos 36 add curpos (Execution time (seconds): )Y X usertime btime sub 0.001 mul ( ) cvs show X showpage X} def X X/docircle { X /origY exch def X /origX exch def X /radius curPoints 3 div def X newpath origX radius add origY radius add radius 0 360 arc X mySetLineWidth X stroke X origX origY moveto X} def X X/doru { X moveto X 0 curPoints 5 div rmoveto (_) show X} def X X/do34em { X /origY exch def X /origX exch def X /emheight curPoints .23 mul def X newpath X origX origY emheight add moveto X origX curPoints .75 mul add origY emheight add lineto X mySetLineWidth X stroke X origX origY moveto X} def X X/dosq { X /origY exch def X /origX exch def X /L curPoints .8 mul def X newpath X origX origY moveto X origX origY L add lineto X origX L add origY L add lineto X origX L add origY lineto X closepath X mySetLineWidth X stroke X origX origY moveto X} def X X/dobox { X /origY exch def X /origX exch def X /L curPoints def X newpath X origX origY moveto X origX origY L add lineto X origX L add origY L add lineto X origX L add origY lineto X closepath X 1 setlinewidth X stroke X origX origY moveto X} def X X X/fourpops { X 4 {pop} repeat X} def X X% These are macros so that they can be redefined. X% print current page. X/ShowPage { X showpage X /pagecount pagecount 1 add def X} def X X% Emitted at beginning of page. X/StartPage { X Form X} def X X% If you want to define a Bell System Logo, go ahead. This X% one draws an animal (ferret) face X% Object should be scaled off of curPoints, with origX,origY X% lower left coordinates. X/BellSymbol { X /origY exch def X /origX exch def X /TEMPSAVE save def X X /Radius curPoints 3 div def % Face Radius X /HRadius Radius 2 div def % Half Face Radius X /NRadius Radius 6 div def % Nose Radius X /ERadius Radius 8 div def % Eye Radius X /EarRadius Radius 3 div def % Ear Radius X /FaceType (Ferret) def X X /MRadius Radius 4 div def % Mask corner radius X /TopMask Radius .7 mul def % XCent & YCent max delta X /BotMask NRadius 1.1 mul def % YCent min delta X X /XCent origX Radius add def X /YCent origY Radius add def X X newpath X % Main face X XCent YCent Radius 0 360 arc mySetLineWidth stroke X % Nose X XCent YCent NRadius 0 360 arc fill X % Left Ear X XCent Radius 45 sin mul sub X YCent Radius 45 sin mul add EarRadius 20 250 arc mySetLineWidth stroke X % Right Ear X XCent Radius 45 sin mul add X YCent Radius 45 sin mul add EarRadius -70 160 arc mySetLineWidth stroke X % Cleft X XCent YCent NRadius sub moveto X XCent YCent HRadius sub lineto X mySetLineWidth stroke X X % Mouth X XCent HRadius 45 sin mul sub YCent HRadius 45 sin mul sub moveto X XCent HRadius 30 sin mul sub YCent HRadius sub lineto X XCent HRadius 30 sin mul add YCent HRadius sub lineto X XCent HRadius 45 sin mul add YCent HRadius 45 sin mul sub lineto X mySetLineWidth stroke X X FaceType (Ferret) eq { X % Mask X .6 setgray X XCent TopMask sub YCent BotMask add YCent TopMask add add 2 div moveto X X XCent TopMask sub YCent TopMask add X XCent TopMask add YCent TopMask add X MRadius arcto fourpops X XCent TopMask add YCent TopMask add X XCent TopMask add YCent BotMask add X MRadius arcto fourpops X XCent TopMask add YCent BotMask add X XCent TopMask sub YCent BotMask add X MRadius arcto fourpops X XCent TopMask sub YCent BotMask add X XCent TopMask sub YCent TopMask add X MRadius arcto fourpops X fill X X 0 setgray X } if X X % Eyes X XCent HRadius add YCent HRadius add ERadius 0 360 arc fill X XCent HRadius sub YCent HRadius add ERadius 0 360 arc fill X TEMPSAVE restore X origX origY moveto X} def X X% bracket building font X%! X% X% Michael Rourke, University of N.S.W., Australia X% X/BracketFontDict 9 dict def /$workingdict 10 dict def XBracketFontDict begin X/FontType 3 def X/FontName (Bracket) cvn def X/FontMatrix [ 0.001 0 0 0.001 0 0] def X/FontBBox [ -50 -250 1000 1000 ] def X/Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for XEncoding Xdup 65 /Cbv put %A Xdup 66 /Clt put %B Xdup 67 /Clk put %C Xdup 68 /Clb put %D Xdup 69 /Crt put %E Xdup 70 /Crk put %F Xdup 71 /Crb put %G Xdup 72 /Clc put %H Xdup 73 /Clf put %I Xdup 74 /Crc put %J Xdup 75 /Crf put %K Xdup 76 /Cbr put %L Xdup 77 /Crn put %M Xdup 78 /Cci put %N Xdup 79 /Cru put %O Xpop X/CharProcs 24 dict dup begin X/setC { 0 -50 -250 500 1000 setcachedevice} def X/C.bv {220 -250 moveto 0 1000 rlineto X60 0 rlineto 0 -1000 rlineto fill } def X/C.barc { 750 moveto 180 0 rlineto 0 -60 rlineto -180 0 rlineto fill } def X/C.barf { -250 moveto 180 0 rlineto 0 60 rlineto -180 0 rlineto fill } def X/C.brk.end { 1 setlinewidth moveto rlineto rcurveto Xreversepath 60 0 rlineto rlineto rcurveto fill } def X/C.setl {dup dtransform exch round exch idtransform pop setlinewidth } def X/Cbv { X300 setC XC.bv X} def X/Clt { X300 setC X 0 150 50 210 140 250 0 730 0 150 50 250 200 250 0 750 220 -250 X C.brk.end X} def X/Clk { X300 setC X 1 setlinewidth 220 -250 moveto 0 400 rlineto 0 50 -50 100 -100 100 X rcurveto X 50 0 100 50 100 100 rcurveto 0 400 rlineto 60 0 rlineto 0 -400 rlineto X 0 -50 -50 -100 -100 -100 rcurveto 50 0 100 -50 100 -100 rcurveto X 0 -400 rlineto closepath fill X} def X/Clb { X300 setC X 0 -150 50 -210 140 -250 0 -730 0 -150 50 -250 200 -250 0 -750 220 750 X C.brk.end X} def X/Crt { X300 setC X 0 150 -50 250 -200 250 0 750 0 150 -50 210 -140 250 0 730 220 -250 X C.brk.end X} def X/Crk { X300 setC X 1 setlinewidth 220 -250 moveto 0 400 rlineto 0 50 50 100 100 100 rcurveto X -50 0 -100 50 -100 100 rcurveto 0 400 rlineto 60 0 rlineto 0 -400 rlineto X 0 -50 50 -100 100 -100 rcurveto -50 0 -100 -50 -100 -100 rcurveto X 0 -400 rlineto fill X} def X/Crb { X300 setC X 0 -150 -50 -250 -200 -250 0 -750 0 -150 -50 -210 -140 -250 0 -730 X 220 750 C.brk.end X} def X/Clc { X300 setC X C.bv 280 C.barc X} def X/Clf { X300 setC X C.bv 280 C.barf X} def X/Crc { X300 setC X C.bv 40 C.barc X} def X/Crf { X300 setC X C.bv 40 C.barf X} def X/Cbr { X0 0 -50 -250 0 1000 setcachedevice X 40 C.setl 0 -250 moveto 0 1000 rlineto stroke X} def X/Cru { X0 0 -50 -250 1000 0 setcachedevice X 40 C.setl 0 -250 moveto 500 0 rlineto stroke X} def X/Crn { X300 setC X 40 C.setl 0 895 moveto 500 0 rlineto stroke X} def X/Cci { X600 0 -50 -250 700 1000 setcachedevice X 40 C.setl 400 250 300 0 360 arc stroke X} def Xend def X/BuildChar X{ X $workingdict begin X /charcode exch def X /fontdict exch def X fontdict /CharProcs get begin X fontdict /Encoding get X charcode get load X gsave X 0 setlinecap 0 setgray newpath X exec X grestore X end end X} def end X/BracketFont BracketFontDict definefont pop X X/Ellipse { X /Yaxis exch 2 div def X /Xaxis exch 2 div def X currentpoint exch Xaxis add exch X /savematrix matrix currentmatrix def X translate X Xaxis Yaxis scale X 1 0 moveto X 0 0 1 0 360 arc X savematrix setmatrix X %currentpoint exch Xaxis 2 mul add exch moveto X} bind def X X/Arc { X /eY exch def X /eX exch def X /cY exch def X /cX exch def X currentpoint cY add exch cX add exch % center x y X cY dup mul cX dup mul add sqrt % radius X cY neg cX neg atan % ang1 X eY eX atan % ang2 X% 5 copy X% ( ) cvs print X% ( ) print X% ( ) cvs print X% ( ) print X% ( ) cvs print X% ( ) print X% ( ) cvs print X% ( ) print X% ( ) cvs print X arc X} bind def X X% This macro is invoked by ShowPage to display the current form. X% Usually redefined to point at a form loaded by an include X% directive. Redefinition triggered by .sR O<formname> troff X% directive. X% Global default form (usually redefined top of each page anyways) X/Form {} def X% This is a convenient place for putting your extra inclusions. X% Eg: this would load conf.ps (from current directory or LIBDIR) X% and insert it into the end of the prolog. X% This loads the confidential form. X%%%include confid X%%%include lethead END_OF_FILE if test 11215 -ne `wc -c <'lib/ps.lib'`; then echo shar: \"'lib/ps.lib'\" unpacked with wrong size! fi # end of 'lib/ps.lib' fi echo shar: End of archive 6 \(of 16\). cp /dev/null ark6isdone 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)