summaryrefslogtreecommitdiff
path: root/fonts/utilities/psposter
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/utilities/psposter
Initial commit
Diffstat (limited to 'fonts/utilities/psposter')
-rw-r--r--fonts/utilities/psposter/CHANGELOG110
-rw-r--r--fonts/utilities/psposter/Makefile216
-rw-r--r--fonts/utilities/psposter/README86
-rw-r--r--fonts/utilities/psposter/TODO12
-rw-r--r--fonts/utilities/psposter/bb.ps527
-rw-r--r--fonts/utilities/psposter/fontlist.ps167
-rw-r--r--fonts/utilities/psposter/fontlold.ps98
-rw-r--r--fonts/utilities/psposter/fontlsim.ps41
-rw-r--r--fonts/utilities/psposter/fontshow.ps190
-rw-r--r--fonts/utilities/psposter/man2ps36
-rw-r--r--fonts/utilities/psposter/psposter.awk1184
-rw-r--r--fonts/utilities/psposter/psposter.man719
-rw-r--r--fonts/utilities/psposter/psposter.ps606
-rw-r--r--fonts/utilities/psposter/psposter.sh2
-rw-r--r--fonts/utilities/psposter/rofvms.awk61
15 files changed, 4055 insertions, 0 deletions
diff --git a/fonts/utilities/psposter/CHANGELOG b/fonts/utilities/psposter/CHANGELOG
new file mode 100644
index 0000000000..a9783389f9
--- /dev/null
+++ b/fonts/utilities/psposter/CHANGELOG
@@ -0,0 +1,110 @@
+%% /u/sy/beebe/src/psposter/CHANGELOG, Mon Jan 16 14:33:12 1995
+%% Edit by Nelson H. F. Beebe <beebe@sunrise>
+
+ Development log for psposter
+ [in reverse chronological order]
+
+[16-Jan-1995] 0.08
+ Fix a bug in the use of +table 8/h: the header line
+ 8 9 a b c d e f was in a Roman font instead of the
+ intended bold font used for the preceding line.
+
+ Modify grep commands to redirect stderr to /dev/null,
+ to unneeded error messages don't confuse the user.
+
+ Revise PostScript coding that implements the +table
+ option. In the original implementation of this code,
+ it was assumed that ASCII space and NUL had no
+ assigned glyph, which appears to be the case for all
+ Adobe PostScript fonts, and is supported by the encoding
+ tables in Appendix E of the PostScript Language
+ Reference Manual, Second Edition, Addison-Wesley
+ (1990). I also verified this in all 1305 .afm files
+ in the CTAN /tex-archive/fonts/postscript/AFMFiles
+ collection.
+
+ However, for Basil K. Malashev's BaKoMa fonts, which
+ represent Computer Modern in hinted PostScript Type 1
+ format, font positions 0 (NUL) and 32 (space) have
+ assigned glyphs, with the result that psposter showed
+ those glyphs throughout the font table, because space
+ had been used to separate table characters, setting
+ strings like (@ A B C D E F G ). The revised code
+ avoids the use of separating space, setting strings
+ like (@ABCDEFG) instead.
+
+[11-Jan-1995] 0.07
+ Add code to support on-the-fly invocation of t1ascii
+ so that psposter can use the more compact .pfb binary
+ PostScript font files, as well as the ASCII .pfa files
+ supported by earlier versions. Also add support for
+ on-the-fly decompression of font files compressed by
+ compress (.Z) and gzip (.gz). Although compress will
+ not reduce the size of .pfb files, gzip will.
+
+ If you don't have t1ascii installed yet, you can find
+ it in the Comprehensive TeX Archive Network (CTAN)
+ archives ("finger ctan@pip.shsu.edu" for a list of
+ CTAN site hostnames) in the directory
+ /tex-archive/fonts/utilities/t1utils.
+
+ If you don't have gunzip installed yet, you can find
+ it in the Free Software Foundation GNU Project
+ archives on prep.ai.mit.edu:/pub/gnu, and its mirror
+ sites.
+
+[01-Jan-1995] 0.06
+ Add +table option for printing tables of PostScript
+ fonts.
+
+[29-Dec-1994] 0.05
+ Add code in psposter.awk to issue a warning if a font
+ file is found in .pfb (binary) format, and show the
+ user how to convert it to .pfa (ASCII) format. The
+ requested font will be substituted by the default font
+ until that conversion has been done. I don't feel
+ like tackling the job of converting .pfb files to .pfb
+ format using the awk language (dvialw and dvips have C
+ code to do it).
+
+[19-Dec-1994] 0.04
+ Add code in psposter.awk to issue a warning if
+ afmfonts.map or rgb.txt cannot be found, and avoid
+ invoking grep on them if they are missing.
+
+ Correct error in Makefile: man page was installed
+ with wrong extension, and formatted man page in
+ cat directory was not removed.
+
+[16-Dec-1994] 0.03
+ Move awk code from psposter.sh to a separate file,
+ psposter.awk; DEC ULTRIX 4.x, HP HP-UX 9.x, IBM
+ RS/6000 AIX 3.x and SGI IRIX 4.x and 5.x shells were
+ unable to handle the long string containing the awk
+ program. There was no such problem on Cray UNICOS,
+ DEC OSF/1 3.x, NeXT Mach 3.0, Sun SunOS 4.1.x, and Sun
+ Solaris 2.x.
+
+ Eliminate three regular expressions for argument
+ matching in the awk code because the Cray UNICOS nawk
+ complained about them.
+
+ In psposter.awk, check for LOGNAME as well as USER to
+ try to get a username.
+
+ Change definition of VERSION to use "." instead of
+ "\#"; the latter raises a syntax error with IBM
+ RS/6000 AIX 3.5 make.
+
+[13-Dec-1994] 0.02
+ Full-fledged implementation of psposter with many new
+ options, manual page documentation, ready for limited
+ public distribution.
+
+[07-Dec-1994] 0.01
+ First working programmable implementation of psposter,
+ with limited support for command-line options.
+
+[27-Oct-1994] 0.00
+ First working outline of a PostScript poster, with
+ fixed text, and no programmability.
diff --git a/fonts/utilities/psposter/Makefile b/fonts/utilities/psposter/Makefile
new file mode 100644
index 0000000000..22d539b777
--- /dev/null
+++ b/fonts/utilities/psposter/Makefile
@@ -0,0 +1,216 @@
+#=======================================================================
+# Makefile for files in ~/src/psposter
+#
+# Current target list:
+# all
+# doorsigns
+# clean
+# mostlyclean
+# clobber
+# distclean
+# realclean
+# install
+# install-bin
+# install-ftp
+# install-US
+# install-ISO
+# install-man
+# psposter.hlp
+# psposter.ps
+# psposter.shar
+# psposter.tar
+# psposter.txt
+# psposter.zip
+# psposter.zoo
+# test-version
+# uninstall
+# uninstall-exe
+# uninstall-man
+#
+# [11-Jan-1995]
+#=======================================================================
+
+# These six values may require local customization:
+AWK = /usr/local/bin/gawk
+BINDIR = /usr/local/bin
+CATDIR = $(MANDIR)/../cat$(MANEXT)
+FTPDIR = /u/ftp/pub/misc
+LIBDIR = /usr/local/lib/psposter
+MANDIR = /usr/local/man/man$(MANEXT)
+MANEXT = 1
+
+# If you don't have Robert Solovay's checksum program, use cat
+CHECKSUM = cat
+CHECKSUM = checksum
+
+# You should not have to change anything below this point.
+CHMOD = chmod
+
+COL = col -b
+
+COMPRESS = compress
+
+CP = /bin/cp
+
+DIST-FILES = CHANGELOG README Makefile TODO bb.ps fontlist.ps \
+ fontlold.ps fontlsim.ps fontshow.ps man2ps \
+ psposter.awk psposter.ps psposter.sh psposter.man \
+ rofvms.awk
+
+DOORFILES = door.les door.nhfb door.pjb
+DOORFILES =
+
+EXPAND = expand
+
+FONTNAME = CharterBT-Bold
+FONTNAME = Utopia-BoldItalic
+FONTNAME = URWGroteskT-Bold
+FONTNAME = NimbusRomanNo9L-Regular
+FONTNAME = Copperplate-ThirtyAB
+FONTNAME = CharterBT-BoldItalic
+
+ISPELL = ispell
+
+LN = ln -s
+
+MAN2PS = ./man2ps
+
+NROFF = nroff
+
+PSPOSTER = ./psposter.sh
+
+PSPOSTERFLAGS = +bg powderblue +fg navyblue +paper 4inx9.5in +x 1in +y 1in +l +p 60pt +fn $(FONTNAME)
+PSPOSTERFLAGS = +bg PaleGreen +fg navyblue +paper 4inx9.5in +x 1in +y 1in +l +p 60pt +fn $(FONTNAME)
+
+RM = /bin/rm -f
+
+SED = /bin/sed
+
+SHELL = /bin/sh
+
+SORT = sort
+
+SPELL = spell
+
+UNZIP = unzip
+
+# NB: The version number of the FTP psposter archive files is extracted
+# from that of psposter.awk.
+VERSION = `$(AWK) '/^...[ \t]*version *= *"[0-9.]+", *$$/ \
+ { gsub(/[^0-9.]/,"",$$4); print $$4 }' psposter.awk`
+
+ZIP = zip
+
+ZOO = zoo
+
+#=======================================================================
+
+all: psposter.txt psposter.hlp psposter.ps
+
+doorsigns:
+ for f in $(DOORFILES) ; \
+ do \
+ $(PSPOSTER) $(PSPOSTERFLAGS) <$$f >$$f.ps ; \
+ done
+
+clean mostlyclean:
+ -$(RM) *.i
+ -$(RM) *.o
+ -$(RM) *~
+ -$(RM) \#*
+ -$(RM) a.out
+ -$(RM) core
+
+clobber distclean realclean: clean
+ -$(RM) psposter-?.??.??? psposter-?.??.???-???
+ -$(RM) psposter.hlp
+ -$(RM) psposter.ps
+ -$(RM) psposter.shar
+ -$(RM) psposter.tar
+ -$(RM) psposter.txt
+ -$(RM) psposter.zip
+ -$(RM) psposter.zoo
+
+install:
+ @echo "Choose install-US or install-ISO to select the default paper type."
+
+install-bin:
+ $(SED) -e 's@/usr/local/bin/gawk@$(AWK)@' \
+ -e 's@/usr/local/lib/psposter@$(LIBDIR)@' \
+ < psposter.sh >$(BINDIR)/psposter
+ $(CHMOD) 775 $(BINDIR)/psposter
+
+install-ftp: psposter.tar psposter.zip psposter.zoo
+ tar tvf psposter-$(VERSION).tar >$(FTPDIR)/psposter-$(VERSION).tar-lst
+ $(COMPRESS) <psposter-$(VERSION).tar \
+ >$(FTPDIR)/psposter-$(VERSION).tar.z
+ $(CP) psposter-$(VERSION).zip $(FTPDIR)
+ $(CP) psposter-$(VERSION).zip-lst $(FTPDIR)
+ $(CP) psposter-$(VERSION).zoo $(FTPDIR)
+ $(CP) psposter-$(VERSION).zoo-lst $(FTPDIR)
+ ls -l $(FTPDIR)/psposter*
+
+install-US: install-bin install-man
+ -if [ ! -d $(LIBDIR) ] ; then mkdir $(LIBDIR) ; fi
+ $(CP) psposter.awk $(LIBDIR)/psposter.awk
+ $(CHMOD) 664 $(LIBDIR)/psposter.awk
+
+install-ISO: install-bin install-man
+ -if [ ! -d $(LIBDIR) ] ; then mkdir $(LIBDIR) ; fi
+ $(SED) -e 's/set_paper_dimensions("A")/set_paper_dimensions("A4")/' \
+ < psposter.awk | $(CHECKSUM) >$(LIBDIR)/psposter.awk
+ $(CHMOD) 664 $(LIBDIR)/psposter.awk
+
+install-man: uninstall-man
+ -$(RM) $(CATDIR)/psposter.$(MANEXT)
+ -$(CP) psposter.man $(MANDIR)/psposter.$(MANEXT)
+ $(CHMOD) 664 $(MANDIR)/psposter.$(MANEXT)
+
+# VAX VMS help file format from psposter.txt
+psposter.hlp: psposter.txt rofvms.awk
+ $(EXPAND) <psposter.txt | $(AWK) -f rofvms.awk >psposter.hlp
+
+psposter.ps: psposter.man
+ $(MAN2PS) <psposter.man >psposter.ps
+
+psposter.shar: $(DIST-FILES)
+ shar -b -c -v $(DIST-FILES) >psposter.shar
+
+psposter.tar: $(DIST-FILES)
+ -$(RM) psposter.tar psposter.tar-lst
+ tar chf psposter.tar $(DIST-FILES)
+ -mkdir psposter-$(VERSION)
+ cd psposter-$(VERSION); tar xf ../psposter.tar
+ tar cf psposter-$(VERSION).tar psposter-$(VERSION)
+ -$(RM) -r psposter-$(VERSION)
+ -$(RM) psposter.tar
+ $(LN) psposter-$(VERSION).tar psposter.tar
+
+psposter.txt: psposter.man
+ $(NROFF) -man $? | $(COL) >$@
+
+psposter.zip: $(DIST-FILES)
+ -$(RM) psposter*.zip
+ -$(RM) psposter*.zip-lst
+ $(ZIP) psposter-$(VERSION).zip $(DIST-FILES)
+ $(UNZIP) -v psposter-$(VERSION).zip >psposter-$(VERSION).zip-lst
+ $(LN) psposter-$(VERSION).zip psposter.zip
+
+psposter.zoo: $(DIST-FILES)
+ -$(RM) psposter*.zoo
+ -$(RM) psposter*.zoo-lst
+ $(ZOO) a psposter-$(VERSION).zoo $(DIST-FILES)
+ $(ZOO) v psposter-$(VERSION).zoo >psposter-$(VERSION).zoo-lst
+ $(LN) psposter-$(VERSION).zoo psposter.zoo
+
+test-version:
+ @echo "Version number is ""'"$(VERSION)"'"
+
+uninstall: uninstall-exe uninstall-man
+
+uninstall-exe:
+ -$(RM) $(BINDIR)/psposter
+
+uninstall-man:
+ -$(RM) $(MANDIR)/psposter.$(MANEXT)
+ -$(RM) $(CATDIR)/psposter.$(MANEXT)
diff --git a/fonts/utilities/psposter/README b/fonts/utilities/psposter/README
new file mode 100644
index 0000000000..1a94196a85
--- /dev/null
+++ b/fonts/utilities/psposter/README
@@ -0,0 +1,86 @@
+%% /u/sy/beebe/src/psposter/README, Fri Dec 16 15:02:08 1994
+%% Edit by Nelson H. F. Beebe <beebe@plot79.math.utah.edu>
+
+Author:
+ Nelson H. F. Beebe
+ Center for Scientific Computing
+ Department of Mathematics
+ University of Utah
+ Salt Lake City, UT 84112
+ USA
+ Email: beebe@math.utah.edu (Internet)
+ Tel: +1 801 581 5254
+ FAX: +1 801 581 4148
+
+This directory contains psposter, an easy-to-use program for producing
+simple colored posters in PostScript.
+
+ *********************************************
+ *********************************************
+ *** This program is in the PUBLIC DOMAIN. ***
+ *********************************************
+ *********************************************
+
+The master copy of psposter can be found on the Internet archive
+ftp.math.utah.edu:/pub/misc in compressed UNIX tar, zip, and zoo
+formats. It may be automatically mirrored from there to other
+Internet sites.
+
+If you don't have lptops installed (available in the same archive as
+psposter), you can create an empty afmfonts.map file, and put it in a
+directory pointed to by the AFMPATH environment variable. lptops is
+very handy, and its installation will supply you with some additional
+fonts for psposter.
+
+The files in the psposter distribution consist of:
+
+CHANGELOG Reverse time-ordered log of changes to psposter.
+
+README This file.
+
+Makefile UNIX Makefile for installing and uninstalling
+ psposter.
+
+TODO Record of things to do in future versions.
+
+bb.ps PostScript file to prepend to an EPS file for
+ determining the bounding box. This comes from
+ Tom Rokicki's dvips 5.528 distribution,
+ available on labrea.stanford.edu, and the CTAN
+ (Comprehensive TeX Archive Network) archives
+ (do "finger ctan@pip.shsu.edu" for a list of
+ CTAN sites).
+
+fontlist.ps PostScript file for listing the resident fonts
+ on a PostScript output device, in alphabetical
+ order.
+
+fontlsim.ps Simple version of fontlist.ps, without sorting;
+ this is the file illustrated in the man pages.
+
+fontlold.ps PostScript file for listing the resident fonts
+ on a PostScript output device; uses Level 1
+ PostScript, but Adobe documentation says that
+ the technique is unreliable.
+
+fontshow.ps PostScript file for listing and illustrating
+ the resident fonts in alphabetical order on a
+ PostScript output device.
+
+man2ps UNIX shell script for converting UNIX manual
+ pages to PostScript.
+
+psposter.awk The program.
+
+psposter.hlp VAX VMS HELP file for psposter.man.
+
+psposter.man UNIX manual pages documenting psposter.
+
+psposter.txt ASCII formatted nroff output from psposter.man.
+
+psposter.ps PostScript typeset output from psposter.man.
+
+psposter.sh Pre-installation script for running psposter.
+
+rofvms.awk Program for converting nroff manual page
+ output to VAX VMS HELP file format.
diff --git a/fonts/utilities/psposter/TODO b/fonts/utilities/psposter/TODO
new file mode 100644
index 0000000000..2210552c34
--- /dev/null
+++ b/fonts/utilities/psposter/TODO
@@ -0,0 +1,12 @@
+[15-Dec-1994]
+psposter currently outputs a
+
+ %%DocumentNeededResources: font Times-Bold
+
+comment. However, if the font is downloaded in the output, then it
+should say instead:
+
+ %%DocumentSuppliedResources: font Times-Bold
+
+There should be one font list in the Supplied Resources for every
+BeginResource/EndResource pair.
diff --git a/fonts/utilities/psposter/bb.ps b/fonts/utilities/psposter/bb.ps
new file mode 100644
index 0000000000..ef1d07ebf7
--- /dev/null
+++ b/fonts/utilities/psposter/bb.ps
@@ -0,0 +1,527 @@
+%!
+% bb.ps --
+%
+% Prints a file, but keeps track of bounding box info, and prints the box at
+% the end (around the figure.)
+%
+% $Header: /u/sy/beebe/src/psposter/RCS/bb.ps,v 1.3 1995/01/12 04:55:01 beebe Exp beebe $
+% RCS log info at end
+
+50 dict /$BoundingBox exch def
+
+$BoundingBox begin
+
+/xdef {
+ exch def
+} def
+
+/xstore {
+ exch store
+} def
+
+/addcoords {
+ exch
+ 4 -1 roll add
+ 3 1 roll add
+} def
+
+%
+% Stubs of old functions.
+%
+
+/-stroke /stroke load def
+/-fill /fill load def
+/-eofill /eofill load def
+/-image /image load def
+/-show /show load def
+/-awidthshow /awidthshow load def
+/-showpage /showpage load def
+/-restore /restore load def
+/-imagemask /imagemask load def
+
+end % $BoundingBox
+
+%
+% New Functions. --- These go into the user dict to intercept the calls
+%
+
+/stroke {
+ $BoundingBox begin
+ gsave
+ initmatrix
+ (stroke called\n) traceprint %%DEBUG
+ {
+ strokepath % Make sure to take line width into account.
+ 0 setlinejoin
+ flattenpath
+ } stopped { % strokepath often hits a limitcheck.
+ (Can't set up a strokepath\n) traceprint % DEBUG
+ grestore % Restore the original path
+ gsave
+ } if
+ includepath % Accumulate it into our box.
+ grestore
+
+ -stroke
+ end % $BoundingBox
+} def
+
+/fill {
+ $BoundingBox begin
+ gsave
+ (fill called\n) traceprint %%DEBUG
+ includepath
+ grestore
+
+ -fill
+ end % $BoundingBox
+} def
+
+/eofill {
+ $BoundingBox begin
+ gsave
+ (eofill called\n) traceprint %%DEBUG
+ includepath
+ grestore
+
+ -eofill
+ end % $BoundingBox
+} def
+
+%
+% Text is implemented by reducing everything to an `awidthshow'.
+%
+
+/show {
+ $BoundingBox begin
+ (show called\n) traceprint %%DEBUG
+ 0 0 0 0 0 % Extra parameters for awidthshow
+ 6 -1 roll % Bring the string back up
+ awidthshow
+ end % $BoundingBox
+} def
+
+/widthshow {
+ $BoundingBox begin
+ (widthshow called\n) traceprint %%DEBUG
+ 0 0 % Extra parameters for awidthshow
+ 3 -1 roll % Bring the string back up.
+ awidthshow
+ end % $BoundingBox
+} def
+
+/ashow {
+ $BoundingBox begin
+ (ashow called\n) traceprint %%DEBUG
+ 0 0 0
+ 6 3 roll
+ awidthshow
+ end % $BoundingBox
+} def
+
+
+% This does all of the work of the text-rendering operators
+% What it does, is compute, basically brute force, what 'charpath'
+% would have given us virtually for free, if 'show' were the only
+% operator that we needed to do.
+
+/awidthshow {
+ $BoundingBox begin
+ gsave
+ 6 (awidthshow:) debug %%DEBUG
+ currentpoint
+ 2 copy /@starty xdef /@startx xdef
+ 2 index stringwidth % Get the natural length of the string
+ addcoords % Add to the start to get the end.
+
+ 2 index length % How many characters?
+
+ dup % Add the offsets to each character
+ 6 index mul
+ exch 5 index mul
+ addcoords
+
+ 5 index 3 index
+ chcount % How many padding characters?
+
+ dup % Add the offsets for each pad.
+ 9 index mul
+ exch 8 index mul
+ addcoords
+
+ /@endy xdef /@endx xdef
+
+ % We now have the left and right edges (in user coords)
+ % of the text. Now we need only correct for the vertical
+ % displacements needed for the font and we can get the
+ % top and bottom edges of the enclosing box
+
+ fontheight % Get the height and depth of the current font.
+
+ @startx @starty addcoords
+ /@starty xdef /@startx xdef
+ @endx @endy addcoords
+ /@endy xdef /@endx xdef
+ newpath
+ @startx @starty moveto
+ @endx @starty lineto
+ @endx @endy lineto
+ @startx @endy lineto
+ closepath
+ includepath
+ grestore
+
+ -awidthshow
+ end % $BoundingBox
+} def
+
+%
+% `image':
+%
+% Assume here that the image lands in the unit square.
+%
+
+/image {
+ $BoundingBox begin
+ (image called\n) traceprint %%DEBUG
+ gsave
+ newpath
+ 0 0 moveto
+ 1 0 rlineto
+ 1 1 rlineto
+ -1 0 rlineto
+ closepath
+ includepath
+ grestore
+
+ -image
+ end % $BoundingBox
+} def
+
+/imagemask
+{
+ $BoundingBox begin
+ (imagemask called\n) traceprint %%DEBUG
+ gsave
+ newpath
+ 0 0 moveto
+ 1 0 rlineto
+ 1 1 rlineto
+ -1 0 rlineto
+ closepath
+ includepath
+ grestore
+
+ -imagemask
+ end % $BoundingBox
+} def
+
+% Just define this one out of existence
+/framedevice { pop pop pop pop } def
+
+% Handle restoring VM --- this is all OK, except that we have to
+% hang onto the bb info we collected while in the about-to-be-discarded
+% environment
+
+/restore
+{
+ $BoundingBox begin
+ (restore called\n) traceprint %%DEBUG
+ tracedump %% HACK, but the only way I see right now to get this stuff!
+ bbox-llx bbox-lly bbox-urx bbox-ury
+ 5 -1 roll
+ -restore
+ /bbox-ury xstore /bbox-urx xstore
+ /bbox-lly xstore /bbox-llx xstore
+ end % $BoundingBox
+} def
+
+
+%
+% `showpage':
+%
+% Just draw the box around the figure and print the page, and then initialize
+% the bounding box variables again.
+%
+
+$BoundingBox begin
+/temp-string 10 string def
+end % $BoundingBox
+
+/showpage {
+ $BoundingBox begin
+ initgraphics
+
+ (showpage\n) traceprint % DEBUG
+ dump-bbox % DEBUG
+
+ /bbox-llx round_down
+ /bbox-lly round_down
+ /bbox-ury round_up
+ /bbox-urx round_up
+
+ bbox-llx bbox-lly moveto % Make the box
+ bbox-llx bbox-ury lineto
+ bbox-urx bbox-ury lineto
+ bbox-urx bbox-lly lineto
+ closepath
+
+ bwstroke % Draw the box.
+
+% Print the size of the bounding box both above and below the actual box
+ 0 setgray
+ /Courier findfont 10 scalefont setfont
+ bbox-llx 36 max bbox-lly 12 sub 36 max moveto
+ (%%BoundingBox: ) -show
+ bbox-llx temp-string cvs -show ( ) -show
+ bbox-lly temp-string cvs -show ( ) -show
+ bbox-urx temp-string cvs -show ( ) -show
+ bbox-ury temp-string cvs -show
+
+ bbox-llx 36 max bbox-ury 12 add 740 min moveto
+ (%%BoundingBox: ) -show
+ bbox-llx temp-string cvs -show ( ) -show
+ bbox-lly temp-string cvs -show ( ) -show
+ bbox-urx temp-string cvs -show ( ) -show
+ bbox-ury temp-string cvs -show
+
+ init
+ -showpage
+ tracedump %% DEBUG
+ end % $BoundingBox
+} def
+
+%
+% BoundingBox functions:
+%
+% We accumulate the information about the bounding box into four variables.
+% The data is stored in default coordinates.
+%
+
+$BoundingBox begin
+
+/init {
+ /bbox-llx 99999 store
+ /bbox-lly 99999 store
+ /bbox-urx -99999 store
+ /bbox-ury -99999 store
+} def
+
+/bbox-llx 0 def
+/bbox-lly 0 def
+/bbox-urx 0 def
+/bbox-ury 0 def
+
+%
+% - `includepath' -
+%
+% Incorporates the bounding box of the path into the bounding box info.
+% ... Gets the bounding box in default coords
+
+/includepath {
+ (Adding a path: ) traceprint %%DEBUG
+ gsave
+ initmatrix
+ {
+ 0 setlinejoin
+ flattenpath
+ } stopped {
+ (Couldn't flatten the path\n) traceprint % DEBUG
+ grestore
+ gsave
+ initmatrix
+ } if
+ { pathbbox } stopped not
+ {
+ 4 2 roll % Just so we get lower-left first
+ 2 copy dump-coord %%DEBUG
+ dup bbox-lly lt {
+ /bbox-lly xstore
+ } {
+ pop
+ } ifelse
+ dup bbox-llx lt {
+ /bbox-llx xstore
+ } {
+ pop
+ } ifelse
+
+ (; ) traceprint 2 copy dump-coord (\n) traceprint %%DEBUG
+ dup bbox-ury gt {
+ /bbox-ury xstore
+ } {
+ pop
+ } ifelse
+ dup bbox-urx gt {
+ /bbox-urx xstore
+ } {
+ pop
+ } ifelse
+ dump-bbox %%DEBUG
+ } if
+ grestore
+} def
+
+%
+% A nice black-and white line drawing function.
+%
+
+/bwstroke {
+ 0 setlinewidth % Thinnest possible lines
+ 1 setgray % White first
+ [5] 0 setdash % Only half the line
+ gsave -stroke grestore
+ 0 setgray % Then black
+ [5] 5 setdash % On the other half
+ -stroke
+} def
+
+%
+% Stuff for text.
+%
+
+%
+% char-code string `chcount' occurs
+%
+% Counts the number of times a character appears in a string.
+%
+
+/chcount {
+ 0 exch
+ {
+ 2 index eq {
+ 1 add
+ } if
+ } forall
+ exch pop
+} def
+
+%
+% - `fontheight' heightx heighty depthx depthy
+%
+% Returns the offsets to the lowest point and highest point in the current
+% font.
+%
+
+/fontheight {
+ currentfont begin
+ /FontBBox load aload pop
+ exch pop 0 exch
+ FontMatrix transform
+ 4 2 roll
+ exch pop 0 exch
+ FontMatrix transform
+ end
+} def
+
+% key round_{down|up} - These will round the value of the given key
+% up or down, as appropriate, to the nearest integer
+/round_up { dup load ceiling cvi store } def
+/round_down { dup load floor cvi store } def
+
+% key binddefinition - this will do a 'bind' on the procedure given by 'key'
+/binddefinition
+{
+ dup where
+ {
+ exch
+ 2 copy
+ get bind put
+ }
+ { undefined } ifelse
+} def
+
+% Given two numbers on the stack, return with just the smallest
+/min { 2 copy ge { exch } if pop } def
+
+% Dito for the largest of the pair
+/max { 2 copy lt { exch } if pop } def
+
+
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%
+% Debugging utilities
+%
+
+/$tracedict where
+{ % Trace package loaded... do the tracing
+ pop
+% This is a debugging function to print out what is going on.
+% Format <argn> <argn-1> ... <arg1> n <string> debug <argn> ... <arg1>
+% (that is, the 'n' args will be *left* on the stack!)
+/debug
+{
+ traceprint (\n) traceprint
+ dup 1 add % Now total number of args (including arg count)
+ copy
+ {
+ ( ) traceprint
+ trace=
+ (\n) traceprint
+ } repeat
+ pop % Remove the extra copy of the arg count
+} def
+
+% Print out a coordinate on the stack: x y ---
+/dump-coord
+{
+ (\() traceprint exch trace= (, ) traceprint trace= (\)) traceprint
+} def
+
+% Print out bb's current notion of its bounding box
+
+/dump-bbox
+{
+ (Bounding Box: ) traceprint
+ bbox-llx bbox-lly dump-coord
+ (; ) traceprint
+ bbox-urx bbox-ury dump-coord
+ (\n) traceprint
+} def
+
+tracebegin %% DEBUG
+
+}
+{ % No trace package loaded, so don't trace. Stub out the various calls
+
+/traceprint { pop } def
+/dump-coord { pop pop } def
+/dump-bbox { } def
+/debug { pop pop } def
+/tracedump { } def
+
+} ifelse
+
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+
+% Bind everything
+
+/xdef binddefinition
+/xstore binddefinition
+/addcoords binddefinition
+/stroke binddefinition
+/fill binddefinition
+/eofill binddefinition
+/show binddefinition
+/widthshow binddefinition
+/ashow binddefinition
+/awidthshow binddefinition
+/image binddefinition
+/showpage binddefinition
+/init binddefinition
+/includepath binddefinition
+/bwstroke binddefinition
+/chcount binddefinition
+/fontheight binddefinition
+
+/debug binddefinition
+/dump-coord binddefinition
+/dump-bbox binddefinition
+
+% Start it up.
+
+init
+
+end % $BoundingBox
+
+% end of bb.ps
diff --git a/fonts/utilities/psposter/fontlist.ps b/fonts/utilities/psposter/fontlist.ps
new file mode 100644
index 0000000000..039148a665
--- /dev/null
+++ b/fonts/utilities/psposter/fontlist.ps
@@ -0,0 +1,167 @@
+%!PS-Adobe-3.0
+%=======================================================================
+% Send this file to a PostScript device to list the names of all of
+% the resident fonts, in ascending order.
+%=======================================================================
+%%Title: fontlist.ps
+%%CreationDate: Thu Dec 15 09:31:00 MST 1994
+%%Creator: Nelson H. F. Beebe <beebe@sunrise>
+%%For: Nelson H. F. Beebe <beebe@sunrise>
+%%BoundingBox: 0 0 612 792
+%%DocumentMedia: A 612 792 () () ()
+%%DocumentData: Clean7Bit
+%%DocumentFonts: font Courier Times-Bold
+%%DocumentNeededResources: font Courier Times-Bold
+%%DocumentSuppliedResources:
+%%Orientation: Portrait
+%%PageOrder: Ascend
+%%Pages: 1
+% NB: The number of pages depends on the number of resident fonts
+%%EndComments
+%=======================================================================
+%%BeginProlog
+/fontlistdict 50 dict def
+fontlistdict begin
+
+/inch { 72 mul } def
+
+/PointSize 10 def
+
+/ColumnWidth 3.24 inch def % slightly less than (8.5 - 2)/2
+
+/Courier findfont PointSize scalefont setfont
+
+/BaselineSkip PointSize 1.2 mul def
+
+/BottomOfColumn { y 1 inch lt } def
+
+/Bubblesort % Here is the sorting routine, courtesy of ulfis@nada.kth.se
+{ % Usage: array Bubblesort
+ % This code may be used for arrays of strings and arrays of numbers
+ /TheArray exch def
+ /num TheArray length def
+ num 1 gt
+ {
+ 1 1 num 1 sub
+ {
+ /localcount exch def
+ num 1 sub -1 localcount
+ {
+ /innercount exch def
+ /firststring TheArray innercount 1 sub get def
+ /secondstring TheArray innercount get def
+ firststring secondstring gt
+ {
+ TheArray innercount 1 sub secondstring put
+ TheArray innercount firststring put
+ } if
+ } for
+ } for
+ } if
+} def
+
+/ColumnOffPage { x ColumnWidth add 7.5 inch gt } def
+
+/NewColumn
+{
+ /x x ColumnWidth add def
+ /y Y def
+ ColumnOffPage { showpage NewPage } if
+ x y moveto
+} def
+
+/NewLine
+{
+ /y y BaselineSkip sub def
+ BottomOfColumn { NewColumn } if
+ x y moveto
+} def
+
+/NewPage
+{
+ /x 1 inch def
+ /y 10 inch def
+ /Y y def
+ x y moveto
+} def
+
+end % fontlistdict
+%%EndProlog
+%=======================================================================
+%%BeginSetup
+/#copies 1 def
+fontlistdict begin
+
+% Count the fonts available, while putting all of the font names on
+% the stack. We need to create a new string for each of them, because
+% scratch gets reused on each loop iteration.
+/n 0 def
+systemdict /resourceforall known
+ { % Level 2 PostScript
+ /scratch 256 string def
+ (*) { /n n 1 add def dup length string cvs } scratch /Font resourceforall
+ }
+ { % Level 1 PostScript
+ FontDirectory { pop /n n 1 add def dup length string cvs } forall
+ }
+ifelse
+
+% Make an array to hold the font names and then store them from the stack
+/FontArray n array def
+FontArray astore
+
+% Sort the font array (astore left FontArray on the stack)
+Bubblesort
+
+end %fontlistdict
+%%EndSetup
+%=======================================================================
+%%Page: 1 1
+%%BeginPageSetup
+fontlistdict begin
+NewPage
+end % fontlistdict
+%%EndPageSetup
+
+fontlistdict begin
+
+% Display the sorted fonts: this make take several pages
+/n 0 def
+/nstr 10 string def
+FontArray
+{
+ /n n 1 add def
+ n 10 lt { ( ) show } if
+ n 100 lt { ( ) show } if
+ n 1000 lt { ( ) show } if
+ n nstr cvs show
+ (: ) show
+ show
+ NewLine
+}
+forall
+
+/Times-Bold findfont PointSize scalefont setfont
+(Total memory: ) show
+vmstatus 40 string cvs show
+NewLine
+
+(Memory used: ) show
+40 string cvs show
+NewLine
+
+pop % discard 3rd vmstatus value
+
+(Free memory: ) show
+vmstatus exch sub 40 string cvs show
+NewLine
+
+pop % discard 3rd vmstatus value
+
+end % fontlistdict
+
+showpage
+%%PageTrailer
+%=======================================================================
+%%Trailer
+%%EOF
diff --git a/fonts/utilities/psposter/fontlold.ps b/fonts/utilities/psposter/fontlold.ps
new file mode 100644
index 0000000000..3253298fef
--- /dev/null
+++ b/fonts/utilities/psposter/fontlold.ps
@@ -0,0 +1,98 @@
+%!
+% Prints a sorted list of resident fonts.
+
+/MaxNrOfFonts 100 def % Maximum numbers of fonts...
+/Xpos 136 def
+/Ypos 690 def
+/num 0 def % local counter
+/incr {
+ /num num 1 add def
+} def
+
+/s40 { 40 string } def % Proper length of the fontname
+
+/showline { % Show and newlines
+ show
+ newline
+} def
+
+/newline { % Spacing between lines
+ /Ypos Ypos 12 sub def
+ Xpos Ypos moveto
+} def
+
+/CountFonts { % Count the fonts and put the names into array
+ FontDirectory
+ {
+ pop
+ s40
+ cvs
+ incr
+ }
+ forall
+ /FontArray num array def
+ FontArray astore
+ pop
+} def
+
+/ListFonts { % Sort the fonts and show them on paper
+ Bubbelsort
+ FontArray
+ {
+ showline
+ }
+ forall
+} def
+
+/Bubbelsort { % Here is the sorting routine
+ 1 1 num 1 sub
+ {
+ /localcount exch def
+ num 1 sub -1 localcount
+ {
+ /innercount exch def
+ /firststring FontArray innercount 1 sub get def
+ /secondstring FontArray innercount get def
+ firststring secondstring gt
+ {
+ FontArray innercount 1 sub secondstring put
+ FontArray innercount firststring put
+ } if
+ } for
+ } for
+} def
+
+/prettyline
+{ /YPOSition exch def
+ newpath
+ Xpos Ypos YPOSition add moveto
+ Xpos 100 add Ypos YPOSition add lineto
+ stroke
+} def
+
+/Times-Roman findfont 12 scalefont setfont
+14 prettyline
+
+Xpos Ypos 18 add moveto
+CountFonts
+(Number of fonts: ) show
+num s40 cvs show
+
+30 prettyline
+Xpos Ypos moveto
+ListFonts
+newline
+
+/Times-Bold findfont 12 scalefont setfont
+(Total memory: ) show
+vmstatus s40 cvs show newline
+(Memory used: ) show
+s40 cvs show newline
+pop
+(Free memory: ) show
+vmstatus exch sub s40 cvs show newline newline
+pop
+/Times-Roman findfont 12 scalefont setfont
+(From ulfis@nada.kth.se, 88-10-05) show
+
+showpage
diff --git a/fonts/utilities/psposter/fontlsim.ps b/fonts/utilities/psposter/fontlsim.ps
new file mode 100644
index 0000000000..1440d8bc81
--- /dev/null
+++ b/fonts/utilities/psposter/fontlsim.ps
@@ -0,0 +1,41 @@
+%!
+% fontlist.ps
+% Send this file to a PostScript device to list
+% the names of all of the resident fonts.
+% [13-Dec-1994]
+/inch { 72 mul } def
+/PointSize 10 def
+/ColumnWidth 3 inch def
+/Courier findfont PointSize scalefont setfont
+/n 0 def
+/newcolumn
+{
+ /x x ColumnWidth add def
+ x y moveto
+ 8 inch x gt { showpage newpage } if
+} def
+/newpage
+{
+ /x 1 inch def
+ /y 10 inch def
+ x y moveto
+} def
+/nstr 10 string def
+/scratch 256 string def
+newpage
+(*)
+{
+ /n n 1 add def
+ gsave
+ n nstr cvs show
+ (: ) show
+ show
+ grestore
+ 0 PointSize -1.2 mul rmoveto
+ currentpoint exch pop 1 inch lt
+ {
+ newcolumn
+ } if
+}
+scratch /Font resourceforall
+showpage
diff --git a/fonts/utilities/psposter/fontshow.ps b/fonts/utilities/psposter/fontshow.ps
new file mode 100644
index 0000000000..9e626223d0
--- /dev/null
+++ b/fonts/utilities/psposter/fontshow.ps
@@ -0,0 +1,190 @@
+%!PS-Adobe-3.0
+%=======================================================================
+% Send this file to a PostScript device to list the names of all of
+% the resident fonts, in ascending order, together with a small sample
+% of each font.
+%=======================================================================
+%%Title: fontshow.ps
+%%CreationDate: Thu Dec 15 09:31:00 MST 1994
+%%Creator: Nelson H. F. Beebe <beebe@sunrise>
+%%For: Nelson H. F. Beebe <beebe@sunrise>
+%%BoundingBox: 0 0 612 792
+%%DocumentMedia: A 612 792 () () ()
+%%DocumentData: Clean7Bit
+%%DocumentFonts: font Courier Times-Bold
+%%DocumentNeededResources: font Courier Times-Bold
+%%DocumentSuppliedResources:
+%%Orientation: Portrait
+%%PageOrder: Ascend
+%%Pages: 1
+% NB: The number of pages depends on the number of resident fonts
+%%EndComments
+%=======================================================================
+%%BeginProlog
+/fontshowdict 50 dict def
+fontshowdict begin
+
+/inch { 72 mul } def
+
+/PointSize 10 def
+
+/ColumnWidth 3.24 inch def % slightly less than (8.5 - 2)/2
+
+/Courier findfont PointSize scalefont setfont
+
+/BaselineSkipFactor 1.2 def
+
+/BaselineSkip { PointSize BaselineSkipFactor mul } def
+
+/BottomOfColumn { y 1 inch lt } def
+
+/ColumnOffPage { x ColumnWidth add 7.5 inch gt } def
+
+/Bubblesort % Here is the sorting routine, courtesy of ulfis@nada.kth.se
+{ % Usage: array Bubblesort
+ % This code may be used for arrays of strings and arrays of numbers
+ /TheArray exch def
+ /num TheArray length def
+ num 1 gt
+ {
+ 1 1 num 1 sub
+ {
+ /localcount exch def
+ num 1 sub -1 localcount
+ {
+ /innercount exch def
+ /firststring TheArray innercount 1 sub get def
+ /secondstring TheArray innercount get def
+ firststring secondstring gt
+ {
+ TheArray innercount 1 sub secondstring put
+ TheArray innercount firststring put
+ } if
+ } for
+ } for
+ } if
+} def
+
+/ColumnSpaceCheck
+{ % Usage: vertical-space-needed ColumnSpaceCheck
+ y exch
+ neg y add /y exch def
+ BottomOfColumn { pop NewColumn } { /y exch def } ifelse
+} def
+
+/FontShow
+{ % Usage: fontname FontShow
+ currentfont exch
+ findfont 0.8 PointSize mul scalefont setfont
+ (ABCDEFGHIJKLMNOPQRSTUVWXYZ) show NewLine
+ (abcdefghijklmnopqrstuvwxyz) show NewLine
+ (0123456789 !@#$%^&*()_+|~-=\\`{}[]:";'<>?,./) show NewLine
+ (The quick brown fox jumps over the lazy dog.) show NewLine
+ NewLine
+ setfont
+} def
+
+/NewColumn
+{
+ /x x ColumnWidth add def
+ /y Y def
+ ColumnOffPage { showpage NewPage } if
+ x y moveto
+} def
+
+/NewLine
+{
+ /y y BaselineSkip sub def
+ BottomOfColumn { NewColumn } if
+ x y moveto
+} def
+
+/NewPage
+{
+ /x 1 inch def
+ /Y 10 inch PointSize BaselineSkipFactor mul sub def % top of column
+ /y Y def
+ x y moveto
+} def
+
+end % fontshowdict
+%%EndProlog
+%=======================================================================
+%%BeginSetup
+/#copies 1 def
+fontshowdict begin
+
+% Count the fonts available, while putting all of the font names on
+% the stack. We need to create a new string for each of them, because
+% scratch gets reused on each loop iteration.
+/n 0 def
+systemdict /resourceforall known
+ { % Level 2 PostScript
+ /scratch 256 string def
+ (*) { /n n 1 add def dup length string cvs } scratch /Font resourceforall
+ }
+ { % Level 1 PostScript
+ FontDirectory { pop /n n 1 add def dup length string cvs } forall
+ }
+ifelse
+
+% Make an array to hold the font names and then store them from the stack
+/FontArray n array def
+FontArray astore
+
+% Sort the font array (astore left FontArray on the stack)
+Bubblesort
+
+end %fontshowdict
+%%EndSetup
+%=======================================================================
+%%Page: 1 1
+%%BeginPageSetup
+fontshowdict begin
+NewPage
+%%EndPageSetup
+
+% Display the sorted fonts: this make take several pages
+/n 0 def
+/nstr 10 string def
+FontArray
+{
+ dup
+ BaselineSkip 2 mul BaselineSkip 0.8 mul 5 mul add ColumnSpaceCheck
+ /n n 1 add def
+ n 10 lt { ( ) show } if
+ n 100 lt { ( ) show } if
+ n 1000 lt { ( ) show } if
+ n nstr cvs show
+ (: ) show
+ show
+ NewLine
+ cvn FontShow
+}
+forall
+
+/Times-Bold findfont PointSize scalefont setfont
+(Total memory: ) show
+vmstatus 40 string cvs show
+NewLine
+
+(Memory used: ) show
+40 string cvs show
+NewLine
+
+pop % discard 3rd vmstatus value
+
+(Free memory: ) show
+vmstatus exch sub 40 string cvs show
+NewLine
+
+pop % discard 3rd vmstatus value
+
+end % fontshowdict
+
+showpage
+%%PageTrailer
+%=======================================================================
+%%Trailer
+%%EOF
+
diff --git a/fonts/utilities/psposter/man2ps b/fonts/utilities/psposter/man2ps
new file mode 100644
index 0000000000..8d0f230443
--- /dev/null
+++ b/fonts/utilities/psposter/man2ps
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Filter for converting "troff -mxx" to PostScript. This script is
+# normally linked to the names man2ps, ms2ps, me2ps, and mm2ps.
+#
+# Usage:
+# man2ps [<] cc.1 >cc.ps
+# me2ps [<] foo.me >foo.ps
+# mm2ps [<] foo.mm >foo.ps
+# ms2ps [<] foo.ms >foo.ps
+#
+# [08-May-1993]
+
+# Choose a troff format according to the scrip name.
+case `basename $0` in
+ man*) FORMAT=-man ;;
+ me*) FORMAT=-me ;;
+ mm*) FORMAT=-mm ;;
+ ms*) FORMAT=-ms ;;
+ *) echo "Unknown troff format:" ; exit 1 ;;
+esac
+
+# We can use either GNU groff or Sun Solaris troff + dpost
+if [ -x /usr/local/bin/groff ]
+then # GNU groff
+ TROFF="groff $FORMAT"
+ TROFF2PS="cat"
+elif [ -x /usr/lib/lp/postscript/dpost ]
+then # Solaris 2.1
+ TROFF="troff $FORMAT"
+ TROFF2PS="/usr/lib/lp/postscript/dpost"
+else
+ echo "Cannot find troff-to-PostScript filter"
+ exit 1
+fi
+
+tbl $* | eqn | $TROFF | $TROFF2PS
diff --git a/fonts/utilities/psposter/psposter.awk b/fonts/utilities/psposter/psposter.awk
new file mode 100644
index 0000000000..cf6163161a
--- /dev/null
+++ b/fonts/utilities/psposter/psposter.awk
@@ -0,0 +1,1184 @@
+### ====================================================================
+### @Awk-file{
+### author = "Nelson H. F. Beebe",
+### version = "0.08",
+### date = "16 January 1995",
+### time = "14:49:41 MST",
+### filename = "psposter.sh",
+### address = "Center for Scientific Computing
+### Department of Mathematics
+### University of Utah
+### Salt Lake City, UT 84112
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 581 4148",
+### checksum = "19029 1184 5360 42015",
+### email = "beebe@math.utah.edu (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "poster, PostScript",
+### supported = "yes",
+### docstring = "Display a centered message in a very large
+### font for a poster, which is represented as an
+### output Encapsulated PostScript file which
+### will produce exactly one page.
+###
+### Usage:
+### psposter [+author] [+bd color] [+bg color]
+### [+bs factor] [+bw dimension]
+### [+c nnn] [+copyright] [+d ]
+### [+fg color] [+fn fontname]
+### [+h dimension] [+help] [+l]
+### [+mw dimension] [+p dimension]
+### [+paper form] [+s factor]
+### [+table {8/o | 8/h | 16/o | 16/h}]
+### [+version] [+w dimension]
+### [+x dimension] [+y dimension]
+### ['?'] [++]
+### [word(s) or <infile] >PostScript-file
+###
+### The font size is normally chosen
+### automatically so that the longest line fills
+### the page, but a fixed font size may be
+### requested if required.
+###
+### If there are too many lines to fit on one
+### page, lines will be lost at the top and
+### bottom of the page.
+###
+### Options are provided to change colors, to
+### request multiple copies, to adjust the
+### position, scale, and orientation, and to
+### select the font.
+###
+### Each poster line consists of one argument,
+### if the words come from the command line, or
+### one line, if the words come from a file.
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+### ====================================================================
+BEGIN {
+ VERSION_NUMBER = "0.08"
+ VERSION = "Version " VERSION_NUMBER " [16-Jan-1995]"
+ AFMPATH = ENVIRON["AFMPATH"]
+ if (AFMPATH == "") # supply default fallback search path
+ AFMPATH = "/usr/local/lib/afm"
+ split(AFMPATH,afmpath,":")
+ AFMMAPFILE = find_file(afmpath,"afmfonts.map")
+ if (AFMMAPFILE == "")
+ warning("Cannot find font mapping file [afmfonts.map]")
+
+ DEFAULT_FONT_NAME = "Times-Bold"
+
+ RGBPATH = ENVIRON["RGBPATH"]
+ if (RGBPATH == "") # supply default fallback search path
+ RGBPATH = "/usr/lib/X11:/usr/openwin/lib/X11:/usr/local/lib/X11:/usr/local/X11R5/lib"
+ split(RGBPATH,rgbpath,":")
+ RGBTXTFILE = find_file(rgbpath,"rgb.txt")
+ if (RGBTXTFILE == "")
+ warning("Cannot find X11 color data base file [rgb.txt]")
+
+ angle = "" # empty string means unset
+ background = "0.9 0.9 0.9" # 10% gray
+ baseline_skip = 1.2
+ border_color = "0.5 0.5 0.5" # 50% gray
+ border_width = 10 # big points
+ copies = 1
+ display_fontsize = 0
+ font_name = DEFAULT_FONT_NAME
+ foreground = "0 0 0" # black
+ height = 0
+ width = 0
+ landscape = 0
+ make_font_table = 0
+ margin_width = "" # empty string means unset
+ paper_name = ""
+ point_size = 0
+ ScaleFactor = 1
+ x_offset = 0
+ y_offset = 0
+
+ initialize_paper_table()
+
+ for (k = 1; k < ARGC; ++k) # preserve original command-line arguments
+ OLD_ARGV[k] = ARGV[k]
+
+ for (k = 1; k < ARGC; k++) # collect +switches
+ {
+ if (ARGV[k] == "+author")
+ author()
+ else if (ARGV[k] == "+bd")
+ {
+ border_color = ARGV[++k]
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+bg")
+ {
+ background = ARGV[++k]
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+bs")
+ {
+ baseline_skip = ARGV[++k] + 0
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+bw")
+ {
+ border_width = bigpoint(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+c")
+ {
+ copies = ARGV[++k] + 0
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+copyright")
+ copyright()
+ else if (ARGV[k] == "+d")
+ display_fontsize = 1
+ else if (ARGV[k] == "+fg")
+ {
+ foreground = ARGV[++k]
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+fn")
+ {
+ font_name = ARGV[++k]
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+h")
+ {
+ height = bigpoint(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if ((ARGV[k] == "+help") || (ARGV[k] == "?"))
+ usage()
+ else if (ARGV[k] == "+l")
+ {
+ landscape = 1
+ angle = +90
+ }
+ else if (ARGV[k] == "+mw")
+ {
+ margin_width = bigpoint(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+s")
+ {
+ ScaleFactor = ARGV[++k] + 0
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+table")
+ {
+ parse_table_type(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+p")
+ {
+ point_size = bigpoint(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+paper")
+ {
+ set_paper_dimensions(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+r")
+ {
+ angle = ARGV[++k] + 0
+ ARGV[k] = "" # forget this argument
+ angle = angle % 360 # reduce to -360 .. 360
+ if (angle < 0) # and reduce again to 0 .. 359
+ angle += 360
+ if (!((angle == 0) || (angle == 90) || (angle == 180) || (angle == 270)))
+ error("rotation angle is not a multiple of 90 degrees in -360 .. +360")
+ }
+ else if (ARGV[k] == "+version")
+ version()
+ else if (ARGV[k] == "+w")
+ {
+ width = bigpoint(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+x")
+ {
+ x_offset = bigpoint(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "+y")
+ {
+ y_offset = bigpoint(ARGV[++k])
+ ARGV[k] = "" # forget this argument
+ }
+ else if (ARGV[k] == "++") # no more arguments
+ {
+ while (k < ARGC) # remaining words are for poster text
+ {
+ word[++n] = ARGV[++k]
+ ARGV[k] = "" # forget this argument
+ }
+ }
+ else if (ARGV[k] ~ /^[ \t]*[+]/)
+ error("unrecognized option [" ARGV[k] "]: try +help for more information")
+ else
+ word[++n] = ARGV[k]
+ }
+
+ if ((n == 0) && (make_font_table == 0))
+ { # no words supplied, so read stdin for lines to print
+ while (getline <"/dev/stdin" > 0)
+ word[++n] = $0
+ }
+
+ if (paper_name == "")
+ set_paper_dimensions("A")
+
+ if (margin_width == "")
+ margin_width = (paper_left + paper_right + paper_top + paper_bottom)/4
+ if (height == 0)
+ height = paper_height
+ if (width == 0)
+ width = paper_width
+
+ #
+ # Here is what the picture will look like. Ps mark the PAGE
+ # boundary, enclosing a region of size (PageWidth,PageHeight).
+ # Ms mark the MARGIN, and Bs mark the border; both have
+ # constant width on all four edges. The inner frame contains
+ # the poster text; it has width W (TextWidth) and height H
+ # (TextHeight). The lower-left corner of the MARGIN area is at
+ # (xoffset,yoffset) from the lower-left page corner. The
+ # BoundingBox surrounds the border rectangle marked by Bs.
+ #
+ # For full page posters, normally (xoffset,yoffset) = (0,0),
+ # but the MarginWidth is non-zero, because most PostScript
+ # output devices are incapable of printing closer than about
+ # 5mm to the edge of the printing surface.
+ #
+ # The inner frame may be further scaled by ScaleFactor;
+ # that scaling applies to everything, EXCEPT
+ # (xoffset,yoffset), because those offsets are used to
+ # position the scaled picture on the page.
+ #
+ # PPPPPPPPPPPPPPPPPPPPPPPP
+ # P P
+ # P P
+ # P MMMMMMMMMMMMMMMMMM P
+ # P MMMMMMMMMMMMMMMMMM P
+ # P MMBBBBBBBBBBBBBBMM P
+ # P MMB ^ BMM P
+ # P MMB | BMM P
+ # P MMB<-+----W--->BMM P
+ # P MMB | BMM P
+ # P MMB | BMM P
+ # P MMB H BMM P
+ # P MMB | BMM P
+ # P MMB | BMM P
+ # P MMB | BMM P
+ # P MMB | BMM P
+ # P MMB | BMM P
+ # P MMB v BMM P
+ # P MMBBBBBBBBBBBBBBMM P
+ # P MMMMMMMMMMMMMMMMMM P
+ # P MMMMMMMMMMMMMMMMMM P
+ # ^ P P
+ # | P P
+ # yoffset | P P
+ # | P P
+ # v PPPPPPPPPPPPPPPPPPPPPPPP
+ # <->xoffset
+ #
+
+ # NB: text_width and text_height must match the definitions of the
+ # PostScript values TextWidth and TextHeight below
+ text_width = width - 2*margin_width - 2*border_width
+ text_height = height - 2*margin_width - 2*border_width
+
+ "date" | getline current_date_and_time
+ if ("USER" in ENVIRON)
+ username = ENVIRON["USER"]
+ else if ("LOGNAME" in ENVIRON)
+ username = ENVIRON["LOGNAME"]
+ else
+ username = "unknown"
+ "awk -F: '/^" username "/ {print $5}' /etc/passwd" | \
+ getline personal_name
+ "hostname" | getline hostname
+
+ print "%!PS-Adobe-3.0 EPSF-3.0"
+ printf("%%%%Title: psposter")
+ for (k = 1; k < ARGC; ++k)
+ printf(" %s",OLD_ARGV[k])
+ print ""
+
+ print "%%CreationDate:", current_date_and_time
+ print "%%Creator: psposter", VERSION
+ print "%%For: " personal_name " <" username "@" hostname ">"
+ print "%%BoundingBox:", \
+ floor(x_offset + ScaleFactor * margin_width), \
+ floor(y_offset + ScaleFactor * margin_width), \
+ ceil(x_offset + \
+ ScaleFactor * (margin_width + text_width + 2*border_width)), \
+ ceil(y_offset + \
+ ScaleFactor * (margin_width + text_height + 2*border_width))
+ print "%%DocumentMedia:", paper_name, \
+ ceil(paper_width), ceil(paper_height), "() () ()"
+ print "%%DocumentData: Clean7Bit"
+ print "%%DocumentFonts: font",font_name
+ print "%%DocumentNeededResources: font", font_name
+ print "%%Orientation:", (landscape ? "Landscape" : "Portrait")
+ print "%%PageOrder: Ascend"
+ print "%%Pages: 1"
+ print "%%EndComments"
+ print "%======================================================================="
+ print "%%BeginProlog"
+ print "/psposterdict 50 dict def"
+ print "psposterdict begin"
+ print "/inch { 72 mul } def"
+ print "/BackgroundColor {", getcolor(background), "} def %",background
+ print "/BaselineSkipFactor", baseline_skip, "def"
+ print "/BorderColor {", getcolor(border_color), "} def %",border_color
+ print "/BorderWidth", border_width, "def"
+ print "/CapHeight"
+ print "{"
+ print "\tgsave newpath 0 0 moveto (M) true charpath pathbbox"
+ print "\texch pop sub neg exch pop grestore"
+ print "} def"
+ print "/ForegroundColor {", getcolor(foreground), "} def %",foreground
+ if (angle != "") # "+rotation angle" overrides "+l"
+ landscape = (angle / 90) % 2
+ print "/LandscapeMode", (landscape ? "true" : "false"), "def"
+ print "/MarginWidth", margin_width, "def"
+ print "/PageHeight", paper_height, "def"
+ print "/PageWidth", paper_width, "def"
+ print "/Height", height, "def"
+ print "/Width", width, "def"
+ print "/PointSize", point_size, "def"
+ print "/ROTATE_0 {} def"
+ print "/ROTATE_90 {Width 0 translate 90 rotate} bind def"
+ print "/ROTATE_180 {Width Height translate 180 rotate} bind def"
+ print "/ROTATE_270 {0 Height translate 270 rotate} bind def"
+ print "/ScaleFactor", ScaleFactor, "def"
+
+ print "LandscapeMode"
+ print "{"
+ print "\t/TextHeight Width MarginWidth 2 mul sub BorderWidth 2 mul sub def"
+ print "\t/TextWidth Height MarginWidth 2 mul sub BorderWidth 2 mul sub def"
+ print "}"
+ print "{"
+ print "\t/TextHeight Height MarginWidth 2 mul sub BorderWidth 2 mul sub def"
+ print "\t/TextWidth Width MarginWidth 2 mul sub BorderWidth 2 mul sub def"
+ print "}"
+ print "ifelse"
+
+ print "/XOffset", x_offset, "def"
+ print "/YOffset", y_offset, "def"
+
+ print "% Center and show a string at the current point, leaving"
+ print "% point at the center of the next line."
+ print "% Usage: (string) cshow"
+ print "/cshow"
+ print "{"
+ print "\tcurrentpoint /cpy exch def /cpx exch def"
+ print "\tdup stringwidth pop 0.5 mul neg 0 rmoveto show"
+ print "\tcpx cpy moveto"
+ print "\tNewLine"
+ print "} def"
+
+ print "/max"
+ print "{"
+ print "\t/a exch def"
+ print "\t/b exch def"
+ print "\ta b gt { a } { b } ifelse"
+ print "} def"
+
+ print "/min"
+ print "{"
+ print "\t/a exch def"
+ print "\t/b exch def"
+ print "\ta b lt { a } { b } ifelse"
+ print "} def"
+
+ print "/TheFont /" font_name " def"
+
+ print "% Set the font size so that longest PosterLines string fills the TextWidth"
+ print "% Usage: setfontsize"
+ print "/setfontsize"
+ print "{"
+ print "\tTheFont findfont 10 scalefont setfont"
+ print "\t% Set TheFontSize according to maximum string width"
+ print "\t0 PosterLines { stringwidth pop max } forall TextWidth exch div 10 mul"
+ print "\t/TheFontSize exch def"
+ print "\t% Adjust TheFontSize according to the number of text lines"
+ print "\tLineCount TheFontSize mul BaselineSkipFactor mul"
+ print "\tTextHeight div"
+ print "\tdup 1 gt { TheFontSize exch div /TheFontSize exch def } { pop } ifelse"
+ if (point_size > 0) # override
+ {
+ print "\t% NB: The following definition silently overrides the previous one"
+ print "\t/TheFontSize PointSize def"
+ }
+ print "\t/BaselineSkip BaselineSkipFactor TheFontSize mul def"
+ print "\tTheFont findfont TheFontSize scalefont setfont"
+ print "} def"
+
+ print "/NewLine {0 BaselineSkip neg rmoveto} def"
+
+ print "/PosterLines"
+ print "["
+ for (k = 1; k <= n; ++k)
+ print "\t(" word[k] ")"
+ print "] def"
+ print "/LineCount PosterLines length 1 max def"
+ if (make_font_table)
+ print_font_table_macros()
+ print "end % psposterdict"
+ print "%%EndProlog"
+
+ print "%======================================================================="
+ print "%%BeginSetup"
+ print "/#copies", copies," def"
+
+ # Now see if we have a font that must be downloaded. If we do not
+ # find it, we silently assume that it is a resident font on the
+ # output PostScript device. AFMMAPFILE lines look like this:
+ # ZapfChancery-MediumItalic = ZapChaMI % Optional comment
+
+ if (AFMMAPFILE == "")
+ mapline = ""
+ else
+ "grep 2>/dev/null \"^" font_name "[ \t]\" " AFMMAPFILE | getline mapline
+
+ k = index(mapline,"=")
+ if (k > 0) # copy font using mapped filename
+ {
+ basename = substr(mapline,k+1)
+ gsub(/%.*$/,"",basename) # discard inline comment
+ gsub(/[ \t]/,"",basename) # and spaces
+ }
+ else # try to copy font using native file name
+ basename = font_name
+
+ filename = find_file(afmpath, basename ".pfa")
+ if (filename == "")
+ filename = find_file(afmpath, basename ".pfb")
+ if (filename == "")
+ filename = find_file(afmpath, basename ".pfa.gz")
+ if (filename == "")
+ filename = find_file(afmpath, basename ".pfa.Z")
+ if (filename == "")
+ filename = find_file(afmpath, basename ".pfb.gz")
+ if (filename == "")
+ filename = find_file(afmpath, basename ".pfb.Z")
+ if (filename != "") # download the font
+ copyfont(filename)
+
+ print "%%EndSetup"
+
+ print "%======================================================================="
+ print "%%Page: 1 1"
+ print "%%BeginPageSetup"
+ print "psposterdict begin"
+ print "XOffset YOffset translate"
+ print "ScaleFactor dup scale"
+ print "ROTATE_" (angle + 0)
+ print "end % psposterdict"
+ print "%%EndPageSetup"
+ print ""
+ print "psposterdict begin"
+ print "% Draw a frame box and fill it with the background color, and a border color."
+ print "BorderWidth setlinewidth"
+ print "newpath"
+ print "MarginWidth BorderWidth 0.5 mul add dup moveto"
+ print "TextWidth BorderWidth add 0 rlineto"
+ print "0 TextHeight BorderWidth add rlineto"
+ print "TextWidth BorderWidth add neg 0 rlineto"
+ print "closepath"
+ print "BackgroundColor setrgbcolor gsave fill grestore"
+ print "BorderColor setrgbcolor stroke"
+
+ print ""
+ print "0 0 0 setrgbcolor % revert to black"
+
+ print ""
+ print "% Set the clipping path to the text region"
+ print "0 setlinewidth"
+ print "newpath"
+ print "MarginWidth BorderWidth add dup moveto"
+ print "TextWidth 0 rlineto"
+ print "0 TextHeight rlineto"
+ print "TextWidth neg 0 rlineto"
+ print "closepath"
+ print "clip"
+
+ print ""
+ print "% Move origin to text box center, since x = 0 is a convenient"
+ print "% value for centering text."
+ print "LandscapeMode"
+ print "\t{ Height 0.5 mul Width 0.5 mul translate }"
+ print "\t{ Width 0.5 mul Height 0.5 mul translate }"
+ print "ifelse"
+
+ if (make_font_table)
+ {
+ print "% Typeset the poster text."
+ print "TheFont MakeFontTable"
+ }
+ else
+ {
+ print "% Set font size so that the longest line just fills the TextWidth."
+ print "setfontsize"
+ print "% Center the text vertically, such that the middle line has its text"
+ print "% (rather than baseline distance) centered on a horizontal line"
+ print "% passing through the center of the picture."
+ print "0 LineCount 0.5 mul BaselineSkip mul BaselineSkip sub moveto"
+
+ print "0 BaselineSkip CapHeight sub 0.5 mul rmoveto"
+
+ print "ForegroundColor setrgbcolor"
+ print "% Typeset the poster text."
+ print "PosterLines { cshow } forall"
+ }
+ print "end % psposterdict"
+ print "showpage"
+ print "%%PageTrailer"
+
+ if (display_fontsize)
+ {
+ print "%%Page: 2 2"
+ print "%%BeginPageSetup"
+ print "psposterdict begin"
+ print "/tempstr 25 string def"
+ print "/Courier findfont 20 scalefont setfont"
+ print "/BaselineSkip 20 1.2 mul def"
+ print "72 PageHeight 2 div moveto"
+ print "(Set font pointsize by) show"
+ print "/Courier-BoldOblique findfont 20 scalefont setfont"
+ print "( +p ) show"
+ print "TheFontSize ScaleFactor div tempstr cvs show"
+ print "(bp) show"
+ print "showpage"
+ print "end % psposterdict"
+ print "%%PageTrailer"
+ }
+
+ print "%======================================================================="
+ print "%%Trailer"
+ print "%%EOF"
+
+ exit (0) # all done (no command-line words are files)
+}
+
+function author()
+{
+ print \
+ "Author:\n" \
+ "\tNelson H. F. Beebe\n" \
+ "\tCenter for Scientific Computing\n" \
+ "\tDepartment of Mathematics\n" \
+ "\tUniversity of Utah\n" \
+ "\tSalt Lake City UT 84112\n" \
+ "\tUSA\n" \
+ "\tTel: +1 801 581 5254\n" \
+ "\tFAX: +1 801 581 4801\n" \
+ "\tEmail: <beebe@math.utah.edu>\n"
+ url()
+ exit (0)
+}
+
+function bigpoint(dimension)
+{
+ return (72 * inch(dimension))
+}
+
+function ceil(x, n)
+{
+ n = int(x)
+ if (n < x) ++n
+ return (n)
+}
+
+function copyfont(filename, filter,fontline)
+{
+ # NB: .pfb files are binary: gawk can copy them, but nawk cannot.
+ # Even so, before the font can be included in a PostScript file,
+ # it must be converted to ASCII form. We therefore invoke t1ascii
+ # on-the-fly to handle the conversion, plus gunzip or uncompress,
+ # if needed for decompression. t1ascii writes a version banner
+ # to stderr, so we redirect it to /dev/null.
+
+ print "%%BeginResource: font " font_name
+ if (filename ~ /.pfb$/) # convert from .pfb to .pfa on-the-fly
+ filter = "t1ascii 2>/dev/null " filename
+ else if (filename ~ /.pfa.gz$/) # convert from .pfa.gz to .pfa on-the-fly
+ filter = "gunzip <" filename
+ else if (filename ~ /.pfb.gz$/) # convert from .pfb.gz to .pfa on-the-fly
+ filter = "gunzip <" filename " | t1ascii 2>/dev/null "
+ else if (filename ~ /.pfa.Z$/) # convert from .pfa.Z to .pfa on-the-fly
+ filter = "uncompress <" filename
+ else if (filename ~ /.pfb.Z$/) # convert from .pfb.Z to .pfa on-the-fly
+ filter = "uncompress <" filename " | t1ascii 2>/dev/null "
+ else
+ filter = "cat " filename
+ print "% file:", filename
+ if (filter !~ /^cat /) print "% filter:", filter
+ while (filter | getline fontline)
+ print fontline
+ close (filter)
+ print "% font:",font_name
+ print "% file:",filename
+ print "%%EndResource"
+}
+
+function copyright()
+{
+ print \
+ "*********************************************\n" \
+ "*********************************************\n" \
+ "*** This program is in the PUBLIC DOMAIN. ***\n" \
+ "*********************************************\n" \
+ "*********************************************\n"
+ url()
+ exit (0)
+}
+
+function error(message)
+{
+ print message > "/dev/tty"
+ exit (1)
+}
+
+function file_exists(filename)
+{
+ # Unfortunately, getline in both nawk and gawk will hang if its
+ # file does not exist, so we need to test for file existence by
+ # invoking a shell command, sigh...
+
+ return (system("test -f " filename) == 0)
+}
+
+function find_file(path,filename, fullname,k)
+{
+ for (k = 1; k in path; ++k)
+ {
+ fullname = path[k] "/" filename
+ if (file_exists(fullname))
+ return (fullname)
+ }
+ return ("")
+}
+
+function floor(x, n)
+{
+ n = int(x)
+ if (n > x) --n
+ return (n)
+}
+
+function getcolor(value)
+{ # value is e.g. "0.5/0.25/0.9" or "yellow"
+ if (value ~ /[A-Za-z]/) # named color
+ {
+ if (RGBTXTFILE == "")
+ rgbline = "0 0 0" # default to black
+ else
+ ("grep 2>/dev/null -i '^[0-9 \t]*" value "[ \t]*$' " RGBTXTFILE) | \
+ getline rgbline
+ split(rgbline,rgb," ")
+ value = (rgb[1] / 255) " " (rgb[2] / 255) " " (rgb[3] / 255)
+ }
+ else # expect numbered color
+ gsub(/[^0-9.]/," ",value) # eliminate punctuation
+ return (value)
+}
+
+function inch(units, value)
+{
+ value = units + 0 # coerce to number
+
+ if (units ~ "[-+]?[0-9]+[.]?[0-9]*bp") # big points
+ value /= 72.0
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*in") # inches
+ ; # NO-OP
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*cm") # centimeters
+ value /= 2.54
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*pt") # points
+ value /= 72.27
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*cc") # cicero
+ value *= 12.0 * (1238.0 / 1157.0) / 72.27
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*dd") # didot points
+ value *= (1238.0 / 1157.0) / 72.27
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*mm") # millimeters
+ value /= 25.4
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*pc") # pica
+ value *= 12.0 / 72.27
+ else if (units ~ "[-+]?[0-9]+[.]?[0-9]*sp") # scaled points
+ value /= (65536.0 * 72.27)
+ else
+ error("unrecognized dimension " units)
+ return (value)
+}
+
+function initialize_paper_table()
+{
+ # name width height left right bottom top
+
+ # ANSI (note that B folded in half becomes A, etc.) (portrait)
+
+ paper["A"] = "8.5in 11in 1in 1in 1in 1in"
+ paper["B"] = "11in 17in 1in 1in 1in 1in"
+ paper["C"] = "17in 22in 1in 1in 1in 1in"
+ paper["D"] = "22in 34in 1in 1in 1in 1in"
+ paper["E"] = "34in 44in 1in 1in 1in 1in"
+
+ # Common US designations (portrait)
+
+ paper["Computer-1411"] = "14in 11in 1in 1in 1in 1in"
+ paper["Legal"] = "8.5in 13in 1in 1in 1in 1in"
+ paper["Letter"] = "8.5in 11in 1in 1in 1in 1in"
+ paper["US-Legal"] = "8.5in 14in 1in 1in 1in 1in"
+
+ # Common US designations (landscape)
+
+ paper["A-L"] = "11in 8.5in 1in 1in 1in 1in"
+ paper["Computer-1411-L"] = "11in 14in 1in 1in 1in 1in"
+ paper["Legal-L"] = "13in 8.5in 1in 1in 1in 1in"
+ paper["Letter-L"] = "11in 8.5in 1in 1in 1in 1in"
+ paper["US-Legal-L"] = "14in 8.5in 1in 1in 1in 1in"
+
+ # Additional paper and envelope sizes taken from <<Hewlett-Packard
+ # LaserJet Family Paper Specification Guide>> (1992).
+
+ paper["COM10"] = "4.1in 9.5in 1in 1in 1in 1in"
+ paper["DL"] = "110mm 220mm 25mm 25mm 25mm 25mm"
+ paper["Executive"] = "7.25in 10.5in 1in 1in 1in 1in"
+ paper["Monarch"] = "3.9in 7.5in 1in 1in 1in 1in"
+
+ # Miscellaneous and Imagen Ultrascript paper sizes
+
+ paper["A4Small"] = "210mm 297mm 25mm 25mm 25mm 25mm"
+ paper["Ledger"] = "11in 17in 1in 1in 1in 1in"
+ paper["LetterSmall"] = "8.5in 11in 1in 1in 1in 1in"
+ paper["Note"] = "8.5in 11in 1in 1in 1in 1in"
+
+ # ISO standard paper A-series (portrait). Note that Xn folded in half
+ # becomes Xn+1 (X = A, B, C)
+
+ paper["A0"] = "841mm 1189mm 25mm 25mm 25mm 25mm"
+ paper["A1"] = "594mm 841mm 25mm 25mm 25mm 25mm"
+ paper["A2"] = "420mm 594mm 25mm 25mm 25mm 25mm"
+ paper["A3"] = "297mm 420mm 25mm 25mm 25mm 25mm"
+ paper["A4"] = "210mm 297mm 25mm 25mm 25mm 25mm"
+ paper["A5"] = "148mm 210mm 25mm 25mm 25mm 25mm"
+ paper["A6"] = "105mm 148mm 25mm 25mm 25mm 25mm"
+ paper["A7"] = "74mm 105mm 25mm 25mm 25mm 25mm"
+ paper["A8"] = "52mm 74mm 25mm 25mm 25mm 25mm"
+ paper["A9"] = "37mm 52mm 25mm 25mm 25mm 25mm"
+ paper["A10"] = "26mm 37mm 25mm 25mm 25mm 25mm"
+
+ # ISO standard paper A-series (landscape). Note that the final L
+ # is NOT prefixed by a hyphen.
+
+ paper["A0L"] = "1189mm 841mm 25mm 25mm 25mm 25mm"
+ paper["A1L"] = "841mm 594mm 25mm 25mm 25mm 25mm"
+ paper["A2L"] = "594mm 420mm 25mm 25mm 25mm 25mm"
+ paper["A3L"] = "420mm 297mm 25mm 25mm 25mm 25mm"
+ paper["A4L"] = "297mm 210mm 25mm 25mm 25mm 25mm"
+ paper["A5L"] = "210mm 148mm 25mm 25mm 25mm 25mm"
+ paper["A6L"] = "148mm 105mm 25mm 25mm 25mm 25mm"
+ paper["A7L"] = "105mm 74mm 25mm 25mm 25mm 25mm"
+ paper["A8L"] = "74mm 52mm 25mm 25mm 25mm 25mm"
+ paper["A9L"] = "52mm 37mm 25mm 25mm 25mm 25mm"
+ paper["A10L"] = "37mm 26mm 25mm 25mm 25mm 25mm"
+
+ # ISO intermediate paper B-series (portrait)
+
+ paper["B0"] = "1000mm 1414mm 25mm 25mm 25mm 25mm"
+ paper["B1"] = "707mm 1000mm 25mm 25mm 25mm 25mm"
+ paper["B2"] = "500mm 707mm 25mm 25mm 25mm 25mm"
+ paper["B3"] = "353mm 500mm 25mm 25mm 25mm 25mm"
+ paper["B4"] = "250mm 353mm 25mm 25mm 25mm 25mm"
+ paper["B5"] = "176mm 250mm 25mm 25mm 25mm 25mm"
+ paper["B6"] = "125mm 176mm 25mm 25mm 25mm 25mm"
+
+ # ISO intermediate paper B-series (landscape)
+
+ paper["B0L"] = "1414mm 1000mm 25mm 25mm 25mm 25mm"
+ paper["B1L"] = "1000mm 707mm 25mm 25mm 25mm 25mm"
+ paper["B2L"] = "707mm 500mm 25mm 25mm 25mm 25mm"
+ paper["B3L"] = "500mm 353mm 25mm 25mm 25mm 25mm"
+ paper["B4L"] = "353mm 250mm 25mm 25mm 25mm 25mm"
+ paper["B5L"] = "250mm 176mm 25mm 25mm 25mm 25mm"
+ paper["B6L"] = "176mm 125mm 25mm 25mm 25mm 25mm"
+
+ # ISO envelopes for A-series
+
+ paper["C0"] = "1294mm 916mm 25mm 25mm 25mm 25mm"
+ paper["C1"] = "916mm 647mm 25mm 25mm 25mm 25mm"
+ paper["C2"] = "647mm 458mm 25mm 25mm 25mm 25mm"
+ paper["C3"] = "458mm 323mm 25mm 25mm 25mm 25mm"
+ paper["C4"] = "323mm 229mm 25mm 25mm 25mm 25mm"
+ paper["C5"] = "229mm 161mm 25mm 25mm 25mm 25mm"
+ paper["C6"] = "161mm 114mm 25mm 25mm 25mm 25mm"
+
+ # British paper sizes (some are also used in the USA)
+
+ paper["Octavo"] = "5in 8in 1in 1in 1in 1in"
+ paper["Sixmo"] = "6.5in 8in 1in 1in 1in 1in"
+ paper["Quarto"] = "8in 10in 1in 1in 1in 1in"
+ paper["Foolscap"] = "8.5in 13in 1in 1in 1in 1in"
+ paper["Government-legal"] = "8.5in 13in 1in 1in 1in 1in"
+ paper["Folio"] = "8.3in 13in 1in 1in 1in 1in"
+}
+
+function parse_table_type(s, parts,t)
+{
+ t = s
+ gsub(/[^0-9A-Za-z]/," ",t)
+ split(t,parts," ")
+ table_columns = 0 + parts[1]
+ label_base = (parts[2] ~ /^[oO]$/) ? 8 : ((parts[2] ~ /^[hH]$/) ? 16 : 0)
+ if (((table_columns != 8) && (table_columns != 16)) || \
+ ((label_base != 8) && (label_base != 16)))
+ {
+ warning("Unrecognized +table value `" s \
+ "': expected one of 8/o 16/o 8/h 16/h. Defaulting to 8/o.")
+ parse_table_type("8/o")
+ }
+ make_font_table = s
+}
+
+function print_font_table_macros()
+{
+ print "/Black { 0 0 0 } def"
+ print "/LabelBase " label_base " def"
+ print "/TableColumns " table_columns " def"
+ print "/LabelChars 3 def % 0x3_ or \\12_; 3 looks better than 4"
+ print "/RowChars TableColumns def"
+ print "/TheRow RowChars string def % 8 or 16 characters"
+ print "/TitleLines TableColumns 8 eq LabelBase 16 eq and { 3 } { 2 } ifelse def"
+ print "/TableLines 256 TableColumns div TitleLines add def % 16 or 32 char rows and 2 or 3 title rows"
+ print "PointSize 0 eq"
+ print "\t{"
+ print "\t\t/dx"
+ print "\t\t\tTextWidth RowChars LabelChars add div"
+ print "\t\t\tTextHeight TableLines BaselineSkipFactor mul div"
+ print "\t\t\tmin"
+ print "\t\t\tcvi"
+ print "\t\tdef"
+ print "\t}"
+ print "\t{"
+ print "\t\t/dx PointSize def"
+ print "\t}"
+ print "ifelse"
+ print "/TheFontSize dx def"
+ print "/BaselineSkip BaselineSkipFactor TheFontSize mul def"
+ print "/LabelWidth dx LabelChars mul def"
+ print "/TableHeight BaselineSkip TableLines mul def"
+ print "/TableWidth dx 2 mul RowChars mul dx add LabelWidth add def"
+ print "/TitleBoxHeight BaselineSkip TitleLines mul def"
+ print ""
+ print "/KernShow"
+ print "{ % Usage: (string) KernShow % show with characters of width 2*dx"
+ print "\tSavePosition"
+ print "\t{ % stack: c(n) c(n+1)"
+ print "\t\tpop pop"
+ print "\t\t/x x dx 2 mul add def"
+ print "\t\tx y moveto"
+ print "\t}"
+ print "\texch kshow"
+ print "} def"
+ print "/MakeFontTable"
+ print "{ % Usage: /fontname MakeFontTable"
+ print " % (0,0) is at page center"
+ print "\tfindfont TheFontSize scalefont setfont"
+ print "\tTableWidth -2 div TableHeight 2 div moveto"
+ print "\tShowTableTitle"
+ print "\tgsave"
+ print "\t\tSetLabelFont"
+ print "\t\tSetLabelColor"
+ print "\t\tLabelWidth dx add 0 rmoveto"
+ print "\t\tTableColumns 16 eq"
+ print "\t\t\t{"
+ print "\t\t\t\tLabelBase 16 eq"
+ print "\t\t\t\t\t{(0123456789abcdef)}"
+ print "\t\t\t\t\t{(0123456701234567)}"
+ print "\t\t\t\tifelse"
+ print "\t\t\t}"
+ print "\t\t\t{"
+ print "\t\t\t\t(01234567)"
+ print "\t\t\t}"
+ print "\t\tifelse"
+ print "\t\tKernShow"
+ print "\tgrestore"
+ print "\tTableColumns 8 eq LabelBase 16 eq and"
+ print "\t\t{"
+ print "\t\t\tNewLine"
+ print "\t\t\tgsave"
+ print "\t\t\t\tSetLabelFont"
+ print "\t\t\t\tSetLabelColor"
+ print "\t\t\t\tLabelWidth dx add 0 rmoveto"
+ print "\t\t\t\t(89abcdef) KernShow"
+ print "\t\t\tgrestore"
+ print "\t\t}"
+ print "\tif"
+ print "\tSavePosition"
+ print "\t1 setlinewidth"
+ print "\tSetLabelColor"
+ print "\tx y TitleBoxHeight add TableWidth ShowHorizontalRule"
+ print "\tx y TableWidth ShowHorizontalRule"
+ print "\tx y TitleBoxHeight add TableHeight ShowVerticalRule"
+ print "\tx LabelWidth add y TitleBoxHeight add TableHeight ShowVerticalRule"
+ print "\tx TableWidth add y TitleBoxHeight add TableHeight ShowVerticalRule"
+ print "\tTableColumns 16 eq"
+ print "\t\t{"
+ print "\t\t\tx LabelWidth add TableWidth LabelWidth sub 2 div add"
+ print "\t\t\ty TableHeight TitleBoxHeight sub ShowVerticalRule"
+ print "\t\t}"
+ print "\tif"
+ print "\tx y moveto"
+ print "\tNewLine"
+ print "\tForegroundColor setrgbcolor"
+ print "\tShowCharacterTable"
+ print "\tSetLabelColor"
+ print "\tReverseNewline"
+ print "\tx y TableWidth ShowHorizontalRule"
+ print "} def"
+ print "\t/NewLine {0 BaselineSkip neg rmoveto SavePosition} def"
+ print "/ReverseNewline {0 BaselineSkip rmoveto SavePosition} def"
+ print "/RuleVerticalOffset BaselineSkip -0.2 mul def"
+ print "/SavePosition { currentpoint /y exch def /x exch def } def"
+ print "/SetLabelColor { Black setrgbcolor } def"
+ print "/SetLabelFont"
+ print "{"
+ print "\t/Times-BoldItalic findfont TheFontSize scalefont setfont"
+ print "} def"
+ print "/ShowCharacterTable"
+ print "{"
+ print "\t0 TableColumns 255"
+ print "\t{"
+ print "\t\t/n exch def"
+ print "\t\tn 8#100 mod 8#070 eq"
+ print "\t\t{"
+ print "\t\t\tgsave"
+ print "\t\t\t SetLabelColor"
+ print "\t\t\t x y TableWidth ShowHorizontalRule"
+ print "\t\t\tgrestore"
+ print "\t\t} if"
+ print "\t\tShowRowLabel"
+ print "\t\tgsave"
+ print "\t\t\tLabelWidth dx add 0 rmoveto"
+ print "\t\t\tShowRow"
+ print "\t\tgrestore"
+ print "\t\tNewLine"
+ print "\t} for"
+ print "} def"
+ print "/ShowHorizontalRule"
+ print "{ % Usage: x y len ShowHorizontalRule"
+ print "\tgsave"
+ print "\t\t/r exch def"
+ print "\t\tnewpath"
+ print "\t\t\tmoveto"
+ print "\t\t\t0 RuleVerticalOffset rmoveto"
+ print "\t\t\tr 0 rlineto"
+ print "\t\tstroke"
+ print "\tgrestore"
+ print "} def"
+ print "/ShowRow"
+ print "{ % Usage: ShowRow"
+ print "\tgsave"
+ print "\t\t0 1 TableColumns 1 sub"
+ print "\t\t{"
+ print "\t\t\t/k exch def"
+ print "\t\t\tTheRow k n k add put % char"
+ print "\t\t} for % create character row"
+ print "\t\tSavePosition"
+ print "\t\tTheRow KernShow"
+ print "\tgrestore"
+ print "} def"
+ print "/ShowRowLabel"
+ print "{ % Usage: ShowRowLabel"
+ print "\tcurrentpoint"
+ print "\tgsave"
+ print "\t\tSetLabelColor"
+ print "\t\tSetLabelFont"
+ print "\t\tLabelBase 16 eq"
+ print "\t\t\t{"
+ print "\t\t\t\t/TempStr 5 string def"
+ print "\t\t\t\tTempStr 0 ( ) putinterval"
+ print "\t\t\t\tn 16 idiv 8#10000 add 16 TempStr cvrs pop"
+ print "\t\t\t\t/k 0 def"
+ print "\t\t\t\tTempStr"
+ print "\t\t\t\t{ % convert to lowercase"
+ print "\t\t\t\t\tdup dup 8#100 ge exch 8#107 le and { 32 add } if"
+ print "\t\t\t\t\tTempStr exch k exch put"
+ print "\t\t\t\t\t/k k 1 add def"
+ print "\t\t\t\t} forall"
+ print "\t\t\t\tTempStr 0 (\\\\0x) putinterval"
+ print "\t\t\tTempStr 4 (_) putinterval"
+ print "\t\t\t}"
+ print "\t\t\t{"
+ print "\t\t\t\t/TempStr 4 string def"
+ print "\t\t\t\tTempStr 0 ( ) putinterval"
+ print "\t\t\t\tn 8 idiv 8#100 add 8 TempStr cvrs pop"
+ print "\t\t\t\tTempStr 0 (\\\\) putinterval"
+ print "\t\t\t\tTempStr 3 (_) putinterval"
+ print "\t\t\t}"
+ print "\t\tifelse"
+ print "\t\tLabelWidth 2 div 0 rmoveto"
+ print "\t\tTempStr cshow"
+ print "\tgrestore"
+ print "\tmoveto"
+ print "\tSavePosition"
+ print "} def"
+ print "/ShowTableTitle"
+ print "{ % Usage: ShowTableTitle"
+ print "\tNewLine"
+ print "\tgsave"
+ print "\t\tSetLabelColor"
+ print "\t\tSetLabelFont"
+ print "\t\tLabelWidth 0 rmoveto"
+ print "\t\tTableWidth LabelWidth sub 2 div 0 rmoveto"
+ print "\t\t% Create centered title, e.g. 23bp FontName"
+ print "\t\t/TitleString TheFont length 5 add string def"
+ print "\t\tTitleString 0 TheFontSize 4 string cvs putinterval"
+ print "\t\tTitleString 2 (bp ) putinterval"
+ print "\t\tTitleString 5 TheFont dup length string cvs putinterval"
+ print "\t\tTitleString cshow"
+ print "\tgrestore"
+ print "\tNewLine"
+ print "} def"
+ print "/ShowVerticalRule"
+ print "{ % Usage: x y len ShowVerticalRule"
+ print "\tgsave"
+ print "\t\t/r exch def"
+ print "\t\tnewpath"
+ print "\t\t\tmoveto"
+ print "\t\t\t0 RuleVerticalOffset rmoveto"
+ print "\t\t\t0 r neg rlineto"
+ print "\t\tstroke"
+ print "\tgrestore"
+ print "} def"
+}
+
+function set_paper_dimensions(name, n,swap,value)
+{
+ if (name in paper)
+ {
+ n = split(paper[name],value," ")
+ if (n == 6)
+ {
+ paper_name = name
+ paper_width = bigpoint(value[1])
+ paper_height = bigpoint(value[2])
+ paper_left = bigpoint(value[3])
+ paper_right = bigpoint(value[4])
+ paper_bottom = bigpoint(value[5])
+ paper_top = bigpoint(value[6])
+ }
+ else
+ error("internal error: corrupt paper dimensions for paper type " name)
+ }
+ else
+ { # expect something like 8.5inx11in
+ n = split(name,value,"x")
+ if (n == 2)
+ {
+ paper_name = name
+ paper_width = bigpoint(value[1])
+ paper_height = bigpoint(value[2])
+ paper_left = bigpoint("1in")
+ paper_right = bigpoint("1in")
+ paper_bottom = bigpoint("1in")
+ paper_top = bigpoint("1in")
+ }
+ else
+ error("unrecognized paper type " name)
+ }
+ if (paper_width > paper_height)
+ landscape = 1
+}
+
+function url()
+{
+ print \
+ "Internet source distribution:\n" \
+ "\tURL: ftp://ftp.math.utah.edu/pub/misc/psposter-" \
+ VERSION_NUMBER ".tar.z\n" \
+ "\tURL: ftp://ftp.math.utah.edu/pub/misc/psposter-" \
+ VERSION_NUMBER ".zip\n" \
+ "\tURL: ftp://ftp.math.utah.edu/pub/misc/psposter-" \
+ VERSION_NUMBER ".zoo"
+}
+
+
+function usage()
+{
+ print "Usage: psposter [+option value] ... word1 word2 ..."
+ print ""
+ print "Recognized options are:"
+ print "\t+author display program author and quit"
+ print "\t+bd color set border color"
+ print "\t+bg color set background color"
+ print "\t+bs factor set baselineskip to factor times font pointsize"
+ print "\t+bw dimension set border width"
+ print "\t+c nnn number of copies to print"
+ print "\t+copyright display program copyright and quit"
+ print "\t+d display font pointsize on second page"
+ print "\t+fg color set foreground color"
+ print "\t+fn fontname select PostScript font"
+ print "\t+h dimension poster height"
+ print "\t+help display this message and quit"
+ print "\t+l landscape (instead of portrait) orientation"
+ print "\t+mw dimension set margin width"
+ print "\t+p dimension set font pointsize"
+ print "\t+paper form set paper size"
+ print "\t+r angle set text rotation angle in degrees (only multiples of 90)"
+ print "\t+s factor set poster scale factor"
+ print "\t+table {8/o | 8/h | 16/o | 16/h} show font character table"
+ print "\t+version display program version and quit"
+ print "\t+w dimension set poster width"
+ print "\t+x dimension set x offset"
+ print "\t+y dimension set y offset"
+ print "\t? display this message and quit"
+ print "\t++ no more options: remaining words are for poster text"
+ print ""
+ print "Any command-line arguments that are not recognized as options will be"
+ print "typeset on the poster, one argument per line. If no poster text words"
+ print "are supplied on the command line, then poster lines are read from"
+ print "standard input."
+ print ""
+ print "Color names may be any named X Window System color, or red/green/blue"
+ print "values in 0..1 separated by characters other than digits or period."
+ print "E.g. 0/1/0 is green, and 0.5:0.5:0.5 is 50% grey."
+ print ""
+ print "Dimensions consist of a (possibly signed) number followed by a TeX"
+ print "dimension unit: bp (big points), cc (ciceros), cm (centimeters), dd"
+ print "(didot points), in (inches), mm (millimeters), pc (picas), pt (points),"
+ print "or sp (scaled points). E.g. 72bp, 2.54cm, 67.542dd, 1in, 25.4mm,"
+ print "6.023pc, 72.27pt, and 4736286.72sp all specify a dimension of one inch."
+ print ""
+ print "Paper names may be either standard ones like A, A4, Foolscap, etc., or"
+ print "width and height dimensions separated by an x, so that 210mmx297mm and"
+ print "A4 are equivalent, and 8.5inx11in and A are too."
+
+ exit (0)
+}
+
+function version()
+{
+ print "psposter", VERSION "\n"
+ url()
+ exit (0)
+}
+
+
+function warning(message)
+{
+ print message >"/dev/tty"
+}
diff --git a/fonts/utilities/psposter/psposter.man b/fonts/utilities/psposter/psposter.man
new file mode 100644
index 0000000000..55b08379a4
--- /dev/null
+++ b/fonts/utilities/psposter/psposter.man
@@ -0,0 +1,719 @@
+.\" ====================================================================
+.\" @Troff-man-file{
+.\" author = "Nelson H. F. Beebe",
+.\" version = "0.08",
+.\" date = "16 January 1995",
+.\" time = "14:33:47 MST",
+.\" filename = "psposter.man",
+.\" address = "Center for Scientific Computing
+.\" Department of Mathematics
+.\" University of Utah
+.\" Salt Lake City, UT 84112
+.\" USA",
+.\" telephone = "+1 801 581 5254",
+.\" FAX = "+1 801 581 4148",
+.\" checksum = "30262 719 2765 18363",
+.\" email = "beebe@math.utah.edu (Internet)",
+.\" codetable = "ISO/ASCII",
+.\" keywords = "PostScript, poster",
+.\" supported = "yes",
+.\" docstring = "This file contains the UNIX manual pages
+.\" for the psposter utility, a program for
+.\" creating simple one-page posters in
+.\" PostScript.
+.\"
+.\" The checksum field above contains a CRC-16
+.\" checksum as the first value, followed by the
+.\" equivalent of the standard UNIX wc (word
+.\" count) utility output of lines, words, and
+.\" characters. This is produced by Robert
+.\" Solovay's checksum utility.",
+.\" }
+.\" ====================================================================
+.if t .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
+.if n .ds Ps PostScript
+.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Te TeX
+.TH PSPOSTER 1 "16 January 1995" "Version 0.08"
+psposter \- create simple one-page colored posters in PostScript
+.\"======================================================================
+.SH SYNOPSIS
+.B psposter
+[
+.B +author
+]
+[
+.BI +bd " color"
+]
+[
+.BI +bg " color"
+]
+.if n .ti +9n
+[
+.BI +bs " factor"
+]
+[
+.BI +bw " dimension"
+]
+[
+.BI +c " nnn"
+]
+.if t .ti +.5i
+.if n .ti +9n
+[
+.B +copyright
+]
+[
+.B +d
+]
+[
+.BI +fg " color"
+]
+.if n .ti +9n
+[
+.BI +fn " fontname"
+]
+[
+.BI +h " dimension"
+]
+[
+.B +help
+]
+[
+.B +l
+]
+.if t .ti +.5i
+.if n .ti +9n
+[
+.BI +mw " dimension"
+]
+[
+.BI +p " dimension"
+]
+[
+.BI +paper " form"
+]
+.if n .ti +9n
+[
+.BI +r " angle"
+]
+[
+.BI +s " factor"
+]
+.if n .ti +9n
+.if t .ti +.5i
+[
+.BI +table " { 8/o | 8/h | 16/o | 16/h }"
+]
+[
+.B +version
+]
+.if n .ti +9n
+[
+.BI +w " dimension"
+]
+[
+.BI +x " dimension"
+]
+.if t .ti +.5i
+[
+.BI +y " dimension"
+]
+.if n .ti +9n
+[
+.B '?'
+]
+[
+.B ++
+]
+.if t .ti +.5i
+.if n .ti +9n
+[ word(s) or
+.RI < infile
+]
+.RI > \*(Ps\&-file
+.\"======================================================================
+.SH DESCRIPTION
+.B psposter
+creates an Encapsulated \*(Ps\& file containing a
+one-page poster. It may be included as a figure
+in any document processing system that supports
+inclusion of \*(Ps\& figures.
+.PP
+The poster text is typeset inside a colored box of
+specified width and height, with an empty
+surrounding margin, and a colored border.
+.PP
+The text area has a width of
+.IR "(boxwidth - 2*marginwidth - 2*borderwidth)" ,
+and a height of
+.IR "(boxheight - 2*marginwidth - 2*borderwidth)" .
+.PP
+When landscape orientation is chosen, poster text
+will be rotated 90 degrees counterclockwise, so
+that it runs from bottom to top. The width and
+height of the poster box are
+.I not
+affected by this.
+.\"======================================================================
+.SH OPTIONS
+Most options require values, which are supplied as
+the
+.I next
+command-line argument.
+.PP
+The current implementation (in awk) requires
+options to begin with a `+', rather than the
+conventional `\-', so as to distinguish them from
+.BR nawk (1)
+options.
+.PP
+Color values can be specified as any named X
+Window System color, or red/green/blue values in
+0\|.\|.\|1 separated by characters other than digits
+or period. E.g. 0/1/0 is green, and 0.5:0.5:0.5
+is 50% gray. Letter case in color names is
+.I not
+significant.
+.PP
+Dimensions consist of a (possibly signed) number
+followed by a \*(Te\& dimension unit:
+.IR bp " (big points),"
+.IR cc " (ciceros),"
+.IR cm " (centimeters),"
+.IR dd " (didot points),"
+.IR in " (inches),"
+.IR mm " (millimeters),"
+.IR pc " (picas), "
+.IR pt " (points),"
+or
+.IR sp " (scaled points)."
+E.g. 72bp, 2.54cm, 67.542dd, 1in, 25.4mm,
+6.023pc, 72.27pt, and 4\|736\|286.72sp all specify
+a dimension of one inch. \*(Ps\& uses
+.I "big points"
+as its default units, and its documentation refers
+to them as points.
+.PP
+Poster text is given either as separate arguments
+on the command line, or as separate lines of a
+file supplied on standard input. Multiple-word
+arguments must be quoted or their spaces escaped
+to be properly recognized.
+.\"-----------------------------------------------
+.TP \w'xxmwxdimension'u+3n
+.B +author
+Display an author credit on standard output and
+quit. Sometimes an executable program is
+separated from its documentation and source code;
+this option provides a way to recover from that.
+.\"-----------------------------------------------
+.TP
+.BI +bd " color"
+Define border color.
+.I "Default: 0.5:0.5:0.5 (50% gray)."
+.\"-----------------------------------------------
+.TP
+.BI +bg " color"
+Define background color.
+.I "Default: 0.9:0.9:0.9 (10% gray)."
+.\"-----------------------------------------------
+.TP
+.BI +bs " factor"
+Set the baseline skip to factor times font
+pointsize. This value defines the interline
+spacing, or
+.IR leading ,
+as it is called in typography.
+.I "Default: 1.2."
+.\"-----------------------------------------------
+.TP
+.BI +bw " dimension"
+Define border width.
+.I "Default: 10bp."
+.\"-----------------------------------------------
+.TP
+.BI +c " nnn"
+Define number of copies to print.
+.I "Default: 1."
+.\"-----------------------------------------------
+.TP
+.B +copyright
+Display copyright information on standard output and
+quit.
+.\"-----------------------------------------------
+.TP
+.B +d
+Display the font size on a second output page.
+This option is useful for making a series of
+posters with the same font size: specify
+.B +d
+for the poster with the longest text lines, then
+use the output font size in an explicit
+.B +p
+option for all of the other posters. This
+round-about way is required because automatic text
+sizing happens inside the \*(Ps\& output device,
+rather than in
+.BR psposter .
+.\"-----------------------------------------------
+.TP
+.BI +fg " color"
+Define foreground color.
+.I "Default: 0:0:0 (black)."
+.\"-----------------------------------------------
+.TP
+.BI +fn " fontname"
+Select the \*(Ps\& font. The name can be either
+the long name of a Type 1 \*(Ps\& font, such as
+.IR NewCenturySchlbk-BoldItalic ,
+or the basename of a \*(Ps\& font in ASCII
+.RI ( .pfa ),
+or binary
+.RI ( .pfb )
+format, such as
+.IR NewCenBI .
+.B psposter
+will also handle compressed variants of these
+files from
+.BR compress (1)
+and
+.BR gzip (1)
+.RI ( .pfa.Z ,
+.IR .pfb.Z ,
+.IR .pfa.gz ,
+and
+.IR .pfb.gz ),
+decompressing them on-the-fly.
+.I "Default: Times-Bold."
+.IP
+Most \*(Ps\& printers contain a number of resident
+fonts, but only a small number of downloadable
+Type 1 \*(Ps\& fonts are available without a font
+license, notably Adobe Courier and Utopia,
+Bitstream Charter and Courier, and URW Antiqua,
+Grotesk, and Nimbus. These three vendors have
+generously made these fonts available for free
+distribution, but retain the copyrights. More
+than 2300 fonts are listed in the
+.I afmfonts.map
+file (see the
+.B "\s-2ENVIRONMENT VARIABLES\s+2"
+section below), but only a very small number are
+likely to be available at a given site.
+.IP
+On a UNIX system, you can list the downloadable
+fonts available at your site by
+.IR "grep /FontName /usr/local/lib/afm/*.pfa" ,
+assuming that
+.I /usr/local/lib/afm
+is where they reside.
+.IP
+For a list of printer resident fonts, consult your
+printer documentation, or print the small \*(Ps\&
+file,
+.IR fontlist.ps ,
+that is distributed with
+.BR psposter .
+For convenience, that file is reproduced here; you
+can adjust PointSize, ColumnWidth, and the default
+display font (Courier) if you wish:
+.RS
+.nf
+%!
+% fontlist.ps
+% Send this file to a PostScript device to list
+% the names of all of the resident fonts.
+% [13-Dec-1994]
+/inch { 72 mul } def
+/PointSize 10 def
+/ColumnWidth 3 inch def
+/Courier findfont PointSize scalefont setfont
+/n 0 def
+/newcolumn
+{
+ /x x ColumnWidth add def
+ x y moveto
+ 8 inch x gt { showpage newpage } if
+} def
+/newpage
+{
+ /x 1 inch def
+ /y 10 inch def
+ x y moveto
+} def
+/nstr 10 string def
+/scratch 256 string def
+newpage
+(*)
+{
+ /n n 1 add def
+ gsave
+ n nstr cvs show
+ (: ) show
+ show
+ grestore
+ 0 PointSize -1.2 mul rmoveto
+ currentpoint exch pop 1 inch lt
+ {
+ newcolumn
+ } if
+}
+scratch /Font resourceforall
+showpage
+.fi
+.RE
+.\"-----------------------------------------------
+.TP
+.BI +h " dimension"
+Define poster height.
+.I "Default: paper height."
+.\"-----------------------------------------------
+.TP
+.B +help
+Display a help message on standard output and
+quit.
+.\"-----------------------------------------------
+.TP
+.BI +l
+Use landscape (instead of portrait) orientation
+for text. Text is rotated 90 degrees
+counterclockwise, so that it runs from bottom to
+top. This is a shorthand for the rotation option
+.B "+r 90"
+(see below). Only text,
+.I not
+the poster box, is affected by this option.
+.\"-----------------------------------------------
+.TP
+.BI +mw " dimension"
+Define margin width. Most \*(Ps\& hardcopy output
+devices are incapable of imaging closer than about
+5mm to the edge of the display surface, so a
+non-zero margin width is usually desirable.
+.I "Default: 1in (or 25mm for ISO paper sizes)."
+.\"-----------------------------------------------
+.TP
+.BI +p " dimension"
+Set font pointsize. Normally, the size is chosen
+to make the poster text just fill the text frame,
+either horizontally or vertically. You can use
+this option to force a particular font size,
+e.g. to produce a series of posters with different
+text, all at the same size.
+.IP
+Any poster text outside the text frame is clipped,
+and not displayed.
+.I "Default: automatically set."
+.\"-----------------------------------------------
+.TP
+.BI +paper " form"
+Set paper size. See
+.BR lptops (1)
+for a list of supported sizes.
+.IP
+In addition to the standard sizes, any particular
+size can be requested by giving it in the form
+.IR widthxheight ,
+e.g. 8.5inx11in or 210mmx297mm.
+.IP
+.I "Default: installation dependent: usually A (in"
+.I "the USA) and A4 (elsewhere)."
+.\"-----------------------------------------------
+.TP
+.BI +r " angle"
+Set the text rotation angle, which must be a
+multiple of 90 degrees. It is measured
+counterclockwise from the horizontal axis. The
+.B +l
+landscape option is equivalent to
+.BR "+r 90" .
+.I "Default: 0."
+.\"-----------------------------------------------
+.TP
+.BI +s " factor"
+Define poster scale factor. This option can be
+used to resize a poster without having to change
+any other command-line options.
+.I "Default: 1."
+.\"-----------------------------------------------
+.TP
+.BI +table " { 8/o | 8/h | 16/o | 16/h }"
+When this option is given, command-line poster
+words are ignored, and standard input is not read.
+Instead,
+.B psposter
+makes a table of all of the characters in the
+poster font. The option value defines the number
+of columns (8 or 16) and the label number base
+(octal or hexadecimal). The delimiter character
+\&`/' can be any punctuation character. With
+16-column tables, you probably also want to
+specify the landscape option
+.BR +l .
+.IP
+The table title includes the font size and name.
+The title, and the row/column labels, are always
+set in black Times-BoldItalic text.
+.IP
+Unless an explicit
+.BI +p " dimension"
+option is provided, the font size is automatically
+adjusted to an integer value that maximizes table
+size.
+.IP
+.I "Default: no font table."
+.\"-----------------------------------------------
+.TP
+.BI +version
+Display the program version number on standard
+output and quit.
+.\"-----------------------------------------------
+.TP
+.BI +w " dimension"
+Define poster width.
+.I "Default: paper width."
+.\"-----------------------------------------------
+.TP
+.BI +x " dimension"
+Define horizontal offset. A positive value moves
+the poster right on the output surface, and is
+.I unaffected
+by any poster scale factor, or by the choice of
+rotated text.
+.I "Default: 0bp."
+.\"-----------------------------------------------
+.TP
+.BI +y " dimension"
+Define vertical offset. A positive value moves
+the poster up on the output surface, and is
+.I unaffected
+by any poster scale factor, or by the choice of
+rotated text.
+.I "Default: 0bp."
+.\"-----------------------------------------------
+.TP
+.B ?
+Display a help message and quit.
+.\"-----------------------------------------------
+.TP
+.B ++
+No more options: remaining words are for poster
+text. This option is only needed if any of the
+poster words begin with a `+'.
+.\"======================================================================
+.SH "EXAMPLES"
+Print a full-size poster with an announcement:
+.RS
+.nf
+.I "psposter Chemistry 101 Examination 1:00pm--3:00pm | lpr"
+.fi
+.RE
+.PP
+Make a door sign in landscape mode:
+.RS
+.nf
+.I "psposter +l +w 10cm +h 25cm 'Prof. Jane Smith' >doorsign.ps"
+.fi
+.RE
+.PP
+Print the same sign, in color:
+.RS
+.nf
+.I "psposter +l +w 10cm +h 25cm +bd blue +bg skyblue \e"
+.I " +fg navyblue 'Prof. Jane Smith' | lpr"
+.fi
+If a \*(Ps\& printer is incapable of printing in
+color, it will simulate color by shades of gray.
+.RE
+.PP
+Make a sale sign:
+.RS
+.nf
+.I "psposter +bg yellow <<END-OF-DATA >yardsale.ps"
+.I "Terrific"
+.I "Yard Sale"
+.I "Today"
+.I "123 Elm St."
+.I "END-OF-DATA"
+.fi
+.RE
+.PP
+Make a seminar announcement:
+.RS
+.nf
+.I "psposter +bg orange <<EOF >seminar.ps
+.I "Biology Colloquium"
+.I "Friday 23-Sep-1994"
+.I "3pm--4pm"
+.I "LSB 234"
+.I ""
+.I "Dr. Judith Brown"
+.I "Sex Life of Gnats"
+.I "EOF"
+.fi
+.RE
+.PP
+Make a Danish road sign (the octal escape sequences
+select the letters AE and o-slash; see Appendix E
+of the
+.IR "PostScript Language Reference Manual" ,
+Addison-Wesley, 1990, ISBN 0-201-18127-4):
+.RS
+.nf
+.I "psposter +bg yellow +fg black '\e341resk\e371bing' 5km >vejskilt.ps"
+.fi
+.RE
+.PP
+Make another road sign in a downloaded font, supplying one leading and
+trailing blank on each line:
+.RS
+.nf
+.I "psposter +bg green +fg white +fn URWGroteskT-Bold +r -90 \e
+.I " ' Green River ' ' 106 miles ' >roadsign.ps"
+.fi
+.RE
+(The stretch of highway I-70 in Utah from Salina
+to Green River is claimed to be the longest in the
+US Interstate Highway System without services.)
+.PP
+Make a poster showing the dingbat font layout:
+.RS
+.nf
+.I "psposter +fn ZapfDingbats +table 8/o >dingbats.ps"
+.\"======================================================================
+.SH "ENVIRONMENT VARIABLES"
+.TP \w'AFMPATH'u+2n
+AFMPATH
+Search path for \*(Ps\& font mapping file,
+.RI ( afmfonts.map ),
+and for downloadable fonts in
+\*(Ps ASCII
+.RI ( .pfa )
+and binary
+.RI ( .pfb )
+formats. The font mapping file connects long
+\*(Ps\& font names with (usually shorter) file
+names on the host computer.
+.IP
+On UNIX, the search path is a colon-separated list
+of directories. On other operating systems, the
+search path follows the conventions of those
+systems.
+.TP
+RGBPATH
+Search path for the X Window System color
+definition file,
+.IR rgb.txt .
+.\"======================================================================
+.SH "FILES"
+.TP \w'\fIafmfonts.map\fP'u+3n
+.I afmfonts.map
+\*(Ps\& font mapping file. It is distributed,
+together with some freely-distributable Type 1
+fonts in
+.I .pfa
+and
+.I .pfb
+formats, and numerous Adobe Font Metric
+.RI ( .afm )
+files, with
+.BR lptops (1).
+.B psposter
+looks for this file, and downloadable fonts, in the
+.I AFMPATH
+search path.
+.IP
+Typical lines in
+.I afmfonts.map
+look like this:
+.RS
+.nf
+.I "% This line is a comment."
+.I "% This font name is too long for some"
+.I "% operating systems, so we store it under a"
+.I "% shorter name. The font files will be"
+.I "% HelvNaBI.afm, containing the character"
+.I "% metrics (assorted dimensions), and"
+.I "% HelvNaBI.pfa (ASCII) or HelvNaBI.pfb"
+.I "% (binary), containing encrypted \*(Ps\&"
+.I "% definitions of the character shapes."
+.I "Helvetica-Narrow-BoldOblique = HelvNaBI"
+.fi
+.RE
+.TP
+.I rgb.txt
+Color mapping file distributed with the X Window
+System.
+.B psposter
+looks for this file in the
+.I RGBPATH
+search path.
+.IP
+Typical lines in
+.I rgb.txt
+look like this:
+.RS
+.nf
+.I "000 000 000 black"
+.I "000 000 255 blue"
+.I "000 255 000 green"
+.I "000 255 255 cyan"
+.I "255 000 000 red"
+.I "255 000 255 magenta"
+.I "255 255 000 yellow"
+.I "255 255 255 white"
+.I "250 235 215 antique white"
+.I "250 235 215 AntiqueWhite"
+.fi
+.RE
+.IP
+There is no comment syntax.
+.IP
+The first three numbers define red, green, and
+blue intensities on a scale of 0\|.\|.\|255, and
+the remaining text on each line is the color name,
+which, in the case of compound color names, appears
+in two forms, one in lower case with blank
+separators, and one without blanks, in mixed case.
+.\"======================================================================
+.SH "SEE ALSO"
+.BR compress (1),
+.BR dxpsview (1),
+.BR ghostview (1),
+.BR gs (1),
+.BR gzip (1),
+.BR lptops (1),
+.BR pageview (1),
+.BR rgb (1),
+.BR tex (1).
+.\"======================================================================
+.SH AUTHOR
+.nf
+Nelson H. F. Beebe, Ph.D.
+Center for Scientific Computing
+Department of Mathematics
+University of Utah
+Salt Lake City, UT 84112
+Tel: +1 801 581 5254
+FAX: +1 801 581 4148
+Email: <beebe@math.utah.edu>
+.fi
+.\"======================================================================
+.SH COPYRIGHT
+This program is in the
+.BR "public domain" .
+.\"======================================================================
+.SH AVAILABILITY
+Internet source distribution of
+.B psposter
+is available through the World-Wide Web Uniform
+Resource Locator addresses
+.RS
+.nf
+.I "ftp://ftp.math.utah.edu/pub/misc/psposter-0.08.tar.z"
+.I "ftp://ftp.math.utah.edu/pub/misc/psposter-0.08.zip"
+.I "ftp://ftp.math.utah.edu/pub/misc/psposter-0.08.zoo"
+.fi
+.RE
+.\"==============================[The End]==============================
diff --git a/fonts/utilities/psposter/psposter.ps b/fonts/utilities/psposter/psposter.ps
new file mode 100644
index 0000000000..0064930009
--- /dev/null
+++ b/fonts/utilities/psposter/psposter.ps
@@ -0,0 +1,606 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.08
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.08 0
+%%Pages: 6
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.08 0
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL
+792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron/scaron/zcaron
+/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space
+/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft
+/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four
+/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C
+/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash
+/bracketright/circumflex/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q
+/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase
+/guillemotleft/guillemotright/bullet/florin/fraction/perthousand/dagger
+/daggerdbl/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar
+/section/dieresis/copyright/ordfeminine/guilsinglleft/logicalnot/minus
+/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu
+/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guilsinglright
+/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde
+/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
+/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
+/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve
+/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
+/udieresis/yacute/thorn/ydieresis]def/Times-Italic@0 ENC0/Times-Italic RE
+/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 345.48(PSPOSTER\(1\) PSPOSTER\(1\))72 48 R
+(psposter \255 create simple one-page colored posters in PostScript)72 84 Q/F1
+9/Times-Bold@0 SF(SYNOPSIS)72 100.8 Q/F2 10/Times-Bold@0 SF(psposter)108 112.8
+Q F0([)2.5 E F2(+author)2.5 E F0 2.5(][)2.5 G F2(+bd)A/F3 10/Times-Italic@0 SF
+(color)2.5 E F0 2.5(][)2.5 G F2(+bg)A F3(color)2.5 E F0 2.5(][)2.5 G F2(+bs)A
+F3(factor)2.5 E F0 2.5(][)2.5 G F2(+bw)A F3(dimension)2.5 E F0 2.5(][)2.5 G F2
+(+c)A F3(nnn)2.5 E F0(])2.5 E([)144 124.8 Q F2(+copyright)2.5 E F0 2.5(][)2.5 G
+F2(+d)A F0 2.5(][)2.5 G F2(+fg)A F3(color)2.5 E F0 2.5(][)2.5 G F2(+fn)A F3
+(fontname)2.5 E F0 2.5(][)2.5 G F2(+h)A F3(dimension)2.5 E F0 2.5(][)2.5 G F2
+(+help)A F0 2.5(][)2.5 G F2(+l)A F0(])2.5 E([)144 136.8 Q F2(+mw)2.5 E F3
+(dimension)2.5 E F0 2.5(][)2.5 G F2(+p)A F3(dimension)2.5 E F0 2.5(][)2.5 G F2
+(+paper)A F3(form)2.5 E F0 2.5(][)2.5 G F2(+r)A F3(angle)2.5 E F0 2.5(][)2.5 G
+F2(+s)A F3(factor)2.5 E F0(])2.5 E([)144 148.8 Q F2(+table)2.5 E F3 2.5({8)2.5
+G(/o | 8/h | 16/o | 16/h })190.64 148.8 Q F0 2.5(][)2.5 G F2(+v)A(ersion)-.1 E
+F0 2.5(][)2.5 G F2(+w)A F3(dimension)2.5 E F0 2.5(][)2.5 G F2(+x)A F3
+(dimension)2.5 E F0(])2.5 E([)144 160.8 Q F2(+y)2.5 E F3(dimension)2.5 E F0 2.5
+(][)2.5 G F2('?')A F0 2.5(][)5 G F2(++)A F0(])2.5 E 2.5([w)144 172.8 S
+(ord\(s\) or <)156.95 172.8 Q F3(in\214le).01 E F0 2.5(]>)2.5 G F3(P)234.28
+172.8 Q/F4 8/Times-Italic@0 SF(OST)A F3(S)A F4(CRIPT)A F3(-\214le)A F1
+(DESCRIPTION)72 189.6 Q F2(psposter)108 201.6 Q F0 .934
+(creates an Encapsulated P)3.434 F/F5 8/Times-Roman@0 SF(OST)A F0(S)A F5(CRIPT)
+A F0 .934(\214le containing a one-page poster)3.434 F 5.934(.I)-.55 G 3.434(tm)
+446.184 201.6 S .933(ay be included as a)460.178 201.6 R(\214gure in an)108
+213.6 Q 2.5(yd)-.15 G(ocument processing system that supports inclusion of P)
+165.9 213.6 Q F5(OST)A F0(S)A F5(CRIPT)A F0(\214gures.)2.5 E 1.011
+(The poster te)108 230.4 R 1.011(xt is typeset inside a colored box of speci\
+\214ed width and height, with an empty surrounding)-.15 F(mar)108 242.4 Q
+(gin, and a colored border)-.18 E(.)-.55 E 1.346(The te)108 259.2 R 1.346
+(xt area has a width of)-.15 F F3 1.346(\(boxwidth - 2*mar)3.846 F 1.346
+(ginwidth - 2*bor)-.37 F(derwidth\))-.37 E F0 3.846(,a).06 G 1.346
+(nd a height of)426.902 259.2 R F3 1.345(\(boxheight -)3.845 F(2*mar)108 271.2
+Q(ginwidth - 2*bor)-.37 E(derwidth\))-.37 E F0(.).06 E 1.102
+(When landscape orientation is chosen, poster te)108 288 R 1.103
+(xt will be rotated 90 de)-.15 F 1.103(grees counterclockwise, so that it)-.15
+F(runs from bottom to top.)108 300 Q
+(The width and height of the poster box are)5 E F3(not)2.5 E F0(af)2.5 E
+(fected by this.)-.25 E F1(OPTIONS)72 316.8 Q F0(Most options require v)108
+328.8 Q(alues, which are supplied as the)-.25 E F3(ne)2.5 E(xt)-.2 E F0
+(command-line ar)2.5 E(gument.)-.18 E .45(The current implementation \(in a)108
+345.6 R .45(wk\) requires options to be)-.15 F .45
+(gin with a `+', rather than the con)-.15 F -.15(ve)-.4 G .45(ntional `\255',)
+.15 F(so as to distinguish them from)108 357.6 Q F2(nawk)2.5 E F0
+(\(1\) options.)A .254(Color v)108 374.4 R .255(alues can be speci\214ed as an)
+-.25 F 2.755(yn)-.15 G .255(amed X W)261.852 374.4 R(indo)-.4 E 2.755(wS)-.25 G
+.255(ystem color)338.347 374.4 R 2.755(,o)-.4 G 2.755(rr)395.397 374.4 S .255
+(ed/green/blue v)404.812 374.4 R .255(alues in 0)-.25 F -3.077 1.666(..1 s)
+1.666 H(ep-)-1.666 E 1.124(arated by characters other than digits or period.)
+108 386.4 R 1.124(E.g. 0/1/0 is green, and 0.5:0.5:0.5 is 50% gray)6.124 F
+6.124(.L)-.65 G(etter)522.23 386.4 Q(case in color names is)108 398.4 Q F3(not)
+2.5 E F0(signi\214cant.)2.5 E .935
+(Dimensions consist of a \(possibly signed\) number follo)108 415.2 R .935
+(wed by a T)-.25 F(E)-1.667 2.4 M 3.436(Xd)-1.25 -2.4 O .936(imension unit:)
+402.04 415.2 R F3(bp)3.436 E F0 .936(\(big points\),)3.626 F F3(cc)3.436 E F0
+(\(ciceros\),)108 427.2 Q F3(cm)3.413 E F0(\(centimeters\),)3.733 E F3(dd)3.413
+E F0 .913(\(didot points\),)4.183 F F3(in)3.413 E F0(\(inches\),)3.653 E F3(mm)
+3.413 E F0(\(millimeters\),)3.733 E F3(pc)3.413 E F0(\(picas\),)3.722 E F3(pt)
+3.412 E F0 .912(\(points\), or)4.092 F F3(sp)3.412 E F0 .326
+(\(scaled points\).)108 439.2 R .327
+(E.g. 72bp, 2.54cm, 67.542dd, 1in, 25.4mm, 6.023pc, 72.27pt, and 4)5.326 F
+-.834(736 286.72sp)1.666 F .327(all spec-)2.827 F .01
+(ify a dimension of one inch.)108 451.2 R(P)5.009 E F5(OST)A F0(S)A F5(CRIPT)A
+F0(uses)2.509 E F3 .009(big points)2.509 F F0 .009(as its def)2.509 F .009
+(ault units, and its documentation refers to)-.1 F(them as points.)108 463.2 Q
+.205(Poster te)108 480 R .205(xt is gi)-.15 F -.15(ve)-.25 G 2.705(ne).15 G
+.206(ither as separate ar)191.6 480 R .206
+(guments on the command line, or as separate lines of a \214le supplied)-.18 F
+.546(on standard input.)108 492 R(Multiple-w)5.546 E .546(ord ar)-.1 F .546
+(guments must be quoted or their spaces escaped to be properly recog-)-.18 F
+(nized.)108 504 Q F2(+author)108 520.8 Q F0 .751
+(Display an author credit on standard output and quit.)194.67 520.8 R .751
+(Sometimes an e)5.751 F -.15(xe)-.15 G .751(cutable pro-).15 F .155
+(gram is separated from its documentation and source code; this option pro)
+194.67 532.8 R .155(vides a w)-.15 F(ay)-.1 E(to reco)194.67 544.8 Q -.15(ve)
+-.15 G 2.5(rf).15 G(rom that.)240.46 544.8 Q F2(+bd)108 561.6 Q F3(color)2.5 E
+F0(De\214ne border color)194.67 561.6 Q(.)-.55 E F3
+(Default: 0.5:0.5:0.5 \(50% gr)5 E(ay\).)-.15 E F2(+bg)108 578.4 Q F3(color)2.5
+E F0(De\214ne background color)194.67 578.4 Q(.)-.55 E F3
+(Default: 0.9:0.9:0.9 \(10% gr)5 E(ay\).)-.15 E F2(+bs)108 595.2 Q F3(factor)
+2.5 E F0 1.187(Set the baseline skip to f)194.67 595.2 R 1.187
+(actor times font pointsize.)-.1 F 1.187(This v)6.187 F 1.187
+(alue de\214nes the interline)-.25 F(spacing, or)194.67 607.2 Q F3(leading)2.5
+E F0 2.5(,a).22 G 2.5(si)280.71 607.2 S 2.5(ti)289.88 607.2 S 2.5(sc)297.94
+607.2 S(alled in typograph)308.77 607.2 Q -.65(y.)-.05 G F3(Default: 1.2.)5.65
+E F2(+bw)108 624 Q F3(dimension)2.5 E F0(De\214ne border width.)194.67 624 Q F3
+(Default: 10bp.)5 E F2(+c)108 640.8 Q F3(nnn)2.5 E F0
+(De\214ne number of copies to print.)194.67 640.8 Q F3(Default: 1.)5 E F2
+(+copyright)108 657.6 Q F0(Display cop)194.67 657.6 Q
+(yright information on standard output and quit.)-.1 E F2(+d)108 674.4 Q F0
+1.376(Display the font size on a second output page.)194.67 674.4 R 1.376
+(This option is useful for making a)6.376 F 1.07
+(series of posters with the same font size: specify)194.67 686.4 R F2(+d)3.571
+E F0 1.071(for the poster with the longest)3.571 F(te)194.67 698.4 Q 1.174
+(xt lines, then use the output font size in an e)-.15 F(xplicit)-.15 E F2(+p)
+3.673 E F0 1.173(option for all of the other)3.673 F 4.619(posters. This)194.67
+710.4 R 2.119(round-about w)4.619 F 2.119(ay is required because automatic te)
+-.1 F 2.119(xt sizing happens)-.15 F(inside the P)194.67 722.4 Q F5(OST)A F0(S)
+A F5(CRIPT)A F0(output de)2.5 E(vice, rather than in)-.25 E F2(psposter)2.5 E
+F0(.)A -1.11(Ve)72 768 S(rsion 0.08)1.11 E(16 January 1995)272.95 768 Q(1)535
+768 Q EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 345.48(PSPOSTER\(1\) PSPOSTER\(1\))72 48 R/F1 10
+/Times-Bold@0 SF(+fg)108 84 Q/F2 10/Times-Italic@0 SF(color)2.5 E F0
+(De\214ne fore)194.67 84 Q(ground color)-.15 E(.)-.55 E F2
+(Default: 0:0:0 \(blac)5 E(k\).)-.2 E F1(+fn)108 100.8 Q F2(fontname)2.5 E F0
+1.912(Select the P)194.67 100.8 R/F3 8/Times-Roman@0 SF(OST)A F0(S)A F3(CRIPT)A
+F0 4.412(font. The)4.412 F 1.912(name can be either the long name of a T)4.412
+F 1.911(ype 1)-.8 F(P)194.67 112.8 Q F3(OST)A F0(S)A F3(CRIPT)A F0 3.711
+(font, such as)6.211 F F2(Ne)6.212 E(wCenturySc)-.15 E(hlbk-BoldItalic)-.15 E
+F0 6.212(,o).31 G 6.212(rt)447.402 112.8 S 3.712(he basename of a)459.724 112.8
+R(P)194.67 124.8 Q F3(OST)A F0(S)A F3(CRIPT)A F0 3.201(font in ASCII \()5.701 F
+F2(.pfa).23 E F0 3.201(\), or binary \().26 F F2(.pfb).23 E F0 5.7(\)f).23 G
+3.2(ormat, such as)423.72 124.8 R F2(Ne)5.7 E(wCenBI)-.15 E F0(.)1.01 E F1
+(psposter)194.67 136.8 Q F0 1.261(will also handle compressed v)3.76 F 1.261
+(ariants of these \214les from)-.25 F F1(compr)3.761 E(ess)-.18 E F0 1.261
+(\(1\) and)B F1(gzip)194.67 148.8 Q F0 .324(\(1\) \()B F2(.pfa.Z).23 E F0(,)1 E
+F2(.pfb)2.824 E(.Z)-.4 E F0(,)1 E F2(.pfa.gz)2.824 E F0 2.823(,a).41 G(nd)
+326.265 148.8 Q F2(.pfb)2.823 E(.gz)-.4 E F0 .323
+(\), decompressing them on-the-\215y).41 F(.)-.65 E F2(Default:)5.323 E -.55
+(Ti)194.67 160.8 S(mes-Bold.).55 E F0 .639(Most P)194.67 177.6 R F3(OST)A F0(S)
+A F3(CRIPT)A F0 .64(printers contain a number of resident fonts, b)3.139 F .64
+(ut only a small num-)-.2 F 1.291(ber of do)194.67 189.6 R 1.291(wnloadable T)
+-.25 F 1.291(ype 1 P)-.8 F F3(OST)A F0(S)A F3(CRIPT)A F0 1.29(fonts are a)3.791
+F -.25(va)-.2 G 1.29(ilable without a font license,).25 F 1.105
+(notably Adobe Courier and Utopia, Bitstream Charter and Courier)194.67 201.6 R
+3.606(,a)-.4 G 1.106(nd UR)478.898 201.6 R 3.606(WA)-.55 G(nti-)526.11 201.6 Q
+1.439(qua, Grotesk, and Nimb)194.67 213.6 R 3.938(us. These)-.2 F 1.438
+(three v)3.938 F 1.438(endors ha)-.15 F 1.738 -.15(ve g)-.2 H 1.438
+(enerously made these fonts).15 F -.2(av)194.67 225.6 S 1.523
+(ailable for free distrib)-.05 F 1.523(ution, b)-.2 F 1.523(ut retain the cop)
+-.2 F 4.023(yrights. More)-.1 F 1.524(than 2300 fonts are)4.024 F .303
+(listed in the)194.67 237.6 R F2(afmfonts.map)2.803 E F0 .303(\214le \(see the)
+2.803 F/F4 8/Times-Bold@0 SF(ENVIR)2.803 E .303(ONMENT V)-.24 F(ARIABLES)-1.08
+E F0 .303(section belo)2.803 F .302(w\), b)-.25 F(ut)-.2 E(only a v)194.67
+249.6 Q(ery small number are lik)-.15 E(ely to be a)-.1 E -.25(va)-.2 G
+(ilable at a gi).25 E -.15(ve)-.25 G 2.5(ns).15 G(ite.)444.36 249.6 Q .244
+(On a UNIX system, you can list the do)194.67 266.4 R .245(wnloadable fonts a)
+-.25 F -.25(va)-.2 G .245(ilable at your site by).25 F F2(gr)2.745 E(ep)-.37 E
+(/F)194.67 278.4 Q 2.599(ontName /usr/local/lib/afm/*.pfa)-1.05 F F0 5.099(,a)
+.26 G 2.599(ssuming that)348.538 278.4 R F2(/usr/local/lib/afm)5.099 E F0 2.598
+(is where the)5.098 F(y)-.15 E(reside.)194.67 290.4 Q -.15(Fo)194.67 307.2 S
+3.885(ral).15 G 1.385(ist of printer resident fonts, consult your printer docu\
+mentation, or print the)223.4 307.2 R .372(small P)194.67 319.2 R F3(OST)A F0
+(S)A F3(CRIPT)A F0(\214le,)2.872 E F2(fontlist.ps)2.872 E F0 2.872(,t).27 G
+.372(hat is distrib)336.742 319.2 R .371(uted with)-.2 F F1(psposter)2.871 E F0
+5.371(.F)C .371(or con)476.869 319.2 R -.15(ve)-.4 G(nience,).15 E .72
+(that \214le is reproduced here; you can adjust PointSize, ColumnW)194.67 331.2
+R .72(idth, and the def)-.4 F(ault)-.1 E(display font \(Courier\) if you wish:)
+194.67 343.2 Q(%!)194.67 355.2 Q 2.5(%f)194.67 367.2 S(ontlist.ps)208.83 367.2
+Q 2.5(%S)194.67 379.2 S(end this \214le to a PostScript de)211.06 379.2 Q
+(vice to list)-.25 E 2.5(%t)194.67 391.2 S
+(he names of all of the resident fonts.)208.28 391.2 Q 2.5(%[)194.67 403.2 S
+(13-Dec-1994])208.83 403.2 Q(/inch { 72 mul } def)194.67 415.2 Q
+(/PointSize 10 def)194.67 427.2 Q(/ColumnW)194.67 439.2 Q(idth 3 inch def)-.4 E
+(/Courier \214ndfont PointSize scalefont setfont)194.67 451.2 Q(/n 0 def)194.67
+463.2 Q(/ne)194.67 475.2 Q(wcolumn)-.25 E({)194.67 487.2 Q(/x x ColumnW)204.67
+499.2 Q(idth add def)-.4 E 2.5(xym)204.67 511.2 S -.15(ove)227.45 511.2 S(to)
+.15 E 2.5(8i)204.67 523.2 S(nch x gt { sho)214.95 523.2 Q(wpage ne)-.25 E
+(wpage } if)-.25 E 2.5(}d)194.67 535.2 S(ef)206.97 535.2 Q(/ne)194.67 547.2 Q
+(wpage)-.25 E({)194.67 559.2 Q(/x 1 inch def)204.67 571.2 Q(/y 10 inch def)
+204.67 583.2 Q 2.5(xym)204.67 595.2 S -.15(ove)227.45 595.2 S(to).15 E 2.5(}d)
+194.67 607.2 S(ef)206.97 607.2 Q(/nstr 10 string def)194.67 619.2 Q
+(/scratch 256 string def)194.67 631.2 Q(ne)194.67 643.2 Q(wpage)-.25 E(\(*\))
+194.67 655.2 Q({)194.67 667.2 Q(/n n 1 add def)204.67 679.2 Q(gsa)204.67 691.2
+Q -.15(ve)-.2 G 2.5(nn)214.67 703.2 S(str cvs sho)227.17 703.2 Q(w)-.25 E
+(\(: \) sho)214.67 715.2 Q(w)-.25 E(sho)214.67 727.2 Q(w)-.25 E -1.11(Ve)72 768
+S(rsion 0.08)1.11 E(16 January 1995)272.95 768 Q(2)535 768 Q EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 345.48(PSPOSTER\(1\) PSPOSTER\(1\))72 48 R(grestore)
+204.67 84 Q 2.5(0P)204.67 96 S(ointSize -1.2 mul rmo)217.73 96 Q -.15(ve)-.15 G
+(to).15 E(currentpoint e)204.67 108 Q(xch pop 1 inch lt)-.15 E({)204.67 120 Q
+(ne)214.67 132 Q(wcolumn)-.25 E 2.5(}i)204.67 144 S(f)214.75 144 Q(})194.67 156
+Q(scratch /F)194.67 168 Q(ont resourceforall)-.15 E(sho)194.67 180 Q(wpage)-.25
+E/F1 10/Times-Bold@0 SF(+h)108 196.8 Q/F2 10/Times-Italic@0 SF(dimension)2.5 E
+F0(De\214ne poster height.)194.67 196.8 Q F2(Default: paper height.)5 E F1
+(+help)108 213.6 Q F0(Display a help message on standard output and quit.)
+194.67 213.6 Q F1(+l)108 230.4 Q F0 1.704
+(Use landscape \(instead of portrait\) orientation for te)194.67 230.4 R 4.203
+(xt. T)-.15 F -.15(ex)-.7 G 4.203(ti).15 G 4.203(sr)455.341 230.4 S 1.703
+(otated 90 de)466.764 230.4 R(grees)-.15 E .283
+(counterclockwise, so that it runs from bottom to top.)194.67 242.4 R .284
+(This is a shorthand for the rota-)5.283 F .002(tion option)194.67 254.4 R F1
+.002(+r 90)2.502 F F0 .002(\(see belo)2.502 F 2.502(w\). Only)-.25 F(te)2.502 E
+(xt,)-.15 E F2(not)2.502 E F0 .002(the poster box, is af)2.502 F .001
+(fected by this option.)-.25 F F1(+mw)108 271.2 Q F2(dimension)2.5 E F0 1.7
+(De\214ne mar)194.67 271.2 R 1.7(gin width.)-.18 F 1.7(Most P)6.7 F/F3 8
+/Times-Roman@0 SF(OST)A F0(S)A F3(CRIPT)A F0(hardcop)4.201 E 4.201(yo)-.1 G
+1.701(utput de)414.036 271.2 R 1.701(vices are incapable of)-.25 F .269
+(imaging closer than about 5mm to the edge of the display surf)194.67 283.2 R
+.268(ace, so a non-zero mar)-.1 F(-)-.2 E(gin width is usually desirable.)
+194.67 295.2 Q F2(Default: 1in \(or 25mm for ISO paper sizes\).)5 E F1(+p)108
+312 Q F2(dimension)2.5 E F0 1.12(Set font pointsize.)194.67 312 R(Normally)6.12
+E 3.62(,t)-.65 G 1.12(he size is chosen to mak)322.11 312 R 3.62(et)-.1 G 1.12
+(he poster te)435.38 312 R 1.12(xt just \214ll the)-.15 F(te)194.67 324 Q .076
+(xt frame, either horizontally or v)-.15 F(ertically)-.15 E 5.076(.Y)-.65 G
+.076(ou can use this option to force a particu-)378.316 324 R .145
+(lar font size, e.g. to produce a series of posters with dif)194.67 336 R .145
+(ferent te)-.25 F .146(xt, all at the same size.)-.15 F(An)194.67 352.8 Q 3.546
+(yp)-.15 G 1.046(oster te)220.286 352.8 R 1.046(xt outside the te)-.15 F 1.045
+(xt frame is clipped, and not displayed.)-.15 F F2 1.045(Default: auto-)6.045 F
+(matically set.)194.67 364.8 Q F1(+paper)108 381.6 Q F2(form)2.5 E F0
+(Set paper size.)194.67 381.6 Q(See)5 E F1(lptops)2.5 E F0
+(\(1\) for a list of supported sizes.)A .83
+(In addition to the standard sizes, an)194.67 398.4 R 3.33(yp)-.15 G .83
+(articular size can be requested by gi)354.2 398.4 R .83(ving it in)-.25 F
+(the form)194.67 410.4 Q F2(widthxheight)2.5 E F0 2.5(,e).68 G
+(.g. 8.5inx11in or 210mmx297mm.)293.12 410.4 Q F2
+(Default: installation dependent: usually A \(in the USA\) and A4 \(else)194.67
+427.2 Q(wher)-.15 E(e\).)-.37 E F1(+r)108 444 Q F2(angle)2.5 E F0 1.119
+(Set the te)194.67 444 R 1.119
+(xt rotation angle, which must be a multiple of 90 de)-.15 F 3.618(grees. It)
+-.15 F 1.118(is measured)3.618 F .9(counterclockwise from the horizontal axis.)
+194.67 456 R(The)5.9 E F1(+l)3.4 E F0 .9(landscape option is equi)3.4 F -.25
+(va)-.25 G .9(lent to).25 F F1(+r 90)194.67 468 Q F0(.)A F2(Default: 0.)5 E F1
+(+s)108 484.8 Q F2(factor)2.5 E F0 .645(De\214ne poster scale f)194.67 484.8 R
+(actor)-.1 E 5.645(.T)-.55 G .644
+(his option can be used to resize a poster without ha)312.12 484.8 R(ving)-.2 E
+(to change an)194.67 496.8 Q 2.5(yo)-.15 G(ther command-line options.)257.56
+496.8 Q F2(Default: 1.)5 E F1(+table)108 513.6 Q F2 2.5({8)2.5 G
+(/o | 8/h | 16/o | 16/h })148.81 513.6 Q F0 2.074(When this option is gi)194.67
+525.6 R -.15(ve)-.25 G 2.075(n, command-line poster w).15 F 2.075
+(ords are ignored, and standard)-.1 F .153(input is not read.)194.67 537.6 R
+(Instead,)5.153 E F1(psposter)2.653 E F0(mak)2.653 E .152
+(es a table of all of the characters in the poster)-.1 F 2.782(font. The)194.67
+549.6 R .282(option v)2.782 F .283
+(alue de\214nes the number of columns \(8 or 16\) and the label number)-.25 F
+.403(base \(octal or he)194.67 561.6 R 2.903(xadecimal\). The)-.15 F .402
+(delimiter character `/' can be an)2.903 F 2.902(yp)-.15 G .402
+(unctuation char)474.538 561.6 R(-)-.2 E(acter)194.67 573.6 Q 5.235(.W)-.55 G
+.235(ith 16-column tables, you probably also w)230.325 573.6 R .235
+(ant to specify the landscape option)-.1 F F1(+l)194.67 585.6 Q F0(.)A .521
+(The table title includes the font size and name.)194.67 602.4 R .52
+(The title, and the ro)5.521 F .52(w/column labels,)-.25 F(are al)194.67 614.4
+Q -.1(wa)-.1 G(ys set in black T).1 E(imes-BoldItalic te)-.35 E(xt.)-.15 E
+1.777(Unless an e)194.67 631.2 R(xplicit)-.15 E F1(+p)4.277 E F2(dimension)
+4.277 E F0 1.777(option is pro)4.277 F 1.778
+(vided, the font size is automatically)-.15 F(adjusted to an inte)194.67 643.2
+Q(ger v)-.15 E(alue that maximizes table size.)-.25 E F2
+(Default: no font table)194.67 660 Q(.)-.15 E F1(+v)108 676.8 Q(ersion)-.1 E F0
+(Display the program v)194.67 676.8 Q
+(ersion number on standard output and quit.)-.15 E F1(+w)108 693.6 Q F2
+(dimension)2.5 E F0(De\214ne poster width.)194.67 693.6 Q F2
+(Default: paper width.)5 E F1(+x)108 710.4 Q F2(dimension)2.5 E F0 1.055
+(De\214ne horizontal of)194.67 710.4 R 3.555(fset. A)-.25 F(positi)3.555 E
+1.355 -.15(ve v)-.25 H 1.055(alue mo)-.1 F -.15(ve)-.15 G 3.555(st).15 G 1.054
+(he poster right on the output sur)402.775 710.4 R(-)-.2 E -.1(fa)194.67 722.4
+S 1.47(ce, and is).1 F F2(unaf)3.97 E(fected)-.18 E F0 1.47(by an)3.97 F 3.97
+(yp)-.15 G 1.47(oster scale f)329.42 722.4 R(actor)-.1 E 3.97(,o)-.4 G 3.97(rb)
+411.08 722.4 S 3.97(yt)423.38 722.4 S 1.47(he choice of rotated te)435.13 722.4
+R(xt.)-.15 E -1.11(Ve)72 768 S(rsion 0.08)1.11 E(16 January 1995)272.95 768 Q
+(3)535 768 Q EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 345.48(PSPOSTER\(1\) PSPOSTER\(1\))72 48 R/F1 10
+/Times-Italic@0 SF(Default: 0bp.)194.67 84 Q/F2 10/Times-Bold@0 SF(+y)108 100.8
+Q F1(dimension)2.5 E F0 .033(De\214ne v)194.67 100.8 R .033(ertical of)-.15 F
+2.532(fset. A)-.25 F(positi)2.532 E .332 -.15(ve v)-.25 H .032(alue mo)-.1 F
+-.15(ve)-.15 G 2.532(st).15 G .032(he poster up on the output surf)384.906
+100.8 R .032(ace, and)-.1 F(is)194.67 112.8 Q F1(unaf)2.647 E(fected)-.18 E F0
+.147(by an)2.647 F 2.647(yp)-.15 G .147(oster scale f)282.698 112.8 R(actor)-.1
+E 2.647(,o)-.4 G 2.647(rb)360.389 112.8 S 2.647(yt)371.366 112.8 S .148
+(he choice of rotated te)381.793 112.8 R(xt.)-.15 E F1 .148(Default: 0bp.)5.148
+F F2(?)108 129.6 Q F0(Display a help message and quit.)194.67 129.6 Q F2(++)108
+146.4 Q F0 .719(No more options: remaining w)194.67 146.4 R .719
+(ords are for poster te)-.1 F 3.218(xt. This)-.15 F .718
+(option is only needed if)3.218 F(an)194.67 158.4 Q 2.5(yo)-.15 G 2.5(ft)216.46
+158.4 S(he poster w)225.07 158.4 Q(ords be)-.1 E(gin with a `+'.)-.15 E/F3 9
+/Times-Bold@0 SF(EXAMPLES)72 175.2 Q F0
+(Print a full-size poster with an announcement:)108 187.2 Q F1
+(psposter Chemistry 101 Examination 1:00pm--3:00pm | lpr)144 199.2 Q F0(Mak)108
+216 Q 2.5(ead)-.1 G(oor sign in landscape mode:)145.11 216 Q F1
+(psposter +l +w 10cm +h 25cm 'Pr)144 228 Q(of)-.45 E 2.5(.J)-.15 G
+(ane Smith' >door)300.51 228 Q(sign.ps)-.1 E F0(Print the same sign, in color:)
+108 244.8 Q F1(psposter +l +w 10cm +h 25cm +bd blue +bg sk)144 256.8 Q
+(yblue \\)-.1 E(+fg navyblue 'Pr)166.5 268.8 Q(of)-.45 E 2.5(.J)-.15 G
+(ane Smith' | lpr)251.73 268.8 Q F0(If a P)144 280.8 Q/F4 8/Times-Roman@0 SF
+(OST)A F0(S)A F4(CRIPT)A F0(printer is incapable of printing in color)2.5 E 2.5
+(,i)-.4 G 2.5(tw)373.864 280.8 S(ill simulate color by shades of gray)386.364
+280.8 Q(.)-.65 E(Mak)108 297.6 Q 2.5(eas)-.1 G(ale sign:)144 297.6 Q F1
+(psposter +bg yellow <<END-OF-D)144 309.6 Q -.37(AT)-.35 G 2.5(A>)-.13 G(yar)
+314.77 309.6 Q(dsale)-.37 E(.ps)-.15 E -.92(Te)144 321.6 S(rri\214c).92 E -.92
+(Ya)144 333.6 S .74 -.37(rd S).92 H(ale).37 E -.92(To)144 345.6 S(day).92 E
+(123 Elm St.)144 357.6 Q(END-OF-D)144 369.6 Q -.37(AT)-.35 G(A)-.13 E F0(Mak)
+108 386.4 Q 2.5(eas)-.1 G(eminar announcement:)144 386.4 Q F1(psposter +bg or)
+144 398.4 Q(ang)-.15 E 2.5(e<)-.1 G(<EOF >seminar)236.97 398.4 Q(.ps)-1.11 E
+(Biolo)144 410.4 Q(gy Colloquium)-.1 E -.55(Fr)144 422.4 S(iday 23-Sep-1994).55
+E(3pm--4pm)144 434.4 Q(LSB 234)144 446.4 Q(Dr)144 470.4 Q 2.5(.J)-1.11 G
+(udith Br)163.09 470.4 Q(own)-.45 E(Se)144 482.4 Q 2.5(xL)-.2 G(ife of Gnats)
+165.74 482.4 Q(EOF)144 494.4 Q F0(Mak)108 511.2 Q 3.054(eaD)-.1 G .554(anish r\
+oad sign \(the octal escape sequences select the letters AE and o-slash; see A\
+ppendix E of)148.438 511.2 R(the)108 523.2 Q F1 -.8(Po)2.5 G(stScript Langua).8
+E .2 -.1(ge R)-.1 H(efer).1 E(ence Manual)-.37 E F0 2.5(,A).51 G(ddison-W)
+294.34 523.2 Q(esle)-.8 E 1.3 -.65(y, 1)-.15 H(990, ISBN 0-201-18127-4\):).65 E
+F1(psposter +bg yellow +fg blac)144 535.2 Q 2.5(k')-.2 G(\\341r)272.57 535.2 Q
+(esk\\371bing' 5km >vejskilt.ps)-.37 E F0(Mak)108 552 Q 2.5(ea)-.1 G
+(nother road sign in a do)137.61 552 Q
+(wnloaded font, supplying one leading and trailing blank on each line:)-.25 E
+F1(psposter +bg gr)144 564 Q(een +fg white +fn UR)-.37 E(WGr)-.18 E(oteskT)-.45
+E(-Bold +r -90 \\)-.74 E 2.5('G)166.5 576 S -.37(re)179.55 576 S
+(en River ' ' 106 miles ' >r).37 E(oadsign.ps)-.45 E F0 1.1
+(\(The stretch of highw)108 588 R 1.1(ay I-70 in Utah from Salina to Green Ri)
+-.1 F -.15(ve)-.25 G 3.6(ri).15 G 3.6(sc)384.54 588 S 1.1
+(laimed to be the longest in the US)396.47 588 R(Interstate Highw)108 600 Q
+(ay System without services.\))-.1 E(Mak)108 616.8 Q 2.5(eap)-.1 G(oster sho)
+145.11 616.8 Q(wing the dingbat font layout:)-.25 E F1
+(psposter +fn ZapfDingbats +table 8/o >dingbats.ps)144 628.8 Q F3(ENVIR)72
+645.6 Q(ONMENT V)-.27 E(ARIABLES)-1.215 E F0(AFMP)108 657.6 Q -1.11(AT)-.92 G
+10(HS)1.11 G .107(earch path for P)169.31 657.6 R F4(OST)A F0(S)A F4(CRIPT)A F0
+.107(font mapping \214le, \()2.607 F F1(afmfonts.map).33 E F0 .107
+(\), and for do).19 F .108(wnloadable fonts in)-.25 F(P)163.75 669.6 Q F4(OST)A
+F0(S)A F4(CRIPT)A F0 1.555(ASCII \()4.055 F F1(.pfa).23 E F0 4.055(\)a).26 G
+1.555(nd binary \()277.799 669.6 R F1(.pfb).23 E F0 4.055(\)f).23 G 4.055
+(ormats. The)351.244 669.6 R 1.554(font mapping \214le connects long)4.055 F(P)
+163.75 681.6 Q F4(OST)A F0(S)A F4(CRIPT)A F0
+(font names with \(usually shorter\) \214le names on the host computer)2.5 E(.)
+-.55 E 1.266
+(On UNIX, the search path is a colon-separated list of directories.)163.75
+698.4 R 1.266(On other operating sys-)6.266 F(tems, the search path follo)
+163.75 710.4 Q(ws the con)-.25 E -.15(ve)-.4 G(ntions of those systems.).15 E
+-1.11(Ve)72 768 S(rsion 0.08)1.11 E(16 January 1995)272.95 768 Q(4)535 768 Q EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 345.48(PSPOSTER\(1\) PSPOSTER\(1\))72 48 R(RGBP)108 84
+Q -1.11(AT)-.92 G 11.11(HS)1.11 G(earch path for the X W)169.31 84 Q(indo)-.4 E
+2.5(wS)-.25 G(ystem color de\214nition \214le,)293.63 84 Q/F1 10/Times-Italic@0
+SF -.37(rg)2.5 G -.4(b.).37 G(txt).4 E F0(.).68 E/F2 9/Times-Bold@0 SF(FILES)72
+100.8 Q F1(afmfonts.map)108 112.8 Q F0(P)177.17 112.8 Q/F3 8/Times-Roman@0 SF
+(OST)A F0(S)A F3(CRIPT)A F0 1.407(font mapping \214le.)3.907 F 1.407
+(It is distrib)6.407 F 1.406(uted, together with some freely-distrib)-.2 F
+(utable)-.2 E -.8(Ty)177.17 124.8 S .513(pe 1 fonts in).8 F F1(.pfa)3.013 E F0
+(and)3.013 E F1(.pfb)3.013 E F0 .513(formats, and numerous Adobe F)3.013 F .514
+(ont Metric \()-.15 F F1(.afm).23 E F0 3.014<298c>.32 G .514(les, with)505.596
+124.8 R/F4 10/Times-Bold@0 SF(lptops)177.17 136.8 Q F0(\(1\).)A F4(psposter)
+5.69 E F0 .689(looks for this \214le, and do)3.19 F .689
+(wnloadable fonts, in the)-.25 F F1(AFMP)3.189 E -.37(AT)-.9 G(H).37 E F0
+(search)3.189 E(path.)177.17 148.8 Q -.8(Ty)177.17 165.6 S(pical lines in).8 E
+F1(afmfonts.map)2.5 E F0(look lik)2.5 E 2.5(et)-.1 G(his:)338.22 165.6 Q F1 2.5
+(%T)177.17 177.6 S(his line is a comment.)193.56 177.6 Q 2.5(%T)177.17 189.6 S
+(his font name is too long for some)193.56 189.6 Q 2.5(%o)177.17 201.6 S(per)
+193 201.6 Q(ating systems, so we stor)-.15 E 2.5(ei)-.37 G 2.5(tu)314.7 201.6 S
+(nder a)324.98 201.6 Q 2.5(%s)177.17 213.6 S(horter name)191.89 213.6 Q 5(.T)
+-.15 G(he font \214les will be)253.96 213.6 Q 2.5(%H)177.17 225.6 S
+(elvNaBI.afm, containing the c)195.22 225.6 Q(har)-.15 E(acter)-.15 E 2.5(%m)
+177.17 237.6 S(etrics \(assorted dimensions\), and)195.22 237.6 Q 2.5(%H)177.17
+249.6 S(elvNaBI.pfa \(ASCII\) or HelvNaBI.pfb)195.22 249.6 Q 2.5(%\()177.17
+261.6 S(binary\), containing encrypted P)191.33 261.6 Q/F5 8/Times-Italic@0 SF
+(OST)A F1(S)A F5(CRIPT)A F1 2.5(%d)177.17 273.6 S(e\214nitions of the c)193
+273.6 Q(har)-.15 E(acter shapes.)-.15 E(Helvetica-Narr)177.17 285.6 Q
+(ow-BoldOblique = HelvNaBI)-.45 E -.37(rg)108 302.4 S -.4(b.).37 G(txt).4 E F0
+.341(Color mapping \214le distrib)177.17 302.4 R .341(uted with the X W)-.2 F
+(indo)-.4 E 2.841(wS)-.25 G(ystem.)389.608 302.4 Q F4(psposter)5.342 E F0 .342
+(looks for this \214le in)2.842 F(the)177.17 314.4 Q F1(RGBP)2.5 E -.37(AT)-.9
+G(H).37 E F0(search path.)2.5 E -.8(Ty)177.17 331.2 S(pical lines in).8 E F1
+-.37(rg)2.5 G -.4(b.).37 G(txt).4 E F0(look lik)2.5 E 2.5(et)-.1 G(his:)309.67
+331.2 Q F1(000 000 000)177.17 343.2 Q(blac)249.67 343.2 Q(k)-.2 E(000 000 255)
+177.17 355.2 Q(blue)249.67 355.2 Q(000 255 000)177.17 367.2 Q(gr)249.67 367.2 Q
+(een)-.37 E(000 255 255)177.17 379.2 Q(cyan)249.67 379.2 Q(255 000 000)177.17
+391.2 Q -.37(re)249.67 391.2 S(d).37 E(255 000 255)177.17 403.2 Q(ma)249.67
+403.2 Q -.1(ge)-.1 G(nta).1 E(255 255 000)177.17 415.2 Q(yellow)249.67 415.2 Q
+(255 255 255)177.17 427.2 Q(white)249.67 427.2 Q(250 235 215)177.17 439.2 Q
+(antique white)249.67 439.2 Q(250 235 215)177.17 451.2 Q(AntiqueWhite)249.67
+451.2 Q F0(There is no comment syntax.)177.17 468 Q .897(The \214rst three num\
+bers de\214ne red, green, and blue intensities on a scale of 0)177.17 484.8 R
+1.666(..2)1.666 G .896(55, and)-1.666 F .815(the remaining te)177.17 496.8 R
+.815(xt on each line is the color name, which, in the case of compound color)
+-.15 F 1.165(names, appears in tw)177.17 508.8 R 3.665(of)-.1 G 1.164
+(orms, one in lo)276.43 508.8 R 1.164
+(wer case with blank separators, and one without)-.25 F(blanks, in mix)177.17
+520.8 Q(ed case.)-.15 E F2(SEE ALSO)72 537.6 Q F4(compr)108 549.6 Q(ess)-.18 E
+F0(\(1\),)A F4(dxpsview)2.5 E F0(\(1\),)A F4(ghostview)2.5 E F0(\(1\),)A F4(gs)
+2.5 E F0(\(1\),)A F4(gzip)2.5 E F0(\(1\),)A F4(lptops)2.5 E F0(\(1\),)A F4
+(page)2.5 E(view)-.15 E F0(\(1\),)A F4 -.1(rg)2.5 G(b).1 E F0(\(1\),)A F4(tex)
+2.5 E F0(\(1\).)A F2 -.45(AU)72 566.4 S(THOR).45 E F0(Nelson H. F)108 578.4 Q
+2.5(.B)-.8 G(eebe, Ph.D.)167.48 578.4 Q(Center for Scienti\214c Computing)108
+590.4 Q(Department of Mathematics)108 602.4 Q(Uni)108 614.4 Q -.15(ve)-.25 G
+(rsity of Utah).15 E(Salt Lak)108 626.4 Q 2.5(eC)-.1 G(ity)155.12 626.4 Q 2.5
+(,U)-.65 G 2.5(T8)177.25 626.4 S(4112)190.86 626.4 Q -.7(Te)108 638.4 S
+(l: +1 801 581 5254).7 E -.74(FA)108 650.4 S(X: +1 801 581 4148).74 E
+(Email: <beebe@math.utah.edu>)108 662.4 Q F2(COPYRIGHT)72 679.2 Q F0
+(This program is in the)108 691.2 Q F4(public domain)2.5 E F0(.)A -1.11(Ve)72
+768 S(rsion 0.08)1.11 E(16 January 1995)272.95 768 Q(5)535 768 Q EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 345.48(PSPOSTER\(1\) PSPOSTER\(1\))72 48 R/F1 9
+/Times-Bold@0 SF -.855 -1.305(AV A)72 84 T(ILABILITY)1.305 E F0 .3
+(Internet source distrib)108 96 R .3(ution of)-.2 F/F2 10/Times-Bold@0 SF
+(psposter)2.8 E F0 .3(is a)2.8 F -.25(va)-.2 G .3(ilable through the W).25 F
+(orld-W)-.8 E .3(ide W)-.4 F .3(eb Uniform Resource Loca-)-.8 F(tor addresses)
+108 108 Q/F3 10/Times-Italic@0 SF(ftp://ftp.math.utah.edu/pub/misc/psposter)144
+120 Q(-0.08.tar)-.2 E(.z)-1.11 E(ftp://ftp.math.utah.edu/pub/misc/psposter)144
+132 Q(-0.08.zip)-.2 E(ftp://ftp.math.utah.edu/pub/misc/psposter)144 144 Q
+(-0.08.zoo)-.2 E F0 -1.11(Ve)72 768 S(rsion 0.08)1.11 E(16 January 1995)272.95
+768 Q(6)535 768 Q EP
+%%Trailer
+end
+%%EOF
diff --git a/fonts/utilities/psposter/psposter.sh b/fonts/utilities/psposter/psposter.sh
new file mode 100644
index 0000000000..1e186e0cd3
--- /dev/null
+++ b/fonts/utilities/psposter/psposter.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+/usr/local/bin/gawk -f /usr/local/lib/psposter/psposter.awk "$@"
diff --git a/fonts/utilities/psposter/rofvms.awk b/fonts/utilities/psposter/rofvms.awk
new file mode 100644
index 0000000000..dedb9ce181
--- /dev/null
+++ b/fonts/utilities/psposter/rofvms.awk
@@ -0,0 +1,61 @@
+# rofvms.awk -*-awk-*-
+# Filter to convert nroff -man output to VMS .hlp file format according
+# to the rules:
+#
+# 13 or more consecutive blank lines are reduced to 1
+# 3--12 consecutive blank lines are dropped
+# 2 consecutive blank lines are reduced to 1
+# All others output verbatim.
+#
+# The peculiar number 13 handles the case where a paragraph break
+# coincides with a page break.
+#
+# In addition, whenever a line in non-blank in column 1, and then
+# previous line was blank, we insert a blank line; this provides
+# vertical space before a section heading.
+#
+# The output of nroff -man on different UNIX systems is regrettably
+# quite variable in appearance; this file is likely to need
+# modifications on other than Sun OS.
+#
+# Too bad nroff doesn't have an option to suppress titling!
+#
+# The NAME section head becomes 1 BIBCLEAN, and others become
+# 2 XXX followed by XXX.
+# [27-Mar-1993]
+BEGIN { if (NAME == "") NAME = "DVI" }
+
+# Match and delete page headers: xxx(nnn) .... xxx(nnn)
+/^[A-Za-z][-_A-Za-z0-9]*\([0-9A-Za-z]+\).*[A-Za-z][-_A-Za-z0-9]*\([0-9A-Za-z]+\)$/ {next}
+
+# Match and delete page footers: Sun Release ...nnn
+# These vary from system to system, so extra patterns may be needed here
+/^Sun Release.*[0-9]+$/ {next} # Sun OS x.x
+/^Sun Microsystems.*[0-9]+$/ {next}
+/^Printed.*[0-9]+$/ {next} # BSD 4.3
+/^Page [0-9].*$/ {next} # Silicon Graphics
+/^Version.*Last change:/ {next} # bibclean.txt on SunOS 4.1.1
+
+# Match all lines and do blank line processing
+{
+ if (NF == 0) # blank line
+ nb++;
+ else # non blank line
+ {
+ if ((nb == 1) || (nb == 2) || (nb >= 13))
+ printf("\n");
+ else if ((nb > 0) && (substr($0,1,1) != " ") && (nf > 0))
+ printf("\n");
+ if ($0 == "NAME") # level 1 header
+ $0 = "1 " NAME;
+ else if (substr($0,1,1) != " ") # level 2 header
+ {
+ header = $0;
+ gsub(/ /,"-",header);
+ $0 = "2 " header "\n " $0;
+ }
+ printf("%s\n",$0);
+ nb = 0;
+ nf++;
+ }
+}