Psroff 2.0 Part 06 of 16
Chris Lewis
clewis at ecicrl.UUCP
Sat Nov 17 15:58:22 AEST 1990
Submitted-by: Chris Lewis <clewis at 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 at 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 at 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 at 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 at 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 at 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+ at T6X>Z-6M(ND=K"+PYN[X["WP#LK+"3<XCW$W.(]Q-SB/<3<XCW/3<"@
XM at 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 at 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 at 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 at HU)%]:!;8 at 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 at 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 at 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 at 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 at 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, at 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 at 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 at X8K4U!C4ULF at 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 at 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 at 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 at -X0```%`;8]Y*[>DI<.#`
XM.^(```!0'6/>2-Q-IME]B->-:=:=:=:=>->->=:=;YUIUOG6G6^M7ZU>*M7Z
XMU;U>*M6]7ZU>2]6M7 at ++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 at eci386)
Psroff mailing list (psroff-request at eci386)
More information about the Alt.sources
mailing list