summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipsk
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
committerKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
commit487ca4806cc046076293cf6cc5fbba0db282bac7 (patch)
tree847b412ab5158dd7bdd7ed7e5a4cc3fbca94be32 /Build/source/texk/dvipsk
parenta3d3111bfe26b8e5f5bc6049dfb2a4ca2edc7881 (diff)
texk 1
git-svn-id: svn://tug.org/texlive/trunk@1485 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipsk')
-rw-r--r--Build/source/texk/dvipsk/AUTHORS7
-rw-r--r--Build/source/texk/dvipsk/ChangeLog1841
-rw-r--r--Build/source/texk/dvipsk/INSTALL358
-rw-r--r--Build/source/texk/dvipsk/INSTALLATION227
-rw-r--r--Build/source/texk/dvipsk/Makefile.in185
-rw-r--r--Build/source/texk/dvipsk/README137
-rw-r--r--Build/source/texk/dvipsk/acconfig.h24
-rw-r--r--Build/source/texk/dvipsk/adobe1121
-rw-r--r--Build/source/texk/dvipsk/afm2tfm.125
-rw-r--r--Build/source/texk/dvipsk/afm2tfm.c2080
-rw-r--r--Build/source/texk/dvipsk/afm2tfm.rc34
-rw-r--r--Build/source/texk/dvipsk/atari/makefile.atari78
-rw-r--r--Build/source/texk/dvipsk/bbox.c374
-rw-r--r--Build/source/texk/dvipsk/c-auto.in4
-rw-r--r--Build/source/texk/dvipsk/cmfonts.map77
-rw-r--r--Build/source/texk/dvipsk/color.c240
-rw-r--r--Build/source/texk/dvipsk/color.lpro195
-rw-r--r--Build/source/texk/dvipsk/config.h86
-rw-r--r--Build/source/texk/dvipsk/config.ps86
-rwxr-xr-xBuild/source/texk/dvipsk/configure1777
-rw-r--r--Build/source/texk/dvipsk/configure.in34
-rw-r--r--Build/source/texk/dvipsk/contrib/MakeTeXPK.pl198
-rw-r--r--Build/source/texk/dvipsk/contrib/PSTricks352
-rw-r--r--Build/source/texk/dvipsk/contrib/afm-extra/ptmr.ed118
-rw-r--r--Build/source/texk/dvipsk/contrib/afm-extra/ptmro.ed130
-rw-r--r--Build/source/texk/dvipsk/contrib/bbfig/INSTALLATION16
-rw-r--r--Build/source/texk/dvipsk/contrib/bbfig/bb.ps579
-rw-r--r--Build/source/texk/dvipsk/contrib/bbfig/bbfig22
-rw-r--r--Build/source/texk/dvipsk/contrib/bbfig/bbfig.140
-rw-r--r--Build/source/texk/dvipsk/contrib/bbfig/vmsbbfig.c113
-rw-r--r--Build/source/texk/dvipsk/contrib/colorsep.lpro184
-rw-r--r--Build/source/texk/dvipsk/contrib/config.proto46
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/2a4.ps49
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/config.fax5
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/config.lino93
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/config.lj2p95
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/config.post3x328
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/config.rokicki62
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/loop.ps2
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/mkdvipspapers429
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/papersize.level2236
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/papersize.simple44
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/prepipe.ps1
-rw-r--r--Build/source/texk/dvipsk/contrib/configs/showpage.ps1
-rw-r--r--Build/source/texk/dvipsk/contrib/crop.lpr271
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/avantgarde.sty11
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/blackdvi.sty109
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/bookman.sty11
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/chancery.sty11
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/colordvi.sty162
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/lucida.sty12
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/ncs.sty11
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/palatino.sty11
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/psfonts.sty266
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/psgreek.sty38
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/rotate.sty53
-rw-r--r--Build/source/texk/dvipsk/contrib/latex209/times.sty11
-rw-r--r--Build/source/texk/dvipsk/contrib/psfntmac/ps_lfonts.tex888
-rw-r--r--Build/source/texk/dvipsk/contrib/psfntmac/ps_plain.tex1235
-rw-r--r--Build/source/texk/dvipsk/contrib/pspic/pspic.readme40
-rw-r--r--Build/source/texk/dvipsk/contrib/pspic/pspic.sty168
-rw-r--r--Build/source/texk/dvipsk/contrib/timesmat.sty291
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/README149
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/a3.cfg17
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/duplong.cfg19
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/dupshort.cfg19
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/inv.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr100-0.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr100.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr110.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr120.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr130.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr140.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr150.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr70.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr80.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr85.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/scr90.cfg21
-rw-r--r--Build/source/texk/dvipsk/contrib/volker/simplex.cfg19
-rw-r--r--Build/source/texk/dvipsk/contrib/whichinpath13
-rw-r--r--Build/source/texk/dvipsk/crop.lpro26
-rw-r--r--Build/source/texk/dvipsk/cyrfonts.map51
-rw-r--r--Build/source/texk/dvipsk/debug.h23
-rw-r--r--Build/source/texk/dvipsk/depend.mak989
-rw-r--r--Build/source/texk/dvipsk/depend.make399
-rw-r--r--Build/source/texk/dvipsk/depend.mk409
-rw-r--r--Build/source/texk/dvipsk/dopage.c422
-rw-r--r--Build/source/texk/dvipsk/dosection.c306
-rw-r--r--Build/source/texk/dvipsk/dospecial.c962
-rw-r--r--Build/source/texk/dvipsk/download.c562
-rw-r--r--Build/source/texk/dvipsk/dpicheck.c75
-rw-r--r--Build/source/texk/dvipsk/drawPS.c674
-rw-r--r--Build/source/texk/dvipsk/dviinput.c88
-rw-r--r--Build/source/texk/dvipsk/dvips.1517
-rw-r--r--Build/source/texk/dvipsk/dvips.c1394
-rw-r--r--Build/source/texk/dvipsk/dvips.h408
-rw-r--r--Build/source/texk/dvipsk/dvips.help34
-rw-r--r--Build/source/texk/dvipsk/dvips.info4675
-rw-r--r--Build/source/texk/dvipsk/dvips.rc94
-rw-r--r--Build/source/texk/dvipsk/dvips.texi4593
-rw-r--r--Build/source/texk/dvipsk/emspecial.c1440
-rw-r--r--Build/source/texk/dvipsk/eufonts.map21
-rw-r--r--Build/source/texk/dvipsk/finclude.c536
-rw-r--r--Build/source/texk/dvipsk/finclude.lpro20
-rw-r--r--Build/source/texk/dvipsk/flib.c343
-rw-r--r--Build/source/texk/dvipsk/fontdef.c197
-rw-r--r--Build/source/texk/dvipsk/header.c186
-rw-r--r--Build/source/texk/dvipsk/hps.c569
-rw-r--r--Build/source/texk/dvipsk/hps.lpro247
-rw-r--r--Build/source/texk/dvipsk/hps/CHANGES_HPS.txt45
-rw-r--r--Build/source/texk/dvipsk/hps/README_HPS.txt144
-rw-r--r--Build/source/texk/dvipsk/lafonts.map16
-rw-r--r--Build/source/texk/dvipsk/loadfont.c524
-rw-r--r--Build/source/texk/dvipsk/makefont.c309
-rw-r--r--Build/source/texk/dvipsk/mtest.ps1247
-rw-r--r--Build/source/texk/dvipsk/mvs/dvipsmvs.h97
-rw-r--r--Build/source/texk/dvipsk/output.c1580
-rw-r--r--Build/source/texk/dvipsk/papersiz.c126
-rw-r--r--Build/source/texk/dvipsk/paths.h86
-rw-r--r--Build/source/texk/dvipsk/pc/README.pc152
-rw-r--r--Build/source/texk/dvipsk/pc/afm2tfm.def3
-rw-r--r--Build/source/texk/dvipsk/pc/config.ps65
-rw-r--r--Build/source/texk/dvipsk/pc/dvips16.def3
-rw-r--r--Build/source/texk/dvipsk/pc/dvipswin.def6
-rw-r--r--Build/source/texk/dvipsk/pc/makefile.emx373
-rw-r--r--Build/source/texk/dvipsk/pc/makefile.msc313
-rw-r--r--Build/source/texk/dvipsk/pc/makefile.tc282
-rw-r--r--Build/source/texk/dvipsk/pc/makefile.wat310
-rw-r--r--Build/source/texk/dvipsk/pc/makefile.wt2304
-rw-r--r--Build/source/texk/dvipsk/pc/maketexp.bat52
-rw-r--r--Build/source/texk/dvipsk/pc/maketexp.cmd56
-rw-r--r--Build/source/texk/dvipsk/pc/squeeze.def3
-rw-r--r--Build/source/texk/dvipsk/pc/wat.h10
-rw-r--r--Build/source/texk/dvipsk/pc/winmain.c89
-rw-r--r--Build/source/texk/dvipsk/pprescan.c262
-rw-r--r--Build/source/texk/dvipsk/prescan.c289
-rw-r--r--Build/source/texk/dvipsk/protos.h374
-rw-r--r--Build/source/texk/dvipsk/psfonts.map537
-rw-r--r--Build/source/texk/dvipsk/ptexmac.h196
-rw-r--r--Build/source/texk/dvipsk/reencode/8a.enc269
-rw-r--r--Build/source/texk/dvipsk/reencode/8r.enc118
-rw-r--r--Build/source/texk/dvipsk/reencode/EC.enc82
-rw-r--r--Build/source/texk/dvipsk/reencode/README15
-rw-r--r--Build/source/texk/dvipsk/reencode/ad.enc87
-rw-r--r--Build/source/texk/dvipsk/reencode/asex.enc120
-rw-r--r--Build/source/texk/dvipsk/reencode/asexp.enc84
-rw-r--r--Build/source/texk/dvipsk/reencode/clean.sh2
-rw-r--r--Build/source/texk/dvipsk/reencode/cork.enc85
-rw-r--r--Build/source/texk/dvipsk/reencode/dc.enc79
-rw-r--r--Build/source/texk/dvipsk/reencode/dvips.enc75
-rw-r--r--Build/source/texk/dvipsk/reencode/extex.enc79
-rw-r--r--Build/source/texk/dvipsk/reencode/funky.enc81
-rw-r--r--Build/source/texk/dvipsk/reencode/psfonts.map6
-rw-r--r--Build/source/texk/dvipsk/reencode/texmext.enc184
-rw-r--r--Build/source/texk/dvipsk/reencode/texmital.enc183
-rw-r--r--Build/source/texk/dvipsk/reencode/texmsym.enc183
-rw-r--r--Build/source/texk/dvipsk/reencode/treen.sh40
-rw-r--r--Build/source/texk/dvipsk/reencode/treen2.sh12
-rw-r--r--Build/source/texk/dvipsk/reencode/xl2.enc316
-rw-r--r--Build/source/texk/dvipsk/reencode/xt2.enc307
-rw-r--r--Build/source/texk/dvipsk/repack.c446
-rw-r--r--Build/source/texk/dvipsk/resident.c1222
-rw-r--r--Build/source/texk/dvipsk/scalewidth.c32
-rw-r--r--Build/source/texk/dvipsk/scanpage.c290
-rw-r--r--Build/source/texk/dvipsk/search.c640
-rw-r--r--Build/source/texk/dvipsk/skippage.c89
-rw-r--r--Build/source/texk/dvipsk/special.lpro336
-rw-r--r--Build/source/texk/dvipsk/squeeze.c159
-rw-r--r--Build/source/texk/dvipsk/stamp-auto.in1
-rw-r--r--Build/source/texk/dvipsk/t1part.c2715
-rw-r--r--Build/source/texk/dvipsk/t1part.h147
-rw-r--r--Build/source/texk/dvipsk/test.ps1856
-rw-r--r--Build/source/texk/dvipsk/testdata/8r.enc118
-rw-r--r--Build/source/texk/dvipsk/testdata/ad.enc87
-rw-r--r--Build/source/texk/dvipsk/testdata/cmex10.pfbbin0 -> 22869 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/cmmi10.pfbbin0 -> 30297 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/cmr10.pfbbin0 -> 26882 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/cmsy10.pfbbin0 -> 26629 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/cmtt10.pfbbin0 -> 24667 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/config.ps48
-rw-r--r--Build/source/texk/dvipsk/testdata/dvipstst.tex136
-rw-r--r--Build/source/texk/dvipsk/testdata/dvipstst.xdvbin0 -> 4112 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/dvipstst.xps3239
-rw-r--r--Build/source/texk/dvipsk/testdata/psfonts.map104
-rw-r--r--Build/source/texk/dvipsk/testdata/ptmbi.vfbin0 -> 1544 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/ptmbi8r.tfmbin0 -> 4480 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/ptmr.vfbin0 -> 1680 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/ptmr8r.tfmbin0 -> 4408 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/ptmri.vfbin0 -> 1544 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/ptmri8r.tfmbin0 -> 4640 bytes
-rw-r--r--Build/source/texk/dvipsk/testdata/special.pro56
-rw-r--r--Build/source/texk/dvipsk/testdata/texc.pro60
-rw-r--r--Build/source/texk/dvipsk/testdata/texps.pro10
-rw-r--r--Build/source/texk/dvipsk/tex.lpro351
-rw-r--r--Build/source/texk/dvipsk/tex/blackdvi.tex109
-rw-r--r--Build/source/texk/dvipsk/tex/colordvi.tex162
-rw-r--r--Build/source/texk/dvipsk/tex/rotate.tex43
-rw-r--r--Build/source/texk/dvipsk/tex/rotsample.tex32
-rw-r--r--Build/source/texk/dvipsk/texc.script12
-rw-r--r--Build/source/texk/dvipsk/texps.lpro129
-rw-r--r--Build/source/texk/dvipsk/tfmload.c231
-rw-r--r--Build/source/texk/dvipsk/unpack.c179
-rw-r--r--Build/source/texk/dvipsk/virtualfont.c301
-rw-r--r--Build/source/texk/dvipsk/vmcms/Makefile.IBM199
-rw-r--r--Build/source/texk/dvipsk/vmcms/README.VMCMS168
-rw-r--r--Build/source/texk/dvipsk/vmcms/afm2tfm.doc323
-rw-r--r--Build/source/texk/dvipsk/vmcms/dvips.doc65
-rw-r--r--Build/source/texk/dvipsk/vmcms/dvipscms.h153
-rw-r--r--Build/source/texk/dvipsk/vms/MAKETEXPK.COM127
-rw-r--r--Build/source/texk/dvipsk/vms/Makefile281
-rw-r--r--Build/source/texk/dvipsk/vms/README128
-rw-r--r--Build/source/texk/dvipsk/vms/README.VMS48
-rw-r--r--Build/source/texk/dvipsk/vms/dvips.cld55
-rw-r--r--Build/source/texk/dvipsk/vms/dvips.hlp435
-rw-r--r--Build/source/texk/dvipsk/vms/dvips.rnh532
-rw-r--r--Build/source/texk/dvipsk/vms/make.com351
-rw-r--r--Build/source/texk/dvipsk/vms/newmake.com387
-rw-r--r--Build/source/texk/dvipsk/vms/texc_scr.com104
-rw-r--r--Build/source/texk/dvipsk/vms/vaxcrtl.opt1
-rw-r--r--Build/source/texk/dvipsk/vms/vaxvms.c470
-rw-r--r--Build/source/texk/dvipsk/vms/vms.h17
-rw-r--r--Build/source/texk/dvipsk/vms/vms_gcc.txt75
-rw-r--r--Build/source/texk/dvipsk/vms/vms_gcc_paths.h33
-rw-r--r--Build/source/texk/dvipsk/vms/vmscli.c466
-rw-r--r--Build/source/texk/dvipsk/win32.mak242
-rw-r--r--Build/source/texk/dvipsk/writet1.c1780
226 files changed, 66220 insertions, 0 deletions
diff --git a/Build/source/texk/dvipsk/AUTHORS b/Build/source/texk/dvipsk/AUTHORS
new file mode 100644
index 00000000000..b934b590617
--- /dev/null
+++ b/Build/source/texk/dvipsk/AUTHORS
@@ -0,0 +1,7 @@
+This program, dvipsk, was modified by kb@mail.tug.org from Tom Rokicki's
+dvips distribution. Send bug reports to tex-k@mail.tug.org, not to Tom.
+
+Jim Hafner originally implemented the color support.
+Sergey Lesenko originally implemented the partial Type 1 font downloading.
+Mark Doyle and Tanmoy Bhattacharya implemented the hyperdvi support, and
+Dave Love originally merged it into dvipsk.
diff --git a/Build/source/texk/dvipsk/ChangeLog b/Build/source/texk/dvipsk/ChangeLog
new file mode 100644
index 00000000000..0e06bd50fb6
--- /dev/null
+++ b/Build/source/texk/dvipsk/ChangeLog
@@ -0,0 +1,1841 @@
+2004-05-10 Karl Berry <karl@tug.org>
+
+ From Matthew Swift <swift@alum.mit.edu>, via Debian bug 181065:
+ * config.ps: improve comments.
+ * output.c (open_output) [DJGPP]: do not disable writing to a pipe
+ when secure; we don't do that in the non-DJGPP case.
+ * dvips.texi (Option details): -R does not disable output to a pipe.
+ (Configuration file commands): typo in `o' doc.
+
+WARNING: THIS CHANGELOG IS WAY OUT OF DATE.
+
+2001-06-02 Sebastian Rahtz <sebastian.rahtz@computing-services.oxford.ac.uk>
+
+ * resident.c: added option to config file ('z') to have the same
+ effect as -R (secure mode)
+
+Mon Jan 10 21:39:20 CET 2000
+ * from pdftex distribution: improved partial font downloading
+ ported back
+ * .notdef related fixes for afm2tfm
+
+Sun Apr 11 09:03:29 CEST 1999
+ * output.c: (from Tom Rokicki)
+ Faster inclusion of DOS EPSF files. Use byte counter to avoid
+ calling ftell().
+
+Wed Apr 7 01:07:41 CEST 1999
+ * Makefile.in: added -DSHIFTLOWCHARS to compiler flags
+ * output.c: corrected T1Char function for SHIFTLOWCHARS
+
+Mon Mar 9 10:31:44 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * clean reencoding/asex.enc; small fix to copyright year (from
+ Thomas Esser)
+
+Fri Mar 6 10:56:28 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * dvips.h (BANNER): changed to 5.78, as per Tom. also afm2tfm.c
+ and dvips.c
+
+ * tex.lpro: (from Tom Rokicki)
+ Richard Sites of Adobe found a bug in dvips that
+ causes dvips-generated output, when piped through Distiller, to
+ fail. The problem is that dvips uses names in its encoding array
+ that are `illegal' according to distiller. I've encouraged him to
+ patch up distiller to `do the right thing', but I need to fix
+ dvips too. The patch I've come up with is to change, in tex.lpro,
+
+ 0 1 255 {IE S 1 string dup 0 3 index put cvn put} for
+ to
+
+ 2 string 0 1 255 { IE S dup 360 add 36 4 index cvrs cvn put } for pop
+
+Tue Mar 3 10:15:37 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * afm2tfm.c: Tom Browder <tbrowde@asi-fwb.com>. To fix the case
+ where the afm file has a -1 for the CC encoding position
+
+Wed Feb 25 10:52:19 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * patches to add facility to shift characters below 32 to higher
+ positions, if possible, activated by -G. By default, this is not
+ activated, needs -DSHIFTLOWCHARS in the Makefile, as I am not sure
+ about it, but the conditional code is there to study for those who
+ want to experiment
+
+Tue Feb 24 11:56:52 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * Makefile.in: clean up check target to be self-contained
+
+Mon Feb 23 10:11:57 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * resident.c: changed parsing of "<<" so that the font is passed
+ through to be treated as a font, not a procset. it will still be
+ partially downloaded, though.
+
+Tue Feb 17 10:17:40 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * dvips.c: logic of #ifdef Omega was reversed for help message,
+ corrected
+
+Mon Feb 16 12:33:30 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * afm2tfm.c: fixes for explicit extension by Thomas Esser:
+ Several things did not work as expected:
+ - removing the suffix by putting \0 at the position found by
+ find_suffix(outname) does not work, as find_suffix returns the
+ position *after* the last dot
+ - memmove(outname, p, strlen(p)) (where p = basename(outname))
+ should be memmove(outname, p, strlen(p)+1), but I think that
+ we should just use two strcpy calls since memmove is not
+ available on every platform.
+
+
+Mon Feb 9 10:56:25 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * put data files for "make check" into testdata/, to avoid them
+ being zapped by "make extraclean"
+
+ * patch to dvips.texi from Thomas Esser
+
+Mon Feb 2 11:32:32 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * small fix in make check target of Makefile.in
+
+Tue Jan 27 14:32:25 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * configure etc: new configure.in, c-auto.in, Makefile.in from
+ Olaf Weber
+
+Tue Jan 27 13:49:11 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * ChangeLog: changes to "check" target (explicit -D
+ 300). regenerated .xps file.
+
+Mon Jan 19 20:45:15 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * renamed contrib/volker config.* files to *.cfg, and to shorter
+ names (screen to scr) for DOS 8+3 naming
+
+ * added .tfm and .vf files for make check to directory;
+ changed permissions of dvips.texi
+
+Sat Jan 17 15:08:57 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * assorted patches from Peter Breitenlohner, Olaf Weber,
+ Fabrice Popineau etc. Hope it all still works.
+
+Fri Jan 16 21:28:44 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * dvips.c: patch from John Plaice for odvips, to flag odvips as program
+ name
+
+Thu Jan 1 10:59:29 1998 Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+
+ * provided prebuilt dvipstst.xdv and dvipstst.xps to allow
+ check target to work.
+
+Wed Aug 27 20:18:20 1997 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * stamp-auto: Remove this file, should be in build tree, not in
+ source tree.
+
+ * configure.in: Make `configure' rebuild the `stamp-auto' file.
+
+Sun Aug 24 18:04:14 1997 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * Makefile.in: Allow `make check' when $(srcdir) is not `.'.
+
+Fri Mar 07 12:10:46 1997 Fabrice POPINEAU <popineau@ese-metz.fr>
+
+ * config.h: introduce prototyping when __STDC__ is defined.
+ * dvips.h: defines a PROTO() macro according to __STDC__.
+ * dvips.h: getenv() is declared here.
+
+ * dvips.c:
+ * emspecial.c:
+ * output.c:
+ * resident.c: use the PROTO() declaration.
+ * resident.c: bad_config was called whitout argument.
+ * squeeze.c: exit() declaration.
+
+Thu Feb 6 17:34:06 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Version 5.66a.
+
+Sat Feb 1 17:15:39 1997 Karl Berry <karl@cs.umb.edu>
+
+ * t1part.c: Changes to avoid compiler warnings. From Tom.
+
+ * Makefile.in (program_files): dvipstst.dvi should be included
+ for make check.
+ From: Joern Clausen <joern@techfak.uni-bielefeld.de>.
+
+Sun Jan 19 12:47:37 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (version): Now 5.66a.
+ * dvips.texi: Update version number.
+ * download, finclude.c, output.c: Update for new version.
+
+Fri Jan 17 10:06:25 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (version): Now 5.64a.
+
+ * finclude.c, t1part.[ch], resident.c, output.c, download.c,
+ dopage.c: Update for dvips 5.64.
+
+ * afm2tfm.c (writevpl): No vname in CHARACTER property.
+ (version): Now 8.1.
+
+Tue Jan 14 14:50:27 1997 Karl Berry <karl@cs.umb.edu>
+
+ * hps.c (PAGESIZE): #undef.
+
+Mon Jan 13 14:25:07 1997 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.h (BANNER): Add www.radicaleye.com per Tom.
+
+Sun Jan 12 10:57:34 1997 Karl Berry <karl@cs.umb.edu>
+
+ * texps.lpro: Change /setfont line to use cvx instead of load.
+ Fix from Tom, reported by poortom@apmisc.ibm.co.jp for the QMS 1725.
+
+Sun Jan 5 12:05:54 1997 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in: Remove special case for t1part.c, and add it to
+ objects. We compile it normally now.
+ * bbox.c, dospecial.c, drawPS.c, dvips.c, dvips.h, tex/epsf.tex,
+ search.c, virtualfont.c, tex.lpro, finclude.c
+ afm2tfm.c: Updates for dvips 5.62.
+
+Mon Dec 9 17:24:58 1996 Karl Berry <karl@cs.umb.edu>
+
+ * t1part.c (CHAR) [WIN32]: #define as CHARACTER to work around
+ <windows.h> typedef.
+
+Sat Dec 7 17:21:37 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dospecial.c (system): Don't bother to declare, it returns an int.
+
+ * afm2tfm.c, dvips.c, emspecial.c, output.c, resident.c: Various
+ WIN32 changes from Fabrice.
+
+Tue Dec 3 01:25:28 1996 Ulrik Vieth <vieth@thphy.uni-duesseldorf.de>
+
+ * afm2tfm.c: Fix version message.
+
+Mon Dec 9 01:29:41 1996 Ulrik Vieth <vieth@thphy.uni-duesseldorf.de>
+
+ * afm2tfm.c: Reformat usage message slightly for consistency.
+ Issue "Try --help" message if called with no args.
+
+Tue Dec 3 01:25:28 1996 Ulrik Vieth <vieth@thphy.uni-duesseldorf.de>
+
+ * afm2tfm.c: Fix version message.
+
+Thu Nov 28 09:33:13 1996 Karl Berry <karl@cs.umb.edu>
+
+ * resident.c: Pass explicit error strings to bad_config.
+ * dvips.h (INT_FORMAT) [SHORTINT]: Define as %ld or %d.
+
+ * t1part.c (ScanChars): Cast label[counter].select, which is a char,
+ to int, for the sake of machines where char is unsigned by default,
+ such as the RS/6000.
+
+Wed Nov 27 10:06:27 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (program_files): Don't bother to include dvipstst.dvi.
+
+Fri Nov 15 16:22:42 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (install-exec): Use INSTALL_LIBTOOL_PROG for
+ binaries.
+
+Sun Nov 10 16:29:31 1996 Karl Berry <karl@cs.umb.edu>
+
+ * t1part.c (PartialPFB): Return value from fread is an int,
+ not a pointer, so don't compare to NULL.
+
+Thu Nov 7 14:53:08 1996 Karl Berry <karl@cs.umb.edu>
+
+ * papersiz.c (myatodim, myatol): If error, give the erroneous string.
+
+Sun Oct 27 16:20:58 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (check): Don't run TeX.
+ (program_files): Distribute dvipstst.dvi.
+
+ * resident.c (c_lineno): Remove invalid second declaration.
+
+ * t1part.c (PartialPFA): Cast UniRealloc result to avoid warning
+ from SunOS cc.
+ (UniRealloc) [KPATHSEA_TYPES_H]: Define as xrealloc, not just realloc.
+
+Sun Oct 20 11:25:27 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (install-data): mkdirchain dvips_plain_macrodir.
+ (post-dist): Link in tex.
+ *.tex: Move to tex/ subdirectory.
+
+Fri Oct 18 14:51:03 1996 Karl Berry <karl@cs.umb.edu>
+
+ From: Marek Rouchal <marek@btfmd1.fs.uni-bayreuth.de>.
+ These changes finish implementing multiple epsf output files.
+ * bbox.c (findbb): Pass in bop location.
+ * dvips.c: for -i, default section size to one page.
+ Change call to initprinter.
+ * output.c (epsftest): Change call to findbb.
+ (initprinter): Take sectiontype as parameter instead of page count.
+
+Mon Oct 14 11:25:13 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Changes for NT from Fabrice POPINEAU <popineau@esemetz.ese-metz.fr>.
+ * hps.c: Rename Rectangle to dvipsRectangle.
+ * dvips.h (ERROR, NO_ERROR): #undef.
+ * paths.h (DVIPSRC) [WIN32]: Define as dvips.ini
+ * output.c: WIN32 conditionals a la MSDOS.
+
+Sun Oct 13 13:40:26 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (main),
+ * output.c (epsftest): Remove condition that document be a single
+ page for -E.
+ Suggested by: Marek Rouchal <marek@btfmd1.fs.uni-bayreuth.de>.
+
+ * bbox.c, dosection.c, download.c, drawPS.c, dvips.c, finclude.c,
+ fontdef.c, prescan.c, resident.c, virtualfont.c: Keep mag as a
+ real instead of an integer.
+ From: "Melissa O'Neill" <oneill@cs.sfu.ca>.
+
+Tue Oct 8 16:47:13 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (version_files): Add dvips.c.
+
+Sat Oct 5 17:00:53 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (main),
+ * afm2tfm.c (version): Change to the new standard GNU format.
+
+ * Makefile.in (install-data): Call install-info.
+ * dvips.texi: Use @url, @email, and @dircategory/@direntry.
+
+Sat Sep 7 16:01:38 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (help): Include bug reporting address.
+ * afm2tfm.c (usage): Likewise.
+
+Fri Sep 6 19:05:23 1996 Karl Berry <karl@cs.umb.edu>
+
+ * output.c, dospecial: Call output_with_perror for PostScript
+ output file open failure.
+ * dvips.c (error_with_perror): New routine.
+
+Fri Aug 23 16:57:39 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (main): Better bad first/last page errors.
+
+Sun Aug 4 15:56:50 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dospecial.c: Updates from d.love, PAGEUS_INTERUPPTUS is now
+ page_interrupt, etc.
+
+ * hps.c: Use mymalloc instead of malloc where we don't check the
+ return value.
+
+ * dvips.c (main): Also print kpathsea_version_string if --version.
+
+Fri Jul 26 15:47:20 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in: Remove co.make.
+
+Thu Jul 11 19:17:52 1996 Karl Berry <karl@laurie>
+
+ * resident.c: Include variable.h.
+
+Mon Jun 10 11:00:35 1996 Karl Berry <karl@cs.umb.edu>
+
+ * hps.c: Update again from Dave, the last patch got corrupted.
+
+Fri Jun 7 18:46:46 1996 K. Berry <kb@cs.umb.edu>
+
+ * Makefile.in (afm2tfm, $(program)): Use $(kpathsea_link).
+ (squeeze): Include $(XLOADLIBES).
+
+Sat Jun 1 14:36:39 1996 Karl Berry <karl@cs.umb.edu>
+
+ * resident.c (getdefaults): Use envvar/config value DVIPSRC if set.
+
+Thu May 16 22:41:15 1996 Dave Love <d.love@dl.ac.uk>
+
+ * texc.lpro: Update to dvihps 0.4 (mostly robuster anchors?).
+ * dopage.c, hps.c: Likewise.
+
+Wed May 1 16:37:00 1996 Karl Berry <karl@cs.umb.edu>
+
+ * paths.h (DVIPSRC): Prepend $HOME/, so we only search for .dvips
+ in the user's home directory. (Original dvips behavior,
+ unwittingly changed, just noted by Michel Goossens.)
+
+Fri Apr 26 13:36:25 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (install-data): Install the plain macro files in
+ $(dvips_plain_macrodir), and avoid $(CP_R).
+ From: Pierre Asselin <pa@magtsm.tdh.qntm.com>.
+
+Sun Apr 21 16:32:43 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (main): Do not pass in !dontmakefont to kpse_init_prog.
+ In 'M' command line case, call the new kpse_set_enabled fn.
+
+Fri Mar 8 14:39:03 1996 Karl Berry <karl@cs.umb.edu>
+
+ * hps.c: qoutes -> quotes.
+
+ * dospecial.c: Don't complain about unknown specials if TEX_HUSH.
+
+Thu Mar 7 11:15:34 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (check_checksum): New routine.
+ * bbox.c, loadfont.c, tfmload.c, virtualfont.c: Call it.
+
+ * t1part.c (perror): Remove spurious #define, and change return's
+ to exit's after calling perror.
+ New copyright notice from Sergey.
+
+Sun Mar 3 12:26:01 1996 Karl Berry <karl@cs.umb.edu>
+
+ * t1part.c: New version (1.59) from Sergey, fixing the problem
+ with lbma.
+
+Wed Feb 28 15:19:30 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.texi: Document the new MISSFONT_LOG variable.
+
+ * Installed following update from Dave Love:
+
+Tue Jan 23 13:55:52 1996 D.J.G.Love <d.love@dl.ac.uk>
+
+ * hps.c (PAGESIZE): Don't hardcode.
+
+Mon Jan 22 19:34:38 1996 Dave Love <d.love@dl.ac.uk>
+
+ * dopage.c: Update to dvihps 0.3c.
+ * dospecial.c: Likewise.
+ * hps.c: Likewise.
+ * hps.lpro: Likewise.
+
+Tue Feb 27 17:06:42 1996 Karl Berry <karl@cs.umb.edu>
+
+ * afm2tfm.c (main): Need to call kpse_set_progname now that we are
+ using the afm search path.
+
+ * resident.c (addentry): Oops, another mistake in the partial
+ download merge.
+
+Sun Feb 18 15:59:18 1996 Karl Berry <karl@cs.umb.edu>
+
+ * afm2tfm.c: Search for AFM file along new AFM path.
+
+ * hps.c: Use mymalloc, not plain malloc.
+ And replace dup_str with the existing xstrdup.
+
+Thu Feb 15 13:56:07 1996 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (main): Set kpse_make_tex_discard_errors = quiet.
+
+Sat Feb 10 14:03:12 1996 Karl Berry <karl@cs.umb.edu>
+
+ * afm2tfm.c (assignchars): Avoid creating texnum's > 255, since we
+ can't handle it. Happens with an AFM line like:
+ C 256 ; WX 402 ; N c256 ; B 4 0 402 630 ;
+ Also, don't try to output kern equivalences for unencoded characters.
+ From: "Dr Peter J. Braam" <braam@stlawrence.maths.ox.ac.uk>.
+
+Fri Feb 9 15:28:03 1996 Karl Berry <karl@cs.umb.edu>
+
+ * afm2tfm.c (usage): Include kpathsea_version_string in output.
+ Recognize --version and --help.
+
+ * tex.lpro: I had fixed texc.lpro, but that's not a source file.
+
+ * hps.c (PAGESIZE): Compute dynamically.
+ From: Dave Love <d.love@dl.ac.uk>.
+
+Sat Feb 3 15:44:19 1996 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (DEFS): Moved to common.make.
+
+Fri Dec 29 17:17:14 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in: misc.make is now clean.make.
+
+Tue Dec 26 17:18:39 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (initialize): Initialize dontmakefont to
+ !MAKE_TEX_PK_BY_DEFAULT.
+
+Wed Dec 20 15:38:31 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (INSTALL): Use -D INSTALLONLY, rather than sed.
+ Manual changes to match.
+
+Wed Dec 13 14:29:11 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (DEFRES): Change to 600.
+
+ * afm2tfm.c: Do oslash <> o and Oslash <> O.
+ From: "Young U. Ryu" <ryoung@utdallas.edu>.
+
+Sun Dec 10 16:41:05 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dospecial.c (specerror): Hint that they're using an unsupported
+ macro package, most likely.
+
+Fri Dec 1 16:08:52 1995 Karl Berry <karl@cs.umb.edu>
+
+ * test.tex: Rename to dvipstst.tex for clarity and include in
+ distribution.
+ From: Joern Clausen <joern@techfak.uni-bielefeld.de>.
+
+Thu Nov 16 13:32:50 1995 Karl Berry <karl@cs.umb.edu>
+
+ * search.c: Avoid popen on the Amiga.
+ * dvips.h (close_file): Make function declaration extern for the
+ Amiga. From Andreas Scherer.
+
+Tue Nov 14 14:07:17 1995 Karl Berry <karl@cs.umb.edu>
+
+ * loadfont.c (pkopen): If font was substituted, don't say chars
+ will be left blank (they won't).
+
+ * resident.c (getdefaults): For R case, use line as a string,
+ changing whitespaces to colons, instead of doing numbers here.
+
+Mon Nov 13 17:22:20 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c: Set kpathsea debugging bits even if -d is not first.
+
+Sat Nov 11 16:01:24 1995 Karl Berry <karl@cs.umb.edu>
+
+ * texc.lpro: Add `Color LaserWriter 12/600 PS' to the list of
+ products that need the alternate rule definition.
+
+ * loadfont.c, dvips.c, virtualfont.c: Remove remaining MEM debugs
+ as too voluminous and not useful enough.
+ * debug.h (D_CONFIG): Reuse the D_MEM bit.
+ * resident.c (getdefaults): Output debugging info if requested.
+
+Sun Oct 22 16:57:56 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (squeeze): Use LIBS instead of LOADLIBES.
+
+Sun Sep 24 13:49:43 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (mymalloc): Test a local variable for debug output,
+ instead of DD_MEM.
+
+Fri Sep 22 13:43:38 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c: If invalid option given, say what it was, and don't try
+ to list all the valid ones.
+
+ * dvips.c (case o): make -o - output to stdout.
+
+Thu Sep 14 14:49:53 1995 Karl Berry <karl@cs.umb.edu>
+
+ * config.ps: The default paper size cannot use setpagedevice.
+ From te.
+
+Sat Sep 9 13:12:24 1995 Karl Berry <karl@cs.umb.edu>
+
+ * drawPS.c: Merge hyperdvi changes.
+ From: Dave Love <d.love@dl.ac.uk>.
+
+ * config.h: Define TPIC and EMTEX by default.
+ * Makefile.in (DEFS): Instead of in DEFS.
+
+Sat Sep 2 11:37:40 1995 Karl Berry <karl@cs.umb.edu>
+
+ * tex.lpro: Oops, missing if in the new code.
+
+ * epsf.tex: Don't do \new... if we've already been read.
+
+ * config.ps: Update from Yves.
+
+Wed Aug 23 11:55:59 1995 Karl Berry <karl@cs.umb.edu>
+
+ * config.h (headerpath): This is now kpse_ps_header_format, since
+ xdvi uses it, too.
+
+ * search.c (search): Try assigning to name and realnameoffile,
+ instead of copying.
+ * tfmload.c (name): Remove this static.
+ * loadfont.c (name): Declare as a pointer, instead of a fixed-size
+ array.
+
+Sat Aug 12 13:42:22 1995 Karl Berry <karl@cs.umb.edu>
+
+ * tex.lpro: Check for LaserWriter 16/600 as well as Display and
+ NeXT when setting RMat. From Tom R., reported by Rik Faith.
+
+Fri Aug 11 14:42:14 1995 Karl Berry <karl@cs.umb.edu>
+
+ * resident.c (N): If we're doing -E, don't disable them.
+
+Thu Aug 10 13:28:37 1995 Karl Berry <karl@cs.umb.edu>
+
+ * header.c, dvips.c (lastheadermem): Remove this global. It's no
+ longer used.
+ From: "Christopher J. Duncan" <cduncan@phys.psu.edu>
+
+ * dvips.texi: Many updates.
+
+Tue Aug 8 19:25:18 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (post-dist): Include a README in reencode, update
+ for new fontname organization, don't include adobe file or fonts.
+ (install-data): Don't install fonts.
+
+Mon Aug 7 17:46:43 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c: Rearrange help message.
+
+Mon May 29 15:56:43 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (install-data): Use $(srcdir)/{tex,fonts}; from zoo.
+ (But, we probably won't have inputs or fonts by release time anyway.)
+
+Mon Apr 17 10:02:30 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (squeeze, afm2tfm, $(program)): Use link_command.
+
+Mon Mar 20 11:07:32 1995 Karl Berry <karl@cs.umb.edu>
+
+ * output.c: Print the > after reading the file, not before.
+
+Fri Mar 3 14:49:16 1995 Karl Berry <karl@cs.umb.edu>
+
+ * afm2tfm.c (checksum): Use cyclic left shift, so we're not just
+ using the last four characters. From Piet.
+ (vname): New routine to better document the ligtable in the vpl.
+ (writevpl): If the base encoding is the same as the output
+ encoding, only output it once.
+ Also, don't output checksums; let vptovf and vftovp do that.
+ (addkern): New routine.
+ (checkligkern): If <>, make one character's kerning (Zcaron) be
+ the same as another's (Z).
+ (staticligkern): Define the default kerning equivalents.
+
+Fri Feb 24 14:03:02 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (main): Don't give `W' output if -q(uiet).
+
+ * config.ps (N): Don't define this by default.
+
+Fri Feb 10 15:39:50 1995 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c: Doc fix.
+
+ * Makefile.in (texc.lpro): Use $(srcdir)/tex.lpro. From Andreas.
+
+Sun Jan 8 12:13:48 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Version 5.58f.
+
+Sun Jan 1 14:16:52 1995 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (DEFS): Include -DEMTEX by default. Suggested by Joachim.
+
+Sat Dec 31 17:33:14 1994 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in: Don't include tmptk.make any more.
+ (install-exec): Don't depend on install-MakeTeXPK, either.
+
+Mon Dec 26 07:58:37 1994 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (main): Don't set mfmode to / here, do it in kpse_init_prog.
+
+Sat Dec 24 15:20:50 1994 Karl Berry <karl@cs.umb.edu>
+
+ * emspecial.c (TRUE, FALSE) [TRUE]: Make definitions conditional.
+ From Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+
+Wed Dec 14 15:16:53 1994 Karl Berry <karl@cs.umb.edu>
+
+ * Version 5.58e.
+
+Mon Dec 12 07:11:14 1994 Karl Berry <karl@cs.umb.edu>
+
+ * MakeTeXPK.in (pattern): Give right name in error message. From
+ nickc@cs.st-andrews.ac.uk.
+
+Mon Dec 5 15:32:48 1994 Karl Berry <karl@cs.umb.edu>
+
+ * MakeTeXPK.in: Use $SAVEPWD instead of $PWD, for bash's sake.
+ From bas@phys.uva.nl (Bas de Bakker).
+
+Sun Dec 4 16:34:59 1994 Karl Berry <karl@cs.umb.edu>
+
+ * dospecial.c (predospecial): Avoid scanning compressed files for
+ font comments. From Peter Whaite <peta@cim.mcgill.ca>.
+
+Sun Nov 27 11:39:42 1994 Karl Berry <karl@cs.umb.edu>
+
+ * output.c: Remove unmatched ( in output.c. From Philippe
+ Charnier <charnier@lirmm.fr>.
+
+ * Makefile.in (install-data): Test for nonexistence of config.ps
+ and psfonts.map before grepping in them, to avoid spurious error
+ or unnecessary redirection.
+
+ * config.h (MFMODE): Don't bother with this.
+ * dvips.c (main): If mfmode is not set, set it to /, not a
+ compile-time default.
+
+Fri Nov 25 11:05:58 1994 Karl Berry <karl@cs.umb.edu>
+
+ * resident.c (getdefaults): Don't set oname in case 'o' if the
+ cmdline already did.
+ * dvips.c (oname_option): New global.
+ (main): Set if.
+
+ * dvips.c, resident.c: Make config.$PRINTER mode value override
+ config.ps. From heiko@lotte.sax.de and Michael
+ C. Grant <mcgrant@rascals.stanford.edu> (independently).
+
+ * MakeTeXPK.in: Restore the umask 0. Requested by
+ Yves.Arrouye@imag.fr and others.
+
+ * texc.script: Don't pass single - arg to ed; Linux loses. From
+ heiko@lotte.sax.de (Heiko Schlittermann).
+
+Tue Nov 15 16:20:48 1994 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (targets.make): This is split up now.
+
+Sun Nov 6 16:10:33 1994 Karl Berry <karl@cs.umb.edu>
+
+ * configure.in: Run autoupdate.
+
+Sun Oct 30 16:17:22 1994 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (post-dist): Remove texc.lpro. From
+ interran@uluru.Stanford.EDU.
+
+Tue Oct 25 17:47:48 1994 Karl Berry <karl@cs.umb.edu>
+
+ * Version 5.58c.
+
+Sun Oct 23 17:41:24 1994 Karl Berry <karl@cs.umb.edu>
+
+ * config.h (MFMODE) [!MFMODE]: Define to be "cx".
+ * dvips.c (mfmode): Initalize to MFMODE, new option -mode to set it.
+ * resident.c (getdefaults): For case M, only get the new mode if
+ it wasn't specified on the command line.
+
+Tue Oct 18 07:15:42 1994 Karl Berry <karl@cs.umb.edu>
+
+ * MakeTeXPK.in: Reformat the MakeTeXPK.site line so Autoconf will
+ substitute for both occurrences. (Actually, I think was my bug in
+ make/targets.make for not doing global sed substitutions.)
+
+Sun Oct 16 20:42:47 1994 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.texi: Distinguish somewhat more clearly between dvips and
+ Dvipsk.
+
+ * dospecial.c (dospecial): In " case, there was never supposed to
+ *be* a closing quote in the \special, so go back to the original.
+
+Fri Oct 14 10:32:38 1994 Karl Berry <karl@cs.umb.edu>
+
+ * Version 5.58b.
+
+Tue Oct 11 15:28:44 1994 Karl Berry <karl@cs.umb.edu>
+
+ * Makefile.in (install-exec): mkdirchain $(fontdir), for the sake
+ of MakeTeXPK.
+
+ * dospecial.c (dospecial): In "..." case, don't send closing quote.
+
+Sun Oct 9 16:57:25 1994 Karl Berry <karl@cs.umb.edu>
+
+ * MakeTeXPK.in: Source $psheaderdir/MakeTeXPK.site if it exists.
+ Also, add pk/ into the default destination path if we have map files.
+
+Thu Oct 6 14:36:41 1994 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c: Don't call help () twice for -?, and support --help and
+ --version.
+
+Sun Oct 2 16:42:25 1994 Karl Berry <karl@cs.umb.edu>
+
+ * resident.c (SET_CLIENT_PATH): New macro; strdup path values from
+ the config file.
+ (getdefaults): Call it.
+
+ * psfonts.map: Add more obliques for the standard fonts. From
+ te@informatik.uni-hannover.de.
+
+ * search.c (secure) [SECURE]: Put this back. From
+ hank@automat.uni-essen.de.
+
+Sat Oct 1 20:25:42 1994 Karl Berry <karl@cs.umb.edu>
+
+ * MakeTeXPK.in: Make egrep pattern search for the base font, not
+ just $NAME.
+
+Sat Sep 24 16:53:36 1994 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c (o and f cases): Do not set noenv. This makes dvips
+ always read the config files.
+
+Thu Sep 22 15:35:22 1994 Karl Berry <karl@cs.umb.edu>
+
+ * dvips.c: Remove `got a new papersize' messages.
+ * resident.c (getpsinfo): Allow multiple spec's a la download's.
+
+Mon Sep 19 11:55:13 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (post-dist): Just link to the fontname dvips
+ directory, since it has all the encoding files.
+
+Mon Sep 12 11:04:46 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.58a.
+
+ * dospecial.c: Remove my warning stuff; Tom did it his way.
+
+Sun Sep 11 14:49:31 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Update for dvips 558.
+
+ * Makefile.in (psconfigfile): Remove this variable, and just use
+ config.ps; we would never install anything else anyway.
+ (uninstall-data): Install psfonts.map and config.ps if they didn't
+ exist.
+
+Sat Sep 10 13:45:28 1994 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in (ps_to_pk case): Only parse psfonts.map if we are ps2pk.
+
+ * dvips.texi: Fix overfull boxes.
+
+ * Makefile.in (post-dist-*): Include .aux/.cps in distribution.
+
+Wed Sep 7 12:04:36 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.55b.
+
+ * afm2tfm.c (assignchars): Forget the outenname stuff; I just
+ noticed -u (pedantic).
+
+Sun Sep 4 07:19:05 1994 Karl Berry (karl@cs.umb.edu)
+
+ * loadfont.c: Include c-pathmx.h.
+
+Sat Sep 3 13:03:55 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install-data): Install the .enc files.
+ (uninstall-data): And uninstall them.
+
+Fri Sep 2 11:55:34 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (default): New target.
+ (makeargs): No need for this.
+
+ * psfonts.map: Include entries for *0, to accomodate the !@#$% latex2e.
+
+Tue Aug 30 14:21:42 1994 Karl Berry (karl@cs.umb.edu)
+
+ * dospecial.c (dospecial, GetKeyVal): Add case for warning.
+
+ * dvips.texi (Special Font Effects): Mention outlined fonts.
+
+ * bbox.c (floor): Do not declare this.
+
+ * Makefile.in (distclean): Don't need this.
+
+Mon Aug 29 16:53:48 1994 Karl Berry (karl@cs.umb.edu)
+
+ * configure.in (AC_OUTPUT): No more fonts/Makefile.
+ * Makefile.in (install-data): Use CP_R.
+
+Thu Aug 25 14:19:18 1994 Karl Berry (karl@cs.umb.edu)
+
+ * config.h (D_SEARCH): New debug bit.
+ * dvips.c (dvips): Set it.
+ * dvips.texi: Document it.
+
+Tue Aug 23 14:21:06 1994 Karl Berry (karl@cs.umb.edu)
+
+ * afm2tfm.c (assignchars): Don't add additional characters if
+ an explicit output encoding was specified.
+
+ * MakeTeXPK.in: Remove ;landscape hacks.
+
+Sun Aug 21 10:58:11 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (mtp_destroot): Toss this.
+ (MakeTeXPK): Substitute fontdir instead.
+
+Sat Aug 20 16:13:28 1994 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in (DESTDIR): Deal with ;landscape in the mode.
+
+Fri Aug 19 13:42:22 1994 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Consistently use mf instead of $mf.
+ (MODE): If `default', guess, so users can specify a destdir with
+ no mode.
+
+Tue Aug 16 09:28:35 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (sauterdir): Change to .../src.
+ (MakeTeXPK): Substitute for it.
+
+ * MakeTeXPK.in: Don't echo the args; let kpathsea do it.
+
+Sat Aug 13 17:14:54 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in: Use $@ where possible.
+
+Fri Aug 12 10:54:19 1994 Karl Berry (karl@cs.umb.edu)
+
+ * dopage.c (floor): Do not declare.
+
+Tue Aug 9 13:53:12 1994 Karl Berry (karl@cs.umb.edu)
+
+ * dvips.c (-D): Set mfmode to the empty string.
+
+ * MakeTeXPK.in: Don't bother trying at +-1 now.
+ * fontdef.c (newfontdesc): kpse_magstep_fix the dpi calculation.
+
+Sun Aug 7 19:34:57 1994 Karl Berry (karl@cs.umb.edu)
+
+ * loadfont.c (pkopen): Free the filename if necessary.
+
+Tue Aug 2 15:02:59 1994 Karl Berry (karl@cs.umb.edu)
+
+ * config.h, dvips.c (D_DB_BUILD): Replace with D_HASH.
+
+Sun Jul 31 14:49:22 1994 Karl Berry (karl@cs.umb.edu)
+
+ * special.lpro (startTexFig): Set magscale to true. From Tom.
+
+ * MakeTeXPK.in (pointsize): Improve sed expression to extract
+ this. From jsacco@ssl.com.
+
+Fri Jul 29 12:01:50 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in: Use ac_include.
+ (install-{exec,data}): Different strategy for ensuring always-true
+ exit status.
+
+Thu Jul 28 15:38:04 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install-exec): Check for MakeTeXPK in $(scriptdir),
+ not $(bindir). From john@minster.york.ac.uk.
+
+Fri Jul 15 11:46:20 1994 Karl Berry (karl@cs.umb.edu)
+
+ * virtualfont.c (vfopen): Don't append .vf here, kpathsea does it.
+ * tfmload.c (tfmopen): Likewise.
+
+ * dvips.c (main): Call kpse_set_progname first.
+
+Tue Jul 5 14:01:33 1994 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in (DVIPSHEADERS): Set this, and export it for
+ gsftopk.
+
+Fri Jun 24 17:09:19 1994 Karl Berry (karl@cs.umb.edu)
+
+ * config.h (D_*): Add defns to pass to kpathsea.
+ (*path): Define as the kpse enum constants.
+ * most files: Remove extern char * decls of path variables.
+ * search.c: Pass in the format, not the path.
+ * resident.c (checkenv): #if 0 out.
+
+Thu Jun 23 16:56:50 1994 Karl Berry (karl@cs.umb.edu)
+
+ * loadfont.c (pkopen): Don't set the ..._ENABLED bit; kpathsea
+ does that now.
+ * paths.h (*_ENVS): Move these to kpathsea.
+ * dvips.c (tfmpath, pkpath, etc.): Delete these; they're in the
+ kpathsea structure now.
+
+Tue Jun 14 12:41:48 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (depend_encies): Remove.
+
+Mon Jun 13 10:09:09 1994 Karl Berry (karl@cs.umb.edu)
+
+ * loadfont.c (pkopen): Don't call kpse_set_maketex_mag here,
+ let kpathsea do it. Also don't set MAKETEX_DPI, it's not used.
+
+Sat May 28 19:08:50 1994 Karl Berry (karl@cs.umb.edu)
+
+ * PSfonts: Rename to fonts, for consistency with dviljk.
+ * Makefile.in: Change the cd's.
+
+Thu May 26 16:29:54 1994 Karl Berry (karl@cs.umb.edu)
+
+ * loadfont.c (name): Make size be PATH_MAX.
+ * search.c (search, pksearch): Set name.
+ * virtualfont.c (name): Replace definition with extern.
+
+ * virtualfont.c (virtualfont) [DEBUG]: Print memory stats if
+ D_MEM, not D_FONTS.
+ * loadfont.c (loadfont): Likewise.
+
+ * resident.c (getpsinfo): Ignore whitespace after a <.
+
+Tue May 24 13:14:08 1994 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv): Always set MAKETEX_BASE_DPI, for the sake
+ of missfont.log, even if dontmakefont.
+
+Thu Apr 28 12:14:50 1994 Karl Berry (karl@cs.umb.edu)
+
+ * output.c (cleanprinter): Call perror if file writing failed.
+
+Thu Apr 21 13:24:58 1994 Karl Berry (karl@ra.cs.umb.edu)
+
+ * config.h (SHORTINT): Define if SIZEOF_INT < 4.
+
+Sun Apr 17 16:13:16 1994 Karl Berry (karl@ra.cs.umb.edu)
+
+ * debug.h (fopen): Do not define this; we'll use kpathsea's fopen
+ debugging support now.
+ * dvips.c (main): 'd' flag calls KPSE_DEBUG_SET (KPSE_DEBUG_FOPEN).
+
+ * Makefile.in (texc.lpro): Use $(SHELL) to run texc.script.
+ (top_srcdir): Define this for configure to substitute.
+
+Tue Apr 5 11:51:32 1994 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in (sauterdir): Substitute for this value.
+ Various other Sauter fixes from barthel@uaimzm.Mathematik.Uni-Mainz.DE.
+ * Makefile.in (sauterdir): Make it a variable.
+
+Sun Apr 3 10:21:41 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.55a.
+
+Fri Apr 1 11:52:42 1994 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv): Allow envvars {DVIPS,TEX}SIZES to
+ override the R config file line.
+
+ * Update for dvips 5.55.
+
+Thu Mar 24 10:43:03 1994 Karl Berry (karl@cs.umb.edu)
+
+ * search.c (search): must_exist is false for VF files.
+
+Tue Mar 15 07:21:04 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (distclean): Remove PSfonts/Makefile. From John I.
+
+Fri Mar 11 14:51:04 1994 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Echo `gsftopk failed' to stderr, not stdout.
+
+Thu Mar 3 08:51:50 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.528a.
+
+Thu Feb 24 16:19:55 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (installargs): Pass fontdir and ps_fontdir.
+
+Tue Feb 22 11:41:13 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (c-auto.h.in): Include SMART_PUTENV.
+
+Mon Feb 21 16:47:21 1994 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Default to appending the mode, and allow an extra
+ arg to specify the destination directory. From neal.
+
+ * dvips.c (newoutname): | means pipe.
+
+ * afm2tfm.c: Remove declarations of exit.
+
+ * loadfont.c (pkopen): Cast args to kpse_bitmap_tolerance for the
+ sake of non-ANSI compilers.
+
+Sun Feb 13 11:32:48 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Update for dvips 5.528.
+
+Wed Feb 2 09:06:20 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.526b.
+
+ * loadfont.c (pkopen): Don't complain if the two dpi's can
+ tolerate each other.
+
+ * dvips.c (helparr): Mention -pp.
+
+ * dvips.1: Change char92 to \. From karney@theory.pppl.gov.
+
+Tue Feb 1 11:31:30 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install-data): Add || true to the install_fonts, so
+ Ultrix make doesn't quit prematurely.
+
+ * Makefile.in (c-auto.h.in): New target.
+
+Sat Jan 22 14:25:02 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.526a.
+
+ * loadfont.c (pkopen): Set dontmakefont=1 at the first failure.
+
+Thu Jan 20 14:17:04 1994 Karl Berry (karl@cs.umb.edu)
+
+ * search.c (search) [SECURE]: Don't allow reading of an absolute_p
+ file. From maj@cl.cam.ac.uk.
+
+Sun Jan 16 14:55:08 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (mtp_destdir): Change to $(fontdir)/pk.
+
+Fri Jan 14 15:27:17 1994 Karl Berry (karl@cs.umb.edu)
+
+ * Update for dvips 5.523.
+
+ * MakeTeXPK (MODE): Remove guess for lview monitor, that no one in
+ the world uses but me.
+
+Sat Dec 18 12:49:10 1993 Karl Berry (karl@cs.umb.edu)
+
+ * dvips.texi (Config File Options): Enumerate the envvars that
+ override the P path. (From worsch@ira.uka.de.)
+
+Thu Dec 16 12:32:21 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Say where gsftopk can be ftp'd.
+
+Fri Dec 10 15:29:34 1993 Karl Berry (karl@cs.umb.edu)
+
+ * finclude.c (scanvm): Remove declaration of atol, as it causes
+ trouble with glibc. From kayvan@satyr.sylvan.com.
+
+Thu Dec 9 09:44:34 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Add gsftopk stuff, guess ljfour for 600 dpi, allow
+ user envvars to override, other cleanups. gsftopk stuff from
+ R.Kooijman@et.tudelft.nl.
+
+Tue Dec 7 14:01:30 1993 Karl Berry (karl@cs.umb.edu)
+
+ * loadfont.c (pkopen): Call kpse_set_maketex_mag instead of
+ find_mag_str.
+ * Makefile.in (objects): Remove makefont.o.
+
+ * dvips.texi (Installation): Mention that MakeTeXPK's interface is
+ different in dvipsk.
+
+ * dvips.c (main): Make -v print the version number and exit.
+
+Sat Nov 27 14:55:28 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (INIT_PATH): Use the current value for the default,
+ also. Change calls.
+
+ * resident.c (getdefaults): Improve error message.
+ (getpath): Expand a default value here; change callers to pass
+ compile-time default, instead of previous value.
+
+Sun Nov 21 15:34:21 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv) [DEBUG]: Correct #endif placement. From
+ pnoma@wk.estec.esa.nl.
+
+Sun Nov 14 11:56:19 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (mtp_destdir): texfontdir has been renamed.
+
+Fri Nov 12 19:42:21 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Document the final echo in no uncertain terms.
+
+Thu Nov 11 10:58:41 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in (pointsize): Don't assume the fontname starts with `cm'.
+
+Sat Nov 6 07:15:17 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: test $d should have been test -d.
+
+Wed Nov 3 14:43:05 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.521a.
+
+Fri Oct 29 13:24:01 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (program_rm): Take out paths.h.
+
+Tue Oct 26 11:38:35 1993 Karl Berry (karl@cs.umb.edu)
+
+ * drawPS.c (arc): Consistently check for nonsquare aspect ratios.
+ From Ulf.Niemeyer@fernuni-hagen.de.
+
+Sun Oct 24 19:26:37 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv): Let TEXCONFIG override the config path,
+ as it's supposed to.
+
+Sat Oct 23 14:51:37 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Check for the GF file being at +1 or -1 of the dpi
+ we were asked for. Apparently the DC fonts are generated this way.
+
+Fri Oct 22 13:09:29 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv): Set kpse_override_path to pkpath, so a
+ config file value will be found.
+
+ * emspecial.c, dospecial.c (atoi): Do not declare here, as it
+ conflicts with the Linux system decl.
+
+ * dvips.texi (Install): Be more precise about when config.ps and
+ MakeTeXPK are overwritten. From gv@me.umn.edu.
+
+ * paths.h.in: Move paths to kpathsea/paths.h.in, and rename to paths.h.
+ * Makefile.in (paths.h): Remove this dependency.
+
+ * Makefile.in ($(kpathsea)): Depend on files in kpathsea_srcdir.
+ (install-exec): MakeTeXPK is not in srcdir anymore.
+ (install-data): The prologues aren't in srcdir. The info files
+ might be in either place.
+ From simon@lia.di.epfl.ch.
+
+Tue Oct 19 12:07:25 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MACHINES: New entries from simon.
+
+Sat Oct 9 07:06:26 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (MakeTeXPK): Make executable.
+
+ * Makefile.in (distclean): MakeTeXPK removed at mostlyclean now.
+
+Thu Oct 7 09:58:48 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Missing ", and don't assume sauterdir exists.
+
+Wed Oct 6 08:50:06 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.519b.
+
+Sat Oct 2 17:30:45 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install-*): Don't reassign PATH, just invoke
+ mkdirchain explicitly.
+
+ * Makefile.in (dvips_makeargs): Delete, since now unused.
+
+Fri Oct 1 07:09:29 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK.in: Don't try to put the MF command into a variable;
+ quoting rules are too confused.
+
+Wed Sep 29 15:21:49 1993 (karl@terminus.cs.umb.edu)
+
+ * Version 5.519a.
+
+Tue Sep 28 13:23:45 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (print_path): Don't compare char to NULL.
+
+ * resident.c (lastresortsizes): Declare as an unsigned array.
+
+ * loadfont.c (pkopen): ifdef out the dead code.
+
+Sat Sep 25 11:33:21 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (mtp_destdir): New variable.
+ (MakeTeXPK): New target.
+ * MakeTeXPK.in: New file.
+
+ * resident.c (getdefaults): Set envvar MAKETEX_MODE in M case.
+
+Fri Sep 24 11:47:55 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv): Initialize kpse_fallback_font.
+
+Thu Sep 23 17:53:48 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv): Check for DVIPSFONTS.
+ * dvips.texi (Environment variables): Document it.
+
+Sun Aug 29 11:45:52 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c: No leading spaces before #'s.
+
+ * Makefile.in (install-*): Use $(PATH) instead of $$PATH.
+
+ * config.h (DEBUG) [NO_DEBUG]: Define this.
+
+Fri Aug 27 10:27:34 1993 Karl Berry (karl@cs.umb.edu)
+
+ * paths.h.in (DVIPS_{HEADER,PICT}_ENVS): New defines.
+ * resident.c (getpath): Make a copy.
+ (getdefaults): Go back to calling getpath.
+ (checkenv): Change kpse_init_path calls to pass default.
+ * dvips.c (*path): Initialize to default paths.
+
+ * dvips.c (tfmpath, pkpath, vfpath, figpath, headerpath): All
+ strings now, not string *'s.
+ * tfmload.c (tfmpath): Likewise.
+
+Wed Aug 25 14:35:30 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Update for dvips 5.519.
+
+Sun Aug 22 19:13:42 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install-data): Install the fonts last.
+
+ * Makefile.in (install-*): mkdirchain is in the top level.
+
+Tue Aug 10 10:34:30 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in: Remove reference to -DFONTLIB.
+ (objects): Remove flib.o.
+
+Fri Aug 6 09:04:45 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c (checkenv): Look for DVIPSHEADERS.
+
+Thu Aug 5 09:03:31 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.518a.
+
+ * Makefile.in (default_config_path): Add ~.
+
+Wed Aug 4 13:50:36 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK: Announce that we're running.
+
+ * Makefile.in: Major surgery to conform to new scheme.
+
+Sat Jul 31 11:36:15 1993 Karl Berry (karl@cs.umb.edu)
+
+ * configure.in: Remove AC_PREFIX.
+
+Tue Jul 27 15:00:44 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Update for dvips 5.518.
+
+Sun Jul 25 10:43:45 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install*): Add $(srcdir) to PATH for mkdirchain, not .
+
+Wed Jul 21 19:46:22 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (configclean): New target.
+
+Sun Jul 11 16:20:41 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK: Output the filename we generate to stdout, if we succeed.
+
+Tue Jul 6 08:40:25 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK: Send all output to stderr.
+
+Mon Jul 5 09:32:30 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in: Various configuration changes from xdvik.
+
+ * paths.h.in (DEFAULT_{TFM,PK,VF}_PATH): Remove.
+
+Fri Jul 2 12:00:05 1993 Karl Berry (karl@cs.umb.edu)
+
+ * configure.in: sinclude common.ac.
+
+Tue May 25 10:09:02 1993 Karl Berry (karl@cs.umb.edu)
+
+ * configure.in (AC_HAVE_HEADERS): Test for `pwd.h'.
+
+Sat May 22 11:21:34 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (dist): Run gzip -9.
+
+Fri May 21 10:14:25 1993 Karl Berry (karl@cs.umb.edu)
+
+ * resident.c: Change #if DEBUG to #ifdef.
+
+Thu May 20 11:48:28 1993 Karl Berry (karl@cs.umb.edu)
+
+ * psfonts.map: Add URW fonts.
+
+Tue May 18 13:58:55 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install-*): mkdirchain on install dirs, and put
+ mkdirchain in the dist.
+
+Sun May 16 17:47:26 1993 Karl Berry (karl@cs.umb.edu)
+
+ * dvips.texi: Do paragraph indentation from command.
+ * Makefile.in (MAKEINFO_FLAGS): New variable.
+
+Mon May 10 07:13:29 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.516a.
+
+Sun May 9 10:35:58 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (extraclean): add *.i and *.s.
+
+Sat May 8 13:11:16 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (dist): Rewrite for kpathsea.
+ * <many>.c, config.h: Use <kpathsea/foo.h> instead of "foo.h".
+
+Tue May 4 14:56:57 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (info, dvi): New targets.
+
+Sat May 1 16:21:41 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Update for dvips 5.516, and kpathsea library.
+
+Fri Apr 23 16:46:29 1993 Karl Berry (karl@cs.umb.edu)
+
+ * configure.in (AC_CONST): Add this.
+
+Tue Apr 20 06:58:31 1993 Karl Berry (karl@cs.umb.edu)
+
+ * pathshare from web2c.
+
+Sun Apr 11 18:57:39 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.515b.
+
+Sat Apr 10 14:58:56 1993 Karl Berry (karl@cs.umb.edu)
+
+ * config.h (UNIX_ST_NLINK): Define unless on foreign OS.
+
+ * Makefile.in (uninstall*): New targets.
+
+ * Makefile.in (scriptdir): New variable.
+ (install): Install MakeTeXPK there.
+
+ * configure.in: Do AC_XENIR_DIR after AC_DIR_HEADER.
+
+Mon Mar 29 08:28:22 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.515a.
+
+ * Makefile.in (default_tfm_path): Put . first.
+
+Sun Mar 28 16:43:50 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Update for dvips 5.515.
+
+Mon Mar 22 06:12:25 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.12c.
+
+Sun Mar 14 14:51:03 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK (MFINPUTS): Append a colon to be sure and get the
+ system default path.
+
+Sat Mar 13 11:04:26 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (CPPFLAGS): Add @DEFS@, for -DHAVE_CONFIG_H.
+
+Mon Mar 8 06:27:11 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.12b.
+
+Mon Mar 1 06:26:28 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.512a.
+
+Sun Feb 28 12:03:16 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (dist): Get lucida.sty.
+
+Thu Feb 25 14:02:02 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK (MFINPUTS): Include the old cwd before changing to
+ TEMPDIR.
+
+Tue Feb 23 16:51:38 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (dist): Copy info files to my local info directory.
+
+Mon Feb 22 06:19:46 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.499c.
+
+Wed Feb 17 06:45:29 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (INSTALL): Use tr instead of grep to remove the
+ Info control characters.
+
+Sun Feb 14 17:11:10 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install): Split into install-exec and install-data.
+
+Fri Feb 12 08:34:45 1993 Karl Berry (karl@cs.umb.edu)
+
+ * dvips.1: Don't refer to dvips.tex.
+
+Tue Feb 9 20:27:50 1993 Karl Berry (karl@cs.umb.edu)
+
+ * MakeTeXPK: Create DESTDIR if it doesn't exist.
+
+Sun Feb 7 10:01:25 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.499b.
+
+ * Makefile.in (install): dir is a shell variable, not a make
+ variable; fix logic for original MakeTeXPK, etc.
+
+Tue Feb 2 11:41:10 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install): Don't install over a modified MakeTeXPK,
+ config.ps, or psfonts.map.
+
+ * Version 5.499a.
+
+Sun Jan 31 07:08:44 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install): Allow install_subdirs to be empty.
+
+Fri Jan 29 17:38:04 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (CPPFLAGS): Don't bother with `-I.'.
+
+Wed Jan 20 07:53:36 1993 Karl Berry (karl@cs.umb.edu)
+
+ * config.h (FATAL*): Now in lib.h.
+
+ * Version 5.497c.
+
+Mon Jan 18 08:19:57 1993 Karl Berry (karl@cs.umb.edu)
+
+ * PSfonts: Merge PStfms and PSvfs.
+
+Sat Jan 9 15:21:30 1993 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (configure, config.status): cd $(srcdir) first.
+
+Sun Jan 3 19:43:20 1993 Karl Berry (karl@cs.umb.edu)
+
+ * config.h: Move some includes to c-std.h.
+
+Fri Jan 1 13:57:24 1993 Karl Berry (karl@cs.umb.edu)
+
+ * configure.in, c-auto.h.in, c-memstr.h, dirio.h: Changes for
+ new Autoconf.
+
+Wed Dec 23 06:57:20 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.497b.
+
+Thu Dec 17 07:13:35 1992 Karl Berry (karl@cs.umb.edu)
+
+ * dvips.c (main) [DEBUG]: Missing part of fprintf.
+
+ * resident.c (checkenv) [DEBUG]: Had figpath instead of pkpath.
+
+Mon Dec 14 07:27:39 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.497a.
+
+Fri Dec 11 15:23:58 1992 Karl Berry (karl@cs.umb.edu)
+
+ * afm2tfm.c, dospecial.c, emspecial.c, finclude.c: Change ctype
+ references to use uppercase macros.
+
+Thu Dec 10 10:36:13 1992 Karl Berry (karl@cs.umb.edu)
+
+ * GNUmakefile.in (GNUmakefile): Add $(srcdir) to dependency, and
+ use $(SHELL) instead of sh.
+ (config.status): Use $(SHELL).
+
+Tue Dec 8 07:19:52 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (.texi.info): Add `-o $@'.
+
+Sat Dec 5 18:50:09 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Update for version 5.497.
+
+Sun Nov 29 17:25:52 1992 Karl Berry (karl@cs.umb.edu)
+
+ * finclude.c (atof) [!STDC_HEADERS]: Make declaration conditional.
+
+Sun Nov 22 11:11:24 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install): Test for non-null install_subdirs.
+
+Sat Oct 31 07:56:41 1992 Karl Berry (karl@cs.umb.edu)
+
+ * encodings/texm{sym,ital,ext}.enc: New files.
+
+ * dvips.texi: Remove the `eg$ ' from examples.
+
+Wed Oct 28 07:43:50 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.495b.
+
+Tue Oct 27 06:07:20 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (.lpro.pro): Depend on squeeze; also, use a temp
+ file to avoid creating empty files.
+
+ * Makefile.in (checkenv) [DEBUG]: Conditionalize use of D_PATH.
+
+ * Makefile.in (.texi.info): New suffix rule, to avoid use of $< in
+ normal rules.
+
+ * Makefile.in (distclean): Remove */Makefile.
+
+Sat Oct 24 11:48:14 1992 Karl Berry (karl@ds3.cs.umb.edu)
+
+ * Makefile.in (install): Quote $(install_subdirs), in case it's
+ been set to empty.
+
+ * Makefile.in (texfontdir): New variable.
+ (install): mkdir it and the ps subdirectories.
+
+Sat Oct 17 16:39:02 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (install_subdirs, subdirs): New variables.
+ (install): make install in $(install_subdirs).
+ (dist): Dist $(subdirs).
+ (installargs): Make arguments to pass to subdirs.
+ (ps{tfm,vf}dir): New target directories.
+ * configure.in (AC_OUTPUT): Create Makefiles in the install subdirs.
+
+ * Makefile.in (paths.h): Don't depend on Makefile and Makefile.in
+ -- they change too often for other reasons than paths.
+
+ * Makefile.in (check): New target.
+
+ * Makefile.in (objects): Include `emspecial.o'.
+
+ * Update for dvips 5.495.
+
+Thu Oct 15 08:34:33 1992 Karl Berry (karl@cs.umb.edu)
+
+ * configure: Ran Autoconf 1.2.
+
+Sat Oct 10 12:20:02 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (dist): Don't copy any subdirs.
+ * README: Document what we've changed and what we haven't.
+
+Wed Sep 23 07:51:13 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Version 5.493c.
+
+Sun Sep 20 12:52:24 1992 Karl Berry (karl@cs.umb.edu)
+
+ * Makefile.in (config.status): use sh to run configure --no-create.
+
+ * Makefile.in (realclean): OK, don't remove configure.
+
+Thu Sep 17 07:40:27 1992 Karl Berry (karl@hayley)
+
+ * Version 5.493b.
+
+Mon Sep 14 17:59:53 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (config.status): new target.
+ (Makefile): depend on config.status.
+
+Thu Sep 10 08:57:33 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (dist): include COPYING*.
+
+ * Makefile.in (realclean): remove configure.
+
+ * MakeTeXPK: run gftopk ./<filename>, in case an old version of
+ gftopk is installed.
+
+Wed Sep 9 06:26:30 1992 Karl Berry (karl@hayley)
+
+ * Version 5.493a.
+
+Tue Sep 8 16:51:25 1992 Karl Berry (karl@hayley)
+
+ * c-auto.h.in (_MINIX, _{ALL,POSIX,POSIX_1}_SOURCE): add #undef's
+ for configure to define.
+
+ * configure.in: test for more Unix variants.
+
+Fri Sep 4 17:27:52 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (extraclean): new target.
+
+ * Update to version 5.493.
+
+Thu Aug 27 08:57:06 1992 Karl Berry (karl@hayley)
+
+ * configure: regenerated from Autoconf 1.1.
+
+Tue Aug 11 07:00:15 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490s.
+
+ * Makefile.in (dist): copy MakeTeXPK.
+
+Fri Jul 31 19:14:15 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (dist): include our aclocal.m4.
+
+Wed Jul 29 08:52:01 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490r (ran pathshare).
+
+Fri Jul 24 06:49:56 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490q.
+
+Wed Jul 22 09:10:03 1992 Karl Berry (karl@hayley)
+
+ * configure.in: update for Autoconf 1.0.
+
+Tue Jul 21 08:52:21 1992 Karl Berry (karl@hayley)
+
+ * resident.c (print_path): new function.
+ (checkenv): call it, if we are debugging paths.
+
+ * resident.c (checkenv): don't reset envvars if they are already set.
+ (getdefaults): pass the user envvars when setting values from the
+ config files, so they will override.
+
+Thu Jul 16 06:56:31 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490p.
+
+Sun Jul 12 06:20:11 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (dist): forgot to include the config files.
+
+Sat Jul 11 11:52:48 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (dist): copy texinfo.tex and `adobe' from their
+ original directory, instead of using the versions here.
+
+Fri Jul 10 06:52:51 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490o.
+
+Thu Jul 2 15:25:00 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (CPPFLAGS): new variable.
+ (.c.o): use it.
+ (CFLAGS): define as -g.
+ (cdebug): remove.
+ (LDFLAGS): use CFLAGS instead of cdebug.
+
+ * Run Autoconf 0.119.
+
+Wed Jul 1 07:48:33 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490n.
+
+Sat Jun 27 11:03:09 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (paths.h): depend on Makefile.in and Makefile.
+
+Thu Jun 25 09:57:54 1992 Karl Berry (karl@hayley)
+
+ * All these $(srcdir) changes from or inspired by zoo@cygnus.com.
+
+ * Makefile.in (paths.h): use $(srcdir) for paths.h.in.
+
+Wed Jun 24 11:57:21 1992 Karl Berry (karl@hayley)
+
+ * structures.h (BANNER): name this program kdvips.
+ * Makefile.in (distdir): ditto for the directory.
+
+ * Makefile.in (CCFLAGS): new variable to replace $(CFLAGS).
+ (.c.o): new implicit rule to use it.
+ (.lpro.pro): use $< instead of $*.lpro, since I
+ guess it's marginally more portable.
+ (texc.lpro, install): use $(srcdir).
+ (Makefile): new target.
+
+ * Makefile (install): mkdir more of the top level directories.
+
+ * Makefile (dist): distribute the config* files (except
+ config.status).
+
+ * README: say that %-specifiers don't work.
+
+Tue Jun 23 08:50:06 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490m.
+
+Fri Jun 19 09:26:14 1992 Karl Berry (karl@hayley)
+
+ * psfonts.map: update for new (old by now, actually) change in the
+ way ExtendFont and SlantFont work.
+
+Tue Jun 16 06:13:31 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490l.
+
+Sat Jun 13 07:13:07 1992 Karl Berry (karl@hayley)
+
+ * loadfont.c (pkopen): fix remaining sprintf-with-too-many-%'s.
+
+Thu Jun 11 08:45:25 1992 Karl Berry (karl@hayley)
+
+ * Makefile.in (.NOEXPORT): new target, since Autoconf doesn't add
+ it automatically any more.
+
+Wed Jun 10 06:34:24 1992 Karl Berry (karl@hayley)
+
+ * Version 5.490k.
+
+Fri Jun 5 07:58:45 1992 Karl Berry (karl@hayley)
+
+ * squeeze.c, afm2tfm.c (main): `return 0' instead of `exit (0)'.
+ (From Paul Eggert) Also declare as `int'.
+
+ * Makefile (install): `black.tex' is now `blackdvi.tex', etc.
+
+Thu Jun 4 08:25:51 1992 Karl Berry (karl@hayley)
+
+ * main.c (main): `return 0' instead of `exit (0)'. (From Paul Eggert)
+
+ * Update for dvips 5.490.
+
+ * configure.in (AC_HEADER_FILE): rename to AC_CONFIG_HEADER, for
+ Autoconf 0.115.
+
+Wed Jun 3 08:19:53 1992 Karl Berry (karl@hayley)
+
+ * Version 5.487l.
+
+Fri May 29 11:28:16 1992 Karl Berry (karl@hayley)
+
+ * Below changes from Paul Eggert.
+
+ * dvips.c (main): declare as returning an int.
+
+ * dvips.c (exit): do not declare.
+
+ * resident.c (pagecopies) [DEBUG]: declare unconditionally.
+
+ * resident.c (exit): do not declare.
+
+ * unpack.c (flip): don't use a variable `howmany', since Sun has a
+ macro called that.
+
+ * config.h (FATAL): don't assume an ANSI cpp.
diff --git a/Build/source/texk/dvipsk/INSTALL b/Build/source/texk/dvipsk/INSTALL
new file mode 100644
index 00000000000..27779ae5371
--- /dev/null
+++ b/Build/source/texk/dvipsk/INSTALL
@@ -0,0 +1,358 @@
+Contents:
+
+Installation
+ `config.ps' installation
+ PostScript font installation
+ Ghostscript installation
+ Diagnosing problems
+ Debug options
+ No output at all
+ Output too small or inverted
+ Error messages from printer
+ Long documents fail to print
+ Including graphics fails
+
+
+Installation
+************
+
+ (A copy of this chapter is in the distribution file `dvipsk/INSTALL'.)
+
+ Installing Dvips is mostly the same as installing any Kpathsea-using
+program. Therefore, for the basic steps involved, *note Installation:
+(kpathsea)Installation.. (A copy is in the file `kpathsea/INSTALL'.)
+
+ For solutions to common installation problems and information on how
+to report a bug, see the file `kpathsea/BUGS' (*note Bugs:
+(kpathsea)Bugs.). For solutions to Dvips-specific problems, *note
+Debug options::.. Also see the Dvips home page at
+`http://www.radicaleye.com/dvips'.
+
+ Dvips does require some additional installation, detailed in the
+sections below. Also, to configure color devices, *note Color device
+configuration::..
+
+`config.ps' installation
+========================
+
+ Dvips has its own configuration files: a file `config.ps' for
+sitewide defaults, and a file `config.PRINTER' for each printer (output
+device). Since these are site-specific, `make install' does not create
+them; you must create them yourself.
+
+ (These Dvips configuration files are independent of the Kpathsea
+onfiguration file `texmf.cnf' (*note Config files: (kpathsea)Config
+files.).
+
+ Dvips configuration files contents and searching are described fully
+in *Note Config files::. The simplest way to create a new
+configuration file is to copy and modify the file
+`dvipsk/contrib/config.proto', seasoning with options to your taste
+from *Note Config files::. Here is `config.proto' for your reading
+pleasure:
+ % Prototype Dvips configuration file.
+
+ % How to print, maybe with lp instead lpr, etc.
+ o |lpr
+
+ % Default resolution of this device, in dots per inch.
+ D 600
+
+ % Metafont mode. (This is completely different from the -M command-line
+ % option, which controls whether mktexpk is invoked.) Get
+ % `ftp://ftp.tug.org/tex/modes.mf' for a list of mode names. This mode
+ % and the D number above must agree, or mktexpk will get confused.
+ M ljfour
+
+ % Memory available. Download the three-line PostScript file:
+ % %! Hey, we're PostScript
+ % /Times-Roman findfont 30 scalefont setfont 144 432 moveto
+ % vmstatus exch sub 40 string cvs show pop showpage
+ % to determine this number. (It will be the only thing printed.)
+ m 3500000
+
+ % Correct printer offset. You can use testpage.tex from the LaTeX
+ % distribution to find these numbers. Print testpage.dvi more than once.
+ O 0pt,0pt
+
+ % Partially download Type 1 fonts by default. Only reason not to do
+ % this is if you encounter bugs. (Please report them to
+ % <tex-k@mail.tug.org> if you do.)
+ j
+
+ % Also look for fonts at these resolutions.
+ R 300 600
+
+ % With a high resolution and a RISC cpu, better to compress the bitmaps.
+ Z
+
+ % Uncomment these if you have and want to use PostScript versions of the
+ % fonts.
+ %p +cmfonts.map
+ %p +lafonts.map
+ %p +cyrfonts.map
+ %p +eufonts.map
+
+ % You will also want definitions for alternative paper sizes -- A4,
+ % legal, and such. Examples in `contrib/papersize.level2' and
+ % `contrib/papersize.simple'.
+
+PostScript font installation
+============================
+
+ To use PostScript fonts with TeX and Dvips, you need both metric
+files (`.tfm' and `.vf') and the outlines (`.pfa' or `.pfb'). *Note
+Font concepts::.
+
+ To support the basic PostScript font set, the recommended (and
+simplest) approach is to retrieve
+`ftp://ftp.tug.org/tex/psfonts.tar.gz' and unpack it in your
+`$(fontdir)' directory (`/usr/local/share/texmf/fonts' by default).
+This archive contains metrics, outlines, and bitmaps (for previewing)
+for the 35 de facto standard fonts donated by URW and the additional
+high-quality freely available PostScript fonts donated by Adobe,
+Bitstream, and URW, including geometrically-created variants such as
+oblique and small caps.
+
+ `CTAN:/fonts/psfonts' contains support for many additional fonts for
+which you must buy outlines (Adobe, Bigelow & Holmes, Monotype,
+Softkey, Y&Y). `psfonts.tar.gz' is a small extract from this
+directory. (For CTAN info, *note unixtex.ftp: (kpathsea)unixtex.ftp.;
+a copy is in the top-level file `INSTALL'.)
+
+ If you have additional PostScript fonts, you can make them available
+to Dvips by (1) giving them with appropriate filenames; and (2) running
+Afm2tfm (*note Making a font available::.) to make TFM and VF metrics
+for TeX and Dvips to use. Also add them to `psfonts.map' if necessary
+(*note psfonts.map::.); it contains everything contained in
+`psfonts.tar.gz' and most fonts that come with Unix systems.
+
+ Following are locations for vendor-supplied fonts. Please mail
+<tex-k@mail.tug.org> if you find fonts elsewhere on your system.
+
+DEC Ultrix
+ /usr/lib/DPS/outline/decwin
+
+DEC Digital Unix
+ /usr/lib/X11/fonts/Type1Adobe
+
+HP HP-UX 9, 10
+ /usr/lib/X11/fonts/type1.st/typefaces
+
+IBM AIX
+ /usr/lpp/DPS/fonts/outlines
+ /usr/lpp/X11/lib/X11/fonts/Type1
+ /usr/lpp/X11/lib/X11/fonts/Type1/DPS
+
+NeXT
+ /NextLibrary/Fonts/outline
+
+SGI IRIX
+ /usr/lib/DPS/outline/base /usr/lib/X11/fonts/Type1
+
+Sun SunOS 4.x
+ (NeWSprint only)
+ newsprint_2.5/SUNWsteNP/reloc/$BASEDIR/
+ NeWSprint/small_openwin/lib/fonts
+ /usr/openwin/lib/X11/fonts/Type1/outline
+
+Sun Solaris 2
+ /usr/openwin/lib/X11/fonts/Type1/outline
+
+VMS
+ SYS$COMMON:[SYSFONT.XDPS.OUTLINE]
+
+The NeXT system supplies more fonts than any others, but there's a lot
+of overlap.
+
+ Finally, if you have an Hewlett-Packard printer, you should be able to
+get Type 1 font files for the standard 35 fonts from HP, if the freely
+available URW Type 1's do not satisfy for whatever reason. The phone
+number for HP Printer Drivers is (in the United States) 303-339-7009.
+The driver set to ask for is Adobe Type Manager 2.51, and the disk set
+number is `MP210en3'. Mentioning anything other than Microsoft Windows
+when you ask for the driver set will likely lead to great confusion on
+the other end.
+
+Ghostscript installation
+========================
+
+ Ghostscript is a PostScript interpreter freely available to end-users,
+written by Peter Deutsch. It can read the PostScript produced by Dvips
+and render it on your monitor, or for another device (e.g., an Epson
+printer) that does not support PostScript, or in PDF format. The latest
+version is available via `http://www.cs.wisc.edu/~ghost/index.html' and
+`ftp://ftp.cs.wisc.edu/pub/ghost/aladdin/'.
+
+ A somewhat older version of Ghostscript is available under the GNU
+General Public License, free to everyone. You can get that from
+`ftp://prep.ai.mit.edu/pub/gnu/'.
+
+ The program Ghostview, written by Tim Theisen, provides typical
+previewing capabilities (next page/previous page, magnification, etc.).
+It requires Ghostscript to run, and files in structured Postscript,
+specifically with `%%Page' comments (no `N' in `config.ps'). You can
+get Ghostview from the same places as Ghostscript.
+
+Diagnosing problems
+===================
+
+ You've gone through all the trouble of installing Dvips, carefully
+read all the instructions in this manual, and still can't get something
+to work. The following sections provide some helpful hints if you find
+yourself in such a situation.
+
+ For details on effective bug reporting, common installation problems,
+and `mktexpk' problems, *note Bugs: (kpathsea)Bugs..
+
+Debug options
+-------------
+
+ The `-d' flag to Dvips helps in tracking down certain errors. The
+parameter to this flag is an integer that tells what errors are
+currently being tracked. To track a certain class of debug messages,
+simply provide the appropriate number given below; if you wish to track
+multiple classes, sum the numbers of the classes you wish to track. To
+track all classes, you can use `-1'. Another useful value is `3650',
+which tracks everything having to do with file searching and opening.
+
+ Some of these debugging options are actually provided by Kpathsea
+(*note Debugging: (kpathsea)Debugging.).
+
+ The classes are:
+1
+ specials
+
+2
+ paths
+
+4
+ fonts
+
+8
+ pages
+
+16
+ headers
+
+32
+ font compression
+
+64
+ files
+
+128
+ config files
+
+256
+ Partial Type 1 font encoding vectors
+
+512
+ Partial Type 1 subr calls
+
+1024
+ Kpathsea `stat' calls
+
+2048
+ Kpathsea hash table lookups
+
+4096
+ Kpathsea path element expansion
+
+8192
+ Kpathsea path searches
+
+No output at all
+----------------
+
+ If you are not getting any output at all, even from the simplest
+one-character file (for instance, `\ \bye'), then something is very
+wrong. Practically any file sent to a PostScript laser printer should
+generate some output, at the very least a page detailing what error
+occurred, if any. Talk to your system administrator about downloading a
+PostScript error handler. (Adobe distributes a good one called
+`ehandler.ps'.)
+
+ It is possible, especially if you are using non-Adobe PostScript, that
+your PostScript interpreter is broken. Even then it should generate an
+error message. Dvips tries to work around as many bugs as possible in
+common non-Adobe PostScript interpreters, but doubtless it misses a few.
+PowerPage Revision 1, Interpreter Version 20001.001, on a Mitsubishi
+Shinko CHC-S446i color thermal dye sublimation printer is known to be
+unable to print with any but builtin fonts.
+
+ If Dvips gives any strange error messages, or compilation on your
+machine generated a lot of warnings, perhaps the Dvips program itself is
+broken. Try using the debug options to determine where the error
+occurred (*note Debug options::.).
+
+ It is possible your spooler is broken and is misinterpreting the
+structured comments. Try the `-N' flag to turn off structured comments
+and see what happens.
+
+Output too small or inverted
+----------------------------
+
+ If some documents come out inverted or too small, probably your
+spooler is not supplying an end of job indicator at the end of each
+file. (This commonly happens on small machines that don't have
+spoolers.) You can force Dvips to do this with the `-F' flag (or `F'
+config file option), but this generates files with a terminating binary
+character (control-D). You can also try using the `-s' flag (or `s'
+config file option) to enclose the entire job in a save/restore pair.
+*Note Command-line options::, and *Note Config files::.
+
+Error messages from printer
+---------------------------
+
+ If your printer returns error messages, the error message gives very
+good information on what might be going wrong. One of the most common
+error messages is `bop undefined'. This is caused by old versions of
+Transcript and other spoolers that do not properly parse the setup
+section of the PostScript. To fix this, turn off structured comments
+with the `-N' option, but it'd be best to get your spooling software
+updated.
+
+ Another error message is `VM exhausted'. Some printers indicate this
+error by locking up, others quietly reset. This is caused by Dvips
+thinking that the printer has more memory than it actually does, and
+then printing a complicated document. To fix this, try lowering the
+`m' parameter in the configuration file; use the debug option to make
+sure you adjust the correct file.
+
+ Other errors may indicate you are trying to include graphics that
+don't nest properly in other PostScript documents, among other things.
+Try the PostScript file on a QMS PS-810 or other Adobe PostScript
+printer if you have one, or Ghostscript (*note Ghostscript
+installation::.); it might be a problem with the printer itself.
+
+Long documents fail to print
+----------------------------
+
+ This is usually caused by incorrectly specifying the amount of memory
+the printer has in the configuration file; see the previous section.
+
+Including graphics fails
+------------------------
+
+ The most common problem with including graphics is an incorrect
+bounding box (*note Bounding box::.). Complain to whoever wrote the
+software that generated the file if the bounding box is indeed
+incorrect.
+
+ Another possible problem is that the figure you are trying to include
+does not nest properly; there are certain rules PostScript applications
+must follow when generating files to be included. The Dvips program
+includes work-arounds for such errors in Adobe Illustrator and other
+programs, but there are certainly applications that haven't been tested.
+
+ One possible thing to try is the `-K' flag which strips the comments
+from an included figure. This might be necessary if the PostScript
+spooling software does not read the structured comments correctly. Use
+of this flag will break graphics from some applications, though, since
+some applications read the PostScript file from the input stream,
+looking for a particular comment.
+
+ Any application which generates graphics output containing raw binary
+(not ASCII hex) will probably fail with Dvips.
+
diff --git a/Build/source/texk/dvipsk/INSTALLATION b/Build/source/texk/dvipsk/INSTALLATION
new file mode 100644
index 00000000000..5c50ce14c92
--- /dev/null
+++ b/Build/source/texk/dvipsk/INSTALLATION
@@ -0,0 +1,227 @@
+THIS FILE IS WAY OUT OF DATE.
+
+Installation
+
+If dvips has not already been installed on your system, the
+following steps are all that is needed for installation of the program.
+After untaring, all installation files are found in this subdirectory.
+
+1. Update Makefile---in particular, the paths. Everything
+concerning dvips can be adjusted in the Makefile. Make sure
+you set key parameters such as the default resolution, and make sure
+that the path given for packed pixel files is correct.
+
+2. Check the file name definitions in mktexpk. If you don't
+have METAFONT installed, you cannot use mktexpk to automatically
+generate the fonts; you can, however, modify it to generate pk
+fonts from gf fonts if you don't have a full set of pk fonts
+but do have a set of gf fonts. If you don't have that, you should
+probably not install mktexpk at all; this will disable automatic
+font generation.
+
+3. Check the configuration parameters in config.ps. You should
+also update the default resolution here (default is set to 400 - this
+is found in line 13). This file is the system-wide configuration
+file that will be automatically installed. If you are unsure how
+much memory your PostScript printer has, print the following file:
+
+%! Hey, we're PostScript
+/Times-Roman findfont 30 scalefont setfont 144 432 moveto
+vmstatus exch sub 40 string cvs show pop showpage
+
+Note that the number returned by this file is the total memory free;
+it is often a good idea to tell dvips that the printer has somewhat
+less memory. This is because many programs download permanent macros
+that can reduce the memory in the printer. In general, a memory size
+of about 300000 is plenty, since dvips can automatically split
+a document if required. It is unfortunate that PostScript printers with
+much less virtual memory still exist.
+
+Some systems or printers can dynamically increase the memory available
+to a PostScript interpreter; for these systems, a value of one million
+works well.
+
+4. Run make ("make dvips"). Everything should compile smoothly.
+You may need to adjust the compiler options in the Makefile if something
+goes amiss.
+
+5. Once everything is compiled, make install ("make install"). After
+this is done, you may want to create a configuration file for each
+PostScript printer at your site.
+
+6. If the font caching is considered a security hole, make the `cache'
+directory be something like /tmp/pks, and cron a job to move the
+good pk files into the real directory. Or simply disable this
+feature by not installing mktexpk.
+
+7. Don't forget to install the new vf files and tfm files. Note
+that the tfm files distributed with earlier (pre-5.471) versions
+of dvips, and all versions of other PostScript drivers, are different.
+
+Diagnosing Problems
+
+You've gone through all the trouble of installing dvips, carefully
+read all the instructions in this manual, and still can't get something
+to work. This is all too common, and is usually caused by some broken
+PostScript application out there. The following sections provide some
+helpful hints if you find yourself in such a situation.
+
+In all cases, you should attempt to find the smallest file that causes
+the problem. This will not only make debugging easier, it will also
+reduce the number of possible interactions among different parts of the
+system.
+
+Debug Options
+
+The -d flag to dvips is very useful for helping to track down
+certain errors. The parameter to this flag is an integer that tells
+what errors are currently being tracked. To track a certain class of
+debug messages, simply provide the appropriate number given below;
+if you wish to track multiple classes, sum the numbers of the classes
+you wish to track. The classes are:
+
+1 specials
+2 paths
+4 fonts
+8 pages
+16 headers
+32 font compression
+64 files
+128 memory
+
+No Output At All
+
+If you are not getting any output at all, even from the simplest
+one-character file (for instance, \ \bye),
+then something is very wrong. Practically any file sent to a
+PostScript laser printer should generate some output, at the very
+least a page detailing what error occurred, if any. Talk to your
+system administrator about downloading a PostScript error handler.
+(Adobe distributes a good one called ehandler.ps.)
+
+It is possible, especially if you are using non-Adobe PostScript,
+that your PostScript interpreter is broken. Even then it should
+generate an error message. I've tried to work around as many bugs
+as possible in common non-Adobe PostScript interpreters, but I'm
+sure I've missed a few.
+
+If dvips gives any strange error messages, or compilation on your
+machine generated a lot of warnings, perhaps the dvips program
+itself is broken. Carefully check the types in dvips.h and
+the declarations in the Makefile, and try using the debug options
+to determine where the error occurred.
+
+It is possible your spooler is broken and is misinterpreting the
+structured comments. Try the -N flag to turn off
+structured comments and see what happens.
+
+Output Too Small or Inverted
+
+If some documents come out inverted or too small, your spooler is not
+supplying an end of job indicator at the end of each file. (This happens
+a lot on small machines that don't have spoolers.) You can
+force dvips to do this with the -F flag, but note that this
+generates files with a binary character (control-D) in them. You can
+also try using the -s flag to enclose the entire job in a save/restore
+pair.
+
+Error Messages From Printer
+
+If your printer returns error messages, the error message gives very
+good information on what might be going wrong. One of the most common
+error messages is bop undefined. This is caused by old versions
+of Transcript and other spoolers that do not properly parse the
+setup section of the PostScript. To fix this, turn off structured
+comments with the -N option, but make sure you get your spooling
+software updated.
+
+Another error message is VM exhausted. (Some printers indicate
+this error by locking up; others quietly reset.) This is caused by telling
+dvips that the printer has more memory than it actually does, and
+then printing a complicated document. To fix this, try lowering the
+parameter to m in the configuration file; use the debug option
+to make sure you adjust the correct file.
+
+Other errors may indicate that the graphics you are trying to include
+don't nest properly in other PostScript documents, or any of a number of
+other possibilities. Try the output on a QMS PS-810 or other Adobe
+PostScript printer; it might be a problem with the printer itself.
+
+400 DPI Is Used Instead Of 300 DPI
+
+This common error is caused by not editing the config.ps file to
+reflect the correct resolution for your site. You can use the debug flags
+(-d64) to see what files are actually being read.
+
+Long Documents Fail To Print
+
+This is usually caused by incorrectly specifying the amount of memory
+the printer has in config.ps; see the description above.
+
+Including Graphics Fails
+
+The reasons why graphics inclusions fail are too numerous to mention.
+The most common problem is an incorrect bounding box; read the section
+on bounding boxes and check your PostScript file. Complain very loudly
+to whoever wrote the software that generated the file if the bounding
+box is indeed incorrect.
+
+Another possible problem is that the figure you are trying to include
+does not nest properly; there are certain rules PostScript applications
+should follow when generating files to be included. The dvips
+program includes work-arounds for such errors in Adobe Illustrator and
+other programs, but there are certainly applications that haven't
+been tested.
+
+One possible thing to try is the -K flag, to strip the comments from
+an included figure. This might be necessary if the PostScript spooling
+software does not read the structuring comments correctly. Use of this
+flag will break graphics from some applications, though, since some
+applications read the PostScript file from the input stream looking for
+a particular comment.
+
+Any application which generates graphics output containing raw binary
+(not hex) will probably fail with dvips.
+
+Can't Find Font Files
+
+If dvips complains that it cannot find certain font files, it is
+possible that the paths haven't been set up correctly for your system.
+Use the debug flags to determine precisely what fonts are being looked
+for and make sure these match where the fonts are located on your system.
+
+Can't Generate Fonts
+
+This happens a lot if either mktexpk hasn't been properly edited
+and installed, or if the local installation of METAFONT isn't correct.
+If mktexpk isn't properly edited or isn't installed, an error
+such as mktexpk not found will be printed on the console. The
+fix is to talk to the person who installed dvips and have them fix
+this.
+
+If METAFONT isn't found when mktexpk is running, make sure it is installed
+on your system. The person who installed TeX should be able to install
+METAFONT easily.
+
+If METAFONT runs but generates fonts that are too large (and prints out the
+name of each character as well as just a character number), then your
+METAFONT base file probably hasn't been made properly. To make a proper
+plain.base, assuming the local mode definitions are contained in
+local.mf (on the NeXT, next.mf; on the Amiga, amiga.mf),
+type the following command (assuming csh under UNIX):
+
+localhost> inimf "plain; input local; dump"
+
+Now, copy the plain.base file from the current directory to where
+the base files are stored on your system.
+
+Note that a preloaded cmbase.base should never be used when creating
+fonts, and a program such as cmmf should never exist on the system.
+The macros defined in cmbase will break fonts that do not use
+cmbase; such fonts include the LaTeX fonts. Loading the cmbase
+macros when they are needed is done automatically and takes less than a
+second---an insignificant fraction of the total run time of METAFONT for a
+font, especially when the possibility of generating incorrect fonts is
+taken into account. If you create the LaTeX font {\tt circle10,
+for instance, with the cmbase macros loaded, the characters will
+have incorrect widths.
diff --git a/Build/source/texk/dvipsk/Makefile.in b/Build/source/texk/dvipsk/Makefile.in
new file mode 100644
index 00000000000..2a98d3deac1
--- /dev/null
+++ b/Build/source/texk/dvipsk/Makefile.in
@@ -0,0 +1,185 @@
+# Makefile for dvipsk -- kb@mail.tug.org. Public domain.
+version = 5.95b
+
+# Add -DDEFRES=dpi to DEFS to change the default resolution from 600.
+# Add -DSECURE if you will install dvips with special privileges.
+# Add -DNO_DEBUG to omit debugging support.
+# Add -DNO_EMTEX to omit EMTEX specials.
+# Add -DNO_HPS to omit hypertex support.
+# Add -DNO_TPIC to omit tpic support.
+#
+# For VM/CMS or (perhaps) VMS or DOS compilation, need the corresponding
+# subdirectory from the original dvips distribution. (Maybe dvipsk
+# won't work at all on such systems; if you have info one way or the
+# other, please let kb@cs.umb.edu know.)
+
+kpse_include ../make/paths.mk
+kpse_include ../make/common.mk
+kpse_include ../make/programs.mk
+kpse_include ../make/cross.mk
+kpse_include ../make/texi.mk
+prog_cflags = -DUNIX -DKPATHSEA -DNeedFunctionPrototypes -DSHIFTLOWCHARS
+
+# The `t[mp]-' business is so that we don't create an empty .pro file,
+# if running squeeze fails for some reason. A dependency on squeeze
+# fails here, so we include it below.
+.SUFFIXES: .pro .lpro
+.lpro.pro:
+ ./squeeze <$< >t-$@
+ mv t-$@ $@
+prologues = tex.pro texps.pro texc.pro special.pro finclude.pro \
+ color.pro crop.pro hps.pro
+
+objects = dospecial.o dviinput.o emspecial.o fontdef.o loadfont.o \
+dvips.o tfmload.o download.o prescan.o scanpage.o skippage.o output.o \
+scalewidth.o dosection.o dopage.o resident.o search.o unpack.o drawPS.o \
+header.o repack.o virtualfont.o dpicheck.o finclude.o writet1.o \
+pprescan.o papersiz.o color.o bbox.o hps.o t1part.o
+
+program = dvips
+programs = afm2tfm $(program)
+
+
+default all: $(programs) $(prologues) dvips.info
+
+$(program): $(kpathsea) $(objects)
+ $(kpathsea_link) $(objects) $(LOADLIBES)
+afm2tfm: $(kpathsea) afm2tfm.o
+ $(kpathsea_link) afm2tfm.o $(LOADLIBES)
+# Omit LOADLIBES since no need to dynamically link with kpathsea.
+squeeze.o: squeeze.c
+ $(build_compile) -c $<
+squeeze: squeeze.o
+ $(build_link_command) squeeze.o
+
+@MAINT@$(srcdir)/writet1.c: $(srcdir)/../web2c/pdftexdir/writet1.c
+@MAINT@ cp -f $(srcdir)/../web2c/pdftexdir/writet1.c $@
+
+@MAINT@$(srcdir)/ptexmac.h: $(srcdir)/../web2c/pdftexdir/ptexmac.h
+@MAINT@ cp -f $(srcdir)/../web2c/pdftexdir/ptexmac.h $@
+
+$(prologues): squeeze
+texc.lpro: texc.script tex.lpro
+ $(SHELL) $(srcdir)/texc.script $(srcdir)/tex.lpro $@
+
+kpse_include ../make/tkpathsea.mk
+
+# The environment for running check.
+# No need to specify TEXMF, as ../kpathsea/texmf.cnf should contain
+# suitable absolute paths at this point. Those are converted to
+# SELFAUTO* paths on installation.
+checkenv = TEXMFCNF=../kpathsea \
+ TFMFONTS=$(srcdir)/testdata: VFFONTS=$(srcdir)/testdata: \
+ TEXPSHEADERS=$(srcdir)/testdata: TEXCONFIG=$(srcdir)/testdata:
+
+check: all
+ rm -f mtest.ps
+ -($(checkenv) ./dvips -D 300 $(srcdir)/testdata/dvipstst.xdv -o dvipstst.ps)
+ mv dvipstst.ps mtest.ps
+ -($(checkenv) ./dvips -D 300 $(srcdir)/testdata/dvipstst.xdv -o)
+ -diff $(srcdir)/testdata/dvipstst.xps dvipstst.ps
+
+install: install-exec install-data
+ $(POST_INSTALL)
+# @echo "Create $(psheaderdir)/base/config.ps if necessary (see ./INSTALL)."
+uninstall: uninstall-exec uninstall-data
+
+install-exec: all
+ $(SHELL) $(top_srcdir)/../mkinstalldirs $(bindir)
+ for p in $(programs); do $(INSTALL_LIBTOOL_PROG) $$p $(bindir); done
+ rm -f $(bindir)/o$(program)
+ ln -s $(program) $(bindir)/o$(program)
+uninstall-exec:
+ for p in $(programs); do rm -f $(bindir)/$$p; done
+ rm -f $(bindir)/o$(program)
+
+install-data: $(program).info
+ $(SHELL) $(top_srcdir)/../mkinstalldirs $(man1dir) $(infodir) $(psheaderdir)/base
+# PostScript prologues and encodings.
+ for h in $(prologues); do $(INSTALL_DATA) $$h $(psheaderdir)/base/$$h; done
+# cd $(srcdir)/reencode && \
+# for e in *.enc; do $(INSTALL_DATA) $$e $(psheaderdir)/base/$$e; done
+# config.ps. Any one config.ps will be wrong for most people, so don't
+# install anything by default.
+# if test ! -r $(psheaderdir)/base/config.ps \
+# || grep 'original config.ps --' $(psheaderdir)/base/config.ps \
+# >/dev/null; then \
+# $(INSTALL_DATA) $(srcdir)/config.ps $(psheaderdir)/base/config.ps; \
+# else true; fi
+# psfonts.map.
+# if test ! -r $(psheaderdir)/base/psfonts.map \
+# || grep 'original psfonts.map --' $(psheaderdir)/base/psfonts.map \
+# >/dev/null; then \
+# $(INSTALL_DATA) $(srcdir)/psfonts.map $(psheaderdir)/base/psfonts.map; \
+# else true; fi
+# Info files.
+ cd $(srcdir) && for i in $(program).i*; do \
+ $(INSTALL_DATA) $$i $(infodir)/$$i; done
+# Man pages.
+ $(INSTALL_DATA) $(srcdir)/$(program).1 $(man1dir)/$(program).$(manext)
+ rm -f $(man1dir)/o$(program).$(manext)
+ ln -s $(program).$(manext) $(man1dir)/o$(program).$(manext)
+ $(INSTALL_DATA) $(srcdir)/afm2tfm.1 $(man1dir)/afm2tfm.$(manext)
+# TeX macros.
+# cd $(srcdir)/tex && for m in *.tex; do \
+# $(INSTALL_DATA) $$m $(dvips_plain_macrodir)/$$m; done
+ $(POST_INSTALL)
+ if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
+ install-info --info-dir=$(infodir) $(infodir)/$(program).info; \
+ else true; fi
+
+uninstall-data:
+ $(PRE_UNINSTALL)
+ if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
+ install-info --delete --info-dir=$(infodir) $(infodir)/$(program).info; \
+ else true; fi
+ $(NORMAL_UNINSTALL)
+ rm -f $(infodir)/dvips.i*
+# for h in $(prologues); do rm -f $(psheaderdir)/base/$$h; done
+# cd $(srcdir)/reencode && for e in *.enc; do rm -f $(psheaderdir)/base/$$e; \
+# done
+# if grep 'original config.ps --' $(psheaderdir)/base/config.ps \
+# >/dev/null 2>&1; then rm -f $(psheaderdir)/base/config.ps; \
+# else true; fi
+# if grep 'original psfonts.map --' $(psheaderdir)/base/psfonts.map \
+# >/dev/null 2>&1; then rm -f $(psheaderdir)/base/psfonts.map; \
+# else true; fi
+ rm -f $(man1dir)/dvips.$(manext) $(man1dir)/afm2tfm.$(manext)
+
+distname = dvipsk
+program_files = *.texi *.info* *.lpro psfonts.map *.1 texc.script \
+ dvips.help $(program).aux $(program).cps dvipstst.dvi
+version_files = dvips.h afm2tfm.c dvips.c
+
+pre-dist-$(distname): INSTALL $(program).info $(program).dvi
+post-dist-$(distname):
+ ln -s `pwd`/contrib `pwd`/tex $(distdir)
+ mkdir $(distdir)/reencode; ln -s $(fontname)/*.enc $(distdir)/reencode
+ ln -s `pwd`/README.reencode $(distdir)/reencode/README
+ rm -f $(distdir)/texc.lpro
+
+kpse_include ../make/dist.mk
+kpse_include ../make/config.mk
+
+info: $(program).info
+dvi: $(program).dvi
+
+@MAINT@INSTALL: $(program).texi
+@MAINT@ $(MAKEINFO) -D INSTALLONLY --no-headers --no-split --no-validate \
+@MAINT@ $(MAKEINFO_FLAGS) $< -o $@
+@MAINT@ $(top_srcdir)/../add-info-toc $@
+@MAINT@$(program).info: dvips.help
+@MAINT@dvips.help: dvips.c
+@MAINT@ ./dvips --help >$@
+@MAINT@doc: info INSTALL
+
+kpse_include ../make/clean.mk
+
+distclean::
+ rm -f *.pro texc.lpro
+
+clean::
+ rm -f mtest.ps dvipstst.ps
+
+kpse_include ../make/rdepend.mk
+kpse_include depend.mk
diff --git a/Build/source/texk/dvipsk/README b/Build/source/texk/dvipsk/README
new file mode 100644
index 00000000000..48c4cc4eb26
--- /dev/null
+++ b/Build/source/texk/dvipsk/README
@@ -0,0 +1,137 @@
+This directory contains Dvipsk, my (kb@mail.tug.org) modified version of
+Tom Rokicki's dvips, a DVI-to-PostScript translator.
+
+See `NEWS' for major changes by release, `ChangeLog` for all changes.
+See `INSTALL' for installation instructions.
+See `../kpathsea/BUGS' for details on reporting bugs.
+AT LEAST NEWS, ChangeLog, AND INSTALL ARE WOEFULLY OUT OF DATE.
+
+Aside from configuration, this differs from the original primarily in
+that it uses the same code for path searching as TeX and my other
+distributions.
+
+Dvipsk does not install any default config.ps file, since no one file is
+generally suitable. Sample Dvips config files are in the contrib/
+directory. See ./INSTALL.
+
+The documentation is now in Texinfo format. I've removed the font
+naming section, since it was an old version of the font naming document
+(which you can get from ftp://ftp.tug.org/tex/fontname/).
+
+Dvipsk is free software; Tom's original files are public domain. The
+files I wrote (originally for the Free Software Foundation) are covered
+by the GNU General Public License -- see the files COPYING*.
+
+You can get the original dvips from ftp://labrea.stanford.edu/pub/dvips*.
+
+kb@mail.tug.org
+Member of the League for Programming Freedom -- write lpf@uunet.uu.net.
+-------------------------------------------------------------------------
+dvips 5.86 notes:
+
+ Minor improvements to epsf style file.
+ Another patch to t1part.c to make it more liberal in accepting pfb/pfa
+ font files.
+ Added PS reencoding reimplementation by Rob Hutchings.
+ Added 'F' in config file to send controlD.
+ Added quick exit if -? or -v.
+ Improved tex.lpro to fix a bug that showed up in distiller.
+ Improved tex.lpro to work around a problem in certain Windows
+ environments.
+ Made dvips complain if it had to section a document.
+ Eliminated use-after-free bug in hps.c.
+ Fixed a problem in t1part for the Euro fonts with partial font downloading.
+ Fixed a big problem in t1part for some font downloading due to
+ uninitialized allocations.
+ Added `unknown' paper size back to config.ps.
+ Made t1part munge the UniqueID to prevent cache problems in Acrobat and
+ other programs.
+ Fixed parsing error when whitespace following '<' in psfonts.map.
+ Made '<<' work correctly (disable partial font downloading for that
+ particular font) in psfonts.map.
+
+dvips 5.74 notes:
+
+ The epsf.sty and epsf.tex files are now in the public domain.
+ The t1part.c has been updated to support binary files with
+ multiple binary sections.
+
+dvips 5.72 notes:
+
+ Bug fix in t1part.c??? I hope so!
+
+ Debugging now turned on by default. No real reason to turn it off.
+ (Too many Linux versions of dvips without debugging have been
+ distributed, and it makes it very difficult to help the users with
+ their problems . . .)
+
+dvips 5.62 notes:
+
+ The makefile and config.ps and MakeTeXPK need to be modified to fit
+ your site!
+
+ dvips.tex needs updating.
+
+To document:
+ Landscape mfmode
+ HPS integration
+ Separate EPSF file generation
+ Better bbox support
+ Partial type 1 support
+ Comment elision now turned *off*
+ Upleveling of font requirements
+ Bitmap font descriptions
+
+Questions:
+ Should I eliminate PStfms/PSvfs/afm-extra?
+ Should I eliminate PSlatex? (my guess is yes)
+ Partial type 1 downloading (Sergey Lesenko)
+ HyperTeX support (Mark Doyle)
+ Lots of little bugs/changes/fixes
+
+Still todo:
+
+- Make a better copyfile that handles Level 2 data better
+- Add landscape mode def and code to select it.
+- Sanitize; test on various systems
+- Improve makefile!!! Goal: on a standard C installation (with stdlib
+ and all) and a Unix machine using TDS, make it be just a `make' away.
+- Improve diagnostics, especially when files not found.
+- Eliminate `extern' declarations; use header files properly
+
+Despite the fact that I reference Mark and Sergey, bugs are mine, mine,
+all mine, so please bug me and not them.
+----------------------------------------------------------------------------
+All real documentation is now in the file dvips.tex. There is also a file
+called test.tex that you can read and run to test some basic capabilities of
+dvips. INSTALLATION has the primary installation instructions.
+
+If you enjoy using dvips, you will probably enjoy being a member of
+the TeX Users Group. To join or contribute to TUG, contact them at
+
+ TeX Users Group
+ 1850 Union Street #1637
+ San Francisco, CA 94123
+ Voice: (415) 982-8449
+ FAX: (415) 982-8559
+ Email: TUG@tug.org
+ Web: http://www.tug.org/
+
+This is a list of people who have contributed substantially to dvips.
+I'm sure I've forgotten many. Thanks to all!
+
+Karl Berry
+P. W. Daly
+Mark Doyle
+Edward J. Groth
+James Hafner
+John Hobby
+Rob Hutchings
+Donald E. Knuth
+Russell Lang
+Sergey Lesenko
+Art Ogawa
+Melissa O'Neill
+Sebastian Rahtz
+Andrew Trevorrow
+Staszek Wawrykiewicz
diff --git a/Build/source/texk/dvipsk/acconfig.h b/Build/source/texk/dvipsk/acconfig.h
new file mode 100644
index 00000000000..739210b5ae1
--- /dev/null
+++ b/Build/source/texk/dvipsk/acconfig.h
@@ -0,0 +1,24 @@
+/* acconfig.h -- used by autoheader when generating c-auto.in.
+
+ If you're thinking of editing acconfig.h to fix a configuration
+ problem, don't. Edit the c-auto.h file created by configure,
+ instead. Even better, fix configure to give the right answer. */
+
+
+/* Define if your compiler understands prototypes. */
+#undef HAVE_PROTOTYPES
+
+/* Define if your putenv doesn't waste space when the same environment
+ variable is assigned more than once, with different (malloced)
+ values. This is true only on NetBSD/FreeBSD, as far as I know. See
+ xputenv.c. */
+#undef SMART_PUTENV
+
+/* Define if getcwd if implemented using fork or vfork. Let me know
+ if you have to add this by hand because configure failed to detect
+ it. */
+#undef GETCWD_FORKS
+
+/* Define if you are using GNU libc or otherwise have global variables
+ `program_invocation_name' and `program_invocation_short_name'. */
+#undef HAVE_PROGRAM_INVOCATION_NAME
diff --git a/Build/source/texk/dvipsk/adobe b/Build/source/texk/dvipsk/adobe
new file mode 100644
index 00000000000..7063710077b
--- /dev/null
+++ b/Build/source/texk/dvipsk/adobe
@@ -0,0 +1,1121 @@
+ACaslon-AltBold pacba
+ACaslon-AltBoldItalic pacbai
+ACaslon-AltItalic pacrai
+ACaslon-AltRegular pacra
+ACaslon-AltSemibold pacsa
+ACaslon-AltSemiboldItalic pacsai
+ACaslon-Bold pacb
+ACaslon-BoldItalic pacbi
+ACaslon-Italic pacri
+ACaslon-Ornaments pacrp
+ACaslon-Regular pacr
+ACaslon-Semibold pacs
+ACaslon-SemiboldItalic pacsi
+ACaslon-SwashBoldItalic pacbwi
+ACaslon-SwashItalic pacrwi
+ACaslon-SwashSemiboldItalic pacswi
+ACaslonExp-Bold pacbx
+ACaslonExp-BoldItalic pacbix
+ACaslonExp-Italic pacrix
+ACaslonExp-Regular pacrx
+ACaslonExp-Semibold pacsx
+ACaslonExp-SemiboldItalic pacsix
+AGaramond-Bold padb
+AGaramond-BoldItalic padbi
+AGaramond-Italic padri
+AGaramond-Regular padr
+AGaramond-Semibold pads
+AGaramond-SemiboldItalic padsi
+AGaramond-Titling padrd
+AGaramondAlt-Italic padrai
+AGaramondAlt-Regular padra
+AGaramondExp-Bold padbx
+AGaramondExp-BoldItalic padbxi
+AGaramondExp-Italic padrxi
+AGaramondExp-Regular padrx
+AGaramondExp-Semibold padsx
+AGaramondExp-SemiboldItalic padsxi
+Aachen-Bold paab
+AkzidenzGrotesk-Black pazc
+AkzidenzGrotesk-Bold pazb
+AkzidenzGrotesk-Light pazl
+AkzidenzGrotesk-Roman pazr
+AmericanTypewriter-BoldCond patbrc
+AmericanTypewriter-Cond patrrc
+AmericanTypewriter-Light patl
+AmericanTypewriter-LightCond patlrc
+AmericanTypewriter-Bold patb
+AmericanTypewriter-Medium patr
+Americana pamr
+Americana-Bold pamb
+Americana-ExtraBold pamx
+Americana-Italic pamri
+AntiqueOlive-Black paoc
+AntiqueOlive-Bold paob
+AntiqueOlive-BoldCond paobc
+AntiqueOlive-Compact paorrn
+AntiqueOlive-Italic paori
+AntiqueOlive-Light paol
+AntiqueOlive-Roman paor
+Arcadia parr
+ArnoldBoecklin pabr
+Auriol paur
+Auriol-Black pauc
+Auriol-BlackItalic pauci
+Auriol-Bold paub
+Auriol-BoldItalic pauci
+Auriol-Italic pauri
+AvantGarde-Bold pagb
+AvantGarde-BoldObl pagbo
+AvantGarde-Book pagk
+AvantGarde-BookOblique pagko
+AvantGarde-CondBold pagbrc
+AvantGarde-CondBook pagkrc
+AvantGarde-CondDemi pagdrc
+AvantGarde-CondMedium pagmrc
+AvantGarde-Demi pagd
+AvantGarde-DemiOblique pagdo
+AvantGarde-ExtraLight pagi
+AvantGarde-ExtraLightObl pagio
+AvantGarde-Medium pagm
+AvantGarde-MediumObl pagmo
+Avenir-Black pavc
+Avenir-BlackOblique pavco
+Avenir-Book pavk
+Avenir-BookOblique pavko
+Avenir-Heavy pavh
+Avenir-HeavyOblique pavho
+Avenir-Light pavl
+Avenir-LightOblique pavlo
+Avenir-Medium pavm
+Avenir-MediumOblique pavmo
+Avenir-Oblique pavro
+Avenir-Roman pavr
+BakerSignet pbsr
+Banco pbcr
+BauerBodoni-Black pubc
+BauerBodoni-BlackCond pubcrc
+BauerBodoni-BlackItalic pubci
+BauerBodoni-Bold pubb
+BauerBodoni-BoldCond pubbrc
+BauerBodoni-BoldItalic pubbi
+BauerBodoni-Italic pubri
+BauerBodoni-ItalicOsF
+BauerBodoni-Roman pubr
+BauerBodoni-RomanSC pubrc
+Bauhaus-Bold pbhb
+Bauhaus-Demi pbhd
+Bauhaus-Heavy pbhh
+Bauhaus-Light pbhl
+Bauhaus-Medium pbhm
+Belwe-Bold pblb
+Belwe-Condensed pblrrc
+Belwe-Light pbll
+Belwe-Medium pblm
+Bembo pbbr
+Bembo-Bold pbbb
+Bembo-BoldItalic pbbbi
+Bembo-ExtraBold pbbx
+Bembo-ExtraBoldItalic pbbxi
+Bembo-Italic pbbri
+Bembo-Semibold pbbs
+Bembo-SemiboldItalic pbbsi
+Benguiat-Bold pbgb
+Benguiat-Book pbgk
+BenguiatGothic-Bold pugb
+BenguiatGothic-BoldOblique pugbo
+BenguiatGothic-Book pugk
+BenguiatGothic-BookOblique pugko
+BenguiatGothic-Heavy pugh
+BenguiatGothic-HeavyOblique pugho
+BenguiatGothic-Medium pugm
+BenguiatGothic-MediumOblique pugmo
+Berkeley-Black pbyc
+Berkeley-BlackItalic pbyci
+Berkeley-Bold pbyb
+Berkeley-BoldItalic pbybi
+Berkeley-Book pbyk
+Berkeley-BookItalic pbyki
+Berkeley-Italic pbymi
+Berkeley-Medium pbym
+Berling-Bold pbrb
+Berling-BoldItalic pbrbi
+Berling-Italic pbrri
+Berling-Roman pbrr
+Bodoni pbdr
+Bodoni-Bold pbdb
+Bodoni-BoldCondensed pbdbrc
+Bodoni-BoldItalic pbdbi
+Bodoni-Book pbdk
+Bodoni-BookItalic pbdki
+Bodoni-Italic pbdri
+Bodoni-Poster pbdp
+Bodoni-PosterCompressed pbdprn
+Bodoni-PosterItalic pbdrpi
+Bookman-Bold pbkb
+Bookman-BoldItalic pbkbi
+Bookman-Demi pbkd
+Bookman-DemiItalic pbkdi
+Bookman-Light pbkl
+Bookman-LightItalic pbkli
+Bookman-Medium pbkm
+Bookman-MediumItalic pbkmi
+BrushScript pburw
+BundesbahnPi-One pbp1
+BundesbahnPi-Three pbp3
+BundesbahnPi-Two pbp2
+Caecilia-Bold pilb
+Caecilia-BoldItalic pilbi
+Caecilia-BoldItalicSC pilbci
+Caecilia-BoldSC pilbc
+Caecilia-Heavy pilh
+Caecilia-HeavyItalic pilhi
+Caecilia-HeavyItalicSC pilhci
+Caecilia-HeavySC pilhc
+Caecilia-Italic pilri
+Caecilia-ItalicSC pilrci
+Caecilia-Light pill
+Caecilia-LightItalic pilli
+Caecilia-LightItalicSC pillci
+Caecilia-LightSC pillc
+Caecilia-Roman pilr
+Caecilia-RomanSC pilrc
+Candida-Bold pcib
+Candida-Italic pciri
+Candida-Roman pcir
+Carta prtr
+CascadeScript pccrw
+CaslonFiveForty-Italic pc5ri
+CaslonFiveForty-Roman pc5r
+CaslonOpenFace pcarl
+CaslonThree-Italic pc3ri
+CaslonThree-Roman pc3r
+CaslonTwoTwentyFour-Black pc2c
+CaslonTwoTwentyFour-BlackIt pc2ci
+CaslonTwoTwentyFour-Bold pc2b
+CaslonTwoTwentyFour-BoldIt pc2bi
+CaslonTwoTwentyFour-Book pc2k
+CaslonTwoTwentyFour-BookIt pc2ki
+CaslonTwoTwentyFour-Medium pc2m
+CaslonTwoTwentyFour-MediumIt pc2mi
+Caxton-Bold pcxb
+Caxton-BoldItalic pcxbi
+Caxton-Book pcxk
+Caxton-BookItalic pcxki
+Caxton-Light pcxl
+Caxton-LightItalic pcxli
+CentaurMT purr
+CentaurMT-Bold purb
+CentaurMT-BoldItalic purbi
+CentaurMT-Italic purbi
+Centennial-Black pcec
+Centennial-BlackItalic pceci
+Centennial-Bold pceb
+Centennial-BoldItalic pcebi
+Centennial-Italic pceri
+Centennial-ItalicOsF
+Centennial-Light pcel
+Centennial-LightItalic pceli
+Centennial-LightItalicOsF
+Centennial-LightSC pcelc
+Centennial-Roman pcer
+Centennial-RomanSC pcerc
+Century-Bold pcnb
+Century-BoldCondensed pcnbrc
+Century-BoldCondensedItalic pcnbic
+Century-BoldItalic pcnbi
+Century-Book pcnk
+Century-BookCondensed pcnkrc
+Century-BookCondensedItalic pcnkic
+Century-BookItalic pcnki
+Century-Light pcnl
+Century-LightCondensed pcnlrc
+Century-LightCondensedItalic pcnlic
+Century-LightItalic pcnli
+Century-Ultra pcnu
+Century-UltraCondensed pcnurc
+Century-UltraCondensedItalic pcnuic
+Century-UltraItalic pcnui
+CenturyExpanded pcnrrx
+CenturyExpanded-Italic pcnrix
+CenturyOldStyle-Bold pcub
+CenturyOldStyle-Italic pcubi
+CenturyOldStyle-Regular pcubr
+Charlemagne-Bold pcgb
+Charlemagne-Regular pcgr
+Cheltenham-Bold pctb
+Cheltenham-BoldCond pctbrc
+Cheltenham-BoldCondItalic pctbic
+Cheltenham-BoldItalic pctbi
+Cheltenham-Book pctk
+Cheltenham-BookCond pctkrc
+Cheltenham-BookCondItalic pctkic
+Cheltenham-BookItalic pctki
+Cheltenham-Light pctl
+Cheltenham-LightCond pctlrc
+Cheltenham-LightCondItalic pctlic
+Cheltenham-LightItalic pctli
+Cheltenham-Ultra pctu
+Cheltenham-UltraCond pctrro
+Cheltenham-UltraCondItalic pctrio
+Cheltenham-UltraItalic pctui
+Cheq pcqr
+City-Bold pcyb
+City-BoldItalic pcybi
+City-Light pcyl
+City-LightItalic pcyli
+City-Medium pcym
+City-MediumItalic pcymi
+Clairvaux pcvr
+Clarendon pcdm
+Clarendon-Bold pcdb
+Clarendon-Light pcdl
+Clearface-Black pcdc
+Clearface-BlackItalic pcdci
+Clearface-Bold pcdb
+Clearface-BoldItalic pcdbi
+Clearface-Heavy pcdh
+Clearface-HeavyItalic pcdhi
+Clearface-Regular pcdr
+Clearface-RegularItalic pcdri
+Cochin pcor
+Cochin-Bold pcob
+Cochin-BoldItalic pcobi
+Cochin-Italic pcori
+Concorde-Bold pocb
+Concorde-BoldItalic pocbi
+Concorde-Italic pocri
+Concorde-Roman pocr
+CooperBlack pcbr
+CooperBlack-Italic pcbri
+Copperplate-ThirtyAB zpcp30ab
+Copperplate-ThirtyBC zpcp30bc
+Copperplate-ThirtyOneAB zpcp31ab
+Copperplate-ThirtyOneBC zpcp31bc
+Copperplate-ThirtyThreeBC zpcp33bc
+Copperplate-ThirtyTwoAB zpcp32ab
+Copperplate-ThirtyTwoBC zpcp32bc
+Copperplate-TwentyNineAB zpcp29ab
+Copperplate-TwentyNineBC zpcp29bc
+Corona ponr
+Corona-Bold ponb
+Corona-Italic ponri
+Cottonwood pcwr
+Courier pcrr
+Courier-Bold pcrb
+Courier-BoldOblique pcrbo
+Courier-Oblique pcrro
+Cushing-Bold puhb
+Cushing-BoldItalic puhbi
+Cushing-Book puhk
+Cushing-BookItalic puhki
+Cushing-Heavy puhh
+Cushing-HeavyItalic puhhi
+Cushing-Medium puhm
+Cushing-MediumItalic puhmi
+DomCasual pdcr
+DomCasual-Bold pdcb
+EgyptienneF-Black pefc
+EgyptienneF-Bold pefb
+EgyptienneF-Italic pefri
+EgyptienneF-Roman pefi
+EuropeanPi-Four pep4
+EuropeanPi-One pep1
+EuropeanPi-Three pep3
+EuropeanPi-Two pep2
+Doric-Bold pdrb
+Eurostile pesr
+Eurostile-Bold pesb
+Eurostile-BoldCondensed pesbrc
+Eurostile-BoldExtendedTwo pesb2x
+Eurostile-BoldOblique pesbo
+Eurostile-Condensed pesrrc
+Eurostile-Demi pesd
+Eurostile-DemiOblique pesdo
+Eurostile-ExtendedTwo pesr2x
+Eurostile-Oblique pesro
+Excelsior pexr
+Excelsior-Bold pexb
+Excelsior-Italic pexri
+Fenice-Bold pfnb
+Fenice-BoldOblique pfnbo
+Fenice-Light pfnl
+Fenice-LightOblique pfnlo
+Fenice-Regular pfnr
+Fenice-RegularOblique pfnro
+Fenice-Ultra pfnu
+Fenice-UltraOblique pfnuo
+FetteFraktur pftrf
+FetteFraktur-Dfr
+Flyer-BlackCondensed pfycrc
+Flyer-ExtraBlackCondensed pfyxrc
+Folio-Bold pfob
+Folio-BoldCondensed pfobrc
+Folio-ExtraBold pfox
+Folio-Light pfol
+Folio-Medium pfom
+Formata-Bold pfab
+Formata-BoldItalic pfabi
+Formata-Italic pfari
+Formata-Light pfal
+Formata-LightItalic pfali
+Formata-Medium pfam
+Formata-MediumItalic pfami
+Formata-Regular pfar
+FranklinGothic-Book pfgk
+FranklinGothic-BookOblique pfgko
+FranklinGothic-Condensed pfgrrc
+FranklinGothic-Demi pfgd
+FranklinGothic-DemiOblique pfgdo
+FranklinGothic-ExtraCond pfgrro
+FranklinGothic-Heavy pfgh
+FranklinGothic-HeavyOblique pfgho
+FranklinGothic-Roman pfgr
+FreestyleScript pfsrw
+FrizQuadrata pfqr
+FrizQuadrata-Bold pfqb
+Frutiger-Black pfrc
+Frutiger-BlackItalic pfrci
+Frutiger-Bold pfrb
+Frutiger-BoldItalic pfrbi
+Frutiger-Italic pfri
+Frutiger-Light pfl
+Frutiger-LightItalic pfli
+Frutiger-Roman pfr
+Frutiger-UltraBlack pfru
+Futura pfur
+Futura-Bold pfub
+Futura-BoldOblique pfubo
+Futura-Book pfuk
+Futura-BookOblique pfuko
+Futura-CondExtraBoldObl pfuxoc
+Futura-Condensed pfurrc
+Futura-CondensedBold pfubrc
+Futura-CondensedBoldOblique pfuboc
+Futura-CondensedExtraBold pfuxrc
+Futura-CondensedLight pfulrc
+Futura-CondensedLightOblique pfuloc
+Futura-CondensedOblique pfuroc
+Futura-ExtraBold pfux
+Futura-ExtraBoldOblique pfuxo
+Futura-Heavy pfuh
+Futura-HeavyOblique pfuho
+Futura-Light pful
+Futura-LightOblique pfulo
+Futura-Oblique pfuro
+Galliard-Black pglc
+Galliard-BlackItalic pglci
+Galliard-Bold pglb
+Galliard-BoldItalic pglbi
+Galliard-Italic pglri
+Galliard-Roman pglr
+Galliard-Ultra pglu
+Galliard-UltraItalic pglui
+Garamond-Bold pgmb
+Garamond-BoldCondensed pgmbrc
+Garamond-BoldCondensedItalic pgmbic
+Garamond-BoldItalic pgmbi
+Garamond-Book pgmk
+Garamond-BookCondensed pgmkrc
+Garamond-BookCondensedItalic pgmkic
+Garamond-BookItalic pgmki
+Garamond-Light pgml
+Garamond-LightCondensed pgmlrc
+Garamond-LightCondensedItalic pgmlic
+Garamond-LightItalic pgmli
+Garamond-Ultra pgmu
+Garamond-UltraCondensed pgmurc
+Garamond-UltraCondensedItalic pgmuic
+Garamond-UltraItalic pgmui
+GaramondThree pg3r
+GaramondThree-Bold pg3b
+GaramondThree-BoldItalic pg3bi
+GaramondThree-BoldSC pg3bc
+GaramondThree-Italic pg3ri
+GaramondThree-SC pg3rc
+GarthGraphic pggr
+GarthGraphic-Black pggc
+GarthGraphic-Bold pggb
+GarthGraphic-BoldCondensed pggbrc
+GarthGraphic-BoldItalic pggbi
+GarthGraphic-Condensed pggrrc
+GarthGraphic-ExtraBold pggx
+GarthGraphic-Italic pggri
+GillSans pgsr
+GillSans-Bold pgsb
+GillSans-BoldCondensed pgsbrc
+GillSans-BoldItalic pgsbi
+GillSans-Condensed pgcrrc
+GillSans-ExtraBold pgcx
+GillSans-Italic pgsri
+GillSans-Light pgsl
+GillSans-LightItalic pgsli
+GillSans-UltraBold pgsu
+GillSans-UltraBoldCondensed pgsurc
+Giovanni-Black pgvc
+Giovanni-BlackItalic pgvci
+Giovanni-Bold pgvb
+Giovanni-BoldItalic pgvbi
+Giovanni-Book pgvk
+Giovanni-BookItalic pgvki
+Glypha pgpr
+Glypha-Black pgpc
+Glypha-BlackOblique pgpco
+Glypha-Bold pgpb
+Glypha-BoldOblique pgpbo
+Glypha-Light pgpl
+Glypha-LightOblique pgplo
+Glypha-Oblique pgpro
+Glypha-Thin pgprrt
+Glypha-ThinOblique pgprot
+Gothic-Thirteen pg1r
+GothicBBB-Medium-78-H zpgbm7h
+GothicBBB-Medium-78-V zpgbm7v
+GothicBBB-Medium-83pv-RKSJ-H zpgbm8rh
+GothicBBB-Medium-Add-H zpgbmah
+GothicBBB-Medium-Add-V zpgbmav
+GothicBBB-Medium-Ext-H zpgbmeh
+GothicBBB-Medium-Ext-V zpgbmev
+GothicBBB-Medium-H zpgbmh
+GothicBBB-Medium-V zpgbmv
+Goudy pgyr
+Goudy-Bold pgyb
+Goudy-BoldItalic pgybi
+Goudy-ExtraBold pgyx
+Goudy-Heavyface pgyh
+Goudy-HeavyfaceItalic pgyhi
+Goudy-Italic pgyri
+Goudy-SC pgyrc
+Granjon pgjr
+Granjon-Bold pgjb
+Granjon-Italic pgjri
+Granjon-SC pgjrc
+Helvetica phvr
+Helvetica-Black phvc
+Helvetica-BlackOblique phvco
+Helvetica-Bold phvb
+Helvetica-BoldOblique phvbo
+Helvetica-Compressed phvbrp
+Helvetica-Condensed phvrrc
+Helvetica-Condensed-Black phvcrc
+Helvetica-Condensed-BlackObl phvcoc
+Helvetica-Condensed-Bold phvbrc
+Helvetica-Condensed-BoldObl phvboc
+Helvetica-Condensed-Light phvlrc
+Helvetica-Condensed-LightObl phvloc
+Helvetica-Condensed-Oblique phvroc
+Helvetica-ExtraCompressed phvrrq
+Helvetica-Light phvl
+Helvetica-LightOblique phvlo
+Helvetica-Narrow phvrrn
+Helvetica-Narrow-Bold phvbrn
+Helvetica-Narrow-BoldOblique phvbon
+Helvetica-Narrow-Oblique phvron
+Helvetica-Oblique phvro
+Helvetica-UltraCompressed phvrru
+HelveticaInserat-Roman phir
+HelveticaNeue-Black phnc
+HelveticaNeue-BlackCond phncrc
+HelveticaNeue-BlackCondObl phncoc
+HelveticaNeue-BlackExt phncrx
+HelveticaNeue-BlackExtObl phncox
+HelveticaNeue-BlackItalic phnci
+HelveticaNeue-Bold phnb
+HelveticaNeue-BoldItalic phnbi
+HelveticaNeue-BoldCond phnbrc
+HelveticaNeue-BoldCondObl phnboc
+HelveticaNeue-BoldExt phnbrx
+HelveticaNeue-BoldExtObl phnbox
+HelveticaNeue-BoldOutline phnbl
+HelveticaNeue-Condensed phnrrc
+HelveticaNeue-CondensedObl phnroc
+HelveticaNeue-ExtBlackCond phnxrc
+HelveticaNeue-ExtBlackCondObl phnxoc
+HelveticaNeue-Extended phnrrx
+HelveticaNeue-ExtendedObl phnrox
+HelveticaNeue-Heavy phnh
+HelveticaNeue-HeavyCond phnhrc
+HelveticaNeue-HeavyCondObl phnhoc
+HelveticaNeue-HeavyExt phnhrx
+HelveticaNeue-HeavyExtObl phnhox
+HelveticaNeue-HeavyItalic phnhi
+HelveticaNeue-Italic phnri
+HelveticaNeue-Light phnl
+HelveticaNeue-LightCond phnlrc
+HelveticaNeue-LightCondObl phnloc
+HelveticaNeue-LightExt phnlrx
+HelveticaNeue-LightExtObl phnlox
+HelveticaNeue-LightItalic phnli
+HelveticaNeue-Medium phnm
+HelveticaNeue-MediumCond phnmrc
+HelveticaNeue-MediumCondObl phnmoc
+HelveticaNeue-MediumExt phnmrx
+HelveticaNeue-MediumExtObl phnmox
+HelveticaNeue-MediumItalic phnmi
+HelveticaNeue-Roman phnr
+HelveticaNeue-Thin phnrrt
+HelveticaNeue-ThinCond phnhrc
+HelveticaNeue-ThinCondObl phnhoc
+HelveticaNeue-ThinExt phnrrx
+HelveticaNeue-ThinExtObl phnrox
+HelveticaNeue-ThinItalic phnrit
+HelveticaNeue-UltraLigCond phnjrc
+HelveticaNeue-UltraLigCondObl phnjoc
+HelveticaNeue-UltraLigExt phnjrx
+HelveticaNeue-UltraLigExtObl phnjox
+HelveticaNeue-UltraLight phnj
+HelveticaNeue-UltraLightItal phnji
+HelveticaRounded-Black phrc
+HelveticaRounded-BlackObl phrco
+HelveticaRounded-Bold phrb
+HelveticaRounded-BoldCond phrbrc
+HelveticaRounded-BoldCondObl phrboc
+HelveticaRounded-BoldObl phrbo
+Hiroshige-Black phgc
+Hiroshige-BlackItalic phgci
+Hiroshige-Bold phgb
+Hiroshige-BoldItalic phgbi
+Hiroshige-Book phgk
+Hiroshige-BookItalic phgki
+Hiroshige-Medium phgm
+Hiroshige-MediumItalic phgmi
+Hobo phbr
+Imago-Book pimk
+Imago-BookItalic pimki
+Imago-ExtraBold pimx
+Imago-ExtraBoldItalic pimxi
+Imago-Light piml
+Imago-LightItalic pimli
+Imago-Medium pimm
+Imago-MediumItalic pimmi
+Impressum-Bold pipb
+Impressum-Italic pipri
+Impressum-Roman pipr
+Ironwood piwr
+Italia-Bold pitb
+Italia-Book pitk
+Italia-Medium pitm
+ItcEras-Bold perb
+ItcEras-Book perk
+ItcEras-Demi perd
+ItcEras-Light perl
+ItcEras-Medium perm
+ItcEras-Ultra peru
+ItcKabel-Bold pkbb
+ItcKabel-Book pkbk
+ItcKabel-Demi pkbd
+ItcKabel-Medium pkbm
+ItcKabel-Ultra pkbu
+ItcSymbol-Black pisc
+ItcSymbol-BlackItalic pisci
+ItcSymbol-Bold pisb
+ItcSymbol-BoldItalic pisbi
+ItcSymbol-Book pisk
+ItcSymbol-BookItalic piski
+ItcSymbol-Medium pism
+ItcSymbol-MediumItalic pismi
+JansonText-Bold pjnb
+JansonText-BoldItalic pjnbi
+JansonText-Italic pjnri
+JansonText-Roman pjnr
+JansonText-RomanSC pjnrc
+JoannaMT pjor
+JoannaMT-Bold pjob
+JoannaMT-BoldItalic pjobi
+JoannaMT-ExtraBold pjox
+JoannaMT-Italic pjori
+JoannaMT-SemiBold pjos
+JoannaMT-SemiBoldItalic pjosi
+Juniper pjpr
+Kaufmann pkur
+Kaufmann-Bold pkub
+Korinna-Bold pkrb
+Korinna-KursivBold pkrbi
+Korinna-KursivRegular pkrri
+Korinna-Regular pkrr
+KuenstlerScript-Black pkscw
+KuenstlerScript-Medium pksmw
+KuenstlerScript-TwoBold pksr2w
+Leawood-Black plwc
+Leawood-BlackItalic plwci
+Leawood-Bold plwb
+Leawood-BoldItalic plwbi
+Leawood-Book plwk
+Leawood-BookItalic plwki
+Leawood-Medium plwm
+Leawood-MediumItalic plwmi
+LetterGothic plgr
+LetterGothic-Bold plgb
+LetterGothic-BoldSlanted plgbo
+LetterGothic-Slanted plgro
+Life-Bold plfb
+Life-Italic plfri
+Life-Roman plfr
+Linoscript plnrw
+Linotext plnr
+Lithos-Black ploc
+Lithos-Bold plob
+Lithos-ExtraLight ploi
+Lithos-Light plol
+Lithos-Regular plor
+LubalinGraph-Book plbk
+LubalinGraph-BookOblique plbko
+LubalinGraph-Demi plbd
+LubalinGraph-DemiOblique plbdo
+Lucida plcr
+Lucida-Bold plcb
+Lucida-BoldItalic plcbi
+Lucida-Italic plcri
+LucidaMath-Extension plcv
+LucidaMath-Italic plcm
+LucidaMath-Symbol plcy
+LucidaSans plcrs
+LucidaSans-Bold plcbs
+LucidaSans-BoldItalic plcbsi
+LucidaSans-Italic plcrsi
+MICR zpmicr
+Machine pmhr
+Machine-Bold phmb
+Maximus pmxr
+MediciScript pmirw
+Melior pmlr
+Melior-Bold pmlb
+Melior-BoldItalic pmlbi
+Melior-Italic pmlri
+Memphis-Bold pmpb
+Memphis-BoldItalic pmpbi
+Memphis-ExtraBold pmpx
+Memphis-Light pmpl
+Memphis-LightItalic pmpli
+Memphis-Medium pmpm
+Memphis-MediumItalic pmpmi
+Meridien-Bold pmdb
+Meridien-BoldItalic pmdbi
+Meridien-Italic pmdri
+Meridien-Medium pmdm
+Meridien-MediumItalic pmdmi
+Meridien-Roman pmdr
+Mesquite pmqr
+Minion-Black pmnc
+Minion-Bold pmnb
+Minion-BoldItalic pmnbi
+Minion-DisplayItalic pmnrdi
+Minion-DisplayRegular pmnrd
+Minion-Italic pmnri
+Minion-Ornaments pmnrp
+Minion-Regular pmnr
+Minion-Semibold pmns
+Minion-SemiboldItalic pmnsi
+Minion-SwashDisplayItalic pmnrwdi
+Minion-SwashItalic pmnrwi
+Minion-SwashSemiboldItalic pmnswi
+MinionExp-Black pmncx
+MinionExp-Bold pmnbx
+MinionExp-BoldItalic pmnbxi
+MinionExp-DisplayItalic pmnrxdi
+MinionExp-DisplayRegular pmnrxd
+MinionExp-Italic pmnrxi
+MinionExp-Regular pmnrx
+MinionExp-Semibold pmnrxs
+MinionExp-SemiboldItalic pmnrxsi
+Minister-Black pmtc
+Minister-BlackItalic pmtci
+Minister-Bold pmtb
+Minister-BoldItalic pmtbi
+Minister-Book pmtk
+Minister-BookItalic pmtki
+Minister-Light pmtl
+Minister-LightItalic pmtli
+Mistral pmsr
+NeuzeitS-Book pnzk
+NeuzeitS-BookHeavy pnzh
+NewAster pnar
+NewAster-Black pnac
+NewAster-BlackItalic pnaci
+NewAster-Bold pnab
+NewAster-BoldItalic pnabi
+NewAster-Italic pnari
+NewAster-SemiBold pnas
+NewAster-SemiBoldItalic pnasi
+NewBaskerville-Bold pnbb
+NewBaskerville-BoldItalic pnbbi
+NewBaskerville-Italic pnbri
+NewBaskerville-Roman pnbr
+NewBaskerville-SC pnbrc
+NewCaledonia pndr
+NewCaledonia-Black pndc
+NewCaledonia-BlackItalic pndci
+NewCaledonia-Bold pndb
+NewCaledonia-BoldItalic pndbi
+NewCaledonia-Italic pndri
+NewCaledonia-SC pndrc
+NewCaledonia-SemiBold pnds
+NewCaledonia-SemiBoldItalic pndsi
+NewCenturySchlbk-Bold pncb
+NewCenturySchlbk-BoldItalic pncbi
+NewCenturySchlbk-Italic pncri
+NewCenturySchlbk-Roman pncr
+NewsGothic pngr
+NewsGothic-Bold pngb
+NewsGothic-BoldOblique pngbo
+NewsGothic-Oblique pngro
+Nofret-Bold pnfb
+Nofret-BoldItalic pnfbi
+Nofret-Italic pnfri
+Nofret-Light pnfl
+Nofret-LightItalic pnfli
+Nofret-Medium pnfm
+Nofret-MediumItalic pnfmi
+Nofret-Regular pnfr
+Novarese-Bold pnvb
+Novarese-BoldItalic pnvbi
+Novarese-Book pnvk
+Novarese-BookItalic pnvki
+Novarese-Medium pnvm
+Novarese-MediumItalic pnvmi
+Novarese-Ultra pnvu
+NuptialScript pnurw
+OCRA poar
+OCRB pobr
+OldStyleSeven po7r
+OldStyleSeven-Italic po7ri
+OldStyleSeven-SC po7rc
+Olympian poyr
+Olympian-Bold poyb
+Olympian-BoldItalic poybi
+Olympian-Italic poyri
+Optima popr
+Optima-Bold popb
+Optima-BoldOblique popbo
+Optima-Oblique popro
+Orator porr
+Orator-Slanted porro
+Palatino-Bold pplb
+Palatino-BoldItalic pplbi
+Palatino-Italic pplri
+Palatino-Roman pplr
+Palatino-SC pplrc
+Parisian ppsr
+ParkAvenue ppar
+Peignot-Bold ppgb
+Peignot-Demi ppgd
+Peignot-Light ppgl
+Perpetua pppr
+Perpetua-Bold pppb
+Perpetua-BoldItalic pppbi
+Perpetua-Italic pppri
+Plantin ppir
+Plantin-Bold ppib
+Plantin-BoldCondensed ppibrc
+Plantin-BoldItalic ppibi
+Plantin-Italic ppiri
+Plantin-Light ppil
+Plantin-LightItalic ppili
+Plantin-Semibold ppis
+Plantin-SemiboldItalic ppisi
+Ponderosa ppor
+PostAntiqua-Bold ppqb
+PostAntiqua-Roman ppqr
+Present pptr
+PrestigeElite pper
+PrestigeElite-Bold ppeb
+PrestigeElite-BoldSlanted ppebo
+PrestigeElite-Slanted ppero
+Quorum-Black pqrc
+Quorum-Bold pqrb
+Quorum-Book pqrk
+Quorum-Light pqrl
+Quorum-Medium pqrm
+Raleigh prar
+Raleigh-Bold prab
+Raleigh-DemiBold prad
+Raleigh-Medium pram
+Reporter-Two prpr2
+Revue prvr
+Rockwell prwr
+Rockwell-Bold prwb
+Rockwell-BoldCondensed prwbrc
+Rockwell-BoldItalic prwbi
+Rockwell-Condensed prwrrc
+Rockwell-ExtraBold prwx
+Rockwell-Italic prwri
+Rockwell-Light prwl
+Rockwell-LightItalic prwli
+RotisSansSerif prors
+RotisSansSerif-Bold probs
+RotisSansSerif-ExtraBold proxs
+RotisSansSerif-Italic proris
+RotisSansSerif-Light prols
+RotisSansSerif-LightItalic prolis
+RotisSemiSans pro
+RotisSemiSans-Bold pro
+RotisSemiSans-ExtraBold prox1
+RotisSemiSans-Italic pror1i
+RotisSemiSans-Light prol1
+RotisSemiSans-LightItalic prol1i
+RotisSemiSerif pror1
+RotisSemiSerif-Bold prob1
+RotisSerif pror
+RotisSerif-Bold prob
+RotisSerif-Italic prori
+RussellSquare prqr
+RussellSquare-Oblique prqro
+Ryumin-Light-78-H zpryl7h
+Ryumin-Light-78-V zpryl7v
+Ryumin-Light-83pv-RKSJ-H zpryl8rh
+Ryumin-Light-Add-H zprylah
+Ryumin-Light-Add-V zprylav
+Ryumin-Light-Ext-H zpryleh
+Ryumin-Light-Ext-V zprylev
+Ryumin-Light-H zprylh
+Ryumin-Light-V zprylv
+Sabon-Bold psbb
+Sabon-BoldItalic psbbi
+Sabon-Italic psbri
+Sabon-Roman psbr
+Sabon-RomanSC psbrc
+SerifGothic psgr
+SerifGothic-Black psgc
+SerifGothic-Bold psgb
+SerifGothic-ExtraBold psgx
+SerifGothic-Heavy psgh
+SerifGothic-Light psgl
+Serifa-Black psfc
+Serifa-Bold psfb
+Serifa-Italic psfri
+Serifa-Light psfl
+Serifa-LightItalic psfli
+Serifa-Roman psfr
+Serpentine-Bold pspb
+Serpentine-BoldOblique pspbo
+Serpentine-Light pspl
+Serpentine-LightOblique psplo
+Serpentine-Medium pspm
+Serpentine-MediumOblique pspmo
+Shannon-Bold pshb
+Shannon-Book pshk
+Shannon-ExtraBold pshx
+Shannon-Oblique pshro
+SimonciniGaramond pigr
+SimonciniGaramond-Bold pigb
+SimonciniGaramond-Italic pigri
+Slimbach-Black pscc
+Slimbach-BlackItalic pscci
+Slimbach-Bold pscb
+Slimbach-BoldItalic pscbi
+Slimbach-Book psck
+Slimbach-BookItalic pscki
+Slimbach-Medium pscm
+Slimbach-MediumItalic pscmi
+SnellRoundhand-BlackScript psrcw
+SnellRoundhand-BoldScript psrbw
+SnellRoundhand-Script psrrw
+Sonata psor
+Souvenir-Bold psvb
+Souvenir-BoldItalic psvbi
+Souvenir-Demi psvd
+Souvenir-DemiItalic psvdi
+Souvenir-Light psvl
+Souvenir-LightItalic psvli
+Souvenir-Medium psvm
+Souvenir-MediumItalic psvmi
+Spartan-BookClassified psnk
+Spartan-HeavyClassified psnh
+StempelGaramond-Bold pegb
+StempelGaramond-BoldItalic pegbi
+StempelGaramond-Italic pegri
+StempelGaramond-Roman pegr
+StempelGaramond-RomanSC pegrc
+StempelSchneidler-Black pssc
+StempelSchneidler-BlackItalic pssci
+StempelSchneidler-Bold pssb
+StempelSchneidler-BoldItalic pssbi
+StempelSchneidler-Italic pssri
+StempelSchneidler-Light pssl
+StempelSchneidler-LightItalic pssli
+StempelSchneidler-MedItalic pssmi
+StempelSchneidler-Medium pssm
+StempelSchneidler-Roman pssr
+Stencil pslr
+StoneInformal pstrn
+StoneInformal-Bold pstbn
+StoneInformal-BoldItalic pstbni
+StoneInformal-Italic pstrni
+StoneInformal-Semibold pstsn
+StoneInformal-SemiboldItalic pstsbni
+StoneSans pstrs
+StoneSans-Bold pstbs
+StoneSans-BoldItalic pstbsi
+StoneSans-Italic pst
+StoneSans-Semibold pstss
+StoneSans-SemiboldItalic pstssi
+StoneSerif pstr
+StoneSerif-Bold pstb
+StoneSerif-BoldItalic pstbi
+StoneSerif-Italic pstri
+StoneSerif-Semibold psts
+StoneSerif-SemiboldItalic pstsi
+Symbol psyr
+Syntax-Black psxc
+Syntax-Bold psxb
+Syntax-Italic psxri
+Syntax-Roman psxr
+Syntax-UltraBlack psxu
+Tekton ptkr
+Tekton-Bold ptkb
+Tekton-BoldOblique ptkbo
+Tekton-Oblique ptkro
+Tempo-HeavyCondensed ptphrc
+Tempo-HeavyCondensedItalic ptphic
+Tiffany ptfr
+Tiffany-Demi ptfd
+Tiffany-DemiItalic ptfdi
+Tiffany-Heavy ptfh
+Tiffany-HeavyItalic ptfhi
+Tiffany-Italic ptfri
+Times-Bold ptmb
+Times-BoldItalic ptmbi
+Times-BoldSC ptmbc
+Times-ExtraBold ptmx
+Times-Italic ptmri
+Times-Roman ptmr
+Times-RomanSC ptmrc
+Times-Semibold ptms
+Times-SemiboldItalic ptmsi
+TimesEuropa-Bold pteb
+TimesEuropa-BoldItalic ptebi
+TimesEuropa-Italic pteri
+TimesEuropa-Roman pter
+TimesNewRomanPS pntr
+TimesNewRomanPS-Bold pntb
+TimesNewRomanPS-BoldItalic pntbi
+TimesNewRomanPS-Italic pntri
+TimesTen-Bold ptmb10
+TimesTen-BoldItalic ptmbi10
+TimesTen-Italic ptmri10
+TimesTen-Roman ptmr10
+TimesTen-RomanSC ptmrc10
+TradeGothic ptgr
+TradeGothic-Bold ptgb
+TradeGothic-BoldCondTwenty ptgb20c
+TradeGothic-BoldCondTwentyObl ptgb20oc
+TradeGothic-BoldOblique ptgbo
+TradeGothic-BoldTwo ptgb2
+TradeGothic-BoldTwoOblique ptgb2o
+TradeGothic-CondEighteen ptgr18c
+TradeGothic-CondEighteenObl ptgr18oc
+TradeGothic-Light ptgl
+TradeGothic-LightOblique ptglo
+TradeGothic-Oblique ptgro
+Trajan-Bold ptjb
+Trajan-Regular ptjr
+TrumpMediaeval-Bold ptvb
+TrumpMediaeval-BoldItalic ptvbi
+TrumpMediaeval-Italic ptvri
+TrumpMediaeval-Roman ptvr
+Umbra pumr
+Univers punr
+Univers-Black punc
+Univers-BlackExt puncrx
+Univers-BlackExtObl puncox
+Univers-BlackOblique punco
+Univers-Bold punb
+Univers-BoldExt punbrx
+Univers-BoldExtObl punbox
+Univers-BoldOblique punbo
+Univers-Condensed punrrc
+Univers-CondensedBold punbrc
+Univers-CondensedBoldOblique punboc
+Univers-CondensedLight punlrc
+Univers-CondensedLightOblique punloc
+Univers-CondensedOblique punroc
+Univers-Extended punrrx
+Univers-ExtendedObl punrox
+Univers-ExtraBlack punx
+Univers-ExtraBlackExt punxrx
+Univers-ExtraBlackExtObl punxox
+Univers-ExtraBlackObl punxo
+Univers-Light punl
+Univers-LightOblique punlo
+Univers-LightUltraCondensed punlro
+Univers-Oblique punro
+Univers-ThinUltraCondensed punhro
+Univers-UltraCondensed punrro
+Universal-GreekwithMathPi pulrk
+UniversityRoman puyr
+Usherwood-Black puwc
+Usherwood-BlackItalic puwci
+Usherwood-Bold puwb
+Usherwood-BoldItalic puwbi
+Usherwood-Book puwk
+Usherwood-BookItalic puwki
+Usherwood-Medium puwm
+Usherwood-MediumItalic puwmi
+Utopia-Black putc
+Utopia-Bold putb
+Utopia-BoldItalic putbi
+Utopia-Italic putri
+Utopia-Ornaments putro
+Utopia-Regular putr
+Utopia-Semibold puts
+Utopia-SemiboldItalic putsi
+Utopia-Titling putrd
+UtopiaExp-Black putcx
+UtopiaExp-Bold putbx
+UtopiaExp-BoldItalic putbxi
+UtopiaExp-Italic putrxi
+UtopiaExp-Regular putrx
+UtopiaExp-Semibold putsx
+UtopiaExp-SemiboldItalic putsxi
+VAGRounded-Black pvrc
+VAGRounded-Bold pvrb
+VAGRounded-Light pvrl
+VAGRounded-Thin pvrrrt
+Veljovic-Black pvjc
+Veljovic-BlackItalic pvjci
+Veljovic-Bold pvjb
+Veljovic-BoldItalic pvjbi
+Veljovic-Book pvjk
+Veljovic-BookItalic pvjki
+Veljovic-Medium pvjm
+Veljovic-MediumItalic pvjmi
+Versailles-Black pvlc
+Versailles-BlackItalic pvlci
+Versailles-Bold pvlb
+Versailles-BoldItalic pvlbi
+Versailles-Italic pvlri
+Versailles-Light pvll
+Versailles-LightItalic pvlli
+Versailles-Roman pvlr
+Walbaum-Bold pwbb
+Walbaum-BoldItalic pwbbi
+Walbaum-Italic pwbri
+Walbaum-Roman pwbr
+Walbaum-RomanSC pwbrc
+Weidemann-Black pwdc
+Weidemann-BlackItalic pwdci
+Weidemann-Bold pwdb
+Weidemann-BoldItalic pwdbi
+Weidemann-Book pwdk
+Weidemann-BookItalic pwdki
+Weidemann-Medium pwdm
+Weidemann-MediumItalic pwdmi
+Weiss pwsr
+Weiss-Bold pwsb
+Weiss-ExtraBold pwsx
+Weiss-Italic pwsri
+Wilke-Black pwkc
+Wilke-BlackItalic pwkci
+Wilke-Bold pwkb
+Wilke-BoldItalic pwkbi
+Wilke-Italic pwkri
+Wilke-Roman pwkr
+WoodtypeOrnaments-One pworp
+ZapfChancery-Bold pzcb
+ZapfChancery-Demi pzcd
+ZapfChancery-Italic pzcri
+ZapfChancery-Light pzcl
+ZapfChancery-LightItalic pzcli
+ZapfChancery-MediumItalic pzcmi
+ZapfChancery-Roman pzcr
+ZapfDingbats pzdr
diff --git a/Build/source/texk/dvipsk/afm2tfm.1 b/Build/source/texk/dvipsk/afm2tfm.1
new file mode 100644
index 00000000000..32822173aa4
--- /dev/null
+++ b/Build/source/texk/dvipsk/afm2tfm.1
@@ -0,0 +1,25 @@
+.\" man page for afm2tfm
+.TH AFM2TFM 1 "9 August 1990"
+.SH NAME
+afm2tfm \- convert Adobe font metrics to TeX font metrics
+.SH DESCRIPTION
+PostScript fonts are (or should be) accompanied by font metric files
+such as
+.B Times-Roman.afm,
+which describes the characteristics of the font called Times-Roman.
+To use such fonts with TeX, we need TFM files that contain similar
+information. This program does that conversion. For more
+information, print out the dvips manual.
+.SH FILES
+.I psfonts.map
+in the config directory used by dvips (update this).
+.br
+.I ../afm/Makefile
+in the dvips sources (look at this for examples).
+.SH "SEE ALSO"
+dvips(1), tex(1), vptovf(1)
+.SH BUGS
+An option to add letterspacing to the virtual font was rejected by Knuth
+because it would make the fi and fl ligatures break the normal rhythmic pattern.
+.SH AUTHORS
+Tomas Rokicki <rokicki@cs.stanford.edu> and Donald E. Knuth
diff --git a/Build/source/texk/dvipsk/afm2tfm.c b/Build/source/texk/dvipsk/afm2tfm.c
new file mode 100644
index 00000000000..c8601f58379
--- /dev/null
+++ b/Build/source/texk/dvipsk/afm2tfm.c
@@ -0,0 +1,2080 @@
+/* Public domain, originally written by Tom Rokicki.
+ * This program converts AFM files to TeX TFM files, and optionally
+ * to TeX VPL files that retain all kerning and ligature information.
+ * Both files make the characters not normally encoded by TeX available
+ * by character codes greater than 127.
+ */
+
+/* (Modified by Don Knuth from Tom Rokicki's pre-VPL version.) */
+/* VM/CMS port by J. Hafner (hafner@almaden.ibm.com), based on
+ * the port by Alessio Guglielmi (guglielmi@ipisnsib.bitnet)
+ * and Marco Prevedelli (prevedelli@ipisnsva.bitnet).
+ * This port is still in test state. No guarantees.
+ * 11/3/92: more corrections to VM/CMS port. Now it looks correct
+ * and will be supported by J. Hafner.
+ *
+ */
+/*
+ * More changes, primarily from Karl Berry, enough for a new version
+ * number to 8.0; 1 December 1996. Note that this version computes
+ * checksums differently (more intelligently).
+ */
+
+#ifdef KPATHSEA
+#include "config.h"
+#include <kpathsea/c-ctype.h>
+#include <kpathsea/progname.h>
+#include <math.h>
+#else /* ! KPATHSEA */
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#if defined(SYSV) || defined(VMS) || defined(__THINK__) || defined(MSDOS) || defined(OS2) || defined(ATARIST) || defined(WIN32)
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include <math.h>
+#ifdef ATARIST
+#include <float.h>
+#endif
+#endif /* KPATHSEA */
+
+/* JLH: added these to make the code easier to read and remove some
+ ascii<->ebcdic dependencies */
+#define ASCII_A 65
+#define ASCII_Z 90
+#define ASCII_a 97
+#define ASCII_z 122
+#define ASCII_0 48
+#define ASCII_9 57
+
+#ifdef VMCMS
+#define interesting lookstr /* for 8 character truncation conflicts */
+#include "dvipscms.h"
+extern FILE *cmsfopen() ;
+extern char ebcdic2ascii[] ;
+extern char ascii2ebcdic[] ;
+#ifdef fopen
+#undef fopen
+#endif
+#define fopen cmsfopen
+#endif
+
+#include "dvips.h"
+/* debug.h redefines fopen to my_real_fopen */
+#ifdef fopen
+#undef fopen
+#endif
+
+struct encoding {
+ char *name ;
+ char *vec[256] ;
+} ;
+struct encoding staticencoding = {
+ "TeX text",
+ {"Gamma", "Delta", "Theta", "Lambda", "Xi", "Pi", "Sigma",
+ "Upsilon", "Phi", "Psi", "Omega", "arrowup", "arrowdown", "quotesingle",
+ "exclamdown", "questiondown", "dotlessi", "dotlessj", "grave", "acute",
+ "caron", "breve", "macron", "ring", "cedilla", "germandbls", "ae", "oe",
+ "oslash", "AE", "OE", "Oslash", "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", "dieresis", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "" } } ;
+/*
+ * It's easier to put this in static storage and parse it as we go
+ * than to build the structures ourselves.
+ */
+char *staticligkern[] = {
+ "% LIGKERN space l =: lslash ; space L =: Lslash ;",
+ "% LIGKERN question quoteleft =: questiondown ;",
+ "% LIGKERN exclam quoteleft =: exclamdown ;",
+ "% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;",
+ "% LIGKERN quoteleft quoteleft =: quotedblleft ;",
+ "% LIGKERN quoteright quoteright =: quotedblright ;",
+ "% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;",
+ "% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;",
+ "% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;",
+ "% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;",
+ "% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;",
+ "% LIGKERN nine {} * ; * {} nine ;",
+/* Kern accented characters the same way as their base. */
+ "% LIGKERN Aacute <> A ; aacute <> a ;",
+ "% LIGKERN Acircumflex <> A ; acircumflex <> a ;",
+ "% LIGKERN Adieresis <> A ; adieresis <> a ;",
+ "% LIGKERN Agrave <> A ; agrave <> a ;",
+ "% LIGKERN Aring <> A ; aring <> a ;",
+ "% LIGKERN Atilde <> A ; atilde <> a ;",
+ "% LIGKERN Ccedilla <> C ; ccedilla <> c ;",
+ "% LIGKERN Eacute <> E ; eacute <> e ;",
+ "% LIGKERN Ecircumflex <> E ; ecircumflex <> e ;",
+ "% LIGKERN Edieresis <> E ; edieresis <> e ;",
+ "% LIGKERN Egrave <> E ; egrave <> e ;",
+ "% LIGKERN Iacute <> I ; iacute <> i ;",
+ "% LIGKERN Icircumflex <> I ; icircumflex <> i ;",
+ "% LIGKERN Idieresis <> I ; idieresis <> i ;",
+ "% LIGKERN Igrave <> I ; igrave <> i ;",
+ "% LIGKERN Ntilde <> N ; ntilde <> n ;",
+ "% LIGKERN Oacute <> O ; oacute <> o ;",
+ "% LIGKERN Ocircumflex <> O ; ocircumflex <> o ;",
+ "% LIGKERN Odieresis <> O ; odieresis <> o ;",
+ "% LIGKERN Ograve <> O ; ograve <> o ;",
+ "% LIGKERN Oslash <> O ; oslash <> o ;",
+ "% LIGKERN Otilde <> O ; otilde <> o ;",
+ "% LIGKERN Scaron <> S ; scaron <> s ;",
+ "% LIGKERN Uacute <> U ; uacute <> u ;",
+ "% LIGKERN Ucircumflex <> U ; ucircumflex <> u ;",
+ "% LIGKERN Udieresis <> U ; udieresis <> u ;",
+ "% LIGKERN Ugrave <> U ; ugrave <> u ;",
+ "% LIGKERN Yacute <> Y ; yacute <> y ;",
+ "% LIGKERN Ydieresis <> Y ; ydieresis <> y ;",
+ "% LIGKERN Zcaron <> Z ; zcaron <> z ;",
+/*
+ * These next are only included for deficient afm files that
+ * have the lig characters but not the lig commands.
+ */
+ "% LIGKERN f i =: fi ; f l =: fl ; f f =: ff ; ff i =: ffi ;",
+ "% LIGKERN ff l =: ffl ;",
+ 0 } ;
+/*
+ * The above layout corresponds to TeX Typewriter Type and is compatible
+ * with TeX Text because the position of ligatures is immaterial.
+ */
+struct encoding *outencoding = 0 ;
+struct encoding *inencoding = 0 ;
+char *outenname = NULL,
+ *inenname = NULL;/* the file names for input and output encodings */
+int boundarychar = -1 ; /* the boundary character */
+int ignoreligkern ; /* do we look at ligkern info in the encoding? */
+/*
+ * This is what we store Adobe data in.
+ */
+struct adobeinfo {
+ struct adobeinfo *next ;
+ int adobenum, texnum, width ;
+ char *adobename ;
+ int llx, lly, urx, ury ;
+ struct lig *ligs ;
+ struct kern *kerns ;
+ struct adobeptr *kern_equivs ;
+ struct pcc *pccs ;
+ int wptr, hptr, dptr, iptr ;
+} *adobechars, *adobeptrs[256], *texptrs[256],
+ *uppercase[256], *lowercase[256] ;
+int nexttex[256] ; /* for characters encoded multiple times in output */
+/*
+ * These are the eight ligature ops, in VPL terms and in METAFONT terms.
+ */
+char *vplligops[] = {
+ "LIG", "/LIG", "/LIG>", "LIG/", "LIG/>", "/LIG/", "/LIG/>", "/LIG/>>", 0
+} ;
+char *encligops[] = {
+ "=:", "|=:", "|=:>", "=:|", "=:|>", "|=:|", "|=:|>", "|=:|>>", 0
+} ;
+struct lig {
+ struct lig *next ;
+ char *succ, *sub ;
+ short op, boundleft ;
+} ;
+struct kern {
+ struct kern *next ;
+ char *succ ;
+ int delta ;
+} ;
+struct adobeptr {
+ struct adobeptr *next;
+ struct adobeinfo *ch;
+};
+struct pcc {
+ struct pcc *next ;
+ char * partname ;
+ int xoffset, yoffset ;
+} ;
+
+FILE *afmin, *vplout, *tfmout ;
+char inname[200], outname[200] ; /* names of input and output files */
+char tmpstr[200] ; /* a buffer for one string */
+#define INBUFSIZE 1024
+char buffer[INBUFSIZE+10]; /* input buffer (modified while parsing) */
+char obuffer[INBUFSIZE+10] ; /* unmodified copy of input buffer */
+char *param ; /* current position in input buffer */
+char *fontname = "Unknown" ;
+char *codingscheme = "Unspecified" ;
+#ifdef VMCMS
+char *ebfontname ;
+char *ebcodingscheme ;
+#endif
+float italicangle = 0.0 ;
+char fixedpitch ;
+char makevpl ;
+char pedantic ;
+int xheight = 400 ;
+int fontspace ;
+int bc, ec ;
+long cksum ;
+float efactor = 1.0, slant = 0.0 ;
+float capheight = 0.8 ;
+char *efactorparam, *slantparam ;
+double newslant ;
+char titlebuf[500] ;
+
+void
+error P1C(register char *, s)
+{
+ (void)fprintf(stderr, "%s\n", s) ;
+ if (obuffer[0]) {
+ (void)fprintf(stderr, "%s\n", obuffer) ;
+ while (param > buffer) {
+ (void)fprintf(stderr, " ") ;
+ param-- ;
+ }
+ (void)fprintf(stderr, "^\n") ;
+ }
+ if (*s == '!')
+ exit(1) ;
+}
+
+int
+transform P2C(register int, x, register int, y)
+{
+ register double acc ;
+ acc = efactor * x + slant *y ;
+ return (int)(acc>=0? floor(acc+0.5) : ceil(acc-0.5) ) ;
+}
+
+int
+getline P1H(void) {
+ register char *p ;
+ register int c ;
+
+ param = buffer ;
+ for (p=buffer; (c=getc(afmin)) != EOF;) {
+ if (p - buffer >= INBUFSIZE)
+ error("! input line too long; perhaps input file is malformed?") ;
+ *p++ = c ;
+ if (c == '\r') {
+ c = getc(afmin) ;
+ if (c != EOF) {
+ if (c == '\n') {
+ *p++ = c ;
+ } else {
+ ungetc(c, afmin) ;
+ }
+ }
+ break ;
+ } else if (c == '\n') {
+ break ;
+ }
+ }
+ *p = 0 ;
+ (void)strcpy(obuffer, buffer) ;
+ if (p == buffer && c == EOF)
+ return(0) ;
+ else
+ return(1) ;
+}
+
+char *interesting[] = { "FontName", "ItalicAngle", "IsFixedPitch",
+ "XHeight", "C", "KPX", "CC", "EncodingScheme", NULL} ;
+#define FontName (0)
+#define ItalicAngle (1)
+#define IsFixedPitch (2)
+#define XHeight (3)
+#define C (4)
+#define KPX (5)
+#define CC (6)
+#define EncodingScheme (7)
+#define NONE (-1)
+int
+interest P1C(char *, s)
+{
+ register char **p ;
+ register int n ;
+
+ for (p=interesting, n=0; *p; p++, n++)
+ if (strcmp(s, *p)==0)
+ return(n) ;
+ return(NONE) ;
+}
+
+char *
+mymalloc P1C(unsigned long, len)
+{
+ register char *p ;
+ int i ;
+
+#ifdef SMALLMALLOC
+ if (len > 65500L)
+ error("! can't allocate more than 64K!") ;
+#endif
+ p = (char *) malloc((unsigned)len) ;
+ if (p==NULL)
+ error("! out of memory") ;
+ for (i=0; i<len; i++)
+ p[i] = 0 ;
+ return(p) ;
+}
+
+char *
+newstring P1C(char *, s)
+{
+ char *q = mymalloc((unsigned long)(strlen(s) + 1)) ;
+ (void)strcpy(q, s) ;
+ return q ;
+}
+
+char *
+paramnewstring P1H(void) {
+ register char *p, *q ;
+
+ p = param ;
+ while (*p > ' ')
+ p++ ;
+ if (*p != 0)
+ *p++ = 0 ;
+ q = newstring(param) ;
+ while (*p && *p <= ' ')
+ p++ ;
+ param = p ;
+ return(q) ;
+}
+
+char *
+paramstring P1H(void) {
+ register char *p, *q ;
+
+ p = param ;
+ while (*p > ' ')
+ p++ ;
+ q = param ;
+ if (*p != 0)
+ *p++ = 0 ;
+ while (*p && *p <= ' ')
+ p++ ;
+ param = p ;
+ return(q) ;
+}
+
+int
+paramnum P1H(void) {
+ register char *p ;
+ int i ;
+
+ p = paramstring() ;
+ if (sscanf(p, "%d", &i) != 1)
+ error("! integer expected") ;
+ return(i) ;
+}
+
+float
+paramfloat P1H(void) {
+ register char *p ;
+ float i ;
+
+ p = paramstring() ;
+ if (sscanf(p, "%f", &i) != 1)
+ error("! number expected") ;
+ return(i) ;
+}
+
+struct adobeinfo *
+newchar P1H(void) {
+ register struct adobeinfo *ai ;
+
+ ai = (struct adobeinfo *)mymalloc((unsigned long)sizeof(struct adobeinfo)) ;
+ ai->adobenum = -1 ;
+ ai->texnum = -1 ;
+ ai->width = -1 ;
+ ai->adobename = NULL ;
+ ai->llx = -1 ;
+ ai->lly = -1 ;
+ ai->urx = -1 ;
+ ai->ury = -1 ;
+ ai->ligs = NULL ;
+ ai->kerns = NULL ;
+ ai->kern_equivs = NULL ;
+ ai->pccs = NULL ;
+ ai->next = adobechars ;
+ adobechars = ai ;
+ return(ai) ;
+}
+
+struct kern *
+newkern P1H(void) {
+ register struct kern *nk ;
+
+ nk = (struct kern *)mymalloc((unsigned long)sizeof(struct kern)) ;
+ nk->next = NULL ;
+ nk->succ = NULL ;
+ nk->delta = 0 ;
+ return(nk) ;
+}
+
+struct pcc *
+newpcc P1H(void) {
+ register struct pcc *np ;
+
+ np = (struct pcc *)mymalloc((unsigned long)sizeof(struct pcc)) ;
+ np->next = NULL ;
+ np->partname = NULL ;
+ np->xoffset = 0 ;
+ np->yoffset = 0 ;
+ return(np) ;
+}
+
+struct lig *
+newlig P1H(void) {
+ register struct lig *nl ;
+
+ nl = (struct lig *)mymalloc((unsigned long)sizeof(struct lig)) ;
+ nl->next = NULL ;
+ nl->succ = NULL ;
+ nl->sub = NULL ;
+ nl->op = 0 ; /* the default =: op */
+ nl->boundleft = 0 ;
+ return(nl) ;
+}
+
+void
+expect P1C(char *, s)
+{
+ if (strcmp(paramstring(), s) != 0) {
+ (void)fprintf(stderr, "%s expected: ", s) ;
+ error("! syntax error") ;
+ }
+}
+
+void
+handlechar P1H(void) { /* an input line beginning with C */
+ register struct adobeinfo *ai ;
+ register struct lig *nl ;
+
+ ai = newchar() ;
+ ai->adobenum = paramnum() ;
+ expect(";") ;
+ expect("WX") ;
+ ai->width = transform(paramnum(),0) ;
+ if (ai->adobenum >= 0 && ai->adobenum < 256) {
+ adobeptrs[ai->adobenum] = ai ;
+ }
+ expect(";") ;
+/* Ignore vertical metrics information */
+ if (*param == 'W' && *(param + 1) == 'Y') {
+ expect("WY") ;
+ (void)paramnum() ;
+ expect(";") ;
+ }
+ expect("N") ;
+ ai->adobename = paramnewstring() ;
+ expect(";") ;
+ expect("B") ;
+ ai->llx = paramnum() ;
+ ai->lly = paramnum() ;
+ ai->llx = transform(ai->llx, ai->lly) ;
+ ai->urx = paramnum() ;
+ ai->ury = paramnum() ;
+ ai->urx = transform(ai->urx, ai->ury) ;
+/* We need to avoid negative heights or depths. They break accents in
+ math mode, among other things. */
+ if (ai->lly > 0)
+ ai->lly = 0 ;
+ if (ai->ury < 0)
+ ai->ury = 0 ;
+ expect(";") ;
+/* Now look for ligatures (which aren't present in fixedpitch fonts) */
+ while (*param == 'L' && !fixedpitch) {
+ expect("L") ;
+ nl = newlig() ;
+ nl->succ = paramnewstring() ;
+ nl->sub = paramnewstring() ;
+ nl->next = ai->ligs ;
+ ai->ligs = nl ;
+ expect(";") ;
+ }
+}
+
+struct adobeinfo *
+findadobe P1C(char *, p)
+{
+ register struct adobeinfo *ai ;
+
+ for (ai=adobechars; ai; ai = ai->next)
+ if (strcmp(p, ai->adobename)==0)
+ return(ai) ;
+ return(NULL) ;
+}
+
+
+/*
+ * The following comment no longer applies; we rely on the LIGKERN
+ * entries to kill space kerns. Also, the same applies to numbers.
+ *
+ * We ignore kerns before and after space characters, because (1) TeX
+ * is using the space only for Polish ligatures, and (2) TeX's
+ * boundarychar mechanisms are not oriented to kerns (they apply
+ * to both spaces and punctuation) so we don't want to use them.
+ */
+void
+handlekern P1H(void) { /* an input line beginning with KPX */
+ register struct adobeinfo *ai ;
+ register char *p ;
+ register struct kern *nk ;
+
+ p = paramstring() ;
+ ai = findadobe(p) ;
+ if (ai == NULL)
+ error("kern char not found") ;
+ else {
+ nk = newkern() ;
+ nk->succ = paramnewstring() ;
+ nk->delta = transform(paramnum(),0) ;
+ nk->next = ai->kerns ;
+ ai->kerns = nk ;
+ }
+}
+
+void
+handleconstruct P1H(void) { /* an input line beginning with CC */
+ register struct adobeinfo *ai ;
+ register char *p ;
+ register struct pcc *np ;
+ register int n ;
+ struct pcc *npp = NULL;
+
+ p = paramstring() ;
+ ai = findadobe(p) ;
+ if (ai == NULL)
+ error("! composite character name not found") ;
+ n = paramnum() ;
+ expect(";") ;
+ while (n--) {
+ if (strcmp(paramstring(),"PCC") != 0) return ;
+ /* maybe I should expect("PCC") instead, but I'm playing it safe */
+ np = newpcc() ;
+ np->partname = paramnewstring() ;
+ if (findadobe(np->partname)==NULL) return ;
+ np->xoffset = paramnum() ;
+ np->yoffset = paramnum() ;
+ np->xoffset = transform(np->xoffset, np->yoffset) ;
+ if (npp) npp->next = np ;
+ else ai->pccs = np ;
+ npp = np ;
+ expect(";") ;
+ }
+}
+
+struct encoding *readencoding P1H(char *) ;
+
+void
+makeaccentligs P1H(void) {
+ register struct adobeinfo *ai, *aci ;
+ register char *p ;
+ register struct lig *nl ;
+ for (ai=adobechars; ai; ai=ai->next) {
+ p = ai->adobename ;
+ if (strlen(p)>2)
+ if ((aci=findadobe(p+1)) && (aci->adobenum > 127)) {
+ nl = newlig() ;
+ nl->succ = mymalloc((unsigned long)2) ;
+ *(nl->succ + 1) = 0 ;
+ *(nl->succ) = *p ;
+ nl->sub = ai->adobename ;
+ nl->next = aci->ligs ;
+ aci->ligs = nl ;
+ }
+ }
+}
+
+void
+readadobe P1H(void) {
+ struct adobeinfo *ai ;
+#ifdef VMCMS
+ int i;
+#endif
+
+/*
+ * We allocate a placeholder boundary char.
+ */
+ ai = newchar() ;
+ ai->adobenum = -1 ;
+ ai->adobename = "||" ; /* boundary character name */
+ while (getline()) {
+ switch(interest(paramstring())) {
+case FontName:
+ fontname = paramnewstring() ;
+#ifdef VMCMS
+/* fontname comes in as ebcdic but we need it asciified for tfm file
+ so we save it in ebfontname and change it in fontname */
+ ebfontname = newstring(fontname) ;
+ i=0;
+ while(fontname[i] != '\0') {
+ fontname[i]=ebcdic2ascii[fontname[i]];
+ i++;
+ };
+#endif
+ break ;
+case EncodingScheme:
+ codingscheme = paramnewstring() ;
+#ifdef VMCMS
+/* for codingscheme, we do the same as we did for fontname */
+ ebcodingscheme = newstring(codingscheme) ;
+ i=0;
+ while(codingscheme[i] != '\0') {
+ codingscheme[i]=ebcdic2ascii[codingscheme[i]];
+ i++;
+ }
+#endif
+ break ;
+case ItalicAngle:
+ italicangle = paramfloat() ;
+ break ;
+case IsFixedPitch:
+ if (*param == 't' || *param == 'T')
+ fixedpitch = 1 ;
+ else
+ fixedpitch = 0 ;
+ break ;
+case XHeight:
+ xheight = paramnum() ;
+ break ;
+case C:
+ handlechar() ;
+ break ;
+case KPX:
+ handlekern() ;
+ break ;
+case CC:
+ handleconstruct() ;
+ break ;
+default:
+ break ;
+ }
+ }
+ fclose(afmin) ;
+ afmin = 0 ;
+}
+/*
+ * Re-encode the adobe font. Assumes that the header file will
+ * also contain the appropriate instructions!
+ */
+void
+handlereencoding P1H(void) {
+ if (inenname) {
+ int i ;
+ struct adobeinfo *ai ;
+ char *p ;
+
+ ignoreligkern = 1 ;
+ inencoding = readencoding(inenname) ;
+ for (i=0; i<256; i++)
+ if (0 != (ai=adobeptrs[i])) {
+ ai->adobenum = -1 ;
+ adobeptrs[i] = NULL ;
+ }
+ for (i=0; i<256; i++) {
+ p = inencoding->vec[i] ;
+ if (p && *p && strcmp(p, ".notdef") != 0 && 0 != (ai = findadobe(p))) {
+ ai->adobenum = i ;
+ adobeptrs[i] = ai ;
+ }
+ }
+ codingscheme = inencoding->name ;
+ }
+ ignoreligkern = 0 ;
+ if (outenname) {
+ outencoding = readencoding(outenname) ;
+ } else {
+ outencoding = readencoding((char *)0) ;
+ }
+}
+
+/*
+ * This routine reverses a list. We use it because we accumulate the
+ * adobeinfo list in reverse order, but when we go to map the
+ * characters, we would prefer to use the original ordering. It just
+ * makes more sense.
+ */
+struct adobeinfo *revlist P1C(struct adobeinfo *, p)
+{
+ struct adobeinfo *q = 0, *t ;
+
+ while (p) {
+ t = p->next ;
+ p->next = q ;
+ q = p ;
+ p = t ;
+ }
+ return q ;
+}
+
+void
+assignchars P1H(void) {
+ register char **p ;
+ register int i, j ;
+ register struct adobeinfo *ai, *pai ;
+ int nextfree = 128 ;
+ struct pcc *pcp ;
+
+/*
+ * First, we assign all those that match perfectly.
+ */
+ for (i=0, p=outencoding->vec; i<256; i++, p++)
+ if (*p && strcmp(*p, ".notdef") != 0 &&
+ (ai=findadobe(*p)) && (ai->adobenum >= 0 || ai->pccs != NULL)) {
+ if (ai->texnum >= 0)
+ nexttex[i] = ai->texnum ; /* linked list */
+ ai->texnum = i ;
+ texptrs[i] = ai ;
+ }
+ if (pedantic)
+ return ;
+/*
+ * Next, we assign all the others, retaining the adobe positions, possibly
+ * multiply assigning characters. Unless the output encoding was
+ * precisely specified.
+ */
+ for (ai=adobechars; ai; ai=ai->next)
+ if (ai->adobenum >= 0 && ai->adobenum <256
+ && ai->texnum < 0 && texptrs[ai->adobenum] == 0) {
+ ai->texnum = ai->adobenum ;
+ texptrs[ai->adobenum] = ai ;
+ }
+/*
+ * Finally, we map all remaining characters into free locations beginning
+ * with 128, if we know how to construct those characters. We need to
+ * make sure the component pieces are mapped.
+ */
+ adobechars = revlist(adobechars) ;
+ for (ai=adobechars; ai; ai=ai->next)
+ if (ai->texnum<0 && (ai->adobenum>=0 || ai->pccs != NULL)) {
+ while (texptrs[nextfree]) {
+ nextfree=(nextfree+1)&255 ;
+ if (nextfree==128) goto finishup ; /* all slots full */
+ }
+ ai->texnum = nextfree ;
+ texptrs[nextfree] = ai ;
+ }
+finishup:
+/*
+ * We now check all of the composite characters. If any of the
+ * components are not mapped, we unmap the composite character.
+ */
+ for (i=0; i<256; i++) {
+ ai = texptrs[i] ;
+ if (ai && ai->pccs != NULL && ai->texnum >= 0) {
+ for (pcp = ai->pccs; pcp; pcp = pcp->next) {
+ pai = findadobe(pcp->partname) ;
+ if (pai == NULL || pai->texnum < 0) {
+ texptrs[ai->texnum] = 0 ;
+ ai->texnum = -1 ;
+ break ;
+ }
+ }
+ }
+ }
+/*
+ * Now, if any of the characters are encoded multiple times, we want
+ * ai->texnum to be the first one assigned, since that is most likely
+ * to be the most important one. So we reverse the above lists.
+ */
+ for (ai=adobechars; ai; ai=ai->next)
+ if (ai->texnum >= 0 && ai->texnum < 256) {
+ j = -1 ;
+ while (nexttex[ai->texnum] >= 0) {
+ i = nexttex[ai->texnum] ;
+ nexttex[ai->texnum] = j ;
+ j = ai->texnum ;
+ ai->texnum = i ;
+ }
+ nexttex[ai->texnum] = j ;
+ }
+}
+
+void
+upmap P1H(void) { /* Compute uppercase mapping, when making a small caps font */
+ register struct adobeinfo *ai, *Ai ;
+ register char *p, *q ;
+ register struct pcc *np, *nq ;
+ int i ;
+ char lwr[50] ;
+
+/* JLH: changed some lines below to be ascii<->ebcdic independent
+ any reason we don't use 'isupper'?.
+ Looks like we should use isupper to me --karl. */
+ for (Ai=adobechars; Ai; Ai=Ai->next) {
+ p = Ai->adobename ;
+ if (isupper (*p)) {
+ q = lwr ;
+ for (; *p; p++)
+ *q++ = TOLOWER (*p);
+ *q = '\0'; /* changed this too! */
+
+ if (0 != (ai=findadobe(lwr))) {
+ for (i = ai->texnum; i >= 0; i = nexttex[i])
+ uppercase[i] = Ai ;
+ for (i = Ai->texnum; i >= 0; i = nexttex[i])
+ lowercase[i] = ai ;
+ }
+ }
+ }
+/* Note that, contrary to the normal true/false conventions,
+ * uppercase[i] is NULL and lowercase[i] is non-NULL when i is the
+ * ASCII code of an uppercase letter; and vice versa for lowercase letters */
+
+ if (0 != (ai=findadobe("germandbls")))
+ if (0 != (Ai=findadobe("S"))) { /* we also construct SS */
+ for (i=ai->texnum; i >= 0; i = nexttex[i])
+ uppercase[i] = ai ;
+ ai->adobenum = -1 ;
+ ai->width = Ai->width << 1 ;
+ ai->llx = Ai->llx ;
+ ai->lly = Ai->lly ;
+ ai->urx = Ai->width + Ai->urx ;
+ ai->ury = Ai->ury ;
+ ai->kerns = Ai->kerns ;
+ np = newpcc() ;
+ np->partname = "S" ;
+ nq = newpcc() ;
+ nq->partname = "S" ;
+ nq->xoffset = Ai->width ;
+ np->next = nq ;
+ ai->pccs = np ;
+ }
+ if ((ai=findadobe("dotlessi")))
+ for (i=ai->texnum; i >= 0; i = nexttex[i])
+ uppercase[i] = findadobe("I") ;
+ if ((ai=findadobe("dotlessj")))
+ for (i=ai->texnum; i >= 0; i = nexttex[i])
+ uppercase[i] = findadobe("J") ;
+}
+/* The logic above seems to work well enough, but it leaves useless characters
+ * like `fi' and `fl' in the font if they were present initially,
+ * and it omits characters like `dotlessj' if they are absent initially */
+
+/* Now we turn to computing the TFM file */
+
+int lf, lh, nw, nh, nd, ni, nl, nk, ne, np ;
+
+void
+write16 P1C(register short, what)
+{
+ (void)fputc(what >> 8, tfmout) ;
+ (void)fputc(what & 255, tfmout) ;
+}
+
+void
+writearr P2C(register long *, p, register int, n)
+{
+ while (n) {
+ write16((short)(*p >> 16)) ;
+ write16((short)(*p & 65535)) ;
+ p++ ;
+ n-- ;
+ }
+}
+
+void
+makebcpl P3C(register long *, p, register char *, s, register int, n)
+{
+ register long t ;
+ register long sc ;
+
+ if (strlen(s) < n)
+ n = strlen(s) ;
+ t = ((long)n) << 24 ;
+ sc = 16 ;
+ while (n > 0) {
+ t |= ((long)(*(unsigned char *)s++)) << sc ;
+ sc -= 8 ;
+ if (sc < 0) {
+ *p++ = t ;
+ t = 0 ;
+ sc = 24 ;
+ }
+ n-- ;
+ }
+ *p++ = t ;
+}
+
+int source[257] ;
+int unsort[257] ;
+
+/*
+ * Next we need a routine to reduce the number of distinct dimensions
+ * in a TFM file. Given an array what[0]...what[oldn-1], we want to
+ * group its elements into newn clusters, in such a way that the maximum
+ * difference between elements of a cluster is as small as possible.
+ * Furthermore, what[0]=0, and this value must remain in a cluster by
+ * itself. Data such as `0 4 6 7 9' with newn=3 shows that an iterative
+ * scheme in which 6 is first clustered with 7 will not work. So we
+ * borrow a neat algorithm from METAFONT to find the true optimum.
+ * Memory location what[oldn] is set to 0x7fffffffL for convenience.
+ */
+long nextd ; /* smallest value that will give a different mincover */
+int
+mincover P2C(long *, what,
+ register long, d) /* tells how many clusters result, given max difference d */
+{
+ register int m ;
+ register long l ;
+ register long *p ;
+
+ nextd = 0x7fffffffL ;
+ p = what+1 ;
+ m = 1 ;
+ while (*p<0x7fffffffL) {
+ m++ ;
+ l = *p ;
+ while (*++p <= l+d) ;
+ if (*p-l < nextd) nextd = *p-l ;
+ }
+ return (m) ;
+}
+
+void
+remap P3C(long *, what, int, oldn, int, newn)
+{
+ register int i, j ;
+ register long d, l ;
+
+ what[oldn] = 0x7fffffffL ;
+ for (i=oldn-1; i>0; i--) {
+ d = what[i] ;
+ for (j=i; what[j+1]<d; j++) {
+ what[j] = what[j+1] ;
+ source[j] = source[j+1] ;
+ }
+ what[j] = d ;
+ source[j] = i ;
+ } /* Tom, don't let me ever catch you using bubblesort again! -- Don */
+
+ i = mincover(what, 0L) ;
+ d = nextd ;
+ while (mincover(what,d+d)>newn) d += d ;
+ while (mincover(what,d)>newn) d = nextd ;
+
+ i = 1 ;
+ j = 0 ;
+ while (i<oldn) {
+ j++ ;
+ l = what[i] ;
+ unsort[source[i]] = j ;
+ while (what[++i] <= l+d) {
+ unsort[source[i]] = j ;
+ if (i-j == oldn-newn) d = 0 ;
+ }
+ what[j] = (l+what[i-1])/2 ;
+ }
+}
+
+long
+checksum P1H(void) {
+ int i ;
+ unsigned long s1 = 0, s2 = 0 ;
+ char *p ;
+ struct adobeinfo *ai ;
+
+ for (i=0; i<256; i++)
+ if (0 != (ai=adobeptrs[i])) {
+ s1 = ((s1 << 1) ^ (s1>>31)) ^ ai->width ; /* cyclic left shift */
+ s1 &= 0xffffffff; /* in case we're on a 64-bit machine */
+ for (p=ai->adobename; *p; p++)
+#ifndef VMCMS
+ s2 = (s2 * 3) + *p ;
+#else
+ s2 = (s2 * 3) + ebcdic2ascii[*p] ;
+#endif
+ }
+ s1 = (s1 << 1) ^ s2 ;
+ return s1 ;
+}
+
+/*
+ * The next routine simply scales something.
+ * Input is in 1000ths of an em. Output is in FIXFACTORths of 1000.
+ */
+#define FIXFACTOR (0x100000L) /* 2^{20}, the unit fixnum */
+long
+scale P1C(long, what)
+{
+ return(((what / 1000) << 20) +
+ (((what % 1000) << 20) + 500) / 1000) ;
+}
+
+long *header, *charinfo, *width, *height, *depth, *ligkern, *kern, *tparam,
+ *italic ;
+long *tfmdata ;
+
+void
+buildtfm P1H(void) {
+ register int i, j ;
+ register struct adobeinfo *ai ;
+
+ header = tfmdata ;
+ cksum = checksum() ;
+ header[0] = cksum ;
+ header[1] = 0xa00000 ; /* 10pt design size */
+ makebcpl(header+2, codingscheme, 39) ;
+ makebcpl(header+12, fontname, 19) ;
+ lh = 17 ;
+ charinfo = header + lh ;
+
+ for (i=0; i<256 && adobeptrs[i]==NULL; i++) ;
+ bc = i ;
+ for (i=255; i>=0 && adobeptrs[i]==NULL; i--) ;
+ ec = i;
+ if (ec < bc)
+ error("! no Adobe characters") ;
+
+ width = charinfo + (ec - bc + 1) ;
+ width[0] = 0 ;
+ nw++ ;
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i])) {
+ width[nw]=ai->width ;
+ for (j=1; width[j]!=ai->width; j++) ;
+ ai->wptr = j ;
+ if (j==nw)
+ nw++ ;
+ }
+ if (nw>256)
+ error("! 256 chars with different widths") ;
+ depth = width + nw ;
+ depth[0] = 0 ;
+ nd = 1 ;
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i])) {
+ depth[nd] = -ai->lly ;
+ for (j=0; depth[j]!=-ai->lly; j++) ;
+ ai->dptr = j ;
+ if (j==nd)
+ nd++ ;
+ }
+ if (nd > 16) {
+ remap(depth, nd, 16) ;
+ nd = 16 ;
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i]))
+ ai->dptr = unsort[ai->dptr] ;
+ }
+ height = depth + nd ;
+ height[0] = 0 ;
+ nh = 1 ;
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i])) {
+ height[nh]=ai->ury ;
+ for (j=0; height[j]!=ai->ury; j++) ;
+ ai->hptr = j ;
+ if (j==nh)
+ nh++ ;
+ }
+ if (nh > 16) {
+ remap(height, nh, 16) ;
+ nh = 16 ;
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i]))
+ ai->hptr = unsort[ai->hptr] ;
+ }
+ italic = height + nh ;
+ italic[0] = 0 ;
+ ni = 1 ;
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i])) {
+ italic[ni] = ai->urx - ai->width ;
+ if (italic[ni]<0)
+ italic[ni] = 0 ;
+ for (j=0; italic[j]!=italic[ni]; j++) ;
+ ai->iptr = j ;
+ if (j==ni)
+ ni++ ;
+ }
+ if (ni > 64) {
+ remap(italic, ni, 64) ;
+ ni = 64 ;
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i]))
+ ai->iptr = unsort[ai->iptr] ;
+ }
+
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=adobeptrs[i]))
+ charinfo[i-bc] = ((long)(ai->wptr)<<24) +
+ ((long)(ai->hptr)<<20) +
+ ((long)(ai->dptr)<<16) +
+ ((long)(ai->iptr)<<10) ;
+
+ ligkern = italic + ni ;
+ nl = 0 ; /* ligatures and kerns omitted from raw Adobe font */
+ kern = ligkern + nl ;
+ nk = 0 ;
+
+ newslant = (double)slant - efactor * tan(italicangle*(3.1415926535/180.0)) ;
+ tparam = kern + nk ;
+ tparam[0] = (long)(FIXFACTOR * newslant + 0.5) ;
+ tparam[1] = scale((long)fontspace) ;
+ tparam[2] = (fixedpitch ? 0 : scale((long)(300*efactor+0.5))) ;
+ tparam[3] = (fixedpitch ? 0 : scale((long)(100*efactor+0.5))) ;
+ tparam[4] = scale((long)xheight) ;
+ tparam[5] = scale((long)(1000*efactor+0.5)) ;
+ np = 6 ;
+}
+
+void
+writesarr P2C(long *, what, int, len)
+{
+ register long *p ;
+ int i ;
+
+ p = what ;
+ i = len ;
+ while (i) {
+ *p = scale(*p) ;
+ (void)scale(*p) ; /* need this kludge for some compilers */
+ p++ ;
+ i-- ;
+ }
+ writearr(what, len) ;
+}
+
+void
+writetfm P1H(void) {
+ lf = 6 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ne + np ;
+ write16(lf) ;
+ write16(lh) ;
+ write16(bc) ;
+ write16(ec) ;
+ write16(nw) ;
+ write16(nh) ;
+ write16(nd) ;
+ write16(ni) ;
+ write16(nl) ;
+ write16(nk) ;
+ write16(ne) ;
+ write16(np) ;
+ writearr(header, lh) ;
+ writearr(charinfo, ec-bc+1) ;
+ writesarr(width, nw) ;
+ writesarr(height, nh) ;
+ writesarr(depth, nd) ;
+ writesarr(italic, ni) ;
+ writearr(ligkern, nl) ;
+ writesarr(kern, nk) ;
+ writearr(tparam, np) ;
+}
+
+/* OK, the TFM file is done! Now for our next trick, the VPL file. */
+
+/* For TeX we want to compute a character height that works properly
+ * with accents. The following list of accents doesn't need to be complete. */
+/*
+ * We only do this if the xheight has a reasonable value.
+ * (>50)
+ */
+char *accents[] = { "acute", "tilde", "caron", "dieresis", NULL} ;
+int
+texheight P1C(register struct adobeinfo *, ai)
+{
+ register char **p;
+ register struct adobeinfo *aci, *acci ;
+ if (xheight <= 50 || *(ai->adobename + 1)) return (ai->ury) ;
+ /* that was the simple case */
+ for (p=accents; *p; p++) /* otherwise we look for accented letters */
+ if (0 != (aci=findadobe(*p))) {
+ strcpy(buffer,ai->adobename) ;
+ strcat(buffer,*p) ;
+ if (0 != (acci=findadobe(buffer)))
+ return (acci->ury - aci->ury + xheight) ;
+ }
+ return (ai->ury) ;
+}
+
+/* modified tgr to eliminate varargs problems */
+
+#define vout(s) fprintf(vplout, s)
+int level ; /* the depth of parenthesis nesting in VPL file being written */
+void vlevout() {
+ register int l = level ;
+ while (l--) vout(" ") ;
+}
+void vlevnlout() {
+ vout("\n") ;
+ vlevout() ;
+}
+#define voutln(str) {fprintf(vplout,"%s\n",str);vlevout();}
+#define voutln2(f,s) {fprintf(vplout,f,s);vlevnlout();}
+#define voutln3(f,a,b) {fprintf(vplout,f,a,b);vlevnlout();}
+#define voutln4(f,a,b,c) {fprintf(vplout,f,a,b,c);vlevnlout();}
+void
+vleft P1H(void)
+{
+ level++ ;
+ vout("(") ;
+}
+
+void
+vright P1H(void)
+{
+ level-- ;
+ voutln(")") ;
+}
+
+int forceoctal = 0 ;
+
+char vcharbuf[6] ;
+char *vchar P1C(int, c)
+{
+ if (forceoctal == 0 && ISALNUM (c))
+ (void) sprintf(vcharbuf,"C %c",
+#ifndef VMCMS
+ c) ;
+#else
+ ascii2ebcdic[c]) ;
+#endif
+ else (void) sprintf(vcharbuf,"O %o", (unsigned)c) ;
+ return (vcharbuf) ;
+}
+
+char vnamebuf[100];
+char *
+vname P1C(int, c)
+{
+ if (!forceoctal && ISALNUM (c)) {
+ vnamebuf[0] = 0;
+ } else if (c >= 0 && c < 256) {
+ sprintf (vnamebuf, " (comment %s)", texptrs[c]->adobename);
+ }
+ return vnamebuf;
+}
+
+void
+writevpl P1H(void)
+{
+ register int i, j, k ;
+ register struct adobeinfo *ai ;
+ register struct lig *nlig ;
+ register struct kern *nkern ;
+ register struct pcc *npcc ;
+ struct adobeinfo *asucc, *asub, *api ;
+ struct adobeptr *kern_eq;
+ int xoff, yoff, ht ;
+ char unlabeled ;
+
+ voutln2("(VTITLE Created by %s)", titlebuf) ;
+ voutln("(COMMENT Please edit that VTITLE if you edit this file)") ;
+ (void)sprintf(obuffer, "TeX-%s%s%s%s", outname,
+ (efactor==1.0? "" : "-E"), (slant==0.0? "" : "-S"),
+ (makevpl==1? "" : "-CSC")) ;
+ if (strlen(obuffer)>19) { /* too long, will retain first 9 and last 10 */
+ register char *p, *q ;
+ for (p = &obuffer[9], q = &obuffer[strlen(obuffer)-10] ; p<&obuffer[19];
+ p++, q++) *p = *q ;
+ obuffer[19] = '\0' ;
+ }
+ voutln2("(FAMILY %s)" , obuffer) ;
+ {
+ char tbuf[300] ;
+ char *base_encoding =
+#ifndef VMCMS
+ codingscheme ;
+#else
+ ebcodingscheme ;
+#endif
+
+ if (strcmp (outencoding->name, base_encoding) == 0) {
+ sprintf(tbuf, "%s", outencoding->name);
+ } else {
+ sprintf(tbuf, "%s + %s", base_encoding, outencoding->name);
+ }
+
+ if (strlen(tbuf) > 39) {
+ error("Coding scheme too long; shortening to 39 characters.") ;
+ tbuf[39] = 0 ;
+ }
+ voutln2("(CODINGSCHEME %s)", tbuf) ;
+ }
+ voutln("(DESIGNSIZE R 10.0)") ;
+ voutln("(DESIGNUNITS R 1000)") ;
+ voutln("(COMMENT DESIGNSIZE (1 em) IS IN POINTS)") ;
+ voutln("(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000)") ;
+ /* Let vptovf compute the checksum. */
+ /* voutln2("(CHECKSUM O %lo)",cksum ^ 0xffffffff) ; */
+ if (boundarychar >= 0)
+ voutln2("(BOUNDARYCHAR O %lo)", (unsigned long)boundarychar) ;
+ vleft() ; voutln("FONTDIMEN") ;
+ if (newslant)
+ voutln2("(SLANT R %f)", newslant) ;
+ voutln2("(SPACE D %d)", fontspace) ;
+ if (! fixedpitch) {
+ voutln2("(STRETCH D %d)", transform(200,0)) ;
+ voutln2("(SHRINK D %d)", transform(100,0)) ;
+ }
+ voutln2("(XHEIGHT D %d)", xheight) ;
+ voutln2("(QUAD D %d)", transform(1000,0)) ;
+ voutln2("(EXTRASPACE D %d)", fixedpitch ? fontspace : transform(111, 0)) ;
+ vright() ;
+ vleft() ; voutln("MAPFONT D 0");
+ voutln2("(FONTNAME %s)", outname) ;
+ /* voutln2("(FONTCHECKSUM O %lo)", (unsigned long)cksum) ; */
+ vright() ;
+ if (makevpl>1) {
+ vleft() ; voutln("MAPFONT D 1");
+ voutln2("(FONTNAME %s)", outname) ;
+ voutln2("(FONTAT D %d)", (int)(1000.0*capheight+0.5)) ;
+ /* voutln2("(FONTCHECKSUM O %lo)", (unsigned long)cksum) ; */
+ vright() ;
+ }
+
+ for (i=0; i<256 && texptrs[i]==NULL; i++) ;
+ bc = i ;
+ for (i=255; i>=0 && texptrs[i]==NULL; i--) ;
+ ec = i;
+
+ vleft() ; voutln("LIGTABLE") ;
+ ai = findadobe("||") ;
+ unlabeled = 1 ;
+ for (nlig=ai->ligs; nlig; nlig=nlig->next)
+ if (0 != (asucc=findadobe(nlig->succ))) {
+ if (0 != (asub=findadobe(nlig->sub)))
+ if (asucc->texnum>=0)
+ if (asub->texnum>=0) {
+ if (unlabeled) {
+ voutln("(LABEL BOUNDARYCHAR)") ;
+ unlabeled = 0 ;
+ }
+ for (j = asucc->texnum; j >= 0; j = nexttex[j]) {
+ voutln4("(%s %s O %o)", vplligops[nlig->op],
+ vchar(j), (unsigned)asub->texnum) ;
+ }
+ }
+ }
+ if (! unlabeled) voutln("(STOP)") ;
+ for (i=bc; i<=ec; i++)
+ if ((ai=texptrs[i]) && ai->texnum == i) {
+ unlabeled = 1 ;
+ if (uppercase[i]==NULL) /* omit ligatures from smallcap lowercase */
+ for (nlig=ai->ligs; nlig; nlig=nlig->next)
+ if (0 != (asucc=findadobe(nlig->succ)))
+ if (0 != (asub=findadobe(nlig->sub)))
+ if (asucc->texnum>=0)
+ if (asub->texnum>=0) {
+ if (unlabeled) {
+ for (j = ai->texnum; j >= 0; j = nexttex[j])
+ voutln3("(LABEL %s)%s", vchar(j), vname(j)) ;
+ unlabeled = 0 ;
+ }
+ for (j = asucc->texnum; j >= 0; j = nexttex[j]) {
+ voutln4("(%s %s O %o)", vplligops[nlig->op],
+ vchar(j), (unsigned)asub->texnum) ;
+ if (nlig->boundleft)
+ break ;
+ }
+ }
+ for (nkern = (uppercase[i] ? uppercase[i]->kerns : ai->kerns);
+ nkern; nkern=nkern->next)
+ if (0 != (asucc=findadobe(nkern->succ)))
+ for (j = asucc->texnum; j >= 0; j = nexttex[j]) {
+ if (uppercase[j]==NULL) {
+ if (unlabeled) {
+ for (k = ai->texnum; k >= 0; k = nexttex[k])
+ voutln3("(LABEL %s)%s", vchar(k), vname(k)) ;
+ unlabeled = 0 ;
+ }
+ /* If other characters have the same kerns as this
+ one, output the label here. This makes the TFM
+ file much smaller than if we output all the
+ kerns again under a different label. */
+ for (kern_eq = ai->kern_equivs; kern_eq;
+ kern_eq = kern_eq->next) {
+ k = kern_eq->ch->texnum;
+ if (k >= 0 && k < 256)
+ voutln3("(LABEL %s)%s", vchar(k), vname(k)) ;
+ }
+ ai->kern_equivs = 0; /* Only output those labels once. */
+ if (uppercase[i]) {
+ if (lowercase[j]) {
+ for (k=lowercase[j]->texnum; k >= 0; k = nexttex[k])
+ voutln4("(KRN %s R %.1f)%s", vchar(k),
+ capheight*nkern->delta, vname(k)) ;
+ } else voutln4("(KRN %s R %.1f)%s",
+ vchar(j), capheight*nkern->delta, vname(j)) ;
+ } else {
+ voutln4("(KRN %s R %d)%s", vchar(j),
+ nkern->delta, vname(j)) ;
+ if (lowercase[j])
+ for (k=lowercase[j]->texnum; k >= 0; k = nexttex[k])
+ voutln4("(KRN %s R %.1f)%s", vchar(k),
+ capheight*nkern->delta, vname(k)) ;
+ }
+ }
+ }
+ if (! unlabeled) voutln("(STOP)") ;
+ }
+ vright() ;
+
+ for (i=bc; i<=ec; i++)
+ if (0 != (ai=texptrs[i])) {
+ vleft() ; fprintf(vplout, "CHARACTER %s", vchar(i)) ;
+ if (*vcharbuf=='C') {
+ voutln("") ;
+ } else
+ voutln2(" (comment %s)", ai->adobename) ;
+ if (uppercase[i]) {
+ ai=uppercase[i] ;
+ voutln2("(CHARWD R %.1f)", capheight * (ai->width)) ;
+ if (0 != (ht=texheight(ai)))
+ voutln2("(CHARHT R %.1f)", capheight * ht) ;
+ if (ai->lly)
+ voutln2("(CHARDP R %.1f)", -capheight * ai->lly) ;
+ if (ai->urx > ai->width)
+ voutln2("(CHARIC R %.1f)", capheight * (ai->urx - ai->width)) ;
+ } else {
+ voutln2("(CHARWD R %d)", ai->width) ;
+ if (0 != (ht=texheight(ai)))
+ voutln2("(CHARHT R %d)", ht) ;
+ if (ai->lly)
+ voutln2("(CHARDP R %d)", -ai->lly) ;
+ if (ai->urx > ai->width)
+ voutln2("(CHARIC R %d)", ai->urx - ai->width) ;
+ }
+ if (ai->adobenum != i || uppercase[i]) {
+ vleft() ; voutln("MAP") ;
+ if (uppercase[i]) voutln("(SELECTFONT D 1)") ;
+ if (ai->pccs && ai->adobenum < 0) {
+ xoff = 0 ; yoff = 0 ;
+ for (npcc = ai->pccs; npcc; npcc=npcc->next)
+ if (0 != (api=findadobe(npcc->partname)))
+ if (api->texnum>=0) {
+ if (npcc->xoffset != xoff) {
+ if (uppercase[i]) {
+ voutln2("(MOVERIGHT R %.1f)",
+ capheight * (npcc->xoffset - xoff)) ;
+ } else voutln2("(MOVERIGHT R %d)",
+ npcc->xoffset - xoff) ;
+ xoff = npcc->xoffset ;
+ }
+ if (npcc->yoffset != yoff) {
+ if (uppercase[i]) {
+ voutln2("(MOVEUP R %.1f)",
+ capheight * (npcc->yoffset - yoff)) ;
+ } else voutln2("(MOVEUP R %d)",
+ npcc->yoffset - yoff) ;
+ yoff = npcc->yoffset ;
+ }
+ voutln2("(SETCHAR O %o)", (unsigned)api->adobenum) ;
+ xoff += texptrs[api->texnum]->width ;
+ }
+ } else voutln2("(SETCHAR O %o)", (unsigned)ai->adobenum) ;
+ vright() ;
+ }
+ vright() ;
+ }
+ if (level) error("! I forgot to match the parentheses") ;
+}
+
+#ifdef KPATHSEA
+void version P1C(FILE *, f)
+{
+ extern KPSEDLL char *kpathsea_version_string;
+ fputs ("afm2tfm(k) (dvips(k) 5.95b) 8.1\n", f);
+ fprintf (f, "%s\n", kpathsea_version_string);
+ fputs ("Copyright (C) 2005 Radical Eye Software.\n\
+There is NO warranty. You may redistribute this software\n\
+under the terms of the GNU General Public License\n\
+and the Dvips copyright.\n\
+For more information about these matters, see the files\n\
+named COPYING and afm2tfm.c.\n\
+Primary author of afm2tfm: T. Rokicki; -k maintainer: K. Berry.\n", f);
+}
+
+#define USAGE "\
+ Convert an Adobe font metric file to TeX font metric format.\n\
+\n\
+-c REAL use REAL for height of small caps made with -V [0.8]\n\
+-e REAL widen (extend) characters by a factor of REAL\n\
+-O use octal for all character codes in the vpl file\n\
+-p ENCFILE read/download ENCFILE for the PostScript encoding\n\
+-s REAL oblique (slant) characters by REAL, generally <<1\n\
+-t ENCFILE read ENCFILE for the encoding of the vpl file\n\
+-T ENCFILE equivalent to -p ENCFILE -t ENCFILE\n\
+-u output only characters from encodings, nothing extra\n\
+-v FILE[.vpl] make a VPL file for conversion to VF\n\
+-V SCFILE[.vpl] like -v, but synthesize smallcaps as lowercase\n\
+--help print this message and exit.\n\
+--version print version number and exit.\n\
+"
+
+void usage P1C(FILE *, f)
+{
+ extern KPSEDLL char *kpse_bug_address;
+
+ fputs ("Usage: afm2tfm FILE[.afm] [OPTION]... [FILE[.tfm]]\n", f);
+ fputs (USAGE, f);
+ putc ('\n', f);
+ fputs (kpse_bug_address, f);
+}
+#else /* ! KPATHSEA */
+void usage P1C(FILE *, f)
+{
+ (void)fprintf(f,
+ "afm2tfm 8.1, Copyright 1990-97 by Radical Eye Software\n") ;
+ (void)fprintf(f,
+ "Usage: afm2tfm foo[.afm] [-O] [-u] [-v|-V bar[.vpl]]\n") ;
+ (void)fprintf(f,
+ " [-e expansion] [-s slant] [-c capheight]\n") ;
+ (void)fprintf(f,
+ " [-p|-t|-T encodingfile] [foo[.tfm]]\n") ;
+}
+#endif
+
+#define CHECKARG3 if (argc < 4) { usage(stderr); exit(1); }
+
+void
+openfiles P2C(int, argc, char **, argv)
+{
+#ifndef KPATHSEA
+ register int lastext ;
+#endif
+ register int i ;
+ char *p ;
+ int arginc ;
+
+ tfmout = (FILE *)NULL ;
+
+ if (argc == 1) {
+ usage(stdout) ;
+ exit(0) ;
+ }
+
+#if defined(MSDOS) || defined(OS2) || defined(ATARIST)
+ /* Make VPL file identical to that created under Unix */
+ (void)sprintf(titlebuf, "afm2tfm %s", argv[1]) ;
+#else
+#ifdef VMCMS
+ /* Make VPL file identical to that created under Unix */
+ (void)sprintf(titlebuf, "afm2tfm %s", argv[1]) ;
+#else
+ (void)sprintf(titlebuf, "%s %s", argv[0], argv[1]) ;
+#endif
+#endif
+ (void)strcpy(inname, argv[1]) ;
+#ifdef KPATHSEA
+ if (find_suffix(inname) == NULL)
+ (void)strcat(inname, ".afm") ;
+#else
+ lastext = -1 ;
+ for (i=0; inname[i]; i++)
+ if (inname[i] == '.')
+ lastext = i ;
+ else if (inname[i] == '/' || inname[i] == ':')
+ lastext = -1 ;
+ if (lastext == -1) (void)strcat(inname, ".afm") ;
+#endif
+ while (argc>2 && *argv[2]=='-') {
+ arginc = 2 ;
+ i = argv[2][1] ;
+ if (i == '/')
+ i = argv[2][2] - 32 ; /* /a ==> A for VMS */
+ switch (i) {
+case 'V': makevpl++ ;
+case 'v': makevpl++ ;
+ CHECKARG3
+ (void)strcpy(outname, argv[3]) ;
+#ifdef KPATHSEA
+ if (find_suffix(outname) == NULL)
+ (void)strcat(outname, ".vpl") ;
+#else
+ lastext = -1 ;
+ for (i=0; outname[i]; i++)
+ if (outname[i] == '.')
+ lastext = i ;
+ else if (outname[i] == '/' || outname[i] == ':')
+ lastext = -1 ;
+ if (lastext == -1) (void)strcat(outname, ".vpl") ;
+#endif
+#ifndef VMCMS
+#ifndef ATARIST
+ if ((vplout=fopen(outname, WRITEBIN))==NULL)
+#else
+ if ((vplout=fopen(outname, "w"))==NULL)
+#endif
+#else
+ if ((vplout=fopen(outname, "w"))==NULL)
+#endif
+ error("! can't open vpl output file") ;
+ break ;
+case 'e': CHECKARG3
+ if (sscanf(argv[3], "%f", &efactor)==0 || efactor<0.01)
+ error("! Bad extension factor") ;
+ efactorparam = argv[3] ;
+ break ;
+case 'c':
+ CHECKARG3
+ if (sscanf(argv[3], "%f", &capheight)==0 || capheight<0.01)
+ error("! Bad small caps height") ;
+ break ;
+case 's':
+ CHECKARG3
+ if (sscanf(argv[3], "%f", &slant)==0)
+ error("! Bad slant parameter") ;
+ slantparam = argv[3] ;
+ break ;
+case 'P':
+case 'p':
+ CHECKARG3
+ inenname = argv[3] ;
+ break ;
+case 'T':
+ CHECKARG3
+ inenname = outenname = argv[3] ;
+ break ;
+case 't':
+ CHECKARG3
+ outenname = argv[3] ;
+ break ;
+case 'O':
+ forceoctal = 1 ;
+ arginc = 1 ;
+ break ;
+case 'u':
+ pedantic = 1 ;
+ arginc = 1 ;
+ break ;
+default: (void)fprintf(stderr, "Unknown option %s %s will be ignored.\n",
+ argv[2], argv[3]) ;
+ }
+ for (i=0; i<arginc; i++) {
+ (void)sprintf(titlebuf + strlen(titlebuf), " %s", argv[2]) ;
+ argv++ ;
+ argc-- ;
+ }
+ }
+
+#ifdef KPATHSEA
+ afmin = kpse_open_file (inname, kpse_afm_format);
+#else /* ! KPATHSEA */
+ if ((afmin=fopen(inname, "r"))==NULL)
+ error("! can't open afm input file") ;
+#endif /* KPATHSEA */
+ SET_BINARY(fileno(afmin)) ;
+
+ if (argc>3 || (argc==3 && *argv[2]=='-')) {
+ error("! need at most two non-option arguments") ;
+ usage(stderr) ;
+ }
+
+ if (argc == 2) (void)strcpy(outname, inname) ;
+ else (void)strcpy(outname, argv[2]) ;
+
+#ifdef KPATHSEA
+ if ((p = find_suffix(outname)) != NULL)
+ *(p-1) = 0;
+ (void)strcat(outname, ".tfm") ;
+ if (tfmout == NULL && (tfmout=fopen(outname, WRITEBIN))==NULL)
+ error("! can't open tfm output file") ;
+/*
+ * Now we strip off any directory information, so we only use the
+ * base name in the vf file.
+ */
+ if (p == NULL)
+ p = find_suffix(outname);
+ *(p-1) = 0;
+
+ p = (char *)xbasename(outname) ;
+ strcpy(tmpstr, p); /* be careful, p and outname are overlapping */
+ strcpy(outname, tmpstr);
+#else
+ lastext = -1 ;
+ for (i=0; outname[i]; i++)
+ if (outname[i] == '.')
+ lastext = i ;
+ else if (outname[i] == '/' || outname[i] == ':' || outname[i] == '\\')
+ lastext = -1 ;
+ if (argc == 2) {
+ outname[lastext] = 0 ;
+ lastext = -1 ;
+ }
+ if (lastext == -1) {
+ lastext = strlen(outname) ;
+ (void)strcat(outname, ".tfm") ;
+ }
+ if (tfmout == NULL && (tfmout=fopen(outname, WRITEBIN))==NULL)
+ error("! can't open tfm output file") ;
+ outname[lastext] = 0 ;
+/*
+ * Now we strip off any directory information, so we only use the
+ * base name in the vf file. We accept any of /, :, or \ as directory
+ * delimiters, so none of these are available for use inside the
+ * base name; this shouldn't be a problem.
+ */
+ for (i=0, lastext=0; outname[i]; i++)
+ if (outname[i] == '/' || outname[i] == ':' || outname[i] == '\\')
+ lastext = i + 1 ;
+ if (lastext)
+ strcpy(outname, outname + lastext) ;
+#endif
+}
+/*
+ * Some routines to remove kerns that match certain patterns.
+ */
+struct kern *rmkernmatch P2C(struct kern *, k, char *, s)
+{
+ struct kern *nkern ;
+
+ while (k && strcmp(k->succ, s)==0)
+ k = k->next ;
+ if (k) {
+ for (nkern = k; nkern; nkern = nkern->next)
+ while (nkern->next && strcmp(nkern->next->succ, s)==0)
+ nkern->next = nkern->next->next ;
+ }
+ return k ;
+}
+/*
+ * Recursive to one level.
+ */
+void rmkern P3C(char *, s1, char *, s2, struct adobeinfo *, ai)
+{
+ if (ai == 0) {
+ if (strcmp(s1, "*") == 0) {
+ for (ai=adobechars; ai; ai = ai->next)
+ rmkern(s1, s2, ai) ;
+ return ;
+ } else {
+ ai = findadobe(s1) ;
+ if (ai == 0)
+ return ;
+ }
+ }
+ if (strcmp(s2, "*")==0)
+ ai->kerns = 0 ; /* drop them on the floor */
+ else
+ ai->kerns = rmkernmatch(ai->kerns, s2) ;
+}
+
+/* Make the kerning for character S1 equivalent to that for S2.
+ If either S1 or S2 do not exist, do nothing.
+ If S1 already has kerning, do nothing. */
+void
+addkern P2C(char *, s1, char *, s2)
+{
+ struct adobeinfo *ai1 = findadobe (s1);
+ struct adobeinfo *ai2 = findadobe (s2);
+ if (ai1 && ai2 && !ai1->kerns) {
+ /* Put the new one at the head of the list, since order is immaterial. */
+ struct adobeptr *ap
+ = (struct adobeptr *) mymalloc((unsigned long)sizeof(struct adobeptr));
+ ap->next = ai2->kern_equivs;
+ ap->ch = ai1;
+ ai2->kern_equivs = ap;
+ }
+}
+int sawligkern ;
+/*
+ * Reads a ligkern line, if this is one. Assumes the first character
+ * passed is `%'.
+ */
+void checkligkern P1C(char *, s)
+{
+ char *oparam = param ;
+ char *mlist[5] ;
+ int n ;
+
+ s++ ;
+ while (*s && *s <= ' ')
+ s++ ;
+ if (strncmp(s, "LIGKERN", 7)==0) {
+ sawligkern = 1 ;
+ s += 7 ;
+ while (*s && *s <= ' ')
+ s++ ;
+ param = s ;
+ while (*param) {
+ for (n=0; n<5;) {
+ if (*param == 0)
+ break ;
+ mlist[n] = paramstring() ;
+ if (strcmp(mlist[n], ";") == 0)
+ break ;
+ n++ ;
+ }
+ if (n > 4)
+ error("! too many parameters in lig kern data") ;
+ if (n < 3)
+ error("! too few parameters in lig kern data") ;
+ if (n == 3 && strcmp(mlist[1], "{}") == 0) { /* rmkern command */
+ rmkern(mlist[0], mlist[2], (struct adobeinfo *)0) ;
+ } else if (n == 3 && strcmp(mlist[1], "<>") == 0) { /* addkern */
+ addkern(mlist[0], mlist[2]) ;
+ } else if (n == 3 && strcmp(mlist[0], "||") == 0 &&
+ strcmp(mlist[1], "=") == 0) { /* bc command */
+ struct adobeinfo *ai = findadobe("||") ;
+
+ if (boundarychar != -1)
+ error("! multiple boundary character commands?") ;
+ if (sscanf(mlist[2], "%d", &n) != 1)
+ error("! expected number assignment for boundary char") ;
+ if (n < 0 || n > 255)
+ error("! boundary character number must be 0..255") ;
+ boundarychar = n ;
+ if (ai == 0)
+ error("! internal error: boundary char") ;
+ ai->texnum = n ; /* prime the pump, so to speak, for lig/kerns */
+ } else if (n == 4) {
+ int op = -1 ;
+ struct adobeinfo *ai ;
+
+ for (n=0; encligops[n]; n++)
+ if (strcmp(mlist[2], encligops[n])==0) {
+ op = n ;
+ break ;
+ }
+ if (op < 0)
+ error("! bad ligature op specified") ;
+ if (0 != (ai = findadobe(mlist[0]))) {
+ struct lig *lig ;
+
+ if (findadobe(mlist[2])) /* remove coincident kerns */
+ rmkern(mlist[0], mlist[1], ai) ;
+ if (strcmp(mlist[3], "||") == 0)
+ error("! you can't lig to the boundary character!") ;
+ if (! fixedpitch) { /* fixed pitch fonts get *0* ligs */
+ for (lig=ai->ligs; lig; lig = lig->next)
+ if (strcmp(lig->succ, mlist[1]) == 0)
+ break ; /* we'll re-use this structure */
+ if (lig == 0) {
+ lig = newlig() ;
+ lig->succ = newstring(mlist[1]) ;
+ lig->next = ai->ligs ;
+ ai->ligs = lig ;
+ }
+ lig->sub = newstring(mlist[3]) ;
+ lig->op = op ;
+ if (strcmp(mlist[1], "||")==0) {
+ lig->boundleft = 1 ;
+ if (strcmp(mlist[0], "||")==0)
+ error("! you can't lig boundarychar boundarychar!") ;
+ } else
+ lig->boundleft = 0 ;
+ }
+ }
+ } else
+ error("! bad form in LIGKERN command") ;
+ }
+ }
+ param = oparam ;
+}
+/*
+ * Here we get a token from the AFM file. We parse just as much PostScript
+ * as we expect to find in an encoding file. We allow commented lines and
+ * names like 0, .notdef, _foo_. We do not allow //abc.
+ */
+char smbuffer[100] ; /* for tokens */
+char *gettoken() {
+ char *p, *q ;
+
+ while (1) {
+ while (param == 0 || *param == 0) {
+ if (getline() == 0)
+ error("! premature end in encoding file") ;
+ for (p=buffer; *p; p++)
+ if (*p == '%') {
+ if (ignoreligkern == 0)
+ checkligkern(p) ;
+ *p = 0 ;
+ break ;
+ }
+ }
+ while (*param && *param <= ' ')
+ param++ ;
+ if (*param) {
+ if (*param == '[' || *param == ']' ||
+ *param == '{' || *param == '}') {
+ smbuffer[0] = *param++ ;
+ smbuffer[1] = 0 ;
+ return smbuffer ;
+ } else if (*param == '/' || *param == '-' || *param == '_' ||
+ *param == '.' ||
+ ('0' <= *param && *param <= '9') ||
+ ('a' <= *param && *param <= 'z') ||
+ ('A' <= *param && *param <= 'Z')) {
+ smbuffer[0] = *param ;
+ for (p=param+1, q=smbuffer+1;
+ *p == '-' || *p == '_' || *p == '.' ||
+ ('0' <= *p && *p <= '9') ||
+ ('a' <= *p && *p <= 'z') ||
+ ('A' <= *p && *p <= 'Z'); p++, q++)
+ *q = *p ;
+ *q = 0 ;
+ param = p ;
+ return smbuffer ;
+ }
+ }
+ }
+}
+void getligkerndefaults() {
+ int i ;
+
+ for (i=0; staticligkern[i]; i++) {
+ strcpy(buffer, staticligkern[i]) ;
+ strcpy(obuffer, staticligkern[i]) ;
+ param = buffer ;
+ checkligkern(buffer) ;
+ }
+}
+/*
+ * This routine reads in an encoding file, given the name. It returns
+ * the final total structure. It performs a number of consistency checks.
+ */
+struct encoding *readencoding P1C(char *, enc)
+{
+ char *p ;
+ int i ;
+ struct encoding *e =
+ (struct encoding *)mymalloc((unsigned long)sizeof(struct encoding)) ;
+
+ sawligkern = 0 ;
+ if (afmin)
+ error("! oops; internal afmin error") ;
+ if (enc) {
+#ifdef KPATHSEA
+ afmin = kpse_open_file(enc, kpse_enc_format);
+#else
+ afmin = fopen(enc, "r") ;
+#endif
+ SET_BINARY(fileno(afmin)) ;
+ param = 0 ;
+ if (afmin == 0)
+#ifdef KPATHSEA
+ FATAL1 ("couldn't open encoding file `%s'", enc) ;
+#else
+ error("! couldn't open that encoding file") ;
+#endif
+ p = gettoken() ;
+ if (*p != '/' || p[1] == 0)
+ error("! first token in encoding must be literal encoding name") ;
+ e->name = newstring(p+1) ;
+ p = gettoken() ;
+ if (strcmp(p, "["))
+ error("! second token in encoding must be mark ([) token") ;
+ for (i=0; i<256; i++) {
+ p = gettoken() ;
+ if (*p != '/' || p[1] == 0)
+ error("! tokens 3 to 257 in encoding must be literal names") ;
+ e->vec[i] = newstring(p+1) ;
+ }
+ p = gettoken() ;
+ if (strcmp(p, "]"))
+ error("! token 258 in encoding must be make-array (])") ;
+ while (getline()) {
+ for (p=buffer; *p; p++)
+ if (*p == '%') {
+ if (ignoreligkern == 0)
+ checkligkern(p) ;
+ *p = 0 ;
+ break ;
+ }
+ }
+ fclose(afmin) ;
+ afmin = 0 ;
+ if (ignoreligkern == 0 && sawligkern == 0)
+ getligkerndefaults() ;
+ } else {
+ e = &staticencoding ;
+ getligkerndefaults() ;
+ }
+ param = 0 ;
+ return e ;
+}
+/*
+ * This routine prints out the line that needs to be added to psfonts.map.
+ */
+#ifndef VMCMS
+void conspsfonts() {
+ (void)printf("%s %s", outname,
+ fontname) ;
+#else /* VM/CMS: fontname is ascii, so we use ebfontname */
+void conspsfonts() {
+ (void)printf("%s %s", outname,
+ ebfontname) ;
+#endif
+ if (slantparam || efactorparam || inenname) {
+ (void)printf(" \"") ;
+ if (slantparam)
+ (void)printf(" %s SlantFont", slantparam) ;
+ if (efactorparam)
+ (void)printf(" %s ExtendFont", efactorparam) ;
+ if (inenname)
+ (void)printf(" %s ReEncodeFont", inencoding->name) ;
+ (void)printf(" \"") ;
+ if (inenname)
+ (void)printf(" <%s", inenname) ;
+ }
+ (void)printf("\n") ;
+}
+#ifndef VMS
+int
+#endif
+main P2C(int, argc, char **, argv)
+{
+ int i ;
+
+#ifdef KPATHSEA
+ kpse_set_program_name (argv[0], "afm2tfm");
+
+ if (argc == 1) {
+ fputs ("afm2tfm: Need at least one file argument.\n", stderr);
+ fputs ("Try `afm2tfm --help' for more information.\n", stderr);
+ exit(1);
+ }
+ if (argc == 2) {
+ if (strcmp (argv[1], "--help") == 0) {
+ usage (stdout);
+ exit (0);
+ } else if (strcmp (argv[1], "--version") == 0) {
+ version (stdout);
+ exit (0);
+ }
+ }
+#endif /* KPATHSEA */
+ for (i=0; i<256; i++)
+ nexttex[i] = -1 ; /* encoding chains have length 0 */
+ tfmdata = (long *)mymalloc((unsigned long)40000L) ;
+ openfiles(argc, argv) ;
+ readadobe() ;
+ if (fontspace == 0) {
+ struct adobeinfo *ai ;
+
+ if (0 != (ai = findadobe("space")))
+ fontspace = ai->width ;
+ else if (adobeptrs[32])
+ fontspace = adobeptrs[32]->width ;
+ else
+ fontspace = transform(500, 0) ;
+ }
+ handlereencoding() ;
+ buildtfm() ;
+ writetfm() ;
+ conspsfonts() ;
+ if (makevpl) {
+ assignchars() ;
+ if (makevpl>1) upmap() ;
+ writevpl() ;
+ }
+ return 0 ;
+ /*NOTREACHED*/
+}
+
diff --git a/Build/source/texk/dvipsk/afm2tfm.rc b/Build/source/texk/dvipsk/afm2tfm.rc
new file mode 100644
index 00000000000..28089867c3f
--- /dev/null
+++ b/Build/source/texk/dvipsk/afm2tfm.rc
@@ -0,0 +1,34 @@
+/* afm2tfm.rc: afm2tfm resources -*- C++ -*-
+
+ Copyright (C) 1996-2003 Fabrice Popineau <fabrice.popineau@supelec.fr>
+
+ This file is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this file; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#include <texlive-version.h>
+
+#define VER_FILEVERSION TEXLIVE_MAJOR_VERSION,TEXLIVE_MINOR_VERSION,TEXLIVE_BETA_NUMBER,TEXLIVE_ALPHA_NUMBER
+#define VER_FILEVERSION_STR TEXLIVE_PRODUCTVERSION_STR " afm2tfm(k) (dvips(k) 5.94b) 8.1"
+
+#define VER_INTERNALNAME_STR "afm2tfm"
+#define VER_ORIGINALFILENAME_STR "afm2tfm.exe"
+
+#define VER_LEGALCOPYRIGHT_STR "Copyright (C) 1990-2004 Radical Eye Software"
+
+#define VER_FILEDESCRIPTION_STR "Adobe Font Metric to TeX Font Metric file converter"
+
+#include <texlive.version>
+
+/* afm2tfm.rc ends here */
diff --git a/Build/source/texk/dvipsk/atari/makefile.atari b/Build/source/texk/dvipsk/atari/makefile.atari
new file mode 100644
index 00000000000..c057b3d316b
--- /dev/null
+++ b/Build/source/texk/dvipsk/atari/makefile.atari
@@ -0,0 +1,78 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# First, the things that absolutely must be edited for your system.
+# Please, don't forget to edit MakeTeXPK in the same way!
+
+CC = d:\tcc\tcc.ttp
+LD = d:\tcc\tlink.ttp
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DIBM6000 for compiling on IBM 6000 systems
+# add -DCREATIONDATE if your system has a working time() and you want dated files
+# (for VM/CMS, see the MKDVIPS.EXEC file in the vmcms subdirectory).
+#
+# If you define FONTLIB, make sure to also give definitions to
+# FLIPATH and FLINAME.
+#
+# If your compiler doesn't like void*, then add
+# -DVOID=char
+#
+DEFS = -DDEFRES=300 -DCREATIONDATE
+
+# either use
+# OPT = -O -funsigned-char
+# or
+OPT = -DATARIST -K -P -R -W-pro -Id:\tcc\h -Id:\tcc\h\x
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+
+# If you want EMTEX specials, define the following.
+EMTEX = # -DEMTEX
+
+# for SYSV (and friends which use <string.h> instead of <strings.h>)
+# define the c-compiler flag
+# add -D_POSIX_SOURCE if you are POSIX (also define SYSV) (only relevant
+# for subdir searching)
+# SYS = -DSYSV
+
+CFLAGS = $(DEFS) $(OPT) $(SYS) $(SECURE) $(EMTEX) $(DEFPFMT)
+LDFLAGS =
+
+SRC = dospecial.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c \
+ download.c prescan.c scanpage.c skippage.c output.c scalewidth.c \
+ dosection.c dopage.c resident.c search.c unpack.c drawps.c \
+ header.c makefont.c repack.c virtualfont.c dpicheck.c finclude.c \
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecial.c
+
+OBJ = dospecial.o dviinput.o fontdef.o loadfont.o dvips.o tfmload.o \
+ download.o prescan.o scanpage.o skippage.o output.o scalewidth.o \
+ dosection.o dopage.o resident.o search.o unpack.o drawps.o \
+ header.o makefont.o repack.o virtualfont.o dpicheck.o finclude.o \
+ pprescan.o papersiz.o flib.o color.o bbox.o emspecial.o
+
+all : afm2tfm.ttp dvips.ttp tex.pro texps.pro texc.pro special.pro \
+ finclude.pro color.pro crop.pro
+
+.c.o:
+ $(CC) $(CFLAGS) $<
+
+dvips.ttp : $(OBJ)
+ ${LD} -O=dvips.ttp -C=dvips.lnk
+
+afm2tfm.ttp : afm2tfm.o
+ $(LD) $(LDFLAGS) -O=afm2tfm.ttp $(LIBS) afm2tfm.o $(FLIBS)
+
+$(OBJ) : dvips.h debug.h
+flib.o resident.o dvips.o loadfont.o tfmload.o : paths.h
+
+squeeze.ttp : squeeze.o
+ $(LD) $(LDFLAGS) -O=squeeze.ttp $(LIBS) squeeze.o $(FLIBS)
diff --git a/Build/source/texk/dvipsk/bbox.c b/Build/source/texk/dvipsk/bbox.c
new file mode 100644
index 00000000000..66a02a11e3e
--- /dev/null
+++ b/Build/source/texk/dvipsk/bbox.c
@@ -0,0 +1,374 @@
+/*
+ * Calculates the bounding box for a one-page .dvi file.
+ * Based on a lot of other dvips stuff. Requires a total re-scan
+ * of the page.
+ *
+ * If you request an EPSF file and specify -a, you may end up
+ * processing a single page four times!
+ */
+#include "dvips.h"
+#include <math.h>
+#include "protos.h"
+
+extern char *nextstring, errbuf[] ;
+extern FILE *tfmfile, *dvifile ;
+extern fontmaptype *ffont ;
+extern integer firstboploc, num, den ;
+extern double mag ;
+extern integer hoff, voff ;
+extern Boolean noomega ;
+
+typedef struct {
+ integer llx, lly, urx, ury ;
+} bbchardesctype ;
+typedef struct {
+ bbchardesctype *bbchardesc ;
+} bbfontdesctype ;
+typedef struct bbtft {
+ integer fontnum ;
+ bbfontdesctype *desc ;
+ struct bbtft *next ;
+} bbfontmaptype ;
+
+static bbfontmaptype *bbffont ;
+
+void bbtfmload P1C(register fontdesctype *, curfnt)
+{
+ register integer i, j ;
+ register integer li, cd = 0 ;
+ integer scaledsize ;
+ integer nw, nh, nd, ns, hd ;
+ integer bc, ec ;
+ integer nco = 0, ncw = 0, npc = 0, no_repeats = 0 ;
+ integer *scaled ;
+ integer *chardat ;
+ int font_level;
+ integer pretend_no_chars;
+ integer slant = 0 ;
+ bbchardesctype *cc ;
+ register bbfontdesctype *bbcurfnt =
+ (bbfontdesctype *)mymalloc(sizeof(bbfontdesctype)) ;
+
+ bbffont->desc = bbcurfnt ;
+ tfmopen(curfnt) ;
+/*
+ * Next, we read the font data from the tfm file, and store it in
+ * our own arrays.
+ */
+ li = tfm16() ;
+ if (li!=0) {
+ font_level = -1;
+ hd = tfm16() ;
+ bc = tfm16() ; ec = tfm16() ;
+ nw = tfm16() ; nh = tfm16(); nd = tfm16();
+ ns = tfm16() ;
+ ns += tfm16() ;
+ ns += tfm16() ;
+ ns += tfm16() ;
+ li = tfm16() ;
+ if (hd<2 || bc>ec+1 || ec>255 || nw>256 || nh>16 || nd>16)
+ badtfm("header") ;
+ } else { /* In an .ofm file */
+ if (noomega) badtfm("length") ;
+ font_level = tfm16();
+ li = tfm32() ;
+ hd = tfm32() ;
+ bc = tfm32() ; ec = tfm32() ;
+ nw = tfm32() ; nh = tfm32() ; nd = tfm32();
+ ns = tfm32() ;
+ ns += tfm32() ;
+ ns += tfm32() ;
+ ns += tfm32() ;
+ li = tfm32() ;
+ li = tfm32() ;
+ if (font_level>1 || hd<2 || bc<0 || ec<0 || nw<2 || nh<1 || nd<1 || ns<1
+ || bc>ec+1 || ec>65535 || nw>65536 || nh>256 || nd>256)
+ badtfm("header") ;
+ if (font_level==1) {
+ nco = tfm32() ;
+ ncw = tfm32() ;
+ npc = tfm32() ;
+ for (i=0; i<12; i++) li=tfm32();
+ }
+ }
+ li = tfm32() ;
+ check_checksum (li, curfnt->checksum, curfnt->name);
+
+ li = tfm32() ;
+ pretend_no_chars=ec+1;
+ if (pretend_no_chars<256) pretend_no_chars=256;
+ bbcurfnt->bbchardesc = (bbchardesctype *)
+ xmalloc(pretend_no_chars*sizeof(bbchardesctype));
+ for (i=2; i<((font_level==1)?nco-29:hd); i++)
+ li = tfm32() ;
+ chardat = (integer *) xmalloc(pretend_no_chars*sizeof(integer)) ;
+ for (i=0; i<pretend_no_chars; i++)
+ chardat[i] = -1 ;
+ for (i=bc; i<=ec; i++) {
+ if (no_repeats>0) {
+ no_repeats-- ;
+ } else if (font_level>=0) {
+ cd = tfm32() ;
+ li = tfm32() ;
+ if (font_level==1) {
+ no_repeats = tfm16() ;
+ for (j=0; j<(npc|1); j++) tfm16() ;
+ ncw -= 3 + npc/2 ;
+ }
+ } else {
+ cd = tfm16() ;
+ li = tfm16() ;
+ }
+ if (cd) chardat[i] = cd ;
+ }
+ if (font_level==1&&ncw!=0) {
+ sprintf(errbuf, "Table size mismatch in %s", curfnt->name) ;
+ error(errbuf) ;
+ }
+ scaledsize = curfnt->scaledsize ;
+ scaled = (integer *) xmalloc((nh + nd)*sizeof(integer)) ;
+ for (i=0; i<nw; i++)
+ tfm32() ;
+ for (i=0; i<nh + nd; i++)
+ scaled[i] = scalewidth(tfm32(), scaledsize) ;
+ for (i=0; i<ns; i++)
+ tfm32() ;
+ slant = tfm32() ;
+ (void)fclose(tfmfile) ;
+ for (i=0; i<pretend_no_chars; i++) {
+ cc = &(bbcurfnt->bbchardesc[i]) ;
+ if (chardat[i] != -1) {
+ halfword iw ;
+ int ih, id ;
+ if (font_level>=0) {
+ iw = chardat[i] >> 16 ;
+ ih = (chardat[i] >> 8) & 255 ;
+ id = chardat[i] & 255 ;
+ } else {
+ iw = chardat[i] >> 8 ;
+ ih = (chardat[i] >> 4) & 15 ;
+ id = chardat[i] & 15 ;
+ }
+ if (iw>=nw || ih>=nh || id>=nd) badtfm("char info") ;
+ cc->ury = scaled[ih] ;
+ cc->lly = - scaled[nh + id] ;
+ cc->llx = 0 ;
+ cc->urx = curfnt->chardesc[i].TFMwidth ;
+ } else {
+ cc->llx = cc->lly = cc->urx = cc->ury = 0 ;
+ }
+ }
+ if (slant) {
+ for (i=0; i<pretend_no_chars; i++) {
+ cc = &(bbcurfnt->bbchardesc[i]) ;
+ li = scalewidth(cc->lly, slant) ;
+ if (slant > 0) cc->llx += li ;
+ else cc->urx += li ;
+ li = scalewidth(cc->ury, slant) ;
+ if (slant > 0) cc->urx += li ;
+ else cc->llx += li ;
+ }
+ }
+ free(chardat) ;
+ free(scaled) ;
+}
+extern struct dvistack {
+ integer hh, vv ;
+ integer h, v, w, x, y, z ;
+} stack[] ;
+static integer llx, lly, urx, ury ;
+void bbspecial P3C(integer, h, integer, v, int, nbytes)
+{
+ float *r = bbdospecial(nbytes) ;
+ if (r) {
+ /* convert from magnified PostScript units back to scaled points */
+ real conv = 72.0 * (real)num / (real)den * (real)mag / 254000000.0 ;
+ if (llx > h + r[0] / conv)
+ llx = (integer) (h + r[0] / conv) ;
+ if (lly > v - r[3] / conv)
+ lly = (integer) (v - r[3] / conv) ;
+ if (urx < h + r[2] / conv)
+ urx = (integer) (h + r[2] / conv) ;
+ if (ury < v - r[1] / conv)
+ ury = (integer) (v - r[1] / conv) ;
+ }
+}
+void bbdopage()
+{
+ register shalfword cmd ;
+ register bbchardesctype *bcd ;
+ register chardesctype *cd ;
+ register integer h ;
+ register fontmaptype *cfnt ;
+ bbfontmaptype *bbcfnt ;
+ integer fnt ;
+ integer mychar ;
+ int charmove ;
+ struct dvistack *sp = stack ;
+ integer v, w, x, y, z ;
+ register fontdesctype *curfnt = 0 ;
+ register bbfontdesctype *bbcurfnt = 0 ;
+
+ w = x = y = z = 0 ;
+ h = 0 ; v = 0 ;
+ llx = lly = 1000000000 ;
+ urx = ury = -1000000000 ;
+ charmove = 0 ;
+ while (1) {
+ switch (cmd=dvibyte()) {
+case 138: break ;
+case 134: /* put2 */
+ if (noomega) error("! synch") ;
+ mychar = dvibyte() ;
+ mychar = (mychar << 8) + dvibyte() ;
+ charmove = 0 ;
+ goto dochar ;
+case 129: /* set2 */
+ if (noomega) error("! synch") ;
+ mychar = dvibyte() ;
+ mychar = (mychar << 8) + dvibyte() ;
+ charmove = 1;
+ goto dochar ;
+case 133: /* put1 */
+ mychar = dvibyte() ;
+ charmove = 0 ;
+ goto dochar ;
+case 128: cmd = dvibyte() ; /* set1 command drops through to setchar */
+default: /* these are commands 0 (setchar0) thru 127 (setchar127) */
+ mychar = cmd ;
+ charmove = 1 ;
+dochar:
+ cd = &(curfnt->chardesc[mychar]) ;
+ bcd = &(bbcurfnt->bbchardesc[mychar]) ;
+ if (h + bcd->llx < llx) llx = h + bcd->llx ;
+ if (h + bcd->urx > urx) urx = h + bcd->urx ;
+ if (v - bcd->ury < lly) lly = v - bcd->ury ;
+ if (v - bcd->lly > ury) ury = v - bcd->lly ;
+ if (charmove)
+ h += cd->TFMwidth ;
+ break ;
+case 130: case 131: case 135: case 136: case 139:
+case 247: case 248: case 249: case 250: case 251: case 252: case 253:
+case 254: case 255: /* unimplemented or illegal commands */
+ error("! synch") ;
+case 132: case 137: /* rules */
+ { integer ry, rx ;
+ ry = signedquad() ; rx = signedquad() ;
+ if (rx>0 && ry>0) {
+ if (h < llx) llx = h ;
+ if (v - ry < lly) lly = v - ry ;
+ if (h + rx > urx) urx = h + rx ;
+ if (v > ury) ury = v ;
+ } else
+ rx = 0 ;
+ if (cmd != 137)
+ h += rx ;
+ break ;
+ }
+case 141: /* push */
+ sp->h = h ; sp->v = v ;
+ sp->w = w ; sp->x = x ; sp->y = y ; sp->z = z ;
+ if (++sp >= &stack[STACKSIZE]) error("! Out of stack space") ;
+ break ;
+case 140: /* eop or end of virtual character */
+ return ;
+case 142: /* pop */
+ if (--sp < stack) error("! More pops than pushes") ;
+ h = sp->h ; v = sp->v ;
+ w = sp->w ; x = sp->x ; y = sp->y ; z = sp->z ;
+ break ;
+case 143: h += signedbyte() ; break ;
+case 144: h += signedpair() ; break ;
+case 145: h += signedtrio() ; break ;
+case 146: h += signedquad() ; break ;
+case 147: h += w ; break ;
+case 148: h += (w = signedbyte()) ; break ;
+case 149: h += (w = signedpair()) ; break ;
+case 150: h += (w = signedtrio()) ; break ;
+case 151: h += (w = signedquad()) ; break ;
+case 152: h += x ; break ;
+case 153: h += (x = signedbyte()) ; break ;
+case 154: h += (x = signedpair()) ; break ;
+case 155: h += (x = signedtrio()) ; break ;
+case 156: h += (x = signedquad()) ; break ;
+case 157: v += signedbyte() ; break ;
+case 158: v += signedpair() ; break ;
+case 159: v += signedtrio() ; break ;
+case 160: v += signedquad() ; break ;
+case 161: v += y ; break ;
+case 162: v += (y = signedbyte()) ; break ;
+case 163: v += (y = signedpair()) ; break ;
+case 164: v += (y = signedtrio()) ; break ;
+case 165: v += (y = signedquad()) ; break ;
+case 166: v += z ; break ;
+case 167: v += (z = signedbyte()) ; break ;
+case 168: v += (z = signedpair()) ; break ;
+case 169: v += (z = signedtrio()) ; break ;
+case 170: v += (z = signedquad()) ; break ;
+case 171: case 172: case 173: case 174: case 175: case 176: case 177:
+case 178: case 179: case 180: case 181: case 182: case 183: case 184:
+case 185: case 186: case 187: case 188: case 189: case 190: case 191:
+case 192: case 193: case 194: case 195: case 196: case 197: case 198:
+case 199: case 200: case 201: case 202: case 203: case 204: case 205:
+case 206: case 207: case 208: case 209: case 210: case 211: case 212:
+case 213: case 214: case 215: case 216: case 217: case 218: case 219:
+case 220: case 221: case 222: case 223: case 224: case 225: case 226:
+case 227: case 228: case 229: case 230: case 231: case 232: case 233:
+case 234: case 235: case 236: case 237: case 238: /* font selection commands */
+ if (cmd < 235) fnt = cmd - 171 ; /* fntnum0 thru fntnum63 */
+ else {
+ fnt = dvibyte() ;
+ while (cmd-- > 235)
+ fnt = (fnt << 8) + dvibyte() ;
+ }
+ for (cfnt=ffont; cfnt; cfnt = cfnt->next)
+ if (cfnt->fontnum == fnt) break ;
+ curfnt = cfnt->desc ;
+ for (bbcfnt=bbffont; bbcfnt; bbcfnt = bbcfnt->next)
+ if (bbcfnt->fontnum == fnt) goto fontfound ;
+ bbcfnt = (bbfontmaptype *)mymalloc(sizeof(bbfontmaptype)) ;
+ bbcfnt->fontnum = fnt ;
+ bbcfnt->next = bbffont ;
+ bbffont = bbcfnt ;
+ bbtfmload(curfnt) ;
+fontfound: bbcurfnt = bbcfnt->desc ;
+ break ;
+case 243: case 244: case 245: case 246: /*fntdef1 */
+ skipover(cmd - 230) ;
+ skipover(dvibyte() + dvibyte()) ;
+ break ;
+case 239: bbspecial(h, v, (int)dvibyte()) ; break ;
+case 240: bbspecial(h, v, (int)twobytes()) ; break ;
+case 241: bbspecial(h, v, (int)threebytes()) ; break ;
+case 242: bbspecial(h, v, (int)signedquad()) ; break ;
+ }
+ }
+}
+void findbb P1C(integer, bop)
+{
+ integer curpos = ftell(dvifile) ;
+ real conv = 72.0 * (real)num / (real)den * (real)mag / 254000000.0 ;
+ real off = 72.0 / conv ;
+ real margin = 1.0 / conv ;
+ real vsize = 792.0 / conv ;
+ real hadj = -72.0 * hoff / 4736286.72 ;
+ real vadj = 72.0 * voff / 4736286.72 ;
+
+ fseek(dvifile, bop, 0) ;
+ bbdopage() ;
+ fseek(dvifile, curpos, 0) ;
+ lly = (int) (vsize - 2 * off - lly) ;
+ ury = (int) (vsize - 2 * off - ury) ;
+ llx = (int)floor((llx + off - margin) * conv - hadj + 0.5) ;
+ lly = (int)floor((lly + off + margin) * conv - vadj + 0.5) ;
+ urx = (int)floor((urx + off + margin) * conv - hadj + 0.5) ;
+ ury = (int)floor((ury + off - margin) * conv - vadj + 0.5) ;
+/* no marks on the page? */
+ if (llx >= urx || lly <= ury)
+ llx = lly = urx = ury = 72 ;
+#ifdef SHORTINT
+ sprintf(nextstring, "%ld %ld %ld %ld", llx, ury, urx, lly) ;
+#else
+ sprintf(nextstring, "%d %d %d %d", llx, ury, urx, lly) ;
+#endif
+}
diff --git a/Build/source/texk/dvipsk/c-auto.in b/Build/source/texk/dvipsk/c-auto.in
new file mode 100644
index 00000000000..9c30520187e
--- /dev/null
+++ b/Build/source/texk/dvipsk/c-auto.in
@@ -0,0 +1,4 @@
+/* c-auto.in. Generated automatically from configure.in by autoheader. */
+
+/* The number of bytes in a int. */
+#undef SIZEOF_INT
diff --git a/Build/source/texk/dvipsk/cmfonts.map b/Build/source/texk/dvipsk/cmfonts.map
new file mode 100644
index 00000000000..56eae90abd0
--- /dev/null
+++ b/Build/source/texk/dvipsk/cmfonts.map
@@ -0,0 +1,77 @@
+cmbxsl10 cmbxsl10 <cmbxsl10.pfb
+cmbxti10 cmbxti10 <cmbxti10.pfb
+cmbx10 cmbx10 <cmbx10.pfb
+cmbx12 cmbx12 <cmbx12.pfb
+cmbx5 cmbx5 <cmbx5.pfb
+cmbx6 cmbx6 <cmbx6.pfb
+cmbx7 cmbx7 <cmbx7.pfb
+cmbx8 cmbx8 <cmbx8.pfb
+cmbx9 cmbx9 <cmbx9.pfb
+cmb10 cmb10 <cmb10.pfb
+cmdunh10 cmdunh10 <cmdunh10.pfb
+cmff10 cmff10 <cmff10.pfb
+cmfib8 cmfib8 <cmfib8.pfb
+cmfi10 cmfi10 <cmfi10.pfb
+cmr10 cmr10 <cmr10.pfb
+cmr12 cmr12 <cmr12.pfb
+cmr17 cmr17 <cmr17.pfb
+cmr6 cmr6 <cmr6.pfb
+cmr7 cmr7 <cmr7.pfb
+cmr8 cmr8 <cmr8.pfb
+cmr9 cmr9 <cmr9.pfb
+cmsl10 cmsl10 <cmsl10.pfb
+cmsl12 cmsl12 <cmsl12.pfb
+cmsl8 cmsl8 <cmsl8.pfb
+cmsl9 cmsl9 <cmsl9.pfb
+cmssbx10 cmssbx10 <cmssbx10.pfb
+cmssdc10 cmssdc10 <cmssdc10.pfb
+cmssi10 cmssi10 <cmssi10.pfb
+cmssi12 cmssi12 <cmssi12.pfb
+cmssi17 cmssi17 <cmssi17.pfb
+cmssi8 cmssi8 <cmssi8.pfb
+cmssi9 cmssi9 <cmssi9.pfb
+cmssqi8 cmssqi8 <cmssqi8.pfb
+cmssq8 cmssq8 <cmssq8.pfb
+cmss10 cmss10 <cmss10.pfb
+cmss12 cmss12 <cmss12.pfb
+cmss17 cmss17 <cmss17.pfb
+cmss8 cmss8 <cmss8.pfb
+cmss9 cmss9 <cmss9.pfb
+cmti10 cmti10 <cmti10.pfb
+cmti12 cmti12 <cmti12.pfb
+cmti7 cmti7 <cmti7.pfb
+cmti8 cmti8 <cmti8.pfb
+cmti9 cmti9 <cmti9.pfb
+cmu10 cmu10 <cmu10.pfb
+cmvtt10 cmvtt10 <cmvtt10.pfb
+cmcsc10 cmcsc10 <cmcsc10.pfb
+cmcsc8 cmcsc8 <cmcsc8.pfb
+cmcsc9 cmcsc9 <cmcsc9.pfb
+cmr5 cmr5 <cmr5.pfb
+cmtex10 cmtex10 <cmtex10.pfb
+cmtex8 cmtex8 <cmtex8.pfb
+cmtex9 cmtex9 <cmtex9.pfb
+cmitt10 cmitt10 <cmitt10.pfb
+cmsltt10 cmsltt10 <cmsltt10.pfb
+cmtcsc10 cmtcsc10 <cmtcsc10.pfb
+cmtt10 cmtt10 <cmtt10.pfb
+cmtt12 cmtt12 <cmtt12.pfb
+cmtt8 cmtt8 <cmtt8.pfb
+cmtt9 cmtt9 <cmtt9.pfb
+cmex10 cmex10 <cmex10.pfb
+cmbsy10 cmbsy10 <cmbsy10.pfb
+cmsy10 cmsy10 <cmsy10.pfb
+cmsy5 cmsy5 <cmsy5.pfb
+cmsy6 cmsy6 <cmsy6.pfb
+cmsy7 cmsy7 <cmsy7.pfb
+cmsy8 cmsy8 <cmsy8.pfb
+cmsy9 cmsy9 <cmsy9.pfb
+cmmib10 cmmib10 <cmmib10.pfb
+cmmi10 cmmi10 <cmmi10.pfb
+cmmi12 cmmi12 <cmmi12.pfb
+cmmi5 cmmi5 <cmmi5.pfb
+cmmi6 cmmi6 <cmmi6.pfb
+cmmi7 cmmi7 <cmmi7.pfb
+cmmi8 cmmi8 <cmmi8.pfb
+cmmi9 cmmi9 <cmmi9.pfb
+cminch cminch <cminch.pfb
diff --git a/Build/source/texk/dvipsk/color.c b/Build/source/texk/dvipsk/color.c
new file mode 100644
index 00000000000..803e8a7511a
--- /dev/null
+++ b/Build/source/texk/dvipsk/color.c
@@ -0,0 +1,240 @@
+/*
+ * This is a set of routines for dvips that are used to process color
+ * commands in the TeX file (passed by \special commands). This was
+ * orignally written by J. Hafner, E. Blanz and M. Flickner of IBM
+ * Research, Almaden Research Center. Contact hafner@almaden.ibm.com.
+ * And then it was completely rewritten by Tomas Rokicki to:
+ *
+ * - Be easier on the memory allocator (malloc/free)
+ * - Use less memory overall (by a great deal) and be faster
+ * - Work with the -C, -a, and other options
+ * - Be more adaptable to other drivers and previewers.
+ *
+ * The motivating idea: we want to be able to process 5,000 page
+ * documents using lots of colors on each page on a 640K IBM PC
+ * relatively quickly.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#include <stdio.h>
+/*
+ * Externals we use.
+ */
+#include "protos.h"
+extern integer pagenum ;
+extern FILE *dvifile ;
+/*
+ * Here we set some limits on some color stuff.
+ */
+#define COLORHASH (89)
+#define MAXCOLORLEN (120) /* maximum color length for background */
+#define INITCOLORLEN (3000) /* initial stack size in chars */
+/*
+ * This is where we store the color information for a particular page.
+ * If we free all of these, we free all of the allocated color
+ * stuff; we do no allocations (but one) other than when we allocate
+ * these.
+ */
+static struct colorpage {
+ struct colorpage *next ;
+ integer boploc ; /* we use the bop loc as a page indicator */
+ char *bg ;
+ char colordat[2] ;
+} *colorhash[COLORHASH] ;
+static char *cstack, *csp, *cend, *bg ;
+/*
+ * This routine sends a color command out. If the command is a
+ * single `word' or starts with a double quote, we send it out
+ * exactly as is (except for any double quote.) If the command
+ * is a word followed by arguments, we send out the arguments and
+ * then the word prefixed by "TeXcolor".
+ */
+void colorcmdout P1C(char *, s)
+{
+ char *p ;
+ char tempword[100] ;
+
+ while (*s && *s <= ' ')
+ s++ ;
+ if (*s == '"') {
+ cmdout(s+1) ;
+ return ;
+ }
+ for (p=s; *p && *p > ' '; p++) ;
+ for (; *p && *p <= ' '; p++) ;
+ if (*p == 0) {
+ cmdout(s) ;
+ return ;
+ }
+ cmdout(p) ;
+ strcpy(tempword, "TeXcolor") ;
+ for (p=tempword + strlen(tempword); *s && *s > ' '; p++, s++)
+ *p = *s ;
+ *p = 0 ;
+ cmdout(tempword) ;
+ return ;
+}
+/*
+ * For a new dvi file, call this. Frees all allocated memory.
+ */
+#define DEFAULTCOLOR "Black"
+void initcolor() {
+ int i ;
+ struct colorpage *p, *q ;
+
+ for (i=0; i<COLORHASH; i++) {
+ for (p=colorhash[i]; p; p = q) {
+ q = p->next ;
+ free(p) ;
+ }
+ colorhash[i] = 0 ;
+ }
+ cstack = (char *)mymalloc(INITCOLORLEN) ;
+ strcpy(cstack, "\n") ;
+ strcat(cstack, DEFAULTCOLOR) ;
+ csp = cstack + strlen(cstack) ;
+ cend = cstack + INITCOLORLEN - 3 ; /* for conservativeness */
+ bg = 0 ;
+}
+/*
+ * This takes a call from predospecial to set the background color for
+ * the current page. It is saved in stackdepth and backed down the
+ * stack during popcolors.
+ */
+void
+background P1C(char *, bkgrnd)
+{
+ if (bkgrnd && *bkgrnd) {
+ if (strlen(bkgrnd) > MAXCOLORLEN)
+ error(" color name too long; ignored") ;
+ else
+ strcpy(bg, bkgrnd) ;
+ }
+}
+/*
+ * This routine puts a call from \special for color on the colorstack
+ * and sets the color in the PostScript.
+ */
+void
+pushcolor P2C(char *, p, Boolean, outtops)
+{
+ while (strlen(p) + csp > cend) {
+ int newlen = 3 * (cend - cstack) ;
+ char *newcs = (char *)mymalloc(newlen) ;
+ strcpy(newcs, cstack) ;
+ csp = newcs + (csp - cstack) ;
+ cend = newcs + newlen - 3 ;
+ cstack = newcs ;
+ }
+ *csp++ = '\n' ;
+ strcpy(csp, p) ;
+ csp += strlen(p) ;
+ if (outtops) {
+ colorcmdout(p) ;
+ }
+}
+/*
+ * This routine removes a color from the colorstack and resets the color
+ * in the PostScript to the previous color.
+ */
+void
+popcolor P1C(Boolean, outtops)
+{
+ char *p = csp - 1 ;
+
+ while (p >= cstack && *p != '\n')
+ p-- ;
+ if (p == cstack)
+ return ; /* We don't pop the last color as that is global */
+ *p = 0 ;
+ csp = p ;
+ for (p--; p >= cstack && *p != '\n'; p--) ;
+ p++ ;
+ if ( outtops ) {
+ colorcmdout(p) ;
+ }
+}
+/*
+ * This routine clears the colorstack, pushes a new color onto the stack
+ * (this is now the root or global color).
+ */
+void
+resetcolorstack P2C(char *, p, int, outtops)
+{
+ char *q = csp - 1 ;
+
+ while (q > cstack && *q != '\n')
+ q-- ;
+ if (q > cstack && outtops == 0) {
+#ifdef SHORTINT
+ (void)fprintf(stderr, "You've mistakenly made a global color change ") ;
+ (void)fprintf(stderr, "to %s within nested colors\n", p) ;
+ (void)fprintf(stderr, "on page %ld. Will try to recover.\n", pagenum) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr, "You've mistakenly made a global color change ") ;
+ (void)fprintf(stderr, "to %s within nested colors\n", p) ;
+ (void)fprintf(stderr, "on page %d. Will try to recover.\n", pagenum) ;
+#endif /* ~SHORTINT */
+ }
+ csp = cstack ;
+ *csp = 0 ;
+ pushcolor(p, outtops) ;
+}
+/*
+ * This routine is a bit magic. It looks up the page in the current
+ * hash table. If the page is already entered in the hash table, then
+ * it restores the color to what that page had, and sets the last
+ * color. This will occur if this is not the first time that this
+ * page has been encountered.
+ *
+ * If, on the other hand, this is the first time that the page has
+ * been encountered, then it will create a new hash entry and copy the
+ * current color information into it. Since we can only encounter a
+ * new page after having just finished scanning the previous page,
+ * this is safe.
+ */
+void
+bopcolor P1C(int, outtops)
+{
+ integer pageloc = ftell(dvifile) ;
+ int h = pageloc % COLORHASH ;
+ struct colorpage *p = colorhash[h] ;
+
+ while (p) {
+ if (p->boploc == pageloc)
+ break ;
+ else
+ p = p->next ;
+ }
+ if (p) {
+ strcpy(cstack, p->colordat) ;
+ csp = cstack + strlen(cstack) ;
+ bg = p->bg ;
+ if (outtops && strcmp(bg, "White")!=0 && bg[0]) {
+ cmdout("gsave") ;
+ colorcmdout(bg) ;
+ cmdout("clippath fill grestore") ;
+ }
+ } else {
+ p = (struct colorpage *)mymalloc((integer)
+ (strlen(cstack) + sizeof(struct colorpage) + MAXCOLORLEN)) ;
+ p->next = colorhash[h] ;
+ p->boploc = pageloc ;
+ strcpy(p->colordat, cstack) ;
+ p->bg = p->colordat + strlen(cstack) + 1 ;
+ if (bg)
+ strcpy(p->bg, bg) ;
+ else
+ *(p->bg) = 0 ;
+ bg = p->bg ;
+ colorhash[h] = p ;
+ }
+ if (outtops) {
+ char *pp = csp - 1 ;
+ while (pp >= cstack && *pp != '\n')
+ pp-- ;
+ pp++ ;
+ if (strcmp(pp, DEFAULTCOLOR)!=0) {
+ colorcmdout(pp) ;
+ }
+ }
+}
diff --git a/Build/source/texk/dvipsk/color.lpro b/Build/source/texk/dvipsk/color.lpro
new file mode 100644
index 00000000000..5959933455e
--- /dev/null
+++ b/Build/source/texk/dvipsk/color.lpro
@@ -0,0 +1,195 @@
+%!
+%% color.lpro: this sets up color macros used by dvips and defines some
+%% default color parameters (if these are not already user
+%% defined by another header file).
+%%
+%% This was written by J. Hafner (hafner@almaden.ibm.com) and was last
+%% modified on 2/14/92. It was then rewritten by Tomas Rokicki to be
+%% smaller.
+%%
+%% The color names used here mostly come from the Crayola Crayon box of
+%% 64 colors, with some small additions and deletions. The names match
+%% those used in the color.[sty,tex] and black.[sty,tex] files.
+%% The actual color parameters were set using a Tektronix Phaser
+%% printer. Approximate PANTONE numbers are given for most colors.
+%%
+%% If any of these colors don't match the reditions given by your
+%% color device, then you can redefine them by adding another header file
+%% to predefine the colors in userdict. In this way you can easily
+%% customize these colors to every device by adding a header entry in the
+%% corresponding config.PRINTER file.
+%%
+%% This header file assumes that tex.pro is already loaded (e.g., B is
+%% defined in that header).
+%%
+TeXDict begin
+%%
+%% This defines the currentcmykcolor and setcmykcolor in terms of rbg
+%% if they are not defined in the current interpreter.
+%%
+/setcmykcolor where {pop}
+ { /setcmykcolor
+ { dup 10 eq {pop setrgbcolor}
+ {1 sub 4 1 roll 3
+ { 3 index add neg dup 0 lt {pop 0} if 3 1 roll
+ } repeat
+ setrgbcolor pop
+ } ifelse
+ } B
+ } ifelse
+/TeXcolorcmyk { setcmykcolor } def
+/TeXcolorrgb { setrgbcolor } def
+/TeXcolorgrey { setgray } def
+/TeXcolorgray { setgray } def
+/TeXcolorhsb { sethsbcolor } def
+/currentcmykcolor where {pop}
+ { /currentcmykcolor
+ { currentrgbcolor 10 % The 10 signals colors in rbg on stack
+ } B
+ } ifelse
+%%
+%% This is intended to set the color states by these defaults, only if
+%% they are not defined elsewhere, particularly in another header file.
+%% If defined in another header file, they must be defined in userdict to
+%% take effect.
+%%
+/DC { % define a color
+ exch dup userdict exch known { pop pop } { X } ifelse
+} B
+%% GreenYellow Approximate PANTONE 388
+/GreenYellow { 0.15 0 0.69 0 setcmykcolor } DC
+%% Yellow Approximate PANTONE YELLOW
+/Yellow { 0 0 1 0 setcmykcolor } DC
+%% Goldenrod Approximate PANTONE 109
+/Goldenrod { 0 0.10 0.84 0 setcmykcolor } DC
+%% Dandelion Approximate PANTONE 123
+/Dandelion { 0 0.29 0.84 0 setcmykcolor } DC
+%% Apricot Approximate PANTONE 1565
+/Apricot { 0 0.32 0.52 0 setcmykcolor } DC
+%% Peach Approximate PANTONE 164
+/Peach { 0 0.50 0.70 0 setcmykcolor } DC
+%% Melon Approximate PANTONE 177
+/Melon { 0 0.46 0.50 0 setcmykcolor } DC
+%% YellowOrange Approximate PANTONE 130
+/YellowOrange { 0 0.42 1 0 setcmykcolor } DC
+%% Orange Approximate PANTONE ORANGE-021
+/Orange { 0 0.61 0.87 0 setcmykcolor } DC
+%% BurntOrange Approximate PANTONE 388
+/BurntOrange { 0 0.51 1 0 setcmykcolor } DC
+%% Bittersweet Approximate PANTONE 167
+/Bittersweet { 0 0.75 1 0.24 setcmykcolor } DC
+%% RedOrange Approximate PANTONE 179
+/RedOrange { 0 0.77 0.87 0 setcmykcolor } DC
+%% Mahogany Approximate PANTONE 484
+/Mahogany { 0 0.85 0.87 0.35 setcmykcolor } DC
+%% Maroon Approximate PANTONE 201
+/Maroon { 0 0.87 0.68 0.32 setcmykcolor } DC
+%% BrickRed Approximate PANTONE 1805
+/BrickRed { 0 0.89 0.94 0.28 setcmykcolor } DC
+%% Red VERY-Approx PANTONE RED
+/Red { 0 1 1 0 setcmykcolor } DC
+%% OrangeRed No PANTONE match
+/OrangeRed { 0 1 0.50 0 setcmykcolor } DC
+%% RubineRed Approximate PANTONE RUBINE-RED
+/RubineRed { 0 1 0.13 0 setcmykcolor } DC
+%% WildStrawberry Approximate PANTONE 206
+/WildStrawberry { 0 0.96 0.39 0 setcmykcolor } DC
+%% Salmon Approximate PANTONE 183
+/Salmon { 0 0.53 0.38 0 setcmykcolor } DC
+%% CarnationPink Approximate PANTONE 218
+/CarnationPink { 0 0.63 0 0 setcmykcolor } DC
+%% Magenta Approximate PANTONE PROCESS-MAGENTA
+/Magenta { 0 1 0 0 setcmykcolor } DC
+%% VioletRed Approximate PANTONE 219
+/VioletRed { 0 0.81 0 0 setcmykcolor } DC
+%% Rhodamine Approximate PANTONE RHODAMINE-RED
+/Rhodamine { 0 0.82 0 0 setcmykcolor } DC
+%% Mulberry Approximate PANTONE 241
+/Mulberry { 0.34 0.90 0 0.02 setcmykcolor } DC
+%% RedViolet Approximate PANTONE 234
+/RedViolet { 0.07 0.90 0 0.34 setcmykcolor } DC
+%% Fuchsia Approximate PANTONE 248
+/Fuchsia { 0.47 0.91 0 0.08 setcmykcolor } DC
+%% Lavender Approximate PANTONE 223
+/Lavender { 0 0.48 0 0 setcmykcolor } DC
+%% Thistle Approximate PANTONE 245
+/Thistle { 0.12 0.59 0 0 setcmykcolor } DC
+%% Orchid Approximate PANTONE 252
+/Orchid { 0.32 0.64 0 0 setcmykcolor } DC
+%% DarkOrchid No PANTONE match
+/DarkOrchid { 0.40 0.80 0.20 0 setcmykcolor } DC
+%% Purple Approximate PANTONE PURPLE
+/Purple { 0.45 0.86 0 0 setcmykcolor } DC
+%% Plum VERY-Approx PANTONE 518
+/Plum { 0.50 1 0 0 setcmykcolor } DC
+%% Violet Approximate PANTONE VIOLET
+/Violet { 0.79 0.88 0 0 setcmykcolor } DC
+%% RoyalPurple Approximate PANTONE 267
+/RoyalPurple { 0.75 0.90 0 0 setcmykcolor } DC
+%% BlueViolet Approximate PANTONE 2755
+/BlueViolet { 0.86 0.91 0 0.04 setcmykcolor } DC
+%% Periwinkle Approximate PANTONE 2715
+/Periwinkle { 0.57 0.55 0 0 setcmykcolor } DC
+%% CadetBlue Approximate PANTONE (534+535)/2
+/CadetBlue { 0.62 0.57 0.23 0 setcmykcolor } DC
+%% CornflowerBlue Approximate PANTONE 292
+/CornflowerBlue { 0.65 0.13 0 0 setcmykcolor } DC
+%% MidnightBlue Approximate PANTONE 302
+/MidnightBlue { 0.98 0.13 0 0.43 setcmykcolor } DC
+%% NavyBlue Approximate PANTONE 293
+/NavyBlue { 0.94 0.54 0 0 setcmykcolor } DC
+%% RoyalBlue No PANTONE match
+/RoyalBlue { 1 0.50 0 0 setcmykcolor } DC
+%% Blue Approximate PANTONE BLUE-072
+/Blue { 1 1 0 0 setcmykcolor } DC
+%% Cerulean Approximate PANTONE 3005
+/Cerulean { 0.94 0.11 0 0 setcmykcolor } DC
+%% Cyan Approximate PANTONE PROCESS-CYAN
+/Cyan { 1 0 0 0 setcmykcolor } DC
+%% ProcessBlue Approximate PANTONE PROCESS-BLUE
+/ProcessBlue { 0.96 0 0 0 setcmykcolor } DC
+%% SkyBlue Approximate PANTONE 2985
+/SkyBlue { 0.62 0 0.12 0 setcmykcolor } DC
+%% Turquoise Approximate PANTONE (312+313)/2
+/Turquoise { 0.85 0 0.20 0 setcmykcolor } DC
+%% TealBlue Approximate PANTONE 3145
+/TealBlue { 0.86 0 0.34 0.02 setcmykcolor } DC
+%% Aquamarine Approximate PANTONE 3135
+/Aquamarine { 0.82 0 0.30 0 setcmykcolor } DC
+%% BlueGreen Approximate PANTONE 320
+/BlueGreen { 0.85 0 0.33 0 setcmykcolor } DC
+%% Emerald No PANTONE match
+/Emerald { 1 0 0.50 0 setcmykcolor } DC
+%% JungleGreen Approximate PANTONE 328
+/JungleGreen { 0.99 0 0.52 0 setcmykcolor } DC
+%% SeaGreen Approximate PANTONE 3268
+/SeaGreen { 0.69 0 0.50 0 setcmykcolor } DC
+%% Green VERY-Approx PANTONE GREEN
+/Green { 1 0 1 0 setcmykcolor } DC
+%% ForestGreen Approximate PANTONE 349
+/ForestGreen { 0.91 0 0.88 0.12 setcmykcolor } DC
+%% PineGreen Approximate PANTONE 323
+/PineGreen { 0.92 0 0.59 0.25 setcmykcolor } DC
+%% LimeGreen No PANTONE match
+/LimeGreen { 0.50 0 1 0 setcmykcolor } DC
+%% YellowGreen Approximate PANTONE 375
+/YellowGreen { 0.44 0 0.74 0 setcmykcolor } DC
+%% SpringGreen Approximate PANTONE 381
+/SpringGreen { 0.26 0 0.76 0 setcmykcolor } DC
+%% OliveGreen Approximate PANTONE 582
+/OliveGreen { 0.64 0 0.95 0.40 setcmykcolor } DC
+%% RawSienna Approximate PANTONE 154
+/RawSienna { 0 0.72 1 0.45 setcmykcolor } DC
+%% Sepia Approximate PANTONE 161
+/Sepia { 0 0.83 1 0.70 setcmykcolor } DC
+%% Brown Approximate PANTONE 1615
+/Brown { 0 0.81 1 0.60 setcmykcolor } DC
+%% Tan No PANTONE match
+/Tan { 0.14 0.42 0.56 0 setcmykcolor } DC
+%% Gray Approximate PANTONE COOL-GRAY-8
+/Gray { 0 0 0 0.50 setcmykcolor } DC
+%% Black Approximate PANTONE PROCESS-BLACK
+/Black { 0 0 0 1 setcmykcolor } DC
+%% White No PANTONE match
+/White { 0 0 0 0 setcmykcolor } DC
+end
diff --git a/Build/source/texk/dvipsk/config.h b/Build/source/texk/dvipsk/config.h
new file mode 100644
index 00000000000..46581b6ee52
--- /dev/null
+++ b/Build/source/texk/dvipsk/config.h
@@ -0,0 +1,86 @@
+/* config.h: master configuration file, included first by all compilable
+ source files (not headers). */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+/* The stuff from the path searching library. */
+#include <kpathsea/config.h>
+
+/* How to open files with fopen. */
+#include <kpathsea/c-fopen.h>
+
+/* How the filenames' parts are separated. */
+#include <kpathsea/c-pathch.h>
+
+/* Have to get the enum constants below, sigh. Still better than
+ repeating the definitions everywhere we need them. */
+#include <kpathsea/tex-file.h>
+
+#ifdef __STDC__
+#define NeedFunctionPrototypes 1
+#include <kpathsea/c-proto.h>
+#endif
+
+#include <c-auto.h>
+
+/* For kpathsea, we don't have paths, we have formats. This is so
+ we can do lazy evaluation of only the formats we need, instead of
+ having to initialize everything in the world. */
+#define figpath kpse_pict_format
+#define pictpath kpse_pict_format
+#define pkpath kpse_pk_format
+#define tfmpath kpse_tfm_format
+#define ovfpath kpse_ovf_format
+#define ofmpath kpse_ofm_format
+#define vfpath kpse_vf_format
+#define configpath kpse_dvips_config_format
+#define headerpath kpse_tex_ps_header_format
+#define type1 kpse_type1_format
+#define mappath kpse_fontmap_format
+#define encpath kpse_enc_format
+
+#if (defined (DOS) || defined (MSDOS)) && !defined (__DJGPP__)
+#undef DOS
+#undef MSDOS
+#define DOS
+#define MSDOS
+#endif
+
+/* dvips has a different name for this. */
+#if SIZEOF_INT < 4
+#define SHORTINT
+#endif
+
+#define READ FOPEN_R_MODE
+#define READBIN FOPEN_RBIN_MODE
+#define WRITEBIN FOPEN_WBIN_MODE
+
+/* Include various things by default. */
+#ifndef NO_HPS
+#define HPS
+#endif
+#ifndef NO_TPIC
+#define TPIC
+#endif
+#ifndef NO_EMTEX
+#define EMTEX
+#endif
+
+/* Include debugging by default, too. */
+#ifndef NO_DEBUG
+#undef DEBUG
+#define DEBUG
+
+/* To pass along to kpathsea. (Avoid changing debug.h.) */
+#define D_STAT (1<<9)
+#define D_HASH (1<<10)
+#define D_EXPAND (1<<11)
+#define D_SEARCH (1<<12)
+#endif
+
+/* These are defined under NT, but we have variable names. */
+#undef ERROR
+#undef NO_ERROR
+
+#endif /* not CONFIG_H */
diff --git a/Build/source/texk/dvipsk/config.ps b/Build/source/texk/dvipsk/config.ps
new file mode 100644
index 00000000000..d8c0d343330
--- /dev/null
+++ b/Build/source/texk/dvipsk/config.ps
@@ -0,0 +1,86 @@
+* Configuration file for dvips.
+*
+* Default resolution. This needs to be correct.
+D 300
+*
+* Metafont mode to use to generate bitmap fonts. This needs to be a
+* mode with the specified resolution. Various hardwired defaults are
+* used for a few resolutions, but it is best to specify it explicitly.
+* http://www.ctan.org/tex-archive/fonts/modes/modes.mf has a list of modes.
+*M modename
+*
+* Amount of memory. Not crucial to be exact, if you have a lot.
+m 470000
+*
+* If unspecified, output goes to a file.
+* To send output via a pipe to a printing program, use something like:
+*o |lpr
+*o |lpr -Pmyprinter
+* To send output to standard output by default, use:
+*o -
+*
+* z1 is "secure", i.e., inhibits execution of `shell commands` in \specials.
+* Dvips allows this by default.
+*z1
+*
+* Additional default .map files.
+* p +cmfonts.map
+* p +lafonts.map
+* p +cyrfonts.map
+* p +eufonts.map
+*
+* Last resort bitmap sizes.
+R 240 270 300 329 360 432 518 622 746 896
+*
+*
+* Paper size information. First definition is the default.
+*
+* If your default is a4 uncomment the following definition
+* and comment out the letterSize definition.
+@ a4size 210mm 297mm
+@+ ! %%DocumentPaperSizes: a4
+@+ %%PaperSize: a4
+
+*@ letterSize 8.5in 11in
+@+ ! %%DocumentPaperSizes: Letter
+
+@ letter 8.5in 11in
+@+ ! %%DocumentPaperSizes: Letter
+@+ %%BeginPaperSize: Letter
+@+ %letter
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%BeginPaperSize: Legal
+@+ %legal
+@+ %%EndPaperSize
+
+@ ledger 17in 11in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ %ledger
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ %11x17
+@+ %%EndPaperSize
+
+@ a4 210mm 297mm
+@+ ! %%DocumentPaperSizes: a4
+@+ %%BeginPaperSize: a4
+@+ %a4
+@+ %%EndPaperSize
+
+@ a3 297mm 420mm
+@+ ! %%DocumentPaperSizes: a3
+@+ %%BeginPaperSize: a3
+@+ %a3
+@+ %%EndPaperSize
+
+@ unknown 0in 0in
+@+ statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
+@+ setpageparams } stopped end } { true } ifelse { statusdict /setpage known
+@+ { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
diff --git a/Build/source/texk/dvipsk/configure b/Build/source/texk/dvipsk/configure
new file mode 100755
index 00000000000..ed9c57caaca
--- /dev/null
+++ b/Build/source/texk/dvipsk/configure
@@ -0,0 +1,1777 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer"
+ac_help="$ac_help
+ --without-mktexmf-default do not run mktexmf if MF source missing"
+ac_help="$ac_help
+ --without-mktexpk-default do not run mktexpk if PK font missing"
+ac_help="$ac_help
+ --without-mktextfm-default do not run mktextfm if TFM file missing"
+ac_help="$ac_help
+ --without-mkocp-default do not run mkocp if OCP file missing"
+ac_help="$ac_help
+ --without-mkofm-default do not run mkofm if OFM file missing"
+ac_help="$ac_help
+ --with-mktexfmt-default run mktexfmt if format file missing"
+ac_help="$ac_help
+ --with-mktextex-default run mktextex if TeX source missing"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+ac_config_files=
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_envvar| sed 's/[_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: invalid variable name: $ac_envvar" 1>&2; exit 1; }
+ fi
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=dvips.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:559: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test $ac_x $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:590: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test $ac_x $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:642: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test $ac_x $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:675: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 686 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:717: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:722: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:731: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:750: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ case $ac_dir in
+ /*|[A-z]:/*) ac_aux_dir=$ac_dir;;
+ *) ac_aux_dir=`pwd`/$ac_dir;;
+ esac
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ case $ac_dir in
+ /*|[A-z]:/*) ac_aux_dir=$ac_dir;;
+ *) ac_aux_dir=`pwd`/$ac_dir;;
+ esac
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:818: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ # Hack for MSDOS and descendants.
+ if test -z "$COMSPEC"; then ac_x=-f; else ac_x=-x; fi
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test $ac_x $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:873: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:900: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftestdata
+# MS-DOS is a special case, because it sort of pretends that ln -s
+# works for executables.
+if test -z "$COMSPEC" && ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+# If libm is present, use it.
+echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
+echo "configure:925: checking for main in -lm" >&5
+ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lm $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 933 "configure"
+#include "confdefs.h"
+
+int main() {
+main()
+; return 0; }
+EOF
+if { (eval echo configure:940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -lm"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+
+
+echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
+echo "configure:964: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6
+ if test "x$USE_MAINTAINER_MODE" = xyes; then
+ MAINT=
+ else
+ MAINT='#M#'
+ fi
+
+
+
+echo $ac_n "checking for loader (symbol LD)""... $ac_c" 1>&6
+echo "configure:983: checking for loader (symbol LD)" >&5
+if eval "test \"`echo '$''{'cf_cv_subst_LD'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+test -z "$LD" && LD=ld
+cf_cv_subst_LD=$LD
+fi
+
+LD=${cf_cv_subst_LD}
+echo "$ac_t""$LD" 1>&6
+
+
+echo $ac_n "checking for archiver (symbol AR)""... $ac_c" 1>&6
+echo "configure:997: checking for archiver (symbol AR)" >&5
+if eval "test \"`echo '$''{'cf_cv_subst_AR'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+test -z "$AR" && AR=ar
+cf_cv_subst_AR=$AR
+fi
+
+AR=${cf_cv_subst_AR}
+echo "$ac_t""$AR" 1>&6
+
+
+echo $ac_n "checking for archiver options (symbol ARFLAGS)""... $ac_c" 1>&6
+echo "configure:1011: checking for archiver options (symbol ARFLAGS)" >&5
+if eval "test \"`echo '$''{'cf_cv_subst_ARFLAGS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+test -z "$ARFLAGS" && ARFLAGS=rc
+cf_cv_subst_ARFLAGS=$ARFLAGS
+fi
+
+ARFLAGS=${cf_cv_subst_ARFLAGS}
+echo "$ac_t""$ARFLAGS" 1>&6
+
+
+
+# Check whether --with-mktexmf-default or --without-mktexmf-default was given.
+if test "${with_mktexmf_default+set}" = set; then
+ withval="$with_mktexmf_default"
+ :
+else
+ with_mktexmf_default=yes
+fi
+
+# Check whether --with-mktexpk-default or --without-mktexpk-default was given.
+if test "${with_mktexpk_default+set}" = set; then
+ withval="$with_mktexpk_default"
+ :
+else
+ with_mktexpk_default=yes
+fi
+
+# Check whether --with-mktextfm-default or --without-mktextfm-default was given.
+if test "${with_mktextfm_default+set}" = set; then
+ withval="$with_mktextfm_default"
+ :
+else
+ with_mktextfm_default=yes
+fi
+
+# Check whether --with-mkocp-default or --without-mkocp-default was given.
+if test "${with_mkocp_default+set}" = set; then
+ withval="$with_mkocp_default"
+ :
+else
+ with_mkocp_default=yes
+fi
+
+# Check whether --with-mkofm-default or --without-mkofm-default was given.
+if test "${with_mkofm_default+set}" = set; then
+ withval="$with_mkofm_default"
+ :
+else
+ with_mkofm_default=yes
+fi
+
+# Check whether --with-mktexfmt-default or --without-mktexfmt-default was given.
+if test "${with_mktexfmt_default+set}" = set; then
+ withval="$with_mktexfmt_default"
+ :
+fi
+
+# Check whether --with-mktextex-default or --without-mktextex-default was given.
+if test "${with_mktextex_default+set}" = set; then
+ withval="$with_mktextex_default"
+ with_mktextex_default=yes
+else
+ with_mktextex_default=no
+fi
+
+
+echo $ac_n "checking where the main texmf tree is located""... $ac_c" 1>&6
+echo "configure:1081: checking where the main texmf tree is located" >&5
+texmfmain=
+if test "x$datadir" != 'x${prefix}/share'; then
+ # First case, datadir is defined...
+ eval p=\"$datadir\"
+ # Unconditionally set the directory, but...
+ texmfmain=`echo "$p/texmf" | sed 's,//*,/,g'`
+ # ... do complain if it wasn't found.
+ if test -d "$texmfmain"; then
+ echo "$ac_t"""$texmfmain"" 1>&6
+ else
+ echo "$ac_t""not found" 1>&6
+ echo "configure: warning: No texmf tree found at $texmfmain.
+ *****************************************************************
+ * Error: The main texmf tree was not found. *
+ * If you do not have the files, you should be able to them from *
+ * the same place you got these sources from, or from one of the *
+ * CTAN hosts. *
+ *****************************************************************
+ Winging it." 1>&2
+ fi
+else
+ # Second case, datadir is default...
+ if test "x$prefix" = "xNONE"; then
+ p="$ac_default_prefix"
+ else
+ eval p=\"$prefix\"
+ fi
+ for e in share/texmf lib/texmf texmf; do
+ if test -d "$p/$e"; then
+ texmfmain='${prefix}'/"$e"
+ break
+ fi
+ done
+ if test -z "$texmfmain" && test "x$prefix" = "xNONE"; then
+ # Still no texmfmain found, no prefix set, perhaps kpsewhich is
+ # installed and can help us out.
+ texmfmain=`kpsewhich --expand-path='$TEXMFMAIN'` 2>/dev/null
+ fi
+ texmfmain=`echo "$texmfmain" | sed 's,//*,/,g'`
+ if test -n "$texmfmain"; then
+ echo "$ac_t"""$texmfmain"" 1>&6
+ else
+ eval texmfmain="$datadir/texmf"
+ echo "$ac_t""not found" 1>&6
+ echo "configure: warning: The main texmf tree was not found at $texmfmain.
+ *****************************************************************
+ * Error: The main texmf tree was not found. *
+ * Use the --datadir option to specify its parent directory. *
+ * If you do not have the files, you should be able to them from *
+ * the same place you got these sources from, or from one of the *
+ * CTAN hosts. *
+ *****************************************************************
+ Winging it by pretending $texmfmain is correct." 1>&2
+ fi
+fi
+
+
+
+
+
+ZZ=
+if test "$cross_compiling" = yes &&
+ (test "x$CC" = "xdos-gcc" || test "x$CC" = "xi386-mingw32-gcc" || test "x$CC" = "xgnuwin32gcc") ; then
+ZZ=$CC
+unset CC
+cross_compiling=no
+fi
+
+echo $ac_n "checking size of int""... $ac_c" 1>&6
+echo "configure:1151: checking size of int" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1159 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(int));
+ exit(0);
+}
+EOF
+if { (eval echo configure:1170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_sizeof_int=`cat conftestval`
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_int=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_int" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+EOF
+
+
+
+if test "x$ZZ" = "xdos-gcc" || test "x$ZZ" = "xi386-mingw32-gcc" || test "x$ZZ" = "xgnuwin32gcc" ; then
+CC=$ZZ
+cross_compiling=yes
+fi
+
+
+# If you're cross-compiling, these macros set up the variables in
+# ../make/cross.mk: BUILDCC, BUILDCFLAGS, BUILDCCLD etc.
+if test "$cross_compiling" = yes; then
+ if test -z "${BUILDCC}"; then
+ BUILDCC='cc'
+ fi
+ echo "$ac_t""setting \$BUILDCC to ${BUILDCC}" 1>&6
+else
+ if test -n "${BUILDCC}"; then
+ echo "configure: warning: \$BUILDCC set but not cross-compiling." 1>&2
+ fi
+ BUILDCC='$(CC)'
+fi
+
+
+if test "$cross_compiling" = yes; then
+ if test -z "${BUILDCFLAGS}"; then
+ BUILDCFLAGS='$(BUILDXCFLAGS)'
+ fi
+ echo "$ac_t""setting \$BUILDCFLAGS to ${BUILDCFLAGS}" 1>&6
+else
+ if test -n "${BUILDCFLAGS}"; then
+ echo "configure: warning: \$BUILDCFLAGS set but not cross-compiling." 1>&2
+ fi
+ BUILDCFLAGS='$(CFLAGS)'
+fi
+
+
+if test "$cross_compiling" = yes; then
+ if test -z "${BUILDCPPFLAGS}"; then
+ BUILDCPPFLAGS='$(BUILDXCPPFLAGS)'
+ fi
+ echo "$ac_t""setting \$BUILDCPPFLAGS to ${BUILDCPPFLAGS}" 1>&6
+else
+ if test -n "${BUILDCPPFLAGS}"; then
+ echo "configure: warning: \$BUILDCPPFLAGS set but not cross-compiling." 1>&2
+ fi
+ BUILDCPPFLAGS='$(CPPFLAGS)'
+fi
+
+
+if test "$cross_compiling" = yes; then
+ if test -z "${BUILDLDFLAGS}"; then
+ BUILDLDFLAGS='$(BUILDXLDFLAGS)'
+ fi
+ echo "$ac_t""setting \$BUILDLDFLAGS to ${BUILDLDFLAGS}" 1>&6
+else
+ if test -n "${BUILDLDFLAGS}"; then
+ echo "configure: warning: \$BUILDLDFLAGS set but not cross-compiling." 1>&2
+ fi
+ BUILDLDFLAGS='$(LDFLAGS)'
+fi
+
+
+if test "$cross_compiling" = yes; then
+ if test -z "${BUILDCCLD}"; then
+ BUILDCCLD='$(BUILDCC)'
+ fi
+ echo "$ac_t""setting \$BUILDCCLD to ${BUILDCCLD}" 1>&6
+else
+ if test -n "${BUILDCCLD}"; then
+ echo "configure: warning: \$BUILDCCLD set but not cross-compiling." 1>&2
+ fi
+ BUILDCCLD='$(CCLD)'
+fi
+
+
+
+ac_config_files="$ac_config_files Makefile"
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+
+trap 'rm -fr `echo "$ac_config_files c-auto.h:c-auto.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@CC@%$CC%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@LN_S@%$LN_S%g
+s%@MAINT@%$MAINT%g
+s%@LD@%$LD%g
+s%@AR@%$AR%g
+s%@ARFLAGS@%$ARFLAGS%g
+s%@texmfmain@%$texmfmain%g
+s%@BUILDCC@%$BUILDCC%g
+s%@BUILDCFLAGS@%$BUILDCFLAGS%g
+s%@BUILDCPPFLAGS@%$BUILDCPPFLAGS%g
+s%@BUILDLDFLAGS@%$BUILDLDFLAGS%g
+s%@BUILDCCLD@%$BUILDCCLD%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"$ac_config_files"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*|[A-z]:/*) # Absolute path.
+ srcdir="$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ "") ;;
+ [/$]*|[A-z]:/*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ rm -f conftest.in
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%:% $ac_given_srcdir/%g" -e "s%^%$ac_given_srcdir/%"`
+ cat $ac_file_inputs > conftest.in
+ #
+ # Replace lines of the form ac_include foo with the contents of foo:
+ # first, from the ac_include lines construct a list of file names.
+ # From that list, we construct a second list of those files that exist.
+ # Then we construct lists of sed commands for including those files,
+ # and a sed command that removes the ac_include lines. We don't attempt
+ # to read non-existent files because some (buggy) versions of sed choke
+ # on this. Have to use sed because old (Ultrix, SunOS) awk does not support
+ # getline or system. (Anyway, configure scripts aren't supposed to use awk.)
+ # Can't use only one -e and commands {dr foo} because foo has to be last.
+ # Be careful, because the filename may contain /. Be careful with
+ # whitespace; we need to use echo.
+ #
+ file_substs=`sed -n '/^ac_include/s%ac_include[ ]*\(.*\)%\1%p' conftest.in`
+ # Create the sed command line ...
+ if test -n "$file_substs"; then
+ echo "configure: warning: ac_include is obsolete; instead use kpse_include" 1>&2
+ file_subst_cmd="sed -e 's/^ac_include/kpse_include/'"
+ else
+ file_subst_cmd='sed'
+ fi
+ kpse_substs=`sed -n '/^kpse_include/s%kpse_include[ ]*\(.*\)%\1%p' conftest.in`
+ for ac_inc in $file_substs $kpse_substs; do
+ if test -f "$ac_given_srcdir/$ac_inc"; then
+ ac_mung=`echo $ac_inc | sed 's,/,%,g'`
+ file_subst_cmd="$file_subst_cmd -e '/^kpse_include $ac_mung$/r $ac_given_srcdir/$ac_inc'"
+ fi
+ done
+ file_subst_cmd="$file_subst_cmd -e '/^kpse_include/d'"
+ # ... and fix the whitespace and escaped slashes.
+ file_subst_cmd=`echo "$file_subst_cmd" | sed -e 's,%,\\\/,g' \
+-e 's/kpse_include /kpse_include[ ]*/g'`
+ # I can't find any way to do variable substitution in the sed commands
+ # (so the user could have, e.g., $top_srcdir in their ac_include line).
+ (eval $file_subst_cmd conftest.in) \
+ | sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s* conftest.in
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ].*$%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS=" c-auto.h:c-auto.in"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%:% $ac_given_srcdir/%g" -e "s%^%$ac_given_srcdir/%"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+date >stamp-auto
+
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file and --srcdir arguments so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ for ac_arg in $ac_configure_args; do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case "$ac_arg" in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
+ esac
+ done
+
+ for ac_config_dir in : $subdirs; do
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ if test ! -d $srcdir/$ac_config_dir; then
+ continue
+ fi
+
+ echo configuring in $ac_config_dir
+
+ case "$srcdir" in
+ .) ;;
+ *)
+ if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :;
+ else
+ { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; }
+ fi
+ ;;
+ esac
+
+ ac_popdir=`pwd`
+ cd $ac_config_dir
+
+ # A "../" for each directory in /$ac_config_dir.
+ ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
+
+ case "$srcdir" in
+ .) # No --srcdir option. We are building in place.
+ ac_sub_srcdir=$srcdir ;;
+ /*|[A-z]:/*) # Absolute path.
+ ac_sub_srcdir=$srcdir/$ac_config_dir ;;
+ *) # Relative path.
+ ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
+ esac
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f ./configure; then
+ ac_sub_configure=./configure
+ elif test -f $ac_sub_srcdir/configure; then
+ ac_sub_configure=$ac_sub_srcdir/configure
+ elif test -f $ac_sub_srcdir/configure.in; then
+ ac_sub_configure=$ac_configure
+ else
+ echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+
+ # Make the cache file name correct relative to the subdirectory.
+ case "$cache_file" in
+ /*|[A-z]:/*) ac_sub_cache_file=$cache_file ;;
+ *) # Relative path.
+ ac_sub_cache_file="$ac_dots$cache_file" ;;
+ esac
+ case "$ac_given_INSTALL" in
+ "") ;;
+ [/$]*|[A-z]:/*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
+ # The eval makes quoting arguments work.
+ if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
+ then :
+ else
+ { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
+ fi
+ fi
+
+ cd $ac_popdir
+ done
+fi
+
diff --git a/Build/source/texk/dvipsk/configure.in b/Build/source/texk/dvipsk/configure.in
new file mode 100644
index 00000000000..92acfc45309
--- /dev/null
+++ b/Build/source/texk/dvipsk/configure.in
@@ -0,0 +1,34 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(dvips.c)
+
+AC_CONFIG_HEADERS([c-auto.h:c-auto.in], [date >stamp-auto])
+
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+AC_PROG_LN_S
+
+# If libm is present, use it.
+AC_CHECK_LIB(m, main,LIBS="$LIBS -lm")
+
+
+sinclude(../kpathsea/withenable.ac)
+
+dnl These tests prevent reliable cross-compilation. Sigh.
+dnl Some special hacks are used to make cross-compilation
+dnl succeed in one special case.
+
+AC_UNSET_CC
+AC_CHECK_SIZEOF(int)
+AC_RESET_CC
+
+# If you're cross-compiling, these macros set up the variables in
+# ../make/cross.mk: BUILDCC, BUILDCFLAGS, BUILDCCLD etc.
+KPSE_CROSS_BUILD_VAR(CC, cc)
+KPSE_CROSS_BUILD_VAR(CFLAGS, $(BUILDXCFLAGS))
+KPSE_CROSS_BUILD_VAR(CPPFLAGS, $(BUILDXCPPFLAGS))
+KPSE_CROSS_BUILD_VAR(LDFLAGS, $(BUILDXLDFLAGS))
+KPSE_CROSS_BUILD_VAR(CCLD, $(BUILDCC))
+
+KPSE_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/Build/source/texk/dvipsk/contrib/MakeTeXPK.pl b/Build/source/texk/dvipsk/contrib/MakeTeXPK.pl
new file mode 100644
index 00000000000..5e0b8dd5b3d
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/MakeTeXPK.pl
@@ -0,0 +1,198 @@
+#!/usr/local/bin/perl
+#
+# MakeTeXPK.pl
+#
+# v1.0 - modified by John Stoffel (john@wpi.wpi.edu) from the original
+# shell script written by Tomas Rokicki (rokicki@cs.stanford.edu).
+# please feel free to make any modifications you would like to this
+# script, but please acknowledge myself and tom when you make
+# changes.
+#
+# - This was orignally modified to write the fonts to a seperate
+# directory because the fonts were stored on a read-only NFS
+# server. New fonts were then stored in a second location that
+# was world writeable, so fonts could be created automatically.
+#
+# 1. checks both directories before hand for the font's existence.
+# 2. creates the font, then moves it to the writeable directory.
+# 3. changes the ownership and protection so users can't write
+# the font directly.
+#
+# - this script should NOT be used directly, but run through
+# suidscript.pl first and then used as directed.
+#
+# todo:
+# - add automagic support for write-white and write-black printers.
+# now I have two seperate version of the same program. This would
+# mean adding in either a new parameter, or possibly a -w or -b
+# switch. Default could be customizable. What do you think tom?
+#
+# - cleanup the code a little more and write it in better perl.
+#
+# ------------------------------------------------------------------------
+#
+# This script file makes a new TeX PK font, because one wasn't
+# found. Parameters are:
+#
+# name dpi bdpi magnification [[mode] subdir]
+#
+# `name' is the name of the font, such as `cmr10'. `dpi' is
+# the resolution the font is needed at. `bdpi' is the base
+# resolution, useful for figuring out the mode to make the font
+# in. `magnification' is a string to pass to MF as the
+# magnification. `mode', if supplied, is the mode to use.
+#
+# Note that this file must execute Metafont, and then gftopk,
+# and place the result in the correct location for the PostScript
+# driver to find it subsequently. If this doesn't work, it will
+# be evident because MF will be invoked over and over again.
+#
+# Of course, it needs to be set up for your site.
+#
+# -------------------------------------------------------------------------
+
+# setup the environment variables before hand.
+
+$ENV{'PATH'} = '/bin:/usr/bin:/usr/ucb:/usr/local/bin';
+$ENV{'SHELL'} = '/bin/sh' if $ENV{'SHELL'} ne '';
+$ENV{'IFS'} = '' if $ENV{'IFS'} ne '';
+$path = $ENV{'PATH'};
+umask(0022);
+
+# set who the owner and group of the created fonts will be.
+
+$OWNER = "root.tex";
+
+# check number of arguements.
+
+die "Not enough arguments!\n" if ($#ARGV < 3);
+
+# make sure the user doesn't try to give us any control characters as
+# as arguements.
+
+$NAME=&untaint($ARGV[0]);
+$DPI=&untaint($ARGV[1]);
+$BDPI=&untaint($ARGV[2]);
+$MAG=&untaint($ARGV[3]);
+$MODE=&untaint($ARGV[4]) if (defined($ARGV[4]));
+$PK=&untaint($ARGV[5]) if (defined($ARGV[5]));
+
+# texdir and local dir can be the same if $TEXDIR is world writeable, or
+# different if $TEXDIR is read-only and $LOCALDIR is read-write.
+
+$TEXDIR="/usr/local/lib/tex";
+$LOCALDIR="/shared/tex/fonts";
+$DESTDIR="$LOCALDIR/white/pk";
+
+# TEMPDIR needs to be unique for each process because of the possibility
+# of simultaneous processes running this script.
+
+if ($TMPDIR eq '') {
+ $TEMPDIR="/tmp/mtpk.$$";
+ }
+else {
+ $TEMPDIR="$TMPDIR/mtpk.$$";
+ }
+
+if ($MODE eq "") {
+ if ($BDPI eq "300") { $MODE='imagen'; }
+ elsif ($BDPI eq "200") { $MODE='FAX'; }
+ elsif ($BDPI eq "360") { $MODE='nextII'; }
+ elsif ($BDPI eq "400") { $MODE='nexthi'; }
+ elsif ($BDPI eq "100") { $MODE='nextscreen'; }
+ elsif ($BDPI eq "635") { $MODE='linolo'; }
+ elsif ($BDPI eq "1270") { $MODE='linohi'; }
+ elsif ($BDPI eq "2540") { $MODE='linosuper'; }
+ else {
+ die "I don't know the $MODE for $BDPI\nHave your system admin update MakeTeXPK.pl\n"
+ }
+}
+
+# Something like the following is useful at some sites.
+# DESTDIR=/usr/local/lib/tex/fonts/pk.$MODE
+
+$GFNAME="$NAME.$DPI"."gf";
+$PKNAME="$NAME.$DPI"."pk";
+
+# Clean up on normal or abnormal exit
+
+chdir("/") || die "Couldn't cd to /: $!\n";
+
+if (-d $TEMPDIR) {
+ rmdir($TEMPDIR) || die "Couldn't remove $TEMPDIR: $!\n";
+}
+if (-e "$DESTDIR/pktmp.$$") {
+ unlink("$DESTDIR/pktmp.$$") || die "Couldn't rm $DESTDIR/pktmp.$$: $!\n";
+}
+
+if (! -d $DESTDIR) {
+ mkdir($DESTDIR,0755) || die "Couldn't make $DESTDIR: $!\n";
+}
+
+if ($PK ne '') {
+ $DESTDIR = $DESTDIR . $PK;
+ if (! -d $DESTDIR) {
+ mkdir($DESTDIR,0755) || die "Couldn't make $DESTDIR: $!\n";
+ }
+}
+
+mkdir($TEMPDIR,0755) || die "Couldn't make $TEMPDIR: $!\n";
+
+chdir($TEMPDIR) || die "Couldn't cd to $TEMPDIR: $!\n";
+
+if (-e "$DESTDIR/$PKNAME") {
+ die "$DESTDIR/$PKNAME already exists!\n";
+}
+
+# check also in the standard place
+
+if ($PK eq '') {
+ if (-e "$TEXDIR/fonts/white/pk/$PKNAME") {
+ die "$TEXDIR/fonts/white/pk/$PKNAME already exists!\n";
+ }
+ elsif (-e "$TEXDIR/fonts/white/pk/$PK$PKNAME") {
+ die "$TEXDIR/fonts/white/pk/$PK$PKNAME already exists!\n";
+ }
+}
+
+# print out the command string we will use, then actually do the command,
+# printing it's results.
+
+print "mf \"\\mode:=$MODE; mag:=$MAG; scrollmode; input $NAME\" </dev/null\n";
+system("mf \"\\mode:=$MODE; mag:=$MAG; scrollmode; input $NAME\" </dev/null");
+
+# check that $GFNAME was created correctly.
+
+if (! -e $GFNAME ) { die "Metafont failed for some reason on $GFNAME\n";}
+
+print `gftopk -v ./$GFNAME ./$PKNAME`;
+
+# Install the PK file carefully, since others may be doing the same
+# as us simultaneously.
+
+`mv $PKNAME $DESTDIR/pktmp.$$`;
+chdir($DESTDIR) || die "Couldn't cd to $DESTDIR: $!\n";
+`mv pktmp.$$ $PKNAME`;
+
+# now we want to make sure only proper people can change this new font.
+
+`/etc/chown $OWNER $PKNAME`;
+`/bin/chmod 664 $PKNAME`;
+
+# this subroutine makes sure there are no funny control characters in
+# the arguements that have been passed to the program.
+
+sub untaint {
+ local($temp) = @_;
+ $temp =~ /^([-\/\(\)\.\w]*)$/ || die "Invalid arguement: $temp\n";
+ $temp = $1;
+ return($temp);
+}
+
+
+
+
+
+
+
+
diff --git a/Build/source/texk/dvipsk/contrib/PSTricks b/Build/source/texk/dvipsk/contrib/PSTricks
new file mode 100644
index 00000000000..5ec089d1947
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/PSTricks
@@ -0,0 +1,352 @@
+This file contains the read-me file for the PSTricks package, including
+information on how to obtain PSTricks, and a PostScript file that
+gives an idea of what the package has to offer.
+
+
+***********************************************************************
+**** "readme" file for PSTricks package, v0.92, 92/10/02 ****
+***********************************************************************
+
+COPYRIGHT 1992, by Timothy Van Zandt, tvz@Princeton.EDU
+
+COPYING:
+
+ Copying of part or all of any file in the PSTricks package
+ is allowed under the following conditions only:
+
+
+ (1) You may freely distribute unchanged copies of the files. Please
+ include the documentation when you do so.
+ (2) You may modify a renamed copy of any file, but only for personal
+ use or use within an organization.
+ (3) You may copy fragments from the files, for personal use or for use
+ in a macro package for distribution, as long as credit is given
+ where credit is due.
+
+ You are NOT ALLOWED to take money for the distribution or use of
+ these files or modified versions or fragments thereof, except for
+ a nominal charge for copying etc.
+
+DESCRIPTION:
+
+ pstricks.tex is an extensive collection of PostScript macros that is
+ compatible with most TeX macro packages, including Plain TeX , LaTeX
+ AmSTeX and AmS-LaTeX. Included are macros for color, graphics, rotation,
+ trees and overlays. It has several special features:
+
+
+ * There is a wide variety of graphics (picture drawing) macros, with
+ a flexible interface and with color support. All lines and outlines
+ can be solid, dotted or dashed. Lines and curves can have arrowheads,
+ t-bars, brackets or circles on the ends. Regions can be filled
+ with solid colors, lines or crosshatch.
+ * There is support for polar and cartesian coordinate systems.
+ * There are macros for plots and axes.
+ * Nested rotations can be made with respect to the physical page.
+ * There are flexible node macros, useful for trees, mathematical
+ diagrams, and linking information of any kind.
+ * There is a powerful loop macro that is useful for making pictures.
+ * There are macros for coloring or shading the cells of tables.
+
+ PSTricks puts the icing (PostScript) on your cake (TeX)!
+
+GETTING PSTRICKS
+
+ The PSTricks package is available from the /pub directory at
+ Princeton.EDU, and at other archives.
+
+
+ A bug list pstricks.bug is kept up-to-date on Princeton.EDU.
+
+
+ Send requests to get on or off the PSTricks mailing list to the author.
+
+FILES:
+
+ Inputs:
+ pstricks.tex : The main macro file, for use with a header file.
+ pstricks.sty : The same as pstricks.tex, but the .sty extension.
+ pstricks.con : The configuration file for pstricks.tex.
+ multido.tex : Contains the \multido macro.
+ multido.sty : Same as multido.tex, but with .sty extension.
+
+
+ Contributed:
+ pallete.tex : A palette of RGB colors, by Fred Knight.
+ pallete.sty : The same as pallete.tex, but with .sty extension.
+
+
+ Documentation:
+ pst-usr1.ps : User's Guide, part I.
+ pst-usr2.ps : User's Guide, part II.
+ pst-quik.ps : Quick Reference.
+ samples.pst : A LaTeX file of samples.
+ pst-test.tex : A Plain TeX test file.
+ changes.pst : An ASCII list of changes.
+ multido.ps : Documentation for multido.tex.
+
+
+ Sources:
+ pstricks.doc : Documentation and code for pstricks.tex.
+ pst-code.tex : LaTeX file for typesetting pstricks.doc.
+ pst-user.tex : LaTeX source for User's Guide.
+ defaults.pst : List of parameter defaults, for pst-user.tex.
+ tvz-hax.sty : Macros for pst-user.tex and pst-code.tex.
+ npsfont.sty : Macros for pst-user.tex.
+ pst-make.tex : For making pstricks.tex and pstricks.pro from pstricks.doc
+
+
+ Other:
+ read-me.pst : This file.
+ pstricks.pro : A PostScript prologue (for use with dvips).
+
+PRINTING THE USER'S GUIDE:
+
+ The User's Guide is distributed in PostScript format as
+ pst-usr1.ps and pst-usr2.ps. There is also a quick reference,
+ pst-quik.ps.
+
+
+ Sun Newsprint/Pageview users: See relevant section below.
+
+ For printing on a4 paper: See relevant section below.
+
+ The User's Guide uses less than 150K of virtual memory, which is well
+ below the minimal PostScript configuration. If you run out of memory,
+ try turning off the printer to flush out stuff left in memory
+ from previous jobs.
+
+
+ Any other problems printing pst-usr1.ps and pst-usr2.ps should be
+ reported to me. However, you are on your own if you choose
+ to typeset the LaTeX source (pst-user.tex). LaTeXing pst-user.tex
+ is NOT a good way to test PSTricks, as there are too many other
+ macros involved.
+
+PRINTING THE USER'S GUIDE ON A4 PAPER:
+
+ You may find that it prints fine as is, but you might want to try making
+ the following changes to the .ps files (this stuff is printer dependent):
+
+
+ Change these lines:
+
+
+ OLD:
+ %%BoundingBox: 0 0 612 792
+ TeXDict begin 40258431 52099146 1000 300 300 @start /Fa 134[33
+ NEW:
+ %%BoundingBox: 0 0 596 842
+ TeXDict begin 39158280 55380996 1000 300 300 @start /Fa 134[33
+
+
+ Add this just before %%EndComments:
+
+
+ %%DocumentPaperSizes: a4
+
+
+ Add these just before %%EndSetup.
+
+
+ %%BeginPaperSize: a4
+ a4
+ %%EndPaperSize
+
+
+INSTALLATION FOR USERS OF ROKICKI'S DVIPS:
+
+ 1. Put the input files where your TeX looks for inputs.
+
+
+ 2. Put the file pstricks.pro where dvips looks for headers.
+ Probably /usr/lib/tex/ps on unix systems.
+
+
+ 3. Typeset the LaTeX file samples.pst as a test and to see the samples.
+
+
+ 3. Have fun!
+
+INSTALLATION FOR USERS OF ARBORTEXT'S DVIPS AND TEXTURES:
+
+ 1. Examine the configuration file pstricks.con. Uncomment
+ the \iffalse...\fi surrounding the commands for Rokicki's dvips.
+ Comment out the \iffalse...\fi surrounding the commands for
+ Arbortext's dvips or Textures.
+
+
+ 2. If using Textures, decide whether you want to use a header file.
+ Uncomment the definition of \pstheader if you do.
+
+
+ 3. Run pst-make through Plain TeX or LaTeX. This generates
+ pstricks.tex and possibly pstricks.pro.
+
+
+ 4. Follow the instructions above for Rokicki's dvips, using
+ the pstricks.tex and pstricks.pro files that you generated
+ rather than the ones that came with the package.
+
+
+INSTALLATION FOR USERS OF OTHER DVI-TO-PS DRIVERS:
+
+ PSTricks should be adaptable to other drivers with similar capabilities.
+ Feel free to contact me for help.
+
+ 1. Use pstricks.doc as your input file for now (rather than pstricks.tex).
+
+
+ 2. Examine the configuration file pstricks.con. Uncomment
+ the \iffalse...\fi surrounding the commands for Rokicki's dvips.
+ Try to define the required commands appropriately for you driver,
+ but don't use a header file yet (i.e., leave \pstheader
+ undefined).
+
+
+ 3. Run pst-test.tex through Plain TeX until you get things to work
+ as well as possible. You may not be able to use all of PSTricks features,
+ but if you can define \pstverb and \pstunit, you at least can use
+ all the graphics objects.
+
+
+ 4. Decide whether your driver supports inclusion of a PostScript
+ header file. (PSTricks runs much more efficiently with a header,)
+ If so, define \pstheader appropriately in pstricks.con.
+
+
+ 5. Run pst-make through Plain TeX or LaTeX. This generates
+ pstricks.tex and possibly pstricks.pro.
+
+
+ 6. Follow the instructions above for Rokicki's dvips, using
+ the pstricks.tex and pstricks.pro files that you generated
+ rather than the ones that came with the package.
+
+UPGRADING FROM VERSION 0.91:
+
+ You need to reinstall the package in its entirety, including
+ pstricks.pro. There are a few incompatible changes, described in
+ changes.pst. The User's Guide is greatly improved -- check it out.
+
+
+UPGRADING FROM VERSION 0.9 OR EARLIER:
+
+ Much has changed. You should reinstall the package in its entirety.
+ \dbox and \rotate have been removed. \psput has been replaced by \rput,
+ with new syntax. However, the command \OldPsput defines \psput to work
+ with the old syntax; the command \NewPsput defines \psput to work with
+ the new syntax. See the pst-chan.ges for more information.
+
+
+TIPS FOR HACKERS:
+
+ The file pstricks.doc contains the documentation and code, using
+ Frank Mittelbach's doc system. You can typeset this, if desired,
+ by running LaTeX on pst-code.tex. See pst-code.tex for details.
+ Don't expect too much from the documentation.
+
+
+ If you want to modify the internals of PSTricks, don't use a
+ PostScript header file (i.e., don't define \pstheader in pstricks.con)
+ and use pstricks.doc as your input file. This allows you to modify
+ both the TeX and the PostScript macros.
+
+
+ When you don't expect to make more changes for a while, run
+ pst-make to generate a new compact macro file and a new
+ PostScript header file (if desired). If using a header file,
+ don't forget to redefine \pstheader in pstricks.con.
+
+ Beware that the internal code in PSTricks is still unstable.
+
+
+USING PSTRICKS WITH SUN'S PAGEVIEW/NEWSPRINT/OPENWINDOWS
+
+ Sun's PageView/NeWSPrint/OpenWindows have many bugs.
+ Workarounds for several known problems of these have been coded into
+ PSTricks. A workaround for another bug is described below. Report other
+ problems to me.
+
+ A bug under Sun's PageView/NeWSprint 3.0 (perhaps fixed in 3.0.1),
+ causes arrows to disturb the lines. To see if you have this problem,
+ try previewing the section in pst-usr2.ps on axes. Here is a workaround:
+
+
+ If using a header, append the following to pstricks.pro:
+
+ /EndArrow { x2 y2 currentpoint grestore angle matrix identmatrix
+ rotate transform y1 add exch x1 add exch end } def
+
+ Do this in pst-usr1.ps and pst-usr2.ps as well.
+
+ If not using a header file, add the following to the end of pstricks.con:
+
+
+ \pst@def{EndArrow}<%
+ x2 y2 currentpoint grestore
+ angle matrix identmatrix rotate transform
+ y1 add exch x1 add exch end>
+
+CONTRIBUTING TO PSTRICKS
+
+ Please send me:
+
+
+ * Whatever you can spare.
+ * Pretty/interesting/clever things you have created with PSTricks,
+ for possible inclusion in the User's Guide or pst-samp.tex. Don't
+ be bashful!
+ * High level macros for trees/graphs, math diagrams, and linguistic
+ diagrams, based on PSTricks' node macros.
+ * Any other macros based on PSTricks.
+ * Contributions to the Tips and Tricks section of the User's Guide.
+ * Reports on +/- experiences with DVI-to-PS converters and previewers.
+ * Bug reports.
+ * pstricks.doc -- cleaned up, optimized, and documented.
+ * To Nepal.
+
+PSTRICKS AND SEMINAR.STY
+
+ The PSTricks package grew out of macros originally written for the
+ seminar.sty package. seminar.sty is a LaTeX style for slides and notes.
+ seminar.sty, combined with pstricks.tex and your favorite macros for
+ inclusion of EPS files, make a complete TeX presentation software package.
+
+
+ PSTricks v0.92 works with seminar.sty version 0.92, and maybe later
+ versions as well. The seminar.sty package is also available from
+ Princeton.EDU, and perhaps from wherever else you got PSTricks.
+
+ABOUT MULTIDO.TEX:
+
+ multido.tex contains a loop macro that is useful for making pictures,
+ among other things. See multido.ps for details. multido.tex is required
+ by PSTricks \psaxes macro.
+
+
+ The complete multido.tex distribution (i.e., including sources) is
+ available from the /pub directory at Princeton.EDU.
+
+
+ACKNOWLEDGEMENTS:
+
+ The basic idea for the node macros is from Emma Pease's tree-dvips.sty.
+
+
+ The algorithm in the \pscurve macro was adapted from a C program by
+ Shamim Zvonko Mohamed.
+
+
+ Thanks to Geoffrey Tobin for helpful comments.
+
+
+ The author is thankful to Frank Mittelbach for his documentation system.
+
+
+ Thanks to various contributors to samples.pst.
+
+
+DISCLAIMERS:
+
+ This is just an elaborate hack. Not for use as children's sleepware.
diff --git a/Build/source/texk/dvipsk/contrib/afm-extra/ptmr.ed b/Build/source/texk/dvipsk/contrib/afm-extra/ptmr.ed
new file mode 100644
index 00000000000..78dc82138de
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/afm-extra/ptmr.ed
@@ -0,0 +1,118 @@
+1s/)/, then edited for Greek)/
+/(LIGTABLE/i
+(MAPFONT D 1
+ (FONTNAME rpsyr)
+ (FONTCHECKSUM O 12741765024)
+ )
+.
+/(CHARACTER/i
+(CHARACTER O 0 (comment Gamma)
+ (CHARWD R 603)
+ (CHARHT R 689)
+ (CHARIC R 6)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C G)
+ )
+ )
+(CHARACTER O 1 (comment Delta)
+ (CHARWD R 612)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C D)
+ )
+ )
+(CHARACTER O 2 (comment Theta)
+ (CHARWD R 741)
+ (CHARHT R 689)
+ (CHARDP R 7)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C Q)
+ )
+ )
+(CHARACTER O 3 (comment Lambda)
+ (CHARWD R 686)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C L)
+ )
+ )
+(CHARACTER O 4 (comment Xi)
+ (CHARWD R 645)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C X)
+ )
+ )
+(CHARACTER O 5 (comment Pi)
+ (CHARWD R 768)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C P)
+ )
+ )
+(CHARACTER O 6 (comment Sigma)
+ (CHARWD R 592)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C S)
+ )
+ )
+(CHARACTER O 7 (comment Upsilon1)
+ (CHARWD R 620)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 241)
+ )
+ )
+(CHARACTER O 10 (comment Phi)
+ (CHARWD R 763)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C F)
+ )
+ )
+(CHARACTER O 11 (comment Psi)
+ (CHARWD R 795)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C Y)
+ )
+ )
+(CHARACTER O 12 (comment Omega)
+ (CHARWD R 768)
+ (CHARHT R 689)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C W)
+ )
+ )
+(CHARACTER O 13 (comment arrowup)
+ (CHARWD R 603)
+ (CHARHT R 907)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 255)
+ )
+ )
+(CHARACTER O 14 (comment arrowdown)
+ (CHARWD R 603)
+ (CHARHT R 907)
+ (CHARDP R 7)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 257)
+ )
+ )
+.
+w ptmr.vpl
+q
diff --git a/Build/source/texk/dvipsk/contrib/afm-extra/ptmro.ed b/Build/source/texk/dvipsk/contrib/afm-extra/ptmro.ed
new file mode 100644
index 00000000000..26885af1622
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/afm-extra/ptmro.ed
@@ -0,0 +1,130 @@
+1s/)/, edited for Greek)/
+/(LIGTABLE/i
+(MAPFONT D 1
+ (FONTNAME psyro)
+ (FONTCHECKSUM O 12741765024)
+ )
+.
+/(CHARACTER/i
+(CHARACTER O 0 (comment Gamma)
+ (CHARWD R 603)
+ (CHARHT R 689)
+ (CHARIC R 118)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C G)
+ )
+ )
+(CHARACTER O 1 (comment Delta)
+ (CHARWD R 612)
+ (CHARHT R 689)
+ (CHARIC R 111)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C D)
+ )
+ )
+(CHARACTER O 2 (comment Theta)
+ (CHARWD R 741)
+ (CHARHT R 689)
+ (CHARDP R 7)
+ (CHARIC R 87)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C Q)
+ )
+ )
+(CHARACTER O 3 (comment Lambda)
+ (CHARWD R 686)
+ (CHARHT R 689)
+ (CHARIC R 109)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C L)
+ )
+ )
+(CHARACTER O 4 (comment Xi)
+ (CHARWD R 645)
+ (CHARHT R 689)
+ (CHARIC R 66)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C X)
+ )
+ )
+(CHARACTER O 5 (comment Pi)
+ (CHARWD R 768)
+ (CHARHT R 689)
+ (CHARIC R 89)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C P)
+ )
+ )
+(CHARACTER O 6 (comment Sigma)
+ (CHARWD R 592)
+ (CHARHT R 689)
+ (CHARIC R 109)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C S)
+ )
+ )
+(CHARACTER O 7 (comment Upsilon1)
+ (CHARWD R 620)
+ (CHARHT R 689)
+ (CHARIC R 104)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 241)
+ )
+ )
+(CHARACTER O 10 (comment Phi)
+ (CHARWD R 763)
+ (CHARHT R 689)
+ (CHARIC R 89)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C F)
+ )
+ )
+(CHARACTER O 11 (comment Psi)
+ (CHARWD R 795)
+ (CHARHT R 689)
+ (CHARIC R 100)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C Y)
+ )
+ )
+(CHARACTER O 12 (comment Omega)
+ (CHARWD R 768)
+ (CHARHT R 689)
+ (CHARIC R 83)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR C W)
+ )
+ )
+(CHARACTER O 13 (comment arrowup)
+ (CHARWD R 603)
+ (CHARHT R 907)
+ (CHARIC R 120)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 255)
+ )
+ )
+(CHARACTER O 14 (comment arrowdown)
+ (CHARWD R 603)
+ (CHARHT R 907)
+ (CHARDP R 7)
+ (CHARIC R 116)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR O 257)
+ )
+ )
+.
+w ptmro.vpl
+q
diff --git a/Build/source/texk/dvipsk/contrib/bbfig/INSTALLATION b/Build/source/texk/dvipsk/contrib/bbfig/INSTALLATION
new file mode 100644
index 00000000000..8694fc1578b
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/bbfig/INSTALLATION
@@ -0,0 +1,16 @@
+
+To install bbfig:
+
+Make the bbfig shell script executable and put it in a suitable
+directory. Put the file bb.ps in that *same* directory. If this
+is not possible or is inconvenient, put bb.ps whereever you please
+and edit the shell script to define BBPSDIR.
+
+If you run across a PostScript file that manages to confuse bbfig,
+please send it along to me and I'll see if I can figure out what is
+going wrong. Thanks.
+
+
+Bernie Cosell [cosell@bbn.com]
+27June90
+
diff --git a/Build/source/texk/dvipsk/contrib/bbfig/bb.ps b/Build/source/texk/dvipsk/contrib/bbfig/bb.ps
new file mode 100644
index 00000000000..e1d5f88cefb
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/bbfig/bb.ps
@@ -0,0 +1,579 @@
+%!
+% bb.ps --
+%
+% Prints a file, but keeps track of bounding box info, and prints the box at
+% the end (around the figure.)
+%
+% $Header: bb.ps,v 1.14 91/03/21 13:04:02 cosell Exp $
+% 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
+
+% $Log: bb.ps,v $
+% Revision 1.14 91/03/21 13:04:02 cosell
+% Relocated the position of the constrained BBox info
+%
+% Revision 1.13 91/03/21 12:21:04 cosell
+% Forced the %BoundingBox info to stay within the page boundaries
+%
+% Revision 1.12 91/03/21 12:15:17 cosell
+% Added a tracing hook to bridge restores.
+%
+% Revision 1.11 90/07/02 08:48:40 cosell
+% bbfig now correctly copes with empty paths
+%
+% Revision 1.10 90/06/27 10:47:22 cosell
+% Added a bunch of improvements from Joe Pallas at stanford.
+%
+% Revision 1.9 90/06/26 10:50:20 cosell
+% Stack got botched in the 'debug' stub
+%
+% Revision 1.8 90/06/25 09:34:51 cosell
+% Minor bug in 'restore'
+%
+% Revision 1.7 90/06/25 09:29:58 cosell
+% Added code to catch and deal with 'restore'. Thanks to Frank
+% Jensen for finding this one
+%
+% Revision 1.6 90/06/25 09:23:26 cosell
+% Small bugfix in the text-handling stuff
+%
+% Revision 1.5 90/06/10 09:04:02 cosell
+% Changed the printed string to explictly say "%%BoundingBox"
+%
+% Revision 1.4 90/06/10 08:55:39 cosell
+% Added 'bind' machinery to insulate this package from later redefinitions
+% of things we need from the systemdict.
+%
+% Revision 1.3 90/06/10 08:28:53 cosell
+% Added debugging hooks. They don't affect anything (and don't do
+% anything) in the normal use of bbfig. But if the 'trace' package
+% is loaded ahead of this, it'll print out some helpful info. Probably
+% I'll end up removing all of this if/when I really get the package
+% up to snuff.
+%
+% Revision 1.2 90/05/25 12:08:24 cosell
+% Major improvements and tuneups: fixed it to really use its private
+% discionary, and the most importnat: it now computes the bounding box
+% in *default* coords
+%
+% Revision 1.1 90/05/23 08:18:54 cosell
+% Initial revision
+% This is Ned Bachelder's original version
diff --git a/Build/source/texk/dvipsk/contrib/bbfig/bbfig b/Build/source/texk/dvipsk/contrib/bbfig/bbfig
new file mode 100644
index 00000000000..b704e0f0bea
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/bbfig/bbfig
@@ -0,0 +1,22 @@
+#! /bin/sh
+
+# Script to stick bounding box finder in front of a postscript file
+# Adapted from Ned's original
+
+# $Header: bbfig,v 1.3 90/06/27 21:54:49 cosell Exp $
+
+# BBPSDIR=<wherever> # Define this if bb.ps doesn't live in same
+ # directory as bbfig
+
+if [ ! -f ${BBPSDIR=`dirname $0`}/bb.ps ]
+then
+ echo >&2 "Can't locate bb.ps"
+ exit 1
+fi
+
+case $# in
+ 0) cat $BBPSDIR/bb.ps -
+ ;;
+ *) cat $BBPSDIR/bb.ps "$@"
+ ;;
+esac
diff --git a/Build/source/texk/dvipsk/contrib/bbfig/bbfig.1 b/Build/source/texk/dvipsk/contrib/bbfig/bbfig.1
new file mode 100644
index 00000000000..6c61d1e491c
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/bbfig/bbfig.1
@@ -0,0 +1,40 @@
+.TH BBFIG LOCAL
+.SH NAME
+bbfig \- calculate bounding boxes in PostScript
+.SH SYNTAX
+.B bbfig
+[ file \&.\|.\|. ]
+.SH USAGE
+.I Bbfig
+should be piped into
+.I psprint
+or the equivalant.
+.SH DESCRIPTION
+The concatenation of the list of files, or standard input
+if no file names are supplied, is
+assumed to be a PostScript program for which the bounding box is desired.
+.I Bbfig
+prepends code that
+calculates the bounding box,
+and places the result on standard output.
+The actual
+calculation is done in the PostScript printer; the output is
+in the form of a dashed line demarcating the bounding box and
+and the corresponding
+.B %%BoundingBox
+header line printed just below the box.
+The
+.B %%BoundingBox
+line
+should be added to the header of the PostScript file.
+.SH BUGS
+.I Bbfig
+is known to be confused by images and clipping paths. If the box
+around the figure clearly is not the minimal one, a ruler is the
+best bet for calculating the correct box. Remember that the
+bounding box values are in PostScript points (72 to the inch)
+relative to an origin at the lower left corner of the page, and
+that (a,b) is the lower left hand corner of the bounding box, and
+(c,d) is the upper right corner.
+.SH Author
+Ned Batchelder, modified by Bernie Cosell [cosell@bbn.com]
diff --git a/Build/source/texk/dvipsk/contrib/bbfig/vmsbbfig.c b/Build/source/texk/dvipsk/contrib/bbfig/vmsbbfig.c
new file mode 100644
index 00000000000..4415063eb57
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/bbfig/vmsbbfig.c
@@ -0,0 +1,113 @@
+/* bbfig.c --
+ * Martin Gelbaum, Lawrence Berkeley Laboratory
+ * martyg@lbl.gov
+ * September 21, 1992
+ * Simple VAX C equivalent of Bourne shell script "bbfig"
+ */
+
+#include <stdio.h>
+#include <ssdef.h> /* System status codes */
+#include <unixlib>
+
+#define BBFIG_HEADER "tex_disk:[tex.dvips.header_files]bb.ps"
+
+main(argc,argv)
+int argc;
+char **argv;
+{
+ FILE *infp, *libfp, *outfp;
+ char outfile[1024], buf[BUFSIZ], line[512], *cptr;
+
+ if (argc < 2) { error("Usage: bbfig psfile [> outfile]\n"); }
+ if ( !strcmp(argv[1], "-help") || !strcmp(argv[1], "-HELP") )
+ {
+ fprintf(stderr, "bbfig: usage: bbfig psfile [> outfile]\n");
+ fflush(stderr); fprintf(stderr,
+"If no output file specified, output file is bbfig_out.ps\n");
+ fflush(stderr); fprintf(stderr,
+"Output file shows figure surrounded by box made of dashes\n");
+ fflush(stderr); fprintf(stderr,
+"Output file also shows bounding box in default coordinates for use as\n");
+ fflush(stderr); fprintf(stderr,
+"Bounding Box comment as second line of PostScript file.\n");
+ exit(SS$_NORMAL);
+ }
+ if ( (libfp = fopen(BBFIG_HEADER,"r")) == NULL)
+ {
+ error("ABNORMAL EXIT:\nCan't open PostScript macro file %s\n",
+ BBFIG_HEADER);
+ }
+ if ( (infp = fopen(*++argv,"r")) == NULL)
+ {
+ error("ABNORMAL EXIT:\nCan't open user PostScript file %s\n",
+ *argv);
+ }
+ if (argc >=3)
+ {
+ argv++;
+ if ( (*argv)[0] == '>')
+ {
+ if ((*argv)[1])
+ /* We had bbfig file >outfile */
+ {
+ cptr = &(*argv)[1];
+ (void) sprintf(outfile,"%s", cptr);
+ }
+ else if (*(++argv) != NULL)
+ /* We had bbfig psfile > outfile */
+ {
+ cptr = *argv;
+ (void) sprintf(outfile,"%s", cptr);
+ }
+ else
+ {
+ error("%s: no filename with '>' option\n",
+ "ABNORMAL EXIT");
+ }
+ }
+ else
+ {
+ error("ABNORMAL EXIT: unknown option %c\n",
+ (*argv)[0]);
+ }
+ }
+ else
+ {
+ /* Default filename is "bbfig_out.ps" */
+ sprintf(outfile, "bbfig_out.ps");
+ }
+ /* Make a standard variable length record file
+ * with carriage return carriage control.
+ */
+ if ( (outfp = fopen(outfile,"w", "rat=cr", "rfm=var")) == NULL)
+ {
+ error("ABNORMAL EXIT: can't create text file %s\n",
+ outfile);
+ }
+ while (fgets(line, 511, libfp))
+ {
+ fputs(line, outfp); fflush(outfp);
+ }
+ (void) fclose (libfp);
+ while (fgets(line, 511, infp))
+ {
+ fputs(line, outfp); fflush(outfp);
+ }
+ (void) fclose (infp); (void) fclose (outfp);
+ fprintf(stderr, "Output file showing bounding box is %s;\n", outfile);
+ fflush(stderr);
+ fprintf(stderr,
+"You may print it by lpr to a PostScript printer or\n"); fflush(stderr);
+ fprintf(stderr,
+"preview it by gs (ghostscript) on a X11 display ...\n"); fflush(stderr);
+ exit(SS$_NORMAL);
+}
+
+static error(s1,s2) /* print error message and exit with error status. */
+char *s1, *s2;
+{
+ /* Notice that the first argument (s1) contains the formatting
+ * information for fprintf.
+ */
+ fprintf(stderr, "bbfig: "); fprintf(stderr, s1, s2); exit(0x10000000);
+}
diff --git a/Build/source/texk/dvipsk/contrib/colorsep.lpro b/Build/source/texk/dvipsk/contrib/colorsep.lpro
new file mode 100644
index 00000000000..89e4bedf8b6
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/colorsep.lpro
@@ -0,0 +1,184 @@
+%!
+% Colour separation.
+% Ask dvips to do 4 pages. In bop-hook, cycle
+% round CMYK color spaces.
+%
+% Sebastian Rahtz 30.9.93
+% checked 7.1.94
+% from Green Book, and Kunkel Graphic Design with PostScript
+% (Green Book Listing 9-5, on page 153.)
+%
+/seppages 0 def
+userdict begin
+/Min {% 3 items on stack
+2 copy lt { pop }{ exch pop } ifelse
+2 copy lt { pop }{ exch pop } ifelse
+} def
+/SetGray {
+ 1 exch sub systemdict begin adjustdot setgray end
+} def
+/sethsbcolor {systemdict begin
+ sethsbcolor currentrgbcolor end
+ userdict begin setrgbcolor end}def
+
+/ToCMYK
+% Red book p 305
+ {
+% subtract each colour from 1
+ 3 { 1 exch sub 3 1 roll } repeat
+% define percent of black undercolor
+% find minimum (k)
+ 3 copy Min
+% remove undercolor
+ blackUCR sub
+ dup 0 lt {pop 0} if
+ /percent_UCR exch def
+%
+% subtract that from each colour
+%
+ 3 { percent_UCR sub 3 1 roll } repeat
+% work out black itself
+ percent_UCR 1.25 mul % 1 exch sub
+% stack should now have C M Y K
+} def
+%
+% crop marks
+%
+/cX 18 def
+/CM{gsave TR 0 cX neg moveto 0 cX lineto stroke
+cX neg 0 moveto cX 0 lineto stroke grestore}def
+%
+/bop-hook{cX dup TR
+%
+% which page are we producing
+%
+ seppages 1 add
+ /seppages exch def
+ seppages 5 eq { /seppages 1 def } if
+ seppages 1 eq {
+ /ColourName (CYAN) def
+ CYAN setupcolor
+ /WhichColour 3 def } if
+ seppages 2 eq {
+ /ColourName (MAGENTA) def
+ MAGENTA setupcolor
+ /WhichColour 2 def } if
+ seppages 3 eq {
+ /ColourName (YELLOW) def
+ YELLOW setupcolor
+ /WhichColour 1 def } if
+ seppages 4 eq {
+ /ColourName (BLACK) def
+ BLACK setupcolor
+ /WhichColour 0 def } if
+%
+% crop marks
+%
+gsave .3 setlinewidth
+3 -7 moveto
+/Helvetica findfont 6 scalefont setfont
+ColourName show
+0 0 CM
+vsize cX 2 mul sub dup hsize cX 2 mul sub dup isls{4 2 roll}if 0 CM
+exch CM 0
+exch CM
+grestore 0 cX -2 mul TR isls
+{cX -2 mul 0 TR}if
+ } def end
+%
+/separations 48 dict def
+separations begin
+ /cmykprocs [ %def
+ % cyan
+ { pop pop pop SetGray }
+ % magenta
+ { pop pop exch pop SetGray }
+ % yellow
+ { pop 3 1 roll pop pop SetGray }
+ % black
+ { 4 1 roll pop pop pop SetGray }
+ ] def
+ /rgbprocs [ %def
+ % cyan
+ { ToCMYK pop pop pop SetGray }
+ % magenta
+ { ToCMYK pop pop exch pop SetGray }
+ % yellow
+ { ToCMYK pop 3 1 roll pop pop SetGray }
+ % black
+ { ToCMYK 4 1 roll pop pop pop SetGray }
+ ] def
+ /testprocs [ %def
+ % cyan
+ { ToCMYK pop pop pop }
+ % magenta
+ { ToCMYK pop pop exch pop }
+ % yellow
+ { ToCMYK pop 3 1 roll pop pop }
+ % black
+ { ToCMYK 4 1 roll pop pop pop }
+ ] def
+ /screenangles [ %def
+ 105 % cyan
+ 75 % magenta
+ 0 % yellow
+ 45 % black
+ ] def
+end % separations
+
+% setupcolortakes 0, 1, 2, or 3 as its argument,
+% for cyan, magenta, yellow, and black.
+/CYAN 0 def /MAGENTA 1 def
+/YELLOW 2 def /BLACK 3 def
+/setupcolor{ %def
+ userdict begin
+ dup separations /cmykprocs get exch get
+ /setcmykcolor exch def
+ dup separations /rgbprocs get exch get
+ /setrgbcolor exch def
+ dup separations /testprocs get exch get
+ /testrgbcolor exch def
+ separations /screenangles get exch get
+ currentscreen
+ exch pop 3 -1 roll exch
+ setscreen
+ /setscreen { pop pop pop } def
+%
+% redefine setgray so that it only shows on the black separation
+%
+ /setgray {
+ WhichColour 0 eq
+ {systemdict begin adjustdot setgray end}
+ {pop systemdict begin 1 setgray end}
+ ifelse}def
+ end
+} bind def
+
+%
+% from Kunkel
+%
+/adjustdot { dup 0 eq { } { dup 1 exch sub .1 mul add} ifelse } def
+%
+% redefine existing operators
+%
+% Percent of undercolor removal
+/magentaUCR .3 def
+/yellowUCR .07 def
+/blackUCR .4 def
+%
+% Correct yellow and magenta
+/correctMY {rgb2cym
+ 1 index yellowUCR mul sub 3 1 roll
+ 1 index magentaUCR mul sub 3 1 roll
+ 3 1 roll rgb2cym}def
+%
+%(bluely green ) =
+%CYAN setupcolor
+%.1 .4 .5 testrgbcolor =
+%MAGENTA setupcolor
+%.1 .4 .5 testrgbcolor =
+%YELLOW setupcolor
+%.1 .4 .5 testrgbcolor =
+%BLACK setupcolor
+%.1 .4 .5 testrgbcolor =
+%quit
diff --git a/Build/source/texk/dvipsk/contrib/config.proto b/Build/source/texk/dvipsk/contrib/config.proto
new file mode 100644
index 00000000000..3033dce6afe
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/config.proto
@@ -0,0 +1,46 @@
+% Prototype Dvips configuration file.
+
+% How to print, maybe with lp instead lpr, etc.
+o |lpr
+
+% Default resolution of this device, in dots per inch.
+D 600
+
+% Metafont mode. (This is completely different from the -M command-line
+% option, which controls whether MakeTeXPK is invoked.) Get
+% @url{ftp://ftp.tug.org/tex/modes.mf} for a list of mode names. This mode
+% and the D number above must agree, or MakeTeXPK will get confused.
+M ljfour
+
+% Memory available. Download the three-line PostScript file:
+% %! Hey, we're PostScript
+% /Times-Roman findfont 30 scalefont setfont 144 432 moveto
+% vmstatus exch sub 40 string cvs show pop showpage
+% to determine this number. (It will be the only thing printed.)
+m 3500000
+
+% Correct printer offset. You can use testpage.tex from the LaTeX
+% distribution to find these numbers. Print testpage.dvi more than once.
+O 0pt,0pt
+
+% Partially download Type 1 fonts by default. Only reason not to do
+% this is if you encounter bugs. (Please report them to
+% @email{tex-k@@mail.tug.org} if you do.)
+j
+
+% Also look for fonts at these resolutions.
+R 300 600
+
+% With a high resolution and a RISC cpu, better to compress the bitmaps.
+Z
+
+% Uncomment these if you have and want to use PostScript versions of the
+% fonts.
+%p +cmfonts.map
+%p +lafonts.map
+%p +cyrfonts.map
+%p +eufonts.map
+
+% You will also want definitions for alternative paper sizes -- A4,
+% legal, and such. Examples in @file{contrib/papersize.level2} and
+% @file{contrib/papersize.simple}.
diff --git a/Build/source/texk/dvipsk/contrib/configs/2a4.ps b/Build/source/texk/dvipsk/contrib/configs/2a4.ps
new file mode 100644
index 00000000000..cf2d4f479eb
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/2a4.ps
@@ -0,0 +1,49 @@
+% @(#)2a4.ps 1.0 95/10/30 pete
+%
+% The following code defines PostScript procedures to work dvips.
+% they must be downloaded or sent as a header file together with
+% the PostScript version of your (La)TeX file.
+%
+% Originated probably by Piet van Oostrum, Department of Computer Science,
+% Utrecht University, Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht
+% Phone +31 30 531806
+% Fax +31 30 513791
+% <piet@cs.ruu.nl> uunet!mcsun!ruuinf!piet
+%
+% it is now re-written to work with dvips(k)-5.58f by Peter Dyballa
+% Johann Wolfgang Goethe-Universit\"at Robert-Mayer-Str. 11-15
+% Fachbereich 20 - Theoretische Informatik D 60325 Frankfurt am Main
+% (Department for Computer Science) (Federal Republic of Germany)
+%
+%
+% To use 2a4.ps include this on invocation of dvips:
+% -h 2a4.ps -t landscape
+%
+% do not include this in your (La)TeX source:
+% \special{landscape}\special{header=2a4.ps}
+%
+/isoddpage true def
+/orig-showpage /showpage load def
+/factor 0.707106781187 def
+/showpage {
+ isoddpage not { orig-showpage } if
+ /isoddpage isoddpage not store
+ } def
+
+/bop-hook {
+ /vsize 1 factor add neg def
+ isoddpage {factor factor scale
+ 842 412 translate }
+ { 0 -595 translate } ifelse
+ } def
+
+/end-hook {
+ isoddpage not { orig-showpage } if
+ } def
+%
+% Theses measures are for those paper formats:
+%
+% DIN A4 letter legal
+% 148mm = 412 PS pt 5.5in = 396 PS pt 7in = 504 PS pt
+% 210mm = 595 PS pt 8.5in = 612 PS pt 8.5in = 612 PS pt
+% 297mm = 842 PS pt 11in = 792 PS pt 14in = 1008 PS pt
diff --git a/Build/source/texk/dvipsk/contrib/configs/config.fax b/Build/source/texk/dvipsk/contrib/configs/config.fax
new file mode 100644
index 00000000000..963ebffaf33
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/config.fax
@@ -0,0 +1,5 @@
+*
+* For FAX output, we set 200 dpi, FAX mode.
+*
+D 200
+M FAX
diff --git a/Build/source/texk/dvipsk/contrib/configs/config.lino b/Build/source/texk/dvipsk/contrib/configs/config.lino
new file mode 100644
index 00000000000..4e3285f5089
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/config.lino
@@ -0,0 +1,93 @@
+*
+* This configuration file is a sample one for a typesetter. See the
+* end of the file especially, where we use setpageparams. With a
+* configuration file like this, you can use
+*
+* -t film0 -k -T 11in,17in
+*
+* for instance to print an 11x17 inch document in orientation 0 with
+* crop marks.
+*
+* Assume we have a nice modern lino with lots of memory.
+*
+m 1000000
+*
+* And send output by default to a PostScript file.
+*
+o
+*
+* Default resolution. We must get this right!
+*
+D 1270
+*
+* Compress the fonts.
+*
+Z
+*
+* Paper size information. First definition is the default.
+*
+* If your default is a4 uncomment the following definition
+* and comment out the letterSize definition.
+*
+*@ a4size 210mm 297mm
+*@+ %%PaperSize: a4
+
+@ letterSize 8.5in 11in
+@+ %%PaperSize: Letter
+
+@ letter 8.5in 11in
+@+ %%BeginPaperSize: Letter
+@+ letter
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%BeginPaperSize: Legal
+@+ legal
+@+ %%EndPaperSize
+
+@ ledger 17in 11in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ ledger
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ 11x17
+@+ %%EndPaperSize
+
+@ a4 210mm 297mm
+@+ ! %%DocumentPaperSizes: a4
+@+ %%BeginPaperSize: a4
+@+ a4
+@+ %%EndPaperSize
+
+@ a3 297mm 420mm
+@+ ! %%DocumentPaperSizes: a3
+@+ %%BeginPaperSize: a3
+@+ a3
+@+ %%EndPaperSize
+*
+* These last two are only for typesetters that can set the page size;
+* uncomment and put them in a `config.lino', for instance.
+*
+* Use this for pages where you want the text to run in the same direction
+* as the film feeds (slow scan direction; down the length of the film.)
+* Best for everything *but* pages higher than the film is wide or pages
+* wider than they are tall; needed for pages wider than the film is wide.
+*
+@ film0 0in 0in
+@+ statusdict /setpageparams known { vsize hsize 0 0 statusdict begin {
+@+ setpageparams } stopped end } { true } ifelse { statusdict /setpage known
+@+ { vsize hsize 0 statusdict begin { setpage } stopped pop end } if } if
+*
+* Use this for pages where you want the text to run across the width of
+* the film (fast scan direction.) Needed for pages taller than the film
+* is wide; preferred for pages wider than they are tall.
+*
+@ film1 0in 0in
+@+ statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
+@+ setpageparams } stopped end } { true } ifelse { statusdict /setpage known
+@+ { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
diff --git a/Build/source/texk/dvipsk/contrib/configs/config.lj2p b/Build/source/texk/dvipsk/contrib/configs/config.lj2p
new file mode 100644
index 00000000000..aaf2a25f3f2
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/config.lj2p
@@ -0,0 +1,95 @@
+* original config.ps -- default definitions for dvips output.
+*
+* (If you change or delete `original' on the previous line, dvips won't
+* install its config.ps over this file.)
+*
+* Configuration file for Karl & Kathy's LaserJet IIP.
+
+* We have 2 2MB expansion cards.
+*
+m 2750000
+
+
+* Send output by default to our printer.
+*
+o |lpr
+
+
+* Default resolution.
+*
+D 300
+
+
+* Reverse the pages, since we usually print on the face-up tray.
+*
+r
+
+
+* Mode is for Canon engine.
+*
+M CanonCX
+
+
+* Also look for this list of resolutions.
+*
+R 300
+
+
+* The printer offsets the output by this much.
+*
+O 0pt,-6pt
+
+
+* Paper size information. First definition is the default.
+*
+* If your default is a4 uncomment the following definition
+* and comment out the letterSize definition.
+*
+* There is some redundancy in the following comments; that is to
+* get things to work both on the NeXT and on other printers.
+*
+*@ a4size 210mm 297mm
+*@+ %%PaperSize: a4
+
+@ letterSize 8.5in 11in
+
+@ letter 8.5in 11in
+@+ %%PaperSize: Letter
+@+ %%BeginPaperSize: Letter
+@+ letter
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%PaperSize: Legal
+@+ %%BeginPaperSize: Legal
+@+ legal
+@+ %%EndPaperSize
+
+@ ledger 17in 11in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%PaperSize: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ ledger
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%PaperSize: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ 11x17
+@+ %%EndPaperSize
+
+@ a4 210mm 297mm
+@+ ! %%DocumentPaperSizes: a4
+@+ %%PaperSize: a4
+@+ %%BeginPaperSize: a4
+@+ a4
+@+ %%EndPaperSize
+
+@ a3 297mm 420mm
+@+ ! %%DocumentPaperSizes: a3
+@+ %%PaperSize: a3
+@+ %%BeginPaperSize: a3
+@+ a3
+@+ %%EndPaperSize
diff --git a/Build/source/texk/dvipsk/contrib/configs/config.post3x3 b/Build/source/texk/dvipsk/contrib/configs/config.post3x3
new file mode 100644
index 00000000000..f43b3071b4c
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/config.post3x3
@@ -0,0 +1,28 @@
+ %
+ % This file is an example of a header file for dvips. It prints a page
+ % (or a whole document) as a 3x3 poster. This file is built so it can
+ % be used both as the header file for PostScript and as the configuration
+ % file for dvips. First comes the PostScript part. (Note that dvips
+ % ignores any lines beginning with a space.) Change the number here.
+ % Use it with -P post3x3. We try to overlap pages a bit.
+ %
+ /xpost 3 def /ypost 3 def
+ userdict begin /bop-hook {
+ 36 36 translate
+ dup xpost ypost mul mod
+ dup xpost mod hsize 36 xpost 1 sub mul sub mul neg exch
+ xpost idiv vsize 36 ypost 1 sub mul sub mul neg translate % translate!
+ xpost ypost scale % scale!
+ -36 -36 translate
+ } def end
+ { % we start a procedure so PostScript `ignores' the dvips options.
+ %
+ % Now the dvips options. Change the number here too, to be
+ % xpost * ypost.
+ %
+b 9
+h config.post3x3
+ %
+ % Now PostScript cleanup.
+ %
+ } pop
diff --git a/Build/source/texk/dvipsk/contrib/configs/config.rokicki b/Build/source/texk/dvipsk/contrib/configs/config.rokicki
new file mode 100644
index 00000000000..62828369a74
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/config.rokicki
@@ -0,0 +1,62 @@
+*
+* See config.lino for more info.
+* With a virtual machine, we can claim 1M of memory.
+*
+m 1000000
+*
+* And send output by default to the printer.
+*
+o !lpr
+*
+* Default resolution.
+*
+D 400
+*
+* Last resort sizes.
+*
+R 100 120 144 300 360 400 432 480
+*
+* Paper size information. First definition is the default.
+*
+* If your default is a4 uncomment the following definition
+* and comment out the letterSize definition.
+*
+*@ A4size 210mm 297mm
+*@+ %%PaperSize: A4
+
+@ letterSize 8.5in 11in
+
+@ letter 8.5in 11in
+@+ %%BeginPaperSize: Letter
+@+ letter
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%BeginPaperSize: Legal
+@+ legal
+@+ %%EndPaperSize
+
+@ ledger 17in 11in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ ledger
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ 11x17
+@+ %%EndPaperSize
+
+@ A4 210mm 297mm
+@+ ! %%DocumentPaperSizes: A4
+@+ %%BeginPaperSize: A4
+@+ a4
+@+ %%EndPaperSize
+
+@ A3 297mm 420mm
+@+ ! %%DocumentPaperSizes: A3
+@+ %%BeginPaperSize: A3
+@+ a3
+@+ %%EndPaperSize
diff --git a/Build/source/texk/dvipsk/contrib/configs/loop.ps b/Build/source/texk/dvipsk/contrib/configs/loop.ps
new file mode 100644
index 00000000000..a38c4a19863
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/loop.ps
@@ -0,0 +1,2 @@
+%(%stdin) (r) file 1 string readstring
+{ } loop
diff --git a/Build/source/texk/dvipsk/contrib/configs/mkdvipspapers b/Build/source/texk/dvipsk/contrib/configs/mkdvipspapers
new file mode 100644
index 00000000000..b1adffcaa7a
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/mkdvipspapers
@@ -0,0 +1,429 @@
+#!/usr/local/bin/perl
+
+#
+# mkdvipspapers: a simple Perl script that generates a bunch of paper sizes
+# definitions for dvips.
+#
+# Copyright (C) 1995, Yves Arrouye <Yves.Arrouye@imag.fr> [06/15/95]
+#
+# THIS CODE IS PROVIDED AS IS, WITHOUT ANY WARRANTIES, EITHER EXPRESSED OR
+# IMPLIED, OF ITS FITNESS TO ANY PURPOSE. IT'S AUTHOR CANNOT BE HELD LIABLE
+# FOR ANY DAMAGES OCCURING DUE TO THE USE OF THIS CODE. USE AT YOUR OWN RISKS!
+
+# Known bugs: this script is written in Perl 5. (If you ever rewrite it in
+# Perl 4, I'm interested to get your version; I can provide a Perl-4 options
+# parser that is Getopt modified for it).
+
+# Last change: added the -p (--paper) option for specifying default size
+# (the first that will be generated). Arranged for the letter and a4 defs
+# be the first ones if nothing is specified (i.e. in the dvips default).
+# Note: the default paper size need not be in the chose ones, it is taken from
+# all the known papers sizes.
+
+# Read what follows for simple documentation and explanations.
+
+#
+# Options accepted by the script:
+#
+# --help print a small help message
+# --version print version
+#
+# -s, --standard generate standard definitions (Adobe ones)
+# -n, --non-standard generate dvips non-standard definitions
+# -d, --dvips generate dvips (i.e. standard + some) definitions
+# -g, --gs generate non-standard gs definitions
+# -e, --extra generate non-standard extra definitions
+# -l, --local generate local definitions
+# -a, --all generate all definitions
+#
+# -p, --paper default paper size
+#
+# default behaviour is the same as --dvips.
+#
+
+use Getopt::Long;
+
+#
+# The paper sizes definitions are stored in arrays with the following entries
+# for each paper size:
+#
+# - the name of the paper for dvips, e.g. letter;
+# - the name of the paper for the DSC PaperSize comment, e.g. Letter;
+# - the name of an accessible PostScript operator that may select the
+# correct paper size, e.g. letter;
+# - the name of a PostScript operator in statusdict that may select the
+# correct paper tray. e.g. lettertray (this is preferred);
+# - the physical width and height of the paper, either in points (no units
+# or bp, as in 4000bp), in inches (e.g 8.5in), centimeters (e.g. 21cm)
+# or in millimeters (e.g. 297mm);
+# - a flag indicating the orientation of the sheet, 0 meaning portrait and
+# 1 meaning landscape (this actually used only for gs' setpage operator).
+#
+# The PostScript code generated in the Setup section does the following.
+# First, we look in statusdict in order to look for a tray selection operator.
+# If there is none, but the specified PostScript operator is accessible with
+# the current dictionaries stacking order, we use it. If setpagedevice is
+# implemented and the other methods did fail, we use it. Otherwise, if the
+# setpage operator is present in statusdict, use this one. The setpage op. is
+# assumed to be
+#
+# <width> <height> <orient> setpage --
+#
+# where <orient> is 0 for portrait and 1 for landscape (in which case <width>
+# and <height> are swapped!).
+#
+
+#
+# This code has been tested with an Apple LaserWriter II, an Hewlett Packard
+# 4L laser printer, Ghostscript 3.33 and Ghostview 1.5 with success.
+#
+
+#
+# Enter your local definitions here in the same format as the examples
+# below.
+#
+# Papers defined here: (none).
+#
+
+@localpapersdefs = (
+);
+
+#
+# Standard (Adobe) names. Missing names are a4small and lettersmall, because
+# I don't have their definition handy.
+#
+# Papers defined here: 11x17, a3, a4, b5, ledger, legal, letter, note.
+#
+
+@stdpapersdefs = (
+ [
+ 'letter',
+ 'Letter', 'letter', 'lettertray',
+ '8.5in', '11in', 0
+ ],
+ [
+ 'a4',
+ 'A4', 'a4', 'a4tray',
+ '210mm', '297mm', 0
+ ],
+ [
+ '11x17',
+ '11x17', '11x17', '11x17tray',
+ '11in', '17in', 0
+ ],
+ [
+ 'a3',
+ 'A3', 'a3', 'a3tray',
+ '297mm', '420mm', 0
+ ],
+ [
+ 'b5',
+ 'B5', 'ab5', 'b5tray',
+ '177mm', '250mm', 0
+ ],
+ [
+ 'ledger',
+ 'Ledger', 'ledger', 'ledgertray',
+ '11in', '17in', 1
+ ],
+ [
+ 'legal',
+ 'Legal', 'legal', 'legaltray',
+ '8.5in', '14in', 0
+ ],
+ [
+ 'note',
+ 'Note', 'note', 'notetray',
+ '7.5in', '10in', 0
+ ]
+);
+
+#
+# Names that are present in the standard dvips distribution.
+#
+# Papers defined here: tabloid (aka 11x17).
+#
+
+@dvipspapersdefs = (
+ [
+ 'tabloid',
+ 'Tabloid', '11x17', '11x17tray',
+ '11in', '17in', 0
+ ],
+);
+
+#
+# Names that are present in the standard gs distribution. (Some names are
+# currently missing...)
+#
+# Papers defined here: a0, a1, a2, a5, a6, a7, a8, a9, a10,
+# b0, b1, b2, b3, b4.
+#
+
+@gspapersdefs = (
+ [
+ 'a0',
+ 'A0', 'a0', 'a0tray',
+ '840mm', '1188mm', 0
+ ],
+ [
+ 'a1',
+ 'A1', 'a1', 'a1tray',
+ '594mm', '840mm', 0
+ ],
+ [
+ 'a2',
+ 'A2', 'a2', 'a2tray',
+ '420mm', '594mm', 0
+ ],
+ [
+ 'a5',
+ 'A5', 'a5', 'a5tray',
+ '148mm', '210mm', 0
+ ],
+ [
+ 'a6',
+ 'A6', 'a6', 'a6tray',
+ '105mm', '148mm', 0
+ ],
+ [
+ 'a7',
+ 'A7', 'a7', 'a7tray',
+ '74mm', '105mm', 0
+ ],
+ [
+ 'a8',
+ 'A8', 'a8', 'a8tray',
+ '52.5mm', '74mm', 0
+ ],
+ [
+ 'a9',
+ 'A9', 'a9', 'a9tray',
+ '37mm', '52.5mm', 0
+ ],
+ [
+ 'a10',
+ 'A10', 'a10', 'a10tray',
+ '26.25mm', '37mm', 0
+ ],
+ [
+ 'b0',
+ 'B0', 'b0', 'b0tray',
+ '2836bp', '4008bp', 0
+ ],
+ [
+ 'b1',
+ 'B1', 'b1', 'b1tray',
+ '2004bp', '2836bp', 0
+ ],
+ [
+ 'b2',
+ 'B2', 'b2', 'b2tray',
+ '1418bp', '2004bp', 0
+ ],
+ [
+ 'b3',
+ 'B3', 'b3', 'b3tray',
+ '1002bp', '1418bp', 0
+ ],
+ [
+ 'b4',
+ 'B4', 'b4', 'b4tray',
+ '709bp', '1002bp', 0
+ ],
+);
+
+@extrapapersdefs = (
+ [
+ 'executive',
+ 'Executive', 'executivepage', 'executivepagetray',
+ '7.25in', '10.5in', 0
+ ],
+ [
+ 'halfexecutive',
+ 'HalfExecutive', 'halfexecutivepage', 'halfexecutivepagetray',
+ '5.25in', '7.25in', 0
+ ]
+);
+
+sub basename {
+ local($fullname, $ext) = @_;
+ local($basename) = $fullname;
+
+ $basename =~ s,(.*/)?([^/]+),$2,;
+ $ext && $basename =~ s,$ext$,,;
+
+ $basename;
+}
+
+sub dumpsizes {
+ local($legend, @sizes) = @_;
+
+ print "$legend";
+
+ for $spec (@sizes) {
+ local(@array) = @$spec;
+ local($name) = @array;
+
+ print $name, " ";
+ }
+ print "\n";
+}
+
+sub usage {
+ local($exitcode) = @_;
+ local($myname) = &basename($0);
+
+ if ($exitcode) {
+ select STDERR;
+ }
+
+ print "usage: $myname [ --version ] [ -h, --help ] [ -s, --standard ] [ -n, --non-standard ] [ -d, --dvips ] [ -g, --gs ] [ -e, --extra ] [ -l, --local ] [ -a, --all ] [ -p, --paper papername ]\n";
+
+ if ($exitcode == 0) {
+ print "\n";
+ print "options: --version\t\tprint version information\n";
+ print " -h, --help\t\tprint this help message\n";
+ print " -s, --standard\t\tdefine standard paper sizes\n";
+ print " -n, --non-standard\tdefine dvips' non-standard paper sizes\n";
+ print " -d, --dvips\t\tdefine all dvips paper sizes\n";
+ print " -g, --gs\t\tdefine gs' non-standard paper sizes\n";
+ print " -e, --extra\t\tdefine extra paper sizes\n";
+ print " -l, --local\t\tdefine local paper sizes\n";
+ print " -a, --all\t\tdefine all previous paper sizes\n";
+ print " -p, --paper papername\tspecify default paper size\n";
+ print "\npapers: "; &dumpsizes("--standard\t\t", @stdpapersdefs);
+ print " "; &dumpsizes("--non-standard\t\t", @dvipspapersdefs);
+ print " "; &dumpsizes("--gs\t\t\t", @gspapersdefs);
+ print " "; &dumpsizes("--extra\t\t", @extrapapersdefs);
+ print " "; &dumpsizes("--local\t\t", @localpapersdefs);
+ }
+
+ exit $exitcode;
+}
+
+sub pssize {
+ local ($size) = @_;
+ local $number = $size;
+
+ $number =~ s/\D+$//;
+
+ if ($size =~ /in$/) {
+ $number *= 72;
+ } elsif ($size =~ /cm$/) {
+ $number *= 72 / 2.54;
+ } elsif ($size =~ /mm$/) {
+ $number *= 72 / 25.4;
+ }
+
+ return int($number + .4);
+}
+
+sub genpaperdefs {
+ local ($papername, $dscname, $psname, $trayname,
+ $width, $height, $orient) = @$_;
+ local ($pswidth, $psheight) = (&pssize($width), &pssize($height));
+
+ local ($exch) = ($orient == 1 ? " exch" : "");
+
+ if ($width =~ /^\d$/) { $width = "${width}bp"; }
+ if ($height =~ /^\d$/) { $height = "${height}bp"; }
+
+ print <<EPD
+@ $papername $width $height
+@+ ! %%DocumentPaperSizes: $dscname
+@+ %%PaperSize: $dscname
+@+ %%BeginPaperSize: $dscname
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ $pswidth $psheight$exch ] put setpagedevice
+@+ } {
+@+ statusdict /$trayname known {
+@+ statusdict begin $trayname end
+@+ /$psname where { pop $psname } if
+@+ } {
+@+ /$psname where {
+@+ pop $psname
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ $pswidth $psheight $orient setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+EPD
+}
+
+if (!&GetOptions("standard|s", "non-standard|n", "dvips|d", "gs|g", "extra|e",
+ "local|l", "all|a", "paper|p=s", "help|h", "version")) {
+ &usage(1);
+} elsif ($#ARGV != -1) {
+ &usage(1);
+} elsif ($opt_help) {
+ &usage(0);
+} elsif ($opt_version) {
+ print &basename($0),
+ " version 1.2, by Yves Arrouye <Yves.Arrouye\@imag.fr>\n";
+ exit(0);
+} else {
+ @allpapersdefs = (@stdpapersdefs, @dvipspapersdefs, @gspapersdefs,
+ @extrapapersdefs, @localpapersdefs);
+ if ($opt_all) {
+ @paperdefs = @allpapersdefs;
+ } else {
+ @papersdefs = ();
+
+ if ($opt_dvips) {
+ $opt_standard = 1;
+ $opt_non_standard = 1;
+ }
+
+ if ($opt_standard && !$opt_dvips) {
+ @papersdefs = (@papersdefs, @stdpapersdefs);
+ }
+ if ($opt_non_standard && !$opt_dvips) {
+ @papersdefs = (@papersdefs, @dvipspapersdefs);
+ }
+ if ($opt_gs) {
+ @papersdefs = (@papersdefs, @gsspapersdefs);
+ }
+ if ($opt_extra) {
+ @papersdefs = (@papersdefs, @extrapapersdefs);
+ }
+ if ($opt_local) {
+ @papersdefs = (@papersdefs, @localpapersdefs);
+ }
+
+ if ($#papersdefs == -1) {
+ @papersdefs = (@stdpapersdefs, @dvipspapersdefs);
+ }
+ }
+}
+
+# Find default paper def in *all* definitions and generate config
+
+if ($opt_paper) {
+ for (@allpapersdefs) {
+ local(@paper) = @$_;
+ local($papername) = @paper;
+
+ if ($papername eq $opt_paper) {
+ genpaperdefs @paper;
+ last;
+ }
+ }
+}
+
+# Generate config for all selected paper sizes but the default one
+
+for (@defaultpaper, @papersdefs) {
+ local($papername) = @$_;
+
+ if ($papername eq $opt_paper) { next; }
+
+ genpaperdefs $_;
+}
+
diff --git a/Build/source/texk/dvipsk/contrib/configs/papersize.level2 b/Build/source/texk/dvipsk/contrib/configs/papersize.level2
new file mode 100644
index 00000000000..8d708facafa
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/papersize.level2
@@ -0,0 +1,236 @@
+% If your printer doesn't support setpagedevice, and your default paper
+% size is A4, uncomment this.
+%@ A4size 210mm 297mm
+%@+ %%PaperSize: A4
+
+% If you want the lettersize definition that uses setpagedevice to be
+% the default, comment this out.
+@ letterSize 8.5in 11in
+
+% More paper size information. First definition is the default.
+% These definitions were generated by the contrib/mkdvipspapers Perl 5 script,
+% by Yves.Arrouye@imag.fr.
+%
+% If your default is a4 put the a4 definition first (i.e., before the letter
+% definition). You should always keep a definition here in order to have the
+% document print on the desired paper if possible even outside your original
+% environment.
+%
+% If your default is something else than a4, of course, put its
+% definition first!
+
+@ letter 8.5in 11in
+@+ ! %%DocumentPaperSizes: Letter
+@+ %%PaperSize: Letter
+@+ %%BeginPaperSize: Letter
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 612 792 ] put setpagedevice
+@+ } {
+@+ statusdict /lettertray known {
+@+ statusdict begin lettertray end
+@+ /letter where { pop letter } if
+@+ } {
+@+ /letter where {
+@+ pop letter
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 612 792 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ a4 210mm 297mm
+@+ ! %%DocumentPaperSizes: a4
+@+ %%PaperSize: a4
+@+ %%BeginPaperSize: a4
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 595 842 ] put setpagedevice
+@+ } {
+@+ statusdict /a4tray known {
+@+ statusdict begin a4tray end
+@+ /a4 where { pop a4 } if
+@+ } {
+@+ /a4 where {
+@+ pop a4
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 595 842 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ 11x17 11in 17in
+@+ ! %%DocumentPaperSizes: 11x17
+@+ %%PaperSize: 11x17
+@+ %%BeginPaperSize: 11x17
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 792 1224 ] put setpagedevice
+@+ } {
+@+ statusdict /11x17tray known {
+@+ statusdict begin 11x17tray end
+@+ /11x17 where { pop 11x17 } if
+@+ } {
+@+ /11x17 where {
+@+ pop 11x17
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 792 1224 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ a3 297mm 420mm
+@+ ! %%DocumentPaperSizes: a3
+@+ %%PaperSize: a3
+@+ %%BeginPaperSize: a3
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 842 1190 ] put setpagedevice
+@+ } {
+@+ statusdict /a3tray known {
+@+ statusdict begin a3tray end
+@+ /a3 where { pop a3 } if
+@+ } {
+@+ /a3 where {
+@+ pop a3
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 842 1190 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ b5 177mm 250mm
+@+ ! %%DocumentPaperSizes: b5
+@+ %%PaperSize: b5
+@+ %%BeginPaperSize: b5
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 502 709 ] put setpagedevice
+@+ } {
+@+ statusdict /b5tray known {
+@+ statusdict begin b5tray end
+@+ /ab5 where { pop ab5 } if
+@+ } {
+@+ /ab5 where {
+@+ pop ab5
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 502 709 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ ledger 11in 17in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%PaperSize: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 792 1224 exch ] put setpagedevice
+@+ } {
+@+ statusdict /ledgertray known {
+@+ statusdict begin ledgertray end
+@+ /ledger where { pop ledger } if
+@+ } {
+@+ /ledger where {
+@+ pop ledger
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 792 1224 1 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%PaperSize: Legal
+@+ %%BeginPaperSize: Legal
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 612 1008 ] put setpagedevice
+@+ } {
+@+ statusdict /legaltray known {
+@+ statusdict begin legaltray end
+@+ /legal where { pop legal } if
+@+ } {
+@+ /legal where {
+@+ pop legal
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 612 1008 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ note 7.5in 10in
+@+ ! %%DocumentPaperSizes: Note
+@+ %%PaperSize: Note
+@+ %%BeginPaperSize: Note
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 540 720 ] put setpagedevice
+@+ } {
+@+ statusdict /notetray known {
+@+ statusdict begin notetray end
+@+ /note where { pop note } if
+@+ } {
+@+ /note where {
+@+ pop note
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 540 720 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%PaperSize: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ /setpagedevice where {
+@+ pop 1 dict dup /PageSize [ 792 1224 ] put setpagedevice
+@+ } {
+@+ statusdict /11x17tray known {
+@+ statusdict begin 11x17tray end
+@+ /11x17 where { pop 11x17 } if
+@+ } {
+@+ /11x17 where {
+@+ pop 11x17
+@+ } {
+@+ statusdict /setpage known {
+@+ statusdict begin
+@+ 792 1224 0 setpage
+@+ end
+@+ } if
+@+ } ifelse
+@+ } ifelse
+@+ } ifelse
+@+ %%EndPaperSize
diff --git a/Build/source/texk/dvipsk/contrib/configs/papersize.simple b/Build/source/texk/dvipsk/contrib/configs/papersize.simple
new file mode 100644
index 00000000000..5112bdf40d4
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/papersize.simple
@@ -0,0 +1,44 @@
+* Paper size information. First definition is the default.
+*
+* If your default is a4 uncomment the following definition
+* and comment out the letterSize definition.
+*
+*@ A4size 210mm 297mm
+*@+ %%PaperSize: A4
+
+@ letterSize 8.5in 11in
+
+@ letter 8.5in 11in
+@+ %%BeginPaperSize: Letter
+@+ letter
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%BeginPaperSize: Legal
+@+ legal
+@+ %%EndPaperSize
+
+@ ledger 17in 11in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ ledger
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ 11x17
+@+ %%EndPaperSize
+
+@ A4 210mm 297mm
+@+ ! %%DocumentPaperSizes: A4
+@+ %%BeginPaperSize: A4
+@+ a4
+@+ %%EndPaperSize
+
+@ A3 297mm 420mm
+@+ ! %%DocumentPaperSizes: A3
+@+ %%BeginPaperSize: A3
+@+ a3
+@+ %%EndPaperSize
diff --git a/Build/source/texk/dvipsk/contrib/configs/prepipe.ps b/Build/source/texk/dvipsk/contrib/configs/prepipe.ps
new file mode 100644
index 00000000000..57b690963cd
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/prepipe.ps
@@ -0,0 +1 @@
+/showpage { 1 true .outputpage } def
diff --git a/Build/source/texk/dvipsk/contrib/configs/showpage.ps b/Build/source/texk/dvipsk/contrib/configs/showpage.ps
new file mode 100644
index 00000000000..97a4789f75d
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/configs/showpage.ps
@@ -0,0 +1 @@
+showpage
diff --git a/Build/source/texk/dvipsk/contrib/crop.lpr b/Build/source/texk/dvipsk/contrib/crop.lpr
new file mode 100644
index 00000000000..d79484266d9
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/crop.lpr
@@ -0,0 +1,271 @@
+%!
+% This file is for crop marks and registration marks if there is color.
+%
+% First, we translate and draw the marks. You can change the way the
+% marks are drawn, but the quarter inch border around the page is fixed.
+%
+% This file uses bop-hook; sorry.
+%
+TeXDict begin
+%
+% CM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% x_center y_center CM - %
+% %
+% Make a crop mark at x_center y_center. This crop mark is just a cross. %
+% Checks to see if TeXcolorcmyk is defined---if there is no color, you can %
+% setgray instead of setcmykcolor. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/cX 18 def % the crop offset
+/CM
+{
+ gsave
+ 3 1 roll
+ translate
+ rotate
+ .3 setlinewidth
+ /TeXcolorcmyk where {pop 1 1 1 1 setcmykcolor} {0 setgray} ifelse
+ 0 cX neg moveto
+ 0 cX 2 div neg lineto stroke
+ cX neg 0 moveto
+ cX 2 div neg 0 lineto stroke
+ grestore
+} def
+%
+% RegMark %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% x_center y_center RegMark - %
+% %
+% Make a registration mark at x_center y_center. Consists of two concentric %
+% circles, the inner one filled, and a cross hair through them. Preferred %
+% by those who register films for proof. Checks to see if TeXcolorcmyk is %
+% defined---if there is no color, you don't need registration marks! %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/RegMark
+{
+ /TeXcolorcmyk where
+ {
+ pop
+ gsave
+ translate
+ .3 setlinewidth
+ 1 1 1 1 setcmykcolor
+ 0 0 3 0 360 arc fill
+ 0 0 6 0 360 arc stroke
+ 0 1 3 {
+ pop
+ 90 rotate
+ 0 0 0 0 setcmykcolor
+ 0 0 moveto 3 0 lineto stroke
+ 1 1 1 1 setcmykcolor
+ 3 0 moveto 8 0 lineto stroke
+ } for
+ grestore
+ } {pop pop} ifelse
+} def
+%
+% DoLogo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% x_left y_upper DoLogo - %
+% %
+% If /CompositorName is defined, then the logo will be placed in the crop %
+% area. /JobDescription and /Contractor can also be defined in the TeX file %
+% to define the job. If there is no definition, they simply will not show %
+% up. Examples: %
+% /CompositorName (Meridian Creative Group) def %
+% /JobDescription (College Algebra: Concepts and Models 2/e) def %
+% /Contractor (D.C. Heath and Company) def %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/DoLogo
+{
+ moveto
+ save
+ %
+ % Variables to control the look of the Logo:
+ %
+ /LogoVgap 1 def % Vertical gap between logo string and box
+ /LogoHgap 3 def % Horizontal gap between logo string and box
+ /LogoFont {6 /Helvetica} def % The font to use for this logo.
+ %
+ % Gather some useful information about the Logo Font.
+ %
+ /LogoAscent LogoFont findfont /FontBBox get 3 get abs 1000 div mul def
+ /LogoDescent LogoFont findfont /FontBBox get 1 get abs 1000 div mul def
+ /LogoHeight LogoAscent LogoDescent add def
+ %
+ % <string> AddToLogo <string width>
+ %
+ /LogoWidth 0 def
+ /AddToLogo
+ {
+ dup show % leaving <string> on stack
+ stringwidth pop % <swidth> on stack
+ } def
+ %
+ % Start by setting line width, color, and establish logo font.
+ %
+ .24 setlinewidth
+ /TeXcolorcmyk where {pop 1 1 1 1 setcmykcolor} {0 setgray} ifelse
+ LogoFont findfont exch scalefont setfont
+ %
+ % Then move into position
+ %
+ LogoHgap LogoVgap LogoAscent add neg rmoveto
+ %
+ % If there is a logo, there will be a compositor, so start by setting
+ % the compositor name and add to the LogoWidth.
+ %
+ CompositorName AddToLogo % Add compositor name to logo
+ LogoWidth add /LogoWidth exch def % Add compositor name to logo width
+ %
+ % If there is a job description, set it next.
+ %
+ /JobDescription where
+ {
+ pop % Get rid of dictionary
+ LogoFont pop 0 rmoveto % Move a bit to the right
+ LogoWidth LogoFont pop add % Add that on to the logo width
+ JobDescription AddToLogo % Add job description to logo
+ add /LogoWidth exch def % Add job description to logo width
+ } if
+ %
+ % Same thing with Contractor.
+ %
+ /Contractor where
+ {
+ pop % Get rid of dictionary
+ LogoFont pop 0 rmoveto % Move a bit to the right
+ LogoWidth LogoFont pop add % Add that on to the logo width
+ Contractor AddToLogo % Add contractor to logo
+ add /LogoWidth exch def % Add contractor to logo width
+ } if
+ %
+ % Add the gaps onto the logo dimensions for box drawing.
+ %
+ /LogoHeight LogoHeight 2 LogoVgap mul add def
+ /LogoWidth LogoWidth 2 LogoHgap mul add def
+ %
+ % Move into lower right corner of box and draw it clockwise.
+ %
+ LogoHgap LogoVgap LogoDescent add neg rmoveto
+ LogoWidth neg 0 rlineto 0 LogoHeight rlineto
+ LogoWidth 0 rlineto 0 LogoHeight neg rlineto stroke
+ restore
+ stroke
+} def
+%
+/DrawCenterTicks
+{
+ gsave
+ .3 setlinewidth
+ /TeXcolorcmyk where {pop 1 1 1 1 setcmykcolor} {0 setgray} ifelse
+ hsize cX 2 mul sub 2 div cX 2 div neg moveto
+ 0 cX 2 div neg rlineto
+ hsize cX 1.5 mul sub vsize cX 2 mul sub 2 div moveto
+ cX 2 div 0 rlineto
+ hsize cX 2 mul sub 2 div vsize cX 1.5 mul sub moveto
+ 0 cX 2 div rlineto
+ cX 2 div neg vsize cX 2 mul sub 2 div moveto
+ cX 2 div neg 0 rlineto
+ stroke
+ grestore
+} def
+%
+% NamePlates %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% left bottom NamePlates - %
+% %
+% /FirstPlate, /SecondPlate, /ThirdPlate, and /FourthPlate have default %
+% names but may be overridden in the job.hdr. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/NamePlates
+{
+ gsave
+ translate
+ % Make sure each plate has a name.
+ /FirstPlate where {pop} {/FirstPlate (Cyan) def} ifelse
+ /SecondPlate where {pop} {/SecondPlate (Magenta) def} ifelse
+ /ThirdPlate where {pop} {/ThirdPlate (Yellow) def} ifelse
+ /FourthPlate where {pop} {/FourthPlate (Black) def} ifelse
+ /Helvetica-Bold findfont 10 scalefont setfont
+ % Cyan block
+ 1 0 0 0 setcmykcolor
+ 0 0 moveto
+ 9 0 lineto
+ 9 9 lineto
+ 0 9 lineto
+ closepath
+ fill
+ 0 0 0 0 setcmykcolor
+ 0.75 1 moveto
+ (C) show
+ % Magenta block
+ 0 1 0 0 setcmykcolor
+ 9 0 moveto
+ 18 0 lineto
+ 18 9 lineto
+ 9 9 lineto
+ closepath
+ fill
+ 0 0 0 0 setcmykcolor
+ 9.25 1 moveto
+ (M) show
+ % Yellow block
+ 0 0 1 0 setcmykcolor
+ 18 0 moveto
+ 27 0 lineto
+ 27 9 lineto
+ 18 9 lineto
+ closepath
+ fill
+ 0 0 0 0 setcmykcolor
+ 19.25 1 moveto
+ (Y) show
+ % Black block
+ 0 0 0 1 setcmykcolor
+ 27 0 moveto
+ 36 0 lineto
+ 36 9 lineto
+ 27 9 lineto
+ closepath
+ fill
+ 0 0 0 0 setcmykcolor
+ 27.5 1 moveto
+ (K) show
+ % Name Plates
+ /Helvetica-Narrow findfont 9 scalefont setfont
+ 1 1 1 1 setcmykcolor
+ ( Plate:) show
+ 1 0 0 0 setcmykcolor
+ FirstPlate show
+ 0 1 0 0 setcmykcolor
+ SecondPlate show
+ 0 0 1 0 setcmykcolor
+ ThirdPlate show
+ 0 0 0 1 setcmykcolor
+ FourthPlate show
+ grestore
+} def
+%
+end %TeXDict
+%
+/bop-hook {
+ cX dup TR % move the origin a bit
+ gsave
+ % Draw center tic marks in the crop margin
+ DrawCenterTicks
+ % Do the logo
+ /CompositorName where {pop cX 2 div dup neg DoLogo} if
+ % Name the plates
+ /TeXcolorcmyk where {pop hsize 2 div cX add -18 NamePlates} if
+ % now draw four crop marks and four registration marks
+ 0 0 0 CM cX -2 div dup RegMark
+ vsize cX 2 mul sub dup
+ hsize cX 2 mul sub dup
+ isls { 4 2 roll } if
+ 0 2 copy 90 CM cX 2 div sub exch cX 2 div add exch RegMark
+ exch 2 copy 180 CM cX 2 div add exch cX 2 div add exch RegMark
+ 0 exch 2 copy 270 CM cX 2 div add exch cX 2 div sub exch RegMark
+ grestore
+ 0 cX -2 mul TR % now move to where we start drawing
+ isls { cX -2 mul 0 TR } if
+} def
diff --git a/Build/source/texk/dvipsk/contrib/latex209/avantgarde.sty b/Build/source/texk/dvipsk/contrib/latex209/avantgarde.sty
new file mode 100644
index 00000000000..91ae8f388c1
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/avantgarde.sty
@@ -0,0 +1,11 @@
+% latex style using AvantGarde for text.
+
+\def\@mrm{pagk}% AvantGarde - book
+\def\@mit{pagko}% AvantGarde - book oblique
+\def\@msl{pagdo}% AvantGarde - demi oblique
+\def\@mbf{pagd}% AvantGarde - demi
+\def\@mcsc{pagkc}% AvantGarde - book - small caps
+\def\@mtt{pcrr}% courier
+\def\@mss{phvr}% helvetica
+
+\input psfonts.sty
diff --git a/Build/source/texk/dvipsk/contrib/latex209/blackdvi.sty b/Build/source/texk/dvipsk/contrib/latex209/blackdvi.sty
new file mode 100644
index 00000000000..85e7fd38a28
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/blackdvi.sty
@@ -0,0 +1,109 @@
+% This is BLACKDVI.STY and BLACKDVI.TEX in text format, as of March 5,
+% 1992, written by Jim Hafner, HAFNER@ALMADEN, or hafner@almaden.ibm.com.
+% This file turns all color commands defined by COLORDVI.STY or COLORDVI.TEX
+% into no-ops and so can be used to get B/W printing without having to
+% ferret out all the color macros. Modified by Tomas Rokicki to be a
+% bit smaller.
+%
+% 20 Aug. 1992: Revised by J. Hafner, by adding \globalColor as a no-op.
+%
+% For example, with FoilTeX, just use
+% \documentstyle[blackdvi]{foils}
+% in place of
+% \documentstyle[colordvi]{foils}
+%
+% This file can be used anywhere COLORDVI.STY or COLORDVI.TEX is used. In
+% particular, It can be used in any flavor of LaTeX (e.g. LaTeX,
+% FoilTeX, AMS-LaTeX) by adding the keyword "blackdvi" to the options in
+% the \documentstyle command (e.g., "\documentstyle[blackdvi]{foils}") or
+% \input in any flavor of TeX (e.g. Plain TeX, eplain, AMS-TeX or any of
+% the above LaTeX flavors) with the command "\input blackdvi".
+%
+% Here is the background command
+\def\background#1{}%
+%
+% This is used to define all the \newColor macros defined by \newColor
+% as no-ops.
+\def\newColor #1 {\expandafter\def\csname text#1\endcsname{}%
+ \expandafter\def\csname #1\endcsname##1{##1}}%
+%
+% Here are the two macros used for user-definable colors
+\def\textColor#1{}
+\def\Color#1#2{#2}
+%
+% This is the macro that is used to protect certain regions of the
+% text from corruption by local color commands. See COLORDVI.STY for
+% more information. We make it a no-op in this style.
+\def\globalColor#1{#1}
+%
+% Here are the preset color names. This list should match the list
+% in <colordvi.[tex,sty]>.
+%
+\newColor GreenYellow
+\newColor Yellow
+\newColor Goldenrod
+\newColor Dandelion
+\newColor Apricot
+\newColor Peach
+\newColor Melon
+\newColor YellowOrange
+\newColor Orange
+\newColor BurntOrange
+\newColor Bittersweet
+\newColor RedOrange
+\newColor Mahogany
+\newColor Maroon
+\newColor BrickRed
+\newColor Red
+\newColor OrangeRed
+\newColor RubineRed
+\newColor WildStrawberry
+\newColor Salmon
+\newColor CarnationPink
+\newColor Magenta
+\newColor VioletRed
+\newColor Rhodamine
+\newColor Mulberry
+\newColor RedViolet
+\newColor Fuchsia
+\newColor Lavender
+\newColor Thistle
+\newColor Orchid
+\newColor DarkOrchid
+\newColor Purple
+\newColor Plum
+\newColor Violet
+\newColor RoyalPurple
+\newColor BlueViolet
+\newColor Periwinkle
+\newColor CadetBlue
+\newColor CornflowerBlue
+\newColor MidnightBlue
+\newColor NavyBlue
+\newColor RoyalBlue
+\newColor Blue
+\newColor Cerulean
+\newColor Cyan
+\newColor ProcessBlue
+\newColor SkyBlue
+\newColor Turquoise
+\newColor TealBlue
+\newColor Aquamarine
+\newColor BlueGreen
+\newColor Emerald
+\newColor JungleGreen
+\newColor SeaGreen
+\newColor Green
+\newColor ForestGreen
+\newColor PineGreen
+\newColor LimeGreen
+\newColor YellowGreen
+\newColor SpringGreen
+\newColor OliveGreen
+\newColor RawSienna
+\newColor Sepia
+\newColor Brown
+\newColor Tan
+\newColor Gray
+\newColor Black
+\newColor White
diff --git a/Build/source/texk/dvipsk/contrib/latex209/bookman.sty b/Build/source/texk/dvipsk/contrib/latex209/bookman.sty
new file mode 100644
index 00000000000..520e4ebdb68
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/bookman.sty
@@ -0,0 +1,11 @@
+% latex style using Bookman for text
+
+\def\@mrm{pbkl}% Bookman - light
+\def\@mit{pbkli}% Bookman - light italic
+\def\@msl{pbkdi}% Bookman - demi italic
+\def\@mbf{pbkd}% Bookman - demi
+\def\@mcsc{pbklc}% Bookman - light - small caps
+\def\@mtt{pcrr}% courier
+\def\@mss{phvr}% helvetica
+
+\input psfonts.sty
diff --git a/Build/source/texk/dvipsk/contrib/latex209/chancery.sty b/Build/source/texk/dvipsk/contrib/latex209/chancery.sty
new file mode 100644
index 00000000000..7f87fd9d617
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/chancery.sty
@@ -0,0 +1,11 @@
+% latex style using Zapf Chancery for text.
+
+\def\@mrm{pzcmi}% Zapf Chancery Medium Italic
+\def\@mit{pzcmi}% Zapf Chancery Medium Italic
+\def\@msl{pzcmi}% Zapf Chancery Medium Italic
+\def\@mbf{pzcmi}% Zapf Chancery Medium Italic
+\def\@mcsc{pzcmi}% Zapf Chancery Medium Italic
+\def\@mtt{pcrr}% courier
+\def\@mss{phvr}% helvetica
+
+\input psfonts.sty
diff --git a/Build/source/texk/dvipsk/contrib/latex209/colordvi.sty b/Build/source/texk/dvipsk/contrib/latex209/colordvi.sty
new file mode 100644
index 00000000000..df812f8df60
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/colordvi.sty
@@ -0,0 +1,162 @@
+% This is COLORDVI.TEX and COLORDVI.STY in text format, as of
+% March 5, 1992, written by Jim Hafner, HAFNER@ALMADEN, or
+% hafner@almaden.ibm.com. Modified by Tomas Rokicki to be a
+% bit smaller and easier to add to.
+%
+% 20 Aug. 1992: Revised by J. Hafner, by adding \globalColor.
+%
+% This style file can be used to get color in TeX, LaTeX or more
+% importantly, FoilTeX as an optional style file. It is generic in
+% that the color parameters are determined by the driver's header files.
+%
+% It can be used with any driver which knows how to process the keywords
+% in the \special commands. Currently, only versions of dvips greater
+% than 5.478 (dvips is the DVI->PostScript driver by Tom Rokicki) and
+% TeXview on the NeXT interpret these specials.
+%
+% This file can be used in any flavor of LaTeX (e.g. LaTeX, FoilTeX,
+% AMS-LaTeX) by adding the keyword "colordvi" to the options in the
+% \documentstyle command (e.g., "\documentstyle[colordvi]{foils}") or \input
+% in any flavor of TeX (e.g. Plain TeX, eplain, AMS-TeX or any of the
+% above LaTeX flavors) with the command "\input colordvi".
+%
+% The actual parameters for each color are determined by the device
+% driver.
+% For "dvips", that is the header file color.pro prepended to the
+% output file by dvips. They can be overrriden by a user-supplied
+% header, called by either the -h option or the "h" flag in a printer
+% configuration file, or in the .dvipsrc (or its analogue on other
+% systems).
+%
+% Most of the color names and their matches were based on the
+% most recent (at time of writing) Crayola Crayon box of 64 colors.
+%
+% There are 68 predefined colors. At the end of this file is a
+% listing of the color names and their approximate PANTONE color
+% match. This is for reference purposes only.
+%
+% The first macro lets the user specify the background color for the
+% document. It sets the background color for the current page and all
+% succeeding pages, unless changed by another command of this type. To
+% change the background color back to the default, issue
+% \background{White}
+%
+\def\background#1{\special{background #1}}
+%
+% There are two types of text color commands. The first is in the form
+% \ColorName (note the uppercase for the color name).
+%
+% It is called a local color command since it takes one argument
+% enclosed in brackets. It writes the contents of its argument in the
+% selected color. This should be used for local or nested color
+% changes, since it restores the original color state when it completes.
+% The second type of color command is in the form
+% \textColorName
+% This uses the same naming convention as before. It is called a global
+% color command since it takes no arguments and simply sets the color at
+% this point. No previous color information is saved. IF YOU USE THIS
+% INTERNAL TO ANY LOCAL COLOR COMMAND, THE NESTING HISTORY IS LOST.
+%
+% This next definition is used in an invocation of a \textColorName
+% macro to save the global color value in local form via the \globalColor
+% macro. This new macro can then be used to protect certain regions of
+% the text, like item tags and headers and footers which can be
+% corrupted by local colors. In particular, item tags in lists can
+% incorrectly inherit the color from a local color command immediately
+% following it. The \subdef macro is invoked within the invocation of a
+% global color change.
+%
+\def\subdef#1{\gdef\globalColor##1{\special
+ {color push #1}##1\special{color pop}}}
+%
+% Here are the global color changers, with color codes defined;
+% these are used to define the small region colors.
+%
+% This first is for user defined color. The argument #1 is for a "CMYK"
+% quadruple of intensity values between 0 and 1. (CMYK stands for Cyan,
+% Magenta, Yellow and Black.) E.g., \textColor{.2 .3 .4 .1}
+%
+\def\textColor#1{\subdef{cmyk #1}\special{color cmyk #1}}
+%
+% and a userdefinable local color command.
+\def\Color#1#2{\special{color push cmyk #1}#2\special{color pop}}
+%
+%
+\def\newColor #1 {\expandafter\def\csname #1\endcsname##1{\special
+ {color push #1}##1\special{color pop}}%
+ \expandafter\def\csname text#1\endcsname{\subdef{#1}%
+ \special{color #1}}}%
+%
+% Here are the color names and their PANTONE match (approximately)
+%
+\newColor GreenYellow % GreenYellow Approximate PANTONE 388
+\newColor Yellow % Yellow Approximate PANTONE YELLOW
+\newColor Goldenrod % Goldenrod Approximate PANTONE 109
+\newColor Dandelion % Dandelion Approximate PANTONE 123
+\newColor Apricot % Apricot Approximate PANTONE 1565
+\newColor Peach % Peach Approximate PANTONE 164
+\newColor Melon % Melon Approximate PANTONE 177
+\newColor YellowOrange % YellowOrange Approximate PANTONE 130
+\newColor Orange % Orange Approximate PANTONE ORANGE-021
+\newColor BurntOrange % BurntOrange Approximate PANTONE 388
+\newColor Bittersweet % Bittersweet Approximate PANTONE 167
+\newColor RedOrange % RedOrange Approximate PANTONE 179
+\newColor Mahogany % Mahogany Approximate PANTONE 484
+\newColor Maroon % Maroon Approximate PANTONE 201
+\newColor BrickRed % BrickRed Approximate PANTONE 1805
+\newColor Red % Red VERY-Approx PANTONE RED
+\newColor OrangeRed % OrangeRed No PANTONE match
+\newColor RubineRed % RubineRed Approximate PANTONE RUBINE-RED
+\newColor WildStrawberry % WildStrawberry Approximate PANTONE 206
+\newColor Salmon % Salmon Approximate PANTONE 183
+\newColor CarnationPink % CarnationPink Approximate PANTONE 218
+\newColor Magenta % Magenta Approximate PANTONE PROCESS-MAGENTA
+\newColor VioletRed % VioletRed Approximate PANTONE 219
+\newColor Rhodamine % Rhodamine Approximate PANTONE RHODAMINE-RED
+\newColor Mulberry % Mulberry Approximate PANTONE 241
+\newColor RedViolet % RedViolet Approximate PANTONE 234
+\newColor Fuchsia % Fuchsia Approximate PANTONE 248
+\newColor Lavender % Lavender Approximate PANTONE 223
+\newColor Thistle % Thistle Approximate PANTONE 245
+\newColor Orchid % Orchid Approximate PANTONE 252
+\newColor DarkOrchid % DarkOrchid No PANTONE match
+\newColor Purple % Purple Approximate PANTONE PURPLE
+\newColor Plum % Plum VERY-Approx PANTONE 518
+\newColor Violet % Violet Approximate PANTONE VIOLET
+\newColor RoyalPurple % RoyalPurple Approximate PANTONE 267
+\newColor BlueViolet % BlueViolet Approximate PANTONE 2755
+\newColor Periwinkle % Periwinkle Approximate PANTONE 2715
+\newColor CadetBlue % CadetBlue Approximate PANTONE (534+535)/2
+\newColor CornflowerBlue % CornflowerBlue Approximate PANTONE 292
+\newColor MidnightBlue % MidnightBlue Approximate PANTONE 302
+\newColor NavyBlue % NavyBlue Approximate PANTONE 293
+\newColor RoyalBlue % RoyalBlue No PANTONE match
+\newColor Blue % Blue Approximate PANTONE BLUE-072
+\newColor Cerulean % Cerulean Approximate PANTONE 3005
+\newColor Cyan % Cyan Approximate PANTONE PROCESS-CYAN
+\newColor ProcessBlue % ProcessBlue Approximate PANTONE PROCESS-BLUE
+\newColor SkyBlue % SkyBlue Approximate PANTONE 2985
+\newColor Turquoise % Turquoise Approximate PANTONE (312+313)/2
+\newColor TealBlue % TealBlue Approximate PANTONE 3145
+\newColor Aquamarine % Aquamarine Approximate PANTONE 3135
+\newColor BlueGreen % BlueGreen Approximate PANTONE 320
+\newColor Emerald % Emerald No PANTONE match
+\newColor JungleGreen % JungleGreen Approximate PANTONE 328
+\newColor SeaGreen % SeaGreen Approximate PANTONE 3268
+\newColor Green % Green VERY-Approx PANTONE GREEN
+\newColor ForestGreen % ForestGreen Approximate PANTONE 349
+\newColor PineGreen % PineGreen Approximate PANTONE 323
+\newColor LimeGreen % LimeGreen No PANTONE match
+\newColor YellowGreen % YellowGreen Approximate PANTONE 375
+\newColor SpringGreen % SpringGreen Approximate PANTONE 381
+\newColor OliveGreen % OliveGreen Approximate PANTONE 582
+\newColor RawSienna % RawSienna Approximate PANTONE 154
+\newColor Sepia % Sepia Approximate PANTONE 161
+\newColor Brown % Brown Approximate PANTONE 1615
+\newColor Tan % Tan No PANTONE match
+\newColor Gray % Gray Approximate PANTONE COOL-GRAY-8
+\newColor Black % Black Approximate PANTONE PROCESS-BLACK
+\newColor White % White No PANTONE match
+
+% Now we make sure that we initialize the global color to Black
+\subdef{Black}
diff --git a/Build/source/texk/dvipsk/contrib/latex209/lucida.sty b/Build/source/texk/dvipsk/contrib/latex209/lucida.sty
new file mode 100644
index 00000000000..012bfbdcac6
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/lucida.sty
@@ -0,0 +1,12 @@
+% LaTeX style using Lucida for text (but not math).
+% Bob Morris and Karl Berry, 15 Feb 93.
+
+\def\@mrm{plcr}% roman
+\def\@mit{plcri}% italic
+\def\@msl{plcro}% oblique
+\def\@mbf{plcb}% bold
+\def\@mcsc{plcrc}% small caps
+\def\@mtt{plcrst}% (sans) typewriter
+\def\@mss{plcrs}% sans
+
+\input psfonts.sty
diff --git a/Build/source/texk/dvipsk/contrib/latex209/ncs.sty b/Build/source/texk/dvipsk/contrib/latex209/ncs.sty
new file mode 100644
index 00000000000..e7b996f7e6a
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/ncs.sty
@@ -0,0 +1,11 @@
+% latex style using New Century Schoolbook for text.
+
+\def\@mrm{pncr}% new century schoolbook
+\def\@mit{pncri}% new century schoolbook - italic
+\def\@msl{pncbi}% new century schoolbook - bold italic
+\def\@mbf{pncb}% new century schoolbook - bold
+\def\@mcsc{pncrc}% new century schoolbook - small caps
+\def\@mtt{pcrr}% courier
+\def\@mss{phvr}% helvetica
+
+\input psfonts.sty
diff --git a/Build/source/texk/dvipsk/contrib/latex209/palatino.sty b/Build/source/texk/dvipsk/contrib/latex209/palatino.sty
new file mode 100644
index 00000000000..41d95d322f5
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/palatino.sty
@@ -0,0 +1,11 @@
+% latex style using Palatino for text.
+
+\def\@mrm{pplr}% palatino
+\def\@mit{pplri}% palatino - italic
+\def\@msl{pplro}% palatino - oblique
+\def\@mbf{pplb}% palatino - bold
+\def\@mcsc{pplrc}% palatino - small caps
+\def\@mtt{pcrr}% courier
+\def\@mss{phvr}% helvetica
+
+\input psfonts.sty
diff --git a/Build/source/texk/dvipsk/contrib/latex209/psfonts.sty b/Build/source/texk/dvipsk/contrib/latex209/psfonts.sty
new file mode 100644
index 00000000000..97948237045
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/psfonts.sty
@@ -0,0 +1,266 @@
+% psfonts.sty - re-work of lfonts.tex to allow postscript fonts
+% to replace cmr fonts. Original by LA Carr. Hacked by Van
+% Jacobson.
+%
+% $Header: psfonts.sty,v 1.2 88/01/23 17:52:49 van Exp $
+%
+\def\@@getfont#1#2#3#4#5#6#7{%
+\@ifundefined{\string #1\string #5}{\global\expandafter
+ \font \csname \string #1\string #5\endcsname #4\@ptscale{#5}\relax}{}%
+\@ifundefined{\string #1\string #6}{\global\expandafter
+ \font \csname \string #1\string #6\endcsname #4\@ptscale{#6}\relax}{}%
+\@ifundefined{\string #1\string #7}{\global\expandafter
+ \font \csname \string #1\string #7\endcsname #4\@ptscale{#7}\relax}{}%
+\@ifundefined{\string #1\string #3}{\global\expandafter
+ \let \csname \string #1\string #3\endcsname #3\relax
+ \@addfontinfo#3{\textfont #2\csname \string #1\string #5\endcsname
+ \scriptfont #2\csname \string #1\string #6\endcsname
+ \scriptscriptfont #2\csname \string #1\string #7\endcsname
+ \def#1{\fam #2\csname\string #1\string #5\endcsname}}}{}#3#1}
+\def\@@@getfont#1#2#3#4#5{%
+\@ifundefined{\string #1\string #5}{\global\expandafter
+ \font \csname \string #1\string #5\endcsname #4\@ptscale{#5}\relax}{}%
+\@ifundefined{\string #1\string #3}{\global\expandafter
+ \let \csname \string #1\string #3\endcsname #3\relax
+ \@addfontinfo#3{\def#1{\fam #2\csname\string #1\string #5\endcsname}}}{}#3#1}
+
+\def\@psfonts#1#2#3#4{%
+\def\prm{\@@getfont\prm\z@#1\@mrm{#2}{#3}{#4}}%
+\def\pit{\@@getfont\pit\itfam#1\@mit{#2}{#3}{#4}}%
+\def\psl{\@@getfont\psl\slfam#1\@msl{#2}{#3}{#4}}%
+\def\pbf{\@@getfont\pbf\bffam#1\@mbf{#2}{#3}{#4}}%
+\def\ptt{\@@getfont\ptt\ttfam#1\@mtt{#2}{#3}{#4}%
+\@nohyphens\ptt {#2}\@nohyphens\ptt {#3}\@nohyphens\ptt {#4}}%
+\def\psf{\@@getfont\psf\sffam#1\@mss{#2}{#3}{#4}}%
+\def\psc{\@@getfont\psc\scfam#1\@mcsc{#2}{#3}{#4}}}
+
+% math stuff: we want to use cmr operator characters but Times
+% letters. So, we make a new family to hold cmrX & re-mathcode
+% to force the operators to come from that family.
+\newfam\@cmrfam
+\newcount\@cmrscale
+\def\@mathmap#1{\@cmrscale=\@cmrfam \multiply\@cmrscale by 256
+\advance\@cmrscale by \the\mathcode#1 \mathcode#1=\@cmrscale\relax}
+\def\@cmrset#1#2#3{\textfont\@cmrfam #1%
+\scriptfont\@cmrfam #2\scriptscriptfont\@cmrfam #3\relax}
+
+\@mathmap{`\(}
+\@mathmap{`\)}
+\@mathmap{`\+}
+\@mathmap{`\=}
+\@mathmap{`\[}
+\@mathmap{`\]}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\vpt{\textfont\z@\fivrm
+ \scriptfont\z@\fivrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\fivmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\fivsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\fam\@ne\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@vpt555%
+\@cmrset\fivrm\fivrm\fivrm%
+\def\ly{\fam\lyfam\fivly}\textfont\lyfam\fivly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut\rm}
+\def\@vpt{}
+\def\vipt{\textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@vipt666%
+\@cmrset\sixrm\sixrm\sixrm%
+\def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+\@setstrut\rm}
+\def\@vipt{}
+\def\viipt{\textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@viipt755%
+\@cmrset\sevrm\sixrm\fivrm%
+\def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@viipt{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\viiipt{\textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@viiipt865%
+\@cmrset\egtrm\sixrm\fivrm%
+\def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@viiipt{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ixpt{\textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@ixpt965%
+\@cmrset\ninrm\sixrm\fivrm%
+\def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@ixpt{}
+\def\xpt{\textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+\@psfonts\@xpt{10}75%
+\@cmrset\tenrm\sevrm\fivrm%
+\def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+\def\@xpt{}
+\def\xipt{\textfont\z@\elvrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\elvmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\elvsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\elvmi \textfont\tw@\elvsy
+ \textfont\lyfam\elvly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{elvmib}{\global\font\elvmib\@mbi\@halfmag
+ \global\font\elvsyb\@mbsy\@halfmag
+ \global\font\elvlyb\@lasyb\@halfmag\relax\@addfontinfo\@xipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\elvmib \textfont\tw@\elvsyb
+ \textfont\lyfam\elvlyb\@prtct\@boldtrue}}}{}\@xipt\boldmath}%
+\@psfonts\@xipt{11}86%
+\@cmrset\elvrm\egtrm\sixrm%
+\def\ly{\fam\lyfam\elvly}\textfont\lyfam\elvly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+\@setstrut \rm}
+\def\@xipt{}
+\def\xiipt{\textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+\@psfonts\@xiipt{12}86%
+\@cmrset\twlrm\egtrm\sixrm%
+\def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm}
+\def\@xiipt{}
+\def\xivpt{\textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+\textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+\textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib\@mbi\@magscale2\global\font\frtnsyb\@mbsy\@magscale2
+ \global\font\frtnlyb\@lasyb\@magscale2\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt\boldmath}%
+\@psfonts\@xivpt{14}{10}7%
+\@cmrset\frtnrm\tenrm\sevrm%
+\def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+\@setstrut \rm}
+\def\@xivpt{}
+\def\xviipt{\textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+\textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+\textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@xviipt{17}{12}{10}%
+\@cmrset\svtnrm\twlrm\tenrm%
+\def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+\@setstrut \rm}
+\def\@xviipt{}
+\def\xxpt{\textfont\z@\twtyrm
+ \scriptfont\z@\frtnrm \scriptscriptfont\z@\twlrm
+\textfont\@ne\twtymi \scriptfont\@ne\frtnmi \scriptscriptfont\@ne\twlmi
+\textfont\tw@\twtysy \scriptfont\tw@\frtnsy \scriptscriptfont\tw@\twlsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@xxpt{20}{14}{12}%
+\@cmrset\twtyrm\frtnrm\twlrm%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\frtnly \scriptscriptfont\lyfam\twlly
+\@setstrut \rm}
+\def\@xxpt{}
+\def\xxvpt{\textfont\z@\twfvrm
+ \scriptfont\z@\twtyrm \scriptscriptfont\z@\svtnrm
+\textfont\@ne\twtymi \scriptfont\@ne\twtymi \scriptscriptfont\@ne\svtnmi
+\textfont\tw@\twtysy \scriptfont\tw@\twtysy \scriptscriptfont\tw@\svtnsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\@psfonts\@xxvpt{25}{20}{17}%
+\@cmrset\twfvrm\twtyrm\svtnrm%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\twtyly \scriptscriptfont\lyfam\svtnly
+\@setstrut \rm}
+\def\@xxvpt{}
+%
+% Fix accents for PostScript fonts (but break them for non-PostScript
+% fonts.) -tgr, 6 April 91.
+%
+\def\H#1{{\accent"CD #1}}\def\.#1{{\accent"C7 #1}}
+\def\dot{\mathaccent"70C7 }
+\newdimen\aadimen
+\def\AA{\leavevmode\setbox0\hbox{h}\aadimen\ht0
+ \advance\aadimen-1ex\setbox0\hbox{A}\rlap{\raise.67\aadimen
+ \hbox to \wd0{\hss\char'27\hss}}A}
+\def\pounds{\char163}
diff --git a/Build/source/texk/dvipsk/contrib/latex209/psgreek.sty b/Build/source/texk/dvipsk/contrib/latex209/psgreek.sty
new file mode 100644
index 00000000000..396976c8dfd
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/psgreek.sty
@@ -0,0 +1,38 @@
+%--------------------------------------------------------------
+%---------- greek.sty ---------------------
+%---------- 4/19/90 S. Janowsky -----------
+%
+% Include as a style option after times, palatino, or whatever.
+%
+\def\@mathgreekmap#1{\@cmrscale=\@cmrfam \multiply\@cmrscale by 256
+\advance\@cmrscale by \the#1 \mathchardef#1=\@cmrscale\relax}
+\@mathgreekmap{\Gamma}
+\@mathgreekmap{\Delta}
+\@mathgreekmap{\Theta}
+\@mathgreekmap{\Lambda}
+\@mathgreekmap{\Xi}
+\@mathgreekmap{\Pi}
+\@mathgreekmap{\Sigma}
+\@mathgreekmap{\Upsilon}
+\@mathgreekmap{\Phi}
+\@mathgreekmap{\Psi}
+\@mathgreekmap{\Omega}
+%
+\def\@mathaccdefmap#1#2{\@cmrscale=\@cmrfam \multiply\@cmrscale by 256
+\advance\@cmrscale by #2 \edef#1{\mathaccent\the\@cmrscale}\relax}
+%
+\@mathaccdefmap{\acute}{"0013 }
+\@mathaccdefmap{\grave}{"0012 }
+\@mathaccdefmap{\ddot}{"007F }
+\@mathaccdefmap{\tilde}{"007E }
+\@mathaccdefmap{\bar}{"0016 }
+\@mathaccdefmap{\breve}{"0015 }
+\@mathaccdefmap{\check}{"0014 }
+\@mathaccdefmap{\hat}{"005E }
+%\@mathaccdefmap{\vec}{"017E } % Not type 00
+\@mathaccdefmap{\dot}{"005F }
+%\@mathaccdefmap{\widetilde}{"0365 } % Not type 00
+%\@mathaccdefmap{\widehat}{"0362 } % Not type 00
+%
+%----------------------------------------------------
+
diff --git a/Build/source/texk/dvipsk/contrib/latex209/rotate.sty b/Build/source/texk/dvipsk/contrib/latex209/rotate.sty
new file mode 100644
index 00000000000..0660e117352
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/rotate.sty
@@ -0,0 +1,53 @@
+%
+% These macros allow you to rotate or flip a \TeX\ box. Very useful for
+% sideways tables or upsidedown answers.
+%
+% To use, create a box containing the information you want to rotate.
+% (An hbox or vbox will do.) Now call \@rotr\boxnum to rotate the
+% material and create a new box with the appropriate (flipped) dimensions.
+% \@rotr rotates right, \@rotl rotates left, \@rotu turns upside down, and
+% \@rotf flips. These boxes may contain other rotated boxes.
+%
+\newdimen\@rotdimen
+\newbox\@rotbox
+
+\def\@vspec#1{\special{ps:#1}}% passes #1 verbatim to the output
+\def\@rotstart#1{\@vspec{gsave currentpoint currentpoint translate
+ #1 neg exch neg exch translate}}% #1 can be any origin-fixing transformation
+\def\@rotfinish{\@vspec{currentpoint grestore moveto}}% gets back in synch
+%
+% First, the rotation right. The reference point of the rotated box
+% is the lower right corner of the original box.
+%
+\def\@rotr#1{\@rotdimen=\ht#1\advance\@rotdimen by\dp#1%
+ \hbox to\@rotdimen{\hskip\ht#1\vbox to\wd#1{\@rotstart{90 rotate}%
+ \box#1\vss}\hss}\@rotfinish}
+%
+% Next, the rotation left. The reference point of the rotated box
+% is the upper left corner of the original box.
+%
+\def\@rotl#1{\@rotdimen=\ht#1\advance\@rotdimen by\dp#1%
+ \hbox to\@rotdimen{\vbox to\wd#1{\vskip\wd#1\@rotstart{270 rotate}%
+ \box#1\vss}\hss}\@rotfinish}%
+%
+% Upside down is simple. The reference point of the rotated box
+% is the upper right corner of the original box. (The box's height
+% should be the current font's xheight, \fontdimen5\font,
+% if you want that xheight to be at the baseline after rotation.)
+%
+\def\@rotu#1{\@rotdimen=\ht#1\advance\@rotdimen by\dp#1%
+ \hbox to\wd#1{\hskip\wd#1\vbox to\@rotdimen{\vskip\@rotdimen
+ \@rotstart{-1 dup scale}\box#1\vss}\hss}\@rotfinish}%
+%
+% And flipped end for end is pretty ysae too. We retain the baseline.
+%
+\def\@rotf#1{\hbox to\wd#1{\hskip\wd#1\@rotstart{-1 1 scale}%
+ \box#1\hss}\@rotfinish}%
+%
+% Now the user interface for LaTeX: \rotate[type]{text} where
+% ``type'' is `l' for left, `r' for right, `u' for upside-down, or
+% `f' for flip. `l' is the default.
+%
+\def\rotate{\@ifnextchar[{\@rotate}{\@rotate[l]}}
+\def\@rotate[#1]#2{\setbox\@rotbox=\hbox{#2}\@nameuse{@rot#1}\@rotbox}
+
diff --git a/Build/source/texk/dvipsk/contrib/latex209/times.sty b/Build/source/texk/dvipsk/contrib/latex209/times.sty
new file mode 100644
index 00000000000..3e384c8fee8
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/latex209/times.sty
@@ -0,0 +1,11 @@
+% latex style with times roman text but cm math italic.
+
+\def\@mrm{ptmr}% times - roman
+\def\@mit{ptmri}% times - italic
+\def\@msl{ptmro}% times - oblique
+\def\@mbf{ptmb}% times - bold
+\def\@mcsc{ptmrc}% times - roman - small caps
+\def\@mtt{pcrr}% courier
+\def\@mss{phvr}% helvetica
+
+\input psfonts.sty
diff --git a/Build/source/texk/dvipsk/contrib/psfntmac/ps_lfonts.tex b/Build/source/texk/dvipsk/contrib/psfntmac/ps_lfonts.tex
new file mode 100644
index 00000000000..f2e73ca0443
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/psfntmac/ps_lfonts.tex
@@ -0,0 +1,888 @@
+% File LFONTS - Version of 21 November 1989,
+% plus modifications for PostScript Times family fonts (added by Larry
+% Denenberg, larry@bbn.com, originally 5 Apr 88 and later 13 Feb 91).
+% PS font names changed to use Karl Berry's names like dvips does,
+% Stephen Gildea, Sep 92.
+
+% This version of LFONTS.TEX is for the CMR fonts. It was converted
+% from the AMR version by David Fuchs on 18 December 1985.
+% And corrected on 11 Nov 1986 by Leslie Lamport.
+% Last vestige of AMR fonts removed 3 Mar 89 by Leslie Lamport.
+
+% This file needs to be customized for the fonts available at a particular
+% site. There are three places where changes need to be made. They
+% can be found by searching this file for the string FONT-CUSTOMIZING.
+%
+% FONT CONVENTIONS
+%
+% A TYPESTYLE COMMAND is something like \it that defines a type style.
+% Each style command \xx is defined to be \protect\pxx, where
+% \pxx is defined to choose the correct font for the current size.
+% This allows style commands to appear in 'unsafe' arguments where
+% protection is required.
+%
+% A SIZE COMMAND is something like \normalsize that defines a type size.
+% It is defined by the document style. However, \normalsize is handled
+% somewhat differently because it is called so often--e.g., on every
+% page by the output routine. The document style defines \@normalsize
+% instead of \normalsize.
+%
+% A ONE-SIZE typestyle is one that exists only in the \normalsize size.
+%
+% A FONT-SIZE COMMAND is one that defines \textfont, \scriptfont and
+% \scriptscriptfont for the font families corresponding to preloaded fonts,
+% as well as the typestyle commands for the preloaded fonts. Each
+% font-size command has an associated @fontsize command, having the same
+% name except for an '@' at the front. All font-size commands are defined
+% in LFONTS. The naming convention is that a fifteenpt font has a font-size
+% name \xvpt, and so on.
+%
+% Each size command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% which does the following.
+% 0. Executes \@nomath\SIZE to issue warning if in math mode.
+% 1. \let \@currsize = \SIZE
+% 2. Sets \strutbox to a strut of height .7 * BASELINESKIP and
+% depth .3 * BASELINESKIP
+%
+% Note: Charles Karney observed that step 2 is useless, since the
+% \FONTSIZE command executed in step 4 resets \strutbox using
+% the actual baselineskip, which is \baselinestretch * BASELINESKIP.
+% Some day, this step may get removed. (Note made 28 Feb 89)
+%
+% 3. Sets \baselineskip to \baselinestretch * BASELINESKIP
+% and
+% 4. Calls \FONTSIZE
+% 5. Executes the \@FONTSIZE command.
+% It should then define all the typestyle commands not defined by the font-size
+% command, except for the one-size type styles. A typestyle command for which
+% the corresponding font exists but is not preloaded is defined to expand to a
+% \@getfont command. A typestyle whose font does not exist is defined to
+% expand to a \@subfont command.
+%
+% A one-size typestyle whose font is not preloaded is defined to expand to
+% a \@onesizefont command.
+%
+% \em is defined to be \it inside an unslanted style and \rm inside a
+% slanted style. An \em command in a section title will produce a \pem
+% command in the table of contents.
+%
+
+\def\em{\protect\pem{}}
+\def\pem{\ifdim \fontdimen\@ne\font >\z@ \rm \else \it \fi}
+
+\def\normalsize{\ifx\@currsize\normalsize \rm \else \@normalsize\fi}
+
+% \load{SIZE}{STYLE} : Solves anomaly of loaded-on-demand font
+% used for first time in math mode. Give this command outside math
+% mode, before formula using it for first time.
+\def\load#1#2{\let\@tempa\@currsize \let\@currsize\relax #1#2\@tempa}
+
+% \newfont{\CMD}{FONT} defines \CMD to be the font FONT.
+% It is equivalent to \font \CMD = FONT
+% \symbol{NUM} == \char NUM
+
+\def\newfont#1#2{\@ifdefinable #1{\font #1=#2\relax}}
+\def\symbol#1{\char #1\relax}
+
+
+
+% \@getfont \STYLE \FAM \@FONTSIZE{LOADING.INFO}
+% \STYLE = style command
+% \FAM = a control sequence defined by \newfam\FAM
+% \@FONTSIZE = the @fontsize command for the current size.
+% LOADING.INFO = information needed to load the font--e.g.,
+% cmtti10 \magstep 2
+% Does the following, where \FONTNAME denotes a new unique, untypeable
+% font name:
+% 1. Executes \font \FONTNAME = LOADING.INFO
+% 2. Appends '\textfont FAM \FONTNAME \def\STYLE{\fam \FAM \FONTNAME}'
+% to the definition of \@FONTSIZE.
+% 3. Executes \@FONTSIZE \STYLE.
+%
+% \@nohyphens\STYLE\@FONTSIZE
+% Used right after \@getfont to set \hyphenchar of the new font to -1,
+% thereby prohibiting hyphenation. It is used with \tt fonts.
+% (\@nohyphens was added on 12/18/85)
+%
+% \@subfont \STYLE \REPSTYLE
+% \STYLE, \REPSTYLE = type style commands.
+% Types warning message and defines uses \REPSTYLE.
+%
+% \@onesizefont \STYLE {LOADING.INFO}
+% Defines \STYLE to be a typestyle that exists only for the \normalsize
+% size. It produces the font specified by LOADING.INFO
+%
+% \@addfontinfo\@FONTSIZE{DEFS}
+% Expands DEFS and adds to the definition of \@FONTSIZE. Items that should
+% not be expanded should be protected with \@prtct---except no protection
+% is needed for '\def\foo', only for the contents of the definition.
+%
+% \@nomath\CS : Types a warning '\CS used in math mode' if encountered
+% in math mode.
+
+% Remove \outer from definition of \newfam
+\def\newfam{\alloc@8\fam\chardef\sixt@@n}
+
+\def\@setsize#1#2#3#4{\@nomath#1\let\@currsize#1\baselineskip
+ #2\setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}\baselineskip\baselinestretch\baselineskip
+ \normalbaselineskip\baselineskip#3#4}
+
+\newif\if@bold
+
+\let\@prtct=\relax
+
+\def\@addfontinfo#1#2{{\def\@prtct{\noexpand\@prtct\noexpand}\def\def{\noexpand
+ \def\noexpand}\xdef#1{#1#2}}}
+
+\def\@getfont#1#2#3#4{\@ifundefined{\string #1\string #3}{\global\expandafter
+ \font \csname \string #1\string #3\endcsname #4\relax
+ \@addfontinfo#3{\textfont #2\csname \string #1\string #3\endcsname
+ \scriptfont #2\csname \string #1\string #3\endcsname
+ \scriptscriptfont #2\csname \string #1\string #3\endcsname
+ \def#1{\fam #2\csname\string #1\string #3\endcsname}}}{}#3#1}
+
+\def\@nohyphens#1#2{\global\expandafter \hyphenchar\csname
+ \string #1\string #2\endcsname \m@ne}
+
+\def\@subfont#1#2{\@warning{No \string#1\space typeface in
+ this size, using \string#2}#2}
+
+\def\@onesizefont#1#2{\expandafter\newfam\csname fm\string#1\endcsname
+ \global\expandafter\font\csname ft\string#1\endcsname #2\relax
+ \gdef#1{\ifx \@currsize\normalsize \@ftfam#1\else
+ \@warning{Typeface \string#1\space available only in
+ \string\normalsize, using \string\rm}\gdef #1{\ifx \@currsize\normalsize
+ \textfont\@fontfam#1 \scriptfont\@fontfam#1 \scriptscriptfont
+ \@fontfam#1\@ftfam#1\else \rm\fi}#1\fi}#1}
+
+\def\@ftfam#1{\fam\csname fm\string#1\endcsname\csname ft\string#1\endcsname}
+
+\def\@nomath#1{\ifmmode \@warning{\string#1\space in math mode.}\fi}
+\def\@nomathbold{\ifmmode \@warning{\string\mathbold\space in math mode.}\fi}
+
+% The following definitions save token space. E.g., using \@height
+% instead of height saves 5 tokens at the cost in time of one macro
+% expansion.
+
+\def\@height{height}
+\def\@depth{depth}
+\def\@width{width}
+
+\def\@magscale#1{ scaled \magstep #1}
+\def\@halfmag{ scaled \magstephalf}
+\def\@ptscale#1{ scaled #100}
+
+
+%% FONT-CUSTOMIZING: The following \font commands define the
+%% preloaded LaTeX fonts. Font names should be changed to cause
+%% different fonts to be loaded in place of these particular AMR fonts.
+%% \font commands should be added or deleted to change which fonts
+%% are preloaded.
+
+% five point
+ \font\fivrm = ptmr at 5pt % roman
+ \font\fivmi = cmmi5 % math italic
+ \skewchar\fivmi ='177 % for placement of accents
+%\font\fivmib = cmmib10 \@ptscale5 % bold math italic
+ \font\fivsy = cmsy5 % math symbols
+ \skewchar\fivsy ='60 % for placement of math accents
+%\font\fivsyb = cmbsy10 \@ptscale5 % bold math symbols
+%\font\fivit = ptmri at 5pt % text italic
+%\font\fivsl = ptmro at 5pt % slanted
+%\font\fivbf = ptmb at 5pt % extended bold
+%\font\fivbfs = ptmbo at 5pt % extended bold slanted
+%\font\fivtt = pcrb at 5pt % typewriter
+%\font\fivtti = cmitt10 \@ptscale5 % italic typewriter
+%\font\fivtts = pcrbo at 5pt % slanted typewriter
+%\font\fivsf = phvr at 5pt % sans serif
+%\font\fivsfi = phvro at 5pt % italic sans serif
+%\font\fivsfb = phvb at 5pt % bold sans serif
+%\font\fivsc = cmcsc10 \@ptscale5 % small caps
+ \font\fivly = lasy5 % LaTeX symbols
+%\font\fivlyb = lasyb10 \@ptscale5 % LaTeX symbols
+%\font\fivuit = ptmru at 5pt % unslanted italic
+
+% six point
+ \font\sixrm = ptmr at 6pt % roman
+ \font\sixmi = cmmi6 % math italic
+ \skewchar\sixmi ='177 % for placement of accents
+%\font\sixmib = cmmib10 \@ptscale6 % bold math italic
+ \font\sixsy = cmsy6 % math symbols
+ \skewchar\sixsy ='60 % for placement of math accents
+%\font\sixsyb = cmbsy10 \@ptscale6 % bold math symbols
+%\font\sixit = ptmri at 6pt % text italic
+%\font\sixsl = ptmro at 6pt % slanted
+%\font\sixbf = ptmb at 6pt % extended bold
+%\font\sixbfs = ptmbo at 6pt % extended bold slanted
+%\font\sixtt = pcrb at 6pt % typewriter
+%\font\sixtti = cmitt10 \@ptscale6 % italic typewriter
+%\font\sixtts = pcrbo at 6pt % slanted typewriter
+%\font\sixsf = phvr at 6pt % sans serif
+%\font\sixsfi = cmssi10 \@ptscale6 % italic sans serif
+%\font\sixsfb = phvb at 6pt % bold sans serif
+%\font\sixsc = ptmrc at 6pt % small caps
+ \font\sixly = lasy6 % LaTeX symbols
+%\font\sixlyb = lasyb10 \@ptscale6 % LaTeX symbols
+%\font\sixuit = ptmru at 6pt % unslanted italic
+
+% seven point
+ \font\sevrm = ptmr at 7pt % roman
+ \font\sevmi = cmmi7 % math italic
+ \skewchar\sevmi ='177 % for placement of accents
+%\font\sevmib = cmmib10 \@ptscale7 % bold math italic
+ \font\sevsy = cmsy7 % math symbols
+ \skewchar\sevsy ='60 % for placement of math accents
+%\font\sevsyb = cmbsy10 \@ptscale7 % bold math symbols
+ \font\sevit = ptmri at 7pt % text italic
+%\font\sevsl = ptmro at 7pt % slanted
+%\font\sevbf = ptmb at 7pt % extended bold
+%\font\sevbfs = ptmbo at 7pt % extended bold slanted
+%\font\sevtt = pcrb at 7pt % typewriter
+%\font\sevtti = cmitt10 \@ptscale7 % italic typewriter
+%\font\sevtts = pcrbo at 7pt % slanted typewriter
+%\font\sevsf = phvr at 7pt % sans serif
+%\font\sevsfi = cmssi10 \@ptscale7 % italic sans serif
+%\font\sevsfb = phvb at 7pt % bold sans serif
+%\font\sevsc = ptmrc at 7pt % small caps
+ \font\sevly = lasy7 % LaTeX symbols
+%\font\sevlyb = lasyb10 \@ptscale7 % LaTeX symbols
+%\font\sevuit = ptmru at 7pt % unslanted italic
+
+% eight point
+ \font\egtrm = ptmr at 8pt % roman
+ \font\egtmi = cmmi8 % math italic
+ \skewchar\egtmi ='177 % for placement of accents
+%\font\egtmib = cmmib10 \@ptscale8 % bold math italic
+ \font\egtsy = cmsy8 % math symbols
+ \skewchar\egtsy ='60 % for placement of math accents
+%\font\egtsyb = cmbsy10 \@ptscale8 % bold math symbols
+ \font\egtit = ptmri at 8pt % text italic
+%\font\egtsl = ptmro at 8pt % slanted
+%\font\egtbf = ptmb at 8pt % extended bold
+%\font\egtbfs = ptmbo at 8pt % extended bold slanted
+%\font\egttt = pcrb at 8pt % typewriter
+%\font\egttti = cmitt10 \@ptscale8 % italic typewriter
+%\font\egttts = pcrbo at 8pt % slanted typewriter
+%\font\egtsf = phvr at 8pt % sans serif
+%\font\egtsfi = cmssi10 \@ptscale8 % italic sans serif
+%\font\egtsfb = phvb at 8pt % bold sans serif
+%\font\egtsc = ptmrc at 8pt % small caps
+ \font\egtly = lasy8 % LaTeX symbols
+%\font\egtlyb = lasyb10 \@ptscale8 % LaTeX symbols
+%\font\egtuit = ptmru at 8pt % unslanted italic
+
+
+% nine point
+ \font\ninrm = ptmr at 9pt % roman
+ \font\ninmi = cmmi9 % math italic
+ \skewchar\ninmi ='177 % for placement of accents
+%\font\ninmib = cmmib10 \@ptscale9 % bold math italic
+ \font\ninsy = cmsy9 % math symbols
+ \skewchar\ninsy ='60 % for placement of math accents
+%\font\ninsyb = cmbsy10 \@ptscale9 % bold math symbols
+ \font\ninit = ptmri at 9pt % text italic
+%\font\ninsl = ptmro at 9pt % slanted
+ \font\ninbf = ptmb at 9pt % extended bold
+%\font\ninbfs = ptmbo at 9pt % extended bold slanted
+ \font\nintt = pcrb at 9pt % typewriter
+ \hyphenchar\nintt = -1 % suppress hyphenation in \tt font
+%\font\nintti = cmitt10 \@ptscale9 % italic typewriter
+%\font\nintts = pcrbo at 9pt % slanted typewriter
+%\font\ninsf = phvr at 9pt % sans serif
+%\font\ninsfi = cmssi10 \@ptscale9 % italic sans serif
+%\font\ninsfb = phvb at 9pt % bold sans serif
+%\font\ninsc = ptmrc at 9pt % small caps
+ \font\ninly = lasy9 % LaTeX symbols
+%\font\ninlyb = lasyb10 \@ptscale9 % LaTeX symbols
+%\font\ninuit = ptmru at 9pt % unslanted italic
+
+% ten point
+ \font\tenrm = ptmr at 10pt % roman
+ \font\tenmi = cmmi10 % math italic
+ \skewchar\tenmi ='177 % for placement of accents
+%\font\tenmib = cmmib10 % bold math italic
+ \font\tensy = cmsy10 % math symbols
+ \skewchar\tensy ='60 % for placement of math accents
+%\font\tensyb = cmbsy10 % bold symbols
+ \font\tenit = ptmri % text italic
+ \font\tensl = ptmro % slanted
+ \font\tenbf = ptmb % extended bold
+%\font\tenbfs = ptmbo % extended bold slanted
+ \font\tentt = pcrb % typewriter
+ \hyphenchar\tentt = -1 % suppress hyphenation in \tt font
+%\font\tentti = cmitt10 % italic typewriter
+%\font\tentts = pcrbo % slanted typewriter
+ \font\tensf = phvr at 10pt % sans serif
+%\font\tensfi = cmssi10 % italic sans serif
+%\font\tensfb = phvb at 10pt % bold sans serif
+%\font\tensc = ptmrc % small caps
+ \font\tenly = lasy10 % LaTeX symbols
+%\font\tenlyb = lasyb10 % bold LaTeX symbols
+%\font\tenuit = ptmru % unslanted italic
+
+% eleven point
+ \font\elvrm = ptmr at 11pt % roman
+ \font\elvmi = cmmi10 \@halfmag % math italic
+ \skewchar\elvmi ='177 % for placement of accents
+%\font\elvmib = cmmib10 \@halfmag % bold math italic
+ \font\elvsy = cmsy10 \@halfmag % math symbols
+ \skewchar\elvsy ='60 % for placement of math accents
+%\font\elvsyb = cmbsy10 \@halfmag % bold symbols
+ \font\elvit = ptmri at 11pt % text italic
+ \font\elvsl = ptmro at 11pt % slanted
+ \font\elvbf = ptmb at 11pt % exelvded bold
+%\font\elvbfs = ptmbo at 11pt % exelvded bold slanted
+ \font\elvtt = pcrb at 11pt % typewriter
+ \hyphenchar\elvtt = -1 % suppress hyphenation in \tt font
+%\font\elvtti = cmitt10 \@halfmag % italic typewriter
+%\font\elvtts = pcrbo at 11pt % slanted typewriter
+ \font\elvsf = phvr at 11pt % sans serif
+%\font\elvsfi = phvro at 11pt % italic sans serif
+%\font\elvsfb = phvb at 11pt % bold sans serif
+%\font\elvsc = ptmrc at 11pt % small caps
+ \font\elvly = lasy10 \@halfmag % LaTeX symbols
+%\font\elvlyb = lasyb10 \@halfmag % bold LaTeX symbols
+%\font\elvuit = ptmru at 11pt % unslanted italic
+
+% twelve point
+ \font\twlrm = ptmr at 12pt % roman
+ \font\twlmi = cmmi12 % math italic
+ \skewchar\twlmi ='177 % for placement of accents
+%\font\twlmib = cmmib10 \@magscale1 % bold math italic
+ \font\twlsy = cmsy10 \@magscale1 % math symbols
+ \skewchar\twlsy ='60 % for placement of math accents
+%\font\twlsyb = cmbsy10 \@magscale1 % bold symbols
+ \font\twlit = ptmri at 12pt % text italic
+ \font\twlsl = ptmro at 12pt % slanted
+ \font\twlbf = ptmb at 12pt % extended bold
+%\font\twlbfs = ptmbo at 12pt % extended bold slanted
+ \font\twltt = pcrb at 12pt % typewriter
+ \hyphenchar\twltt = -1 % suppress hyphenation in \tt font
+%\font\twltti = cmitt10 \@magscale1 % italic typewriter
+%\font\twltts = pcrbo at 12pt % slanted typewriter
+ \font\twlsf = phvr at 12pt % sans serif
+%\font\twlsfi = cmssi10 \@magscale1 % italic sans serif
+%\font\twlsfb = phvb at 12pt % bold sans serif
+%\font\twlsc = ptmrc at 12pt % small caps
+ \font\twlly = lasy10 \@magscale1 % LaTeX symbols
+%\font\twllyb = lasyb10 \@magscale1 % bold LaTeX symbols
+%\font\twluit = ptmru at 12pt % unslanted italic
+
+% fourteen point
+ \font\frtnrm = ptmr at 14pt % roman
+ \font\frtnmi = cmmi10 \@magscale2 % math italic
+ \skewchar\frtnmi ='177 % for placement of accents
+%\font\frtnmib = cmmib10 \@magscale2 % bold math italic
+ \font\frtnsy = cmsy10 \@magscale2 % math symbols
+ \skewchar\frtnsy ='60 % for placement of math accents
+%\font\frtnsyb = cmbsy10 \@magscale2 % bold symbols
+%\font\frtnit = ptmri at 14pt % text italic
+%\font\frtnsl = ptmro at 14pt % slanted
+ \font\frtnbf = ptmb at 14pt % extended bold
+%\font\frtnbfs = ptmbo at 14pt % extended bold slanted
+%\font\frtntt = pcrb at 14pt % typewriter
+%\font\frtntti = cmitt10 \@magscale2 % italic typewriter
+%\font\frtntts = pcrbo at 14pt % slanted typewriter
+%\font\frtnsf = phvr at 14pt % sans serif
+%\font\frtnsfi = cmssi10 \@magscale2 % italic sans serif
+%\font\frtnsfb = phvb at 14pt % bold sans serif
+%\font\frtnsc = ptmrc at 14pt % small caps
+ \font\frtnly = lasy10 \@magscale2 % LaTeX symbols
+%\font\frtnlyb = lasyb10 \@magscale2 % bold LaTeX symbols
+%\font\frtnuit = ptmru at 14pt % unslanted italic
+
+% seventeen point
+ \font\svtnrm = ptmr at 17pt % roman
+ \font\svtnmi = cmmi10 \@magscale3 % math italic
+ \skewchar\svtnmi ='177 % for placement of accents
+%\font\svtnmib = cmmib10 \@magscale3 % bold math italic
+ \font\svtnsy = cmsy10 \@magscale3 % math symbols
+ \skewchar\svtnsy ='60 % for placement of math accents
+%\font\svtnsyb = cmbsy10 \@magscale3 % bold symbols
+%\font\svtnit = ptmri at 17pt % text italic
+%\font\svtnsl = ptmro at 17pt % slanted
+ \font\svtnbf = ptmb at 17pt % extended bold
+%\font\svtnbfs = ptmbo at 17pt % extended bold slanted
+%\font\svtntt = pcrb at 17pt % typewriter
+%\font\svtntti = cmitt10 \@magscale3 % italic typewriter
+%\font\svtntts = pcrbo at 17pt % slanted typewriter
+%\font\svtnsf = phvr at 17pt % sans serif
+%\font\svtnsfi = cmssi10 \@magscale3 % italic sans serif
+%\font\svtnsfb = phvb at 17pt % bold sans serif
+%\font\svtnsc = ptmrc at 17pt % small caps
+ \font\svtnly = lasy10 \@magscale3 % LaTeX symbols
+%\font\svtnlyb = lasyb10 \@magscale3 % bold LaTeX symbols
+%\font\svtnuit = ptmru at 17pt % unslanted italic
+
+% twenty point
+ \font\twtyrm = ptmr at 20pt % roman
+ \font\twtymi = cmmi10 \@magscale4 % math italic
+ \skewchar\twtymi ='177 % for placement of accents
+%\font\twtymib = cmmib10 \@magscale4 % bold math italic
+ \font\twtysy = cmsy10 \@magscale4 % math symbols
+ \skewchar\twtysy ='60 % for placement of math accents
+%\font\twtysyb = cmbsy10 \@magscale4 % bold symbols
+%\font\twtyit = ptmri at 20pt % text italic
+%\font\twtysl = ptmro at 20pt % slanted
+%\font\twtybf = ptmb at 20pt % extended bold
+%\font\twtybfs = ptmbo at 20pt % extended bold slanted
+%\font\twtytt = pcrb at 20pt % typewriter
+%\font\twtytti = cmitt10 \@magscale4 % italic typewriter
+%\font\twtytts = pcrbo at 20pt % slanted typewriter
+%\font\twtysf = phvr at 20pt % sans serif
+%\font\twtysfi = cmssi10 \@magscale4 % italic sans serif
+%\font\twtysfb = phvb at 20pt % bold sans serif
+%\font\twtysc = ptmrc at 20pt % small caps
+ \font\twtyly = lasy10 \@magscale4 % LaTeX symbols
+%\font\twtylyb = lasyb10 \@magscale4 % bold LaTeX symbols
+%\font\twtyuit = ptmru at 20pt % unslanted italic
+
+% twenty-five point
+ \font\twfvrm = ptmr at 25pt % roman
+%\font\twfvmi = cmmi10 \@magscale5 % math italic
+%\font\twfvmib = cmmib10 \@magscale5 % bold math italic
+%\font\twfvsy = cmsy10 \@magscale5 % math symbols
+%\font\twfvsyb = cmbsy10 \@magscale5 % bold symbols
+%\font\twfvit = ptmri at 25pt % text italic
+%\font\twfvsl = ptmro at 25pt % slanted
+%\font\twfvbf = ptmb at 25pt % extended bold
+%\font\twfvbfs = ptmbo at 25pt % extended bold slanted
+%\font\twfvtt = pcrb at 25pt % typewriter
+%\font\twfvtti = cmitt10 \@magscale5 % italic typewriter
+%\font\twfvtts = pcrbo at 25pt % slanted typewriter
+%\font\twfvsf = phvr at 25pt % sans serif
+%\font\twfvsfi = cmssi10 \@magscale5 % italic sans serif
+%\font\twfvsfb = phvb at 25pt % bold sans serif
+%\font\twfvsc = ptmrc at 25pt % small caps
+%\font\twfvly = lasy10 \@magscale5 % LaTeX symbols
+%\font\twfvlyb = lasyb10 \@magscale5 % bold LaTeX symbols
+%\font\twfvuit = ptmru at 25pt % unslanted italic
+
+% Math extension
+ \font\tenex = cmex10
+
+% line & circle fonts
+\font\tenln = line10
+\font\tenlnw = linew10
+\font\tencirc = lcircle10 % 21 Nov 89 : circle10 -> lcircle10
+\font\tencircw = lcirclew10 % 21 Nov 89 : circlew10 -> lcirclew10
+
+% Change made 6 May 86: `\@warning' replaced by `\immediate\write 15'
+% since it's not defined when lfonts.tex is read by lplain.tex.
+%
+\ifnum\fontdimen8\tenln=\fontdimen8\tencirc \else
+ \immediate\write 15{Incompatible thin line and circle fonts}\fi
+\ifnum\fontdimen8\tenlnw=\fontdimen8\tencircw \else
+ \immediate\write 15{Incompatible thick line and circle fonts}\fi
+
+
+% protected font names
+\def\rm{\protect\prm}
+\def\it{\protect\pit}
+\def\bf{\protect\pbf}
+\def\sl{\protect\psl}
+\def\sf{\protect\psf}
+\def\sc{\protect\psc}
+\def\tt{\protect\ptt}
+
+%% FONT-CUSTOMIZING: The following definitions define certain commands
+%% to be abbreviations for certain font names. These commands are used
+%% below in \@getfont commands, which load the loaded-on-demand fonts.
+%% This is done only to save space. To change the fonts that are loaded
+%% on demand, one can either change these definitions or else change
+%% the arguments of the \@getfont commands.
+%%
+\def\@mbi{cmmib10}
+\def\@mbsy{cmbsy10}
+\def\@mcsc{ptmrc}
+\def\@mss{phvr}
+\def\@lasyb{lasyb10}
+
+% families
+
+\newfam\itfam % \it is family 4
+\newfam\slfam % \sl is family 5
+\newfam\bffam % \bf is family 6
+\newfam\ttfam % \tt is family 7
+\newfam\sffam % \sf is family 8
+\newfam\scfam % \sf is family 9
+\newfam\lyfam % \ly is family 10
+
+\def\cal{\fam\tw@}
+\def\mit{\fam\@ne}
+
+\def\@setstrut{\setbox\strutbox=\hbox{\vrule \@height .7\baselineskip
+ \@depth .3\baselineskip \@width\z@}}
+
+
+%% FONT-CUSTOMIZING: The commands \vpt, \vipt, ... , \xxvpt perform all
+%% the declarations needed to change the type size to 5pt, 6pt, ... ,
+%% 25pt. To see how this works, consider the definition of \viipt,
+%% which determines the fonts used in a 7pt type size. The command
+%% \def\pit{\fam\itfam\sevit}
+%% means that the \it command causes the preloaded \sevit font to
+%% be used--this font was defined earlier with a \font\sevit...
+%% command. The commands
+%% \textfont\itfam\sevit
+%% \scriptfont\itfam\sevit
+%% \scriptscriptfont\itfam\sevit
+%% tell TeX to use the \sevit font for all three math-mode sizes
+%% (text, script, and scriptscript) for the 7pt size.
+%% The fonts appearing in these commands must be preloaded.
+%%
+%% The command
+%% \def\pbf{\@getfont\pbf\bffam\@viipt{ambx7}}
+%% declares \bf to use a loaded-on-demand font--namely, the font
+%% ambx7.
+%%
+%% The command
+%% \def\ptt{\@subfont\tt\rm}
+%% declares that the \tt font is unavailable in the 7pt size, so
+%% the \rm font is used instead. (The substituted type style should
+%% correspond to a preloaded size.)
+
+\def\vpt{\textfont\z@\fivrm
+ \scriptfont\z@\fivrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\fivmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\fivsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\fivrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\fam\@ne\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@vpt{ptmb at 5pt}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\fivly}\textfont\lyfam\fivly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut\rm}
+
+\def\@vpt{}
+
+\def\vipt{\textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\sixrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@vipt{ptmb at 6pt}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+\@setstrut\rm}
+
+\def\@vipt{}
+
+\def\viipt{\textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\sevrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\sevit}\textfont\itfam\sevit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@subfont\sl\it}%
+\def\pbf{\@getfont\pbf\bffam\@viipt{ptmb at 7pt}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@viipt{}
+
+\def\viiipt{\textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\egtrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\egtit}\textfont\itfam\egtit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@viiipt{ptmro at 8pt}}%
+\def\pbf{\@getfont\pbf\bffam\@viiipt{ptmbo at 8pt}}%
+\def\ptt{\@getfont\ptt\ttfam\@viiipt{pcrb at 8pt}\@nohyphens\ptt\@viiipt}%
+\def\psf{\@getfont\psf\sffam\@viiipt{phvr at 8pt}}%
+\def\psc{\@getfont\psc\scfam\@viiipt{\@mcsc \@ptscale8}}%
+\def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@viiipt{}
+
+\def\ixpt{\textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\ninrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\ninit}\textfont\itfam\ninit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@ixpt{ptmro at 9pt}}%
+\def\pbf{\fam\bffam\ninbf}\textfont\bffam\ninbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\nintt}\textfont\ttfam\nintt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\@getfont\psf\sffam\@ixpt{phvr at 9pt}}%
+\def\psc{\@getfont\psc\scfam\@ixpt{\@mcsc \@ptscale9}}%
+\def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@ixpt{}
+
+\def\xpt{\textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+\def\prm{\fam\z@\tenrm}%
+\def\pit{\fam\itfam\tenit}\textfont\itfam\tenit \scriptfont\itfam\sevit
+ \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\tensl}\textfont\slfam\tensl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\tenbf}\textfont\bffam\tenbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\tenbf
+\def\ptt{\fam\ttfam\tentt}\textfont\ttfam\tentt
+ \scriptfont\ttfam\tentt \scriptscriptfont\ttfam\tentt
+\def\psf{\fam\sffam\tensf}\textfont\sffam\tensf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xpt{\@mcsc}}%
+\def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@xpt{}
+
+\def\xipt{\textfont\z@\elvrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\elvmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\elvsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\elvmi \textfont\tw@\elvsy
+ \textfont\lyfam\elvly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{elvmib}{\global\font\elvmib\@mbi\@halfmag
+ \global\font\elvsyb\@mbsy\@halfmag
+ \global\font\elvlyb\@lasyb\@halfmag\relax\@addfontinfo\@xipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\elvmib \textfont\tw@\elvsyb
+ \textfont\lyfam\elvlyb\@prtct\@boldtrue}}}{}\@xipt\boldmath}%
+\def\prm{\fam\z@\elvrm}%
+\def\pit{\fam\itfam\elvit}\textfont\itfam\elvit
+ \scriptfont\itfam\egtit \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\elvsl}\textfont\slfam\elvsl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\elvbf}\textfont\bffam\elvbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\elvtt}\textfont\ttfam\elvtt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\fam\sffam\elvsf}\textfont\sffam\elvsf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xipt{\@mcsc\@halfmag}}%
+\def\ly{\fam\lyfam\elvly}\textfont\lyfam\elvly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+\@setstrut \rm}
+
+\def\@xipt{}
+
+\def\xiipt{\textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+\def\prm{\fam\z@\twlrm}%
+\def\pit{\fam\itfam\twlit}\textfont\itfam\twlit \scriptfont\itfam\egtit
+ \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\twlsl}\textfont\slfam\twlsl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\twlbf}\textfont\bffam\twlbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\twltt}\textfont\ttfam\twltt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\fam\sffam\twlsf}\textfont\sffam\twlsf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xiipt{\@mcsc\@magscale1}}%
+\def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm}
+
+\def\@xiipt{}
+
+\def\xivpt{\textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+\textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+\textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib\@mbi\@magscale2\global\font\frtnsyb\@mbsy\@magscale2
+ \global\font\frtnlyb\@lasyb\@magscale2\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt\boldmath}%
+\def\prm{\fam\z@\frtnrm}%
+\def\pit{\@getfont\pit\itfam\@xivpt{ptmri at 14pt}}%
+\def\psl{\@getfont\psl\slfam\@xivpt{ptmro at 14pt}}%
+\def\pbf{\fam\bffam\frtnbf}\textfont\bffam\frtnbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\@getfont\ptt\ttfam\@xivpt{pcrb at 14pt}\@nohyphens\ptt\@xivpt}%
+\def\psf{\@getfont\psf\sffam\@xivpt{\@mss\@magscale2}}%
+\def\psc{\@getfont\psc\scfam\@xivpt{\@mcsc\@magscale2}}%
+\def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+\@setstrut \rm}
+
+\def\@xivpt{}
+
+\def\xviipt{\textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+\textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+\textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\svtnrm}%
+\def\pit{\@getfont\pit\itfam\@xviipt{ptmri at 17pt}}%
+\def\psl{\@getfont\psl\slfam\@xviipt{ptmro at 17pt}}%
+\def\pbf{\fam\bffam\svtnbf}\textfont\bffam\svtnbf
+ \scriptfont\bffam\twlbf \scriptscriptfont\bffam\tenbf
+\def\ptt{\@getfont\ptt\ttfam\@xviipt{pcrb at 17pt}\@nohyphens
+ \ptt\@xviipt}%
+\def\psf{\@getfont\psf\sffam\@xviipt{\@mss\@magscale3}}%
+\def\psc{\@getfont\psc\scfam\@xviipt{\@mcsc\@magscale3}}%
+\def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+\@setstrut \rm}
+
+\def\@xviipt{}
+
+\def\xxpt{\textfont\z@\twtyrm
+ \scriptfont\z@\frtnrm \scriptscriptfont\z@\twlrm
+\textfont\@ne\twtymi \scriptfont\@ne\frtnmi \scriptscriptfont\@ne\twlmi
+\textfont\tw@\twtysy \scriptfont\tw@\frtnsy \scriptscriptfont\tw@\twlsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\twtyrm}%
+\def\pit{\@getfont\pit\itfam\@xxpt{ptmri at 20pt}}%
+\def\psl{\@getfont\psl\slfam\@xxpt{ptmro at 20pt}}%
+\def\pbf{\@getfont\pbf\bffam\@xxpt{ptmb at 20pt}}%
+\def\ptt{\@getfont\ptt\ttfam\@xxpt{pcrb at 20pt}\@nohyphens\ptt\@xxpt}%
+\def\psf{\@getfont\psf\sffam\@xxpt{\@mss\@magscale4}}%
+\def\psc{\@getfont\psc\scfam\@xxpt{\@mcsc\@magscale4}}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\frtnly \scriptscriptfont\lyfam\twlly
+\@setstrut \rm}
+
+\def\@xxpt{}
+
+\def\xxvpt{\textfont\z@\twfvrm
+ \scriptfont\z@\twtyrm \scriptscriptfont\z@\svtnrm
+\textfont\@ne\twtymi \scriptfont\@ne\twtymi \scriptscriptfont\@ne\svtnmi
+\textfont\tw@\twtysy \scriptfont\tw@\twtysy \scriptscriptfont\tw@\svtnsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\twfvrm}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@xxvpt{ptmb at 25pt}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\twtyly \scriptscriptfont\lyfam\svtnly
+\@setstrut \rm}
+
+\def\@xxvpt{}
+
+% SPECIAL LaTeX character definitions
+
+% Definitions of math operators added by LaTeX
+\mathchardef\mho"0A30
+\mathchardef\Join"3A31
+\mathchardef\Box"0A32
+\mathchardef\Diamond"0A33
+\mathchardef\leadsto"3A3B
+\mathchardef\sqsubset"3A3C
+\mathchardef\sqsupset"3A3D
+\def\lhd{\mathbin{< \hbox to -.43em{}\hbox{\vrule
+ \@width .065em \@height .55em \@depth .05em}\hbox to .2em{}}}
+\def\rhd{\mathbin{\hbox to .3em{}\hbox{\vrule \@width .065em \@height
+ .55em \@depth .05em}\hbox to -.43em{}>}}
+\def\unlhd{\mathbin{\leq \hbox to -.43em{}\hbox
+ {\vrule \@width .065em \@height .63em \@depth -.08em}\hbox to .2em{}}}
+\def\unrhd{\mathbin{ \hbox to .3em{}\hbox
+ {\vrule \@width .065em \@height .63em \@depth -.08em}\hbox to -.43em{}\geq}}
+
+% Definition of \$ to work in italic font (since it produces a pound sterling
+% sign in the cmit font.
+
+\def\${\protect\pdollar}
+\def\pdollar{{\ifdim \fontdimen\@ne\font >\z@ \sl \fi\char`\$}}
+
+% Definition of pound sterling sign.
+% Modified 10 Apr 89 to work in math mode.
+
+\def\pounds{\protect\ppounds}
+\def\ppounds{\relax\ifmmode\mathchar"424\else{\it \char'44}\fi}
+
+
+% Definition of \copyright changed so it works in other type styles,
+% and so it is robust
+\def\copyright{\protect\pcopyright}
+\def\pcopyright{{\rm\ooalign{\hfil
+ \raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
diff --git a/Build/source/texk/dvipsk/contrib/psfntmac/ps_plain.tex b/Build/source/texk/dvipsk/contrib/psfntmac/ps_plain.tex
new file mode 100644
index 00000000000..702194102b7
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/psfntmac/ps_plain.tex
@@ -0,0 +1,1235 @@
+% This is the plain TeX format that's described in The TeXbook.
+% N.B.: A version number is defined at the very end of this file;
+% please change that number whenever the file is modified!
+% And don't modify the file under any circumstances.
+% Modified for Postcript built-in fonts, 29 Apr 87,
+% John Robinson (jr@bbn.com), version 1.6PS
+% Modifications extended to version 2.3 by Larry Denenberg (larry@bbn.com)
+% 5 Apr 88, and then to version 3.0 on 13 Feb 91.
+% PS font names changed to use Karl Berry's names like dvips does,
+% Stephen Gildea, Sep 92.
+
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+\catcode`\$=3 % dollar sign is math shift
+\catcode`\&=4 % ampersand is alignment tab
+\catcode`\#=6 % hash mark is macro parameter character
+\catcode`\^=7 \catcode`\^^K=7 % circumflex and uparrow are for superscripts
+\catcode`\_=8 \catcode`\^^A=8 % underline and downarrow are for subscripts
+\catcode`\^^I=10 % ascii tab is a blank space
+\chardef\active=13 \catcode`\~=\active % tilde is active
+\catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par"
+
+\message{Preloading the plain format: codes,}
+
+% We had to define the \catcodes right away, before the message line,
+% since \message uses the { and } characters.
+% When INITEX (the TeX initializer) starts up,
+% it has defined the following \catcode values:
+% \catcode`\^^@=9 % ascii null is ignored
+% \catcode`\^^M=5 % ascii return is end-line
+% \catcode`\\=0 % backslash is TeX escape character
+% \catcode`\%=14 % percent sign is comment character
+% \catcode`\ =10 % ascii space is blank space
+% \catcode`\^^?=15 % ascii delete is invalid
+% \catcode`\A=11 ... \catcode`\Z=11 % uppercase letters
+% \catcode`\a=11 ... \catcode`\z=11 % lowercase letters
+% all others are type 12 (other)
+
+% Here is a list of the characters that have been specially catcoded:
+\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+% (not counting ascii null, tab, linefeed, formfeed, return, delete)
+% Each symbol in the list is preceded by \do, which can be defined
+% if you want to do something to every item in the list.
+
+% We make @ signs act like letters, temporarily, to avoid conflict
+% between user names and internal control sequences of plain format.
+\catcode`@=11
+
+% INITEX sets up \mathcode x=x, for x=0..127, except that
+% \mathcode x=x+"7100, for x = `A to `Z and `a to `z;
+% \mathcode x=x+"7000, for x = `0 to `9.
+% The following changes define internal codes as recommended
+% in Appendix C of The TeXbook:
+\mathcode`\^^@="2201 % \cdot
+\mathcode`\^^A="3223 % \downarrow
+\mathcode`\^^B="010B % \alpha
+\mathcode`\^^C="010C % \beta
+\mathcode`\^^D="225E % \land
+\mathcode`\^^E="023A % \lnot
+\mathcode`\^^F="3232 % \in
+\mathcode`\^^G="0119 % \pi
+\mathcode`\^^H="0115 % \lambda
+\mathcode`\^^I="010D % \gamma
+\mathcode`\^^J="010E % \delta
+\mathcode`\^^K="3222 % \uparrow
+\mathcode`\^^L="2206 % \pm
+\mathcode`\^^M="2208 % \oplus
+\mathcode`\^^N="0231 % \infty
+\mathcode`\^^O="0140 % \partial
+\mathcode`\^^P="321A % \subset
+\mathcode`\^^Q="321B % \supset
+\mathcode`\^^R="225C % \cap
+\mathcode`\^^S="225B % \cup
+\mathcode`\^^T="0238 % \forall
+\mathcode`\^^U="0239 % \exists
+\mathcode`\^^V="220A % \otimes
+\mathcode`\^^W="3224 % \leftrightarrow
+\mathcode`\^^X="3220 % \leftarrow
+\mathcode`\^^Y="3221 % \rightarrow
+\mathcode`\^^Z="8000 % \ne
+\mathcode`\^^[="2205 % \diamond
+\mathcode`\^^\="3214 % \le
+\mathcode`\^^]="3215 % \ge
+\mathcode`\^^^="3211 % \equiv
+\mathcode`\^^_="225F % \lor
+\mathcode`\ ="8000 % \space
+\mathcode`\!="5021
+\mathcode`\'="8000 % ^\prime
+\mathcode`\(="4028
+\mathcode`\)="5029
+\mathcode`\*="2203 % \ast
+\mathcode`\+="202B
+\mathcode`\,="613B
+\mathcode`\-="2200
+\mathcode`\.="013A
+\mathcode`\/="013D
+\mathcode`\:="303A
+\mathcode`\;="603B
+\mathcode`\<="313C
+\mathcode`\=="303D
+\mathcode`\>="313E
+\mathcode`\?="503F
+\mathcode`\[="405B
+\mathcode`\\="026E % \backslash
+\mathcode`\]="505D
+\mathcode`\_="8000 % \_
+\mathcode`\{="4266
+\mathcode`\|="026A
+\mathcode`\}="5267
+\mathcode`\^^?="1273 % \smallint
+
+% INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x,
+% and \lccode`x=`x, \lccode`X=`x; all other values are zero.
+% No changes to those tables are needed in plain TeX format.
+
+% INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999
+% for uppercase letters. The following changes are needed:
+\sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
+% The \nonfrenchspacing macro will make further changes to \sfcode values.
+
+% Finally, INITEX sets all \delcode values to -1, except \delcode`.=0
+\delcode`\(="028300
+\delcode`\)="029301
+\delcode`\[="05B302
+\delcode`\]="05D303
+\delcode`\<="26830A
+\delcode`\>="26930B
+\delcode`\/="02F30E
+\delcode`\|="26A30C
+\delcode`\\="26E30F
+% N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!
+
+% To make the plain macros more efficient in time and space,
+% several constant values are declared here as control sequences.
+% If they were changed, anything could happen; so they are private symbols.
+\chardef\@ne=1
+\chardef\tw@=2
+\chardef\thr@@=3
+\chardef\sixt@@n=16
+\chardef\@cclv=255
+\mathchardef\@cclvi=256
+\mathchardef\@m=1000
+\mathchardef\@M=10000
+\mathchardef\@MM=20000
+
+% Allocation of registers
+
+% Here are macros for the automatic allocation of \count, \box, \dimen,
+% \skip, \muskip, and \toks registers, as well as \read and \write
+% stream numbers, \fam codes, \language codes, and \insert numbers.
+
+\message{registers,}
+
+% When a register is used only temporarily, it need not be allocated;
+% grouping can be used, making the value previously in the register return
+% after the close of the group. The main use of these macros is for
+% registers that are defined by one macro and used by others, possibly at
+% different nesting levels. All such registers should be defined through
+% these macros; otherwise conflicts may occur, especially when two or more
+% more macro packages are being used at once.
+
+% The following counters are reserved:
+% 0 to 9 page numbering
+% 10 count allocation
+% 11 dimen allocation
+% 12 skip allocation
+% 13 muskip allocation
+% 14 box allocation
+% 15 toks allocation
+% 16 read file allocation
+% 17 write file allocation
+% 18 math family allocation
+% 19 language allocation
+% 20 insert allocation
+% 21 the most recently allocated number
+% 22 constant -1
+% New counters are allocated starting with 23, 24, etc. Other registers are
+% allocated starting with 10. This leaves 0 through 9 for the user to play
+% with safely, except that counts 0 to 9 are considered to be the page and
+% subpage numbers (since they are displayed during output). In this scheme,
+% \count 10 always contains the number of the highest-numbered counter that
+% has been allocated, \count 14 the highest-numbered box, etc.
+% Inserts are given numbers 254, 253, etc., since they require a \count,
+% \dimen, \skip, and \box all with the same number; \count 19 contains the
+% lowest-numbered insert that has been allocated. Of course, \box255 is
+% reserved for \output; \count255, \dimen255, and \skip255 can be used freely.
+
+% It is recommended that macro designers always use
+% \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and
+% always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255.
+% This will prevent ``save stack buildup'' that might otherwise occur.
+
+\count10=22 % allocates \count registers 23, 24, ...
+\count11=9 % allocates \dimen registers 10, 11, ...
+\count12=9 % allocates \skip registers 10, 11, ...
+\count13=9 % allocates \muskip registers 10, 11, ...
+\count14=9 % allocates \box registers 10, 11, ...
+\count15=9 % allocates \toks registers 10, 11, ...
+\count16=-1 % allocates input streams 0, 1, ...
+\count17=-1 % allocates output streams 0, 1, ...
+\count18=3 % allocates math families 4, 5, ...
+\count19=0 % allocates \language codes 1, 2, ...
+\count20=255 % allocates insertions 254, 253, ...
+\countdef\insc@unt=20 % the insertion counter
+\countdef\allocationnumber=21 % the most recent allocation
+\countdef\m@ne=22 \m@ne=-1 % a handy constant
+\def\wlog{\immediate\write\m@ne} % write on log file (only)
+
+% Here are abbreviations for the names of scratch registers
+% that don't need to be allocated.
+
+\countdef\count@=255
+\dimendef\dimen@=0
+\dimendef\dimen@i=1 % global only
+\dimendef\dimen@ii=2
+\skipdef\skip@=0
+\toksdef\toks@=0
+
+% Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo
+% and \foo will be defined (with \countdef) to be the next counter.
+% To find out which counter \foo is, you can look at \allocationnumber.
+% Since there's no \boxdef command, \chardef is used to define a \newbox,
+% \newinsert, \newfam, and so on.
+
+\outer\def\newcount{\alloc@0\count\countdef\insc@unt}
+\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\outer\def\newskip{\alloc@2\skip\skipdef\insc@unt}
+\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
+\outer\def\newbox{\alloc@4\box\chardef\insc@unt}
+\let\newtoks=\relax % we do this to allow plain.tex to be read in twice
+\outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
+\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
+\outer\def\newread{\alloc@6\read\chardef\sixt@@n}
+\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+\outer\def\newfam{\alloc@8\fam\chardef\sixt@@n}
+\outer\def\newlanguage{\alloc@9\language\chardef\@cclvi}
+\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
+ \ch@ck#1#4#2% make sure there's still room
+ \allocationnumber=\count1#1%
+ \global#3#5=\allocationnumber
+ \wlog{\string#5=\string#2\the\allocationnumber}}
+\outer\def\newinsert#1{\global\advance\insc@unt by\m@ne
+ \ch@ck0\insc@unt\count
+ \ch@ck1\insc@unt\dimen
+ \ch@ck2\insc@unt\skip
+ \ch@ck4\insc@unt\box
+ \allocationnumber=\insc@unt
+ \global\chardef#1=\allocationnumber
+ \wlog{\string#1=\string\insert\the\allocationnumber}}
+\def\ch@ck#1#2#3{\ifnum\count1#1<#2%
+ \else\errmessage{No room for a new #3}\fi}
+
+% Here are some examples of allocation.
+\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
+\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
+\newskip\centering \centering=0pt plus 1000pt minus 1000pt
+\newdimen\p@ \p@=1pt % this saves macro space and time
+\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
+\newskip\z@skip \z@skip=0pt plus0pt minus0pt
+\newbox\voidb@x % permanently void box register
+
+% And here's a different sort of allocation:
+% For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo.
+\outer\def\newif#1{\count@\escapechar \escapechar\m@ne
+ \expandafter\expandafter\expandafter
+ \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}%
+ \expandafter\expandafter\expandafter
+ \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}%
+ \@if#1{false}\escapechar\count@} % the condition starts out false
+\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
+{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required
+
+% Assign initial values to TeX's parameters
+
+\message{parameters,}
+
+% All of TeX's numeric parameters are listed here,
+% but the code is commented out if no special value needs to be set.
+% INITEX makes all parameters zero except where noted.
+
+\pretolerance=100
+\tolerance=200 % INITEX sets this to 10000
+\hbadness=1000
+\vbadness=1000
+\linepenalty=10
+\hyphenpenalty=50
+\exhyphenpenalty=50
+\binoppenalty=700
+\relpenalty=500
+\clubpenalty=150
+\widowpenalty=150
+\displaywidowpenalty=50
+\brokenpenalty=100
+\predisplaypenalty=10000
+% \postdisplaypenalty=0
+% \interlinepenalty=0
+% \floatingpenalty=0, set during \insert
+% \outputpenalty=0, set before TeX enters \output
+\doublehyphendemerits=10000
+\finalhyphendemerits=5000
+\adjdemerits=10000
+% \looseness=0, cleared by TeX after each paragraph
+% \pausing=0
+% \holdinginserts=0
+% \tracingonline=0
+% \tracingmacros=0
+% \tracingstats=0
+% \tracingparagraphs=0
+% \tracingpages=0
+% \tracingoutput=0
+\tracinglostchars=1
+% \tracingcommands=0
+% \tracingrestores=0
+% \language=0
+\uchyph=1
+% \lefthyphenmin=2 \righthyphenmin=3 set below
+% \globaldefs=0
+% \maxdeadcycles=25 % INITEX does this
+% \hangafter=1 % INITEX does this, also TeX after each paragraph
+% \fam=0
+% \mag=1000 % INITEX does this
+% \escapechar=`\\ % INITEX does this
+\defaulthyphenchar=`\-
+\defaultskewchar=-1
+% \endlinechar=`\^^M % INITEX does this
+\newlinechar=-1
+\delimiterfactor=901
+% \time=now % TeX does this at beginning of job
+% \day=now % TeX does this at beginning of job
+% \month=now % TeX does this at beginning of job
+% \year=now % TeX does this at beginning of job
+\showboxbreadth=5
+\showboxdepth=3
+\errorcontextlines=5
+
+\hfuzz=0.1pt
+\vfuzz=0.1pt
+\overfullrule=5pt
+\hsize=6.5in
+\vsize=8.9in
+\maxdepth=4pt
+\splitmaxdepth=\maxdimen
+\boxmaxdepth=\maxdimen
+% \lineskiplimit=0pt, changed by \normalbaselines
+\delimitershortfall=5pt
+\nulldelimiterspace=1.2pt
+\scriptspace=0.5pt
+% \mathsurround=0pt
+% \predisplaysize=0pt, set before TeX enters $$
+% \displaywidth=0pt, set before TeX enters $$
+% \displayindent=0pt, set before TeX enters $$
+\parindent=20pt
+% \hangindent=0pt, zeroed by TeX after each paragraph
+% \hoffset=0pt
+% \voffset=0pt
+
+% \baselineskip=0pt, changed by \normalbaselines
+% \lineskip=0pt, changed by \normalbaselines
+\parskip=0pt plus 1pt
+\abovedisplayskip=12pt plus 3pt minus 9pt
+\abovedisplayshortskip=0pt plus 3pt
+\belowdisplayskip=12pt plus 3pt minus 9pt
+\belowdisplayshortskip=7pt plus 3pt minus 4pt
+% \leftskip=0pt
+% \rightskip=0pt
+\topskip=10pt
+\splittopskip=10pt
+% \tabskip=0pt
+% \spaceskip=0pt
+% \xspaceskip=0pt
+\parfillskip=0pt plus 1fil
+
+\thinmuskip=3mu
+\medmuskip=4mu plus 2mu minus 4mu
+\thickmuskip=5mu plus 5mu
+
+% We also define special registers that function like parameters:
+\newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
+\newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt
+\newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt
+\newskip\normalbaselineskip \normalbaselineskip=12pt
+\newskip\normallineskip \normallineskip=1pt
+\newdimen\normallineskiplimit \normallineskiplimit=0pt
+\newdimen\jot \jot=3pt
+\newcount\interdisplaylinepenalty \interdisplaylinepenalty=100
+\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
+
+% Definitions for preloaded fonts
+
+\def\magstephalf{1095 }
+\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}
+
+% Fonts assigned to \preloaded are not part of "plain TeX",
+% but they are preloaded so that other format packages can use them.
+% For example, if another set of macros says "\font\ninerm=cmr9",
+% TeX will not have to reload the font metric information for cmr9.
+
+\message{fonts,}
+
+\font\tenrm=ptmr % roman text
+\font\preloaded=ptmr at 9pt
+\font\preloaded=ptmr at 8pt
+\font\sevenrm=ptmr at 7pt
+\font\preloaded=ptmr at 6pt
+\font\fiverm=ptmr at 5pt
+
+\font\teni=cmmi10 % math italic
+\font\preloaded=cmmi9
+\font\preloaded=cmmi8
+\font\seveni=cmmi7
+\font\preloaded=cmmi6
+\font\fivei=cmmi5
+
+\font\tensy=cmsy10 % math symbols
+\font\preloaded=cmsy9
+\font\preloaded=cmsy8
+\font\sevensy=cmsy7
+\font\preloaded=cmsy6
+\font\fivesy=cmsy5
+
+\font\tenex=cmex10 % math extension
+
+\font\preloaded=phvr % sans serif
+\font\preloaded=phvr at 8pt
+
+\font\preloaded=phvro % sans serif italic
+\font\preloaded=phvro at 8pt
+
+\font\tenbf=ptmb % boldface extended
+\font\preloaded=ptmb at 9pt
+\font\preloaded=ptmb at 8pt
+\font\sevenbf=ptmb at 7pt
+\font\preloaded=ptmb at 6pt
+\font\fivebf=ptmb at 5pt
+
+\font\tentt=pcrb % typewriter
+\font\preloaded=pcrb at 9pt
+\font\preloaded=pcrb at 8pt
+
+\font\preloaded=pcrbo % slanted typewriter
+
+\font\tensl=ptmro % slanted roman
+\font\preloaded=ptmro at 9pt
+\font\preloaded=ptmro at 8pt
+
+\font\tenit=ptmri % text italic
+\font\preloaded=ptmri at 9pt
+\font\preloaded=ptmri at 8pt
+\font\preloaded=ptmri at 7pt
+
+\message{more fonts,}
+\font\preloaded=cmu10 % unslanted text italic
+
+\font\preloaded=cmmib10 % bold math italic
+\font\preloaded=cmbsy10 % bold math symbols
+
+\font\preloaded=ptmrc % caps and small caps
+
+\font\preloaded=phvb % sans serif bold extended
+
+\font\preloaded=cmdunh10 % Dunhill style
+
+\font\preloaded=ptmr at 14.5pt % for titles
+\font\preloaded=pcrb at 14pt
+\font\preloaded=phvb at 14pt
+
+\font\preloaded=manfnt % METAFONT logo and dragon curve and special symbols
+
+% Additional \preloaded fonts can be specified here.
+% (And those that were \preloaded above can be eliminated.)
+
+\let\preloaded=\undefined % preloaded fonts must be declared anew later.
+
+\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177
+\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60
+
+\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+\def\rm{\fam\z@\tenrm}
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\def\mit{\fam\@ne} \def\oldstyle{\fam\@ne\teni}
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\def\cal{\fam\tw@}
+\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+\newfam\itfam \def\it{\fam\itfam\tenit} % \it is family 4
+\textfont\itfam=\tenit
+\newfam\slfam \def\sl{\fam\slfam\tensl} % \sl is family 5
+\textfont\slfam=\tensl
+\newfam\bffam \def\bf{\fam\bffam\tenbf} % \bf is family 6
+\textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+\newfam\ttfam \def\tt{\fam\ttfam\tentt} % \tt is family 7
+\textfont\ttfam=\tentt
+
+% Macros for setting ordinary text
+\message{macros,}
+
+\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
+ \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
+\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
+
+\def\normalbaselines{\lineskip\normallineskip
+ \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
+
+\def\^^M{\ } % control <return> = control <space>
+\def\^^I{\ } % same for <tab>
+
+\def\lq{`} \def\rq{'}
+\def\lbrack{[} \def\rbrack{]}
+
+\let\endgraf=\par \let\endline=\cr
+
+\def\space{ }
+\def\empty{}
+\def\null{\hbox{}}
+
+\let\bgroup={ \let\egroup=}
+
+% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
+% since this allows, for example, `\let\par=\cr \obeylines \halign{...'
+{\catcode`\^^M=\active % these lines must end with %
+ \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
+ \global\let^^M\par} % this is in case ^^M appears in a \write
+\def\obeyspaces{\catcode`\ \active}
+{\obeyspaces\global\let =\space}
+
+\def\loop#1\repeat{\def\body{#1}\iterate}
+\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
+\let\repeat=\fi % this makes \loop...\if...\repeat skippable
+
+\def\thinspace{\kern .16667em }
+\def\negthinspace{\kern-.16667em }
+\def\enspace{\kern.5em }
+
+\def\enskip{\hskip.5em\relax}
+\def\quad{\hskip1em\relax}
+\def\qquad{\hskip2em\relax}
+
+\def\smallskip{\vskip\smallskipamount}
+\def\medskip{\vskip\medskipamount}
+\def\bigskip{\vskip\bigskipamount}
+
+\def\nointerlineskip{\prevdepth-1000\p@}
+\def\offinterlineskip{\baselineskip-1000\p@
+ \lineskip\z@ \lineskiplimit\maxdimen}
+
+\def\topglue{\nointerlineskip\vglue-\topskip\vglue} % for top of page
+\def\vglue{\afterassignment\vgl@\skip@=}
+\def\vgl@{\par \dimen@\prevdepth \hrule height\z@
+ \nobreak\vskip\skip@ \prevdepth\dimen@}
+\def\hglue{\afterassignment\hgl@\skip@=}
+\def\hgl@{\leavevmode \count@\spacefactor \vrule width\z@
+ \nobreak\hskip\skip@ \spacefactor\count@}
+
+\def~{\penalty\@M \ } % tie
+\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
+
+\def\break{\penalty-\@M}
+\def\nobreak{\penalty \@M}
+\def\allowbreak{\penalty \z@}
+
+\def\filbreak{\par\vfil\penalty-200\vfilneg}
+\def\goodbreak{\par\penalty-500 }
+\def\eject{\par\break}
+\def\supereject{\par\penalty-\@MM}
+
+\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
+\def\smallbreak{\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi}
+\def\medbreak{\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi}
+\def\bigbreak{\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi}
+
+\def\line{\hbox to\hsize}
+\def\leftline#1{\line{#1\hss}}
+\def\rightline#1{\line{\hss#1}}
+\def\centerline#1{\line{\hss#1\hss}}
+
+\def\rlap#1{\hbox to\z@{#1\hss}}
+\def\llap#1{\hbox to\z@{\hss#1}}
+
+\def\m@th{\mathsurround=\z@}
+\def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
+ \m@th \underline{\box\z@}$}
+
+\newbox\strutbox
+\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
+\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
+
+\def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out
+\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
+\newcount\mscount
+\def\multispan#1{\omit \mscount#1
+ \loop\ifnum\mscount>\@ne \sp@n\repeat}
+\def\sp@n{\span\omit\advance\mscount\m@ne}
+
+\newif\ifus@ \newif\if@cr
+\newbox\tabs \newbox\tabsyet \newbox\tabsdone
+
+\def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}
+\def\settabs{\setbox\tabs\null \futurelet\next\sett@b}
+\let\+=\relax % in case this file is being read in twice
+\def\sett@b{\ifx\next\+\let\next\relax
+ \def\next{\afterassignment\s@tt@b\let\next}%
+ \else\let\next\s@tcols\fi\next}
+\def\s@tt@b{\let\next\relax\us@false\m@ketabbox}
+\def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+
+\outer\def\+{\tabalign}
+\def\s@tcols#1\columns{\count@#1\dimen@\hsize
+ \loop\ifnum\count@>\z@ \@nother \repeat}
+\def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
+ \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
+ \advance\dimen@-\dimen@ii \advance\count@\m@ne}
+
+\def\m@ketabbox{\begingroup
+ \global\setbox\tabsyet\copy\tabs
+ \global\setbox\tabsdone\null
+ \def\cr{\@crtrue\crcr\egroup\egroup
+ \ifus@\unvbox\z@\lastbox\fi\endgroup
+ \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%
+ \setbox\z@\vbox\bgroup\@crfalse
+ \ialign\bgroup&\t@bbox##\t@bb@x\crcr}
+
+\def\t@bbox{\setbox\z@\hbox\bgroup}
+\def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
+ \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
+ \global\setbox\@ne\lastbox}% now \box\@ne holds its size
+ \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
+ \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
+ \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
+ \box\z@}
+
+\def\hang{\hangindent\parindent}
+\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
+\def\item{\par\hang\textindent}
+\def\itemitem{\par\indent \hangindent2\parindent \textindent}
+\def\narrower{\advance\leftskip\parindent
+ \advance\rightskip\parindent}
+
+\outer\def\beginsection#1\par{\vskip\z@ plus.3\vsize\penalty-250
+ \vskip\z@ plus-.3\vsize\bigskip\vskip\parskip
+ \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent}
+\outer\def\proclaim #1. #2\par{\medbreak
+ \noindent{\bf#1.\enspace}{\sl#2\par}%
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+\def\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}
+\def\ttraggedright{\tt\rightskip\z@ plus2em\relax} % for use with \tt only
+
+\chardef\%=`\%
+\chardef\&=`\&
+\chardef\#=`\#
+\chardef\$=`\$
+\chardef\ss="19
+\chardef\ae="1A
+\chardef\oe="1B
+\chardef\o="1C
+\chardef\AE="1D
+\chardef\OE="1E
+\chardef\O="1F
+\chardef\i="10 \chardef\j="11 % dotless letters
+\def\aa{\accent23a}
+\def\l{\char32l}
+\def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}
+
+\def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
+\def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
+ \rlap{\raise.67\dimen@\hbox{\char'27}}A}
+
+\def\mathhexbox#1#2#3{\leavevmode
+ \hbox{$\m@th \mathchar"#1#2#3$}}
+\def\dag{\mathhexbox279}
+\def\ddag{\mathhexbox27A}
+\def\S{\mathhexbox278}
+\def\P{\mathhexbox27B}
+
+\def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
+ \ialign{##\crcr#1\crcr}}} % put characters over each other
+\def\ooalign{\lineskiplimit-\maxdimen \oalign}
+\def\d#1{\oalign{#1\crcr\hidewidth.\hidewidth}}
+\def\b#1{\oalign{#1\crcr\hidewidth
+ \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
+\def\c#1{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
+ \else{\ooalign{\hidewidth\char24\hidewidth\crcr\unhbox\z@}}\fi}
+\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
+
+\def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi}
+\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
+
+\def\`#1{{\accent18 #1}}
+\def\'#1{{\accent19 #1}}
+\def\v#1{{\accent20 #1}} \let\^^_=\v
+\def\u#1{{\accent21 #1}} \let\^^S=\u
+\def\=#1{{\accent22 #1}}
+\def\^#1{{\accent94 #1}} \let\^^D=\^
+\def\.#1{{\accent95 #1}}
+\def\H#1{{\accent"7D #1}}
+\def\~#1{{\accent"7E #1}}
+\def\"#1{{\accent"7F #1}}
+\def\t#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}}
+
+\def\hrulefill{\leaders\hrule\hfill}
+\def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill}
+\def\rightarrowfill{$\m@th\mathord-\mkern-6mu%
+ \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
+ \mkern-6mu\mathord\rightarrow$}
+\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-6mu%
+ \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
+ \mkern-6mu\mathord-$}
+\mathchardef\braceld="37A \mathchardef\bracerd="37B
+\mathchardef\bracelu="37C \mathchardef\braceru="37D
+\def\downbracefill{$\m@th\braceld\leaders\vrule\hfill\braceru
+ \bracelu\leaders\vrule\hfill\bracerd$}
+\def\upbracefill{$\m@th\bracelu\leaders\vrule\hfill\bracerd
+ \braceld\leaders\vrule\hfill\braceru$}
+
+\outer\def\bye{\par\vfill\supereject\end}
+
+% Macros for math setting
+\message{math definitions,}
+
+\let\sp=^ \let\sb=_
+\def\,{\mskip\thinmuskip}
+\def\>{\mskip\medmuskip}
+\def\;{\mskip\thickmuskip}
+\def\!{\mskip-\thinmuskip}
+\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}
+{\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
+\def\prim@s{\prime\futurelet\next\pr@m@s}
+\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t
+ \else\let\nxt\egroup\fi\fi \nxt}
+\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
+{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math
+
+{\catcode`\_=\active \global\let_=\_} % _ in math is either subscript or \_
+
+\mathchardef\alpha="010B
+\mathchardef\beta="010C
+\mathchardef\gamma="010D
+\mathchardef\delta="010E
+\mathchardef\epsilon="010F
+\mathchardef\zeta="0110
+\mathchardef\eta="0111
+\mathchardef\theta="0112
+\mathchardef\iota="0113
+\mathchardef\kappa="0114
+\mathchardef\lambda="0115
+\mathchardef\mu="0116
+\mathchardef\nu="0117
+\mathchardef\xi="0118
+\mathchardef\pi="0119
+\mathchardef\rho="011A
+\mathchardef\sigma="011B
+\mathchardef\tau="011C
+\mathchardef\upsilon="011D
+\mathchardef\phi="011E
+\mathchardef\chi="011F
+\mathchardef\psi="0120
+\mathchardef\omega="0121
+\mathchardef\varepsilon="0122
+\mathchardef\vartheta="0123
+\mathchardef\varpi="0124
+\mathchardef\varrho="0125
+\mathchardef\varsigma="0126
+\mathchardef\varphi="0127
+\mathchardef\Gamma="7000
+\mathchardef\Delta="7001
+\mathchardef\Theta="7002
+\mathchardef\Lambda="7003
+\mathchardef\Xi="7004
+\mathchardef\Pi="7005
+\mathchardef\Sigma="7006
+\mathchardef\Upsilon="7007
+\mathchardef\Phi="7008
+\mathchardef\Psi="7009
+\mathchardef\Omega="700A
+
+\mathchardef\aleph="0240
+\def\hbar{{\mathchar'26\mkern-9muh}}
+\mathchardef\imath="017B
+\mathchardef\jmath="017C
+\mathchardef\ell="0160
+\mathchardef\wp="017D
+\mathchardef\Re="023C
+\mathchardef\Im="023D
+\mathchardef\partial="0140
+\mathchardef\infty="0231
+\mathchardef\prime="0230
+\mathchardef\emptyset="023B
+\mathchardef\nabla="0272
+\def\surd{{\mathchar"1270}}
+\mathchardef\top="023E
+\mathchardef\bot="023F
+\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
+ \not\mathrel{\mkern14mu}\crcr
+ \noalign{\nointerlineskip}
+ \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}
+\mathchardef\triangle="0234
+\mathchardef\forall="0238
+\mathchardef\exists="0239
+\mathchardef\neg="023A \let\lnot=\neg
+\mathchardef\flat="015B
+\mathchardef\natural="015C
+\mathchardef\sharp="015D
+\mathchardef\clubsuit="027C
+\mathchardef\diamondsuit="027D
+\mathchardef\heartsuit="027E
+\mathchardef\spadesuit="027F
+
+\mathchardef\coprod="1360
+\mathchardef\bigvee="1357
+\mathchardef\bigwedge="1356
+\mathchardef\biguplus="1355
+\mathchardef\bigcap="1354
+\mathchardef\bigcup="1353
+\mathchardef\intop="1352 \def\int{\intop\nolimits}
+\mathchardef\prod="1351
+\mathchardef\sum="1350
+\mathchardef\bigotimes="134E
+\mathchardef\bigoplus="134C
+\mathchardef\bigodot="134A
+\mathchardef\ointop="1348 \def\oint{\ointop\nolimits}
+\mathchardef\bigsqcup="1346
+\mathchardef\smallint="1273
+
+\mathchardef\triangleleft="212F
+\mathchardef\triangleright="212E
+\mathchardef\bigtriangleup="2234
+\mathchardef\bigtriangledown="2235
+\mathchardef\wedge="225E \let\land=\wedge
+\mathchardef\vee="225F \let\lor=\vee
+\mathchardef\cap="225C
+\mathchardef\cup="225B
+\mathchardef\ddagger="227A
+\mathchardef\dagger="2279
+\mathchardef\sqcap="2275
+\mathchardef\sqcup="2274
+\mathchardef\uplus="225D
+\mathchardef\amalg="2271
+\mathchardef\diamond="2205
+\mathchardef\bullet="220F
+\mathchardef\wr="226F
+\mathchardef\div="2204
+\mathchardef\odot="220C
+\mathchardef\oslash="220B
+\mathchardef\otimes="220A
+\mathchardef\ominus="2209
+\mathchardef\oplus="2208
+\mathchardef\mp="2207
+\mathchardef\pm="2206
+\mathchardef\circ="220E
+\mathchardef\bigcirc="220D
+\mathchardef\setminus="226E % for set difference A\setminus B
+\mathchardef\cdot="2201
+\mathchardef\ast="2203
+\mathchardef\times="2202
+\mathchardef\star="213F
+
+\mathchardef\propto="322F
+\mathchardef\sqsubseteq="3276
+\mathchardef\sqsupseteq="3277
+\mathchardef\parallel="326B
+\mathchardef\mid="326A
+\mathchardef\dashv="3261
+\mathchardef\vdash="3260
+\mathchardef\nearrow="3225
+\mathchardef\searrow="3226
+\mathchardef\nwarrow="322D
+\mathchardef\swarrow="322E
+\mathchardef\Leftrightarrow="322C
+\mathchardef\Leftarrow="3228
+\mathchardef\Rightarrow="3229
+\def\neq{\not=} \let\ne=\neq
+\mathchardef\leq="3214 \let\le=\leq
+\mathchardef\geq="3215 \let\ge=\geq
+\mathchardef\succ="321F
+\mathchardef\prec="321E
+\mathchardef\approx="3219
+\mathchardef\succeq="3217
+\mathchardef\preceq="3216
+\mathchardef\supset="321B
+\mathchardef\subset="321A
+\mathchardef\supseteq="3213
+\mathchardef\subseteq="3212
+\mathchardef\in="3232
+\mathchardef\ni="3233 \let\owns=\ni
+\mathchardef\gg="321D
+\mathchardef\ll="321C
+\mathchardef\not="3236
+\mathchardef\leftrightarrow="3224
+\mathchardef\leftarrow="3220 \let\gets=\leftarrow
+\mathchardef\rightarrow="3221 \let\to=\rightarrow
+\mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}
+\mathchardef\sim="3218
+\mathchardef\simeq="3227
+\mathchardef\perp="323F
+\mathchardef\equiv="3211
+\mathchardef\asymp="3210
+\mathchardef\smile="315E
+\mathchardef\frown="315F
+\mathchardef\leftharpoonup="3128
+\mathchardef\leftharpoondown="3129
+\mathchardef\rightharpoonup="312A
+\mathchardef\rightharpoondown="312B
+
+\def\joinrel{\mathrel{\mkern-3mu}}
+\def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as +
+\def\Relbar{\mathrel=}
+\mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow}
+\mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook}
+\def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
+\def\models{\mathrel|\joinrel=}
+\def\Longrightarrow{\Relbar\joinrel\Rightarrow}
+\def\longrightarrow{\relbar\joinrel\rightarrow}
+\def\longleftarrow{\leftarrow\joinrel\relbar}
+\def\Longleftarrow{\Leftarrow\joinrel\Relbar}
+\def\longmapsto{\mapstochar\longrightarrow}
+\def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
+\def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
+\def\iff{\;\Longleftrightarrow\;}
+
+\mathchardef\ldotp="613A % ldot as a punctuation mark
+\mathchardef\cdotp="6201 % cdot as a punctuation mark
+\mathchardef\colon="603A % colon as a punctuation mark
+\def\ldots{\mathinner{\ldotp\ldotp\ldotp}}
+\def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
+\def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
+ \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
+\def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu
+ \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}
+
+\def\acute{\mathaccent"7013 }
+\def\grave{\mathaccent"7012 }
+\def\ddot{\mathaccent"707F }
+\def\tilde{\mathaccent"707E }
+\def\bar{\mathaccent"7016 }
+\def\breve{\mathaccent"7015 }
+\def\check{\mathaccent"7014 }
+\def\hat{\mathaccent"705E }
+\def\vec{\mathaccent"017E }
+\def\dot{\mathaccent"705F }
+\def\widetilde{\mathaccent"0365 }
+\def\widehat{\mathaccent"0362 }
+\def\overrightarrow#1{\vbox{\ialign{##\crcr
+ \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}
+\def\overleftarrow#1{\vbox{\ialign{##\crcr
+ \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}
+\def\overbrace#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3\p@}
+ \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
+\def\underbrace#1{\mathop{\vtop{\ialign{##\crcr
+ $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip}
+ \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
+\def\skew#1#2#3{{#2{#3\mkern#1mu}\mkern-#1mu}{}}
+
+\def\lmoustache{\delimiter"4000340 } % top from (, bottom from )
+\def\rmoustache{\delimiter"5000341 } % top from ), bottom from (
+\def\lgroup{\delimiter"400033A } % extensible ( with sharper tips
+\def\rgroup{\delimiter"500033B } % extensible ) with sharper tips
+\def\arrowvert{\delimiter"33C000 } % arrow without arrowheads
+\def\Arrowvert{\delimiter"33D000 } % double arrow without arrowheads
+\def\bracevert{\delimiter"33E000 } % the vertical bar that extends braces
+\def\Vert{\delimiter"26B30D } \let\|=\Vert
+\def\vert{\delimiter"26A30C }
+\def\uparrow{\delimiter"3222378 }
+\def\downarrow{\delimiter"3223379 }
+\def\updownarrow{\delimiter"326C33F }
+\def\Uparrow{\delimiter"322A37E }
+\def\Downarrow{\delimiter"322B37F }
+\def\Updownarrow{\delimiter"326D377 }
+\def\backslash{\delimiter"26E30F } % for double coset G\backslash H
+\def\rangle{\delimiter"526930B }
+\def\langle{\delimiter"426830A }
+\def\rbrace{\delimiter"5267309 } \let\}=\rbrace
+\def\lbrace{\delimiter"4266308 } \let\{=\lbrace
+\def\rceil{\delimiter"5265307 }
+\def\lceil{\delimiter"4264306 }
+\def\rfloor{\delimiter"5263305 }
+\def\lfloor{\delimiter"4262304 }
+
+\def\bigl{\mathopen\big}
+\def\bigm{\mathrel\big}
+\def\bigr{\mathclose\big}
+\def\Bigl{\mathopen\Big}
+\def\Bigm{\mathrel\Big}
+\def\Bigr{\mathclose\Big}
+\def\biggl{\mathopen\bigg}
+\def\biggm{\mathrel\bigg}
+\def\biggr{\mathclose\bigg}
+\def\Biggl{\mathopen\Bigg}
+\def\Biggm{\mathrel\Bigg}
+\def\Biggr{\mathclose\Bigg}
+\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
+\def\n@space{\nulldelimiterspace\z@ \m@th}
+
+\def\choose{\atopwithdelims()}
+\def\brack{\atopwithdelims[]}
+\def\brace{\atopwithdelims\{\}}
+
+\def\sqrt{\radical"270370 }
+
+\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}%
+ {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
+\newbox\rootbox
+\def\root#1\of{\setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}
+ \mathpalette\r@@t}
+\def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}
+ \dimen@\ht\z@ \advance\dimen@-\dp\z@
+ \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu \box\z@}
+\newif\ifv@ \newif\ifh@
+\def\vphantom{\v@true\h@false\ph@nt}
+\def\hphantom{\v@false\h@true\ph@nt}
+\def\phantom{\v@true\h@true\ph@nt}
+\def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}%
+ \else\let\next\makeph@nt\fi\next}
+\def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt}
+\def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
+\def\finph@nt{\setbox\tw@\null
+ \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
+ \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
+\def\mathstrut{\vphantom(}
+\def\smash{\relax % \relax, in case this comes first in \halign
+ \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
+ \fi\next}
+\def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
+\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
+\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
+
+\def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
+\def\@vereq#1#2{\lower.5\p@\vbox{\baselineskip\z@skip\lineskip-.5\p@
+ \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
+\def\notin{\mathrel{\mathpalette\c@ncel\in}}
+\def\c@ncel#1#2{\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
+\def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
+\def\rlh@#1{\vcenter{\hbox{\ooalign{\raise2pt
+ \hbox{$#1\rightharpoonup$}\crcr
+ $#1\leftharpoondown$}}}}
+\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
+\def\doteq{\buildrel\textstyle.\over=}
+
+\def\log{\mathop{\rm log}\nolimits}
+\def\lg{\mathop{\rm lg}\nolimits}
+\def\ln{\mathop{\rm ln}\nolimits}
+\def\lim{\mathop{\rm lim}}
+\def\limsup{\mathop{\rm lim\,sup}}
+\def\liminf{\mathop{\rm lim\,inf}}
+\def\sin{\mathop{\rm sin}\nolimits}
+\def\arcsin{\mathop{\rm arcsin}\nolimits}
+\def\sinh{\mathop{\rm sinh}\nolimits}
+\def\cos{\mathop{\rm cos}\nolimits}
+\def\arccos{\mathop{\rm arccos}\nolimits}
+\def\cosh{\mathop{\rm cosh}\nolimits}
+\def\tan{\mathop{\rm tan}\nolimits}
+\def\arctan{\mathop{\rm arctan}\nolimits}
+\def\tanh{\mathop{\rm tanh}\nolimits}
+\def\cot{\mathop{\rm cot}\nolimits}
+\def\coth{\mathop{\rm coth}\nolimits}
+\def\sec{\mathop{\rm sec}\nolimits}
+\def\csc{\mathop{\rm csc}\nolimits}
+\def\max{\mathop{\rm max}}
+\def\min{\mathop{\rm min}}
+\def\sup{\mathop{\rm sup}}
+\def\inf{\mathop{\rm inf}}
+\def\arg{\mathop{\rm arg}\nolimits}
+\def\ker{\mathop{\rm ker}\nolimits}
+\def\dim{\mathop{\rm dim}\nolimits}
+\def\hom{\mathop{\rm hom}\nolimits}
+\def\det{\mathop{\rm det}}
+\def\exp{\mathop{\rm exp}\nolimits}
+\def\Pr{\mathop{\rm Pr}}
+\def\gcd{\mathop{\rm gcd}}
+\def\deg{\mathop{\rm deg}\nolimits}
+
+\def\bmod{\mskip-\medmuskip\mkern5mu
+ \mathbin{\rm mod}\penalty900\mkern5mu\mskip-\medmuskip}
+\def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)}
+
+\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
+ \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.}
+\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
+ \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
+ \mathstrut\crcr\noalign{\kern-\baselineskip}
+ #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
+\def\pmatrix#1{\left(\matrix{#1}\right)}
+\newdimen\p@renwd
+\setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
+\def\bordermatrix#1{\begingroup \m@th
+ \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
+ \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil
+ &&\quad\hfil$##$\hfil\crcr
+ \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
+ #1\crcr\omit\strut\cr}}%
+ \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
+ \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
+ \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne
+ \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
+ \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
+ \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
+
+\def\openup{\afterassignment\@penup\dimen@=}
+\def\@penup{\advance\lineskip\dimen@
+ \advance\baselineskip\dimen@
+ \advance\lineskiplimit\dimen@}
+\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
+ \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
+ \crcr#1\crcr}}\,}
+\newif\ifdt@p
+\def\displ@y{\global\dt@ptrue\openup\jot\m@th
+ \everycr{\noalign{\ifdt@p \global\dt@pfalse
+ \vskip-\lineskiplimit \vskip\normallineskiplimit
+ \else \penalty\interdisplaylinepenalty \fi}}}
+\def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
+\def\displaylines#1{\displ@y
+ \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr
+ #1\crcr}}
+\def\eqalignno#1{\displ@y \tabskip\centering
+ \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
+ &\llap{$\@lign##$}\tabskip\z@skip\crcr
+ #1\crcr}}
+\def\leqalignno#1{\displ@y \tabskip\centering
+ \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
+ &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
+ #1\crcr}}
+
+% Definitions related to output
+
+\message{output routines,}
+
+\countdef\pageno=0 \pageno=1 % first page is number 1
+\newtoks\headline \headline={\hfil} % headline is normally blank
+\newtoks\footline \footline={\hss\tenrm\folio\hss}
+ % footline is normally a centered page number in font \tenrm
+\newif\ifr@ggedbottom
+\def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue}
+\def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse} % undoes \raggedbottom
+\def\folio{\ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi}
+\def\nopagenumbers{\footline{\hfil}} % blank out the footline
+\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
+ \else\global\advance\pageno\@ne \fi} % increase |pageno|
+
+\newinsert\footins
+\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ #1\@sf\vfootnote{#1}}
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+ \textindent{#1}\footstrut\futurelet\next\fo@t}
+\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
+ \else\let\next\f@t\fi \next}
+\def\f@@t{\bgroup\aftergroup\@foot\let\next}
+\def\f@t#1{#1\@foot}
+\def\@foot{\strut\egroup}
+\def\footstrut{\vbox to\splittopskip{}}
+\skip\footins=\bigskipamount % space added when footnote is present
+\count\footins=1000 % footnote magnification factor (1 to 1)
+\dimen\footins=8in % maximum footnotes per page
+
+\newinsert\topins
+\newif\ifp@ge \newif\if@mid
+\def\topinsert{\@midfalse\p@gefalse\@ins}
+\def\midinsert{\@midtrue\@ins}
+\def\pageinsert{\@midfalse\p@getrue\@ins}
+\skip\topins=\z@skip % no space added when a topinsert is present
+\count\topins=1000 % magnification factor (1 to 1)
+\dimen\topins=\maxdimen % no limit per page
+\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
+\def\endinsert{\egroup % finish the \vbox
+ \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@
+ \advance\dimen@\pagetotal \advance\dimen@-\pageshrink
+ \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
+ \if@mid \bigskip\box\z@\bigbreak
+ \else\insert\topins{\penalty100 % floating insertion
+ \splittopskip\z@skip
+ \splitmaxdepth\maxdimen \floatingpenalty\z@
+ \ifp@ge \dimen@\dp\z@
+ \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
+ \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
+
+\output{\plainoutput}
+\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
+ \advancepageno
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}}
+\def\makeheadline{\vbox to\z@{\vskip-22.5\p@
+ \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}
+\def\makefootline{\baselineskip24\p@\line{\the\footline}}
+\def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over
+ \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
+
+\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
+ \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+\def\footnoterule{\kern-3\p@
+ \hrule width 2truein \kern 2.6\p@} % the \hrule is .4pt high
+
+% Hyphenation, miscellaneous macros, and initial values for standard layout
+\message{hyphenation}
+
+\lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
+\input hyphen
+
+\def\magnification{\afterassignment\m@g\count@}
+\def\m@g{\mag\count@
+ \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
+
+\def\tracingall{\tracingonline\@ne\tracingcommands\tw@\tracingstats\tw@
+ \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
+ \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode}
+
+\def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm
+ \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}}
+
+\normalbaselines\rm % select roman font
+\nonfrenchspacing % punctuation affects the spacing
+\catcode`@=12 % at signs are no longer letters
+
+\def\fmtname{plain}\def\fmtversion{3.0PS} % identifies the current format
diff --git a/Build/source/texk/dvipsk/contrib/pspic/pspic.readme b/Build/source/texk/dvipsk/contrib/pspic/pspic.readme
new file mode 100644
index 00000000000..e26475abb4d
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/pspic/pspic.readme
@@ -0,0 +1,40 @@
+Hello Thomas...
+
+For some time I've been working on a LaTeX-style, which replaces the
+graphic-producing picture objects of LaTeX's picture environment
+(line, vector, circle, circle* etc.)
+ This new implementation of the picture environment is based on your
+`dvips' TeX-driver for PostScript printers. I thought you might
+distribute it with your dvips, as it only works with this specific
+driver (it uses your \special variants ! " and ps: )
+ At the ending of this the entire style is enclosed. A few things
+should be said about compability:
+
+linethickness when changing the linehickness this affects not only
+ the horizontal and vertical lines, but also slanted
+ ones.
+
+line The restrictions of wich angles you can make lines are
+ eliminated.
+
+vector As you may now make vectors at any linethickness I've
+ made a new definition of the vectorhead, so that the
+ size of vector heads are proportional to the
+ linethickness.
+
+circle(*) In default LaTeX circles can be only of certain sizes
+ (as they are predefined as graphics). with pspic you
+ may make circles at any size.
+
+I see all thiese things as improvements in comparison with the old
+style, but you must off course be aware of them while using this style
+(especially with old documents).
+
+You may specify a grayscale using the \shade operator, wich takes one
+argument, a number from 0-100 setting the percentage of black. The
+\scale operator affects all the graphic producing objects.
+
+I've tested this for some time, and there doesn't seem to be any bad
+bugs. I will apreciate any response.
+
+/Kresten
diff --git a/Build/source/texk/dvipsk/contrib/pspic/pspic.sty b/Build/source/texk/dvipsk/contrib/pspic/pspic.sty
new file mode 100644
index 00000000000..54b1f925a4e
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/pspic/pspic.sty
@@ -0,0 +1,168 @@
+\typeout{Document Style `PostScript PICTURE' <jan 22 1991>.}
+%----------------------------------------------------------------------
+%
+% PostScript PICTURE
+%
+% For use with DVIPS (by Tomas Rokicki)
+%
+%
+% By: Kresten Krab Thorup, University of Aalborg, Denmark
+% <krab@iesd.auc.dk>
+% January 1991
+%
+%----------------------------------------------------------------------
+%
+% ==================================
+% psbox
+% ==================================
+%
+\def\psbox#1{%
+ \vbox{%
+ \hbox{%
+ \special{" \number\unitlength.0 65781.75 div dup scale
+ picdict begin
+ /lwidth \number\@wholewidth.0 \number\unitlength.0 div def
+ lwidth setlinewidth
+ \moveto(0,0) #1 end}}}}
+%
+% ==================================
+% Commands for use in \psbox
+% ==================================
+%
+\def\moveto(#1,#2){ /x #1 def /y #2 def x y moveto}
+\def\rline(#1,#2){ newpath
+ x y moveto
+ #1 #2 rlineto
+ linedash 0 setdash stroke
+ /x x #1 add def
+ /y y #2 add def}
+%
+% ==================================
+% Commands for use in LaTeX
+% ==================================
+%
+%----------------------------------------------------------------------
+% \line command of LaTeX
+%----------------------------------------------------------------------
+\def\line(#1,#2)#3{\psbox{%
+ \@ccolour setgray
+ /linedash \linedash def
+ #1 0 eq
+ {/fac{#2 abs div #3 mul}def}
+ {/fac{#3 #1 abs div mul}def}
+ ifelse
+ \rline( #1 fac , #2 fac ) }}
+%----------------------------------------------------------------------
+% \vector command of LaTeX
+%----------------------------------------------------------------------
+\def\vector(#1,#2)#3{\psbox{%
+ \@ccolour setgray
+ /linedash \linedash def
+ #1 0 eq
+ {/fac{#2 abs div #3 mul}def}
+ {/fac{#3 #1 abs div mul}def}
+ ifelse
+ newpath
+ 0 0 #1 fac #2 fac lwidth lwidth \number\headwidth.0 mul
+ lwidth \number\headlength.0 mul arrow fill}}
+%----------------------------------------------------------------------
+% \circle and \circle* commands of LaTeX
+%----------------------------------------------------------------------
+\def\circle{\@ifstar{\@dot}{\@circle}}
+\def\@circle#1{\psbox{ newpath
+ 0 0 #1 2 div 0 360 arc
+ [] 0 setdash
+ \@ccolour setgray stroke}}
+\def\@dot#1{\psbox{newpath
+ 0 0 #1 2 div 0 360 arc
+ \@ccolour setgray fill}}
+%----------------------------------------------------------------------
+% \bezier(x1,y1)(x2,y2)(x3,y3)
+%----------------------------------------------------------------------
+\def\bezier(#1,#2)(#3,#4)(#5,#6){%
+\psbox{#1 #2 #3 #4 #5 #6 curveto \@ccolour setgray \linedash 0 setdash stroke}%
+}%
+%----------------------------------------------------------------------
+% \oval command of LaTeX
+%----------------------------------------------------------------------
+\def\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[full]}}
+\def\@oval(#1,#2)[#3]{%
+ \begingroup
+ \@ovxx = #1\unitlength
+ \@ovyy =#2\unitlength
+ \@tempdimb \ifdim \@ovyy >\@ovxx =\@ovxx\else =\@ovyy \fi
+ \ifnum\@tempdimb>\maxovaldiam \@tempdimb=\maxovaldiam \fi
+ \psbox{/rad \number\@tempdimb.0 \number\unitlength.0 div 2 div def
+ /dx #1 2 div rad sub def
+ /dy #2 2 div rad sub def
+ \@ccolour setgray
+ newpath #3 [] 0 setdash stroke }%
+ \endgroup}
+%----------------------------------------------------------------------
+% \ctext{...} Text to be written with the current grayscale
+%----------------------------------------------------------------------
+\def\ctext#1{\special{ps:gsave \@ccolour
+ setgray}{}#1\special{ps:grestore}}
+%----------------------------------------------------------------------
+% Customization
+%----------------------------------------------------------------------
+\def\vectorhead#1#2{\headlength=#1 \headwidth=#2 }
+\def\dashpattern[#1]{\xdef\linedash{[#1] }}
+\def\colour#1{\def\@ccolour{\@nameuse{CC#1}}}
+\def\shade#1{\def\@ccolour{ 1 #1 100 div sub }}
+%
+% ==================================
+% Initialization
+% ==================================
+%
+\newdimen\maxovaldiam
+\maxovaldiam=14mm % Max diameter of LaTeX circle
+%
+\newcount\headlength % length of arrowhead in terms of
+ % linewidth
+\newcount\headwidth % width of arrowhead in terms of linewidth
+\vectorhead{9}{5} % default vectorhead dimentions
+%
+\dashpattern[] % set default type of linedashes
+%
+\def\CCwhite{1 }
+\def\CCblack{0 }
+\def\CCgray{.5 }
+\def\CClightgray{.75 }
+\def\CCdarkgray{.25 }
+\colour{black}
+%----------------------------------------------------------------------
+% The P*stScr*pt dictionary
+%----------------------------------------------------------------------
+\special{!/picdict 200 dict def picdict begin
+/tr { 0 0 moveto newpath dx dy rad 0 90 arc} def
+/tl { 0 0 moveto newpath -1 dx mul dy rad 90 180 arc} def
+/bl { 0 0 moveto newpath -1 dx mul -1 dy mul rad 180 270 arc} def
+/br { 0 0 moveto newpath dx -1 dy mul rad 270 360 arc} def
+/b { bl stroke newpath br -1 dx mul -1 dy mul rad sub moveto dx 2 mul
+ 0 rlineto} def
+/t { tl stroke newpath tr -1 dx mul dy rad add moveto dx 2 mul 0
+ rlineto } def
+/l { bl stroke newpath tl -1 dx mul rad sub -1 dy mul moveto 0 dy 2
+ mul rlineto } def
+/r { tr stroke newpath br dx rad add -1 dy mul moveto 0 dy 2 mul
+ rlineto } def
+/full { t stroke newpath r stroke newpath b stroke newpath l } def
+/mtrx matrix def
+%
+/arrow {
+/headlength exch def /halfheadthickness exch 2 div def
+/halfthickness exch 2 div def /tipy exch def /tipx exch def /taily
+exch def /tailx exch def /dx tipx tailx sub def /dy tipy taily sub def
+/arrowlength dx dx mul dy dy mul add sqrt def /angle dy dx atan def
+/base arrowlength headlength sub def /savematrix mtrx currentmatrix
+def tailx taily translate angle rotate gsave newpath 0 0 moveto base 0
+lineto linedash 0 setdash stroke grestore base halfheadthickness neg
+moveto arrowlength 0 lineto base halfheadthickness lineto base
+halfthickness lineto closepath savematrix setmatrix
+} def
+%%
+end}
+%----------------------------------------------------------------------
+% end of pspic.sty
+%----------------------------------------------------------------------
diff --git a/Build/source/texk/dvipsk/contrib/timesmat.sty b/Build/source/texk/dvipsk/contrib/timesmat.sty
new file mode 100644
index 00000000000..94a4edd2044
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/timesmat.sty
@@ -0,0 +1,291 @@
+\message{timesmat.sty - original by KHC, edited by DIL for pt sizes}
+% This style uses Times Roman as much as possible in math mode.
+% It is a replacement for times.sty, not an addition
+%
+\def\fileversion{PSNFSS 2.4}
+\def\filedate{16.7.93}
+\immediate\write\sixt@@n{File: `timesmat.sty'
+\fileversion\ <\filedate> (KHC, DIL, SH)}
+% Copyright 1993 by Kin Hoong Chung.
+%
+% You are allowed to distribute this file. You are not allowed to
+% charge money for the distribution of this file.
+%
+% May need further hacking, depending on the version of Times encoding
+% that you use. The version I use has the various capital Greek
+% letters hacked in from Symbol. This is not fully tested... it may
+% be missing some other maths characters or text characters for TeX.
+% Seems to be compatible with AMS-LaTeX.
+%
+% Altered by Dave Laurenson (dil@castle.ed.ac.uk) to work with
+% oldlfont.sty and 10pt, 11pt and 12pt document styles.
+% The same changes also made by Sven Heemeyer. Thanks to both.
+%
+% merged together by S Rahtz July 1993
+% ------------------------------------------------------------
+% Known bugs:
+%
+% Times italic maths characters should have their own TFM, AFM, etc, for
+% better spacing of fonts.
+%
+% Room for directly addressable maths mode fonts seems to be limited, I
+% don't know why yet...
+%
+% Postscript accents behave in a different way to CMR accents, so that
+% there is \mathaccent fails. Present correction merely replaces the
+% Times accents with CMR ones. Accents in maths mode should be Times accents.
+
+% check if nfss exists
+\@ifundefined{selectfont}
+ {\@latexerr{`timesmat' style option can only be used
+ with the new font selection scheme}\@eha
+ \endinput}{}
+%
+\ifx\declare@font\undefined
+ \input{psnfss.sup}\fi
+%
+% load required PostScript (tm) fonts.
+\def\load@courier{%
+\postscript@fontdef{Courier}{courier}%
+{pcrr}{pcrro}{pcrb}{pcrbo}{pcrr}{pcrr}
+}
+\def\load@helvetica{%
+\postscript@fontdef[.85333]{Helvetica}{helvetica}%
+{phvr}{phvro}{phvb}{phvbo}{phvrc}{phvro}
+}
+\def\load@times{%
+\postscript@fontdef{Times}{times}%
+{ptmr}{ptmri}{ptmb}{ptmbi}{ptmrc}{ptmro}
+}
+%
+\romanfont{times} %make default Roman font Times-Roman.
+\sansfont{helvetica} %Sans serif is Helvetica
+\typewriterfont{courier} %\tt is Courier
+
+\def\default@family{times} %Tell AMS-LaTeX that Times-Roman is default.
+
+% put back dotless i,j
+% \def\i{{\family{cmr}\selectfont\char"10}}
+\def\j{{\family{cmr}\selectfont\char"11}}
+
+% Make Times the default maths font.
+\late@define@mathgroup\mv@normal{0}
+ {times}{m}{n}
+\late@define@mathgroup\mv@normal{1}
+ {times}{m}{it}
+% Tell TeX that Times is the default maths font.
+
+\expandafter\font\csname times/m/n/10\endcsname=ptmr
+\textfont0=\csname times/m/n/10\endcsname
+\scriptfont0=\csname times/m/n/10\endcsname
+\scriptscriptfont0=\csname times/m/n/10\endcsname
+
+\expandafter\font\csname times/m/it/10\endcsname=ptmri
+\textfont1=\csname times/m/it/10\endcsname
+\scriptfont1=\csname times/m/it/10\endcsname
+\scriptscriptfont1=\csname times/m/it/10\endcsname
+
+% make the \boldmath option work in Times.
+\late@define@mathgroup\mv@bold{0}
+ {times}{bx}{n}
+\late@define@mathgroup\mv@bold{1}
+ {times}{bx}{it}
+
+% Put cmmi back into TeX, as a new maths alphabet, so that we can get
+% back the Greek & other characters missing in Times.
+\def\cmmath{\protect\pcmmath}
+\def\pcmmath{\RIfM@\expandafter\cmmath@\else
+ \expandafter\nonmatherr@\expandafter\cmmath\fi}
+\late@newmathalphabet\cmmath@
+% find out which \textfont holds cmmi
+\edef\@tempa{\number\cmmath@@group}%
+% Tell TeX where cmmi is.
+% Assumes \@ptsize is defined by article, report, book
+\ifcase \@ptsize
+ \textfont\@tempa=\csname cmm/m/it/10\endcsname
+ \scriptfont\@tempa=\csname cmm/m/it/7\endcsname
+ \scriptscriptfont\@tempa=\csname cmm/m/it/5\endcsname
+\or
+ \textfont\@tempa=\csname cmm/m/it/11\endcsname
+ \scriptfont\@tempa=\csname cmm/m/it/7\endcsname
+ \scriptscriptfont\@tempa=\csname cmm/m/it/5\endcsname
+\or
+ \textfont\@tempa=\csname cmm/m/it/12\endcsname
+ \scriptfont\@tempa=\csname cmm/m/it/8\endcsname
+ \scriptscriptfont\@tempa=\csname cmm/m/it/6\endcsname
+\fi
+% make sure bold version gets bold characters
+\late@define@mathgroup\mv@normal{\@tempa}
+ {cmm}{m}{it}
+\late@define@mathgroup\mv@bold{\@tempa}
+ {cmm}{b}{it}
+\edef\@tempa{\hexnumber@\cmmath@@group}%
+
+% cmmi and Times-italic have different positions for some punctuation marks
+% \mathcode`\ ="8000 % \space
+% \mathcode`\!="5021
+% \mathcode`\'="8000 % ^\prime
+% \mathcode`\(="4028
+% \mathcode`\)="5029
+% \mathcode`\*="22.4 % \ast
+% \mathcode`\+="202B
+\mathcode`\,="602C
+% \mathcode`\-="2200
+\mathcode`\.="002E
+\mathcode`\/="002F
+% \mathcode`\:="303A
+% \mathcode`\;="603B
+\mathcode`\<="303C
+% \mathcode`\=="303D
+\mathcode`\>="303E
+% \mathcode`\?="503F
+% \mathcode`\[="405B
+% \mathcode`\\="026E % \backslash
+% \mathcode`\]="505D
+% \mathcode`\_="8000 % \_
+% \mathcode`\{="4266
+% \mathcode`\|="026A
+% \mathcode`\}="5267
+\mathchardef\ldotp="602E % ldot as a punctuation mark
+
+% Put back the missing lowercase Greek characters.
+\mathchardef\alpha="0\@tempa 0B
+\mathchardef\beta="0\@tempa 0C
+\mathchardef\gamma="0\@tempa 0D
+\mathchardef\delta="0\@tempa 0E
+\mathchardef\epsilon="0\@tempa 0F
+\mathchardef\zeta="0\@tempa 10
+\mathchardef\eta="0\@tempa 11
+\mathchardef\theta="0\@tempa 12
+\mathchardef\iota="0\@tempa 13
+\mathchardef\kappa="0\@tempa 14
+\mathchardef\lambda="0\@tempa 15
+\mathchardef\mu="0\@tempa 16
+\mathchardef\nu="0\@tempa 17
+\mathchardef\xi="0\@tempa 18
+\mathchardef\pi="0\@tempa 19
+\mathchardef\rho="0\@tempa 1A
+\mathchardef\sigma="0\@tempa 1B
+\mathchardef\tau="0\@tempa 1C
+\mathchardef\upsilon="0\@tempa 1D
+\mathchardef\phi="0\@tempa 1E
+\mathchardef\chi="0\@tempa 1F
+\mathchardef\psi="0\@tempa 20
+\mathchardef\omega="0\@tempa 21
+\mathchardef\varepsilon="0\@tempa 22
+\mathchardef\vartheta="0\@tempa 23
+\mathchardef\varpi="0\@tempa 24
+\mathchardef\varrho="0\@tempa 25
+\mathchardef\varsigma="0\@tempa 26
+\mathchardef\varphi="0\@tempa 27
+
+% Put back other missing characters.
+\mathchardef\imath="0110
+\mathchardef\jmath="0\@tempa 7C
+\mathchardef\ell="0\@tempa 60
+\mathchardef\wp="0\@tempa 7D
+\mathchardef\partial="0\@tempa 40
+\mathchardef\flat="0\@tempa 5B
+\mathchardef\natural="0\@tempa 5C
+\mathchardef\sharp="0\@tempa 5D
+\mathchardef\smile="3\@tempa 5E
+\mathchardef\frown="3\@tempa 5F
+\mathchardef\leftharpoonup="3\@tempa 28
+\mathchardef\leftharpoondown="3\@tempa 29
+\mathchardef\rightharpoonup="3\@tempa 2A
+\mathchardef\rightharpoondown="3\@tempa 2B
+\mathchardef\lhook="3\@tempa 2C \def\hookrightarrow{\lhook\joinrel\rightarrow}
+\mathchardef\rhook="3\@tempa 2D \def\hookleftarrow{\leftarrow\joinrel\rhook}
+\mathchardef\star="2\@tempa 3F
+\mathchardef\vecMC="0\@tempa 7E
+\def\vec{\mathaccent\the\vecMC }
+
+% Get all the missing cmr characters back for maths mode
+\def\cmrmath{\protect\pcmrmath}
+\def\pcmrmath{\RIfM@\expandafter\cmrmath@\else
+ \expandafter\nonmatherr@\expandafter\cmrmath\fi}
+\late@newmathalphabet\cmrmath@
+% find out which \textfont holds cmr
+\edef\@tempa{\number\cmrmath@@group}%
+% Tell TeX where cmr is.
+\ifcase\@ptsize
+ \textfont\@tempa=\csname cmr/m/n/10\endcsname
+ \scriptfont\@tempa=\csname cmr/m/n/7\endcsname
+ \scriptscriptfont\@tempa=\csname cmr/m/n/5\endcsname%
+\or
+ \textfont\@tempa=\csname cmr/m/n/11\endcsname
+ \scriptfont\@tempa=\csname cmr/m/n/7\endcsname
+ \scriptscriptfont\@tempa=\csname cmr/m/n/5\endcsname%
+\or
+ \textfont\@tempa=\csname cmr/m/n/12\endcsname
+ \scriptfont\@tempa=\csname cmr/m/n/8\endcsname
+ \scriptscriptfont\@tempa=\csname cmr/m/n/6\endcsname
+\fi
+% make sure bold version gets bold characters
+\late@define@mathgroup\mv@normal{\@tempa}
+ {cmr}{m}{n}
+\late@define@mathgroup\mv@bold{\@tempa}
+ {cmr}{bx}{n}
+\edef\@tempa{\hexnumber@\cmrmath@@group}%
+
+% %Put back the missing capital Greek letters.
+% \mathchardef\Gamma="7\@tempa 00
+% \mathchardef\Delta="7\@tempa 01
+% \mathchardef\Theta="7\@tempa 02
+% \mathchardef\Lambda="7\@tempa 03
+% \mathchardef\Xi="7\@tempa 04
+% \mathchardef\Pi="7\@tempa 05
+% \mathchardef\Sigma="7\@tempa 06
+% \mathchardef\Upsilon="7\@tempa 07
+% \mathchardef\Phi="7\@tempa 08
+% \mathchardef\Psi="7\@tempa 09
+% \mathchardef\Omega="7\@tempa 0A
+
+% Postscript accents behave differently to the way TeX expects... and
+% \mathaccent is a primitive command, so it cannot be changed!!!
+\mathchardef\acuteMC="7\@tempa 13
+\def\acute{\mathaccent\the\acuteMC }
+\mathchardef\graveMC="7\@tempa 12
+\def\grave{\mathaccent\the\graveMC }
+\mathchardef\ddotMC="7\@tempa 7F
+\def\ddot{\mathaccent\the\ddotMC }
+\mathchardef\tildeMC="7\@tempa 7E
+\def\tilde{\mathaccent\the\tildeMC }
+\mathchardef\barMC="7\@tempa 16
+\def\bar{\mathaccent\the\barMC }
+\mathchardef\breveMC="7\@tempa 15
+\def\breve{\mathaccent\the\breveMC }
+\mathchardef\checkMC="7\@tempa 14
+\def\check{\mathaccent\the\checkMC }
+\mathchardef\hatMC="7\@tempa 5E
+\def\hat{\mathaccent\the\hatMC }
+\mathchardef\dotMC="7\@tempa 5F
+\def\dot{\mathaccent\the\dotMC }
+
+\ifx\csname amstex.sty\endcsname\relax
+{}
+\else
+\def\Makeacce@#1#2{\def#1{\RIfM@\DN@{\mathaccent@
+ {#2 }}\else\DN@{\nonmatherr@{#1}}\fi\next@}}
+
+\Makeacce@\Hat{\the\hatMC }
+\Makeacce@\Check{\the\checkMC }
+\Makeacce@\Tilde{\the\tildeMC }
+\Makeacce@\Acute{\the\acuteMC }
+\Makeacce@\Grave{\the\graveMC }
+\Makeacce@\Dot{\the\dotMC }
+\Makeacce@\Ddot{\the\ddotMC }
+\Makeacce@\Breve{\the\breveMC }
+\Makeacce@\Bar{\the\barMC }
+\def\Vec{\RIfM@\DN@{\mathaccent@{\the\vecMC }}}
+\fi
+
+% fix \bold in AMS-LaTeX so it produces bold Times-Roman text rather than
+% bold Computer-Modern-Roman. If you are not using AMS-LaTeX, you may get
+% \bold as a new maths mode operator for free.
+\late@newmathalphabet*{\timesrmbf}{times}{bx}{n}
+\def\bold{\timesrmbf}
+
+\def\hbar{{\mathchar'26\mkern-7muh}}
+\def\neq{{\not\mkern1.5mu=}} \let\ne=\neq
+\endinput
diff --git a/Build/source/texk/dvipsk/contrib/volker/README b/Build/source/texk/dvipsk/contrib/volker/README
new file mode 100644
index 00000000000..f2138917eda
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/README
@@ -0,0 +1,149 @@
+NOTE S Rahtz 1998/01/18: renamed files to suite 8+3 <name>.cfg style
+********************************************************************
+
+Release 1.13, 21 Aug 1995
+Release 1.12, 02 Mar 1995
+Release 1.0, 20 Feb 1995
+
+This is a set of files which can be used with dvips to control certain
+parameters of the printer, like simplex/duplex printing, or screen
+frequencies of images.
+
+Put together by Volker Kuhlmann, VOLKER@ELEC.CANTERBURY.AC.NZ.
+No copyright. Freely distributable. If you make additions, please send
+me a copy.
+
+
+LIST OF FILES
+=============
+
+README This file.
+config.* Configuration files and header files for dvips. Special
+ format which serves both purposes.
+
+
+INSTALLATION
+============
+
+Copy these files into a directory which is searched by dvips both for
+configuration files and for header files. dvips looks in $TEXCONFIG for
+configuration files, and in $DVIPSHEADERS for header files. For details
+please see the dvips documentation.
+
+
+USAGE
+=====
+
+dvips reads the instructions in a configuration file <configfilename>
+with the -P option:
+
+ dvips -P <configfilename>
+
+All these configuration files contain the PostScript code for the
+respective operation as well, and can be used as header file as they are.
+
+Now to the stuff provided:
+
+-P simplex On a duplex printer, force printing in simplex mode. On
+ a simplex printer, this will be ignored.
+-P duplong On a duplex printer, force duplex printing with binding
+ on the long edge. On a simplex printer, this will be
+ ignored.
+-P dupshort On a duplex printer, force duplex printing with binding
+ on the short edge. On a simplex printer, this will be
+ ignored.
+-P a3 Print on A3 paper.
+ Note: this is just a demo - use "-t a3" instead!
+-P inv Print all pages inverted, i.e. white letters on black
+ background.
+ Note: this currently does not work properly. Any
+ hints/fixes greatly appreciated!
+-P screenN Print images with a screen frequency of N lpi at
+ 45 degrees.
+ N = {70, 80, 85, 90, 100, 110, 120, 130, 140, 150}
+-P screen100-0 Print images with a screen frequency of 100lpi
+ at 0 degrees.
+
+Note: When working with screen frequencies, it is possible that
+ turning the printer off and back on solves the problem of the
+ screen commands not having any effect.
+
+
+CONTROLLING SCREEN FREQUENCIES
+==============================
+
+Various PostScript commands for controlling the screen frequencies of
+images exist, but not all work on all printers. See fragments of
+PostScript code and comments below. The form working on most printers is
+
+ LPI DEGREES {FUNCTION} setscreen
+
+Insert numbers for LPI and DEGREES, and a function for FUNCTION about
+which I only know (right or wrong?):
+
+ "Should read 2 values from the stack (x, y coordinates in a
+ halftone cell), and return one in the range -1 to 1. The return
+ values determine the order in which pixels within a halftone
+ cell are whitened to produce any desired shade of gray."
+
+The simplest function is {pop}, creating a "linescreen" pattern. There
+is also a function "Dot" (currently used) and "Ellipse". For any other
+frequencies/angles/functions put the instructions in a file, and load
+the file with
+
+ dvips -h <filename>
+
+Thanks to osakari@unda.fi (Olavi Sakari) for some help, and the "Dot"
+and "Ellipse" code.
+
+Notes follow:
+
+
+%currentscreen 3 1 roll pop pop 70 45 3 -1 roll setscreen
+% Works on HP LJ3Si, HP LJ4m. Ignored on HP LJ4mv (VK).
+
+
+%currentscreen 3 1 roll pop pop 70 45 3 -1 roll sethalftone
+% Ignored on HP LJ4mv (VK).
+
+
+%70 45 {pop} setscreen
+% Produces a funny, 1-diagonal pattern ("linescreen") on HP LJ4mv (VK).
+
+
+% "Dot":
+%70 45 {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+% sub }{dup mul exch dup mul add 1 exch sub }ifelse} setscreen
+% Works on HP LJ3Si, HP LJ4m, HP LJ4mv (VK).
+
+
+% "Ellipse":
+%70 45 {dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub} setscreen
+% Works on HP LJ4mv (VK).
+
+
+%70 45
+%<<
+% /HalftoneType 1
+ % 0 gives range check error, 2 gives undefined error (VK).
+% /Frequency 150
+% /Angle 20
+ % the values for /Frequency, /Angle are irrelevant
+% /SpotFunction {pop}
+%>>
+%setscreen
+% 70 45 seem to replace /Frequency and /Angle in dict
+% - Note: NO curly braces around the dict!
+% Works on HP LJ4m, produces errors with HP LJ3Si,
+% Produces "linescreen" on HP LJ4mv caused by {pop} (VK).
+
+
+%<<
+% /HalftoneType 1
+% % 0 gives range check error, 2 gives undefined error (VK).
+% /Frequency 70
+% /Angle 45
+% /SpotFunction {pop}
+%>>
+%sethalftone % Level 2 only
+% Produces "linescreen" on HP LJ4mv caused by {pop} (VK).
diff --git a/Build/source/texk/dvipsk/contrib/volker/a3.cfg b/Build/source/texk/dvipsk/contrib/volker/a3.cfg
new file mode 100644
index 00000000000..380359026f7
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/a3.cfg
@@ -0,0 +1,17 @@
+% config.a3
+% Configuration file for dvips. Load with: dvips -P a3.
+%
+% Forces printing on A3 paper.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 21 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ a3
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.a3
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/duplong.cfg b/Build/source/texk/dvipsk/contrib/volker/duplong.cfg
new file mode 100644
index 00000000000..4c5d1f7cff9
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/duplong.cfg
@@ -0,0 +1,19 @@
+% config.duplong
+% Configuration file for dvips. Load with: dvips -P duplong.
+%
+% Prints in duplex mode with binding on the long edge.
+% Ignored on a simplex printer.
+% Works on HP LaserJet IIISi.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ statusdict begin true setduplexmode false settumble end
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.duplong
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/dupshort.cfg b/Build/source/texk/dvipsk/contrib/volker/dupshort.cfg
new file mode 100644
index 00000000000..b025ba95696
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/dupshort.cfg
@@ -0,0 +1,19 @@
+% config.dupshort
+% Configuration file for dvips. Load with: dvips -P dupshort.
+%
+% Prints in duplex mode with binding on the short edge.
+% Ignored on a simplex printer.
+% Works on HP LaserJet IIISi.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ statusdict begin true setduplexmode true settumble end
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.dupshort
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/inv.cfg b/Build/source/texk/dvipsk/contrib/volker/inv.cfg
new file mode 100644
index 00000000000..7b6223c92d4
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/inv.cfg
@@ -0,0 +1,21 @@
+% config.inv
+% Configuration file for dvips. Load with: dvips -P inv.
+%
+% Invert the printing.
+% This currently mucks up the first of the pages printed.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ %[{}
+ /exec load currenttransfer /exec load] cvx settransfer
+ [{1 exch sub} /exec load currenttransfer /exec load] cvx settransfer
+ %/fPP true def
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.inv
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr100-0.cfg b/Build/source/texk/dvipsk/contrib/volker/scr100-0.cfg
new file mode 100644
index 00000000000..1f30f67010d
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr100-0.cfg
@@ -0,0 +1,21 @@
+% config.screen100-0
+% Configuration file for dvips. Load with: dvips -P screen100-0.
+%
+% Sets screen frequency and angle for images to 100lpi/0degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 100 0
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen100-0
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr100.cfg b/Build/source/texk/dvipsk/contrib/volker/scr100.cfg
new file mode 100644
index 00000000000..636a7c373d5
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr100.cfg
@@ -0,0 +1,21 @@
+% config.screen100
+% Configuration file for dvips. Load with: dvips -P screen100.
+%
+% Sets screen frequency and angle for images to 100lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 100 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen100
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr110.cfg b/Build/source/texk/dvipsk/contrib/volker/scr110.cfg
new file mode 100644
index 00000000000..6b3f4d19f00
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr110.cfg
@@ -0,0 +1,21 @@
+% config.screen110
+% Configuration file for dvips. Load with: dvips -P screen110.
+%
+% Sets screen frequency and angle for images to 110lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 110 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen110
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr120.cfg b/Build/source/texk/dvipsk/contrib/volker/scr120.cfg
new file mode 100644
index 00000000000..fe878ece24a
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr120.cfg
@@ -0,0 +1,21 @@
+% config.screen120
+% Configuration file for dvips. Load with: dvips -P screen120.
+%
+% Sets screen frequency and angle for images to 120lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 120 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen120
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr130.cfg b/Build/source/texk/dvipsk/contrib/volker/scr130.cfg
new file mode 100644
index 00000000000..aa8f96bc85d
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr130.cfg
@@ -0,0 +1,21 @@
+% config.screen130
+% Configuration file for dvips. Load with: dvips -P screen130.
+%
+% Sets screen frequency and angle for images to 130lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 130 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen130
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr140.cfg b/Build/source/texk/dvipsk/contrib/volker/scr140.cfg
new file mode 100644
index 00000000000..2dfc4acebf3
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr140.cfg
@@ -0,0 +1,21 @@
+% config.screen140
+% Configuration file for dvips. Load with: dvips -P screen140.
+%
+% Sets screen frequency and angle for images to 140lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 140 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen140
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr150.cfg b/Build/source/texk/dvipsk/contrib/volker/scr150.cfg
new file mode 100644
index 00000000000..2798e4e5081
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr150.cfg
@@ -0,0 +1,21 @@
+% config.screen150
+% Configuration file for dvips. Load with: dvips -P screen150.
+%
+% Sets screen frequency and angle for images to 150lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 150 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen150
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr70.cfg b/Build/source/texk/dvipsk/contrib/volker/scr70.cfg
new file mode 100644
index 00000000000..1d5fd85253f
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr70.cfg
@@ -0,0 +1,21 @@
+% config.screen70
+% Configuration file for dvips. Load with: dvips -P screen70.
+%
+% Sets screen frequency and angle for images to 70lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 70 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen70
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr80.cfg b/Build/source/texk/dvipsk/contrib/volker/scr80.cfg
new file mode 100644
index 00000000000..32c8ab16a31
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr80.cfg
@@ -0,0 +1,21 @@
+% config.screen80
+% Configuration file for dvips. Load with: dvips -P screen80.
+%
+% Sets screen frequency and angle for images to 80lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 80 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen80
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr85.cfg b/Build/source/texk/dvipsk/contrib/volker/scr85.cfg
new file mode 100644
index 00000000000..1fec0c09efa
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr85.cfg
@@ -0,0 +1,21 @@
+% config.screen85
+% Configuration file for dvips. Load with: dvips -P screen85.
+%
+% Sets screen frequency and angle for images to 85lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 02 Mar 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 85 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen85
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/scr90.cfg b/Build/source/texk/dvipsk/contrib/volker/scr90.cfg
new file mode 100644
index 00000000000..a02a707d1c5
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/scr90.cfg
@@ -0,0 +1,21 @@
+% config.screen90
+% Configuration file for dvips. Load with: dvips -P screen90.
+%
+% Sets screen frequency and angle for images to 90lpi/45degree.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ 90 45
+ % "Dot" function:
+ {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1
+ sub }{dup mul exch dup mul add 1 exch sub }ifelse}
+ setscreen
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.screen90
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/volker/simplex.cfg b/Build/source/texk/dvipsk/contrib/volker/simplex.cfg
new file mode 100644
index 00000000000..bdf5160430c
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/volker/simplex.cfg
@@ -0,0 +1,19 @@
+% config.simplex
+% Configuration file for dvips. Load with: dvips -P simplex.
+%
+% Forces printing in simplex mode on a duplex printer.
+% Ignored on a simplex printer.
+% Works on HP LaserJet IIISi.
+%
+% This file is built so it can be used both as the header file for
+% PostScript and as the configuration file for dvips.
+% (Note that dvips ignores any lines beginning with a space or a "%".)
+%
+% Volker Kuhlmann, 20 Feb 1995
+% VOLKER@ELEC.CANTERBURY.AC.NZ
+%
+ statusdict begin false setduplexmode end
+%
+ { % start a procedure so PostScript `ignores' the dvips options.
+h config.simplex
+ } pop % PostScript cleanup
diff --git a/Build/source/texk/dvipsk/contrib/whichinpath b/Build/source/texk/dvipsk/contrib/whichinpath
new file mode 100644
index 00000000000..a45177bb212
--- /dev/null
+++ b/Build/source/texk/dvipsk/contrib/whichinpath
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# Useful with the backtick execution special; helps to find PostScript
+# files on TEXINPUTS. Contributed by S. P. Q. Rahtz.
+#
+pathList=`echo ${TEXINPUTS:=.:/usr/local/tex/inputs} | tr ':' ' '`
+theFile=$1
+
+for p in $pathList
+do
+ test -f $p/$theFile && { echo $p/$theFile; exit 0; }
+done
+exit 1
diff --git a/Build/source/texk/dvipsk/crop.lpro b/Build/source/texk/dvipsk/crop.lpro
new file mode 100644
index 00000000000..c3c26bfbe11
--- /dev/null
+++ b/Build/source/texk/dvipsk/crop.lpro
@@ -0,0 +1,26 @@
+%!
+% This file is for crop marks.
+%
+% First, we translate and draw the marks. You can change the way the
+% marks are drawn, but the quarter inch border around the page is fixed.
+%
+% This file uses bop-hook; sorry.
+%
+TeXDict begin
+%
+/cX 18 def % the crop offset
+/CM { % draw a crop mark; just a cross.
+ gsave TR 0 cX neg moveto 0 cX lineto stroke
+ cX neg 0 moveto cX 0 lineto stroke grestore
+} def
+%
+end
+%
+/bop-hook {
+ cX dup TR % move the origin a bit
+ gsave .3 setlinewidth 0 0 CM % now draw four crop marks
+ vsize cX 2 mul sub dup hsize cX 2 mul sub dup
+ isls { 4 2 roll } if 0 CM exch CM 0 exch CM grestore
+ 0 cX -2 mul TR % now move to where we start drawing
+ isls { cX -2 mul 0 TR } if
+} def
diff --git a/Build/source/texk/dvipsk/cyrfonts.map b/Build/source/texk/dvipsk/cyrfonts.map
new file mode 100644
index 00000000000..eca5f80fac0
--- /dev/null
+++ b/Build/source/texk/dvipsk/cyrfonts.map
@@ -0,0 +1,51 @@
+cmcb10 cmcb10 <cmcb10.pfb
+cmcbx10 cmcbx10 <cmcbx10.pfb
+cmcbx12 cmcbx12 <cmcbx12.pfb
+cmcbx5 cmcbx5 <cmcbx5.pfb
+cmcbx6 cmcbx6 <cmcbx6.pfb
+cmcbx7 cmcbx7 <cmcbx7.pfb
+cmcbx8 cmcbx8 <cmcbx8.pfb
+cmcbx9 cmcbx9 <cmcbx9.pfb
+cmcbxsl10 cmcbxsl10 <cmcbxsl10.pfb
+cmcbxti10 cmcbxti10 <cmcbxti10.pfb
+cmccsc10 cmccsc10 <cmccsc10.pfb
+cmccsc8 cmccsc8 <cmccsc8.pfb
+cmccsc9 cmccsc9 <cmccsc9.pfb
+cmcitt10 cmcitt10 <cmcitt10.pfb
+cmcsl10 cmcsl10 <cmcsl10.pfb
+cmcsl12 cmcsl12 <cmcsl12.pfb
+cmcsl8 cmcsl8 <cmcsl8.pfb
+cmcsl9 cmcsl9 <cmcsl9.pfb
+cmcsltt10 cmcsltt10 <cmcsltt10.pfb
+cmcss10 cmcss10 <cmcss10.pfb
+cmcss12 cmcss12 <cmcss12.pfb
+cmcss17 cmcss17 <cmcss17.pfb
+cmcss8 cmcss8 <cmcss8.pfb
+cmcss9 cmcss9 <cmcss9.pfb
+cmcssbx10 cmcssbx10 <cmcssbx10.pfb
+cmcssdc10 cmcssdc10 <cmcssdc10.pfb
+cmcssi10 cmcssi10 <cmcssi10.pfb
+cmcssi12 cmcssi12 <cmcssi12.pfb
+cmcssi17 cmcssi17 <cmcssi17.pfb
+cmcssi8 cmcssi8 <cmcssi8.pfb
+cmcssi9 cmcssi9 <cmcssi9.pfb
+cmcssq8 cmcssq8 <cmcssq8.pfb
+cmcssqi8 cmcssqi8 <cmcssqi8.pfb
+cmcti10 cmcti10 <cmcti10.pfb
+cmcti12 cmcti12 <cmcti12.pfb
+cmcti7 cmcti7 <cmcti7.pfb
+cmcti8 cmcti8 <cmcti8.pfb
+cmcti9 cmcti9 <cmcti9.pfb
+cmctt10 cmctt10 <cmctt10.pfb
+cmctt12 cmctt12 <cmctt12.pfb
+cmctt8 cmctt8 <cmctt8.pfb
+cmctt9 cmctt9 <cmctt9.pfb
+cmcu10 cmcu10 <cmcu10.pfb
+cmcyr10 cmcyr10 <cmcyr10.pfb
+cmcyr12 cmcyr12 <cmcyr12.pfb
+cmcyr17 cmcyr17 <cmcyr17.pfb
+cmcyr5 cmcyr5 <cmcyr5.pfb
+cmcyr6 cmcyr6 <cmcyr6.pfb
+cmcyr7 cmcyr7 <cmcyr7.pfb
+cmcyr8 cmcyr8 <cmcyr8.pfb
+cmcyr9 cmcyr9 <cmcyr9.pfb
diff --git a/Build/source/texk/dvipsk/debug.h b/Build/source/texk/dvipsk/debug.h
new file mode 100644
index 00000000000..b8c6e12c713
--- /dev/null
+++ b/Build/source/texk/dvipsk/debug.h
@@ -0,0 +1,23 @@
+/*
+ * Here's some stuff for debugging dvips.
+ */
+
+#ifdef DEBUG
+
+#define dd(darg) ((darg)&debug_flag)
+
+#define D_SPECIAL (1<<0)
+#define D_PATHS (1<<1)
+#define D_FONTS (1<<2)
+#define D_PAGE (1<<3)
+#define D_HEADER (1<<4)
+#define D_COMPRESS (1<<5)
+#define D_FILES (1<<6)
+#define D_MEM (1<<7)
+#define D_CONFIG (1<<8)
+
+#ifndef KPATHSEA
+#define fopen my_real_fopen
+extern FILE *my_real_fopen() ;
+#endif
+#endif /* DEBUG */
diff --git a/Build/source/texk/dvipsk/depend.mak b/Build/source/texk/dvipsk/depend.mak
new file mode 100644
index 00000000000..8345bb41715
--- /dev/null
+++ b/Build/source/texk/dvipsk/depend.mak
@@ -0,0 +1,989 @@
+$(objdir)/virtualfont.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/c-pathmx.h \
+ protos.h
+
+$(objdir)/emspecial.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/dospecial.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/tex-hush.h \
+ protos.h
+
+$(objdir)/dosection.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/fontdef.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/magstep.h \
+ protos.h
+
+$(objdir)/pprescan.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/tfmload.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/c-pathmx.h \
+ protos.h
+
+$(objdir)/skippage.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/dviinput.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/finclude.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/drawPS.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/t1part.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ t1part.h \
+ protos.h
+
+$(objdir)/loadfont.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/c-pathmx.h \
+ $(kpathseadir)/tex-glyph.h \
+ $(kpathseadir)/tex-make.h \
+ protos.h
+
+$(objdir)/hps.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/resident.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/c-stat.h \
+ $(kpathseadir)/pathsearch.h \
+ $(kpathseadir)/str-llist.h \
+ $(kpathseadir)/variable.h \
+ protos.h
+
+$(objdir)/scanpage.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/afm2tfm.obj: \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ dvips.h \
+ debug.h \
+ paths.h
+
+$(objdir)/writet1.obj: \
+ ptexmac.h \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/header.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/squeeze.obj: \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ c-auto.h
+
+$(objdir)/unpack.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/makefont.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/search.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/tex-glyph.h
+
+$(objdir)/papersiz.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/output.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/scalewidth.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h
+
+$(objdir)/color.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/dpicheck.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h
+
+$(objdir)/bbox.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/dopage.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/repack.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/prescan.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
+$(objdir)/dvips.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ $(kpathseadir)/proginit.h \
+ $(kpathseadir)/tex-hush.h \
+ $(kpathseadir)/tex-make.h \
+ protos.h
+
+$(objdir)/download.obj: \
+ dvips.h \
+ config.h \
+ $(kpathseadir)/config.h \
+ $(kpathseadir)/c-auto.h \
+ $(kpathseadir)/c-std.h \
+ $(kpathseadir)/c-unistd.h \
+ $(kpathseadir)/systypes.h \
+ $(kpathseadir)/c-memstr.h \
+ $(kpathseadir)/c-errno.h \
+ $(kpathseadir)/c-minmax.h \
+ $(kpathseadir)/c-limits.h \
+ $(kpathseadir)/c-proto.h \
+ $(gnuw32dir)/win32lib.h \
+ $(kpathseadir)/debug.h \
+ $(kpathseadir)/types.h \
+ $(kpathseadir)/lib.h \
+ $(kpathseadir)/progname.h \
+ $(kpathseadir)/c-fopen.h \
+ $(kpathseadir)/c-pathch.h \
+ $(kpathseadir)/c-ctype.h \
+ $(gnuw32dir)/oldnames.h \
+ $(kpathseadir)/tex-file.h \
+ $(kpathseadir)/c-vararg.h \
+ c-auto.h \
+ debug.h \
+ paths.h \
+ protos.h
+
diff --git a/Build/source/texk/dvipsk/depend.make b/Build/source/texk/dvipsk/depend.make
new file mode 100644
index 00000000000..0c7a43ddf2d
--- /dev/null
+++ b/Build/source/texk/dvipsk/depend.make
@@ -0,0 +1,399 @@
+afm2tfm.o: afm2tfm.c config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h dvips.h debug.h paths.h
+bbox.o: bbox.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+color.o: color.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+dopage.o: dopage.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+dosection.o: dosection.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+dospecial.o: dospecial.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/tex-hush.h \
+ protos.h
+download.o: download.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ t1part.h protos.h
+dpicheck.o: dpicheck.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h
+drawPS.o: drawPS.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+dviinput.o: dviinput.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+dvips.o: dvips.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/proginit.h \
+ $(kpathsea_srcdir)/tex-hush.h $(kpathsea_srcdir)/tex-make.h protos.h
+emspecial.o: emspecial.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+finclude.o: finclude.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h protos.h
+flib.o: flib.c
+fontdef.o: fontdef.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/magstep.h \
+ protos.h
+header.o: header.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+hps.o: hps.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h protos.h
+loadfont.o: loadfont.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-pathmx.h \
+ $(kpathsea_srcdir)/tex-glyph.h $(kpathsea_srcdir)/tex-make.h protos.h
+makefont.o: makefont.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+output.o: output.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+papersiz.o: papersiz.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+pprescan.o: pprescan.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+prescan.o: prescan.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+repack.o: repack.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+resident.o: resident.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-stat.h \
+ $(kpathsea_srcdir)/pathsearch.h $(kpathsea_srcdir)/str-llist.h \
+ $(kpathsea_srcdir)/variable.h protos.h
+scalewidth.o: scalewidth.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h
+scanpage.o: scanpage.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+search.o: search.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/tex-glyph.h
+skippage.o: skippage.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+squeeze.o: squeeze.c $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/config.h \
+ c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h
+t1part.o: t1part.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ t1part.h protos.h
+tfmload.o: tfmload.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-pathmx.h \
+ protos.h
+unpack.o: unpack.c dvips.h config.h $(kpathsea_srcdir)/config.h c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ protos.h
+virtualfont.o: virtualfont.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h \
+ $(kpathsea_srcdir)/c-limits.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h debug.h paths.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-pathmx.h \
+ protos.h
diff --git a/Build/source/texk/dvipsk/depend.mk b/Build/source/texk/dvipsk/depend.mk
new file mode 100644
index 00000000000..b1ad44559f5
--- /dev/null
+++ b/Build/source/texk/dvipsk/depend.mk
@@ -0,0 +1,409 @@
+afm2tfm.o: afm2tfm.c config.h $(kpathsea_srcdir)/config.h $(kpathsea_dir)/c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h dvips.h debug.h \
+ paths.h
+bbox.o: bbox.c dvips.h config.h $(kpathsea_srcdir)/config.h $(kpathsea_dir)/c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+color.o: color.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+dopage.o: dopage.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+dosection.o: dosection.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+dospecial.o: dospecial.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/tex-hush.h protos.h
+download.o: download.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+dpicheck.o: dpicheck.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h
+drawPS.o: drawPS.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+dviinput.o: dviinput.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+dvips.o: dvips.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/proginit.h $(kpathsea_srcdir)/tex-hush.h $(kpathsea_srcdir)/tex-make.h \
+ protos.h
+emspecial.o: emspecial.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+finclude.o: finclude.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+flib.o: flib.c
+fontdef.o: fontdef.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/magstep.h protos.h
+header.o: header.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+hps.o: hps.c dvips.h config.h $(kpathsea_srcdir)/config.h $(kpathsea_dir)/c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+loadfont.o: loadfont.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/c-pathmx.h $(kpathsea_srcdir)/tex-glyph.h $(kpathsea_srcdir)/tex-make.h \
+ protos.h
+makefont.o: makefont.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+output.o: output.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+papersiz.o: papersiz.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+pprescan.o: pprescan.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+prescan.o: prescan.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+repack.o: repack.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+resident.o: resident.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/c-stat.h \
+ $(kpathsea_srcdir)/pathsearch.h $(kpathsea_srcdir)/str-llist.h $(kpathsea_srcdir)/variable.h \
+ protos.h
+scalewidth.o: scalewidth.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h
+scanpage.o: scanpage.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+search.o: search.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/tex-glyph.h $(kpathsea_srcdir)/absolute.h
+skippage.o: skippage.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+squeeze.o: squeeze.c $(kpathsea_srcdir)/config.h $(kpathsea_dir)/c-auto.h \
+ $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ c-auto.h
+t1part.o: t1part.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ t1part.h protos.h
+tfmload.o: tfmload.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/c-pathmx.h protos.h
+unpack.o: unpack.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ protos.h
+virtualfont.o: virtualfont.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ $(kpathsea_srcdir)/c-pathmx.h protos.h
+writet1.o: writet1.c dvips.h config.h $(kpathsea_srcdir)/config.h \
+ $(kpathsea_dir)/c-auto.h $(kpathsea_srcdir)/c-std.h \
+ $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \
+ $(kpathsea_srcdir)/c-memstr.h \
+ $(kpathsea_srcdir)/c-errno.h \
+ $(kpathsea_srcdir)/c-minmax.h $(kpathsea_srcdir)/c-limits.h \
+ $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/debug.h \
+ $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/progname.h \
+ $(kpathsea_srcdir)/c-fopen.h \
+ $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-ctype.h \
+ $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/c-vararg.h c-auto.h debug.h paths.h \
+ ptexmac.h
diff --git a/Build/source/texk/dvipsk/dopage.c b/Build/source/texk/dvipsk/dopage.c
new file mode 100644
index 00000000000..74b2cd74b34
--- /dev/null
+++ b/Build/source/texk/dvipsk/dopage.c
@@ -0,0 +1,422 @@
+/*
+ * Main page drawing procedure. Interprets the page commands. A simple
+ * (if lengthy) case statement interpreter.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#include <math.h>
+/*
+ * The external routines we use:
+ */
+#include "protos.h"
+/*
+ * Now the external variables.
+ */
+extern fontdesctype *curfnt ;
+extern fontmaptype *ffont ;
+extern quarterword *curpos, *curlim ;
+extern integer hh, vv ;
+extern integer hoff, voff ;
+extern Boolean noomega ;
+/*
+ * CONVENTION: conv -> horizontial converter
+ * vconv -> vertical converter
+ */
+extern real conv ;
+extern real vconv ;
+
+extern FILE *bitfile ;
+extern int actualdpi ;
+extern int vactualdpi ;
+extern frametype frames[] ;
+extern int maxdrift ;
+extern int vmaxdrift ;
+
+#ifdef XENIX
+#define PixRound(x) ((integer)(x + (iconv >> 1)) / iconv)
+#define VPixRound(x) ((integer)(x + (viconv >> 1)) / viconv)
+#else
+#ifdef __THINK__
+#define PixRound(x) ((integer)(x + (iconv >> 1)) / iconv)
+#define VPixRound(x) ((integer)(x + (viconv >> 1)) / viconv)
+#else
+#define PixRound(x) ((integer)(floor(((x) * conv) + 0.5)))
+#define VPixRound(x) ((integer)(floor(((x) * vconv) + 0.5)))
+#endif
+#endif
+/*
+ * Now we have the dopage procedure.
+ * Most error checking is suppressed because the prescan has already
+ * verified that the DVI data is OK....except for stack over/underflow.
+ */
+struct dvistack {
+ integer hh, vv ;
+ integer h, v, w, x, y, z ;
+} stack[STACKSIZE] ;
+#ifdef HPS
+extern int pagecounter ;
+extern Boolean HPS_FLAG ;
+extern Boolean inHTMLregion ;
+integer vvmem, hhmem ;
+integer pushcount = 0 ;
+Boolean PAGEUS_INTERUPPTUS = 0 ;
+Boolean NEED_NEW_BOX = 0 ;
+extern integer HREF_COUNT ;
+extern int current_pushcount ;
+integer H_BREAK ; /* An empirical parameter for guessing line breaks; needs
+ dpi dependence */
+#endif
+void
+dopage P1H(void)
+{
+ register shalfword cmd ;
+ register integer p ;
+ register chardesctype *cd ;
+ register integer h ;
+ register fontmaptype *cfnt ;
+ register frametype *frp = frames ;
+ integer fnt ;
+ integer mychar;
+ int charmove ;
+ struct dvistack *sp = stack ;
+ integer v, w, x, y, z ;
+ integer roundpos ;
+ integer thinspace ;
+ integer vertsmallspace ;
+#ifdef XENIX
+ integer iconv ;
+ integer viconv ;
+
+ iconv = (integer)(1.0 / conv + 0.5) ;
+ viconv = (integer)(1.0 / vconv + 0.5) ;
+#else
+#ifdef __THINK__
+ integer iconv ;
+ integer viconv ;
+
+ iconv = (integer)(1.0 / conv + 0.5) ;
+ viconv = (integer)(1.0 / vconv + 0.5) ;
+#endif
+#endif
+#ifdef EMTEX
+ emclear() ;
+#endif
+ pageinit() ;
+
+ bopcolor(1) ;
+ thinspace = (integer)(0.025*DPI/conv) ; /* 0.025 inches */
+ vertsmallspace = (integer)(0.025*VDPI/vconv) ; /* 0.025 inches */
+#ifdef HPS
+ if (HPS_FLAG) pagecounter++ ;
+ H_BREAK = (30 * DPI / 400 ) ; /* 30 seems to have worked well at 400 dpi */
+#endif
+ w = x = y = z = 0 ;
+ h = (integer) (DPI / conv * hoff / 4736286.72) ;
+ v = (integer) (DPI / conv * voff / 4736286.72) ;
+ hh = PixRound(h) ;
+ vv = PixRound(v) ;
+ curfnt = NULL ;
+ curpos = NULL ;
+ charmove = 0 ;
+beginloop:
+ switch (cmd=dvibyte()) {
+case 138: goto beginloop ; /* nop command does nuttin */
+/*
+ * For put1 commands, we subtract the width of the character before
+ * dropping through to the normal character setting routines. This
+ */
+case 134: /* put2 */
+ if (noomega) error("! synch") ;
+ mychar = dvibyte() ;
+ mychar = (mychar << 8) + dvibyte() ;
+ charmove = 0 ;
+ goto dochar ;
+case 129: /* set2 */
+ if (noomega) error("! synch") ;
+ mychar = dvibyte() ;
+ mychar = (mychar << 8) + dvibyte() ;
+ charmove = 1 ;
+ goto dochar ;
+case 133: /* put1 */
+ mychar = dvibyte() ;
+ charmove = 0 ;
+ goto dochar ;
+case 128: cmd = dvibyte() ; /* set1 command drops through to setchar */
+default: /* these are commands 0 (setchar0) thru 127 (setchar127) */
+ mychar = cmd ;
+ charmove = 1 ;
+dochar:
+#ifdef HPS
+ if (HPS_FLAG && PAGEUS_INTERUPPTUS) {
+ HREF_COUNT-- ;
+ start_new_box() ;
+ PAGEUS_INTERUPPTUS = 0 ;
+ }
+ if (HPS_FLAG && NEED_NEW_BOX) {
+ vertical_in_hps();
+ NEED_NEW_BOX = 0;
+ }
+#endif
+ cd = &(curfnt->chardesc[mychar]) ;
+ if (cd->flags & EXISTS) {
+ if (curfnt->loaded == 2) { /* virtual character being typeset */
+ if (charmove) {
+ sp->hh = hh + cd->pixelwidth ;
+ sp->h = h + cd->TFMwidth ;
+ } else {
+ sp->hh = hh ; sp->h = h ;
+ }
+ sp->vv = vv ; sp-> v = v ;
+ sp->w = w ; sp->x = x ; sp->y = y ; sp->z = z ;
+ if (++sp >= &stack[STACKSIZE]) error("! Out of stack space") ;
+ w = x = y = z = 0 ; /* will be in relative units at new stack level */
+ frp->curp = curpos ;
+ frp->curl = curlim ;
+ frp->ff = ffont ;
+ frp->curf = curfnt ;
+ if (++frp == &frames[MAXFRAME] )
+ error("! virtual recursion stack overflow") ;
+ curpos = cd->packptr + 2 ;
+ curlim = curpos + (256*(long)(*cd->packptr)+(*(cd->packptr+1))) ;
+ ffont = curfnt->localfonts ;
+ if (ffont) {
+ curfnt = ffont->desc ;
+ thinspace = curfnt->thinspace ;
+ } else {
+ curfnt = NULL ;
+ thinspace = vertsmallspace ;
+ }
+ goto beginloop ;
+ }
+ drawchar(cd, mychar) ;
+ }
+ if (charmove) {
+ h += cd->TFMwidth ;
+ hh += cd->pixelwidth ;
+ }
+ goto setmotion ;
+case 130: case 131: case 135: case 136: case 139:
+case 247: case 248: case 249: case 250: case 251: case 252: case 253:
+case 254: case 255: /* unimplemented or illegal commands */
+ error("! synch") ;
+case 132: case 137: /* rules */
+ { integer ry, rx , rxx, ryy ;
+ ry = signedquad() ; rx = signedquad() ;
+ if (rx>0 && ry>0) {
+ if (curpos) {
+ rx = scalewidth(rx, (frp-1)->curf->scaledsize) ;
+ ry = scalewidth(ry, (frp-1)->curf->scaledsize) ;
+ }
+ rxx = (int)(conv * rx + 0.9999999) ;
+ ryy = (int)(vconv * ry + 0.9999999) ;
+ drawrule(rxx, ryy) ;
+ } else
+ rxx = 0 ;
+ if (cmd == 137) goto beginloop ;
+ h += rx ; hh += rxx ;
+ goto setmotion ;
+ }
+case 141: /* push */
+#ifdef HPS
+ if (HPS_FLAG) pushcount++ ;
+ /* if (HPS_FLAG && PAGEUS_INTERUPPTUS) {
+ HREF_COUNT-- ;
+ start_new_box() ;
+ PAGEUS_INTERUPPTUS = 0 ;
+ } */
+ if (HPS_FLAG && NEED_NEW_BOX) {
+ vertical_in_hps();
+ NEED_NEW_BOX = 0;
+ }
+ /* printf("push %i, %i\n", pushcount, inHTMLregion) ; */
+#endif
+ sp->hh = hh ; sp->vv = vv ; sp->h = h ; sp->v = v ;
+ sp->w = w ; sp->x = x ; sp->y = y ; sp->z = z ;
+ if (++sp >= &stack[STACKSIZE]) error("! Out of stack space") ;
+ goto beginloop ;
+case 140: /* eop or end of virtual character */
+ if (curpos == NULL) { /* eop */
+#ifdef HPS
+ if (HPS_FLAG && inHTMLregion) PAGEUS_INTERUPPTUS = 1 ;
+ /* printf("Page interrupted"); */
+#endif
+ break;
+ }
+ --frp ;
+ curfnt = frp->curf ;
+ thinspace = (curfnt) ? curfnt->thinspace : vertsmallspace ;
+ ffont = frp->ff ;
+ curlim = frp->curl ;
+ curpos = frp->curp ;
+ if (hh < (sp-1)->hh+2 && hh > (sp-1)->hh-2)
+ (sp-1)->hh = hh; /* retain `intelligence' of pixel width, if close */
+ /* falls through */
+case 142: /* pop */
+#ifdef HPS
+ pushcount-- ;
+ /* printf("pop %i\n", pushcount) ; */
+#endif
+ if (--sp < stack) error("! More pops than pushes") ;
+#ifdef HPS
+ if (HPS_FLAG) {
+ hhmem = hh ; vvmem = vv ;
+ }
+#endif
+ hh = sp->hh ; vv = sp->vv ; h = sp->h ; v = sp->v ;
+ w = sp->w ; x = sp->x ; y = sp->y ; z = sp->z ;
+#ifdef HPS
+ if (HPS_FLAG && inHTMLregion && (hhmem - hh > H_BREAK) && (pushcount > 0) &&
+ (pushcount < current_pushcount))
+ end_current_box() ;
+#endif
+ goto beginloop ;
+case 143: /* right1 */
+ p = signedbyte() ; goto horizontalmotion ;
+case 144: /* right2 */
+ p = signedpair() ; goto horizontalmotion ;
+case 145: /* right3 */
+ p = signedtrio() ; goto horizontalmotion ;
+case 146: /* right4 */
+ p = signedquad() ; goto horizontalmotion ;
+case 147: /* w0 */
+ p = w ; goto horizontalmotion ;
+case 148: /* w1 */
+ p = w = signedbyte() ; goto horizontalmotion ;
+case 149: /* w2 */
+ p = w = signedpair() ; goto horizontalmotion ;
+case 150: /* w3 */
+ p = w = signedtrio() ; goto horizontalmotion ;
+case 151: /* w4 */
+ p = w = signedquad() ; goto horizontalmotion ;
+case 152: /* x0 */
+ p = x ; goto horizontalmotion ;
+case 153: /* x1 */
+ p = x = signedbyte() ; goto horizontalmotion ;
+case 154: /* x2 */
+ p = x = signedpair() ; goto horizontalmotion ;
+case 155: /* x3 */
+ p = x = signedtrio() ; goto horizontalmotion ;
+case 156: /* x4 */
+ p = x = signedquad() ; goto horizontalmotion ;
+case 157: /* down1 */
+ p = signedbyte() ; goto verticalmotion ;
+case 158: /* down2 */
+ p = signedpair() ; goto verticalmotion ;
+case 159: /* down3 */
+ p = signedtrio() ; goto verticalmotion ;
+case 160: /* down4 */
+ p = signedquad() ; goto verticalmotion ;
+case 161: /* y0 */
+ p = y ; goto verticalmotion ;
+case 162: /* y1 */
+ p = y = signedbyte() ; goto verticalmotion ;
+case 163: /* y2 */
+ p = y = signedpair() ; goto verticalmotion ;
+case 164: /* y3 */
+ p = y = signedtrio() ; goto verticalmotion ;
+case 165: /* y4 */
+ p = y = signedquad() ; goto verticalmotion ;
+case 166: /* z0 */
+ p = z ; goto verticalmotion ;
+case 167: /* z1 */
+ p = z = signedbyte() ; goto verticalmotion ;
+case 168: /* z2 */
+ p = z = signedpair() ; goto verticalmotion ;
+case 169: /* z3 */
+ p = z = signedtrio() ; goto verticalmotion ;
+case 170: /* z4 */
+ p = z = signedquad() ; goto verticalmotion ;
+case 171: case 172: case 173: case 174: case 175: case 176: case 177:
+case 178: case 179: case 180: case 181: case 182: case 183: case 184:
+case 185: case 186: case 187: case 188: case 189: case 190: case 191:
+case 192: case 193: case 194: case 195: case 196: case 197: case 198:
+case 199: case 200: case 201: case 202: case 203: case 204: case 205:
+case 206: case 207: case 208: case 209: case 210: case 211: case 212:
+case 213: case 214: case 215: case 216: case 217: case 218: case 219:
+case 220: case 221: case 222: case 223: case 224: case 225: case 226:
+case 227: case 228: case 229: case 230: case 231: case 232: case 233:
+case 234: case 235: case 236: case 237: case 238: /* font selection commands */
+ if (cmd < 235) fnt = cmd - 171 ; /* fntnum0 thru fntnum63 */
+ else {
+ fnt = dvibyte() ;
+ while (cmd-- > 235)
+ fnt = (fnt << 8) + dvibyte() ;
+ }
+ for (cfnt=ffont; cfnt; cfnt = cfnt->next)
+ if (cfnt->fontnum == fnt) break ;
+ curfnt = cfnt->desc ;
+ thinspace = curfnt->thinspace ;
+ goto beginloop ;
+case 243: case 244: case 245: case 246: /*fntdef1 */
+ skipover(cmd - 230) ;
+ skipover(dvibyte() + dvibyte()) ;
+ goto beginloop ;
+case 239: /* xxx1 */
+ p = dvibyte() ;
+ dospecial(p) ;
+ goto beginloop ;
+case 240: /* xxx2 */
+ p = twobytes() ;
+ dospecial(p) ;
+ goto beginloop ;
+case 241: /* xxx3 */
+ p = threebytes() ;
+ dospecial(p) ;
+ goto beginloop ;
+case 242: /* xxx4 */
+ p = signedquad() ;
+ dospecial(p) ;
+ goto beginloop ;
+
+/*
+ * The calculations here are crucial to the appearance of the document.
+ * If the motion is small, we round the amount of relative motion; otherwise,
+ * we update the position and round the new position. Then we check to
+ * insure that the rounded position didn't accumulate an error that was
+ * greater than maxdrift.
+ */
+verticalmotion:
+/* vertical motion cases */
+ if (curpos)
+ p = scalewidth(p, (frp-1)->curf->scaledsize) ;
+ v += p ;
+ if (p >= vertsmallspace) vv = VPixRound(v) ;
+ else if (p <= -vertsmallspace) vv = VPixRound(v) ;
+ else
+ { vv += VPixRound(p) ;
+ roundpos = VPixRound(v) ;
+ if (roundpos - vv > vmaxdrift) vv = roundpos - vmaxdrift ;
+ else if (vv - roundpos > vmaxdrift) vv = roundpos + vmaxdrift ;
+ }
+#ifdef HPS
+ /* printf("Doing vertical motion: p = %i, v = %i, vv = %i\n",p,v,vv); */
+ /* printf("inHTMLregion %i\n", inHTMLregion) ; */
+ if (HPS_FLAG && inHTMLregion) NEED_NEW_BOX = 1 /* vertical_in_hps() */;
+#endif
+ goto beginloop ;
+/*
+ * Horizontal motion is analogous. We know the exact width of each
+ * character in pixels. Kerning is distinguished from space between
+ * words if it's less than a thinspace and not more negative than would
+ * occur when an accent is being positioned by backspacing.
+ */
+horizontalmotion:
+/* horizontal motion cases */
+ if (curpos)
+ p = scalewidth(p, (frp-1)->curf->scaledsize) ;
+ h += p ;
+ if (p >= thinspace || p <= -6 * thinspace) {
+ hh = PixRound(h) ; goto beginloop ;
+ }
+ else hh += PixRound(p) ;
+#ifdef HPS
+ /* printf("Doing horizontal motion: p = %i, h = %i, hh = %i\n",p,h,hh); */
+#endif
+setmotion:
+ roundpos = PixRound(h) ;
+ if (roundpos - hh > maxdrift) { hh = roundpos - maxdrift ; }
+ else if (hh - roundpos > maxdrift) { hh = roundpos + maxdrift ; }
+goto beginloop ;
+
+ } /* end of the big switch */
+ pageend() ;
+}
diff --git a/Build/source/texk/dvipsk/dosection.c b/Build/source/texk/dvipsk/dosection.c
new file mode 100644
index 00000000000..82d2e2134bc
--- /dev/null
+++ b/Build/source/texk/dvipsk/dosection.c
@@ -0,0 +1,306 @@
+/*
+ * Code to output PostScript commands for one section of the document.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+/*
+ * These are the external routines we call.
+ */
+#include "protos.h"
+
+/*
+ * These are the external variables we access.
+ */
+extern shalfword linepos ;
+extern FILE *dvifile ;
+extern FILE *bitfile ;
+extern integer pagenum ;
+extern long bytesleft ;
+extern quarterword *raster ;
+extern int quiet ;
+extern Boolean reverse, multiplesects, disablecomments ;
+extern Boolean evenpages, oddpages, pagelist ;
+extern int actualdpi ;
+extern int vactualdpi ;
+extern int prettycolumn ;
+extern integer hpapersize, vpapersize ;
+extern integer pagecopies ;
+static int psfont ;
+extern double mag ;
+extern char *fulliname ;
+#ifdef HPS
+int pagecounter ;
+extern Boolean HPS_FLAG ;
+#endif
+/*
+ * Now we have the main procedure.
+ */
+void
+dosection P2C(sectiontype *, s, int, c)
+{
+ charusetype *cu ;
+ integer prevptr ;
+ int np ;
+ int k ;
+ integer thispage = 0 ;
+ char buf[104];
+
+ dopsfont(s) ;
+#ifdef HPS
+ if (HPS_FLAG) pagecounter = 0;
+#endif
+
+ if (multiplesects) {
+ setup() ;
+ }
+ cmdout("TeXDict") ;
+ cmdout("begin") ;
+ numout(hpapersize) ;
+ numout(vpapersize) ;
+ doubleout(mag) ;
+ numout((integer)DPI) ;
+ numout((integer)VDPI) ;
+ sprintf(buf, "(%.99s)", fulliname) ;
+ cmdout(buf) ;
+ cmdout("@start") ;
+ if (multiplesects)
+ cmdout("bos") ;
+/*
+ * We insure raster is even-word aligned, because download might want that.
+ */
+ if (bytesleft & 1) {
+ bytesleft-- ;
+ raster++ ;
+ }
+ cleanres() ;
+ cu = (charusetype *) (s + 1) ;
+ psfont = 1 ;
+ while (cu->fd) {
+ if (cu->psfused)
+ cu->fd->psflag = EXISTS ;
+ download(cu++, psfont++) ;
+ }
+ fonttableout() ;
+ if (! multiplesects) {
+ cmdout("end") ;
+ setup() ;
+ }
+ for (cu=(charusetype *)(s+1); cu->fd; cu++)
+ cu->fd->psflag = 0 ;
+ while (c > 0) {
+ c-- ;
+ prevptr = s->bos ;
+ if (! reverse)
+ (void)fseek(dvifile, (long)prevptr, 0) ;
+ np = s->numpages ;
+ while (np-- != 0) {
+ if (reverse)
+ (void)fseek(dvifile, (long)prevptr, 0) ;
+ pagenum = signedquad() ;
+ if ((evenpages && (pagenum & 1)) || (oddpages && (pagenum & 1)==0) ||
+ (pagelist && !InPageList(pagenum))) {
+ if (reverse) {
+ skipover(36) ;
+ prevptr = signedquad()+1 ;
+ } else {
+ skipover(40) ;
+ skippage() ;
+ skipnop() ;
+ }
+ ++np ; /* this page wasn't counted for s->numpages */
+ continue;
+ }
+/*
+ * We want to take the base 10 log of the number. It's probably
+ * small, so we do it quick.
+ */
+ if (! quiet) {
+ int t = pagenum, i = 0 ;
+ if (t < 0) {
+ t = -t ;
+ i++ ;
+ }
+ do {
+ i++ ;
+ t /= 10 ;
+ } while (t > 0) ;
+ if (pagecopies < 20)
+ i += pagecopies - 1 ;
+ if (i + prettycolumn > STDOUTSIZE) {
+ fprintf(stderr, "\n") ;
+ prettycolumn = 0 ;
+ }
+ prettycolumn += i + 1 ;
+#ifdef SHORTINT
+ (void)fprintf(stderr, "[%ld", pagenum) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr, "[%d", pagenum) ;
+#endif /* ~SHORTINT */
+ (void)fflush(stderr) ;
+ }
+ skipover(36) ;
+ prevptr = signedquad()+1 ;
+ for (k=0; k<pagecopies; k++) {
+ if (k == 0) {
+ if (pagecopies > 1)
+ thispage = ftell(dvifile) ;
+ } else {
+ (void)fseek(dvifile, (long)thispage, 0) ;
+ if (prettycolumn + 1 > STDOUTSIZE) {
+ (void)fprintf(stderr, "\n") ;
+ prettycolumn = 0 ;
+ }
+ (void)fprintf(stderr, ".") ;
+ (void)fflush(stderr) ;
+ prettycolumn++ ;
+ }
+ dopage() ;
+ }
+ if (! quiet) {
+ (void)fprintf(stderr, "] ") ;
+ (void)fflush(stderr) ;
+ prettycolumn += 2 ;
+ }
+ if (! reverse)
+ (void)skipnop() ;
+ }
+ }
+ if (! multiplesects && ! disablecomments) {
+ newline() ;
+ (void)fprintf(bitfile, "%%%%Trailer\n") ;
+ }
+ if (multiplesects) {
+ if (! disablecomments) {
+ newline() ;
+ (void)fprintf(bitfile, "%%DVIPSSectionTrailer\n") ;
+ }
+ cmdout("eos") ;
+ cmdout("end") ;
+ }
+#ifdef HPS
+ if (HPS_FLAG) cmdout("\nend") ; /* close off HPSDict */
+#endif
+ if (multiplesects && ! disablecomments) {
+ newline() ;
+ (void)fprintf(bitfile, "%%DVIPSEndSection\n") ;
+ linepos = 0 ;
+ }
+}
+/*
+ * Handle a list of pages for dvips. Code based on dvi2ps 2.49,
+ * maintained by Piet van Oostrum, piet@cs.ruu.nl. Collected and
+ * modularized for inclusion in dvips by metcalf@lcs.mit.edu.
+ */
+
+#include <ctype.h>
+#define MAXPAGE (1000000000) /* assume no pages out of this range */
+struct p_list_str {
+ struct p_list_str *next; /* next in a series of alternates */
+ integer ps_low, ps_high; /* allowed range */
+} *ppages = 0; /* the list of allowed pages */
+
+/*-->InPageList*/
+/**********************************************************************/
+/****************************** InPageList **************************/
+/**********************************************************************/
+/* Return true iff i is one of the desired output pages */
+
+int InPageList P1C(integer, i)
+{
+ register struct p_list_str *pl = ppages;
+
+ while (pl) {
+ if ( i >= pl -> ps_low && i <= pl -> ps_high)
+ return 1; /* success */
+ pl = pl -> next;
+ }
+ return 0;
+}
+
+void InstallPL P2C(integer, pslow, integer, pshigh)
+{
+ register struct p_list_str *pl;
+
+ pl = (struct p_list_str *)mymalloc((integer)(sizeof *pl));
+ pl -> next = ppages;
+ pl -> ps_low = pslow;
+ pl -> ps_high = pshigh;
+ ppages = pl;
+}
+
+/* Parse a string representing a list of pages. Return 0 iff ok. As a
+ side effect, the page selection(s) is (are) prepended to ppages. */
+
+int
+ParsePages P1C(register char *, s)
+{
+ register int c ; /* current character */
+ register integer n = 0, /* current numeric value */
+ innumber; /* true => gathering a number */
+ integer ps_low = 0, ps_high = 0 ;
+ int range, /* true => saw a range indicator */
+ negative = 0; /* true => number being built is negative */
+
+#define white(x) ((x) == ' ' || (x) == '\t' || (x) == ',')
+
+ range = 0;
+ innumber = 0;
+ for (;;) {
+ c = *s++;
+ if ( !innumber && !range) {/* nothing special going on */
+ if (c == 0)
+ return 0;
+ if (white (c))
+ continue;
+ }
+ if (c == '-' && !innumber) {
+ innumber++;
+ negative++;
+ n = 0;
+ continue;
+ }
+ if ('0' <= c && c <= '9') { /* accumulate numeric value */
+ if (!innumber) {
+ innumber++;
+ negative = 0;
+ n = c - '0';
+ continue;
+ }
+ n *= 10;
+ n += negative ? '0' - c : c - '0';
+ continue;
+ }
+ if (c == '-' || c == ':') {/* here's a range */
+ if (range)
+ return (-1);
+ if (innumber) { /* have a lower bound */
+ ps_low = n;
+ }
+ else
+ ps_low = -MAXPAGE;
+ range++;
+ innumber = 0;
+ continue;
+ }
+ if (c == 0 || white (c)) {/* end of this range */
+ if (!innumber) { /* no upper bound */
+ ps_high = MAXPAGE;
+ if (!range) /* no lower bound either */
+ ps_low = -MAXPAGE;
+ }
+ else { /* have an upper bound */
+ ps_high = n;
+ if (!range) { /* no range => lower bound == upper */
+ ps_low = ps_high;
+ }
+ }
+ InstallPL (ps_low, ps_high);
+ if (c == 0)
+ return 0;
+ range = 0;
+ innumber = 0;
+ continue;
+ }
+ return (-1);
+ }
+#undef white
+}
diff --git a/Build/source/texk/dvipsk/dospecial.c b/Build/source/texk/dvipsk/dospecial.c
new file mode 100644
index 00000000000..34e0dacdcb1
--- /dev/null
+++ b/Build/source/texk/dvipsk/dospecial.c
@@ -0,0 +1,962 @@
+/*
+ * This routine handles special commands;
+ * predospecial() is for the prescan, dospecial() for the real thing.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+
+#ifdef KPATHSEA
+#include <kpathsea/c-ctype.h>
+#include <kpathsea/tex-hush.h>
+#else /* ! KPATHSEA */
+#include <ctype.h>
+#include <stdlib.h>
+#ifndef WIN32
+extern int atoi();
+extern int system();
+#endif /* WIN32*/
+#endif
+/*
+ * These are the external routines called:
+ */
+/**/
+#include "protos.h"
+
+/* IBM: color - end */
+#ifdef HPS
+extern Boolean PAGEUS_INTERUPPTUS ;
+extern integer HREF_COUNT ;
+extern Boolean NEED_NEW_BOX ;
+extern Boolean HPS_FLAG ;
+#endif
+extern char errbuf[] ;
+extern shalfword linepos;
+extern Boolean usesspecial ;
+extern Boolean usescolor ; /* IBM: color */
+extern int landscape ;
+extern char *paperfmt ;
+extern char *nextstring;
+extern char *maxstring;
+extern char *oname;
+extern FILE *bitfile;
+extern int quiet;
+extern fontdesctype *curfnt ;
+extern int actualdpi ;
+extern int vactualdpi ;
+extern integer hh, vv;
+extern int lastfont ;
+extern real conv ;
+extern real vconv ;
+extern integer hpapersize, vpapersize ;
+extern Boolean pprescan ;
+#ifndef KPATHSEA
+extern char *figpath ;
+#endif
+extern int prettycolumn ;
+extern Boolean disablecomments ;
+
+#ifdef DEBUG
+extern integer debug_flag;
+#endif
+
+static int specialerrors = 20 ;
+
+struct bangspecial {
+ struct bangspecial *next ;
+ char actualstuff[1] ; /* more space will actually be allocated */
+} *bangspecials = NULL ;
+
+void specerror P1C(char *, s)
+{
+ if (specialerrors > 0
+#ifdef KPATHSEA
+ && !kpse_tex_hush ("special")
+#endif
+ ) {
+ error(s) ;
+ specialerrors-- ;
+ } else if (specialerrors == 0
+#ifdef KPATHSEA
+ && !kpse_tex_hush ("special")
+#endif
+ ) {
+ error("more errors in special, being ignored . . .") ;
+ error("(perhaps dvips doesn't support your macro package?)");
+ specialerrors-- ;
+ }
+}
+
+static void trytobreakout P1C(register char *, p)
+{
+ register int i ;
+ register int instring = 0 ;
+ int lastc = 0 ;
+
+ i = 0 ;
+ (void)putc('\n', bitfile) ;
+ while (*p) {
+ if (i > 65 && *p == ' ' && instring == 0) {
+ (void)putc('\n', bitfile) ;
+ i = 0 ;
+ } else {
+ (void)putc(*p, bitfile) ;
+ i++ ;
+ }
+ if (*p == '(' && lastc != '\\')
+ instring = 1 ;
+ else if (*p == ')' && lastc != '\\')
+ instring = 0 ;
+ lastc = *p ;
+ p++ ;
+ }
+ (void)putc('\n', bitfile) ;
+}
+
+static void dobs P1C(register struct bangspecial *, q)
+{
+ if (q) {
+ dobs(q->next) ;
+ trytobreakout(q->actualstuff) ;
+ }
+}
+
+void
+outbangspecials P1H(void) {
+ if (bangspecials) {
+ cmdout("TeXDict") ;
+ cmdout("begin") ;
+ cmdout("@defspecial\n") ;
+ dobs(bangspecials) ;
+ cmdout("\n@fedspecial") ;
+ cmdout("end") ;
+ }
+}
+
+/* We recommend that new specials be handled by the following general
+ * (and extensible) scheme, in which the user specifies one or more
+ * `key=value' pairs separated by spaces.
+ * The known keys are given in KeyTab; they take values
+ * of one of the following types:
+ *
+ * None: no value, just a keyword (in which case the = sign is omitted)
+ * String: the value should be "<string without double-quotes"
+ * or '<string without single-quotes'
+ * Integer: the value should be a decimal integer (%d format)
+ * Number: the value should be a decimal integer or real (%f format)
+ * Dimension: like Number, but will be multiplied by the scaledsize
+ * of the current font and converted to default PostScript units
+ * (Actually, strings are allowed in all cases; the delimiting quotes
+ * are simply stripped off if present.)
+ *
+ */
+
+typedef enum {None, String, Integer, Number, Dimension} ValTyp;
+typedef struct {
+ char *Entry;
+ ValTyp Type;
+} KeyDesc;
+
+#define NKEYS (sizeof(KeyTab)/sizeof(KeyTab[0]))
+
+KeyDesc KeyTab[] = {{"psfile", String}, /* j==0 in the routine below */
+ {"ifffile", String}, /* j==1 */
+ {"tekfile", String}, /* j==2 */
+ {"hsize", Number},
+ {"vsize", Number},
+ {"hoffset", Number},
+ {"voffset", Number},
+ {"hscale", Number},
+ {"vscale", Number},
+ {"angle", Number},
+ {"llx", Number},
+ {"lly", Number},
+ {"urx", Number},
+ {"ury", Number},
+ {"rwi", Number},
+ {"rhi", Number},
+ {"clip", None}};
+
+#ifndef KPATHSEA
+#define TOLOWER Tolower
+#ifdef VMS
+#ifndef __GNUC__ /* GNUC tolower is too simple */
+#define Tolower tolower
+#endif
+#else
+#ifdef VMCMS /* IBM: VM/CMS */
+#define Tolower __tolower
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+#define Tolower __tolower
+#else
+/*
+ * compare strings, ignore case
+ */
+char Tolower P1C(register char, c)
+{
+ if ('A' <= c && c <= 'Z')
+ return(c+32) ;
+ else
+ return(c) ;
+}
+#endif
+#endif /* IBM: VM/CMS */
+#endif
+#endif /* !KPATHSEA */
+int IsSame P2C(char *, a, char *, b)
+{
+ for( ; *a != '\0'; ) {
+ if( TOLOWER(*a) != TOLOWER(*b) )
+ return( 0 );
+ a++ ;
+ b++ ;
+ }
+ return( *b == '\0' );
+}
+
+char *KeyStr, *ValStr ; /* Key and String values found */
+long ValInt ; /* Integer value found */
+float ValNum ; /* Number or Dimension value found */
+
+char *GetKeyVal P2C(char *, str, int *, tno) /* returns NULL if none found, else next scan point */
+ /* str : starting point for scan */
+ /* tno : table entry number of keyword, or -1 if keyword not found */
+{
+ register char *s ;
+ register int i ;
+ register char t ;
+
+ for (s=str; *s <= ' ' && *s; s++) ; /* skip over blanks */
+ if (*s == '\0')
+ return (NULL) ;
+ KeyStr = s ;
+ while (*s>' ' && *s!='=') s++ ;
+ if (0 != (t = *s))
+ *s++ = 0 ;
+
+ for(i=0; i<NKEYS; i++)
+ if( IsSame(KeyStr, KeyTab[i].Entry) )
+ goto found ;
+ *tno = -1;
+ return (s) ;
+
+found: *tno = i ;
+ if (KeyTab[i].Type == None)
+ return (s) ;
+
+ if (t && t <= ' ') {
+ for (; *s <= ' ' && *s; s++) ; /* now look for the value part */
+ if ((t = *s)=='=')
+ s++ ;
+ }
+ ValStr = "" ;
+ if ( t == '=' ) {
+ while (*s <= ' ' && *s)
+ s++ ;
+ if (*s=='\'' || *s=='\"')
+ t = *s++ ; /* get string delimiter */
+ else t = ' ' ;
+ ValStr = s ;
+ while (*s!=t && *s)
+ s++ ;
+ if (*s)
+ *s++ = 0 ;
+ }
+ switch (KeyTab[i].Type) {
+ case Integer:
+ if(sscanf(ValStr,"%ld",&ValInt)!=1) {
+ sprintf(errbuf,"Non-integer value (%s) given for keyword %s",
+ ValStr, KeyStr) ;
+ specerror(errbuf) ;
+ ValInt = 0 ;
+ }
+ break ;
+ case Number:
+ case Dimension:
+ if(sscanf(ValStr,"%f",&ValNum)!=1) {
+ sprintf(errbuf,"Non-numeric value (%s) given for keyword %s",
+ ValStr, KeyStr) ;
+ specerror(errbuf) ;
+ ValNum = 0.0 ;
+ }
+ if (KeyTab[i].Type==Dimension) {
+ if (curfnt==NULL)
+ error("! No font selected") ;
+ ValNum = ValNum * ((double)curfnt->scaledsize) * conv * 72 / DPI ;
+ }
+ break ;
+ default: break ;
+ }
+ return (s) ;
+}
+
+/*
+ * Now our routines. We get the number of bytes specified and place them
+ * into the string buffer, and then parse it. Numerous conventions are
+ * supported here for historical reasons.
+ *
+ * To support GNUplot's horribly long specials, we go ahead and malloc a
+ * new string buffer if necessary.
+ */
+
+void predospecial P2C(integer, numbytes, Boolean, scanning)
+{
+ register char *p = nextstring ;
+ register int i = 0 ;
+ int j ;
+ static int omega_specials = 0;
+
+ if (nextstring + numbytes > maxstring) {
+ p = nextstring = mymalloc(1000 + 2 * numbytes) ;
+ maxstring = nextstring + 2 * numbytes + 700 ;
+ }
+ for (i=numbytes; i>0; i--)
+#ifdef VMCMS /* IBM: VM/CMS */
+ *p++ = ascii2ebcdic[(char)dvibyte()] ;
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ *p++ = ascii2ebcdic[(char)dvibyte()] ;
+#else
+ *p++ = (char)dvibyte() ;
+#endif /* IBM: VM/CMS */
+#endif
+ if (pprescan)
+ return ;
+ while (p[-1] <= ' ' && p > nextstring)
+ p-- ; /* trim trailing blanks */
+ if (p==nextstring) return ; /* all blank is no-op */
+ *p = 0 ;
+ p = nextstring ;
+ while (*p <= ' ')
+ p++ ;
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+ (void)fprintf(stderr, "Preprocessing special: %s\n", p) ;
+#endif
+
+/*
+ * We use strncmp() here to also pass things like landscape()
+ * or landscape: or such.
+ */
+
+ switch (*p) {
+case 'o':
+ if (strncmp(p, "om:", 3)==0) { /* Omega specials ignored */
+ if (omega_specials==0) {
+ fprintf(stderr, "Omega specials are currently ignored\n");
+ omega_specials++;
+ }
+ return;
+ }
+ break ;
+case 'l':
+ if (strncmp(p, "landscape", 9)==0) {
+ if (hpapersize || vpapersize)
+ error(
+ "both landscape and papersize specified: ignoring landscape") ;
+ else
+ landscape = 1 ;
+ return ;
+ }
+ break ;
+case 'p':
+ if (strncmp(p, "pos:", 4)==0) return ; /* positional specials */
+ if (strncmp(p, "papersize", 9)==0) {
+ p += 9 ;
+ while (*p == '=' || *p == ' ')
+ p++ ;
+ if (hpapersize == 0 || vpapersize == 0) {
+ if (landscape) {
+ error(
+ "both landscape and papersize specified: ignoring landscape") ;
+ landscape = 0 ;
+ }
+ handlepapersize(p, &hpapersize, &vpapersize) ;
+ }
+ return ;
+ }
+ break ;
+case 'x':
+ if (strncmp(p, "xtex:", 5)==0) return ;
+ break ;
+case 's':
+ if (strncmp(p, "src:", 4)==0) return ; /* source specials */
+ break ;
+
+case 'h':
+ if (strncmp(p, "header", 6)==0) {
+ char *q, *r, *pre = NULL, *post = NULL ;
+ p += 6 ;
+ while ((*p <= ' ' || *p == '=' || *p == '(') && *p != 0)
+ p++ ;
+ if(*p == '{') {
+ p++;
+ while ((*p <= ' ' || *p == '=' || *p == '(') && *p != 0)
+ p++;
+ q = p ;
+ while (*p != '}' && *p != 0)
+ p++;
+ r = p-1 ;
+ while ((*r <= ' ' || *r == ')') && r >= q)
+ r-- ;
+ if (*p != 0) p++ ;
+ r[1] = 0 ; /* q is the file name */
+ while ((*p <= ' ' || *p == '=' || *p == '(') && *p != 0)
+ p++ ;
+ if(strncmp(p, "pre", 3) == 0) {
+ int bracecount = 1, numbytes = 0, j ;
+ while(*p != '{' && *p != 0)
+ p++ ;
+ if (*p != 0) p++;
+ for(r = p; *r != 0; r++) {
+ if (*r == '{') bracecount++ ;
+ else if (*r == '}') bracecount-- ;
+ if (bracecount == 0) break ;
+ numbytes++ ;
+ }
+ pre = (char *)malloc(numbytes+1);
+ r = pre ;
+ for (j=0; j < numbytes; j++)
+ *r++ = *p++;
+ *r = 0;
+ if (*p != 0) p++;
+ }
+ while ((*p <= ' ' || *p == '=' || *p == '(') && *p != 0)
+ p++ ;
+ if(strncmp(p, "post", 4) == 0) {
+ int bracecount = 1, numbytes = 0, j ;
+ while(*p != '{' && *p != 0)
+ p++ ;
+ if (*p != 0) p++;
+ for(r = p; *r != 0; r++) {
+ if (*r == '{') bracecount++ ;
+ else if (*r == '}') bracecount-- ;
+ if (bracecount == 0) break ;
+ numbytes++ ;
+ }
+ post = (char *)malloc(numbytes+1);
+ r = post ;
+ for (j=0; j < numbytes; j++)
+ *r++ = *p++;
+ *r = 0;
+ }
+ if (strlen(q) > 0)
+ (void)add_header_general(q, pre, post) ;
+ } else {
+ q = p ; /* we will remove enclosing parentheses */
+ p = p + strlen(p) - 1 ;
+ while ((*p <= ' ' || *p == ')') && p >= q)
+ p-- ;
+ p[1] = 0 ;
+ if (p >= q)
+ (void)add_header(q) ;
+ }
+ }
+ break ;
+/* IBM: color - added section here for color header and color history */
+/* using strncmp in this fashion isn't perfect; if later someone wants
+ to introduce a verb like colorspace, well, just checking
+ strcmp(p, "color", 5) will not do. But we leave it alone for the moment.
+ --tgr */
+case 'b':
+ if (strncmp(p, "background", 10) == 0) {
+ usescolor = 1 ;
+ p += 10 ;
+ while ( *p && *p <= ' ' ) p++ ;
+ background(p) ;
+ return ;
+ }
+ break ;
+case 'c':
+ if (strncmp(p, "color", 5) == 0) {
+ usescolor = 1 ;
+ p += 5 ;
+ while ( *p && *p <= ' ' ) p++ ;
+ if (strncmp(p, "push", 4) == 0 ) {
+ p += 4 ;
+ while ( *p && *p <= ' ' ) p++ ;
+ pushcolor(p, 0) ;
+ } else if (strncmp(p, "pop", 3) == 0 ) {
+ popcolor(0) ;
+ } else {
+ resetcolorstack(p,0) ;
+ }
+ } /* IBM: color - end changes */
+ break ;
+case '!':
+ {
+ register struct bangspecial *q ;
+ p++ ;
+ q = (struct bangspecial *)mymalloc((integer)
+ (sizeof(struct bangspecial) + strlen(p))) ;
+ (void)strcpy(q->actualstuff, p) ;
+ q->next = bangspecials ;
+ bangspecials = q ;
+ usesspecial = 1 ;
+ return ;
+ }
+ break ;
+default:
+#if 0
+ {
+ /* Unknown special, must return */
+ return;
+ }
+#endif
+ break ;
+ }
+ usesspecial = 1 ; /* now the special prolog will be sent */
+ if (scanning && *p != '"' && (p=GetKeyVal(p, &j)) != NULL && j==0
+ && *ValStr != '`') /* Don't bother to scan compressed files. */
+ scanfontcomments(ValStr) ;
+}
+
+int maccess P1C(char *, s)
+{
+ FILE *f = search(figpath, s, "r") ;
+ if (f)
+ (*close_file) (f) ;
+ return (f != 0) ;
+}
+
+char *tasks[] = { 0, "iff2ps", "tek2ps" } ;
+
+static char psfile[511] ;
+void dospecial P1C(integer, numbytes)
+{
+ register char *p = nextstring ;
+ register int i = 0 ;
+ int j, systemtype = 0 ;
+ register char *q ;
+ Boolean psfilewanted = 1 ;
+ char *task = 0 ;
+ char cmdbuf[111] ;
+#ifdef HPS
+if (HPS_FLAG && PAGEUS_INTERUPPTUS) {
+ HREF_COUNT-- ;
+ start_new_box() ;
+ PAGEUS_INTERUPPTUS = 0 ;
+ }
+if (HPS_FLAG && NEED_NEW_BOX) {
+ vertical_in_hps();
+ NEED_NEW_BOX = 0;
+ }
+#endif
+ if (nextstring + numbytes > maxstring)
+ error("! out of string space in dospecial") ;
+ for (i=numbytes; i>0; i--)
+#ifdef VMCMS /* IBM: VM/CMS */
+ *p++ = ascii2ebcdic[(char)dvibyte()] ;
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ *p++ = ascii2ebcdic[(char)dvibyte()] ;
+#else
+ *p++ = (char)dvibyte() ;
+#endif /* IBM: VM/CMS */
+#endif
+ while (p[-1] <= ' ' && p > nextstring)
+ p-- ; /* trim trailing blanks */
+ if (p==nextstring) return ; /* all blank is no-op */
+ *p = 0 ;
+ p = nextstring ;
+ while (*p <= ' ')
+ p++ ;
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+ (void)fprintf(stderr, "Processing special: %s\n", p) ;
+#endif
+
+ switch (*p) {
+case 'o':
+ if (strncmp(p, "om:", 3)==0) { /* Omega specials ignored */
+ return;
+ }
+ break ;
+case 'e':
+ if (strncmp(p, "em:", 3)==0) { /* emTeX specials in emspecial.c */
+ emspecial(p);
+ return;
+ }
+ break ;
+case 'p':
+ if (strncmp(p, "pos:", 4)==0) return ; /* positional specials */
+ if (strncmp(p, "ps:", 3)==0) {
+ psflush() ; /* now anything can happen. */
+ if (p[3]==':') {
+ if (strncmp(p+4, "[begin]", 7) == 0) {
+ hvpos() ;
+ trytobreakout(&p[11]);
+ } else if (strncmp(p+4, "[end]", 5) == 0)
+ trytobreakout(&p[9]);
+ else trytobreakout(&p[4]);
+ } else if (strncmp(p+3, " plotfile ", 10) == 0) {
+ char *sfp ;
+ hvpos() ;
+ p += 13;
+ /*
+ * Fixed to allow popen input for plotfile
+ * TJD 10/20/91
+ */
+ while (*p == ' ') p++;
+ if (*p == '"') {
+ p++;
+ for (sfp = p; *sfp && *sfp != '"'; sfp++) ;
+ } else {
+ for (sfp = p; *sfp && *sfp != ' '; sfp++) ;
+ }
+ *sfp = '\0';
+ if (*p == '`')
+ figcopyfile(p+1, 1);
+ else
+ figcopyfile (p, 0);
+ /* End TJD changes */
+ } else {
+ hvpos() ;
+ trytobreakout(&p[3]);
+ psflush() ;
+ hvpos() ;
+ }
+ return;
+ }
+ if (strncmp(p, "papersize", 9) == 0)
+ return ;
+#ifdef TPIC
+ if (strncmp(p, "pn ", 3) == 0) {setPenSize(p+2); return;}
+ if (strncmp(p, "pa ", 3) == 0) {addPath(p+2); return;}
+#endif
+ break ;
+case 'l':
+ if (strncmp(p, "landscape", 9)==0) return ;
+ break ;
+case '!':
+ return ;
+case 'h':
+ if (strncmp(p, "header", 6)==0) return ;
+#ifdef HPS
+ if (strncmp(p, "html:", 5)==0) {
+ if (! HPS_FLAG) return;
+ p += 5;
+ while (isspace(*p))
+ p++;
+ if (*p == '<') {
+ char *sp = p;
+ char *str;
+ int ii=0;int len;int lower_len;
+
+ while ((*p) && (*p != '>')) {
+ ii++;
+ p++;
+ }
+ str = (char *)mymalloc(ii+2);
+ strncpy(str,sp+1,ii-1);
+ str[ii-1] = 0;len=strlen(str);
+ if(len>6) lower_len=6; else lower_len=len;
+ for(ii=0;ii<lower_len;ii++) str[ii]=tolower(str[ii]);
+ do_html(str);
+ free(str);
+ } else
+#ifdef KPATHSEA
+ if (!kpse_tex_hush ("special"))
+#endif
+ {
+
+ printf("Error in html special\n");
+ return;
+ }
+ return;
+ }
+#else
+ if (strncmp(p, "html:", 5)==0) return;
+#endif
+case 'w':
+case 'W':
+ if (strncmp(p+1, "arning", 6) == 0) {
+ static int maxwarns = 50 ;
+ if (maxwarns > 0) {
+ error(p) ;
+ maxwarns-- ;
+ } else if (maxwarns == 0) {
+ error(". . . rest of warnings suppressed") ;
+ maxwarns-- ;
+ }
+ return ;
+ }
+#ifdef TPIC
+ if (strcmp(p, "wh") == 0) {whitenLast(); return;}
+#endif
+ break ;
+case 'b':
+ if ( strncmp(p, "background", 10) == 0 )
+ return ; /* already handled in prescan */
+#ifdef TPIC
+ if (strcmp(p, "bk") == 0) {blackenLast(); return;}
+#endif
+ break ;
+case 'c':
+ if (strncmp(p, "color", 5) == 0) {
+ p += 5 ;
+ while ( *p && *p <= ' ' ) p++ ;
+ if (strncmp(p, "push", 4) == 0 ) {
+ p += 4 ;
+ while ( *p && *p <= ' ' ) p++ ;
+ pushcolor(p,1);
+ } else if (strncmp(p, "pop", 3) == 0 ) {
+ popcolor(1) ;
+ } else {
+ resetcolorstack(p,1) ;
+ }
+ return ;
+ } /* IBM: color - end changes*/
+ break ;
+case 'f':
+#ifdef TPIC
+ if (strcmp(p, "fp") == 0) {flushPath(0); return;}
+#endif
+ break ;
+case 'i':
+#ifdef TPIC
+ if (strcmp(p, "ip") == 0) {flushPath(1); return;} /* tpic 2.0 */
+ if (strncmp(p, "ia ", 3) == 0) {arc(p+2, 1); return;} /* tpic 2.0 */
+#endif
+ break ;
+case 'd':
+#ifdef TPIC
+ if (strncmp(p, "da ", 3) == 0) {flushDashed(p+2, 0); return;}
+ if (strncmp(p, "dt ", 3) == 0) {flushDashed(p+2, 1); return;}
+#endif
+ break ;
+case 's':
+ if (strncmp(p, "src:", 4) == 0) return; /* source specials */
+#ifdef TPIC
+ if (strcmp(p, "sp") == 0) {flushSpline(p+2); return;} /* tpic 2.0 */
+ if (strncmp(p, "sp ", 3) == 0) {flushSpline(p+3); return;} /* tpic 2.0 */
+ if (strcmp(p, "sh") == 0) {shadeLast(p+2); return;} /* tpic 2.0 */
+ if (strncmp(p, "sh ", 3) == 0) {shadeLast(p+3); return;} /* tpic 2.0 */
+#endif
+ break ;
+case 'a':
+#ifdef TPIC
+ if (strncmp(p, "ar ", 3) == 0) {arc(p+2, 0); return;} /* tpic 2.0 */
+#endif
+ break ;
+case 't':
+#ifdef TPIC
+ if (strncmp(p, "tx ", 3) == 0) {SetShade(p+3); return;}
+#endif
+ break ;
+case '"':
+ hvpos() ;
+ cmdout("@beginspecial") ;
+ cmdout("@setspecial") ;
+ trytobreakout(p+1) ;
+ cmdout("\n@endspecial") ;
+ return ;
+ break ;
+default:
+#if 0
+ {
+ /* Unknown special, must return */
+ sprintf(errbuf,"Unrecognized special (first 10 chars: %.10s)", p);
+ specerror(errbuf);
+ return;
+ }
+#endif
+ break ;
+ }
+/* At last we get to the key/value conventions */
+ psfile[0] = '\0';
+ hvpos();
+ cmdout("@beginspecial");
+
+ while( (p=GetKeyVal(p,&j)) != NULL )
+ switch (j) {
+ case -1: /* for compatability with old conventions, we allow a file name
+ * to be given without the 'psfile=' keyword */
+ if (!psfile[0] && maccess(KeyStr)==0) /* yes we can read it */
+ (void)strcpy(psfile,KeyStr) ;
+ else {
+ if (strlen(KeyStr) < 40) {
+ sprintf(errbuf,
+ "Unknown keyword (%s) in \\special will be ignored",
+ KeyStr) ;
+ } else {
+ sprintf(errbuf,
+ "Unknown keyword (%.40s...) in \\special will be ignored",
+ KeyStr) ;
+ }
+ specerror(errbuf) ;
+ }
+ break ;
+ case 0: case 1: case 2: /* psfile */
+ if (psfile[0]) {
+ sprintf(errbuf, "More than one \\special %s given; %s ignored",
+ "psfile", ValStr) ;
+ specerror(errbuf) ;
+ }
+ else (void)strcpy(psfile,ValStr) ;
+ task = tasks[j] ;
+ break ;
+ default: /* most keywords are output as PostScript procedure calls */
+ if (KeyTab[j].Type == Integer)
+ numout((integer)ValInt);
+ else if (KeyTab[j].Type == String)
+ for (q=ValStr; *q; q++)
+ scout(*q) ;
+ else if (KeyTab[j].Type == None) ;
+ else { /* Number or Dimension */
+ ValInt = (integer)(ValNum<0? ValNum-0.5 : ValNum+0.5) ;
+ if (ValInt-ValNum < 0.001 && ValInt-ValNum > -0.001)
+ numout((integer)ValInt) ;
+ else {
+ (void)sprintf(cmdbuf, "%f", ValNum) ;
+ cmdout(cmdbuf) ;
+ }
+ }
+ (void)sprintf(cmdbuf, "@%s", KeyStr);
+ cmdout(cmdbuf) ;
+ }
+
+ cmdout("@setspecial");
+
+ if(psfile[0]) {
+ if (task == 0) {
+ systemtype = (psfile[0]=='`') ;
+ figcopyfile(psfile+systemtype, systemtype);
+ } else {
+ fil2ps(task, psfile) ;
+ }
+ } else if (psfilewanted
+#ifdef KPATHSEA
+ && !kpse_tex_hush ("special")
+#endif
+ )
+ specerror("No \\special psfile was given; figure will be blank") ;
+
+ cmdout("@endspecial");
+}
+
+#ifdef KPATHSEA
+extern char *realnameoffile;
+#else
+extern char realnameoffile[] ;
+extern char *pictpath ;
+#endif
+void fil2ps P2C(char *, task, char *, iname)
+{
+ char cmd[400] ;
+ FILE *f ;
+ if (0 != (f=search(pictpath, iname, "r"))) {
+ close_file(f) ;
+ } else {
+ fprintf(stderr, " couldn't open %s\n", iname) ;
+ return ;
+ }
+ if (!quiet) {
+ fprintf(stderr, " [%s", realnameoffile) ;
+ fflush(stderr) ;
+ }
+ if (oname && oname[0] && oname[0] != '-') {
+ putc(10, bitfile) ;
+ close_file(bitfile) ;
+ sprintf(cmd, "%s -f %s %s", task, realnameoffile, oname) ;
+ system(cmd) ;
+ if ((bitfile=fopen(oname, FOPEN_ABIN_MODE))==NULL)
+ error_with_perror ("! couldn't reopen PostScript file", oname) ;
+ linepos = 0 ;
+ } else {
+ sprintf(cmd, "%s -f %s", task, realnameoffile) ;
+ system(cmd) ;
+ }
+ if (!quiet)
+ fprintf(stderr, "]") ;
+}
+
+/*
+ * Handles specials encountered during bounding box calculations.
+ * Currently we only deal with psfile's or PSfiles and only those
+ * that do not use rotations.
+ */
+static float rbbox[4] ;
+float *bbdospecial P1C(int, nbytes)
+{
+ char *p = nextstring ;
+ int i, j ;
+ char seen[NKEYS] ;
+ float valseen[NKEYS] ;
+
+ if (nextstring + nbytes > maxstring) {
+ p = nextstring = mymalloc(1000 + 2 * nbytes) ;
+ maxstring = nextstring + 2 * nbytes + 700 ;
+ }
+ if (nextstring + nbytes > maxstring)
+ error("! out of string space in bbdospecial") ;
+ for (i=nbytes; i>0; i--)
+#ifdef VMCMS /* IBM: VM/CMS */
+ *p++ = ascii2ebcdic[(char)dvibyte()] ;
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ *p++ = ascii2ebcdic[(char)dvibyte()] ;
+#else
+ *p++ = (char)dvibyte() ;
+#endif /* IBM: VM/CMS */
+#endif
+ while (p[-1] <= ' ' && p > nextstring)
+ p-- ; /* trim trailing blanks */
+ if (p==nextstring) return NULL ; /* all blank is no-op */
+ *p = 0 ;
+ p = nextstring ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if (strncmp(p, "psfile", 6)==0 || strncmp(p, "PSfile", 6)==0) {
+ float originx = 0, originy = 0, hscale = 1, vscale = 1,
+ hsize = 0, vsize = 0 ;
+ for (j=0; j<NKEYS; j++)
+ seen[j] = 0 ;
+ j = 0 ;
+ while ((p=GetKeyVal(p, &j))) {
+ if (j >= 0 && j < NKEYS && KeyTab[j].Type == Number) {
+ seen[j]++ ;
+ valseen[j] = ValNum ;
+ }
+ }
+ /*
+ * This code mimics what happens in @setspecial.
+ */
+ if (seen[3])
+ hsize = valseen[3] ;
+ if (seen[4])
+ vsize = valseen[4] ;
+ if (seen[5])
+ originx = valseen[5] ;
+ if (seen[6])
+ originy = valseen[6] ;
+ if (seen[7])
+ hscale = valseen[7] / 100.0 ;
+ if (seen[8])
+ vscale = valseen[8] / 100.0 ;
+ if (seen[10] && seen[12])
+ hsize = valseen[12] - valseen[10] ;
+ if (seen[11] && seen[13])
+ vsize = valseen[13] - valseen[11] ;
+ if (seen[14] || seen[15]) {
+ if (seen[14] && seen[15] == 0) {
+ hscale = vscale = valseen[14] / (10.0 * hsize) ;
+ } else if (seen[15] && seen[14] == 0) {
+ hscale = vscale = valseen[15] / (10.0 * vsize) ;
+ } else {
+ hscale = valseen[14] / (10.0 * hsize) ;
+ vscale = valseen[15] / (10.0 * vsize) ;
+ }
+ }
+ /* at this point, the bounding box in PostScript units relative to
+ the current dvi point is
+ originx originy originx+hsize*hscale originy+vsize*vscale
+ We'll let the bbox routine handle the remaining math.
+ */
+ rbbox[0] = originx ;
+ rbbox[1] = originy ;
+ rbbox[2] = originx+hsize*hscale ;
+ rbbox[3] = originy+vsize*vscale ;
+ return rbbox ;
+ }
+ return 0 ;
+}
diff --git a/Build/source/texk/dvipsk/download.c b/Build/source/texk/dvipsk/download.c
new file mode 100644
index 00000000000..c7d6c0eab9f
--- /dev/null
+++ b/Build/source/texk/dvipsk/download.c
@@ -0,0 +1,562 @@
+/*
+ * Code to download a font definition at the beginning of a section.
+ * hacked by SPQR 8.95 to allow for non-partial downloading
+ *
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifndef DOWNLOAD_USING_PDFTEX
+#define DOWNLOAD_USING_PDFTEX
+#endif
+#ifndef DOWNLOAD_USING_PDFTEX
+#include "t1part.h"
+#endif
+#define DVIPS
+/*
+ * These are the external routines we call.
+ */
+#include "protos.h"
+/*
+ * These are the external variables we access.
+ */
+extern char *nextstring, *infont ;
+extern FILE *bitfile ;
+extern fontdesctype *curfnt ;
+extern long bytesleft ;
+extern long mbytesleft ;
+extern quarterword *raster ;
+extern quarterword *mraster ;
+extern Boolean compressed ;
+extern Boolean partialdownload ;
+extern double mag ;
+extern int actualdpi ;
+static unsigned char dummyend[8] = { 252 } ;
+extern int prettycolumn ;
+extern int quiet ;
+extern Boolean disablecomments ;
+extern real conv ;
+
+/*
+ * We have a routine that downloads an individual character.
+ */
+static int lastccout ;
+void downchar P2C(chardesctype *, c, shalfword, cc)
+{
+ register long i, j ;
+ register halfword cheight, cwidth ;
+ register long k ;
+ register quarterword *p ;
+ register halfword cmd ;
+ register shalfword xoff, yoff ;
+ halfword wwidth = 0 ;
+ register long len ;
+ int smallchar ;
+
+ p = c->packptr ;
+ cmd = *p++ ;
+ if (cmd & 4) {
+ if ((cmd & 7) == 7) {
+ cwidth = getlong(p) ;
+ cheight = getlong(p + 4) ;
+ xoff = getlong(p + 8) ;
+ yoff = getlong(p + 12) ;
+ p += 16 ;
+ } else {
+ cwidth = p[0] * 256 + p[1] ;
+ cheight = p[2] * 256 + p[3] ;
+ xoff = p[4] * 256 + p[5] ; /* N.B.: xoff, yoff are signed halfwords */
+ yoff = p[6] * 256 + p[7] ;
+ p += 8 ;
+ }
+ } else {
+ cwidth = *p++ ;
+ cheight = *p++ ;
+ xoff = *p++ ;
+ yoff = *p++ ;
+ if (xoff > 127)
+ xoff -= 256 ;
+ if (yoff > 127)
+ yoff -= 256 ;
+ }
+ if (c->flags & BIGCHAR)
+ smallchar = 0 ;
+ else
+ smallchar = 5 ;
+ if (compressed) {
+ len = getlong(p) ;
+ p += 4 ;
+ } else {
+ wwidth = (cwidth + 15) / 16 ;
+ i = 2 * cheight * (long)wwidth ;
+ if (i <= 0)
+ i = 2 ;
+ i += smallchar ;
+ if (mbytesleft < i) {
+ if (mbytesleft >= RASTERCHUNK)
+ (void) free((char *) mraster) ;
+ if (RASTERCHUNK > i) {
+ mraster = (quarterword *)mymalloc((integer)RASTERCHUNK) ;
+ mbytesleft = RASTERCHUNK ;
+ } else {
+ k = i + i / 4 ;
+ mraster = (quarterword *)mymalloc((integer)k) ;
+ mbytesleft = k ;
+ }
+ }
+ k = i;
+ while (k > 0)
+ mraster[--k] = 0 ;
+ unpack(p, (halfword *)mraster, cwidth, cheight, cmd) ;
+ p = mraster ;
+ len = i - smallchar ;
+ }
+ if (cheight == 0 || cwidth == 0 || len == 0) {
+ cwidth = 1 ;
+ cheight = 1 ;
+ wwidth = 1 ;
+ len = 2 ;
+ if (compressed)
+ p = dummyend ; /* CMD(END); see repack.c */
+ else
+ mraster[0] = 0 ;
+ }
+ if (smallchar) {
+ p[len] = cwidth ;
+ p[len + 1] = cheight ;
+ p[len + 2] = xoff + 128 ;
+ p[len + 3] = yoff + 128 ;
+ p[len + 4] = c->pixelwidth ;
+ } else
+/*
+ * Now we actually send out the data.
+ */
+ specialout('[') ;
+ if (compressed) {
+ specialout('<') ;
+ mhexout(p, len + smallchar) ;
+ specialout('>') ;
+ } else {
+ i = (cwidth + 7) / 8 ;
+ if (i * cheight > 65520) {
+ long bc = 0 ;
+ specialout('<') ;
+ for (j=0; j<cheight; j++) {
+ if (bc + i > 65520) {
+ specialout('>') ;
+ specialout('<') ;
+ bc = 0 ;
+ }
+ mhexout(p, i) ;
+ bc += i ;
+ p += 2*wwidth ;
+ }
+ specialout('>') ;
+ } else {
+ specialout('<') ;
+ if (2 * wwidth == i)
+ mhexout(p, ((long)cheight) * i + smallchar) ;
+ else {
+ for (j=0; j<cheight; j++) {
+ mhexout(p, i) ;
+ p += 2*wwidth ;
+ }
+ if (smallchar)
+ mhexout(p, (long)smallchar) ;
+ }
+ specialout('>') ;
+ }
+ }
+ if (smallchar == 0) {
+ numout((integer)cwidth) ;
+ numout((integer)cheight) ;
+ numout((integer)xoff + 128) ; /* not all these casts needed. */
+ numout((integer)yoff + 128) ;
+ numout((integer)(c->pixelwidth)) ;
+ }
+ if (lastccout + 1 == cc) {
+ cmdout("I") ;
+ } else {
+ numout((integer)cc) ;
+ cmdout("D") ;
+ }
+ lastccout = cc ;
+}
+/*
+ * Output the literal name of the font change command with PostScript index n
+ */
+static char goodnames[] =
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ;
+void
+makepsname P2C(register char *, s, register int, n)
+{
+ n-- ;
+ *s++ = 'F' + n / (sizeof(goodnames)-1) ;
+ *s++ = goodnames[n % (sizeof(goodnames)-1)] ;
+ *s++ = 0 ;
+}
+void
+lfontout P1C(int, n)
+{
+ char buf[10];
+ char *b = buf ;
+ *b++ = '/' ;
+ makepsname(b, n) ;
+ cmdout(buf);
+}
+
+/*
+ * And the download procedure.
+ */
+void download P2C(charusetype *, p, int, psfont)
+{
+ register int b, i ;
+ register halfword bit ;
+ register chardesctype *c ;
+ int cc, maxcc = -1, numcc ;
+ double fontscale ;
+ char name[10] ;
+ lastccout = -5 ;
+ name[0] = '/' ;
+ makepsname(name + 1, psfont) ;
+ curfnt = p->fd ;
+ curfnt->psname = psfont ;
+ if (curfnt->resfont) {
+ struct resfont *rf = curfnt->resfont ;
+ int non_empty=0;
+ for (b=0; b<16; b++)
+ if(p->bitmap[b] !=0)
+ non_empty =1;
+ if(non_empty==0 && curfnt->codewidth==1)
+ return;
+ cmdout(name) ;
+/* following code re-arranged - Rob Hutchings 1992Apr02 */
+ c = curfnt->chardesc + 255 ;
+ cc = 255 ;
+ numcc = 0 ;
+ i = 0 ;
+ for (b=15; b>=0; b--) {
+ for (bit=1; bit; bit<<=1) {
+ if (p->bitmap[b] & bit) {
+ if (i > 0) {
+ numout((integer)i) ;
+ specialout('[') ;
+ i = 0 ;
+ }
+ numout((integer)c->pixelwidth) ;
+ c->flags |= EXISTS ;
+ numcc++ ;
+ } else {
+ i++ ;
+ c->flags &= ~EXISTS ;
+ }
+ c-- ;
+ cc-- ;
+ }
+ }
+ if (i > 0) {
+ numout((integer)i) ;
+ specialout('[') ;
+ }
+ specialout ('{') ;
+ if (rf->specialinstructions)
+ cmdout(rf->specialinstructions) ;
+ specialout ('}') ;
+ numout((integer)numcc) ;
+ /*
+ * This code has been bogus for a long time. The fix is
+ * straightforward. The input, curfnt->scaledsize, is the
+ * desired size of the font in dvi units. The output is the
+ * fontscale, which is the height of the font in output units
+ * which are simply pixels. Thus, all we need to do is multiply
+ * by the default generic conv, which properly takes into
+ * account magnification, num/den, output resolution, and so on.
+ * Sorry this bug has been in here so long. -tgr
+ */
+ fontscale = curfnt->scaledsize * conv ;
+ (void)sprintf(nextstring, "%g", fontscale) ;
+ cmdout(nextstring) ;
+ (void)strcpy(nextstring, "/") ;
+ (void)strcat(nextstring, rf->PSname) ;
+ cmdout(nextstring) ;
+/* end of changed section - Rob */
+ cmdout("rf") ;
+ rf->sent = 1 ;
+ return ;
+ }
+/*
+ * Here we calculate the largest character actually used, and
+ * send it as a parameter to df.
+ */
+ cc = 0 ;
+ numcc = 0 ;
+ for (b=0; b<16; b++) {
+ for (bit=32768; bit!=0; bit>>=1) {
+ if (p->bitmap[b] & bit) {
+ maxcc = cc ;
+ numcc++ ;
+ }
+ cc++ ;
+ }
+ }
+ if (numcc <= 0)
+ return ;
+ fontscale = ((double)(curfnt->scaledsize)) / 65536.0 ;
+ fontscale *= (mag/1000.0) ;
+ newline() ;
+ fprintf(bitfile, "%%DVIPSBitmapFont: %s %s %g %d\n", name+1, curfnt->name,
+ fontscale, numcc) ;
+ cmdout(name) ;
+ numout((integer)numcc) ;
+ numout((integer)maxcc + 1) ;
+/*
+ * If we need to scale the font, we say so by using dfs
+ * instead of df, and we give it a scale factor. We also
+ * scale the character widths; this is ugly, but scaling
+ * fonts is ugly, and this is the best we can probably do.
+ */
+ if (curfnt->dpi != curfnt->loadeddpi) {
+ numout((integer)curfnt->dpi) ;
+ numout((integer)curfnt->loadeddpi) ;
+ if (curfnt->alreadyscaled == 0) {
+ for (b=0, c=curfnt->chardesc; b<256; b++, c++)
+ c->pixelwidth = (c->pixelwidth *
+ (long)curfnt->dpi * 2 + curfnt->loadeddpi) / (2 * curfnt->loadeddpi) ;
+ curfnt->alreadyscaled = 1 ;
+ }
+ cmdout("dfs") ;
+ } else
+ cmdout("df") ;
+ c = curfnt->chardesc ;
+ cc = 0 ;
+ for (b=0; b<16; b++) {
+ for (bit=32768; bit; bit>>=1) {
+ if (p->bitmap[b] & bit) {
+ downchar(c, cc) ;
+ c->flags |= EXISTS ;
+ } else
+ c->flags &= ~EXISTS ;
+ c++ ;
+ cc++ ;
+ }
+ }
+ cmdout("E") ;
+ newline() ;
+ fprintf(bitfile, "%%EndDVIPSBitmapFont\n") ;
+}
+/*
+ * Magic code to deal with PostScript font partial downloading.
+ * We track the encodings we've seen so far and keep them in these
+ * structures. We rely on writet1 to load the encodings for us.
+ */
+static struct seenEncodings {
+ struct seenEncodings *next ;
+ char *name ;
+ char **glyphs ;
+} *seenEncodings ;
+#define MAX_CHAR_CODE 256
+/*
+ * Load a new encoding and return the array of glyphs as a vector.
+ * Linear search.
+ */
+static char **getEncoding(char *encoding) {
+ struct seenEncodings *p = seenEncodings ;
+ while (p != 0)
+ if (strcmp(encoding, p->name) == 0)
+ break ;
+ else
+ p = p->next ;
+ if (p == 0) {
+ int i ;
+ p = (struct seenEncodings *)mymalloc(sizeof(struct seenEncodings)) ;
+ p->next = seenEncodings ;
+ seenEncodings = p ;
+ p->name = xstrdup(encoding) ;
+ p->glyphs = (char **)mymalloc((MAX_CHAR_CODE+1) * sizeof(char *)) ;
+ for (i=0; i<MAX_CHAR_CODE; i++)
+ p->glyphs[i] = ".notdef" ;
+ load_enc(encoding, p->glyphs) ;
+ }
+ return p->glyphs ;
+}
+/*
+ * When partially downloading a type 1 font, sometimes the font uses
+ * the built-in encoding (which we don't know at this point) so we want
+ * to subset it by character code. Sometimes the font uses a different
+ * encoding, so we want to subset it by glyph. These routines manage
+ * accumulating all the glyph names for a particular font from all
+ * the various uses into a single, slash-delimited string for writet1().
+ *
+ * If no glyphs have been added, extraGlyphs is null. In all cases,
+ * the memory allocated for this is in extraGlyphSpace.
+ */
+static char *extraGlyphs = 0 ;
+#ifdef DOWNLOAD_USING_PDFTEX
+static char *extraGlyphSpace = 0 ;
+static int extraGlyphSize = 0 ;
+static int glyphSizeUsed = 0 ;
+/*
+ * We want to make sure we pass in null or "/" but never "".
+ */
+static void clearExtraGlyphList() {
+ glyphSizeUsed = 0 ;
+ extraGlyphs = 0 ;
+}
+/*
+ * Add the glyph name; make sure it hasn't been added already.
+ * We do this by adding it, so we can get the // around it,
+ * and *then* see if it's already there and if it is un-add it.
+ */
+static void addGlyph(char *glyphName) {
+ int len = strlen(glyphName) ;
+ char *startOfAdd = 0 ;
+ if (len + glyphSizeUsed + 3 > extraGlyphSize) {
+ extraGlyphSize = 2 * (extraGlyphSize + len + 100) ;
+ extraGlyphSpace = (char *) xrealloc(extraGlyphSpace, extraGlyphSize) ;
+ }
+ extraGlyphs = extraGlyphSpace ;
+ if (glyphSizeUsed == 0) {
+ startOfAdd = extraGlyphs + glyphSizeUsed ;
+ extraGlyphs[glyphSizeUsed++] = '/' ; /* leading / */
+ } else {
+ startOfAdd = extraGlyphs + glyphSizeUsed - 1 ;
+ }
+ strcpy(extraGlyphs + glyphSizeUsed, glyphName) ;
+ glyphSizeUsed += len ;
+ extraGlyphs[glyphSizeUsed++] = '/' ; /* trailing / */
+ extraGlyphs[glyphSizeUsed] = 0 ;
+ if (strstr(extraGlyphs, startOfAdd) != startOfAdd) { /* already there! */
+ glyphSizeUsed = startOfAdd - extraGlyphs + 1 ; /* kill the second copy */
+ extraGlyphs[glyphSizeUsed] = 0 ;
+ }
+}
+#endif
+/*
+ * Download a PostScript font, using partial font downloading if
+ * necessary.
+ */
+void downpsfont P2C(charusetype *, p, charusetype *, all)
+{
+#ifdef DOWNLOAD_USING_PDFTEX
+ static unsigned char grid[256];
+#endif
+ int GridCount ;
+ register int b;
+ register halfword bit ;
+ register chardesctype *c ;
+ struct resfont *rf ;
+ int cc;
+
+ curfnt = p->fd ;
+ rf = curfnt->resfont ;
+ if (rf == 0 || rf->Fontfile == NULL)
+ return ;
+ for (; all->fd; all++)
+ if (all->fd->resfont &&
+ strcmp(rf->PSname, all->fd->resfont->PSname) == 0)
+ break ;
+ if (all != p)
+ return ;
+ if (rf->sent == 2) /* sent as header, from a PS file */
+ return ;
+ if (all->fd == 0)
+ error("! internal error in downpsfont") ;
+ if (!partialdownload) {
+ infont = all->fd->resfont->PSname ;
+ copyfile(all->fd->resfont->Fontfile);
+ infont = 0 ;
+ return;
+ }
+ for (cc=0; cc<256; cc++)
+ grid[cc] = 0 ;
+#ifdef DOWNLOAD_USING_PDFTEX
+ clearExtraGlyphList() ;
+#endif
+ for (; all->fd; all++) {
+ if (all->fd->resfont == 0 ||
+ strcmp(rf->PSname, all->fd->resfont->PSname))
+ continue ;
+ curfnt = all->fd ;
+#ifdef DOWNLOAD_USING_PDFTEX
+ if (curfnt->resfont->Vectfile) {
+ char **glyphs = getEncoding(curfnt->resfont->Vectfile) ;
+ c = curfnt->chardesc + 255 ;
+ cc = 255 ;
+ for (b=15; b>=0; b--) {
+ for (bit=1; bit; bit<<=1) {
+ if (all->bitmap[b] & bit) {
+ addGlyph(glyphs[cc]) ;
+ }
+ c-- ;
+ cc-- ;
+ }
+ }
+ } else {
+#endif
+ c = curfnt->chardesc + 255 ;
+ cc = 255 ;
+ for (b=15; b>=0; b--) {
+ for (bit=1; bit; bit<<=1) {
+ if (all->bitmap[b] & bit) {
+ grid[cc]=1;
+ }
+ c-- ;
+ cc-- ;
+ }
+ }
+#ifdef DOWNLOAD_USING_PDFTEX
+ }
+#endif
+ }
+
+ for (GridCount=0,cc=0; cc<256; cc++) {
+/* tmpgrid[cc]=grid[cc]; */
+ if(grid[cc] ==1) {
+ GridCount++;
+ }
+ }
+ if(GridCount!=0 || extraGlyphs) {
+ if (!quiet) {
+ if (strlen(rf->Fontfile) + prettycolumn > STDOUTSIZE) {
+ fprintf(stderr, "\n") ;
+ prettycolumn = 0 ;
+ }
+ (void)fprintf(stderr, "<%s>", rf->Fontfile);
+ prettycolumn += strlen(rf->Fontfile) + 2 ;
+ }
+ newline() ;
+ if (! disablecomments)
+ (void)fprintf(bitfile, "%%%%BeginFont: %s\n", rf->PSname);
+#ifdef DOWNLOAD_USING_PDFTEX
+ if (!t1_subset_2(rf->Fontfile, grid, extraGlyphs))
+#else
+ if(FontPart(bitfile, rf->Fontfile, rf->Vectfile) < 0)
+#endif
+ exit(1);
+ if (! disablecomments)
+ (void)fprintf(bitfile, "%%%%EndFont \n");
+ }
+}
+
+void dopsfont P1C(sectiontype *, fs)
+{
+ charusetype *cu ;
+
+ cu = (charusetype *) (fs + 1) ;
+#ifdef DOWNLOAD_USING_PDFTEX
+ while (cu->fd) {
+ if (cu->psfused)
+ cu->fd->psflag = EXISTS ;
+ downpsfont(cu++, (charusetype *)(fs + 1)) ;
+ }
+#else
+ line = getmem(BUFSIZ);
+ tmpline=line;
+ while (cu->fd) {
+ if (cu->psfused)
+ cu->fd->psflag = EXISTS ;
+ downpsfont(cu++, (charusetype *)(fs + 1)) ;
+ }
+ loadbase = ~FLG_LOAD_BASE;
+ FirstCharB=UnDefineChars(FirstCharB);
+ free(tmpline);
+#endif
+}
diff --git a/Build/source/texk/dvipsk/dpicheck.c b/Build/source/texk/dvipsk/dpicheck.c
new file mode 100644
index 00000000000..7665112d815
--- /dev/null
+++ b/Build/source/texk/dvipsk/dpicheck.c
@@ -0,0 +1,75 @@
+/*
+ * This software is Copyright 1988 by Radical Eye Software.
+ */
+/*
+ * dpicheck of dvips.c. Checks the dots per inch to make sure
+ * it exists. The fonts which exist are DPI at the appropriate
+ * magnifications.
+ */
+#include "dvips.h"
+extern int actualdpi ;
+static integer existsizes[30] = { 0 , 99999999 } ;
+static int checkdpi ;
+/*
+ * This routine adds some sizes to `existsizes'.
+ */
+void addsiz P1C(int, rhsize)
+{
+ register integer *p ;
+ long t, hsize ;
+
+ hsize = rhsize ;
+ for (p=existsizes; *p < hsize; p++) ;
+ if (*p == hsize)
+ return ;
+ do {
+ t = *p ;
+ *p++ = hsize ;
+ hsize = t ;
+ } while (hsize) ;
+}
+void adddpi P1C(int, hsize)
+{
+ long a, b, c ;
+ int i ;
+
+ addsiz(hsize) ;
+ addsiz((int)((hsize * 116161L + 53020L) / 106040L)) ;
+ a = hsize ;
+ b = 0 ;
+ c = 1 ;
+ for (i=0; i<9; i++) {
+ b = 6 * b + (a % 5) * c ;
+ a = a + a / 5 ;
+ c = c * 5 ;
+ if (b > c) {
+ b -= c ;
+ a++ ;
+ }
+ if (b + b >= c)
+ addsiz((int)(a+1)) ;
+ else
+ addsiz((int)a) ;
+ }
+}
+/*
+ * Finally, the routine that checks a size for match.
+ */
+halfword
+dpicheck P1C(halfword, dpi)
+{
+ integer i ;
+ integer margin = 1 + dpi / 500 ;
+
+ if (! checkdpi) {
+ adddpi(DPI) ;
+ checkdpi = 1 ;
+ }
+ for (i=0; existsizes[i] < dpi; i++) ;
+ if (existsizes[i]-dpi <= margin)
+ return(existsizes[i]) ;
+ else if (dpi-existsizes[i-1] <= margin)
+ return(existsizes[i-1]) ;
+ else
+ return(dpi) ;
+}
diff --git a/Build/source/texk/dvipsk/drawPS.c b/Build/source/texk/dvipsk/drawPS.c
new file mode 100644
index 00000000000..c9c4f396a92
--- /dev/null
+++ b/Build/source/texk/dvipsk/drawPS.c
@@ -0,0 +1,674 @@
+/*
+ * D R A W P S . C
+ *
+ * Changed to take magnification into account, 27 August 1990.
+ *
+ * (minor mods by don on 5 Jan 90 to accommodate highres PostScript)
+ *
+ * $Revision: 1.1 $
+ *
+ * $Log: drawPS.c,v $
+ * Revision 1.1 90/03/10 20:32:48 grunwald
+ * Initial revision
+ *
+ *
+ * 89/04/24: decouty@irisa.fr, priol@irisa.fr
+ * added three shading levels for fig,
+ * removed '\n' in cmdout() calls
+ *
+ * Revision 1.4 87/05/07 15:06:24 dorab
+ * relinked back hh to h and vv to v undoing a previous change.
+ * this was causing subtle quantization problems. the main change
+ * is in the definition of hconvPS and vconvPS.
+ *
+ * changed the handling of the UC seal. the PS file should now be
+ * sent via the -i option.
+ *
+ * Revision 1.3 86/04/29 23:20:55 dorab
+ * first general release
+ *
+ * Revision 1.3 86/04/29 22:59:21 dorab
+ * first general release
+ *
+ * Revision 1.2 86/04/29 13:23:40 dorab
+ * Added distinctive RCS header
+ *
+ */
+#ifndef lint
+char RCSid[] =
+ "@(#)$Header: /usr/local/src/TeX/Dvips-5.0.2/RCS/drawPS.c,v 1.1 90/03/10 20:32:48 grunwald Exp $ (UCLA)";
+#endif
+
+/*
+ the driver for handling the \special commands put out by
+ the tpic program as modified by Tim Morgan <morgan@uci.edu>
+ the co-ordinate system is with the origin at the top left
+ and the x-axis is to the right, and the y-axis is to the bottom.
+ when these routines are called, the origin is set at the last dvi position,
+ which has to be gotten from the dvi-driver (in this case, dvips) and will
+ have to be converted to device co-ordinates (in this case, by [hv]convPS).
+ all dimensions are given in milli-inches and must be converted to what
+ dvips has set up (i.e. there are convRESOLUTION units per inch).
+
+ it handles the following \special commands
+ pn n set pen size to n
+ pa x y add path segment to (x,y)
+ fp flush path
+ ip flush invisible path, i.e. do shading only
+ da l flush dashed - each dash is l (inches)
+ dt l flush dotted - one dot per l (inches)
+ sp [l] flush spline - optional l is dot/dash length
+ ar x y xr yr sa ea arc centered at (x,y) with x-radius xr
+ and y-radius yr, start angle sa (in rads),
+ end angle ea (in rads)
+ ia x y xr yr sa ea invisible arc with same parameters as above
+ sh [s] shade last path (box, circle, ellipse)
+ s = gray level (0 = white, 1 = black)
+ wh whiten last path (box, circle, ellipse)
+ bk blacken last path (box,circle, ellipse)
+ tx texture command - Added by T. Priol
+ (priol@irisa.fr), enhanced by M. Jourdan:
+ textures are translated into uniform gray levels
+
+ this code is in the public domain
+
+ written by dorab patel <dorab@cs.ucla.edu>
+ december 1985
+ released feb 1986
+ changes for dvips july 1987
+
+ */
+
+#include "dvips.h"
+
+#ifdef TPIC /* rest of the file !! */
+
+#include <math.h> /* used in function "arc" */
+
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+
+/*
+ * external functions used here
+ */
+#include "protos.h"
+/*
+ * external variables used here
+ */
+extern integer hh,vv; /* the current x,y position in pixel units */
+extern int actualdpi ;
+extern int vactualdpi ;
+extern double mag ;
+
+#define convRESOLUTION DPI
+#define convVRESOLUTION VDPI
+#define tpicRESOLUTION 1000 /* number of tpic units per inch */
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif
+
+/* convert from tpic units to PS units */
+#define PixRound(a,b) zPixRound((a),(b))
+#define convPS(x) PixRound((x),convRESOLUTION)
+#define convVPS(x) PixRound((x),convVRESOLUTION)
+
+/* convert from tpic locn to abs horiz PS locn */
+#define hconvPS(x) (hh + convPS(x))
+/* convert from tpic locn to abs vert PS locn */
+#define vconvPS(x) (vv + convVPS(x))
+/* convert to degrees */
+#define convDeg(x) (360*(x)/(2*3.14159265358979))
+
+/* if PostScript had splines, i wouldnt need to store the path */
+#define MAXPATHS 600 /* maximum number of path segments */
+#define NONE 0 /* for shading */
+#define BLACK 1 /* for shading */
+#define GRAY 2 /* MJ; for shading */
+#define WHITE 3 /* for shading */
+
+/* the following defines are used to make the PostScript shorter;
+ the corresponding defines are in the PostScript prolog special.lpro */
+#define MOVETO "a"
+#define LINETO "li"
+#define RCURVETO "rc"
+#define RLINETO "rl"
+#define STROKE "st"
+#define FILL "fil"
+#define NEWPATH "np"
+#define CLOSEPATH "closepath"
+/*
+ * STROKE and FILL must restore the current point to that
+ * saved by NEWPATH
+ */
+
+static double xx[MAXPATHS], yy[MAXPATHS]; /* the current path in milli-inches */
+static integer pathLen = 0; /* the current path length */
+static integer shading = NONE; /* what to shade the last figure */
+static integer penSize = 2; /* pen size in PS units */
+
+/* forward declarations */
+/* static void doShading(); */
+static double zPixRound P2H(double, double); /* (x/y)PixRound(x,y) */
+static double shadetp = 0.5;
+ /* shading level, initialized as requested by tpic 2.0 -- MJ */
+
+void
+setPenSize P1C(char *, cp)
+{
+ long ps;
+
+ if (sscanf(cp, " %ld ", &ps) != 1)
+ {
+ error("Illegal .ps command format");
+ return;
+ }
+
+ penSize = convPS(ps);
+ doubleout((integer)penSize);
+ cmdout("setlinewidth");
+} /* end setPenSize */
+
+void
+addPath P1C(char *, cp)
+{
+ double x,y;
+
+ if (++pathLen >= MAXPATHS) error("! Too many points");
+ if (sscanf(cp, " %lg %lg ", &x, &y) != 2)
+ error("! Malformed path expression");
+ xx[pathLen] = x;
+ yy[pathLen] = y;
+} /* end of addPath */
+
+void
+arc P2C(char *, cp, int, invis)
+{
+ double xc, yc, xrad, yrad;
+ double startAngle, endAngle;
+
+ if (sscanf(cp, " %lg %lg %lg %lg %lg %lg ", &xc, &yc, &xrad, &yrad,
+ &startAngle, &endAngle) != 6)
+ {
+ error("Illegal arc specification");
+ return;
+ }
+
+/* To have filled ellipses/circles also have borders, we duplicate the object
+ specification; first time we emit a FILL command, second time we emit a
+ STROKE command.
+ There certainly exists a better way to do that in PostScript, by
+ remembering the object specification (path) across the fill command.
+ However I (MJ) am completely unproficient at PostScript...
+*/
+
+/* we need the newpath since STROKE doesnt do a newpath */
+
+ if (shading) {
+ /* first time for shading */
+ cmdout(NEWPATH);
+ doubleout(hconvPS(xc));
+ doubleout(vconvPS(yc));
+ doubleout(convPS(xrad));
+ if (xrad != yrad && VDPI == DPI)
+ doubleout(convPS(yrad));
+ doubleout(convDeg(startAngle));
+ doubleout(convDeg(endAngle));
+
+ if (xrad == yrad && VDPI == DPI) /* for arcs and circles */
+ cmdout("arc");
+ else
+ cmdout("ellipse");
+
+ cmdout(FILL);
+ shading = NONE;
+ cmdout("0 setgray"); /* default of black */
+ }
+
+ if (!invis) {
+ /* There is a problem with tpic 2.0's handling of dotted ellipses.
+ In most (all?) cases, after conversion to degrees and rounding
+ to integers, startAngle and endAngle become the same, so nothing,
+ not even a dot (as requested), is printed in the output (at least
+ on my Apple LaserWriter).
+ So I (MJ) singled out this case.
+ */
+ double degStAng = convDeg(startAngle),
+ degEnAng = convDeg(endAngle);
+
+ cmdout(NEWPATH); /* save current point */
+
+ if (degStAng != degEnAng) { /* normal case */
+ doubleout(hconvPS(xc));
+ doubleout(vconvPS(yc));
+ doubleout(convPS(xrad));
+ if (xrad != yrad)
+ doubleout(convPS(yrad));
+ doubleout(degStAng);
+ doubleout(degEnAng);
+
+ if (xrad == yrad) /* for arcs and circles */
+ cmdout("arc");
+ else
+ cmdout("ellipse");
+ }
+ else { /* draw a single dot */
+ double xdot, ydot;
+ xdot = ((double)xc + (double)xrad * cos ((startAngle + endAngle) / 2.0));
+ ydot = ((double)yc + (double)yrad * sin ((startAngle + endAngle) / 2.0));
+ doubleout(hconvPS(xdot));
+ doubleout(vconvPS(ydot));
+ cmdout(MOVETO);
+ /* +1 to make sure the dot is printed */
+ doubleout(hconvPS(xdot)+1);
+ doubleout(vconvPS(ydot)+1);
+ cmdout(LINETO);
+ }
+
+ cmdout(STROKE);
+ }
+} /* end of arc */
+
+/*
+ * In pic dashed lines are created in a manner which makes boths ends
+ * of a line solid.
+ * This means that the corner of a dotted box is a dot and the corner
+ * of a dashed box is solid.
+ * The number of inches/dash must be adjusted accordingly.
+ */
+void
+flushDashedPath P2C(int, dotted, double, inchesPerDash)
+{
+ register int i;
+ int nipd = (integer) convPS((int) inchesPerDash);
+
+ if (nipd == 0)
+ nipd = 1 ;
+ if (pathLen < 2)
+ {
+ error("Path less than 2 points - ignored");
+ pathLen = 0 ;
+ return;
+ }
+
+ cmdout(NEWPATH); /* to save the current point */
+ for (i=2; i <= pathLen; i++) {
+ integer dx = hconvPS(xx[i-1]) - hconvPS(xx[i]);
+ integer dy = vconvPS(yy[i-1]) - vconvPS(yy[i]);
+ double delta = sqrt((double) (dx * dx + dy * dy));
+ double ipd;
+ int ndashes;
+
+ /*
+ * If a line is dashed there must be an odd number of dashes.
+ * This makes the first and last dash of the line solid.
+ * If a line is dotted the length of a dot + space sequence must be
+ * chosen such that (n+1) * dotlength + n space length = linelength
+ * => (dot + space) = (line - dot) / n
+ */
+ if (dotted)
+ delta -= penSize;
+ ndashes = (integer) (delta / nipd + 0.5); /* number of dashes on line */
+ /* only odd when dashed, choose odd number with smallest deviation */
+ if (ndashes > 2 && (ndashes & 0x1) == 0 && !dotted) {
+ if (fabs(nipd - delta/(ndashes - 1)) <
+ (fabs(nipd - delta/(ndashes + 1))))
+ ndashes -= 1;
+ else
+ ndashes += 1;
+ } else if (ndashes < 1)
+ ndashes = 1 ;
+ ipd = delta / ndashes;
+ if (ipd <= 0.0)
+ ipd = 1.0 ;
+ cmdout("[");
+ if (dotted) {
+ doubleout(penSize);
+ doubleout(fabs(ipd - penSize));
+ } else /* if dashed */
+ doubleout(ipd);
+
+ cmdout("]");
+ doubleout(0);
+ cmdout("setdash");
+ doubleout(hconvPS(xx[i-1]));
+ doubleout(vconvPS(yy[i-1]));
+ cmdout(MOVETO);
+ doubleout(hconvPS(xx[i]));
+ doubleout(vconvPS(yy[i]));
+ cmdout(LINETO);
+ cmdout(STROKE);
+ }
+ cmdout("[] 0 setdash");
+ pathLen = 0;
+}
+
+void
+flushPath P1C(int, invis)
+{
+ register int i;
+
+ if (pathLen < 2)
+ {
+ error("Path less than 2 points - ignored");
+ pathLen = 0 ;
+ return;
+ }
+
+/* To have filled boxes also have borders, we duplicate the object
+ specification; first time we emit a FILL command, second time we emit a
+ STROKE command.
+ There certainly exists a better way to do that in PostScript, by
+ remembering the object specification (path) across the fill command.
+ However I (MJ) am completely unproficient at PostScript...
+*/
+
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+ (void)fprintf(stderr,
+#ifdef SHORTINT
+ "flushpath(1): hh=%ld, vv=%ld, x=%lg, y=%lg, xPS=%lg, yPS=%lg\n",
+#else /* ~SHORTINT */
+ "flushpath(1): hh=%d, vv=%d, x=%lg, y=%lg, xPS=%lg, yPS=%lg\n",
+#endif /* ~SHORTINT */
+ hh, vv, xx[1], yy[1], hconvPS(xx[1]), vconvPS(yy[1]));
+#endif /* DEBUG */
+ if (shading) {
+ /* first time for shading */
+ cmdout(NEWPATH); /* to save the current point */
+ doubleout(hconvPS(xx[1]));
+ doubleout(vconvPS(yy[1]));
+ cmdout(MOVETO);
+ for (i=2; i < pathLen; i++) {
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+ (void)fprintf(stderr,
+#ifdef SHORTINT
+ "flushpath(%ld): hh=%ld, vv=%ld, x=%lg, y=%lg, xPS=%lg, yPS=%lg\n",
+#else /* ~SHORTINT */
+ "flushpath(%d): hh=%d, vv=%d, x=%lg, y=%lg, xPS=%lg, yPS=%lg\n",
+#endif /* ~SHORTINT */
+ i, hh, vv, xx[i], yy[i], hconvPS(xx[i]), vconvPS(yy[i]));
+#endif /* DEBUG */
+ doubleout(hconvPS(xx[i]));
+ doubleout(vconvPS(yy[i]));
+ cmdout(LINETO);
+ }
+ /* Shading should always apply to a closed path
+ force it and complain if necessary */
+ if (xx[1] == xx[pathLen] && yy[1] == yy[pathLen])
+ cmdout(CLOSEPATH);
+ else {
+ doubleout(hconvPS(xx[pathLen]));
+ doubleout(vconvPS(yy[pathLen]));
+ cmdout(LINETO);
+ cmdout(CLOSEPATH);
+ error("Attempt to fill a non-closed path");
+ fprintf(stderr,
+#ifdef SHORTINT
+ "\tfirst point: x=%lg, y=%lg; last point: x=%lg, y=%lg\n",
+#else /* ~SHORTINT */
+ "\tfirst point: x=%lg, y=%lg; last point: x=%lg, y=%lg\n",
+#endif /* ~SHORTINT */
+ xx[1], yy[1], xx[pathLen], yy[pathLen]);
+
+ }
+ cmdout(FILL);
+ shading = NONE;
+ cmdout("0 setgray"); /* default of black */
+ }
+
+ if (!invis) {
+ cmdout(NEWPATH); /* to save the current point */
+ doubleout(hconvPS(xx[1]));
+ doubleout(vconvPS(yy[1]));
+ cmdout(MOVETO);
+ for (i=2; i < pathLen; i++) {
+ doubleout(hconvPS(xx[i]));
+ doubleout(vconvPS(yy[i]));
+ cmdout(LINETO);
+ }
+ if (xx[1] == xx[pathLen] && yy[1] == yy[pathLen])
+ cmdout(CLOSEPATH);
+ else {
+ doubleout(hconvPS(xx[pathLen]));
+ doubleout(vconvPS(yy[pathLen]));
+ cmdout(LINETO);
+ }
+ cmdout(STROKE);
+ }
+
+ pathLen = 0;
+} /* end of flushPath */
+
+void
+flushDashed P2C(char *, cp, int, dotted)
+{
+ double inchesPerDash;
+ int savelen = pathLen;
+
+ if (sscanf(cp, " %lg ", &inchesPerDash) != 1)
+ {
+ error ("Illegal format for dotted/dashed line");
+ return;
+ }
+
+ if (inchesPerDash <= 0.0)
+ {
+ error ("Length of dash/dot cannot be negative");
+ return;
+ }
+
+ inchesPerDash = 1000 * inchesPerDash; /* to get milli-inches */
+ flushPath(1);/* print filled, always invisible bounds */
+ pathLen = savelen;
+ flushDashedPath(dotted,inchesPerDash);
+
+ cmdout("[] 0 setdash");
+} /* end of flushDashed */
+
+void
+flushSpline P1C(char *, cp)
+{ /* as exact as psdit!!! */
+ register long i ;
+ register double dxi, dyi, dxi1, dyi1;
+
+ if (*cp) {
+ double inchesPerDash;
+ int ipd ;
+
+ if (sscanf(cp, "%lg ", &inchesPerDash) != 1) {
+ error ("Illegal format for dotted/dashed spline");
+ return;
+ }
+
+ ipd = (int)(1000.0 * inchesPerDash); /* to get milli-inches */
+
+ if (ipd != 0) {
+ cmdout("[");
+ if (inchesPerDash < 0.0) /* dotted */ {
+ doubleout(penSize);
+ doubleout(fabs(convPS((int)-ipd) - penSize));
+ } else /* dashed */
+ doubleout(convPS((int)ipd));
+
+ cmdout("]");
+ doubleout(0);
+ cmdout("setdash");
+ }
+ }
+
+ if (pathLen < 2)
+ {
+ error("Spline less than two points - ignored");
+ return;
+ }
+
+ cmdout(NEWPATH); /* to save the current point */
+ doubleout(hconvPS(xx[1]));
+ doubleout(vconvPS(yy[1]));
+ cmdout(MOVETO);
+ doubleout(convPS((xx[2]-xx[1])/2));
+ doubleout(convPS((yy[2]-yy[1])/2));
+ cmdout(RLINETO);
+
+ for (i=2; i < pathLen; i++)
+ {
+ dxi = convPS(xx[i] - xx[i-1]);
+ dyi = convVPS(yy[i] - yy[i-1]);
+ dxi1 = convPS(xx[i+1] - xx[i]);
+ dyi1 = convVPS(yy[i+1] - yy[i]);
+
+ doubleout(dxi/3);
+ doubleout(dyi/3);
+ doubleout((3*dxi+dxi1)/6);
+ doubleout((3*dyi+dyi1)/6);
+ doubleout((dxi+dxi1)/2);
+ doubleout((dyi+dyi1)/2);
+ cmdout(RCURVETO);
+ }
+
+ doubleout(hconvPS(xx[pathLen]));
+ doubleout(vconvPS(yy[pathLen]));
+ cmdout(LINETO);
+
+/* doShading(); */
+ cmdout(STROKE); /* assume no shaded splines */
+ pathLen = 0;
+
+ if (*cp)
+ cmdout("[] 0 setdash");
+
+} /* end of flushSpline */
+
+/* set shading level (used with Fig 1.4-TFX). priol@irisa.fr, 89/04 */
+/* A better trial at setting shading level -- jourdan@minos.inria.fr */
+/* Count number of black bits in the pattern together with total number, */
+/* compute the average and use this as the PostScript gray level */
+void
+SetShade P1C(register char *, cp)
+{
+ int blackbits = 0, totalbits = 0;
+
+ while (*cp) {
+ switch (*cp) {
+ case '0':
+ totalbits += 4;
+ break;
+ case '1':
+ case '2':
+ case '4':
+ case '8':
+ blackbits += 1;
+ totalbits += 4;
+ break;
+ case '3':
+ case '5':
+ case '6':
+ case '9':
+ case 'a':
+ case 'A':
+ case 'c':
+ case 'C':
+ blackbits += 2;
+ totalbits += 4;
+ break;
+ case '7':
+ case 'b':
+ case 'B':
+ case 'd':
+ case 'D':
+ case 'e':
+ case 'E':
+ blackbits += 3;
+ totalbits += 4;
+ break;
+ case 'f':
+ case 'F':
+ blackbits += 4;
+ totalbits += 4;
+ break;
+ case ' ':
+ break;
+ default:
+ error("Invalid character in .tx pattern");
+ break;
+ }
+ cp++;
+ }
+ shadetp = 1.0 - ((double) blackbits / (double) totalbits);
+ shading = GRAY;
+} /* end of SetShade */
+
+void
+shadeLast P1C(char *, cp)
+{
+ char tpout[20];
+
+ if (*cp) {
+ double tempShadetp;
+
+ if (sscanf(cp, "%lg ", &tempShadetp) != 1)
+ error ("Illegal format for shade level");
+ else if (tempShadetp < 0.0 || tempShadetp > 1.0)
+ error ("Invalid shade level");
+ else
+ /* if "sh" has an argument we can safely assume that tpic 2.0 is used
+ so that all subsequent "sh" commands will come with an explicit
+ argument. Hence we may overwrite shadetp's old value */
+ /* Also note the inversion of gray levels for tpic 2.0 (0 = white,
+ 1 = black) w.r.t. PostScript (0 = black, 1 = white) */
+ shadetp = 1.0 - tempShadetp;
+ }
+
+ shading = GRAY;
+ sprintf(tpout,"%1.3f setgray",shadetp); /* priol@irisa.fr, MJ */
+ cmdout(tpout);
+} /* end of shadeLast */
+
+void
+whitenLast P1H(void)
+{
+ shading = WHITE;
+ cmdout("1 setgray");
+} /* end of whitenLast */
+
+void
+blackenLast P1H(void)
+{
+ shading = BLACK;
+ cmdout("0 setgray"); /* actually this aint needed */
+} /* end of whitenLast */
+
+/*
+static void
+doShading P1H(void)
+{
+ if (shading)
+ {
+ cmdout(FILL);
+ shading = NONE;
+ cmdout("0 setgray"); !* default of black *!
+ }
+ else
+ cmdout(STROKE);
+} !* end of doShading *!
+*/
+
+/*
+ * We need to calculate (x * convDPI * mag) / (tpicResolution * 1000)
+ * So we use doubleing point. (This should have a very small impact
+ * on the speed of the program.)
+ */
+static double
+zPixRound P2C(register double, x, /* in DVI units */
+ register double, convDPI /* dots per inch */
+ ) /* return rounded number of pixels */
+{
+ return ((x * mag * (double)convDPI /
+ (1000.0 * tpicRESOLUTION))) ;
+}
+
+#endif /* TPIC */
+
diff --git a/Build/source/texk/dvipsk/dviinput.c b/Build/source/texk/dvipsk/dviinput.c
new file mode 100644
index 00000000000..92bd81af32c
--- /dev/null
+++ b/Build/source/texk/dvipsk/dviinput.c
@@ -0,0 +1,88 @@
+/*
+ * Input bytes from the dvi file or the current virtual character.
+ * These routines could probably be sped up significantly; but they are
+ * very machine dependent, so I will leave such tuning to the installer.
+ * They simply get and return bytes in batches of one, two, three, and four,
+ * updating the current position as necessary.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#include "protos.h"
+extern FILE *dvifile ;
+extern quarterword *curpos, *curlim ;
+
+void
+abortpage P1H(void)
+{
+ error("! unexpected eof on DVI file") ;
+}
+
+shalfword /* the value returned is, however, between 0 and 255 */
+dvibyte P1H(void)
+{
+ register shalfword i ;
+ if (curpos) {
+ if (curpos>=curlim) return((shalfword)140) ;
+ return (*curpos++) ;
+ }
+ if ((i=getc(dvifile))==EOF)
+ abortpage() ;
+ return(i) ;
+}
+
+halfword
+twobytes P1H(void)
+{
+ register halfword i ;
+ i = dvibyte() ;
+ return(i*256+dvibyte()) ; }
+
+integer
+threebytes P1H(void)
+{
+ register integer i ;
+ i = twobytes() ;
+ return(i*256+dvibyte()) ; }
+
+shalfword
+signedbyte P1H(void)
+{
+ register shalfword i ;
+ if (curpos) {
+ if (curpos>=curlim)
+ error("! unexpected end of virtual packet") ;
+ i = *curpos++ ;
+ } else if ((i=getc(dvifile))==EOF)
+ abortpage() ;
+ if (i<128) return(i) ;
+ else return(i-256) ;
+}
+
+shalfword
+signedpair P1H(void)
+{
+ register shalfword i ;
+ i = signedbyte() ;
+ return(i*256+dvibyte()) ;
+}
+
+integer
+signedtrio P1H(void)
+{
+ register integer i ;
+ i = signedpair() ;
+ return(i*256+dvibyte()) ;
+}
+
+integer
+signedquad P1H(void)
+{
+ register integer i ;
+ i = signedpair() ;
+ return(i*65536+twobytes()) ;
+}
+
+void
+skipover P1C(int, i)
+{
+ while (i-->0) (void)dvibyte() ;
+}
diff --git a/Build/source/texk/dvipsk/dvips.1 b/Build/source/texk/dvipsk/dvips.1
new file mode 100644
index 00000000000..1ff6e3f0e64
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.1
@@ -0,0 +1,517 @@
+.TH DVIPS 1 "27 May 2004"
+.SH NAME
+dvips \- convert a TeX DVI file to PostScript
+.SH SYNOPSIS
+.B dvips
+[
+.I options
+]
+.IR file [\fB.dvi\fP]
+.SH DESCRIPTION
+THIS MAN PAGE IS OBSOLETE!
+See the Texinfo documentation instead.
+You can read it either in Emacs or with the standalone
+.B info
+program which comes with the GNU texinfo distribution as
+prep.ai.mit.edu:pub/gnu/texinfo*.tar.gz.
+.PP
+The program
+.B dvips
+takes a DVI file
+.IR file [\fB.dvi\fP]
+produced by TeX (or by some other processor such as GFtoDVI) and
+converts it to PostScript, normally sending the result directly to the
+(laser)printer. The DVI file may be specified without the
+.B .dvi
+extension. Fonts used may either be resident in the printer or defined
+as bitmaps in PK files, or a `virtual' combination of both. If the
+.B mktexpk
+program is installed,
+.B dvips
+will automatically invoke METAFONT to generate fonts that don't already
+exist.
+.PP
+For more information, see the Texinfo manual
+.IR dvips.texi ,
+which should be installed somewhere on your system, hopefully accessible
+through the standard Info tree.
+.SH OPTIONS
+.TP
+.B -a
+Conserve memory by making three passes over the .dvi file instead of two
+and only loading those characters actually used. Generally only useful
+on machines with a very limited amount of memory, like some PCs.
+.TP
+.B -A
+Print only odd pages (TeX pages, not sequence pages).
+.TP
+.B -b num
+Generate
+.I num
+copies of each page, but duplicating the page body rather than using the
+.I #numcopies
+option. This can be useful in conjunction with a header file setting
+.I \ebop-hook
+to do color separations or other neat tricks.
+.TP
+.B -B
+Print only even pages (TeX pages, not sequence pages).
+.TP
+.B -c num
+Generate
+.I num
+copies of every page. Default is 1. (For collated copies, see the
+.I -C
+option below.)
+.TP
+.B -C num
+Create
+.I num
+copies, but collated (by replicating the data in the PostScript file).
+Slower than the
+.I -c
+option, but easier on the hands, and faster than resubmitting the same
+PostScript file multiple times.
+.TP
+.B -d num
+Set the debug flags. This is intended only for emergencies or for
+unusual fact-finding expeditions; it will work only if
+.B dvips
+has been compiled with the DEBUG option. If nonzero, prints additional
+information on standard error. The number is taken as a set of
+independent bits. The meaning of each bit follows. 1=specials;
+2=paths; 4=fonts; 8=pages; 16=headers; 32=font compression; 64=files;
+128=memory; 256=Kpathsea stat(2) calls; 512=Kpathsea hash table lookups;
+1024=Kpathsea path element expansion; 2048=Kpathsea searches. To trace
+everything having to do with file searching and opening, use 3650 (2048
++ 1024 + 512 + 64 + 2). To track all classes, you can use `-1' (output
+is extremely voluminous).
+.TP
+.B -D num
+Set the resolution in dpi (dots per inch) to
+.IR num .
+This affects the choice of bitmap fonts that are loaded and also the
+positioning of letters in resident PostScript fonts. Must be between 10
+and 10000. This affects both the horizontal and vertical resolution.
+If a high resolution (something greater than 400 dpi, say) is selected,
+the
+.I -Z
+flag should probably also be used.
+.TP
+.B -e num
+Make sure that each character is placed at most this many pixels from
+its `true' resolution-independent position on the page. The default
+value of this parameter is resolution dependent. Allowing individual
+characters to `drift' from their correctly rounded positions by a few
+pixels, while regaining the true position at the beginning of each new
+word, improves the spacing of letters in words.
+.TP
+.B -E
+makes
+.B dvips
+attempt to generate an EPSF file with a tight bounding box. This only
+works on one-page files, and it only looks at marks made by characters
+and rules, not by any included graphics. In addition, it gets the glyph
+metrics from the
+.I tfm
+file, so characters that lie outside their enclosing
+.I tfm
+box may confuse it. In addition, the bounding box might be a bit too
+loose if the character glyph has significant left or right side
+bearings. Nonetheless, this option works well for creating small EPSF
+files for equations or tables or the like. (Note, of course, that
+.B dvips
+output is resolution dependent and thus does not make very good EPSF
+files, especially if the images are to be scaled; use these EPSF files
+with a great deal of care.)
+.TP
+.B -f
+Run as a filter. Read the
+.I .dvi
+file from standard input and write the PostScript to standard output.
+The standard input must be seekable, so it cannot be a pipe. If you
+must use a pipe, write a shell script that copies the pipe output to a
+temporary file and then points
+.B dvips
+at this file. This option also disables the automatic reading of the
+.I PRINTER
+environment variable, and turns off the automatic sending of control D
+if it was turned on with the
+.I -F
+option or in the configuration file; use
+.I -F
+after this option if you want both.
+.TP
+.B -F
+Causes Control-D (ASCII code 4) to be appended as the very last
+character of the PostScript file. This is useful when
+.B dvips
+is driving the printer directly instead of working through a spooler,
+as is common on extremely small systems. NOTE! DO NOT USE THIS OPTION!
+.TP
+.B -G
+Causes
+.B dvips
+to shift non-printing characters to higher-numbered positions.
+This may be useful sometimes.
+.TP
+.B -h name
+Prepend file
+.I name
+as an additional header file. (However, if the name is simply `-'
+suppress all header files from the output.) This header file gets added
+to the PostScript
+.IR userdict .
+.TP
+.B -i
+Make each section be a separate file. Under certain circumstances,
+.B dvips
+will split the document up into `sections' to be processed
+independently; this is most often done for memory reasons. Using this
+option tells
+.B dvips
+to place each section into a separate file; the new file names are
+created replacing the suffix of the supplied output file name by a
+three-digit sequence number. This option is most often used in
+conjunction with the
+.I -S
+option which sets the maximum section length in pages. For instance,
+some phototypesetters cannot print more than ten or so consecutive pages
+before running out of steam; these options can be used to automatically
+split a book into ten-page sections, each to its own file.
+.TP
+.B -j
+Download only needed characters from Type 1 fonts. This is the
+default in the current release. Some debugging flags trace this operation.
+You can also control partial downloading on a per-font basis, via the
+.B psfonts.map
+file.
+.TP
+.B -k
+Print crop marks. This option increases the paper size (which should be
+specified, either with a paper size special or with the
+.I -T
+option) by a half inch in each dimension. It translates each page by a
+quarter inch and draws cross-style crop marks. It is mostly useful with
+typesetters that can set the page size automatically.
+.TP
+.B -K
+This option causes comments in included PostScript graphics, font files,
+and headers to be removed. This is sometimes necessary to get around
+bugs in spoolers or PostScript post-processing programs. Specifically,
+the %%Page comments, when left in, often cause difficulties. Use of
+this flag can cause some included graphics to fail, since the PostScript
+header macros from some software packages read portions of the input
+stream line by line, searching for a particular comment. This option
+has been turned off by default because PostScript previewers and
+spoolers have been getting better.
+.TP
+.B -l num
+The last page printed will be the first one numbered
+.I num
+Default is the last page in the document. If the
+.I num
+is prefixed by an equals sign, then it (and any argument to the
+.I -p
+option) is treated as a sequence number, rather than a value to compare
+with
+.I \ecount0
+values. Thus, using
+.I -l =9
+will end with the ninth page of the document, no matter what the pages
+are actually numbered.
+.TP
+.B -m
+Specify manual feed for printer.
+.TP
+.B -mode mode
+Use
+.I mode
+as the Metafont device name for path searching and font
+generation. This overrides any value from configuration files. With
+the default paths, explicitly specifying the mode also makes the program
+assume the fonts are in a subdirectory named
+.IR mode .
+.TP
+.B -M
+Turns off the automatic font generation facility. If any fonts are
+missing, commands to generate the fonts are appended to the file
+.I missfont.log
+in the current directory; this file can then be executed and deleted to
+create the missing fonts.
+.TP
+.B -n num
+At most
+.I num
+pages will be printed. Default is 100000.
+.TP
+.B -N
+Turns off structured comments; this might be necessary on some systems
+that try to interpret PostScript comments in weird ways, or on some
+PostScript printers. Old versions of TranScript in particular cannot
+handle modern Encapsulated PostScript.
+.TP
+.B -noomega
+This will disable the use of Omega extensions when interpreting DVI files.
+By default, the additional opcodes
+.I 129
+and
+.I 134
+are recognized by dvips as Omega extensions and interpreted as requests to
+set 2-byte characters. The only drawback is that the virtual font array will
+(at least temporarily) require 65536 positions instead of the default 256
+positions, i.e. the memory requirements of dvips will be slightly larger. If
+you find this unacceptable or encounter another problem with the Omega
+extensions, you can switch this extension off by using
+.B -noomega
+(but please do send a bug report if you find such problems - see the bug
+address in the
+.B AUTHORS
+section below).
+.TP
+.B -o name
+The output will be sent to file
+.I name
+If no file name is given, the default name is
+.I file.ps
+where the .dvi file was called
+.IR file.dvi ;
+if this option isn't given, any default in the configuration file is
+used. If the first character of the supplied output file name is an
+exclamation mark, then the remainder will be used as an argument to
+.IR popen ;
+thus, specifying
+.I !lpr
+as the output file will automatically queue the file for printing.
+This option also disables the automatic reading of the
+.I PRINTER
+environment variable, and turns off the automatic sending of control D
+if it was turned on with the
+.I -F
+option or in the configuration file; use
+.I -F
+after this option if you want both.
+.TP
+.B -O offset
+Move the origin by a certain amount. The
+.I offset
+is a comma-separated pair of dimensions, such as
+.I .1in,-.3cm
+(in the same syntax used in the
+.I papersize
+special). The origin of the page is shifted from the
+default position (of one inch down, one inch to the right from the upper
+left corner of the paper) by this amount.
+.TP
+.B -p num
+The first page printed will be the first one numbered
+.IR num .
+Default is the first page in the document. If the
+.I num
+is prefixed by an equals sign, then it (and any argument to the
+.I -l
+option) is treated as a sequence number, rather than a value to compare
+with
+.I \ecount0
+values. Thus, using
+.I -p =3
+will start with the third page of the document, no matter what the pages
+are actually numbered.
+.TP
+.B -pp pagelist
+A comma-separated list of pages and ranges (a-b) may be given, which
+will be interpreted as
+.I \ecount0
+values. Pages not specified will not be printed. Multiple
+.B -pp
+options may be specified or all pages and page ranges can be
+specified with one
+.B -pp
+option.
+.TP
+.B -P printername
+Sets up the output for the appropriate printer. This is implemented by
+reading in
+.I config.printername
+, which can then set the output pipe (as in,
+.I !lpr -Pprintername
+as well as the font paths and any other
+.I config.ps
+defaults for that printer only. Note that
+.I config.ps
+is read before
+.I config.printername
+In addition, another file called
+.I ~/.dvipsrc
+is searched for immediately after
+.IR config.ps ;
+this file is intended for user defaults. If no
+.I -P
+command is given, the environment variable
+.I PRINTER
+is checked. If that variable exists, and a corresponding configuration
+file exists, that configuration file is read in.
+.TP
+.B -q
+Run in quiet mode. Don't chatter about pages converted, etc.; report
+nothing but errors to standard error.
+.TP
+.B -r
+Stack pages in reverse order. Normally, page 1 will be printed first.
+.TP
+.B -R
+Run in secure mode. This means that ``backtick'' commands from a
+.I \especial{}
+or
+.I \epsffile{}
+macro in the (La)TeX source like
+.I \especial{psfile="`zcat foo.ps.Z"}
+or
+.I \epsffile[72 72 540 720]{"`zcat screendump.ps.gz"}
+are not executed.
+.TP
+.B -s
+Causes the entire global output to be enclosed in a save/restore pair.
+This causes the file to not be truly conformant, and is thus not
+recommended, but is useful if you are driving the printer directly and
+don't care too much about the portability of the output.
+.TP
+.B -S num
+Set the maximum number of pages in each `section'. This option is most
+commonly used with the
+.I -i
+option; see that documentation above for more information.
+.TP
+.B -t papertype
+This sets the paper type to
+.IR papertype .
+The
+.I papertype
+should be defined in one of the configuration files, along with the
+appropriate code to select it. (Currently known types include
+.BR letter ,
+.BR legal ,
+.BR ledger ,
+.BR a4 ,
+.BR a3 ).
+You can also specify
+.BR -t " " landscape ,
+which rotates a document by 90 degrees. To rotate a document whose size
+is not letter, you can use the
+.I -t
+option twice, once for the page size, and once for landscape.
+You should not use any
+.I -t
+option when the DVI file already contains a
+.I papersize
+special, as is done by some LaTeX packages, notably hyperref.sty.
+
+The upper left corner of each page in the
+.I .dvi
+file is placed one inch from the left and one inch from the top. Use of
+this option is highly dependent on the configuration file. Note that
+executing the
+.B letter
+or
+.B a4
+or other PostScript operators cause the document to be nonconforming and
+can cause it not to print on certain printers, so the paper size should
+not execute such an operator if at all possible.
+.TP
+.B -T papersize
+Set the paper size to the given pair of dimensions. This option takes
+its arguments in the same style as
+.IR -O .
+It overrides any paper size special in the dvi file.
+.TP
+.B -u psmapfile
+Set
+.I psmapfile
+to be the file that dvips uses for looking up PostScript font aliases. If
+.I psmapfile
+begins with a
+.B +
+character, then the rest of the name is used as the name of the map file,
+and the map file is appended to the list of map files (instead of replacing
+the list). In either case, if
+.I psmapfile
+has no extension, then
+.B .map
+is added at the end.
+.TP
+.B -U
+Disable a PostScript virtual memory saving optimization that stores the
+character metric information in the same string that is used to store
+the bitmap information. This is only necessary when driving the Xerox
+4045 PostScript interpreter. It is caused by a bug in that interpreter
+that results in `garbage' on the bottom of each character. Not
+recommended unless you must drive this printer.
+.TP
+.B -v
+Print the
+.B dvips
+version number and exit.
+.TP
+.B -V
+Download non-resident PostScript fonts as bitmaps. This requires use of
+`gsftopk' or `pstopk' or some other such program(s) in order to generate
+the required bitmap fonts; these programs are supplied with
+.BR dvips .
+.TP
+.B -x num
+Set the
+magnification ratio to
+.IR num /1000.
+Overrides the magnification specified in the .dvi file. Must be
+between 10 and 100000. Instead of an integer,
+.I num
+may be a real number for increased precision.
+.TP
+.B -X num
+Set the horizontal resolution in dots per inch to
+.IR num .
+.TP
+.B -y num
+Set the
+magnification ratio to
+.IR num /1000
+times the magnification specified in the .dvi file.
+See
+.B -x
+above.
+.TP
+.B -Y num
+Set the vertical resolution in dots per inch to
+.IR num .
+.TP
+.B -z
+Pass
+.B html
+hyperdvi specials through to the output for eventual
+distillation into PDF. This is not enabled by default to avoid
+including the header files unnecessarily, and use of temporary files in
+creating the output.
+.TP
+.B -Z
+Causes bitmapped fonts to be compressed before they are downloaded,
+thereby reducing the size of the PostScript font-downloading
+information. Especially useful at high resolutions or when very large
+fonts are used. Will slow down printing somewhat, especially on early
+68000-based PostScript printers.
+.SH "SEE ALSO"
+mf(1), afm2tfm(1), tex(1), latex(1), lpr(1),
+.IR dvips.texi .
+.SH ENVIRONMENT
+Dvipsk uses the same environment variables and algorithms for finding
+font files as TeX and its friends do. See the documentation for the
+Kpathsea library for details. (Repeating it here is too cumbersome.)
+.PP
+KPATHSEA_DEBUG: Trace Kpathsea lookups; set to -1 for complete tracing.
+.PP
+PRINTER: see above.
+.SH NOTES
+PostScript is a registered trademark of Adobe Systems Incorporated.
+.SH AUTHOR
+Tomas Rokicki <rokicki@cs.stanford.edu>; extended to virtual fonts
+by Don Knuth. Path searching and configuration modifications by
+kb@mail.tug.org.
diff --git a/Build/source/texk/dvipsk/dvips.c b/Build/source/texk/dvipsk/dvips.c
new file mode 100644
index 00000000000..a112e24f58c
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.c
@@ -0,0 +1,1394 @@
+/*
+ * This is the main routine.
+ */
+#ifndef DEFRES
+#define DEFRES (600)
+#endif
+
+#include "dvips.h" /* The copyright notice there is included too! */
+#ifdef KPATHSEA
+#include <kpathsea/c-pathch.h>
+#include <kpathsea/proginit.h>
+#include <kpathsea/progname.h>
+#include <kpathsea/tex-hush.h>
+#include <kpathsea/tex-make.h>
+#include <kpathsea/lib.h>
+#ifdef strdup
+#undef strdup
+#endif
+#define strdup xstrdup
+#include "paths.h"
+#else /* ! KPATHSEA */
+#include <stdlib.h> /* for malloc, etc. */
+#if !defined(SYSV) && !defined(WIN32)
+extern char *strtok() ; /* some systems don't have this in strings.h */
+#endif
+#if defined(WIN32)
+#include <io.h>
+#include <fcntl.h>
+#include <string.h>
+#define O_BINARY _O_BINARY
+#endif
+#define DIR_SEP DIRSEP
+#endif /* KPATHSEA */
+#ifdef VMS
+#define GLOBAL globaldef
+#ifdef __GNUC__
+#include "climsgdef.h" /* created by hand, extracted from STARLET.MLB */
+ /* and put in GNU_CC:[INCLUDE.LOCAL] */
+#include "ctype.h"
+#include "descrip.h"
+#else
+#include climsgdef
+#include ctype
+#include descrip
+#endif
+#endif
+/*
+ * First we define some globals.
+ */
+#ifdef VMS
+ static char ofnme[252],infnme[252],pap[40],thh[20];
+#endif
+fontdesctype *fonthead ; /* list of all fonts mentioned so far */
+fontdesctype *curfnt ; /* the currently selected font */
+sectiontype *sections ; /* sections to process document in */
+Boolean partialdownload = 1 ; /* turn on partial downloading */
+Boolean manualfeed ; /* manual feed? */
+Boolean compressed ; /* compressed? */
+Boolean downloadpspk ; /* use PK for downloaded PS fonts? */
+Boolean safetyenclose ;
+ /* enclose in save/restore for stupid spoolers? */
+Boolean removecomments = 0 ; /* remove comments from included PS? */
+Boolean nosmallchars ; /* disable small char optimization for X4045? */
+Boolean cropmarks ; /* add cropmarks? */
+Boolean abspage = 0 ; /* are page numbers absolute? */
+Boolean tryepsf = 0 ; /* should we try to make it espf? */
+Boolean secure = 0 ; /* make safe for suid */
+int secure_option = 0; /* set by -R */
+int collatedcopies = 1 ; /* how many collated copies? */
+int sectioncopies = 1 ; /* how many times to repeat each section? */
+integer pagecopies = 1 ; /* how many times to repeat each page? */
+shalfword linepos = 0 ; /* where are we on the line being output? */
+integer maxpages ; /* the maximum number of pages */
+Boolean notfirst, notlast ; /* true if a first page was specified */
+Boolean evenpages, oddpages ; /* true if doing only even/only odd pages */
+Boolean pagelist ; /* true if using page ranges */
+Boolean sendcontrolD ; /* should we send a control D at end? */
+Boolean shiftlowchars ; /* shift [0-32, 127] characters higher? */
+integer firstpage ; /* the number of the first page if specified */
+integer lastpage ;
+integer firstseq ;
+integer lastseq ;
+integer hpapersize, vpapersize ; /* horizontal and vertical paper size */
+integer hoff, voff ; /* horizontal and vertical offsets */
+integer maxsecsize = 0; /* the maximum size of a section */
+integer firstboploc ; /* where the first bop is */
+Boolean sepfiles ; /* each section in its own file? */
+int numcopies ; /* number of copies of each page to print */
+char *oname ; /* output file name */
+char *iname ; /* dvi file name */
+char *fulliname ; /* same, with current working directory */
+char *strings ; /* strings for program */
+char *nextstring, *maxstring ; /* string pointers */
+FILE *dvifile, *bitfile ; /* dvi and output files */
+quarterword *curpos ; /* current position in virtual character packet */
+quarterword *curlim ; /* final byte in virtual character packet */
+fontmaptype *ffont ; /* first font in current frame */
+real conv ; /* conversion ratio, pixels per DVI unit */
+real vconv ; /* conversion ratio, pixels per DVI unit */
+real alpha ; /* conversion ratio, DVI unit per TFM unit */
+double mag ; /* the magnification of this document */
+integer num, den ; /* the numerator and denominator */
+int overridemag ; /* substitute for mag value in DVI file? */
+int actualdpi = DEFRES ; /* the actual resolution of the printer */
+int vactualdpi = DEFRES ; /* the actual resolution of the printer */
+int maxdrift ; /* max pixels away from true rounded position */
+int vmaxdrift ; /* max pixels away from true rounded position */
+char *paperfmt ; /* command-line paper format */
+int landscape = 0 ; /* landscape mode */
+integer fontmem ; /* memory remaining in printer */
+integer pagecount ; /* page counter for the sections */
+integer pagenum ; /* the page number we currently look at */
+long bytesleft ; /* number of bytes left in raster */
+quarterword *raster ; /* area for raster manipulations */
+integer hh, vv ; /* horizontal and vertical pixel positions */
+Boolean noomega = 0 ; /* Omega extensions are enabled */
+
+/*-----------------------------------------------------------------------*
+ * The PATH definitions cannot be defined on the command line because so many
+ * DEFINE's overflow the DCL buffer when using the GNU CC compiler.
+ *-----------------------------------------------------------------------*/
+#if defined(VMS) && defined(__GNUC__)
+#include "vms_gcc_paths.h"
+#endif
+
+char *infont ; /* is the file we are downloading a font? */
+#ifndef KPATHSEA
+#ifdef ATARIST
+# define TFMPATH "."
+# define PKPATH "."
+# define VFPATH "."
+# define FIGPATH "."
+# define HEADERPATH "."
+# define CONFIGPATH "."
+#endif
+char *tfmpath = TFMPATH ; /* pointer to directories for tfm files */
+char *pkpath = PKPATH ; /* pointer to directories for pk files */
+char *vfpath = VFPATH ; /* pointer to directories for vf files */
+char *figpath = FIGPATH ; /* pointer to directories for figure files */
+char *headerpath = HEADERPATH ; /* pointer to directories for header files */
+char *configpath = CONFIGPATH ; /* where to find config files */
+#ifndef PICTPATH
+#ifndef __THINK__
+#define PICTPATH "."
+#else
+#define PICTPATH ":"
+#endif
+#endif
+char *pictpath = PICTPATH ; /* where IFF/etc. pictures are found */
+#ifdef SEARCH_SUBDIRECTORIES
+char *fontsubdirpath = FONTSUBDIRPATH ;
+#endif
+#endif /* ! KPATHSEA */
+#ifdef FONTLIB
+char *flipath = FLIPATH ; /* pointer to directories for fli files */
+char *fliname = FLINAME ; /* pointer to names of fli files */
+#endif
+integer swmem ; /* font memory in the PostScript printer */
+int quiet ; /* should we only print errors to stderr? */
+int filter ; /* act as filter default output to stdout,
+ default input to stdin? */
+int prettycolumn ; /* the column we are at when running pretty */
+int gargc ; /* global argument count */
+char **gargv ; /* global argument vector */
+int totalpages = 0 ; /* total number of pages */
+Boolean reverse ; /* are we going reverse? */
+Boolean usesPSfonts ; /* do we use local PostScript fonts? */
+Boolean usesspecial ; /* do we use \special? */
+Boolean headers_off ; /* do we send headers or not? */
+Boolean usescolor ; /* IBM: color - do we use colors? */
+char *headerfile ; /* default header file */
+char *warningmsg ; /* a message to write, if set in config file */
+Boolean multiplesects ; /* more than one section? */
+Boolean disablecomments ; /* should we suppress any EPSF comments? */
+char *printer ; /* what printer to send this to? */
+char *mfmode ; /* default MF mode */
+char *mflandmode ; /* allow an optional landscape mode def */
+int mfmode_option; /* set by -mode command-line option */
+int oname_option; /* set by -o option */
+frametype frames[MAXFRAME] ; /* stack for virtual fonts */
+integer pagecost; /* memory used on the page being prescanned */
+int delchar; /* characters to delete from prescanned page */
+integer fsizetol; /* max dvi units error for psfile font sizes */
+Boolean includesfonts; /* are fonts used in included psfiles? */
+fontdesctype *fonthd[MAXFONTHD];/* list headers for included fonts of 1 name */
+int nextfonthd; /* next unused fonthd[] index */
+char xdig[256]; /* table for reading hexadecimal digits */
+char banner[] = BANNER ; /* our startup message */
+char banner2[] = BANNER2 ; /* our second startup message */
+Boolean noenv = 0 ; /* ignore PRINTER envir variable? */
+Boolean dopprescan = 0 ; /* do we do a scan before the prescan? */
+extern int dontmakefont ;
+struct papsiz *papsizes ; /* all available paper size */
+int headersready ; /* ready to check headers? */
+#if defined(MSDOS) || defined(OS2) || defined(ATARIST)
+char *mfjobname = NULL; /* name of mfjob file if given */
+FILE *mfjobfile = NULL; /* mfjob file for font making instructions */
+#endif
+#ifdef DEBUG
+integer debug_flag = 0;
+#endif /* DEBUG */
+char queryline[256]; /* interactive query of options */
+int qargc;
+char *qargv[32];
+char queryoptions;
+/*
+ * This routine calls the following externals:
+ */
+#include "protos.h"
+#ifdef HPS
+Boolean HPS_FLAG = 0 ;
+#endif
+extern int lastresortsizes[];
+extern char errbuf[];
+
+/* Declare the routine to get the current working directory. */
+
+/* The getwd/getcwd stuff here is not portable, and I don't think it's
+ worth it to include xgetcwd.d just so we can print the full pathname
+ of the DVI file in the output. --karl */
+#define IGNORE_CWD
+
+#ifndef IGNORE_CWD
+#ifndef HAVE_GETCWD
+extern char *getwd (); /* said to be faster than getcwd (SunOS man page) */
+#define getcwd(b, len) getwd(b) /* used here only when b nonnull */
+#else
+#ifdef ANSI
+extern char *getcwd (char *, int);
+#else
+extern char *getcwd ();
+#endif /* not ANSI */
+#endif /* not HAVE_GETWD */
+#if defined(SYSV) || defined(VMS) || (defined(MSDOS) && !defined(__DJGPP__)) || defined(OS2) || defined(ATARIST)
+#define MAXPATHLEN (256)
+#else
+#include <sys/param.h> /* for MAXPATHLEN */
+#endif
+#endif /* not IGNORE_CWD */
+
+static char *helparr[] = {
+#ifndef VMCMS
+"Usage: dvips [OPTION]... FILENAME[.dvi]",
+#else
+" VM/CMS Usage:",
+" dvips fname [ftype [fmode]] [options]",
+"or",
+" dvips fname[.ftype[.fmode]] [options]",
+#endif
+"a* Conserve memory, not time A Print only odd (TeX) pages ",
+"b # Page copies, for posters e.g. B Print only even (TeX) pages ",
+"c # Uncollated copies C # Collated copies ",
+"d # Debugging D # Resolution ",
+"e # Maxdrift value E* Try to create EPSF ",
+"f* Run as filter F* Send control-D at end ",
+#ifdef SHIFTLOWCHARS
+" G* Shift low chars to higher pos. ",
+#endif
+"h f Add header file ",
+"i* Separate file per section ",
+"j* Download fonts partially ",
+"k* Print crop marks K* Pull comments from inclusions ",
+"l # Last page ",
+"m* Manual feed M* Don't make fonts ",
+"mode s Metafont device name ",
+"n # Maximum number of pages N* No structured comments ",
+"noomega Disable Omega extensions ",
+"o f Output file O c Set/change paper offset ",
+#if defined(MSDOS) || defined(OS2)
+"p # First page P s Load $s.cfg ",
+#else
+"p # First page P s Load config.$s ",
+#endif
+"pp l Print only pages listed ",
+"q* Run quietly ",
+"r* Reverse order of pages R* Run securely ",
+"s* Enclose output in save/restore S # Max section size in pages ",
+"t s Paper format T c Specify desired page size ",
+"u s PS mapfile U* Disable string param trick ",
+"v Print version number and quit V* Send downloadable PS fonts as PK",
+"x # Override dvi magnification X # Horizontal resolution ",
+"y # Multiply by dvi magnification Y # Vertical resolution ",
+#ifdef HPS
+"z* Hyper PS Z* Compress bitmap fonts ",
+#else
+" Z* Compress bitmap fonts ",
+#endif
+/* "- Interactive query of options", */
+" # = number f = file s = string * = suffix, `0' to turn off ",
+" c = comma-separated dimension pair (e.g., 3.2in,-32.1cm) ",
+" l = comma-separated list of page ranges (e.g., 1-4,7-9) ", 0} ;
+
+void
+help P1C(int, status)
+{
+ char **p;
+ FILE *f = status == 0 ? stdout : stderr;
+#ifdef KPATHSEA
+ extern KPSEDLL char *kpse_bug_address;
+#endif
+ for (p=helparr; *p; p++)
+ fprintf (f, "%s\n", *p);
+
+ putc ('\n', f);
+#ifdef KPATHSEA
+ fputs (kpse_bug_address, f);
+#endif
+}
+/*
+ * This error routine prints an error message; if the first
+ * character is !, it aborts the job.
+ */
+
+static char *progname ;
+
+void
+error_with_perror P2C(char *, s, char *, fname)
+{
+ if (prettycolumn > 0)
+ fprintf(stderr,"\n");
+ prettycolumn = 0;
+ (void)fprintf(stderr, "%s: %s", progname, s) ;
+ if (fname) {
+ putc (' ', stderr);
+ perror (fname);
+ } else {
+ putc ('\n', stderr);
+ }
+
+ if (*s=='!') {
+ if (bitfile != NULL) {
+ cleanprinter() ;
+ }
+ exit(1) ; /* fatal */
+ }
+}
+
+/*
+ * This error routine prints an error message; if the first
+ * character is !, it aborts the job.
+ */
+void
+error P1C(char *, s)
+{
+ error_with_perror (s, NULL);
+}
+
+#ifndef KPATHSEA
+char *concat P2C(char *, s1, char *, s2)
+{
+ char *s = malloc(strlen(s1)+strlen(s2)+1);
+ if (s == NULL) {
+ fprintf(stderr, "Malloc failed to give %d bytes.\nAborting\n",
+ strlen(s1)+strlen(s2)+1);
+ exit(1);
+ }
+ strcpy(s, s1);
+ strcat(s, s2);
+}
+#endif
+
+/* Report a warning if both checksums are nonzero, they don't match, and
+ the user hasn't turned it off. */
+
+void
+check_checksum P3C(unsigned, c1, unsigned, c2, const char *, name)
+{
+ if (c1 && c2 && c1 != c2
+#ifdef KPATHSEA
+ && !kpse_tex_hush ("checksum")
+#endif
+ ) {
+ sprintf (errbuf, "Checksum mismatch in %s", name);
+ error (errbuf);
+ }
+}
+
+/*
+ * This is our malloc that checks the results. We debug the
+ * allocations but not the frees, since memory fragmentation
+ * might be such that we can never use the free'd memory and
+ * it's wise to be conservative. The only real place we free
+ * is when repacking *huge* characters anyway.
+ */
+#ifdef DEBUG
+static integer totalalloc = 0 ;
+#endif
+char *mymalloc P1C(integer, n)
+{
+ char *p ;
+
+#ifdef SMALLMALLOC
+ if (n > 65500L)
+ error("! can't allocate more than 64K!") ;
+#endif
+ if (n <= 0) /* catch strange 0 mallocs in flib.c without breaking code */
+ n = 1 ;
+#ifdef DEBUG
+ totalalloc += n ;
+ if (dd(D_MEM)) {
+#ifdef SHORTINT
+ fprintf(stderr, "Alloc %ld\n", n) ;
+#else
+ fprintf(stderr, "Alloc %d\n", n) ;
+#endif
+ }
+#endif
+ p = (char *) malloc(n) ;
+ if (p == NULL)
+ error("! no memory") ;
+ return p ;
+}
+void
+morestrings P1H(void) {
+ strings = mymalloc((integer)STRINGSIZE) ;
+ nextstring = strings ;
+ maxstring = strings + STRINGSIZE - 200 ;
+ *nextstring++ = 0 ;
+}
+void
+checkstrings P1H(void) {
+ if (nextstring - strings > STRINGSIZE / 2)
+ morestrings() ;
+}
+/*
+ * Initialize sets up all the globals and data structures.
+ */
+void
+initialize P1H(void)
+{
+ int i;
+ char *s;
+
+ nextfonthd = 0;
+ for (i=0; i<256; i++)
+ xdig[i] = 0;
+ i = 0;
+ for (s="0123456789ABCDEF"; *s!=0; s++)
+ xdig[(int)*s] = i++;
+ i = 10;
+ for (s="abcdef"; *s!=0; s++)
+ xdig[(int)*s] = i++;
+ morestrings() ;
+ maxpages = 100000 ;
+ numcopies = 1 ;
+ iname = fulliname = strings ;
+ bitfile = NULL ;
+ bytesleft = 0 ;
+ swmem = SWMEM ;
+ oname = OUTPATH ;
+ sendcontrolD = 0 ;
+ shiftlowchars = 0 ;
+ multiplesects = 0 ;
+ disablecomments = 0 ;
+ maxdrift = -1 ;
+ vmaxdrift = -1 ;
+ dontmakefont = !MAKE_TEX_PK_BY_DEFAULT;
+}
+/*
+ * This routine copies a string into the string `pool', safely.
+ */
+char *
+newstring P1C(char *, s)
+{
+ int l ;
+
+ if (s == NULL)
+ return(NULL) ;
+ l = strlen(s) ;
+ if (nextstring + l >= maxstring)
+ morestrings() ;
+ if (nextstring + l >= maxstring)
+ error("! out of string space") ;
+ (void)strcpy(nextstring, s) ;
+ s = nextstring ;
+ nextstring += l + 1 ;
+ return(s) ;
+}
+void newoutname P1H(void) {
+ static int seq = 0 ;
+ static char *seqptr = 0 ;
+ char *p ;
+
+ if (oname == 0 || *oname == 0)
+ error("! need an output file name to specify separate files") ;
+ if (*oname != '!' && *oname != '|') {
+ if (seqptr == 0) {
+ oname = newstring(oname) ;
+ seqptr = 0 ;
+ for (p = oname; *p; p++) /* find last dot after last slash */
+ if (*p == '.')
+ seqptr = p + 1 ;
+ else if (*p == '/')
+ seqptr = 0 ;
+#ifdef DOSISH
+ else if (*p == '\\')
+ seqptr = 0 ;
+#endif
+ if (seqptr == 0)
+ seqptr = p ;
+ nextstring += 5 ; /* make room for the number, up to five digits */
+ }
+ sprintf(seqptr, "%03d", ++seq) ;
+ }
+}
+/*
+ * This routine reverses a list, where a list is defined to be any
+ * structure whose first element is a pointer to another such structure.
+ */
+VOID *revlist P1C(VOID *, p)
+{
+ struct list {
+ struct list *next ;
+ } *pp = (struct list *)p, *qq = 0, *tt ;
+
+ while (pp) {
+ tt = pp->next ;
+ pp->next = qq ;
+ qq = pp ;
+ pp = tt ;
+ }
+ return (VOID *)qq ;
+}
+/* this asks for a new set of arguments from the command line */
+void
+queryargs P1H(void)
+{
+ fputs("Options: ",stdout);
+ fgets(queryline,256,stdin);
+ qargc=1;
+ if ( (qargv[1] = strtok(queryline," \n")) != (char *)NULL ) {
+ qargc=2;
+ while ( ((qargv[qargc] = strtok((char *)NULL," \n")) != (char *)NULL)
+ && (qargc < 31) )
+ qargc++;
+ }
+ qargv[qargc] = (char *)NULL;
+}
+
+/*
+ * Finally, our main routine.
+ */
+extern void handlepapersize() ;
+#ifdef VMS
+main P1H(void)
+#else
+int
+main P2C(int, argc, char **, argv)
+#endif
+{
+ int i, lastext = -1 ;
+#ifdef MVSXA
+ int firstext = -1 ;
+#endif
+ register sectiontype *sects ;
+
+#ifdef KPATHSEA
+ kpse_set_program_name (argv[0], "dvips");
+ kpse_set_program_enabled (kpse_pk_format, MAKE_TEX_PK_BY_DEFAULT, kpse_src_compile);
+#endif
+
+#ifdef __THINK__
+ argc = dcommand(&argv) ; /* do I/O stream redirection */
+#endif
+#ifdef VMS /* Grab the command-line buffer */
+ short len_arg;
+ $DESCRIPTOR( verb_dsc, "DVIPS "); /* assume the verb is always DVIPS */
+ struct dsc$descriptor_d temp_dsc = { 0, DSC$K_DTYPE_T, DSC$K_CLASS_D, 0};
+
+ progname = &thh[0] ;
+ strcpy(progname,"DVIPS%ERROR");
+
+ lib$get_foreign( &temp_dsc, 0, &len_arg, 0); /* Get the command line */
+ str$prefix(&temp_dsc, &verb_dsc); /* prepend the VERB */
+ len_arg += verb_dsc.dsc$w_length; /* update the length */
+ temp_dsc.dsc$a_pointer[len_arg] = '\0'; /* terminate the string */
+ gargv = &temp_dsc.dsc$a_pointer; /* point to the buffer */
+ gargc = 1 ; /* only one big argv */
+#else
+ progname = argv[0] ;
+ gargv = argv ;
+ gargc = argc ;
+/* we sneak a look at the first arg in case it's debugging */
+#ifdef DEBUG
+ if (argc > 1 && strncmp(argv[1], "-d", 2)==0) {
+ if (argv[1][2]==0 && argc > 2) {
+ if (sscanf(argv[2], "%d", &debug_flag)==0)
+ debug_flag = 0 ;
+ } else {
+ if (sscanf(argv[1]+2, "%d", &debug_flag)==0)
+ debug_flag = 0 ;
+ }
+ }
+#ifdef KPATHSEA
+ if (dd(D_FILES)) KPSE_DEBUG_SET (KPSE_DEBUG_FOPEN);
+ if (dd(D_PATHS)) KPSE_DEBUG_SET (KPSE_DEBUG_PATHS);
+ if (dd(D_STAT)) KPSE_DEBUG_SET (KPSE_DEBUG_STAT);
+ if (dd(D_HASH)) KPSE_DEBUG_SET (KPSE_DEBUG_HASH);
+ if (dd(D_EXPAND)) KPSE_DEBUG_SET (KPSE_DEBUG_EXPAND);
+ if (dd(D_SEARCH)) KPSE_DEBUG_SET (KPSE_DEBUG_SEARCH);
+#endif /* KPATHSEA */
+#endif /* DEBUG */
+#ifdef KPATHSEA
+ if (argc > 1) {
+ if (strcmp (argv[1], "--help") == 0) {
+ help (0);
+ exit (0);
+ } else if (strcmp (argv[1], "--version") == 0) {
+ extern KPSEDLL char *kpathsea_version_string;
+ puts ("dvips(k) 5.95b");
+ puts (kpathsea_version_string);
+ puts ("Copyright (C) 2005 Radical Eye Software.\n\
+There is NO warranty. You may redistribute this software\n\
+under the terms of the GNU General Public License\n\
+and the Dvips copyright.\n\
+For more information about these matters, see the files\n\
+named COPYING and dvips.h.\n\
+Primary author of Dvips: T. Rokicki; -k maintainer: T. Kacvinsky/ S. Rahtz.");
+ exit (0);
+ }
+ if (argc == 2 && strncmp(argv[1], "-?", 2) == 0) {
+ printf("%s %s\n", banner, banner2) ;
+ help(0);
+ exit(0);
+ }
+ if (argc == 2 && strncmp(argv[1], "-v", 2) == 0) {
+ printf("%s %s\n", banner, banner2) ;
+ exit(0);
+ }
+ }
+#endif
+#endif
+ initialize() ;
+ checkenv(0) ;
+ getdefaults(CONFIGFILE) ;
+ getdefaults((char *)0) ;
+/*
+ * This next whole big section of code is straightforward; we just scan
+ * the options. An argument can either immediately follow its option letter
+ * or be separated by spaces. Any argument not preceded by '-' and an
+ * option letter is considered a file name; the program complains if more
+ * than one file name is given, and uses stdin if none is given.
+ */
+#ifdef VMS
+ vmscli P1H(void);
+ papsizes = (struct papsiz *)revlist((void *)papsizes) ; /* Added by PWD 21-Mar-1997 */
+#else
+ queryoptions = 0;
+ do
+ {
+ for (i=1; i<argc; i++) {
+ if (*argv[i]=='-') {
+ char *p=argv[i]+2 ;
+ char c=argv[i][1] ;
+ switch (c) {
+case '-':
+ queryoptions = 1;
+ break;
+case 'a':
+ dopprescan = (*p != '0') ;
+ break ;
+case 'b':
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &pagecopies)==0)
+ error("! Bad number of page copies option (-b).") ;
+ if (pagecopies < 1 || pagecopies > 1000)
+ error("! can only print one to a thousand page copies") ;
+ break ;
+case 'c' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &numcopies)==0)
+ error("! Bad number of copies option (-c).") ;
+ break ;
+case 'd' :
+#ifdef DEBUG
+ {
+ int old_debug = debug_flag ;
+ static int warned_already = 0 ;
+
+ if (*p == 0 && argv[i+1])
+ p = argv[++i];
+ if (sscanf(p, "%d", &debug_flag)==0)
+ error("! Bad debug option (-d).");
+ if (debug_flag != old_debug && warned_already++ == 0) {
+ fprintf(stderr,
+ "I found a debug option that was not the first argument to the dvips\n") ;
+ fprintf(stderr,
+ "command. Some debugging output may have been lost because of this.\n") ;
+ }
+ break;
+ }
+#else
+ error("not compiled in debug mode") ;
+ break ;
+#endif /* DEBUG */
+case 'e' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &maxdrift)==0 || maxdrift<0)
+ error("! Bad maxdrift option (-e).") ;
+ vmaxdrift = maxdrift;
+ break ;
+case 'f' :
+ filter = (*p != '0') ;
+ if (filter)
+ oname = "" ;
+ noenv = 1 ;
+ sendcontrolD = 0 ;
+ break ;
+case 'u' :
+ {
+ extern char *psmapfile;
+ char PSname[300] ;
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ strcpy(PSname, p) ;
+ if (!strchr(PSname, '.'))
+ strcat(PSname, ".map") ; /* default extension */
+ if (PSname[0] == '+')
+ getpsinfo(PSname+1) ;
+ else
+ psmapfile = strdup(PSname) ; /* a cute small memory leak (just as in 'p' option handling in resident.c) */
+ }
+ break ;
+case 'h' : case 'H' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (strcmp(p, "-") == 0)
+ headers_off = 1 ;
+ else
+ (void)add_header(p) ;
+ break ;
+case 'i':
+ sepfiles = (*p != '0') ;
+ if (sepfiles && maxsecsize == 0) {
+ maxsecsize = 1; /* default section size to one page/file */
+ }
+ break ;
+case 'j':
+ partialdownload = (*p != '0') ;
+ break ;
+case 'k':
+ cropmarks = (*p != '0') ;
+ break ;
+case 'R':
+ secure = (*p != '0') ;
+ secure_option = 1 ;
+ break ;
+case 'S':
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &maxsecsize)==0)
+ error("! Bad section size arg (-S).") ;
+ break ;
+case 'm' :
+ if (STREQ (p, "ode") && argv[i+1]) {
+ mfmode = argv[++i];
+ mfmode_option = 1;
+ } else
+ manualfeed = (*p != '0') ;
+ break ;
+case 'n' :
+ if (STREQ (p, "oomega")) {
+ noomega = 1 ;
+ } else {
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+#ifdef SHORTINT
+ if (sscanf(p, "%ld", &maxpages)==0)
+#else /* ~SHORTINT */
+ if (sscanf(p, "%d", &maxpages)==0)
+#endif /* ~SHORTINT */
+ error("! Bad number of pages option (-n).") ;
+ }
+ break ;
+case 'o' :
+ if (*p == 0 && argv[i+1] &&
+ (STREQ (argv[i+1], "-") || argv[i+1][0] != '-'))
+ p = argv[++i] ;
+ oname_option = 1;
+ oname = p ;
+ noenv = 1 ;
+ sendcontrolD = 0 ;
+#if defined(MSDOS) || defined(OS2)
+ if (*oname && oname[strlen(oname)-1] == ':')
+ oname[strlen(oname)-1] = 0; /* strip ':' off */
+#endif
+ break ;
+case 'O' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ handlepapersize(p, &hoff, &voff) ;
+ break ;
+case 'T' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ handlepapersize(p, &hpapersize, &vpapersize) ;
+ if (landscape) {
+ error(
+ "both landscape and papersize specified; ignoring landscape") ;
+ landscape = 0 ;
+ }
+ break ;
+case 'p' :
+#if defined(MSDOS) || defined(OS2) || defined(ATARIST)
+ /* check for emTeX job file (-pj=filename) */
+ if (*p == 'j') {
+ p++;
+ if (*p == '=' || *p == ':')
+ p++;
+ mfjobname = newstring(p);
+ break;
+ }
+ /* must be page number instead */
+#endif
+ if (*p == 'p') { /* a -pp specifier for a page list? */
+ p++ ;
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (ParsePages(p))
+ error("! Bad page list specifier (-pp).") ;
+ pagelist = 1 ;
+ break ;
+ }
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (*p == '=') {
+ abspage = 1 ;
+ p++ ;
+ }
+#ifdef SHORTINT
+ switch(sscanf(p, "%ld.%ld", &firstpage, &firstseq)) {
+#else /* ~SHORTINT */
+ switch(sscanf(p, "%d.%d", &firstpage, &firstseq)) {
+#endif /* ~SHORTINT */
+case 1: firstseq = 0 ;
+case 2: break ;
+default:
+#ifdef KPATHSEA
+ error(concat3 ("! Bad first page option (-p ", p, ").")) ;
+#else
+ error("! Bad first page option (-p).") ;
+#endif
+ }
+ notfirst = 1 ;
+ break ;
+case 'l':
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (*p == '=') {
+ abspage = 1 ;
+ p++ ;
+ }
+#ifdef SHORTINT
+ switch(sscanf(p, "%ld.%ld", &lastpage, &lastseq)) {
+#else /* ~SHORTINT */
+ switch(sscanf(p, "%d.%d", &lastpage, &lastseq)) {
+#endif /* ~SHORTINT */
+case 1: lastseq = 0 ;
+case 2: break ;
+default:
+#ifdef KPATHSEA
+ error(concat3 ("! Bad last page option (-l ", p, ").")) ;
+#else
+ error("! Bad last page option (-l).") ;
+#endif
+ }
+ notlast = 1 ;
+ break ;
+case 'A':
+ oddpages = 1 ;
+ break ;
+case 'B':
+ evenpages = 1 ;
+ break ;
+case 'q' : case 'Q' :
+ quiet = (*p != '0') ;
+ break ;
+case 'r' :
+ reverse = (*p != '0') ;
+ break ;
+case 't' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (strcmp(p, "landscape") == 0) {
+ if (hpapersize || vpapersize)
+ error(
+ "both landscape and papersize specified; ignoring landscape") ;
+ else
+ landscape = 1 ;
+ } else
+ paperfmt = p ;
+ break ;
+case 'v':
+ printf ("%s %s\n", banner, banner2);
+ exit (0);
+ break;
+case 'x' : case 'y' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%lg", &mag)==0 || mag < 1 ||
+ mag > 1000000)
+ error("! Bad magnification parameter (-x or -y).") ;
+ overridemag = (c == 'x' ? 1 : -1) ;
+ break ;
+case 'C' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &collatedcopies)==0)
+ error("! Bad number of collated copies option (-C).") ;
+ break ;
+case 'D' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &actualdpi)==0 || actualdpi < 10 ||
+ actualdpi > 10000)
+ error("! Bad dpi parameter (-D).") ;
+ vactualdpi = actualdpi;
+ /* If we had the mode from config.ps, don't use it.
+ If they specified one with -mode, keep it. */
+ if (!mfmode_option)
+ mfmode = NULL;
+ break ;
+case 'E' :
+ tryepsf = (*p != '0') ;
+ removecomments = disablecomments = 0;
+ if (tryepsf && maxsecsize == 0)
+ maxsecsize = 1 ;
+ break ;
+case 'K' :
+ removecomments = (*p != '0') ;
+ break ;
+case 'U' :
+ nosmallchars = (*p != '0') ;
+ break ;
+case 'X' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &actualdpi)==0 || actualdpi < 10 ||
+ actualdpi > 10000)
+ error("! Bad dpi parameter (-D).") ;
+ break ;
+case 'Y' :
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ if (sscanf(p, "%d", &vactualdpi)==0 || vactualdpi < 10 ||
+ vactualdpi > 10000)
+ error("! Bad dpi parameter (-D).") ;
+ vactualdpi = vactualdpi;
+ break ;
+case 'F' :
+ sendcontrolD = (*p != '0') ;
+ break ;
+case 'G' :
+ shiftlowchars = (*p != '0');
+ break;
+case 'M':
+ dontmakefont = (*p != '0') ;
+#ifdef KPATHSEA
+ kpse_set_program_enabled (kpse_pk_format, !dontmakefont,
+ kpse_src_cmdline);
+#endif
+ break ;
+case 'N' :
+ disablecomments = (*p != '0') ;
+ break ;
+case 'P' :
+ {
+ struct papsiz *opapsiz = papsizes ;
+ struct papsiz *npapsiz ;
+ papsizes = 0 ;
+ if (*p == 0 && argv[i+1])
+ p = argv[++i] ;
+ printer = p ;
+ noenv = 1 ;
+ if (!getdefaults("")) {
+ /* If no config file, default the output name. */
+ oname = concat ("| lpr -P", printer);
+ }
+ npapsiz = opapsiz ;
+ while (npapsiz && npapsiz->next)
+ npapsiz = npapsiz->next ;
+ if (npapsiz) {
+ npapsiz->next = papsizes ;
+ papsizes = opapsiz ;
+ }
+ }
+ break ;
+case 's':
+ safetyenclose = (*p != '0') ;
+ break ;
+case 'V':
+ downloadpspk = (*p != '0') ;
+ break ;
+case 'Z':
+ compressed = (*p != '0') ;
+ break ;
+#ifdef HPS
+case 'z':
+ HPS_FLAG = (*p != '0') ;
+ break ;
+#endif
+case '?':
+ break ; /* We print the banner and help msg below. */
+default:
+#ifdef KPATHSEA
+ error(concat3 ("! Invalid option `", argv[i],
+ "'. Try --help for more information."));
+#else
+ error(
+ "! Bad option, not one of acdefhijklmnopqrstxyzABCDEFKMNOPSTUXYZ?") ;
+#endif
+ }
+ } else {
+ if (*iname == 0) {
+ register char *p ;
+
+ lastext = 0 ;
+ iname = nextstring ;
+ p = argv[i] ;
+ if (NAME_BEGINS_WITH_DEVICE(p)) { /* get past DOSISH drive */
+ *nextstring++ = *p++ ;
+ *nextstring++ = *p++ ;
+ }
+ while (*p) {
+ *nextstring = *p++ ;
+ if (*nextstring == '.')
+ lastext = nextstring - iname ;
+ else if (IS_DIR_SEP(*nextstring))
+ lastext = 0 ;
+ nextstring++ ;
+ }
+ *nextstring++ = '.' ;
+ *nextstring++ = 'd' ;
+ *nextstring++ = 'v' ;
+ *nextstring++ = 'i' ;
+ *nextstring++ = 0 ;
+ } else
+#ifdef KPATHSEA
+ error(concat3("! Second input filename (", argv[i],
+ ") specified.")) ;
+#else
+ error("! Two input file names specified.") ;
+#endif
+ }
+ }
+ if (noenv == 0) {
+ register char *p ;
+ struct papsiz *opapsiz = papsizes ;
+ papsizes = 0 ;
+ if (0 != (p = getenv("PRINTER"))) {
+#if defined(MSDOS) || defined(OS2)
+ strcpy(nextstring, p) ;
+ strcat(nextstring, ".cfg") ;
+#else
+ strcpy(nextstring, "config.") ;
+ strcat(nextstring, p) ;
+#endif
+ getdefaults(nextstring) ;
+ }
+ {
+ struct papsiz *npapsiz = opapsiz ;
+ while (npapsiz && npapsiz->next)
+ npapsiz = npapsiz->next ;
+ if (npapsiz) {
+ npapsiz->next = papsizes ;
+ papsizes = opapsiz ;
+ }
+ }
+ }
+ papsizes = (struct papsiz *)revlist((void *)papsizes) ;
+ if (queryoptions != 0) { /* get new options */
+ (void)fprintf(stderr, "%s %s\n", banner, banner2) ;
+ help(1) ;
+ queryargs();
+ if (qargc == 1)
+ queryoptions = 0;
+ else {
+ qargv[0] = argv[0];
+ argc=qargc;
+ argv=qargv;
+ }
+ }
+ } while (queryoptions != 0) ;
+#endif
+#if (defined(KPATHSEA) && defined(DEBUG)) /* this should really be part of a subroutine */
+ if (dd(D_FILES)) KPSE_DEBUG_SET (KPSE_DEBUG_FOPEN);
+ if (dd(D_PATHS)) KPSE_DEBUG_SET (KPSE_DEBUG_PATHS);
+ if (dd(D_STAT)) KPSE_DEBUG_SET (KPSE_DEBUG_STAT);
+ if (dd(D_HASH)) KPSE_DEBUG_SET (KPSE_DEBUG_HASH);
+ if (dd(D_EXPAND)) KPSE_DEBUG_SET (KPSE_DEBUG_EXPAND);
+ if (dd(D_SEARCH)) KPSE_DEBUG_SET (KPSE_DEBUG_SEARCH);
+#endif /* DEBUG */
+ checkenv(1) ;
+#ifdef KPATHSEA
+ kpse_init_prog ("DVIPS", actualdpi, mfmode, "cmr10");
+ kpse_make_tex_discard_errors = quiet;
+#endif
+/*
+ * The logic here is a bit convoluted. Since all `additional'
+ * PostScript font information files are loaded *before* the master
+ * one, and yet they should be able to override the master one, we
+ * have to add the information in the master list to the *ends* of
+ * the hash chain. We do this by reversing the lists, adding them
+ * to the front, and then reversing them again.
+ */
+ revpslists() ;
+ getpsinfo((char *)NULL) ;
+ revpslists() ;
+ if (!quiet)
+ (void)fprintf(stderr, "%s %s\n", banner, banner2) ;
+ if (*iname) {
+ dvifile = fopen(iname, READBIN) ;
+/*
+ * Allow names like a.b.
+ */
+ if (dvifile == 0) {
+ iname[strlen(iname)-4] = 0 ; /* remove the .dvi suffix */
+ dvifile = fopen(iname, READBIN) ;
+ }
+ }
+ if (oname[0] == '-' && oname[1] == 0)
+ oname[0] = 0 ;
+ else if (*oname == 0 && ! filter) {
+ oname = nextstring ;
+#ifndef VMCMS /* get stuff before LAST "." */
+ lastext = strlen(iname) - 1 ;
+ while (iname[lastext] != '.' && lastext > 0)
+ lastext-- ;
+ if (iname[lastext] != '.')
+ lastext = strlen(iname) - 1 ;
+#else /* for VM/CMS we take the stuff before FIRST "." */
+ lastext = strchr(iname,'.') - iname ;
+ if ( lastext <= 0 ) /* if no '.' in "iname" */
+ lastext = strlen(iname) -1 ;
+#endif
+#ifdef MVSXA /* IBM: MVS/XA */
+ if (strchr(iname, '(') != NULL &&
+ strchr(iname, ')') != NULL) {
+ firstext = strchr(iname, '(') - iname + 1;
+ lastext = strrchr(iname, ')') - iname - 1;
+ }
+ else {
+ if (strrchr(iname, '.') != NULL) {
+ lastext = strrchr(iname, '.') - iname - 1;
+ }
+ else lastext = strlen(iname) - 1 ;
+ if (strchr(iname, '\'') != NULL)
+ firstext = strchr(iname, '.') - iname + 1;
+ else firstext = 0;
+ }
+#endif /* IBM: MVS/XA */
+#ifdef MVSXA /* IBM: MVS/XA */
+ for (i=firstext; i<=lastext; i++)
+#else
+ for (i=0; i<=lastext; i++)
+#endif
+ *nextstring++ = iname[i] ;
+ if (iname[lastext] != '.')
+ *nextstring++ = '.' ;
+#ifndef VMCMS
+ *nextstring++ = 'p' ;
+ *nextstring++ = 's' ;
+#else /* might as well keep things uppercase */
+ *nextstring++ = 'P' ;
+ *nextstring++ = 'S' ;
+#endif
+ *nextstring++ = 0 ;
+/*
+ * Now we check the name, and `throw away' any prefix information.
+ * This means throwing away anything before (and including) a colon
+ * or slash.
+ */
+ {
+ char *p = NAME_BEGINS_WITH_DEVICE(oname) ? oname + 2 : oname ;
+
+ for (oname=p; *p && p[1]; p++)
+ if (IS_DIR_SEP(*p))
+ oname = p + 1 ;
+ }
+ }
+#ifdef DEBUG
+ if (dd(D_PATHS)) {
+#ifdef SHORTINT
+ (void)fprintf(stderr,"input file %s output file %s swmem %ld\n",
+#else /* ~SHORTINT */
+ (void)fprintf(stderr,"input file %s output file %s swmem %d\n",
+#endif /* ~SHORTINT */
+ iname, oname, swmem) ;
+#ifndef KPATHSEA
+ (void)fprintf(stderr,"tfm path %s\npk path %s\n", tfmpath, pkpath) ;
+ (void)fprintf(stderr,"fig path %s\nvf path %s\n", figpath, vfpath) ;
+ (void)fprintf(stderr,"config path %s\nheader path %s\n",
+ configpath, headerpath) ;
+#endif
+#ifdef FONTLIB
+ (void)fprintf(stderr,"fli path %s\nfli names %s\n", flipath, fliname) ;
+#endif
+ } /* dd(D_PATHS) */
+#endif /* DEBUG */
+/*
+ * Now we try to open the dvi file.
+ */
+ if (!quiet && warningmsg)
+ error(warningmsg) ;
+ headersready = 1 ;
+ headerfile = (char *) (compressed? CHEADERFILE : HEADERFILE) ;
+ (void)add_header(headerfile) ;
+ if (*iname != 0) {
+ fulliname = nextstring ;
+#ifndef IGNORE_CWD
+ if (!IS_DIR_SEP(*iname) && !NAME_BEGINS_WITH_DEVICE(iname)) {
+ getcwd(nextstring, MAXPATHLEN + 2);
+ while (*nextstring++) ;
+#ifdef VMS /* VMS doesn't need the '/' character appended */
+ nextstring--; /* so just back up one byte. */
+#else
+ *(nextstring-1) = '/' ;
+#endif
+ }
+#endif
+ strcpy(nextstring,iname) ;
+ while (*nextstring++) ; /* advance nextstring past iname */
+ } else if (filter) {
+ dvifile = stdin ;
+ if (O_BINARY && !isatty(fileno(stdin)))
+ SET_BINARY(fileno(stdin)) ;
+ } else {
+#ifdef KPATHSEA
+ fprintf (stderr, "Missing DVI file argument (or -f).\n");
+ fprintf (stderr, "Try --help for more information.\n");
+#else
+ help(1) ;
+#endif
+ exit(1) ;
+ }
+ initcolor() ;
+ if (dvifile==NULL) {
+ extern char errbuf[];
+ (void)sprintf(errbuf,"! DVI file <%s> can't be opened.", iname) ;
+ error("! DVI file can't be opened.") ;
+ }
+ if (fseek(dvifile, 0L, 0) < 0)
+ error("! DVI file must not be a pipe.") ;
+#ifdef FONTLIB
+ fliload(); /* read the font libaries */
+#endif
+/*
+ * Now we do our main work.
+ */
+ swmem += fontmem ;
+ if (maxdrift < 0) {
+ if (actualdpi <= 599)
+ maxdrift = actualdpi / 100 ;
+ else if (actualdpi < 1199)
+ maxdrift = actualdpi / 200 + 3 ;
+ else
+ maxdrift = actualdpi / 400 + 6 ;
+ }
+ if (vmaxdrift < 0) {
+ if (vactualdpi <= 599)
+ vmaxdrift = vactualdpi / 100 ;
+ else if (vactualdpi < 1199)
+ vmaxdrift = vactualdpi / 200 + 3 ;
+ else
+ vmaxdrift = vactualdpi / 400 + 6 ;
+ }
+ if (dopprescan)
+ pprescanpages() ;
+ prescanpages() ;
+#if defined MSDOS || defined OS2 || defined(ATARIST)
+ if (mfjobfile != (FILE*)NULL) {
+ char answer[5];
+ fputs("}\n",mfjobfile);
+ fclose(mfjobfile);
+ fputs("Exit to make missing fonts now (y/n)? ",stdout);
+ fgets(answer,4,stdin);
+ if (*answer=='y' || *answer=='Y')
+ exit(8); /* exit with errorlevel 8 for emTeX dvidrv */
+ }
+#endif
+ if (includesfonts)
+ (void)add_header(IFONTHEADER) ;
+ if (usesPSfonts)
+ (void)add_header(PSFONTHEADER) ;
+ if (usesspecial)
+ (void)add_header(SPECIALHEADER) ;
+ if (usescolor) /* IBM: color */
+ (void)add_header(COLORHEADER) ;
+#ifdef HPS
+ if (HPS_FLAG)
+ (void)add_header(HPSHEADER) ;
+#endif
+ sects = sections ;
+ totalpages *= collatedcopies ;
+ if (sects == NULL || sects->next == NULL) {
+ sectioncopies = collatedcopies ;
+ collatedcopies = 1 ;
+ } else {
+ if (! sepfiles)
+ multiplesects = 1 ;
+ }
+ totalpages *= pagecopies ;
+ if (tryepsf) {
+ if (paperfmt || landscape || manualfeed ||
+ collatedcopies > 1 || numcopies > 1 || cropmarks ||
+ *iname == 0 ||
+ (totalpages > 1 && !(sepfiles && maxsecsize == 1))) {
+ error("Can't make it EPSF, sorry") ;
+ tryepsf = 0 ;
+ }
+ }
+#ifdef HPS
+ if (HPS_FLAG)
+ set_bitfile("head.tmp", 0) ;
+#endif
+ if (! sepfiles) {
+ initprinter(sections) ;
+ outbangspecials() ;
+ }
+
+ for (i=0; i<collatedcopies; i++) {
+ sects = sections ;
+ while (sects != NULL) {
+ if (sepfiles) {
+ newoutname() ;
+ if (! quiet) {
+ if (prettycolumn + strlen(oname) + 6 > STDOUTSIZE) {
+ fprintf(stderr, "\n") ;
+ prettycolumn = 0 ;
+ }
+ (void)fprintf(stderr, "(-> %s) ", oname) ;
+ prettycolumn += strlen(oname) + 6 ;
+ }
+#ifdef HPS
+ if (HPS_FLAG)
+ set_bitfile("head.tmp", 0) ;
+#endif
+ initprinter(sects) ;
+ outbangspecials() ;
+ } else if (! quiet) {
+ if (prettycolumn > STDOUTSIZE) {
+ fprintf(stderr, "\n") ;
+ prettycolumn = 0 ;
+ }
+ (void)fprintf(stderr, ". ") ;
+ prettycolumn += 2 ;
+ }
+ (void)fflush(stderr) ;
+ dosection(sects, sectioncopies) ;
+ sects = sects->next ;
+ if (sepfiles) {
+#ifdef HPS
+ if (HPS_FLAG)
+ finish_hps() ;
+#endif
+ cleanprinter() ;
+ }
+ }
+ }
+ if (! sepfiles) {
+#ifdef HPS
+ if (HPS_FLAG)
+ finish_hps() ;
+#endif
+ cleanprinter() ;
+ }
+ if (! quiet)
+ (void)fprintf(stderr, "\n") ;
+#ifdef DEBUG
+ if (dd(D_MEM)) {
+#ifdef SHORTINT
+ fprintf(stderr, "Total memory allocated: %ld\n", totalalloc) ;
+#else
+ fprintf(stderr, "Total memory allocated: %d\n", totalalloc) ;
+#endif
+ }
+#endif
+ return 0 ;
+ /*NOTREACHED*/
+}
+#ifdef VMS
+#include "[.vms]vmscli.c"
+#endif
+
+#ifdef VMCMS /* IBM: VM/CMS */
+#include "dvipscms.h"
+#endif
+
+#ifdef MVSXA /* IBM: MVS/XA */
+#include "dvipsmvs.h"
+#endif
diff --git a/Build/source/texk/dvipsk/dvips.h b/Build/source/texk/dvipsk/dvips.h
new file mode 100644
index 00000000000..8ac55006a45
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.h
@@ -0,0 +1,408 @@
+/*
+ * This is dvips, a freely redistributable PostScript driver
+ * for dvi files. It is (C) Copyright 1986-2004 by Tomas Rokicki.
+ * You may modify and use this program to your heart's content,
+ * so long as you send modifications to Tomas Rokicki. It can
+ * be included in any distribution, commercial or otherwise, so
+ * long as the banner string defined below is not modified (except
+ * for the version number) and this banner is printed on program
+ * invocation, or can be printed on program invocation with the -? option.
+ */
+
+/* This file is the header for dvips's global data structures. */
+
+#define BANNER \
+"This is dvips(k) 5.95b Copyright 2005 Radical Eye Software"
+#define BANNER2 "(www.radicaleye.com)"
+#ifdef KPATHSEA
+#include "config.h"
+#include "debug.h"
+#endif
+/* Please don't turn debugging off! */
+#ifndef DEBUG
+#define DEBUG
+#endif
+
+#ifndef KPATHSEA
+#include <stdio.h>
+#if defined(SYSV) || defined(VMS) || defined(__THINK__) || defined(MSDOS) || defined(OS2) || defined(ATARIST) || defined(WIN32)
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#endif
+#if defined(lint) && defined(sun)
+extern char *sprintf() ;
+#endif
+#include "paths.h"
+#include "debug.h"
+#ifdef VMS
+#include "[.vms]vms.h"
+#endif /* VMS */
+#include <stdlib.h>
+/*
+ * Is your malloc big?
+ */
+#if defined(MSDOS) && !defined(__EMX__) && !defined(DJGPP)
+#define SMALLMALLOC
+#endif
+#if defined(OS2) && defined(_MSC_VER)
+#define SMALLMALLOC
+#endif
+/*
+ * Constants, used to increase or decrease the capacity of this program.
+ *
+ * Strings are now more dynamically allocated, so STRINGSIZE is not the
+ * strict limit it once was. However, it still sets the maximum size
+ * of a string that can be handled in specials, so it should not be
+ * set too small.
+ */
+#define STRINGSIZE (200000) /* maximum total chars in strings in program */
+#define RASTERCHUNK (8192) /* size of chunk of raster */
+#define MINCHUNK (240) /* minimum size char to get own raster */
+#define STACKSIZE (350) /* maximum stack size for dvi files */
+#define MAXFRAME (10) /* maximum depth of virtual font recursion */
+#define MAXFONTHD (100) /* number of unique names of included fonts */
+#define STDOUTSIZE (75) /* width of a standard output line */
+/*
+ * Other constants, which define printer-dependent stuff.
+ */
+#define SWMEM (180000) /* available virtual memory in PostScript printer */
+#define DPI (actualdpi) /* dots per inch */
+#define VDPI (vactualdpi) /* dots per inch */
+#define RES_TOLERANCE(dpi) ((int)(1+dpi/500))
+ /* error in file name resolution versus desired */
+#define FONTCOST (298) /* overhead cost of each sw font */
+#define PSFONTCOST (1100) /* overhead cost for PostScript fonts */
+#define PSCHARCOST (20) /* overhead cost for PostScript font chars */
+#define DNFONTCOST (35000) /* overhead cost for downloaded PS font */
+#define CHARCOST (15) /* overhead cost for each character */
+#define OVERCOST (30000) /* cost of overhead */
+#define DICTITEMCOST (20) /* cost per key, value in dictionary */
+#define NAMECOST (40) /* overhead cost of each new name */
+/*
+ * Type declarations. integer must be a 32-bit signed; shalfword must
+ * be a sixteen-bit signed; halfword must be a sixteen-bit unsigned;
+ * quarterword must be an eight-bit unsigned.
+ */
+#if (defined(MSDOS) && !defined(DJGPP)) || (defined(OS2) && defined(_MSC_VER)) || defined(ATARIST)
+typedef long integer;
+#else
+typedef int integer;
+#endif
+#ifndef KPATHSEA
+typedef char boolean;
+#endif
+typedef double real;
+typedef short shalfword ;
+typedef unsigned short halfword ;
+typedef unsigned char quarterword ;
+#ifdef WIN32
+#define Boolean boolean
+#else
+#ifndef __THINK__
+typedef short Boolean ;
+#endif
+#endif
+/*
+ * If the machine has a default integer size of 16 bits, and 32-bit
+ * integers must be manipulated with %ld, set the macro SHORTINT.
+ */
+#ifdef XENIX
+#define SHORTINT
+#else
+#undef SHORTINT
+#endif
+#if defined(MSDOS) && !defined(__EMX__) && !defined(DJGPP) || defined(ATARIST)
+#define SHORTINT
+#endif
+#if defined(OS2) && defined(_MSC_VER)
+#define SHORTINT
+#endif
+
+/*
+ * This is the structure definition for resident fonts. We use
+ * a small and simple hash table to handle these. We don't need
+ * a big hash table.
+ */
+#define RESHASHPRIME (73)
+struct resfont {
+ struct resfont *next ;
+ char *Keyname, *PSname, *TeXname, *Fontfile, *Vectfile;
+ char *specialinstructions ;
+ char *downloadheader ; /* possibly multiple files */
+ quarterword sent ;
+} ;
+
+/*
+ * A chardesc describes an individual character. Before the fonts are
+ * downloaded, the flags indicate that the character has already been used
+ * with the following meanings:
+ */
+typedef struct tcd {
+ integer TFMwidth ;
+ quarterword *packptr ;
+ shalfword pixelwidth ;
+ quarterword flags, flags2 ;
+} chardesctype ;
+#define EXISTS (1)
+#define PREVPAGE (2)
+#define THISPAGE (4)
+#define TOOBIG (8) /* not used at the moment */
+#define REPACKED (16)
+#define BIGCHAR (32)
+#define STATUSFLAGS (EXISTS|REPACKED|BIGCHAR)
+/*
+ * The new field flags2 above is now an immutable field (once a font is
+ * loaded); for now it only indicates whether a character EXISTS or not.
+ * This fixes a problem with -G.
+ */
+/*
+ * A fontdesc describes a font. The name, area, and scalename are located in
+ * the string pool. The nextsize pointer is used to link fonts that are used
+ * in included psfiles and differ only in scaledsize. Such fonts also have
+ * a non-NULL scalename that gives the scaledsize as found in the included
+ * file. The psflag indicates that the font has been used in an included
+ * psfile. It can be 0, PREVPAGE, THISPAGE, or EXISTS.
+ */
+typedef struct tfd {
+ integer checksum, scaledsize, designsize, thinspace ;
+ halfword dpi, loadeddpi ;
+ halfword alreadyscaled ;
+ halfword psname ;
+ halfword loaded ;
+ quarterword psflag;
+ quarterword codewidth ;
+ integer maxchars ;
+ char *name, *area ;
+ struct resfont *resfont ;
+ struct tft *localfonts ;
+ struct tfd *next ;
+ struct tfd *nextsize;
+ char *scalename;
+ chardesctype *chardesc ;
+} fontdesctype ;
+
+/* A fontmap associates a fontdesc with a font number.
+ */
+typedef struct tft {
+ integer fontnum ;
+ fontdesctype *desc ;
+ struct tft *next ;
+} fontmaptype ;
+
+/* Virtual fonts require a `macro' capability that is implemented by
+ * using a stack of `frames'.
+ */
+typedef struct {
+ quarterword *curp, *curl ;
+ fontdesctype *curf ;
+ fontmaptype *ff ;
+} frametype ;
+
+/*
+ * The next type holds the font usage information in a 256-bit table;
+ * there's a 1 for each character that was used in a section.
+ */
+typedef struct {
+ fontdesctype *fd ;
+ halfword psfused ;
+ halfword bitmap[16] ;
+} charusetype ;
+
+/* Next we want to record the relevant data for a section. A section is
+ * a largest portion of the document whose font usage does not overflow
+ * the capacity of the printer. (If a single page does overflow the
+ * capacity all by itself, it is made into its own section and a warning
+ * message is printed; the page is still printed.)
+ *
+ * The sections are in a linked list, built during the prescan phase and
+ * processed in proper order (so that pages stack correctly on output) during
+ * the second phase.
+ */
+typedef struct t {
+ integer bos ;
+ struct t *next ;
+ halfword numpages ;
+} sectiontype ;
+
+/*
+ * Sections are actually represented not by sectiontype but by a more
+ * complex data structure of variable size, having the following layout:
+ * sectiontype sect ;
+ * charusetype charuse[numfonts] ;
+ * fontdesctype *sentinel = NULL ;
+ * (Here numfonts is the number of bitmap fonts currently defined.)
+ * Since we can't declare this or take a sizeof it, we build it and
+ * manipulate it ourselves (see the end of the prescan routine).
+ */
+/*
+ * This is how we build up headers and other lists.
+ */
+struct header_list {
+ struct header_list *next ;
+ char *Hname ;
+ char *precode ;
+ char *postcode ;
+ char name[1] ;
+} ;
+/*
+ * Some machines define putlong in their library.
+ * We get around this here.
+ */
+#define putlong was_putlong
+/*
+ * Information on available paper sizes is stored here.
+ */
+struct papsiz {
+ struct papsiz *next ;
+ integer xsize, ysize ;
+ char *name ;
+ char *specdat ;
+} ;
+#ifdef MVSXA /* IBM: MVS/XA */
+/* this is where we fix problems with conflicts for truncation
+ of long names (we might only do this if LONGNAME not set but ...) */
+# define pprescanpages pprscnpgs /* confict with pprescan */
+# define flushDashedPath flshDshdPth /* conflict with flushDash */
+# define PageList PgList /* re-definition conflict with pagelist */
+/* adding ascii2ebcdic conversion table to extern */
+ extern char ascii2ebcdic[] ;
+#endif /* IBM: MVS/XA */
+#ifdef VMCMS /* IBM: VM/CMS */
+/* this is where we fix problems with conflicts for truncation
+ of long names (we might only do this if LONGNAME not set but ...) */
+# define pprescanpages pprscnpgs /* confict with pprescan */
+# define flushDashedPath flshDshdPth /* conflict with flushDash */
+/* adding ascii2ebcdic conversion table to extern */
+ extern char ascii2ebcdic[] ;
+/* redefining fopen for VMCMS, see DVIPSCMS.C */
+ extern FILE *cmsfopen() ;
+# ifdef fopen
+# undef fopen
+# endif
+# define fopen cmsfopen
+#define downloadpspk dnldpspk
+#endif /* IBM: VM/CMS */
+/*
+ * Remove namespace conflict with standard library on Macintosh
+ */
+#ifdef __THINK__
+#define newstring newpoolstring
+#endif
+
+#ifndef VOID
+#define VOID void
+#endif
+
+#define USE_PCLOSE (801)
+#define USE_FCLOSE (802)
+
+/* Things that KPATHSEA knows, and are useful even without it. */
+#if !defined(KPATHSEA)
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32)
+#define FOPEN_ABIN_MODE "ab"
+#define FOPEN_RBIN_MODE "rb"
+#else
+#define FOPEN_ABIN_MODE "a"
+#define FOPEN_RBIN_MODE "r"
+#endif
+
+#if (defined MSDOS || defined OS2 || defined WIN32)
+#define WRITEBIN "wb"
+#else
+#ifdef VMCMS
+#define WRITEBIN "wb, lrecl=1024, recfm=f"
+#else
+#define WRITEBIN "w"
+#endif
+#endif
+
+#if defined(WIN32)
+#define STDC_HEADERS
+#include <io.h>
+#include <fcntl.h>
+#define O_BINARY _O_BINARY
+#define popen _popen
+#define pclose _pclose
+#define register
+#define SET_BINARY(fd) _setmode((fd), _O_BINARY)
+#else /* !WIN32 */
+#define SET_BINARY(fd)
+#endif
+
+#if defined(DEVICESEP)
+#define IS_DEVICE_SEP(c) ((c) == DEVICESEP)
+#else
+#define IS_DEVICE_SEP(c) 0
+#endif
+#define STREQ(s1, s2) (((s1) != NULL) && ((s2) != NULL) && !strcmp((s1), (s2)))
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32)
+#define NAME_BEGINS_WITH_DEVICE(name) (*(name) && IS_DEVICE_SEP((name)[1]))
+#define IS_DIR_SEP(c) ((c) == '/' || (c) == '\\')
+#define FILESTRCASEEQ(s1, s2) (strcasecmp (s1, s2) == 0)
+#else
+#define NAME_BEGINS_WITH_DEVICE(name) 0
+#define IS_DIR_SEP(c) ((c) == DIRSEP)
+#define FILESTRCASEEQ STREQ
+#endif
+
+#define TOLOWER(c) tolower(c)
+#define ISALNUM(c) isalnum(c)
+#define ISXDIGIT(c) (isascii (c) && isxdigit(c))
+
+ /* To Prototype or not to prototype ? */
+#ifdef NeedFunctionPrototypes
+
+#define AA(args) args /* For an arbitrary number; ARGS must be in parens. */
+
+#define P1H(p1) (p1)
+#define P2H(p1,p2) (p1, p2)
+#define P3H(p1,p2,p3) (p1, p2, p3)
+#define P4H(p1,p2,p3,p4) (p1, p2, p3, p4)
+#define P5H(p1,p2,p3,p4,p5) (p1, p2, p3, p4, p5)
+#define P6H(p1,p2,p3,p4,p5,p6) (p1, p2, p3, p4, p5, p6)
+
+#define P1C(t1,n1)(t1 n1)
+#define P2C(t1,n1, t2,n2)(t1 n1, t2 n2)
+#define P3C(t1,n1, t2,n2, t3,n3)(t1 n1, t2 n2, t3 n3)
+#define P4C(t1,n1, t2,n2, t3,n3, t4,n4)(t1 n1, t2 n2, t3 n3, t4 n4)
+#define P5C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5) \
+ (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5)
+#define P6C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6) \
+ (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5, t6 n6)
+
+#else /* no function prototypes */
+
+#define AA(args) ()
+
+#define P1H(p1) ()
+#define P2H(p1, p2) ()
+#define P3H(p1, p2, p3) ()
+#define P4H(p1, p2, p3, p4) ()
+#define P5H(p1, p2, p3, p4, p5) ()
+#define P6H(p1, p2, p3, p4, p5, p6) ()
+
+#define P1C(t1,n1) (n1) t1 n1;
+#define P2C(t1,n1, t2,n2) (n1,n2) t1 n1; t2 n2;
+#define P3C(t1,n1, t2,n2, t3,n3) (n1,n2,n3) t1 n1; t2 n2; t3 n3;
+#define P4C(t1,n1, t2,n2, t3,n3, t4,n4) (n1,n2,n3,n4) \
+ t1 n1; t2 n2; t3 n3; t4 n4;
+#define P5C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5) (n1,n2,n3,n4,n5) \
+ t1 n1; t2 n2; t3 n3; t4 n4; t5 n5;
+#define P6C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6) (n1,n2,n3,n4,n5,n6) \
+ t1 n1; t2 n2; t3 n3; t4 n4; t5 n5; t6 n6;
+
+#endif /* function prototypes */
+
+#ifdef NeedFunctionPrototypes
+#define P9C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6, t7,n7, t8,n8, t9,n9) \
+ (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5, t6 n6, t7 n7, t8 n8, t9 n9)
+#else
+#define P9C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6, t7,n7, t8,n8, t9,n9) \
+ t1 n1; t2 n2; t3 n3; t4 n4; t5 n5; t6 n6; t7 n7; t8 n8; t9 n9;
+#endif
+
+#endif
diff --git a/Build/source/texk/dvipsk/dvips.help b/Build/source/texk/dvipsk/dvips.help
new file mode 100644
index 00000000000..91444b32f9a
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.help
@@ -0,0 +1,34 @@
+Usage: dvips [OPTION]... FILENAME[.dvi]
+a* Conserve memory, not time A Print only odd (TeX) pages
+b # Page copies, for posters e.g. B Print only even (TeX) pages
+c # Uncollated copies C # Collated copies
+d # Debugging D # Resolution
+e # Maxdrift value E* Try to create EPSF
+f* Run as filter F* Send control-D at end
+ G* Shift low chars to higher pos.
+h f Add header file
+i* Separate file per section
+j* Download fonts partially
+k* Print crop marks K* Pull comments from inclusions
+l # Last page
+m* Manual feed M* Don't make fonts
+mode s Metafont device name
+n # Maximum number of pages N* No structured comments
+noomega Disable Omega extensions
+o f Output file O c Set/change paper offset
+p # First page P s Load config.$s
+pp l Print only pages listed
+q* Run quietly
+r* Reverse order of pages R* Run securely
+s* Enclose output in save/restore S # Max section size in pages
+t s Paper format T c Specify desired page size
+u s PS mapfile U* Disable string param trick
+v Print version number and quit V* Send downloadable PS fonts as PK
+x # Override dvi magnification X # Horizontal resolution
+y # Multiply by dvi magnification Y # Vertical resolution
+z* Hyper PS Z* Compress bitmap fonts
+ # = number f = file s = string * = suffix, `0' to turn off
+ c = comma-separated dimension pair (e.g., 3.2in,-32.1cm)
+ l = comma-separated list of page ranges (e.g., 1-4,7-9)
+
+Email bug reports to tex-k@mail.tug.org.
diff --git a/Build/source/texk/dvipsk/dvips.info b/Build/source/texk/dvipsk/dvips.info
new file mode 100644
index 00000000000..6f7348095fb
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.info
@@ -0,0 +1,4675 @@
+This is dvips.info, produced by makeinfo version 4.8 from dvips.texi.
+
+ This manual documents Dvips version 5.95b (August 2005), a program
+to translate a DVI file into PostScript.
+
+INFO-DIR-SECTION TeX
+START-INFO-DIR-ENTRY
+* DVI-to-Postscript: (dvips). Translating TeX DVI files to PostScript.
+* afm2tfm: (dvips)Invoking afm2tfm. Making Type 1 fonts available to TeX.
+* dvips: (dvips)Invoking Dvips. DVI-to-PostScript translator.
+END-INFO-DIR-ENTRY
+
+
+File: dvips.info, Node: Top, Next: Why Dvips, Up: (dir)
+
+Dvips
+*****
+
+This manual documents Dvips version 5.95b (August 2005), a program to
+translate a DVI file into PostScript.
+
+* Menu:
+
+* Why Dvips:: Why use Dvips?
+* Installation:: How to compile and install Dvips.
+* Invoking Dvips:: Command-line options, configuration files, etc.
+* Paper size and landscape:: Changing the paper dimensions.
+* Interaction with PostScript:: TeX meets Dvips meets PostScript.
+* PostScript fonts:: Installing and using PostScript fonts.
+* Color:: Using color with Dvips.
+* Index:: General index.
+
+
+File: dvips.info, Node: Why Dvips, Next: Installation, Prev: Top, Up: Top
+
+1 Why use Dvips?
+****************
+
+The Dvips program has a number of features that set it apart from other
+PostScript drivers for TeX. This rather long section describes the
+advantages of using Dvips, and may be skipped if you are just
+interested in learning how to use the program. *Note Installation::,
+for details of compilation and installation.
+
+ The Dvips driver generates excellent, standard PostScript, that can
+be included in other documents as figures or printed through a variety
+of spoolers. The generated PostScript requires very little printer
+memory, so very complex documents with a lot of fonts can easily be
+printed even on PostScript printers without much memory, such as the
+original Apple LaserWriter. The PostScript output is also compact,
+requiring less disk space to store and making it feasible as a transfer
+format.
+
+ Even those documents that are too complex to print in their entirety
+on a particular printer can be printed, since Dvips will automatically
+split such documents into pieces, reclaiming the printer memory between
+each piece.
+
+ The Dvips program supports graphics in a natural way, allowing
+PostScript graphics to be included and automatically scaled and
+positioned in a variety of ways.
+
+ Printers with any resolution are supported, even if they have
+different resolutions in the horizontal and vertical directions. High
+resolution output is supported for typesetters, including an option
+that compresses the bitmap fonts so that typesetter virtual memory is
+not exhausted. This option also significantly reduces the size of the
+PostScript file and decoding in the printer is very fast.
+
+ Missing fonts can be automatically generated if Metafont exists on
+the system, or fonts can be converted from GF to PK format on demand.
+If a font cannot be generated, a scaled version of the same font at a
+different size can be used instead, although Dvips will complain loudly
+about the poor aesthetics of the resulting output.
+
+ Users will appreciate features such as collated copies and support
+for `tpic', `psfig', `emtex', and `METAPOST'; system administrators
+will love the support for multiple printers, each with their own
+configuration file, and the ability to pipe the output directly to a
+program such as `lpr'. Support for MS-DOS, OS/2, and VMS in addition
+to Unix is provided in the standard distribution, and porting to other
+systems is easy.
+
+ One of the most important features is the support of virtual fonts,
+which add an entirely new level of flexibility to TeX. Virtual fonts
+are used to give Dvips its excellent PostScript font support, handling
+all the font remapping in a natural, portable, elegant, and extensible
+way. Dvips even comes with its own Afm2tfm program that creates the
+necessary virtual fonts and TeX font metric files automatically from
+the Adobe font metric files.
+
+ Source is provided and freely distributable, so adding a
+site-specific feature is possible. Adding such features is made easier
+by the highly modular structure of the program.
+
+ There is really no reason to use another driver, and the more people
+use Dvips, the less time will be spent fighting with PostScript and the
+more time will be available to create beautiful documents. So if you
+don't use Dvips on your system, get it today.
+
+ Tom Rokicki wrote and maintains the original Dvips program.
+
+
+File: dvips.info, Node: Installation, Next: Invoking Dvips, Prev: Why Dvips, Up: Top
+
+2 Installation
+**************
+
+(A copy of this chapter is in the distribution file `dvipsk/INSTALL'.)
+
+Installing Dvips is mostly the same as installing any Kpathsea-using
+program. Therefore, for the basic steps involved, *note Installation:
+(kpathsea)Installation. (A copy is in the file `kpathsea/INSTALL'.)
+
+ For solutions to common installation problems and information on how
+to report a bug, see the file `kpathsea/BUGS' (*note Bugs:
+(kpathsea)Bugs.). For solutions to Dvips-specific problems, *note
+Debug options::. Also see the Dvips home page at
+`http://www.radicaleye.com/dvips'.
+
+ Dvips does require some additional installation, detailed in the
+sections below. Also, to configure color devices, *note Color device
+configuration::.
+
+* Menu:
+
+* config.ps installation:: Printer and site Dvips configuration.
+* PostScript font installation:: Many PostScript fonts are freely available.
+* Ghostscript installation:: A free PostScript interpreter.
+* Diagnosing problems:: Some common runtime difficulties.
+
+
+File: dvips.info, Node: config.ps installation, Next: PostScript font installation, Up: Installation
+
+2.1 `config.ps' installation
+============================
+
+Dvips has its own configuration files: a file `config.ps' for sitewide
+defaults, and a file `config.PRINTER' for each printer (output device).
+Since these are site-specific, `make install' does not create them;
+you must create them yourself.
+
+ (These Dvips configuration files are independent of the Kpathsea
+onfiguration file `texmf.cnf' (*note Config files: (kpathsea)Config
+files.).
+
+ Dvips configuration files contents and searching are described fully
+in *Note Config files::. The simplest way to create a new
+configuration file is to copy and modify the file
+`dvipsk/contrib/config.proto', seasoning with options to your taste
+from *Note Config files::. Here is `config.proto' for your reading
+pleasure:
+ % Prototype Dvips configuration file.
+
+ % How to print, maybe with lp instead lpr, etc.
+ o |lpr
+
+ % Default resolution of this device, in dots per inch.
+ D 600
+
+ % Metafont mode. (This is completely different from the -M command-line
+ % option, which controls whether MakeTeXPK is invoked.) Get
+ % `ftp://ftp.tug.org/tex/modes.mf' for a list of mode names. This mode
+ % and the D number above must agree, or MakeTeXPK will get confused.
+ M ljfour
+
+ % Memory available. Download the three-line PostScript file:
+ % %! Hey, we're PostScript
+ % /Times-Roman findfont 30 scalefont setfont 144 432 moveto
+ % vmstatus exch sub 40 string cvs show pop showpage
+ % to determine this number. (It will be the only thing printed.)
+ m 3500000
+
+ % Correct printer offset. You can use testpage.tex from the LaTeX
+ % distribution to find these numbers. Print testpage.dvi more than once.
+ O 0pt,0pt
+
+ % Partially download Type 1 fonts by default. Only reason not to do
+ % this is if you encounter bugs. (Please report them to
+ % <tex-k@mail.tug.org> if you do.)
+ j
+
+ % Also look for fonts at these resolutions.
+ R 300 600
+
+ % With a high resolution and a RISC cpu, better to compress the bitmaps.
+ Z
+
+ % Uncomment these if you have and want to use PostScript versions of the
+ % fonts.
+ %p +cmfonts.map
+ %p +lafonts.map
+ %p +cyrfonts.map
+ %p +eufonts.map
+
+ % You will also want definitions for alternative paper sizes -- A4,
+ % legal, and such. Examples in `contrib/papersize.level2' and
+ % `contrib/papersize.simple'.
+
+
+File: dvips.info, Node: PostScript font installation, Next: Ghostscript installation, Prev: config.ps installation, Up: Installation
+
+2.2 PostScript font installation
+================================
+
+To use PostScript fonts with TeX and Dvips, you need both metric files
+(`.tfm' and `.vf') and the outlines (`.pfa' or `.pfb'). *Note Font
+concepts::.
+
+ To support the basic PostScript font set, the recommended (and
+simplest) approach is to install the files at
+`http://www.ctan.org/tex-archive/fonts/psfonts/lw35nfsx.zip'. This
+archive contains metrics, outlines, and bitmaps (for previewing) for
+the 35 de facto standard fonts donated by URW and the additional
+high-quality freely available PostScript fonts donated by Adobe,
+Bitstream, and URW, including geometrically-created variants such as
+oblique and small caps.
+
+ `CTAN:/fonts/psfonts' contains support for many additional fonts for
+which you must buy outlines (Adobe, Bigelow & Holmes, Monotype,
+Softkey, Y&Y). (For CTAN info, *note unixtex.ftp:
+(kpathsea)unixtex.ftp.; a copy is in the top-level file `INSTALL'.)
+
+ If you have additional PostScript fonts, you can make them available
+to Dvips by (1) giving them with appropriate filenames; and (2) running
+Afm2tfm (*note Making a font available::) to make TFM and VF metrics for
+TeX and Dvips to use. Also add them to `psfonts.map' if necessary
+(*note psfonts.map::); it contains everything contained in
+`lw35nfsx.zip' and most fonts that come with Unix systems.
+
+ Following are locations for vendor-supplied fonts. Please mail
+<tex-k@tug.org> if you find fonts elsewhere on your system.
+
+DEC Ultrix
+ /usr/lib/DPS/outline/decwin
+
+DEC Digital Unix
+ /usr/lib/X11/fonts/Type1Adobe
+
+HP HP-UX 9, 10
+ /usr/lib/X11/fonts/type1.st/typefaces
+
+IBM AIX
+ /usr/lpp/DPS/fonts/outlines
+ /usr/lpp/X11/lib/X11/fonts/Type1
+ /usr/lpp/X11/lib/X11/fonts/Type1/DPS
+
+NeXT
+ /NextLibrary/Fonts/outline
+
+SGI IRIX
+ /usr/lib/DPS/outline/base /usr/lib/X11/fonts/Type1
+
+Sun SunOS 4.x
+ (NeWSprint only)
+ newsprint_2.5/SUNWsteNP/reloc/$BASEDIR/
+ NeWSprint/small_openwin/lib/fonts
+ /usr/openwin/lib/X11/fonts/Type1/outline
+
+Sun Solaris 2
+ /usr/openwin/lib/X11/fonts/Type1/outline
+
+VMS
+ SYS$COMMON:[SYSFONT.XDPS.OUTLINE]
+
+The NeXT system supplies more fonts than any others, but there's a lot
+of overlap.
+
+ Finally, if you have an Hewlett-Packard printer, you should be able
+to get Type 1 font files for the standard 35 fonts from HP, if the
+freely available URW Type 1's do not satisfy for whatever reason. The
+phone number for HP Printer Drivers is (in the United States)
+303-339-7009. The driver set to ask for is Adobe Type Manager 2.51,
+and the disk set number is `MP210en3'. Mentioning anything other than
+Microsoft Windows when you ask for the driver set will likely lead to
+great confusion on the other end.
+
+
+File: dvips.info, Node: Ghostscript installation, Next: Diagnosing problems, Prev: PostScript font installation, Up: Installation
+
+2.3 Ghostscript installation
+============================
+
+Ghostscript is a PostScript interpreter freely available to end-users,
+written by Peter Deutsch. It can read the PostScript produced by Dvips
+and render it on your monitor, or for another device (e.g., an Epson
+printer) that does not support PostScript, or in PDF format. The latest
+version is available via `http://www.cs.wisc.edu/~ghost/index.html' and
+`ftp://ftp.cs.wisc.edu/pub/ghost/aladdin/'.
+
+ A somewhat older version of Ghostscript is available under the GNU
+General Public License, free to everyone. You can get that from
+`ftp://prep.ai.mit.edu/pub/gnu/'.
+
+ The program Ghostview, written by Tim Theisen, provides typical
+previewing capabilities (next page/previous page, magnification, etc.).
+It requires Ghostscript to run, and files in structured Postscript,
+specifically with `%%Page' comments (no `N' in `config.ps'). You can
+get Ghostview from the same places as Ghostscript.
+
+
+File: dvips.info, Node: Diagnosing problems, Prev: Ghostscript installation, Up: Installation
+
+2.4 Diagnosing problems
+=======================
+
+You've gone through all the trouble of installing Dvips, carefully read
+all the instructions in this manual, and still can't get something to
+work. The following sections provide some helpful hints if you find
+yourself in such a situation.
+
+ For details on effective bug reporting, common installation problems,
+and `mktexpk' problems, *note Bugs: (kpathsea)Bugs.
+
+* Menu:
+
+* Debug options:: Getting diagnostics.
+* No output:: No output at all.
+* Small or inverted:: Output too small or inverted.
+* Printer errors:: The printer sends back errors.
+* Long documents fail:: Long documents fail to print.
+* Including graphics fails:: Figures don't work.
+
+
+File: dvips.info, Node: Debug options, Next: No output, Up: Diagnosing problems
+
+2.4.1 Debug options
+-------------------
+
+The `-d' flag to Dvips helps in tracking down certain errors. The
+parameter to this flag is an integer that tells what errors are
+currently being tracked. To track a certain class of debug messages,
+simply provide the appropriate number given below; if you wish to track
+multiple classes, sum the numbers of the classes you wish to track. To
+track all classes, you can use `-1'. Another useful value is `3650',
+which tracks everything having to do with file searching and opening.
+
+ Some of these debugging options are actually provided by Kpathsea
+(*note Debugging: (kpathsea)Debugging.).
+
+ The classes are:
+1
+ specials
+
+2
+ paths
+
+4
+ fonts
+
+8
+ pages
+
+16
+ headers
+
+32
+ font compression
+
+64
+ files
+
+128
+ config files
+
+256
+ Partial Type 1 font encoding vectors
+
+512
+ Partial Type 1 subr calls
+
+1024
+ Kpathsea `stat' calls
+
+2048
+ Kpathsea hash table lookups
+
+4096
+ Kpathsea path element expansion
+
+8192
+ Kpathsea path searches
+
+
+File: dvips.info, Node: No output, Next: Small or inverted, Prev: Debug options, Up: Diagnosing problems
+
+2.4.2 No output at all
+----------------------
+
+If you are not getting any output at all, even from the simplest
+one-character file (for instance, `\ \bye'), then something is very
+wrong. Practically any file sent to a PostScript laser printer should
+generate some output, at the very least a page detailing what error
+occurred, if any. Talk to your system administrator about downloading a
+PostScript error handler. (Adobe distributes a good one called
+`ehandler.ps'.)
+
+ It is possible, especially if you are using non-Adobe PostScript,
+that your PostScript interpreter is broken. Even then it should
+generate an error message. Dvips tries to work around as many bugs as
+possible in common non-Adobe PostScript interpreters, but doubtless it
+misses a few. PowerPage Revision 1, Interpreter Version 20001.001, on
+a Mitsubishi Shinko CHC-S446i color thermal dye sublimation printer is
+known to be unable to print with any but builtin fonts.
+
+ If Dvips gives any strange error messages, or compilation on your
+machine generated a lot of warnings, perhaps the Dvips program itself is
+broken. Try using the debug options to determine where the error
+occurred (*note Debug options::).
+
+ It is possible your spooler is broken and is misinterpreting the
+structured comments. Try the `-N' flag to turn off structured comments
+and see what happens.
+
+
+File: dvips.info, Node: Small or inverted, Next: Printer errors, Prev: No output, Up: Diagnosing problems
+
+2.4.3 Output too small or inverted
+----------------------------------
+
+If some documents come out inverted or too small, probably your spooler
+is not supplying an end of job indicator at the end of each file. (This
+commonly happens on small machines that don't have spoolers.) You can
+force Dvips to do this with the `-F' flag (or `F' config file option),
+but this generates files with a terminating binary character
+(control-D). You can also try using the `-s' flag (or `s' config file
+option) to enclose the entire job in a save/restore pair. *Note
+Command-line options::, and *Note Config files::.
+
+
+File: dvips.info, Node: Printer errors, Next: Long documents fail, Prev: Small or inverted, Up: Diagnosing problems
+
+2.4.4 Error messages from printer
+---------------------------------
+
+If your printer returns error messages, the error message gives very
+good information on what might be going wrong. One of the most common
+error messages is `bop undefined'. This is caused by old versions of
+Transcript and other spoolers that do not properly parse the setup
+section of the PostScript. To fix this, turn off structured comments
+with the `-N' option, but it'd be best to get your spooling software
+updated.
+
+ Another error message is `VM exhausted'. Some printers indicate
+this error by locking up, others quietly reset. This is caused by Dvips
+thinking that the printer has more memory than it actually does, and
+then printing a complicated document. To fix this, try lowering the
+`m' parameter in the configuration file; use the debug option to make
+sure you adjust the correct file.
+
+ Other errors may indicate you are trying to include graphics that
+don't nest properly in other PostScript documents, among other things.
+Try the PostScript file on a QMS PS-810 or other Adobe PostScript
+printer if you have one, or Ghostscript (*note Ghostscript
+installation::); it might be a problem with the printer itself.
+
+
+File: dvips.info, Node: Long documents fail, Next: Including graphics fails, Prev: Printer errors, Up: Diagnosing problems
+
+2.4.5 Long documents fail to print
+----------------------------------
+
+This is usually caused by incorrectly specifying the amount of memory
+the printer has in the configuration file; see the previous section.
+
+
+File: dvips.info, Node: Including graphics fails, Prev: Long documents fail, Up: Diagnosing problems
+
+2.4.6 Including graphics fails
+------------------------------
+
+The most common problem with including graphics is an incorrect bounding
+box (*note Bounding box::). Complain to whoever wrote the software that
+generated the file if the bounding box is indeed incorrect.
+
+ Another possible problem is that the figure you are trying to include
+does not nest properly; there are certain rules PostScript applications
+must follow when generating files to be included. The Dvips program
+includes work-arounds for such errors in Adobe Illustrator and other
+programs, but there are certainly applications that haven't been tested.
+
+ One possible thing to try is the `-K' flag which strips the comments
+from an included figure. This might be necessary if the PostScript
+spooling software does not read the structured comments correctly. Use
+of this flag will break graphics from some applications, though, since
+some applications read the PostScript file from the input stream,
+looking for a particular comment.
+
+ Any application which generates graphics output containing raw binary
+(not ASCII hex) will probably fail with Dvips.
+
+
+File: dvips.info, Node: Invoking Dvips, Next: Paper size and landscape, Prev: Installation, Up: Top
+
+3 Invoking Dvips
+****************
+
+Dvips reads a DVI file as output by (for example) TeX, and converts it
+to PostScript, taking care of builtin or downloaded PostScript fonts,
+font reencoding, color, etc. These features are described in other
+chapters in this document.
+
+ There many ways to control Dvips' behavior: configuration files,
+environment variables, and command-line options.
+
+* Menu:
+
+* Basic usage::
+* Command-line options::
+* Environment variables::
+* Config files::
+
+
+File: dvips.info, Node: Basic usage, Next: Command-line options, Up: Invoking Dvips
+
+3.1 Basic usage of Dvips
+========================
+
+To use Dvips at its simplest, simply type
+ dvips foo
+ where `foo.dvi' is the output of TeX that you want to print. If
+Dvips has been installed correctly, the document will probably roll out
+of your default printer.
+
+ If you use fonts that have not been used on your system before, they
+may be automatically generated; this process can take a few minutes, so
+progress reports appear by default. The next time that document is
+printed, these fonts will have been saved in the proper directories, so
+printing will go much faster. (If Dvips tries to endlessly generate the
+same fonts over and over again, it hasn't been installed properly.
+*Note Unable to generate fonts: (kpathsea)Unable to generate fonts.)
+
+ Many options are available (see the next section). For a brief
+summary of available options, just type
+ dvips --help
+
+
+File: dvips.info, Node: Command-line options, Next: Environment variables, Prev: Basic usage, Up: Invoking Dvips
+
+3.2 Command-line options
+========================
+
+Dvips has a plethora of command line options. Reading through this
+section will give a good idea of the capabilities of the driver.
+
+* Menu:
+
+* Option summary:: Quick listing, from Dvips --help.
+* Option details:: More information about each option.
+
+
+File: dvips.info, Node: Option summary, Next: Option details, Up: Command-line options
+
+3.2.1 Option summary
+--------------------
+
+Here is a handy summary of the options; it is printed out when you run
+Dvips with no arguments or with the standard `--help' option.
+
+Usage: dvips [OPTION]... FILENAME[.dvi]
+a* Conserve memory, not time A Print only odd (TeX) pages
+b # Page copies, for posters e.g. B Print only even (TeX) pages
+c # Uncollated copies C # Collated copies
+d # Debugging D # Resolution
+e # Maxdrift value E* Try to create EPSF
+f* Run as filter F* Send control-D at end
+ G* Shift low chars to higher pos.
+h f Add header file
+i* Separate file per section
+j* Download fonts partially
+k* Print crop marks K* Pull comments from inclusions
+l # Last page
+m* Manual feed M* Don't make fonts
+mode s Metafont device name
+n # Maximum number of pages N* No structured comments
+noomega Disable Omega extensions
+o f Output file O c Set/change paper offset
+p # First page P s Load config.$s
+pp l Print only pages listed
+q* Run quietly
+r* Reverse order of pages R* Run securely
+s* Enclose output in save/restore S # Max section size in pages
+t s Paper format T c Specify desired page size
+u s PS mapfile U* Disable string param trick
+v Print version number and quit V* Send downloadable PS fonts as PK
+x # Override dvi magnification X # Horizontal resolution
+y # Multiply by dvi magnification Y # Vertical resolution
+z* Hyper PS Z* Compress bitmap fonts
+ # = number f = file s = string * = suffix, `0' to turn off
+ c = comma-separated dimension pair (e.g., 3.2in,-32.1cm)
+ l = comma-separated list of page ranges (e.g., 1-4,7-9)
+
+Email bug reports to tex-k@mail.tug.org.
+
+
+File: dvips.info, Node: Option details, Prev: Option summary, Up: Command-line options
+
+3.2.2 Option details
+--------------------
+
+Many of the parameterless options listed here can be turned off by
+suffixing the option with a zero (`0'); for instance, to turn off page
+reversal, use `-r0'. Such options are marked with a trailing `*'.
+
+`-'
+ Read additional options from standard input after processing the
+ command line.
+
+`--help'
+ Print a usage message and exit.
+
+`--version'
+ Print the version number and exit.
+
+`-a*'
+ Conserve memory by making three passes over the DVI file instead
+ of two and only loading those characters actually used. Generally
+ only useful on machines with a very limited amount of memory, like
+ some PCs.
+
+`-A'
+ Print only the odd pages. This option uses TeX page numbers, not
+ physical page numbers.
+
+`-b NUM'
+ Generate NUM copies of each page, but duplicating the page body
+ rather than using the `/#copies' PostScript variable. This can be
+ useful in conjunction with a header file setting `bop-hook' to do
+ color separations or other neat tricks.
+
+`-B'
+ Print only the even pages. This option uses TeX page numbers, not
+ physical page numbers.
+
+`-c NUM'
+ Generate NUM consecutive copies of every page, i.e., the output is
+ uncollated. This merely sets the builtin PostScript variable
+ `/#copies'.
+
+`-C NUM'
+ Generate NUM copies, but collated (by replicating the data in the
+ PostScript file). Slower than the `-c' option, but easier on the
+ hands, and faster than resubmitting the same PostScript file
+ multiple times.
+
+`-d NUM'
+ Set the debug flags, showing what Dvips (thinks it) is doing.
+ This will work unless Dvips has been compiled without the `DEBUG'
+ option (not recommended). *Note Debug options::, for the possible
+ values of NUM. Use `-d -1' as the first option for maximum output.
+
+`-D NUM'
+ Set both the horizontal and vertical resolution to NUM, given in
+ dpi (dots per inch). This affects the choice of bitmap fonts that
+ are loaded and also the positioning of letters in resident
+ PostScript fonts. Must be between 10 and 10000. This affects both
+ the horizontal and vertical resolution. If a high resolution
+ (something greater than 400 dpi, say) is selected, the `-Z' flag
+ should probably also be used. If you are using fonts made with
+ Metafont, such as Computer Modern, `mktexpk' needs to know about
+ the value for NUM that you use or Metafont will fail. See the file
+ `ftp://ftp.tug.org/tex/modes.mf' for a list of resolutions and mode
+ names for most devices.
+
+`-e NUM'
+ Maximum drift in pixels of each character from its `true'
+ resolution-independent position on the page. The default value of
+ this parameter is resolution dependent (it is the number of
+ entries in the list [100, 200, 300, 400, 500, 600, 800, 1000,
+ 1200, 1600, 2000, 2400, 2800, 3200, ...] that are less than or
+ equal to the resolution in dots per inch). Allowing individual
+ characters to `drift' from their correctly rounded positions by a
+ few pixels, while regaining the true position at the beginning of
+ each new word, improves the spacing of letters in words.
+
+`-E*'
+ Generate an EPSF file with a tight bounding box. This only looks
+ at marks made by characters and rules, not by any included
+ graphics. In addition, it gets the glyph metrics from the TFM
+ file, so characters that print outside their enclosing TFM box may
+ confuse it. In addition, the bounding box might be a bit too
+ loose if the character glyph has significant left or right side
+ bearings. Nonetheless, this option works well enough for creating
+ small EPSF files for equations or tables or the like. (Of course,
+ Dvips output, especially when using bitmap fonts, is
+ resolution-dependent and thus does not make very good EPSF files,
+ especially if the images are to be scaled; use these EPSF files
+ with care.) For multiple page input files, also specify `-i' to
+ get each page as a separate EPSF file; otherwise, all the pages
+ are overlaid in the single output file.
+
+`-f*'
+ Run as a filter. Read the DVI file from standard input and write
+ the PostScript to standard output. The standard input must be
+ seekable, so it cannot be a pipe. If your input must be a pipe,
+ write a shell script that copies the pipe output to a temporary
+ file and then points Dvips at this file. This option also
+ disables the automatic reading of the `PRINTER' environment
+ variable; use `-P$PRINTER' after the `-f' to read it anyway. It
+ also turns off the automatic sending of control-D if it was turned
+ on with the `-F' option or in the configuration file; use `-F'
+ after the `-f' to send it anyway.
+
+`-F*'
+ Write control-D (ASCII code 4) as the very last character of the
+ PostScript file. This is useful when Dvips is driving the printer
+ directly instead of working through a spooler, as is common on
+ personal systems. On systems shared by more than one person, this
+ is not recommended.
+
+`-G*'
+ Shift non-printing characters (ASCII 0-32, 127) to higher-numbered
+ positions. This may be useful sometimes.
+
+`-h NAME'
+ Prepend NAME as an additional header file, or, if NAME is `-',
+ suppress all header files. Any definitions in the header file get
+ added to the PostScript `userdict'.
+
+`-i*'
+ Make each section be a separate file; a "section" is a part of the
+ document processed independently, most often created to avoid
+ memory overflow. The filenames are created replacing the suffix
+ of the supplied output file name by a three-digit sequence number.
+ This option is most often used in conjunction with the `-S'
+ option which sets the maximum section length in pages; if `-i' is
+ specified and `-S' is not, each page is output as a separate file.
+ For instance, some phototypesetters cannot print more than ten or
+ so consecutive pages before running out of steam; these options
+ can be used to automatically split a book into ten-page sections,
+ each to its own file.
+
+`-j*'
+ Download only needed characters from Type 1 fonts. This is the
+ default in the current release. Some debugging flags trace this
+ operation (*note Debug options::). You can also control partial
+ downloading on a per-font basis (*note psfonts.map::).
+
+`-k*'
+ Print crop marks. This option increases the paper size (which
+ should be specified, either with a paper size special or with the
+ `-T' option) by a half inch in each dimension. It translates each
+ page by a quarter inch and draws cross-style crop marks. It is
+ mostly useful with typesetters that can set the page size
+ automatically. This works by downloading `crop.pro'.
+
+`-K*'
+ Remove comments in included PostScript graphics, font files, and
+ headers; only necessary to get around bugs in spoolers or
+ PostScript post-processing programs. Specifically, the `%%Page'
+ comments, when left in, often cause difficulties. Use of this
+ flag can cause other graphics to fail, however, since the
+ PostScript header macros from some software packages read portion
+ the input stream line by line, searching for a particular comment.
+
+`-l [=]NUM'
+ The last page printed will be the first one numbered NUM. Default
+ is the last page in the document. If NUM is prefixed by an equals
+ sign, then it (and the argument to the `-p' option, if specified)
+ is treated as a physical (absolute) page number, rather than a
+ value to compare with the TeX `\count0' values stored in the DVI
+ file. Thus, using `-l =9' will end with the ninth page of the
+ document, no matter what the pages are actually numbered.
+
+`-m*'
+ Specify manual feed, if supported by the output device.
+
+`-mode MODE'
+ Use MODE as the Metafont device name for path searching and font
+ generation. This overrides any value from configuration files.
+ With the default paths, explicitly specifying the mode also makes
+ the program assume the fonts are in a subdirectory named MODE.
+ *Note TeX directory structure: (kpathsea)TeX directory structure.
+ If Metafont does not understand the MODE name, see *Note Unable to
+ generate fonts: (kpathsea)Unable to generate fonts.
+
+`-M*'
+ Turns off automatic font generation (`mktexpk'). If `mktexpk',
+ the invocation is appended to a file `missfont.log' (by default)
+ in the current directory. You can then execute the log file to
+ create the missing files after fixing the problem. If the current
+ directory is not writable and the environment variable or
+ configuration file value `TEXMFOUTPUT' is set, its value is used.
+ Otherwise, nothing is written. The name `missfont.log' is
+ overridden by the `MISSFONT_LOG' environment variable or
+ configuration file value.
+
+`-n NUM'
+ Print at most NUM pages. Default is 100000.
+
+`-N*'
+ Turns off generation of structured comments such as `%%Page'; this
+ may be necessary on some systems that try to interpret PostScript
+ comments in weird ways, or on some PostScript printers. Old
+ versions of TranScript in particular cannot handle modern
+ Encapsulated PostScript. Beware: This also disables page
+ movement, etc., in PostScript viewers such as Ghostview.
+
+`-noomega'
+ This will disable the use of Omega extensions when interpreting
+ DVI files. By default, the additional opcodes `129' and `134' are
+ recognized by Dvips as Omega extensions and interpreted as
+ requests to set 2-byte characters. The only drawback is that the
+ virtual font array will (at least temporarily) require 65536
+ positions instead of the default 256 positions, i.e., the memory
+ requirements of Dvips will be slightly larger. If you find this
+ unacceptable or encounter another problem with the Omega
+ extensions, you can switch this extension off by using `-noomega'
+ (but please do send a bug report if you find such problems, *note
+ Bugs: (kpathsea)Bugs.).
+
+`-o NAME'
+ Send output to the file NAME. If `-o' is specified without NAME,
+ the default is `FILE.ps' where the input DVI file was `FILE.dvi'.
+ If `-o' isn't given at all, the configuration file default is used.
+
+ If NAME is `-', output goes to standard output. If the first
+ character of NAME is `!' or `|', then the remainder will be used
+ as an argument to `popen'; thus, specifying `|lpr' as the output
+ file will automatically queue the file for printing as usual.
+ (The MS-DOS version will print to the local printer device `PRN'
+ when NAME is `|lpr' and a program by that name cannot be found.)
+
+ `-o' disables the automatic reading of the `PRINTER' environment
+ variable, and turns off the automatic sending of control-D. See
+ the `-f' option for how to override this.
+
+`-O X-OFFSET,Y-OFFSET'
+ Move the origin by X-OFFSET,Y-OFFSET, a comma-separated pair of
+ dimensions such as `.1in,-.3cm' (*note papersize special::). The
+ origin of the page is shifted from the default position (of one
+ inch down, one inch to the right from the upper left corner of the
+ paper) by this amount. This is usually best specified in the
+ printer-specific configuration file.
+
+ This is useful for a printer that consistently offsets output
+ pages by a certain amount. You can use the file `testpage.tex' to
+ determine the correct value for your printer. Be sure to do
+ several runs with the same `O' value--some printers vary widely
+ from run to run.
+
+ If your printer offsets every other page consistently, instead of
+ every page, your best recourse is to use `bop-hook' (*note
+ PostScript hooks::).
+
+`-p [=]NUM'
+ The first page printed will be the first one numbered NUM. Default
+ is the first page in the document. If NUM is prefixed by an
+ equals sign, then it (and the argument to the `-l' option, if
+ specified) is treated as a physical (absolute) page number, rather
+ than a value to compare with the TeX `\count0' values stored in the
+ DVI file. Thus, using `-p =3' will start with the third page of
+ the document, no matter what the pages are actually numbered.
+
+`-pp FIRST-LAST'
+ Print pages FIRST through LAST; equivalent to `-p FIRST -l LAST',
+ except that multiple `-pp' options accumulate, unlike `-p' and
+ `-l'. The `-' separator can also be `:'.
+
+`-P PRINTER'
+ Read the configuration file `config.PRINTER' (`PRINTER.cfg' on
+ MS-DOS), which can set the output name (most likely `o |lpr
+ -PPRINTER'), resolution, Metafont mode, and perhaps font paths and
+ other printer-specific defaults. It works best to put sitewide
+ defaults in the one master `config.ps' file and only things that
+ vary printer to printer in the `config.PRINTER' files; `config.ps'
+ is read before `config.PRINTER'.
+
+ A configuration file for creating Adobe PDF files is provided in
+ `config.pdf' and can be loaded with `-Ppdf', it will try to
+ include Type1 outline fonts into the PostScript file (*note
+ Hypertext caveats::).
+
+ If no `-P' or `-o' is given, the environment variable `PRINTER' is
+ checked. If that variable exists, and a corresponding
+ `config.PRINTER' (`PRINTER.cfg' on MS-DOS) file exists, it is read.
+ *Note Configuration file searching::.
+
+`-q*'
+ Run quietly. Don't chatter about pages converted, etc. to standard
+ output; report no warnings (only errors) to standard error.
+
+`-r*'
+ Output pages in reverse order. By default, page 1 is output first.
+
+`-R'
+ Run securely. This disables shell command execution in `\special'
+ (via ``', *note Dynamic creation of graphics::) and config files
+ (via the `E' option, *note Configuration file commands::), and
+ opening of any absolute filenames.
+
+`-s*'
+ Enclose the output in a global save/restore pair. This causes the
+ file to not be truly conformant, and is thus not recommended, but
+ is useful if you are driving a deficient printer directly and thus
+ don't care too much about the portability of the output to other
+ environments.
+
+`-S NUM'
+ Set the maximum number of pages in each `section'. This option is
+ most commonly used with the `-i' option; see its description above
+ for more information.
+
+`-t PAPERTYPE'
+ Set the paper type to PAPERTYPE, usually defined in one of the
+ configuration files, along with the appropriate PostScript code to
+ select it (*note Config file paper sizes::). You can also specify
+ a PAPERTYPE of `landscape', which rotates a document by 90
+ degrees. To rotate a document whose paper type is not the
+ default, you can use the `-t' option twice, once for the paper
+ type, and once for `landscape'. You should not use any `-t'
+ option when TeX writes a `papersize' special, as is done by some
+ LaTeX packages, e.g., `hyperref.sty'.
+
+`-T HSIZE,VSIZE'
+ Set the paper size to (HSIZE,VSIZE), a comma-separated pair of
+ dimensions such as `.1in,-.3cm' (*note papersize special::). It
+ overrides any paper size special in the DVI file.
+
+`-u PSMAPFILE'
+ Set PSMAPFILE to be the file that dvips uses for looking up
+ PostScript font aliases. If PSMAPFILE begins with a `+'
+ character, then the rest of the name is used as the name of the
+ map file, and the map file is appended to the list of map files
+ (instead of replacing the list). In either case, if the name has
+ no extension, then `.map' is added at the end.
+
+`-U*'
+ Disable a PostScript virtual memory-saving optimization that
+ stores the character metric information in the same string that is
+ used to store the bitmap information. This is only necessary when
+ driving the Xerox 4045 PostScript interpreter, which has a bug
+ that puts garbage on the bottom of each character. Not
+ recommended unless you must drive this printer.
+
+`-v'
+ Print the dvips version number and exit.
+
+`-V*'
+ Download non-resident PostScript fonts as bitmaps. This requires
+ use of `mtpk' or `gsftopk' or `pstopk' or some combination thereof
+ to generate the required bitmap fonts; these programs are supplied
+ with Dvips. The bitmap must be put into `psfonts.map' as the
+ downloadable file for that font. This is useful only for those
+ fonts for which you do not have real outlines, being downloaded to
+ printers that have no resident fonts, i.e., very rarely.
+
+`-x NUM'
+ Set the magnification ratio to NUM/1000. Overrides the
+ magnification specified in the DVI file. Must be between 10 and
+ 100000. It is recommended that you use standard magstep values
+ (1095, 1200, 1440, 1728, 2074, 2488, 2986, and so on) to help
+ reduce the total number of PK files generated. NUM may be a real
+ number, not an integer, for increased precision.
+
+`-X NUM'
+ Set the horizontal resolution in dots per inch to NUM.
+
+`-y NUM'
+ Set the magnification ratio to NUM/1000 times the magnification
+ specified in the DVI file. See `-x' above.
+
+`-Y NUM'
+ Set the vertical resolution in dots per inch to NUM.
+
+`-z*'
+ Pass `html' hyperdvi specials through to the output for eventual
+ distillation into PDF. This is not enabled by default to avoid
+ including the header files unnecessarily, and use of temporary
+ files in creating the output. *Note Hypertext::.
+
+`-Z*'
+ Compress bitmap fonts in the output file, thereby reducing the
+ size of what gets downloaded. Especially useful at high
+ resolutions or when very large fonts are used. May slow down
+ printing, especially on early 68000-based PostScript printers.
+ Generally recommend today, and can be enabled in the configuration
+ file (*note Configuration file commands::).
+
+
+
+File: dvips.info, Node: Environment variables, Next: Config files, Prev: Command-line options, Up: Invoking Dvips
+
+3.3 Environment variables
+=========================
+
+Dvips looks for many environment variables, to define search paths and
+other things. The path variables are read as needed, after all
+configuration files are read, so they override values in the
+configuration files. (Except for `TEXCONFIG', which defines where the
+configuration files themselves are found.)
+
+ *Note Path specifications: (kpathsea)Path specifications, for
+details of interpretation of path and other environment variables
+common to all Kpathsea-using programs. Only the environment variables
+specific to Dvips are mentioned here.
+
+`DVIPSFONTS'
+ Default path to search for all fonts. Overrides all the font path
+ config file options and other environment variables (*note
+ Supported file formats: (kpathsea)Supported file formats.).
+
+`DVIPSHEADERS'
+ Default path to search for PostScript header files. Overrides the
+ `H' config file option (*note Configuration file commands::).
+
+`DVIPSMAKEPK'
+ Overrides `mktexpk' as the name of the program to invoke to create
+ missing PK fonts. You can change the arguments passed to the
+ `mktexpk' program with the `MAKETEXPK' environment variable; *note
+ MakeTeX script arguments: (kpathsea)MakeTeX script arguments.
+
+`DVIPSRC'
+ Specifies the name of the startup file (*note Configuration file
+ searching::) which is read after `config.ps' but before any
+ printer-specific configuration files.
+
+`DVIPSSIZES'
+ Last-resort sizes for scaling of unfound fonts. Overrides the `R'
+ definition in config files (*note Configuration file commands::).
+
+`PRINTER'
+ Determine the default printer configuration file. (Dvips itself
+ does not use `PRINTER' to determine the output destination in any
+ way.)
+
+`TEXCONFIG'
+ Path to search for Dvips' `config.PRINTER' configuration files,
+ including the base `config.ps'. Using this single environment
+ variable, you can override everything else. (The printer-specific
+ configuration files are called `PRINTER.cfg' on MS-DOS, but
+ `config.ps' is called by that name on all platforms.)
+
+`TEXPICTS'
+ Path to search for included graphics files. Overrides the `S'
+ config file option (*note Configuration file commands::). If not
+ set, `TEXINPUTS' is looked for. *Note Supported file formats:
+ (kpathsea)Supported file formats.
+
+
+
+File: dvips.info, Node: Config files, Prev: Environment variables, Up: Invoking Dvips
+
+3.4 Dvips configuration files
+=============================
+
+This section describes in detail the Dvips-specific `config.*' device
+configuration files (called `*.cfg' on MS-DOS), which override the
+`texmf.cnf' configuration files generic to Kpathsea which Dvips also
+reads (*note Config files: (kpathsea)Config files.).
+
+ For information about installing these files, including a prototype
+file you can copy, *note config.ps installation::.
+
+* Menu:
+
+* Configuration file searching:: Where config.* files are searched for.
+* Configuration file commands:: What can go in a config.* file.
+
+
+File: dvips.info, Node: Configuration file searching, Next: Configuration file commands, Up: Config files
+
+3.4.1 Configuration file searching
+----------------------------------
+
+The Dvips program loads many different configuration files, so that
+parameters can be set globally across the system, on a per-device basis,
+or individually by each user.
+
+ 1. Dvips first reads (if it exists) `config.ps'; it is searched for
+ along the path for Dvips configuration files, as described in
+ *Note Supported file formats: (kpathsea)Supported file formats.
+
+ 2. A user-specific startup file is loaded, so individual users can
+ override any options set in the global file. The environment
+ variable `DVIPSRC', if defined, is used as the specification of
+ the startup file. If this variable is undefined, Dvips uses a
+ platform-specific default name. On Unix Dvips looks for the
+ default startup file under the name `$HOME/.dvipsrc', which is in
+ the user's home directory. On MS-DOS and MS-Windows, where users
+ generally don't have their private directories, the startup file
+ is called `dvips.ini' and it is searched for along the path for
+ Dvips configuration files (as described in *Note Supported file
+ formats: (kpathsea)Supported file formats.); users are expected to
+ set this path as they see fit for their taste.
+
+ 3. The command line is read and parsed: if the `-PDEVICE' option is
+ encountered, at that point `config.DEVICE' is loaded. Thus, the
+ printer configuration file can override anything in the site-wide
+ or user configuration file, and it can also override options in
+ the command line up to the point that the `-P' option was
+ encountered. (On MS-DOS, the printer configuration files are
+ called `DEVICE.cfg', since DOS doesn't allow more than 3 characters
+ after the dot in filenames.)
+
+ 4. If no `-P' option was specified, and also the `-o' and `-f'
+ command line options were not used, Dvips checks the environment
+ variable `PRINTER'. If it exists, then `config.$PRINTER'
+ (`$PRINTER.cfg' on MS-DOS) is loaded (if it exists).
+
+
+ Because the `.dvipsrc' file is read before the printer-specific
+configuration files, individual users cannot override settings in the
+latter. On the other hand, the `TEXCONFIG' path usually includes the
+current directory, and can in any case be set to anything, so the users
+can always define their own printer-specific configuration files to be
+found before the system's.
+
+ A few command-line options are treated specially, in that they are
+not overridden by configuration files:
+
+`-D'
+ As well as setting the resolution, this unsets the mode, if the
+ mode was previously set from a configuration file. If
+ `config.$PRINTER' is read, however, any `D' or `M' lines from
+ there will take effect.
+
+`-mode'
+ This overrides any mode setting (`M' line) in configuration files.
+ `-mode' does not affect the resolution.
+
+`-o'
+ This overrides any output setting (`o' line) in configuration
+ files.
+
+
+ The purpose of these special cases is to (1) minimize the chance of
+having a mismatched mode and resolution (which `mktexpk' cannot
+resolve), and (2) let command-line options override config files where
+possible.
+
+
+File: dvips.info, Node: Configuration file commands, Prev: Configuration file searching, Up: Config files
+
+3.4.2 Configuration file commands
+---------------------------------
+
+Most of the configuration file commands are similar to corresponding
+command line options, but there are a few exceptions. When they are the
+same, we omit the description here.
+
+ As with command line options, many may be turned off by suffixing the
+letter with a zero (`0').
+
+ Within a configuration file, empty lines, and lines starting with a
+space, asterisk, equal sign, percent sign, or pound sign are ignored.
+There is no provision for continuation lines.
+
+`@ NAME HSIZE VSIZE'
+ Define paper sizes. *Note Config file paper sizes::.
+
+`a*'
+ Memory conservation. Same as `-a', *note Option details::.
+
+`b #COPIES'
+ Multiple copies. Same as `-b', *note Option details::.
+
+`D DPI'
+ Output resolution. Same as `-D', *note Option details::.
+
+`e NUM'
+ Max drift. Same as `-e', *note Option details::.
+
+`E COMMAND'
+ Executes the command listed with `system'(3); can be used to get
+ the current date into a header file for inclusion, for instance.
+ Possibly dangerous; this may be disabled, in which case a warning
+ will be printed if the option is used (and warnings are not
+ suppressed).
+
+`f*'
+`F'
+ Run as a filter. Same as `-f', *note Option details::.
+
+`h HEADER'
+ Prepend HEADER to output. Same as `h-', *note Option details::.
+
+`H PATH'
+ Use PATH to search for PostScript header files. The environment
+ variable `DVIPSHEADERS' overrides this.
+
+`i N'
+ Make multiple output files. Same as `-i -S N', *note Option
+ details::.
+
+`j*'
+ Partially download Type 1 fonts. Same as `-j', *note Option
+ details::.
+
+`K*'
+ Remove comments from included PostScript files. Same as `-K',
+ *note Option details::.
+
+`m NUM'
+ Declare NUM as the memory available for fonts and strings in the
+ printer. Default is 180000. This value must be accurate if memory
+ conservation and document splitting is to work correctly. To
+ determine this value, send the following file to the printer:
+
+ %! Hey, we're PostScript
+ /Times-Roman findfont 30 scalefont setfont 144 432 moveto
+ vmstatus exch sub 40 string cvs show pop showpage
+
+ The number printed by this file is the total memory free; it is
+ usually best to tell Dvips that the printer has slightly less
+ memory, because many programs download permanent macros that can
+ reduce the memory in the printer. Some systems or printers can
+ dynamically increase the memory available to a PostScript
+ interpreter, in which case this file might return a ridiculously
+ low number; for example, the NeXT computer and Ghostscript. In
+ these cases, a value of one million works fine.
+
+`M MODE'
+ Metafont mode. Same as `-mode', *note Option details::.
+
+`N*'
+ Disable structured comments. Beware: This also turns off
+ displaying page numbers or changing to specific pagenumbers in
+ PostScript viewers. Same as `-N', *note Option details::.
+
+`o NAME'
+ Send output to NAME. Same as `-o', *note Option details::. In
+ the file `config.foo', a setting like this is probably appropriate:
+ o |lpr -Pfoo
+ The MS-DOS version will emulate spooling to `lpr' by printing to
+ the local printer device `PRN' if it doesn't find an executable
+ program by that name in the current directory or along the `PATH'.
+
+`O XOFF,YOFF'
+ Origin offset. Same as `-O', *note Option details::.
+
+`p [+]NAME'
+ Examine NAME for PostScript font aliases. Default is
+ `psfonts.map'. This option allows you to specify different
+ resident fonts that different printers may have. If NAME starts
+ with a `+' character, then the rest of the name (after any leading
+ spaces) is used as an additional map file; thus, it is possible to
+ have local map files pointed to by local configuration files that
+ append to the global map file. This can be used for font families.
+
+`P PATH'
+ Use PATH to search for bitmap PK font files is PATH. The
+ `PKFONTS', `TEXPKS', `GLYPHFONTS', and `TEXFONTS' environment
+ variables override this. *Note Supported file formats:
+ (kpathsea)Supported file formats.
+
+`q*'
+`Q'
+ Run quietly. Same as `-q', *note Option details::.
+
+`r*'
+ Page reversal. Same as `-r', *note Option details::.
+
+`R NUM1 NUM2 ...'
+ Define the list of default resolutions for PK fonts. If a font
+ size actually used in a document is not available and cannot be
+ created, Dvips will scale the font found at the closest of these
+ resolutions to the requested size, using PostScript scaling. The
+ resulting output may be ugly, and thus a warning is issued. To
+ turn this last-resort scaling off, use a line with just the `R'
+ and no numbers.
+
+ The given numbers must be sorted in increasing order; any number
+ smaller than the preceding one is ignored. This is because it is
+ better to scale a font up than down; scaling down can obliterate
+ small features in the character shape.
+
+ The environment and config file values `DVIPSSIZES' or `TEXSIZES'
+ override this configuration file setting.
+
+ If no `R' settings or environment variables are specified, a list
+ compiled in during installation is used. This default list is
+ defined by the Makefile variable `default_texsizes', defined in
+ the file `make/paths.make'.
+
+`s*'
+ Output global save/restore. Same as `-s', *note Option details::.
+
+`S PATH'
+ Use PATH to search for special illustrations (Encapsulated
+ PostScript files or psfiles). The `TEXPICTS' and then `TEXINPUTS'
+ environment variables override this.
+
+`T PATH'
+ Use PATH to search for TFM files. The `TFMFONTS' and then
+ `TEXFONTS' environment variables overrides this. This path is used
+ for resident fonts and fonts that can't otherwise be found.
+
+`U*'
+ Work around bug in Xerox 4045 printer. Same as `-U', *note Option
+ details::.
+
+`V PATH'
+ Use PATH to search for virtual font files. This may be
+ device-dependent if you use virtual fonts to simulate actual fonts
+ on different devices.
+
+`W [STRING]'
+ If STRING is supplied, write it to standard error after reading
+ all the configuration files; with no STRING, cancel any previous
+ `W' message. This is useful in the default configuration file to
+ remind users to specify a printer, for instance, or to notify users
+ about special characteristics of a particular printer.
+
+`X NUM'
+ Horizontal resolution. Same as `-X' (*note Option details::).
+
+`Y NUM'
+ Vertical resolution. Same as `-Y' (*note Option details::).
+
+`Z*'
+ Compress bitmap fonts. Same as `-Z' (*note Option details::).
+
+`z*'
+ Disables execution of system commands, like `-R' (*note Option
+ details::). If `-R1' is given to disable system commands,
+ however, this will not re-enable them.
+
+
+
+File: dvips.info, Node: Paper size and landscape, Next: Interaction with PostScript, Prev: Invoking Dvips, Up: Top
+
+4 Paper size and landscape orientation
+**************************************
+
+Most TeX documents at a particular site are designed to use the
+standard paper size (letter size in the United States, A4 in Europe).
+The Dvips program can be customized either sitewide or for a particular
+printer.
+
+ But many documents are designed for other paper sizes. For instance,
+you may want to design a document that has the long edge of the paper
+horizontal. This can be useful when typesetting booklets, brochures,
+complex tables, or many other documents. This type of paper orientation
+is called "landscape" orientation (the default orientation is
+"portrait"). Alternatively, a document might be designed for ledger or
+A3 paper.
+
+ Since the intended paper size is a document design decision, not a
+printing decision, such information should be given in the TeX file and
+not on the Dvips command line. For this reason, Dvips supports a
+`papersize' special. It is hoped that this special will become
+standard over time for TeX previewers and other printer drivers.
+
+ Some LaTeX packages, e.g., `hyperref.sty', write a `papersize'
+special into the DVI file. In this case, you need not and should not
+attempt to override it manually.
+
+* Menu:
+
+* papersize special:: Specifying the paper size in TeX.
+* Config file paper sizes:: Specifying printer- and site-specific sizes.
+* Paper trays:: Changing paper trays automatically.
+
+
+File: dvips.info, Node: papersize special, Next: Config file paper sizes, Up: Paper size and landscape
+
+4.1 `papersize' special
+=======================
+
+The format of the `papersize' special is
+
+ \special{papersize=WIDTH,HEIGHT}
+
+WIDTH is the horizontal size of the page, and HEIGHT is the vertical
+size. The dimensions supported are the same as for TeX; namely, in
+(inches), cm (centimeters), mm (millimeters), pt (points), sp (scaled
+points), bp (big points, the same as the default PostScript unit), pc
+(picas), dd (didot points), and cc (ciceros).
+
+ For a US letter size landscape document, the `papersize' would be:
+ \special{papersize=11in,8.5in}
+
+An alternate specification of `landscape':
+ \special{landscape}
+
+This is supported for backward compatibility, but it is hoped that
+reventually the `papersize' comment will dominate.
+
+ Of course, such a `\special' only informs Dvips of the desired paper
+size; you must also adjust `\hsize' and `\vsize' in your TeX document
+typeset to those dimensions.
+
+ The `papersize' special must occur somewhere on the first page of
+the document.
+
+
+File: dvips.info, Node: Config file paper sizes, Next: Paper trays, Prev: papersize special, Up: Paper size and landscape
+
+4.2 Configuration file paper size command
+=========================================
+
+The `@' command in a configuration file sets the paper size defaults
+and options. The first `@' command defines the default paper size. It
+has three possible parameters:
+
+ @ [NAME [HSIZE VSIZE]]
+
+ If `@' is specified on a line by itself, with no parameters, it
+instructs Dvips to discard all previous paper size information (possibly
+from another configuration file).
+
+ If three parameters are given, with the first parameter being a name
+and the second and third being a dimension (as in `8.5in' or `3.2cc',
+just like in the `papersize' special), then the option is interpreted
+as starting a new paper size description, where NAME is the name and
+HSIZE and VSIZE define the horizontal and vertical size of the sheet of
+paper, respectively. For example:
+
+ @ letterSize 8.5in 11in
+
+ If both HSIZE and VSIZE are zero (you must still specify units!)
+then any page size will match. If the `@' character is immediately
+followed by a `+' sign, then the remainder of the line (after skipping
+any leading blanks) is treated as PostScript code to send to the
+printer, presumably to select that particular paper size:
+
+ @ letter 8.5in 11in
+ @+ %%BeginPaperSize: Letter
+ @+ letter
+ @+ %%EndPaperSize
+
+ After all that, if the first character of the line is an exclamation
+point, then the line is put in the initial comments section of the final
+output file; else, it is put in the setup section of the output file.
+For example:
+
+ @ legal 8.5in 14in
+ @+ ! %%DocumentPaperSizes: Legal
+ @+ %%BeginPaperSize: Legal
+ @+ legal
+ @+ %%EndPaperSize
+
+ When Dvips has a paper format name given on the command line, it
+looks for a match by the NAME; when it has a `papersize' special, it
+looks for a match by dimensions. The first match found (in the order
+the paper size information is found in the configuration file) is used.
+If nothing matches, a warning is printed and the first paper size is
+used. The dimensions must match within a quarter of an inch. Landscape
+mode for all paper sizes is automatically supported.
+
+ If your printer has a command to set a special paper size, then give
+dimensions of `0in 0in'; the PostScript code that sets the paper size
+can refer to the dimensions the user requested as `hsize' and `vsize';
+these will be macros defined in the PostScript that return the
+requested size in default PostScript units. Virtually all of the
+PostScript commands you use here are device-dependent and degrade the
+portability of the file; that is why the default first paper size entry
+should not send any PostScript commands down (although a structured
+comment or two would be okay). Also, some printers want
+`BeginPaperSize' comments and paper size setting commands; others (such
+as the NeXT) want `PaperSize' comments and they will handle setting the
+paper size. There is no solution I could find that works for both
+(except maybe specifying both).
+
+ The Perl 5 script `contrib/mkdvipspapers' in the distribution
+directory may help in determining appropriate paper size definitions.
+
+ If your printers are configured to use A4 paper by default, the
+configuration file (probably the global `config.ps' in this case)
+should include this as the first `@' command:
+
+ @ A4size 210mm 297mm
+ @+ %%PaperSize: A4
+
+so that `A4size' is used as the default, and not `A4' itself; thus, no
+PostScript `a4' command is added to the output file, unless the user
+explicitly says to use paper size `a4'. That is, by default, no paper
+size PostScript command should be put in the output, but Dvips will
+still know that the paper size is A4 because `A4size' is the first (and
+therefore default) size in the configuration file.
+
+ Executing the `letter' or `a4' or other PostScript operators cause
+the document to be nonconforming and can cause it not to print on
+certain printers, so the default paper size should not execute such an
+operator if at all possible.
+
+
+File: dvips.info, Node: Paper trays, Prev: Config file paper sizes, Up: Paper size and landscape
+
+4.3 Paper trays
+===============
+
+Some printers, such as the Hewlett-Packard HP4si, have multiple paper
+trays. You can set up Dvips to take advantage of this using the
+`bop-hook' PostScript variable (*note PostScript hooks::).
+
+ For example, suppose you have an alternate tray stocked with
+letterhead paper; the usual tray has the usual paper. You have a
+document where you want the first page printed on letterhead, and the
+remaining pages on the usual paper. You can create a header file, say
+`firstletterhead.PS', with the following (PostScript) code (`bop-hook'
+is passed the current physical page number, which starts at zero):
+
+ /bop-hook { dup 0 eq { ALTERNATETRAY } { NORMALTRAY } ifelse } def
+
+where ALTERNATETRAY and NORMALTRAY are the appropriate commands to
+select the paper trays. On the 4SI, ALTERNATETRAY is `statusdict begin
+1 setpapertray end' and NORMALTRAY is `statusdict begin 0 setpapertray
+end'.
+
+ Then, include the file with either
+ * the `-h' command-line option (*note Option details::); or
+
+ * the `h' config file option (*note Configuration file commands::);
+ or
+
+ * `\special{header=FILE}' in your TeX document (*note Including
+ headers from TeX: Including headers from TeX.).
+
+
+
+File: dvips.info, Node: Interaction with PostScript, Next: PostScript fonts, Prev: Paper size and landscape, Up: Top
+
+5 Interaction with PostScript
+*****************************
+
+Dvips supports inclusion of PostScript figure files (e.g., Encapsulated
+PostScript), downloading other header files (e.g., fonts), including
+literal PostScript code, and hypertext.
+
+* Menu:
+
+* PostScript figures:: Including an Encapsulated PostScript figure.
+* Header files:: Downloading extra definitions.
+* Literal PS:: Writing literal PostScript code.
+* Hypertext:: Producing HyperPostScript to make PDF.
+
+
+File: dvips.info, Node: PostScript figures, Next: Header files, Up: Interaction with PostScript
+
+5.1 PostScript figures
+======================
+
+Scaling and including PostScript graphics is a breeze--if the PostScript
+file is correctly formed. Even if it is not, however, the file can
+usually be accommodated with just a little more work.
+
+* Menu:
+
+* Bounding box:: The %%BoundingBox EPS comment.
+* \includegraphics:: The LaTeX \includegraphics macro.
+* EPSF macros:: Including the file in TeX.
+* psfile special:: The basic special.
+* Dynamic creation of graphics:: Handling compressed or generated figures.
+* Fonts in figures:: The %*Font comment.
+
+
+File: dvips.info, Node: Bounding box, Next: \includegraphics, Up: PostScript figures
+
+5.1.1 The bounding box comment
+------------------------------
+
+The most important feature of a good PostScript file from the standpoint
+of including it in another document is an accurate bounding box comment.
+Every well-formed PostScript file has a comment describing where on the
+page the graphic is located, and how big that graphic is.
+
+ This information is given as the lower left and upper right corners
+of the box just enclosing the graphic, and is thus referred to as the
+"bounding box". These coordinates are given in the default PostScript
+units (there are precisely 72 PostScript units to the inch, like TeX
+big points) with respect to the lower left corner of the sheet of paper.
+
+ To see if a PostScript file has a bounding box comment, just look at
+the first few lines of the file. PostScript files are standard ASCII,
+so you can use any text editor to do this. If within the first few
+dozen lines there is a line like
+
+ %%BoundingBox: 25 50 400 300
+
+(with any reasonable numbers), chances are very good that the file is
+Encapsulated PostScript and will work easily with Dvips. If the file
+contains instead a line like
+
+ %%BoundingBox: (atend)
+
+the file is still probably Encapsulated PostScript, but the bounding box
+is given at the end of the file. Dvips needs it at the beginning. You
+can move it with that same text editor, or a simple script. (The
+bounding box is given in this way when the program that generated the
+PostScript couldn't know the size in advance, or was too lazy to compute
+it.)
+
+ If the document lacks a `%%BoundingBox:' altogether, you can
+determine one in a couple of ways. One is to use the `bbfig' program
+distributed with Dvips in the `contrib' directory. This can usually
+find the correct bounding box automatically; it works best with
+Ghostscript.
+
+ If the comment looks like this:
+ %%BoundingBox: 0 0 612 792
+
+the graphic claims to take up an entire sheet of paper. This is
+usually a symptom of a bug in the program that generated it.
+
+ The other is to do it yourself: print the file. Now, take a ruler,
+and make the following measurements (in PostScript units, so measure in
+inches and multiply by 72): From the left edge of the paper to the
+leftmost mark on the paper is LLX, the first number. From the bottom
+edge of the paper to the bottommost mark on the paper is LLY, the
+second number. From the left edge of the paper to the rightmost mark
+on the paper is URX, the third number. The fourth and final number,
+URY, is the distance from the bottom of the page to the uppermost mark
+on the paper.
+
+ Once you have the numbers, add a comment of the following form as the
+second line of the document. (The first line should already be a line
+starting with the two characters `%!'; if it is not, the file probably
+isn't PostScript.)
+
+ %%BoundingBox: LLX LLY URX URY
+
+Or, if you don't want to modify the file, you can simply write these
+numbers down in a convenient place and give them in your TeX document
+when you import the graphic, as described in the next section.
+
+ If the document does not have such a bounding box, or if the bounding
+box is given at the end of the document, or the bounding box is wrong,
+please complain to the authors of the software package that generated
+the file.
+
+
+File: dvips.info, Node: \includegraphics, Next: EPSF macros, Prev: Bounding box, Up: PostScript figures
+
+5.1.2 The \includegraphics macro for LaTeX
+------------------------------------------
+
+Once the figure file has a bounding box comment (see the previous
+section) you are ready to import the graphic into a LaTeX document. For
+LaTeX 2e, you can use the epsf, graphics or graphicx packages, but the
+last is recommended--it has the most flexible syntax, and is briefly
+described here. Further information can be found in `grfguide' or
+`epslatex', which should be included in your LaTeX distribution in DVI,
+PDF, or other formats. (If you are still using LaTeX 2.09, use
+epsf.sty).
+
+ Just put the following command into your preamble:
+
+ \usepackage[dvips]{graphicx}
+
+ Depending on your system, a suitable driver setup may already be
+present, so that LaTeX automatically produces DVI files suitable for
+Dvips. In this case you can leave out the `[dvips]' parameter.
+
+ Now, at the point you want to include a file `foo.eps', enter a line
+such as:
+
+ \includegraphics{foo.eps}
+
+ However, it is usually best to omit the file extension and only use
+
+ \includegraphics{foo}
+
+because then you can process the same LaTeX file with different TeX
+engines or DVI converters if you also provide suitable graphics files
+for them, e.g., `foo.pdf' or `foo.png'.
+
+ The \includegraphics command has many options, specified in
+`key=value' syntax, to allow you to resize, rotate or trim the included
+graphic--see `grfguide' or `epslatex'. If your file does not have a
+bounding box comment, you can supply the numbers as determined in the
+previous section, in the same order they would have been in a normal
+bounding box comment:
+
+ \includegraphics[bb=100 100 500 500]{foo.ps}
+
+Now, save your changes and run LaTeX and Dvips; the output should have
+your graphic positioned at precisely the point you indicated, occupying
+the proper amount of space.
+
+ PostScript graphics have their origin in the lower left corner.
+Therefore, in TeX, a graphic will occupy a box that extends far above
+the line where it is put in, but has depth zero below it. Combining
+`\includegraphics' with `\parbox' commands or minipages can sometimes
+be confusing when this is not taken into account.
+
+
+File: dvips.info, Node: EPSF macros, Next: psfile special, Prev: \includegraphics, Up: PostScript figures
+
+5.1.3 Using the EPSF macros
+---------------------------
+
+If you are using LaTeX 2e, use the `graphics' or `graphicx' package.
+*Note \includegraphics::.
+
+ If you are using plain TeX or LaTeX 2.09, you need `epsf.tex' (for
+plain TeX) and `epsf.sty' (for LaTeX). For plain TeX, add a line like
+this near the top of your input file:
+
+ \input epsf
+
+If you are using LaTeX 2.09, add the `epsf' style option, as in:
+
+ \documentstyle[12pt,epsf]{article}
+
+In any case, the above only needs to be done once, no matter how many
+figures you plan to include.
+
+ Now, at the point you want to include a file, enter a line such as:
+
+ \epsffile{foo.eps}
+
+ If you are using LaTeX, you may need to add `\leavevmode'
+immediately before the `\epsffile' command to get certain environments
+to work correctly. If your file does not have a bounding box comment,
+you can supply the numbers as determined in the previous section, in
+the same order they would have been in a normal bounding box comment:
+
+ \epsffile[100 100 500 500]{foo.ps}
+
+Now, save your changes and run TeX and Dvips; the output should have
+your graphic positioned at precisely the point you indicated, occupying
+the proper amount of space.
+
+ The `\epsffile' macro typesets the figure as a TeX `\vbox' at the
+point of the page that the command is executed. By default, the
+graphic will have its `natural' width (namely, the width of its bounding
+box). The TeX box will have depth zero and its natural height. By
+default, the graphic will be scaled by any DVI magnification in effect,
+just as is everything else in your document. See the next section for
+more information on scaling.
+
+ If you want TeX to report the size of the figure as a message on your
+terminal when it processes each figure, give the command:
+
+ \epsfverbosetrue
+
+* Menu:
+
+* EPSF scaling::
+* EPSF clipping::
+
+
+File: dvips.info, Node: EPSF scaling, Next: EPSF clipping, Up: EPSF macros
+
+5.1.3.1 EPSF scaling
+....................
+
+Usually, you will want to scale an EPSF figure to some size appropriate
+for your document, since its natural size is determined by the creator
+of the EPS file.
+
+ The best way to do this is to assign the desired size to the TeX
+`\epsfxsize' or `\epsfysize' variables, whichever is more convenient
+for you. That is, put
+
+ \epsfxsize=DIMEN
+
+right before the call to `\epsffile'. Then the width of the TeX box
+will be DIMEN and its height will be scaled proportionately.
+Similarly, you can set the vertical size with
+
+ \epsfysize=DIMEN
+
+in which case the height will be set and the width scaled
+proportionally.
+
+ If you set both, both will be honored, but the aspect ratio of the
+included graphic may necessarily be distorted, i.e., its contents
+stretched in one direction or the other.
+
+ You can resize graphics in a more general way by redefining the
+`\epsfsize' macro. `\epsffile' calls this with two parameters: the
+natural horizontal and vertical sizes of the PostScript graphic.
+`\epsfsize' must expand to the desired horizontal size, that is, the
+width of the `\vbox'. Schematically:
+
+ \def\epsfsize#1#2{BODY}
+
+ Some useful definitions of BODY:
+
+`\epsfxsize'
+ This definition (the default) enables the default features listed
+ above, by setting `\epsfxsize' to the same value it had before the
+ macro was called.
+
+`#1'
+ Force the natural size by returning the first parameter (the
+ original width).
+
+`0pt'
+ A special case, equivalent to `#1'.
+
+`0.5#1'
+ Scale to half the natural size.
+
+`\hsize'
+ Scale to the current `\hsize'. (In LaTeX, use `\textwidth'
+ instead of `\hsize'.)
+
+`\ifnum#1>\hsize\hsize\else#1\fi'
+ If the natural width is greater than the current `\hsize', scale to
+ `\hsize', otherwise use the natural width.
+
+
+ For compatibility with other PostScript drivers, it is possible to
+turn off the default scaling of included figures by the DVI
+magnification with the following TeX command:
+
+ \special{! /magscale false def}
+
+Use of this command is not recommended because it will make the
+`\epsffile' graphics the "wrong" size if global magnification is being
+used, and it will cause any PostScript graphics to appear improperly
+scaled and out of position if a DVI to DVI program is used to scale or
+otherwise modify the document.
+
+ DVI magnification is not applied to any output from code you write in
+`bop-hook' or its ilk (*note PostScript hooks::),
+
+
+File: dvips.info, Node: EPSF clipping, Prev: EPSF scaling, Up: EPSF macros
+
+5.1.3.2 EPSF clipping
+.....................
+
+By default, clipping is disabled for included EPSF images. This is
+because clipping to the bounding box dimensions often cuts off a small
+portion of the figure, due to slightly inaccurate bounding box
+arguments. The problem might be subtle; lines around the boundary of
+the image might be half their intended width, or the tops or bottoms of
+some text annotations might be sliced off. If you want to turn
+clipping on, just use the command
+
+ \epsfclipon
+
+and to turn clipping back off, use
+
+ \epsfclipoff
+
+
+File: dvips.info, Node: psfile special, Next: Dynamic creation of graphics, Prev: EPSF macros, Up: PostScript figures
+
+5.1.4 `psfile' special
+----------------------
+
+The basic special for file inclusion is as follows:
+
+ \special{psfile=FILENAME.ps [KEY=VALUE] ... }
+
+This downloads the PostScript file `FILENAME.ps' such that the current
+point will be the origin of the PostScript coordinate system. The
+optional KEY=VALUE assignments allow you to specify transformations on
+the PostScript.
+
+ The possible KEYs are:
+
+`hoffset'
+ The horizontal offset (default 0)
+
+`voffset'
+ The vertical offset (default 0)
+
+`hsize'
+ The horizontal clipping size (default 612)
+
+`vsize'
+ The vertical clipping size (default 792)
+
+`hscale'
+ The horizontal scaling factor (default 100)
+
+`vscale'
+ The vertical scaling factor (default 100)
+
+`angle'
+ The rotation (default 0)
+
+`clip'
+ Enable clipping to the bounding box
+
+ The dimension parameters are all given in PostScript units. The
+`hscale' and `vscale' are given in non-dimensioned percentage units,
+and the rotation value is specified in degrees. Thus
+
+ \special{psfile=foo.ps hoffset=72 hscale=90 vscale=90}
+
+will shift the graphics produced by file `foo.ps' right by one inch and
+will draw it at 0.9 times normal size. Offsets are given relative to
+the point of the special command, and are unaffected by scaling or
+rotation. Rotation is counterclockwise about the origin. The order of
+operations is to rotate the figure, scale it, then offset it.
+
+ For compatibility with older PostScript drivers, it is possible to
+change the units that `hscale' and `vscale' are given in. This can be
+done by redefining `@scaleunit' in `SDict' by a TeX command such as
+
+ \special{! /@scaleunit 1 def}
+
+The `@scaleunit' variable, which is by default 100, is what `hscale'
+and `vscale' are divided by to yield an absolute scale factor.
+
+
+File: dvips.info, Node: Dynamic creation of graphics, Next: Fonts in figures, Prev: psfile special, Up: PostScript figures
+
+5.1.5 Dynamic creation of PostScript graphics files
+---------------------------------------------------
+
+PostScript is an excellent page description language--but it does tend
+to be rather verbose. Compressing PostScript graphics files can reduce
+them by factor of five or more. For this reason, if the name of an
+included PostScript file ends with `.Z' or `.gz', Dvips automatically
+runs `gzip -d'. For example:
+
+ \epsffile[72 72 540 720]{foo.ps.gz}
+
+Since the results of such a command are not accessible to TeX, if you
+use this facility with the `epsf' macros, you need to supply the
+bounding box parameter yourself, as shown.
+
+ More generally, if the filename parameter to one of the graphics
+inclusion techniques starts with a left quote (``'), the parameter is
+instead interpreted as a command to execute that will send the actual
+file to standard output. For example:
+
+ \special{psfile="`gnuplot foo"}
+
+to include the file `foo'. Of course, the command to be executed can
+be anything, including using a file conversion utility such as `tek2ps'
+or whatever is appropriate. This feature can be disabled with the `-R'
+command-line option or `R' configuration option.
+
+
+File: dvips.info, Node: Fonts in figures, Prev: Dynamic creation of graphics, Up: PostScript figures
+
+5.1.6 Fonts in figures
+----------------------
+
+You can use any font available to TeX and Dvips within a graphics file
+by putting a `%*Font:' line in the leading commentary of the file.
+Schematically, this looks like:
+
+ %*Font: TFMNAME SCALEDBP DESIGNBP HEX-START:HEX-BITSTRING
+
+ Here is the meaning of each of these elements:
+
+TFMNAME
+ The TeX TFM filename, e.g., `cmr10'. You can give the same
+ TFMNAME on more than one `%*Font' line; this is useful when the
+ number of characters from the font used needs a longer
+ HEX-BITSTRING (see item below) than conveniently fits on one line.
+
+SCALEDBP
+ The size at which you are using the font, in PostScript points (TeX
+ big points). 72bp = 72.27pt = 1in.
+
+DESIGNBP
+ The designsize of the font, again in PostScript points. This
+ should match the value in the TFM file TFMNAME. Thus, for `cmr10',
+ it should be `9.96265'.
+
+HEX-START
+ The character code of the first character used from the font,
+ specified as two ASCII hexadecimal characters, e.g., `4b' or `4B'
+ for `K'.
+
+HEX-BITSTRING
+ An arbitrary number of ASCII hexadecimal digits specifying which
+ characters following (and including) HEX-START are used. This is
+ treated as a bitmap. For example, if your figure used the single
+ letter `K', you would use `4b:8' for HEX-START and HEX-BITSTRING.
+ If it used `KLMNP', you would use `4b:f4'.
+
+
+ MetaPost's output figures contain lines like this for bitmap fonts
+used in a MetaPost label (*note MetaPost: (web2c)MetaPost.).
+
+
+File: dvips.info, Node: Header files, Next: Literal PS, Prev: PostScript figures, Up: Interaction with PostScript
+
+5.2 PostScript header files
+===========================
+
+"Header files" are bits of PostScript included in the output file;
+generally they provide support for special features, rather than
+producing any printed output themselves. You can explicitly request
+downloading header files if necessary for some figure, or to achieve
+some special effect.
+
+ Dvips includes some headers on its own initiative, to implement
+features such as PostScript font reencoding, bitmap font downloading,
+handling of `\special''s, and so on. These standard headers are the
+`.pro' files (for "prologue") in the installation directory
+`$(psheaderdir)'; they are created from the `.lpro' ("long prologue")
+files in the distribution by stripping comments, squeezing blank lines,
+etc., for maximum efficiency. If you want to peruse one of the
+standard header files, read the `.lpro' version.
+
+ The PostScript dictionary stack will be at the `userdict' level when
+header files are included.
+
+* Menu:
+
+* Including headers from TeX::
+* Including headers from the command line::
+* Headers and memory usage::
+
+
+File: dvips.info, Node: Including headers from TeX, Next: Including headers from the command line, Up: Header files
+
+5.2.1 Including headers from TeX
+--------------------------------
+
+In order to get a particular graphic file to work, a certain font or
+header file might need to be sent first. The Dvips program provides
+support for this with the `header' `\special'. For instance, to ensure
+that `foo.ps' gets downloaded:
+
+ \special{header=foo.ps}
+
+ As another example, if you have some PostScript code that uses a
+PostScript font not built into your printer, you must download it to the
+printer. If the font isn't used elsewhere in the document, Dvips can't
+know you've used it, so you must include it in the same way, as in:
+
+ \special{header=putr.pfa}
+
+to include the font definition file for Adobe Utopia Roman.
+
+ The `header' also special allows for specifying some additional code
+that should be inserted into the PostScript document before and after
+the file itself, as follows:
+
+ \special{header={foo.ps} pre={pre code} post={post code}}
+
+ This will insert `pre code' just before `foo.ps' and `post code'
+just after. It is required to use the (balanced) braces in _all_ of
+the arguments, including the `header', when using this extended syntax.
+
+ This allows, for instance, dynamic headers, where some of the content
+depends on settings from the user in (La)TeX. Another application is
+the inclusion of graphics inside the PostScript header, so that they
+can be reused throughout the document, as with logs. That avoids
+including the same graphic several times. This is implemented in the
+`graphics/graphicx-psmin' package.
+
+ This extended syntax has one additional feature. When Dvips finds the
+extended syntax, it will also look in the installed `tex/' tree(s) for
+the header file (`foo.ps' in our example), and not only in the current
+directory and dvips tree as the original syntax does. This is because
+common graphics may well come with packages which are installed in the
+`tex/' tree.
+
+
+File: dvips.info, Node: Including headers from the command line, Next: Headers and memory usage, Prev: Including headers from TeX, Up: Header files
+
+5.2.2 Including headers from the command line
+---------------------------------------------
+
+You can include headers when you run Dvips, as well as from your
+document (see the previous section). To do this, run Dvips with the
+option `-P HEADER'; this will read the file `config.HEADER', which in
+turn can specify a header file to be downloaded with the `h' option.
+*Note Configuration file commands::. These files are called
+`HEADER.cfg' on MS-DOS.
+
+ You can arrange for the same file to serve as a `-P' config file and
+the downloadable header file, by starting the lines of PostScript code
+with a space, leaving only the `h' line and any comments starting in
+the first column. As an example, see `contrib/volker/config.*'
+(`contrib/volker/*.cfg' on MS-DOS). (These files also perform useful
+functions: controlling duplex/simplex mode on duplex printers, and
+setting various screen frequencies; `contrib/volker/README' explains
+further.)
+
+
+File: dvips.info, Node: Headers and memory usage, Prev: Including headers from the command line, Up: Header files
+
+5.2.3 Headers and memory usage
+------------------------------
+
+Dvips tries to avoid overflowing the printer's memory by splitting the
+output files into "sections" (see the `-i' option in *Note Option
+details::). Therefore, for all header files, Dvips debits the printer
+VM budget by some value. If the header file has, in its leading
+commentary a line of the form
+
+ %%VMusage: MIN MAX
+
+then MAX is used. If there is no `%%VMusage' line, then the size (in
+bytes) of the header file is used as an approximation.
+
+ Illustrations (figure files) are also checked for `%%VMusage' line.
+
+
+File: dvips.info, Node: Literal PS, Next: Hypertext, Prev: Header files, Up: Interaction with PostScript
+
+5.3 Literal PostScript
+======================
+
+You can include literal PostScript code in your document in several
+ways.
+
+* Menu:
+
+* " special:: To include inline PostScript code.
+* ps special:: Inline PostScript without save/restore.
+* PostScript hooks:: Specifying code to run in the PS interpreter.
+* Literal headers:: Literal PostScript for the whole document.
+* Literal examples:: Neat example.
+
+
+File: dvips.info, Node: " special, Next: ps special, Up: Literal PS
+
+5.3.1 `"' special: Literal PostScript
+-------------------------------------
+
+For simple graphics, or just for experimentation, literal PostScript
+code can be included. Simply use a `\special' beginning with a double
+quote character `"'; there is no matching closing `"'.
+
+ For instance, the following (simple) graphic:
+
+ [ picture of a grey triangle ]
+
+was created by typing:
+
+ \vbox to 100bp{\vss % a bp is the same as a PostScript unit
+ \special{" newpath 0 0 moveto 100 100 lineto 394 0 lineto
+ closepath gsave 0.8 setgray fill grestore stroke}}
+
+ You are responsible for leaving space for such literal graphics, as
+with the `\vbox' above.
+
+
+File: dvips.info, Node: ps special, Next: PostScript hooks, Prev: " special, Up: Literal PS
+
+5.3.2 `ps' special
+------------------
+
+Generally, Dvips encloses specials in a PostScript save/restore pair,
+guaranteeing that the special will have no effect on the rest of the
+document. The `ps' special, however, allows you to insert literal
+PostScript instructions without this protective shield; you should
+understand what you're doing (and you shouldn't change the PostScript
+graphics state unless you are willing to take the consequences). This
+command can take many forms because it has had a torturous history; any
+of the following will work:
+
+ \special{ps:TEXT}
+ \special{ps::TEXT}
+ \special{ps::[begin]TEXT}
+ \special{ps::[end]TEXT}
+
+(with longer forms taking precedence over shorter forms, when they are
+present). `ps::' and `ps::[end]' do no positioning, so they can be
+used to continue PostScript literals started with `ps:' or
+`ps::[begin]'.
+
+ In addition, the variant
+
+ \special{ps: plotfile FILENAME}
+
+inserts the contents of FILENAME verbatim into the output (except for
+omitting lines that begin with %). An example of the proper use of
+literal specials can be found in the file `rotate.tex', which makes it
+easy to typeset text turned in multiples of 90 degrees.
+
+
+File: dvips.info, Node: Literal headers, Next: Literal examples, Prev: PostScript hooks, Up: Literal PS
+
+5.3.3 Literal headers: `!' `\special'
+-------------------------------------
+
+You can download literal PostScript header code in your TeX document,
+for use with (for example) literal graphics code that you include later.
+The text of a `\special' beginning with an `!' is copied into the
+output file. A dictionary `SDict' will be current when this code is
+executed; Dvips arranges for `SDict' to be first on the dictionary
+stack when any PostScript graphic is included, whether literally (the
+`"' special) or through macros (e.g., `epsf.tex').
+
+ For example:
+
+ \special{! /reset { 0 0 moveto} def}
+
+
+File: dvips.info, Node: PostScript hooks, Next: Literal headers, Prev: ps special, Up: Literal PS
+
+5.3.4 PostScript hooks
+----------------------
+
+Besides including literal PostScript at a particular place in your
+document (as described in the previous section), you can also arrange to
+execute arbitrary PostScript code at particular times while the
+PostScript is printing.
+
+ If any of the PostScript names `bop-hook', `eop-hook', `start-hook',
+or `end-hook' are defined in `userdict', they will be executed at the
+beginning of a page, end of a page, start of the document, and end of a
+document, respectively.
+
+ When these macros are executed, the default PostScript coordinate
+system and origin is in effect. Such macros can be defined in headers
+added by the `-h' option or the `header=' special, and might be useful
+for writing, for instance, `DRAFT' across the entire page, or, with the
+aid of a shell script, dating the document. These macros are executed
+outside of the save/restore context of the individual pages, so it is
+possible for them to accumulate information, but if a document must be
+divided into sections because of memory constraints, such added
+information will be lost across section breaks.
+
+ The single argument to `bop-hook' is the physical page number; the
+first page gets zero, the second one, etc. `bop-hook' must leave this
+number on the stack. None of the other hooks are passed arguments.
+
+ As an example of what can be done, the following special will write
+a light grey `DRAFT' across each page in the document:
+
+ \special{!userdict begin /bop-hook{gsave 200 30 translate
+ 65 rotate /Times-Roman findfont 216 scalefont setfont
+ 0 0 moveto 0.7 setgray (DRAFT) show grestore}def end}
+
+ Using `bop-hook' or `eop-hook' to preserve information across pages
+breaks compliance with the Adobe document structuring conventions, so
+if you use any such tricks, you may also want to use the `-N' option to
+turn off structured comments (such as `%%Page'). Otherwise, programs
+that read your file will assume its pages are independent.
+
+
+File: dvips.info, Node: Literal examples, Prev: Literal headers, Up: Literal PS
+
+5.3.5 Literal examples
+----------------------
+
+To finish off this section, the following examples of literal PostScript
+are presented without explanation:
+
+ \def\rotninety{\special{ps:currentpoint currentpoint translate 90
+ rotate neg exch neg exch translate}}\font\huge=cmbx10 at 14.4truept
+ \setbox0=\hbox to0pt{\huge A\hss}\vskip16truept\centerline{\copy0
+ \special{ps:gsave}\rotninety\copy0\rotninety\copy0\rotninety
+ \box0\special{ps:grestore}}\vskip16truept
+
+ [ There are 4 `A' characters, each rotated 90 degrees about a
+common center point ]
+
+ \vbox to 2truein{\special{ps:gsave 0.3 setgray}\hrule height 2in
+ width\hsize\vskip-2in\special{ps:grestore}\font\big=cminch\big
+ \vss\special{ps:gsave 1 setgray}\vbox to 0pt{\vskip2pt
+ \line{\hss\hskip4pt NEAT\hss}\vss}\special{ps:0 setgray}%
+ \hbox{\raise2pt\line{\hss NEAT\hss}\special{ps:grestore}}\vss}
+
+ [ There is a big gray box with the word `NEAT' inside in big letters
+]
+
+ Some caveats are in order, however. Make sure that each `gsave' is
+matched with a `grestore' on the same page. Do not use `save' and
+`restore'; they can interact with the PostScript generated by Dvips if
+care is not taken. Try to understand what the above macros are doing
+before writing your own. The `\rotninety' macro especially has a
+useful trick that appears again and again.
+
+
+File: dvips.info, Node: Hypertext, Prev: Literal PS, Up: Interaction with PostScript
+
+5.4 HyperTeXt
+=============
+
+Dvips has support for producing hypertext PostScript documents. If you
+specify the `-z' option, the `html:' specials described below will be
+converted into `pdfmark' PostScript operators to specify links.
+Without `-z', `html:' specials are ignored.
+
+ The resulting PostScript can then be processed by a distiller
+program to make a PDF file. (It can still be handled by ordinary
+PostScript interpreters as well.) Various versions of both PC and Unix
+distillers are supported; Ghostscript includes limited distiller support
+(*note Ghostscript installation::).
+
+ Macros you can use in your TeX document to insert the specials in the
+first place are available from `CTAN:/support/hypertex'. For CTAN
+info, *note unixtex.ftp: (kpathsea)unixtex.ftp.
+
+ This hypertext support (and original form of the documentation) was
+written by Mark Doyle and Tanmoy Bhattacharya as the `dvihps' program.
+You can retrieve their software and additional documentation via the
+CTAN reference above. You may also be interested in the Java previewer
+IDVI, available at `http://www.win.tue.nl/~dickie/idvi', and/or in
+`http://www.emrg.com/texpdf.html', which describes the process of
+making PDF files from TeX files in more detail.
+
+ Mail archives for the original project are at
+`http://math.albany.edu:8800/hm/ht/'.
+
+* Menu:
+
+* Hypertext caveats:: Font quality, missing character psi.
+* Hypertext specials:: The details on the specials.
+
+
+File: dvips.info, Node: Hypertext caveats, Next: Hypertext specials, Up: Hypertext
+
+5.4.1 Hypertext caveats
+-----------------------
+
+If you intend to go all the way to PDF, you may want to use the standard
+35 PostScript fonts exclusively, since other fonts are embedded as
+bitmaps by default. The Adobe PDF readers are extremely slow when
+dealing with bitmap fonts and the results look terrible on the screen.
+Printouts will probably look fine, but may not take full advantage of a
+high-resolution printer. Alternatively, you can have your fonts
+embedded as Type 1 scalable outlines. The resulting PostScript files
+may be larger, but can be effectively rasterized at any resolution.
+They can also be converted to PDF files that can be used effectively at
+any screen or printer resolution.
+
+ To get the TeX fonts embedded in the PostScript file as Type 1 fonts,
+add `-Ppdf' to the dvips command line switches. The printout for a run
+should look something like this:
+
+ dvips report -Ppdf -o report.ps
+ This is dvips(k) 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com)
+ ' TeX output 2001.06.15:0837' -> report.ps
+ <tex.pro><alt-rule.pro><texc.pro><texps.pro><special.pro>.
+ <cmbx9.pfb><cmsy6.pfb><cmsy7.pfb><cmr5.pfb><cmex10.pfb><cmr9.pfb>
+ <cmmi7.pfb><cmsy10.pfb><cmmib10.pfb><cmmi10.pfb><cmti10.pfb>
+ <cmr7.pfb><cmbx10.pfb><cmr10.pfb><cmti9.pfb><cmr12.pfb><cmbx12.pfb>
+ [1] [2<mean1.ps>] [3<bounce1-00.ps>] [4]
+
+ An entry like "<cmr10.pfb>" indicates success: dvips found the
+Computer Modern Roman 10 point font in a PostScript Font Binary file,
+translated it to an ASCII encoding, and embedded it. You can confirm
+this by examining the PostScript output file, looking for the section
+starting `%%BeginFont: CMR10' followed by an entry `/FontType 1 def'.
+
+ The `-Ppdf' option requires that the relevant outline (`.pfa' or
+`.pfb') files be installed (*note Font concepts::). For example, the
+`cmr10' file might be in
+`/usr/share/texmf/fonts/type1/bluesky/cm/cmr10.pfb'. Your TeX
+distribution may make those fonts available in a separate optional
+package (e.g., `tetex-extra' in Debian). Failing that, commercial
+versions of the Computer Modern fonts are available from Blue Sky;
+public domain versions - in particular, the lm fonts, and the cm-super
+fonts, are available from CTAN sites (for CTAN info, *note unixtex.ftp:
+(kpathsea)unixtex.ftp.).
+
+ You can convert a PostScript file to PDF using `distill', which
+comes with Adobe Acrobat, or `ps2pdf', which comes with Ghostscript.
+The `ps2pdf' that comes with `Ghostscript' version 6.0 or earlier will
+not embed Type 1 fonts. Current recommendations are GNU Ghostscript
+6.51 or Aladdin Ghostscript 7.0. You can check the fonts in a PDF file
+with Acrobat Reader by selecting the menu entries `File|Document
+Info|Fonts'.
+
+ Also, the Adobe distillers prior to 2.1 drop trailing space
+characters (character code 32) from strings. Unfortunately, the
+PostScript fonts use this character code for characters other than
+space (notably the Greek letter psi in the `Symbol' font), and so these
+characters are dropped. This bug is fixed in version 2.1.
+
+ If you can't upgrade, One workaround is to change all the trailing
+blanks in strings to a character code that isn't in the font. This works
+because the default behavior is to substitute a blank for a missing
+character, i.e., the distiller is fooled into substituting the right
+character. For instance, with the Blue Sky fonts, you can globally
+replace ` )' with `\200)' (with `sed', for example) and get the desired
+result. With the public domain fonts, you will probably have to use a
+character code in the range 128 to 191 since these fonts duplicate the
+first 32 characters starting at 192 to avoid MS-DOS problems.
+
+ For more information on the use of TeX to produce PDF files, see the
+article "Creating quality Adobe PDF files from TeX with DVIPS" by
+Kendall Whitehouse of Adobe. Adobe seems not to offer the article any
+more, but copies are available elsewhere:
+ `http://www.math.hawaii.edu/~ralph/MathOnWeb/TeXPDF.html'
+ `http://www.utdallas.edu/~cantrell/online/543e.html'
+
+ You may also want to check "Notes on converting (La)TeX documents to
+robust PDF using Rokicki's dvips and Acrobat Distiller" by Timothy P.
+Van Zandt:
+`http://www.emrg.com/texpdf.htmlhttp://zandtwerk.insead.fr/tex2pdf.html'.
+
+
+File: dvips.info, Node: Hypertext specials, Prev: Hypertext caveats, Up: Hypertext
+
+5.4.2 Hypertext specials
+------------------------
+
+Current support for the World Wide Web in the TeX system does not
+involve modifying TeX itself. We need only define some specials;
+Arthur Smith (<apsmith@aps.org>), Tanmoy Bhattacharya, and Paul
+Ginsparg originally proposed and implemented the following:
+ html:<a href="XURL">
+ html:<a name="NAME">
+ html:</a>
+ html:<img src="XURL">
+ html:<base href="XURL">
+
+ Like all TeX `\special''s, these produce no visible output, and are
+uninterpreted by TeX itself. They are instructions to DVI processors
+only.
+
+ Here, XURL is a standard WWW uniform resource locator (URL),
+possibly extended with a `#TYPE.STRING' construct, where TYPE is
+`page', `section', `equation', `reference' (for bibliographic
+references), `figure', `table', etc. For example,
+ \special{html:<a href="http://www.maths.tcd.ie/~tim/ch1.dvi#equation.1.1">}
+ is a link to equation (1.1) in an example document by Tim Murphy.
+
+ See the URL
+`http://www.w3.org/hypertext/WWW/Addressing/Addressing.html' for a
+precise description of base URL's.
+
+ Descriptions of the `\special''s:
+`href'
+ Creates links in your TeX document. For example:
+ \special{html:<a href="http://www.tug.org/">}\TeX\ Users
+ Group\special{html:</a>}
+ The user will be able to click on the text `TeX Users Group' while
+ running Xdvi and get to the TUG home page. (By the way, this is
+ for illustration. In practice, you most likely want to use macros
+ to insert the `\special' commands; reference above.)
+
+`name'
+ Defines URL targets in your TeX documents, so links can be
+ resolved. For example:
+ \special{html:<a name="paradise">}Paradise\special{html:</a>}
+ is exactly where you are right now.
+ This will resolve an `href="#paradise"'. You'll also have to
+ change the catcode of `#', etc. It's usually easiest to use
+ existing macro packages which take care of all the details, such as
+ `hyperref' for LaTeX. The HyperTeX FAQ
+ (http://arxiv.org/hypertex/) has more information.
+
+`img'
+ Links to an arbitrary external file. Interactively, a viewer is
+ spawned to read the file according to the file extension and your
+ `mailcap' file (see the Xdvi documentation).
+
+`base'
+ Defines a base URL that is prepended to all the `name' targets.
+ Typically unnecessary, as the name of the DVI file being read is
+ used by default.
+
+ The `img' and `base' tags are not yet implemented in Dvips or the
+NeXTSTEP DVI viewer.
+
+
+File: dvips.info, Node: PostScript fonts, Next: Color, Prev: Interaction with PostScript, Up: Top
+
+6 PostScript fonts
+******************
+
+Dvips supports the use of PostScript fonts in TeX documents. To use a
+PostScript font conveniently, you need to prepare a corresponding
+virtual font; the program Afm2tfm, supplied with Dvips, helps with that.
+
+ All the necessary support for the standard 35 PostScript fonts
+(`AvantGarde-Book' through `ZapfDingbats'), plus other freely or
+commonly available PostScript fonts is available along with Dvips. To
+use these fonts, you need do nothing beyond what is mentioned in the
+installation procedure (*note Installation::). This chapter is
+therefore relevant only if you are installing new PostScript fonts not
+supplied with Dvips. (Or if you're curious.)
+
+* Menu:
+
+* Font concepts:: Metrics, glyphs, virtual fonts, and encodings.
+* Making a font available:: Installing and using a PostScript font.
+* Invoking afm2tfm:: Creating TFM and AFM files for a virtual font.
+* psfonts.map:: Defining available PostScript fonts.
+
+
+File: dvips.info, Node: Font concepts, Next: Making a font available, Up: PostScript fonts
+
+6.1 Font concepts
+=================
+
+The information needed to typeset using a particular font is contained
+in two files: a "metric file" that contains shape-independent
+information and a "glyph file" that contains the actual shapes of the
+font's characters. A "virtual font" is an optional additional file
+that can specify special ways to construct the characters. TeX itself
+(or LaTeX) look only at the metric file, but DVI drivers such as Dvips
+look at all three of these files.
+
+ An "encoding file" defines the correspondence between the code
+numbers of the characters in a font and their descriptive names. Two
+encoding files used together can describe a reencoding that rearranges,
+i.e., renumbers, the characters of a font.
+
+* Menu:
+
+* Metric files:: Shape-independent font information.
+* Glyph files:: Character shapes.
+* Virtual fonts:: Constructing one font from others.
+* Encodings:: Character codes and character names.
+* PostScript typesetting:: How PostScript typesets a character.
+
+
+File: dvips.info, Node: Metric files, Next: Glyph files, Up: Font concepts
+
+6.1.1 Metric files
+------------------
+
+A "metric file" describes properties of the font that are independent
+of what the characters actually look like. Aside from general
+information about the font itself, a metric file has two kinds of
+information: information about individual characters, organized by
+character code, and information about sequences of characters.
+
+ The per-character information specifies the width, height, depth, and
+italic correction of each character in the font. Any might be zero.
+
+ In addition to information on individual characters, the metric file
+specifies "kerning", i.e., adding or removing space between particular
+character pairs. It further specifies "ligature" information: when a
+sequence of input characters should be typeset as a single (presumably
+different) "ligature" character. For example, it's traditional for the
+input `fi' to be typeset as `fi', not as `fi' (with the dot of the `i'
+colliding with `f'). (In English, the only common ligatures are fi,
+fl, ff, ffi, and ffl.)
+
+ Different typesetting systems use different metric file formats:
+
+ * Each Postscript font has an "Adobe font metrics" (`.afm') file.
+ These files are plain text, so you can inspect them easily. You
+ can get AFM files for Adobe's fonts from
+ `ftp://ftp.adobe.com/pub/adobe/Fonts/AFMs'.
+
+ * TeX uses "TeX font metrics" (`.tfm') files. When you say `\font =
+ FONT' in your TeX document, TeX reads a file named `FONT.tfm'.
+ (Well, except for the `texfonts.map' feature; *note Fontmap:
+ (kpathsea)Fontmap.). TeX can then calculate the space occupied by
+ characters from the font when typesetting. In addition, the DVI
+ drivers you use to print or view the DVI file produced by TeX may
+ need to look at the TFM file.
+
+ TFM files are binary (and hence are typically much smaller than AFM
+ files). You can use the `tftopl' program (*note tftopl invocation:
+ (web2c)tftopl invocation.) that comes with TeX to transform a TFM
+ file into a human-readable "property list" (`.pl') file. You can
+ also edit a PL file and transform it back to a TeX-readable TFM
+ with the companion program `pltotf' (*note pltotf invocation:
+ (web2c)pltotf invocation.). Editing metrics by hand is not
+ something you're likely to want to do often, but the capability is
+ there.
+
+ * ATM and other typesetting systems use "printer font metric"
+ (`.pfm') files. These are binary files. They are irrelevant in the
+ TeX world, and not freely available, so we will not discuss them
+ further.
+
+
+ The Afm2tfm program distributed with Dvips converts an AFM file to a
+TFM file and performs other useful transformations as well. *Note
+Invoking afm2tfm::.
+
+
+File: dvips.info, Node: Glyph files, Next: Virtual fonts, Prev: Metric files, Up: Font concepts
+
+6.1.2 Glyph files
+-----------------
+
+Although a metric file (see the previous section) contains information
+about the spatial and other properties of the character at position 75,
+say, it contains nothing about what the character at position 75
+actually looks like. The glyphs--the actual shapes of the letterforms
+in a font--are defined by other files, which we call glyph files. TeX
+itself only reads the TFM file for a font; it does not need to know
+character shapes.
+
+ A "glyph file" is a file that defines the shapes of the characters
+in a font. The shapes can be defined either by outlines or by bitmaps.
+
+ PostScript fonts are defined as "outline fonts": Each character in
+the font is defined by giving the mathematical curves (lines, arcs, and
+splines) that define its contours. Different sizes of a character are
+generated by linearly scaling a single shape. For example, a 10-point
+`A' is simply half the size of a 20-point `A'. Nowadays, outline fonts
+usually also contain "hints"--additional information to improve the
+appearance of the font at small sizes or low resolutions.
+
+ Although various kinds of PostScript outline fonts exist, by far the
+most common, and the only one we will consider, is called "Type 1".
+The glyph files for Postscript Type 1 fonts typically have names ending
+in `.pfa' ("printer font ASCII") or `.pfb' ("printer font binary").
+
+ In contrast, glyph files for Computer Modern and the other standard
+TeX fonts are "bitmap fonts", generated from Metafont (`.mf')
+descriptions. The Metafont program distributed with TeX generates
+bitmaps from these descriptions.
+
+ The glyph files for TeX bitmap fonts are usually stored in "packed
+font" (PK) files. The names of these files end in `.NNNpk', where NNN
+is the resolution of the font in dots per inch. For example,
+`cmr10.600pk' contains the bitmaps for the `cmr10' font at a resolution
+of 600dpi. (On DOS filesystems, it's more likely `dpi600\cmr10.pk'.)
+
+ Metafont actually outputs "generic font" (GF) files, e.g.,
+`cmr10.600gf', but the GF files are usually converted immediately to PK
+format (using the `gftopk' utility that comes with TeX) since PK files
+are smaller and contain the same information. (The GF format is a
+historical artifact.)
+
+
+File: dvips.info, Node: Virtual fonts, Next: Encodings, Prev: Glyph files, Up: Font concepts
+
+6.1.3 Virtual fonts
+-------------------
+
+A "virtual font" is constructed by extracting characters from one or
+more existing fonts and rearranging them, or synthesizing new characters
+in various ways. The explanation in this manual is intended to suffice
+for understanding enough about virtual fonts to use them with Dvips. It
+isn't a reference manual on virtual fonts. For more information: The
+primary document on virtual fonts is Donald E. Knuth, `TUGboat' 11(1),
+Apr. 1990, pp. 13-23, "Virtual Fonts: More Fun for Grand Wizards"
+(`CTAN:/info/virtual-fonts.knuth'; for CTAN info, *note unixtex.ftp:
+(kpathsea)unixtex.ftp.). (Don't be intimidated by the subtitle.)
+
+ A virtual font (`.vf') file specifies, for each character in the
+virtual font, a recipe for typesetting that character. A VF file, like
+a TFM file, is in a compressed binary format. The `vftovp' and
+`vptovf' programs convert a VF file to a human-readable VPL (virtual
+property list) format and back again. *Note vftovp invocation:
+(web2c)vftovp invocation, and *Note vptovf invocation: (web2c)vptovf
+invocation.
+
+ In the case of a PostScript font F being used in a straightforward
+way, the recipe says: character I in the VF font is character J in font
+F. The font F is called a "base font". For example, the VF file could
+remap the characters of the PostScript font to the positions where TeX
+expects to find them. *Note Encodings::.
+
+ Since TeX reads only TFM files, not VF's, each VF must have a
+corresponding TFM for use with TeX. This corresponding TFM is created
+when you run `vptovf'.
+
+ You can "expand" virtual fonts into their base fonts with DVIcopy
+(*note dvicopy invocation: (web2c)dvicopy invocation.). This is useful
+if you are using a DVI translator that doesn't understand vf's itself.
+
+
+File: dvips.info, Node: Encodings, Next: PostScript typesetting, Prev: Virtual fonts, Up: Font concepts
+
+6.1.4 Encodings
+---------------
+
+Every font, whatever its type, has an "encoding", that specifies the
+correspondence between "logical" characters and character codes. For
+example, the ASCII encoding specifies that the character numbered 65
+(decimal) is an uppercase `A'. The encoding does not specify what the
+character at that position looks like; there are lots of ways to draw an
+`A', and a glyph file (*note Glyph files::) tells how. Nor does it
+specify how much space that character occupies; that information is in a
+metric file (*note Metric files::).
+
+ TeX implicitly assumes a particular encoding for the fonts you use
+with it. For example, the plain TeX macro `\'', which typesets an
+acute accent over the following letter, assumes the acute accent is at
+position 19 (decimal). This happens to be true of standard TeX fonts
+such as Computer Modern, as you might expect, but it is not true of
+normal PostScript fonts.
+
+ It's possible but painful to change all the macros that assume
+particular character positions. A better solution is to create a new
+font with the information for the acute accent at position 19, where
+TeX expects it to be. *Note Making a font available::.
+
+ PostScript represents encodings as a sequence of 256 character names
+called an "encoding vector". An "encoding file" (`.enc') gives such a
+vector, together with ligature and kerning information (with which we
+are not concerned at the moment). These encoding files are used by the
+Afm2tfm program. Encoding files are also downloaded to the PostScript
+interpreter in your printer if you use one of them in place of the
+default encoding vector for a particular PostScript font.
+
+ Examples of encodings: the `dvips.enc' encoding file that comes with
+Dvips in the `reencode' directory is a good (but not perfect)
+approximation to the TeX encoding for TeX's Computer Modern text fonts.
+This is the encoding of the fonts that originated with Dvips, such as
+`ptmr.tfm'. The distribution includes many other encoding files; for
+example, `8r.enc', which is the base font for the current PostScript
+font distribution, and three corresponding to the TeX mathematics
+fonts: `texmext.enc' for math extensions, `texmital.enc' for math
+italics, and `texmsym.enc' for math symbols.
+
+
+File: dvips.info, Node: PostScript typesetting, Prev: Encodings, Up: Font concepts
+
+6.1.5 How PostScript typesets a character
+-----------------------------------------
+
+The output of Dvips is a program in the PostScript language that
+instructs your (presumably PostScript-capable) printer how to typeset
+your document by transforming it into toner on paper. Your printer, in
+turn, contains a PostScript interpreter that carries out the
+instructions in this typesetting program.
+
+ The program must include the definition of any PostScript fonts that
+you use in your document. Fonts built into your printer (probably the
+standard 35: `Times-Roman', `ZapfDingbats', ...) are defined within the
+interpreter itself. Other fonts must be downloaded as pfa or pfb files
+(*note Glyph files::) from your host (the computer on which you're
+running Dvips).
+
+ You may be wondering exactly how a PostScript interpreter figures out
+what character to typeset, with this mass of metrics, glyphs, encodings,
+and other information. (If you're not wondering, skip this section ...)
+
+ The basic PostScript operator for imaging characters is `show'.
+Suppose you've asked TeX to typeset an `S'. This will eventually wind
+up in the Dvips output as the equivalent of this PostScript operation:
+
+ (S) show
+
+Here is how PostScript typesets the `S':
+
+ 1. PostScript interpreters use ASCII; therefore `S' is represented as
+ the integer 83. (Any of the 256 possible characters representable
+ in a standard 8-bit byte can be typeset.)
+
+ 2. A PostScript "dictionary" is a mapping of names to arbitrary
+ values. A font, to the interpreter, is a dictionary which
+ contains entries for certain names. (If these entries are
+ missing, the interpreter refuses to do anything with that font.)
+
+ PostScript has a notion of "the current font"--whatever font is
+ currently being typeset in.
+
+ 3. One of the mandatory entries in a font dictionary is `Encoding',
+ which defines the encoding vector (*note Encodings::) for that
+ font. This vector of 256 names maps each possible input character
+ to a name.
+
+ 4. The interpreter retrieves the entry at position 83 of the encoding
+ vector. This value is a PostScript name: `/S'.
+
+ 5. For Type 1 fonts (we're not going to discuss anything else), the
+ interpreter now looks up `/S' as a key in a dictionary named
+ `CharStrings', another mandatory entry in a font dictionary.
+
+ 6. The value of `S' in `CharStrings' is the equivalent of a series of
+ standard PostScript commands like `curveto', `lineto', `fill', and
+ so on. These commands are executed to draw the character. There
+ can also be "hint information" that helps adapt the character to
+ low-resolution rasters. (*Note Glyph files::.) The commands are
+ actually represented in a more compact way than standard
+ PostScript source; see the Type 1 book for details.
+
+
+ This method for typesetting characters is used in both Level 1 and
+Level 2 PostScript. See the PostScript reference manuals for more
+information.
+
+
+File: dvips.info, Node: Making a font available, Next: Invoking afm2tfm, Prev: Font concepts, Up: PostScript fonts
+
+6.2 Making a PostScript font available
+======================================
+
+To make a PostScript font available in a TeX document, you need to
+install the font on your system and then define it within the document.
+Once you have installed the font, of course, it is available for any
+document thereafter and you don't need to reinstall it. You must have
+an AFM file for any font you install. Unless the font is built into your
+printer, you must also have a PFA or PFB file.
+
+ In the following examples, we use the font `Times-Roman' to
+illustrate the process. But you should use the prebuilt fonts for Times
+and the other standard fonts, rather than rebuilding them. The prebuilt
+fonts are made using a more complicated process than that described
+here, to make them work as well as possible with TeX. So following the
+steps in this manual will not generate files identical to the
+distributed ones. *Note PostScript font installation::, for pointers to
+the prebuilt fonts.
+
+ Installation of a PostScript font proceeds in three steps. *Note
+Font concepts::, for descriptions of the various files involved.
+
+ 1. Run `afm2tfm' to create a TFM file for the original font, and the
+ VPL form of the virtual font:
+ afm2tfm Times-Roman -v ptmr rptmr
+
+ 2. Run `vptovf' to generate a VF and TFM file for the virtual font
+ from the VPL file:
+ vptovf ptmr.vpl ptmr.vf ptmr.tfm
+
+ 3. Insert an entry for the font in `psfonts.map' (*note
+ psfonts.map::):
+ rptmr Times-Roman <ptmr8a.pfa
+
+ 4. Install the files in the standard locations, as in:
+ cp ptmr.vf FONTDIR/vf/...
+ cp *ptmr.tfm FONTDIR/tfm/...
+ cp ptmr.afm FONTDIR/afm/...
+ cp ptmr.pf? FONTDIR/type1/...
+
+ The simplest invocation of Afm2tfm to make virtual fonts goes
+something like this:
+
+ afm2tfm Times-Roman -v ptmr rptmr
+
+This reads the file `Times-Roman.afm', and produces two files as
+output, namely the virtual property list'file `ptmr.vpl', and the "raw"
+font metric file `rptmr.tfm'. To use the font in TeX, you first run
+
+ vptovf ptmr.vpl ptmr.vf ptmr.tfm
+
+You should then install the virtual font file `ptmr.vf' where Dvips
+will see it and install `ptmr.tfm' and `rptmr.tfm' where TeX and Dvips
+will see them.
+
+ Using these raw fonts is not recommended; there are no raw fonts in
+the prebuilt PostScript fonts distributed along with Dvips. But
+nevertheless, that's how Afm2tfm presently operates, so that's what we
+document here. The `r' prefix convention is likewise historical
+accident.
+
+ You can also make more complex virtual fonts by editing `ptmr.vpl'
+before running `vptovf'; such editing might add the uppercase Greek
+characters in the standard TeX positions, for instance. (This has
+already been done for the prebuilt fonts.)
+
+ Once the files have been installed, you're all set. You can now do
+things like this in TeX:
+ \font\myfont = ptmr at 12pt
+ \myfont Hello, I am being typeset in 12-point Times-Roman.
+
+ Thus, we have two fonts, one actual (`rptmr', which is analogous to
+the font in the printer) and one virtual (`ptmr', which has been
+remapped to the standard TeX encoding (almost)), and has typesetting
+know-how added. You could also say
+
+ \font\raw = rptmr at 10pt
+
+and typeset directly with that, but then you would have no ligatures or
+kerning, and you would have to use Adobe character positions for special
+letters like the ligature `AE'. The virtual font `ptmr' not only has
+ligatures and kerning, and most of the standard accent conventions of
+TeX, it also has a few additional features not present in the Computer
+Modern fonts. For example, it includes all the Adobe characters (such
+as the Polish ogonek and the French guillemots). The only things you
+lose from ordinary TeX text fonts are the dotless `j' (which can be
+hacked into the VPL file with literal PostScript specials if you have
+the patience) and uppercase Greek letters (which just don't exist
+unless you buy them separately). *Note Reencoding with Afm2tfm::.
+
+ As a final step you need to record information about both the virtual
+font and the original font (if you ever might want to use it) in the
+`psfonts.map' file (*note psfonts.map::). For our example, you'd
+insert the following into `psfonts.map':
+ rptmr Times-Roman <ptmr8a.pfa
+
+Of course, `Times-Roman' is already built in to most every printer, so
+there's no need to download any Type 1 file for it. But if you are
+actually following these instructions for new fonts, most likely they
+are not built in to the printer.
+
+ These PostScript fonts can be scaled to any size. Go wild! Using
+PostScript fonts, however, does use up a great deal of the printer's
+memory and it does take time. You may find downloading bitmap fonts
+(possibly compressed, with the `Z' option) to be faster than using the
+built-in PostScript fonts.
+
+
+File: dvips.info, Node: Invoking afm2tfm, Next: psfonts.map, Prev: Making a font available, Up: PostScript fonts
+
+6.3 Invoking Afm2tfm
+====================
+
+The Afm2tfm program converts an AFM file for a PostScript font to a TFM
+file and a VPL file for a corresponding virtual font (or, in its
+simplest form, to a TFM file for the PostScript font itself). The
+results of the conversion are affected by the command-line options and
+especially by the reencodings you can specify with those options. You
+can also obtain special effects such as an oblique font.
+
+ An alternative to Afm2tfm for creating virtual fonts is Alan
+Jeffrey's `fontinst' program, available from
+`CTAN:fonts/utilities/fontinst' (for CTAN info, *note unixtex.ftp:
+(kpathsea)unixtex.ftp.).
+
+* Menu:
+
+* Changing font encodings:: Reencoding with -t, -p, -T.
+* Special font effects:: Oblique fonts, small caps, and such.
+* Afm2tfm options:: afm2tfm command-line options.
+
+
+File: dvips.info, Node: Changing font encodings, Next: Special font effects, Up: Invoking afm2tfm
+
+6.3.1 Changing font encodings
+-----------------------------
+
+Afm2tfm allows you to specify a different encoding for a PostScript font
+(for a general introduction to encodings, *note Encodings::). The `-t'
+options changes the TeX encoding, `-p' changes the PostScript encoding,
+and `-T' changes both simultaneously, as detailed in the sections below.
+
+* Menu:
+
+* Changing TeX encodings:: Where TeX finds a character.
+* Changing PostScript encodings:: Where PostScript finds a character.
+* Changing both encodings:: One and the same, simultaneously.
+* Reencoding with Afm2tfm:: Problems with the default encoding.
+* Encoding file format:: Syntax of an encoding file.
+
+
+File: dvips.info, Node: Changing TeX encodings, Next: Changing PostScript encodings, Up: Changing font encodings
+
+6.3.1.1 `-t': Changing TeX encodings
+....................................
+
+To build a virtual font with Afm2tfm, you specify the `-v' or `-V'
+option. You can then specify an encoding for that virtual font with `-t
+TEX-ENC'. (`-t' is ignored if neither `-v' nor `-V' is present.) Any
+ligature and kerning information you specify in TEX-ENC will be used in
+the VPL, in addition to the ligature and kerning information from the
+AFM file.
+
+ If the AFM file has no entry for a character specified in TEX-ENC,
+that character will be omitted from the output VPL.
+
+ The `-t' option is likely to be needed when you have a PostScript
+font corresponding to a TeX font other than a normal text font such as
+Computer Modern. For instance, if you have a PostScript font that
+contains math symbols, you'd probably want to use the encoding in the
+`texmsym.enc' file supplied with Dvips. (For a start; to actually get
+usable math fonts, you have to define much more than just an encoding.)
+
+
+File: dvips.info, Node: Changing PostScript encodings, Next: Changing both encodings, Prev: Changing TeX encodings, Up: Changing font encodings
+
+6.3.1.2 `-p': Changing PostScript encodings
+...........................................
+
+By default, Afm2tfm uses the encoding it finds in the AFM file. You can
+specify a different PostScript encoding with `-p PS-ENC'. This makes
+the raw TFM file (the one output by Afm2tfm) have the encoding
+specified in the encoding file PS-ENC. Any ligature or kern
+information specified in PS-ENC is ignored by Afm2tfm, since ligkern
+info is always omitted from the raw TFM.
+
+ If you use this option, you must also arrange to download PS-ENC as
+part of any document that uses this font. You do this by adding a line
+like the following one to `psfonts.map' (*note psfonts.map::):
+ zpopr Optima "MyEncoding ReEncodeFont" <myenc.enc
+
+ Using `-p' is the only way to access characters in a PostScript font
+that are neither encoded in the AFM file nor constructed from other
+characters. For instance, Adobe's `Times-Roman' font contains the
+extra characters `trademark' and `registered' (among others); these can
+only be accessed through such a PostScript reencoding.
+
+ The `8r' base encoding used for the current PostScript font
+distribution does do this reencoding, for precisely this reason.
+
+
+File: dvips.info, Node: Changing both encodings, Next: Reencoding with Afm2tfm, Prev: Changing PostScript encodings, Up: Changing font encodings
+
+6.3.1.3 `-T': Changing both TeX and PostScript encodings
+........................................................
+
+The option `-T ENC-FILE' is equivalent to `-p ENC-FILE -t ENC-FILE'.
+If you make regular use of a private non-standard reencoding `-T' is
+usually a better idea than the individual options, to avoid unexpected
+inconsistencies in mapping otherwise. An example of when you might use
+this option is a dingbats font: when you have a TeX encoding that is
+designed to be used with a particular PostScript font.
+
+
+File: dvips.info, Node: Reencoding with Afm2tfm, Next: Encoding file format, Prev: Changing both encodings, Up: Changing font encodings
+
+6.3.1.4 Reencoding with Afm2tfm
+...............................
+
+The Afm2tfm program creates the TFM and VF files for the virtual font
+corresponding to a PostScript font by "reencoding" the PostScript font.
+Afm2tfm generates these files from two encodings: one for TeX and one
+for PostScript. The TeX encoding is used to map character numbers to
+character names while the PostScript encoding is used to map each
+character name to a possibly different number. In combination, you can
+get access to any character of a PostScript font at any position for
+TeX typesetting.
+
+ In the default case, when you specify none of the `-t', `-p', or
+`-T' options, Afm2tfm uses a default TeX encoding (which mostly
+corresponds to the Computer Modern text fonts) and the PostScript
+encoding found in the AFM file being read. The reencoding is also
+sometimes called a "remapping".
+
+ For example, the default encodings reencode the acute accent in two
+steps: first the default TeX encoding maps the number 19 to the
+character name `acute'; then the default PostScript encoding, as found
+in the AFM file for an ordinary PostScript font, maps the character
+name `acute' to the number 194. (The PostScript encoding works in
+reverse, by looking in the encoding vector for the name and then
+yielding the corresponding number.) The combined mapping of 19 to 194
+shows up explicitly in the VF file and also implicitly in the fact that
+the properties of PostScript character 194 appear in position 19 of the
+TFM file for the virtual font.
+
+ The default encoding of the distributed fonts (e.g., `ptmr.tfm')
+mostly follows plain TeX conventions for accents. The exceptions: the
+Hungarian umlaut (which is at position `0x7D' in `cmr10', but position
+`0xCD' in `ptmr'); the dot accent (at positions `0x5F' and `0xC7',
+respectively); and the Scandinavian A ring `\AA', whose definition
+needs different tweaking. In order to use these accents with
+PostScript fonts or in math mode when `\textfont0' is a PostScript
+font, you will need to use the following definitions. These
+definitions will not work with the Computer Modern fonts for the
+relevant accents. They are already part of the distributed
+`psfonts.sty' for use with LaTeX.
+
+ \def\H#1{{\accent"CD #1}}
+ \def\.#1{{\accent"C7 #1}}
+ \def\dot{\mathaccent"70C7 }
+ \newdimen\aadimen
+ \def\AA{\leavevmode\setbox0\hbox{h}\aadimen\ht0
+ \advance\aadimen-1ex\setbox0\hbox{A}\rlap{\raise.67\aadimen
+ \hbox to \wd0{\hss\char'27\hss}}A}
+
+ As a kind of summary, here are the `CODINGSCHEME's that result from
+the various possible choices for reencoding.
+
+default encoding
+ (CODINGSCHEME TeX text + AdobeStandardEncoding)
+
+`-p dc.enc'
+ (CODINGSCHEME TeX text + DCEncoding)
+
+`-t dc.enc'
+ (CODINGSCHEME DCEncoding + AdobeStandardEncoding)
+
+`-T dc.enc'
+ (CODINGSCHEME DCEncoding + DCEncoding)
+
+
+The `CODINGSCHEME' line appears in the VPL file but is ignored by Dvips.
+
+
+File: dvips.info, Node: Encoding file format, Prev: Reencoding with Afm2tfm, Up: Changing font encodings
+
+6.3.1.5 Encoding file format
+............................
+
+Afm2tfm's encoding files have the same format as an encoding vector in a
+PostScript font. Here is a skeletal example:
+
+ % Comments are ignored, unless the first word after the percent sign
+ % is `LIGKERN'; see below.
+ /MyEncoding [ % exactly 256 entries follow, each with a leading `/'
+ /Alpha /Beta /Gamma /Delta ...
+ /A /B ... /Z
+ ... /.notdef /xfooaccent /yfooaccent /zfooaccent
+ ] def
+
+ These encoding files are downloaded as part of changing the encoding
+at the PostScript level (see the previous section).
+
+ Comments, which start with a percent sign and continue until the end
+of the line, are ignored unless they start with `LIGKERN' (see below).
+
+ The first non-comment word of the file must start with a forward
+slash `/' (i.e., a PostScript literal name) and defines the name of the
+encoding. The next word must be an left bracket `['. Following that
+must be precisely 256 character names; use `/.notdef' for any that you
+want to leave undefined. Then there must be a matching right bracket
+`]'. A final `def' token is optional. All names are case-sensitive.
+
+ Any ligature or kern information is given as a comment. If the first
+word after the `%' is `LIGKERN', then the entire rest of the line is
+parsed for ligature and kern information. This ligature and kern
+information is given in groups of words: each group is terminated by a
+space and a semicolon and (unless the semicolon is at the end of a
+line) another space.
+
+ In these `LIGKERN' statements, three types of information may be
+specified. These three types are ligature pairs, kerns to ignore, and
+the character value of this font's boundary character.
+
+ Throughout a `LIGKERN' statement, the boundary character is
+specified as `||'. To set the font's boundary character value for TeX:
+
+ % LIGKERN || = 39 ;
+
+ To indicate a kern to remove, give the names of the two characters
+(without the leading slash) separated by `{}', as in `one {} one ;'.
+This is intended to be reminiscent of the way you might use `{}' in a
+TeX file to turn off ligatures or kerns at a particular location.
+Either or both of the character names can be given as `*', which is a
+wild card matching any character; thus, all kerns can be removed with
+`* {} * ;'.
+
+ To specify a ligature, specify the names of the pair of characters,
+followed by the ligature operation (as in Metafont), followed by the
+replacing character name. Either (but not both) of the first two
+characters can be `||' to indicate a word boundary.
+
+ The most common operation is `=:' meaning that both characters are
+removed and replaced by the third character, but by adding the `|'
+character on either side of the `=:', you can retain either or both of
+the two leading characters. In addition, by suffixing the ligature
+operation with one or two `>' signs, you can make the ligature scanning
+operation skip that many resulting characters before proceeding. This
+works just like in Metafont. For example, the `fi' ligature is
+specified with `f i =: fi ;'. A more convoluted ligature is `one one
+|=:|>> exclam ;' which separates a pair of adjacent `1''s with an
+exclamation point, and then skips over two of the resulting characters
+before continuing searching for ligatures and kerns. You cannot give
+more >'s than |'s in an ligature operation, so there are a total of
+eight possibilities:
+
+ =: |=: |=:> =:| =:|> |=:| |=:|> |=:|>>
+
+ The default set of ligatures and kerns built in to Afm2tfm is:
+
+ % LIGKERN question quoteleft =: questiondown ;
+ % LIGKERN exclam quoteleft =: exclamdown ;
+ % LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+ % LIGKERN quoteleft quoteleft =: quotedblleft ;
+ % LIGKERN quoteright quoteright =: quotedblright ;
+ % LIGKERN space {} * ; * {} space ; 0 {} * ; * {} 0 ;
+ % LIGKERN 1 {} * ; * {} 1 ; 2 {} * ; * {} 2 ; 3 {} * ; * {} 3 ;
+ % LIGKERN 4 {} * ; * {} 4 ; 5 {} * ; * {} 5 ; 6 {} * ; * {} 6 ;
+ % LIGKERN 7 {} * ; * {} 7 ; 8 {} * ; * {} 8 ; 9 {} * ; * {} 9 ;
+
+
+File: dvips.info, Node: Special font effects, Next: Afm2tfm options, Prev: Changing font encodings, Up: Invoking afm2tfm
+
+6.3.2 Special font effects
+--------------------------
+
+Besides the reencodings described in the previous section, Afm2tfm can
+do other manipulations. (Again, it's best to use the prebuilt fonts
+rather than attempting to remake them.)
+
+ `-s SLANT' makes an obliqued variant, as in:
+
+ afm2tfm Times-Roman -s .167 -v ptmro rptmro
+
+This creates `ptmro.vpl' and `rptmro.tfm'. To use this font, put the
+line
+
+ rptmro Times-Roman ".167 SlantFont"
+
+into `psfonts.map'. Then `rptmro' (our name for the obliqued Times)
+will act as if it were a resident font, although it is actually
+constructed from Times-Roman via the PostScript routine `SlantFont'
+(which will slant everything 1/6 to the right, in this case).
+
+ Similarly, you can get an expanded font with
+
+ afm2tfm Times-Roman -e 1.2 -v ptmrre rptmrre
+
+and by recording the pseudo-resident font
+
+ rptmrre Times-Roman "1.2 ExtendFont"
+
+in `psfonts.map'.
+
+ You can also create a small caps font with a command such as
+
+ afm2tfm Times-Roman -V ptmrc rptmrc
+
+This will generate a set of pseudo-small caps mapped into the usual
+lowercase positions and scaled down to 0.8 of the normal cap
+dimensions. You can also specify the scaling as something other than
+the default 0.8:
+
+ afm2tfm Times-Roman -c 0.7 -V ptmrc rptmrc
+
+ It is unfortunately not possible to increase the width of the small
+caps independently of the rest of the font. If you want a really
+professional looking set of small caps, you need to acquire a small caps
+font.
+
+ To change the `PaintType' in a font from filled (0) to outlined (2),
+you can add `"/PaintType 2 store"' to `psfonts.map', as in the
+following:
+
+ rphvrl Helvetica "/PaintType 2 store"
+
+ Afm2tfm writes to standard output the line you need to add to
+`psfonts.map' to use that font, assuming the font is resident in the
+printer; if the font is not resident, you must add the `<FILENAME'
+command to download the font. Each identical line only needs to be
+specified once in the `psfonts.map' file, even though many different
+fonts (small caps variants, or ones with different output encodings)
+may be based on it.
+
+
+File: dvips.info, Node: Afm2tfm options, Prev: Special font effects, Up: Invoking afm2tfm
+
+6.3.3 Afm2tfm options
+---------------------
+
+Synopsis:
+ afm2tfm [OPTION]... AFMFILE[.afm] [TFMFILE[.tfm]]
+
+ Afm2tfm reads AFMFILE and writes a corresponding (but raw) TFM file.
+If TFMFILE is not supplied, the base name of the AFM file is extended
+with `.tfm' to get the output filename.
+
+ The simplest example:
+
+ afm2tfm Times-Roman rptmr
+
+The TFM file thus created is "raw" because it omits ligature and kern
+information, and does no character remapping; it simply contains the
+character information in the AFM file in TFM form, which is the form
+that TeX understands. The characters have the same code in the TFM
+file as in the AFM file. For text fonts, this means printable ASCII
+characters will work ok, but little else, because standard PostScript
+fonts have a different encoding scheme than the one that plain TeX
+expects (*note Encodings::). Although both schemes agree for the
+printable ASCII characters, other characters such as ligatures and
+accents vary. Thus, in practice, it's almost always desirable to create
+a virtual font as well with the `-v' or `-V' option. *Note Making a
+font available::.
+
+ The command line options to Afm2tfm:
+
+`-c RATIO'
+ See `-V'; overrides the default ratio of 0.8 for the scaling of
+ small caps.
+
+`-e RATIO'
+ Stretch characters horizontally by RATIO; if less than 1.0, you
+ get a condensed font.
+
+`-O'
+ Output all character codes in the `vpl' file as octal numbers, not
+ names; this is useful for symbol or other special-purpose fonts
+ where character names such as `A' have no meaning.
+
+`-p PS-ENC'
+ Use PS-ENC for the destination (PostScript) encoding of the font;
+ PS-ENC must be mentioned as a header file for the font in
+ `psfonts.map'. *Note Changing PostScript encodings::.
+
+`-s SLANT'
+ Slant characters to the right by SLANT. If SLANT is negative, the
+ letters slope to the left (or they might be upright if you start
+ with an italic font).
+
+`-t TEX-ENC'
+ Use TEX-ENC for the target (TeX) encoding of the font. Ligature
+ and kern information may also be specified in FILE. FILE is not
+ mentioned in `psfonts.map'.
+
+`-T PS-TEX-ENC'
+ Use PS-TEX-ENC for both the PostScript and target TeX encodings of
+ the font. Equivalent to `-p FILE -t FILE'.
+
+`-u'
+ Use only those characters specified in the TeX encoding, and no
+ others. By default, Afm2tfm tries to include all characters in the
+ input font, even those not present in the TeX encoding (it puts
+ them into otherwise-unused positions, arbitrarily).
+
+`-v VPL-FILE'
+ Output a VPL (virtual property list) file, as well as a TFM file.
+
+`-V VPL-FILE'
+ Same as `-v', but the virtual font generated is a pseudo small caps
+ font obtained by scaling uppercase letters by 0.8 to typeset
+ lowercase. This font handles accented letters and retains proper
+ kerning.
+
+
+File: dvips.info, Node: psfonts.map, Prev: Invoking afm2tfm, Up: PostScript fonts
+
+6.4 `psfonts.map': PostScript font catalog
+==========================================
+
+The `psfonts.map' file associates a PostScript font with related files
+and constructs. Each line has the format:
+
+ FILENAME POSTSCRIPT-NAME OPTIONS
+
+ For example, the line
+ rpstrn StoneInformal <StoneInformal.pfb
+ causes Dvips to download `StoneInformal.pfb' if your document (just
+as if it were a header file, *note Header files::) uses the font
+`StoneInformal'.
+
+ If the `j' config file or command-line option is enabled,
+`StoneInformal.pfb' will be "partially downloaded"--only those
+characters your document actually uses will be extracted and downloaded,
+and the remainder discarded. *Note Option details::.
+
+ Filenames of fonts that are partially downloaded are surrounded by
+curly braces (`{...}') in the progress report Dvips writes to standard
+output. Wholly-downloaded fonts appear inside angle brackets
+(`<...>'), like other downloaded files.
+
+ Adobe Multiple Master fonts, such as Minion, cannot be partially
+downloaded. To partially download in general, but avoid partial
+downloading for individual fonts, use `<<' instead `<':
+ pmnr8r Minion <<Minion.pfb
+
+ You can generate transformed fonts with a line like this:
+ rpstrc StoneInformal <StoneInformal.pfb ".8 ExtendFont"
+
+*Note Special font effects::, for a complete list of font effects.
+
+ You can change the encoding of the Type 1 font at the PostScript
+level with a `ReEncodeFont' instruction, plus the name of the encoding
+file. This allows you access to characters that may be present in the
+Type 1 font file, but not encoded by default--most of the preaccented
+characters, for example. An example:
+ pstrn8r StoneInformal "TeXBase1Encoding ReEncodeFont" <8r.enc <pstrn8a.pfb
+
+ The `8r' encoding mentioned here has been designed to serve as a
+base for all downloadable fonts; it allows access to all the characters
+commonly present in a Type 1 font. For more details, see the `8r.enc'
+source file that comes with (and is installed with) Dvips.
+
+ You may notice that the same syntax is used for downloading encoding
+vectors and Type 1 font files. To make your intentions clear, you can
+also use `<[' to explicitly indicate you are downloading an encoding
+vector, as in:
+ pstrn8r StoneInformal "TeXBase1Encoding ReEncodeFont" <[8r.enc <pstrn8a.pfb
+
+ If the filename of your encoding vector does not end in `.enc', and
+you are using partial font downloading, you must use the `<[' syntax,
+or Dvips will not download the font properly.
+
+ Similarly, the name of the Type 1 font file itself must have
+extension `.pfa' or `.pfb' for partial downloading to work properly.
+
+ When using PFB files, Dvips is smart enough to unpack the binary PFB
+format into printable ASCII so there is no need to perform this
+conversion yourself. In addition, Dvips scans the font to determine its
+memory usage, just as it does for other header files (*note Header
+files::).
+
+ Here is a brief summary of how `psfonts.map' is read:
+
+ 1. If a line is empty or begins with a space, percent, asterisk,
+ semicolon, or hash mark, it is ignored.
+
+ 2. Otherwise, the line is separated into words, where words are
+ separated by spaces or tabs, except that if a word begins with a
+ double quote, it extends until the next double quote or the end of
+ the line.
+
+ 3. If a word starts with `<<', it is taken as a font file to be
+ wholly downloaded. Use this to avoid partial downloading, as
+ described above.
+
+ 4. If a word starts with `<[', it is taken as an encoding file to be
+ downloaded. Use this if the name of the encoding file does end in
+ `.enc', also as described above.
+
+ 5. If a word starts with a `<' character, it is treated as a header
+ file that needs to be downloaded. If the name ends in `.pfa' or
+ `.pfb', it is taken as Type 1 font file that will be partially
+ downloaded if the `j' option is in effect. There can be more than
+ one such header for a given font. If a `<' is a word by itself,
+ the next word is taken as the name of the header file.
+
+ 6. If a word starts with a `"' character, it is taken as PostScript
+ code used in generating that font, and is inserted into the output
+ verbatim at the appropriate point. (And the double quotes
+ beginning and ending the word are removed.)
+
+ 7. Otherwise the word is a name. The first such name is the TFM file
+ that a virtual font file can refer to. If there is a second name,
+ it is used as the PostScript name; if there is only one name, it
+ is used for both the TeX name and the PostScript name.
+
+
+
+File: dvips.info, Node: Color, Next: Index, Prev: PostScript fonts, Up: Top
+
+7 Color
+*******
+
+Dvips supports one-pass multi-color printing of TeX documents on any
+color PostScript device. Initially added by Jim Hafner, IBM Research,
+<hafner@almaden.ibm.com>, the color support has gone through many
+changes by Tomas Rokicki. Besides the source code support itself, there
+are additional TeX macro files: `colordvi.tex' and `blackdvi.tex', and
+corresponding `.sty' versions for use with LaTeX.
+
+ In this section we describe the use of color from the document
+preparer's point of view and then add some instructions on installation
+for the TeX administrator.
+
+* Menu:
+
+* Color macro files:: TeX macro definitions.
+* User-definable colors:: Adding your own colors.
+* Color subtleties:: Subtleties in using color.
+* Ted Turner:: Printing in black/white after colorizing.
+* Color device configuration:: Configuring Dvips for color devices.
+* Color support details:: Color support details
+
+
+File: dvips.info, Node: Color macro files, Next: User-definable colors, Up: Color
+
+7.1 Color macro files
+=====================
+
+All the color macro commands are defined in `colordvi.tex' (or
+`colordvi.sty'). To access these macros simply add to the top of your
+plain TeX file the command:
+ \input colordvi
+ For (the obsolete) LaTeX 2.09, add the `colordvi' style option as in:
+ \documentstyle[12pt,colordvi]{article}
+ For LaTeX 2e, these examples are not applicable. Instead, please see
+the documentation for the graphics package, available from
+`CTAN:doc/latex/graphics/'. See also `CTAN:doc/epslatex.ps'.
+
+ These macros provide two basic kinds of color macros: ones for local
+color changes (a few words, a single symbol) and one for global color
+changes (the whole document). All the color names use a mixed case
+scheme to avoid conflicts with other macros. There are 68 predefined
+colors, with names taken primarily from the Crayola crayon box of 64
+colors, and one pair of macros for the user to set his own color pattern
+(*note User-definable colors::). You can browse the file
+`colordvi.tex' for a list of the predefined colors. The comments in
+this file also show a rough correspondence between the crayon names and
+Pantones.
+
+ A local color command has the form
+
+ \COLORNAME{this is the color COLORNAME}
+
+where COLORNAME is the name of a predefined color, e.g., `Blue'. As
+shown, these macros take one argument, the text to print in the
+specified color. This can be used for nested color changes since it
+restores the original color state when it completes. For example:
+
+ This text is normal but here we are \Red{switching to red,
+ \Blue{nesting blue}, recovering the red} and back to original.
+
+The color nesting level has no hard limit, but it is not advisable to
+nest too deeply lest you and the reader lose track of the color history.
+
+ The global color command has the form
+
+ \textCOLORNAME
+
+These macros take no arguments and changes the default color from that
+point on to COLORNAME. This of course can be overridden globally by
+another such command or locally by local color commands. For example,
+expanding on the example above, we might have
+
+ \textGreen
+ This text is green but here we are \Red{switching to red,
+ \Blue{nesting blue}, recovering the red} and back to
+ original green.
+ \textCyan
+ The text from here on will be cyan until
+ \Yellow{locally changed to yellow}. Now we are back to cyan.
+
+ The color commands will even work in math mode and across math mode
+boundaries. This means that if you have a color before going into math
+mode, the mathematics will be set in that color as well. In alignment
+environments like `\halign', `tabular' or `eqnarray', local color
+commands cannot extend beyond the alignment characters.
+
+ Because local color commands respect only some environment and
+delimiter changes besides their own, care must be taken in setting
+their scope. It is best not to have them stretch too far.
+
+ At the present time there are no macros for color environments in
+LaTeX which might have a larger range. This is primarily to keep the
+TeX and LaTeX use compatible.
+
+
+File: dvips.info, Node: User-definable colors, Next: Color subtleties, Prev: Color macro files, Up: Color
+
+7.2 User-definable colors
+=========================
+
+There are two ways for the user to specify colors not already defined.
+For local changes, there is the command `\Color' which takes two
+arguments. The first argument is four numbers between zero and one and
+specifies the intensity of cyan, magenta, yellow and black (CMYK) in
+that order. The second argument is the text that should appear in the
+given color. For example, suppose you want the words "this color is
+pretty" to appear in a color which is 50% cyan, 85% magenta, 40% yellow
+and 20% black. You would use the command
+
+ \Color{.5 .85 .4 .2}{this color is pretty}
+
+ For global color changes, there is a command `\textColor' which
+takes one argument, the CMYK quadruple of relative color intensities.
+For example, if you want the default color to be as above, then the
+command
+
+ \textColor{.5 .85 .4 .2}
+ The text from now on will be this pretty color
+
+will do the trick.
+
+ Making a global color change in the midst of nested local colors is
+highly discouraged. Consequently, Dvips will give you warning message
+and do its best to recover by discarding the current color history.
+
+
+File: dvips.info, Node: Color subtleties, Next: Ted Turner, Prev: User-definable colors, Up: Color
+
+7.3 Color subtleties
+====================
+
+Color macros are defined via `\special' keywords. As such, they are
+put in the `.dvi' file only as explicit message strings to the driver.
+The (unpleasant) result is that certain unprotected regions of the text
+can have unwanted color side effects. For example, if a color region
+is split by TeX across a page boundary, then the footers of the current
+page (e.g., the page number) and the headers of the next page can
+inherit that color. To avoid this effect globally, users should make
+sure that these special regions of the text are defined with their own
+local color commands. For example, to protect the header and footer in
+plain TeX, use
+
+ \headline{\Black{My Header}}
+ \footline{\Black{\hss\tenrm\folio\hss}}
+
+ This warning also applies to figures and other insertions, so be
+careful!
+
+ Of course, in LaTeX, this is much more difficult to do because of the
+complexity of the macros that control these regions. This is
+unfortunate but inevitable, because TeX and LaTeX were not written with
+color in mind.
+
+ Even when writing your own macros, much care must be taken. The
+macros that `colorize' a portion of the text work prefix the text work
+by outputting one `\special' command to turn the color on before the
+text, and outputting another `\special' command afterwards to restore
+the original color. It is often useful to ensure that TeX is in
+horizontal mode before the first special command is issued; this can be
+done by prefixing the color command with `\leavevmode'.
+
+
+File: dvips.info, Node: Ted Turner, Next: Color device configuration, Prev: Color subtleties, Up: Color
+
+7.4 Printing in black/white after colorizing
+============================================
+
+If you have a TeX or LaTeX document written with color macros and you
+want to print it in black and white there are two options. On all
+(good) PostScript devices, printing a color file will print in
+corresponding gray levels. This is useful to get a rough idea of the
+colors without using expensive color printing devices. The second
+option is to replace the call to input `colordvi.tex' with
+`blackdvi.tex' (and similarly for the `.sty' files). So in the above
+example, replacing the word `colordvi' with `blackdvi' suffices.
+`blackdvi.tex' defines the color macros as no-ops, and so will produce
+normal black/white printing. By this simple mechanism, the user can
+switch to all black/white printing without having to ferret out the
+color commands. Also, some device drivers, particularly non-PostScript
+ones like screen previewers, will simply ignore the color commands and
+so print in black/white. Hopefully, in the future screen previewers
+for color displays will be compatible with some form of color support.
+
+
+File: dvips.info, Node: Color device configuration, Next: Color support details, Prev: Ted Turner, Up: Color
+
+7.5 Color device configuration
+==============================
+
+To configure Dvips for a particular color device you need to fine tune
+the color parameters to match your device's color rendition. To do
+this, you will need a Pantone chart for your device. The header file
+`color.lpro' shows a (rough) correspondence between the Crayola crayon
+names and the Pantone numbers and also defines default CMYK values for
+each of the colors. Note that these colors must be defined in CMYK
+terms and not RGB, as Dvips outputs PostScript color commands in CMYK.
+This header file also defines (if they are not known to the
+interpreter) the PostScript commands `setcmykcolor' and
+`currentcmykcolor' in terms of a RGB equivalent so if your device only
+understands RGB, there should be no problem.
+
+ The parameters set in this file were determined by comparing the
+Pantone chart of a Tektronix Phaser printer with the actual Crayola
+Crayons. Because these were defined for a particular device, the
+actual color rendition on your device may be very different. There are
+two ways to adjust this. One is to use the PAntone chart for your
+device to rewrite `color.lpro' prior to compilation and installation.
+A better alternative, which supports multiple devices, is to add a
+header file option in the configuration file (*note Configuration file
+commands::) for each device that defines, in `userdict', the color
+parameters for those colors that need redefining.
+
+ For example, if you need to change the parameters defining
+`Goldenrod' (approximately Pantone 109 on the Phaser) for your device
+`mycolordev', do the following. In the Pantone chart for your device,
+find the CMYK values for Pantone 109. Let's say they are `{\ 0 0.10
+0.75 0.03 }'. Then create a header file named `mycolordev.pro' with the
+commands
+
+ userdict begin
+ /Goldenrod { 0 0.10 0.75 0.03 setcmykcolor} bind def
+
+Finally, in `config.mycolordev' add the line
+
+ h mycolordev.pro
+
+This will then define `Goldenrod' in your device's CMYK values in
+`userdict' which is checked before defining it in `TeXdict' by
+`color.pro'. (On MS-DOS, you will have to call this file
+`mycolordev.cfg'.)
+
+ This mechanism, together with additions to `colordvi.tex' and
+`blackdvi.tex' (and the `.sty' files), can also be used to predefine
+other colors for your users.
+
+
+File: dvips.info, Node: Color support details, Prev: Color device configuration, Up: Color
+
+7.6 Color support details
+=========================
+
+To support color, Dvips recognizes a certain set of specials. These
+specials start with the keyword `color' or the keyword `background',
+followed by a color specification.
+
+* Menu:
+
+* Color specifications::
+* Color specials::
+
+
+File: dvips.info, Node: Color specifications, Next: Color specials, Up: Color support details
+
+7.6.1 Color specifications
+--------------------------
+
+What is a color specification? One of three things. First, it might be
+a PostScript procedure as defined in a PostScript header file. The
+`color.pro' file defines 64 of these, including `Maroon'. This
+PostScript procedure must set the current color to be some value; in
+this case, `Maroon' is defined as `0 0.87 0.68 0.32 setcmykcolor'.
+
+ The second possibility is the name of a color model (initially, one
+of `rgb', `hsb', `cmyk', or `gray') followed by the appropriate number
+of parameters. When Dvips encounters such a macro, it sends out the
+parameters first, followed by the string created by prefixing
+`TeXcolor' to the color model. Thus, the color specification `rgb 0.3
+0.4 0.5' would generate the PostScript code `0.3 0.4 0.5 TeXrgbcolor'.
+Note that the case of zero arguments is disallowed, as that is handled
+by the single keyword case (`Maroon') above, where no changes to the
+name are made before it is sent to the PostScript file.
+
+ The third and final type of color specification is a double quote
+followed by any sequence of PostScript. The double quote is stripped
+from the output. For instance, the color specification `"AggiePattern
+setpattern' will set the `color' to the Aggie logo pattern (assuming
+such exists.)
+
+
+File: dvips.info, Node: Color specials, Prev: Color specifications, Up: Color support details
+
+7.6.2 Color specials
+--------------------
+
+We will describe `background' first, since it is the simplest. The
+`background' keyword must be followed by a color specification. That
+color specification is used as a fill color for the background. The
+last `background' special on a page is the one that gets issued, and it
+gets issued at the very beginning of the page, before any text or
+specials are sent. (This is possible because the prescan phase of
+Dvips notices all of the color specials so that the appropriate
+information can be written out during the second phase.)
+
+ The `color' special itself has three forms. The first is just
+`color' followed by a color specification. In this case, the current
+global color is set to that color; the color stack must be empty when
+such a command is executed.
+
+ The second form is `color push' followed by a color specification.
+This saves the current color on the color stack and sets the color to be
+that given by the color specification. This is the most common way to
+set a color.
+
+ The final version of the `color' special is just `color pop', with
+no color specification; this says to pop the color last pushed on the
+color stack from the color stack and set the current color to be that
+color.
+
+ Dvips correctly handles these color specials across pages, even when
+the pages are repeated or reversed.
+
+ These color specials can be used for things such as patterns or
+screens as well as simple colors. However, note that in the
+PostScript, only one color specification can be active at a time. For
+instance, at the beginning of a page, only the bottommost entry on the
+color stack is sent; also, when a color is popped, all that is done is
+that the color specification from the previous stack entry is sent. No
+`gsave' or `grestore' is used. This means that you cannot easily mix
+usage of the `color' specials for screens and colors, just one or the
+other. This may be addressed in the future by adding support for
+different categories of color-like state.
+
+
+File: dvips.info, Node: Index, Prev: Color, Up: Top
+
+Index
+*****
+
+
+* Menu:
+
+* ! special (literal PS header): Literal headers. (line 6)
+* ! starting output filename: Option details. (line 222)
+* " special (literal PostScript): " special. (line 6)
+* %%BoundingBox: Bounding box. (line 17)
+* %%Page, and multi-page information: PostScript hooks. (line 37)
+* %%Page, not generating: Option details. (line 197)
+* %%Page, removing: Option details. (line 153)
+* %%Page, required by Ghostview: Ghostscript installation.
+ (line 17)
+* %%VMusage: Headers and memory usage.
+ (line 12)
+* %*Font: Fonts in figures. (line 6)
+* (atend), bounding box specification: Bounding box. (line 28)
+* +PSMAPFILE: Configuration file commands.
+ (line 101)
+* -: Option details. (line 11)
+* - as output filename: Option details. (line 222)
+* --help <1>: Option details. (line 15)
+* --help: Option summary. (line 7)
+* --version: Option details. (line 18)
+* -A: Option details. (line 27)
+* -a: Option details. (line 21)
+* -B: Option details. (line 37)
+* -b NUM: Option details. (line 31)
+* -C NUM: Option details. (line 46)
+* -c NUM: Option details. (line 41)
+* -c RATIO: Afm2tfm options. (line 33)
+* -D NUM: Option details. (line 58)
+* -d NUM: Option details. (line 52)
+* -E: Option details. (line 82)
+* -e NUM: Option details. (line 71)
+* -e RATIO: Afm2tfm options. (line 37)
+* -F: Option details. (line 110)
+* -f: Option details. (line 98)
+* -G: Option details. (line 117)
+* -h NAME: Option details. (line 121)
+* -i: Option details. (line 126)
+* -j for partial font downloading: Option details. (line 139)
+* -K: Option details. (line 153)
+* -k for cropmarks: Option details. (line 145)
+* -l [=]NUM: Option details. (line 162)
+* -M: Option details. (line 183)
+* -m: Option details. (line 171)
+* -mode: Option details. (line 174)
+* -mode MODE: Option details. (line 174)
+* -N: Option details. (line 197)
+* -n NUM: Option details. (line 194)
+* -noomega: Option details. (line 205)
+* -O: Afm2tfm options. (line 41)
+* -o NAME: Option details. (line 218)
+* -O X-OFFSET,Y-OFFSET: Option details. (line 234)
+* -p [=]NUM: Option details. (line 252)
+* -P PRINTER: Option details. (line 266)
+* -p PS-ENC <1>: Afm2tfm options. (line 46)
+* -p PS-ENC: Changing PostScript encodings.
+ (line 6)
+* -pp FIRST-LAST: Option details. (line 261)
+* -pp RANGE: Option details. (line 261)
+* -PPRINTER, and config file searching: Configuration file searching.
+ (line 27)
+* -q: Option details. (line 285)
+* -R: Option details. (line 292)
+* -r: Option details. (line 289)
+* -s: Option details. (line 298)
+* -S NUM: Option details. (line 305)
+* -s SLANT: Afm2tfm options. (line 51)
+* -T ENC-FILE: Changing both encodings.
+ (line 6)
+* -T HSIZE,VSIZE: Option details. (line 321)
+* -t PAPERTYPE: Option details. (line 310)
+* -T PS-TEX-ENC: Afm2tfm options. (line 61)
+* -t TEX-ENC <1>: Afm2tfm options. (line 56)
+* -t TEX-ENC: Changing TeX encodings.
+ (line 6)
+* -u: Afm2tfm options. (line 65)
+* -U: Option details. (line 334)
+* -u PSMAPFILE: Option details. (line 326)
+* -V: Option details. (line 345)
+* -v: Option details. (line 342)
+* -V VPL-FILE: Afm2tfm options. (line 74)
+* -v VPL-FILE: Afm2tfm options. (line 71)
+* -X NUM: Option details. (line 362)
+* -x NUM: Option details. (line 354)
+* -Y NUM: Option details. (line 369)
+* -z: Hypertext. (line 6)
+* -Z for compressing bitmap fonts: Option details. (line 378)
+* -z for recognizing hyperdvi: Option details. (line 372)
+* .afm Adobe metric files: Metric files. (line 26)
+* .dvipsrc, searched for: Configuration file searching.
+ (line 14)
+* .enc extension for encoding vectors: psfonts.map. (line 55)
+* .lpro long prologue files: Header files. (line 12)
+* .mf Metafont source files: Glyph files. (line 30)
+* .NNNpk packed font bitmaps: Glyph files. (line 35)
+* .pfa extension required for partial downloading: psfonts.map.
+ (line 59)
+* .pfa printer font ascii files: Glyph files. (line 25)
+* .pfb extension required for partial downloading: psfonts.map.
+ (line 59)
+* .pfb printer font binary files: Glyph files. (line 25)
+* .pfm printer font metric files: Metric files. (line 49)
+* .pl property list files: Metric files. (line 39)
+* .pro prologue files: Header files. (line 12)
+* .tfm TeX font metric files: Metric files. (line 31)
+* /#copies: Option details. (line 31)
+* /magscale: EPSF scaling. (line 67)
+* 612 792 bounding box size: Bounding box. (line 43)
+* 8r encoding, and extra characters: Changing PostScript encodings.
+ (line 24)
+* 8r font encoding: psfonts.map. (line 44)
+* 8r.enc: Encodings. (line 35)
+* < font downloading: psfonts.map. (line 11)
+* << whole font downloading: psfonts.map. (line 27)
+* <[ encoding vector downloading: psfonts.map. (line 49)
+* =: ligature operation: Encoding file format.
+ (line 59)
+* @ paper size config command: Configuration file commands.
+ (line 18)
+* \.: Reencoding with Afm2tfm.
+ (line 44)
+* \AA: Reencoding with Afm2tfm.
+ (line 44)
+* \COLORNAME: Color macro files. (line 31)
+* \dot: Reencoding with Afm2tfm.
+ (line 44)
+* \epsffile macro: EPSF macros. (line 38)
+* \epsfsize: EPSF scaling. (line 29)
+* \epsfverbosetrue: EPSF macros. (line 46)
+* \epsfxsize: EPSF scaling. (line 14)
+* \epsfysize: EPSF scaling. (line 20)
+* \H: Reencoding with Afm2tfm.
+ (line 44)
+* \includegraphics LaTeX macro: \includegraphics. (line 6)
+* \leavevmode: EPSF macros. (line 26)
+* \magnification: EPSF scaling. (line 63)
+* \rotninety: Literal examples. (line 27)
+* \textCOLORNAME: Color macro files. (line 46)
+* a config command (memory conservation): Configuration file commands.
+ (line 21)
+* A ring, Scandinavian letter: Reencoding with Afm2tfm.
+ (line 32)
+* a3 papertype: Option details. (line 310)
+* a4 paper size, as default: Config file paper sizes.
+ (line 72)
+* a4 papertype: Option details. (line 310)
+* absolute filenames, disabling: Option details. (line 292)
+* absolute page number, and -l: Option details. (line 162)
+* absolute page number, and -p: Option details. (line 252)
+* accents, in wrong position: Reencoding with Afm2tfm.
+ (line 32)
+* accents, wrong: Afm2tfm options. (line 17)
+* accuracy in positioning: Option details. (line 71)
+* Adobe fonts: PostScript font installation.
+ (line 10)
+* Adobe fonts, installing: PostScript font installation.
+ (line 19)
+* afm files: Metric files. (line 26)
+* afm2tfm <1>: Invoking afm2tfm. (line 6)
+* afm2tfm: Making a font available.
+ (line 46)
+* afm2tfm options: Afm2tfm options. (line 6)
+* after header, inserting code: Including headers from TeX.
+ (line 28)
+* Aladdin Ghostscript: Ghostscript installation.
+ (line 6)
+* Anderson, Laurie: Hypertext specials. (line 42)
+* arcs: Glyph files. (line 17)
+* ASCII character codes, used by PostScript: PostScript typesetting.
+ (line 31)
+* atend, bounding box specification: Bounding box. (line 28)
+* b config command (#copies): Configuration file commands.
+ (line 24)
+* base: Hypertext specials. (line 57)
+* base encoding, recommended: psfonts.map. (line 44)
+* base fonts: Virtual fonts. (line 24)
+* bbfig: Bounding box. (line 37)
+* before header, inserting code: Including headers from TeX.
+ (line 28)
+* Bhattacharya, Tanmoy: Hypertext. (line 21)
+* big points: Bounding box. (line 11)
+* Bigelow & Holmes fonts: PostScript font installation.
+ (line 10)
+* binary files, not supported: Including graphics fails.
+ (line 23)
+* bitmap fonts: Glyph files. (line 30)
+* Bitstream fonts, installing: PostScript font installation.
+ (line 19)
+* bop undefined error: Printer errors. (line 6)
+* bop-hook <1>: PostScript hooks. (line 11)
+* bop-hook: EPSF scaling. (line 75)
+* bop-hook, and offset pages: Option details. (line 247)
+* boundary character: Encoding file format.
+ (line 41)
+* bounding box, comment for: Bounding box. (line 6)
+* bounding box, defined: Bounding box. (line 11)
+* bounding box, determining: Bounding box. (line 37)
+* bounding box, finding tight: Option details. (line 82)
+* bounding box, inaccurate: EPSF clipping. (line 6)
+* bounding box, supplying to TeX <1>: EPSF macros. (line 26)
+* bounding box, supplying to TeX: \includegraphics. (line 36)
+* changing PostScript encodings: Changing PostScript encodings.
+ (line 6)
+* changing TeX encodings: Changing TeX encodings.
+ (line 6)
+* character definitions in PostScript: PostScript typesetting.
+ (line 55)
+* character lookup procedure in PostScript: PostScript typesetting.
+ (line 6)
+* CharStrings Type 1 dictionary: PostScript typesetting.
+ (line 51)
+* clipping of EPSF: EPSF clipping. (line 6)
+* CODINGSCHEME: Reencoding with Afm2tfm.
+ (line 52)
+* collated copies: Option details. (line 46)
+* color: Color. (line 6)
+* color configuration: Color device configuration.
+ (line 6)
+* color macros: Color macro files. (line 6)
+* color names, mixed case: Color macro files. (line 16)
+* color nesting level: Color macro files. (line 39)
+* color separations: Option details. (line 31)
+* color specifications: Color specifications.
+ (line 6)
+* color subtleties: Color subtleties. (line 6)
+* colors, user-definable: User-definable colors.
+ (line 6)
+* command line, including headers from: Including headers from the command line.
+ (line 6)
+* command-line options: Invoking Dvips. (line 6)
+* comments, in configuration files: Configuration file commands.
+ (line 13)
+* comments, in encoding files: Encoding file format.
+ (line 20)
+* comments, removing included: Option details. (line 153)
+* compilation: Installation. (line 6)
+* compressed PostScript: Dynamic creation of graphics.
+ (line 6)
+* compressing bitmap fonts: Option details. (line 378)
+* Computer Modern in PostScript: Hypertext caveats. (line 6)
+* Computer Modern, encoding of: Encodings. (line 15)
+* condensed fonts: Afm2tfm options. (line 37)
+* config.proto: config.ps installation.
+ (line 15)
+* config.ps: Option details. (line 266)
+* config.ps installation: config.ps installation.
+ (line 6)
+* config.ps, searched for: Configuration file searching.
+ (line 10)
+* configuration file options: Configuration file commands.
+ (line 6)
+* configuration file paper size command: Config file paper sizes.
+ (line 6)
+* configuration file path: Environment variables.
+ (line 47)
+* configuration file searching: Configuration file searching.
+ (line 6)
+* configuration files: Config files. (line 6)
+* configuration files, creating: config.ps installation.
+ (line 6)
+* configuration files, prototype: config.ps installation.
+ (line 15)
+* configuration, of color devices: Color device configuration.
+ (line 6)
+* configuration, of Dvips: Installation. (line 6)
+* continuation lines, not supported: Configuration file commands.
+ (line 13)
+* control-D: Option details. (line 110)
+* copies, collated: Option details. (line 46)
+* copies, duplicated page bodies: Option details. (line 31)
+* copies, uncollated: Option details. (line 41)
+* Crayola crayon box: Color macro files. (line 16)
+* crop.pro: Option details. (line 145)
+* cropmarks: Option details. (line 145)
+* current font, in PostScript: PostScript typesetting.
+ (line 35)
+* D config command (dpi): Configuration file commands.
+ (line 27)
+* dated output: PostScript hooks. (line 16)
+* datestamp, in output: Configuration file commands.
+ (line 33)
+* debugging <1>: Option details. (line 52)
+* debugging: Diagnosing problems. (line 6)
+* debugging options: Debug options. (line 6)
+* default resolutions: Configuration file commands.
+ (line 123)
+* default_texsizes Make variable: Configuration file commands.
+ (line 139)
+* Deutsch, Peter: Ghostscript installation.
+ (line 6)
+* device dependency, and virtual fonts: Configuration file commands.
+ (line 162)
+* dictionary, CharStrings: PostScript typesetting.
+ (line 51)
+* dictionary, PostScript language: PostScript typesetting.
+ (line 35)
+* dictionary, SDict: Literal headers. (line 6)
+* dictionary, userdict: Header files. (line 21)
+* distillation, and -z: Option details. (line 372)
+* distiller, for PDF files: Hypertext. (line 11)
+* dot accent: Reencoding with Afm2tfm.
+ (line 32)
+* double-sided printing: Option details. (line 37)
+* downloading fonts partially: psfonts.map. (line 17)
+* downloading PostScript fonts: psfonts.map. (line 6)
+* Doyle, Mark: Hypertext. (line 21)
+* draft copies: PostScript hooks. (line 16)
+* dual paper trays: Paper trays. (line 6)
+* duplex printers: Including headers from the command line.
+ (line 13)
+* DVI magnification: EPSF scaling. (line 63)
+* dvihps, hyperdvi to PostScript: Hypertext. (line 21)
+* Dvips configuration file options: Configuration file commands.
+ (line 6)
+* dvips.enc: Encodings. (line 35)
+* DVIPSFONTS: Environment variables.
+ (line 17)
+* DVIPSHEADERS: Environment variables.
+ (line 22)
+* DVIPSHEADERS, overrides H: Configuration file commands.
+ (line 47)
+* DVIPSMAKEPK: Environment variables.
+ (line 26)
+* DVIPSRC: Environment variables.
+ (line 32)
+* DVIPSSIZES: Environment variables.
+ (line 37)
+* DVIPSSIZES, overrides R: Configuration file commands.
+ (line 136)
+* dynamic creation of graphics: Dynamic creation of graphics.
+ (line 6)
+* e config command (maxdrift): Configuration file commands.
+ (line 30)
+* E config command (shell escape): Configuration file commands.
+ (line 33)
+* efficiency, and fonts: Making a font available.
+ (line 104)
+* ehandler.ps: No output. (line 12)
+* embedding Type 1 fonts: Hypertext caveats. (line 6)
+* encoding changes: Changing font encodings.
+ (line 6)
+* encoding file format: Encoding file format.
+ (line 6)
+* encoding files: Encodings. (line 27)
+* Encoding Type 1 dictionary: PostScript typesetting.
+ (line 43)
+* encoding vectors, defined: Encodings. (line 27)
+* encoding vectors, in Type 1 fonts: PostScript typesetting.
+ (line 43)
+* encodings: Encodings. (line 6)
+* end-hook: PostScript hooks. (line 11)
+* environment variables: Environment variables.
+ (line 6)
+* EOF: Option details. (line 110)
+* eop-hook: PostScript hooks. (line 11)
+* EPS, and Ghostview: Ghostscript installation.
+ (line 17)
+* EPSF macros: EPSF macros. (line 6)
+* EPSF, generating: Option details. (line 82)
+* epsf.sty: EPSF macros. (line 15)
+* epsf.tex: EPSF macros. (line 13)
+* Epson printers: Ghostscript installation.
+ (line 6)
+* error messages from printer: Printer errors. (line 6)
+* even pages only: Option details. (line 37)
+* examples of literal PostScript: Literal examples. (line 6)
+* expanded fonts <1>: psfonts.map. (line 32)
+* expanded fonts <2>: Afm2tfm options. (line 37)
+* expanded fonts: Special font effects.
+ (line 24)
+* expansion, of virtual fonts: Virtual fonts. (line 34)
+* extended URL: Hypertext specials. (line 20)
+* ExtendFont: Special font effects.
+ (line 28)
+* extra characters, accessing: Changing PostScript encodings.
+ (line 18)
+* F config command (filter): Configuration file commands.
+ (line 41)
+* f config command (filter): Configuration file commands.
+ (line 41)
+* failure, and printer errors: Printer errors. (line 6)
+* failure, of long documents: Long documents fail. (line 6)
+* failure, to include graphics: Including graphics fails.
+ (line 6)
+* failure, to print at all: No output. (line 6)
+* fallback resolutions: Configuration file commands.
+ (line 123)
+* figures and fonts: Fonts in figures. (line 6)
+* figures, natural size: EPSF macros. (line 38)
+* figures, scaling: EPSF scaling. (line 6)
+* filter, running as a: Option details. (line 98)
+* first page printed: Option details. (line 252)
+* font concepts: Font concepts. (line 6)
+* font generation, avoiding: Option details. (line 183)
+* fontinst: Invoking afm2tfm. (line 13)
+* fonts, as header files: Including headers from TeX.
+ (line 13)
+* fonts, changing encoding of: Changing font encodings.
+ (line 6)
+* fonts, downloading: psfonts.map. (line 6)
+* fonts, expanded: Special font effects.
+ (line 24)
+* fonts, in PostScript figures: Fonts in figures. (line 6)
+* fonts, installation of PostScript: PostScript font installation.
+ (line 6)
+* fonts, installing: Making a font available.
+ (line 6)
+* fonts, outlined: Special font effects.
+ (line 50)
+* fonts, slanted: Special font effects.
+ (line 6)
+* fonts, small caps: Special font effects.
+ (line 34)
+* fonts, system PostScript: PostScript font installation.
+ (line 24)
+* gf files: Glyph files. (line 41)
+* gftopk: Glyph files. (line 41)
+* Ghostscript installation: Ghostscript installation.
+ (line 6)
+* ghostview: Ghostscript installation.
+ (line 17)
+* Ghostview, and no N: Ghostscript installation.
+ (line 17)
+* glyph files: Glyph files. (line 6)
+* GLYPHFONTS, overrides P: Configuration file commands.
+ (line 110)
+* GNU Ghostscript: Ghostscript installation.
+ (line 13)
+* gnuplot: Dynamic creation of graphics.
+ (line 25)
+* graphics inclusion fails: Including graphics fails.
+ (line 6)
+* gs installation: Ghostscript installation.
+ (line 6)
+* gsave/grestore, and literal PS: Literal examples. (line 27)
+* gsftopk: Option details. (line 346)
+* h header downloading config command: Configuration file commands.
+ (line 44)
+* H header path config command: Configuration file commands.
+ (line 47)
+* Hafner, Jim: Color. (line 6)
+* header file, downloading: Option details. (line 121)
+* header files, defined: Header files. (line 6)
+* header path, defining: Configuration file commands.
+ (line 47)
+* header=FILE \special: Including headers from TeX.
+ (line 6)
+* headers and memory usage: Headers and memory usage.
+ (line 6)
+* headers, including from the command line: Including headers from the command line.
+ (line 6)
+* headers, including in TeX: Including headers from TeX.
+ (line 6)
+* hints: PostScript typesetting.
+ (line 55)
+* HP printers and Type 1 fonts: PostScript font installation.
+ (line 69)
+* HP4Si printer and paper trays: Paper trays. (line 6)
+* href: Hypertext specials. (line 32)
+* html specials: Hypertext. (line 6)
+* html specials, and -z: Option details. (line 372)
+* http://www.win.tue.nl/~dickie/idvi: Hypertext. (line 21)
+* http://xxx.lanl.gov/hypertex: Hypertext. (line 21)
+* Hungarian umlaut: Reencoding with Afm2tfm.
+ (line 32)
+* hyperdvi extensions, enabling: Option details. (line 372)
+* hypertext and bitmap fonts: Hypertext caveats. (line 6)
+* hypertext caveats: Hypertext caveats. (line 6)
+* hypertext specials: Hypertext specials. (line 6)
+* hypertext support: Hypertext. (line 6)
+* i config command (pages/section): Configuration file commands.
+ (line 51)
+* idvi Java DVI reader: Hypertext. (line 21)
+* Illustrator, workaround for: Including graphics fails.
+ (line 10)
+* img: Hypertext specials. (line 52)
+* including graphics fails: Including graphics fails.
+ (line 6)
+* including headers from the command line: Including headers from the command line.
+ (line 6)
+* including headers in TeX: Including headers from TeX.
+ (line 6)
+* installation of config.ps: config.ps installation.
+ (line 6)
+* installation of PostScript fonts: PostScript font installation.
+ (line 6)
+* installation, of Dvips: Installation. (line 6)
+* installing fonts: Making a font available.
+ (line 6)
+* interaction with PostScript: Interaction with PostScript.
+ (line 6)
+* inverted output: Small or inverted. (line 6)
+* invoking Dvips: Invoking Dvips. (line 6)
+* j config command (partial font downloading): Configuration file commands.
+ (line 55)
+* Java DVI reader: Hypertext. (line 21)
+* Jeffrey, Alan: Invoking afm2tfm. (line 13)
+* K config command (comment-removeal): Configuration file commands.
+ (line 59)
+* kerning, defined: Metric files. (line 15)
+* landscape orientation, defined: Paper size and landscape.
+ (line 11)
+* landscape papertype: Option details. (line 310)
+* landscape, as \special: papersize special. (line 16)
+* last page printed: Option details. (line 162)
+* last-resort font scaling, with DVIPSSIZES: Environment variables.
+ (line 38)
+* last-resort scaling, with R: Configuration file commands.
+ (line 123)
+* ledger papertype: Option details. (line 310)
+* legal papertype: Option details. (line 310)
+* letter papertype: Option details. (line 310)
+* letterhead tray: Paper trays. (line 10)
+* ligature operations: Encoding file format.
+ (line 54)
+* ligature, defined: Metric files. (line 15)
+* LIGKERN encoding file command: Encoding file format.
+ (line 37)
+* lines in figures, wrong width: EPSF clipping. (line 6)
+* links, hypertext: Hypertext specials. (line 33)
+* literal headers: Literal headers. (line 6)
+* literal PostScript, examples: Literal examples. (line 6)
+* literal PostScript, using: Literal PS. (line 6)
+* long documents not printing: Long documents fail. (line 6)
+* low characters, shifting: Option details. (line 117)
+* lpr spooler, MS-DOS emulation: Option details. (line 222)
+* Lucida, installing: PostScript font installation.
+ (line 10)
+* m config command (available memory): Configuration file commands.
+ (line 63)
+* M config command (mf mode): Configuration file commands.
+ (line 82)
+* macros for color: Color macro files. (line 6)
+* macros for epsf inclusion <1>: EPSF macros. (line 6)
+* macros for epsf inclusion: \includegraphics. (line 6)
+* magnification, DVI: EPSF scaling. (line 63)
+* magnification, overriding DVI: Option details. (line 354)
+* magnification, vertical: Option details. (line 365)
+* mailcap and hypertext: Hypertext specials. (line 53)
+* manual feed: Option details. (line 171)
+* maxdrift: Option details. (line 71)
+* maximum pages printed: Option details. (line 194)
+* media: Option details. (line 310)
+* memory available: Configuration file commands.
+ (line 63)
+* memory of printer exhausted: Printer errors. (line 14)
+* memory usage, and headers: Headers and memory usage.
+ (line 6)
+* memory, conserving: Option details. (line 21)
+* memory, used by PostScript fonts: Making a font available.
+ (line 104)
+* Metafont ligature operations: Encoding file format.
+ (line 54)
+* Metafont mode, specifying: Option details. (line 174)
+* Metafont source files: Glyph files. (line 30)
+* metric files: Metric files. (line 6)
+* Minion typeface family: psfonts.map. (line 27)
+* missfont.log: Option details. (line 183)
+* MISSFONT_LOG: Option details. (line 186)
+* Mitsubishi Shinko CHC-S446i printer: No output. (line 14)
+* mkdvipspapers: Config file paper sizes.
+ (line 69)
+* mktexpk, avoiding: Option details. (line 183)
+* mktexpk, changing name: Environment variables.
+ (line 27)
+* mode name, specifying: Option details. (line 174)
+* Monotype fonts: PostScript font installation.
+ (line 10)
+* Monotype fonts, installing: PostScript font installation.
+ (line 19)
+* mtpk: Option details. (line 346)
+* multiple master fonts: psfonts.map. (line 27)
+* multiple output files: Option details. (line 126)
+* multiple paper trays: Paper trays. (line 6)
+* Murphy, Tim: Hypertext specials. (line 20)
+* N EPS-disabling config command: Configuration file commands.
+ (line 85)
+* name: Hypertext specials. (line 41)
+* narrow fonts: psfonts.map. (line 32)
+* no output at all: No output. (line 6)
+* non-printing characters, shifting: Option details. (line 117)
+* non-resident fonts: psfonts.map. (line 6)
+* O config command (offset): Configuration file commands.
+ (line 98)
+* o config command (output file): Configuration file commands.
+ (line 90)
+* oblique fonts: Special font effects.
+ (line 6)
+* octal character codes: Afm2tfm options. (line 41)
+* odd pages only: Option details. (line 27)
+* offset pages: Option details. (line 234)
+* Omega extensions: Option details. (line 205)
+* option, details of: Option details. (line 6)
+* options, debugging: Debug options. (line 6)
+* options, Dvips: Invoking Dvips. (line 6)
+* options, reading from standard input: Option details. (line 11)
+* options, summary: Option summary. (line 6)
+* options, to Afm2tfm: Afm2tfm options. (line 6)
+* outline fonts <1>: Special font effects.
+ (line 50)
+* outline fonts: Glyph files. (line 17)
+* output file, sectioning of: Headers and memory usage.
+ (line 6)
+* output file, setting: Configuration file commands.
+ (line 90)
+* output files, multiple: Option details. (line 126)
+* output, inverted: Small or inverted. (line 6)
+* output, none: No output. (line 6)
+* output, redirecting: Option details. (line 218)
+* output, too small: Small or inverted. (line 6)
+* p config command (font aliases): Configuration file commands.
+ (line 101)
+* P config command (PK path): Configuration file commands.
+ (line 110)
+* page range: Option details. (line 261)
+* page, first printed: Option details. (line 252)
+* page, last printed: Option details. (line 162)
+* pages, maximum printed: Option details. (line 194)
+* PaintType: Special font effects.
+ (line 50)
+* Pantone colors: Color macro files. (line 16)
+* paper size configuration file command: Config file paper sizes.
+ (line 6)
+* paper size, default: config.ps installation.
+ (line 6)
+* paper size, general: Paper size and landscape.
+ (line 6)
+* paper trays: Paper trays. (line 6)
+* paper type: Option details. (line 310)
+* papersize special: papersize special. (line 6)
+* papersize special, and no -t: Option details. (line 310)
+* partial font downloading: psfonts.map. (line 17)
+* PDF files, font quality: Hypertext caveats. (line 6)
+* PDF files, making <1>: Hypertext. (line 11)
+* PDF files, making: Ghostscript installation.
+ (line 6)
+* PDF files, option for: Option details. (line 372)
+* pdfmark: Hypertext. (line 6)
+* pfa files: Glyph files. (line 25)
+* pfb files: Glyph files. (line 25)
+* pfb files, automatically unpacked: psfonts.map. (line 62)
+* pfm files: Metric files. (line 49)
+* Phaser printer, used for color calibration: Color device configuration.
+ (line 18)
+* physical page number, and -l: Option details. (line 162)
+* physical page number, and -p: Option details. (line 252)
+* physical page number, and bop-hook: PostScript hooks. (line 26)
+* pipes, not readable: Option details. (line 98)
+* pk files: Glyph files. (line 35)
+* PKFONTS, overrides P: Configuration file commands.
+ (line 110)
+* plotfile, ps subspecial: ps special. (line 25)
+* pltotf: Metric files. (line 39)
+* popen for output: Option details. (line 222)
+* positioning accuracy: Option details. (line 71)
+* post code after headers: Including headers from TeX.
+ (line 28)
+* PostScript code, literal: Literal PS. (line 6)
+* PostScript encoding: Encodings. (line 27)
+* PostScript encoding, changing: Changing PostScript encodings.
+ (line 6)
+* PostScript font alias file <1>: Configuration file commands.
+ (line 101)
+* PostScript font alias file: Option details. (line 326)
+* PostScript fonts: PostScript fonts. (line 6)
+* PostScript fonts, installing: PostScript font installation.
+ (line 6)
+* PostScript fonts, on your system: PostScript font installation.
+ (line 24)
+* PostScript header files: Header files. (line 6)
+* PostScript hooks: PostScript hooks. (line 6)
+* PostScript interaction: Interaction with PostScript.
+ (line 6)
+* PostScript previewers: Ghostscript installation.
+ (line 6)
+* PostScript units: Bounding box. (line 11)
+* PowerPage PostScript implementation: No output. (line 14)
+* pre code before headers: Including headers from TeX.
+ (line 28)
+* previewing Dvips output: Ghostscript installation.
+ (line 6)
+* PRINTER: Environment variables.
+ (line 41)
+* printer configuration: config.ps installation.
+ (line 6)
+* printer configuration file, prototype: config.ps installation.
+ (line 15)
+* printer errors: Printer errors. (line 6)
+* printer memory: Configuration file commands.
+ (line 63)
+* printer memory exhausted: Printer errors. (line 14)
+* printer offset: Option details. (line 234)
+* PRINTER, and config file searching: Configuration file searching.
+ (line 36)
+* PRINTER, avoided with -f: Option details. (line 98)
+* printer, driving directly: Option details. (line 110)
+* problems: Diagnosing problems. (line 6)
+* property list files: Metric files. (line 39)
+* prototype printer configuration file: config.ps installation.
+ (line 15)
+* ps special: ps special. (line 6)
+* psfile special: psfile special. (line 6)
+* psfonts.map <1>: psfonts.map. (line 6)
+* psfonts.map <2>: Special font effects.
+ (line 19)
+* psfonts.map: PostScript font installation.
+ (line 24)
+* psheaderdir: Header files. (line 12)
+* psi character missing: Hypertext caveats. (line 55)
+* pstopk: Option details. (line 346)
+* Q config command (quiet): Configuration file commands.
+ (line 117)
+* q config command (quiet): Configuration file commands.
+ (line 117)
+* quiet operation: Option details. (line 285)
+* r config command (page reversal): Configuration file commands.
+ (line 120)
+* R fallback resolution config command: Configuration file commands.
+ (line 123)
+* reencode/*.enc: Encodings. (line 35)
+* reencoding: Reencoding with Afm2tfm.
+ (line 6)
+* reencoding PostScript fonts: psfonts.map. (line 37)
+* registered character, accessing: Changing PostScript encodings.
+ (line 18)
+* remapping: Reencoding with Afm2tfm.
+ (line 6)
+* resident fonts, different in different printers <1>: Configuration file commands.
+ (line 101)
+* resident fonts, different in different printers: Option details.
+ (line 326)
+* resolution: Option details. (line 362)
+* resolution, setting: Option details. (line 58)
+* reverse pagination: Option details. (line 289)
+* Rokicki, Tomas: Why Dvips. (line 68)
+* rotate.tex: ps special. (line 29)
+* S config command (pict path): Configuration file commands.
+ (line 148)
+* s config command (save/restore): Configuration file commands.
+ (line 145)
+* save/restore, and inverted output: Small or inverted. (line 6)
+* save/restore, and literal PS: Literal examples. (line 27)
+* save/restore, and specials: ps special. (line 6)
+* save/restore, generating global: Option details. (line 298)
+* scaleunit: psfile special. (line 55)
+* scaling of figures: EPSF scaling. (line 6)
+* scaling small caps: Afm2tfm options. (line 33)
+* Scandinavian A ring: Reencoding with Afm2tfm.
+ (line 32)
+* screen frequencies, setting: Including headers from the command line.
+ (line 13)
+* SDict: psfile special. (line 55)
+* SDict dictionary: Literal headers. (line 6)
+* searching config files, order of: Configuration file searching.
+ (line 6)
+* sections of output file, and memory: Headers and memory usage.
+ (line 6)
+* sections output, in separate files: Option details. (line 126)
+* security: Option details. (line 292)
+* shell command execution, disabling: Option details. (line 292)
+* shell escape, in config file: Configuration file commands.
+ (line 33)
+* Shinko CHC-S446i printer: No output. (line 14)
+* show PostScript operator: PostScript typesetting.
+ (line 23)
+* silent operation: Option details. (line 285)
+* simplex mode on duplex printers: Including headers from the command line.
+ (line 13)
+* slanted fonts: Special font effects.
+ (line 6)
+* slanted fonts, making: Afm2tfm options. (line 51)
+* SlantFont: Special font effects.
+ (line 17)
+* small caps fonts: Special font effects.
+ (line 34)
+* Smith, Arthur: Hypertext specials. (line 6)
+* Softkey fonts: PostScript font installation.
+ (line 10)
+* Softkey fonts, installing: PostScript font installation.
+ (line 19)
+* spaces, dropped trailing: Hypertext caveats. (line 55)
+* specials, hypertext: Hypertext specials. (line 6)
+* splines: Glyph files. (line 17)
+* spooler, lacking: Option details. (line 110)
+* spooling to lpr on MS-DOS: Option details. (line 222)
+* standard I/O: Option details. (line 98)
+* standard input, reading options from: Option details. (line 11)
+* standard output, output to: Option details. (line 218)
+* standard PostScript, required by Ghostview: Ghostscript installation.
+ (line 17)
+* start-hook: PostScript hooks. (line 11)
+* structured comments: Option details. (line 197)
+* system in config file: Configuration file commands.
+ (line 33)
+* T config command (TFM path): Configuration file commands.
+ (line 153)
+* Tektronix Phaser printer, used for color calibration: Color device configuration.
+ (line 18)
+* testpage.tex: Option details. (line 241)
+* TeX encoding, changing: Changing TeX encodings.
+ (line 6)
+* TeX, including headers in: Including headers from TeX.
+ (line 6)
+* TEXCONFIG: Environment variables.
+ (line 46)
+* TEXFONTS, overrides P: Configuration file commands.
+ (line 110)
+* TEXFONTS, overrides T: Configuration file commands.
+ (line 153)
+* TEXINPUTS, overrides S: Configuration file commands.
+ (line 148)
+* texmext.enc: Encodings. (line 35)
+* TEXMFOUTPUT: Option details. (line 186)
+* texmital.enc: Encodings. (line 35)
+* texmsym.enc <1>: Changing TeX encodings.
+ (line 16)
+* texmsym.enc: Encodings. (line 35)
+* TEXPICTS: Environment variables.
+ (line 53)
+* TEXPICTS, overrides S: Configuration file commands.
+ (line 148)
+* TEXPKS, overrides P: Configuration file commands.
+ (line 110)
+* TEXSIZES, overrides R: Configuration file commands.
+ (line 136)
+* text in figures, chopped off: EPSF clipping. (line 6)
+* tfm files: Metric files. (line 31)
+* TFMFONTS, overrides T: Configuration file commands.
+ (line 153)
+* tftopl: Metric files. (line 39)
+* Theisen, Tim: Ghostscript installation.
+ (line 17)
+* tight bounding box, finding: Option details. (line 82)
+* too-small output: Small or inverted. (line 6)
+* trademark character, accessing: Changing PostScript encodings.
+ (line 18)
+* trailing spaces, dropped: Hypertext caveats. (line 55)
+* TranScript: Option details. (line 197)
+* transforming downloaded fonts: psfonts.map. (line 32)
+* trouble: Diagnosing problems. (line 6)
+* Type 1 fonts: Glyph files. (line 25)
+* typesetting in PostScript: PostScript typesetting.
+ (line 6)
+* U config command (Xerox 4045): Configuration file commands.
+ (line 158)
+* uncollated copies: Option details. (line 41)
+* uncompressing PostScript: Dynamic creation of graphics.
+ (line 6)
+* uniform resource locator: Hypertext specials. (line 20)
+* URL, definition: Hypertext specials. (line 27)
+* URL, extended for TeX: Hypertext specials. (line 20)
+* user-definable colors: User-definable colors.
+ (line 6)
+* userdict, and dictionary files: Header files. (line 21)
+* userdict, used for header files: Option details. (line 121)
+* V config command (vf path): Configuration file commands.
+ (line 162)
+* verbose EPSF processing: EPSF macros. (line 46)
+* vf files: Virtual fonts. (line 16)
+* virtual font expansion: Virtual fonts. (line 34)
+* virtual font path: Configuration file commands.
+ (line 162)
+* virtual fonts: Virtual fonts. (line 6)
+* virtual fonts, creating: Invoking afm2tfm. (line 13)
+* VM exhausted: Printer errors. (line 14)
+* VMusage: Headers and memory usage.
+ (line 12)
+* vpl files: Virtual fonts. (line 16)
+* vptovf: Making a font available.
+ (line 52)
+* W config command (warning): Configuration file commands.
+ (line 167)
+* warning messages, defining: Configuration file commands.
+ (line 167)
+* warnings, suppressing: Option details. (line 285)
+* whole font downloading: psfonts.map. (line 27)
+* wide fonts: psfonts.map. (line 32)
+* X config command (horizontal resolution): Configuration file commands.
+ (line 174)
+* Xerox 4045: Option details. (line 334)
+* Y config command (vertical resolution): Configuration file commands.
+ (line 177)
+* Y&Y fonts, installing: PostScript font installation.
+ (line 19)
+* Z config command (compression): Configuration file commands.
+ (line 180)
+* z config command (secure mode): Configuration file commands.
+ (line 183)
+* | starting output filename: Option details. (line 222)
+
+
+
+Tag Table:
+Node: Top465
+Node: Why Dvips1155
+Node: Installation4603
+Node: config.ps installation5741
+Node: PostScript font installation8282
+Node: Ghostscript installation11156
+Node: Diagnosing problems12253
+Node: Debug options13122
+Node: No output14238
+Node: Small or inverted15706
+Node: Printer errors16425
+Node: Long documents fail17757
+Node: Including graphics fails18098
+Node: Invoking Dvips19336
+Node: Basic usage19927
+Node: Command-line options20911
+Node: Option summary21360
+Node: Option details23336
+Node: Environment variables41418
+Node: Config files43921
+Node: Configuration file searching44604
+Node: Configuration file commands47904
+Node: Paper size and landscape54941
+Node: papersize special56518
+Node: Config file paper sizes57632
+Node: Paper trays61765
+Node: Interaction with PostScript63099
+Node: PostScript figures63752
+Node: Bounding box64478
+Node: \includegraphics67849
+Node: EPSF macros70140
+Node: EPSF scaling72110
+Node: EPSF clipping74680
+Node: psfile special75322
+Node: Dynamic creation of graphics77242
+Node: Fonts in figures78560
+Node: Header files80220
+Node: Including headers from TeX81426
+Node: Including headers from the command line83460
+Node: Headers and memory usage84560
+Node: Literal PS85270
+Node: " special85852
+Node: ps special86593
+Node: Literal headers87901
+Node: PostScript hooks88616
+Node: Literal examples90706
+Node: Hypertext92158
+Node: Hypertext caveats93716
+Node: Hypertext specials98113
+Node: PostScript fonts100747
+Node: Font concepts101863
+Node: Metric files103030
+Node: Glyph files105856
+Node: Virtual fonts108212
+Node: Encodings110102
+Node: PostScript typesetting112484
+Node: Making a font available115566
+Node: Invoking afm2tfm120596
+Node: Changing font encodings121566
+Node: Changing TeX encodings122357
+Node: Changing PostScript encodings123457
+Node: Changing both encodings124801
+Node: Reencoding with Afm2tfm125474
+Node: Encoding file format128578
+Node: Special font effects132781
+Node: Afm2tfm options135044
+Node: psfonts.map138029
+Node: Color142753
+Node: Color macro files143797
+Node: User-definable colors146995
+Node: Color subtleties148270
+Node: Ted Turner149921
+Node: Color device configuration151146
+Node: Color support details153588
+Node: Color specifications153966
+Node: Color specials155369
+Node: Index157498
+
+End Tag Table
diff --git a/Build/source/texk/dvipsk/dvips.rc b/Build/source/texk/dvipsk/dvips.rc
new file mode 100644
index 00000000000..edbbea56afd
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.rc
@@ -0,0 +1,94 @@
+/* dvips.rc: dvips resources -*- C++ -*-
+
+ Copyright (C) 1996-2003 Fabrice Popineau <fabrice.popineau@supelec.fr>
+
+ This file is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this file; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+
+#include <texlive-version.h>
+
+#define VER_FILEVERSION TEXLIVE_MAJOR_VERSION,TEXLIVE_MINOR_VERSION,TEXLIVE_BETA_NUMBER,TEXLIVE_ALPHA_NUMBER
+
+#ifdef Omega
+#define VER_INTERNALNAME_STR "odvips"
+#define VER_ORIGINALFILENAME_STR "odvips.exe"
+#define VER_FILEVERSION_STR TEXLIVE_PRODUCTVERSION_STR " odvips(k) 5.94b"
+#define VER_FILEDESCRIPTION_STR "Omega DVI-to-PostScript Converter"
+#else
+#define VER_INTERNALNAME_STR "dvips"
+#define VER_ORIGINALFILENAME_STR "dvips.exe"
+#define VER_FILEVERSION_STR TEXLIVE_PRODUCTVERSION_STR " dvips(k) 5.94b"
+#define VER_FILEDESCRIPTION_STR "DVI-to-PostScript Converter"
+#endif
+
+#define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2004 Radical Eye Software"
+
+// RadicalEye ICON
+// BEGIN
+// '00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+// '00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+// '00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
+// '00 00 80 00 80 00 80 80 00 00 80 80 80 00 40 40'
+// '40 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+// '00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 09 99 99 99 99 90 00 00 00 00 00 00 00'
+// '00 00 99 9F FF FF FF FF F9 99 00 00 00 00 00 00'
+// '09 99 FF FF FF FF FF FF FF FF 99 90 00 00 00 00'
+// '9F FF FF FF FF FF FF FF FF FF FF F9 00 00 00 09'
+// 'FF FF 0F FF FF FF 99 FF FF FF FF FF 90 00 00 9F'
+// 'FF F0 F0 FF FF FF 99 FF FF FF FF FF F9 00 09 FF'
+// 'FF 0F F0 FF FF FF 99 FF FF FF FF FF FF 90 9F FF'
+// 'FF FF FF 0F FF FF 99 FF FF FF FF FF FF F9 9F FF'
+// 'FF FF FF 0F FF FF 99 FF FF FF FF FF FF F9 09 FF'
+// 'FF FF FF F0 FF FF FF FF FF FF FF FF FF 90 00 9F'
+// 'FF FF FF F0 FF FF 99 FF FF FF FF FF F9 00 00 09'
+// 'FF FF FF FF 0F FF FF FF FF FF FF FF 90 00 00 00'
+// '9F FF FF FF 00 00 00 00 00 FF FF F9 00 00 00 00'
+// '09 99 FF FF FF FF FF FF FF FF 99 90 00 00 00 00'
+// '00 00 99 9F FF FF FF FF F9 99 00 00 00 00 00 00'
+// '00 00 00 09 99 99 99 99 90 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+// '00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF'
+// 'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF E0'
+// '07 FF FF 00 00 FF F8 00 00 1F F0 00 00 0F E0 00'
+// '00 07 C0 00 00 03 80 00 00 01 00 00 00 00 00 00'
+// '00 00 80 00 00 01 C0 00 00 03 E0 00 00 07 F0 00'
+// '00 0F F8 00 00 1F FF 00 00 FF FF E0 07 FF FF FF'
+// 'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+// 'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+// 'FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+// END
+
+
+#include <texlive.version>
+
+/* dvips.rc ends here */
diff --git a/Build/source/texk/dvipsk/dvips.texi b/Build/source/texk/dvipsk/dvips.texi
new file mode 100644
index 00000000000..5fa83f17765
--- /dev/null
+++ b/Build/source/texk/dvipsk/dvips.texi
@@ -0,0 +1,4593 @@
+\input texinfo
+@setfilename dvips.info
+@settitle Dvips: A DVI driver
+
+@set version 5.95b
+@set month-year August 2005
+
+@copying
+This manual documents Dvips version @value{version}
+(@value{month-year}), a program to translate a DVI file into
+PostScript.
+@end copying
+
+@c Define a new index for filenames and options.
+@defcodeindex fl
+@defcodeindex op
+
+@c Put everything in one index (arbitrarily chosen to be the concept index).
+@syncodeindex fl cp
+@syncodeindex fn cp
+@syncodeindex ky cp
+@syncodeindex op cp
+@syncodeindex pg cp
+@syncodeindex vr cp
+
+@ifclear INSTALLONLY
+
+@dircategory TeX
+@direntry
+* DVI-to-Postscript: (dvips). Translating TeX DVI files to PostScript.
+* afm2tfm: (dvips)Invoking afm2tfm. Making Type 1 fonts available to TeX.
+* dvips: (dvips)Invoking Dvips. DVI-to-PostScript translator.
+@end direntry
+
+@titlepage
+@title Dvips: A DVI-to-PostScript Translator
+@subtitle for version @value{version}
+@subtitle @value{month-year}
+@author Tomas Rokicki
+
+@page
+@insertcopying
+@vskip 0pt plus 1filll
+@end titlepage
+
+@ifnottex
+@node Top
+@top Dvips
+
+@insertcopying
+
+@menu
+* Why Dvips:: Why use Dvips?
+* Installation:: How to compile and install Dvips.
+* Invoking Dvips:: Command-line options, configuration files, etc.
+* Paper size and landscape:: Changing the paper dimensions.
+* Interaction with PostScript:: TeX meets Dvips meets PostScript.
+* PostScript fonts:: Installing and using PostScript fonts.
+* Color:: Using color with Dvips.
+* Index:: General index.
+@end menu
+@end ifnottex
+
+
+@node Why Dvips
+@chapter Why use Dvips?
+
+The Dvips program has a number of features that set it apart from
+other PostScript drivers for @TeX{}. This rather long section describes
+the advantages of using Dvips, and may be skipped if you are just
+interested in learning how to use the program. @xref{Installation}, for
+details of compilation and installation.
+
+The Dvips driver generates excellent, standard PostScript, that
+can be included in other documents as figures or printed through a
+variety of spoolers. The generated PostScript requires very little
+printer memory, so very complex documents with a lot of fonts can easily
+be printed even on PostScript printers without much memory, such as the
+original Apple LaserWriter. The PostScript output is also compact,
+requiring less disk space to store and making it feasible as a transfer
+format.
+
+Even those documents that are too complex to print in their entirety on
+a particular printer can be printed, since Dvips will
+automatically split such documents into pieces, reclaiming the printer
+memory between each piece.
+
+The Dvips program supports graphics in a natural way, allowing
+PostScript graphics to be included and automatically scaled and
+positioned in a variety of ways.
+
+Printers with any resolution are supported, even if they have different
+resolutions in the horizontal and vertical directions. High resolution
+output is supported for typesetters, including an option that compresses
+the bitmap fonts so that typesetter virtual memory is not exhausted.
+This option also significantly reduces the size of the PostScript file
+and decoding in the printer is very fast.
+
+Missing fonts can be automatically generated if Metafont exists on
+the system, or fonts can be converted from GF to PK format
+on demand. If a font cannot be generated, a scaled version of the same
+font at a different size can be used instead, although Dvips will
+complain loudly about the poor aesthetics of the resulting output.
+
+Users will appreciate features such as collated copies and support for
+@file{tpic}, @file{psfig}, @file{emtex}, and @file{METAPOST}; system
+administrators will love the support for multiple printers, each with
+their own configuration file, and the ability to pipe the output
+directly to a program such as @file{lpr}. Support for MS-DOS, OS/2, and
+VMS in addition to Unix is provided in the standard distribution, and
+porting to other systems is easy.
+
+One of the most important features is the support of virtual fonts,
+which add an entirely new level of flexibility to @TeX{}. Virtual fonts
+are used to give Dvips its excellent PostScript font support, handling
+all the font remapping in a natural, portable, elegant, and extensible
+way. Dvips even comes with its own Afm2tfm program that creates
+the necessary virtual fonts and @TeX{} font metric files automatically
+from the Adobe font metric files.
+
+Source is provided and freely distributable, so adding a site-specific feature
+is possible. Adding such features is made easier by the highly modular
+structure of the program.
+
+There is really no reason to use another driver, and the more people use
+Dvips, the less time will be spent fighting with PostScript and the
+more time will be available to create beautiful documents.
+So if you don't use Dvips on your system, get it today.
+
+@cindex Rokicki, Tomas
+Tom Rokicki wrote and maintains the original Dvips program.
+
+@end ifclear
+@c INSTALLONLY
+
+
+@node Installation
+@chapter Installation
+
+@cindex configuration, of Dvips
+@cindex compilation
+@cindex installation, of Dvips
+
+@ifset version
+(A copy of this chapter is in the distribution file @file{dvipsk/INSTALL}.)
+@end ifset
+
+Installing Dvips is mostly the same as installing any Kpathsea-using
+program. Therefore, for the basic steps involved,
+@pxref{Installation,,, kpathsea, Kpathsea}. (A copy is in the file
+@file{kpathsea/INSTALL}.)
+
+For solutions to common installation problems and information on how to
+report a bug, see the file @file{kpathsea/BUGS} (@pxref{Bugs,,,
+kpathsea, Kpathsea}). For solutions to Dvips-specific problems,
+@pxref{Debug options}. Also see the Dvips home page at
+@url{http://www.radicaleye.com/dvips}.
+
+Dvips does require some additional installation, detailed in the
+sections below. Also, to configure color devices, @pxref{Color device
+configuration}.
+
+@menu
+* config.ps installation:: Printer and site Dvips configuration.
+* PostScript font installation:: Many PostScript fonts are freely available.
+* Ghostscript installation:: A free PostScript interpreter.
+* Diagnosing problems:: Some common runtime difficulties.
+@end menu
+
+
+@node config.ps installation
+@section @file{config.ps} installation
+
+@flindex config.ps @r{installation}
+@cindex installation of @file{config.ps}
+@cindex printer configuration
+@cindex paper size, default
+@cindex configuration files, creating
+
+Dvips has its own configuration files: a file @file{config.ps} for
+sitewide defaults, and a file @file{config.@var{printer}} for each
+printer (output device). Since these are site-specific, @code{make
+install} does not create them; you must create them yourself.
+
+(These Dvips configuration files are independent of the Kpathsea
+onfiguration file @file{texmf.cnf} (@pxref{Config files,,,kpathsea,
+Kpathsea}).
+
+@flindex config.proto
+@cindex prototype printer configuration file
+@cindex printer configuration file, prototype
+@cindex configuration files, prototype
+Dvips configuration files contents and searching are described fully in
+@ref{Config files}. The simplest way to create a new configuration file
+is to copy and modify the file @file{dvipsk/contrib/config.proto},
+seasoning with options to your taste from @ref{Config files}. Here is
+@file{config.proto}
+for your reading pleasure:
+@example
+@include contrib/config.proto
+@end example
+
+
+@node PostScript font installation
+@section PostScript font installation
+
+@cindex installation of PostScript fonts
+@cindex fonts, installation of PostScript
+@cindex PostScript fonts, installing
+
+To use PostScript fonts with @TeX{} and Dvips, you need both metric
+files (@file{.tfm} and @file{.vf}) and the outlines (@file{.pfa} or
+@file{.pfb}). @xref{Font concepts}.
+
+@cindex Adobe fonts
+@cindex Bigelow & Holmes fonts
+@cindex Lucida, installing
+@cindex Monotype fonts
+@cindex Softkey fonts
+To support the basic PostScript font set, the recommended (and
+simplest) approach is to install the files at
+@url{http://www.ctan.org/tex-archive/fonts/psfonts/lw35nfsx.zip}.
+This archive contains metrics, outlines, and bitmaps (for previewing)
+for the 35 de facto standard fonts donated by URW and the additional
+high-quality freely available PostScript fonts donated by Adobe,
+Bitstream, and URW, including geometrically-created variants such as
+oblique and small caps.
+
+@cindex Adobe fonts, installing
+@cindex Bitstream fonts, installing
+@cindex Monotype fonts, installing
+@cindex Softkey fonts, installing
+@cindex Y&Y fonts, installing
+@file{@var{CTAN:}/fonts/psfonts} contains support for many additional
+fonts for which you must buy outlines (Adobe, Bigelow & Holmes,
+Monotype, Softkey, Y&Y). (For CTAN info, @pxref{unixtex.ftp,,, kpathsea,
+Kpathsea}; a copy is in the top-level file @file{INSTALL}.)
+
+@cindex fonts, system PostScript
+@cindex PostScript fonts, on your system
+@flindex psfonts.map
+If you have additional PostScript fonts, you can make them available to
+Dvips by (1) giving them with appropriate filenames; and (2) running
+Afm2tfm (@pxref{Making a font available}) to make TFM and VF metrics for
+@TeX{} and Dvips to use. Also add them to @file{psfonts.map} if
+necessary (@pxref{psfonts.map}); it contains everything contained in
+@file{lw35nfsx.zip} and most fonts that come with Unix systems.
+
+Following are locations for vendor-supplied fonts. Please mail
+@email{tex-k@@tug.org} if you find fonts elsewhere on your system.
+
+@table @asis
+@item DEC Ultrix
+@t{/usr/lib/DPS/outline/decwin}
+
+@item DEC Digital Unix
+@t{/usr/lib/X11/fonts/Type1Adobe}
+
+@item HP HP-UX 9, 10
+@t{/usr/lib/X11/fonts/type1.st/typefaces}
+
+@item IBM AIX
+@t{/usr/lpp/DPS/fonts/outlines}@*
+@t{/usr/lpp/X11/lib/X11/fonts/Type1}@*
+@t{/usr/lpp/X11/lib/X11/fonts/Type1/DPS}
+
+@item NeXT
+@t{/NextLibrary/Fonts/outline}
+
+@item SGI IRIX
+@t{/usr/lib/DPS/outline/base}
+@t{/usr/lib/X11/fonts/Type1}
+
+@item Sun SunOS 4.x
+(NeWSprint only)@*
+@t{newsprint_2.5/SUNWsteNP/reloc/$BASEDIR/}@*
+@t{ NeWSprint/small_openwin/lib/fonts}@*
+@t{/usr/openwin/lib/X11/fonts/Type1/outline}
+
+@item Sun Solaris 2
+@t{/usr/openwin/lib/X11/fonts/Type1/outline}
+
+@item VMS
+@t{SYS$COMMON:[SYSFONT.XDPS.OUTLINE]}
+@end table
+
+@noindent The NeXT system supplies more fonts than any others, but
+there's a lot of overlap.
+
+@cindex HP printers and Type 1 fonts
+Finally, if you have an Hewlett-Packard printer, you should be able to
+get Type 1 font files for the standard 35 fonts from HP, if the freely
+available URW Type 1's do not satisfy for whatever reason. The phone
+number for HP Printer Drivers is (in the United States) 303-339-7009.
+The driver set to ask for is Adobe Type Manager 2.51, and the disk set
+number is @samp{MP210en3}. Mentioning anything other than Microsoft
+Windows when you ask for the driver set will likely lead to great
+confusion on the other end.
+
+
+@node Ghostscript installation
+@section Ghostscript installation
+
+@cindex Ghostscript installation
+@pindex gs @r{installation}
+
+@cindex Deutsch, Peter
+@cindex Epson printers
+@cindex previewing Dvips output
+@cindex PostScript previewers
+@cindex PDF files, making
+@cindex Aladdin Ghostscript
+Ghostscript is a PostScript interpreter freely available to end-users,
+written by Peter Deutsch. It can read the PostScript produced by Dvips
+and render it on your monitor, or for another device (e.g., an Epson
+printer) that does not support PostScript, or in PDF format. The latest
+version is available via @url{http://www.cs.wisc.edu/~ghost/index.html}
+and @url{ftp://ftp.cs.wisc.edu/pub/ghost/aladdin/}.
+
+@cindex GNU Ghostscript
+A somewhat older version of Ghostscript is available under the GNU
+General Public License, free to everyone. You can get that from
+@url{ftp://prep.ai.mit.edu/pub/gnu/}.
+
+@cindex Theisen, Tim
+@pindex ghostview
+@cindex Ghostview, and no @samp{N}
+@cindex EPS, and Ghostview
+@cindex standard PostScript, required by Ghostview
+@findex %%Page@r{, required by Ghostview}
+The program Ghostview, written by Tim Theisen, provides typical
+previewing capabilities (next page/previous page, magnification, etc.).
+It requires Ghostscript to run, and files in structured Postscript,
+specifically with @samp{%%Page} comments (no @samp{N} in
+@file{config.ps}). You can get Ghostview from the same places as
+Ghostscript.
+
+
+@node Diagnosing problems
+@section Diagnosing problems
+
+@cindex problems
+@cindex trouble
+@cindex debugging
+
+You've gone through all the trouble of installing Dvips, carefully read
+all the instructions in this manual, and still can't get something to
+work. The following sections provide some helpful hints if you find
+yourself in such a situation.
+
+For details on effective bug reporting, common installation problems,
+and @code{mktexpk} problems, @pxref{Bugs,,, kpathsea, Kpathsea}.
+
+@menu
+* Debug options:: Getting diagnostics.
+* No output:: No output at all.
+* Small or inverted:: Output too small or inverted.
+* Printer errors:: The printer sends back errors.
+* Long documents fail:: Long documents fail to print.
+* Including graphics fails:: Figures don't work.
+@end menu
+
+
+@node Debug options
+@subsection Debug options
+
+@cindex debugging options
+@cindex options, debugging
+
+The @samp{-d} flag to Dvips helps in tracking down certain errors. The
+parameter to this flag is an integer that tells what errors are
+currently being tracked. To track a certain class of debug messages,
+simply provide the appropriate number given below; if you wish to track
+multiple classes, sum the numbers of the classes you wish to track. To
+track all classes, you can use @code{-1}. Another useful value is
+@code{3650}, which tracks everything having to do with file searching
+and opening.
+
+Some of these debugging options are actually provided by Kpathsea
+(@pxref{Debugging, , , kpathsea, Kpathsea}).
+
+The classes are:
+@table @asis
+@item 1
+specials
+@item 2
+paths
+@item 4
+fonts
+@item 8
+pages
+@item 16
+headers
+@item 32
+font compression
+@item 64
+files
+@item 128
+config files
+@item 256
+Partial Type 1 font encoding vectors
+@item 512
+Partial Type 1 subr calls
+@item 1024
+Kpathsea @code{stat} calls
+@item 2048
+Kpathsea hash table lookups
+@item 4096
+Kpathsea path element expansion
+@item 8192
+Kpathsea path searches
+@end table
+
+
+@node No output
+@subsection No output at all
+
+@cindex output, none
+@cindex no output at all
+@cindex failure, to print at all
+
+If you are not getting any output at all, even from the simplest
+one-character file (for instance, @samp{\ \bye}), then something is very
+wrong. Practically any file sent to a PostScript laser printer should
+generate some output, at the very least a page detailing what error
+occurred, if any. Talk to your system administrator about downloading a
+PostScript error handler. (Adobe distributes a good one called
+@samp{ehandler.ps}.)
+@flindex ehandler.ps
+
+@cindex PowerPage PostScript implementation
+@cindex Shinko CHC-S446i printer
+@cindex Mitsubishi Shinko CHC-S446i printer
+It is possible, especially if you are using non-Adobe PostScript, that
+your PostScript interpreter is broken. Even then it should generate an
+error message. Dvips tries to work around as many bugs as possible in
+common non-Adobe PostScript interpreters, but doubtless it misses a few.
+PowerPage Revision 1, Interpreter Version 20001.001, on a Mitsubishi
+Shinko CHC-S446i color thermal dye sublimation printer is known to be
+unable to print with any but builtin fonts.
+
+If Dvips gives any strange error messages, or compilation on your
+machine generated a lot of warnings, perhaps the Dvips program itself is
+broken. Try using the debug options to determine where the error
+occurred (@pxref{Debug options}).
+
+It is possible your spooler is broken and is misinterpreting the
+structured comments. Try the @samp{-N} flag to turn off structured
+comments and see what happens.
+
+
+@node Small or inverted
+@subsection Output too small or inverted
+
+@cindex output, too small
+@cindex output, inverted
+@cindex inverted output
+@cindex too-small output
+
+@cindex save/restore, and inverted output
+If some documents come out inverted or too small, probably your spooler
+is not supplying an end of job indicator at the end of each file. (This
+commonly happens on small machines that don't have spoolers.) You can
+force Dvips to do this with the @samp{-F} flag (or @samp{F} config file
+option), but this generates files with a terminating binary character
+(control-D). You can also try using the @samp{-s} flag (or @samp{s}
+config file option) to enclose the entire job in a save/restore pair.
+@xref{Command-line options}, and @ref{Config files}.
+
+
+@node Printer errors
+@subsection Error messages from printer
+
+@cindex printer errors
+@cindex error messages from printer
+@cindex failure, and printer errors
+
+@cindex @t{bop undefined} error
+If your printer returns error messages, the error message gives very
+good information on what might be going wrong. One of the most common
+error messages is @samp{bop undefined}. This is caused by old versions
+of Transcript and other spoolers that do not properly parse the setup
+section of the PostScript. To fix this, turn off structured comments
+with the @samp{-N} option, but it'd be best to get your spooling
+software updated.
+
+@cindex VM exhausted
+@cindex printer memory exhausted
+@cindex memory of printer exhausted
+Another error message is @samp{VM exhausted}. Some printers indicate
+this error by locking up, others quietly reset. This is caused by Dvips
+thinking that the printer has more memory than it actually does, and
+then printing a complicated document. To fix this, try lowering the
+@samp{m} parameter in the configuration file; use the debug option to
+make sure you adjust the correct file.
+
+Other errors may indicate you are trying to include graphics that don't
+nest properly in other PostScript documents, among other things. Try
+the PostScript file on a QMS PS-810 or other Adobe PostScript printer if
+you have one, or Ghostscript (@pxref{Ghostscript installation}); it
+might be a problem with the printer itself.
+
+
+@node Long documents fail
+@subsection Long documents fail to print
+
+@cindex long documents not printing
+@cindex failure, of long documents
+
+This is usually caused by incorrectly specifying the amount of memory
+the printer has in the configuration file; see the previous section.
+
+
+@node Including graphics fails
+@subsection Including graphics fails
+
+@cindex including graphics fails
+@cindex graphics inclusion fails
+@cindex failure, to include graphics
+
+The most common problem with including graphics is an incorrect bounding
+box (@pxref{Bounding box}). Complain to whoever wrote the software that
+generated the file if the bounding box is indeed incorrect.
+
+@cindex Illustrator, workaround for
+Another possible problem is that the figure you are trying to include
+does not nest properly; there are certain rules PostScript applications
+must follow when generating files to be included. The Dvips program
+includes work-arounds for such errors in Adobe Illustrator and other
+programs, but there are certainly applications that haven't been tested.
+
+One possible thing to try is the @samp{-K} flag which strips the comments
+from an included figure. This might be necessary if the PostScript
+spooling software does not read the structured comments correctly. Use
+of this flag will break graphics from some applications, though, since
+some applications read the PostScript file from the input stream,
+looking for a particular comment.
+
+@cindex binary files, not supported
+Any application which generates graphics output containing raw binary
+(not ASCII hex) will probably fail with Dvips.
+
+
+@ifclear INSTALLONLY
+@node Invoking Dvips
+@chapter Invoking Dvips
+
+@cindex command-line options
+@cindex options, Dvips
+@cindex invoking Dvips
+
+Dvips reads a DVI file as output by (for example) @TeX{}, and converts
+it to PostScript, taking care of builtin or downloaded PostScript fonts,
+font reencoding, color, etc. These features are described in other
+chapters in this document.
+
+There many ways to control Dvips' behavior: configuration files,
+environment variables, and command-line options.
+
+@menu
+* Basic usage::
+* Command-line options::
+* Environment variables::
+* Config files::
+@end menu
+
+
+@node Basic usage
+@section Basic usage of Dvips
+
+To use Dvips at its simplest, simply type
+@example
+dvips foo
+@end example
+@noindent
+where @file{foo.dvi} is the output of @TeX{} that you want to print. If
+Dvips has been installed correctly, the document will probably roll out
+of your default printer.
+
+If you use fonts that have not been used on your system before, they may
+be automatically generated; this process can take a few minutes, so
+progress reports appear by default. The next time that document is
+printed, these fonts will have been saved in the proper directories, so
+printing will go much faster. (If Dvips tries to endlessly generate the
+same fonts over and over again, it hasn't been installed properly.
+@xref{Unable to generate fonts,,, kpathsea, Kpathsea}.)
+
+Many options are available (see the next section). For a brief summary
+of available options, just type
+@example
+dvips --help
+@end example
+
+
+@node Command-line options
+@section Command-line options
+
+Dvips has a plethora of command line options. Reading through this
+section will give a good idea of the capabilities of the driver.
+
+@menu
+* Option summary:: Quick listing, from Dvips --help.
+* Option details:: More information about each option.
+@end menu
+
+
+@node Option summary
+@subsection Option summary
+
+@cindex options, summary
+Here is a handy summary of the options; it is printed out when you run
+Dvips with no arguments or with the standard @samp{--help} option.
+@opindex --help
+
+@verbatiminclude dvips.help
+
+
+@node Option details
+@subsection Option details
+
+@cindex option, details of
+
+Many of the parameterless options listed here can be turned off by
+suffixing the option with a zero (@samp{0}); for instance, to turn off
+page reversal, use @samp{-r0}. Such options are marked with a trailing
+@samp{*}.
+
+@table @samp
+@item -
+@opindex -
+@cindex options, reading from standard input
+@cindex standard input, reading options from
+Read additional options from standard input after processing the command
+line.
+
+@item --help
+@opindex --help
+Print a usage message and exit.
+
+@item --version
+@opindex --version
+Print the version number and exit.
+
+@item -a*
+@opindex -a
+@cindex memory, conserving
+Conserve memory by making three passes over the DVI file instead
+of two and only loading those characters actually used. Generally only
+useful on machines with a very limited amount of memory, like some PCs.
+
+@item -A
+@opindex -A
+@cindex odd pages only
+Print only the odd pages. This option uses @TeX{}
+page numbers, not physical page numbers.
+
+@item -b @var{num}
+@opindex -b @var{num}
+@vindex /#copies
+@cindex copies, duplicated page bodies
+@cindex color separations
+Generate @var{num} copies of each page, but duplicating the page body
+rather than using the @samp{/#copies} PostScript variable. This can
+be useful in conjunction with a header file setting @samp{bop-hook} to
+do color separations or other neat tricks.
+
+@item -B
+@opindex -B
+@cindex even pages only
+@cindex double-sided printing
+Print only the even pages. This option uses @TeX{} page numbers, not
+physical page numbers.
+
+@item -c @var{num}
+@opindex -c @var{num}
+@vindex /#copies
+@cindex copies, uncollated
+@cindex uncollated copies
+Generate @var{num} consecutive copies of every page, i.e., the output is
+uncollated. This merely sets the builtin PostScript variable
+@samp{/#copies}.
+
+@item -C @var{num}
+@opindex -C @var{num}
+@cindex copies, collated
+@cindex collated copies
+Generate @var{num} copies, but collated (by replicating the data in the
+PostScript file). Slower than the @samp{-c} option, but easier on the
+hands, and faster than resubmitting the same PostScript file multiple
+times.
+
+@item -d @var{num}
+@opindex -d @var{num}
+@cindex debugging
+Set the debug flags, showing what Dvips (thinks it) is doing. This will
+work unless Dvips has been compiled without the @samp{DEBUG} option (not
+recommended). @xref{Debug options}, for the possible values of
+@var{num}. Use @samp{-d -1} as the first option for maximum output.
+
+@item -D @var{num}
+@opindex -D @var{num}
+@cindex resolution, setting
+Set both the horizontal and vertical resolution to @var{num}, given in
+dpi (dots per inch). This affects the choice of bitmap fonts that are
+loaded and also the positioning of letters in resident PostScript
+fonts. Must be between 10 and 10000. This affects both the horizontal
+and vertical resolution. If a high resolution (something greater than
+400 dpi, say) is selected, the @samp{-Z} flag should probably also be
+used. If you are using fonts made with Metafont, such as Computer
+Modern, @file{mktexpk} needs to know about the value for @var{num}
+that you use or Metafont will fail. See the file
+@url{ftp://ftp.tug.org/tex/modes.mf} for a list of resolutions and mode
+names for most devices.
+
+@item -e @var{num}
+@opindex -e @var{num}
+@cindex maxdrift
+@cindex accuracy in positioning
+@cindex positioning accuracy
+Maximum drift in pixels of each character from its `true'
+resolution-independent position on the page. The default value of this
+parameter is resolution dependent (it is the number of entries in the
+list [100, 200, 300, 400, 500, 600, 800, 1000, 1200, 1600, 2000, 2400,
+2800, 3200, @dots{}] that are less than or equal to the resolution in
+dots per inch). Allowing individual characters to `drift' from their
+correctly rounded positions by a few pixels, while regaining the true
+position at the beginning of each new word, improves the spacing of
+letters in words.
+
+@item -E*
+@opindex -E
+@cindex EPSF, generating
+@cindex tight bounding box, finding
+@cindex bounding box, finding tight
+Generate an EPSF file with a tight bounding box. This only looks at
+marks made by characters and rules, not by any included graphics. In
+addition, it gets the glyph metrics from the TFM file, so characters
+that print outside their enclosing TFM box may confuse it. In addition,
+the bounding box might be a bit too loose if the character glyph has
+significant left or right side bearings. Nonetheless, this option works
+well enough for creating small EPSF files for equations or tables or the
+like. (Of course, Dvips output, especially when using bitmap fonts, is
+resolution-dependent and thus does not make very good EPSF files,
+especially if the images are to be scaled; use these EPSF files with
+care.) For multiple page input files, also specify @samp{-i} to get
+each page as a separate EPSF file; otherwise, all the pages are overlaid
+in the single output file.
+
+@item -f*
+@opindex -f
+@cindex filter, running as a
+@cindex standard I/O
+@cindex pipes, not readable
+@vindex PRINTER@r{, avoided with @samp{-f}}
+Run as a filter. Read the DVI file from standard input and write the
+PostScript to standard output. The standard input must be seekable, so
+it cannot be a pipe. If your input must be a pipe, write a shell script
+that copies the pipe output to a temporary file and then points Dvips at
+this file. This option also disables the automatic reading of the
+@code{PRINTER} environment variable; use @samp{-P$PRINTER} after the
+@samp{-f} to read it anyway. It also turns off the automatic sending of
+control-D if it was turned on with the @samp{-F} option or in the
+configuration file; use @samp{-F} after the @samp{-f} to send it anyway.
+
+@item -F*
+@opindex -F
+@cindex EOF
+@cindex control-D
+@cindex printer, driving directly
+@cindex spooler, lacking
+Write control-D (ASCII code 4) as the very last character of the
+PostScript file. This is useful when Dvips is driving the printer
+directly instead of working through a spooler, as is common on personal
+systems. On systems shared by more than one person, this is not
+recommended.
+
+@item -G*
+@opindex -G
+@cindex low characters, shifting
+@cindex non-printing characters, shifting
+Shift non-printing characters (ASCII 0-32, 127) to higher-numbered positions.
+This may be useful sometimes.
+
+@item -h @var{name}
+@opindex -h @var{name}
+@cindex header file, downloading
+@cindex userdict@r{, used for header files}
+Prepend @var{name} as an additional header file, or, if @var{name} is
+@samp{-}, suppress all header files. Any definitions in the header file
+get added to the PostScript @samp{userdict}.
+
+@item -i*
+@opindex -i
+@cindex sections output, in separate files
+@cindex multiple output files
+@cindex output files, multiple
+Make each section be a separate file; a @dfn{section} is a part of the
+document processed independently, most often created to avoid memory
+overflow. The filenames are created replacing the suffix of the
+supplied output file name by a three-digit sequence number. This option
+is most often used in conjunction with the @samp{-S} option which sets
+the maximum section length in pages; if @samp{-i} is specified and
+@samp{-S} is not, each page is output as a separate file. For instance,
+some phototypesetters cannot print more than ten or so consecutive pages
+before running out of steam; these options can be used to automatically
+split a book into ten-page sections, each to its own file.
+
+@item -j*
+@opindex -j @r{for partial font downloading}
+Download only needed characters from Type 1 fonts. This is the
+default in the current release. Some debugging flags trace this operation
+(@pxref{Debug options}). You can also control partial downloading on a
+per-font basis (@pxref{psfonts.map}).
+
+@item -k*
+@opindex -k @r{for cropmarks}
+@cindex cropmarks
+@flindex crop.pro
+Print crop marks. This option increases the paper size (which should be
+specified, either with a paper size special or with the @samp{-T}
+option) by a half inch in each dimension. It translates each page by a
+quarter inch and draws cross-style crop marks. It is mostly useful with
+typesetters that can set the page size automatically. This works by
+downloading @file{crop.pro}.
+
+@item -K*
+@opindex -K
+@cindex comments, removing included
+@findex %%Page@r{, removing}
+Remove comments in included PostScript graphics, font files, and
+headers; only necessary to get around bugs in spoolers or PostScript
+post-processing programs. Specifically, the @samp{%%Page}
+comments, when left in, often cause difficulties. Use of this flag can
+cause other graphics to fail, however, since the PostScript header
+macros from some software packages read portion the input stream line by
+line, searching for a particular comment.
+
+@item -l [=]@var{num}
+@opindex -l [=]@var{num}
+@cindex last page printed
+@cindex page, last printed
+@cindex physical page number, and @samp{-l}
+@cindex absolute page number, and @samp{-l}
+The last page printed will be the first one numbered @var{num}. Default
+is the last page in the document. If @var{num} is prefixed by an equals
+sign, then it (and the argument to the @samp{-p} option, if specified)
+is treated as a physical (absolute) page number, rather than a value to
+compare with the @TeX{} @samp{\count0} values stored in the DVI file.
+Thus, using @samp{-l =9} will end with the ninth page of the document,
+no matter what the pages are actually numbered.
+
+@item -m*
+@opindex -m
+@cindex manual feed
+Specify manual feed, if supported by the output device.
+
+@item -mode @var{mode}
+@opindex -mode @var{mode}
+@opindex -mode
+@cindex mode name, specifying
+@cindex Metafont mode, specifying
+Use @var{mode} as the Metafont device name for path searching and font
+generation. This overrides any value from configuration files. With
+the default paths, explicitly specifying the mode also makes the program
+assume the fonts are in a subdirectory named @var{mode}.
+@xref{TeX directory structure,, @TeX{} directory structure, kpathsea,
+Kpathsea}. If Metafont does not understand the @var{mode} name, see
+@ref{Unable to generate fonts,,, kpathsea, Kpathsea}.
+
+@item -M*
+@opindex -M
+@cindex font generation, avoiding
+@pindex mktexpk@r{, avoiding}
+@flindex missfont.log
+@comment this description repeated in kpathsea.texi
+Turns off automatic font generation (@file{mktexpk}). If
+@code{mktexpk}, the invocation is appended to a file
+@file{missfont.log} (by default) in the current directory. You can then
+execute the log file to create the missing files after fixing the
+problem.
+@vindex TEXMFOUTPUT
+@vindex MISSFONT_LOG
+If the current directory is not writable and the environment variable or
+configuration file value @samp{TEXMFOUTPUT} is set, its value is used.
+Otherwise, nothing is written. The name @samp{missfont.log} is
+overridden by the @samp{MISSFONT_LOG} environment variable or
+configuration file value.
+
+@item -n @var{num}
+@opindex -n @var{num}
+@cindex maximum pages printed
+@cindex pages, maximum printed
+Print at most @var{num} pages. Default is 100000.
+
+@item -N*
+@opindex -N
+@cindex structured comments
+@cindex TranScript
+@findex %%Page@r{, not generating}
+Turns off generation of structured comments such as @samp{%%Page}; this
+may be necessary on some systems that try to interpret PostScript
+comments in weird ways, or on some PostScript printers. Old versions of
+TranScript in particular cannot handle modern Encapsulated PostScript.
+Beware: This also disables page movement, etc., in PostScript viewers
+such as Ghostview.
+
+@item -noomega
+@opindex -noomega
+@cindex Omega extensions
+This will disable the use of Omega extensions when interpreting DVI files.
+By default, the additional opcodes @samp{129} and @samp{134} are recognized
+by Dvips as Omega extensions and interpreted as requests to set 2-byte
+characters. The only drawback is that the virtual font array will (at least
+temporarily) require 65536 positions instead of the default 256 positions,
+i.e., the memory requirements of Dvips will be slightly larger. If you find
+this unacceptable or encounter another problem with the Omega extensions,
+you can switch this extension off by using @samp{-noomega} (but please do
+send a bug report if you find such problems, @pxref{Bugs,,, kpathsea,
+Kpathsea}).
+
+@item -o @var{name}
+@opindex -o @var{name}
+@cindex output, redirecting
+@cindex standard output, output to
+Send output to the file @var{name}. If @samp{-o} is specified without
+@var{name}, the default is @samp{@var{file}.ps} where the input DVI file
+was @samp{@var{file}.dvi}. If @samp{-o} isn't given at all, the
+configuration file default is used.
+
+@findex popen @r{for output}
+@kindex - @r{as output filename}
+@kindex ! @r{starting output filename}
+@kindex | @r{starting output filename}
+@cindex lpr spooler, MS-DOS emulation
+@cindex spooling to lpr on MS-DOS
+If @var{name} is @samp{-}, output goes to standard output. If the first
+character of @var{name} is @samp{!} or @samp{|}, then the remainder will
+be used as an argument to @code{popen}; thus, specifying @samp{|lpr} as
+the output file will automatically queue the file for printing as
+usual. (The MS-DOS version will print to the local printer device
+@file{PRN} when @var{name} is @samp{|lpr} and a program by that name
+cannot be found.)
+
+@samp{-o} disables the automatic reading of the @code{PRINTER}
+environment variable, and turns off the automatic sending of control-D.
+See the @samp{-f} option for how to override this.
+
+@item -O @var{x-offset},@var{y-offset}
+@opindex -O @var{x-offset},@var{y-offset}
+@cindex offset pages
+@cindex printer offset
+Move the origin by @var{x-offset},@var{y-offset}, a comma-separated
+pair of dimensions such as @samp{.1in,-.3cm} (@pxref{papersize
+special}). The origin of the page is shifted from the default position
+(of one inch down, one inch to the right from the upper left corner of
+the paper) by this amount. This is usually best specified in the
+printer-specific configuration file.
+
+@flindex testpage.tex
+This is useful for a printer that consistently offsets output pages by a
+certain amount. You can use the file @file{testpage.tex} to determine
+the correct value for your printer. Be sure to do several runs with the
+same @code{O} value---some printers vary widely from run to run.
+
+@findex bop-hook@r{, and offset pages}
+If your printer offsets every other page consistently, instead of every
+page, your best recourse is to use @samp{bop-hook} (@pxref{PostScript
+hooks}).
+
+@item -p [=]@var{num}
+@opindex -p [=]@var{num}
+@cindex first page printed
+@cindex page, first printed
+@cindex physical page number, and @samp{-p}
+@cindex absolute page number, and @samp{-p}
+The first page printed will be the first one numbered @var{num}. Default
+is the first page in the document. If @var{num} is prefixed by an
+equals sign, then it (and the argument to the @samp{-l} option, if
+specified) is treated as a physical (absolute) page number, rather than
+a value to compare with the @TeX{} @samp{\count0} values stored in the
+DVI file. Thus, using @samp{-p =3} will start with the third page of
+the document, no matter what the pages are actually numbered.
+
+@item -pp @var{first}-@var{last}
+@opindex -pp @var{first}-@var{last}
+@cindex page range
+@opindex -pp @var{range}
+Print pages @var{first} through @var{last}; equivalent to @samp{-p
+@var{first} -l @var{last}}, except that multiple @samp{-pp} options
+accumulate, unlike @samp{-p} and @samp{-l}. The @samp{-} separator can
+also be @samp{:}.
+
+@item -P @var{printer}
+@opindex -P @var{printer}
+@flindex config.ps
+Read the configuration file @file{config.@var{printer}}
+(@file{@var{printer}.cfg} on MS-DOS), which can set the output name
+(most likely @samp{o |lpr -P@var{printer}}), resolution, Metafont mode,
+and perhaps font paths and other printer-specific defaults. It works
+best to put sitewide defaults in the one master @samp{config.ps} file
+and only things that vary printer to printer in the
+@samp{config.@var{printer}} files; @samp{config.ps} is read before
+@samp{config.@var{printer}}.
+
+A configuration file for creating Adobe PDF files is provided in
+@samp{config.pdf} and can be loaded with @samp{-Ppdf}, it will try to
+include Type1 outline fonts into the PostScript file
+(@pxref{Hypertext caveats}).
+
+If no @samp{-P} or @samp{-o} is given, the environment variable
+@code{PRINTER} is checked. If that variable exists, and a corresponding
+@file{config.@var{printer}} (@file{@var{printer}.cfg} on MS-DOS) file
+exists, it is read.
+@xref{Configuration file searching}.
+
+@item -q*
+@opindex -q
+@cindex quiet operation
+@cindex silent operation
+@cindex warnings, suppressing
+Run quietly. Don't chatter about pages converted, etc.@: to standard
+output; report no warnings (only errors) to standard error.
+
+@item -r*
+@opindex -r
+@cindex reverse pagination
+Output pages in reverse order. By default, page 1 is output first.
+
+@item -R
+@opindex -R
+@cindex security
+@cindex shell command execution, disabling
+@cindex absolute filenames, disabling
+Run securely. This disables shell command execution in
+@code{\special} (via @samp{`}, @pxref{Dynamic creation of graphics})
+and config files (via the @samp{E} option, @pxref{Configuration file
+commands}), and opening of any absolute filenames.
+
+@item -s*
+@opindex -s
+@cindex save/restore, generating global
+Enclose the output in a global save/restore pair. This causes the file
+to not be truly conformant, and is thus not recommended, but is useful
+if you are driving a deficient printer directly and thus don't care too
+much about the portability of the output to other environments.
+
+@item -S @var{num}
+@opindex -S @var{num}
+Set the maximum number of pages in each `section'. This option is most
+commonly used with the @samp{-i} option; see its description above for
+more information.
+
+@item -t @var{papertype}
+@opindex -t @var{papertype}
+@cindex paper type
+@cindex media
+@cindex letter papertype
+@cindex legal papertype
+@cindex ledger papertype
+@cindex a4 papertype
+@cindex a3 papertype
+@cindex landscape papertype
+@cindex papersize special, and no @samp{-t}
+Set the paper type to @var{papertype}, usually defined in one of the
+configuration files, along with the appropriate PostScript code to
+select it (@pxref{Config file paper sizes}). You can also specify a
+@var{papertype} of @samp{landscape}, which rotates a document by 90
+degrees. To rotate a document whose paper type is not the default, you
+can use the @samp{-t} option twice, once for the paper type, and once
+for @samp{landscape}. You should not use any @samp{-t} option when
+@TeX{} writes a @samp{papersize} special, as is done by some @LaTeX{}
+packages, e.g., @samp{hyperref.sty}.
+
+@item -T @var{hsize},@var{vsize}
+@opindex -T @var{hsize},@var{vsize}
+Set the paper size to (@var{hsize},@var{vsize}), a comma-separated pair
+of dimensions such as @samp{.1in,-.3cm} (@pxref{papersize special}). It
+overrides any paper size special in the DVI file.
+
+@item -u @var{psmapfile}
+@opindex -u @var{psmapfile}
+@cindex PostScript font alias file
+@cindex resident fonts, different in different printers
+Set @var{psmapfile} to be the file that dvips uses for looking up
+PostScript font aliases. If @var{psmapfile} begins with a @samp{+}
+character, then the rest of the name is used as the name of the map file,
+and the map file is appended to the list of map files (instead of replacing
+the list). In either case, if the name has no extension, then @samp{.map}
+is added at the end.
+
+@item -U*
+@opindex -U
+@cindex Xerox 4045
+Disable a PostScript virtual memory-saving optimization that stores the
+character metric information in the same string that is used to store
+the bitmap information. This is only necessary when driving the Xerox
+4045 PostScript interpreter, which has a bug that puts garbage on the
+bottom of each character. Not recommended unless you must drive this
+printer.
+
+@item -v
+@opindex -v
+Print the dvips version number and exit.
+
+@item -V*
+@opindex -V
+Download non-resident PostScript fonts as bitmaps. This requires use
+@pindex mtpk
+@pindex gsftopk
+@pindex pstopk
+of @code{mtpk} or @code{gsftopk} or @code{pstopk} or some combination
+thereof to generate the required bitmap fonts; these programs are
+supplied with Dvips. The bitmap must be put into @file{psfonts.map} as
+the downloadable file for that font. This is useful only for those
+fonts for which you do not have real outlines, being downloaded to
+printers that have no resident fonts, i.e., very rarely.
+
+
+@item -x @var{num}
+@opindex -x @var{num}
+@cindex magnification, overriding DVI
+Set the magnification ratio to @math{@var{num}/1000}. Overrides
+the magnification specified in the DVI file. Must be between 10 and
+100000. It is recommended that you use standard magstep values (1095,
+1200, 1440, 1728, 2074, 2488, 2986, and so on) to help reduce the total
+number of PK files generated. @var{num} may be a real number, not an
+integer, for increased precision.
+
+@item -X @var{num}
+@opindex -X @var{num}
+@cindex resolution
+Set the horizontal resolution in dots per inch to @var{num}.
+
+@item -y @var{num}
+@cindex magnification, vertical
+Set the magnification ratio to @math{@var{num}/1000} times the
+magnification specified in the DVI file. See
+@samp{-x} above.
+
+@item -Y @var{num}
+@opindex -Y @var{num}
+Set the vertical resolution in dots per inch to @var{num.}
+@cindex resolution
+
+@item -z*
+@opindex -z @r{for recognizing hyperdvi}
+@cindex hyperdvi extensions, enabling
+@cindex distillation, and @samp{-z}
+@cindex PDF files, option for
+@findex html @r{specials, and @samp{-z}}
+Pass @samp{html} hyperdvi specials through to the output for eventual
+distillation into PDF. This is not enabled by default to avoid
+including the header files unnecessarily, and use of temporary files in
+creating the output. @xref{Hypertext}.
+
+@item -Z*
+@opindex -Z @r{for compressing bitmap fonts}
+@cindex compressing bitmap fonts
+Compress bitmap fonts in the output file, thereby reducing the size of
+what gets downloaded. Especially useful at high resolutions or when
+very large fonts are used. May slow down printing, especially on early
+68000-based PostScript printers. Generally recommend today, and can be
+enabled in the configuration file (@pxref{Configuration file commands}).
+
+@end table
+
+
+@node Environment variables
+@section Environment variables
+
+@cindex environment variables
+
+Dvips looks for many environment variables, to define search paths and
+other things. The path variables are read as needed, after all
+configuration files are read, so they override values in the
+configuration files. (Except for @code{TEXCONFIG}, which defines where
+the configuration files themselves are found.)
+
+@xref{Path specifications,,, kpathsea, Kpathsea}, for details of
+interpretation of path and other environment variables common to all
+Kpathsea-using programs. Only the environment variables specific to
+Dvips are mentioned here.
+
+@vtable @code
+@item DVIPSFONTS
+Default path to search for all fonts. Overrides all the font path
+config file options and other environment variables (@pxref{Supported
+file formats,,, kpathsea, Kpathsea}).
+
+@item DVIPSHEADERS
+Default path to search for PostScript header files. Overrides the @samp{H}
+config file option (@pxref{Configuration file commands}).
+
+@item DVIPSMAKEPK
+@pindex mktexpk@r{, changing name}
+Overrides @samp{mktexpk} as the name of the program to invoke to
+create missing PK fonts. You can change the arguments passed to the
+@code{mktexpk} program with the @code{MAKETEXPK} environment
+variable; @pxref{MakeTeX script arguments,,, kpathsea, Kpathsea}.
+
+@item DVIPSRC
+Specifies the name of the startup file (@pxref{Configuration file
+searching}) which is read after @file{config.ps} but before any
+printer-specific configuration files.
+
+@item DVIPSSIZES
+@cindex last-resort font scaling, with @code{DVIPSSIZES}
+Last-resort sizes for scaling of unfound fonts. Overrides the @samp{R}
+definition in config files (@pxref{Configuration file commands}).
+
+@item PRINTER
+Determine the default printer configuration file. (Dvips itself does
+not use @code{PRINTER} to determine the output destination in any way.)
+
+@item TEXCONFIG
+@cindex configuration file path
+Path to search for Dvips' @file{config.@var{printer}} configuration
+files, including the base @file{config.ps}. Using this single
+environment variable, you can override everything else. (The
+printer-specific configuration files are called @file{@var{printer}.cfg}
+on MS-DOS, but @file{config.ps} is called by that name on all
+platforms.)
+
+@item TEXPICTS
+Path to search for included graphics files. Overrides the @samp{S}
+config file option (@pxref{Configuration file commands}). If not set,
+@code{TEXINPUTS} is looked for. @xref{Supported file formats,,,
+kpathsea, Kpathsea}.
+
+@end vtable
+
+
+@node Config files
+@section Dvips configuration files
+
+@cindex configuration files
+
+This section describes in detail the Dvips-specific @file{config.*}
+device configuration files (called @file{*.cfg} on MS-DOS), which
+override the @file{texmf.cnf}
+configuration files generic to Kpathsea which Dvips also reads
+(@pxref{Config files,,, kpathsea, Kpathsea}).
+
+For information about installing these files, including a prototype file
+you can copy, @pxref{config.ps installation}.
+
+@menu
+* Configuration file searching:: Where config.* files are searched for.
+* Configuration file commands:: What can go in a config.* file.
+@end menu
+
+
+@node Configuration file searching
+@subsection Configuration file searching
+
+@cindex configuration file searching
+@cindex searching config files, order of
+
+The Dvips program loads many different configuration files, so that
+parameters can be set globally across the system, on a per-device basis,
+or individually by each user.
+
+@enumerate
+@item
+@flindex config.ps@r{, searched for}
+Dvips first reads (if it exists) @file{config.ps}; it is searched for
+along the path for Dvips configuration files, as described in
+@ref{Supported file formats,,, kpathsea, Kpathsea}.
+
+@item
+@flindex .dvipsrc@r{, searched for}
+A user-specific startup file is loaded, so individual users can override
+any options set in the global file. The environment variable
+@code{DVIPSRC}, if defined, is used as the specification of the startup
+file. If this variable is undefined, Dvips uses a platform-specific
+default name. On Unix Dvips looks for the default startup file under
+the name @file{$HOME/.dvipsrc}, which is in the user's home directory.
+On MS-DOS and MS-Windows, where users generally don't have their private
+directories, the startup file is called @file{dvips.ini} and it is
+searched for along the path for Dvips configuration files (as described
+in @ref{Supported file formats,,, kpathsea, Kpathsea}.); users are
+expected to set this path as they see fit for their taste.
+
+@item
+@opindex -P@var{printer}@r{, and config file searching}
+The command line is read and parsed: if the @samp{-P@var{device}} option
+is encountered, at that point @file{config.@var{device}} is loaded.
+Thus, the printer configuration file can override anything in the
+site-wide or user configuration file, and it can also override options
+in the command line up to the point that the @samp{-P} option was
+encountered. (On MS-DOS, the printer configuration files are called
+@file{@var{device}.cfg}, since DOS doesn't allow more than 3 characters
+after the dot in filenames.)
+
+@item
+@vindex PRINTER@r{, and config file searching}
+If no @samp{-P} option was specified, and also the @samp{-o} and
+@samp{-f} command line options were not used, Dvips checks the
+environment variable @code{PRINTER}. If it exists, then
+@file{config.@var{$PRINTER}} (@file{@var{$PRINTER}.cfg} on MS-DOS) is
+loaded (if it exists).
+
+@end enumerate
+
+Because the @file{.dvipsrc} file is read before the printer-specific
+configuration files, individual users cannot override settings in the
+latter. On the other hand, the @code{TEXCONFIG} path usually includes
+the current directory, and can in any case be set to anything, so the
+users can always define their own printer-specific configuration files
+to be found before the system's.
+
+A few command-line options are treated specially, in that they are not
+overridden by configuration files:
+
+@table @samp
+@item -D
+As well as setting the resolution, this unsets the mode, if the mode was
+previously set from a configuration file. If @file{config.$PRINTER} is
+read, however, any @samp{D} or @samp{M} lines from there will take
+effect.
+
+@item -mode
+This overrides any mode setting (@samp{M} line) in configuration files.
+@samp{-mode} does not affect the resolution.
+
+@item -o
+This overrides any output setting (@samp{o} line) in configuration files.
+
+@end table
+
+The purpose of these special cases is to (1) minimize the chance of
+having a mismatched mode and resolution (which @samp{mktexpk} cannot
+resolve), and (2) let command-line options override config files where
+possible.
+
+
+@node Configuration file commands
+@subsection Configuration file commands
+
+@cindex configuration file options
+@cindex Dvips configuration file options
+
+Most of the configuration file commands are similar to corresponding
+command line options, but there are a few exceptions. When they are the
+same, we omit the description here.
+
+As with command line options, many may be turned off by suffixing the
+letter with a zero (@samp{0}).
+
+@cindex comments, in configuration files
+@cindex continuation lines, not supported
+Within a configuration file, empty lines, and lines starting with a
+space, asterisk, equal sign, percent sign, or pound sign are ignored.
+There is no provision for continuation lines.
+
+@table @samp
+@item @@ @var{name hsize vsize}
+@opindex @@ @r{paper size config command}
+Define paper sizes. @xref{Config file paper sizes}.
+
+@item a*
+@opindex a @r{config command (memory conservation)}
+Memory conservation. Same as @samp{-a}, @pxref{Option details}.
+
+@item b @var{#copies}
+@opindex b @r{config command (#copies)}
+Multiple copies. Same as @samp{-b}, @pxref{Option details}.
+
+@item D @var{dpi}
+@opindex D @r{config command (dpi)}
+Output resolution. Same as @samp{-D}, @pxref{Option details}.
+
+@item e @var{num}
+@opindex e @r{config command (maxdrift)}
+Max drift. Same as @samp{-e}, @pxref{Option details}.
+
+@item E @var{command}
+@opindex E @r{config command (shell escape)}
+@findex system @r{in config file}
+@cindex datestamp, in output
+@cindex shell escape, in config file
+Executes the command listed with @code{system}(3); can be used to get
+the current date into a header file for inclusion, for instance.
+Possibly dangerous; this may be disabled, in which case a warning will
+be printed if the option is used (and warnings are not suppressed).
+
+@item f*
+@itemx F
+@opindex f @r{config command (filter)}
+@opindex F @r{config command (filter)}
+Run as a filter. Same as @samp{-f}, @pxref{Option details}.
+
+@item h @var{header}
+@opindex h @r{header downloading config command}
+Prepend @var{header} to output. Same as @samp{h-}, @pxref{Option details}.
+
+@item H @var{path}
+@opindex H @r{header path config command}
+@cindex header path, defining
+@vindex DVIPSHEADERS@r{, overrides} H
+Use @var{path} to search for PostScript header files. The environment
+variable @code{DVIPSHEADERS} overrides this.
+
+@item i @var{n}
+@opindex i @r{config command (pages/section)}
+Make multiple output files. Same as @samp{-i -S @var{n}}, @pxref{Option
+details}.
+
+@item j*
+@opindex j @r{config command (partial font downloading)}
+Partially download Type 1 fonts. Same as @samp{-j}, @pxref{Option details}.
+
+@item K*
+@opindex K @r{config command (comment-removeal)}
+Remove comments from included PostScript files. Same as @samp{-K},
+@pxref{Option details}.
+
+@item m @var{num}
+@opindex m @r{config command (available memory)}
+@cindex memory available
+@cindex printer memory
+Declare @var{num} as the memory available for fonts and strings in the
+printer. Default is 180000. This value must be accurate if memory
+conservation and document splitting is to work correctly. To determine
+this value, send the following file to the printer:
+
+@example
+%! Hey, we're PostScript
+/Times-Roman findfont 30 scalefont setfont 144 432 moveto
+vmstatus exch sub 40 string cvs show pop showpage
+@end example
+
+@noindent
+The number printed by this file is the total memory free; it is usually
+best to tell Dvips that the printer has slightly less memory, because
+many programs download permanent macros that can reduce the memory in
+the printer. Some systems or printers can dynamically increase the
+memory available to a PostScript interpreter, in which case this file
+might return a ridiculously low number; for example, the NeXT computer
+and Ghostscript. In these cases, a value of one million works fine.
+
+@item M @var{mode}
+@opindex M @r{config command (mf mode)}
+Metafont mode. Same as @samp{-mode}, @pxref{Option details}.
+
+@item N*
+@opindex N @r{EPS-disabling config command}
+Disable structured comments. Beware: This also turns off displaying
+page numbers or changing to specific pagenumbers in PostScript viewers.
+Same as @samp{-N}, @pxref{Option details}.
+
+@item o @var{name}
+@opindex o @r{config command (output file)}
+@cindex output file, setting
+Send output to @var{name}. Same as @samp{-o}, @pxref{Option details}.
+In the file @file{config.foo}, a setting like this is probably
+appropriate:
+@example
+o |lpr -Pfoo
+@end example
+The MS-DOS version will emulate spooling to @code{lpr} by printing to
+the local printer device @file{PRN} if it doesn't find an executable
+program by that name in the current directory or along the @code{PATH}.
+
+@item O @var{xoff},@var{yoff}
+@opindex O @r{config command (offset)}
+Origin offset. Same as @samp{-O}, @pxref{Option details}.
+
+@item p @r{[+]}@var{name}
+@opindex p @r{config command (font aliases)}
+@cindex PostScript font alias file
+@cindex resident fonts, different in different printers
+@kindex +@var{psmapfile}
+Examine @var{name} for PostScript font aliases. Default is
+@file{psfonts.map}. This option allows you to specify different resident
+fonts that different printers may have. If @var{name} starts with a
+@samp{+} character, then the rest of the name (after any leading spaces)
+is used as an additional map file; thus, it is possible to have local
+map files pointed to by local configuration files that append to the
+global map file. This can be used for font families.
+
+@item P @var{path}
+@opindex P @r{config command (PK path)}
+@vindex PKFONTS@r{, overrides} P
+@vindex TEXPKS@r{, overrides} P
+@vindex GLYPHFONTS@r{, overrides} P
+@vindex TEXFONTS@r{, overrides} P
+Use @var{path} to search for bitmap PK font files is @var{path}. The
+@code{PKFONTS}, @code{TEXPKS}, @code{GLYPHFONTS}, and @code{TEXFONTS}
+environment variables override this. @xref{Supported file formats,,,
+kpathsea, Kpathsea}.
+
+@item q*
+@itemx Q
+@opindex q @r{config command (quiet)}
+@opindex Q @r{config command (quiet)}
+Run quietly. Same as @samp{-q}, @pxref{Option details}.
+
+@item r*
+@opindex r @r{config command (page reversal)}
+Page reversal. Same as @samp{-r}, @pxref{Option details}.
+
+@item R @var{num1 num2 @dots{}}
+@opindex R @r{fallback resolution config command}
+@cindex fallback resolutions
+@cindex default resolutions
+@cindex last-resort scaling, with @code{R}
+Define the list of default resolutions for PK fonts. If a font size
+actually used in a document is not available and cannot be created,
+Dvips will scale the font found at the closest of these resolutions to
+the requested size, using PostScript scaling. The resulting output may
+be ugly, and thus a warning is issued. To turn this last-resort scaling
+off, use a line with just the @samp{R} and no numbers.
+
+The given numbers must be sorted in increasing order; any number smaller
+than the preceding one is ignored. This is because it is better to
+scale a font up than down; scaling down can obliterate small features in
+the character shape.
+
+@vindex DVIPSSIZES@r{, overrides} R
+@vindex TEXSIZES@r{, overrides} R
+The environment and config file values @samp{DVIPSSIZES} or
+@samp{TEXSIZES} override this configuration file setting.
+
+@vindex default_texsizes @r{Make variable}
+If no @samp{R} settings or environment variables are specified, a list
+compiled in during installation is used. This default list is defined by
+the Makefile variable @samp{default_texsizes}, defined in the file
+@file{make/paths.make}.
+
+@item s*
+@opindex s @r{config command (save/restore)}
+Output global save/restore. Same as @samp{-s}, @pxref{Option details}.
+
+@item S @var{path}
+@opindex S @r{config command (pict path)}
+@vindex TEXPICTS@r{, overrides} S
+@vindex TEXINPUTS@r{, overrides} S
+Use @var{path} to search for special illustrations (Encapsulated
+PostScript files or psfiles). The @code{TEXPICTS} and then
+@code{TEXINPUTS} environment variables override this.
+
+@item T @var{path}
+@opindex T @r{config command (TFM path)}
+@vindex TFMFONTS@r{, overrides} T
+@vindex TEXFONTS@r{, overrides} T
+Use @var{path} to search for TFM files. The @code{TFMFONTS} and then
+@code{TEXFONTS} environment variables overrides this. This path is used
+for resident fonts and fonts that can't otherwise be found.
+
+@item U*
+@opindex U @r{config command (Xerox 4045)}
+Work around bug in Xerox 4045 printer. Same as @samp{-U}, @pxref{Option
+details}.
+
+@item V @var{path}
+@opindex V @r{config command (vf path)}
+@cindex virtual font path
+@cindex device dependency, and virtual fonts
+Use @var{path} to search for virtual font files. This may be
+device-dependent if you use virtual fonts to simulate actual fonts on
+different devices.
+
+@item W @r{[@var{string}]}
+@opindex W @r{config command (warning)}
+@cindex warning messages, defining
+If @var{string} is supplied, write it to standard error after reading
+all the configuration files; with no @var{string}, cancel any previous
+@samp{W} message. This is useful in the default configuration file to
+remind users to specify a printer, for instance, or to notify users
+about special characteristics of a particular printer.
+
+@item X @var{num}
+@opindex X @r{config command (horizontal resolution)}
+Horizontal resolution. Same as @samp{-X} (@pxref{Option details}).
+
+@item Y @var{num}
+@opindex Y @r{config command (vertical resolution)}
+Vertical resolution. Same as @samp{-Y} (@pxref{Option details}).
+
+@item Z*
+@opindex Z @r{config command (compression)}
+Compress bitmap fonts. Same as @samp{-Z} (@pxref{Option details}).
+
+@item z*
+@opindex z @r{config command (secure mode)}
+Disables execution of system commands, like @samp{-R}
+(@pxref{Option details}). If @samp{-R1} is given to disable system
+commands, however, this will not re-enable them.
+
+@end table
+
+
+@node Paper size and landscape
+@chapter Paper size and landscape orientation
+
+@cindex paper size, general
+
+Most @TeX{} documents at a particular site are designed to use the
+standard paper size (letter size in the United States, A4 in Europe).
+The Dvips program can be customized either sitewide or for a particular
+printer.
+
+@cindex landscape orientation, defined
+But many documents are designed for other paper sizes. For instance,
+you may want to design a document that has the long edge of the paper
+horizontal. This can be useful when typesetting booklets, brochures,
+complex tables, or many other documents. This type of paper orientation
+is called @dfn{landscape} orientation (the default orientation is
+@dfn{portrait}). Alternatively, a document might be designed for ledger
+or A3 paper.
+
+Since the intended paper size is a document design decision, not a
+printing decision, such information should be given in the @TeX{} file
+and not on the Dvips command line. For this reason, Dvips supports a
+@samp{papersize} special. It is hoped that this special will become
+standard over time for @TeX{} previewers and other printer drivers.
+
+Some @LaTeX{} packages, e.g., @samp{hyperref.sty}, write a
+@samp{papersize} special into the DVI file. In this case, you need
+not and should not attempt to override it manually.
+
+@menu
+* papersize special:: Specifying the paper size in TeX.
+* Config file paper sizes:: Specifying printer- and site-specific sizes.
+* Paper trays:: Changing paper trays automatically.
+@end menu
+
+
+@node papersize special
+@section @samp{papersize} special
+
+@findex papersize @r{special}
+
+The format of the @samp{papersize} special is
+
+@example
+\special@{papersize=@var{width},@var{height}@}
+@end example
+
+@noindent
+@var{width} is the horizontal size of the page, and @var{height} is the
+vertical size. The dimensions supported are the same as for @TeX{};
+namely, in (inches), cm (centimeters), mm (millimeters), pt (points), sp
+(scaled points), bp (big points, the same as the default PostScript
+unit), pc (picas), dd (didot points), and cc (ciceros).
+
+@findex landscape@r{, as @code{\special}}
+For a US letter size landscape document, the @code{papersize} would be:
+@example
+\special@{papersize=11in,8.5in@}
+@end example
+
+@noindent
+An alternate specification of @code{landscape}:
+@example
+\special@{landscape@}
+@end example
+
+@noindent
+This is supported for backward compatibility, but it is hoped that
+reventually the @code{papersize} comment will dominate.
+
+Of course, such a @code{\special} only informs Dvips of the desired
+paper size; you must also adjust @code{\hsize} and @code{\vsize} in your
+@TeX{} document typeset to those dimensions.
+
+The @code{papersize} special must occur somewhere on the first page of
+the document.
+
+
+@node Config file paper sizes
+@section Configuration file paper size command
+
+@cindex paper size configuration file command
+@cindex configuration file paper size command
+
+The @samp{@@} command in a configuration file sets the paper size
+defaults and options. The first @samp{@@} command defines the default
+paper size. It has three possible parameters:
+
+@example
+@@ @r{[}@var{name} @r{[}@var{hsize} @var{vsize}@r{]]}
+@end example
+
+If @samp{@@} is specified on a line by itself, with no parameters, it
+instructs Dvips to discard all previous paper size information (possibly
+from another configuration file).
+
+If three parameters are given, with the first parameter being a name and
+the second and third being a dimension (as in @samp{8.5in} or
+@samp{3.2cc}, just like in the @samp{papersize} special), then the
+option is interpreted as starting a new paper size description, where
+@var{name} is the name and @var{hsize} and @var{vsize} define the
+horizontal and vertical size of the sheet of paper, respectively. For
+example:
+
+@example
+@@ letterSize 8.5in 11in
+@end example
+
+If both @var{hsize} and @var{vsize} are zero (you must still specify
+units!) then any page size will match. If the @samp{@@} character is
+immediately followed by a @samp{+} sign, then the remainder of the line
+(after skipping any leading blanks) is treated as PostScript code to
+send to the printer, presumably to select that particular paper size:
+
+@example
+@@ letter 8.5in 11in
+@@+ %%BeginPaperSize: Letter
+@@+ letter
+@@+ %%EndPaperSize
+@end example
+
+After all that, if the first character of the line is an exclamation
+point, then the line is put in the initial comments section of the final
+output file; else, it is put in the setup section of the output file.
+For example:
+
+@example
+@@ legal 8.5in 14in
+@@+ ! %%DocumentPaperSizes: Legal
+@@+ %%BeginPaperSize: Legal
+@@+ legal
+@@+ %%EndPaperSize
+@end example
+
+When Dvips has a paper format name given on the command line, it looks
+for a match by the @var{name}; when it has a @samp{papersize} special,
+it looks for a match by dimensions. The first match found (in the order
+the paper size information is found in the configuration file) is used.
+If nothing matches, a warning is printed and the first paper size is
+used. The dimensions must match within a quarter of an inch. Landscape
+mode for all paper sizes is automatically supported.
+
+If your printer has a command to set a special paper size, then give
+dimensions of @samp{0in 0in}; the PostScript code that sets the paper
+size can refer to the dimensions the user requested as @samp{hsize} and
+@samp{vsize}; these will be macros defined in the PostScript that return
+the requested size in default PostScript units. Virtually all of the
+PostScript commands you use here are device-dependent and degrade the
+portability of the file; that is why the default first paper size entry
+should not send any PostScript commands down (although a structured
+comment or two would be okay). Also, some printers want
+@samp{BeginPaperSize} comments and paper size setting commands; others
+(such as the NeXT) want @samp{PaperSize} comments and they will handle
+setting the paper size. There is no solution I could find that works
+for both (except maybe specifying both).
+
+@flindex mkdvipspapers
+The Perl 5 script @file{contrib/mkdvipspapers} in the distribution
+directory may help in determining appropriate paper size definitions.
+
+@cindex a4 paper size, as default
+If your printers are configured to use A4 paper by default, the
+configuration file (probably the global @file{config.ps} in this case)
+should include this as the first @samp{@@} command:
+
+@example
+@@ A4size 210mm 297mm
+@@+ %%PaperSize: A4
+@end example
+
+@noindent
+so that @code{A4size} is used as the default, and not @code{A4} itself;
+thus, no PostScript @code{a4} command is added to the output file,
+unless the user explicitly says to use paper size @samp{a4}. That is,
+by default, no paper size PostScript command should be put in the
+output, but Dvips will still know that the paper size is A4 because
+@samp{A4size} is the first (and therefore default) size in the
+configuration file.
+
+Executing the @samp{letter} or @samp{a4} or other PostScript operators
+cause the document to be nonconforming and can cause it not to print on
+certain printers, so the default paper size should not execute such an
+operator if at all possible.
+
+
+@node Paper trays
+@section Paper trays
+
+@cindex paper trays
+@cindex dual paper trays
+@cindex multiple paper trays
+@cindex HP4Si printer and paper trays
+
+Some printers, such as the Hewlett-Packard HP4si, have multiple paper
+trays. You can set up Dvips to take advantage of this using the
+@code{bop-hook} PostScript variable (@pxref{PostScript hooks}).
+
+@cindex letterhead tray
+For example, suppose you have an alternate tray stocked with letterhead
+paper; the usual tray has the usual paper. You have a document where
+you want the first page printed on letterhead, and the remaining pages
+on the usual paper. You can create a header file, say
+@file{firstletterhead.PS}, with the following (PostScript) code
+(@code{bop-hook} is passed the current physical page number, which
+starts at zero):
+
+@example
+/bop-hook @{ dup 0 eq @{ @var{alternatetray} @} @{ @var{normaltray} @} ifelse @} def
+@end example
+
+@noindent where @var{alternatetray} and @var{normaltray} are the appropriate
+commands to select the paper trays. On the 4SI, @var{alternatetray} is
+@samp{statusdict begin 1 setpapertray end} and @var{normaltray} is
+@samp{statusdict begin 0 setpapertray end}.
+
+Then, include the file with either
+@itemize @bullet
+@item the @samp{-h} command-line option (@pxref{Option details}); or
+
+@item the @samp{h} config file option (@pxref{Configuration file
+commands}); or
+
+@item @samp{\special@{header=@var{file}@}} in your @TeX{} document
+(@pxref{Including headers from TeX,, Including headers from @TeX{}}).
+
+@end itemize
+
+
+@node Interaction with PostScript
+@chapter Interaction with PostScript
+
+@cindex interaction with PostScript
+@cindex PostScript interaction
+
+Dvips supports inclusion of PostScript figure files (e.g., Encapsulated
+PostScript), downloading other header files (e.g., fonts), including
+literal PostScript code, and hypertext.
+
+@menu
+* PostScript figures:: Including an Encapsulated PostScript figure.
+* Header files:: Downloading extra definitions.
+* Literal PS:: Writing literal PostScript code.
+* Hypertext:: Producing HyperPostScript to make PDF.
+@end menu
+
+
+@node PostScript figures
+@section PostScript figures
+
+Scaling and including PostScript graphics is a breeze---if the PostScript
+file is correctly formed. Even if it is not, however, the file can usually
+be accommodated with just a little more work.
+
+@menu
+* Bounding box:: The %%BoundingBox EPS comment.
+* \includegraphics:: The LaTeX \includegraphics macro.
+* EPSF macros:: Including the file in TeX.
+* psfile special:: The basic special.
+* Dynamic creation of graphics:: Handling compressed or generated figures.
+* Fonts in figures:: The %*Font comment.
+@end menu
+
+
+@node Bounding box
+@subsection The bounding box comment
+
+@cindex bounding box, comment for
+
+The most important feature of a good PostScript file from the standpoint
+of including it in another document is an accurate bounding box comment.
+Every well-formed PostScript file has a comment describing where on the
+page the graphic is located, and how big that graphic is.
+
+@cindex big points
+@cindex PostScript units
+@cindex bounding box, defined
+This information is given as the lower left and upper right corners of
+the box just enclosing the graphic, and is thus referred to as the
+@dfn{bounding box}. These coordinates are given in the default
+PostScript units (there are precisely 72 PostScript units to the inch,
+like @TeX{} big points) with respect to the lower left corner of the
+sheet of paper.
+
+@findex %%BoundingBox
+To see if a PostScript file has a bounding box comment, just look at the
+first few lines of the file. PostScript files are standard ASCII, so
+you can use any text editor to do this. If within the first few dozen
+lines there is a line like
+
+@example
+%%BoundingBox: 25 50 400 300
+@end example
+
+@noindent
+(with any reasonable numbers), chances are very good that the file is
+Encapsulated PostScript and will work easily with Dvips. If the file
+contains instead a line like
+
+@findex atend@r{, bounding box specification}
+@findex (atend)@r{, bounding box specification}
+@example
+%%BoundingBox: (atend)
+@end example
+
+@noindent
+the file is still probably Encapsulated PostScript, but the bounding box
+is given at the end of the file. Dvips needs it at the beginning. You
+can move it with that same text editor, or a simple script. (The
+bounding box is given in this way when the program that generated the
+PostScript couldn't know the size in advance, or was too lazy to compute
+it.)
+
+@pindex bbfig
+@cindex bounding box, determining
+If the document lacks a @samp{%%BoundingBox:} altogether, you can
+determine one in a couple of ways. One is to use the @samp{bbfig}
+program distributed with Dvips in the @file{contrib} directory. This can
+usually find the correct bounding box automatically; it works best with
+Ghostscript.
+
+@vindex 612 792 @r{bounding box size}
+If the comment looks like this:
+@example
+%%BoundingBox: 0 0 612 792
+@end example
+
+@noindent
+the graphic claims to take up an entire sheet of paper. This is
+usually a symptom of a bug in the program that generated it.
+
+The other is to do it yourself: print the file. Now, take a ruler, and
+make the following measurements (in PostScript units, so measure in
+inches and multiply by 72): From the left edge of the paper to the
+leftmost mark on the paper is @var{llx}, the first number. From the
+bottom edge of the paper to the bottommost mark on the paper is
+@var{lly}, the second number. From the left edge of the paper to the
+rightmost mark on the paper is @var{urx}, the third number. The fourth
+and final number, @var{ury}, is the distance from the bottom of the page
+to the uppermost mark on the paper.
+
+Once you have the numbers, add a comment of the following form as the
+second line of the document. (The first line should already be a line
+starting with the two characters @samp{%!}; if it is not, the file
+probably isn't PostScript.)
+
+@example
+%%BoundingBox: @var{llx} @var{lly} @var{urx} @var{ury}
+@end example
+
+@noindent
+Or, if you don't want to modify the file, you can simply write these
+numbers down in a convenient place and give them in your @TeX{} document
+when you import the graphic, as described in the next section.
+
+If the document does not have such a bounding box, or if the bounding
+box is given at the end of the document, or the bounding box is wrong,
+please complain to the authors of the software package that generated
+the file.
+
+
+@node \includegraphics
+@subsection The \includegraphics macro for @LaTeX{}
+
+@cindex \includegraphics @LaTeX{} macro
+@cindex macros for epsf inclusion
+
+Once the figure file has a bounding box comment (see the previous
+section) you are ready to import the graphic into a La@TeX{}
+document. For @LaTeX{} 2e, you can use the epsf, graphics or graphicx
+packages, but the last is recommended---it has the most flexible
+syntax, and is briefly described here. Further information can be
+found in @file{grfguide} or @file{epslatex}, which should be included
+in your @LaTeX{} distribution in DVI, PDF, or other formats. (If you
+are still using La@TeX{} 2.09, use epsf.sty).
+
+Just put the following command into your preamble:
+
+@example
+\usepackage[dvips]@{graphicx@}
+@end example
+
+Depending on your system, a suitable driver setup may already be
+present, so that @LaTeX{} automatically produces DVI files suitable for
+Dvips. In this case you can leave out the @samp{[dvips]} parameter.
+
+Now, at the point you want to include a file @file{foo.eps}, enter a
+line such as:
+
+@example
+\includegraphics@{foo.eps@}
+@end example
+
+However, it is usually best to omit the file extension and only use
+
+@example
+\includegraphics@{foo@}
+@end example
+
+@noindent because then you can process the same LaTeX file with
+different @TeX{} engines or DVI converters if you also provide
+suitable graphics files for them, e.g., @file{foo.pdf} or
+@file{foo.png}.
+
+@cindex bounding box, supplying to @TeX{}
+The \includegraphics command has many options, specified in
+@samp{key=value} syntax, to allow you to resize, rotate or trim the
+included graphic---see @file{grfguide} or @file{epslatex}. If your
+file does not have a bounding box comment, you can supply the numbers
+as determined in the previous section, in the same order they would
+have been in a normal bounding box comment:
+
+@example
+\includegraphics[bb=100 100 500 500]@{foo.ps@}
+@end example
+
+@noindent
+Now, save your changes and run @LaTeX{} and Dvips; the output should
+have your graphic positioned at precisely the point you indicated,
+occupying the proper amount of space.
+
+PostScript graphics have their origin in the lower left
+corner. Therefore, in @TeX{}, a graphic will occupy a box that extends
+far above the line where it is put in, but has depth zero below it.
+Combining @samp{\includegraphics} with @samp{\parbox} commands or
+minipages can sometimes be confusing when this is not taken into
+account.
+
+
+@node EPSF macros
+@subsection Using the EPSF macros
+
+@cindex EPSF macros
+@cindex macros for epsf inclusion
+
+If you are using @LaTeX{} 2e, use the @samp{graphics} or @samp{graphicx}
+package. @xref{\includegraphics}.
+
+If you are using plain @TeX{} or La@TeX{} 2.09, you need @file{epsf.tex}
+(for plain @TeX{}) and @file{epsf.sty} (for La@TeX{}). For plain
+@TeX{}, add a line like this near the top of your input file:
+
+@flindex epsf.tex
+@example
+\input epsf
+@end example
+
+@noindent
+@flindex epsf.sty
+If you are using @LaTeX{} 2.09, add the @samp{epsf} style option, as in:
+
+@example
+\documentstyle[12pt,epsf]@{article@}
+@end example
+
+@noindent
+In any case, the above only needs to be done once, no matter how many
+figures you plan to include.
+
+Now, at the point you want to include a file, enter a line such as:
+
+@example
+\epsffile@{foo.eps@}
+@end example
+
+@findex \leavevmode
+@cindex bounding box, supplying to @TeX{}
+If you are using @LaTeX{}, you may need to add @code{\leavevmode}
+immediately before the @code{\epsffile} command to get certain
+environments to work correctly. If your file does not have a bounding
+box comment, you can supply the numbers as determined in the previous
+section, in the same order they would have been in a normal bounding box
+comment:
+
+@example
+\epsffile[100 100 500 500]@{foo.ps@}
+@end example
+
+@noindent
+Now, save your changes and run @TeX{} and Dvips; the output should have
+your graphic positioned at precisely the point you indicated, occupying
+the proper amount of space.
+
+@findex \epsffile @r{macro}
+@cindex figures, natural size
+The @code{\epsffile} macro typesets the figure as a @TeX{} @code{\vbox}
+at the point of the page that the command is executed. By default, the
+graphic will have its `natural' width (namely, the width of its bounding
+box). The @TeX{} box will have depth zero and its natural height. By
+default, the graphic will be scaled by any DVI magnification in effect,
+just as is everything else in your document. See the next section for
+more information on scaling.
+
+@vindex \epsfverbosetrue
+@cindex verbose EPSF processing
+If you want @TeX{} to report the size of the figure as a message on your
+terminal when it processes each figure, give the command:
+
+@example
+\epsfverbosetrue
+@end example
+
+@menu
+* EPSF scaling::
+* EPSF clipping::
+@end menu
+
+
+@node EPSF scaling
+@subsubsection EPSF scaling
+
+@cindex scaling of figures
+@cindex figures, scaling
+
+Usually, you will want to scale an EPSF figure to some size appropriate
+for your document, since its natural size is determined by the creator
+of the EPS file.
+
+The best way to do this is to assign the desired size to the @TeX{}
+@code{\epsfxsize} or @code{\epsfysize} variables, whichever is more
+convenient for you. That is, put
+
+@vindex \epsfxsize
+@example
+\epsfxsize=@var{dimen}
+@end example
+
+@noindent
+right before the call to @code{\epsffile}. Then the width of the @TeX{}
+box will be @var{dimen} and its height will be scaled proportionately.
+Similarly, you can set the vertical size with
+
+@vindex \epsfysize
+@example
+\epsfysize=@var{dimen}
+@end example
+
+@noindent
+in which case the height will be set and the width scaled
+proportionally.
+
+If you set both, both will be honored, but the aspect ratio of the
+included graphic may necessarily be distorted, i.e., its contents
+stretched in one direction or the other.
+
+@findex \epsfsize
+You can resize graphics in a more general way by redefining the
+@code{\epsfsize} macro. @code{\epsffile} calls this with two
+parameters: the natural horizontal and vertical sizes of the PostScript
+graphic. @code{\epsfsize} must expand to the desired horizontal size,
+that is, the width of the @code{\vbox}. Schematically:
+
+@example
+\def\epsfsize#1#2@{@var{body}@}
+@end example
+
+Some useful definitions of @var{body}:
+
+@table @samp
+@item \epsfxsize
+This definition (the default) enables the default features listed above,
+by setting @code{\epsfxsize} to the same value it had before the macro
+was called.
+
+@item #1
+Force the natural size by returning the first parameter (the original
+width).
+
+@item 0pt
+A special case, equivalent to @samp{#1}.
+
+@item 0.5#1
+Scale to half the natural size.
+
+@item \hsize
+Scale to the current @code{\hsize}. (In @LaTeX{}, use @code{\textwidth}
+instead of @code{\hsize}.)
+
+@item \ifnum#1>\hsize\hsize\else#1\fi
+If the natural width is greater than the current @code{\hsize}, scale to
+@code{\hsize}, otherwise use the natural width.
+
+@end table
+
+@cindex DVI magnification
+@cindex magnification, DVI
+@vindex \magnification
+For compatibility with other PostScript drivers, it is possible to turn
+off the default scaling of included figures by the DVI magnification
+with the following @TeX{} command:
+
+@vindex /magscale
+@example
+\special@{! /magscale false def@}
+@end example
+
+@noindent
+Use of this command is not recommended because it will make the
+@code{\epsffile} graphics the ``wrong'' size if global magnification is
+being used, and it will cause any PostScript graphics to appear
+improperly scaled and out of position if a DVI to DVI program is used to
+scale or otherwise modify the document.
+
+@findex bop-hook
+DVI magnification is not applied to any output from code you write in
+@samp{bop-hook} or its ilk (@pxref{PostScript hooks}),
+
+
+@node EPSF clipping
+@subsubsection EPSF clipping
+
+@cindex clipping of EPSF
+@cindex bounding box, inaccurate
+@cindex text in figures, chopped off
+@cindex lines in figures, wrong width
+
+By default, clipping is disabled for included EPSF images. This is
+because clipping to the bounding box dimensions often cuts off a
+small portion of the figure, due to slightly inaccurate bounding
+box arguments. The problem might be subtle; lines around the boundary
+of the image might be half their intended width, or the tops or
+bottoms of some text annotations might be sliced off. If you want to
+turn clipping on, just use the command
+
+@example
+\epsfclipon
+@end example
+
+@noindent
+and to turn clipping back off, use
+
+@example
+\epsfclipoff
+@end example
+
+
+@node psfile special
+@subsection @samp{psfile} special
+
+@findex psfile @r{special}
+
+The basic special for file inclusion is as follows:
+
+@example
+\special@{psfile=@var{filename}.ps @r{[}@var{key}=@var{value}@r{]} @dots{} @}
+@end example
+
+@noindent
+This downloads the PostScript file @file{@var{filename}.ps} such that
+the current point will be the origin of the PostScript coordinate
+system. The optional @var{key}@t{=}@var{value} assignments allow you to
+specify transformations on the PostScript.
+
+The possible @var{key}s are:
+
+@table @samp
+
+@item hoffset
+The horizontal offset (default 0)
+@item voffset
+The vertical offset (default 0)
+@item hsize
+The horizontal clipping size (default 612)
+@item vsize
+The vertical clipping size (default 792)
+@item hscale
+The horizontal scaling factor (default 100)
+@item vscale
+The vertical scaling factor (default 100)
+@item angle
+The rotation (default 0)
+@item clip
+Enable clipping to the bounding box
+@end table
+
+The dimension parameters are all given in PostScript units.
+The @samp{hscale} and @samp{vscale} are given in non-dimensioned percentage
+units, and the rotation value is specified in degrees.
+Thus
+
+@example
+\special@{psfile=foo.ps hoffset=72 hscale=90 vscale=90@}
+@end example
+
+@noindent
+will shift the graphics produced by file @file{foo.ps} right by one inch
+and will draw it at 0.9 times normal size. Offsets are given relative
+to the point of the special command, and are unaffected by scaling or
+rotation. Rotation is counterclockwise about the origin. The order of
+operations is to rotate the figure, scale it, then offset it.
+
+For compatibility with older PostScript drivers, it is possible to change
+the units that @samp{hscale} and @samp{vscale} are given in. This can be
+done by redefining @samp{@@scaleunit}
+@vindex scaleunit
+in @samp{SDict}
+@vindex SDict
+by a @TeX{} command such as
+
+@example
+\special@{! /@@scaleunit 1 def@}
+@end example
+
+@noindent
+The @samp{@@scaleunit} variable, which is by default 100, is what
+@samp{hscale} and @samp{vscale} are divided by to yield an absolute
+scale factor.
+
+
+@node Dynamic creation of graphics
+@subsection Dynamic creation of PostScript graphics files
+
+@cindex dynamic creation of graphics
+@cindex compressed PostScript
+@cindex uncompressing PostScript
+
+PostScript is an excellent page description language---but it does tend
+to be rather verbose. Compressing PostScript graphics files can reduce
+them by factor of five or more. For this reason, if the name of an
+included PostScript file ends with @file{.Z} or @file{.gz}, Dvips
+automatically runs @samp{gzip -d}. For example:
+
+@example
+\epsffile[72 72 540 720]@{foo.ps.gz@}
+@end example
+
+@noindent
+Since the results of such a command are not accessible to @TeX{}, if you
+use this facility with the @file{epsf} macros, you need to supply the
+bounding box parameter yourself, as shown.
+
+More generally, if the filename parameter to one of the graphics
+inclusion techniques starts with a left quote (@samp{`}), the parameter
+is instead interpreted as a command to execute that will send the actual
+file to standard output. For example:
+
+@example
+\special@{psfile="`gnuplot foo"@}
+@end example
+
+@noindent
+@flindex gnuplot
+to include the file @file{foo}. Of course, the command to be executed
+can be anything, including using a file conversion utility such as
+@file{tek2ps} or whatever is appropriate. This feature can be disabled
+with the @samp{-R} command-line option or @samp{R} configuration option.
+
+
+@node Fonts in figures
+@subsection Fonts in figures
+
+@cindex figures and fonts
+@cindex fonts, in PostScript figures
+@findex %*Font
+
+You can use any font available to @TeX{} and Dvips within a graphics
+file by putting a @code{%*Font:} line in the leading commentary of the
+file. Schematically, this looks like:
+
+@example
+%*Font: @var{tfmname} @var{scaledbp} @var{designbp} @var{hex-start}:@var{hex-bitstring}
+@end example
+
+Here is the meaning of each of these elements:
+
+@table @var
+@item tfmname
+The @TeX{} TFM filename, e.g., @file{cmr10}. You can give the same
+@var{tfmname} on more than one @samp{%*Font} line; this is useful when
+the number of characters from the font used needs a longer
+@var{hex-bitstring} (see item below) than conveniently fits on one line.
+
+@item scaledbp
+The size at which you are using the font, in PostScript points (@TeX{}
+big points). 72@dmn{bp} = 72.27@dmn{pt} = 1@dmn{in}.
+
+@item designbp
+The designsize of the font, again in PostScript points. This should
+match the value in the TFM file @var{tfmname}. Thus, for @file{cmr10},
+it should be @samp{9.96265}.
+
+@item hex-start
+The character code of the first character used from the font, specified
+as two ASCII hexadecimal characters, e.g., @samp{4b} or @samp{4B} for
+@samp{K}.
+
+@item hex-bitstring
+An arbitrary number of ASCII hexadecimal digits specifying which
+characters following (and including) @var{hex-start} are used. This is
+treated as a bitmap. For example, if your figure used the single letter
+@samp{K}, you would use @samp{4b:8} for @var{hex-start} and
+@var{hex-bitstring}. If it used @samp{KLMNP}, you would use
+@samp{4b:f4}.
+
+@end table
+
+MetaPost's output figures contain lines like this for bitmap fonts used
+in a MetaPost label (@pxref{MetaPost,,, web2c, Web2c}).
+
+
+@node Header files
+@section PostScript header files
+
+@cindex header files, defined
+@cindex PostScript header files
+
+@dfn{Header files} are bits of PostScript included in the output file;
+generally they provide support for special features, rather than
+producing any printed output themselves. You can explicitly request
+downloading header files if necessary for some figure, or to achieve
+some special effect.
+
+@vindex psheaderdir
+@flindex .pro @r{prologue files}
+@flindex .lpro @r{long prologue files}
+Dvips includes some headers on its own initiative, to implement features
+such as PostScript font reencoding, bitmap font downloading, handling of
+@code{\special}'s, and so on. These standard headers are the
+@file{.pro} files (for ``prologue'') in the installation directory
+@samp{$(psheaderdir)}; they are created from the @file{.lpro} (``long
+prologue'') files in the distribution by stripping
+comments, squeezing blank lines, etc., for maximum efficiency. If you
+want to peruse one of the standard header files, read the @file{.lpro}
+version.
+
+@vindex userdict@r{, and dictionary files}
+@cindex dictionary, @code{userdict}
+The PostScript dictionary stack will be at the @samp{userdict} level
+when header files are included.
+
+@menu
+* Including headers from TeX::
+* Including headers from the command line::
+* Headers and memory usage::
+@end menu
+
+
+@node Including headers from TeX
+@subsection Including headers from @TeX{}
+
+@cindex including headers in @TeX{}
+@findex header=@var{file} \special
+@cindex @TeX{}, including headers in
+
+@cindex headers, including in @TeX{}
+In order to get a particular graphic file to work, a certain font or
+header file might need to be sent first. The Dvips program provides
+support for this with the @samp{header} @code{\special}. For instance,
+to ensure that @file{foo.ps} gets downloaded:
+
+@example
+\special@{header=foo.ps@}
+@end example
+
+@cindex fonts, as header files
+As another example, if you have some PostScript code that uses a
+PostScript font not built into your printer, you must download it to the
+printer. If the font isn't used elsewhere in the document, Dvips can't
+know you've used it, so you must include it in the same way, as in:
+
+@example
+\special@{header=putr.pfa@}
+@end example
+
+@noindent
+to include the font definition file for Adobe Utopia Roman.
+
+The @code{header} also special allows for specifying some additional
+code that should be inserted into the PostScript document before and after
+the file itself, as follows:
+
+@example
+\special@{header=@{foo.ps@} pre=@{pre code@} post=@{post code@}@}
+@end example
+
+@cindex before header, inserting code
+@cindex after header, inserting code
+@findex pre @r{code before headers}
+@findex post @r{code after headers}
+This will insert @code{pre code} just before @file{foo.ps} and
+@code{post code} just after. It is required to use the (balanced)
+braces in @emph{all} of the arguments, including the @code{header},
+when using this extended syntax.
+
+This allows, for instance, dynamic headers, where some of the content
+depends on settings from the user in (La)@TeX{}. Another application
+is the inclusion of graphics inside the PostScript header, so that
+they can be reused throughout the document, as with logs. That avoids
+including the same graphic several times. This is implemented in the
+@file{graphics/graphicx-psmin} package.
+
+This extended syntax has one additional feature. When Dvips finds the
+extended syntax, it will also look in the installed @file{tex/}
+tree(s) for the header file (@file{foo.ps} in our example), and not
+only in the current directory and dvips tree as the original syntax
+does. This is because common graphics may well come with packages
+which are installed in the @file{tex/} tree.
+
+
+@node Including headers from the command line
+@subsection Including headers from the command line
+
+@cindex including headers from the command line
+@cindex command line, including headers from
+@cindex headers, including from the command line
+
+You can include headers when you run Dvips, as well as from your
+document (see the previous section). To do this, run Dvips with the
+option @samp{-P @var{header}}; this will read the file
+@file{config.@var{header}}, which in turn can specify a header file to
+be downloaded with the @samp{h} option. @xref{Configuration file
+commands}. These files are called @file{@var{header}.cfg} on MS-DOS.
+
+@cindex duplex printers
+@cindex simplex mode on duplex printers
+@cindex screen frequencies, setting
+You can arrange for the same file to serve as a @samp{-P} config file
+and the downloadable header file, by starting the lines of PostScript
+code with a space, leaving only the @samp{h} line and any comments
+starting in the first column. As an example, see
+@file{contrib/volker/config.*} (@file{contrib/volker/*.cfg} on MS-DOS).
+(These files also perform useful functions: controlling duplex/simplex
+mode on duplex printers, and setting various screen frequencies;
+@file{contrib/volker/README} explains further.)
+
+
+@node Headers and memory usage
+@subsection Headers and memory usage
+
+@cindex headers and memory usage
+@cindex memory usage, and headers
+
+@cindex sections of output file, and memory
+@cindex output file, sectioning of
+Dvips tries to avoid overflowing the printer's memory by splitting the
+output files into ``sections'' (see the @samp{-i} option in @ref{Option
+details}). Therefore, for all header files, Dvips debits the printer VM
+budget by some value. If the header file has, in its leading
+commentary a line of the form
+
+@findex VMusage
+@findex %%VMusage
+@example
+%%VMusage: @var{min} @var{max}
+@end example
+
+@noindent
+then @var{max} is used. If there is no @code{%%VMusage} line, then
+the size (in bytes) of the header file is used as an approximation.
+
+Illustrations (figure files) are also checked for @code{%%VMusage} line.
+
+
+@node Literal PS
+@section Literal PostScript
+
+@cindex literal PostScript, using
+@cindex PostScript code, literal
+
+You can include literal PostScript code in your document in several ways.
+
+@menu
+* " special:: To include inline PostScript code.
+* ps special:: Inline PostScript without save/restore.
+* PostScript hooks:: Specifying code to run in the PS interpreter.
+* Literal headers:: Literal PostScript for the whole document.
+* Literal examples:: Neat example.
+@end menu
+
+
+@node " special
+@subsection @code{"} special: Literal PostScript
+
+@findex " @r{special (literal PostScript)}
+
+For simple graphics, or just for experimentation, literal PostScript
+code can be included. Simply use a @code{\special} beginning with a
+double quote character @samp{"}; there is no matching closing @samp{"}.
+
+For instance, the following (simple) graphic:
+
+@iftex
+@tex
+\vskip\baselineskip
+\vbox to 100bp{\vss % a bp is the same as a PostScript unit
+\special{" newpath 0 0 moveto 100 100 lineto 394 0 lineto
+closepath gsave 0.8 setgray fill grestore stroke}}
+@end tex
+@end iftex
+@ifinfo
+[ picture of a grey triangle ]
+@end ifinfo
+
+@noindent
+was created by typing:
+
+@example
+\vbox to 100bp@{\vss % a bp is the same as a PostScript unit
+ \special@{" newpath 0 0 moveto 100 100 lineto 394 0 lineto
+ closepath gsave 0.8 setgray fill grestore stroke@}@}
+@end example
+
+You are responsible for leaving space for such literal graphics, as with
+the @code{\vbox} above.
+
+
+@node ps special
+@subsection @samp{ps} special
+
+@findex ps @r{special}
+
+@cindex save/restore, and specials
+Generally, Dvips encloses specials in a PostScript save/restore pair,
+guaranteeing that the special will have no effect on the rest of the
+document. The @samp{ps} special, however, allows you to insert literal
+PostScript instructions without this protective shield; you should
+understand what you're doing (and you shouldn't change the PostScript
+graphics state unless you are willing to take the consequences). This
+command can take many forms because it has had a torturous history; any
+of the following will work:
+
+@example
+\special@{ps:@var{text}@}
+\special@{ps::@var{text}@}
+\special@{ps::[begin]@var{text}@}
+\special@{ps::[end]@var{text}@}
+@end example
+
+@noindent
+(with longer forms taking precedence over shorter forms, when they are
+present). @samp{ps::} and @samp{ps::[end]} do no positioning, so they
+can be used to continue PostScript literals started with @samp{ps:} or
+@samp{ps::[begin]}.
+
+@findex plotfile@r{, @samp{ps} subspecial}
+In addition, the variant
+
+@example
+\special@{ps: plotfile @var{filename}@}
+@end example
+
+@noindent
+@flindex rotate.tex
+inserts the contents of @var{filename} verbatim into the output (except
+for omitting lines that begin with %). An example of the proper use of
+literal specials can be found in the file @file{rotate.tex}, which makes
+it easy to typeset text turned in multiples of 90 degrees.
+
+
+@node Literal headers
+@subsection Literal headers: @samp{!} @code{\special}
+
+@cindex literal headers
+@vindex SDict @r{dictionary}
+
+@findex ! @r{special (literal PS header)}
+@cindex dictionary, @code{SDict}
+You can download literal PostScript header code in your @TeX{} document,
+for use with (for example) literal graphics code that you include later.
+The text of a @code{\special} beginning with an @samp{!} is copied into
+the output file. A dictionary @code{SDict} will be current when this
+code is executed; Dvips arranges for @code{SDict} to be first on the
+dictionary stack when any PostScript graphic is included, whether
+literally (the @samp{"} special) or through macros (e.g.,
+@file{epsf.tex}).
+
+For example:
+
+@example
+\special@{! /reset @{ 0 0 moveto@} def@}
+@end example
+
+
+@node PostScript hooks
+@subsection PostScript hooks
+
+@cindex PostScript hooks
+
+Besides including literal PostScript at a particular place in your
+document (as described in the previous section), you can also arrange to
+execute arbitrary PostScript code at particular times while the
+PostScript is printing.
+
+@findex bop-hook
+@findex eop-hook
+@findex start-hook
+@findex end-hook
+If any of the PostScript names @code{bop-hook}, @code{eop-hook},
+@code{start-hook}, or @code{end-hook} are defined in @code{userdict},
+they will be executed at the beginning of a page, end of a page, start
+of the document, and end of a document, respectively.
+
+@cindex draft copies
+@cindex dated output
+When these macros are executed, the default PostScript coordinate system
+and origin is in effect. Such macros can be defined in headers added by
+the @samp{-h} option or the @samp{header=} special, and might be useful
+for writing, for instance, `DRAFT' across the entire page, or, with the
+aid of a shell script, dating the document. These macros are executed
+outside of the save/restore context of the individual pages, so it is
+possible for them to accumulate information, but if a document must be
+divided into sections because of memory constraints, such added
+information will be lost across section breaks.
+
+@cindex physical page number, and @code{bop-hook}
+The single argument to @code{bop-hook} is the physical page number; the
+first page gets zero, the second one, etc. @code{bop-hook} must leave
+this number on the stack. None of the other hooks are passed arguments.
+
+As an example of what can be done, the following special will write
+a light grey `DRAFT' across each page in the document:
+
+@example
+\special@{!userdict begin /bop-hook@{gsave 200 30 translate
+65 rotate /Times-Roman findfont 216 scalefont setfont
+0 0 moveto 0.7 setgray (DRAFT) show grestore@}def end@}
+@end example
+
+@findex %%Page@r{, and multi-page information}
+Using @code{bop-hook} or @code{eop-hook} to preserve information across
+pages breaks compliance with the Adobe document structuring conventions,
+so if you use any such tricks, you may also want to use the @samp{-N}
+option to turn off structured comments (such as @samp{%%Page}).
+Otherwise, programs that read your file will assume its pages are
+independent.
+
+
+@node Literal examples
+@subsection Literal examples
+
+@cindex literal PostScript, examples
+@cindex examples of literal PostScript
+
+To finish off this section, the following examples of literal PostScript
+are presented without explanation:
+
+@example
+\def\rotninety@{\special@{ps:currentpoint currentpoint translate 90
+rotate neg exch neg exch translate@}@}\font\huge=cmbx10 at 14.4truept
+\setbox0=\hbox to0pt@{\huge A\hss@}\vskip16truept\centerline@{\copy0
+\special@{ps:gsave@}\rotninety\copy0\rotninety\copy0\rotninety
+\box0\special@{ps:grestore@}@}\vskip16truept
+@end example
+
+@iftex
+@tex
+\def\rotninety{\special{ps:currentpoint currentpoint translate 90
+rotate neg exch neg exch translate}}
+\font\huge=cmbx10 at 14.4truept
+\setbox0=\hbox to0pt {\huge A\hss}
+\vskip16truept
+\centerline{\copy0\special{ps:gsave}
+ \rotninety\copy0\rotninety\copy0\rotninety
+\box0\special{ps:grestore}}
+\vskip16truept
+@end tex
+@end iftex
+@ifinfo
+[ There are 4 @samp{A} characters, each rotated 90 degrees about a
+ common center point ]
+@end ifinfo
+
+
+@example
+\vbox to 2truein@{\special@{ps:gsave 0.3 setgray@}\hrule height 2in
+width\hsize\vskip-2in\special@{ps:grestore@}\font\big=cminch\big
+\vss\special@{ps:gsave 1 setgray@}\vbox to 0pt@{\vskip2pt
+\line@{\hss\hskip4pt NEAT\hss@}\vss@}\special@{ps:0 setgray@}%
+\hbox@{\raise2pt\line@{\hss NEAT\hss@}\special@{ps:grestore@}@}\vss@}
+@end example
+
+@iftex
+@tex
+\smallskip
+\vbox to 2truein{\special{ps:gsave 0.3 setgray}\hrule height 2in
+width\hsize\vskip-2in\special{ps:grestore}\font\big=cminch\big
+\vss\special{ps:gsave 1 setgray}\vbox to 0pt{\vskip2pt
+\line{\hss\hskip4pt NEAT\hss}\vss}\special{ps:0 setgray}%
+\hbox{\raise2pt\line{\hss NEAT\hss}\special{ps:grestore}}\vss}
+@end tex
+@end iftex
+@ifinfo
+[ There is a big gray box with the word @samp{NEAT} inside in big letters ]
+@end ifinfo
+
+@findex \rotninety
+@findex gsave@r{/}grestore@r{, and literal PS}
+@findex save@r{/}restore@r{, and literal PS}
+Some caveats are in order, however. Make sure that each @code{gsave} is
+matched with a @code{grestore} on the same page. Do not use @code{save}
+and @code{restore}; they can interact with the PostScript generated by
+Dvips if care is not taken. Try to understand what the above macros are
+doing before writing your own. The @code{\rotninety} macro especially
+has a useful trick that appears again and again.
+
+
+@node Hypertext
+@section Hyper@TeX{}t
+
+@cindex hypertext support
+
+@opindex -z
+@findex html @r{specials}
+@findex pdfmark
+Dvips has support for producing hypertext PostScript documents. If you
+specify the @samp{-z} option, the @file{html:} specials described below
+will be converted into @samp{pdfmark} PostScript operators to specify
+links. Without @samp{-z}, @file{html:} specials are ignored.
+
+@cindex distiller, for PDF files
+@cindex PDF files, making
+The resulting PostScript can then be processed by a distiller program to
+make a PDF file. (It can still be handled by ordinary PostScript
+interpreters as well.) Various versions of both PC and Unix distillers
+are supported; Ghostscript includes limited distiller support
+(@pxref{Ghostscript installation}).
+
+Macros you can use in your @TeX{} document to insert the specials in the
+first place are available from @file{@var{CTAN:}/support/hypertex}. For
+CTAN info, @pxref{unixtex.ftp,,, kpathsea, Kpathsea}.
+
+@flindex @code{http://www.win.tue.nl/~dickie/idvi}
+@flindex @code{http://xxx.lanl.gov/hypertex}
+@cindex Doyle, Mark
+@cindex Bhattacharya, Tanmoy
+@cindex Java DVI reader
+@pindex idvi @r{Java DVI reader}
+@pindex dvihps@r{, hyperdvi to PostScript}
+This hypertext support (and original form of the documentation) was
+written by Mark Doyle and Tanmoy Bhattacharya as the @samp{dvihps}
+program. You can retrieve their software and additional documentation
+via the CTAN reference above. You may also be interested in the Java
+previewer IDVI, available at @url{http://www.win.tue.nl/~dickie/idvi},
+and/or in @url{http://www.emrg.com/texpdf.html}, which describes
+the process of making PDF files from TeX files in more detail.
+
+Mail archives for the original project are at
+@url{http://math.albany.edu:8800/hm/ht/}.
+
+
+@menu
+* Hypertext caveats:: Font quality, missing character psi.
+* Hypertext specials:: The details on the specials.
+@end menu
+
+
+@node Hypertext caveats
+@subsection Hypertext caveats
+
+@cindex hypertext caveats
+
+@cindex Computer Modern in PostScript
+@cindex hypertext and bitmap fonts
+@cindex hypertext caveats
+@cindex embedding Type 1 fonts
+@cindex PDF files, font quality
+If you intend to go all the way to PDF, you may want to use the standard
+35 PostScript fonts exclusively, since other fonts are embedded as
+bitmaps by default. The Adobe PDF readers are extremely slow when
+dealing with bitmap fonts and the results look terrible on the screen.
+Printouts will probably look fine, but may not take full advantage of a
+high-resolution printer. Alternatively, you can have your fonts
+embedded as Type 1 scalable outlines. The resulting PostScript files
+may be larger, but can be effectively rasterized at any resolution.
+They can also be converted to PDF files that can be used effectively at
+any screen or printer resolution.
+
+To get the TeX fonts embedded in the PostScript file as Type 1 fonts,
+add @samp{-Ppdf} to the dvips command line switches. The printout
+for a run should look something like this:
+
+@smallexample
+ dvips report -Ppdf -o report.ps
+ This is dvips(k) 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com)
+ ' TeX output 2001.06.15:0837' -> report.ps
+ <tex.pro><alt-rule.pro><texc.pro><texps.pro><special.pro>.
+ <cmbx9.pfb><cmsy6.pfb><cmsy7.pfb><cmr5.pfb><cmex10.pfb><cmr9.pfb>
+ <cmmi7.pfb><cmsy10.pfb><cmmib10.pfb><cmmi10.pfb><cmti10.pfb>
+ <cmr7.pfb><cmbx10.pfb><cmr10.pfb><cmti9.pfb><cmr12.pfb><cmbx12.pfb>
+ [1] [2<mean1.ps>] [3<bounce1-00.ps>] [4]
+@end smallexample
+
+An entry like "<cmr10.pfb>" indicates success: dvips found the Computer
+Modern Roman 10 point font in a PostScript Font Binary file, translated
+it to an ASCII encoding, and embedded it. You can confirm this by
+examining the PostScript output file, looking for the section starting
+@code{%%BeginFont: CMR10} followed by an entry @code{/FontType 1 def}.
+
+The @samp{-Ppdf} option requires that the relevant outline
+(@file{.pfa} or @file{.pfb}) files be installed (@pxref{Font
+concepts}). For example, the @file{cmr10} file might be in
+@file{/usr/share/texmf/fonts/type1/bluesky/cm/cmr10.pfb}. Your TeX
+distribution may make those fonts available in a separate optional
+package (e.g., @code{tetex-extra} in Debian). Failing that,
+commercial versions of the Computer Modern fonts are available from
+Blue Sky; public domain versions - in particular, the lm fonts, and
+the cm-super fonts, are available from CTAN sites (for CTAN info,
+@pxref{unixtex.ftp,,, kpathsea, Kpathsea}).
+
+You can convert a PostScript file to PDF using @code{distill}, which
+comes with Adobe Acrobat, or @code{ps2pdf}, which comes with
+Ghostscript. The @code{ps2pdf} that comes with @code{Ghostscript}
+version 6.0 or earlier will not embed Type 1 fonts. Current
+recommendations are GNU Ghostscript 6.51 or Aladdin Ghostscript 7.0.
+You can check the fonts in a PDF file with Acrobat Reader by selecting
+the menu entries @samp{File|Document Info|Fonts}.
+
+@cindex psi character missing
+@cindex trailing spaces, dropped
+@cindex spaces, dropped trailing
+Also, the Adobe distillers prior to 2.1 drop trailing space characters
+(character code 32) from strings. Unfortunately, the PostScript fonts
+use this character code for characters other than space (notably the
+Greek letter psi in the @code{Symbol} font), and so these characters are
+dropped. This bug is fixed in version 2.1.
+
+If you can't upgrade, One workaround is to change all the trailing
+blanks in strings to a character code that isn't in the font. This works
+because the default behavior is to substitute a blank for a missing
+character, i.e., the distiller is fooled into substituting the right
+character. For instance, with the Blue Sky fonts, you can globally
+replace @samp{ )} with @samp{\200)} (with @code{sed}, for example) and
+get the desired result. With the public domain fonts, you will probably
+have to use a character code in the range 128 to 191 since these fonts
+duplicate the first 32 characters starting at 192 to avoid MS-DOS
+problems.
+
+For more information on the use of TeX to produce PDF files, see the
+article ``Creating quality Adobe PDF files from @TeX{} with DVIPS'' by
+Kendall Whitehouse of Adobe. Adobe seems not to offer the article any
+more, but copies are available elsewhere:
+@display
+@url{http://www.math.hawaii.edu/~ralph/MathOnWeb/TeXPDF.html}
+@url{http://www.utdallas.edu/~cantrell/online/543e.html}
+@end display
+
+You may also want to check ``Notes on converting (La)@TeX{} documents
+to robust PDF using Rokicki's dvips and Acrobat Distiller'' by Timothy
+P. Van Zandt:@*
+@url{http://www.emrg.com/texpdf.htmlhttp://zandtwerk.insead.fr/tex2pdf.html}.
+
+
+@node Hypertext specials
+@subsection Hypertext specials
+
+@cindex hypertext specials
+@cindex specials, hypertext
+
+@cindex Smith, Arthur
+Current support for the World Wide Web in the @TeX{} system does not
+involve modifying @TeX{} itself. We need only define some specials;
+Arthur Smith (@email{apsmith@@aps.org}), Tanmoy Bhattacharya, and Paul
+Ginsparg originally proposed and implemented the following:
+@example
+html:<a href="@var{xurl}">
+html:<a name="@var{name}">
+html:</a>
+html:<img src="@var{xurl}">
+html:<base href="@var{xurl}">
+@end example
+
+Like all @TeX{} @code{\special}'s, these produce no visible output, and
+are uninterpreted by @TeX{} itself. They are instructions to DVI
+processors only.
+
+@cindex uniform resource locator
+@cindex extended URL
+@cindex URL, extended for @TeX{}
+@cindex Murphy, Tim
+Here, @var{xurl} is a standard WWW uniform resource locator (URL),
+possibly extended with a @samp{#@var{type}.@var{string}} construct,
+where @var{type} is @samp{page}, @samp{section}, @samp{equation},
+@samp{reference} (for bibliographic references), @samp{figure},
+@samp{table}, etc. For example,
+@smallexample
+\special@{html:<a href="http://www.maths.tcd.ie/~tim/ch1.dvi#equation.1.1">@}
+@end smallexample
+@noindent is a link to equation (1.1) in an example document by Tim Murphy.
+
+@cindex URL, definition
+See the URL @url{http://www.w3.org/hypertext/WWW/Addressing/Addressing.html}
+for a precise description of base URL's.
+
+Descriptions of the @code{\special}'s:
+@ftable @samp
+@item href
+@cindex links, hypertext
+Creates links in your @TeX{} document. For example:
+@example
+\special@{html:<a href="http://www.tug.org/">@}\TeX\ Users
+Group\special@{html:</a>@}
+@end example
+@noindent The user will be able to click on the text `@TeX{} Users
+Group' while running Xdvi and get to the TUG home page. (By the way,
+this is for illustration. In practice, you most likely want to use
+macros to insert the @code{\special} commands; reference above.)
+
+@item name
+@cindex Anderson, Laurie
+Defines URL targets in your @TeX{} documents, so links can be
+resolved. For example:
+@example
+\special@{html:<a name="paradise">@}Paradise\special@{html:</a>@}
+is exactly where you are right now.
+@end example
+This will resolve an @samp{href="#paradise"}. You'll also have to
+change the catcode of @samp{#}, etc. It's usually easiest to use
+existing macro packages which take care of all the details, such as
+@file{hyperref} for @LaTeX{}. The @url{http://arxiv.org/hypertex/,
+HyperTeX FAQ} has more information.
+
+@item img
+@flindex mailcap @r{and hypertext}
+Links to an arbitrary external file. Interactively, a viewer is spawned
+to read the file according to the file extension and your @file{mailcap}
+file (see the Xdvi documentation).
+
+@item base
+Defines a base URL that is prepended to all the @code{name} targets.
+Typically unnecessary, as the name of the DVI file being read is used by
+default.
+@end ftable
+
+The @samp{img} and @samp{base} tags are not yet implemented in Dvips or
+the NeXTSTEP DVI viewer.
+
+
+@node PostScript fonts
+@chapter PostScript fonts
+
+@cindex PostScript fonts
+
+Dvips supports the use of PostScript fonts in @TeX{} documents. To use
+a PostScript font conveniently, you need to prepare a corresponding
+virtual font; the program Afm2tfm, supplied with Dvips, helps
+with that.
+
+All the necessary support for the standard 35 PostScript fonts
+(@samp{AvantGarde-Book} through @samp{ZapfDingbats}), plus other freely
+or commonly available PostScript fonts is available along with Dvips.
+To use these fonts, you need do nothing beyond what is mentioned in the
+installation procedure (@pxref{Installation}). This chapter is
+therefore relevant only if you are installing new PostScript fonts not
+supplied with Dvips. (Or if you're curious.)
+
+@menu
+* Font concepts:: Metrics, glyphs, virtual fonts, and encodings.
+* Making a font available:: Installing and using a PostScript font.
+* Invoking afm2tfm:: Creating TFM and AFM files for a virtual font.
+* psfonts.map:: Defining available PostScript fonts.
+@end menu
+
+
+@node Font concepts
+@section Font concepts
+
+@cindex font concepts
+
+The information needed to typeset using a particular font is contained
+in two files: a @dfn{metric file} that contains shape-independent
+information and a @dfn{glyph file} that contains the actual shapes of
+the font's characters. A @dfn{virtual font} is an optional additional
+file that can specify special ways to construct the characters. @TeX{}
+itself (or @LaTeX{}) look only at the metric file, but DVI drivers such
+as Dvips look at all three of these files.
+
+An @dfn{encoding file} defines the correspondence between the code
+numbers of the characters in a font and their descriptive names. Two
+encoding files used together can describe a reencoding that rearranges,
+i.e., renumbers, the characters of a font.
+
+@menu
+* Metric files:: Shape-independent font information.
+* Glyph files:: Character shapes.
+* Virtual fonts:: Constructing one font from others.
+* Encodings:: Character codes and character names.
+* PostScript typesetting:: How PostScript typesets a character.
+@end menu
+
+
+@node Metric files
+@subsection Metric files
+
+@cindex metric files
+
+A @dfn{metric file} describes properties of the font that are
+independent of what the characters actually look like. Aside from
+general information about the font itself, a metric file has two kinds
+of information: information about individual characters, organized by
+character code, and information about sequences of characters.
+
+The per-character information specifies the width, height, depth, and
+italic correction of each character in the font. Any might be zero.
+
+@cindex kerning, defined
+@cindex ligature, defined
+In addition to information on individual characters, the metric file
+specifies @dfn{kerning}, i.e., adding or removing space between
+particular character pairs. It further specifies @dfn{ligature}
+information: when a sequence of input characters should be typeset as a
+single (presumably different) ``ligature'' character. For example, it's
+traditional for the input @samp{fi} to be typeset as `fi', not as
+`@r{f}@r{i}' (with the dot of the `i' colliding with `f'). (In English,
+the only common ligatures are fi, fl, ff, ffi, and ffl.)
+
+Different typesetting systems use different metric file formats:
+
+@itemize @bullet
+@item
+@cindex afm files
+@flindex .afm @r{Adobe metric files}
+Each Postscript font has an @dfn{Adobe font metrics} (@samp{.afm})
+file. These files are plain text, so you can inspect them easily. You
+can get AFM files for Adobe's fonts from
+@url{ftp://ftp.adobe.com/pub/adobe/Fonts/AFMs}.
+
+@item
+@cindex tfm files
+@flindex .tfm @r{@TeX{} font metric files}
+@TeX{} uses @dfn{@TeX{} font metrics} (@samp{.tfm}) files. When you say
+@samp{\font = @var{font}} in your @TeX{} document, @TeX{} reads a file
+named @samp{@var{font}.tfm}. (Well, except for the @file{texfonts.map}
+feature; @pxref{Fontmap,,, kpathsea, Kpathsea}). @TeX{} can then
+calculate the space occupied by characters from the font when
+typesetting. In addition, the DVI drivers you use to print or view the
+DVI file produced by @TeX{} may need to look at the TFM file.
+
+@cindex property list files
+@pindex tftopl
+@pindex pltotf
+@flindex .pl @r{property list files}
+TFM files are binary (and hence are typically much smaller than AFM
+files). You can use the @code{tftopl} program (@pxref{tftopl
+invocation,,, web2c, Web2c}) that comes with @TeX{} to transform a TFM
+file into a human-readable ``property list'' (@samp{.pl}) file. You can
+also edit a PL file and transform it back to a @TeX{}-readable TFM with
+the companion program @code{pltotf} (@pxref{pltotf invocation,,, web2c,
+Web2c}). Editing metrics by hand is not something you're likely to want
+to do often, but the capability is there.
+
+@item
+@cindex pfm files
+@flindex .pfm @r{printer font metric files}
+ATM and other typesetting systems use @dfn{printer font metric}
+(@samp{.pfm}) files. These are binary files. They are irrelevant in the
+@TeX{} world, and not freely available, so we will not discuss them
+further.
+
+@end itemize
+
+The Afm2tfm program distributed with Dvips converts an AFM file
+to a TFM file and performs other useful transformations as well.
+@xref{Invoking afm2tfm}.
+
+
+@node Glyph files
+@subsection Glyph files
+
+@cindex glyph files
+
+Although a metric file (see the previous section) contains information
+about the spatial and other properties of the character at position 75,
+say, it contains nothing about what the character at position 75
+actually looks like. The glyphs---the actual shapes of the letterforms
+in a font---are defined by other files, which we call glyph files.
+@TeX{} itself only reads the TFM file for a font; it does not need to
+know character shapes.
+
+A @dfn{glyph file} is a file that defines the shapes of the characters
+in a font. The shapes can be defined either by outlines or by bitmaps.
+
+@cindex outline fonts
+@cindex arcs
+@cindex splines
+PostScript fonts are defined as @dfn{outline fonts}: Each character in
+the font is defined by giving the mathematical curves (lines, arcs, and
+splines) that define its contours. Different sizes of a character are
+generated by linearly scaling a single shape. For example, a 10-point
+`A' is simply half the size of a 20-point `A'. Nowadays, outline fonts
+usually also contain @dfn{hints}---additional information to improve the
+appearance of the font at small sizes or low resolutions.
+
+@cindex Type 1 fonts
+@cindex pfa files
+@cindex pfb files
+@flindex .pfa @r{printer font ascii files}
+@flindex .pfb @r{printer font binary files}
+Although various kinds of PostScript outline fonts exist, by far the
+most common, and the only one we will consider, is called @dfn{Type 1}.
+The glyph files for Postscript Type 1 fonts typically have names ending
+in @samp{.pfa} (``printer font ASCII'') or @samp{.pfb} (``printer font
+binary'').
+
+@cindex bitmap fonts
+@flindex .mf @r{Metafont source files}
+@cindex Metafont source files
+In contrast, glyph files for Computer Modern and the other standard
+@TeX{} fonts are @dfn{bitmap fonts}, generated from Metafont
+(@samp{.mf}) descriptions. The Metafont program distributed with @TeX{}
+generates bitmaps from these descriptions.
+
+@cindex pk files
+@flindex .@var{nnn}pk @r{packed font bitmaps}
+The glyph files for @TeX{} bitmap fonts are usually stored in
+@dfn{packed font} (PK) files. The names of these files end in
+@samp{.@var{nnn}pk}, where @var{nnn} is the resolution of the font in
+dots per inch. For example, @file{cmr10.600pk} contains the bitmaps for
+the @samp{cmr10} font at a resolution of 600@dmn{dpi}. (On DOS
+filesystems, it's more likely @file{dpi600\cmr10.pk}.)
+
+@cindex gf files
+@pindex gftopk
+Metafont actually outputs @dfn{generic font} (GF) files, e.g.,
+@file{cmr10.600gf}, but the GF files are usually converted immediately
+to PK format (using the @code{gftopk} utility that comes with @TeX{})
+since PK files are smaller and contain the same information. (The GF
+format is a historical artifact.)
+
+
+@node Virtual fonts
+@subsection Virtual fonts
+
+@cindex virtual fonts
+
+A @dfn{virtual font} is constructed by extracting characters from one or
+more existing fonts and rearranging them, or synthesizing new characters
+in various ways. The explanation in this manual is intended to suffice
+for understanding enough about virtual fonts to use them with Dvips. It
+isn't a reference manual on virtual fonts. For more information: The
+primary document on virtual fonts is Donald E. Knuth, @cite{TUGboat}
+11(1), Apr.@: 1990, pp.@: 13--23, ``Virtual Fonts: More Fun for Grand
+Wizards'' (@file{@var{CTAN:}/info/virtual-fonts.knuth}; for CTAN info,
+@pxref{unixtex.ftp,,, kpathsea, Kpathsea}). (Don't be intimidated by
+the subtitle.)
+
+@cindex vf files
+@cindex vpl files
+A virtual font (@samp{.vf}) file specifies, for each character in the
+virtual font, a recipe for typesetting that character. A VF file, like
+a TFM file, is in a compressed binary format. The @code{vftovp} and
+@code{vptovf} programs convert a VF file to a human-readable VPL
+(virtual property list) format and back again. @xref{vftovp
+invocation,,, web2c, Web2c}, and @ref{vptovf invocation,,, web2c,
+Web2c}.
+
+@cindex base fonts
+In the case of a PostScript font @var{f} being used in a straightforward
+way, the recipe says: character @var{i} in the VF font is character
+@var{j} in font @var{f}. The font @var{f} is called a @dfn{base font}.
+For example, the VF file could remap the characters of the PostScript
+font to the positions where @TeX{} expects to find them.
+@xref{Encodings}.
+
+Since @TeX{} reads only TFM files, not VF's, each VF must have a
+corresponding TFM for use with @TeX{}. This corresponding TFM is
+created when you run @code{vptovf}.
+
+@cindex expansion, of virtual fonts
+@cindex virtual font expansion
+You can @dfn{expand} virtual fonts into their base fonts with DVIcopy
+(@pxref{dvicopy invocation,,, web2c, Web2c}). This is useful if you are
+using a DVI translator that doesn't understand vf's itself.
+
+
+@node Encodings
+@subsection Encodings
+
+@cindex encodings
+
+Every font, whatever its type, has an @dfn{encoding}, that specifies the
+correspondence between ``logical'' characters and character codes. For
+example, the ASCII encoding specifies that the character numbered 65
+(decimal) is an uppercase `A'. The encoding does not specify what the
+character at that position looks like; there are lots of ways to draw an
+`A', and a glyph file (@pxref{Glyph files}) tells how. Nor does it
+specify how much space that character occupies; that information is in a
+metric file (@pxref{Metric files}).
+
+@cindex Computer Modern, encoding of
+@TeX{} implicitly assumes a particular encoding for the fonts you use
+with it. For example, the plain @TeX{} macro @code{\'}, which typesets
+an acute accent over the following letter, assumes the acute accent is
+at position 19 (decimal). This happens to be true of standard @TeX{}
+fonts such as Computer Modern, as you might expect, but it is not true
+of normal PostScript fonts.
+
+It's possible but painful to change all the macros that assume
+particular character positions. A better solution is to create a new
+font with the information for the acute accent at position 19, where
+@TeX{} expects it to be. @xref{Making a font available}.
+
+@cindex PostScript encoding
+@cindex encoding files
+@cindex encoding vectors, defined
+
+PostScript represents encodings as a sequence of 256 character names
+called an @dfn{encoding vector}. An @dfn{encoding file} (@samp{.enc})
+gives such a vector, together with ligature and kerning information
+(with which we are not concerned at the moment). These encoding files
+are used by the Afm2tfm program. Encoding files are also downloaded to
+the PostScript interpreter in your printer if you use one of them in
+place of the default encoding vector for a particular PostScript font.
+
+@flindex dvips.enc
+@flindex 8r.enc
+@flindex texmext.enc
+@flindex texmital.enc
+@flindex texmsym.enc
+@flindex reencode/*.enc
+Examples of encodings: the @file{dvips.enc} encoding file that comes
+with Dvips in the @samp{reencode} directory is a good (but not perfect)
+approximation to the @TeX{} encoding for @TeX{}'s Computer Modern text
+fonts. This is the encoding of the fonts that originated with Dvips,
+such as @file{ptmr.tfm}. The distribution includes many other encoding
+files; for example, @file{8r.enc}, which is the base font for the
+current PostScript font distribution, and three corresponding to the
+@TeX{} mathematics fonts: @file{texmext.enc} for math extensions,
+@file{texmital.enc} for math italics, and @file{texmsym.enc} for math
+symbols.
+
+
+@node PostScript typesetting
+@subsection How PostScript typesets a character
+
+@cindex typesetting in PostScript
+@cindex character lookup procedure in PostScript
+
+The output of Dvips is a program in the PostScript language that
+instructs your (presumably PostScript-capable) printer how to typeset
+your document by transforming it into toner on paper. Your printer, in
+turn, contains a PostScript interpreter that carries out the
+instructions in this typesetting program.
+
+The program must include the definition of any PostScript fonts that you
+use in your document. Fonts built into your printer (probably the
+standard 35: @samp{Times-Roman}, @samp{ZapfDingbats}, @dots{}) are
+defined within the interpreter itself. Other fonts must be downloaded
+as pfa or pfb files (@pxref{Glyph files}) from your host (the computer
+on which you're running Dvips).
+
+You may be wondering exactly how a PostScript interpreter figures out
+what character to typeset, with this mass of metrics, glyphs, encodings,
+and other information. (If you're not wondering, skip this section
+@dots{})
+
+@findex show @r{PostScript operator}
+The basic PostScript operator for imaging characters is
+@code{show}. Suppose you've asked @TeX{} to typeset an `S'. This will
+eventually wind up in the Dvips output as the equivalent of this
+PostScript operation:
+
+@example
+(S) show
+@end example
+
+@noindent Here is how PostScript typesets the `S':
+
+@enumerate
+@item
+@cindex ASCII character codes, used by PostScript
+PostScript interpreters use ASCII; therefore `S' is represented as the
+integer 83. (Any of the 256 possible characters representable in a
+standard 8-bit byte can be typeset.)
+
+@item
+@cindex current font, in PostScript
+@cindex dictionary, PostScript language
+A PostScript @dfn{dictionary} is a mapping of names to arbitrary values.
+A font, to the interpreter, is a dictionary which contains entries for
+certain names. (If these entries are missing, the interpreter refuses
+to do anything with that font.)
+
+PostScript has a notion of ``the current font''---whatever font is
+currently being typeset in.
+
+@item
+@cindex encoding vectors, in Type 1 fonts
+@findex Encoding @r{Type 1 dictionary}
+One of the mandatory entries in a font dictionary is @samp{Encoding},
+which defines the encoding vector (@pxref{Encodings}) for that font.
+This vector of 256 names maps each possible input character to a name.
+
+@item
+The interpreter retrieves the entry at position 83 of the encoding
+vector. This value is a PostScript name: @code{/S}.
+
+@item
+@findex CharStrings @r{Type 1 dictionary}
+@cindex dictionary, @code{CharStrings}
+For Type 1 fonts (we're not going to discuss anything else), the
+interpreter now looks up @code{/S} as a key in a dictionary named
+@code{CharStrings}, another mandatory entry in a font dictionary.
+
+@item
+@cindex hints
+@cindex character definitions in PostScript
+The value of @code{S} in @code{CharStrings} is the equivalent of a
+series of standard PostScript commands like @samp{curveto},
+@samp{lineto}, @samp{fill}, and so on. These commands are executed to
+draw the character. There can also be @dfn{hint information} that helps
+adapt the character to low-resolution rasters. (@xref{Glyph files}.)
+The commands are actually represented in a more compact way than
+standard PostScript source; see the Type 1 book for details.
+
+@end enumerate
+
+This method for typesetting characters is used in both Level 1 and Level
+2 PostScript. See the PostScript reference manuals for more
+information.
+
+
+@node Making a font available
+@section Making a PostScript font available
+
+@cindex installing fonts
+@cindex fonts, installing
+
+To make a PostScript font available in a @TeX{} document, you need to
+install the font on your system and then define it within the document.
+Once you have installed the font, of course, it is available for any
+document thereafter and you don't need to reinstall it. You must have
+an AFM file for any font you install. Unless the font is built into your
+printer, you must also have a PFA or PFB file.
+
+In the following examples, we use the font @samp{Times-Roman} to
+illustrate the process. But you should use the prebuilt fonts for Times
+and the other standard fonts, rather than rebuilding them. The prebuilt
+fonts are made using a more complicated process than that described
+here, to make them work as well as possible with @TeX{}. So following
+the steps in this manual will not generate files identical to the
+distributed ones. @xref{PostScript font installation}, for pointers to
+the prebuilt fonts.
+
+Installation of a PostScript font proceeds in three steps. @xref{Font
+concepts}, for descriptions of the various files involved.
+
+@enumerate
+@item
+Run @code{afm2tfm} to create a TFM file for the original font,
+and the VPL form of the virtual font:
+@example
+afm2tfm Times-Roman -v ptmr rptmr
+@end example
+
+@item
+Run @code{vptovf} to generate a VF and TFM file for the virtual font
+from the VPL file:
+@example
+vptovf ptmr.vpl ptmr.vf ptmr.tfm
+@end example
+
+@item
+Insert an entry for the font in @file{psfonts.map} (@pxref{psfonts.map}):
+@example
+rptmr Times-Roman <ptmr8a.pfa
+@end example
+
+@item
+Install the files in the standard locations, as in:
+@example
+cp ptmr.vf @var{fontdir}/vf/@dots{}
+cp *ptmr.tfm @var{fontdir}/tfm/@dots{}
+cp ptmr.afm @var{fontdir}/afm/@dots{}
+cp ptmr.pf? @var{fontdir}/type1/@dots{}
+@end example
+@end enumerate
+
+The simplest invocation of Afm2tfm to make virtual fonts goes something
+like this:
+
+@pindex afm2tfm
+@example
+afm2tfm Times-Roman -v ptmr rptmr
+@end example
+
+@noindent
+This reads the file @file{Times-Roman.afm}, and produces two files as
+output, namely the virtual property list'file @file{ptmr.vpl}, and the
+``raw'' font metric file @file{rptmr.tfm}. To use the font in @TeX{},
+you first run
+
+@pindex vptovf
+@example
+vptovf ptmr.vpl ptmr.vf ptmr.tfm
+@end example
+
+@noindent
+You should then install the virtual font file @file{ptmr.vf} where Dvips
+will see it and install @file{ptmr.tfm} and @file{rptmr.tfm} where
+@TeX{} and Dvips will see them.
+
+Using these raw fonts is not recommended; there are no raw fonts in the
+prebuilt PostScript fonts distributed along with Dvips. But
+nevertheless, that's how Afm2tfm presently operates, so that's what we
+document here. The @samp{r} prefix convention is likewise historical
+accident.
+
+You can also make more complex virtual fonts by editing @file{ptmr.vpl}
+before running @samp{vptovf}; such editing might add the uppercase Greek
+characters in the standard @TeX{} positions, for instance. (This has
+already been done for the prebuilt fonts.)
+
+Once the files have been installed, you're all set. You can now do
+things like this in @TeX{}:
+@example
+\font\myfont = ptmr at 12pt
+\myfont Hello, I am being typeset in 12-point Times-Roman.
+@end example
+
+Thus, we have two fonts, one actual (@samp{rptmr}, which is analogous to
+the font in the printer) and one virtual (@samp{ptmr}, which has been
+remapped to the standard @TeX{} encoding (almost)), and has typesetting
+know-how added. You could also say
+
+@example
+\font\raw = rptmr at 10pt
+@end example
+
+@noindent
+and typeset directly with that, but then you would have no ligatures or
+kerning, and you would have to use Adobe character positions for special
+letters like
+@tex
+\AE.
+@end tex
+@ifinfo
+the ligature `AE'.
+@end ifinfo
+The virtual font @samp{ptmr} not only has ligatures and kerning, and
+most of the standard accent conventions of @TeX{}, it also has a few
+additional features not present in the Computer Modern fonts. For
+example, it includes all the Adobe characters (such as the Polish ogonek
+and the French guillemots). The only things you lose from ordinary
+@TeX{} text fonts are the dotless `j' (which can be hacked into the VPL
+file with literal PostScript specials if you have the patience) and
+uppercase Greek letters (which just don't exist unless you buy them
+separately). @xref{Reencoding with Afm2tfm}.
+
+As a final step you need to record information about both the virtual
+font and the original font (if you ever might want to use it) in the
+@file{psfonts.map} file (@pxref{psfonts.map}). For our example, you'd
+insert the following into @file{psfonts.map}:
+@example
+rptmr Times-Roman <ptmr8a.pfa
+@end example
+
+@noindent Of course, @code{Times-Roman} is already built in to most every
+printer, so there's no need to download any Type 1 file for it. But if
+you are actually following these instructions for new fonts, most likely
+they are not built in to the printer.
+
+@cindex memory, used by PostScript fonts
+@cindex efficiency, and fonts
+These PostScript fonts can be scaled to any size. Go wild! Using
+PostScript fonts, however, does use up a great deal of the printer's
+memory and it does take time. You may find downloading bitmap fonts
+(possibly compressed, with the @samp{Z} option) to be faster than using
+the built-in PostScript fonts.
+
+
+@node Invoking afm2tfm
+@section Invoking Afm2tfm
+
+@pindex afm2tfm
+
+The Afm2tfm program converts an AFM file for a PostScript font to a TFM
+file and a VPL file for a corresponding virtual font (or, in its
+simplest form, to a TFM file for the PostScript font itself). The
+results of the conversion are affected by the command-line options and
+especially by the reencodings you can specify with those options. You
+can also obtain special effects such as an oblique font.
+
+@pindex fontinst
+@cindex virtual fonts, creating
+@cindex Jeffrey, Alan
+An alternative to Afm2tfm for creating virtual fonts is Alan Jeffrey's
+@code{fontinst} program, available from
+@file{@var{CTAN:}fonts/utilities/fontinst} (for CTAN info,
+@pxref{unixtex.ftp,,, kpathsea, Kpathsea}).
+
+@menu
+* Changing font encodings:: Reencoding with -t, -p, -T.
+* Special font effects:: Oblique fonts, small caps, and such.
+* Afm2tfm options:: afm2tfm command-line options.
+@end menu
+
+
+@node Changing font encodings
+@subsection Changing font encodings
+
+@cindex encoding changes
+@cindex fonts, changing encoding of
+
+Afm2tfm allows you to specify a different encoding for a PostScript font
+(for a general introduction to encodings, @pxref{Encodings}). The
+@samp{-t} options changes the @TeX{} encoding, @samp{-p} changes the
+PostScript encoding, and @samp{-T} changes both simultaneously, as
+detailed in the sections below.
+
+@menu
+* Changing TeX encodings:: Where TeX finds a character.
+* Changing PostScript encodings:: Where PostScript finds a character.
+* Changing both encodings:: One and the same, simultaneously.
+* Reencoding with Afm2tfm:: Problems with the default encoding.
+* Encoding file format:: Syntax of an encoding file.
+@end menu
+
+
+@node Changing TeX encodings
+@subsubsection @samp{-t}: Changing @TeX{} encodings
+
+@cindex changing @TeX{} encodings
+@cindex @TeX{} encoding, changing
+
+@opindex -t @var{tex-enc}
+To build a virtual font with Afm2tfm, you specify the @samp{-v} or
+@samp{-V} option. You can then specify an encoding for that virtual font
+with @samp{-t @var{tex-enc}}. (@samp{-t} is ignored if neither
+@samp{-v} nor @samp{-V} is present.) Any ligature and kerning
+information you specify in @var{tex-enc} will be used in the VPL, in
+addition to the ligature and kerning information from the AFM file.
+
+If the AFM file has no entry for a character specified in @var{tex-enc},
+that character will be omitted from the output VPL.
+
+@flindex texmsym.enc
+The @samp{-t} option is likely to be needed when you have a PostScript
+font corresponding to a @TeX{} font other than a normal text font such
+as Computer Modern. For instance, if you have a PostScript font that
+contains math symbols, you'd probably want to use the encoding in the
+@file{texmsym.enc} file supplied with Dvips. (For a start; to actually
+get usable math fonts, you have to define much more than just an
+encoding.)
+
+
+@node Changing PostScript encodings
+@subsubsection @samp{-p}: Changing PostScript encodings
+
+@cindex changing PostScript encodings
+@cindex PostScript encoding, changing
+@opindex -p @var{ps-enc}
+
+By default, Afm2tfm uses the encoding it finds in the AFM file. You can
+specify a different PostScript encoding with @samp{-p @var{ps-enc}}.
+This makes the raw TFM file (the one output by Afm2tfm) have the
+encoding specified in the encoding file @var{ps-enc}. Any ligature or
+kern information specified in @var{ps-enc} is ignored by Afm2tfm, since
+ligkern info is always omitted from the raw TFM.
+
+If you use this option, you must also arrange to download @var{ps-enc}
+as part of any document that uses this font. You do this by adding a
+line like the following one to @file{psfonts.map} (@pxref{psfonts.map}):
+@example
+zpopr Optima "MyEncoding ReEncodeFont" <myenc.enc
+@end example
+
+@findex trademark @r{character, accessing}
+@findex registered @r{character, accessing}
+@cindex extra characters, accessing
+Using @samp{-p} is the only way to access characters in a PostScript
+font that are neither encoded in the AFM file nor constructed from other
+characters. For instance, Adobe's @samp{Times-Roman} font contains the
+extra characters @samp{trademark} and @samp{registered} (among others);
+these can only be accessed through such a PostScript reencoding.
+
+@findex 8r @r{encoding, and extra characters}
+The `8r' base encoding used for the current PostScript font
+distribution does do this reencoding, for precisely this reason.
+
+
+@node Changing both encodings
+@subsubsection @samp{-T}: Changing both @TeX{} and PostScript encodings
+
+@opindex -T @var{enc-file}
+
+The option @samp{-T @var{enc-file}} is equivalent to @samp{-p
+@var{enc-file} -t @var{enc-file}}. If you make regular use of a private
+non-standard reencoding @samp{-T} is usually a better idea than the
+individual options, to avoid unexpected inconsistencies in mapping
+otherwise. An example of when you might use this option is a dingbats
+font: when you have a @TeX{} encoding that is designed to be used with a
+particular PostScript font.
+
+
+@node Reencoding with Afm2tfm
+@subsubsection Reencoding with Afm2tfm
+
+@cindex reencoding
+@cindex remapping
+
+The Afm2tfm program creates the TFM and VF files for the virtual font
+corresponding to a PostScript font by @dfn{reencoding} the PostScript
+font. Afm2tfm generates these files from two encodings: one for @TeX{}
+and one for PostScript. The @TeX{} encoding is used to map character
+numbers to character names while the PostScript encoding is used to map
+each character name to a possibly different number. In combination, you
+can get access to any character of a PostScript font at any position for
+@TeX{} typesetting.
+
+In the default case, when you specify none of the @code{-t}, @code{-p},
+or @code{-T} options, Afm2tfm uses a default @TeX{} encoding (which
+mostly corresponds to the Computer Modern text fonts) and the PostScript
+encoding found in the AFM file being read. The reencoding is also
+sometimes called a @dfn{remapping}.
+
+For example, the default encodings reencode the acute accent in two
+steps: first the default @TeX{} encoding maps the number 19 to the
+character name @samp{acute}; then the default PostScript encoding, as
+found in the AFM file for an ordinary PostScript font, maps the
+character name @samp{acute} to the number 194. (The PostScript encoding
+works in reverse, by looking in the encoding vector for the name and
+then yielding the corresponding number.) The combined mapping of 19 to
+194 shows up explicitly in the VF file and also implicitly in the fact
+that the properties of PostScript character 194 appear in position 19 of
+the TFM file for the virtual font.
+
+@cindex accents, in wrong position
+@cindex Hungarian umlaut
+@cindex dot accent
+@cindex Scandinavian A ring
+@cindex A ring, Scandinavian letter
+The default encoding of the distributed fonts (e.g., @file{ptmr.tfm})
+mostly follows plain @TeX{} conventions for accents. The exceptions:
+the Hungarian umlaut (which is at position @code{0x7D} in @samp{cmr10},
+but position @code{0xCD} in @samp{ptmr}); the dot accent (at positions
+@code{0x5F} and @code{0xC7}, respectively); and the Scandinavian A ring
+@code{\AA}, whose definition needs different tweaking. In order to use
+these accents with PostScript fonts or in math mode when
+@code{\textfont0} is a PostScript font, you will need to use the
+following definitions. These definitions will not work with the
+Computer Modern fonts for the relevant accents. They are already part
+of the distributed @file{psfonts.sty} for use with @LaTeX{}.
+
+@findex \H
+@findex \.
+@findex \dot
+@findex \AA
+@example
+\def\H#1@{@{\accent"CD #1@}@}
+\def\.#1@{@{\accent"C7 #1@}@}
+\def\dot@{\mathaccent"70C7 @}
+\newdimen\aadimen
+\def\AA@{\leavevmode\setbox0\hbox@{h@}\aadimen\ht0
+ \advance\aadimen-1ex\setbox0\hbox@{A@}\rlap@{\raise.67\aadimen
+ \hbox to \wd0@{\hss\char'27\hss@}@}A@}
+@end example
+
+@vindex CODINGSCHEME
+As a kind of summary, here are the @samp{CODINGSCHEME}s that result from
+the various possible choices for reencoding.
+
+@table @asis
+@item default encoding
+@example
+(CODINGSCHEME TeX text + AdobeStandardEncoding)
+@end example
+
+@item @samp{-p dc.enc}
+@example
+(CODINGSCHEME TeX text + DCEncoding)
+@end example
+
+@item @samp{-t dc.enc}
+@example
+(CODINGSCHEME DCEncoding + AdobeStandardEncoding)
+@end example
+
+@item @samp{-T dc.enc}
+@example
+(CODINGSCHEME DCEncoding + DCEncoding)
+@end example
+
+@end table
+
+@noindent The @samp{CODINGSCHEME} line appears in the VPL file but is
+ignored by Dvips.
+
+
+@node Encoding file format
+@subsubsection Encoding file format
+
+@cindex encoding file format
+
+Afm2tfm's encoding files have the same format as an encoding vector in a
+PostScript font. Here is a skeletal example:
+
+@example
+% @r{Comments are ignored, unless the first word after the percent sign}
+% @r{is @samp{LIGKERN}; see below.}
+/MyEncoding [ % @r{exactly 256 entries follow, each with a leading @samp{/}}
+ /Alpha /Beta /Gamma /Delta @dots{}
+ /A /B @dots{} /Z
+ @dots{} /.notdef /xfooaccent /yfooaccent /zfooaccent
+] def
+@end example
+
+These encoding files are downloaded as part of changing the encoding at
+the PostScript level (see the previous section).
+
+@cindex comments, in encoding files
+Comments, which start with a percent sign and continue until the end
+of the line, are ignored unless they start with @samp{LIGKERN} (see below).
+
+The first non-comment word of the file must start with a forward slash
+@samp{/} (i.e., a PostScript literal name) and defines the name of the
+encoding. The next word must be an left bracket @samp{[}. Following
+that must be precisely 256 character names; use @samp{/.notdef} for any
+that you want to leave undefined. Then there must be a matching right
+bracket @code{]}. A final @samp{def} token is optional. All names are
+case-sensitive.
+
+Any ligature or kern information is given as a comment. If the first
+word after the @samp{%} is @samp{LIGKERN}, then the entire rest of the
+line is parsed for ligature and kern information. This ligature and
+kern information is given in groups of words: each group is terminated
+by a space and a semicolon and (unless the semicolon is at the end of a
+line) another space.
+
+@findex LIGKERN @r{encoding file command}
+In these @code{LIGKERN} statements, three types of information may be
+specified. These three types are ligature pairs, kerns to ignore, and
+the character value of this font's boundary character.
+
+@cindex boundary character
+Throughout a @code{LIGKERN} statement, the boundary character is
+specified as @samp{||}. To set the font's boundary character value for
+@TeX{}:
+
+@example
+% LIGKERN || = 39 ;
+@end example
+
+To indicate a kern to remove, give the names of the two characters
+(without the leading slash) separated by @samp{@{@}}, as in @samp{one
+@{@} one ;}. This is intended to be reminiscent of the way you might
+use @samp{@{@}} in a @TeX{} file to turn off ligatures or kerns at a
+particular location. Either or both of the character names can be given
+as @samp{*}, which is a wild card matching any character; thus, all
+kerns can be removed with @samp{* @{@} * ;}.
+
+@cindex ligature operations
+@cindex Metafont ligature operations
+To specify a ligature, specify the names of the pair of characters,
+followed by the ligature operation (as in Metafont), followed by the
+replacing character name. Either (but not both) of the first two
+characters can be @samp{||} to indicate a word boundary.
+
+@findex =: @r{ligature operation}
+The most common operation is @samp{=:} meaning that both characters are
+removed and replaced by the third character, but by adding the @samp{|}
+character on either side of the @samp{=:}, you can retain either or both
+of the two leading characters. In addition, by suffixing the ligature
+operation with one or two @samp{>} signs, you can make the ligature
+scanning operation skip that many resulting characters before
+proceeding. This works just like in Metafont. For example, the `fi'
+ligature is specified with @w{@samp{f i =: fi ;}}. A more convoluted
+ligature is @samp{one one |=:|>> exclam ;} which separates a pair of
+adjacent @code{1}'s with an exclamation point, and then skips over two
+of the resulting characters before continuing searching for ligatures
+and kerns. You cannot give more @t{>}'s than @t{|}'s in an ligature
+operation, so there are a total of eight possibilities:
+
+@example
+=: |=: |=:> =:| =:|> |=:| |=:|> |=:|>>
+@end example
+
+The default set of ligatures and kerns built in to Afm2tfm is:
+
+@example
+% LIGKERN question quoteleft =: questiondown ;
+% LIGKERN exclam quoteleft =: exclamdown ;
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+% LIGKERN space @{@} * ; * @{@} space ; 0 @{@} * ; * @{@} 0 ;
+% LIGKERN 1 @{@} * ; * @{@} 1 ; 2 @{@} * ; * @{@} 2 ; 3 @{@} * ; * @{@} 3 ;
+% LIGKERN 4 @{@} * ; * @{@} 4 ; 5 @{@} * ; * @{@} 5 ; 6 @{@} * ; * @{@} 6 ;
+% LIGKERN 7 @{@} * ; * @{@} 7 ; 8 @{@} * ; * @{@} 8 ; 9 @{@} * ; * @{@} 9 ;
+@end example
+
+
+@node Special font effects
+@subsection Special font effects
+
+@cindex oblique fonts
+@cindex slanted fonts
+@cindex fonts, slanted
+Besides the reencodings described in the previous section, Afm2tfm can
+do other manipulations. (Again, it's best to use the prebuilt fonts
+rather than attempting to remake them.)
+
+@samp{-s @var{slant}} makes an obliqued variant, as in:
+
+@example
+afm2tfm Times-Roman -s .167 -v ptmro rptmro
+@end example
+
+@noindent
+This creates @file{ptmro.vpl} and @file{rptmro.tfm}. To use this font,
+put the line
+
+@findex SlantFont
+@example
+rptmro Times-Roman ".167 SlantFont"
+@end example
+
+@noindent
+@flindex psfonts.map
+into @file{psfonts.map}. Then @samp{rptmro} (our name for the obliqued
+Times) will act as if it were a resident font, although it is actually
+constructed from Times-Roman via the PostScript routine @code{SlantFont}
+(which will slant everything 1/6 to the right, in this case).
+
+@cindex expanded fonts
+@cindex fonts, expanded
+Similarly, you can get an expanded font with
+
+@example
+afm2tfm Times-Roman -e 1.2 -v ptmrre rptmrre
+@end example
+
+@noindent
+and by recording the pseudo-resident font
+@findex ExtendFont
+
+@example
+rptmrre Times-Roman "1.2 ExtendFont"
+@end example
+
+@noindent
+in @file{psfonts.map}.
+
+You can also create a small caps font with a command such as
+@cindex small caps fonts
+@cindex fonts, small caps
+
+@example
+afm2tfm Times-Roman -V ptmrc rptmrc
+@end example
+
+@noindent
+This will generate a set of pseudo-small caps mapped into the usual
+lowercase positions and scaled down to 0.8 of the normal cap
+dimensions. You can also specify the scaling as something other than
+the default 0.8:
+
+@example
+afm2tfm Times-Roman -c 0.7 -V ptmrc rptmrc
+@end example
+
+It is unfortunately not possible to increase the width of the small caps
+independently of the rest of the font. If you want a really
+professional looking set of small caps, you need to acquire a small caps
+font.
+
+@findex PaintType
+@cindex outline fonts
+@cindex fonts, outlined
+To change the @code{PaintType} in a font from filled (0) to outlined
+(2), you can add @code{"/PaintType 2 store"} to @file{psfonts.map}, as
+in the following:
+
+@example
+rphvrl Helvetica "/PaintType 2 store"
+@end example
+
+Afm2tfm writes to standard output the line you need to add to
+@file{psfonts.map} to use that font, assuming the font is resident in
+the printer; if the font is not resident, you must add the
+@samp{<@var{filename}} command to download the font. Each identical
+line only needs to be specified once in the @samp{psfonts.map} file,
+even though many different fonts (small caps variants, or ones with
+different output encodings) may be based on it.
+
+
+@node Afm2tfm options
+@subsection Afm2tfm options
+
+@cindex options, to Afm2tfm
+@cindex afm2tfm options
+
+Synopsis:
+@example
+afm2tfm [@var{option}]@dots{} @var{afmfile}[.afm] [@var{tfmfile}[.tfm]]
+@end example
+
+Afm2tfm reads @var{afmfile} and writes a corresponding (but raw) TFM
+file. If @var{tfmfile} is not supplied, the base name of the AFM file is
+extended with @samp{.tfm} to get the output filename.
+
+The simplest example:
+
+@example
+afm2tfm Times-Roman rptmr
+@end example
+
+@cindex accents, wrong
+@noindent
+The TFM file thus created is @dfn{raw} because it omits ligature and
+kern information, and does no character remapping; it simply contains
+the character information in the AFM file in TFM form, which is the form
+that @TeX{} understands. The characters have the same code in the TFM
+file as in the AFM file. For text fonts, this means printable ASCII
+characters will work ok, but little else, because standard PostScript
+fonts have a different encoding scheme than the one that plain @TeX{}
+expects (@pxref{Encodings}). Although both schemes agree for the
+printable ASCII characters, other characters such as ligatures and
+accents vary. Thus, in practice, it's almost always desirable to create
+a virtual font as well with the @samp{-v} or @samp{-V} option.
+@xref{Making a font available}.
+
+The command line options to Afm2tfm:
+
+@table @samp
+@item -c @var{ratio}
+@opindex -c @var{ratio}
+@cindex scaling small caps
+See @samp{-V}; overrides the default ratio of 0.8 for the
+scaling of small caps.
+
+@item -e @var{ratio}
+@opindex -e @var{ratio}
+@cindex expanded fonts
+@cindex condensed fonts
+Stretch characters horizontally by @var{ratio}; if less than 1.0, you
+get a condensed font.
+
+@item -O
+@opindex -O
+@cindex octal character codes
+Output all character codes in the @samp{vpl} file as octal numbers, not
+names; this is useful for symbol or other special-purpose fonts where
+character names such as @samp{A} have no meaning.
+
+@item -p @var{ps-enc}
+@opindex -p @var{ps-enc}
+Use @var{ps-enc} for the destination (PostScript) encoding of the font;
+@var{ps-enc} must be mentioned as a header file for the font in
+@samp{psfonts.map}.
+@xref{Changing PostScript encodings}.
+
+@item -s @var{slant}
+@opindex -s @var{slant}
+@cindex slanted fonts, making
+Slant characters to the right by @var{slant}. If @var{slant} is
+negative, the letters slope to the left (or they might be upright if you
+start with an italic font).
+
+@item -t @var{tex-enc}
+@opindex -t @var{tex-enc}
+Use @var{tex-enc} for the target (@TeX{}) encoding of the font.
+Ligature and kern information may also be specified in @var{file}.
+@var{file} is not mentioned in @file{psfonts.map}.
+
+@item -T @var{ps-tex-enc}
+@opindex -T @var{ps-tex-enc}
+Use @var{ps-tex-enc} for both the PostScript and target @TeX{} encodings
+of the font. Equivalent to @samp{-p @var{file} -t @var{file}}.
+
+@item -u
+@opindex -u
+Use only those characters specified in the @TeX{} encoding, and no
+others. By default, Afm2tfm tries to include all characters in the
+input font, even those not present in the @TeX{} encoding (it puts them
+into otherwise-unused positions, arbitrarily).
+
+@item -v @var{vpl-file}
+@opindex -v @var{vpl-file}
+Output a VPL (virtual property list) file, as well as a TFM file.
+
+@item -V @var{vpl-file}
+@opindex -V @var{vpl-file}
+Same as @samp{-v}, but the virtual font generated is a pseudo small caps
+font obtained by scaling uppercase letters by 0.8 to typeset
+lowercase. This font handles accented letters and retains proper
+kerning.
+@end table
+
+
+@node psfonts.map
+@section @file{psfonts.map}: PostScript font catalog
+
+@flindex psfonts.map
+@cindex non-resident fonts
+@cindex downloading PostScript fonts
+@cindex fonts, downloading
+
+The @file{psfonts.map} file associates a PostScript font with related
+files and constructs. Each line has the format:
+
+@example
+@var{filename} @var{PostScript-name} @var{options}
+@end example
+
+@kindex < @r{font downloading}
+For example, the line
+@example
+rpstrn StoneInformal <StoneInformal.pfb
+@end example
+@noindent
+causes Dvips to download @file{StoneInformal.pfb} if your document (just
+as if it were a header file, @pxref{Header files}) uses the font
+@samp{StoneInformal}.
+
+@cindex partial font downloading
+@cindex downloading fonts partially
+If the @samp{j} config file or command-line option is enabled,
+@file{StoneInformal.pfb} will be @dfn{partially downloaded}---only those
+characters your document actually uses will be extracted and downloaded,
+and the remainder discarded. @xref{Option details}.
+
+Filenames of fonts that are partially downloaded are surrounded by curly
+braces (@samp{@{@dots{}@}}) in the progress report Dvips writes to
+standard output. Wholly-downloaded fonts appear inside angle brackets
+(@samp{<@dots{}>}), like other downloaded files.
+
+@cindex whole font downloading
+@cindex multiple master fonts
+@cindex Minion typeface family
+@kindex << @r{whole font downloading}
+Adobe Multiple Master fonts, such as Minion, cannot be partially
+downloaded. To partially download in general, but avoid partial
+downloading for individual fonts, use @samp{<<} instead @samp{<}:
+@example
+pmnr8r Minion <<Minion.pfb
+@end example
+
+@cindex transforming downloaded fonts
+@cindex expanded fonts
+@cindex wide fonts
+@cindex narrow fonts
+You can generate transformed fonts with a line like this:
+@example
+rpstrc StoneInformal <StoneInformal.pfb ".8 ExtendFont"
+@end example
+
+@noindent
+@xref{Special font effects}, for a
+complete list of font effects.
+
+@cindex reencoding PostScript fonts
+You can change the encoding of the Type 1 font at the PostScript
+level with a @samp{ReEncodeFont} instruction, plus the name of the
+encoding file. This allows you access to characters that may be present
+in the Type 1 font file, but not encoded by default---most of the
+preaccented characters, for example. An example:
+@smallexample
+pstrn8r StoneInformal "TeXBase1Encoding ReEncodeFont" <8r.enc <pstrn8a.pfb
+@end smallexample
+
+@cindex 8r font encoding
+@cindex base encoding, recommended
+The @samp{8r} encoding mentioned here has been designed to serve as a
+base for all downloadable fonts; it allows access to all the characters
+commonly present in a Type 1 font. For more details, see the
+@file{8r.enc} source file that comes with (and is installed with) Dvips.
+
+@kindex <[ @r{encoding vector downloading}
+You may notice that the same syntax is used for downloading encoding
+vectors and Type 1 font files. To make your intentions clear, you can
+also use @samp{<[} to explicitly indicate you are downloading an
+encoding vector, as in:
+@smallexample
+pstrn8r StoneInformal "TeXBase1Encoding ReEncodeFont" <[8r.enc <pstrn8a.pfb
+@end smallexample
+
+@flindex .enc @r{extension for encoding vectors}
+If the filename of your encoding vector does not end in @samp{.enc}, and
+you are using partial font downloading, you must use the @samp{<[}
+syntax, or Dvips will not download the font properly.
+
+@flindex .pfa @r{extension required for partial downloading}
+@flindex .pfb @r{extension required for partial downloading}
+Similarly, the name of the Type 1 font file itself must have extension
+@file{.pfa} or @file{.pfb} for partial downloading to work properly.
+
+@cindex pfb files, automatically unpacked
+When using PFB files, Dvips is smart enough to unpack the binary PFB
+format into printable ASCII so there is no need to perform this
+conversion yourself. In addition, Dvips scans the font to determine its
+memory usage, just as it does for other header files (@pxref{Header
+files}).
+
+Here is a brief summary of how @file{psfonts.map} is read:
+
+@enumerate
+@item If a line is empty or begins with a space, percent, asterisk,
+semicolon, or hash mark, it is ignored.
+
+@item Otherwise, the line is separated into words, where words are
+separated by spaces or tabs, except that if a word begins with a double
+quote, it extends until the next double quote or the end of the line.
+
+@item If a word starts with @samp{<<}, it is taken as a font file to be
+wholly downloaded. Use this to avoid partial downloading, as described
+above.
+
+@item If a word starts with @samp{<[}, it is taken as an encoding file
+to be downloaded. Use this if the name of the encoding file does end in
+@samp{.enc}, also as described above.
+
+@item If a word starts with a @samp{<} character, it is
+treated as a header file that needs to be downloaded. If the name ends
+in @samp{.pfa} or @samp{.pfb}, it is taken as Type 1 font file that will
+be partially downloaded if the @samp{j} option is in effect. There can
+be more than one such header for a given font. If a @samp{<} is a word
+by itself, the next word is taken as the name of the header file.
+
+@item If a word starts with a @samp{"} character, it is taken as PostScript
+code used in generating that font, and is inserted into the output
+verbatim at the appropriate point. (And the double quotes beginning and
+ending the word are removed.)
+
+@item Otherwise the word is a name. The first such name is the TFM file that
+a virtual font file can refer to. If there is a second name, it is used
+as the PostScript name; if there is only one name, it is used for both
+the @TeX{} name and the PostScript name.
+
+@end enumerate
+
+
+@node Color
+@chapter Color
+
+@cindex color
+
+@cindex Hafner, Jim
+Dvips supports one-pass multi-color printing of @TeX{} documents on any
+color PostScript device. Initially added by Jim Hafner, IBM Research,
+@email{hafner@@almaden.ibm.com}, the color support has gone through many
+changes by Tomas Rokicki. Besides the source code support itself, there
+are additional @TeX{} macro files: @samp{colordvi.tex} and
+@samp{blackdvi.tex}, and corresponding @samp{.sty} versions for use with
+@LaTeX{}.
+
+In this section we describe the use of color from the document
+preparer's point of view and then add some instructions on installation
+for the @TeX{} administrator.
+
+@menu
+* Color macro files:: TeX macro definitions.
+* User-definable colors:: Adding your own colors.
+* Color subtleties:: Subtleties in using color.
+* Ted Turner:: Printing in black/white after colorizing.
+* Color device configuration:: Configuring Dvips for color devices.
+* Color support details:: Color support details
+@end menu
+
+
+@node Color macro files
+@section Color macro files
+
+@cindex macros for color
+@cindex color macros
+
+All the color macro commands are defined in @samp{colordvi.tex} (or
+@samp{colordvi.sty}). To access these macros simply add to the top of
+your plain @TeX{} file the command:
+@example
+\input colordvi
+@end example
+@noindent
+For (the obsolete) @LaTeX{} 2.09, add the @samp{colordvi} style option as in:
+@example
+\documentstyle[12pt,colordvi]@{article@}
+@end example
+@noindent
+For @LaTeX{} 2e, these examples are not applicable. Instead, please see
+the documentation for the graphics package, available from
+@file{@var{CTAN}:doc/latex/graphics/}. See also
+@file{@var{CTAN}:doc/epslatex.ps}.
+
+@cindex Crayola crayon box
+@cindex Pantone colors
+@cindex color names, mixed case
+These macros provide two basic kinds of color macros: ones for local
+color changes (a few words, a single symbol) and one for global color
+changes (the whole document). All the color names use a mixed case
+scheme to avoid conflicts with other macros. There are 68 predefined
+colors, with names taken primarily from the Crayola crayon box of 64
+colors, and one pair of macros for the user to set his own color pattern
+(@pxref{User-definable colors}). You can browse the file
+@samp{colordvi.tex} for a list of the predefined colors. The comments
+in this file also show a rough correspondence between the crayon names
+and Pantones.
+
+A local color command has the form
+
+@example
+\@var{ColorName}@{this is the color @var{ColorName}@}
+@end example
+
+@findex \@var{ColorName}
+@noindent
+where @var{ColorName} is the name of a predefined color, e.g.,
+@samp{Blue}. As shown, these macros take one argument, the text to
+print in the specified color. This can be used for nested color changes
+since it restores the original color state when it completes. For
+example:
+
+@example
+This text is normal but here we are \Red@{switching to red,
+\Blue@{nesting blue@}, recovering the red@} and back to original.
+@end example
+
+@noindent
+@cindex color nesting level
+The color nesting level has no hard limit, but it is not advisable to
+nest too deeply lest you and the reader lose track of the color history.
+
+The global color command has the form
+
+@example
+\text@var{ColorName}
+@end example
+
+@noindent
+@findex \text@var{ColorName}
+These macros take no arguments and changes the default color from that
+point on to @var{ColorName}. This of course can be overridden globally
+by another such command or locally by local color commands. For example,
+expanding on the example above, we might have
+
+@example
+\textGreen
+This text is green but here we are \Red@{switching to red,
+\Blue@{nesting blue@}, recovering the red@} and back to
+original green.
+\textCyan
+The text from here on will be cyan until
+\Yellow@{locally changed to yellow@}. Now we are back to cyan.
+@end example
+
+The color commands will even work in math mode and across math mode
+boundaries. This means that if you have a color before going into math
+mode, the mathematics will be set in that color as well. In alignment
+environments like @code{\halign}, @samp{tabular} or @samp{eqnarray},
+local color commands cannot extend beyond the alignment characters.
+
+Because local color commands respect only some environment and
+delimiter changes besides their own, care must be taken in setting
+their scope. It is best not to have them stretch too far.
+
+At the present time there are no macros for color environments in @LaTeX{}
+which might have a larger range. This is primarily to keep the @TeX{}
+and @LaTeX{} use compatible.
+
+
+@node User-definable colors
+@section User-definable colors
+
+@cindex user-definable colors
+@cindex colors, user-definable
+
+There are two ways for the user to specify colors not already defined.
+For local changes, there is the command @code{\Color} which takes two
+arguments. The first argument is four numbers between zero and one and
+specifies the intensity of cyan, magenta, yellow and black (CMYK) in
+that order. The second argument is the text that should appear in the
+given color. For example, suppose you want the words ``this color is
+pretty'' to appear in a color which is 50% cyan, 85% magenta, 40% yellow
+and 20% black. You would use the command
+
+@example
+\Color@{.5 .85 .4 .2@}@{this color is pretty@}
+@end example
+
+For global color changes, there is a command @code{\textColor} which
+takes one argument, the CMYK quadruple of relative color intensities.
+For example, if you want the default color to be as above, then the
+command
+
+@example
+\textColor@{.5 .85 .4 .2@}
+The text from now on will be this pretty color
+@end example
+
+@noindent
+will do the trick.
+
+Making a global color change in the midst of nested local colors is
+highly discouraged. Consequently, Dvips will give you warning message
+and do its best to recover by discarding the current color history.
+
+
+@node Color subtleties
+@section Color subtleties
+
+@cindex color subtleties
+
+Color macros are defined via @code{\special} keywords. As such, they
+are put in the @samp{.dvi} file only as explicit message strings to the
+driver. The (unpleasant) result is that certain unprotected regions of
+the text can have unwanted color side effects. For example, if a color
+region is split by @TeX{} across a page boundary, then the footers of
+the current page (e.g., the page number) and the headers of the next
+page can inherit that color. To avoid this effect globally, users
+should make sure that these special regions of the text are defined with
+their own local color commands. For example, to protect the
+header and footer in plain @TeX{}, use
+
+@example
+\headline@{\Black@{My Header@}@}
+\footline@{\Black@{\hss\tenrm\folio\hss@}@}
+@end example
+
+This warning also applies to figures and other insertions, so be careful!
+
+Of course, in @LaTeX{}, this is much more difficult to do because of the
+complexity of the macros that control these regions. This is
+unfortunate but inevitable, because @TeX{} and @LaTeX{} were
+not written with color in mind.
+
+Even when writing your own macros, much care must be taken. The macros
+that `colorize' a portion of the text work prefix the text work by
+outputting one @code{\special} command to turn the color on before the
+text, and outputting another @code{\special} command afterwards to
+restore the original color. It is often useful to ensure that @TeX{} is
+in horizontal mode before the first special command is issued; this can
+be done by prefixing the color command with @code{\leavevmode}.
+
+
+@node Ted Turner
+@section Printing in black/white after colorizing
+
+If you have a @TeX{} or @LaTeX{} document written with color macros and
+you want to print it in black and white there are two options. On all
+(good) PostScript devices, printing a color file will print in
+corresponding gray levels. This is useful to get a rough idea of the
+colors without using expensive color printing devices. The second
+option is to replace the call to input @file{colordvi.tex} with
+@samp{blackdvi.tex} (and similarly for the @samp{.sty} files). So in
+the above example, replacing the word @samp{colordvi} with
+@samp{blackdvi} suffices. @file{blackdvi.tex} defines the color macros
+as no-ops, and so will produce normal black/white printing. By this
+simple mechanism, the user can switch to all black/white printing
+without having to ferret out the color commands. Also, some device
+drivers, particularly non-PostScript ones like screen previewers, will
+simply ignore the color commands and so print in black/white.
+Hopefully, in the future screen previewers for color displays will be
+compatible with some form of color support.
+
+
+@node Color device configuration
+@section Color device configuration
+
+@cindex color configuration
+@cindex configuration, of color devices
+
+To configure Dvips for a particular color device you need to fine tune
+the color parameters to match your device's color rendition. To do this,
+you will need a Pantone chart for your device. The header file
+@samp{color.lpro} shows a (rough) correspondence between the Crayola
+crayon names and the Pantone numbers and also defines default CMYK
+values for each of the colors. Note that these colors must be defined
+in CMYK terms and not RGB, as Dvips outputs PostScript color commands in
+CMYK. This header file also defines (if they are not known to the
+interpreter) the PostScript commands @samp{setcmykcolor} and
+@samp{currentcmykcolor} in terms of a RGB equivalent so if your device
+only understands RGB, there should be no problem.
+
+@cindex Phaser printer, used for color calibration
+@cindex Tektronix Phaser printer, used for color calibration
+The parameters set in this file were determined by comparing the Pantone
+chart of a Tektronix Phaser printer with the actual Crayola Crayons.
+Because these were defined for a particular device, the actual color
+rendition on your device may be very different. There are two ways to
+adjust this. One is to use the PAntone chart for your device to rewrite
+@samp{color.lpro} prior to compilation and installation. A better
+alternative, which supports multiple devices, is to add a header file
+option in the configuration file (@pxref{Configuration file commands})
+for each device that defines, in @samp{userdict}, the color parameters
+for those colors that need redefining.
+
+For example, if you need to change the parameters defining
+@samp{Goldenrod} (approximately Pantone 109 on the Phaser) for your
+device @samp{mycolordev}, do the following. In the Pantone chart for
+your device, find the CMYK values for Pantone 109. Let's say they are
+@samp{@{\ 0 0.10 0.75 0.03 @}}. Then create a header file named
+@samp{mycolordev.pro} with the commands
+
+@example
+userdict begin
+/Goldenrod @{ 0 0.10 0.75 0.03 setcmykcolor@} bind def
+@end example
+
+@noindent
+Finally, in @samp{config.mycolordev} add the line
+
+@example
+h mycolordev.pro
+@end example
+
+@noindent
+This will then define @samp{Goldenrod} in your device's CMYK values in
+@file{userdict} which is checked before defining it in @file{TeXdict} by
+@file{color.pro}. (On MS-DOS, you will have to call this file
+@file{mycolordev.cfg}.)
+
+This mechanism, together with additions to @file{colordvi.tex} and
+@file{blackdvi.tex} (and the @samp{.sty} files), can also be used to
+predefine other colors for your users.
+
+
+@node Color support details
+@section Color support details
+
+To support color, Dvips recognizes a certain set of specials. These
+specials start with the keyword @samp{color} or the keyword
+@samp{background}, followed by a color specification.
+
+@menu
+* Color specifications::
+* Color specials::
+@end menu
+
+
+@node Color specifications
+@subsection Color specifications
+
+@cindex color specifications
+
+What is a color specification? One of three things. First, it might be
+a PostScript procedure as defined in a PostScript header file. The
+@file{color.pro} file defines 64 of these, including @samp{Maroon}.
+This PostScript procedure must set the current color to be some value;
+in this case, @samp{Maroon} is defined as @samp{0 0.87 0.68 0.32
+setcmykcolor}.
+
+The second possibility is the name of a color model (initially, one of
+@samp{rgb}, @samp{hsb}, @samp{cmyk}, or @samp{gray}) followed by the
+appropriate number of parameters. When Dvips encounters such a macro,
+it sends out the parameters first, followed by the string created by
+prefixing @samp{TeXcolor} to the color model. Thus, the color
+specification @samp{rgb 0.3 0.4 0.5} would generate the PostScript code
+@samp{0.3 0.4 0.5 TeXrgbcolor}. Note that the case of zero arguments is
+disallowed, as that is handled by the single keyword case
+(@samp{Maroon}) above, where no changes to the name are made before it
+is sent to the PostScript file.
+
+The third and final type of color specification is a double quote
+followed by any sequence of PostScript. The double quote is stripped
+from the output. For instance, the color specification
+@samp{"AggiePattern setpattern} will set the `color' to the Aggie logo
+pattern (assuming such exists.)
+
+
+@node Color specials
+@subsection Color specials
+
+We will describe @samp{background} first, since it is the simplest. The
+@samp{background} keyword must be followed by a color specification.
+That color specification is used as a fill color for the background.
+The last @samp{background} special on a page is the one that gets
+issued, and it gets issued at the very beginning of the page, before any
+text or specials are sent. (This is possible because the prescan phase
+of Dvips notices all of the color specials so that the appropriate
+information can be written out during the second phase.)
+
+The @samp{color} special itself has three forms.
+The first is just @samp{color} followed by a color specification. In
+this case, the current global color is set to that color; the color stack
+must be empty when such a command is executed.
+
+The second form is @samp{color push} followed by a color specification.
+This saves the current color on the color stack and sets the color to be
+that given by the color specification. This is the most common way to
+set a color.
+
+The final version of the @samp{color} special is just @samp{color pop},
+with no color specification; this says to pop the color last pushed on
+the color stack from the color stack and set the current color to be
+that color.
+
+Dvips correctly handles these color specials across pages, even when the
+pages are repeated or reversed.
+
+These color specials can be used for things such as patterns or screens
+as well as simple colors. However, note that in the PostScript, only
+one color specification can be active at a time. For instance, at the
+beginning of a page, only the bottommost entry on the color stack is
+sent; also, when a color is popped, all that is done is that the color
+specification from the previous stack entry is sent. No @samp{gsave} or
+@samp{grestore} is used. This means that you cannot easily mix usage of
+the @samp{color} specials for screens and colors, just one or the other.
+This may be addressed in the future by adding support for different
+categories of color-like state.
+
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+
+@summarycontents
+@contents
+
+@end ifclear
+@c INSTALLONLY
+@bye
diff --git a/Build/source/texk/dvipsk/emspecial.c b/Build/source/texk/dvipsk/emspecial.c
new file mode 100644
index 00000000000..a0e616f065e
--- /dev/null
+++ b/Build/source/texk/dvipsk/emspecial.c
@@ -0,0 +1,1440 @@
+/*
+ * emspecial.c
+ * This routine handles the emTeX special commands.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too!*/
+
+#include <ctype.h>
+#include <stdlib.h>
+/*
+ * These are the external routines called:
+ */
+#include "protos.h"
+
+extern char errbuf[] ;
+extern shalfword linepos;
+extern FILE *bitfile;
+extern int actualdpi ;
+extern int vactualdpi ;
+extern integer hh, vv;
+#ifndef KPATHSEA
+extern char *figpath ;
+#endif
+extern int prettycolumn ;
+extern int quiet;
+extern Boolean disablecomments ;
+
+#ifdef DEBUG
+extern integer debug_flag;
+#endif
+
+
+#ifdef EMTEX
+/* emtex specials, added by rjl */
+
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif
+
+static long emmax = 161 ;
+
+/*
+ * We define these seek constants if they don't have their
+ * values already defined.
+ */
+#ifndef SEEK_SET
+#define SEEK_SET (0)
+#endif
+#ifndef SEEK_END
+#define SEEK_END (2)
+#endif
+
+struct empt {
+ struct empt *next ;
+ shalfword point;
+ integer x, y;
+};
+
+static struct empt **empoints = NULL ;
+boolean emused = FALSE; /* true if em points used on this page */
+integer emx, emy;
+
+struct emunit {
+ char *unit;
+ float factor;
+};
+struct emunit emtable[] = {
+ {"pt",72.27},
+ {"pc",72.27/12},
+ {"in",1.0},
+ {"bp",72.0},
+ {"cm",2.54},
+ {"mm",25.4},
+ {"dd",72.27/(1238.0/1157)},
+ {"cc",72.27/12/(1238.0/1157)},
+ {"sp",72.27*65536},
+ {0,0.0}
+};
+
+
+/* clear the empoints array if necessary */
+void
+emclear P1H(void)
+{
+ int i;
+ if (emused && empoints)
+ for (i=0; i<emmax; i++)
+ empoints[i] = 0 ;
+ emused = FALSE ;
+}
+
+/* put an empoint into the empoints array */
+struct empt *emptput P3C(shalfword, point, integer, x, integer, y)
+{
+ struct empt *p ;
+ int start ;
+
+ emused = TRUE;
+ start = point % emmax ;
+ p = empoints[start] ;
+ while ( p ) {
+ if ( p->point == point )
+ break;
+ p = p->next ;
+ }
+ if (p == 0) {
+ p = (struct empt *)mymalloc(sizeof(struct empt)) ;
+ p->next = empoints[start] ;
+ empoints[start] = p ;
+ }
+ p->point = point;
+ p->x = x;
+ p->y = y;
+ return(p) ;
+}
+
+/* get an empoint from the empoints array */
+struct empt *emptget P1C(shalfword, point)
+{
+ struct empt *p ;
+ int start;
+
+ start = point % emmax;
+ if (emused == TRUE) {
+ p = empoints[start] ;
+ while (p) {
+ if (p->point == point)
+ return p ;
+ p = p->next ;
+ }
+ }
+ sprintf(errbuf,"!em: point %d not defined",point);
+ specerror(errbuf);
+ return(NULL); /* never returns due to error */
+}
+
+
+/* convert width into dpi units */
+float emunits P2C(float, width, char *, unit)
+{
+struct emunit *p;
+ for (p=emtable; p->unit; p++) {
+ if (strcmp(p->unit,unit)==0)
+ return( width * actualdpi / p->factor );
+ }
+ return (-1.0); /* invalid unit */
+}
+
+/* The main routine for \special{em:graph ...} called from dospecial.c */
+/* the line cut parameter is not supported (and is ignored) */
+
+void emspecial P1C(char *, p)
+{
+float emwidth, emheight;
+shalfword empoint1, empoint2;
+struct empt *empoint;
+char emunit[3];
+char emstr[80];
+char *emp;
+#ifndef KPATHSEA
+void emgraph();
+#endif
+
+ hvpos() ;
+ for (emp = p+3; *emp && isspace(*emp); emp++); /* skip blanks */
+ if (strncmp(emp, "linewidth", 9) == 0) {
+ /* code for linewidth */
+ for (emp = emp+9; *emp && isspace(*emp); emp++); /* skip blanks */
+ sscanf(emp, "%f%2s", &emwidth, emunit);
+ emwidth = emunits(emwidth,emunit);
+ if (emwidth!=-1.0) {
+ sprintf(emstr,"%.1f setlinewidth", emwidth);
+ cmdout(emstr);
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+ (void)fprintf(stderr, "em special: Linewidth set to %.1f dots\n",
+ emwidth) ;
+#endif
+ } else {
+ sprintf(errbuf,"Unknown em: special width");
+ specerror(errbuf);
+ }
+ }
+ else if (strncmp(emp, "moveto", 6) == 0) {
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+#ifdef SHORTINT
+ (void)fprintf(stderr, "em special: moveto %ld,%ld\n", hh, vv);
+#else
+ (void)fprintf(stderr, "em special: moveto %d,%d\n", hh, vv);
+#endif
+#endif
+ emx = hh;
+ emy = vv;
+ }
+ else if (strncmp(emp, "lineto", 6) == 0) {
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+#ifdef SHORTINT
+ (void)fprintf(stderr, "em special: lineto %ld,%ld\n", hh, vv);
+#else
+ (void)fprintf(stderr, "em special: lineto %d,%d\n", hh, vv);
+#endif
+#endif
+ cmdout("np");
+ numout(emx);
+ numout(emy);
+ cmdout("a");
+ numout(hh);
+ numout(vv);
+ cmdout("li");
+ cmdout("st");
+ emx = hh;
+ emy = vv;
+ }
+ else if (strncmp(emp, "point", 5) == 0) {
+ if (empoints == NULL) {
+ empoints =
+ (struct empt **)mymalloc((integer)emmax * sizeof(struct empt *)) ;
+ emused = TRUE;
+ emclear();
+ }
+ for (emp = emp+5; *emp && isspace(*emp); emp++); /* skip blanks */
+ empoint1 = (shalfword)atoi(emp);
+ empoint = emptput(empoint1,hh,vv);
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+#ifdef SHORTINT
+ (void)fprintf(stderr, "em special: Point %d is %ld,%ld\n",
+#else
+ (void)fprintf(stderr, "em special: Point %d is %d,%d\n",
+#endif
+ empoint->point, empoint->x, empoint->y) ;
+#endif
+ }
+ else if (strncmp(emp, "line", 4) == 0) {
+ for (emp = emp+4; *emp && isspace(*emp); emp++); /* skip blanks */
+ empoint1 = (shalfword)atoi(emp);
+ for (; *emp && isdigit(*emp); emp++); /* skip point 1 */
+ if ( *emp && strchr("hvp",*emp)!=0 )
+ emp++; /* skip line cut */
+ for (; *emp && isspace(*emp); emp++); /* skip blanks */
+ if ( *emp && (*emp==',') )
+ emp++; /* skip comma separator */
+ for (; *emp && isspace(*emp); emp++); /* skip blanks */
+ empoint2 = (shalfword)atoi(emp);
+ for (; *emp && isdigit(*emp); emp++); /* skip point 2 */
+ if ( *emp && strchr("hvp",*emp)!=0 )
+ emp++; /* skip line cut */
+ for (; *emp && isspace(*emp); emp++); /* skip blanks */
+ if ( *emp && (*emp==',') )
+ emp++; /* skip comma separator */
+ emwidth = -1.0;
+ emunit[0]='\0';
+ sscanf(emp, "%f%2s", &emwidth, emunit);
+ emwidth = emunits(emwidth,emunit);
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+ (void)fprintf(stderr, "em special: Line from point %d to point %d\n",
+ empoint1, empoint2) ;
+#endif
+ cmdout("np");
+ if (emwidth!=-1.0) {
+#ifdef DEBUG
+ if (dd(D_SPECIAL))
+ (void)fprintf(stderr,"em special: Linewidth temporarily set to %.1f dots\n",
+ emwidth) ;
+#endif
+ strcpy(emstr,"currentlinewidth");
+ cmdout(emstr);
+ sprintf(emstr,"%.1f setlinewidth", emwidth);
+ cmdout(emstr);
+ }
+ empoint = emptget(empoint1);
+ numout(empoint->x);
+ numout(empoint->y);
+ cmdout("a");
+ empoint = emptget(empoint2);
+ numout(empoint->x);
+ numout(empoint->y);
+ cmdout("li");
+ cmdout("st");
+ if (emwidth!=-1.0) {
+ strcpy(emstr,"setlinewidth");
+ cmdout(emstr);
+ }
+ }
+ else if (strncmp(emp, "message", 7) == 0) {
+ (void)fprintf(stderr, "em message: %s\n", emp+7) ;
+ }
+ else if (strncmp(emp, "graph", 5) == 0) {
+ int i;
+ for (emp = emp+5; *emp && isspace(*emp); emp++); /* skip blanks */
+ for (i=0; *emp && !isspace(*emp) && !(*emp==',') ; emp++)
+ emstr[i++] = *emp; /* copy filename */
+ emstr[i] = '\0';
+ /* now get optional width and height */
+ emwidth = emheight = -1.0; /* no dimension is <= 0 */
+ for (; *emp && ( isspace(*emp) || (*emp==',') ); emp++)
+ ; /* skip blanks and comma */
+ if (*emp) {
+ sscanf(emp, "%f%2s", &emwidth, emunit); /* read width */
+ emwidth = emunits(emwidth,emunit); /* convert to pixels */
+ for (; *emp && (*emp=='.'||isdigit(*emp)||isalpha(*emp)); emp++)
+ ; /* skip width dimension */
+ for (; *emp && ( isspace(*emp) || (*emp==',') ); emp++)
+ ; /* skip blanks and comma */
+ if (*emp) {
+ sscanf(emp, "%f%2s", &emheight, emunit); /* read height */
+ emheight = emunits(emheight,emunit)*vactualdpi/actualdpi;
+ }
+ }
+ if (emstr[0]) {
+ emgraph(emstr,emwidth,emheight);
+ }
+ else {
+ (void)fprintf(stderr, "em:graph: no file given\n") ;
+ }
+ }
+ else {
+ sprintf(errbuf,
+ "Unknown em: command (%s) in \\special will be ignored", p);
+ specerror(errbuf) ;
+ }
+ return;
+ }
+
+
+/* em:graph routines */
+
+/* The graphics routines currently decode 3 types of IBM-PC based graphics */
+/* files: .pcx, .bmp, .msp. The information on the formats has occasionally */
+/* been sketchy, and subject to interpretation. I have attempted to implement*/
+/* these routines to correctly decode the graphics file types mentioned. */
+/* The compressed .bmp file type has not been tested fully due to a lack of */
+/* test files. */
+/* */
+/* The method of reading in the headers of the binary files is ungainly, but */
+/* portable. Failure to use a byte by byte read and convert method will */
+/* result in portability problems. Specifically there is no requirement that */
+/* elements of a C structure be contiguous, only that they have an ascending */
+/* order of addresses. */
+/* */
+/* The current implementations of the graphics format to postscript */
+/* conversion are not the most efficient possible. Specifically: color */
+/* formats are converted to RGB ratios prior to using a simple thresholding */
+/* method to determine if the postscript bit is to be set. The thresholding */
+/* method is compabible with that used in emtex's drivers. */
+/* */
+/* Please send bug reports relating to the em:graph routines to: */
+/* maurice@bruce.cs.monash.edu.au */
+/* */
+/* My thanks to Russell Lang for his assistance with the implementation of */
+/* these routines in a manner compatible with dvips and for the optimization */
+/* of some routines. */
+/* */
+/* Maurice Castro */
+/* 8 Oct 92 */
+
+/* Routines to read binary numbers from IBM PC file types */
+integer readinteger P1C(FILE *, f)
+{
+ integer i;
+ int r;
+
+ i = 0;
+ for (r = 0; r < 4; r++)
+ {
+ i = i | ( ((integer) fgetc(f)) << (8*r) );
+ }
+ return(i);
+}
+
+halfword readhalfword P1C(FILE *, f)
+{
+ halfword i;
+ int r;
+
+ i = 0;
+ for (r = 0; r < 2; r++)
+ {
+ i = i | ( ((halfword) fgetc(f)) << (8*r) );
+ }
+ return(i);
+}
+
+#define readquarterword(f) ((unsigned char)fgetc(f))
+#define tobyte(x) ((x/8) + (x%8 ? 1 : 0))
+
+/* These routines will decode PCX files produced by Microsoft
+ * Windows Paint. Other programs may not produce files which
+ * will be successfully decoded, most notably version 1.xx of
+ * PC Paint. */
+
+/*
+ * Type declarations. integer must be a 32-bit signed; shalfword must
+ * be a sixteen-bit signed; halfword must be a sixteen-bit unsigned;
+ * quarterword must be an eight-bit unsigned.
+ */
+typedef struct
+{
+ quarterword man;
+ quarterword ver;
+ quarterword enc;
+ quarterword bitperpix;
+ halfword xmin;
+ halfword ymin;
+ halfword xmax;
+ halfword ymax;
+ halfword hres;
+ halfword vres;
+ quarterword pal[48];
+ quarterword reserved;
+ quarterword colorplanes;
+ halfword byteperline;
+ halfword paltype;
+ quarterword fill[58];
+} PCXHEAD;
+
+int PCXreadhead P2C(FILE *, pcxf, PCXHEAD *, pcxh)
+{
+ pcxh->man = readquarterword(pcxf);
+ pcxh->ver = readquarterword(pcxf);
+ pcxh->enc = readquarterword(pcxf);
+ pcxh->bitperpix = readquarterword(pcxf);
+ pcxh->xmin = readhalfword(pcxf);
+ pcxh->ymin = readhalfword(pcxf);
+ pcxh->xmax = readhalfword(pcxf);
+ pcxh->ymax = readhalfword(pcxf);
+ pcxh->hres = readhalfword(pcxf);
+ pcxh->vres = readhalfword(pcxf);
+ fread(pcxh->pal, 1, 48, pcxf);
+ pcxh->reserved = readquarterword(pcxf);
+ pcxh->colorplanes = readquarterword(pcxf);
+ pcxh->byteperline = readhalfword(pcxf);
+ pcxh->paltype = readhalfword(pcxf);
+ fread(pcxh->fill, 1, 58, pcxf);
+
+ if (feof(pcxf))
+ return(0); /* fail */
+ if (pcxh->man != 0x0a)
+ return(0); /* fail */
+ if (pcxh->enc != 0x1)
+ return(0); /* fail */
+ return(1); /* success */
+ }
+
+int PCXreadline P3C(FILE *, pcxf,
+ unsigned char *, pcxbuf,
+ unsigned int, byteperline)
+{
+ int n;
+ int c;
+ int i;
+
+ n = 0;
+ memset(pcxbuf,0,byteperline);
+ do {
+ c = fgetc(pcxf);
+ if ((c & 0xc0) == 0xc0) {
+ i = c & 0x3f;
+ c = fgetc(pcxf) & 0xff;
+ while ((i--) && (n < byteperline)) pcxbuf[n++] = c;
+ }
+ else {
+ pcxbuf[n++] = c & 0xff;
+ }
+ } while (n < byteperline);
+ if (c==EOF) n=0;
+ return(n);
+}
+
+void PCXgetpalette P5C( FILE *, pcxf, PCXHEAD *, pcxh,
+ unsigned char *, r,
+ unsigned char *, g,
+ unsigned char *, b)
+{
+ int i;
+
+ /* clear palette */
+ for (i=0; i < 256; i++) {
+ r[i] = 0;
+ g[i] = 0;
+ b[i] = 0;
+ }
+
+ switch (pcxh->ver) {
+ case 0:
+ /* version 2.5 of PC Paint Brush */
+ for (i=0; i < 16; i++) {
+ r[i] = pcxh->pal[i*3];
+ g[i] = pcxh->pal[i*3+1];
+ b[i] = pcxh->pal[i*3+2];
+ }
+ break;
+ case 2:
+ if (pcxh->colorplanes != 1) {
+ /* version 2.8 of PC Paint Brush with valid Palette */
+ for (i=0; i < 16; i++) {
+ r[i] = pcxh->pal[i*3];
+ g[i] = pcxh->pal[i*3+1];
+ b[i] = pcxh->pal[i*3+2];
+ }
+ }
+ else { /* not sure if this is correct - rjl */
+ /* mono palette */
+ r[0] = 0x00; g[0] = 0x00; b[0] = 0x00;
+ r[1] = 0xff; g[1] = 0xff; b[1] = 0xff;
+ }
+ break;
+ case 3:
+ /* version 2.8 of PC Paint Brush with no valid Palette */
+ /* either mono or default */
+
+ if (pcxh->colorplanes != 1) {
+ /* Color default palette - should be checked */
+ r[0] = 0x00; g[0] = 0x00; b[0] = 0x00;
+ r[1] = 0x80; g[1] = 0x00; b[1] = 0x00;
+ r[2] = 0x00; g[2] = 0x80; b[2] = 0x00;
+ r[3] = 0x80; g[3] = 0x80; b[3] = 0x00;
+ r[4] = 0x00; g[4] = 0x00; b[4] = 0x80;
+ r[5] = 0x80; g[5] = 0x00; b[5] = 0x80;
+ r[6] = 0x00; g[6] = 0x80; b[6] = 0x80;
+ r[7] = 0x80; g[7] = 0x80; b[7] = 0x80;
+ r[8] = 0xc0; g[8] = 0xc0; b[8] = 0xc0;
+ r[9] = 0xff; g[9] = 0x00; b[9] = 0x00;
+ r[10] = 0x00; g[10] = 0xff; b[10] = 0x00;
+ r[11] = 0xff; g[11] = 0xff; b[11] = 0x00;
+ r[12] = 0x00; g[12] = 0x00; b[12] = 0xff;
+ r[13] = 0xff; g[13] = 0x00; b[13] = 0xff;
+ r[14] = 0x00; g[14] = 0xff; b[14] = 0xff;
+ r[15] = 0xff; g[15] = 0xff; b[15] = 0xff;
+ }
+ else {
+ /* mono palette */
+ r[0] = 0x00; g[0] = 0x00; b[0] = 0x00;
+ r[1] = 0xff; g[1] = 0xff; b[1] = 0xff;
+ }
+ break;
+ case 5:
+ default:
+ /* version 3.0 of PC Paint Brush or Better */
+ fseek(pcxf, -769L, SEEK_END);
+ /* if signature byte is correct then read the palette */
+ /* otherwise copy the existing palette */
+ if (fgetc(pcxf) == 12) {
+ for (i=0; i < 256; i++) {
+ r[i] = fgetc(pcxf);
+ g[i] = fgetc(pcxf);
+ b[i] = fgetc(pcxf);
+ }
+ }
+ else {
+ for (i=0; i < 16; i++) {
+ r[i] = pcxh->pal[i*3];
+ g[i] = pcxh->pal[i*3+1];
+ b[i] = pcxh->pal[i*3+2];
+ }
+ }
+ break;
+ }
+}
+
+void PCXshowpicture P9C(FILE *, pcxf, int, wide, int, high, int, bytes,
+ int, cp, int, bp, unsigned char *, r,
+ unsigned char *, g, unsigned char *, b)
+{
+ int x;
+ int y;
+ int c;
+ unsigned char *rowa[4]; /* row array */
+ unsigned char *row;
+ int p;
+ unsigned char *pshexa;
+ int xdiv, xmod, xbit;
+ int width;
+ int bytewidth;
+
+ bytewidth = tobyte(wide);
+ width = bytewidth * 8;
+
+ /* output the postscript image size preamble */
+ cmdout("/picstr ");
+ numout((integer)tobyte(wide));
+ cmdout("string def");
+
+ numout((integer)width);
+ numout((integer)high);
+ numout((integer)1);
+ newline();
+
+ cmdout("[");
+ numout((integer)width);
+ numout((integer)0);
+ numout((integer)0);
+ numout((integer)-high);
+ numout((integer)0);
+ numout((integer)0);
+ cmdout("]");
+
+ nlcmdout("{currentfile picstr readhexstring pop} image");
+
+ /* allocate the postscript hex output array */
+ pshexa = (unsigned char *) mymalloc((integer)bytewidth);
+
+ /* make sure that you start at the right point in the file */
+ fseek(pcxf, (long) sizeof(PCXHEAD), SEEK_SET);
+
+ /* malloc the lines */
+ row = (unsigned char *) mymalloc((integer)bytes * cp);
+ for (c = 0; c < cp; c++)
+ rowa[c] = row + bytes*c;
+
+ for (y = 0; y < high; y++) {
+ /* clear the postscript hex array */
+ memset(pshexa,0xff,bytewidth);
+
+ /* read in all the color planes for a row of pixels */
+ PCXreadline(pcxf, rowa[0], bytes*cp);
+
+ /* process each pixel */
+ for (x = 0; x < wide; x++) {
+ /* build up the pixel value from color plane entries */
+ p = 0;
+ xdiv = x>>3;
+ xmod = 7 - (x&7);
+ xbit = 1 << xmod;
+ switch(bp) {
+ case 1:
+ for (c = 0; c < cp; c++) {
+ row = rowa[c];
+ p |= ( (unsigned)(row[xdiv] & xbit) >> xmod ) << c;
+ }
+ break;
+ case 4: /* untested - most programs use 1 bit/pixel, 4 planes */
+ row = rowa[0]; /* assume single plane */
+ p = ( x & 1 ? row[xdiv] : row[xdiv]>>4 ) & 0x0f;
+ break;
+ case 8:
+ row = rowa[0]; /* assume single plane */
+ p = (unsigned) (row[x]);
+ break;
+ default:
+ fprintf(stderr, "em:graph: Unable to Decode this PCX file\n");
+ return;
+ }
+ if ((r[p] < 0xff) || (g[p] < 0xff) || (b[p] < 0xff))
+ pshexa[xdiv] &= (~xbit);
+ else
+ pshexa[xdiv] |= xbit;
+ }
+ newline();
+ mhexout(pshexa,(long)bytewidth);
+ }
+ free(pshexa);
+ free(rowa[0]);
+}
+
+void imagehead P5C(char *, filename, int, wide, int, high,
+ float, emwidth, float, emheight)
+{
+ if (!quiet) {
+ if (strlen(filename) + prettycolumn > STDOUTSIZE) {
+ fprintf(stderr,"\n");
+ prettycolumn = 0;
+ }
+ (void)fprintf(stderr,"<%s",filename);
+ (void)fflush(stderr);
+ prettycolumn += 2+strlen(filename);
+ }
+ hvpos();
+ nlcmdout("@beginspecial @setspecial") ;
+ if (!disablecomments) {
+ cmdout("%%BeginDocument: em:graph");
+ cmdout(filename);
+ newline();
+ }
+ /* set the image size */
+ if (emwidth <= 0.0) emwidth = (float)wide;
+ if (emheight <= 0.0) emheight = (float)high;
+ floatout(emwidth*72/actualdpi);
+ floatout(emheight*72/vactualdpi);
+ newline();
+ cmdout("scale");
+#ifdef DEBUG
+ if (dd(D_SPECIAL)) {
+ (void)fprintf(stderr,
+ "\nem:graph: %s width %d pixels scaled to %.1f pixels\n",
+ filename, wide, emwidth);
+ (void)fprintf(stderr,
+ "em:graph: %s height %d pixels scaled to %.1f pixels\n",
+ filename, high, emheight);
+ }
+#endif
+}
+
+void imagetail P1H(void)
+{
+ if (!disablecomments) {
+ (void)fprintf(bitfile, "\n%%%%EndDocument\n") ;
+ linepos = 0;
+ }
+ nlcmdout("@endspecial") ;
+ if (!quiet) {
+ (void)fprintf(stderr,">");
+ (void)fflush(stderr);
+ }
+}
+
+void pcxgraph P4C(FILE *, pcxf, char *, filename,
+ float, emwidth, float, emheight /* dimension in pixels */ )
+{
+ PCXHEAD pcxh;
+ unsigned char red[256];
+ unsigned char green[256];
+ unsigned char blue[256];
+ int wide;
+ int high;
+ int bytes;
+ int cp;
+ int bpp;
+
+ if (!PCXreadhead(pcxf, &pcxh)) {
+ sprintf(errbuf,"em:graph: Unable to Read Valid PCX Header");
+ specerror(errbuf);
+ }
+ PCXgetpalette(pcxf, &pcxh, red, green, blue);
+
+ /* picture size calculation */
+ wide = (pcxh.xmax - pcxh.xmin) + 1;
+ high = (pcxh.ymax - pcxh.ymin) + 1;
+ bytes = pcxh.byteperline;
+ cp = pcxh.colorplanes;
+ bpp = pcxh.bitperpix;
+
+ imagehead(filename,wide,high,emwidth,emheight);
+ PCXshowpicture(pcxf, wide, high, bytes, cp, bpp, red, green, blue);
+ imagetail();
+}
+
+/* Microsoft Paint routines */
+struct wpnt_1 {
+ quarterword id[4];
+ halfword width;
+ halfword high;
+ halfword x_asp;
+ halfword y_asp;
+ halfword x_asp_prn;
+ halfword y_asp_prn;
+ halfword width_prn;
+ halfword high_prn;
+ integer chk_sum;
+ halfword chk_head;
+};
+
+#define WPAINT_1 1
+#define WPAINT_2 2
+
+void MSP_2_ps P3C(FILE *, f, int, wide, int, high)
+{
+ char *line;
+ char *l;
+ int i;
+ int j;
+ unsigned char a, b, c;
+ int d;
+ int width;
+ halfword *linelen;
+
+ /* an undocumented format - based on a type of run length encoding */
+ /* the format is made up of a list of line lengths, followed by a set */
+ /* of lines. Each line is made up of 2 types of entries: */
+ /* 1) A 3 term entry (0 a b): the byte b is repeated a times */
+ /* 2) A variable length entry (a xxxx....xxxx): a bytes are read */
+ /* from the file. */
+ /* These entries are combined to build up a line */
+
+ width = tobyte(wide)*8;
+
+ /* output the postscript image size preamble */
+ cmdout("/picstr");
+ numout((integer)tobyte(wide));
+ cmdout("string def");
+
+ numout((integer)width);
+ numout((integer)high);
+ numout((integer)1);
+
+ cmdout("[");
+ numout((integer)width);
+ numout((integer)0);
+ numout((integer)0);
+ numout((integer)-high);
+ numout((integer)0);
+ numout((integer)0);
+ cmdout("]");
+
+ nlcmdout("{currentfile picstr readhexstring pop} image");
+
+ fseek(f, 32, SEEK_SET);
+
+ /* read in the table of line lengths */
+ linelen = (halfword *) mymalloc((integer)sizeof(halfword) * high);
+ for (i = 0; i < high; i++) {
+ linelen[i] = readhalfword(f);
+ if (feof(f))
+ return;
+ }
+
+ line = (char *) mymalloc((integer)tobyte(wide));
+ for (i = 0; i < high; i++) {
+ memset(line, 0xff, tobyte(wide));
+ l = line;
+ if (linelen[i] != 0) {
+ d = linelen[i];
+ while (d) {
+ a = fgetc(f);
+ d--;
+ if (a == 0) {
+ b = fgetc(f);
+ c = fgetc(f);
+ d -= 2;
+ for (j = 0; j < b; j++)
+ *l++ = c;
+ }
+ else {
+ for (j = 0; j < a; j++)
+ *l++ = fgetc(f);
+ d -= j;
+ }
+ }
+ }
+ newline();
+ mhexout((unsigned char *) line,(long)tobyte(wide));
+ }
+ free(linelen);
+ free(line);
+}
+
+void MSP_1_ps P3C(FILE *, f, int, wide, int, high)
+{
+ char *line;
+ int i;
+ int width;
+
+ width = tobyte(wide)*8;
+ /* an partly documented format - see The PC Sourcebook */
+ /* the format is made up of a simple bitmap. */
+
+ /* output the postscript image size preamble */
+ cmdout("/picstr");
+ numout((integer)tobyte(wide));
+ cmdout("string def");
+
+ numout((integer)width);
+ numout((integer)high);
+ numout((integer)1);
+
+ cmdout("[");
+ numout((integer)width);
+ numout((integer)0);
+ numout((integer)0);
+ numout((integer)-high);
+ numout((integer)0);
+ numout((integer)0);
+ cmdout("]");
+
+ nlcmdout("{currentfile picstr readhexstring pop} image");
+
+ fseek(f, 32, SEEK_SET);
+
+ line = (char *) mymalloc((integer)tobyte(wide));
+ for (i = 0; i < high; i++) {
+ fread(line, 1, tobyte(wide), f);
+ newline();
+ mhexout((unsigned char *) line,(long)tobyte(wide));
+ }
+ free(line);
+}
+
+
+void mspgraph P4C(FILE *, f, char *, filename, float, emwidth, float, emheight)
+{
+ struct wpnt_1 head;
+ int paint_type = 0;
+
+ /* read the header of the file and figure out what it is */
+ fread(head.id, 1, 4, f);
+ head.width = readhalfword(f);
+ head.high = readhalfword(f);
+ head.x_asp = readhalfword(f);
+ head.y_asp = readhalfword(f);
+ head.x_asp_prn = readhalfword(f);
+ head.y_asp_prn = readhalfword(f);
+ head.width_prn = readhalfword(f);
+ head.high_prn = readhalfword(f);
+ head.chk_sum = readinteger(f);
+ head.chk_head = readhalfword(f);
+
+ if (feof(f)) {
+ fprintf(stderr, "em:graph: Unable to Read Valid MSP Header\n");
+ return;
+ }
+
+ /* check the id bytes */
+ if (!memcmp(head.id, "DanM", 4))
+ paint_type = WPAINT_1;
+ if (!memcmp(head.id, "LinS", 4))
+ paint_type = WPAINT_2;
+
+
+ imagehead(filename,head.width,head.high,emwidth,emheight);
+ switch (paint_type) {
+ case WPAINT_1:
+ MSP_1_ps(f, head.width, head.high);
+ break;
+ case WPAINT_2:
+ MSP_2_ps(f, head.width, head.high);
+ break;
+ default:
+ sprintf(errbuf, "em:graph: Unknown MSP File Type");
+ specerror(errbuf);
+ }
+ imagetail() ;
+}
+
+/* ------------------------------------------------------------------------ */
+/* .BMP file structures */
+struct rgbquad {
+ char blue;
+ char green;
+ char red;
+ char res;
+};
+
+struct bitmapinfoheader {
+ integer size;
+ integer width;
+ integer height;
+ halfword planes; /* must be set to 1 */
+ halfword bitcount; /* 1, 4, 8 or 24 */
+ integer compression;
+ integer sizeimage;
+ integer xpelspermeter;
+ integer ypelspermeter;
+ integer clrused;
+ integer clrimportant;
+};
+
+#ifdef WIN32
+#undef RGB
+#endif
+
+/* constants for the compression field */
+#define RGB 0L
+#define RLE8 1L
+#define RLE4 2L
+
+struct bitmapfileheader {
+ char type[2];
+ integer size;
+ halfword reserved1;
+ halfword reserved2;
+ integer offbits;
+};
+
+void rgbread P4C(FILE *, f, int, w, int, b, char *, s)
+{
+ int i;
+
+ /* set the line to white */
+ memset(s, 0xff, ((w*b)/8)+1);
+
+ /* read in all the full bytes */
+ for (i = 0; i < (w * b) / 8; i++)
+ *s++ = fgetc(f);
+
+ /* read in a partly filled byte */
+ if ((w * b) % 8) {
+ i++;
+ *s++ = fgetc(f);
+ }
+
+ /* check that we are on a 32 bit boundary; otherwise align */
+ while (i % 4 != 0) {
+ fgetc(f);
+ i++;
+ }
+}
+
+unsigned rle_dx = 0; /* delta command horizontal offset */
+unsigned rle_dy = 0; /* delta command vertical offset */
+
+/* checked against output from Borland Resource Workshop */
+void rle4read P4C(FILE *, f, int, w, int, b, char *, s)
+{
+ int i;
+ int limit;
+ int ch;
+ unsigned cnt;
+ int hi;
+
+ limit = (w*b)/8;
+ i = 0;
+ hi = TRUE;
+ /* set the line to white */
+ memset(s, 0xff, limit+1);
+
+ if (rle_dy) {
+ rle_dy--;
+ return;
+ }
+
+ if (rle_dx) {
+ for ( ; rle_dx>1; rle_dx-=2) {
+ s++;
+ i++;
+ }
+ if (rle_dx)
+ hi = FALSE;
+ }
+
+ while (i<=limit) {
+ cnt = fgetc(f);
+ ch = fgetc(f);
+ if (cnt == 0) { /* special operation */
+ switch(ch) {
+ case 0: /* EOL */
+ return; /* this is our way out */
+ case 1: /* End of Bitmap */
+ return;
+ case 2: /* Delta */ /* untested */
+ rle_dx = fgetc(f) + i*2 + (hi ? 1 : 0);
+ rle_dy = fgetc(f);
+ return;
+ default: /* next cnt bytes are absolute */
+ /* must be aligned on word boundary */
+ if (!hi)
+ fprintf(stderr,"em:graph: RLE4 absolute is not byte aligned\n");
+ for (cnt = ch; cnt>0 && i<=limit; cnt-=2) {
+ i++;
+ *s++ = fgetc(f);
+ }
+ if (ch % 4) /* word align file */
+ (void)fgetc(f);
+ }
+ }
+ else { /* cnt is repeat count */
+ if (!hi) { /* we are about to place the low 4 bits */
+ ch = ((ch>>4)&0x0f) | ((ch<<4)&0xf0); /* swap order */
+ i++;
+ *s = (*s & 0xf0) | (ch & 0x0f);
+ s++ ;
+ hi = TRUE;
+ cnt--;
+ }
+ /* we are about to place the high 4 bits */
+ for ( ; cnt>1 && i<=limit ; cnt-=2) { /* place the whole bytes */
+ i++;
+ *s++ = ch;
+ }
+ if (cnt) { /* place the partial byte */
+ *s = (*s & 0x0f) | (ch & 0xf0);
+ hi = FALSE;
+ }
+ }
+ }
+}
+
+/* untested */
+void rle8read P4C(FILE *, f, int, w, int, b, char *, s)
+{
+ int i;
+ int limit;
+ int ch;
+ unsigned cnt;
+
+ limit = (w*b)/8;
+ i = 0;
+ /* set the line to white */
+ memset(s, 0xff, limit+1);
+
+ if (rle_dy) {
+ rle_dy--;
+ return;
+ }
+
+ if (rle_dx) {
+ for ( ; rle_dx > 0; rle_dx--) {
+ s++;
+ i++;
+ }
+ }
+
+ while (i<=limit) {
+ cnt = fgetc(f);
+ ch = fgetc(f);
+ if (cnt == 0) { /* special operation */
+ switch(ch) {
+ case 0: /* EOL */
+ return; /* this is our way out */
+ case 1: /* End of Bitmap */
+ return;
+ case 2: /* Delta */ /* untested */
+ rle_dx = fgetc(f) + i;
+ rle_dy = fgetc(f);
+ return;
+ default: /* next cnt bytes are absolute */
+ for (cnt = ch; cnt>0 && i<=limit; cnt--) {
+ i++;
+ *s++ = fgetc(f);
+ }
+ if (ch % 2) /* word align file */
+ (void)fgetc(f);
+ }
+ }
+ else { /* cnt is repeat count */
+ for ( ; cnt>0 && i<=limit; cnt--) {
+ i++;
+ *s++ = ch;
+ }
+ }
+ }
+}
+
+void bmpgraph P4C(FILE *, f, char *, filename, float, emwidth, float, emheight)
+{
+ struct bitmapfileheader bmfh;
+ struct bitmapinfoheader bmih;
+
+ unsigned char isblack[256];
+ unsigned char rr;
+ unsigned char gg;
+ unsigned char bb;
+ unsigned char c = 0;
+
+ char *line;
+ char *pshexa;
+
+ int clrtablesize;
+ int i;
+ int j;
+
+ unsigned char omask;
+ int oroll;
+
+ unsigned char emask = 0;
+ integer ewidth = 0;
+ int isOS2;
+
+ /* read the header of the file */
+ fread(bmfh.type, 1, 2, f);
+ bmfh.size = readinteger(f);
+ bmfh.reserved1 = readhalfword(f);
+ bmfh.reserved2 = readhalfword(f);
+ bmfh.offbits = readinteger(f);
+ if (feof(f)) {
+ sprintf(errbuf, "em:graph: Unable to Read Valid BMP Header\n");
+ specerror(errbuf);
+ return;
+ }
+
+ bmih.size = readinteger(f);
+ if (bmih.size == 12) { /* OS2 bitmap */
+ isOS2 = TRUE;
+ bmih.width = readhalfword(f);
+ bmih.height = readhalfword(f);
+ bmih.planes = readhalfword(f);
+ bmih.bitcount = readhalfword(f);
+ /* the following don't exist in OS2 format so fill with 0's */
+ bmih.compression = RGB;
+ bmih.sizeimage = 0;
+ bmih.xpelspermeter = 0;
+ bmih.ypelspermeter = 0;
+ bmih.clrused = 0;
+ bmih.clrimportant = 0;
+ }
+ else { /* Windows bitmap */
+ isOS2 = FALSE;
+ bmih.width = readinteger(f);
+ bmih.height = readinteger(f);
+ bmih.planes = readhalfword(f);
+ bmih.bitcount = readhalfword(f);
+ bmih.compression = readinteger(f);
+ bmih.sizeimage = readinteger(f);
+ bmih.xpelspermeter = readinteger(f);
+ bmih.ypelspermeter = readinteger(f);
+ bmih.clrused = readinteger(f);
+ bmih.clrimportant = readinteger(f);
+ }
+
+ if (feof(f)) {
+ sprintf(errbuf, "em:graph: Unable to Read Valid BMP Info");
+ specerror(errbuf);
+ return;
+ }
+
+ if (memcmp(bmfh.type, "BM", 2)) {
+ sprintf(errbuf, "em:graph: Unknown BMP File Type");
+ specerror(errbuf);
+ return;
+ }
+
+ if ((bmih.compression == RLE4) && (bmih.bitcount != 4)) {
+ sprintf(errbuf, "em:graph: Can't do BMP RLE4 with %d bits per pixel",
+ bmih.bitcount);
+ specerror(errbuf);
+ return;
+ }
+
+ if ((bmih.compression == RLE8) && (bmih.bitcount != 8)) {
+ sprintf(errbuf, "em:graph: Can't do BMP RLE8 with %d bits per pixel\n",
+ bmih.bitcount);
+ specerror(errbuf);
+ return;
+ }
+
+ imagehead(filename,(int)bmih.width,(int)bmih.height,emwidth,emheight);
+
+ /* determine the size of the color table to read */
+ clrtablesize = 0;
+ if (bmih.clrused == 0) {
+ switch (bmih.bitcount) {
+ case 1:
+ clrtablesize = 2;
+ break;
+ case 4:
+ clrtablesize = 16;
+ break;
+ case 8:
+ clrtablesize = 256;
+ break;
+ case 24:
+ break;
+ }
+ }
+ else
+ clrtablesize = bmih.clrused;
+
+ /* read in the color table */
+ for (i = 0; i < clrtablesize; i++) {
+ bb = fgetc(f);
+ gg = fgetc(f);
+ rr = fgetc(f);
+ isblack[i] = (rr < 0xff) || (gg < 0xff) || (bb < 0xff);
+ if (!isOS2)
+ (void) fgetc(f);
+ }
+
+ line = (char *) mymalloc((integer)((bmih.width * bmih.bitcount) / 8) + 1);
+ pshexa = (char *) mymalloc((integer)tobyte(bmih.width));
+
+ /* output the postscript image size preamble */
+ cmdout("/picstr");
+ numout((integer)tobyte(bmih.width));
+ cmdout("string def");
+
+ numout((integer)bmih.width);
+ numout((integer)bmih.height);
+ numout((integer)1);
+
+ cmdout("[");
+ numout((integer)bmih.width);
+ numout((integer)0);
+ numout((integer)0);
+ numout((integer)bmih.height);
+ numout((integer)0);
+ numout((integer)bmih.height);
+ cmdout("]");
+
+ nlcmdout("{currentfile picstr readhexstring pop} image");
+
+ if (bmih.bitcount == 1) {
+ if (bmih.width%8)
+ emask = (1<<(8-(bmih.width%8)))-1; /* mask for edge of bitmap */
+ else
+ emask = 0;
+ ewidth = tobyte(bmih.width);
+ }
+
+ /* read in all the lines of the file */
+ for (i = 0; i < bmih.height; i++) {
+ memset(pshexa,0xff,tobyte(bmih.width));
+ switch (bmih.compression) {
+ case RGB:
+ rgbread(f, (int) bmih.width, (int) bmih.bitcount, line);
+ break;
+ case RLE4:
+ rle4read(f, (int) bmih.width, (int) bmih.bitcount, line);
+ break;
+ case RLE8:
+ rle8read(f, (int) bmih.width, (int) bmih.bitcount, line);
+ break;
+ default:
+ sprintf(errbuf,"em:graph: Unknown BMP compression\n");
+ specerror(errbuf);
+ return;
+ }
+
+ omask = 0x80;
+ oroll = 7;
+
+ if (bmih.bitcount == 1) {
+ if (isblack[0])
+ for (j = 0; j < ewidth ; j++)
+ pshexa[j] = line[j];
+ else
+ for (j = 0; j < ewidth ; j++)
+ pshexa[j] = ~line[j];
+ pshexa[ewidth-1] |= emask;
+ }
+ else {
+ for (j = 0; j < bmih.width; j++) {
+ switch (bmih.bitcount) {
+ case 4:
+ c = line[j>>1];
+ if (!(j&1))
+ c >>= 4;
+ c = isblack[ c & 0x0f ];
+ break;
+ case 8:
+ c = isblack[ (int)(line[j]) ];
+ break;
+ case 24:
+ rr = line[j*3];
+ gg = line[j*3+1];
+ bb = line[j*3+2];
+ c = (rr < 0xff) || (gg < 0xff) || (bb < 0xff);
+ break;
+ }
+ if (c)
+ pshexa[j/8] &= ~omask;
+ else
+ pshexa[j/8] |= omask;
+ oroll--;
+ omask >>= 1;
+ if (oroll < 0) {
+ omask = 0x80;
+ oroll = 7;
+ }
+ }
+ }
+ newline();
+ mhexout((unsigned char *) pshexa,(long)tobyte(bmih.width));
+ }
+ imagetail() ;
+ free(pshexa);
+ free(line);
+}
+/* ------------------------------------------------------------------------ */
+
+#define PCX 0
+#define MSP 1
+#define BMP 2
+char *extarr[]=
+{ ".pcx", ".msp", ".bmp", NULL };
+
+void emgraph P3C(char *, filename, float, emwidth, float, emheight)
+{
+ char fname[80];
+ int filetype;
+ FILE *f;
+ char *env;
+ char id[4];
+ int i;
+
+ strcpy(fname, filename);
+
+ /* find the file */
+ f = search(figpath, fname, READBIN);
+ if (f == (FILE *)NULL) {
+ if ( (env = getenv("DVIDRVGRAPH")) != NULL )
+#ifdef KPATHSEA
+ f = search((kpse_file_format_type)env,filename,READBIN);
+#else
+ f = search(env,filename,READBIN);
+#endif
+ }
+ /* if still haven't found it try adding extensions */
+ if (f == (FILE *)NULL) {
+ i = 0;
+ while (extarr[i] != NULL) {
+ strcpy(fname, filename);
+ strcat(fname, extarr[i]);
+ f = search(figpath, fname, READBIN);
+ if (f == (FILE *)NULL) {
+ if ( (env = getenv("DVIDRVGRAPH")) != NULL )
+#ifdef KPATHSEA
+ f = search((kpse_file_format_type)env,filename,READBIN);
+#else
+ f = search(env,filename,READBIN);
+#endif
+ }
+ if (f != (FILE *)NULL)
+ break;
+ i++;
+ }
+ }
+
+ filetype = -1;
+ if (f != (FILE *)NULL) {
+ for (i=0; i<4; i++) {
+ id[i] = readquarterword(f);
+ }
+ if ( (id[0] == 0x0a) && (id[2] == 0x01) )
+ filetype = PCX;
+ if (!memcmp(id, "DanM", 4))
+ filetype = MSP;
+ if (!memcmp(id, "LinS", 4))
+ filetype = MSP;
+ if (!memcmp(id, "BM", 2))
+ filetype = BMP;
+ fseek(f, 0L, SEEK_SET);
+ }
+
+ switch (filetype) {
+ case PCX:
+ pcxgraph(f, fname, emwidth, emheight);
+ break;
+ case MSP:
+ mspgraph(f, fname, emwidth, emheight);
+ break;
+ case BMP:
+ bmpgraph(f, fname, emwidth, emheight);
+ break;
+ default:
+ sprintf(fname,"em:graph: %s: File not found", filename);
+ error(fname);
+ }
+ if (f != (FILE *)NULL)
+ close_file(f);
+}
+
+#else
+void emspecial P1C(char *, p)
+{
+ sprintf(errbuf,"emTeX specials not compiled in this version");
+ specerror(errbuf);
+}
+#endif /* EMTEX */
diff --git a/Build/source/texk/dvipsk/eufonts.map b/Build/source/texk/dvipsk/eufonts.map
new file mode 100644
index 00000000000..1699664db76
--- /dev/null
+++ b/Build/source/texk/dvipsk/eufonts.map
@@ -0,0 +1,21 @@
+euex10 euex10 <euex10.pfb
+eufb10 eufb10 <eufb10.pfb
+eufb5 eufb5 <eufb5.pfb
+eufb7 eufb7 <eufb7.pfb
+eufm10 eufm10 <eufm10.pfb
+eufm5 eufm5 <eufm5.pfb
+eufm7 eufm7 <eufm7.pfb
+eurb10 eurb10 <eurb10.pfb
+eurb5 eurb5 <eurb5.pfb
+eurb7 eurb7 <eurb7.pfb
+eurm10 eurm10 <eurm10.pfb
+eurm5 eurm5 <eurm5.pfb
+eurm7 eurm7 <eurm7.pfb
+eusb10 eusb10 <eusb10.pfb
+eusb5 eusb5 <eusb5.pfb
+eusb7 eusb7 <eusb7.pfb
+eusm10 eusm10 <eusm10.pfb
+eusm5 eusm5 <eusm5.pfb
+eusm7 eusm7 <eusm7.pfb
+msam10 msam10 <msam10.pfb
+msbm10 msbm10 <msbm10.pfb
diff --git a/Build/source/texk/dvipsk/finclude.c b/Build/source/texk/dvipsk/finclude.c
new file mode 100644
index 00000000000..4cd5d09f3ef
--- /dev/null
+++ b/Build/source/texk/dvipsk/finclude.c
@@ -0,0 +1,536 @@
+/*
+ * Code for allowing fonts to be used in PostScript files given via
+ * `psfile=...'.
+ *
+ * Modified to check for font usage (DocumentFonts and DocumentNeededResources)
+ * in all included postscript files. This information is added to the
+ * global list of postscript fonts used (ps_fonts_used). Each font is
+ * also looked up (from psfonts.map) and if a file needs to be downloaded
+ * for that font, it is added (with add_header).
+ * 11/1996 Aaron Sawdey
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifdef KPATHSEA
+#include <kpathsea/c-ctype.h>
+#else
+#include <ctype.h>
+#if !defined(SYSV) && !defined(WIN32)
+extern char *strtok() ; /* some systems don't have this in strings.h */
+#endif
+#define ISXGIGIT isxdigit
+#endif
+#ifdef VMS
+#define getname vms_getname
+#endif
+
+#ifndef STDC_HEADERS
+double atof();
+#endif
+
+/*
+ * These are the external routines we call.
+ */
+#include "protos.h"
+
+/*
+ * These are the external variables we access.
+ */
+extern struct header_list *ps_fonts_used;
+extern char *infont ;
+extern fontdesctype *curfnt ;
+extern fontdesctype *fonthead ;
+extern integer fontmem ;
+extern fontdesctype *fonthd[MAXFONTHD] ;
+extern int nextfonthd ;
+extern char *nextstring ;
+extern char xdig[256] ;
+extern real conv ;
+extern integer pagecost ;
+extern int actualdpi ;
+extern double mag ;
+extern Boolean includesfonts ;
+#ifndef KPATHSEA
+extern char *figpath ;
+#endif
+extern int to_close ;
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+
+/*
+ * Create a font descriptor for a font included in a psfile. There will be
+ * no fontmaptype node for the resulting font descriptor until this font is
+ * encountered by fontdef() (if that ever happens).
+ */
+fontdesctype *
+ifontdef P5C(char *, name, char *, area,
+ int, scsize, int, dssize, char *, scname)
+{
+ fontdesctype *fp;
+
+ fp = newfontdesc((integer)0, scsize, dssize, name, area);
+ fp->scalename = scname;
+ fp->next = fonthead ;
+ fonthead = fp ;
+ return fp;
+}
+/*
+ * When a font appears in an included psfile for the first time, this routine
+ * links it into the fonthd[] array.
+ */
+void
+setfamily P1C(fontdesctype *, f)
+{
+ int i ;
+
+ fontmem -= DICTITEMCOST;
+ for (i=0; i<nextfonthd; i++)
+ if (strcmp(f->name, fonthd[i]->name)==0
+ && strcmp(f->area, fonthd[i]->area)==0) {
+ f->nextsize = fonthd[i];
+ fonthd[i] = f;
+ return;
+ }
+ if (nextfonthd==MAXFONTHD)
+ error("! Too many fonts in included psfiles") ;
+ fontmem -= NAMECOST + strlen(f->name) + strlen(f->area) ;
+ fonthd[nextfonthd++] = f ;
+ f->nextsize = NULL ;
+}
+/*
+ * Convert file name s to a pair of new strings in the string pool.
+ * The first string is the original value of nextstring; the second
+ * string is the return value.
+ */
+char*
+getname P1C(char *, s)
+{
+ char *a, *p, sav;
+
+ a = NULL;
+ for (p=s; *p!=0; p++)
+ if (*p=='/')
+ a = p+1 ;
+ if (a==NULL) *nextstring++ = 0 ;
+ else { sav = *a ;
+ *a = 0 ;
+ (void) newstring(s) ;
+ *a = sav ;
+ s = a ;
+ }
+ return newstring(s);
+}
+/*
+ * Mark character usage in *f based on the hexadecimal bitmap found in
+ * string s. A two-digit offset separated by a colon gives the initial
+ * character code. We have no way of knowing how many times each character
+ * is used or how many strings get created when showing the characters so
+ * we just estimate two usages per character and one string per pair of
+ * usages.
+ */
+void
+includechars P2C(fontdesctype *, f, char *, s)
+{
+ int b, c, d ;
+ int l = strlen(s) ;
+
+ while (l > 0 && (s[l-1] == '\n' || s[l-1] == '\r'))
+ s[--l] = 0 ;
+ if (!ISXDIGIT(s[0]) || !ISXDIGIT(s[1]) || s[2]!=':'
+ || strspn(s+3,"0123456789ABCDEFabcdef") < l-3) {
+ fprintf(stderr, "%s\n", s) ;
+ error("Bad syntax in included font usage table") ;
+ return ;
+ }
+ c = (xdig[(int)(s[0])] << 4) + xdig[(int)(s[1])] ;
+ s += 2 ;
+ while (*++s) {
+ d = xdig[(int)*s] ;
+ for (b=8; b!=0; b>>=1) {
+ if ((d&b)!=0) {
+ pagecost ++ ;
+ (void) prescanchar(&f->chardesc[c]) ;
+ }
+ if (++c==256) return ;
+ }
+ }
+}
+/*
+ * String p should be start after the ":" in a font declaration of the form
+%*FONT: <tfm-name> <scaled-size> <design-size> <2-hex-digits>:<hex-string>
+ * where the sizes are floating-point numbers in units of PostScript points
+ * (TeX's "bp"). We update the data structures for the included font,
+ * charge fontmem for the VM used, and add to delchar if necessary.
+ * Note that the scaled size and the design size are multiplied by mag/1000.
+ * This is needed for the design size to undo the similar factor in conv since
+ * design sizes are not supposed to be affected by magnification. Applying
+ * the magnification factor to the scaled size selects magnified fonts as is
+ * appropriate in the normal case where the included PostScript is scaled by
+ * mag/1000. The definition of `fshow' in finclude.lpro unscales by `DVImag'
+ * to account for this. We cannot change the font scaled size to account for
+ * options like `hscale=' because then the definition of `fshow' would have
+ * to change.
+ */
+void
+scan1fontcomment P1C(char *, p)
+{
+ char *q, *name, *area;
+ char *scname; /* location in buffer where we got scsize */
+ integer scsize, dssize;
+ fontdesctype *fptr;
+ real DVIperBP;
+
+ DVIperBP = actualdpi/(72.0*conv) * (mag/1000.0);
+ p = strtok(p, " ");
+ if (p==NULL) return;
+ area = nextstring ; /* tentatively in the string pool */
+ name = getname(p);
+ q = strtok((char *)0, " ");
+ if (p==NULL || (scsize=(integer)(atof(q)*DVIperBP))==0) {
+ fprintf(stderr, "%s\n",p);
+ error("No scaled size for included font");
+ nextstring = area ; /* remove from string pool */
+ return;
+ }
+ scname = q;
+ q = strtok((char *)0, " ");
+ if (p==NULL || (dssize=(integer)(atof(q)*DVIperBP))==0) {
+ fprintf(stderr, "%s\n",p);
+ error("No design size for included font");
+ nextstring = area ;
+ return;
+ }
+ q = strtok((char *)0, " ");
+ fptr = matchfont(name, area, scsize, scname);
+ if (!fptr) {
+ fptr = ifontdef(name, area, scsize, dssize, newstring(scname));
+ (void) preselectfont(fptr);
+ setfamily(fptr);
+ } else {
+ nextstring = area; /* remove from string pool */
+ (void) preselectfont(fptr);
+ if (fptr->scalename==NULL) {
+ fptr->scalename=newstring(scname);
+ setfamily(fptr);
+ }
+ }
+ includesfonts = 1;
+ fptr->psflag |= THISPAGE;
+ includechars(fptr, q);
+}
+/*
+ * Parse the arguments to a "%%VMusage" comment. The Adobe Type 1 Font Format
+ * book specifies two arguments. This routine will accept one or two arguments;
+ * if there are two arguments we take the maximum.
+ */
+integer
+scanvm P1C(char *, p)
+{
+ char* q;
+ integer vm, vmmax;
+
+ q = strtok(p, " ");
+ if (q==NULL) {
+ error("Missing data in VMusage comment");
+ return 0;
+ }
+ vmmax = atol(q);
+ q = strtok((char *)0, " ");
+ if (q!=NULL && (vm=atol(q))>vmmax)
+ vmmax = vm;
+ return vmmax;
+}
+/*
+ * Scan a list of font names.
+ * Each name is added to the list ps_fonts_used, and if it has
+ * an associated header file (from psfonts.map), the header file
+ * is added with add_header.
+ */
+void
+scan_fontnames P2C(char *, str, char *, psfile)
+{
+ char *p,*pe;
+ struct resfont *re;
+ int i;
+
+ /* Turn all newlines, CRs, and tabs into spaces. */
+ p = str;
+ while(*p) {
+ if(*p == '\r' || *p == '\n' || *p == '\t') *p = ' ';
+ p++;
+ }
+ /* Remove trailing spaces. */
+ p = str+strlen(str)-1;
+ while(p > str && *p == ' ') {
+ *p = '\0';
+ p--;
+ }
+
+ p = str;
+ while(*p == ' ') p++; /* skip leading whitespace */
+
+ while(p && *p) {
+ pe = strchr(p,' ');
+ if(pe != NULL) *pe = '\0';
+
+ i = add_name(p,&ps_fonts_used);
+
+ if (1) {
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,
+ "Adding font '%s' from included postscript file '%s'.\n",
+ p,psfile);
+#endif /* DEBUG */
+
+ re = findPSname(p);
+ if(re != NULL) {
+ if (re->sent != 2) {
+ if (re->Fontfile) {
+ add_header(re->Fontfile) ;
+ } else if (re->downloadheader) {
+ /* this code borrowed from residentfont() in resident.c */
+ char *cp = re->downloadheader ;
+ char *q ;
+
+ infont = re->PSname ;
+ while (1) {
+ q = cp ;
+ while (*cp && *cp != ' ')
+ cp++ ;
+ if (*cp) {
+ *cp = 0 ;
+ add_header(q) ;
+ *cp++ = ' ' ;
+ } else {
+ add_header(q) ;
+ break ;
+ }
+ infont = 0 ;
+ }
+ }
+ infont = 0 ;
+ }
+ re->sent = 2 ;
+ } else {
+ char eb[1000];
+ sprintf(eb,"Font %s used in file %s is not in the mapping file.",
+ p,psfile);
+ error(eb);
+ }
+ }
+
+ p = pe;
+ if(p != NULL) {
+ p++;
+ while(*p == ' ') p++; /* skip leading whitespace */
+ }
+ }
+
+ return;
+}
+
+/*
+ * fc_state == 0: normal state, looking for interesting comments
+ * fc_state == 1: looking for %%+ following %%DocumentFonts
+ * fc_state == 2: looking for "%%+ font" following %%DocumentNeededResources
+ */
+static int fc_state = 0;
+/*
+ * Do we need to check for information at the end of the postscript file?
+ */
+static int check_atend = 0;
+
+void
+scanfontusage P2C(char *, p, char *, psfile)
+{
+ if (strncmp(p, "%%DocumentFonts: ",17) == 0) {
+ p += 17 ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if(!strncmp(p,"(atend)",7)) {
+ check_atend = 1;
+ } else {
+ scan_fontnames(p,psfile);
+ fc_state = 1;
+ }
+ } else if (strncmp(p, "%%DocumentNeededFonts: ",23)==0) {
+ p += 23 ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if(!strncmp(p,"(atend)",7)) {
+ check_atend = 1;
+ } else {
+ scan_fontnames(p,psfile);
+ fc_state = 1;
+ }
+ } else if (fc_state == 1 && strncmp(p,"%%+",3) == 0) {
+ scan_fontnames(p+3,psfile);
+ fc_state = 1;
+ } else if (strncmp(p, "%%DocumentNeededResources: ",27) == 0) {
+ p += 27 ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if(!strncmp(p,"(atend)",7)) {
+ check_atend = 1;
+ } else {
+ if(!strncmp(p,"font ",5)) scan_fontnames(p+5,psfile);
+ fc_state = 2;
+ }
+ } else if (fc_state == 2 && strncmp(p,"%%+",3) == 0) {
+ p += 3 ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if(!strncmp(p,"font ",5)) scan_fontnames(p+5,psfile);
+ fc_state = 2;
+ } else {
+ fc_state = 0;
+ }
+ return;
+}
+
+/*
+ * Scan an initial sequence of comment lines looking for font and memory
+ * usage specifications. This does not handle the "atend" construction.
+ */
+void
+scanfontcomments P1C(char *, filename)
+{
+ char p[500];
+ char *r;
+ FILE *f;
+ integer truecost = pagecost ;
+ Boolean trueknown = 0 ;
+ fontdesctype *oldcf = curfnt;
+
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,
+ "Checking for fonts in '%s'\n",filename);
+#endif /* DEBUG */
+
+ if (*filename == '`') {
+/*
+ * Allow scanning of ` commands. Better return same results both times.
+ */
+ f = popen(filename+1, "r") ;
+ to_close = USE_PCLOSE ;
+ } else {
+ f = search(figpath, filename, READ) ;
+ }
+ if (f) {
+ SET_BINARY(fileno(f)) ;
+ fc_state = 0;
+ check_atend = 0;
+ while (fgets(p,500,f) && p[0]=='%' &&
+ (p[1]=='!' || p[1]=='%' || p[1]=='*')) {
+ if (strncmp(p, "%*Font:", 7) == 0) {
+ scan1fontcomment(p+7);
+ } else if (strncmp(p, "%%VMusage:", 9) == 0) {
+ truecost += scanvm(p+10) ;
+ trueknown = 1 ;
+ }
+ scanfontusage(p,filename);
+ }
+ if (trueknown)
+ pagecost = truecost ;
+
+ if(check_atend) {
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,
+ "Checking for (atend) fonts in '%s'\n",filename);
+#endif /* DEBUG */
+
+ fc_state = 0;
+
+ fseek(f,-4096,2); /* seek to 4096 bytes before EOF. */
+ fgets(p,500,f); /* throw away a partial line. */
+
+ /* find %%Trailer */
+ while((r=fgets(p,500,f)) && strncmp(p,"%%Trailer",9)) ;
+
+ /* look for specs that were deferred to the trailer. */
+ if(r != NULL) {
+ while(fgets(p,500,f)) {
+ if(p[0]=='%' && p[1]=='%') scanfontusage(p,filename);
+ }
+ }
+#ifdef DEBUG
+ else { /* r == NULL */
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,
+ "Did not find %%%%Trailer in included file '%s'.\n",
+ filename);
+ }
+#endif /* DEBUG */
+ }
+ close_file(f) ;
+ }
+ curfnt = oldcf;
+}
+/*
+ * Is string s less than 30 characters long with no special characters
+ * that are not allowed in PostScript commands.
+ */
+Boolean
+okascmd P1C(char *, ss)
+{
+ register int c = 0 ;
+ register char *s = ss ;
+
+ while (*s)
+ if (*s<' ' || *s>126 || ++c==30)
+ return(0) ;
+ return(strcspn(ss,"()<>[]{}%/") == c) ;
+}
+/*
+ * Output font area and font name strings as a literal string
+ */
+void
+nameout P2C(char *, area, char *, name)
+{
+ char buf[30] ;
+ char *s ;
+
+ if (*area==0 && okascmd(name)) {
+ (void)sprintf(buf, "/%s", name) ;
+ cmdout(name);
+ } else {
+ for (s=area; *s; s++)
+ scout(*s) ;
+ for (s=name; *s; s++)
+ scout(*s) ;
+ stringend();
+ cmdout("cvn") ;
+ }
+}
+/*
+ * Output commands for defining a table of PostScript font identifiers for
+ * fonts used in included psfiles in the current section.
+ */
+void
+fonttableout P1H(void)
+{
+ int i, k;
+ fontdesctype *f;
+
+ for (i=0; i<nextfonthd; i++) {
+ for (f=fonthd[i]; f!=NULL; f=f->nextsize)
+ if (f->psflag==EXISTS) break;
+ if (f!=NULL) {
+ nameout(f->area, f->name);
+ k = 0;
+ do {
+ if (f->psflag==EXISTS) {
+ cmdout(f->scalename);
+ lfontout((int)f->psname);
+ k++;
+ }
+ f = f->nextsize;
+ } while (f!=NULL);
+ numout((integer)k);
+ cmdout("fstore");
+ }
+ }
+}
diff --git a/Build/source/texk/dvipsk/finclude.lpro b/Build/source/texk/dvipsk/finclude.lpro
new file mode 100644
index 00000000000..783ebc7549c
--- /dev/null
+++ b/Build/source/texk/dvipsk/finclude.lpro
@@ -0,0 +1,20 @@
+%!
+% Define tfm-name to be a dictionary of included fonts indexed by size:
+% /tfm-name scaled-size1 /font-select1 ... scsize_k /fselect_k k fstore -
+/fstore
+{
+ dup dict exch
+ {dup 4 2 roll put} repeat
+ def
+} bind def
+
+/fshow % (text to show) tfm_name scaled-size fshow -
+{
+ gsave
+ 72 TeXDict /Resolution get div
+ -72 TeXDict /VResolution get div scale
+ 1 DVImag div dup scale
+ get cvx exec
+ show
+ grestore
+}bind def
diff --git a/Build/source/texk/dvipsk/flib.c b/Build/source/texk/dvipsk/flib.c
new file mode 100644
index 00000000000..507af5e4cb5
--- /dev/null
+++ b/Build/source/texk/dvipsk/flib.c
@@ -0,0 +1,343 @@
+/*
+ * Here's some code to handle font libraries. Not needed unless you are
+ * running on a system that can't handle files well. Not endorsed by
+ * Tomas Rokicki or Radical Eye Software; use at your own risk.
+ */
+#ifdef FONTLIB
+#include "dvips.h"
+#include "paths.h"
+#include "protos.h"
+extern int debug_flag ;
+extern char errbuf[] ;
+extern char *flipath ;
+extern char *fliname ;
+extern FILE *pkfile ;
+/*
+ * font library structures
+ */
+struct fli_entry {
+ unsigned long offset;
+ char *name;
+};
+
+struct fli_size {
+ unsigned long size;
+ halfword entries;
+ struct fli_entry *entry;
+};
+
+struct fli_lib {
+ char *name;
+ halfword sizes;
+ struct fli_size *size;
+ struct fli_lib *next;
+};
+
+struct fli_lib *firstlib = NULL;
+
+struct fli_centry {
+ struct fli_lib *lib;
+ FILE *fp;
+};
+
+#define FLICSIZE 4
+struct fli_centry *fli_cache[FLICSIZE];
+
+Boolean flib = 0; /* non zero if reading a font library */
+
+halfword
+pkdouble P1H(void)
+{
+ register halfword i ;
+ i = pkbyte() ;
+ i = i * 256 + pkbyte() ;
+ return(i) ;
+}
+extern char name[] ;
+/*
+ * fliload opens each font library, then reads in its
+ * directory for later use.
+ * fli_cache is initialized.
+ */
+void
+fliload P1H(void)
+{
+ int i ;
+ halfword version1, version2;
+ Boolean needext;
+ char fontname[50];
+ char name[50] ;
+ char *fli;
+ unsigned long dpi;
+ halfword len, numsizes, numfonts;
+ halfword numflib = 0 ;
+ struct fli_lib *lib=NULL, *next_lib=NULL;
+ struct fli_size *size;
+ struct fli_entry *entry;
+
+ /* initialise fli cache */
+ for (i=0; i<FLICSIZE; i++) {
+ fli_cache[i] = (struct fli_centry *)
+ mymalloc((integer)sizeof(struct fli_centry));
+ fli_cache[i]->lib = (struct fli_lib *)NULL;
+ fli_cache[i]->fp = (FILE *)NULL;
+ }
+
+ fli = fliname;
+
+ while (*fli) {
+ /* get next font library name from fliname */
+ needext=1;
+ for (i=0; *fli && *fli!=PATHSEP; i++)
+ if ( (name[i] = *fli++) == '.')
+ needext=0;
+ name[i] = '\0';
+ if (*fli)
+ fli++; /* skip PATHSEP */
+ if (*name) {
+ /* got fli name, now search for it */
+ if (needext)
+ strcat(name,".fli");
+
+ if ( (pkfile=search(flipath,name,READBIN)) != (FILE *)NULL ) {
+ /* for each font library */
+ for (i=0; i<4; i++) {
+ fontname[i] = pkbyte(); /* read header */
+ }
+ version1 = pkbyte();
+ version2 = pkbyte();
+ if (strncmp(fontname,"FLIB",4)!=0 || version1 != 2 || version2 != 0)
+ badpk("incorrect font library format");
+
+ (void) pkdouble(); /* ignore directory length */
+ numsizes = pkdouble(); /* number of sizes */
+ numfonts = pkdouble(); /* number of fonts */
+ len = pkdouble(); /* length of comment */
+ for (i=0; i<len; i++)
+ (void)pkbyte(); /* skip comment */
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,"Font library %s has %d font size%s, %d font%s\n",
+ name, numsizes , numsizes !=1 ? "s" : "",
+ numfonts, numfonts!=1 ? "s" : "");
+#endif /* DEBUG */
+
+ next_lib = (struct fli_lib *)
+ mymalloc((integer)sizeof(struct fli_lib));
+ if (firstlib == (struct fli_lib *)NULL)
+ firstlib = next_lib;
+ else
+ lib->next = next_lib;
+ lib = next_lib;
+ size = (struct fli_size *)
+ mymalloc((integer)numsizes * sizeof(struct fli_size));
+ entry = (struct fli_entry *)
+ mymalloc((integer)numfonts * sizeof(struct fli_entry));
+ lib->name = newstring(name);
+ lib->sizes = numsizes;
+ lib->size = size;
+ lib->next = (struct fli_lib *)NULL;
+
+ for ( ;numsizes>0; numsizes--, size++) {
+ /* for each font size in this library */
+ (void)pkdouble(); /* length of size entry - ignore */
+ numfonts = pkdouble(); /* number of fonts */
+ dpi = pkquad(); /* DPI (fixed point 16.16) */
+
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,"Font library %s size %.5gdpi has %d font%s\n",
+ name, dpi/65536.0, numfonts, numfonts!=1 ? "s" : "");
+#endif /* DEBUG */
+ size->size = dpi ;
+ size->entries = numfonts ;
+ size->entry = entry ;
+ for ( ;numfonts > 0; numfonts--, entry++) {
+ /* read each entry */
+ (void)pkquad(); /* ignore length of font */
+ entry->offset = pkquad(); /* offset to font */
+ len = pkbyte(); /* length of name */
+ for (i=0; i<len; i++)
+ fontname[i] = pkbyte();
+ fontname[len] = '\0';
+ entry->name = newstring(fontname);
+ } /* end for numfonts>0 */
+ } /* end for numsizes>0 */
+ if (numflib < FLICSIZE) { /* leave first few open */
+ fli_cache[numflib]->lib = lib;
+ fli_cache[numflib]->fp = pkfile;
+ }
+ else
+ (void)fclose(pkfile);
+ numflib++;
+ } /* end if opened library */
+ } /* end if (*name) */
+ }
+}
+
+
+/*
+ * flisearch searches all the font libraries for a PK font.
+ * returns FILE pointer positioned to PK font in font library
+ * flisearch caches file pointers for 4 font libraries.
+ */
+FILE *
+flisearch P2C(char *, n, halfword, dpi)
+{
+ halfword dpi1, numsizes, numfonts;
+ struct fli_lib *lib=NULL;
+ struct fli_size *size;
+ struct fli_entry *entry;
+ struct fli_centry *centry;
+ int i;
+ Boolean found;
+
+ if (firstlib == (struct fli_lib *)NULL)
+ return((FILE *)NULL); /* return if no font libraries */
+
+#ifdef DEBUG
+ if (dd(D_FONTS)) {
+ (void)fprintf(stderr,"Trying %s at %ddpi\nfli open:", n, dpi);
+ for (i=0; i<FLICSIZE; i++) /* dump cache contents */
+ if (fli_cache[i]->lib != (struct fli_lib *)NULL)
+ (void)fprintf(stderr, " %s",(fli_cache[i]->lib)->name);
+ (void)fprintf(stderr,"\n");
+ }
+#endif /* DEBUG */
+ for (lib = firstlib; lib != (struct fli_lib *)NULL; lib = lib->next ) {
+ /* for each font library */
+ numsizes = lib->sizes ;
+ size = lib->size ;
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr," Searching %s\n", lib->name);
+#endif /* DEBUG */
+ for (; numsizes>0; numsizes--, size++) {
+ /* for each font size in this library */
+ dpi1 = (halfword)((size->size+32768L)/65536) ;
+ if ( dpi1 == dpi ) {
+ /* if correct size then search for font */
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr, " Checking size %ddpi\n",dpi1);
+#endif /* DEBUG */
+ entry = size->entry ;
+ for (numfonts=size->entries ;numfonts > 0; numfonts--, entry++) {
+ if (strcmp(entry->name,n)==0) {
+ /* if correct font name then look for it in cache */
+ found = 0;
+ for (i=0; i<FLICSIZE && !found; i++) { /* check if fli in cache */
+ if ( fli_cache[i]->lib == lib ) {
+ /* found it, so move to front */
+ centry = fli_cache[i];
+ for (; i>0; i--)
+ fli_cache[i] = fli_cache[i-1];
+ found=1;
+ fli_cache[0] = centry;
+ pkfile = fli_cache[0]->fp; /* font libary already open */
+ }
+ }
+ if (!found) { /* if not in cache then re-open it */
+ /* make space at front */
+ (void)fclose(fli_cache[FLICSIZE-1]->fp);
+ centry = fli_cache[FLICSIZE-1];
+ for (i=FLICSIZE-1; i>0; i--)
+ fli_cache[i] = fli_cache[i-1];
+ /* put this font library at front */
+ if ( (pkfile=search(flipath,lib->name,READBIN)) == (FILE *)NULL ) {
+ sprintf(errbuf,"Can't reopen font library %s", lib->name);
+ error(errbuf);
+ return((FILE *)NULL);
+ }
+ fli_cache[0] = centry;
+ fli_cache[0]->lib = lib;
+ fli_cache[0]->fp = pkfile;
+ }
+ flib = 1 ; /* tell loadfont() not to close it */
+ /* then seek font within library */
+ (void)sprintf(name,"%s %s %ddpi",lib->name, n, dpi1) ;
+ if ( fseek(pkfile,entry->offset,0) )
+ badpk("couldn't seek font");
+ /* make sure it is a PK font */
+ if (pkbyte()==247) /* pre byte */
+ if (pkbyte()==89) { /* id byte */
+ if ( fseek(pkfile,entry->offset,0) )
+ badpk("couldn't seek font");
+ return(pkfile); /* found it */
+ }
+ sprintf(errbuf,"%s %s %ddpi isn't PK format, ignoring",
+ lib->name, n, dpi1);
+ error(errbuf);
+ } /* end if name correct */
+ } /* end for numfonts>0 */
+ }
+ else {
+ /* if not correct size then skip */
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr, " Skipping size %ddpi\n", dpi1);
+#endif /* DEBUG */
+ }
+ } /* end for numsizes>0 */
+ }
+ return((FILE *)NULL);
+}
+
+/* parse the font library path, putting all directory names in path,
+ * and all font library names in name.
+ * Directory names have a trailing DIRSEP.
+ */
+char *
+fliparse P2C(char *, path, char *, name)
+{
+ char *p, *prevp ; /* pointers to path */
+ char *n, *prevn ; /* pointers to name */
+ char *s ;
+
+ p = path ;
+ n = name ;
+ s = path ;
+
+ while (*s) {
+ prevp = p ;
+ prevn = n ;
+ while (*s && *s != PATHSEP) {
+ /* copy till PATHSEP */
+ *p++ = *s;
+ *n++ = *s;
+ s++;
+ }
+ *n = '\0' ;
+ if (*s)
+ s++; /* skip PATHSEP */
+
+ if ( *prevn=='\0' || prevn[strlen(prevn)-1] == DIRSEP ) {
+ n = prevn ; /* ignore name if it is dir */
+ if (*prevn)
+ p--; /* backup over DIRSEP */
+ *p++ = PATHSEP;
+ prevp = p ;
+ }
+ else {
+ p = prevp ; /* ignore path if it is library name */
+ *n++ = PATHSEP;
+ prevn = n ;
+ }
+
+ }
+ *p = '\0' ;
+ *n = '\0' ;
+ if (n!=name && *--n==PATHSEP)
+ *n = '\0'; /* remove trailing PATHSEP from name */
+ if (p!=path && *--p==PATHSEP)
+ *p = '\0'; /* remove trailing PATHSEP from path */
+ return(path);
+} /* end fliparse */
+#else
+/*
+ * Some systems don't like .o files that compile to nothing, so we
+ * provide a stub routine.
+ */
+void fliload() {}
+#endif
+
diff --git a/Build/source/texk/dvipsk/fontdef.c b/Build/source/texk/dvipsk/fontdef.c
new file mode 100644
index 00000000000..606fedb6958
--- /dev/null
+++ b/Build/source/texk/dvipsk/fontdef.c
@@ -0,0 +1,197 @@
+/*
+ * Stores the data from a font definition into the global data structures.
+ * A routine skipnop is also included to handle nops and font definitions
+ * between pages.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifdef KPATHSEA
+#include <kpathsea/magstep.h>
+#endif
+
+/*
+ * These are the external routines we call.
+ */
+#include "protos.h"
+
+/*
+ * The external variables we use:
+ */
+extern char *nextstring, *maxstring ;
+extern double mag ;
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern int actualdpi ;
+extern real alpha ;
+extern fontmaptype *ffont ;
+extern quarterword *curpos ;
+extern fontdesctype *fonthead ;
+extern integer fsizetol ;
+/*
+ * newfontdesc creates a new font descriptor with the given parameters and
+ * returns a pointer to the new object.
+*/
+fontdesctype*
+newfontdesc P5C(integer, cksum, integer, scsize, integer, dssize,
+ char *, name, char *, area)
+{
+ register fontdesctype *fp ;
+
+ fp = (fontdesctype *)mymalloc((integer)sizeof(fontdesctype)) ;
+ fp->chardesc = (chardesctype *)mymalloc(256*(integer)sizeof(chardesctype)) ;
+ fp->maxchars = 256 ;
+ fp->psname = 0 ;
+ fp->loaded = 0 ;
+ fp->checksum = cksum ;
+ fp->scaledsize = scsize ;
+ fp->designsize = dssize ;
+ fp->thinspace = scsize / 6 ;
+ fp->scalename = NULL ;
+ fp->psflag = 0 ;
+ fp->codewidth = 1 ;
+ fp->name = name;
+#ifdef VMCMS /* IBM: VM/CMS */
+ {
+ int i ;
+ for ( i=0 ; fp->name[i] ; i++ )
+ fp->name[i] = ascii2ebcdic[ fp->name[i] ] ;
+ }
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ {
+ int i ;
+ for ( i=0 ; fp->name[i] ; i++ )
+ fp->name[i] = ascii2ebcdic[ fp->name[i] ] ;
+ }
+#endif /* IBM: MVS/XA */
+#endif /* IBM: VM/CMS */
+ fp->area = area;
+ fp->resfont = NULL ;
+ fp->localfonts = NULL ;
+#ifdef KPATHSEA
+ fp->dpi = kpse_magstep_fix ((halfword)(mag*(float)fp->scaledsize*DPI/
+ ((float)fp->designsize*1000.0)+0.5), DPI, NULL) ;
+#else
+ fp->dpi = dpicheck((halfword)(mag*fp->scaledsize*DPI/
+ ((float)fp->designsize*1000.0)+0.5)) ;
+#endif
+ fp->loadeddpi = fp->dpi ;
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,"Defining font (%s) %s at %.1fpt\n",
+ area, name, (real)scsize/(alpha*0x100000)) ;
+#endif /* DEBUG */
+ return fp ;
+}
+/*
+ * Try to find a font with a given name and approximate scaled size, returning
+ * NULL if unsuccessful. If scname and the font's scalename are both
+ * non-NULL they must match exactly. If both are NULL, scsize and the
+ * font's scaledsize come from the dvi file and should match exactly.
+ * Otherwise there can be some slop due to the inaccuracies of sizes
+ * read from an included psfile.
+ */
+fontdesctype *
+matchfont P4C(char *, name, char *, area, integer, scsize, char *, scname)
+{
+ register fontdesctype *fp;
+ register integer smin, smax;
+
+ smin = scsize - fsizetol ;
+ smax = scsize + fsizetol ;
+ for (fp=fonthead; fp; fp=fp->next)
+ if (smin < fp->scaledsize && fp->scaledsize < smax &&
+ strcmp(name,fp->name)==0 && strcmp(area,fp->area)==0) {
+ if (scname == NULL) {
+ if (fp->scalename!=NULL || scsize==fp->scaledsize)
+ break ;
+ } else {
+ if (fp->scalename==NULL || strcmp(scname,fp->scalename)==0)
+ break ;
+ }
+ }
+#ifdef DEBUG
+ if (dd(D_FONTS) && fp)
+ (void)fprintf(stderr,"(Already known.)\n") ;
+#endif /* DEBUG */
+ return fp;
+}
+/*
+ * fontdef takes a font definition in the dvi file and loads the data
+ * into its data structures.
+ */
+void
+fontdef P1C(int, siz)
+{
+ register integer i, j, fn ;
+ register fontdesctype *fp ;
+ register fontmaptype *cfnt ;
+ char *name, *area ;
+ integer cksum, scsize, dssize ;
+ extern void skipover(int) ;
+
+ fn = dvibyte() ;
+ while (siz-- > 1)
+ fn = (fn << 8) + dvibyte() ;
+ for (cfnt=ffont; cfnt; cfnt = cfnt->next)
+ if (cfnt->fontnum == fn) goto alreadydefined ;
+ cfnt = (fontmaptype *)mymalloc((integer)sizeof(fontmaptype)) ;
+ cfnt->next = ffont ;
+ ffont = cfnt ;
+ cfnt->fontnum = fn ;
+ cksum = signedquad() ;
+ scsize = signedquad() ;
+ dssize = signedquad() ;
+ i = dvibyte() ; j = dvibyte() ;
+ if (nextstring + i + j > maxstring)
+ error("! out of string space") ;
+ area = nextstring ;
+ for (; i>0; i--)
+ *nextstring++ = dvibyte() ;
+ *nextstring++ = 0 ;
+ name = nextstring ;
+ for (; j>0; j--)
+ *nextstring++ = dvibyte() ;
+ *nextstring++ = 0 ;
+ fp = matchfont(name, area, scsize, (char *)0) ;
+ if (fp) {
+ nextstring = name ;
+ fp->checksum = cksum ;
+ } else {
+ fp = newfontdesc(cksum, scsize, dssize, name, area) ;
+ fp->next = fonthead ;
+ fonthead = fp ;
+ }
+ cfnt->desc = fp ;
+ return ;
+alreadydefined:
+/* A DVI file will not define a font twice; but we may be scanning
+ * a font definition twice because a new section has started,
+ * or because of collated copies. */
+ skipover(12) ;
+ skipover(dvibyte()+dvibyte()) ;
+}
+
+/*
+ * The next routine handles nops or font definitions between pages in a
+ * dvi file. Returns the first command that is not a nop or font definition.
+ *
+ * Now handles specials (but ignores them)
+ */
+int
+skipnop P1H(void)
+{
+ register int cmd ;
+
+ while (1) {
+ switch(cmd=dvibyte()) {
+case 138: break ;
+case 239: skipover((int)dvibyte()) ; break ; /* xxx1 */
+case 240: skipover((int)twobytes()) ; break ; /* xxx2 */
+case 241: skipover((int)threebytes()) ; break ; /* xxx3 */
+case 242: skipover((int)signedquad()) ; break ; /* xxx4 */
+case 243: case 244: case 245: case 246: fontdef(cmd-242) ; break ;
+default: return cmd ;
+ }
+ }
+}
diff --git a/Build/source/texk/dvipsk/header.c b/Build/source/texk/dvipsk/header.c
new file mode 100644
index 00000000000..280761f9d74
--- /dev/null
+++ b/Build/source/texk/dvipsk/header.c
@@ -0,0 +1,186 @@
+/*
+ * This routine handles the PostScript prologs that might
+ * be included through:
+ *
+ * - Default
+ * - Use of PostScript fonts
+ * - Specific inclusion through specials, etc.
+ * - Use of graphic specials that require them.
+ *
+ * Things are real simple. We build a linked list of headers to
+ * include. Then, when the time comes, we simply copy those
+ * headers down.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+struct header_list *header_head ;
+/*
+ * The external routines we use.
+ */
+#include "protos.h"
+extern char errbuf[] ;
+extern integer fontmem, swmem ;
+#ifndef KPATHSEA
+extern char *headerpath ;
+#endif
+extern char *infont ;
+extern int headersready ;
+#ifdef DEBUG
+extern integer debug_flag ;
+#endif
+#ifdef HPS
+extern Boolean noprocset ;
+extern Boolean HPS_FLAG ;
+#endif
+
+int
+add_name P2C(char *, s, struct header_list **, what)
+{
+ add_name_general (s, what, NULL, NULL);
+}
+
+/*
+ * This more general routine adds a name to a list of unique
+ * names.
+ */
+int
+add_name_general P4C(char *, s, struct header_list **, what, char *, pre, char *, post)
+{
+ struct header_list *p, *q ;
+
+ for (p = *what ; p != NULL; p = p->next)
+ if (strcmp(p->name, s)==0)
+ return 0 ;
+ q = (struct header_list *)mymalloc((integer)(sizeof(struct header_list)
+ + strlen(s))) ;
+ q->Hname = infont ;
+ q->next = NULL ;
+ q->precode = pre ;
+ q->postcode = post ;
+ strcpy(q->name, s) ;
+ if (*what == NULL)
+ *what = q ;
+ else {
+ for (p = *what; p->next != NULL; p = p->next) ;
+ p->next = q ;
+ }
+ return 1 ;
+}
+/*
+ * This function checks the virtual memory usage of a header file.
+ * If we can find a VMusage comment, we use that; otherwise, we use
+ * length of the file.
+ */
+void checkhmem P3C(char *, s, char *, pre, char *, post)
+{
+ FILE *f ;
+
+ f = search(headerpath, s, READBIN) ;
+ if (pre || post) {
+ if (f==NULL)
+ f = search(figpath, s, READBIN) ;
+ }
+ if (f==0) {
+ (void)sprintf(errbuf, "! Couldn't find header file %s", s) ;
+ error(errbuf) ;
+ } else {
+ int len, i, j ;
+ long mem = -1 ;
+ char buf[1024] ;
+
+ len = fread(buf, sizeof(char), 1024, f) ;
+ for (i=0; i<len-20; i++)
+ if (buf[i]=='%' && strncmp(buf+i, "%%VMusage:", 10)==0) {
+ if (sscanf(buf+i+10, "%d %ld", &j, &mem) != 2)
+ mem = -1 ;
+ break ;
+ }
+ if (mem == -1) {
+ mem = 0 ;
+ while (len > 0) {
+ mem += len ;
+ len = fread(buf, sizeof(char), 1024, f) ;
+ }
+ }
+ if (mem < 0)
+ mem = DNFONTCOST ;
+ (*close_file) (f) ;
+#ifdef DEBUG
+ if (dd(D_HEADER))
+ (void)fprintf(stderr, "Adding header file \"%s\" %ld\n",
+ s, mem) ;
+#endif
+ fontmem -= mem ;
+ if (fontmem > 0) /* so we don't count it twice. */
+ swmem -= mem ;
+ }
+}
+/*
+ * This routine is responsible for adding a header file. We also
+ * calculate the VM usage. If we can find a VMusage comment, we
+ * use that; otherwise, we use the length of the file.
+ */
+int
+add_header P1C(char *, s)
+{
+ add_header_general (s, NULL, NULL);
+}
+
+int
+add_header_general P3C(char *, s, char *, pre, char *, post)
+{
+ int r ;
+
+ r = add_name_general(s, &header_head, pre, post) ;
+ if (r) {
+ if (headersready == 1) {
+ struct header_list *p = header_head ;
+
+ while (p) {
+ checkhmem(p->name, p->precode, p->postcode) ;
+ p = p->next ;
+ }
+ headersready = 2 ;
+ } else if (headersready == 2) {
+ checkhmem(s, pre, post) ;
+ }
+ }
+ return r ;
+}
+/*
+ * This routine runs down a list, returning each in order.
+ */
+static struct header_list *CUR_head = NULL ;
+char *
+get_name P1C(struct header_list **, what)
+{
+ if (what && *what) {
+ char *p = (*what)->name ;
+ infont = (*what)->Hname ;
+ CUR_head = *what ;
+ *what = (*what)->next ;
+ return p ;
+ } else
+ return 0 ;
+}
+/*
+ * This routine actually sends the headers.
+ */
+void
+send_headers P1H(void) {
+ struct header_list *p = header_head ;
+ char *q ;
+
+ while (0 != (q=get_name(&p))) {
+#ifdef DEBUG
+ if (dd(D_HEADER))
+ (void)fprintf(stderr, "Sending header file \"%s\"\n", q) ;
+#endif
+#ifdef HPS
+ if (HPS_FLAG) {
+ if (strcmp(q,"target.dct")==0) noprocset = 1 ;
+ }
+#endif
+ copyfile_general(q, CUR_head) ;
+ }
+ infont = 0 ;
+}
diff --git a/Build/source/texk/dvipsk/hps.c b/Build/source/texk/dvipsk/hps.c
new file mode 100644
index 00000000000..320ba41f56b
--- /dev/null
+++ b/Build/source/texk/dvipsk/hps.c
@@ -0,0 +1,569 @@
+/* This is the main file for hacking dvips to do HyperPostScript
+ * Written by Mark D. Doyle 11/94. It is (C) Copyright 1994 by Mark D. Doyle
+ * and the University of California. You may modify and use this program to
+ * your heart's content, so long as you send modifications to Mark Doyle and
+ * abide by the rest of the dvips copyrights.
+ */
+#include "dvips.h"
+#ifdef HPS
+#include <stdlib.h>
+#ifdef KPATHSEA
+#include <kpathsea/c-ctype.h>
+#else
+#define TOLOWER Tolower
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef Tolower
+#define Tolower tolower
+#endif
+#define NAME 0
+#define HREF 1
+#define skip_space(s) for( ; *s == ' ' ; s++) ;
+
+Boolean inHTMLregion = 0 ;
+Boolean NO_ERROR = 1 ;
+Boolean HPS_ERROR = 0 ;
+integer HREF_COUNT ;
+Boolean ISHREF = 0 ;
+Boolean POPPED = 0 ;
+Boolean PUSHED = 0 ;
+
+char *current_name ;
+int current_type ;
+int current_pushcount ;
+extern integer pushcount ;
+extern shalfword linepos ;
+
+
+#define GoTo 0
+#define GoToR 1
+#define Launch 2
+
+typedef struct rectangle {
+ double llx ; /* lower left x coor */
+ double lly ; /* lower left y coor */
+ double urx ; /* upper right x coor */
+ double ury ; /* upper right y coor */
+ } dvipsRectangle ;
+
+typedef struct hps_link {
+ int action ; /* GoTo, GoToR, or Launch */
+ char *file ; /* PDF-style system-independent filename - unused now */
+ dvipsRectangle rect ; /* rectangle for location of link */
+ int border[5] ; /* Border info --- with dashes*/
+ int srcpg ; /* Page of location */
+ int page ; /* Page of destination --- left out is same as srcpg */
+ int vert_dest ; /* Vertical position of destination on page */
+ double color[3] ; /* color: length of array gives colorspace (3 <=> RGB)*/
+ char *title ; /* Title of link */
+ } Hps_link ;
+
+struct nlist { /* hashtable entry */
+ struct nlist *next ; /* next entry in chain */
+ char *name ; /* defined name */
+ Hps_link *defn ; /* Link associated with name */
+ } ;
+
+typedef struct rect_list { /* linked list of rectangles */
+ struct rect_list *next ; /* next rectangle in the chain */
+ dvipsRectangle rect ;
+ } Rect_list ;
+
+Rect_list *current_rect_list ;
+
+#define HASHSIZE 1223
+static struct nlist *link_targets[HASHSIZE] ; /* names .... */
+static struct nlist *link_sources[HASHSIZE] ; /* hrefs .... */
+
+#ifdef KPATHSEA
+#define dup_str xstrdup
+#else
+char *dup_str() ; /* duplicate a string */
+#endif
+
+#include "protos.h"
+
+extern Boolean removecomments ;
+Boolean noprocset ; /* Leave out BeginProc and EndProc comments */
+extern int vactualdpi ;
+extern int pagecounter ;
+extern integer hhmem, vvmem ;
+extern integer vpapersize ;
+/* This was hardcoded to letter size. The denominator converts scaled
+ points to big points (65536*72.27/72). */
+#undef PAGESIZE /* HP-UX 10 defines for itself. */
+#define PAGESIZE ((int) (vpapersize/65781.76))
+#define MARGIN 72
+#define VERTICAL 0
+#define HORIZONTAL 1
+#define FUDGE 2.0
+
+/* For later use
+* static char *dest_key[9] = {"Fit", "FitB", "FitW", "FitH", "FitBH"
+ "FitR", "FitV", "FitBV", "XYZ"} ;
+*/
+
+extern FILE *bitfile ;
+extern char *oname ;
+
+extern integer pagenum ;
+extern integer hh ;
+extern integer vv ;
+extern integer hoff, voff ;
+
+char *hs = NULL ; /* html string to be handled */
+char *url_name = NULL ; /* url between double quotes */
+
+/* parse anchor into link */
+void do_html P1C(char *, s)
+{
+ Hps_link *nl ;
+ url_name = (char *)malloc(strlen(s)+1) ;
+ hs = s ;
+ HREF_COUNT = 0 ;
+ skip_space(hs) ; /* skip spaces */
+ if ( TOLOWER(*hs) == 'a') { /* valid start */
+ POPPED = FALSE ;
+ if (inHTMLregion) {
+ error("previous html not closed with /A");
+ return;
+ } else {
+ inHTMLregion = TRUE ;
+ current_rect_list = NULL ;
+ }
+ hs++ ;
+ skip_space(hs) ;
+ while(*hs != '\0') {
+ /* parse for names and href */
+ if (!href_or_name()) {
+ error("Bad HMTL:") ;
+ error(s) ;
+ error("!") ;
+ break ;
+ }
+ skip_space(hs) ;
+ }
+ } else if ( (*hs == '/') && (TOLOWER(hs[1]) == 'a') ) {
+ if (!inHTMLregion) {
+ error("In html, /A found without previous A") ;
+ return;
+ } else {
+ inHTMLregion = FALSE ;
+ }
+ if (current_type == HREF && current_name[0] != '#') {
+ if ((nl = lookup_link(current_name, current_type)->defn)) {
+ nl->rect.urx = dvi_to_hps_conv(hh + hoff,HORIZONTAL) ;
+ nl->rect.ury = dvi_to_hps_conv(vv + voff, VERTICAL)-FUDGE+12.0 ;
+ stamp_external(current_name,nl); /* Broken lines ? */
+ } else {
+ error("!Null lookup");
+ }
+ } else {
+ if ((nl = lookup_link(current_name, current_type)->defn)) {
+ nl->rect.urx = dvi_to_hps_conv(hh + hoff,HORIZONTAL) ;
+ nl->rect.ury = dvi_to_hps_conv(vv + voff, VERTICAL)-FUDGE+12.0 ;
+ if (current_type) {
+ stamp_hps(nl) ; /* Put link info right where special is */
+ print_rect_list() ; /* print out rectangles */
+ }
+ } else {
+ error("!Null lookup");
+ }
+ }
+ }
+ else {
+ error( "No A in html special") ;
+ error(s) ;
+ /*error("!") ;*/
+ }
+
+ return ;
+}
+
+int href_or_name P1H(void) {
+ if ((strncmp(hs, "href", 4) == 0) || (strncmp(hs, "HREF", 4) == 0)) {
+ ISHREF = TRUE ;
+ } else if ((strncmp(hs, "name", 4) == 0)
+ || (strncmp(hs, "NAME", 4) == 0)) {
+ ISHREF = FALSE ;
+ } else {
+ error("Not valid href or name html reference") ;
+ return(HPS_ERROR) ;
+ }
+ if(!parseref()) return(HPS_ERROR) ;
+ if (url_name) {
+ if( ISHREF ) {
+ do_link(url_name, HREF) ;
+ } else do_link(url_name, NAME) ;
+ } else {
+ error("No string in qoutes ") ;
+ return(HPS_ERROR) ;
+ }
+ return(NO_ERROR) ;
+}
+
+int parseref P1H(void) {
+ int i = 0 ;
+ for(i=0 ; i++ < 4 ; hs++) ; /* skip href or name in html string */
+ skip_space(hs) ;
+ if (*hs == '=' ) {
+ hs++ ;
+ } else {
+ error("No equal sign") ;
+ return(HPS_ERROR) ;
+ }
+ if(!get_string()) return(HPS_ERROR) ;
+ return(NO_ERROR) ; /* extract stuff between double quotes */
+}
+
+int get_string P1H(void) {
+ char *v = url_name ;
+
+ skip_space(hs) ;
+ /* hash_name() ; */
+ if (*hs == '"') {
+ for(hs++ ; *hs != '"' && *hs != '\0' ; *v++ = *hs++) ; /* need to esc " */
+ if(*hs == '"') {
+ hs++ ;
+ *v++ = '\0' ;
+ return(NO_ERROR) ;
+ } else {
+ error("Improper href. Missing closing double quote") ;
+ return(HPS_ERROR) ;
+ }
+ } else {
+ error("Improper href. Missing opening double quote") ;
+ return(HPS_ERROR) ;
+ }
+}
+
+int do_link P2C(char *, s, int, type)
+{
+
+ Hps_link *p ;
+
+ if (HREF_COUNT++ > 0) {
+ error("!HTML string contains more than one href") ;
+ return(HPS_ERROR) ;
+ }
+ p = (Hps_link *)malloc(sizeof(*p)) ;
+ p->action = GoTo ;
+ p->title = (char *)malloc(strlen(s)+1) ;
+ p->title = s ;
+ p->srcpg = pagecounter ;
+ p->rect.llx = dvi_to_hps_conv(hh + hoff,HORIZONTAL) ;
+ p->rect.lly = dvi_to_hps_conv(vv + voff,VERTICAL)-FUDGE ;
+ p->rect.urx = -1.0 ;
+ p->rect.ury = -1.0 ;
+ p->vert_dest = -1 ;
+ p->page = -1 ;
+ p->color[0] = 0 ;
+ p->color[1] = 0 ; /* Blue links */
+ p->color[2] = 1 ;
+ p->border[0] = 1 ; /* horizontal corner radius */
+ p->border[1] = 1 ; /* vertical corner radius */
+ p->border[2] = 1 ; /* box line width */
+ p->border[3] = 3 ; /* dash on size */
+ p->border[4] = 3 ; /* dash off size */
+
+ current_name = (char *)malloc(strlen(s)+1) ;
+ current_name = s ;
+ current_type = type ;
+ current_pushcount = pushcount ;
+ install_link(s, p, type) ;
+ return(NO_ERROR) ;
+}
+
+unsigned int hash_string P1C(char *, s)
+{
+ unsigned hashval ;
+ for (hashval = 0 ; *s != '\0' ; s++)
+ hashval = *s + 31 * hashval ;
+ return hashval % HASHSIZE ;
+}
+
+/* lookup a hashed name */
+
+struct nlist *lookup_link P2C(char *, s, int, type)
+{
+ struct nlist *np ;
+
+ for(np = type ? link_sources[hash_string(s)] : link_targets[hash_string(s)] ;
+ np != NULL ; np = np -> next)
+ if (strcmp(s, np->name) == 0)
+ return np ; /* found */
+ return NULL ; /* not found */
+}
+
+struct nlist *install_link P3C(char *, name, Hps_link *, defn, int, type)
+{
+ struct nlist *np ;
+ unsigned hashval ;
+ np = (struct nlist *)malloc(sizeof(*np)) ;
+ if (np == NULL || (np->name = dup_str(name)) == NULL)
+ return NULL ;
+ hashval = hash_string(name) ;
+ np->next = type ? link_sources[hashval] : link_targets[hashval] ;
+ (type ? link_sources : link_targets)[hashval] = np ;
+ if ((np->defn = link_dup(defn)) == NULL)
+ return NULL ;
+ return np ;
+}
+
+#ifndef KPATHSEA
+char *dup_str P1C(char *, w) /* make a duplicate of s */
+{
+ char *p ;
+ p = (char *)malloc(strlen(w)+1) ;
+ if (p != NULL)
+ strcpy(p,w) ;
+ return p ;
+}
+#endif
+
+Hps_link *link_dup P1C(Hps_link *, s) /* make a duplicate link */
+{
+ Hps_link *p ;
+
+ p = (Hps_link *) malloc(sizeof(*p)) ;
+ if (p != NULL)
+ p = s ;
+ return p ;
+}
+
+double dvi_to_hps_conv P2C(int, i, int, dir)
+{
+ double hps_coor ;
+ /* Convert dvi integers into proper hps coordinates
+ Take into account magnification and resolution that dvi file was
+ produced at */
+ hps_coor = dir ? (((i * 72.0) / vactualdpi) +MARGIN) : (PAGESIZE - ((i * 72.0) / (vactualdpi)) - MARGIN ) ;
+ return(hps_coor) ;
+}
+
+int vert_loc P1C(int, i)
+{
+ int return_value ;
+ return_value = (int) (i + (PAGESIZE / 4) + FUDGE) ;
+ if ( return_value > PAGESIZE) {
+ return((int)PAGESIZE) ;
+ } else if (return_value < (PAGESIZE / 4.0)) {
+ return((PAGESIZE / 4)) ;
+ } else return(return_value) ;
+}
+
+Hps_link *dest_link P1C(char *, s)
+{
+ /* Assume for now that only one entry with same NAME, i.e.
+ Should be true for all legitimate papers.
+ Also, assume prepending of # for names. */
+
+ struct nlist *np ;
+
+ s++ ; /* get rid of hashmark */
+ for(np = link_targets[hash_string(s)] ; np != NULL ; np = np -> next) {
+ if ( href_name_match(s, np->name)) {
+ return (np->defn) ; /* found */
+ }
+ }
+ error("Oh no, link not found in target hashtable") ;
+ error(s) ;
+ error("!") ;
+ return NULL ; /* not found */
+}
+
+int count_targets P1H(void) {
+ int count=0 ;
+ int i ;
+ struct nlist *np ;
+
+ for (i = 0 ; i < HASHSIZE ; i++)
+ for(np = link_targets[i] ; np != NULL ; np = np -> next)
+ count++ ;
+ return count ;
+}
+
+void do_targets P1H(void) {
+
+ struct nlist *np ;
+ int i ;
+ Hps_link *dest ;
+
+ for (i = 0 ; i < HASHSIZE ; i++)
+ for(np = link_sources[i] ; np != NULL ; np = np -> next) {
+ if (np->name[0] == '#') {
+ dest = dest_link(np->name) ;
+ np->defn->page = dest->srcpg ;
+ np->defn->vert_dest = vert_loc((int) dest->rect.lly) ;
+ }
+ }
+}
+
+void do_target_dict P1H(void)
+{
+ struct nlist *np ;
+ int i ;
+ (void) fprintf(bitfile, "HPSdict begin\n") ;
+ (void)fprintf(bitfile, "/TargetAnchors\n") ;
+ (void)fprintf(bitfile, "%i dict dup begin\n",count_targets()) ;
+
+ for (i = 0 ; i < HASHSIZE ; i++)
+ for(np = link_targets[i] ; np != NULL ; np = np -> next)
+ (void)fprintf(bitfile, "(%s) [%i [%.0f %.0f %.0f %.0f] %i] def\n",
+ np->defn->title, np->defn->srcpg,
+ np->defn->rect.llx, np->defn->rect.lly,
+ np->defn->rect.urx, np->defn->rect.ury,
+ vert_loc((int) np->defn->rect.lly)) ;
+ (void)fprintf(bitfile,"end targetdump-hook def end\n") ;
+}
+
+int href_name_match P2C(char *, h, char *, n)
+{
+ int count = 0 ;
+ int name_length = strlen(n) ;
+ while((*h == *n) & (*h != '\0') ) {
+ count++ ;
+ h++ ;
+ n++ ;
+ }
+ if (name_length == count) {
+ return 1 ;
+ } else {
+ /* printf(" count: %i \n", count) ; */
+ return 0 ;
+ }
+}
+
+void stamp_hps P1C(Hps_link *, pl)
+{
+ char tmpbuf[200] ;
+ if (pl == NULL) {
+ error("Null pointer, oh no!") ;
+ return ;
+ } else {
+ /* print out the proper pdfm with local page info only
+ * target info will be in the target dictionary */
+ (void)sprintf(tmpbuf,
+ " (%s) [[%.0f %.0f %.0f %.0f] [%i %i %i [%i %i]] [%.0f %.0f %.0f]] pdfm ", pl->title, pl->rect.llx, pl->rect.lly, pl->rect.urx, pl->rect.ury,
+ pl->border[0], pl->border[1], pl->border[2], pl->border[3],pl->border[4],
+ pl->color[0], pl->color[1], pl->color[2]) ;
+ cmdout(tmpbuf) ;
+ }
+
+}
+
+/* For external URL's, we just pass them through as a string. The hyperps
+ * interpreter can then do what is wants with them.
+ */
+void stamp_external P2C(char *, s, Hps_link *, pl)
+{
+ char tmpbuf[200];
+ if (pl == NULL) {
+ error("Null pointer, oh no!") ;
+ return ;
+ } else {
+ /* print out the proper pdfm with local page info only
+ * target info will be in the target dictionary */
+ (void)sprintf(tmpbuf," [[%.0f %.0f %.0f %.0f] [%i %i %i [%i %i]] [%.0f %.0f %.0f]] (%s) pdfm ", pl->rect.llx, pl->rect.lly, pl->rect.urx, pl->rect.ury,
+ pl->border[0], pl->border[1], pl->border[2], pl->border[3],pl->border[4],
+ pl->color[0], pl->color[1], pl->color[2], s) ;
+ cmdout(tmpbuf) ;
+ }
+}
+
+void finish_hps P1H(void) {
+ fclose(bitfile) ;
+ set_bitfile("head.tmp",1);
+ do_targets() ;
+ do_target_dict();
+ (void)fprintf(bitfile, "TeXDict begin\n") ;
+ (void)fprintf(bitfile, "%%%%EndSetup\n") ;
+ fclose(bitfile) ;
+ open_output() ;
+ noprocset = 1 ;
+ removecomments = 0;
+ copyfile("head.tmp") ;
+ copyfile("body.tmp") ;
+}
+
+void set_bitfile P2C(char *, s, int, mode)
+{
+if ((bitfile=fopen(s, mode ? FOPEN_ABIN_MODE : FOPEN_WBIN_MODE))==NULL) {
+ error(s) ;
+ error("!couldn't open file") ;
+ }
+ linepos = 0 ;
+}
+
+void vertical_in_hps P1H(void) {
+ Rect_list *rl ;
+ /*printf("in vertical_in_hps") ; */
+ if (current_type == NAME) return; /* Handle this case later */
+ if (!current_rect_list) {
+ current_rect_list = (Rect_list *)malloc(sizeof(Rect_list)) ;
+ current_rect_list->next = NULL ;
+ }
+ else {
+ rl = (Rect_list *)malloc(sizeof(Rect_list)) ;
+ rl->next = current_rect_list ;
+ current_rect_list = rl ;
+ }
+ current_rect_list->rect.llx = dvi_to_hps_conv(hh + hoff,HORIZONTAL) ;
+ current_rect_list->rect.lly = dvi_to_hps_conv(vv + voff,VERTICAL)-FUDGE ;
+ current_rect_list->rect.urx = dvi_to_hps_conv(hhmem, HORIZONTAL) ;
+ current_rect_list->rect.ury = dvi_to_hps_conv(vvmem, VERTICAL)-FUDGE ;
+
+ if (POPPED) start_new_box() ;
+}
+
+void print_rect_list P1H(void) {
+ Rect_list *rl, *rln ;
+
+ for(rl = current_rect_list ; rl != NULL ; rl = rln) {
+ /* printf("Rectangle is %.0f, %.0f, %.0f, %.0f\n", rl->rect.llx, rl->rect.lly,
+ rl->rect.urx, rl->rect.ury) ; */
+ rln = rl -> next ;
+ free(rl) ;
+ }
+}
+
+void end_current_box P1H(void) {
+ Hps_link *nl ;
+
+ POPPED = TRUE ;
+ HREF_COUNT-- ;
+ if (current_type == HREF && current_name[0] != '#') {
+ if ((nl = lookup_link(current_name, current_type)->defn)) {
+ nl->rect.urx = dvi_to_hps_conv(hhmem + hoff,HORIZONTAL) ;
+ nl->rect.ury = dvi_to_hps_conv(vvmem + voff, VERTICAL)-FUDGE+12.0 ;
+ stamp_external(current_name,nl); /* Broken lines ? */
+ } else {
+ error("!Null lookup");
+ }
+ } else {
+ if ((nl = lookup_link(current_name, current_type)->defn)) {
+ nl->rect.urx = dvi_to_hps_conv(hhmem + hoff,HORIZONTAL) ;
+ nl->rect.ury = dvi_to_hps_conv(vvmem + voff, VERTICAL)-FUDGE+12.0 ;
+ if (current_type) {
+ stamp_hps(nl) ; /* Put link info right where special is */
+ }
+ } else {
+ error("!Null lookup");
+ }
+ /* printf("Ended box %.0f, %.0f, %.0f, %.0f\n", nl->rect.llx, \
+ nl->rect.lly,nl->rect.urx, nl->rect.ury) ; */
+ }
+}
+
+void start_new_box P1H(void) {
+ POPPED = FALSE ;
+ do_link(current_name, current_type) ;
+}
+#else
+int no_hypertex ; /* prevent an empty file */
+#endif
diff --git a/Build/source/texk/dvipsk/hps.lpro b/Build/source/texk/dvipsk/hps.lpro
new file mode 100644
index 00000000000..0823f180a17
--- /dev/null
+++ b/Build/source/texk/dvipsk/hps.lpro
@@ -0,0 +1,247 @@
+%!PS-Adobe-2.0 Resource
+%
+% This is the set of procedures that are necessary for using dvips with the
+% -z flag to create PDF-ready PostScript from HyperTeX.
+% Written by Tanmoy Bhattacharya and Mark D. Doyle 11/94.
+% It is (C) Copyright 1994 by Tanmoy Bhattacharya, Mark D. Doyle
+% and the University of California. You may modify and use this program to
+% your heart's content, so long as you send modifications to Tanmoy
+% Bhattacharya and/or Mark Doyle.
+% Version number info
+% 1 0 Probably first release
+% 1 1 Added external handler to let ghostview work
+% 1 2 Attempt at using weblink plugin (not checked)
+%
+% 2 0 Complete rewrite.
+% 2 1 skipped (because testing remotely: it is a debugging version)
+% 2 2 Hopefully correct.
+% 2 3 weblink with anchors corrected.
+% 2 4 bug fix: cvn for dest added
+% 2 5 bug fix: No point of error message if not on a distiller.
+% 2 6 bug fix: stupid {..} error. Check destination name to avoid bad names.
+% 2 2 tested under (Being tested :-)
+% unix distiller (old)
+% mac 2.1
+% mac 2.0
+% windows 2.0
+% ghostscript
+
+%%BeginResource: procset hps.lpro 2 6
+/HPSdict 20 dict dup begin
+
+/braindeaddistill 50 def
+
+/rfch % remove first charcter of string
+ {dup length 1 sub 1 exch getinterval} bind def
+
+/splituri % string splituri dest uri/file true_if_uri
+ {dup (#) search
+ {exch pop}
+ {() exch}
+ ifelse
+ dup (file:) anchorsearch
+ {pop exch pop 3 -1 roll pop false}
+ {pop 3 -1 roll exch pop true}
+ ifelse} bind def
+
+/lookuptarget
+{exch rfch dup % drop the hashmark
+ /TargetAnchors where
+ {pop TargetAnchors dup
+ 3 -1 roll known
+ {exch get true}
+ {pop (target unknown:)print == false}
+ ifelse}
+ {pop pop
+ (target dictionary unknown\012)print false}
+ ifelse}
+bind def
+
+/savecount 0 def
+
+/stackstopped % Like stopped, but clear to current mark on error
+{ count counttomark sub /savecount exch store
+ stopped
+ count savecount sub 1 sub dup 0 gt
+ {{exch pop} repeat}
+ {pop}
+ ifelse
+}
+bind def
+
+/tempstring 256 string def
+
+/targetvalidate
+ {1 index dup length 255 gt exch
+ dup (/) search
+ {pop pop pop exch pop true exch}
+ {pop}
+ ifelse
+ cvn tempstring cvs
+ token pop pop length 0 ne or
+ not} bind def
+
+/targetdump-hook where
+ {pop}
+ {/targetdump-hook
+ {dup mark exch gsave initmat setmatrix
+ {{ mark /Dest 4 2 roll
+ targetvalidate
+ {aload pop exch pop
+ /Page 3 1 roll /View exch [ exch /FitH exch ]
+ /DEST pdfmark}
+ {cleartomark}
+ ifelse} forall} stackstopped pop
+ grestore} bind def }
+ifelse
+
+/baseurl
+{mark exch 1 dict dup 3 -1 roll
+ /Base exch put
+ /URI exch
+ /DOCVIEW {pdfmark} stackstopped pop}
+bind def
+
+/externalhack systemdict /PDF known def
+/oldstyle true def
+
+/initmat matrix currentmatrix def
+/actiondict 2 dict dup /Subtype /URI put def
+/weblinkhandler
+{ dup 3 1 roll mark 4 1 roll
+ /Title 4 1 roll
+ splituri 3 -1 roll
+ dup length 0 gt
+ {cvn /Dest exch 4 2 roll}
+ {pop}
+ ifelse
+ {externalhack
+ {/HTTPFile exch}
+ {actiondict dup 3 -1 roll /URI exch put
+ /Action exch}
+ ifelse}
+ {externalhack
+ {/HTTPFile exch}
+ {/File exch /Action /GoToR}
+ ifelse
+ }
+ ifelse
+ counttomark 2 sub -1 roll
+ aload pop
+ /Rect 4 1 roll
+ /Border 3 1 roll
+ /Color exch
+ oldstyle
+ {/LNK}
+ {/Subtype /Link /ANN}
+ ifelse
+ gsave initmat setmatrix
+ {pdfmark} stackstopped
+ grestore}
+bind def
+
+/externalhandler where
+{pop}
+{/externalhandler
+{ 2 copy
+ {weblinkhandler} exec
+ {/externalhack externalhack not store
+ 2 copy
+ {weblinkhandler} exec
+ {/externalhack externalhack not store
+ /oldstyle false store
+ 2 copy
+ {weblinkhandler} exec
+ {(WARNING: external refs disabled\012)print
+ /externalhandler {pop pop} bind store externalhandler}
+ {pop pop}
+ ifelse}
+ {pop pop /externalhack externalhack not store}
+ ifelse}
+ {pop pop /externalhandler {weblinkhandler pop} bind store}
+ ifelse}
+bind def}
+ifelse
+
+/pdfmnew
+{dup type /stringtype eq {externalhandler} {
+exch dup rfch exch 3 -1 roll
+lookuptarget
+ {mark 4 1 roll
+ /Title 4 1 roll
+ aload pop
+ exch
+ pop
+ /Page 3 1 roll
+ /View exch
+ [ exch /FitH exch ]
+ 5 -1 roll
+ aload pop
+ /Rect 4 1 roll
+ /Border 3 1 roll
+ /Color exch
+ /LNK gsave initmat setmatrix pdfmark grestore}
+ {pop pop}
+ ifelse} ifelse}
+bind def
+
+/pdfmold
+{dup type /stringtype eq {externalhandler} {
+exch dup rfch exch 3 -1 roll
+lookuptarget
+ {mark 4 1 roll % put a mark below the source array and the array containing
+ % the page
+ % the rectangle array of the destination and the FitH parameter
+ % and below the Title string
+ /Title 4 1 roll % put /Title in front of Title string
+ aload pop % put the array elements on the stack
+ exch % exchange the FitH parameter and the Rect array
+ pop % Get rid of the Rect array
+ /Page 3 1 roll % put a /Page in front of the page number
+ /View exch % put a /View below the FitH parameter
+ [ exch /FitH exch ] % put in the /FitH
+ 5 -1 roll
+ aload pop pop
+ 0 3 getinterval
+ /Rect 3 1 roll
+ /Border exch
+ /LNK gsave initmat setmatrix pdfmark grestore}
+ {pop pop}
+ ifelse} ifelse}
+bind def
+
+/pdfm where
+{pop}
+{/pdfm
+/currentdistillerparams where
+ {pop
+ currentdistillerparams
+ dup /CoreDistVersion known
+ {/CoreDistVersion get}
+ {0}
+ ifelse dup
+ braindeaddistill le
+ {(WARNING: switching to old pdfm because version =)print == /pdfmold}
+ {pop /pdfmnew}
+ ifelse load
+ }
+ {/pdfmark where
+ {pop {dup type /stringtype eq {externalhandler}
+ {2 copy mark 3 1 roll
+ {pdfmnew} stackstopped
+ {2 copy mark 3 1 roll
+ {pdfmold} stackstopped
+ {(WARNING: pdfm disabled\012) print
+ /pdfm {pop pop} store}
+ {(WARNING: new pdfm failed, switching to old pdfm\012)print
+ /pdfm /pdfmold load store}
+ ifelse}
+ {/pdfm /pdfmnew load store}
+ ifelse pop pop}ifelse}}
+ {{pop pop}}
+ ifelse}
+ ifelse bind def}
+ifelse
+end def
+%%EndResource
+%%EOF
diff --git a/Build/source/texk/dvipsk/hps/CHANGES_HPS.txt b/Build/source/texk/dvipsk/hps/CHANGES_HPS.txt
new file mode 100644
index 00000000000..dae9cb36b39
--- /dev/null
+++ b/Build/source/texk/dvipsk/hps/CHANGES_HPS.txt
@@ -0,0 +1,45 @@
+History of changes to dvips source to include hypertex support
+
+last modified Tue Oct 31 10:26:45 MST 1995
+
+Version 0.3c:
+
+1) added a fixed version of hps.lpro (version 2.6 now).
+
+Version 0.3b:
+
+1) corrected hps.c to handle line breaks in external links correctly.
+2) added a fixed version of hps.lpro (version 2.4 now).
+
+Version 0.3a:
+
+1) corrected the support for exteranl url's so that the 2.1 distiller can put
+in proper weblinks. (this just means a new hps.lpro by Tanmoy Bhattacharya.)
+2) fixed a bug in dopage.c that prevented virtual fonts from working.
+
+Version 0.3:
+
+1) added better support for external url's, notably support for
+breaking them across lines.
+2) modified hps.pro to better handle external url's to maintain
+compatibility with Tanmoy Bhattacharya's hacked ghostview
+(hyperpostscript viewer).
+3) Fixed bug so that newlines are now correctly added after
+%%BeginDocument line for included ps files.
+
+Version 0.2:
+
+1) added support for hyperlinks that break across lines and
+pages. Your mileage may vary, but it seems to work fairly well.
+
+Version 0.1:
+
+1) Added hps.c and hps.pro to dvips distribution and modified several
+source files to create hyperPostScript. Added -DHPS compilation option
+and -z flag to get this behavior. Otherwise everything should be
+identical to dvips5.58.
+
+Mark Doyle
+http://nqcd.lanl.gov/people/doyle/
+doyle@mmm.lanl.gov
+
diff --git a/Build/source/texk/dvipsk/hps/README_HPS.txt b/Build/source/texk/dvipsk/hps/README_HPS.txt
new file mode 100644
index 00000000000..2979bb8102a
--- /dev/null
+++ b/Build/source/texk/dvipsk/hps/README_HPS.txt
@@ -0,0 +1,144 @@
+README_HPS, version 0.3
+
+last modified Wed Jul 19 11:34:52 MDT 1995
+
+This is an alpha release of a hacked version of dvips v5.58 for
+converting HyperTeX into HyperPostScript that in turn can be run
+through the Adobe distiller to produce a PDF file with chapter and
+section numbers, references, equation numbers, etc. all links.
+This program is intended for use with the TeX and LaTex macros
+modified to create HyperTeX (see http://xxx.lanl.gov/hypertex/).
+With these macros, TeX and LaTex can be converted into HyperTeX
+without any additional work by the user. The linking information
+is stamped into the dvi file via a set of html: \special commands.
+Normally conversion to PostScript involves a loss of this information.
+This program preserves all of the information in the Hyperdvi file
+and makes it available to all PostScript interpreters, as well as
+the Adobe PDF distiller. In addition, the HyperPostScript produced will
+work with ordinary PostScript interpreters as well.
+The software itself is availabe at http://nqcd.lanl.gov/people/doyle/
+or at ftp://gita.lanl.gov/people/doyle .
+
+INSTALLATION:
+
+To compile this program, just follow the usual instructions. Since
+this version stems from the latest version of dvips, you should
+install the up-to-date versions of config.* and the *.pro files.
+You can edit the Makefile to put these in some other place besides
+the usual one. Compiling with the -DHPS option (enabled by default
+in the Makefile) will produce the hacked version of dvips. Disabling
+this option will produce the version of dvips that you already know
+and love. I have made an effort to keep my changes to the dvips
+source code minimal. Most of the important stuff is in the source
+file hps.c. Almost all of the changes to the dvips source code
+are mandated by the need for putting information at the beginning
+of the PostScript file that isn't normally available until the
+entire dvi file has been completely processed. Thus, two temporary
+files are created when running the program to create HyperPostScript,
+head.tmp and body.tmp. One can freely delete these after running
+the program.
+
+The files modified from the 5.58 dvips distribution are:
+dvips.c, dvips.h, paths.h, dosection.c, dopage.c, dospecial.c, output.c,
+header.c, Makefile, and a very minor (irrelevant) change to afm2tfm.c.
+
+Files added are README_HPS.txt, CHANGES_HPS.txt, hps.c, and hps.lpro.
+
+Anyone interested in going all the way to PDF is encouraged to install
+PostScript versions of the TeX fonts on their system. The Adobe PDF
+readers are extremely slow when dealing with bitmapped fonts. There
+is, however, a bug in the Adobe distillers that requires a workaround
+for certain characters. See below for more info. Commercial versions
+of the fonts are available from BlueSky and public domain versions are
+available at ftp://ftp.shsu.edu/pub/tex/fonts/postscript/bakoma/ and
+ftp://ftp.shsu.edu/pub/tex/fonts/postscript/paradissa/ .
+MS-DOS/Windows user beware: The latest Adobe Type Manager doesn't like
+the BlueSky fonts. I haven't tried the public domain ones. (On a new
+and different PC I was able to get the Blue Sky fonts installed with
+ATM and it works fine. Your mileage may vary. July 19, 1995.)
+
+USAGE:
+
+After compiling with -DHPS, a user can invoke the Hyperdvi to
+HyperPostScript conversion with the -z flag. If the flag is
+omitted, dvips simply will revert back to the default behavior and
+skip over the html: \special commands.
+
+There appears to be a bug in the Adobe distillers. For optimization
+purposes the distillers drop trailing blanks (character code 32)
+from strings. Unfortunately, the PostScript fonts use this character
+code for certain characters (notably the Greek letter psi), and
+so these characters are dropped. This bug still appears in the 2.0
+distiller.
+
+ -----HACK ALERT-----
+
+One way around this is to change all the trailing blanks of strings to
+a character code that isn't in the font. The default behavior is to
+substitute a blank for a missing character, i.e. the distiller is
+fooled into substituting the right character. For instance, with the
+BlueSky fonts, one can globally replace " )" with "\200)" and get the
+desired result. With the public domain fonts, one will probably have
+to use a character code in the range 128 to 191 since these fonts
+duplicate the first 32 characters starting at 192 to avoid MS-DOS
+problems. Fortunately, a simple sed will accomplish the replacements.
+
+OTHER NOTES:
+
+The program is rather straightforward and operates by converting
+the dvi html: href \specials into pdfmark operators in the PostScript
+that specify the links. The html: name \specials are combined into
+a PostScript dictionary with all of the target information. The
+hps.pro header tries to gracefully handle various contingencies.
+If the resulting HyperPostScript file is handed off to an ordinary
+PostScript interpreter, the pdfm operators are automatically defined
+to pop the irrelevant information off the stack. On the other hand,
+if it is handed to a distiller, the PostScript program in the header
+tries to determine of what vintage the distiller is so that various
+enhancements of the pdfmark operator can be used or ignored (color,
+border dashing, etc.). Thus the resulting files can be distilled
+using either the latest PC versions or the older Unix versions.
+The hps.pro header was written by Tanmoy Bhattacharya
+(http://nqcd.lanl.gov/people/tanmoy/tanmoy.html) with some additions
+by me. Other PostScript interpreters are free to pick up the pdfm
+operators as well. For instance, Tanmoy has hacked Ghostview to
+pick up the links and make them active. This can be found at
+ftp://gita.lanl.gov/people/tanmoy/hypertex/ .
+
+THINGS TO DO:
+
+1) More robust error checking and avoidance.
+2) Escaping html correctly for external URL's.
+3) More support for external URL's
+4) More flexibility in the appearance of links on the page
+5) Automatically get the papersize and margins correct (hardcoded at the
+ moment).
+6) Make C source more platform independent (which T. Rokicki has tried
+ very hard to maintain). Code has only been tested on NeXT
+ 3.3 (Motorola and HP) and Sun/SPARC (SunOS 4.1.4), and HP-UX 9.0.5. No
+ effort has been made to make the code portable for MS-DOS, OS/2, VMS,
+ or any other of the platforms that appear in the #ifdef statements.
+ Code improvements for MS-DOS and OS/2 are forthcoming.
+
+DISCLAIMER:
+
+This software is made available without any implied warranties. See
+http://xxx.lanl.gov/disclaimer.html for a more complete disclaimer.
+
+COPYRIGHT:
+
+The HyperPostScript additions to dvips are Copyright (C) 1994, 1995 by
+Mark Doyle and the University of California. You may modify and
+use this program to your heart's content, so long as you send
+modifications to Mark Doyle and abide by the rest of the dvips
+copyrights.
+
+The hps.lpro file is Copyright (C) 1994, 1995 by Tanmoy Bhattacharya, Mark
+Doyle, and the University of California. You may modify and use
+it to your heart's content, so long as you send modifications
+to Tanmoy Bhattacharya or Mark Doyle and abide by the rest of the
+dvips copyrights.
+
+Mark Doyle
+doyle@mmm.lanl.gov
+http://nqcd.lanl.gov/people/doyle/
diff --git a/Build/source/texk/dvipsk/lafonts.map b/Build/source/texk/dvipsk/lafonts.map
new file mode 100644
index 00000000000..8d0e8205253
--- /dev/null
+++ b/Build/source/texk/dvipsk/lafonts.map
@@ -0,0 +1,16 @@
+lasy5 lasy5 <lasy5.pfb
+lasy6 lasy6 <lasy6.pfb
+lasy7 lasy7 <lasy7.pfb
+lasy8 lasy8 <lasy8.pfb
+lasy9 lasy9 <lasy9.pfb
+lasy10 lasy10 <lasy10.pfb
+lasyb10 lasyb10 <lasyb10.pfb
+lcircle10 lcircle10 <lcircle10.pfb
+lcirclew10 lcirclew10 <lcirclew10.pfb
+line10 line10 <line10.pfb
+linew10 linew10 <linew10.pfb
+logo8 logo8 <logo8.pfb
+logo9 logo9 <logo9.pfb
+logo10 logo10 <logo10.pfb
+logobf10 logobf10 <logobf10.pfb
+logosl10 logosl10 <logosl10.pfb
diff --git a/Build/source/texk/dvipsk/loadfont.c b/Build/source/texk/dvipsk/loadfont.c
new file mode 100644
index 00000000000..449c74256e7
--- /dev/null
+++ b/Build/source/texk/dvipsk/loadfont.c
@@ -0,0 +1,524 @@
+/*
+ * Here's the code to load a PK file into memory.
+ * Individual bitmaps won't be unpacked until they prove to be needed.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifdef OS2
+#include <stdlib.h>
+#endif
+#ifdef KPATHSEA
+#include <kpathsea/c-pathmx.h>
+#include <kpathsea/tex-glyph.h>
+#include <kpathsea/tex-make.h>
+#include <kpathsea/lib.h>
+#ifndef MAXPATHLEN
+#define MAXPATHLEN (256)
+#endif
+#else
+#if defined(SYSV) || defined(VMS) || (defined(MSDOS) && !defined(__DJGPP__)) || defined(OS2) || defined(ATARIST)
+#define MAXPATHLEN (256)
+#else
+#include <sys/param.h> /* for MAXPATHLEN */
+#endif
+#endif
+/*
+ * These are the external routines we use.
+ */
+#include "protos.h"
+/*
+ * These are the external variables we use.
+ */
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern long bytesleft ;
+extern quarterword *raster ;
+extern real conv ;
+extern int actualdpi, vactualdpi ;
+extern real alpha ;
+#ifndef KPATHSEA
+extern char *pkpath ;
+#endif
+char errbuf[200] ;
+int lastresortsizes[40] ;
+extern integer fsizetol ;
+extern Boolean nosmallchars ;
+extern Boolean compressed ;
+extern Boolean dopprescan ;
+#ifdef FONTLIB
+extern Boolean flib ;
+#endif
+/*
+ * Now we have some routines to get stuff from the PK file.
+ * Subroutine pkbyte returns the next byte.
+ */
+FILE *pkfile ;
+char name[MAXPATHLEN] ;
+void
+badpk P1C(char *, s)
+{
+ (void)sprintf(errbuf,"! Bad PK file %s: %s",name,s) ;
+ error(errbuf);
+}
+
+shalfword
+pkbyte P1H(void)
+{
+ register shalfword i ;
+
+ if ((i=getc(pkfile))==EOF)
+ badpk("unexpected eof") ;
+ return(i) ;
+}
+
+integer
+pkquad P1H(void)
+{
+ register integer i ;
+
+ i = pkbyte() ;
+ if (i > 127)
+ i -= 256 ;
+ i = i * 256 + pkbyte() ;
+ i = i * 256 + pkbyte() ;
+ i = i * 256 + pkbyte() ;
+ return(i) ;
+}
+
+integer
+pktrio P1H(void)
+{
+ register integer i ;
+
+ i = pkbyte() ;
+ i = i * 256 + pkbyte() ;
+ i = i * 256 + pkbyte() ;
+ return(i) ;
+}
+
+
+/*
+ * pkopen opens the pk file. This is system dependent. We work really
+ * hard to open some sort of PK file.
+ */
+#ifdef VMCMS /* IBM: VM/CMS - we let DVIPS EXEC handle this after
+ the DVIPS MODULE has finished to avoid
+ complications with system calls. */
+int dontmakefont = 0 ;
+#else
+#ifdef MVSXA /* IBM: MVS/XA - we let system administrator handle this on
+ MVS/XA since some printers can't get to user
+ fonts anyway */
+int dontmakefont = 1 ;
+#else
+int dontmakefont = 0 ; /* if makefont fails once we won't try again */
+#endif /* IBM: VM/CMS */
+#endif
+
+void
+lectureuser P1H(void) {
+ static int userwarned = 0 ;
+
+ if (! userwarned) {
+ error("Such scaling will generate extremely poor output.") ;
+ userwarned = 1 ;
+ }
+}
+Boolean
+pkopen P1C(register fontdesctype *, fd)
+{
+ register char *d, *n ;
+ char *name_ret ;
+#ifdef KPATHSEA
+ int dpi_ret ;
+#else
+ int vdpi ;
+#endif
+ d = fd->area ;
+ n = fd->name ;
+#ifndef KPATHSEA
+ if (*d==0)
+ d = pkpath ;
+#endif
+#ifdef FONTLIB
+ if (*(fd->area) == 0) {
+ int del ;
+ for (del=0; del<=RES_TOLERANCE(fd->dpi); del=del>0?-del:-del+1) {
+ if ((pkfile=flisearch(n, fd->dpi + del)) != (FILE *)NULL )
+ return(1);
+ }
+ }
+#endif
+ {
+#ifdef KPATHSEA
+ char *this_name = concat (d, n);
+
+ pkfile=pksearch(pkpath, this_name, READBIN, fd->dpi, &name_ret, &dpi_ret);
+
+ if (!pkfile || !FILESTRCASEEQ (this_name, name_ret))
+ {
+ if (!pkfile)
+ (void)sprintf(errbuf,
+ "Font %s%s not found, characters will be left blank.",
+ fd->area, n) ;
+ else
+ sprintf(errbuf, "Font %s%s not found, using %s instead.",
+ fd->area, n, name_ret) ;
+ dontmakefont = 1;
+ error(errbuf) ;
+ }
+ else if (!kpse_bitmap_tolerance ((double) dpi_ret, (double) fd->dpi))
+ {
+ fd->loadeddpi = dpi_ret ;
+ fd->alreadyscaled = 0 ;
+ (void)sprintf(errbuf,
+ "Font %s at %d not found; scaling %d instead.",
+ n, fd->dpi, dpi_ret) ;
+ error(errbuf) ;
+ lectureuser() ;
+ }
+
+ if (this_name != name_ret)
+ free (this_name);
+
+ return pkfile != NULL;
+ }
+#else
+ int del ;
+ for (del=0; del<=RES_TOLERANCE(fd->dpi); del=del>0?-del:-del+1) {
+ if (actualdpi == vactualdpi) {
+ vdpi = 0 ;
+ } else {
+ vdpi = (2 * ((long)vactualdpi) * (fd->dpi + del) + actualdpi)
+ / (2 * actualdpi) ;
+ }
+#ifdef MVSXA
+ (void)sprintf(name, "pk%d(%s)", fd->dpi + del, n) ;
+#else
+ (void)sprintf(name, "%s.%dpk", n, fd->dpi + del) ;
+#endif
+ if (0 != (pkfile=pksearch(d, name, READBIN, n, fd->dpi + del, vdpi)))
+ return(1) ;
+ }
+ }
+ if (d == pkpath) {
+ if (actualdpi == vactualdpi) {
+ vdpi = 0 ;
+ } else {
+ vdpi = (2 * ((long)vactualdpi) * fd->dpi + actualdpi)
+ / (2 * actualdpi) ;
+ }
+#ifdef MVSXA
+ (void)sprintf(name, "pk%d(%s)", fd->dpi, n) ;
+#else
+ (void)sprintf(name, "%s.%dpk", n, fd->dpi) ;
+#endif
+ makefont(n, (int)fd->dpi, DPI) ;
+ if (dontmakefont == 0 &&
+ (pkfile = pksearch(d, name, READBIN, n, fd->dpi, vdpi)))
+ return(1) ;
+#ifndef MSDOS
+#ifdef OS2
+ if (_osmode == OS2_MODE)
+ dontmakefont = 1; /* failed so don't try again under OS/2,
+ but do try for MSDOS */
+#else
+#ifndef ATARIST
+ dontmakefont = 1 ;
+#endif
+#endif
+#endif
+ }
+/*
+ * If nothing above worked, then we get desparate. We attempt to
+ * open the stupid font at one of a small set of predefined sizes,
+ * and then use PostScript scaling to generate the correct size.
+ *
+ * We much prefer scaling up to scaling down, since scaling down
+ * can omit character features, so we try the larger sizes first,
+ * and then work down.
+ */
+ {
+ int i, j ;
+
+ if (lastresortsizes[0] && fd->dpi < 30000) {
+ for (i=0; lastresortsizes[i] < fd->dpi; i++) ;
+ for (j = i-1; j >= 0; j--) {
+ if (actualdpi == vactualdpi) {
+ vdpi = 0 ;
+ } else {
+ vdpi = (2 * ((long)vactualdpi) * lastresortsizes[j] + actualdpi)
+ / (2 * actualdpi) ;
+ }
+#ifdef MVSXA
+ (void)sprintf(name, "pk%d(%s)", lastresortsizes[j], n) ;
+#else
+ (void)sprintf(name, "%s.%dpk", n, lastresortsizes[j]) ;
+#endif
+#ifdef FONTLIB
+ if (0 != (pkfile=flisearch(n,(halfword)lastresortsizes[j]))
+ || 0 != (pkfile=pksearch(d, name, READBIN, n,
+ (halfword)lastresortsizes[j], vdpi))) {
+#else
+ if (0 != (pkfile=pksearch(d, name, READBIN, n,
+ (halfword)lastresortsizes[j], vdpi))) {
+#endif
+ fd->loadeddpi = lastresortsizes[j] ;
+ fd->alreadyscaled = 0 ;
+ (void)sprintf(errbuf,
+ "Font %s at %d dpi not found; scaling %d instead.",
+ n, fd->dpi, lastresortsizes[j]) ;
+ error(errbuf) ;
+ lectureuser() ;
+ return 1 ;
+ }
+ }
+ for (j = i; lastresortsizes[j] < 30000; j++) {
+ if (actualdpi == vactualdpi) {
+ vdpi = 0 ;
+ } else {
+ vdpi = (2 * ((long)vactualdpi) * lastresortsizes[j] + actualdpi)
+ / (2 * actualdpi) ;
+ }
+ (void)sprintf(name, "%s.%dpk", n, lastresortsizes[j]) ;
+#ifdef FONTLIB
+ if (0 != (pkfile=flisearch(n, (halfword)lastresortsizes[j]))
+ || 0 != (pkfile=pksearch(d, name, READBIN, n,
+ (halfword)lastresortsizes[j], vdpi))) {
+#else
+ if (0 != (pkfile=pksearch(d, name, READBIN, n,
+ (halfword)lastresortsizes[j], vdpi))) {
+#endif
+ fd->loadeddpi = lastresortsizes[j] ;
+ fd->alreadyscaled = 0 ;
+ (void)sprintf(errbuf,
+ "Font %s at %d dpi not found; scaling %d instead.",
+ name, fd->dpi, lastresortsizes[j]) ;
+ error(errbuf) ;
+ lectureuser() ;
+ return 1 ;
+ }
+ }
+ }
+ }
+#ifdef MVSXA
+ (void)sprintf(name, "%s.pk%d", n, fd->dpi) ;
+#else
+ (void)sprintf(name, "%s.%dpk", n, fd->dpi) ;
+#endif
+ (void)sprintf(errbuf,
+ "Font %s%s not found, characters will be left blank.",
+ fd->area, name) ;
+ error(errbuf) ;
+ return(0) ;
+#endif /* KPATHSEA */
+}
+
+/*
+ * Now our loadfont routine. We return an integer indicating the
+ * highest character code in the font, so we know how much space
+ * to reserve for the character. (It's returned in the font
+ * structure, along with everything else.)
+ */
+void
+loadfont P1C(register fontdesctype *, curfnt)
+{
+ register integer i ;
+ register shalfword cmd ;
+ register integer k ;
+ register integer length = 0 ;
+ register shalfword cc = 0 ;
+ register integer scaledsize = curfnt->scaledsize ;
+ register quarterword *tempr ;
+ register chardesctype *cd = 0 ;
+ int maxcc = 0 ;
+ int munged = 0 ;
+/*
+ * We clear out some pointers:
+ */
+ if (curfnt->loaded == 3) {
+ for (i=0; i<256; i++) {
+ curfnt->chardesc[i].TFMwidth = 0 ;
+ curfnt->chardesc[i].packptr = NULL ;
+ curfnt->chardesc[i].pixelwidth = 0 ;
+ curfnt->chardesc[i].flags &= EXISTS ;
+ curfnt->chardesc[i].flags2 = 0 ;
+ }
+ } else {
+ for (i=0; i<256; i++) {
+ curfnt->chardesc[i].TFMwidth = 0 ;
+ curfnt->chardesc[i].packptr = NULL ;
+ curfnt->chardesc[i].pixelwidth = 0 ;
+ curfnt->chardesc[i].flags = 0 ;
+ curfnt->chardesc[i].flags2 = 0 ;
+ }
+ }
+ curfnt->maxchars = 256 ; /* just in case we return before the end */
+ if (!pkopen(curfnt)) {
+ tfmload(curfnt) ;
+ return ;
+ }
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,"Loading pk font %s at %.1fpt\n",
+ curfnt->name, (real)scaledsize/(alpha*0x100000)) ;
+#endif /* DEBUG */
+ if (pkbyte()!=247)
+ badpk("expected pre") ;
+ if (pkbyte()!=89)
+ badpk("wrong id byte") ;
+ for(i=pkbyte(); i>0; i--)
+ (void)pkbyte() ;
+ k = (integer)(alpha * (real)pkquad()) ;
+ if (k > curfnt->designsize + fsizetol ||
+ k < curfnt->designsize - fsizetol) {
+ (void)sprintf(errbuf,"Design size mismatch in font %s", curfnt->name) ;
+ error(errbuf) ;
+ }
+ k = pkquad() ;
+ if (k && curfnt->checksum)
+ if (k!=curfnt->checksum) {
+ (void)sprintf(errbuf,"Checksum mismatch in font %s", curfnt->name) ;
+ error(errbuf) ;
+ }
+ k = pkquad() ; /* assume that hppp is correct in the PK file */
+ k = pkquad() ; /* assume that vppp is correct in the PK file */
+/*
+ * Now we get down to the serious business of reading character definitions.
+ */
+ while ((cmd=pkbyte())!=245) {
+ if (cmd < 240) {
+ switch (cmd & 7) {
+case 0: case 1: case 2: case 3:
+ length = (cmd & 7) * 256 + pkbyte() - 3 ;
+ cc = pkbyte() ;
+ cd = curfnt->chardesc+cc ;
+ if (nosmallchars || curfnt->dpi != curfnt->loadeddpi)
+ cd->flags |= BIGCHAR ;
+ cd->TFMwidth = scalewidth(pktrio(), scaledsize) ;
+ cd->pixelwidth = pkbyte() ;
+ break ;
+case 4: case 5: case 6:
+ length = (cmd & 3) * 65536L + pkbyte() * 256L ;
+ length = length + pkbyte() - 4L ;
+ cc = pkbyte() ;
+ cd = curfnt->chardesc+cc ;
+ cd->TFMwidth = scalewidth(pktrio(), scaledsize) ;
+ cd->flags |= BIGCHAR ;
+ i = pkbyte() ;
+ cd->pixelwidth = i * 256 + pkbyte() ;
+ break ;
+case 7:
+ length = pkquad() - 11 ;
+ cc = pkquad() ;
+ if (cc<0 || cc>255) badpk("character code out of range") ;
+ cd = curfnt->chardesc + cc ;
+ cd->flags |= BIGCHAR ;
+ cd->TFMwidth = scalewidth(pkquad(), scaledsize) ;
+ cd->pixelwidth = (pkquad() + 32768) >> 16 ;
+ k = pkquad() ;
+ }
+ if (cd->pixelwidth == 0 && cd->TFMwidth != 0) {
+ if (cd->TFMwidth > 0)
+ k = (integer)(cd->TFMwidth * conv + 0.5) ;
+ else
+ k = -(integer)(-cd->TFMwidth * conv + 0.5) ;
+ if (k != 0) {
+ cd->pixelwidth = k ;
+ munged++ ;
+ }
+ }
+ if (length <= 0)
+ badpk("packet length too small") ;
+ if (dopprescan && ((cd->flags & EXISTS) == 0)) {
+ for (length--; length>0; length--)
+ (void)pkbyte() ;
+ } else {
+ if (cc > maxcc)
+ maxcc = cc ;
+ if (bytesleft < length || (length > MINCHUNK && compressed)) {
+#ifdef DEBUG
+ if (dd(D_MEM))
+ (void)fprintf(stderr,
+#ifdef SHORTINT
+ "Allocating new raster memory (%ld req, %ld left)\n",
+ length, bytesleft) ;
+#else
+ "Allocating new raster memory (%d req, %d left)\n",
+ (int)length, (int)bytesleft) ;
+#endif
+#endif /* DEBUG */
+ if (length > MINCHUNK) {
+ tempr = (quarterword *)mymalloc((integer)length) ;
+ } else {
+ raster = (quarterword *)mymalloc((integer)RASTERCHUNK) ;
+ tempr = raster ;
+ bytesleft = RASTERCHUNK - length ;
+ raster += length ;
+ }
+ } else {
+ tempr = raster ;
+ bytesleft -= length ;
+ raster += length ;
+ }
+ cd->packptr = tempr ;
+ *tempr++ = cmd ;
+ for (length--; length>0; length--)
+ *tempr++ = pkbyte() ;
+ }
+ cd->flags2 |= EXISTS ;
+ } else {
+ k = 0 ;
+ switch (cmd) {
+case 243:
+ k = pkbyte() ;
+ if (k > 127)
+ k -= 256 ;
+case 242:
+ k = k * 256 + pkbyte() ;
+case 241:
+ k = k * 256 + pkbyte() ;
+case 240:
+ k = k * 256 + pkbyte() ;
+ while (k-- > 0)
+ i = pkbyte() ;
+ break ;
+case 244:
+ k = pkquad() ;
+ break ;
+case 246:
+ break ;
+default:
+ badpk("! unexpected command") ;
+ }
+ }
+ }
+#ifdef FONTLIB
+ if (flib)
+ flib = 0 ;
+ else
+#endif
+ (void)fclose(pkfile) ;
+ curfnt->loaded = 1 ;
+ curfnt->maxchars = maxcc + 1 ;
+ if (munged > 0) {
+ static int seen = 0 ;
+ sprintf(errbuf,
+ "Font %s at %d dpi has most likely been made improperly;",
+ curfnt->name, curfnt->dpi) ;
+ error(errbuf) ;
+ if (seen)
+ return ;
+ seen = 1 ;
+ sprintf(errbuf,
+ "%d characters have 0 escapements but non-trivial TFM widths.", munged) ;
+ error(errbuf) ;
+ error(
+ "I'm stumbling along as best I can, but I recommend regenerating") ;
+ error(
+ "these fonts; the problem is probably that they are non-CM fonts") ;
+ error(
+ "(such as circle10 or line10) created with a MF with the CM base") ;
+ error("preloaded .") ;
+ }
+}
diff --git a/Build/source/texk/dvipsk/makefont.c b/Build/source/texk/dvipsk/makefont.c
new file mode 100644
index 00000000000..39c9fdd9735
--- /dev/null
+++ b/Build/source/texk/dvipsk/makefont.c
@@ -0,0 +1,309 @@
+/*
+ * This software is Copyright 1988 by Radical Eye Software.
+ */
+#include "dvips.h"
+#include <math.h>
+#include "protos.h"
+extern int quiet ;
+extern int filter ;
+extern int dontmakefont ;
+extern Boolean secure ;
+extern char *mfmode ;
+#ifdef OS2
+#include <stdlib.h>
+#endif
+#if !defined(WIN32)
+extern char *getenv();
+extern int system();
+#endif
+#if defined MSDOS || defined OS2
+extern char *mfjobname ;
+extern FILE *mfjobfile ;
+extern char *pkpath ;
+extern int actualdpi ;
+extern int vactualdpi ;
+/*
+ * Write mfjob file
+ */
+void
+mfjobout P2C(char *, font, double, mag)
+{
+ if (mfjobfile == (FILE *)NULL) {
+ char pkout[128];
+ char *p;
+ int i;
+ for (p=pkpath, i=0; *p && *p!=PATHSEP && i<127; p++) {
+ if (*p=='%') {
+ p++;
+ switch(*p) { /* convert %x codes to mfjob @y codes */
+ case 'b':
+ sprintf(pkout+i,"%d",actualdpi);
+ break;
+ case 'd':
+ strcpy(pkout+i,"@Rr");
+ break;
+ case 'f':
+ strcpy(pkout+i,"@f");
+ break;
+ case 'p':
+ strcpy(pkout+i,"pk");
+ break;
+ case 'm':
+ strcpy(pkout+i, mfmode ? mfmode : "default");
+ break;
+ case '%':
+ strcpy(pkout+i,"%");
+ break;
+ default:
+ sprintf(pkout+i, "%%%c", *p) ;
+ fprintf(stderr,"Unknown option %%%c in pk path\n",*p);
+ }
+ i += strlen(pkout+i);
+ }
+ else
+ pkout[i++] = *p;
+ }
+ /* *p='\0'; Could some DOS person explain to me what this does? */
+ pkout[i] = 0 ;
+ mfjobfile = fopen(mfjobname,"w");
+ if (mfjobfile == (FILE *)NULL)
+ return;
+ fprintf(mfjobfile,"input[dvidrv];\n{\ndriver=dvips;\n");
+ if (actualdpi == vactualdpi)
+ fprintf(mfjobfile,"mode=%s[%d];\n",mfmode,actualdpi);
+ else
+ fprintf(mfjobfile,"mode=%s[%d %d];\n",mfmode,actualdpi,vactualdpi);
+ fprintf(mfjobfile,"output=pk[%s];\n",pkout);
+ }
+ fprintf(mfjobfile,"{font=%s; mag=%f;}\n",font,mag);
+ (void)fprintf(stderr,
+ "Appending {font=%s; mag=%f;} to %s\n",font,mag,mfjobname) ;
+}
+#endif
+/*
+ * Calculate magstep values.
+ */
+static int
+magstep P2C(register int, n, register int, bdpi)
+{
+ register float t ;
+ int neg = 0 ;
+
+ if (n < 0) {
+ neg = 1 ;
+ n = -n ;
+ }
+ if (n & 1) {
+ n &= ~1 ;
+ t = 1.095445115 ;
+ } else
+ t = 1.0 ;
+ while (n > 8) {
+ n -= 8 ;
+ t = t * 2.0736 ;
+ }
+ while (n > 0) {
+ n -= 2 ;
+ t = t * 1.2 ;
+ }
+ if (neg)
+ return((int)floor(0.5 + bdpi / t)) ;
+ else
+ return((int)floor(0.5 + bdpi * t)) ;
+}
+#ifdef MAKEPKCMD
+static char *defcommand = MAKEPKCMD " %n %d %b %m" ;
+#else
+#ifdef OS2
+static char *doscommand = "command /c MakeTeXP %n %d %b %m" ;
+static char *os2command = "MakeTeXP %n %d %b %m" ;
+#define defcommand ( _osmode==OS2_MODE ? os2command : doscommand )
+#else
+#ifdef MSDOS
+static char *defcommand = "command /c MakeTeXP %n %d %b %m" ;
+#else
+#ifdef VMCMS
+static char *defcommand = "EXEC MakeTeXPK %n %d %b %m" ;
+#else
+#ifdef ATARIST
+static char *defcommand = "maketexp %n %d %b %m" ;
+#else
+static char *defcommand = "MakeTeXPK %n %d %b %m" ;
+#endif
+#endif
+#endif
+#endif
+#endif
+char *command = 0 ;
+/*
+ * This routine tries to create a font by executing a command, and
+ * then opening the font again if possible.
+ */
+static char buf[125] ;
+void
+makefont P3C(char *, name, int, dpi, int, bdpi)
+{
+ register char *p, *q ;
+ register int m, n ;
+ int modegiven = 0 ;
+#if defined MSDOS || defined OS2 || defined(ATARIST)
+ double t;
+#endif
+
+ if (command == 0)
+ if (secure == 0 && (command=getenv("MAKETEXPK")))
+ command = newstring(command) ;
+ else
+ command = defcommand ;
+ for (p=command, q=buf; *p; p++)
+ if (*p != '%')
+ *q++ = *p ;
+ else {
+ switch (*++p) {
+case 'n' : case 'N' :
+ (void)strcpy(q, name) ;
+ break ;
+case 'd' : case 'D' :
+ (void)sprintf(q, "%d", dpi) ;
+ break ;
+case 'b' : case 'B' :
+ (void)sprintf(q, "%d", bdpi) ;
+ break ;
+case 'o' : case 'O' :
+ (void)sprintf(q, "%s", mfmode ? mfmode : "default") ;
+ modegiven = 1 ;
+ break ;
+case 'm' : case 'M' :
+/*
+ * Here we want to return a string. If we can find some integer
+ * m such that floor(0.5 + bdpi * 1.2 ^ (m/2)) = dpi, we write out
+ * magstep(m/2)
+ * where m/2 is a decimal number; else we write out
+ * dpi/bdpi
+ * We do this for the very slight improvement in accuracy that
+ * magstep() gives us over the rounded dpi/bdpi.
+ */
+ m = 0 ;
+ if (dpi < bdpi) {
+ while (1) {
+ m-- ;
+ n = magstep(m, bdpi) ;
+ if (n == dpi)
+ break ;
+ if (n < dpi || m < -40) {
+ m = 9999 ;
+ break ;
+ }
+ }
+ } else if (dpi > bdpi) {
+ while (1) {
+ m++ ;
+ n = magstep(m, bdpi) ;
+ if (n == dpi)
+ break ;
+ if (n > dpi || m > 40) {
+ m = 9999 ;
+ break ;
+ }
+ }
+ }
+#if defined MSDOS || defined OS2
+/* write out magnification as decimal number */
+ if (m == 9999) {
+ t = (double)dpi/bdpi;
+ } else {
+ if (m < 0)
+ n = -m;
+ else
+ n = m;
+ if (n & 1) {
+ n &= ~1 ;
+ t = 1.095445115 ;
+ } else
+ t = 1.0 ;
+ while (n > 0) {
+ n -= 2 ;
+ t = t * 1.2 ;
+ }
+ if (m < 0)
+ t = 1 / t ;
+ }
+ (void)sprintf(q, "%12.9f", t) ;
+#else
+#ifndef ATARIST
+ if (m == 9999) {
+#else
+ {
+#endif
+ (void)sprintf(q, "%d+%d/%d", dpi/bdpi, dpi%bdpi, bdpi) ;
+ } else if (m >= 0) {
+ (void)sprintf(q, "magstep\\(%d.%d\\)", m/2, (m&1)*5) ;
+ } else {
+ (void)sprintf(q, "magstep\\(-%d.%d\\)", (-m)/2, (m&1)*5) ;
+ }
+#endif
+ break ;
+case 0 : *q = 0 ;
+ break ;
+default: *q++ = *p ;
+ *q = 0 ;
+ break ;
+ }
+ q += strlen(q) ;
+ }
+ *q = 0 ;
+ if (mfmode && !modegiven) {
+ strcpy(q, " ") ;
+ strcat(q, mfmode) ;
+ }
+#ifdef OS2
+ if ((_osmode == OS2_MODE) && filter)
+ (void)strcat(buf, quiet ? " >nul" : " 1>&2") ;
+#else
+#ifndef VMCMS /* no filters and no need to print to stderr */
+#ifndef MVSXA
+#ifndef MSDOS
+#ifndef ATARIST
+ if (filter)
+ (void)strcat(buf, quiet ? " >/dev/null" : " 1>&2") ;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+#if defined MSDOS || defined OS2
+ if (! quiet && mfjobname == (char *)NULL)
+ (void)fprintf(stderr, "- %s\n", buf) ;
+ if (dontmakefont == 0) {
+ if (mfjobname != (char *)NULL)
+ mfjobout(name,t);
+ else
+ (void)system(buf) ;
+ }
+#else
+ if (! quiet)
+ (void)fprintf(stderr, "- %s\n", buf) ;
+ if (dontmakefont == 0)
+ (void)system(buf) ;
+#endif
+ else {
+ static FILE *fontlog = 0 ;
+
+ if (fontlog == 0) {
+ fontlog = fopen("missfont.log", "a") ;
+ if (fontlog != 0) {
+ (void)fprintf(stderr,
+#ifndef VMCMS
+ "Appending font creation commands to missfont.log\n") ;
+#else
+ "\nMissing font data will be passed to DVIPS EXEC via MISSFONT LOG\n");
+#endif
+ }
+ }
+ if (fontlog != 0) {
+ (void)fprintf(fontlog, "%s\n", buf) ;
+ (void)fflush(fontlog) ;
+ }
+ }
+}
diff --git a/Build/source/texk/dvipsk/mtest.ps b/Build/source/texk/dvipsk/mtest.ps
new file mode 100644
index 00000000000..f0600945b3e
--- /dev/null
+++ b/Build/source/texk/dvipsk/mtest.ps
@@ -0,0 +1,1247 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.85 Copyright 1999 Radical Eye Software
+%%Title: ./testdata/dvipstst.xdv
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentFonts: Times-Roman Times-Italic CMEX10 CMMI10 CMR10 CMSY10
+%%+ CMTT10 Times-BoldItalic
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: ./dvips -D 300 ./testdata/dvipstst.xdv -o dvipstst.ps
+%DVIPSParameters: dpi=300, compressed
+%DVIPSSource: TeX output 1998.01.01:1040
+%%BeginProcSet: texc.pro
+%!
+/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
+/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
+gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
+add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
+/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
+dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
+adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
+idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
+adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
+{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
+adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
+chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
+put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
+/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
+X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
+(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
+length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
+forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: 8r.enc
+% @@psencodingfile@{
+% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+% version = "0.6",
+% date = "22 June 1996",
+% filename = "8r.enc",
+% email = "kb@@mail.tug.org",
+% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+% codetable = "ISO/ASCII",
+% checksum = "119 662 4424",
+% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
+% @}
+%
+% Idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+%
+% (4) Remaining positions left undefined are for use in (hopefully)
+% upward-compatible revisions, if someday more characters are generally
+% available.
+%
+% (5) hyphen appears twice for compatibility with both ASCII and Windows.
+%
+/TeXBase1Encoding [
+% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef
+ /breve /minus /.notdef
+% These are the only two remaining unencoded characters, so may as
+% well include them.
+ /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi
+% (unusual TeX characters available in, e.g., Lucida Bright)
+ /dotlessj /ff /ffi /ffl
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ % very contentious; it's so painful not having quoteleft and quoteright
+ % at 96 and 145 that we move the things normally found there down to here.
+ /grave /quotesingle
+% 0x20 (ASCII begins)
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde
+ /.notdef % rubout; ASCII ends
+% 0x80
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+% 0xA0
+ /.notdef % nobreakspace
+ /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot
+ /hyphen % Y&Y (also at 45); Windows' softhyphen
+ /registered
+ /macron
+% 0xD0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro
+%!
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont cvx]cvx def}def /ObliqueSlant
+{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1
+roll mul exch}def /ReEncodeFont{/Encoding exch def}def end
+
+%%EndProcSet
+%%BeginProcSet: special.pro
+%!
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ userdict begin /bop-hook{gsave 200 30 translate 65 rotate /Times-Roman
+findfont 260 scalefont setfont 0 0 moveto 0.8 setgray (DVIPS) show
+grestore}def end
+
+@fedspecial end
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 92 /backslash put
+dup 97 /a put
+dup 101 /e put
+dup 102 /f put
+dup 108 /l put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueXX 5000832 def
+currentdict end
+currentfile eexec
+8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
+97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
+8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
+b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
+50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
+784c6bf7389803d9450b0c21756a017306462c563d51ecefaacd079732f12c29
+315e4b9623a5752c6f1d8145869e120d910b2644887cea7e30b15676a92537c2
+9d3aa80dc30082aba94b40990b82fb1a877e805e0c8c48f61e9f2edac05b944e
+e4d8084ec1d5cc517aaeec5b3ea379dd011eeb454cecab3ad2443c887c582789
+72355673e503affe0394fc7db31de364e4f56c24033c7df2265c56445ec63a1d
+5695a6041ea1b94407e1cdb7c5635603a4fd047e6edcaeb2d0da6c9e0e9396d5
+1a4a58e8fdc1578730f992435560a6e2d3e3687703ee2f78f5896389ac8470bc
+806169eb01762e89b6dc9adf857ead656620e2589aae722c37a2ed7a2941c360
+b067ee34d8d5ca3bf68db725614d936bcb207781f4d4ec2ac67b13a5ad161f3f
+059add7b5e3d904831e31c20c04546fae83ca93a35989e65c201756888f727b9
+7e5313c9870ec96e4cec3901ea03a5c744754485e7d169bbc98bf872d0796e18
+9d43b712950c3786257d8be06ab6080b9d9392313298327549a8a41c00a2cea3
+690b4a333e45aa815a64facae1c2b44640860b8b8687afbefdbd5b4a541a7251
+4ee7d3e0752af3e96a88c95d31fa16d34ba2f02fdb0088b165844f02611c734a
+dbcc2037bf741fdea7e8bcdc130c70c33772f777d8bcddf4611db99001ccff14
+d7af2bb05defc3480bdab312a0eff2f375afb4e0df2f803c594b7c93f71ca4af
+861ae1711932fef19bfe2f9b7adb69d68e5a70ea4d1a3d5bd85231b16993f65e
+fb37a0a823f0542f8c2340a073dc1be4a8347f9d3068a6435cd8278b0db1809e
+8af9664c2c989b9f16873c009449b6284b85da4dee11c96a05ba83292f0edbd9
+2cf674aad6ac1a5ff966ffc37e88a66048deed053565b55ef6bdb8c2f2f67832
+f8939a32442ea54f13d003494d6350a2864b427a9126a9c26a031909fe53fa84
+63b80c3ffd536c9a5dd29ceb03148dbc24c0033aea2115e1bfe3b6fcb656c12d
+e575584cd5412ce8b1fde28f9a199091442dda4990d873dbd4bc7ada4dcf4147
+ca1308b05e8f5412e872f42375b62ee9433b57ab45e30eff343cd19d1afe2ac1
+55aa2b20021122e90c48f01c319b2d570327c046ec7f3f363cca68ae2fddc933
+a41fca23cae97cc23be42846570d475b801ffaf02bf6a4a94ec1c2b73dd93ae6
+ac20190024c731b5806712c823cbf7d8291ea94e9a76bf1e3c715b90bd674aa0
+3da0320af0450fff4a75f5e1e83fbf6536eb9691909a655765083ac504cc855b
+9329df0dd5ee13003c240714c37eca8d518896bbe495329007451fba9df14cdd
+d8950c4c1636988c4e8de3dbc01277dfa36029116035c1eda42f4ac07f8c6883
+eb4eac8f278213d40cf49cae813cd0269be8e1443bcaf9aa4f9383a5d8823585
+1c385826de6cf55f7fdbfb74a99328cc64a1b4ad7991a3b9d9409952ae5b291f
+d5b2d2080fd62b248470d6eefe3111cb994e5731b9f1027c33c9154b0ce0a637
+d33729c36924df540a864ed2196415230b81752222df8779f37d9c2a0f33f203
+83744827452ff4d3042432ccb3d5f4314c6d51e6a8f53d35e458186f0f9061a2
+a53b7dfcebab03dff2029d8377945c1a61d48db1fa628074359b845fa06d23b6
+038b071c3601471c5ab555e440e46b81ddffcb0be3effe1e8c9b3b1f7f0608f3
+a6e63a49a35ef71b3e9260cecfe913069e460b40bda636ff1da4a081a392f160
+4e04b59522d3a0ebd09ca931979630b91265d0942485547f99cb9cf6e28a766d
+3eb812599dbdfdc48ba6da66687899eee0e3b71911a30bc7f553cecf8bff1c73
+4adb0035dc9ea4ff49404d66174aa5c25ef1352302c6432051cfd8da3eef1c17
+6d96da475ef37303ae6499802c12986c497434a16eac7010e436cf47eead9abc
+7a38bf20a20765008924ed4ae7a7a7554f2cf379161b073d6c429d3ca9157db8
+aa7376874b1106588cd4b4855827b09065803c630d593bd1a5eb3a7ed7311e85
+8f4219afb8559655444f8d9eb06e309ff626c33e2edafe56f96b69e1b0524163
+215382f1d40f69c5a80de4ca466bad9dcbc895a3218c4a0476c5b9f86299551d
+3fb81c90ded8cedd875981a61e68a4bb9276912a7642466ebd5ce0d4f3e6e9f7
+e7f7371daa0e4104250edb7f0a4b28cdfecd60cb87115691d2eeb3ebf5d341c3
+dc18a30a3c6b2d067363426064e4762c3e6abde9a201563d1f5cf2b4889a46e4
+fbc30229a5ae97572c894277a6ca919dc425679bfa0c86fc9276bea056504c09
+0ea9cec7ddc5ace9094d73f6e35e733f99eae54541a0486acde9c1ce4e96e25c
+683a3512a8fb401832263336e7d1a1ea019d8829b41fce35d711adee4458fad4
+6100584cef41dfda91037ce9a814082ca8f9f5789571c675c6f087acb7bee72e
+be41c47e20d7f3727bb1c4dfbf8441836e5e410b843091d6c926bdf8d19c3a69
+d558fa8ee330cf1f2b0e0831f4532478ece8b7f50f98fc2f5756b5e31c9c36be
+9b1eb0c563a1175566e559761b853ea9d1958d23ba35de9cb700102652d1fe3a
+01982c8ace2a228af7094baad9de58e0f05539ae4920a6883d765f0faabc321b
+1f9865066dbcbe1654c81a0388c3f407eeb40bba12c6a99c610e5f0616d03391
+656386e6d341583ea15db7d3fbb674f79c4fd16633fa5abb9b84b3eca11be36c
+f21aa5edfd8224ceb89503db18f3148935d425acb8bd2ba0daa823355c82a6fc
+1e1ea8d910468fdf058d0fdcd209557383dca05b45795dd4e03c7d598bd7377a
+6bd3f601327734912728871eaa0585ed28477c6fea33358d89ba4c89acf24540
+3c394088608d8aa25666406875d71a2193f9c49dbdca193caca5f9dbf26374a0
+475969ee2f1d7bcacaecc49e331908c8813fbb6e26be0d4ca614ead1898551cc
+b0c0d4e7fef0f48a84880411f8101be5eef09962aa75aa2912bfc9ce225691fe
+7dcec03cb22804c19c9a4e379df3fad8f875fa2d5edfb188a64c3111310bfca4
+6bc6e4de7b202634d16136ce43ac1aa81d6591b0d1aa13f7300980449b819e54
+98a6f8582b7bf69a32225067ba1c62f750b869c50bce47447b6c8961966dd59f
+55d4ea56461d0e3035e8064273ca30cf67ca8b9e0e8efd7ff2c6aa3538a13ed9
+17f408c558c95f379afe4280006402540c26b43e7bf0dd26e0874f73c9f25ab6
+1de5ace591d953986d322ee6872bfb67a604ed39ae4cf005b6cdf32f2c1b7517
+afc3c0626c6049c2713b079a1247c2c1a5442ba1459f180bf7fd78098d5d35bc
+eb97d566c468a5309f8d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /minus put
+dup 33 /arrowright put
+dup 41 /arrowdblright put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+/UniqueXX 5000820 def
+currentdict end
+currentfile eexec
+9b9c1569015f2c1d2bf560f4c0d52257bac8ced9b09a275ab231194ecf829352
+05826f4e975dcecec72b2cf3a18899ccde1fd935d09d813b096cc6b83cdf4f23
+b9a60db41f9976ac333263c908dcefcdbd4c8402ed00a36e7487634d089fd45a
+f4a38a56a4412c3b0baffaeb717bf0de9ffb7a8460bf475a6718b0c73c571145
+d026957276530530a2fbefc6c8f67052788e6703bb5ee49533870bca1f113ad8
+3750d597b842d8d96c423ba1273ddd32f3a54a912a443fcd44f7c3a6fe3956b0
+aa1e784aaec6fce08dae0c76da9d0a3eba57b98a6233d9e9f0c3f00fcc6b2c6a
+9ba23af389e6dfff4efec3de05d6276c6be417703ce508377f25960ef4ed83b4
+9b01b873f3a639ce00f356229b6477a081933fef3bb80e2b9dffa7f75567b1fa
+4d739b772f8d674e567534c6c5bbf1cf615372be20b18472f7aa58be8c216dbd
+df81cc0a86b6d8318ca68fe22c8af13b54d7576fe4ca5a7af9005ea5cc4edb79
+c0ab668e4fec4b7f5a9eb5f0e4c088cd818ecc4feb4b40ec8bd2981bf2336074
+b64c43079a611075699b4d5902c9a10bde669900444dd85bb50c1e6578957747
+b8084982a5828fd7a9e3b9924a6ac5c404fc795f3fccdc98d530eacff0f28288
+a34abdbb317d637d067dd07dd4168a3503519bc9093290a1e4bf69952b84acf4
+ef4c3f13b51f2d1d79384e692b8efa1d7746b979b1a59812af57dd0da8eaae6c
+05a62feda23714073d7b51ac3b8b688965df7b8ef00c00fcd28db19ec1f8cfd5
+ce04ccc85d4292c4631d33d80c4a7659b7e1a0a67831c478c9a287d7738d3aea
+ca618d42d7ed26d9518dfed077319141e5854b0865aaaf29bf2ab46b40253c1f
+f7ab99d4b47fce091fb12faa57f990020e64b532e0906ab6d0d1db3c175021e9
+dfa0cbe8dbe9903dcf86f752736e4e587693a81d58891784a13d33481b5d5d38
+721721821e62ecd5d18cef58d38a6040b0cab2df935b54f758bb3fefe9a359e2
+fe0aa2fd7f8e63e39bf225000be99bd9c4091fdf062f3b09ccb1963570d89e41
+ee3b5d8f223db9031bc43ad2f5ee9ec190d9229ce70332ed03015989d19e47fb
+4728c1c56863f1e4ffd3b422a738876531a06cc93c2211e2a5e849f6216c461c
+53af1837650eb1dec1e17963155079d44f8b63c7e56da41bbf899e599e0d8eb3
+4358fbc4a0ed5e7d3684c01b1c874fc5405c7ef58c0d66f3b34292e87abfad0c
+b36b5ea4ca4237467fde4fd43efb210c9c016634c22510cad36207dc9e65be80
+49e59d573a0ef1fa462d298d3d8b381185
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 13 /fl put
+dup 15 /ffl put
+dup 16 /dotlessi put
+dup 19 /acute put
+dup 25 /germandbls put
+dup 26 /ae put
+dup 27 /oe put
+dup 29 /AE put
+dup 30 /OE put
+dup 34 /quotedblright put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 56 /eight put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 73 /I put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 88 /X put
+dup 89 /Y put
+dup 92 /quotedblleft put
+dup 94 /circumflex put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 124 /emdash put
+dup 127 /dieresis put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueXX 5000793 def
+currentdict end
+currentfile eexec
+8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
+97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
+8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
+b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
+50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
+784c6bf7389803d9450b0c21756a017306457c7e62c1d269f306bd3402e266de
+fc3b5e7d8a8d2f5bf0fe6ddd40d07391df4fad4a6018dce29a2b8f692b29f202
+3a7c0e66de8ed85c14f1f8492167357f51a7e84cc5d92e0fee4d81cf7fbc8de5
+2d2e7bb57142033993f9c08c315abade8dbc4a732e84e142d3bee51557910e12
+cd8aa37c459a5e6b7f5269f59078aba3be4641a11ac48d0b625c8325b38ec08e
+4c9e5e7fed976a5650d99d82114f449b9ca14c4ec957702295a39a93ef93f618
+99b8ea06b092c3c1e503e6e436e0a9fa22576c8930ab3dc8c20f5d82b69cddf8
+ff4dacfa9c54bed5a3aa3ea5b129fe96be632843b9b6bc91b615581a985db56b
+1e01ca60ee69ca92cf5c0882ece62edad3e106d835348822400f0b66af658f2a
+e56ed08f8b0010571807009b73ab12a8cf14ca6c71f03c2a48c500f9d62266af
+154a6375ff600d9bac3f05ce34142d6867a79581c533176bb2f3117336671e2e
+44638a97167e2ea9644e31ea16c2ad2990ea33c54001e0c8156e6de8ab6a4d40
+a7137ba275f39589fea2e2db8256adc103d6f9cc038037a47e8fd469c5f98a5e
+3c15bd4ace40d340018b1cff7d1ed8abb0ac57b5b5a2c20a51957b96c453edb7
+dae5affd91a46d938fe0a13363001d844ded4323f1ee6d30012aea19b024a552
+315505535c85dc26bad31e09c50e6512802976d298c4e90d0044c362e6bf3ab3
+62a454ee93de25ce54411090c29e9d75c80ce26a84404bd9de3aee0e3f921ac5
+87f907572b8354a5c3165eea7e8b2ba4e333802132f760b41a900c698eb3d273
+8bea0aaf7aae96a558f08b61aec7c7d65b2889bb7b99800cffee5ba19ac90fce
+11437be1ddfcf0bca5670b543b9644a71c8726d0c1005abdb96f6e0cf7caaa31
+95017ca81519151c2c0b04f81e717c0691b63a76e9b25329ce2625b711cb7bf9
+9d23ec2bb5ec8aefb8c1a3b422ad617b3da4d49685fd44cc21a1fe5e1541163a
+b3e1594601d63c7e98801d7746474377ce93f81404f3570afbd5dbfe77578605
+917ab96963987e6efc2d3f99fa56ecae6422579852567f90cc90e4ef6d6f71d1
+858270205477e221018a375ca83c572b3f972c5181d189ef4f3e3fb66f9815d9
+b1bd406c1a645e8c66f53aa5d4bc2f4d0444412e1fa5d7238a7675e7cc9abda9
+2065e641151f8d4793ce2385eff2dc1d08d6400624e77064fb08261091d6f932
+c1ca0a102e9f438b86eaf91325876bf20b18005b9481db55864ea17e789202c8
+fb89602f404043088da30ff4117fc061ce251785d5ae7d6cdaf7b5d5ec5151e7
+249d4bc536705d99a55b17e9fb4c239f8c15d9b6e408013da8c171f6fd6204ee
+16bdda4099494907d42586428602bec7eca4dd48c2a52b54fa821883661797a5
+1fd6ae9253a211a8f687cd1233c579dc179ae59e2fa1b6825eff00f7accea0b0
+247885b39355a8f4680b5db0e2baa48154f0b63f13a0c161095c26a13a6fca11
+0016d69f63b3190e191ef5ddd06633533398a4671465de003ca627a0fe57be67
+876185e099442b766a1513272676e775af0ab36cba03c02d8c11bae771eeda93
+8b1fb4bd985e59a216dc0f199111c0f2544d7e77c800343a6fe7063f8bac8314
+cab1c57054152a75da2bd1c1d433fb6a23dd19c6b523d270ee2ec1be09377b26
+cc9f3bc1f90c5c5b8bbdb46eee75a66b4cc769cc9e06d6643f9730fadb35572f
+e38989263fe70333601fc4556d9dedb3ef75b522eb29cc0f4add67ae494abebd
+f105b2b6d0bef8430373c82a97e2ea3b6453e635f580687e36c3906f453dd157
+d442d902b21ae3cb1495812b383315595cc69dda1ae5a9e963ceff5ad37dd976
+a9a01d168199ad4fc0d02d1999cef8461c1ab3c34227832785a5adac572775b4
+9563c201712394804bd06bd979a20badcc3db165733e86d6e51517c59beb4efd
+7c76515c0a6b86d43bdace3ef38bfae98dee11282e592a66133b0cc869ddc5c4
+043230521181d9a8676f103861b5dfe8373b6570c8577c096c415ea3df297aea
+d6d2075a5dbfd64b24c56bdc67f6f14fc7e34745c2ef4abd6827190b633cc08a
+a2563509c44c9aab7b4e9f705cc655a5c48b218846f0203bcd4b42706a88eebc
+3650e2d016f19eaff962105ba8f5e1e1f045081f09a935be846eb568a522e510
+358a00fa2a6f164592ff6b2410808480e6965705cf6ff8cbb6e376824d9ddb7e
+72292a0b35610f7bc7057c781be9494698982ed7df62e52a30cc91ee84da86f5
+480384093cf0a16cccbc0f5f016645383e544b33488436c4ccd212a9e59df18d
+12cbb1c299343d13006da477da18162169868f6046c56d426fea2ed2a0a857ec
+3f0aa14fd5e10d91934198fb577d3fc368eece32f934cf1e8a0dcaa6f3fe7853
+8f1d02c151b229b178e00cbe4672d3d77d762f039d5478110226cab024fc9378
+17ebf3559ddab5349b12bb1bb3743efee48512fe8c321cfcb0dca9fd2862acf2
+f662211a8d432f2e8c42f4120af0b5fc2eb3dd6ede07dbe233989d2ab6ab23ef
+0b35bc4b4f1958713dce98a5872b7ad0df5194c8156874a2a2f994befdaae464
+5fe6484c700837e8b96ffeb520ebe64a19d3ea0a0c751f8ed3e8b141f27c0b2d
+5ac82dca96c3f997673a1512f18eb99740bfe6c507fb336c89dcb2fd54bc3750
+8c494c40f35af00c8bff6fcf3dbaf21a99491fc4a5d7ca8d211ea711e79f778d
+a5587494905569b2d63f0234e1339bb62d21c3b4a97b1f6838e8de056f765742
+6f114657b3ab78bbf2dc88561d13df6830827f04626df0b0bdc85a2a27889986
+cc5683b46d5a1a0fa64e2e74fafa5e6e45415a406d850a5aea592ec660a5c740
+151427beedd6376703cdf91b9341105bc6e810de491cce20b1dab8981267c804
+e105bab54e4794841ba6f0ae594aaef43e3a08888f1572343dec0a6c68395803
+360ca667d163687f1569cbd0436242aea5673cbfb49ce8ea3ea2064807cecd98
+18d1d55b5d5f698aaf00ccc301bb94a7d77546402ff894fb02fd372ac7170c14
+9700d4aef3f91843fcb696227a629b437763e9f67b9fa92cde309d0da6427920
+f46d64a679d82fe9e83007a68983a902ccdae36f69434d0fe4f617f78b6d0ce8
+136a5535edaf3d43bd8e8f1e9b9480f974d79b1c29455dd93a496dd7d0d40cf3
+f89bd01a20e923c3159186eafac1e584412023897532cb7fa158263b875cc445
+bb8fdcd12b3987a49f46a40cf3e1e951ddb7d109fe0ee7a6e152a5df886af20e
+94782ea9d48012d37e6e7c852008d6121fd88c04ba2829467ff846a8869521d2
+95763e1123f62a7be1ecd3722b1f321299a22c5c7f5db458472199187e34c2a2
+b8116314c71b243c535c9372c0ca2bbe160c5a378c80981a5ed1a70663a6db4b
+86514f06b07e825660655fbe6cdea02201304d22ffbfdcca808b79f9a7e13fb7
+fab5b551e36e757a909ecbdf2537d3a1c10b63ee0456e29d2131051ddb922c9c
+d6e875ef5cfeb8150dbb3040e64a269355a5c24e1ee92f31d8249628d9faa814
+4040ccbf9c35999a19d38e2c383e0cc0a66eb614a6045b77b7d66a8c8e060df0
+6cc7988b6bfbbf92ae74e63c95989cc38ebf40ef5c7609d96793e42578e3e0d8
+2122cff161b2a8f096af90e03d2d7cc27459f54fa695286764b9007a2aa52d8f
+19d7cad16a191b2f727d458bbb3a3a3edc8749711f62aec6ea1f074dc59b4d5a
+1b4b5c73718f4c235e9bcb745bad6e01290996cc987b5dc3efda72b3b9d8bc45
+a8c9e7505074c4c98eb29ff24d7c9f6988ad771a3c096668dbd3b10ea31fab91
+590df16246e9851d9a00d8d7873454e464d0ca8359210afb37c05529a0d3df6f
+7370e044c010896f528cb0ce7bdb95f0fcc447ae8f6f684f2a69d6507dee93ad
+702d89d0a451e281bf679572cc8b2af1bf727d51e3afb753ef773d6cb37e24c4
+6967c6b9a5d460d647117dad9ab0cbf38fdc8babd2d82314b646c09473be772b
+8d4e2b47e5f16f061eff9e7fc2a61454cc6211c343f0145b1d4f4941f2fbdf1d
+f35ea62e70f0af95344e91d2c2c4ddabf9184740cf4208bf8a433f5e89f82e16
+5b0d4a8175906c4345197f9e31c0edacab667ab62a86b59933dc858b49825201
+cfa7ef8450eb4c3d3c0584b81f5f778bc97efb41f003f240e9da6db131ee25df
+c6c934b844508933120cd46de89ff18051a07a63c5712fd944dd8b104114bbf4
+bf2bfdcc897d73efd5a1b506e694f5a2eaa99ea101f17057df0c5dcefac518bc
+8c874646e8624ccb62d5d2c14fee75ddc1e8185f62a23a3eee78a4eececc92c3
+71ce73c225ee7ff2da20b7b7f5e0d4af223ba49bf16baefe7805917149ed300c
+465f7ece0d0ca756b0eb6bf7edb0936d5a2adb097f0f0e5f2c112833a0aa08e0
+f5583be11be43f1c035704048d15d263c8f595ed0bffec05511f33b85f9efa35
+0bdd02b87477dd96403f0263b449fcd9269d0769e6b53e93190cfeda96a3003e
+d9f11e70369e268b5b75fee9112525485271e5f51f833828b66bf9e76a8a6f30
+8b021ddf0e3ceabdd395537d4488bd002b36a88156da857432f51e1067cce350
+ae26a238235fbe61f6e0350a4e21d4fecb52b40d368214ab97e5908e7ed64d69
+e5a6f2a041ba57b41daaf11f3658d8990dfd1bc54a2101d8916f6c61e3b0bd8a
+6e0da2a74d7456e7386557b56e0623f203cb493c0529d3dec615e383ca8f2ef5
+64591bd4739fad8ee86fd6d8f236e865c342c6faf10cdf95566c96509b3b589b
+7bf33f7192065f208a53b8cfbe62b4c9261c5f8fc26da054ca591f7e7d05c2bf
+5fcdbd9a3d21dfccd687084c68609cc2833a846974b0b69afffd65e4a29df09c
+59bda18bb6cfd101a23a0d5768356d1b78949d668399ef48ad0633d1c7c3ba2f
+6e1222269b76198d22fd5adbc568dfb36a0ffc955a1e219b9e71c348e2d54a31
+eff43b5da97634f00f1cc71c6bc2e6cdedbbc15398c9ed55e867e86be6d02b33
+c91cd0d41e53aeffab126d4936adc29abac839b4de494350c40671e0d3908f2e
+4a1736c9a5a10014015615d8d8b0af745b3141d7ba094848da502d15de14cfc4
+f76ef0482d9cfe62e31dfde244d5e8204d3f523e8c9487ffd1dc4f6473ce2855
+d7fe290542726553407899392bff64e42dae9f06d4953bd857c9b01aa05ad3f2
+a2e10e157b50610c74b05877f9c9e85aa3b24d19dd193c9c67b40b2e6224b713
+f386fa40c1a5127a22be43cb5790d249999534c3a6bfdbc22ea85cefdf25b0cf
+0b316fe1a40e1786a0cc7900600051c9f39551bfabd1dcd51902c363bba3ce38
+55f3ef77f2785382a0f16228e12e54d31a2aa8e5e800107872126469355d0e58
+06edef93af116bde482d936626aa54f894b0a09097a9773f96140915abeec6c0
+10d744d7a7f97c538f9985499ec88cf9ab967d0613733b4782a8ae1d09bc8390
+e301ff1d8bde7106e40368e7173df368f8777b07f411af5f4961087c06940ee6
+8fac0f47fe453640210a42d4173c92307e74f6488335f516dda74857661845f3
+0e49358f16f8e96f5b35c10d4612aa555c7ac952376305e0bc0c02e348423b2e
+2c21554d68d9b51d6c427e6d065f5298654d76b45e3f22d4f2fb1f1e109ebfec
+311fe3ba652639072112e9564bed7590ee7189589b1fa1adcad3224deee45efb
+b83f2273a9ff41296a289ea43bf1b73f131811156c3c14e76ed8706d4f3354a4
+215fdf81f1319fb463c18d6f257155f779e83e39a7b69609260aed95246bae53
+44f092df6636af6e2a2ba9339525819ffc092aeb7e38c672fa99aa6ca26dc8cc
+73fa450d295564238c88065fb6b879fd53bf0fe29ef8ceaafe0cb3c510118ca8
+c0df8976e7f3072f1e1d4dedcd772b424f4f0f138e421558298d4f5f8bc936da
+8856b0db4e4b62f20c1d6ab58ae03b6395cf228c9a70efabd29991f5ab8df7dd
+4fd47c9733573c67198cbab65ae651e025211419b170aefb294d2e80cfb5f9eb
+36ac969019c2cdb44a57ffb66afe77302aaaa2dbcdf49ec728c345dd5e1d0046
+b16ce7d795227cfa0bc873aab9b49d59d3ae8ba58d7ad1e0a5999d51ea336326
+d94c31c8fe9f2061a935f0331bee01da7e7c9e099739061333b6c170d659463c
+cced3816caf5acb6da1e08287edce23d676e8665f6642a9116b3ac39b9560201
+4c51ebf987f6ee7f662b76aa55f50aaf7a2e365970e1aeba25d2144c919f0fc1
+e7a3864d90f9e8e57068e107f24d9380400929c0afbc5c702da2bb8394067951
+565b2377764521b41e278cd9ee14b8b48b7b9042090e4bd92dd410dbfeeb3bb2
+fcf70e76c03f37ce963a169bd51ec34cfe92ec199edce16373911512312cc454
+95655ba9a81bbdd16ae2f442e45c4b6ddc0aa42bbfa0162e0e4841a20f4828a1
+420d9dcc9fa817d605e8ca1382413d5e27620fc91a84c0cfb3fe08aacbf81f26
+774428cbe16ffe835615a81a17d1a1bc94bcc0d4b1281387eed65128148cf50a
+5ae8ef388574b3ac1d7f46a4b948deec4dfe37c01898bfe1b327b914b99a1b7f
+0ff1782d5471dc008a85f331e045c555adcf83821919a79f3fcff66d0a4cdb90
+ed7aa7abb087cf7977506b633a77d2431e217de51a1fc2b3ec14f46bc9331cc1
+28e97ac7c6fefdf1384948485cb4c2886e657d3f0ab0bc70bcc16c758748185d
+dafa880905e2e70299f23c1e80c9b5c297a31ef9529608b3a96d5c98949da94b
+b0b34bc103f03532b68aee10fa178d2530d5ef5b9d2459b0c69fe66895ae76d7
+0b6a63d9559e115c474490a311a8f4b554c7143cf48de949556e63dd9475241d
+9452863f4480e520dc163d38ae9d38bba68dd0370e8207c55a9ee9ae7bbadb5c
+181a13313c5b1a1cf9e4dcc818b2809608ea15d7973ffe3d639d3a110cd6f7f6
+85d7e42ad6c8189e51f009b78a0f0a12da8933c4067ccffb675759b06a37ecc7
+c839a4fefd7627cad46261f1dea98fbf549d82b266f7afa06e864d06b079de09
+66c8cb6447f208778baa95fd0ff6d66d1864702513e0fc4ce09018f90d1a71cb
+0493ee58a44b09bf3c98d63e2a130290d3c26a8b241e927f7ee608e19895c082
+b50cac9c6c1bd411eb4ac9845cc80162f71ce0716a3a7aa31a882fefa87df826
+d032f7bdf6dd6f0177857e55acb2eb2b2d7cc785749d0a89169a6e77f2eacb71
+cfbba6fd6a062bb1c679d6cccdde2d92321bb9b078cd36aa33d31eb3c067e93d
+2d5ed444fbda7fb401ff6b1af75078de4860e9ccadda4ccf230b9ecd80bf2cca
+d5525d165fba606b6dfaa81bf779865277790dae1529e51e1f8ca382ab64b0b8
+1bf336c9f81e86b08e9b18f073c593f6f71e5771870614502471dfc386ebcda2
+ad1a00c4cda1330a6fa94a79e58e9a58d5772721295053b25877188d1f9e5b9f
+ebd5c318aa18f8869339f6c212cb62afbfb6959418b76e7f30a454def2994b68
+6381895987d76f2153340704d3e624cd29d04722f7be2072e6e07948c53b94b5
+bba0b965e351ab6b5a49a1212f721e7febafde73cf0d33479431c606de53b715
+5d85ef5ff827724c57cbe933a5e9827f6e697c9e587c93afbe8b6908e92d7238
+e9582bb8e4a838ee39c5edcbac03845fc0b1b2bdb45b91c11689a675be038742
+d78453c7b4714ac10fe67e5b352cd4ac1e7b53a88f9d30a12b24e13840423e60
+6b877b4583610625cfb0dd32c026f6def079980a255d7d8ea615bdbb68c1e8b0
+7fd1587187e629df14d51ee1bba24ac8ee2b3b2b30b00f863a2d434700488ab1
+dd1844c82c33df17adf32e9f22d535056ea9ecab138311ee5a4cfc14354a7e46
+0ad3ac6d9c9ac0427fc8cbd84ebe1000a05be466a674189ad8f03d3aca29983d
+5517b9a0b0a793e88acc9a8831b28129f7ea986b1c1e7e7cbfb4d202c3ed2208
+b04b2defab992f3550d0b6d7e2d8cbc64cb5f6f90e3f442ecc29383d4bbd45ba
+3ebe3fada59b4cc519df6bb324599276c09edde3e77c87e016dccdfcafb4190b
+522208a90a0d9f6f603388e949ef491a26a2378db50c69fce93395b7012ac751
+b7c0da66f931850bf2200d87394990bb673273e386d20df8560d893402e2f761
+bb216ea2530dcb27274cb81f2087c64155223d97af4b001ba8eb0a90ab5521c2
+9fc8f83d01910dad063be555aadac8f7e281689df391f909fba84e20fef2a993
+8caecefe097e279fb7678f69b82f8d89630595daac8f21d5e972829be216f962
+835118acbf30fdca82256e598e0a3fc6c4099354d2acf44658c5598a96d07a82
+412ff4aa22dfaf33e47250c183acceffb996405e373c22bc346a63231c7880cd
+f7ba283e77fcaa59756129c11eb010e8cc4c7fd5b3310db0394e3cf93dbff250
+412fc01f08ab5ad0f51f7d473a5127a02067749f71e31712e2852879b628c4a3
+5c2addd08340ef5a648b2886c5c31dbd75840215db72ac33fa8155588e502e60
+7ffdadaa7c5116969a89deea790b2ca28bd54ea26d6dc490e820c0b44dacec8a
+ec1debe7b6560d75a115c3694112101929b9ab2a852e3fb6369b170ba4f77901
+65d8347be454217587b3227d523aa73ef48e478e50c01123927322d05d390539
+caccabd75cae8229419add110eba5a6d87c3cd44cb9e21b85665a4e44c095086
+7bb5a8bad6fa3389267f2abb65037ec9793432f062d79b5d887de26bc1450bbb
+9d058246ff0c4c5510017ef4d96293524c6ff46568ecb39c096c1baa57bfdaca
+089aa112cdd8b546270658a0c56aea9e25ec2577a00d649b80ab589d2e3582dc
+fe215481fc54758742bc947ecf14058e0364eaedfe41e4045bbf0946e60911f3
+1cca86bb700ed3f357279f920c4bfd9e9e8df4c3ea559a7d3d532bfe41d26178
+17dd65299bcbd52d899ea539fc0274c338ee77398f69646b31f44a3084435689
+f138b4c556c208ac5e59aac13e89d5b8f6018c6c3c1068838f387c699e7514bf
+4b8a608d898df563e4e727f915fe1cc3f65fc7b96f8c1c83e7484735edf700e6
+0ee4d09796500b1a200581583228ba47a98520fb0531d7d88ad8b0b5c9f6c937
+58dae9786155ce58658685e8e027fdca5e09cb648b0f7e0e9aa2b6d3e6c673c2
+d670dc95a3b8a4a6e405ebc8b48f5c90d050e666cd91901214f8a071310fd833
+cea2290c694fa9b2bd781c4d25633ad46af6c07e2b2a7e5adfad8bb33e69c74b
+7373f37999eeff3b5597073c69df3f637dc0a28e7a344a2c4847ae8185301c1c
+33b379bccfb5a1813934ebe52c818ffb5ea72fa1eb54e2757930a349da35a280
+d1ed7feea6b83d25f0ec6248b3f81d043b61089fe751ff7b210f872d7f9feca7
+63cfae266c27ea61dd847806bcfa1f3e8d1f33707706a931a1d862f2b5585755
+51e236a077f116e9d3298a7ca44f61daf86f718809dd27b820c795b5696363c0
+9e0d9322a49a709cb470db9a2064561f9c6480514fa9eb41e30075f5aa1eb20a
+1b5a5e23f84925be630dcfecfb3c2b4f290858506d4006e2d832df79b9be0a52
+f42485ff3422b5f3df50de4cb18e006d81e8541be2013258af761723c908ebd7
+c3d474d2affa85a0616a0bdc6186784e6ae6accf532059aa3a3f8a04629782e0
+7769789984d0fc5d9d8f524ec8d578059096c7e517145e25bcc51bd45745e6ff
+eff1e5b55e045f53a0624ed5510fbbf7ee4fc40de4aaa82b4eaa5cdf37104b3c
+b40fa87b565bd37a225edfef2d41cc09a87cd8cbb3746244b0c335ec48590272
+5ab1df0f5862f5b7f44b47e47f835a3c0ff0a87e10a50d60d553c17a9ae757c3
+c2f2c35fcaca956943390e16ff670d2a460380eedfb195e9d9366f3ad6867ec3
+aa199068fcb194c4ee06f62c018878f7e7a102afbbeeea3a343572266189feaf
+fca0c9f231eb58fc453a8eed2893332ec1fb3d99fc44d7d7e5a39e1feff513f0
+312a7273a7610556b30b4276b474300b1666530f2602724e36c2dca4e8f1d858
+0bb1d22d414f447798ce120d2b7fc8b8dbb042b02694b65cabb5ea50bb4f7d17
+946bf7f70818e8f0e965f744a46df3d33bec94677b220214ea7f90863b72f42c
+b273296428aa663263a9c87d12ebf64eaf065cbf17022bd19ffdb0190df7897a
+0d5bc2e761177b38b994bf51ca4e0ba101bc496a4ecba6b990fea92ddbf12131
+e195dd17da487c525e012bab938b1f68911a1845a4d07372d4d6340a8415e739
+776f085f73565b843eb405847401d80b3b484ef01609161d5bac8b379a0311a2
+8063d0189feabdf89437e1707d74f690ef93b4d8a94977340a9961b92cfd57df
+4d63aa87bf59d80e8dc495e3c118057890478599d6a1082a07c8c30c54b1224e
+d050611be8ce37ce615bc64c8b58f24abee247da6ce92fd5d71650f85059792b
+b1e8ed8fc287b63ce68fb34994a08e2a7a305f0767b7e3f9bd92ed7b7d625321
+40849256e610f88361c783b990d87fe4d326d1dd2b00d19b7d6c4ba7cf66e56f
+a72494037094abf2edf1d0851d04d4a8b4480a13b3a88f68916745ea2f776607
+8591ef49dc351a07ba3d53045fe5e9df5d38e92259feb561228c399ca16269d7
+08ffa0142194141e621c8ad300544627ac5bd08a327bf2de4d6b916653c34120
+ff229b8b3d7fa62c10e47222615fcedeea760237e42c9cb34a3d335e4eddff60
+96161e91a9477776866c3120e252b8a83497b96947d4394e428a5b324cc54a2b
+1f861b99db3ba3c9e780421749c749ff2ed7a48aba4a09450e00bd80e89c1004
+d60fcbab0321d516b6dbc8098c6157c601528f0f122b275c664b258f83285bd7
+047afbadb5e51628a91a0c1fbf1f098ae78fa1fe88782e2a4ea1c47e34ff277a
+87518e379018f4636a9d15fc3b0bf92366cd05a8fd8332cc36091ef2244d3c30
+c4721c25349358b8457a2e50d03a3f9674827b66efebc6d2df6b1af87a5da25a
+dbcd04b24db31f6cd17690e1bb55f310fc267bcb377d57f0c3cf1c3fb4925bbf
+6ceef3348f6be726c0a5274d3c6cb328a7c66ad9e966663174e93af6a27751ec
+e8a1196eaee381cbddf7fa64c2910f101b083f39968a4e93d79bf998ae7d6835
+c739a92ae2fc949d3d3bfc1d171d3c7ba8ed416bcd35be5d4eb80c1d8f319604
+8eed1d50feba9a35055ceeb3282c10c53ec0c2c3962c0537e2d881f54da3019b
+fe0ecaad02fb03d7294e4e6b597ca78b429919bbca7db49662017c17bfcd7b74
+c2ce2d2f0fdcbcf45aeed12d23f2518b129e491040b61187b935360730fdd6b3
+5d8976497002ad582de4afbf811d0af9f45c5c0b3a6fb3937470d3313173dd9e
+9b8d9d51521a809029efcbd7e88703851127de2496be97683962c1ca054ba244
+593aa48c70ac36ac7d9574be2ccef5cfa071b1f65c3aff6191be60d986e0cb21
+b26de38793de394003e277dd68ccfda1123ad3474cbfeaaf5ecf15bbda72acea
+150d4b241193d450e3c3b92f758fd2a6516f07d3599e680e6fcba1171250245a
+e9f4a7741e817f2c2d455125c4405e299edb88771df944b4899acde5612cd3f7
+bcb097be7c996559a8b724043992a3db9b9744564d0734bbdf6d4283f0ec7656
+2eebb6dcf37ff4e9b1553bacbe9b1270f99c0e73dbb4acac4e221e8bb7da348d
+0c8af4db6493d7b7fadeb70d6648991bb6bbc4eb862e3e9f08d3222c295a0618
+0915bbdb4bd678ff4983e061bd29e8bd6d1a48db9df42ef59ee7492f1586b857
+51ce4eae0c02046ad511a385447b9e13b3b6f62920184da93cd978909bce5de7
+e15f39ccaabb6f08172f94f811f80e5ffcfc8be5307a69a2424af4d72102ca9e
+14fcde9e540a6d9cf57b9e6c56670fa22e806ed33755b352d6ec527104609a10
+1b3e71e689a0c7ffeb9b48c5c075771baae17b8832148ac28a7bd4dba5bc1049
+78adf0e820148fa6a90545378b0268865abae637bb216bcc00aff113ba0e8bf0
+828b68f60b28f4a2637639f33f491dd3de2155768151b62832bdd788034d9719
+183b8f4ded0a486fe041f962155b64de9bb4a46cf7beae3b55a8698576e7d6d0
+05d4293643dec08b5eae6f89e1c5aac003da0ee2a2f3aba3eb18f2e77ab035f3
+0fe56488ebf42b59263bd4e61e0c868c4b5581feae5e91bb80b62dab428c87ba
+d79809858312a6abf6187c1cd2a7c28bb124e6b9347a1f0e804890d80fe44888
+4ba908820fa43d8c8c755072927edff164e6b603a127262f70cdb3f775bfd50d
+c00056c049e93574f88385a99c2d9becb2e886c1d90419730d0b8186f720c652
+c2ecf7bea7cac2f191e671fcdc84ab50116b04a37c8e074fd9182c45b9253fd5
+5cbf8f30e3cef6bac8059e844fcb763d338f4b94edf8247e9e269335e2b546d3
+b502baf5e1515ac61de0e89987c425d3013a7256d72c543a67eb08234611447b
+5b276f420cff6dfa3427141e6d83966ea50a1de859af007f876fa8b65ed171f5
+201fa992466df6d2207170d447f505e2c35d09be3436bdfad538b644d1881759
+2577a5c15b7188c9887da87657686bcad61b6270b82cf789b5eaef79f3a5aa25
+ed755b8c53a6fca530f85e9fc2acb5b378e4cccbd5de2c5b8df8319be2b0d8db
+d87693abea58f6865c16c30415a191b62ccab357002cf0d8d1c7f93aa4408f49
+964f407467fd6c3f7e7b395d3b3ad381a658b78219bb75888262a1337a6c67b0
+cac22a83b6c867024b536ff7061750958c697ae8f658c0b8d63dae6a31192797
+1e320de30d3108cc5fab9edb9b56f172d11ecc1564224fcd2e89c4d835c35513
+55607086cf2c59ee68f7951334d2736e07ebcd9c7c615faadbfdeb6967a3a712
+4157d091c6742d203ff25ea67892a52bbc9e61df30e98c81280a273b57dc1d12
+96c1cfa164f13f2cac17926b79c35f473a668c3a025cb013e1316441c0abafdf
+aedb95d62971b86956f0c9c32ef1d1b2d93362032f19c72da6d5c9759310694e
+efbc072dc6581b5b9ed8586ea5945ca4543f28ae0269ba1d5df705235d3b44a7
+b33c2c84fbec31031a87910537a941080d8a87d6406c237093f487f03722aaab
+258510ffcf4c4fade4066aa7c2b64d3a4fd34693ff1ef18ba23af5b00761a17a
+3f6057d86e0e4c42de919d7c847ed72feb545d7d2a6fec374f413cd13c57ecab
+02cf17518fd5096112fa475f80ee345600c95e0cbebd3ab70ca5189ec3c96ef4
+78f5e22acdffc0fa71705c223cfdd8a9f28a13458e11e35eb300f80d8a1a4353
+0fca1305ea87464c5a44df910343ff15436ca508ff4229e5007c7d2929827f38
+9afc24be23088f0229e3e24d06ce357df383437e0cd7cad77b95f16f80a38b8f
+67bdab2eff74f1017eb43f1525a4bbe2be25d14aac0c231d57bad93051b3f663
+987fedf66d2cf59d5fcd3e40423bd50ef476697efaad54ff64a3836884f91f07
+827270793f1804de5fc95eccc4a009fb3280fe8240b60bd9738b0b8bef04aaf6
+9b5321ef284eca3ca1ddcd9594d6e801767f395dae321860c4cd5203dd5fa2fe
+687f6a6f786a201d803cc9b3d697c53db1bff53f90e694761d59f2f3fd73bb70
+0d5518d4b691b3b4caa9f77a694cef0663900d61b6124ef7b40b73363a44b955
+24b49e573b28fb58d134eef2a7b88f5be4cd6d3e577587f8ca2b73ce44cce68f
+1c235bcb224eb59c1e61e5e7746d35deee11f891186aa86a99806199ee8c2c5b
+f517b17fdecafcc4fe40114fbc5de7b7ed0880554052df18dc90928c580b8fbd
+bbdec1fec4a38332405535cc3045fa280adee50c8b56f195142d25b0ab202d2a
+b781ca92efd3c2238e7e6b73d0fb706cdd931590865fa81e0f5b368c65f53d0f
+865ea386aee57a649431351fb480e3a531a4da45ac60fbd7f2e5dc7053341e43
+0296d65105e3bdbd9cb99d3387f78409c7ad5aeefaf49bdf5351d9d01941f14d
+16ebcf8633c682d123771cd369145b25eb020a8c56c70c43d7e6700377992367
+ccdb65ef22453c53b2fe07a0d025cf953809ced8fc3230703c2da46389610d59
+586871679439ae58c0848a1ae5abf77e308b07711ea6a74269df22de41de6ac8
+f7cc5a948a0a62d1c9303129daaac7b72fac4898c5c6b9a870dbe75610492f5f
+3121516efe9b3a1ae1e94c0e29a2a52256772fb67993eb152c40f65d1249755f
+335225abce8be0de8d033aa432ba13ae229039a2169649d5ba4b28ee11ddfc08
+f91f86591911ba88611629dcdd5a081ea1bde8af301f3ad0063f28c33c2c65c9
+38283e876be91207e249aa3927576dcf539de2cba8a2f14aec67560d754470e5
+358afc36cae477d9f9ea61b47b64d26c92437c80ecd706c328c0d918bf253466
+4c6a074a0b43aad427cefc990b0bd7c77ebcf643007d9c930f4aa7cc36dc681e
+70bca4e727fdefe6492f675d578816ba6092794de8f8e0610867c0b9ec6780bf
+3d29fbbfe7699efbf7dfb0102a4c96a1117530c19064df685f4f1288279c1948
+e74e563bad0cef02499af1daa0cb95ea249db6baf600a0aa0a53f0ec68bad5ad
+9b0d7471c4486f88ae2be029baeb32d72b2d613af9dcdd874748ae30d08ccaf7
+176271f1bc14456e9554f37da5b85541178f9f9289a89669cb4921d12772d07a
+b33174c84f574fc95c276f69d73cedab4077b26f56911fc435e6d2514417dd8c
+4215cbfa620338044a4bcae0d45735331a9fc7f8b80aa3ee14ac267ef0fc2d8a
+7506a377ab51876bd3ec78eb552c327f9c9c3a8d1dc8a1b01428e99021aa3b9f
+01f57c4f60c192415af53fd497f406ed514598bb175c7b21928a2c5fd265a343
+2f08dd80964dfe9b42565a3a38b9fe4b52fb31ba9d5992c99c0d7a658aed561e
+9c50657dec64d416fb2f6326cd26181cd8b45ae1a8886fe986a375c9798b94f1
+1859754b2f420791f8350c1b810b741707409158d4f83ce3cc0a74f4535ad6b6
+8603d39e34c29f40a0e73553844cff55f0e336da9f90f2353e626703f3a3af41
+ed6af2e513d2166779b4a955137664993fa25513db29539ba31d966c2d2163a0
+ed3782990a47394f3fbbcde6775c1ec76b4daf49a7e4726eb6dac796b089b14e
+c4a83b30fee477b7fb3aeb9a8f31defddd61a0fff25967ad80c2851e55dc5c26
+c84514402225c409bcb0f0dc4738b1e3f7f2524ea2c5c4efb184f880670e9a65
+c90ff6b0d2594f33d43fe4fcef58ed7cedd73cf2c410276a4d9d5f06ba155017
+d32e70ae2f93b552d0c0b8e0d8ab112d741b54133f91470ec3c28e4731d15b12
+3a44ef63538c9fe837300562047d7b8585b4e00693741737d1c5e8d6cef0ab12
+b65cdcc5bb5c766d9a6590c60aee88556d20b071b2c9f6506518f13a9461a85d
+ed9524440d0fbdce913030eaf79436cda3efeb67fef77a259aecf445828938fc
+e264788a928915351c643a092ace3857005fb64501cc778764169a13013a4b99
+dd695618af53bc8c26eff31c724f301726756cd2415f4f17b90755ec1d745121
+26a0f9d01da1962213cda30a59068586ce26d92b1814130b4ff77a334d1d48d8
+6b9542dac0c945141ed69b5ec940dcd5d9fa3d892fa4043fffadcbd1a0b51b4c
+704dcebda6f9aa43463c6707cba64db4e294940086062201b4b4a8fe9b0f300b
+4275ad0c4c92e26892b4077dedf2c6604383400ce1f8f4d63365a7217c1cf834
+9aad15faf7f21d09ebb3df67cfbbe251ba3121e698923e631233188fcfb16c12
+1c5c23f8bdb4b0e5ad4d2389874413a00933dca8b87b9db5c52f8c37509be0f5
+6b50256c3c9182975c8e13c7b5da8e818ac6cad0327d365610f1244ab3f7ebb2
+e32a0212f00748565aeea0be81c9a7fe11796f07bef253c724269a4783a8d34e
+c3545d80dd8fdc466aada30ae86e6a1aea3288b2dab999bdac8c6bb52ff41f4e
+f24bd2fdf4c4435e466ba6218a6b8e4597bac9c03817481adeb21a047cf34eb5
+ccf3fc45698034129ac197928c86d8c975f0e86832df44d0e52f6e56ffc1b306
+6817f5fdbce03a8e449027aa122e2ac2a28748b3e5d5114f01b4faca0ea7364f
+b93af7584f01016c2b6bb1278f9c8d8edfae99395c1d9c0048be9a38b283b22e
+0737cdb51d548c0860e0381d74cc932b279ab6d62e44448c83f49e670c927dcd
+73a81f51edb4698dd3d7e4554d5b9e411a0421b0db1fa75bf94bf77ba0489dc9
+126bb21a975f6aa1aaeefea082186cac478d6267e373ce65dee5add48dae4708
+a34e1fe4a01bf96a99374edee8f016c600bc3bee6951699f0be054297270b8bb
+f0559cfe02bda0ad4a2a4dd0fda595c1336a664c04bd5e64675b6495513fb8ab
+261a740792e95cb18d6d7994efd85b95c0c1aad40b61a84934958fc90d77435a
+5e7d542d08b8c7f9a7328f6bdcdd204a595fc5ddf3d4056f24aef7ae04c5ada0
+df13978758f1c31ee153164229fc748e725c87f2f941077331ad83db1b81fc2c
+4423b15cb4638b1fefb8207e01c6643560ca9f51aac52f6b1890a8877d8f1951
+2d20f6765aa120f2b1d1811b87dfa928a668966461e5fa2aa74be5a154b6630c
+fae5d882c4d8a692acece141dd63dbfb471d746f2c7d930b48e814f90b33d10f
+b9d58ed82a27d8fadb9d5d96436665974048c3afa992345fc5051ed83fff1b93
+3f4aec562038fd62819d675e76c12cca1ee8099544965e9d63b3a8d91042d071
+a2c41ccf9464b3f6a373d56fb166015be39553fe7f6ea7b5642e5669f5a44804
+24f7a4fed8966f3ad5be261cca182b5f9a92793af1f3d4da5709acb4b8771f8a
+6c467918fe9ffbdbef1a974c57fb948ab3da6e6e3f4b58915f58b0ccddd27ffe
+171ee22fcd3615edc81af5fa5fe712040a8eba47191e5a5566e5bab7be507f14
+ead70352bed34a443f48bc6919d3ecf5246ec5db649bf01ff3c8fa8b29b415d9
+1f28ff5190c5a37c11dfd4328d3d08921156101ff3615ad513f3b2356386c42f
+a07f0fd822104dd8f5a63c606684cb8f2d8a6bfefc1997c2d1db6747a00a489c
+198b46f93582aa3e09b403ea2789e482e481d17584953876214c32165be6ee19
+7952becd780c414acbfacaa1a5712da00f7aba8e62b1122ffe6853ae103e8481
+8855c70c15782a6342d2602e715d553d9bbfc9c3c5b8e0661ec0f4498530c97a
+afb833a68e98c16901c6c70aef6ef303f9f1ab603085fee230d086fbaea5cf34
+1e9ea3d16e58a24ce0dbf664a605429e50930a2b29a1c45a01b5126b0efce248
+4ac57548de3adbd362a7d3f1f8e99b79c1e46d241195e9d8dc49b8111b36195f
+fad7db28630bbb2023a316301d82e3562f0554e0b1c16819ec9e836d338baab0
+82a619a39fdbd95ea5b2c7b96d28234f17eec431df24f200e94f2dad9d1f9eba
+8602eeaf0ebc3a16c77c109b33a77de490a5def568d2b120e48f36c49b71f219
+64602ba574d1c5ef73d6b6abdbc78ba8afb1fe83bb055ab688f986e0608f708b
+045272644d9cb83e2b6ea88e934117e837fd18eed15aad674a35f74edf49cac9
+2f41806552789b4017af81e9adb4417da096
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 25 /pi put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+/UniqueXX 5087385 def
+currentdict end
+currentfile eexec
+80347982ab3942d930e069a70d0d48311d725e830d1c76fba12e12486e989c98
+74c2b527f0925722787027f44470d484262c360cdfdddf3657533a57bb16f730
+48bfbbfcb73a650484015441fdc837add94ac8fbd2022e3ec8f115d4b4bb7b7f
+15388f22cc6198efe768bd9fceb3446ee4a8dc27d6cd152485384ef5f59381ff
+da43f2d20c8fb08aa27ab2015b774db10dacfdcd33e60f178c461553146ab427
+bdd7da12534ba078ad3d780414930da4f8d58abefd45db119b10eb409dd89792
+3c6e705479464a4b310b58348c4b42393988fef4925cf984423aaf65fea9f0e6
+4629953bcf50b919d968d99bd185f83112b2759cc411764e9bde677f57c5ee5a
+c555448d5f81a16259ded1e11bf4119d53e8ab07a802df900d3a2d5ccc1c6876
+d29c5e9effb7af3ef83400b0910c07873a8c56fa7b1eb1ba426043b00cc95dbe
+dc6e136cbbbcb3f67509964f9f281ebf81fe5b018122eaf66c4a838487e82e18
+6e006093042848a903efb3469ab6b4049767aadb95c30408dfd58d8a10f4cb22
+168decd9f3ee100f07b49aa44c92139b669cc312ba20192454eb2375be6284b0
+26659d964b96ae82d4942e758027fcf23c25ed01115af27ce7f20efe2a822bb6
+84004f20243a49c9e93301fc21b80815c033c3e2ba58ef53da2157d524b395f2
+b37abca13bc6a2f42e824ab7e47106176b0d6db267fbb795ac7425582df2e3dc
+55863468a9200742bd7b552c48f8cf58bc21343bd3b95abfa140f33f37c6f3f7
+8b0d8a5154eb7c1f62ec598267f13e841a3e64172663935ac8b665d86540d316
+ddece329c008049c5e74b27d59022c5515059bc3b89370b1bc6a169c888bb325
+e0b74282d6f053a50da4024ed1e433271a32ab8c17d41c632b41cf9f3ecd5fe1
+24daf7aea7ce8a63047b245822930d517df7baaafa69d2d17f7d93cebd45416d
+f3459365434123a76ccf883a4973bab19807e1f0c4bab03a45f7ed69ff2660ff
+3963e4def11001eec4238c368a39d874fd30b3c14f4186ec7700fbce22abe468
+eb32baf7b0164f8f21a9b5e706b91411faaa44467cb2180ab03de375c1ab93e9
+76e11ab92fdd4a7280a6d1a8dc65c4c89d04c8ed6988045a2a3de9a4c7b1efd3
+75b039396b2b2fbce3411457e1e57ac7a384d9b78115e83ab521e184b967ce5c
+e092e438389425a12f58dbee0001e7033a91d3b0e9a125333f45f35d430550fe
+ad3202aaba81a150b1ec34728f8109d39d5d163a57da9a47ba373d1b86f2da4e
+be09454415d644e1fbef933f8663390912ad15247dc543b417fd9bedec05f8f3
+7c9d5b173ec38cc7f61452a942023c17f01220547a06962ba53adb46b82005e8
+7113e70e9981ff1e37e6834c8d29ce11c6e0f91bc9924d48fa5a127b031e466a
+c9699299989c92487f88e1d6e59e6d4ec5461b68b3979cd8ecc13bbef603d714
+d5ca9341d79f2ab6e200cec023020841b2598b2489c4d54fd35753081acda3da
+6f6afa5ce44b46391fce0e84f4e05f6f343b3f0501e546fd1aaf73cd8d640a99
+7e237bc5ebe85b1a4adee6abf5cb4566ad001acc34fe95b8cbf74a67d94334f2
+ac6d7f5e327ac1336ab13a94da916532d6d68bc5783a02dcb7da158002a16151
+35483906b884df3c115d3751002afe38e2fa21678b40e26d26da7c5303720f54
+89a88633e03555724710902a4c266afad5d1d9799bfc5191fae942b6f85fad06
+d4939cf5ed9d86126067a3a16fe186899d100e135d03abc11192cb965c57b743
+9d1bba286487e5e44d8e2cf3f9f2eb973924bf0d152aa1f0361b1622c506bc56
+2a74e050f5da01d948bb4bb9bb69ee09581866a640dd234915ad9ab104ab7281
+bcdf80110e85e9c2082741975d8f94c85ddd8e22ef84c4611b11879a9a4394cc
+25a09db1146baf1f8721c71713315ba274dc1850138421fec50e4b71155d6b74
+01951cb91214ecdad8ac19a19cad86c5e2a01912d9d439b1a19b734649784e5f
+bc9928792b040831e51b54043400194377d0ea5b0a4aca856e15e0657b163021
+07fecb822d7e706230d29fd6c17f95d5a3507af0f81594633fa734232d908889
+b6b1726f2ed970b85b27141f0d5cfe699dc6f07b8a0efbf71a5ac51ba4c6c057
+e2688073c8748e6e60cdfd716286e7b79b0b1d3cab2e8d3d801d3fcfce711d69
+42395895aba13f4084ce84787dd45f77412d4bb6fb7561f17cfecda1e257fcaf
+4b44b392d5660bdbab2f86a4ccca2255fd2f1b957a556f53f77156d539c70790
+e30582bc3f6e9b0b584bfa8af5b92a6ec1582c3086be1704fe1dbf9f48e74aaf
+f0a824b9f37d7bd5c6d05028955d2b42dc4023b4c2c91ea823ea4ecdecaae79c
+5cee
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMEX10
+%!PS-AdobeFont-1.1: CMEX10 1.00
+%%CreationDate: 1992 Jul 23 21:22:48
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMEX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMEX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 116 /radicalbt put
+dup 117 /radicalvertex put
+dup 118 /radicaltp put
+readonly def
+/FontBBox{-24 -2960 1454 772}readonly def
+/UniqueXX 5000774 def
+currentdict end
+currentfile eexec
+80347982ab3942d930e069a70d0d48311d7190fa2d133a583138f76695558e7a
+e9348d37cac6651806d08527c1bb4a062a4835ac37784cc39ad8841404e438b4
+d52d3901e47a1de4f7924e0fb3daf442499175bab1226edf692a4956739f8828
+e80592f450c5d5c22ac88bcfbe9748f61d18243a16f4a4467f084e8e2be46ef4
+7fc51c3a8199e3cda62ff9c4fb73956dab8b6683d2156377808cb35026073e80
+523f59a30d195fcf9b9fce4ffafc6d5649664203ab24acb938d58d246707ffe7
+d62f04bec4b70c21ef75beb2b812622b3c74e969d72d3cd11bd7106294a99caf
+0b1629bc7d4de6b96ca82930831d64575f23f4ad06a0e45e315b1d392411be8d
+6d73c998789ff258a07a3c8c2057325784514c845500bfd1a971310cfc11d41c
+1a167dbd5ff012c60add4e87325f6e5299032a839de65fb1473a166aae1876a4
+414a434f22c1d241591fb36f857df6fa930608750ffc0c54f44994662b1f00f1
+400bf752ea8d83ffc4cb77a290bc2d99981ae59a191748ba5c7ba1a9d2583fd2
+1398452b6ff5d83a059f7eadcd2ef744e9dd22bdf9c79d049bf06835e878c32b
+7765c69bdd8ef4deb4ea7cfff4cf9354a4ddffa689de961d16772491c7afbd7f
+ffde42400764c68e954ee5c455a5687959829bc3b319b2147deaab3628662c80
+30c5e02fea09609abe4eaa12e217bc3af673f1bc36a7039eb13fcacb4218fe0f
+c5a3f9452d4edf46cc91db67b624d4f2d37502fb9f11af4da18ca40b61097f95
+d44329375467ed13c5cb585ec53f62b83ef9502cc755af44bf32b87b8ae9f3f2
+f8dbf72dab90acafbacd280db6aaffaefdff6d5eff26669bac56280a950560e3
+d01714ba38659b0e4e28bf8cdc1f15ff7e3ea9d95a6afbbe3d8e6905aa6d531d
+6b6dcab89e2036cc492c65f76ddcc3cfcff33fde3d9ffd10f7a90530fd5c7683
+4329baa902e701ca42717476298c9ff511b1941244bb1dfd0e5cab92a43970cd
+1bdb292eadd055c97972844fdcdb0aa06401e7b2632b9d134f96bce0064860f3
+9859da7a9a82be0a840672a1331212752ae1b521b693b384a72dba8d37a86eaf
+a0341e7fc5f6ef7a8c566aacb91e8bf5005c18837894c4eacff41dba54e071ca
+83f80e7f256d4fe2fde6e2408ec819f8fecbb87409f8f9c35a722494d279b0d2
+9ef6281f11d144eb362d34c20dfc58ead6a17cb0429ca22b44d307134497d1db
+e12b46cb16bf4aeb600463d05ec3d04ff464f4d61be7feeb7a3805b3f767bef6
+240d59d8a026581e5ecfadb595fbcfc59ee1f1f88fb995319fa99b744a274972
+c95971a00bdf7c2ca0b47856e2caa561a22a7ba32de87c5075cb4dc4ad680dba
+d837e74bb0c64aaf1287e059946a83dff78831b493841179583dfa0a42f1e08d
+71f5406eba065f25c1f724a2b9e37855f7decf7de70d0efe5bf63250acf798eb
+2ab1bef909a76568800af7d5d44ad80383a913815490e3c2fb9e9284fb3aa8f8
+46bdcdfa944e757faef290bf48db6dea131ef5d7f107e5690926edfc34651323
+b0608622983f92e99ce363df17a81967f2adb131e18aac3639c947b81da87849
+2efa86cb8a1973900d843a579cebbe2a7f43558296b6475c4d96243803d45715
+8056da4a158b7bcb9d1e762ce646d1c6f7cc7b15b92cbad4ab4977e184835fca
+5d1a60816a969cc18609160740c903af208babd9bbf51315eedb5f0bef81e223
+eee2b49b8f7b
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+TeXDict begin 39158280 55380996 1000 300 300 (./testdata/dvipstst.xdv)
+@start /Fa 25[48 6[33 24[63 17[22 11[22 11[48 4[66 10[63
+3[22 16[44 29 37 18 26 26 1[33 33 37 52 18 2[18 37 1[22
+29 33 29 1[33 23[26 4[48 21[17 6[22 21[18 13[37 3[{
+TeXBase1Encoding ReEncodeFont}33 66.4176 /Times-BoldItalic
+rf /Fb 138[22 22 22 22 2[22 2[22 5[22 22 3[22 4[22 92[{}10
+41.511 /CMTT10 rf /Fc 214[42 7[42 32[32{}3 41.511 /CMSY10
+rf /Fd 128[21 2[42 2[22 22 30 22 23 16 16 16 22 23 21
+23 35 12 22 1[12 23 21 13 18 23 18 23 21 12 1[21 1[21
+2[31 31 3[30 23 31 1[28 6[15 2[27 28 32 30 1[31 3[32
+1[12 2[21 1[21 21 21 2[21 2[12 14 12 2[16 16 12 4[21
+3[42 37 1[32 30 21 5[21 2[12 35 1[23 23 12[{}65 41.511
+/CMR10 rf /Fe 156[18 18 22 71[24 25[{}4 41.511 /CMMI10
+rf /Ff 137[44 44 44 116[{}3 41.511 /CMEX10 rf /Fg 152[208
+103[{TeXBase1Encoding ReEncodeFont}1 415.11 /Times-Italic
+rf /Fh 137[42 1[23 32 28 1[42 42 5[23 3[37 1[37 10[60
+1[60 1[51 46 2[46 6[28 2[46 51 60 2[60 6[23 58[{
+TeXBase1Encoding ReEncodeFont}20 83.022 /Times-Roman
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: A4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -225 -200 2331 25 v -225 3108 25 3309 v 325 -77
+a Fh(D)m(VIPS:)21 b(A)g(T)724 -58 y(E)764 -77 y(X)f(Dri)n(v)o(er)g(F)o
+(or)f(PostScript)836 238 y Fg(g)-225 695 y @beginspecial
+@setspecial
+ 0 36 translate .05 .099 .95 { 27.4 0 translate gsave 0 0 moveto dup
+90 mul rotate -10 -10 rmoveto 20 0 rlineto 0 20 rlineto -20 0 rlineto
+closepath gsave dup setgray fill grestore 1 exch sub setgray stroke
+grestore 27.4 0 translate } for
+
+@endspecial 441 770 a Ff(v)441 794 y(u)441
+818 y(u)441 843 y(u)441 868 y(u)441 893 y(u)441 918 y(u)441
+943 y(u)441 968 y(t)p 485 770 954 2 v -180 x(v)485 811
+y(u)485 836 y(u)485 861 y(u)485 885 y(u)485 910 y(u)485
+935 y(u)485 960 y(t)p 529 788 910 2 v 865 828 a Fe(a)12
+b Fd(=)-7 b Fc(\))11 b Fe(b)g Fc(\000)-6 b(!)11 b Fe(c)p
+534 846 900 2 v 534 880 a Fd(the)17 b(phase)f(of)f(the)i(mo)q(on)e(m)o
+(ultiplied)f(b)o(y)i(the)h(n)o(um)o(b)q(er)534 930 y(of)10
+b(angels)h(that)g(can)g(dance)h(on)f(the)h(head)f(of)f(a)h(pin)f(while)
+534 980 y(the)18 b(ric)o(h)f(man)f(threads)i(the)g(needle)g(divided)e
+(b)o(y)h Fe(\031)h Fd(or)534 1030 y(some)c(other)g(transcenden)o(tal)i
+(n)o(um)o(b)q(er)-158 2836 y @beginspecial 18 @llx 18
+@lly 577 @urx 814 @ury 2796 @rwi @setspecial @endspecial
+1090 1185 a(T)m(o)i(run)g(this)h(test,)h(remo)o(v)o(e)e(a)g(\014le)h
+(called)f(m)o(test.ps)g(if)g(it)1049 1235 y(exists.)36
+b(Then,)21 b(run)f(T)1429 1244 y(E)1452 1235 y(X)g(o)o(v)o(er)g
+(test.tex,)i(run)e(dvips)g(o)o(v)o(er)1049 1285 y(test.dvi,)10
+b(sa)o(ving)g(the)h(output)f(in)g(a)g(\014le)g(test.ps.)18
+b(Cop)o(y)10 b(test.ps)1049 1335 y(to)17 b(m)o(test.ps.)29
+b(Run)17 b(dvips)g(o)o(v)o(er)g(test.dvi)h(again,)e(this)i(time)1049
+1385 y(prin)o(ting)9 b(or)h(sa)o(ving)f(the)h(output,)h(as)f(y)o(ou)f
+(c)o(ho)q(ose.)18 b(\(Including)1049 1434 y(the)12 b(do)q(cumen)o(t)h
+(to)q(o)f(man)o(y)f(times)h(inside)g(itself)g(will)f(o)o(v)o(er\015o)o
+(w)1049 1484 y(the)j(virtual)f(memory)h(capacities)g(of)f(most)h(prin)o
+(ters.\))1090 1565 y(Some)i(things)g(to)g(c)o(hec)o(k)i(on)e(this)g
+(page.)25 b(First,)17 b(the)g(large)1049 1615 y(rules)c(surrounding)f
+(the)h(page)g(should)f(b)q(e)h(exactly)f(one)h(quar-)1049
+1665 y(ter)i(inc)o(h)f(from)g(eac)o(h)h(b)q(order)h(\(assuming)e(a)g
+(8.5)g(b)o(y)g(11)g(page;)1049 1715 y(for)c(an)g(a4)g(page,)h(c)o
+(hange)g(the)g Fb(\\afourfalse)d Fd(to)j Fb(\\afourtrue)1049
+1765 y Fd(on)i(line)h(16.\))1090 1845 y(Y)m(ou)f(should)g(see)i(a)e
+(title)g(at)g(the)h(top,)f(and)g(a)g(large)g(italic)f(g)1049
+1895 y(under)f(that.)17 b(Then,)11 b(there)g(should)g(b)q(e)g(a)f(cen)o
+(tered)i(ro)o(w)e(of)g(ten)1049 1945 y(b)q(o)o(xes,)k(going)e(from)h
+(dark)h(to)g(ligh)o(t)f(gra)o(y)m(,)f(rotating)h(slo)o(wly)m(.)1090
+2026 y(In)18 b(the)h(`equation')d(that)i(follo)o(ws,)f(c)o(hec)o(k)i
+(the)g(upp)q(er)g(left)1049 2076 y(corner)g(of)e(the)i(radical)f(signs)
+g(for)f(alignmen)o(t.)30 b(Also)18 b(c)o(hec)o(k)1049
+2126 y(the)c(righ)o(t)g(arro)o(ws.)1090 2207 y(In)e(the)h(recursiv)o
+(ely)g(included)f(page)g(to)g(the)h(left,)f(note)g(ho)o(w)1049
+2256 y(bad)g(the)i(bitmapp)q(ed)e(fon)o(ts)h(lo)q(ok)f(\(they)i(are)f
+(the)g(ones)h(under)1049 2306 y(the)g(radical,)f(and)g(indeed)i(this)f
+(text)g(itself.\))k(The)c(thin)g(rules)1049 2356 y(ma)o(y)g(disapp)q
+(ear)i(altogether.)23 b(This)16 b(p)q(oin)o(ts)f(out)g(the)h(resolu-)
+1049 2406 y(tion)11 b(dep)q(endence)j(of)d(dvips)h(output;)g(this)g(is)
+g(an)f(unfortunate)1049 2456 y(necessit)o(y)23 b(of)d(using)h(bitmapp)q
+(ed)h(fon)o(ts.)40 b(The)22 b(P)o(ostScript)1049 2506
+y(fon)o(ts,)13 b(on)h(the)g(other)h(hand,)e(should)g(scale)i(\014ne.)
+1090 2586 y(Finally)m(,)c(at)h(the)i(b)q(ottom)e(of)g(the)h(page,)g(y)o
+(ou)f(will)f(see)j(some)1049 2636 y(tests)f(of)f(the)g(accen)o(ts)i(in)
+e(the)h(P)o(ostScript)f(fon)o(ts.)18 b(P)o(a)o(y)11 b(careful)1049
+2686 y(atten)o(tion)18 b(to)g(the)h(w)o(ord)f(na)-5 b(\177)-16
+b(\020v)o(e;)20 b(there)g(should)e(b)q(e)h(an)f(um-)1049
+2736 y(laut)e(o)o(v)o(er)h(a)g(dotless)h(i.)27 b(The)17
+b(text)h(should)e(read)i(\\Ic)o(h)f(w)o(ei\031)1049 2786
+y(tats\177)-21 b(ac)o(hlic)o(h)15 b(nic)o(h)o(t)f(mehr)i(als)e(das.)22
+b(D\032monic)14 b(sou\017)o(\023)-20 b(es)16 b(ha)o(v)o(e)1049
+2836 y(no)d(r^)-21 b(ole)14 b(in)g(na)-5 b(\177)-16 b(\020v)o(e)13
+b(\033uvres.)19 b(|\035sop's)14 b(\036uvres.")100 2963
+y Fa(Ic)o(h)25 b(w)o(ei\337)i(tats)467 2962 y(\250)461
+2963 y(ac)o(hlich)g(nic)o(ht)g(mehr)d(als)i(das.)48 b(D\346monic)25
+b(souf)o(\003)1729 2962 y(\264)1725 2963 y(es)100 3027
+y(hav)o(e)18 b(no)e(r)363 3026 y(\210)357 3027 y(ole)i(in)f(na)595
+3026 y(\250)597 3027 y(\021v)o(e)h(\234uvres.)24 b(\227\306sop')-5
+b(s)17 b(\214uvres.)p 2080 3108 25 3309 v -225 3133 2331
+25 v eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Build/source/texk/dvipsk/mvs/dvipsmvs.h b/Build/source/texk/dvipsk/mvs/dvipsmvs.h
new file mode 100644
index 00000000000..b9cc7a45b8e
--- /dev/null
+++ b/Build/source/texk/dvipsk/mvs/dvipsmvs.h
@@ -0,0 +1,97 @@
+/*
+ * These are changes needed for the MVS/XA version of dvips 5.497
+ * November20, 1992.
+ * This was derived by Peter K. Schilling - DESY - from "dvipscms.h"
+ * written by J. Hafner, E. Blanz and M. Flickner of IBM Research,
+ * Almaden Research Center.
+ * The changes to the rest of the code can be found by searching for
+ * "MVSXA".
+ */
+extern char *malloc();
+/*
+ * Added ascii to ebcdic conversion table for MVSXA.
+ * Only for the printable characters. This is used by DVIPS.
+*/
+char ascii2ebcdic[256] = {
+ 0, 1, 2, 3, 53, 45, 46, 47,
+ 22, 5, 37, 11, 12, 64, 14, 15,
+ 16, 17, 18, 19, 60, 61, 50, 38,
+ 24, 25, 63, 39,111,111,111,111,
+ 64, 90,127,123, 91,108, 80,125,
+ 77, 93, 92, 78,107, 96, 75, 97,
+ 240,241,242,243,244,245,246,247,
+ 248,249,122, 94, 76,126,110,111,
+ 124,193,194,195,196,197,198,199,
+ 200,201,209,210,211,212,213,214,
+ 215,216,217,226,227,228,229,230,
+ 231,232,233,173,224,189, 95,109,
+ 121,129,130,131,132,133,134,135,
+ 136,137,145,146,147,148,149,150,
+ 151,152,153,162,163,164,165,166,
+ 167,168,169,192, 79,208,161, 7,
+ 128,129,130,131,132,133,134,135,
+ 136,137,138,139,140,141,142,143,
+ 144,145,146,147,148,149,150,151,
+ 152,153,154,155,156,157,158,159,
+ 160,161,162,163,164,165,166,167,
+ 168,169,170,171,172,173,174,175,
+ 176,177,178,179,180,181,182,183,
+ 184,185,186,187,188,189,190,191,
+ 192,193,194,195,196,197,198,199,
+ 200,201,202,203,204,205,206,207,
+ 208,209,210,211,212,213,214,215,
+ 216,217,218,219,220,221,222,223,
+ 224,225,226,227,228,229,230,231,
+ 232,233,234,235,236,237,238,239,
+ 240,241,242,243,244,245,246,247,
+ 248,249,250,251,252,253,254,255
+};
+/*
+ * Added ebcdic to ascii conversion table for MVSXA.
+ * Only for the printable characters. This inverts the
+ * table above and is used by AFM2TFM.
+*/
+char ebcdic2ascii[256] = {
+ 0, 1, 2, 3, 4, 9, 6,127,
+ 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 8, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 10, 23, 27,
+ 40, 41, 42, 43, 44, 5, 6, 7,
+ 48, 49, 22, 51, 52, 4, 54, 55,
+ 56, 57, 58, 59, 20, 21, 62, 26,
+ 32, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 46, 60, 40, 43,124,
+ 38, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 33, 36, 42, 41, 59, 94,
+ 45, 47, 98, 99,100,101,102,103,
+ 104,105,124, 44, 37, 95, 62, 63,
+ 112,113,114,115,116,117,118,119,
+ 120, 96, 58, 35, 64, 39, 61, 34,
+ 128, 97, 98, 99,100,101,102,103,
+ 104,105,138,123,140,141,142,143,
+ 144,106,107,108,109,110,111,112,
+ 113,114,154,125,156,157,158,159,
+ 160,161,115,116,117,118,119,120,
+ 121,122,170,171,172, 91,174,175,
+ 176,177,178,179,180,181,182,183,
+ 184,185,186,187,188, 93,190,191,
+ 192, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73,202,203,204,205,206,207,
+ 208, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82,218,219,220,221,222,223,
+ 92,225, 83, 84, 85, 86, 87, 88,
+ 89, 90,234,235,236,237,238,239,
+ 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57,250,251,252,253,254,255
+ };
+
+/*
+ * access.c for MVSXA
+ */
+int access (path, amode)
+char *path;
+int amode;
+{
+ return(1);
+}
diff --git a/Build/source/texk/dvipsk/output.c b/Build/source/texk/dvipsk/output.c
new file mode 100644
index 00000000000..aae043849bd
--- /dev/null
+++ b/Build/source/texk/dvipsk/output.c
@@ -0,0 +1,1580 @@
+/*
+ * These routines do most of the communicating with the printer.
+ *
+ * LINELENGTH tells the maximum line length to send out. It's been
+ * reduced to 72 because sometimes PostScript files are included in
+ * mail messages and many mailers mutilate longer lines.
+ */
+#define LINELENGTH (72)
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#include <ctype.h>
+#include <stdlib.h>
+
+#ifdef OS2
+#ifdef _MSC_VER
+#define popen(pcmd, pmode) _popen(pcmd, pmode)
+#define pclose(pstream) _pclose(pstream)
+#endif
+#endif
+
+#ifdef __DJGPP__
+#include <unistd.h> /* for `isatty' */
+#endif
+
+/*
+ * The external routines called here:
+ */
+#include "protos.h"
+
+/*
+ * These are the external variables used by these routines.
+ */
+extern integer hh, vv ;
+extern fontdesctype *curfnt ;
+extern FILE *bitfile ;
+extern char *oname ;
+extern Boolean secure ;
+extern Boolean reverse ;
+extern Boolean removecomments ;
+extern Boolean sendcontrolD, disablecomments, multiplesects ;
+extern Boolean shiftlowchars ;
+extern Boolean usesPSfonts, headers_off ;
+extern Boolean safetyenclose ;
+extern Boolean cropmarks ;
+extern Boolean tryepsf ;
+extern Boolean compressed ;
+extern Boolean sepfiles ;
+extern int numcopies ;
+extern int collatedcopies ;
+extern integer pagecopies ;
+extern int totalpages ;
+extern integer pagenum ;
+extern Boolean manualfeed ;
+extern int landscape ;
+extern int quiet ;
+extern int prettycolumn ;
+extern int actualdpi, vactualdpi ;
+extern char *iname, *nextstring ;
+extern char *paperfmt ;
+#ifndef KPATHSEA
+extern char *headerpath ;
+extern char *figpath ;
+#endif
+extern char errbuf[] ;
+extern shalfword linepos ;
+extern struct header_list *ps_fonts_used ;
+extern char banner[], banner2[] ;
+extern int gargc ;
+extern char **gargv ;
+extern struct papsiz *papsizes ;
+extern integer hpapersize, vpapersize ;
+char preamblecomment[256] ; /* usually "TeX output ..." */
+#ifdef HPS
+extern Boolean noprocset, HPS_FLAG ;
+#endif
+/*
+ * We need a few statics to take care of things.
+ */
+static integer rhh, rvv ;
+static int instring ;
+static Boolean lastspecial = 1 ;
+static shalfword d ;
+static Boolean popened = 0 ;
+int lastfont ; /* exported to dospecial to fix rotate.tex problem */
+static void chrcmd P1H(char c); /* just a forward declaration */
+static char strbuffer[LINELENGTH + 20], *strbp = strbuffer ;
+static struct papsiz *finpapsiz ;
+static struct papsiz defpapsiz = {
+ 0, 40258437L, 52099154L, "letter", ""
+} ;
+#ifdef CREATIONDATE
+#if (!defined(VMS) && !defined(MSDOS) && !(defined(OS2) && defined(_MSC_VER)) && !defined(ATARIST))
+ /* VAXC/MSDOS don't like/need this !! */
+#include <sys/types.h>
+#include <sys/time.h> /* time(), at least on BSD Unix */
+#endif
+#include <time.h> /* asctime() and localtime(), at least on BSD Unix */
+static time_t jobtime;
+#endif
+/*
+ * This routine copies a file down the pipe. Search path uses the
+ * header path.
+ *
+ * We add code to handle the case of MS-DOS font files.
+ *
+ * Format: 80 {01,02} four byte length in littleendian order data
+ * repeated possibly multiple times.
+ */
+static char *hxdata = "0123456789ABCDEF" ;
+static int infigure ;
+extern char *infont ;
+static char possibleDSCLine[81],
+ *dscLinePointer = possibleDSCLine, *dscLineEnd = possibleDSCLine + 80 ;
+void
+copyfile_general P2C(char *, s, struct header_list *, cur_header)
+{
+ FILE *f = NULL ;
+ int c, prevc = '\n' ;
+ long len ;
+ /* begin DOS EPS code */
+ int doseps = 0;
+ unsigned long dosepsbegin, dosepsend = 0;
+ int removingBytes = 0 ;
+ char *scanForEnd = 0 ;
+ /* end DOS EPS code */
+#ifdef VMCMS
+ register char *lastdirsep ;
+ register char *trunc_s ;
+ trunc_s = s ;
+#endif
+#ifdef MVSXA
+ register char *lastdirsep ;
+ register char *trunc_s ;
+ trunc_s = s ;
+#endif
+ dscLinePointer = possibleDSCLine ;
+
+ switch (infigure) {
+ case 1:
+/*
+ * Look in headerpath too, just in case. This allows common header
+ * or figure files to be installed in the .../ps directory.
+ */
+ f = search(figpath, s, READBIN) ;
+ if (f == 0)
+ f = search(headerpath, s, READBIN) ;
+#ifdef VMCMS
+ lastdirsep = strrchr(s, '/') ;
+ if ( NULL != lastdirsep ) trunc_s = lastdirsep + 1 ;
+ (void)sprintf(errbuf,
+ "Couldn't find figure file %s with CMS name %s; continuing", s, trunc_s) ;
+#else
+#ifdef MVSXA
+ lastdirsep = strrchr(s, '/') ;
+ if ( NULL != lastdirsep ) trunc_s = lastdirsep + 1 ;
+ (void)sprintf(errbuf,
+ "Couldn't find figure file %s with MVS name %s; continuing", s, trunc_s) ;
+#else
+ (void)sprintf(errbuf, "Could not find figure file %s; continuing", s) ;
+#endif
+#endif
+ break ;
+#ifndef VMCMS
+#ifndef MVSXA
+#ifndef VMS
+#if !defined(MSDOS) || defined(__DJGPP__)
+#ifndef ATARIST
+#ifndef __THINK__
+ case 2:
+#ifdef SECURE
+ (void)sprintf(errbuf, "<%s>: Tick filename execution disabled", s) ;
+#else
+#ifdef OS2
+ if (_osmode == OS2_MODE) {
+#endif
+ if (secure == 0) {
+ (void)sprintf(errbuf, "Execution of <%s> failed ", s) ;
+ f = popen(s, "r") ;
+ if (f != 0)
+ SET_BINARY(fileno(f)) ;
+ }
+ else {
+ (void)sprintf(errbuf,"Secure mode is %d so execute <%s> will not run", secure,s) ;
+ }
+#ifdef OS2
+ }
+#endif
+#endif
+ break;
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+ default:
+ f = search(headerpath, s, READBIN) ;
+ if(cur_header && (cur_header->precode || cur_header->postcode)) {
+ if(f==NULL)
+ f = search(figpath, s, READBIN) ;
+ }
+ (void)sprintf(errbuf, "! Could not find header file %s", s) ;
+ break ;
+ }
+ if (f==NULL)
+ error(errbuf) ;
+ else {
+ if (! quiet) {
+ if (strlen(s) + prettycolumn > STDOUTSIZE) {
+ fprintf(stderr, "\n") ;
+ prettycolumn = 0 ;
+ }
+#ifdef VMCMS
+ (void)fprintf(stderr, "<%s>", trunc_s) ;
+#else
+#ifdef MVSXA
+ (void)fprintf(stderr, "<%s>", trunc_s) ;
+#else
+ (void)fprintf(stderr, "<%s>", s) ;
+#endif
+#endif
+ (void)fflush(stderr) ;
+ prettycolumn += 2 + strlen(s) ;
+ }
+ if (linepos != 0)
+ (void)putc('\n', bitfile) ;
+/*
+ * Suggested by Andrew Trevorrow; don't ever BeginFont a file ending in .enc
+ */
+ if (infont && strstr(s,".enc"))
+ infont = 0 ;
+ if (! disablecomments) {
+ if (infigure)
+ (void)fprintf(bitfile, "%%%%BeginDocument: %s\n", s) ;
+ else if (infont)
+ (void)fprintf(bitfile, "%%%%BeginFont: %s\n", infont) ;
+#ifdef HPS
+ else if (noprocset) {}
+#endif
+ else
+ (void)fprintf(bitfile, "%%%%BeginProcSet: %s 0 0\n", s) ;
+ }
+ if (cur_header && cur_header->precode) {
+ (void)fprintf(bitfile, "%s\n", cur_header->precode) ;
+ free(cur_header->precode) ;
+ }
+ c = getc(f) ;
+ if (c == 0x80) {
+ while (1) {
+ c = getc(f) ;
+ switch(c) {
+case 1:
+case 2:
+ len = getc(f) ;
+ len += getc(f) * 256L ;
+ len += getc(f) * 65536L ;
+ len += getc(f) * 256L * 65536 ;
+ if (c == 1) {
+ while (len > 0) {
+ c = getc(f) ;
+ if (c == EOF) {
+ error("premature EOF in MS-DOS font file") ;
+ len = 0 ;
+ } else {
+ if (c == '\r') { /* Mac- or DOS-style text file */
+ (void)putc('\n', bitfile) ;
+ if ((c = getc(f)) == '\n') /* DOS-style text */
+ len--; /* consume, but don't generate NL */
+ else
+ ungetc(c, f);
+ }
+ else
+ (void)putc(c, bitfile) ;
+ len-- ;
+ }
+ }
+ } else {
+ putc('\n', bitfile) ;
+ prevc = 0 ;
+ while (len > 0) {
+ c = getc(f) ;
+ if (c == EOF) {
+ error("premature EOF in MS-DOS font file") ;
+ len = 0 ;
+ } else {
+ (void)putc(hxdata[c >> 4], bitfile) ;
+ (void)putc(hxdata[c & 15], bitfile) ;
+ len-- ;
+ prevc += 2 ;
+ if (prevc >= 76) {
+ putc('\n', bitfile) ;
+ prevc = 0 ;
+ }
+ }
+ }
+ }
+ break ;
+case 3:
+ goto msdosdone ;
+default:
+ error("saw type other than 1, 2, or 3 in MS-DOS font file") ;
+ break ;
+ }
+ c = getc(f) ;
+ if (c == EOF)
+ break ;
+ if (c != 0x80) {
+ error("saw non-MSDOS header in MSDOS font file") ;
+ break ;
+ }
+ }
+msdosdone:
+ prevc = 0 ;
+ } else {
+/* begin DOS EPS code */
+ if (c == 'E'+0x80) {
+ if ((getc(f)=='P'+0x80) && (getc(f)=='S'+0x80)
+ && (getc(f)=='F'+0x80)) {
+ doseps = 1;
+ dosepsbegin = getc(f) ;
+ dosepsbegin += getc(f) * 256L ;
+ dosepsbegin += getc(f) * 65536L ;
+ dosepsbegin += getc(f) * 256L * 65536 ;
+ dosepsend = getc(f) ;
+ dosepsend += getc(f) * 256L ;
+ dosepsend += getc(f) * 65536L ;
+ dosepsend += getc(f) * 256L * 65536 ;
+ fseek(f, dosepsbegin, 0);
+ c = getc(f);
+ dosepsend-- ;
+ }
+ else {
+ rewind(f);
+ c = getc(f);
+ }
+ }
+/* end DOS EPS code */
+ if (c != EOF) {
+ while (1) {
+ if (c == '\n') { /* end or beginning of line; check DSC */
+ *dscLinePointer = 0 ; /* make sure we terminate!
+ * might be a new empty line! */
+ if (strncmp(possibleDSCLine, "%%BeginBinary:", 14) == 0 ||
+ strncmp(possibleDSCLine, "%%BeginData:", 12) == 0) {
+ integer size = 0 ;
+ char *p = possibleDSCLine ;
+ *dscLinePointer = 0 ;
+ *dscLineEnd = 0 ;
+ if (scanForEnd == 0 && removecomments)
+ (void)fputs(possibleDSCLine, bitfile) ;
+ scanForEnd = 0 ;
+ while (*p != ':')
+ p++ ;
+ p++ ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if ('0' > *p || *p > '9') {
+ /*
+ * No byte count! We need to scan for end binary
+ * or end data, and hope we get it right. Really
+ * the file is malformed.
+ */
+ scanForEnd = "Yes" ;
+ }
+ while ('0' <= *p && *p <= '9') {
+ size = size * 10 + *p - '0' ;
+ p++ ;
+ }
+ while (*p && *p <= ' ')
+ p++ ;
+ if (*p == 'h' || *p == 'H')
+ /*
+ * Illustrator 8 and 9 have bogus byte counts
+ * for hex data. But if it is hex, we assume
+ * that it is safe to use ASCII scanning, so
+ * we do so.
+ */
+ scanForEnd = "Yes" ;
+ while (*p > ' ') /* ignore Hex/Binary/ASCII */
+ p++ ;
+ while (*p && *p <= ' ')
+ p++ ;
+ (void)putc(c, bitfile) ;
+ if (c == '\r') { /* maybe we have a DOS-style text file */
+ c = getc(f);
+ if (c == '\n') {
+ (void)putc(c, bitfile);
+ dosepsend-- ;
+ } else
+ ungetc(c, f);
+ }
+ if (scanForEnd != 0) {
+ if (strncmp(possibleDSCLine, "%%BeginBinary", 13) == 0)
+ scanForEnd = "%%EndBinary" ;
+ else
+ scanForEnd = "%%EndData" ;
+ }
+ if (scanForEnd == 0) {
+ if (strncmp(p, "lines", 5) != 0 &&
+ strncmp(p, "Lines", 5) != 0) {
+ for (; size>0; size--) {
+ c = getc(f) ;
+ dosepsend-- ;
+ if (c == EOF)
+ error(
+ "! premature end of file in binary section") ;
+ (void)putc(c, bitfile) ;
+ }
+ } else {
+ /*
+ * Count both newlines and returns, and when either
+ * goes over the count, we are done.
+ */
+ int newlines=0, returns=0 ;
+ while (newlines < size && returns < size) {
+ c = getc(f) ;
+ dosepsend-- ;
+ if (c == EOF)
+ error(
+ "! premature end of file in binary section") ;
+ (void)putc(c, bitfile) ;
+ if (c == '\n')
+ newlines++ ;
+ else if (c == '\r')
+ returns++ ;
+ }
+ /*
+ * If we've seen precisely one too few newlines,
+ * and the next char is a newline, include it too.
+ */
+ if (returns == newlines + 1) {
+ if ((c = getc(f)) == '\n') {
+ putc(c, bitfile) ;
+ dosepsend-- ;
+ } else {
+ ungetc(c, f);
+ }
+ }
+ }
+ c = getc(f) ;
+ dosepsend-- ;
+ if (c == '\n' || c == '\r') {
+ (void)putc(c, bitfile) ;
+ if (c == '\r') { /* DOS-style text file? */
+ c = getc(f);
+ dosepsend-- ;
+ if (c == '\n') {
+ putc(c, bitfile);
+ c = getc(f);
+ dosepsend-- ;
+ }
+ } else {
+ c = getc(f) ;
+ dosepsend-- ;
+ }
+ }
+ if (c != '%') {
+ /* try to find %%EndBinary or %%EndData anywhere
+ in the rest of the file, and pretend it
+ worked; this works around various Illustrator
+ bugs. -tgr, 14 June 2003 */
+ char *m1 = "%%EndData" ;
+ char *m2 = "%%EndBinary" ;
+ char *p1 = m1 ;
+ char *p2 = m2 ;
+ error(
+ " expected to see %%EndBinary at end of data; struggling on") ;
+ while (1) {
+ (void)putc(c, bitfile) ;
+ if (c == '\r' || c == '\n') {
+ if (c == '\r') { /* DOS-style text file? */
+ c = getc(f);
+ if (c != '\n')
+ ungetc(c, f);
+ else
+ dosepsend-- ;
+ }
+ break ;
+ }
+ c = getc(f) ;
+ dosepsend-- ;
+ if (c == EOF)
+ error(
+ "! premature end of file in binary section") ;
+ /*
+ * By the way, this code can be fooled by things like %%%EndBinary
+ * or even %%EndBi%%EndBinary, but this isn't valid DSC anyway.
+ * This comment is mainly here to prevent anyone else from emulating
+ * this code when doing stream-based substring matching.
+ */
+ if (c == *p1) {
+ p1++ ;
+ if (*p1 == 0)
+ break ;
+ } else {
+ p1 = m1 ;
+ }
+ if (c == *p2) {
+ p2++ ;
+ if (*p2 == 0)
+ break ;
+ } else {
+ p2 = m2 ;
+ }
+ }
+ }
+ while (1) {
+ (void)putc(c, bitfile) ;
+ if (c == '\r' || c == '\n') {
+ if (c == '\r') { /* DOS-style text file? */
+ c = getc(f);
+ if (c != '\n')
+ ungetc(c, f);
+ else
+ dosepsend-- ;
+ }
+ break ;
+ }
+ c = getc(f) ;
+ dosepsend-- ;
+ if (c == EOF)
+ error(
+ "! premature end of file in binary section") ;
+ }
+ c = getc(f) ;
+ dosepsend-- ;
+ }
+ } else if (scanForEnd && strncmp(possibleDSCLine, scanForEnd,
+ strlen(scanForEnd))==0) {
+ scanForEnd = 0 ;
+ }
+ dscLinePointer = possibleDSCLine ;
+ } else if (dscLinePointer < dscLineEnd) {
+ *dscLinePointer++ = c ;
+ if (removecomments && scanForEnd == 0 &&
+ c == '%' && dscLinePointer == possibleDSCLine + 1) {
+ /* % is first char */
+ c = getc(f) ;
+ if (c == '%' || c == '!')
+ removingBytes = 1 ;
+ if (c != EOF)
+ ungetc(c, f) ;
+ c = '%' ;
+ }
+ }
+#ifdef VMCMS
+ if (c != 0x37 ) {
+#else
+#ifdef MVSXA
+ if (c != 0x37 ) {
+#else
+ if (c != 4) {
+#endif
+#endif
+ if (!removingBytes)
+ (void)putc(c, bitfile) ;
+ }
+ prevc = c ;
+/* begin DOS EPS code */
+ if (doseps && (dosepsend <= 0))
+ break; /* stop at end of DOS EPS PostScript section */
+/* end DOS EPS code */
+ c = getc(f) ;
+ dosepsend-- ;
+ if (c == EOF)
+ break ;
+ else if (c == '\r') {
+ c = getc(f);
+ if (c == '\n') { /* DOS-style text file? */
+ if (!removingBytes) (void)putc('\r', bitfile);
+ dosepsend-- ;
+ } else
+ ungetc(c, f);
+ c = '\n' ;
+ }
+ if (prevc == '\n')
+ removingBytes = 0 ;
+ }
+ }
+ }
+ if (prevc != '\n')
+ (void)putc('\n', bitfile) ;
+ linepos = 0 ;
+#ifndef VMCMS
+#ifndef MVSXA
+#ifndef VMS
+#if !defined(MSDOS) || defined(__DJGPP__)
+#ifndef ATARIST
+#ifndef __THINK__
+ if (infigure == 2)
+#ifdef OS2
+ {
+ if (_osmode == OS2_MODE)
+ (void)pclose(f) ;
+ }
+#else
+ (void)pclose(f) ;
+#endif
+ else
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+ (void)fclose(f) ;
+ if (cur_header && cur_header->postcode) {
+ (void)fprintf(bitfile, "\n%s", cur_header->postcode) ;
+ free(cur_header->postcode) ;
+ }
+ if (!disablecomments) {
+ if (infigure)
+ (void)fprintf(bitfile, "\n%%%%EndDocument\n") ;
+ else if (infont)
+ (void)fprintf(bitfile, "\n%%%%EndFont\n") ;
+#ifdef HPS
+ else if (noprocset) {}
+#endif
+ else
+ (void)fprintf(bitfile, "\n%%%%EndProcSet\n") ;
+ }
+ }
+}
+
+void
+copyfile P1C(char *, s)
+{
+ copyfile_general(s, NULL) ;
+}
+
+/*
+ * For included PostScript graphics, we use the above routine, but
+ * with no fatal error message.
+ */
+void figcopyfile P2C(char *, s, int, systemtype)
+{
+ infigure = systemtype ? 2 : 1 ;
+ copyfile(s) ;
+ infigure = 0 ;
+}
+/*
+ * This next routine writes out a `special' character. In this case,
+ * we simply put it out, since any special character terminates the
+ * preceding token.
+ */
+void
+specialout P1C(char, c)
+{
+ if (linepos >= LINELENGTH) {
+ (void)putc('\n', bitfile) ;
+ linepos = 0 ;
+ }
+ (void)putc(c, bitfile) ;
+ linepos++ ;
+ lastspecial = 1 ;
+}
+
+void
+stringend P1H(void)
+{
+ if (linepos + instring >= LINELENGTH - 2) {
+ (void)putc('\n', bitfile) ;
+ linepos = 0 ;
+ }
+ (void)putc('(', bitfile) ;
+ *strbp = 0 ;
+ (void)fputs(strbuffer, bitfile) ;
+ (void)putc(')', bitfile) ;
+ linepos += instring + 2 ;
+ lastspecial = 1 ;
+ instring = 0 ;
+ strbp = strbuffer ;
+}
+
+#ifdef SHIFTLOWCHARS
+/*
+ * moving chars 0-32 and 127 to higher positions
+ * is desirable when using some fonts
+ */
+int T1Char P1C(int, c)
+{
+ int tmpchr = c;
+ if (shiftlowchars && curfnt->resfont) {
+ if ((tmpchr <= 0x20)&&(tmpchr>=0)) {
+ if (tmpchr < 0x0A) {
+ tmpchr += 0xA1;
+ }
+ else {
+ tmpchr += 0xA3;
+ }
+ }
+ else if (tmpchr == 0x7F) {
+ tmpchr = 0xC4;
+ }
+ }
+ if (curfnt->chardesc[tmpchr].flags2 & EXISTS)
+ tmpchr = c ;
+ return tmpchr;
+}
+#endif
+
+void
+scout P1C(unsigned char, c) /* string character out */
+{
+/*
+ * Is there room in the buffer? LINELENGTH-6 is used because we
+ * need room for (, ), and a possible four-byte string \000, for
+ * instance. If it is too long, we send out the string.
+ */
+ if (instring > LINELENGTH-6) {
+ stringend() ;
+ chrcmd('p') ;
+ }
+#ifdef SHIFTLOWCHARS
+ c=T1Char(c);
+#endif
+/* changed next line to hex representation for VMCMS port
+ if (c<' ' || c > 126 || c=='%' ) {
+*/
+ if ( c<0x20 || c>= 0x7F || c==0x25 ) {
+ *strbp++ = '\\' ;
+ *strbp++ = '0' + ((c >> 6) & 3) ;
+ *strbp++ = '0' + ((c >> 3) & 7) ;
+ *strbp++ = '0' + (c & 7) ;
+ instring += 4 ;
+ } else {
+#ifdef VMCMS
+ c = ascii2ebcdic[c];
+#else
+#ifdef MVSXA
+ c = ascii2ebcdic[c];
+#endif
+#endif
+ if (c == '(' || c == ')' || c == '\\') {
+ *strbp++ = '\\' ;
+ *strbp++ = c ;
+ instring += 2 ;
+ } else {
+ *strbp++ = c ;
+ instring++ ;
+ }
+ }
+}
+
+void
+scout2 P1C(int, c)
+{
+ char s[64] ;
+
+ sprintf(s, "<%04x>p", c) ;
+ cmdout(s) ;
+}
+
+void
+cmdout P1C(char *, s)
+{
+ int l ;
+
+ /* hack added by dorab */
+ if (instring) {
+ stringend();
+ chrcmd('p');
+ }
+ l = strlen(s) ;
+ if ((! lastspecial && linepos >= LINELENGTH - 20) ||
+ linepos + l >= LINELENGTH) {
+ (void)putc('\n', bitfile) ;
+ linepos = 0 ;
+ lastspecial = 1 ;
+ } else if (! lastspecial) {
+ (void)putc(' ', bitfile) ;
+ linepos++ ;
+ }
+ (void)fputs(s, bitfile) ;
+ linepos += l ;
+ lastspecial = 0 ;
+}
+
+
+static void
+chrcmd P1C(char, c)
+{
+ if ((! lastspecial && linepos >= LINELENGTH - 20) ||
+ linepos + 2 > LINELENGTH) {
+ (void)putc('\n', bitfile) ;
+ linepos = 0 ;
+ lastspecial = 1 ;
+ } else if (! lastspecial) {
+ (void)putc(' ', bitfile) ;
+ linepos++ ;
+ }
+ (void)putc(c, bitfile) ;
+ linepos++ ;
+ lastspecial = 0 ;
+}
+
+void
+floatout P1C(float, n)
+{
+ char buf[20] ;
+
+ (void)sprintf(buf, "%.2f", n) ;
+ cmdout(buf) ;
+}
+
+void doubleout P1C(double, n)
+{
+ char buf[40] ;
+
+ (void)sprintf(buf, "%g", n) ;
+ cmdout(buf) ;
+}
+
+void
+numout P1C(integer, n)
+{
+ char buf[10] ;
+
+#ifdef SHORTINT
+ (void)sprintf(buf, "%ld", n) ;
+#else
+ (void)sprintf(buf, "%d", n) ;
+#endif
+ cmdout(buf) ;
+}
+
+void
+mhexout P2C(register unsigned char *, p,
+ register long, len)
+{
+ register char *hexchar = hxdata ;
+ register int n, k ;
+
+ while (len > 0) {
+ if (linepos > LINELENGTH - 2) {
+ (void)putc('\n', bitfile) ;
+ linepos = 0 ;
+ }
+ k = (LINELENGTH - linepos) >> 1 ;
+ if (k > len)
+ k = len ;
+ len -= k ;
+ linepos += (k << 1) ;
+ while (k--) {
+ n = *p++ ;
+ (void)putc(hexchar[n >> 4], bitfile) ;
+ (void)putc(hexchar[n & 15], bitfile) ;
+ }
+ }
+}
+
+void
+fontout P1C(int, n)
+{
+ char buf[6] ;
+
+ if (instring) {
+ stringend() ;
+ chrcmd('p') ;
+ }
+ makepsname(buf, n) ;
+ cmdout(buf) ;
+}
+
+void
+hvpos P1H(void)
+{
+ if (rvv != vv) {
+ if (instring) {
+ stringend() ;
+ numout(hh) ;
+ numout(vv) ;
+ chrcmd('y') ;
+ } else if (rhh != hh) {
+ numout(hh) ;
+ numout(vv) ;
+ chrcmd('a') ;
+ } else { /* hard to get this case, but it's there when you need it! */
+ numout(vv - rvv) ;
+ chrcmd('x') ;
+ }
+ rvv = vv ;
+ } else if (rhh != hh) {
+ if (instring) {
+ stringend() ;
+ if (hh - rhh < 5 && rhh - hh < 5) {
+#ifdef VMCMS /* should replace 'p' in non-VMCMS line as well */
+ chrcmd(ascii2ebcdic[(char)(112 + hh - rhh)]) ;
+#else
+#ifdef MVSXA /* should replace 'p' in non-MVSXA line as well */
+ chrcmd(ascii2ebcdic[(char)(112 + hh - rhh)]) ;
+#else
+ chrcmd((char)('p' + hh - rhh)) ;
+#endif
+#endif
+ } else if (hh - rhh < d + 5 && rhh - hh < 5 - d) {
+#ifdef VMCMS /* should replace 'g' in non-VMCMS line as well */
+ chrcmd(ascii2ebcdic[(char)(103 + hh - rhh - d)]) ;
+#else
+#ifdef MVSXA /* should replace 'g' in non-MVSXA line as well */
+ chrcmd(ascii2ebcdic[(char)(103 + hh - rhh - d)]) ;
+#else
+ chrcmd((char)('g' + hh - rhh - d)) ;
+#endif
+#endif
+ d = hh - rhh ;
+ } else {
+ numout(hh - rhh) ;
+ chrcmd('b') ;
+ d = hh - rhh ;
+ }
+ } else {
+ numout(hh - rhh) ;
+ chrcmd('w') ;
+ }
+ }
+ rhh = hh ;
+}
+
+/*
+ * initprinter opens the bitfile and writes the initialization sequence
+ * to it.
+ */
+void newline P1H(void)
+{
+ if (linepos != 0) {
+ (void)fprintf(bitfile, "\n") ;
+ linepos = 0 ;
+ }
+ lastspecial = 1 ;
+}
+
+void
+nlcmdout P1C(char *, s)
+{
+ newline() ;
+ cmdout(s) ;
+ newline() ;
+}
+/*
+ * Is the dimension close enough for a match? We use a quarter inch
+ * as a match; this is 65536*72.27/4 or 1,184,072 scaled points.
+ */
+static int indelta P1C(integer, i)
+{
+ if (i < 0)
+ i = -i ;
+ return (i <= 1184072) ;
+}
+/*
+ * A case-irrelevant string compare.
+ */
+int mlower P1C(int, c)
+{
+ if ('A' <= c && c <= 'Z')
+ return c - 'A' + 'a' ;
+ else
+ return c ;
+}
+int ncstrcmp P2C(char *, a, char *, b)
+{
+ while (*a && (*a == *b ||
+ mlower(*a) == mlower(*b)))
+ a++, b++ ;
+ if (*a == 0 && *b == 0)
+ return 0 ;
+ else
+ return 1 ;
+}
+/*
+ * Find the paper size.
+ */
+void findpapersize P1H(void) {
+ if (finpapsiz == 0) {
+ struct papsiz *ps ;
+
+ if (tryepsf && !landscape) {
+ finpapsiz = &defpapsiz ;
+ hpapersize = defpapsiz.xsize ;
+ vpapersize = defpapsiz.ysize ;
+ return ;
+ }
+ if (cropmarks) {
+/*
+ * If user wanted crop marks, we increase the size of the page by
+ * a half inch all around.
+ */
+ if (hpapersize == 0 || vpapersize == 0) {
+ error(
+ "warning: -k crop marks wanted, but no paper size specified; using default") ;
+ if (landscape) {
+ hpapersize = defpapsiz.ysize ;
+ vpapersize = defpapsiz.xsize ;
+ } else {
+ hpapersize = defpapsiz.xsize ;
+ vpapersize = defpapsiz.ysize ;
+ }
+ }
+ hpapersize += 2368143L ;
+ vpapersize += 2368143L ;
+ add_header(CROPHEADER) ;
+ }
+ if (paperfmt && *paperfmt) {
+ for (ps = papsizes; ps; ps = ps->next)
+ if (ncstrcmp(paperfmt, ps->name)==0)
+ finpapsiz = ps ;
+ if (finpapsiz == 0)
+ error("no match for papersize") ;
+ }
+ if (finpapsiz == 0 && hpapersize > 0 && vpapersize > 0) {
+ for (ps=papsizes; ps; ps = ps->next) {
+ if (indelta(ps->xsize-hpapersize) &&
+ indelta(ps->ysize-vpapersize)) {
+ landscape = 0 ;
+ break ;
+ }
+ }
+ if (ps == 0) {
+ for (ps=papsizes; ps; ps = ps->next) {
+ if (indelta(ps->ysize-hpapersize) &&
+ indelta(ps->xsize-vpapersize)) {
+ landscape = 1 ;
+ break ;
+ }
+ }
+ if (ps == 0) {
+ for (ps=papsizes; ps; ps = ps->next) {
+ if (ps->ysize == 0 && ps->xsize == 0)
+ break ;
+ }
+ if (ps == 0) {
+ landscape = (hpapersize > vpapersize) ;
+ error(
+ "no match for special paper size found; using default") ;
+ }
+ }
+ }
+ finpapsiz = ps ;
+ }
+ if (finpapsiz == 0) {
+ if (papsizes)
+ finpapsiz = papsizes ;
+ else
+ finpapsiz = &defpapsiz ;
+/*
+ * But change xsize/ysize to match so bounding box works.
+ */
+ if (hpapersize && vpapersize) {
+ if (landscape) {
+ finpapsiz->ysize = hpapersize ;
+ finpapsiz->xsize = vpapersize ;
+ } else {
+ finpapsiz->xsize = hpapersize ;
+ finpapsiz->ysize = vpapersize ;
+ }
+ }
+ }
+/*
+ * Here, there was no papersize special. We set the paper size from
+ * the selected paper format. If the selected paper format has no
+ * sizes, we use the defaults.
+ */
+ if (hpapersize == 0 || vpapersize == 0) {
+ if (finpapsiz->xsize == 0 || finpapsiz->ysize == 0) {
+ finpapsiz->xsize = defpapsiz.xsize ;
+ finpapsiz->ysize = defpapsiz.ysize ;
+ }
+ if (landscape) {
+ vpapersize = finpapsiz->xsize ;
+ hpapersize = finpapsiz->ysize ;
+ } else {
+ hpapersize = finpapsiz->xsize ;
+ vpapersize = finpapsiz->ysize ;
+ }
+/*
+ * Here, there was a papersize special, but the selected paper
+ * format has 0 0 for sizes. We set the sizes here so that the
+ * bounding box works.
+ */
+ } else if (finpapsiz->xsize == 0 || finpapsiz->ysize == 0) {
+ finpapsiz->xsize = hpapersize ;
+ finpapsiz->ysize = vpapersize ;
+/*
+ * Here, the user specified a size with -t, and there was a
+ * papersize special, and its sizes were greater than zero.
+ * We make sure the sizes are okay. Note that the user must have
+ * specified landscape if this is desired.
+ */
+ } else if (paperfmt && *paperfmt) {
+ if (landscape) {
+ if (!indelta(vpapersize - finpapsiz->xsize) ||
+ !indelta(hpapersize - finpapsiz->ysize)) {
+ if (vpapersize > finpapsiz->xsize ||
+ hpapersize > finpapsiz->ysize)
+ error("warning: -t selected paper may be too small") ;
+ else
+ error("note: -t selected paper may be too large") ;
+ }
+ } else {
+ if (!indelta(hpapersize - finpapsiz->xsize) ||
+ !indelta(vpapersize - finpapsiz->ysize)) {
+ if (hpapersize > finpapsiz->xsize ||
+ vpapersize > finpapsiz->ysize)
+ error("warning: -t selected paper may be too small") ;
+ else
+ error("note: -t selected paper may be too large") ;
+ }
+ }
+ }
+ }
+}
+/*
+ * Convert scaled points to PostScript points. This is the same
+ * as return (i * 72 / (65536 * 72.27)), which is the same as
+ * dividing by 65781.76, but we want to round up.
+ */
+static int topoints P1C(integer, i)
+{
+ i += 65780L ;
+ return (i / 6578176L)*100 + (i % 6578176) * 100 / 6578176 ;
+}
+/*
+ * Send out the special paper stuff. If `hed' is non-zero, only
+ * send out lines starting with `!' else send all other lines out.
+ */
+void paperspec P2C(char *, s, int, hed)
+{
+ int sendit ;
+
+ while (*s) {
+ s++ ;
+ if (*s == '\0')
+ return ;
+ if (*s == '!') {
+ s++ ;
+ while (*s == ' ') s++ ;
+ sendit = hed ;
+ } else
+ sendit = ! hed ;
+ if (sendit) {
+ while (*s && *s != '\n')
+ (void)putc(*s++, bitfile) ;
+ putc('\n', bitfile) ;
+ } else {
+ while (*s && *s != '\n')
+ s++ ;
+ }
+ }
+}
+char *epsftest P1C(integer, bop)
+{
+ if (tryepsf && paperfmt == 0 && *iname) {
+ findbb(bop+44) ;
+ return nextstring ;
+ }
+ return 0 ;
+}
+static char *isepsf = 0 ;
+static int endprologsent ;
+void open_output P1H(void) {
+ FILE * pf = NULL;
+ if (*oname != 0) {
+/*
+ * We check to see if the first character is a exclamation
+ * point, and popen if so.
+ */
+ if (*oname == '!' || *oname == '|') {
+#if defined (MSDOS) && !defined (__DJGPP__)
+ error("! can't open output pipe") ;
+#else
+#ifdef VMS
+ error("! can't open output pipe") ;
+#else
+#ifdef VMCMS
+ error("! can't open output pipe") ;
+#else
+#ifdef MVSXA
+ error("! can't open output pipe") ;
+#else
+#ifdef __THINK__
+ error("! can't open output pipe") ;
+#else
+#ifdef ATARIST
+ error("! can't open output pipe") ;
+#else
+#ifdef OS2
+ if (_osmode != OS2_MODE) {
+ error("! can't open output pipe") ;
+ } else {
+#endif
+#ifdef __DJGPP__
+ /* Feature: if they pipe to "lpr" and there's no executable by
+ that name anywhere in sight, write to local printer instead.
+
+ We do this up front, before even trying to popen, because on
+ MS-DOS popen always succeeds for writing (it only opens a
+ temporary file), and by the time we get to actually run the
+ (possibly nonexistent) program in pclose, it's too late to
+ fall back.
+
+ We don't use kpathsea functions here because they don't
+ know about DOS-specific executable extensions, while we
+ want to be able to find "lpr.exe", "lpr.com", "lpr.bat" etc. */
+ extern char *__dosexec_find_on_path(const char *,
+ char **, char *) ;
+ extern char **environ ;
+ char *p = oname + 1 ;
+ char found[FILENAME_MAX] ;
+
+ while (ISSPACE(*p))
+ p++ ;
+ if (strncmp(p, "lpr", 3) == 0 && (ISSPACE(p[3]) || p[3] == '\0')
+ && !__dosexec_find_on_path(oname+1, (char **)0, found)
+ && !__dosexec_find_on_path(oname+1, environ, found))
+ pf = fopen("PRN", "w") ;
+#endif
+ if (pf == NULL && (pf = popen(oname+1, "w")) != NULL)
+ popened = 1;
+ if (pf == NULL)
+ error("! couldn't open output pipe") ;
+ bitfile = pf;
+#ifdef OS2
+ }
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+ } else {
+ if ((bitfile=fopen(oname,"w"))==NULL)
+ error("! couldn't open PostScript file") ;
+ }
+ } else {
+ bitfile = stdout ;
+ }
+
+ /* Even PostScript output may include binary characters, so switch
+ bitfile to binary mode. */
+ if (O_BINARY && !isatty(fileno(bitfile)))
+ SET_BINARY(fileno(bitfile)) ;
+}
+void
+initprinter P1C(sectiontype *, sect)
+{
+ void tell_needed_fonts() ;
+ int n = sect->numpages * pagecopies * collatedcopies ;
+#ifdef HPS
+ if (!HPS_FLAG)
+#endif
+ open_output() ;
+
+ findpapersize() ;
+ if (disablecomments) {
+ (void)fprintf(bitfile,
+ "%%!PS (but not EPSF; comments have been disabled)\n") ;
+ (void)fprintf(stderr, "Warning: no %%%%Page comments generated.\n") ;
+ } else {
+ if (multiplesects) {
+ (void)fprintf(bitfile,
+ "%%!PS (but not EPSF because of memory limits)\n") ;
+ (void)fprintf(stderr, "Warning: no %%%%Page comments generated.\n") ;
+ } else {
+ isepsf = epsftest(sect->bos) ;
+ if (isepsf)
+ (void)fprintf(bitfile, "%%!PS-Adobe-2.0 EPSF-2.0\n") ;
+ else
+ (void)fprintf(bitfile, "%%!PS-Adobe-2.0\n") ;
+ }
+ if (tryepsf && isepsf == 0)
+ error("We tried, but couldn't make it EPSF.") ;
+ (void)fprintf(bitfile, "%%%%Creator: %s\n", banner + 8) ;
+ if (*iname)
+ (void)fprintf(bitfile, "%%%%Title: %s\n", iname) ;
+#ifdef CREATIONDATE
+ jobtime=time(0);
+ (void)fprintf(bitfile, "%%%%CreationDate: %s",
+ asctime(localtime(&jobtime))) ;
+#endif
+ if (! isepsf) {
+/*
+ * Normally, we wouldn't want to add that second field
+ * indicating that the page order is reversed, as per page
+ * 644 of the Red book. But we have to, for many existing
+ * spoolers.
+ */
+ (void)fprintf(bitfile, "%%%%Pages: %d%s\n", (sepfiles ? n : totalpages),
+ (reverse?" -1":"")) ;
+ (void)fprintf(bitfile, "%%%%PageOrder: %sscend\n", reverse?"De":"A");
+ }
+ if (landscape) {
+ fprintf(bitfile, "%%%%Orientation: Landscape\n") ;
+ fprintf(bitfile, "%%%%BoundingBox: 0 0 %d %d\n",
+ topoints(finpapsiz->xsize), topoints(finpapsiz->ysize)) ;
+ } else if (isepsf)
+ fprintf(bitfile, "%%%%BoundingBox: %s\n", isepsf) ;
+ else
+ fprintf(bitfile, "%%%%BoundingBox: 0 0 %d %d\n",
+ topoints(finpapsiz->xsize), topoints(finpapsiz->ysize)) ;
+ tell_needed_fonts() ;
+ paperspec(finpapsiz->specdat, 1) ;
+ (void)fprintf(bitfile, "%%%%EndComments\n") ;
+ }
+ {
+ int i, len ;
+ char *p ;
+
+/*
+ * Here, too, we have to be careful not to exceed the line length
+ * limitation, if possible.
+ */
+ (void)fprintf(bitfile, "%%DVIPSWebPage: %s\n", banner2) ;
+ (void)fprintf(bitfile, "%%DVIPSCommandLine:") ;
+ len = 18 ;
+ for (i=0; i<gargc; i++) {
+ p = gargv[i] ;
+ while (*p > ' ')
+ p++ ;
+ if (*p)
+ len += 2 ;
+ len += strlen(gargv[i]) + 1 ;
+ if (len > LINELENGTH) {
+ (void)fprintf(bitfile, "\n%%+") ;
+ len = strlen(gargv[i]) + 3 ;
+ if (*p)
+ len += 2 ;
+ }
+ (void)fprintf(bitfile, (*p ? " \"%s\"" : " %s"), gargv[i]) ;
+ }
+ (void)fprintf(bitfile, "\n%%DVIPSParameters: dpi=%d", actualdpi) ;
+ if (actualdpi != vactualdpi)
+ (void)fprintf(bitfile, "x%d", vactualdpi) ;
+ if (compressed)
+ (void)fprintf(bitfile, ", compressed") ;
+ if (removecomments)
+ (void)fprintf(bitfile, ", comments removed") ;
+ (void)fputc('\n', bitfile) ;
+ }
+#ifdef VMCMS /* convert preamblecomment to ebcdic so we can read it */
+ {
+ int i ;
+ for ( i=0 ; preamblecomment[i] ; i++ )
+ preamblecomment[i] = ascii2ebcdic[preamblecomment[i]] ;
+ }
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ {
+ int i ;
+ for ( i=0 ; preamblecomment[i] ; i++ )
+ preamblecomment[i] = ascii2ebcdic[preamblecomment[i]] ;
+ }
+#endif /* VMCMS */
+#endif
+ (void)fprintf(bitfile, "%%DVIPSSource: %s\n", preamblecomment) ;
+ linepos = 0 ;
+ endprologsent = 0 ;
+ if (safetyenclose)
+ (void)fprintf(bitfile, "/SafetyEnclosure save def\n") ;
+ if (! headers_off)
+ send_headers() ;
+}
+void setup P1H(void) {
+ newline() ;
+ if (endprologsent == 0 && !disablecomments) {
+ (void)fprintf(bitfile, "%%%%EndProlog\n") ;
+ (void)fprintf(bitfile, "%%%%BeginSetup\n") ;
+ if (vactualdpi == actualdpi)
+ (void)fprintf(bitfile, "%%%%Feature: *Resolution %ddpi\n",
+ actualdpi) ;
+ else
+ (void)fprintf(bitfile, "%%%%Feature: *Resolution %dx%ddpi\n",
+ actualdpi, vactualdpi) ;
+ if (multiplesects && *(finpapsiz->specdat)) {
+ (void)fprintf(bitfile, "TeXDict begin\n") ;
+ paperspec(finpapsiz->specdat, 0) ;
+ (void)fprintf(bitfile, "end\n") ;
+ }
+ if (manualfeed)
+ (void)fprintf(bitfile, "%%%%Feature: *ManualFeed True\n") ;
+#ifdef HPS
+ if (!HPS_FLAG)
+#endif
+ if (multiplesects)
+ (void)fprintf(bitfile, "%%%%EndSetup\n") ;
+ }
+ if (multiplesects && ! disablecomments)
+ (void)fprintf(bitfile, "%%DVIPSBeginSection\n") ;
+ cmdout("TeXDict") ;
+ cmdout("begin") ;
+ if (endprologsent || disablecomments || multiplesects == 0) {
+ (void)fprintf(bitfile, "\n") ;
+ paperspec(finpapsiz->specdat, 0) ;
+ }
+ if (manualfeed) cmdout("@manualfeed") ;
+ if (landscape) cmdout("@landscape") ;
+ if (numcopies != 1) {
+ numout((integer)numcopies) ;
+ cmdout("@copies") ;
+ }
+ cmdout("end") ;
+ if (endprologsent == 0 && !disablecomments) {
+ newline() ;
+ endprologsent = 1 ;
+#ifdef HPS
+ if (!HPS_FLAG)
+#endif
+ if (! multiplesects)
+ (void)fprintf(bitfile, "%%%%EndSetup\n") ;
+ }
+#ifdef HPS
+ if (HPS_FLAG) {
+ fclose(bitfile) ;
+ set_bitfile("body.tmp",0) ;
+ }
+#endif
+}
+/*
+ * cleanprinter is the antithesis of the above routine.
+ */
+void
+cleanprinter P1H(void)
+{
+ (void)fprintf(bitfile, "\n") ;
+ (void)fprintf(bitfile, "userdict /end-hook known{end-hook}if\n") ;
+ if (safetyenclose)
+ (void)fprintf(bitfile, "SafetyEnclosure restore\n") ;
+ if (!disablecomments)
+ (void)fprintf(bitfile, "%%%%EOF\n") ;
+ if (sendcontrolD)
+ (void)putc(4, bitfile) ;
+ if (ferror(bitfile))
+ error("Problems with file writing; probably disk full.") ;
+#if !defined(MSDOS) || defined(__DJGPP__)
+#ifndef VMS
+#ifndef MVSXA
+#ifndef VMCMS
+#ifndef __THINK__
+#ifndef ATARIST
+#ifdef OS2
+ if (_osmode == OS2_MODE)
+#endif
+ if (popened)
+ (void)pclose(bitfile) ;
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+ if (popened == 0)
+ (void)fclose(bitfile) ;
+ bitfile = NULL ;
+}
+
+/* this tells dvips that it has no clue where it is. */
+static int thispage = 0 ;
+static integer rulex, ruley ;
+void psflush P1H(void) {
+ rulex = ruley = rhh = rvv = -314159265 ;
+ lastfont = -1 ;
+}
+/*
+ * pageinit initializes the output variables.
+ */
+void
+pageinit P1H(void)
+{
+ psflush() ;
+ newline() ;
+ thispage++ ;
+ if (!disablecomments)
+ if (multiplesects)
+#ifdef SHORTINT
+ (void)fprintf(bitfile, "%%DVIPSSectionPage: %ld\n", pagenum) ;
+ else if (! isepsf)
+ (void)fprintf(bitfile, "%%%%Page: %ld %d\n", pagenum, thispage) ;
+#else
+ (void)fprintf(bitfile, "%%DVIPSSectionPage: %d\n", pagenum) ;
+ else if (! isepsf)
+ (void)fprintf(bitfile, "%%%%Page: %d %d\n", pagenum, thispage) ;
+#endif
+ linepos = 0 ;
+ cmdout("TeXDict") ;
+ cmdout("begin") ;
+#ifdef HPS
+ if (HPS_FLAG) {
+ cmdout("HPSdict") ;
+ cmdout("begin") ;
+ }
+#endif
+ if (landscape) cmdout("@landscape") ;
+ numout((integer)pagenum) ;
+ numout((integer)thispage-1) ;
+ cmdout("bop") ;
+ d = 0 ;
+}
+
+
+
+/*
+ * This routine ends a page.
+ */
+void
+pageend P1H(void)
+{
+ if (instring) {
+ stringend() ;
+ chrcmd('p') ;
+ }
+ cmdout("eop") ;
+ cmdout("end") ;
+#ifdef HPS
+ if (HPS_FLAG)
+ cmdout("end") ;
+#endif
+}
+
+/*
+ * drawrule draws a rule at the specified position.
+ * It does nothing to save/restore the current position,
+ * or even draw the current string. (Rules are normally
+ * set below the baseline anyway, so this saves us on
+ * output size almost always.)
+ */
+void
+drawrule P2C(integer, rw, integer, rh)
+{
+ numout((integer)hh) ;
+ numout((integer)vv) ;
+ if (rw == rulex && rh == ruley)
+ chrcmd('V') ;
+ else {
+ numout((integer)rw) ;
+ numout((integer)rh) ;
+ chrcmd('v') ;
+ rulex = rw ;
+ ruley = rh ;
+ }
+}
+
+/*
+ * drawchar draws a character at the specified position.
+ */
+void
+drawchar P2C(chardesctype *, c, int, cc)
+{
+ hvpos() ;
+ if (lastfont != curfnt->psname) {
+ fontout((int)curfnt->psname) ;
+ lastfont = curfnt->psname ;
+ }
+ if (curfnt->codewidth==1) scout((unsigned char)cc) ;
+ else scout2(cc) ;
+ rhh = hh + c->pixelwidth ; /* rvv = rv */
+}
+/*
+ * This routine sends out the document fonts comment.
+ */
+void tell_needed_fonts P1H(void) {
+ struct header_list *hl = ps_fonts_used ;
+ char *q ;
+ int roomleft = -1 ;
+
+ if (hl == 0)
+ return ;
+ while (0 != (q=get_name(&hl))) {
+ if ((int)strlen(q) >= roomleft) {
+ if (roomleft != -1) {
+ fprintf(bitfile, "\n%%%%+") ;
+ roomleft = LINELENGTH - 3 ;
+ } else {
+ fprintf(bitfile, "%%%%DocumentFonts:") ;
+ roomleft = LINELENGTH - 16 ;
+ }
+ }
+ fprintf(bitfile, " %s", q) ;
+ roomleft -= strlen(q) + 1 ;
+ }
+ fprintf(bitfile, "\n") ;
+}
diff --git a/Build/source/texk/dvipsk/papersiz.c b/Build/source/texk/dvipsk/papersiz.c
new file mode 100644
index 00000000000..9893359cc11
--- /dev/null
+++ b/Build/source/texk/dvipsk/papersiz.c
@@ -0,0 +1,126 @@
+/*
+ * This function calculates approximately (whole + num/den) * sf.
+ * No need for real extreme accuracy; one twenty thousandth of an
+ * inch should be sufficient.
+ *
+ * No `sf' parameter means to use an old one; inches are assumed
+ * originally.
+ *
+ * Assumptions:
+ *
+ * 0 <= num < den <= 20000
+ * 0 <= whole
+ */
+#include "dvips.h"
+#include "protos.h"
+static long scale P4C(long, whole, long, num, long, den, long, sf)
+{
+ long v ;
+
+ v = whole * sf + num * (sf / den) ;
+ if (v / sf != whole || v < 0 || v > 0x40000000L)
+ error("! arithmetic overflow in parameter") ;
+ sf = sf % den ;
+ v += (sf * num * 2 + den) / (2 * den) ;
+ return(v) ;
+}
+/*
+ * Convert a sequence of digits into a long; return -1 if no digits.
+ * Advance the passed pointer as well.
+ */
+static long myatol P1C(char **, s)
+{
+ register char *p ;
+ register long result ;
+
+ result = 0 ;
+ p = *s ;
+ while ('0' <= *p && *p <= '9') {
+ if (result > 100000000)
+ error("! arithmetic overflow in parameter") ;
+ result = 10 * result + *p++ - '0' ;
+ }
+ if (p == *s) {
+#ifdef KPATHSEA
+ error(concat3 ("expected number in ", *s, ", returning 10")) ;
+#else
+ error("expected number! returning 10") ;
+#endif
+ return 10 ;
+ } else {
+ *s = p ;
+ return(result) ;
+ }
+}
+/*
+ * Get a dimension, allowing all the various extensions, and
+ * defaults. Returns a value in scaled points.
+ */
+static long scalevals[] = { 1864680L, 65536L, 786432L, 186468L,
+ 1L, 65782L, 70124L, 841489L, 4736286L } ;
+static char *scalenames = "cmptpcmmspbpddccin" ;
+long myatodim P1C(char **, s)
+{
+ register long w, num, den, sc ;
+ register char *q ;
+ char *p ;
+ int negative = 0, i ;
+
+ p = *s ;
+ if (**s == '-') {
+ p++ ;
+ negative = 1 ;
+ }
+ w = myatol(&p) ;
+ if (w < 0) {
+ error("number too large; 1000 used") ;
+ w = 1000 ;
+ }
+ num = 0 ;
+ den = 1 ;
+ if (*p == '.') {
+ p++ ;
+ while ('0' <= *p && *p <= '9') {
+ if (den <= 1000) {
+ den *= 10 ;
+ num = num * 10 + *p - '0' ;
+ } else if (den == 10000) {
+ den *= 2 ;
+ num = num * 2 + (*p - '0') / 5 ;
+ }
+ p++ ;
+ }
+ }
+ while (*p == ' ')
+ p++ ;
+ for (i=0, q=scalenames; ; i++, q += 2)
+ if (*q == 0) {
+#ifdef KPATHSEA
+ error(concat3 ("expected units in ", *s, ", assuming inches.")) ;
+#else
+ error("expected units! assuming inches.") ;
+#endif
+ sc = scalevals[8] ;
+ break ;
+ } else if (*p == *q && p[1] == q[1]) {
+ sc = scalevals[i] ;
+ p += 2 ;
+ break ;
+ }
+ w = scale(w, num, den, sc) ;
+ *s = p ;
+ return(negative?-w:w) ;
+}
+/*
+ * The routine where we handle the paper size special. We need to pass in
+ * the string after the `papersize=' specification.
+ */
+void handlepapersize P3C(char *, p, integer *, x, integer *, y)
+{
+ while (*p == ' ')
+ p++ ;
+ *x = myatodim(&p) ;
+ while (*p == ' ' || *p == ',')
+ p++ ;
+ *y = myatodim(&p) ;
+}
diff --git a/Build/source/texk/dvipsk/paths.h b/Build/source/texk/dvipsk/paths.h
new file mode 100644
index 00000000000..acf5d78becc
--- /dev/null
+++ b/Build/source/texk/dvipsk/paths.h
@@ -0,0 +1,86 @@
+/*
+ * OUTPATH is where to send the output. If you want a .ps file to
+ * be created by default, set this to "". If you want to automatically
+ * invoke a pipe (as in lpr), make the first character an exclamation
+ * point or a vertical bar, and the remainder the command line to
+ * execute.
+ */
+#define OUTPATH ""
+/* (Actually OUTPATH will be overridden by an `o' line in config.ps.) */
+/*
+ * Names of config and prologue files:
+ */
+#if defined MSDOS || defined OS2 || defined(ATARIST)
+#define DVIPSRC "dvips.ini"
+#else
+#ifdef VMCMS /* IBM: VM/CMS */
+#define DVIPSRC "dvips.profile"
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+#define DVIPSRC "dvips.profile"
+#else /* not IBM */
+#define DVIPSRC "$HOME/.dvipsrc"
+#endif
+#endif /* IBM: VM/CMS */
+#endif
+
+#define HEADERFILE "tex.pro"
+#define CHEADERFILE "texc.pro"
+#define PSFONTHEADER "texps.pro"
+#define IFONTHEADER "finclude.pro"
+#define SPECIALHEADER "special.pro"
+#define COLORHEADER "color.pro" /* IBM: color */
+#define CROPHEADER "crop.pro"
+#define PSMAPFILE "psfonts.map"
+#ifndef CONFIGFILE
+#define CONFIGFILE "config.ps"
+#endif
+#ifdef HPS
+#define HPSHEADER "hps.pro"
+#endif
+#ifndef KPATHSEA
+/* arguments to fopen */
+#define READ "r"
+
+/* directories are separated in the path by PATHSEP */
+/* DIRSEP is the char that separates directories from files */
+#ifdef __THINK__
+#define READBIN "rb" /* Macintosh OS will use binary mode */
+#define PATHSEP ',' /* use same syntax as VMS */
+#define DIRSEP ':'
+#else
+#if defined MSDOS || defined OS2 || defined(ATARIST) || defined(WIN32)
+#define READBIN "rb" /* MSDOS and OS/2 must use binary mode */
+#define PATHSEP ';'
+#define DIRSEP '\\'
+#define DEVICESEP ':'
+#else
+#ifdef VMS
+#define READBIN "rb" /* VMS must use binary mode */
+#define PATHSEP ','
+#define DIRSEP ':'
+#else
+#ifdef VMCMS /* IBM: VM/CMS */
+#define READBIN "rb" /* VMCMS must use binary mode */
+#define PATHSEP ' '
+#define DIRSEP ' '
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+#define READBIN "rb" /* MVSXA must use binary mode */
+#define PATHSEP ':'
+#define DIRSEP '.'
+#else
+#define READBIN "r" /* UNIX doesn't care */
+#define PATHSEP ':'
+#define DIRSEP '/'
+#endif /* IBM: VM/CMS */
+#endif
+#endif
+#endif
+#endif
+
+extern void error() ;
+
+/* paths are all in the Makefile; by not supplying defaults, we force
+ the installer to set them up. */
+#endif /* ! KPATHSEA */
diff --git a/Build/source/texk/dvipsk/pc/README.pc b/Build/source/texk/dvipsk/pc/README.pc
new file mode 100644
index 00000000000..3af7a60d267
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/README.pc
@@ -0,0 +1,152 @@
+Some notes on installing dvips 5.5 on MS-DOS and OS/2
+by Russell Lang <rjl@monu1.cc.monash.edu.au> 17th February 1994
+
+These notes are not by Tomas Rokicki.
+Tomas Rokicki does not use MS-DOS ( smart person :-) and so will be
+unable to answer questions about MS-DOS problems.
+
+=========
+ZIP files
+=========
+If you have ZIP files, one should contain the sources of dvips
+(same as labrea.stanford.edu:pub/dvips55?.tar.Z) and the other
+should contain dvips ready to run with the following compiled
+versions of dvips:
+ dvips.exe MS-DOS 8086
+ dvipswin.exe MS-Windows 3.1
+ dvips32.exe OS/2 32 bit or MS-DOS with EMX DOS extender
+The following may or may not be in the ZIP file.
+ dvips16.exe OS/2 16 bit and MS-DOS (MSC6).
+
+To install this in the emTeX directories on drive C:, use
+ unzip dvips55? c:\
+
+=======
+General
+=======
+If you want to use a different directory arrangement, modify the
+paths in c:\emtex\ps\config.ps. If you want to store config.ps or
+psfonts.map in a different place, either recompile dvips or use the
+environment variable TEXCONFIG.
+
+The LaTeX and TeX input files supplied with dvips (e.g. epsf.sty, epsf.tex)
+are now put in c:\emtex\texinput\dvips and not in their old location
+c:\emtex\texinput. This means that you need emTeX beta 11 and you will
+need to enable emTeX's subdirectory searching with
+set TEXINPUT=c:\emtex\texinput!
+
+The MSDOS and OS/2 versions of dvips differ from the Unix version
+described in dvips.tex in the following ways:
+- path separators are ';' not ':'
+- directory separators are '\' not '/'
+- The user's initialization file is "dvips.ini" not ".dvipsrc".
+- Printer configuration files are called <printer-name>.cfg,
+ not config.<printer-name>.
+- Pipes to printers are not supported by MS-DOS. Output must go to a file.
+ OS/2 supports pipes.
+- MakeTeXPk is a batch or command file.
+ Since MS-DOS has insufficient memory to run both dvips and metafont
+ at the same time, this batch or command file will typically write out
+ a set of commands for running metafont later.
+ The maketexp.bat supplied writes out an mfjob file for em\TeX.
+ OS/2 has more memory so the maketexp.cmd supplied writes out an
+ mfjob file for emTeX and calls mfjob.
+ The emTeX betatest mfjob 1.1l package is required.
+- To automatically make fonts under MS-DOS, use emTeX's dvidrv as follows:
+ dvidrv dvips file.dvi
+ dvidrv is part of the emTeX betatest dvidrv 1.4s package.
+ dvidrv sets an option -pj=mfjobfile for dvips, where mfjobfile
+ is the name of a temporary mfjob file.
+ If there are missing fonts, dvips will write this mfjob file
+ and then ask:
+ Exit to make missing fonts now (y/n)?
+ If you answer yes, dvips exits with errorlevel 8 which tells
+ dvidrv to call mfjob to make the fonts, and then to call dvips again.
+ For this to work, dvidrv, dvips, mfjob and mf must be located in
+ the PATH, and the environment variables for mfjob and mf set
+ correctly. A font mode must be set with the 'M' option in config.ps.
+ If the -pj option is set, dvips will not call MakeTeXPk.bat
+- limited emTeX specials. The following ones are supported:
+ \special{em:message xxx}
+ \special{em:point n}
+ \special{em:line a[h|v|p],b[h|v|p] [,width]}
+ \special{em:linewidth width}
+ \special{em:moveto}
+ \special{em:lineto}
+ \special{em:graph xxx[,width[,height]]}
+ The line cut parameters [h|v|p] of the \special{em:line ...} command
+ are ignored. Lines are ended with a rounded cap.
+ A maximum of 1613 different point numbers are permitted on each page.
+ The \special{em:graph xxx} should work with PCX, MSP1, MSP2 and
+ BMP files. Compressed BMP files have not been tested.
+ The graph file may be scaled by giving an optional width and
+ height (expressed in the same way as TeX dimensions).
+ An example: \special{em:graph scrdump.pcx,100mm,75mm}
+
+The program dvips can use emTeX font libraries created with the
+fontlib /2 option. PXL fonts within font libraries will be ignored.
+
+If you run out of memory running dvips, try using the `-Z0 -a' or
+just the `-a' command line options. If that fails, use the 32 bit
+version.
+
+=====
+Files
+=====
+This set of MSDOS and OS/2 files for dvips contains:
+README.pc This file.
+makefile.tc Makefile for Borland C++ (MS-DOS).
+makefile.emx Makefile for nmake/ndmake and emx/gcc (OS/2 and MS-DOS).
+makefile.msc Makefile for dmake and MSC6 (OS/2).
+makefile.wat Makefile for Watcom C (untested)
+makefile.wt2 Makefile for Watcom C (untested)
+config.ps config.ps modified for MSDOS and OS/2
+maketexp.bat Batch file to make tex pk files.
+maketexp.cmd OS/2 batch file to make tex pk files.
+winmain.c WinMain() routine for Windows dvips.
+dvipswin.rc Windows Resource file containing radical eye icon.
+dvipswin.def Windows defaults file.
+afm2tfm.def OS/2 16 bit defaults file.
+dvips16.def OS/2 16 bit defaults file.
+squeeze.def OS/2 16 bit defaults file.
+
+=========
+Compiling
+=========
+If you have the Unix tar file, the steps involved in making
+dvips on a PC are:
+- On Unix, in the dvips directory, give the following commands:
+ make texc.lpro
+ nroff -man dvips.1 > pc/dvips.doc
+ nroff -man afm2tfm.1 > pc/afm2tfm.doc
+- Copy dvips/* and dvips/pc/* directories to the PC.
+- copy PStfms/*.tfm to C:\EMTEX\TFM on the PC
+ (then optionally delete pst*.tfm, rpst*.tfm, pop*.tfm rpop*.tfm,
+ pad*.tfm rpad*.tfm)
+- copy PSvfs/*.vf to C:\TEXFONTS\VF on the PC
+ (then optionally delete pst*.vf, pop*.vf, pad*.vf)
+- edit dvipsmac.tex and replace the line
+ \generictrue
+ with
+ %\generictrue
+
+For Borland C++:
+- edit paths and directories in pc/makefile.tc and pc/config.ps.
+- 'make -fpc/makefile.tc'
+ Borland C++ gives a large number of 'possible incorrect assignment'
+ warnings.
+- if that works, try 'make -fpc/makefile.tc install'.
+- change to another directory (to avoid using the Unix config.ps)
+ and then try to run dvips!
+
+For emx/gcc:
+- edit paths and directories in pc/makefile.emx and pc/config.ps.
+- If using HPFS, type 'nmake -fpc\makefile.emx fixup'
+- If using ndmake under msdos, PKPATH will need to be changed to
+ using single % not %%.
+- 'nmake -f pc\makefile.emx'
+- if that works, try 'nmake -f pc\makefile.emx install'.
+- change to another directory (to avoid using the Unix config.ps)
+ and then try to run dvips32!
+- dvips32.exe will run under OS/2 and MSDOS.
+- See the EMX documentation for the EMX DOS extender.
diff --git a/Build/source/texk/dvipsk/pc/afm2tfm.def b/Build/source/texk/dvipsk/pc/afm2tfm.def
new file mode 100644
index 00000000000..6faa068fab3
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/afm2tfm.def
@@ -0,0 +1,3 @@
+NAME afm2tfm WINDOWCOMPAT NEWFILES
+DESCRIPTION 'Adobe afm -> TeX tfm converter for OS/2 and DOS'
+STACKSIZE 0x2000
diff --git a/Build/source/texk/dvipsk/pc/config.ps b/Build/source/texk/dvipsk/pc/config.ps
new file mode 100644
index 00000000000..4c1e85899dd
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/config.ps
@@ -0,0 +1,65 @@
+* Claim 180kbytes memory
+m 180000
+* Default resolution.
+D 300
+* Default metafont mode (defined in emTeX's local.mf)
+M hplaser
+* Paths (uncomment and edit if you need these)
+*T c:\emtex\tfm
+*V c:\texfonts\vf
+*P c:\texfonts\pixel.lj\%ddpi\%f.%p
+*L c:\texfonts\;lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5a;lj_5b;lj_sli
+*S .;c:\emtex\texinput
+*H .;c:\emtex\ps
+* Compress fonts
+Z
+*
+* Paper size information. First definition is the default.
+*
+* If your default is a4 uncomment the following definition
+* and comment out the letterSize definition.
+*@ a4size 210mm 297mm
+*@+ %%PaperSize: A4
+
+@ letterSize 8.5in 11in
+@+ %%PaperSize: Letter
+
+@ letter 8.5in 11in
+@+ %%BeginPaperSize: Letter
+@+ letter
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%BeginPaperSize: Legal
+@+ legal
+@+ %%EndPaperSize
+
+@ ledger 17in 11in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ ledger
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ 11x17
+@+ %%EndPaperSize
+
+@ a4 210mm 297mm
+@+ ! %%DocumentPaperSizes: A4
+@+ %%BeginPaperSize: A4
+@+ a4
+@+ %%EndPaperSize
+
+@ a3 297mm 420mm
+@+ ! %%DocumentPaperSizes: a3
+@+ %%BeginPaperSize: a3
+@+ a3
+@+ %%EndPaperSize
+
+@ unknown 0in 0in
+@+ statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
+@+ setpageparams } stopped end } { true } ifelse { statusdict /setpage known
+@+ { hsize vsize statusdict begin { setpage } stopped pop end } if } if
diff --git a/Build/source/texk/dvipsk/pc/dvips16.def b/Build/source/texk/dvipsk/pc/dvips16.def
new file mode 100644
index 00000000000..071b556abaa
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/dvips16.def
@@ -0,0 +1,3 @@
+NAME dvips WINDOWCOMPAT NEWFILES
+DESCRIPTION 'TeX DVI -> PostScript converter for OS/2 and DOS'
+STACKSIZE 0x2000
diff --git a/Build/source/texk/dvipsk/pc/dvipswin.def b/Build/source/texk/dvipsk/pc/dvipswin.def
new file mode 100644
index 00000000000..527398b08ac
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/dvipswin.def
@@ -0,0 +1,6 @@
+NAME dvips
+DESCRIPTION 'TeX DVI -> PostScript converter'
+EXETYPE WINDOWS
+CODE MOVEABLE NONDISCARDABLE PRELOAD
+DATA MULTIPLE MOVEABLE PRELOAD
+STACKSIZE 16384
diff --git a/Build/source/texk/dvipsk/pc/makefile.emx b/Build/source/texk/dvipsk/pc/makefile.emx
new file mode 100644
index 00000000000..5cd9576a7cc
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/makefile.emx
@@ -0,0 +1,373 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# First, the things that absolutely must be edited for your system.
+
+# modified for EMX-0.8g/GCC with NMAKE on OS/2 2.1.
+# by rjl@monu1.cc.monash.edu.au
+# 17th February 1994
+
+# If using HPFS you may need to type 'nmake fixup' to truncate names.
+# If using NDMAKE 4.5 under MS-DOS, PKPATH needs %% changed to %.
+# If using Borland MAKER under MS-DOS, all paths need \\ changed to \\\\.
+
+# compiler
+EMXPATH = e:/emx
+CC = gcc
+
+# All DIRs must use a single \ as a directory separator.
+# All PATHs must use \\ as a directory separator
+DRIVE = c:
+TEXDIR = $(DRIVE)\emtex
+TEXPATH = $(DRIVE)\\emtex
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# TFMPATH = $(TEXPATH)\\tfm
+TFMPATH = $(TEXPATH)\\tfm
+
+# the default path to search for PK files (usually omits `.')
+# Don't forget to add the directory that
+# MakeTeXPK puts the files! (In this case, /LocalLibrary/Fonts...)
+# PKPATH = $(DRIVE)\\texfonts\\pixel.lj\\%ddpi\\%f.%p
+PKPATH = $(DRIVE)\\texfonts\\pixel.lj\\%%ddpi\\%%f.%%p
+
+# the default path to search for VF files (usually omits `.')
+# VFPATH = $(DRIVE)\\texfonts\\vf
+VFPATH = $(DRIVE)\\texfonts\\vf
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH =
+
+# where the config files go
+# CONFIGDIR = $(TEXDIR)\ps
+CONFIGDIR = $(TEXDIR)\ps
+
+# the default path to search for config files
+# CONFIGPATH = .;$(TEXPATH)\\ps
+CONFIGPATH = .;$(TEXPATH)\\ps
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = $(TEXDIR)\ps
+HEADERDIR = $(TEXDIR)\ps
+
+# the default path to search for header files
+# HEADERPATH = .;$(TEXPATH)\\ps
+HEADERPATH = .;$(TEXPATH)\\ps
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = $(TEXDIR)\texinput
+TEXMACROPARENTDIR = $(TEXDIR)\texinput
+TEXMACRODIR = $(TEXDIR)\texinput\dvips
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .;..;$(TEXPATH)\\texinput
+FIGPATH = .;..;$(TEXPATH)\\texinput
+
+# the default path to search for emTeX font libraries
+# FLIPATH = $(DRIVE)\\texfonts
+FLIPATH = $(DRIVE)\\texfonts
+
+# the names of emTeX font libraries
+# FLINAME = lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5a;lj_5b;lj_sli
+FLINAME = lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5a;lj_5b;lj_sli
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DCREATIONDATE if your system has a working time() and you want dated files
+# If you define FONTLIB, make sure to also give definitions to
+# FLIPATH and FLINAME.
+#
+DEFS= -DTPIC -DDEBUG -DFONTLIB -DDEFRES=300
+
+OPT = -O -s
+
+LINKOPT = -lm
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+SECURE =
+
+# If you want EMTEX specials, define the following.
+EMTEX = -DEMTEX
+
+# define the c-compiler flag
+# -DOS2 for OS/2 and MS-DOS with EMX extender
+SYS = -DOS2
+
+# where the installed binary goes
+# BINDIR = c:\emtex
+BINDIR = $(TEXDIR)
+
+# where the manual page goes
+# MANDIR = c:\emtex\doc
+MANDIR = $(TEXDIR)\doc
+
+#makefile.emx sets all paths in paths.rsp
+CFLAGS = $(OPT) $(SYS) $(SECURE) $(EMTEX) $(DEFS)
+
+SRC = dospecia.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c \
+ download.c prescan.c scanpage.c skippage.c output.c scalewid.c \
+ dosectio.c dopage.c resident.c search.c unpack.c drawPS.c \
+ header.c makefont.c repack.c virtualf.c dpicheck.c finclude.c \
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecia.c
+
+OBJ = dospecia.o dviinput.o fontdef.o loadfont.o dvips.o \
+ tfmload.o download.o prescan.o scanpage.o skippage.o \
+ output.o scalewid.o dosectio.o dopage.o resident.o \
+ search.o unpack.o drawPS.o header.o makefont.o repack.o \
+ virtualf.o dpicheck.o finclude.o \
+ pprescan.o papersiz.o flib.o color.o bbox.o emspecia.o
+
+all : afm2tfm.exe dvips32.exe tex.pro texps.pro texc.pro \
+ special.pro finclude.pro color.pro crop.pro
+
+# default rules
+
+.SUFFIXES: .o .c
+
+.c.o:
+ $(CC) -c $(CFLAGS) @paths.rsp $<
+
+dvips32.exe: $(OBJ) gcclink.rsp
+ $(CC) -o dvips32 @gcclink.rsp $(LINKOPT)
+ emxbind $(EMXPATH)/bin/emx.exe dvips32 dvips32.exe -p
+
+gcclink.rsp: pc/makefile.emx
+ echo dospecia.o>gcclink.rsp
+ echo dviinput.o>>gcclink.rsp
+ echo fontdef.o>>gcclink.rsp
+ echo loadfont.o>>gcclink.rsp
+ echo dvips.o>>gcclink.rsp
+ echo tfmload.o>>gcclink.rsp
+ echo download.o>>gcclink.rsp
+ echo prescan.o>>gcclink.rsp
+ echo scanpage.o>>gcclink.rsp
+ echo skippage.o>>gcclink.rsp
+ echo output.o>>gcclink.rsp
+ echo scalewid.o>>gcclink.rsp
+ echo dosectio.o>>gcclink.rsp
+ echo dopage.o>>gcclink.rsp
+ echo resident.o>>gcclink.rsp
+ echo search.o>>gcclink.rsp
+ echo unpack.o>>gcclink.rsp
+ echo drawPS.o>>gcclink.rsp
+ echo header.o>>gcclink.rsp
+ echo makefont.o>>gcclink.rsp
+ echo repack.o>>gcclink.rsp
+ echo virtualf.o>>gcclink.rsp
+ echo dpicheck.o>>gcclink.rsp
+ echo finclude.o>>gcclink.rsp
+ echo pprescan.o>>gcclink.rsp
+ echo papersiz.o>>gcclink.rsp
+ echo flib.o>>gcclink.rsp
+ echo color.o>>gcclink.rsp
+ echo bbox.o>>gcclink.rsp
+ echo emspecia.o>>gcclink.rsp
+
+afm2tfm.exe: afm2tfm.c paths.rsp
+ $(CC) $(CFLAGS) @paths.rsp afm2tfm.c -o afm2tfm $(LINKOPT)
+ emxbind $(EMXPATH)/bin/emx.exe afm2tfm afm2tfm.exe
+
+paths.rsp: pc\makefile.emx
+ echo -I$(EMXPATH)/include> paths.rsp
+ echo -L$(EMXPATH)/lib>> paths.rsp
+ echo -funsigned-char>> paths.rsp
+ echo -DCREATIONDATE>> paths.rsp
+ echo -DTFMPATH="$(TFMPATH)">> paths.rsp
+ echo -DPKPATH="$(PKPATH)">> paths.rsp
+ echo -DVFPATH="$(VFPATH)">> paths.rsp
+ echo -DHEADERPATH="$(HEADERPATH)">> paths.rsp
+ echo -DCONFIGPATH="$(CONFIGPATH)">> paths.rsp
+ echo -DCONFIGFILE="$(CONFIGFILE)">> paths.rsp
+ echo -DFONTSUBDIRPATH="$(FONTSUBDIRPATH)">> paths.rsp
+ echo -DFIGPATH="$(FIGPATH)">> paths.rsp
+ echo -DFLIPATH="$(FLIPATH)">> paths.rsp
+ echo -DFLINAME="$(FLINAME)">> paths.rsp
+
+$(OBJ) : dvips.h debug.h paths.h paths.rsp
+
+squeeze.exe : squeeze.c paths.rsp
+ $(CC) $(CFLAGS) @paths.rsp squeeze.c -o squeeze
+ emxbind $(EMXPATH)/bin/emx.exe squeeze squeeze.exe
+
+tex.pro : tex.lpr squeeze.exe
+ squeeze tex.lpr tex.pro
+
+texc.pro: texc.lpr squeeze.exe
+ squeeze texc.lpr texc.pro
+
+texc.lpr: tex.lpr
+ @echo This does "texc.scr tex.lpro texc.lpro" on Unix
+ @echo For MSDOS or OS/2, copy tex.lpro to texc.lpr
+ @echo then edit texc.lpr to remove the code
+ @echo for uncompressed fonts and uncomment the
+ @echo code for unpacking compressed fonts
+
+
+texps.pro : texps.lpr squeeze.exe
+ squeeze texps.lpr texps.pro
+
+special.pro : special.lpr squeeze.exe
+ squeeze special.lpr special.pro
+
+finclude.pro: finclude.lpr squeeze.exe
+ squeeze finclude.lpr finclude.pro
+
+color.pro: color.lpr squeeze.exe
+ squeeze color.lpr color.pro
+
+crop.pro: crop.lpr squeeze.exe
+ squeeze crop.lpr crop.pro
+
+install : afm2tfm.exe dvips32.exe pc/maketexp.bat pc/maketexp.cmd \
+ tex.pro texc.pro texps.pro special.pro finclude.pro color.pro crop.pro \
+ pc/config.ps psfonts.map epsf.tex epsf.sty rotate.tex rotate.sty \
+ dvips.tex dvipsmac.tex colordvi.sty colordvi.tex blackdvi.sty \
+ blackdvi.tex pc/dvips.doc pc/afm2tfm.doc
+ -mkdir $(BINDIR)
+ -mkdir $(HEADERDIR)
+ -mkdir $(CONFIGDIR)
+ -mkdir $(MANDIR)
+ -mkdir $(TEXMACROPARENTDIR)
+ -mkdir $(TEXMACRODIR)
+ copy afm2tfm.exe $(BINDIR)\afm2tfm.exe
+ copy dvips32.exe $(BINDIR)\dvips32.exe
+ copy pc\maketexp.bat $(BINDIR)\maketexp.bat
+ copy pc\maketexp.cmd $(BINDIR)\maketexp.cmd
+ copy tex.pro $(HEADERDIR)
+ copy texc.pro $(HEADERDIR)
+ copy texps.pro $(HEADERDIR)
+ copy special.pro $(HEADERDIR)
+ copy finclude.pro $(HEADERDIR)
+ copy color.pro $(HEADERDIR)
+ copy crop.pro $(HEADERDIR)
+ copy pc\config.ps $(CONFIGDIR)\$(CONFIGFILE)
+ copy psfonts.map $(CONFIGDIR)
+ copy epsf.tex $(TEXMACRODIR)
+ copy epsf.sty $(TEXMACRODIR)
+ copy rotate.tex $(TEXMACRODIR)
+ copy rotate.sty $(TEXMACRODIR)
+ copy colordvi.sty $(TEXMACRODIR)
+ copy colordvi.tex $(TEXMACRODIR)
+ copy blackdvi.sty $(TEXMACRODIR)
+ copy blackdvi.tex $(TEXMACRODIR)
+ copy dvips.tex $(TEXMACRODIR)
+ copy dvipsmac.tex $(TEXMACRODIR)
+ copy pc\dvips.doc $(MANDIR)
+ copy pc\afm2tfm.doc $(MANDIR)
+
+veryclean :
+ -del *.o
+ -del dvips32.exe
+ -del dvips32
+ -del squeeze.exe
+ -del squeeze
+ -del afm2tfm.exe
+ -del afm2tfm
+ -del *.pro
+ -del paths.rsp
+ -del gcclink.rsp
+
+clean :
+ -del *.o
+ -del dvips32
+ -del squeeze.exe
+ -del squeeze
+ -del afm2tfm
+ -del paths.rsp
+ -del gcclink.rsp
+
+
+# convert long names to 8.3 names
+fixup:
+ -rename dosection.c dosectio.c
+ -rename dospecial.c dospecia.c
+ -rename emspecial.c emspecia.c
+ -rename scalewidth.c scalewid.c
+ -rename virtualfont.c virtualf.c
+ -rename tex.lpro tex.lpr
+ -rename texc.lpro texc.lpr
+ -rename texps.lpro texps.lpr
+ -rename special.lpro special.lpr
+ -rename finclude.lpro finclude.lpr
+ -rename color.lpro color.lpr
+ -rename crop.lpro crop.lpr
+ -rename ..\PSlatex\avantgarde.sty avantgar.sty
+
+# convert short 8.3 names to original long names
+long:
+ -rename dosectio.c dosection.c
+ -rename dospecia.c dospecial.c
+ -rename emspecia.c emspecia..c
+ -rename scalewid.c scalewidth.c
+ -rename virtualf.c virtualfont.c
+ -rename tex.lpr tex.lpro
+ -rename texc.lpr texc.lpro
+ -rename texps.lpr texps.lpro
+ -rename special.lpr special.lpro
+ -rename finclude.lpr finclude.lpro
+ -rename color.lpr color.lpro
+ -rename crop.lpr crop.lpro
+ -rename installa INSTALLATION
+ -rename maketexp MakeTeXPK
+ -rename config.lin config.lino
+ -rename config.pos config.post3x3
+ -rename rotsampl.tex rotsample.tex
+ -rename ..\PSlatex\avantgar.sty avantgarde.sty
+
+# used for creating zip file
+zip:
+ copy ..\PSlatex\*.* $(TEXMACRODIR)
+ -mkdir $(TEXDIR)\tfm
+ copy ..\PStfms\*.* $(TEXDIR)\tfm
+ -mkdir $(DRIVE)\texfonts
+ -mkdir $(DRIVE)\texfonts\vf
+ copy ..\PSvfs\*.* $(DRIVE)\texfonts\vf
+ copy pc\README.pc $(DRIVE)\
+ $(DRIVE)
+ cd \
+ dir /f /s /l emtex > emtex.lst
+ dir /f /s /l texfonts >> emtex.lst
+ remove -w emtex\remove\dvips.rem emtex.lst
+ -del dvipsexe.zip
+ zip -r dvipsexe README.pc emtex texfonts
+
+# used for converting Unix EOL to OS/2 EOL
+# when dvips.tar has been extracted under OS/2.
+eol:
+ -flip -m *.*
+ cd contrib
+ -flip -m *.*
+ cd bbfig
+ -flip -m *.*
+ cd ..\psfig
+ -flip -m *.*
+ cd ..\psfntmac
+ -flip -m *.*
+ cd ..\pspic
+ -flip -m *.*
+ cd ..\..\mvs
+ -flip -m *.*
+ cd ..\pc
+ -flip -m *.*
+ cd ..\reencode
+ -flip -m *.*
+ cd ..\vmcms
+ -flip -m *.*
+ cd ..\vms
+ -flip -m *.*
+ cd ..
diff --git a/Build/source/texk/dvipsk/pc/makefile.msc b/Build/source/texk/dvipsk/pc/makefile.msc
new file mode 100644
index 00000000000..4b04d166233
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/makefile.msc
@@ -0,0 +1,313 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# First, the things that absolutely must be edited for your system.
+
+# modified for MSC 6.00A with dmake on OS/2.
+# by hankedr@mail.auburn.edu
+# 17th February 1994
+# from makefile.emx
+# by rjl@monu1.cc.monash.edu.au
+
+# If using HPFS you may need to type 'nmake fixup' to truncate names.
+# If using NDMAKE 4.5 under MS-DOS, PKPATH needs %% changed to %.
+# If using Borland MAKER under MS-DOS, all paths need \\ changed to \\\\.
+
+# compiler
+CC = cl -nologo -AL
+
+# Define BIND to create bound OS/2 and DOS executables
+BIND= bind $@ /n DOSMAKEPIPE DOSCWAIT
+
+# Utility programs for "make install"
+CP = cp
+RM = rm
+
+# All DIRs must use a single \ as a directory separator.
+# All PATHs must use \\ as a directory separator
+DRIVE = c:
+TEXDIR = $(DRIVE)\emtex
+TEXPATH = $(DRIVE)\\emtex
+
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# TFMPATH = c:\\emtex\\tfm
+TFMPATH = $(TEXPATH)\\tfm
+
+# the default path to search for PK files (usually omits `.')
+# Don't forget to add the directory that
+# MakeTeXPK puts the files! (In this case, /LocalLibrary/Fonts...)
+# PKPATH = c:\\texfonts\\pixel.lj\\%ddpi\\%f.%p
+#PKPATH = $(DRIVE)\\texfonts\\pixel.lj\\%ddpi\\%f.%p
+PKPATH = $(DRIVE)\\texfonts\\pixel.lj\\%%ddpi\\%%f.%%p
+
+# the default path to search for VF files (usually omits `.')
+# VFPATH = c:\\texfonts\\vf
+VFPATH = $(DRIVE)\\texfonts\\vf
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH =
+
+# where the config files go
+# CONFIGDIR = c:\emtex\ps
+CONFIGDIR = $(TEXDIR)\ps
+
+# the default path to search for config files
+# CONFIGPATH = .;c:\\emtex\\ps
+CONFIGPATH = .;$(TEXPATH)\\ps
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = c:\emtex\ps
+HEADERDIR = $(TEXDIR)\ps
+
+# the default path to search for header files
+# HEADERPATH = .;c:\\emtex\\ps
+HEADERPATH = .;$(TEXPATH)\\ps
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = c:\emtex\texinput
+TEXMACROPARENTDIR = $(TEXDIR)\texinput
+TEXMACRODIR = $(TEXDIR)\texinput\dvips
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .;..;c:\\emtex\\texinput
+FIGPATH = .;..;$(TEXPATH)\\texinput
+
+# the default path to search for emTeX font libraries
+# FLIPATH = c:\\texfonts
+FLIPATH = c:\\texfonts
+
+# the names of emTeX font libraries
+# FLINAME = lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5a;lj_5b;lj_sli
+FLINAME = lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5a;lj_5b;lj_sli
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DCREATIONDATE if your system has a working time() and you want dated files
+# If you define FONTLIB, make sure to also give definitions to
+# FLIPATH and FLINAME.
+#
+DEFS= -DTPIC -DDEBUG -DFONTLIB -DDEFRES=300 -DHAVE_GETCWD
+
+# OPT = -J -W2 -Zi
+OPT = -J
+
+# LFLAGS = -Lp -Zi -Od
+LFLAGS = -Lp setargv$O -link /NOE
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+SECURE =
+
+# If you want EMTEX specials, define the following.
+EMTEX = -DEMTEX
+
+# define the c-compiler flag
+# -DOS2 for OS/2 and MS-DOS with EMX extender or MSC
+SYS = -DOS2 -UMSDOS
+
+# where the installed binary goes
+# BINDIR = c:\emtex
+BINDIR = $(TEXDIR)
+
+# where the manual page goes
+# MANDIR = c:\emtex\doc
+MANDIR = $(TEXDIR)\doc
+
+PATHS = -DCREATIONDATE \
+ -DTFMPATH=\"$(TFMPATH)\" \
+ -DPKPATH=\"$(PKPATH)\" \
+ -DVFPATH=\"$(VFPATH)\" \
+ -DHEADERPATH=\"$(HEADERPATH)\" \
+ -DCONFIGPATH=\"$(CONFIGPATH)\" \
+ -DCONFIGFILE=\"$(CONFIGFILE)\" \
+ -DFONTSUBDIRPATH=\"$(FONTSUBDIRPATH)\" \
+ -DFIGPATH=\"$(FIGPATH)\" \
+ -DFLIPATH=\"$(FLIPATH)\" \
+ -DFLINAME=\"$(FLINAME)\"
+
+CFLAGS = $(OPT) $(SYS) $(SECURE) $(EMTEX) $(DEFS)
+
+SRC = dospecia.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c \
+ download.c prescan.c scanpage.c skippage.c output.c scalewid.c \
+ dosectio.c dopage.c resident.c search.c unpack.c drawPS.c \
+ header.c makefont.c repack.c virtualf.c dpicheck.c finclude.c \
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecia.c
+
+OBJ = dospecia$O dviinput$O fontdef$O loadfont$O dvips$O \
+ tfmload$O download$O prescan$O scanpage$O skippage$O \
+ output$O scalewid$O dosectio$O dopage$O resident$O \
+ search$O unpack$O drawPS$O header$O makefont$O repack$O \
+ virtualf$O dpicheck$O finclude$O \
+ pprescan$O papersiz$O flib$O color$O bbox$O emspecia$O
+
+all : afm2tfm.exe dvips16.exe tex.pro texps.pro texc.pro \
+ special.pro finclude.pro color.pro crop.pro
+
+# default rules
+
+O = .obj
+
+.SUFFIXES: $O .c
+
+.c$O:
+ $(CC) -c $(CFLAGS) $(PATHS) $<
+
+dvips16.exe: $(OBJ)
+ $(CC) -o $@ $(OBJ) pc\dvips16.def $(LFLAGS)
+ $(BIND)
+
+
+# The following may be useful in adapting this makefile to DOS
+# LINK = link
+# LINKOPT = /NOE /NOD:llibce.lib llibcep.lib, pc\dvips16.def
+#
+# link.rsp: pc/makefile.msc
+# echo dospecia$O + > link.rsp
+# echo dviinput$O + >>link.rsp
+# echo fontdef$O + >>link.rsp
+# echo loadfont$O + >>link.rsp
+# echo dvips$O + >>link.rsp
+# echo tfmload$O + >>link.rsp
+# echo download$O + >>link.rsp
+# echo prescan$O + >>link.rsp
+# echo scanpage$O + >>link.rsp
+# echo skippage$O + >>link.rsp
+# echo output$O + >>link.rsp
+# echo scalewid$O + >>link.rsp
+# echo dosectio$O + >>link.rsp
+# echo dopage$O + >>link.rsp
+# echo resident$O + >>link.rsp
+# echo search$O + >>link.rsp
+# echo unpack$O + >>link.rsp
+# echo drawPS$O + >>link.rsp
+# echo header$O + >>link.rsp
+# echo makefont$O + >>link.rsp
+# echo repack$O + >>link.rsp
+# echo virtualf$O + >>link.rsp
+# echo dpicheck$O + >>link.rsp
+# echo finclude$O + >>link.rsp
+# echo pprescan$O + >>link.rsp
+# echo papersiz$O + >>link.rsp
+# echo flib$O + >>link.rsp
+# echo color$O + >>link.rsp
+# echo bbox$O + >>link.rsp
+# echo emspecia$O + >>link.rsp
+# echo setargv$O, dvips16.exe,, + >>link.rsp
+# echo $(LINKOPT) >>link.rsp
+
+afm2tfm.exe: afm2tfm.c
+ $(CC) $(CFLAGS) afm2tfm.c -o $@ pc\afm2tfm.def $(LFLAGS)
+ $(BIND)
+
+$(OBJ) : dvips.h debug.h paths.h
+
+squeeze.exe : squeeze.c
+ $(CC) $(CFLAGS) squeeze.c -o $@ pc\squeeze.def $(LFLAGS)
+ $(BIND)
+
+tex.pro : tex.lpr squeeze.exe
+ squeeze tex.lpr tex.pro
+
+texc.pro: texc.lpr squeeze.exe
+ squeeze texc.lpr texc.pro
+
+texc.lpr: tex.lpr
+ @echo This does "texc.scr tex.lpro texc.lpro" on Unix
+ @echo For MSDOS or OS/2, copy tex.lpro to texc.lpr
+ @echo then edit texc.lpr to remove the code
+ @echo for uncompressed fonts and uncomment the
+ @echo code for unpacking compressed fonts
+
+
+texps.pro : texps.lpr squeeze.exe
+ squeeze texps.lpr texps.pro
+
+special.pro : special.lpr squeeze.exe
+ squeeze special.lpr special.pro
+
+finclude.pro: finclude.lpr squeeze.exe
+ squeeze finclude.lpr finclude.pro
+
+color.pro: color.lpr squeeze.exe
+ squeeze color.lpr color.pro
+
+crop.pro: crop.lpr squeeze.exe
+ squeeze crop.lpr crop.pro
+
+install : afm2tfm.exe dvips16.exe pc/maketexp.bat pc/maketexp.cmd \
+ tex.pro texc.pro texps.pro special.pro finclude.pro color.pro crop.pro \
+ pc/config.ps psfonts.map epsf.tex epsf.sty rotate.tex rotate.sty \
+ dvips.tex dvipsmac.tex colordvi.sty colordvi.tex blackdvi.sty \
+ blackdvi.tex pc/dvips.doc pc/afm2tfm.doc
+ -mkdir $(BINDIR)
+ -mkdir $(HEADERDIR)
+ -mkdir $(CONFIGDIR)
+ -mkdir $(MANDIR)
+ -mkdir $(TEXMACROPARENTDIR)
+ -mkdir $(TEXMACRODIR)
+ $(CP) afm2tfm.exe $(BINDIR)\afm2tfm.exe
+ $(CP) dvips16.exe $(BINDIR)\dvips16.exe
+ $(CP) pc\maketexp.bat $(BINDIR)\maketexp.bat
+ $(CP) pc\maketexp.cmd $(BINDIR)\maketexp.cmd
+ $(CP) tex.pro $(HEADERDIR)
+ $(CP) texc.pro $(HEADERDIR)
+ $(CP) texps.pro $(HEADERDIR)
+ $(CP) special.pro $(HEADERDIR)
+ $(CP) finclude.pro $(HEADERDIR)
+ $(CP) color.pro $(HEADERDIR)
+ $(CP) crop.pro $(HEADERDIR)
+ $(CP) pc\config.ps $(CONFIGDIR)\$(CONFIGFILE)
+ $(CP) psfonts.map $(CONFIGDIR)
+ $(CP) epsf.tex $(TEXMACRODIR)
+ $(CP) epsf.sty $(TEXMACRODIR)
+ $(CP) rotate.tex $(TEXMACRODIR)
+ $(CP) rotate.sty $(TEXMACRODIR)
+ $(CP) colordvi.sty $(TEXMACRODIR)
+ $(CP) colordvi.tex $(TEXMACRODIR)
+ $(CP) blackdvi.sty $(TEXMACRODIR)
+ $(CP) blackdvi.tex $(TEXMACRODIR)
+ $(CP) dvips.tex $(TEXMACRODIR)
+ $(CP) dvipsmac.tex $(TEXMACRODIR)
+ $(CP) pc\dvips.doc $(MANDIR)
+ $(CP) pc\afm2tfm.doc $(MANDIR)
+
+veryclean :
+ -$(RM) *.obj
+ -$(RM) dvips16.exe
+ -$(RM) squeeze.exe
+ -$(RM) afm2tfm.exe
+ -$(RM) *.pro
+
+clean :
+ -$(RM) *.obj
+ -$(RM) squeeze.exe
+
+
+fixup:
+ -rename dosection.c dosectio.c
+ -rename dospecial.c dospecia.c
+ -rename emspecial.c emspecia.c
+ -rename scalewidth.c scalewid.c
+ -rename virtualfont.c virtualf.c
+ -rename tex.lpro tex.lpr
+ -rename texc.lpro texc.lpr
+ -rename texps.lpro texps.lpr
+ -rename special.lpro special.lpr
+ -rename finclude.lpro finclude.lpr
+ -rename color.lpro color.lpr
+ -rename crop.lpro crop.lpr
diff --git a/Build/source/texk/dvipsk/pc/makefile.tc b/Build/source/texk/dvipsk/pc/makefile.tc
new file mode 100644
index 00000000000..df0051e0055
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/makefile.tc
@@ -0,0 +1,282 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# First, the things that absolutely must be edited for your system.
+
+# modified for Borland C 3.1 on MS-DOS by rjl@monu1.cc.monash.edu.au
+# 17th February 1994
+
+# compiler directory
+CCDIR = c:\borlandc
+# compiler and linker
+CC = $(CCDIR)\bin\bcc
+LINK = $(CCDIR)\bin\tlink
+INCLUDE = $(CCDIR)\include
+LIB =$(CCDIR)\lib
+# For Windows application WIN = win
+# Note that printf("%f",d) didn't work on Windows 3.0, BCC 3.0, 286 & 287
+# and is fixed in BCC 3.1.
+#WIN = win
+
+
+# All DIRs must use a single \ as a directory separator.
+# All PATHs must use \\\\ as a directory separator and must use \; not ;
+DRIVE = c:
+TEXDIR = $(DRIVE)\emtex
+TEXPATH = $(DRIVE)\\\\emtex
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# TFMPATH = c:\\\\emtex\\\\tfm
+TFMPATH = $(TEXPATH)\\\\tfm
+
+# the default path to search for PK files (usually omits `.')
+# Don't forget to add the directory that
+# MakeTeXPK puts the files! (In this case, /LocalLibrary/Fonts...)
+# PKPATH = c:\\\\texfonts\\\\pixel.lj\\\\%ddpi\\\\%f.%p
+PKPATH = $(TEXPATH)\\\\pixel.lj\\\\%ddpi\\\\%f.%p
+
+# the default path to search for VF files (usually omits `.')
+# VFPATH = c:\\\\texfonts\\\\vf
+VFPATH = $(TEXPATH)\\\\vf
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH =
+
+# where the config files go
+# CONFIGDIR = c:\emtex\ps
+CONFIGDIR = $(TEXDIR)\ps
+
+# the default path to search for config files
+# CONFIGPATH = .\;c:\\\\emtex\\\\ps
+CONFIGPATH = .\;$(TEXPATH)\\\\ps
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = c:\emtex\ps
+HEADERDIR = $(TEXDIR)\ps
+
+# the default path to search for header files
+# HEADERPATH = .\;c:\\\\emtex\\\\ps
+HEADERPATH = .\;$(TEXPATH)\\\\ps
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = c:\emtex\texinput
+TEXMACROPARENTDIR = $(TEXDIR)\texinput
+TEXMACRODIR = $(TEXDIR)\texinput\dvips
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .\;..\;c:\\\\emtex\\\\texinput
+FIGPATH = .\;..\;$(TEXPATH)\\\\texinput
+
+# the default path to search for emTeX font libraries
+# FLIPATH = c:\\\\texfonts
+FLIPATH = $(DRIVE)\\\\texfonts
+
+# the names of emTeX font libraries
+# FLINAME = lj_0\;lj_h\;lj_1\;lj_2\;lj_3\;lj_4\;lj_5a\;lj_5b\;lj_sli
+FLINAME = lj_0\;lj_h\;lj_1\;lj_2\;lj_3\;lj_4\;lj_5a\;lj_5b\;lj_sli
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DCREATIONDATE if your system has a working time() and you want dated files
+# If you define FONTLIB, make sure to also give definitions to
+# FLIPATH and FLINAME.
+#
+DEFS= -DTPIC -DDEBUG -DDEFRES=300 -DFONTLIB -DHAVE_GETCWD -DCREATIONDATE
+
+# these options to produce debug map
+OPT = -M -y -v
+#OPT =
+
+LINKOPT = /l /m /s /v /c
+#LINKOPT = /c /x
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+
+# If you want EMTEX specials, define the following.
+EMTEX = -DEMTEX
+
+# for SYSV (and friends which use <string.h> instead of <strings.h>)
+# define the c-compiler flag
+# -DMSDOS for MS-DOS systems
+SYS = -DMSDOS
+
+# where the installed binary goes
+# BINDIR = c:\emtex
+BINDIR = $(DRIVE)\emtex
+
+# where the manual page goes
+# MANDIR = c:\emtex\doc
+MANDIR = $(DRIVE)\emtex\doc
+
+#MSDOS sets all paths in turboc.cfg
+CFLAGS = $(DEFS) $(OPT) $(SYS) $(SECURE) $(EMTEX) $(DEFPFMT)
+
+SRC = dospecial.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c \
+ download.c prescan.c scanpage.c skippage.c output.c scalewidth.c \
+ dosection.c dopage.c resident.c search.c unpack.c drawPS.c \
+ header.c makefont.c repack.c virtualfont.c dpicheck.c finclude.c \
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecial.c
+
+OBJ = dospecial.obj dviinput.obj fontdef.obj loadfont.obj dvips.obj \
+ tfmload.obj download.obj prescan.obj scanpage.obj skippage.obj \
+ output.obj scalewidth.obj dosection.obj dopage.obj resident.obj \
+ search.obj unpack.obj drawPS.obj header.obj makefont.obj repack.obj \
+ virtualfont.obj dpicheck.obj finclude.obj papersiz.obj flib.obj \
+ pprescan.obj color.obj bbox.obj emspecial.obj
+
+all : afm2tfm.exe dvips$(WIN).exe tex.pro texps.pro texc.pro special.pro \
+ finclude.pro color.pro crop.pro
+
+# default rules
+
+.c.obj:
+!if $d(WIN)
+ $(CC) -c -ml -w-pro -W { $< }
+!else
+ $(CC) -c -f -ml -w-pro { $< }
+!endif
+
+dvips.exe : $(OBJ)
+ $(LINK) $(LINKOPT) @&&!
+$(LIB)\C0l +
+$(OBJ) +
+,dvips ,dvips, +
+$(LIB)\emu +
+$(LIB)\mathl +
+$(LIB)\cl
+!
+
+winmain.obj: pc\winmain.c
+ $(CC) -c -ml -w-pro -W -owinmain.obj pc\winmain.c
+
+dvipswin.exe : $(OBJ) winmain.obj pc\dvipswin.rc pc\dvipswin.def
+ $(LINK) /Twe $(LINKOPT) @&&!
+$(LIB)\C0wl +
+winmain.obj +
+$(OBJ) +
+,dvipswin ,dvipswin, +
+$(LIB)\mathwl +
+$(LIB)\import +
+$(LIB)\cwl, +
+pc\dvipswin.def
+!
+ $(CCDIR)\bin\brc -30 -i$(INCLUDE) pc\dvipswin.rc dvipswin.exe
+
+afm2tfm.exe: afm2tfm.c turboc.cfg
+ $(CC) -mc -w-pro -w-pia afm2tfm.c
+
+turboc.cfg: pc\makefile.tc
+ echo -I$(INCLUDE) > turboc.cfg
+ echo -L$(LIB) >> turboc.cfg
+ echo $(CFLAGS) >> turboc.cfg
+ echo -DTFMPATH="$(TFMPATH)" >> turboc.cfg
+ echo -DPKPATH="$(PKPATH)" >> turboc.cfg
+ echo -DVFPATH="$(VFPATH)" >> turboc.cfg
+ echo -DHEADERPATH="$(HEADERPATH)" >> turboc.cfg
+ echo -DCONFIGPATH="$(CONFIGPATH)" >> turboc.cfg
+ echo -DCONFIGFILE="$(CONFIGFILE)" >> turboc.cfg
+ echo -DFONTSUBDIRPATH="$(FONTSUBDIRPATH)" >> turboc.cfg
+ echo -DFIGPATH="$(FIGPATH)" >> turboc.cfg
+ echo -DFLIPATH="$(FLIPATH)" >> turboc.cfg
+ echo -DFLINAME="$(FLINAME)" >> turboc.cfg
+
+$(OBJ) : dvips.h debug.h paths.h turboc.cfg
+
+squeeze.exe : squeeze.c turboc.cfg
+ $(CC) -mc -w-pro squeeze.c
+
+tex.pro : tex.lpr squeeze.exe
+ squeeze tex.lpro tex.pro
+
+texc.pro: texc.lpr squeeze.exe
+ squeeze texc.lpro texc.pro
+
+texc.lpr: tex.lpr
+ @echo This does "texc.scr tex.lpr texc.lpr" on Unix
+ @echo For MSDOS, copy tex.lpr to texc.lpr
+ @echo then edit texc.lpr to remove the code
+ @echo for uncompressed fonts, and uncomment the
+ @echo code for unpacking compressed fonts
+
+texps.pro : texps.lpr squeeze.exe
+ squeeze texps.lpro texps.pro
+
+special.pro : special.lpr squeeze.exe
+ squeeze special.lpr special.pro
+
+finclude.pro: finclude.lpr squeeze.exe
+ squeeze finclude.lpr finclude.pro
+
+color.pro: color.lpr squeeze.exe
+ squeeze color.lpr color.pro
+
+crop.pro: crop.lpr squeeze.exe
+ squeeze crop.lpr crop.pro
+
+install : afm2tfm.exe dvips$(WIN).exe pc/maketexp.bat \
+ tex.pro texc.pro texps.pro special.pro finclude.pro color.pro crop.pro \
+ pc/config.ps psfonts.map epsf.tex epsf.sty rotate.tex rotate.sty \
+ dvips.tex dvipsmac.tex colordvi.sty colordvi.tex blackdvi.sty \
+ blackdvi.tex pc/dvips.doc pc/afm2tfm.doc
+ mkdir $(BINDIR)
+ mkdir $(HEADERDIR)
+ mkdir $(CONFIGDIR)
+ mkdir $(MANDIR)
+ mkdir $(TEXMACROPARENTDIR)
+ mkdir $(TEXMACRODIR)
+ copy afm2tfm.exe $(BINDIR)\afm2tfm.exe
+ copy dvips$(WIN).exe $(BINDIR)\dvips$(WIN).exe
+ copy pc\maketexp.bat $(BINDIR)\maketexp.bat
+ copy tex.pro $(HEADERDIR)
+ copy texc.pro $(HEADERDIR)
+ copy texps.pro $(HEADERDIR)
+ copy special.pro $(HEADERDIR)
+ copy finclude.pro $(HEADERDIR)
+ copy color.pro $(HEADERDIR)
+ copy crop.pro $(HEADERDIR)
+ copy pc\config.ps $(CONFIGDIR)\$(CONFIGFILE)
+ copy psfonts.map $(CONFIGDIR)
+ copy epsf.tex $(TEXMACRODIR)
+ copy epsf.sty $(TEXMACRODIR)
+ copy rotate.tex $(TEXMACRODIR)
+ copy rotate.sty $(TEXMACRODIR)
+ copy colordvi.sty $(TEXMACRODIR)
+ copy colordvi.tex $(TEXMACRODIR)
+ copy blackdvi.sty $(TEXMACRODIR)
+ copy blackdvi.tex $(TEXMACRODIR)
+ copy dvips.tex $(TEXMACRODIR)
+ copy dvipsmac.tex $(TEXMACRODIR)
+ copy pc\dvips.doc $(MANDIR)
+ copy pc\afm2tfm.doc $(MANDIR)
+
+
+veryclean : clean
+ del dvips.exe
+ del dvipswin.exe
+ del afm2tfm.exe
+ del *.pro
+ del turboc.cfg
+
+clean :
+ del *.obj
+ del squeeze.exe
+ del afm2tfm.map
+ del dvips.map
+ del dvipswin.map
+ del squeeze.map
+ del turboc.cfg
diff --git a/Build/source/texk/dvipsk/pc/makefile.wat b/Build/source/texk/dvipsk/pc/makefile.wat
new file mode 100644
index 00000000000..15a35f50970
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/makefile.wat
@@ -0,0 +1,310 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# First, the things that absolutely must be edited for your system.
+
+# modified for Borland MAKE 3.0 and Watcom 386 9.01 on MS-DOS
+# by js@rphnw3.ngate.uni-regensburg.de
+# 18th November 1992
+# This version of dvips HAS NOT BEEN THOROUGHLY TESTED
+
+# All DIRs must use \\ as a directory separator.
+# All PATHs must use \\\\ as a directory separator
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# overridden by the environment variable TEXFONTS
+# TFMPATH = c:\\emtex\\tfm
+TFMPATH = c:\\\\emtex\\\\tfm
+
+# the default path to search for PK files (usually omits `.')
+# Don't forget to add the directory that
+# MakeTeXPK puts the files! (In this case, /LocalLibrary/Fonts...)
+# overridden by the environment variable TEXPKS or TEXPACKED or PKFONTS
+# PKPATH = c:\\texfonts\\pixel.lj\\%ddpi\\%f.%p
+PKPATH = c:\\\\texfonts\\\\pixel.lj\\\\%ddpi\\\\%f.%p
+
+# the default path to search for VF files (usually omits `.')
+# overridden by the environment variable VFFONTS
+# VFPATH = c:\\texfonts\\vf
+VFPATH = c:\\\\emtex\\\\vf
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH =
+
+# where the config files go
+# CONFIGDIR = c:\emtex\ps
+CONFIGDIR = c:\\emtex\\ps
+
+# the default path to search for config files
+# overridden by the environment variable TEXCONFIG
+# CONFIGPATH = .;c:\\emtex\\ps
+CONFIGPATH = .;c:\\\\emtex\\\\ps
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = c:\emtex\ps
+HEADERDIR = c:\\emtex\\ps
+
+# the default path to search for header files
+# HEADERPATH = .;c:\\emtex\\ps
+HEADERPATH = .;c:\\\\emtex\\\\ps
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = c:\emtex\texinput
+TEXMACROPARENTDIR = c:\\emtex\\texinput
+TEXMACRODIR = c:\\emtex\\texinput\\dvips
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .;..;c:\\emtex\\texinput
+FIGPATH = .;..;c:\\\\emtex\\\\texinput
+
+# the default path to search for emTeX font libraries
+# FLIPATH = c:\\texfonts
+FLIPATH = c:\\\\texfonts
+
+# the names of emTeX font libraries
+# FLINAME = lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5a;lj_5b;lj_sli
+FLINAME = lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5;lj_sli
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DIBM6000 for compiling on IBM 6000 systems
+# add -DCREATIONDATE if your system has a working time() and you want dated files
+# (for VM/CMS, see the MKDVIPS.EXEC file in the vmcms subdirectory).
+#
+# If you define FONTLIB, make sure to also give definitions to
+# FLIPATH and FLINAME.
+#
+DEFS= -DTPIC -DDEBUG -DDEFRES=300 -DFONTLIB -DHAVE_GETCWD
+
+# your compiler
+CC = wcl386
+
+# either use
+# OPT = -g -Wall -funsigned-char
+# or
+# OPT = -O -s -Wall -funsigned-char
+OPT = /fpi/om/ox/p
+
+# libraries to include (-lm -lc on most systems)
+#FLIBS= -lNeXT_s -lsys_s
+#FLIBS= -lm -lc
+FLIBS=
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+SECURE =
+
+# If you want EMTEX specials, define the following.
+EMTEX = -DEMTEX
+
+# for SYSV (and friends which use <string.h> instead of <strings.h>)
+# define the c-compiler flag
+# add -D_POSIX_SOURCE if you are POSIX (also define SYSV) (only relevant
+# for subdir searching)
+# add -DMSDOS for MS-DOS systems
+# add -DDJGPP for MS-DOS GNU's
+SYS = -DMSDOS -DDJGPP
+
+
+# where the installed binary goes
+# BINDIR = c:\emtex
+BINDIR = c:\emtex
+
+# where the manual page goes
+# MANDIR = c:\emtex\doc
+MANDIR = c:\emtex\doc
+
+PATHS = -DTFMPATH=\"$(TFMPATH)\" \
+ -DPKPATH=\"$(PKPATH)\" \
+ -DVFPATH=\"$(VFPATH)\" \
+ -DHEADERPATH=\"$(HEADERPATH)\" \
+ -DCONFIGPATH=\"$(CONFIGPATH)\" \
+ -DCONFIGFILE=\"$(CONFIGFILE)\" \
+ -DFONTSUBDIRPATH=\"$(FONTSUBDIRPATH)\" \
+ -DFIGPATH=\"$(FIGPATH)\" \
+ -DFLIPATH=\"$(FLIPATH)\" \
+ -DFLINAME=\"$(FLINAME)\"
+
+CFLAGS = $(DEFS) $(OPT) $(SYS) $(SECURE) $(EMTEX)
+
+# default rules
+.c.obj:
+ $(CC) -c $(CFLAGS) $<
+
+SRC = dospecia.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c \
+ download.c prescan.c scanpage.c skippage.c output.c scalewid.c \
+ dosectio.c dopage.c resident.c search.c unpack.c drawPS.c \
+ header.c makefont.c repack.c virtualf.c dpicheck.c finclude.c \
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecial.c
+
+OBJ = dospecia.obj dviinput.obj fontdef.obj loadfont.obj dvips.obj \
+ tfmload.obj download.obj prescan.obj scanpage.obj skippage.obj \
+ output.obj scalewid.obj dosectio.obj dopage.obj resident.obj \
+ search.obj unpack.obj drawPS.obj header.obj makefont.obj repack.obj \
+ virtualf.obj dpicheck.obj finclude.obj \
+ pprescan.obj papersiz.obj flib.obj color.obj bbox.obj emspecial.obj
+
+all : afm2tfm.exe dvips4gl.exe dvipsos2.exe tex.pro texps.pro texc.pro \
+ special.pro finclude.pro color.pro crop.pro
+
+dvips4gl.exe: $(OBJ) wat.lnk
+ $(CC) /fe=$&.exe /l=dos4g @wat.lnk
+
+dvipsos2.exe: $(OBJ) wat.lnk
+ $(CC) /fe=$&.exe /l=os2v2 @wat.lnk
+
+wat.lnk: pc\makefile.wat
+ copy &&|
+FILE dospecia.obj
+FILE dviinput.obj
+FILE fontdef.obj
+FILE loadfont.obj
+FILE dvips.obj
+FILE tfmload.obj
+FILE download.obj
+FILE prescan.obj
+FILE scanpage.obj
+FILE skippage.obj
+FILE output.obj
+FILE scalewid.obj
+FILE dosectio.obj
+FILE dopage.obj
+FILE resident.obj
+FILE search.obj
+FILE unpack.obj
+FILE drawPS.obj
+FILE header.obj
+FILE makefont.obj
+FILE repack.obj
+FILE virtualf.obj
+FILE dpicheck.obj
+FILE finclude.obj
+FILE pprescan.obj
+FILE papersiz.obj
+FILE flib.obj
+FILE color.obj
+FILE bbox.obj
+FILE emspecial.obj
+| wat.lnk
+
+# you have to add the hash sign by hand !
+win\wat.h:
+ echo define TFMPATH \"$(TFMPATH)\" >>win\wat.h
+ echo define PKPATH \"$(PKPATH)\" >>win\wat.h
+ echo define VFPATH \"$(VFPATH)\" >>win\wat.h
+ echo define HEADERPATH \"$(HEADERPATH)\" >>win\wat.h
+ echo define CONFIGPATH \"$(CONFIGPATH)\" >>win\wat.h
+ echo define CONFIGFILE \"$(CONFIGFILE)\" >>win\wat.h
+ echo define FONTSUBDIRPATH \"$(FONTSUBDIRPATH)\" >>win\wat.h
+ echo define FIGPATH \"$(FIGPATH)\" >>win\wat.h
+ echo define FLIPATH \"$(FLIPATH)\" >>win\wat.h
+ echo define FLINAME \"$(FLINAME)\" >>win\wat.h
+
+dvips.obj: dvips.c
+ $(CC) $(CFLAGS) -c dvips.c /fi=win\wat.h
+
+afm2tfm.exe: afm2tfm.c
+ $(CC) $(CFLAGS) afm2tfm.c $(LIBS) $(FLIBS)
+
+#$(OBJ) : dvips.h debug.h paths.h
+
+squeeze.exe : squeeze.c
+ $(CC) $(CFLAGS) squeeze.c $(LIBS) $(FLIBS)
+
+tex.pro : tex.lpr squeeze.exe
+ squeeze tex.lpro tex.pro
+
+texc.pro: texc.lpr squeeze.exe
+ squeeze texc.lpro texc.pro
+
+texc.lpr: tex.lpr
+ @echo This does "texc.scr tex.lpr texc.lpr" on Unix
+ @echo For MSDOS, copy tex.lpr to texc.lpr
+ @echo then edit texc.lpr to remove the code
+ @echo for uncompressed fonts, and uncomment the
+ @echo code for unpacking compressed fonts
+
+texps.pro : texps.lpr squeeze.exe
+ squeeze texps.lpro texps.pro
+
+special.pro : special.lpr squeeze.exe
+ squeeze special.lpr special.pro
+
+finclude.pro: finclude.lpr squeeze.exe
+ squeeze finclude.lpr finclude.pro
+
+color.pro: color.lpr squeeze.exe
+ squeeze color.lpr color.pro
+
+crop.pro: crop.lpr squeeze.exe
+ squeeze crop.lpr crop.pro
+
+install : afm2tfm.exe dvips$(DEST).exe pc/maketexp.bat \
+ tex.pro texc.pro texps.pro special.pro finclude.pro color.pro crop.pro \
+ pc/config.ps psfonts.map epsf.tex epsf.sty rotate.tex rotate.sty \
+ dvips.tex dvipsmac.tex colordvi.sty colordvi.tex blackdvi.sty \
+ blackdvi.tex pc/dvips.doc pc/afm2tfm.doc
+ mkdir $(BINDIR)
+ mkdir $(HEADERDIR)
+ mkdir $(CONFIGDIR)
+ mkdir $(MANDIR)
+ mkdir $(TEXMACROPARENTDIR)
+ mkdir $(TEXMACRODIR)
+ copy afm2tfm.exe $(BINDIR)\afm2tfm.exe
+ copy dvips4gl.exe $(BINDIR)\dvips4gl.exe
+ copy dvipsos2.exe $(BINDIR)\dvipsos2.exe
+ copy pc\maketexp.bat $(BINDIR)\maketexp.bat
+ copy tex.pro $(HEADERDIR)
+ copy texc.pro $(HEADERDIR)
+ copy texps.pro $(HEADERDIR)
+ copy texps.pro $(HEADERDIR)
+ copy special.pro $(HEADERDIR)
+ copy finclude.pro $(HEADERDIR)
+ copy color.pro $(HEADERDIR)
+ copy crop.pro $(HEADERDIR)
+ copy pc\config.ps $(CONFIGDIR)\$(CONFIGFILE)
+ copy psfonts.map $(CONFIGDIR)
+ copy epsf.tex $(TEXMACRODIR)
+ copy epsf.sty $(TEXMACRODIR)
+ copy rotate.tex $(TEXMACRODIR)
+ copy rotate.sty $(TEXMACRODIR)
+ copy colordvi.sty $(TEXMACRODIR)
+ copy colordvi.tex $(TEXMACRODIR)
+ copy blackdvi.sty $(TEXMACRODIR)
+ copy blackdvi.tex $(TEXMACRODIR)
+ copy dvips.tex $(TEXMACRODIR)
+ copy dvipsmac.tex $(TEXMACRODIR)
+ copy pc\dvips.doc $(MANDIR)
+ copy pc\afm2tfm.doc $(MANDIR)
+
+veryclean :
+ del *.obj
+ del dvips4gl.exe
+ del dvipsos2.exe
+ del squeeze.exe
+ del afm2tfm.exe
+ del *.pro
+ del *.bak
+ del *.log
+ del wat.lnk
+
+clean :
+ del *.obj
+ del squeeze.exe
+ del *.bak
+ del *.log
+ del wat.lnk
diff --git a/Build/source/texk/dvipsk/pc/makefile.wt2 b/Build/source/texk/dvipsk/pc/makefile.wt2
new file mode 100644
index 00000000000..794cc18c9ac
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/makefile.wt2
@@ -0,0 +1,304 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# Watcom C/386 9.0 for MSDOS, 21 Dec 1993, rcpt@urc.tue.nl.
+# Compilation takes about 3 minutes on my 486/8MB clone.
+#
+# [ If you don't have MTPK,
+# - remove mtpk.c from SRC
+# - remove mtpk.obj from OBJ
+# rjl 23 Dec 1993 ]
+#
+# This makefile use the UNIX compatible rm.exe and sed.exe tools.
+# They are available on good fileservers. And because of MSDOS
+# limitations in handling command lines you have to add manually an
+# include line to dvips.c and mtpk.c:
+# #include "dvips.wat" (the one needed in dvips.c)
+# #include "paths.wat" (the one needed in mtpk.c)
+#
+# First, the things that absolutely must be edited for your system.
+# Please, don't forget to install MTPK with the same settings
+#
+# Run with: `wmake -f pc\makefile.wat' from dvips source directory.
+
+# Define default resolution
+DEFRES = 300
+
+# Define name of MTPK
+MTPK = mtpk
+
+# where TeX is `rooted'. Sometimes d:\emtex
+# TEXDIR = c:\emtex
+TEXDIR = c:\emtex
+
+# another place pk, tfm, and vf files might be found.
+# LOCALDIR = c:\texfonts
+LOCALDIR =
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# overridden by the environment variable TEXFONTS
+# TFMPATH = .;$(TEXDIR)\tfm
+TFMPATH = .;$(TEXDIR)\tfm
+
+# the default path to search for PK files
+# Don't forget to add the directory that MTPK puts the files!
+# (In this case %ddpi\%f.pk)
+# overridden by the environment variable TEXPKS or TEXPACKED or PKFONTS
+# PKPATH = %ddpi\%f.pk;$(TEXDIR)\texfonts\%m\%ddpi\%f.pk
+PKPATH = %ddpi\%f.pk;$(TEXDIR)\texfonts\%m\%ddpi\%f.pk
+
+# Default FLIPATH and FLINAME
+FLIPATH = $(TEXDIR)\texfonts
+FLINAME = lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5
+
+# the default path to search for VF files (usually omits `.')
+# overridden by the environment variable VFFONTS
+# VFPATH = .;$(TEXDIR)\vf
+VFPATH = .;$(TEXDIR)\vf
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH =
+
+# where the config files go
+# CONFIGDIR = $(TEXDIR)\ps
+CONFIGDIR = $(TEXDIR)\ps
+
+# the default path to search for config files
+# overridden by the environment variable TEXCONFIG
+# CONFIGPATH = .;$(CONFIGDIR)
+CONFIGPATH = .;$(CONFIGDIR)
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = $(TEXDIR)\ps
+HEADERDIR = $(TEXDIR)\ps
+
+# the default path to search for header files
+# HEADERPATH = .;$(HEADERDIR)
+HEADERPATH = .;$(HEADERDIR)
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = $(TEXDIR)\texinput
+TEXMACROPARENTDIR = $(TEXDIR)\texinput
+TEXMACRODIR = $(TEXMACROPARENTDIR)\dvips
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .;$(TEXDIR)\texinput
+FIGPATH = .;$(TEXDIR)\texinput
+
+# the place man pages are located.
+MANDIR = $(TEXDIR)\doc
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DIBM6000 for compiling on IBM 6000 systems
+# add -DCREATIONDATE if your system has a working time() and you want dated files
+# (for VM/CMS, see the MKDVIPS.EXEC file in the vmcms subdirectory).
+#
+# If you define FONTLIB, make sure to also give definitions to
+# FLIPATH and FLINAME.
+#
+# If your compiler doesn't like void*, then add
+# -DVOID=char
+#
+DEFS= -DTPIC -DDEBUG -DFONTLIB -DHAVE_GETCWD
+
+# either use
+# OPT = -dMSDOS -zq -d2 -j
+# OPTIMIZE = /oaxe /zp4 /4r
+# or
+OPTIMIZE = /oaxe /zp4 /4r
+OPT = -dMSDOS -zq -d2 -j
+
+# libraries to include (-lm -lc on most systems)
+#FLIBS=
+FLIBS=
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+
+# If you want EMTEX specials, define the following.
+EMTEX = -DEMTEX
+
+# for SYSV (and friends which use <string.h> instead of <strings.h>)
+# define the c-compiler flag
+# add -D_POSIX_SOURCE if you are POSIX (also define SYSV) (only relevant
+# for subdir searching)
+# SYS = -DSYSV
+
+# Define this to be whatever you use for installation. If you don't have
+# install, use a script that invokes copy and chmod's the files
+# appropriately.
+# INSTALL = copy
+INSTALL = copy
+
+# where the installed binary goes
+# BINDIR = $(TEXDIR)
+BINDIR = $(TEXDIR)
+
+# Compiler and linker names (protected mode versions)
+CC = wcl386 -p
+LD = wlinkp
+
+.EXTENSIONS:
+.EXTENSIONS: .exe .obj .c
+
+.BEFORE
+ @set INCLUDE=.;$(%watcom)\h
+ @set DOS4G=quiet
+
+CFLAGS = $(DEFS) $(OPT) $(EMTEX) $(OPTIMIZE)
+
+SRC = dospecial.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c &
+ download.c prescan.c scanpage.c skippage.c output.c scalewidth.c &
+ dosection.c dopage.c resident.c search.c unpack.c drawPS.c &
+ header.c mtpk.c repack.c virtualfont.c dpicheck.c finclude.c &
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecial.c
+
+OBJ = dospecial.obj dviinput.obj fontdef.obj loadfont.obj dvips.obj &
+ tfmload.obj download.obj prescan.obj scanpage.obj skippage.obj &
+ output.obj scalewidth.obj dosection.obj dopage.obj resident.obj &
+ search.obj unpack.obj drawPS.obj header.obj mtpk.obj repack.obj &
+ virtualfont.obj dpicheck.obj finclude.obj pprescan.obj papersiz.obj &
+ flib.obj color.obj bbox.obj emspecial.obj
+
+all : afm2tfm.exe dvips.exe tex.pro texps.pro texc.pro special.pro &
+ finclude.pro color.pro crop.pro .SYMBOLIC
+
+dvips.exe : $(OBJ) dvips.rsp
+ $(LD) @dvips.rsp
+
+dvips.rsp: pc\Makefile.wat
+ echo name dvips.exe > dvips.rsp
+ echo debug all >> dvips.rsp
+ echo option caseexact >> dvips.rsp
+ echo option dosseg >> dvips.rsp
+ echo system dos4g >> dvips.rsp
+ for %f in ($(OBJ)) do echo file %f >> dvips.rsp
+
+dvips.obj: dvips.c dvips.wat
+ $(CC) $(CFLAGS) -c dvips.c
+
+mtpk.obj: mtpk.c paths.wat
+ $(CC) $(CFLAGS) -c mtpk.c
+
+afm2tfm.exe: afm2tfm.obj
+ $(LD) system dos4g name afm2tfm.exe file afm2tfm.obj
+
+squeeze.exe : squeeze.obj
+ $(LD) system dos4g file squeeze.obj name squeeze.exe
+
+tex.pro : tex.lpro squeeze.exe
+ squeeze <tex.lpro > tex.pro
+
+texc.pro: texc.lpro squeeze.exe
+ squeeze <texc.lpro >texc.pro
+
+texc.lpro: texc.script tex.lpro
+ @echo ================================================
+ @echo Create texc.lpro:
+ @echo 1) copy tex.lpro texc.lpro
+ @echo 2) edit texc.lpro; delete lines between
+ @echo % begin code for uncompressed fonts only
+ @echo % end code for uncompressed fonts only
+ @echo 3) remove comments `% ' for next lines till line
+ @echo % end of code for unpacking compressed fonts
+ @echo 4) restart make
+ @echo ================================================
+
+texps.pro : texps.lpro squeeze.exe
+ squeeze <texps.lpro >texps.pro
+
+special.pro : special.lpro squeeze.exe
+ squeeze <special.lpro >special.pro
+
+finclude.pro : finclude.lpro squeeze.exe
+ squeeze <finclude.lpro >finclude.pro
+
+color.pro : color.lpro squeeze.exe
+ squeeze <color.lpro >color.pro
+
+crop.pro : crop.lpro squeeze.exe
+ squeeze <crop.lpro >crop.pro
+
+install : afm2tfm.exe dvips.exe &
+ tex.pro texc.pro texps.pro special.pro finclude.pro color.pro &
+ crop.pro config.ps psfonts.map epsf.tex epsf.sty rotate.tex &
+ rotate.sty colordvi.tex colordvi.sty blackdvi.tex blackdvi.sty &
+ dvips.tex dvipsmac.tex .SYMBOLIC
+ -md $(BINDIR)
+ -md $(CONFIGDIR)
+ -md $(HEADERDIR)
+ -md $(MANDIR)
+ -md $(TEXMACRODIR)
+ $(INSTALL) afm2tfm.exe $(BINDIR)\afm2tfm.exe
+ $(INSTALL) dvips.exe $(BINDIR)\dvips.exe
+ $(INSTALL) tex.pro $(HEADERDIR)
+ $(INSTALL) texc.pro $(HEADERDIR)
+ $(INSTALL) texps.pro $(HEADERDIR)
+ $(INSTALL) special.pro $(HEADERDIR)
+ $(INSTALL) finclude.pro $(HEADERDIR)
+ $(INSTALL) color.pro $(HEADERDIR)
+ $(INSTALL) crop.pro $(HEADERDIR)
+ $(INSTALL) config.ps $(CONFIGDIR)\$(CONFIGFILE)
+ $(INSTALL) psfonts.map $(CONFIGDIR)
+ $(INSTALL) epsf.tex $(TEXMACRODIR)
+ $(INSTALL) epsf.sty $(TEXMACRODIR)
+ $(INSTALL) rotate.tex $(TEXMACRODIR)
+ $(INSTALL) rotate.sty $(TEXMACRODIR)
+ $(INSTALL) colordvi.sty $(TEXMACRODIR)
+ $(INSTALL) colordvi.tex $(TEXMACRODIR)
+ $(INSTALL) blackdvi.sty $(TEXMACRODIR)
+ $(INSTALL) blackdvi.tex $(TEXMACRODIR)
+ $(INSTALL) dvips.tex $(MANDIR)
+ $(INSTALL) dvipsmac.tex $(MANDIR)
+
+veryclean : clean .SYMBOLIC
+ -rm -f dvips.exe texc.lpro *.pro
+
+clean
+ -rm -f *.obj squeeze.exe afm2tfm.exe *.log *.dvi
+
+dvips.wat: pc\Makefile.wat
+ echo $#define TFMPATH "$(TFMPATH)" > dvips.tmp
+ echo $#define PKPATH "$(PKPATH)" >> dvips.tmp
+ echo $#define VFPATH "$(VFPATH)" >> dvips.tmp
+ echo $#define HEADERPATH "$(HEADERPATH)" >> dvips.tmp
+ echo $#define CONFIGPATH "$(CONFIGPATH)" >> dvips.tmp
+ echo $#define CONFIGFILE "$(CONFIGFILE)" >> dvips.tmp
+ echo $#define FONTSUBDIRPATH "$(FONTSUBDIRPATH)" >> dvips.tmp
+ echo $#define FIGPATH "$(FIGPATH)" >> dvips.tmp
+ echo $#define DEFRES $(DEFRES) >> dvips.tmp
+ echo $#define FLIPATH "$(FLIPATH)" >> dvips.tmp
+ echo $#define FLINAME "$(FLINAME)" >> dvips.tmp
+ sed -e "s,\\,\\\\,g" dvips.tmp > dvips.wat
+ -rm dvips.tmp
+
+paths.wat: pc\Makefile.wat
+ echo $#define TFMPATH "$(TFMPATH)" > paths.tmp
+ echo $#define PKPATH "$(PKPATH)" >> paths.tmp
+ echo $#define VFPATH "$(VFPATH)" >> paths.tmp
+ echo $#define HEADERPATH "$(HEADERPATH)" >> paths.tmp
+ echo $#define CONFIGPATH "$(CONFIGPATH)" >> paths.tmp
+ echo $#define CONFIGFILE "$(CONFIGFILE)" >> paths.tmp
+ echo $#define MODEDEF $(DEFRES) >> paths.tmp
+ echo $#define FLIPATH "$(FLIPATH);$(FLINAME)" >> paths.tmp
+ echo $#define MTPK "$(MTPK)" >> paths.tmp
+ sed -e "s,\\,\\\\,g" paths.tmp > paths.wat
+ -rm paths.tmp
+
+.c.obj:
+ $(CC) $(CFLAGS) -c $[*
diff --git a/Build/source/texk/dvipsk/pc/maketexp.bat b/Build/source/texk/dvipsk/pc/maketexp.bat
new file mode 100644
index 00000000000..61253ee70c4
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/maketexp.bat
@@ -0,0 +1,52 @@
+@echo off
+REM
+REM This script file makes a new TeX PK font, because one wasn't
+REM found. Parameters are:
+REM
+REM name dpi bdpi magnification [mode]
+REM
+REM `name' is the name of the font, such as `cmr10'. `dpi' is
+REM the resolution the font is needed at. `bdpi' is the base
+REM resolution, useful for figuring out the mode to make the font
+REM in. `magnification' is a string to pass to MF as the
+REM magnification. `mode', if supplied, is the mode to use.
+REM
+REM Because of MSDOS memory constraints, this batch file just
+REM creates a mfjob file, so that the fonts can be created later.
+REM
+
+REM NAME=%1 DPI=%2 BDPI=%3 MAG=%4 MODE=%5
+
+if exist dvips.mfj goto :second
+echo %% dvips.mfj - created by dvips > dvips.mfj
+echo input [modes]; >> dvips.mfj
+echo Created dvips.mfj
+
+:second
+echo { >> dvips.mfj
+echo base=plain; >> dvips.mfj
+echo font=%1; >> dvips.mfj
+echo mag=%4; >> dvips.mfj
+
+if "%5" == "" goto :nomode
+if "%5" == "imagen" goto :hpmode
+if "%5" == "hplaser" goto :hpmode
+
+:goodmode
+echo mode=%5[%3]; >> dvips.mfj
+echo output=pk[c:\texfonts\%5\@Rrdpi\@f]; >> dvips.mfj
+goto :donemode
+
+:hpmode
+echo mode=hplaser[%3]; >> dvips.mfj
+echo output=pk[c:\texfonts\pixel.lj\@Rrdpi\@f]; >> dvips.mfj
+goto :donemode
+
+:nomode
+echo m; >> dvips.mfj
+
+:donemode
+echo } >> dvips.mfj
+
+echo Run "mfjob dvips"
+:exit
diff --git a/Build/source/texk/dvipsk/pc/maketexp.cmd b/Build/source/texk/dvipsk/pc/maketexp.cmd
new file mode 100644
index 00000000000..92464016f3f
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/maketexp.cmd
@@ -0,0 +1,56 @@
+@echo off
+REM
+REM This script file makes a new TeX PK font, because one wasn't
+REM found. Parameters are:
+REM
+REM name dpi bdpi magnification [mode]
+REM
+REM `name' is the name of the font, such as `cmr10'. `dpi' is
+REM the resolution the font is needed at. `bdpi' is the base
+REM resolution, useful for figuring out the mode to make the font
+REM in. `magnification' is a string to pass to MF as the
+REM magnification. `mode', if supplied, is the mode to use.
+REM
+REM Because of MSDOS memory constraints, this batch file just
+REM creates a mfjob file, so that the fonts can be created later.
+REM
+
+REM NAME=%1 DPI=%2 BDPI=%3 MAG=%4 MODE=%5
+
+if exist dvips.mfj goto :second
+echo %% dvips.mfj - created by dvips > dvips.mfj
+echo input [modes]; >> dvips.mfj
+echo Created dvips.mfj
+
+:second
+echo { >> dvips.mfj
+echo base=plain; >> dvips.mfj
+echo font=%1; >> dvips.mfj
+echo mag=%4; >> dvips.mfj
+
+if "%5" == "" goto :nomode
+if "%5" == "imagen" goto :hpmode
+if "%5" == "hplaser" goto :hpmode
+
+:goodmode
+echo mode=%5[%3]; >> dvips.mfj
+echo output=pk[c:\texfonts\%5\@Rrdpi\@f]; >> dvips.mfj
+goto :donemode
+
+:hpmode
+echo mode=hplaser[%3]; >> dvips.mfj
+echo output=pk[c:\texfonts\pixel.lj\@Rrdpi\@f]; >> dvips.mfj
+goto :donemode
+
+:nomode
+echo m; >> dvips.mfj
+
+:donemode
+echo } >> dvips.mfj
+
+REM Uncomment the following line and comment out the echo instruction to
+REM make operation automatic.
+
+REM mfjob dvips
+echo Run "mfjob dvips"
+:exit
diff --git a/Build/source/texk/dvipsk/pc/squeeze.def b/Build/source/texk/dvipsk/pc/squeeze.def
new file mode 100644
index 00000000000..942e1909d5a
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/squeeze.def
@@ -0,0 +1,3 @@
+NAME squeeze WINDOWCOMPAT NEWFILES
+DESCRIPTION 'squeeze a PostScript file (source: dvips)'
+STACKSIZE 0x2000
diff --git a/Build/source/texk/dvipsk/pc/wat.h b/Build/source/texk/dvipsk/pc/wat.h
new file mode 100644
index 00000000000..d0104afb443
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/wat.h
@@ -0,0 +1,10 @@
+#define TFMPATH "c:\\emtex\\tfm"
+#define PKPATH "c:\\texfonts\\pixel.lj\\%ddpi\\%f.%p"
+#define VFPATH "c:\\emtex\\vf"
+#define HEADERPATH ".;c:\\emtex\\ps"
+#define CONFIGPATH ".;c:\\emtex\\ps"
+#define CONFIGFILE "config.ps"
+#define FONTSUBDIRPATH ""
+#define FIGPATH ".;..;c:\\emtex\\texinput"
+#define FLIPATH "c:\\texfonts"
+#define FLINAME "lj_0;lj_h;lj_1;lj_2;lj_3;lj_4;lj_5;lj_sli"
diff --git a/Build/source/texk/dvipsk/pc/winmain.c b/Build/source/texk/dvipsk/pc/winmain.c
new file mode 100644
index 00000000000..206be0c1296
--- /dev/null
+++ b/Build/source/texk/dvipsk/pc/winmain.c
@@ -0,0 +1,89 @@
+/*
+ * dvips - winmain.c
+ * This module is Copyright 1992 by Russell Lang and Maurice Castro.
+ * This file may be freely copied and modified.
+ */
+
+#include <windows.h>
+#include <dos.h>
+#include <stdio.h>
+#include <string.h>
+
+/* local */
+#define MAXSTR 255
+HWND FAR hwndeasy;
+static char FAR szAppName[] = "dvips";
+char winline[MAXSTR]; /* command line for MS-Windows */
+int wargc; /* argc for windows */
+char *wargv[32]; /* argv for windows */
+
+/* external */
+extern void help(); /* in dvips.c */
+extern void error(); /* in dvips.c */
+
+/* EasyWin */
+extern POINT _ScreenSize;
+
+int main(int argc, char *argv[], char *env[]);
+
+/* A fake system() for Microsoft Windows */
+int
+system(command)
+char *command;
+{
+char str[MAXSTR];
+ strcpy(str,"Windows can't do system(\042");
+ if (command) {
+ strncat(str,command,MAXSTR-strlen(str));
+ }
+ strncat(str,"\042);",MAXSTR-strlen(str));
+ error(str);
+ return(1); /* error */
+}
+
+/* Get a new command line */
+void
+winargs()
+{
+ fputs("Options: ",stdout);
+ fgets(winline,MAXSTR,stdin);
+ wargc=1;
+ if ( (wargv[1] = strtok(winline," \n")) != (char *)NULL ) {
+ wargc=2;
+ while ( ((wargv[wargc] = strtok((char *)NULL," \n")) != (char *)NULL)
+ && (wargc < 31) )
+ wargc++;
+ }
+ wargv[wargc] = (char *)NULL;
+}
+
+int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
+ LPSTR lpszCmdLine, int cmdShow)
+{
+ char modulename[MAXSTR];
+
+ /* start up the text window */
+ _ScreenSize.y = 50;
+ _InitEasyWin();
+
+ /* fix up the EasyWindows window provided by Borland */
+ GetModuleFileName(hInstance, (LPSTR) modulename, MAXSTR);
+ hwndeasy = FindWindow("BCEasyWin", modulename);
+ SetWindowText(hwndeasy, szAppName); /* change title */
+ SetClassWord(hwndeasy, GCW_HICON, LoadIcon(hInstance, "RadicalEye")); /* change icon */
+
+ if (_argc==1) {
+ /* get new command line if no options or filenames */
+ help();
+ winargs();
+ wargv[0] = _argv[0];
+ _argc=wargc;
+ _argv=wargv;
+ }
+
+ main(_argc, _argv, environ);
+ /* unfortunately dvips doesn't return from main(), it exits */
+ /* so the following code is never executed */
+ DestroyWindow(hwndeasy);
+ return 0;
+}
diff --git a/Build/source/texk/dvipsk/pprescan.c b/Build/source/texk/dvipsk/pprescan.c
new file mode 100644
index 00000000000..7f4e228933e
--- /dev/null
+++ b/Build/source/texk/dvipsk/pprescan.c
@@ -0,0 +1,262 @@
+/*
+ * This is the main routine for the first (prescanning) pass.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+
+/*
+ * These are all the external routines it calls:
+ */
+#include "protos.h"
+
+/*
+ * These are the globals it accesses.
+ */
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern fontdesctype *fonthead ;
+extern integer firstpage, lastpage ;
+extern integer firstseq, lastseq ;
+extern Boolean notfirst, notlast ;
+extern Boolean evenpages, oddpages, pagelist ;
+extern integer maxpages ;
+extern Boolean abspage ;
+extern FILE *dvifile ;
+extern fontdesctype *curfnt ;
+extern fontmaptype *ffont ;
+extern quarterword *curpos, *curlim ;
+extern integer pagenum ;
+extern char errbuf[] ;
+extern frametype frames[] ;
+extern Boolean noomega ;
+/*
+ * We declare this to tell everyone we are prescanning early.
+ */
+Boolean pprescan ;
+/*
+ * When a font is selected during the pre-prescan, this routine makes sure
+ * that the tfm or vf (but not pk) file is loaded.
+ */
+static void
+ppreselectfont P1C(fontdesctype *, f)
+{
+ int i ;
+
+ curfnt = f ;
+ if (curfnt->loaded == 0) {
+ if (!residentfont(curfnt))
+ if (!virtualfont(curfnt)) {
+ for (i=0; i<256; i++)
+ curfnt->chardesc[i].flags = 0 ;
+ curfnt->loaded = 3 ; /* we're scanning for sizes */
+ }
+ }
+}
+/*
+ * Now our scanpage routine.
+ */
+static void
+pscanpage P1H(void)
+{
+ register shalfword cmd ;
+ register chardesctype *cd ;
+ register fontmaptype *cfnt = 0 ;
+ integer fnt ;
+ integer mychar ;
+ register frametype *frp = frames ;
+
+#ifdef DEBUG
+ if (dd(D_PAGE))
+#ifdef SHORTINT
+ (void)fprintf(stderr,"PPrescanning page %ld\n", pagenum) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr,"PPrescanning page %d\n", pagenum) ;
+#endif /* ~SHORTINT */
+#endif /* DEBUG */
+ curfnt = NULL ;
+ curpos = NULL ;
+ bopcolor(0) ;
+ while (1) {
+ switch (cmd=dvibyte()) {
+case 130: case 131: case 135: case 136: case 139:
+case 247: case 248: case 249: case 250: case 251: case 252: case 253:
+case 254: case 255: /* unimplemented or illegal commands */
+ (void)sprintf(errbuf,
+ "! DVI file contains unexpected command (%d)",cmd) ;
+ error(errbuf) ;
+case 132: case 137: /* eight-byte commands setrule, putrule */
+ (void)dvibyte() ;
+ (void)dvibyte() ;
+ (void)dvibyte() ;
+ (void)dvibyte() ;
+case 146: case 151: case 156: case 160: case 165: case 170:
+ /* four-byte commands right4, w4, x4, down4, y4, z4 */
+ (void)dvibyte() ;
+case 145: case 150: case 155: case 159: case 164: case 169:
+ /* three-byte commands right3, w3, x3, down3, y3, z3 */
+ (void)dvibyte() ;
+case 144: case 149: case 154: case 158: case 163: case 168:
+ /* two-byte commands right2, w2, x2, down2, y2, z2 */
+ (void)dvibyte() ;
+case 143: case 148: case 153: case 157: case 162: case 167:
+ /* one-byte commands right1, w1, x1, down1, y1, z1 */
+ (void)dvibyte() ;
+case 147: case 152: case 161: case 166: /* w0, x0, y0, z0 */
+case 138: case 141: case 142: /* nop, push, pop */
+ break ;
+case 134: case 129: /* set2, put2 */
+ if (noomega) {
+ (void)sprintf(errbuf,
+ "! DVI file contains unexpected Omega command (%d)",cmd) ;
+ error(errbuf) ;
+ }
+ mychar = dvibyte() ; mychar = (mychar << 8) + dvibyte() ;
+ goto dochar ;
+case 133: case 128: cmd = dvibyte() ; /* set1, put1 commands drops through */
+default: /* these are commands 0 (setchar0) thru 127 (setchar 127) */
+ mychar = cmd ;
+dochar:
+ if (curfnt==NULL)
+ error("! Bad DVI file: no font selected") ;
+ if (mychar>=curfnt->maxchars) {
+ (void)sprintf(errbuf,"! invalid char %d from font %s", mychar, curfnt->name) ;
+ error(errbuf) ;
+ }
+ if (curfnt->loaded == 2) { /* scanning a virtual font character */
+ frp->curp = curpos ;
+ frp->curl = curlim ;
+ frp->ff = ffont ;
+ frp->curf = curfnt ;
+ if (++frp == &frames[MAXFRAME] )
+ error("! virtual recursion stack overflow") ;
+ cd = curfnt->chardesc + mychar;
+ if (cd->packptr == 0)
+ error("! a non-existent virtual char is being used; check vf/tfm files") ;
+ curpos = cd->packptr + 2 ;
+ curlim = curpos + (256*(long)(*cd->packptr)+(*(cd->packptr+1))) ;
+ ffont = curfnt->localfonts ;
+ if (ffont==NULL)
+ curfnt = NULL ;
+ else
+ ppreselectfont(ffont->desc) ;
+ } else if (curfnt->loaded == 3)
+ curfnt->chardesc[mychar].flags = EXISTS ;
+ break ;
+case 171: case 172: case 173: case 174: case 175: case 176: case 177:
+case 178: case 179: case 180: case 181: case 182: case 183: case 184:
+case 185: case 186: case 187: case 188: case 189: case 190: case 191:
+case 192: case 193: case 194: case 195: case 196: case 197: case 198:
+case 199: case 200: case 201: case 202: case 203: case 204: case 205:
+case 206: case 207: case 208: case 209: case 210: case 211: case 212:
+case 213: case 214: case 215: case 216: case 217: case 218: case 219:
+case 220: case 221: case 222: case 223: case 224: case 225: case 226:
+case 227: case 228: case 229: case 230: case 231: case 232: case 233:
+case 234: case 235: case 236: case 237: case 238: /* font selection commands */
+ if (cmd < 235) fnt = cmd - 171 ; /* fntnum0 thru fntnum63 */
+ else {
+ fnt = dvibyte() ; /* fnt1 */
+ while (cmd-- > 235)
+ fnt = (fnt << 8) + dvibyte() ;
+ }
+ for (cfnt=ffont; cfnt; cfnt = cfnt->next)
+ if (cfnt->fontnum == fnt) goto fontfound ;
+ error("! no font selected") ;
+fontfound: curfnt = cfnt->desc ;
+ ppreselectfont(curfnt) ;
+ break ;
+case 239: predospecial((integer)dvibyte(), 1) ; break ; /* xxx1 */
+case 240: predospecial((integer)twobytes(), 1) ; break ; /* xxx2 */
+case 241: predospecial(threebytes(), 1) ; break ; /* xxx3 */
+case 242: predospecial(signedquad(), 1) ; break ; /* xxx4 */
+case 243: case 244: case 245: case 246: fontdef(cmd-242) ; break ; /* fntdef1 */
+case 140: /* eop or end of virtual char */
+ if (curpos) {
+ --frp ;
+ curfnt = frp->curf ;
+ ffont = frp->ff ;
+ curlim = frp->curl ;
+ curpos = frp->curp ;
+ break ;
+ }
+ return ;
+ }
+ }
+}
+/*
+ * Finally, here's our main pprescan routine.
+ */
+static integer firstmatch = -1, lastmatch = -1 ;
+void
+pprescanpages P1H(void)
+{
+ register int cmd ;
+ integer lmaxpages = maxpages ;
+ integer mpagenum ;
+ integer pageseq = 0 ;
+ int ntfirst = notfirst ;
+
+ pprescan = 1 ;
+ readpreamble() ;
+/*
+ * Now we look for the first page to process. If we get to the end of
+ * the file before the page, we complain (fatally).
+ * Incidentally, we don't use the DVI file's bop backpointer to skip
+ * over pages at high speed, because we want to look to for special
+ * header that might be in skipped pages.
+ */
+ while (1) {
+ cmd = skipnop() ;
+ if (cmd==248)
+ error("! End of document before first specified page") ;
+ if (cmd!=139)
+ error("! Bad DVI file: expected bop") ;
+ pagenum = signedquad() ;
+ pageseq++ ;
+ mpagenum = abspage ? pageseq : pagenum ;
+ if (mpagenum == firstpage && ntfirst)
+ firstmatch++ ;
+ if (mpagenum == lastpage && notlast)
+ lastmatch++ ;
+ if (ntfirst && mpagenum == firstpage && firstmatch == firstseq)
+ ntfirst = 0 ;
+ if (ntfirst ||
+ ((evenpages && (pagenum & 1)) || (oddpages && (pagenum & 1)==0) ||
+ (pagelist && !InPageList(pagenum)))) {
+ skipover(40) ;
+ skippage() ;
+ } else {
+ if (notlast && mpagenum == lastpage)
+ lastmatch-- ;
+ break ;
+ }
+ }
+/*
+ * Here we scan for each of the sections. First we initialize some of
+ * the variables we need. We don't have to be as smart as before in
+ * skipping pages.
+ */
+ skipover(40) ;
+ while (lmaxpages > 0) {
+ if (!(evenpages && (pagenum & 1)) &&
+ !(oddpages && (pagenum & 1)==0) &&
+ !(pagelist && !InPageList(pagenum))) {
+ pscanpage() ;
+ lmaxpages-- ;
+ } else
+ skippage() ;
+ mpagenum = abspage ? pageseq : pagenum ;
+ if (mpagenum == lastpage && notlast)
+ lastmatch++ ;
+ if (notlast && mpagenum == lastpage && lastmatch == lastseq)
+ lmaxpages = -1 ; /* we are done after this page. */
+ cmd=skipnop() ;
+ if (cmd==248) break ;
+ if (cmd!=139)
+ error("! Bad DVI file: expected bop") ;
+ pagenum = signedquad() ;
+ skipover(40) ;
+ pageseq++ ;
+ }
+ fseek(dvifile, 0L, 0) ;
+ pprescan = 0 ;
+}
diff --git a/Build/source/texk/dvipsk/prescan.c b/Build/source/texk/dvipsk/prescan.c
new file mode 100644
index 00000000000..534f58d9fb6
--- /dev/null
+++ b/Build/source/texk/dvipsk/prescan.c
@@ -0,0 +1,289 @@
+/*
+ * This is the main routine for the first (prescanning) pass.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+
+/*
+ * These are all the external routines it calls:
+ */
+#include "protos.h"
+
+/*
+ * These are the globals it accesses.
+ */
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern fontdesctype *fonthead ;
+extern real conv ;
+extern real vconv ;
+extern real alpha ;
+extern integer firstpage, lastpage ;
+extern integer firstseq, lastseq ;
+extern integer maxsecsize ;
+extern Boolean notfirst, notlast ;
+extern Boolean evenpages, oddpages, pagelist ;
+extern integer fontmem ;
+extern integer pagecount ;
+extern integer pagenum ;
+extern integer maxpages ;
+extern sectiontype *sections ;
+extern FILE *dvifile ;
+extern integer num, den ;
+extern double mag ;
+extern int overridemag ;
+extern integer swmem ;
+extern int quiet ;
+extern int actualdpi ;
+extern int vactualdpi ;
+extern Boolean reverse ;
+extern int totalpages ;
+extern integer fsizetol ;
+extern char *oname ;
+extern Boolean pprescan ;
+extern Boolean abspage ;
+extern char preamblecomment[] ;
+/*
+ * This routine handles the processing of the preamble in the dvi file.
+ */
+void
+readpreamble P1H(void)
+{
+ register int i ;
+ char *p ;
+
+ if (dvibyte()!=247) error("! Bad DVI file: first byte not preamble") ;
+ if (dvibyte()!=2) error("! Bad DVI file: id byte not 2") ;
+ num = signedquad() ;
+ den = signedquad() ;
+ if (overridemag > 0) (void)signedquad() ;
+ else if (overridemag < 0) mag = (mag * signedquad()) / 1000.0 ;
+ else mag = signedquad() ;
+ conv = (real) num * DPI * mag / ( den * 254000000.0 ) ;
+ vconv = (real) num * VDPI * mag / ( den * 254000000.0 ) ;
+ alpha = (((real)den / 7227.0) / 0x100000) * (25400000.0 / (real) num) ;
+ fsizetol = 1 + (integer)(DPI/(72270.0 * conv)) ;
+ if (!pprescan) {
+ for (i=dvibyte(),p=preamblecomment;i>0;i--,p++) *p=dvibyte() ;
+ *p='\0' ;
+ if (!quiet) {
+ (void)fprintf(stderr, "'") ;
+#ifdef VMCMS /* IBM: VM/CMS */
+ for(p=preamblecomment;*p;p++) (void)putc(ascii2ebcdic[*p], stderr) ;
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ for(p=preamblecomment;*p;p++) (void)putc(ascii2ebcdic[*p], stderr) ;
+#else
+ for(p=preamblecomment;*p;p++) (void)putc(*p, stderr) ;
+#endif /* IBM: VM/CMS */
+#endif
+ (void)fprintf(stderr, "' -> %s\n", oname) ;
+ }
+ } else
+ skipover(dvibyte()) ;
+}
+
+/*
+ * Finally, here's our main prescan routine.
+ */
+static integer firstmatch = -1, lastmatch = -1 ;
+void
+prescanpages P1H(void)
+{
+ register int cmd ;
+ short ret = 0 ;
+ register integer thispageloc, thissecloc ;
+ register fontdesctype *f ;
+ register shalfword c ;
+ register long thissectionmem = 0 ;
+ integer mpagenum ;
+ integer pageseq = 0 ;
+ int ntfirst = notfirst ;
+
+ readpreamble() ;
+/*
+ * Now we look for the first page to process. If we get to the end of
+ * the file before the page, we complain (fatally).
+ * Incidentally, we don't use the DVI file's bop backpointer to skip
+ * over pages at high speed, because we want to look to for special
+ * header that might be in skipped pages.
+ */
+ while (1) {
+ cmd = skipnop() ;
+ if (cmd==248)
+ error("! End of document before first specified page") ;
+ if (cmd!=139)
+ error("! Bad DVI file: expected bop") ;
+ thispageloc = ftell(dvifile) ; /* the location FOLLOWING the bop */
+#ifdef DEBUG
+ if (dd(D_PAGE))
+#ifdef SHORTINT
+ (void)fprintf(stderr,"bop at %ld\n", thispageloc) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr,"bop at %d\n", (int)thispageloc) ;
+#endif /* ~SHORTINT */
+#endif /* DEBUG */
+ pagenum = signedquad() ;
+ pageseq++ ;
+ mpagenum = abspage ? pageseq : pagenum ;
+ if (mpagenum == firstpage && ntfirst)
+ firstmatch++ ;
+ if (mpagenum == lastpage && notlast)
+ lastmatch++ ;
+ if (ntfirst && mpagenum == firstpage && firstmatch == firstseq)
+ ntfirst = 0 ;
+ if (ntfirst ||
+ ((evenpages && (pagenum & 1)) || (oddpages && (pagenum & 1)==0) ||
+ (pagelist && !InPageList(pagenum)))) {
+ skipover(40) ;
+ skippage() ;
+ } else {
+ if (notlast && mpagenum == lastpage)
+ lastmatch-- ;
+ break ;
+ }
+ }
+/*
+ * Here we scan for each of the sections. First we initialize some of
+ * the variables we need.
+ */
+ while (maxpages > 0 && cmd != 248) {
+ for (f=fonthead; f; f=f->next) {
+ f->psname = 0 ;
+ if (f->loaded==1)
+ for (c=255; c>=0; c--)
+ f->chardesc[c].flags &= (STATUSFLAGS) ;
+ }
+ fontmem = swmem - OVERCOST ;
+ if (fontmem <= 1000)
+ error("! Too little VM in printer") ;
+
+/* The section begins at the bop command just before thispageloc (which may
+ * be a page that was aborted because the previous section overflowed memory).
+ */
+ pagecount = 0 ;
+ (void)fseek(dvifile, (long)thispageloc, 0) ;
+ pagenum = signedquad() ;
+ skipover(40) ;
+ thissecloc = thispageloc ;
+/*
+ * Now we have the loop that actually scans the pages. The scanpage routine
+ * returns 1 if the page scans okay; it returns 2 if the memory ran out
+ * before any pages were completed (in which case we'll try to carry on
+ * and hope for the best); it returns 0 if a page was aborted for lack
+ * of memory. After each page, we mark the characters seen on that page
+ * as seen for this section so that they will be downloaded.
+ */
+ ret = 0 ;
+ while (maxpages>0) {
+ if (!(evenpages && (pagenum & 1)) &&
+ !(oddpages && (pagenum & 1)==0) &&
+ !(pagelist && !InPageList(pagenum))) {
+ ret = scanpage() ;
+ if (ret == 0)
+ break ;
+ pagecount++ ;
+ maxpages-- ;
+ } else
+ skippage() ;
+ thissectionmem = swmem - fontmem - OVERCOST ;
+ mpagenum = abspage ? pageseq : pagenum ;
+ pageseq++ ;
+ if (mpagenum == lastpage && notlast)
+ lastmatch++ ;
+ if (notlast && mpagenum == lastpage && lastmatch == lastseq)
+ maxpages = -1 ; /* we are done after this page. */
+ if (reverse)
+ thissecloc = thispageloc ;
+ for (f=fonthead; f; f=f->next)
+ if (f->loaded==1) {
+ if (f->psflag & THISPAGE)
+ f->psflag = PREVPAGE ;
+ for (c=255; c>=0; c--)
+ if (f->chardesc[c].flags & THISPAGE)
+ f->chardesc[c].flags = PREVPAGE |
+ (f->chardesc[c].flags & (STATUSFLAGS)) ;
+ }
+ cmd=skipnop() ;
+ if (cmd==248) break ;
+ if (cmd!=139)
+ error("! Bad DVI file: expected bop") ;
+ thispageloc = ftell(dvifile) ;
+#ifdef DEBUG
+ if (dd(D_PAGE))
+#ifdef SHORTINT
+ (void)fprintf(stderr,"bop at %ld\n", thispageloc) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr,"bop at %d\n", (int)thispageloc) ;
+#endif /* ~SHORTINT */
+#endif /* DEBUG */
+ pagenum = signedquad() ;
+ skipover(40) ;
+ if (ret==2 || (maxsecsize && pagecount >= maxsecsize))
+ break ;
+ }
+/*
+ * Now we have reached the end of a section for some reason.
+ * If there are any pages, we save the pagecount, section location,
+ * and continue.
+ */
+ if (pagecount>0) {
+ register int fc = 0 ;
+ register sectiontype *sp ;
+ register charusetype *cp ;
+
+ totalpages += pagecount ;
+ for (f=fonthead; f; f=f->next)
+ if (f->loaded==1 && f->psname)
+ fc++ ;
+ sp = (sectiontype *)mymalloc((integer)(sizeof(sectiontype) +
+ fc * sizeof(charusetype) + sizeof(fontdesctype *))) ;
+ sp->bos = thissecloc ;
+ if (reverse) {
+ sp->next = sections ;
+ sections = sp ;
+ } else {
+ register sectiontype *p ;
+
+ sp->next = NULL ;
+ if (sections == NULL)
+ sections = sp ;
+ else {
+ for (p=sections; p->next != NULL; p = p->next) ;
+ p->next = sp ;
+ }
+ }
+ sp->numpages = pagecount ;
+#ifdef DEBUG
+ if (dd(D_PAGE))
+#ifdef SHORTINT
+ (void)fprintf(stderr,"Have a section: %ld pages at %ld fontmem %ld\n",
+#else /* ~SHORTINT */
+ (void)fprintf(stderr,"Have a section: %d pages at %d fontmem %d\n",
+#endif /* ~SHORTINT */
+ (integer)pagecount, (integer)thissecloc, (integer)thissectionmem) ;
+#endif /* DEBUG */
+ cp = (charusetype *) (sp + 1) ;
+ fc = 0 ;
+ for (f=fonthead; f; f=f->next)
+ if (f->loaded==1 && f->psname) {
+ register halfword b, bit ;
+
+ cp->psfused = (f->psflag & PREVPAGE) ;
+ f->psflag = 0 ;
+ cp->fd = f ;
+ c = 0 ;
+ for (b=0; b<16; b++) {
+ cp->bitmap[b] = 0 ;
+ for (bit=32768; bit!=0; bit>>=1) {
+ if (f->chardesc[c].flags & PREVPAGE)
+ cp->bitmap[b] |= bit ;
+ c++ ;
+ }
+ }
+ cp++ ;
+ }
+ cp->fd = NULL ;
+ }
+ }
+}
diff --git a/Build/source/texk/dvipsk/protos.h b/Build/source/texk/dvipsk/protos.h
new file mode 100644
index 00000000000..9fd882e89ac
--- /dev/null
+++ b/Build/source/texk/dvipsk/protos.h
@@ -0,0 +1,374 @@
+#ifndef _PROTOS_H_
+
+#define _PROTOS_H_
+
+/* some types need declaration before being used */
+struct nlink;
+struct hps_link;
+struct Char;
+struct String;
+struct tcd;
+
+/* prototypes for functions from bbox.c */
+extern void bbtfmload P1H(fontdesctype *curfnt);
+extern void bbspecial P3H(int h, int v, int nbytes);
+extern void bbdopage P1H(void);
+extern void findbb P1H(int bop);
+
+/* prototypes for functions from color.c */
+extern void colorcmdout P1H(char *s);
+extern void initcolor P1H(void);
+extern void background P1H(char *bkgrnd);
+extern void resetcolorstack P2H(char *p, int outtops);
+extern void bopcolor P1H(int outtops);
+extern void pushcolor P2H(char *p, Boolean outtops);
+extern void popcolor P1H(Boolean outtops);
+
+
+/* prototypes for functions from dopage.c */
+extern void dopage P1H(void);
+
+/* prototypes for functions from dosection.c */
+extern void dosection P2H(sectiontype *s, int c);
+extern int InPageList P1H(int i);
+extern void InstallPL P2H(int pslow, int pshigh);
+extern int ParsePages P1H(char *s);
+
+/* prototypes for functions from dospecial.c */
+extern void specerror P1H(char *s);
+extern void outbangspecials P1H(void);
+extern int IsSame P2H(char *a, char *b);
+extern char *GetKeyVal P2H(char *str, int *tno);
+extern void predospecial P2H(int numbytes, Boolean scanning);
+extern int maccess P1H(char *s);
+extern void dospecial P1H(int numbytes);
+extern void fil2ps P2H(char *task, char *iname);
+extern float *bbdospecial P1H(int nbytes);
+
+/* prototypes for functions from download.c */
+extern void download P2H(charusetype *p, int psfont);
+extern void makepsname P2H(char *s, int n);
+extern void lfontout P1H(int n);
+extern void dopsfont P1H(sectiontype *fs);
+
+/* prototypes for functions from dpicheck.c */
+extern void addsiz P1H(int rhsize);
+extern void adddpi P1H(int hsize);
+extern unsigned short dpicheck P1H(unsigned short dpi);
+
+/* prototypes for functions from drawPS.c */
+#ifdef TPIC
+extern void setPenSize P1H(char *cp);
+extern void addPath P1H(char *cp);
+extern void arc P2H(char *cp, int invis);
+extern void flushDashedPath P2H(int dotted, double inchesPerDash);
+extern void flushPath P1H(int invis);
+extern void flushDashed P2H(char *cp, int dotted);
+extern void flushSpline P1H(char *cp);
+extern void SetShade P1H(char *cp);
+extern void shadeLast P1H(char *cp);
+extern void whitenLast P1H(void);
+extern void blackenLast P1H(void);
+#endif /* TPIC */
+
+/* prototypes for functions from dviinput.c */
+extern void abortpage P1H(void);
+extern short dvibyte P1H(void);
+extern unsigned short twobytes P1H(void);
+extern int threebytes P1H(void);
+extern short signedbyte P1H(void);
+extern short signedpair P1H(void);
+extern int signedtrio P1H(void);
+extern int signedquad P1H(void);
+extern void skipover P1H(int i);
+
+/* prototypes for functions from dvips.c */
+extern void help P1H(int status);
+extern void error_with_perror P2H(char *s, char *fname);
+extern void error P1H(char *s);
+extern void check_checksum P3H(unsigned int c1, unsigned int c2, const char *name);
+extern char *mymalloc P1H(int n);
+extern void morestrings P1H(void);
+extern void checkstrings P1H(void);
+extern void initialize P1H(void);
+extern char *newstring P1H(char *s);
+extern void newoutname P1H(void);
+extern void *revlist P1H(void *p);
+extern void queryargs P1H(void);
+
+/* prototypes for functions from emspecial.c */
+extern void emclear P1H(void);
+extern struct empt *emptput P3H(short point, int x, int y);
+extern struct empt *emptget P1H(short point);
+extern float emunits P2H(float width, char *unit);
+extern void emspecial P1H(char *p);
+extern int readinteger P1H(FILE *f);
+extern unsigned short readhalfword P1H(FILE *f);
+extern int PCXreadline P3H(FILE *pcxf, unsigned char *pcxbuf, unsigned int byteperline);
+/* void PCXgetpalette P5H(FILE *pcxf, struct *pcxh, unsigned char *r, unsigned char *g, unsigned char *b); */
+extern void PCXshowpicture(FILE *pcxf,int wide,int high,int bytes,int cp,int bp,unsigned char *r,unsigned char *g,unsigned char *b);
+extern void imagehead P5H(char *filename, int wide, int high, float emwidth, float emheight);
+extern void imagetail P1H(void);
+extern void pcxgraph P4H(FILE *pcxf, char *filename, float emwidth, float emheight);
+extern void MSP_2_ps P3H(FILE *f, int wide, int high);
+extern void MSP_1_ps P3H(FILE *f, int wide, int high);
+extern void mspgraph P4H(FILE *f, char *filename, float emwidth, float emheight);
+extern void rgbread P4H(FILE *f, int w, int b, char *s);
+extern void rle4read P4H(FILE *f, int w, int b, char *s);
+extern void rle8read P4H(FILE *f, int w, int b, char *s);
+extern void bmpgraph P4H(FILE *f, char *filename, float emwidth, float emheight);
+extern void emgraph P3H(char *filename, float emwidth, float emheight);
+
+/* prototypes for functions from finclude.c */
+extern fontdesctype *ifontdef P5H(char *name, char *area, int scsize, int dssize, char *scname);
+extern void setfamily P1H(fontdesctype *f);
+extern char *getname P1H(char *s);
+extern void includechars P2H(fontdesctype *f, char *s);
+extern void scan1fontcomment P1H(char *p);
+extern int scanvm P1H(char *p);
+extern void scan_fontnames P2H(char *str, char *psfile);
+extern void scanfontusage P2H(char *p, char *psfile);
+extern void scanfontcomments P1H(char *filename);
+extern Boolean okascmd P1H(char *ss);
+extern void nameout P2H(char *area, char *name);
+extern void fonttableout P1H(void);
+
+/* prototypes for functions from flib.c */
+#ifdef FONTLIB
+extern void fliload P1H(void);
+#endif
+
+/* prototypes for functions from fontdef.c */
+extern fontdesctype *newfontdesc P5H(int cksum, int scsize, int dssize, char *name, char *area);
+extern fontdesctype *matchfont P4H(char *name, char *area, int scsize, char *scname);
+extern void fontdef P1H(int siz);
+extern int skipnop P1H(void);
+
+/* prototypes for functions from header.c */
+extern int add_name P2H(char *s, struct header_list **what );
+extern int add_name_general P4H(char *s, struct header_list **what,
+ char *pre, char *post);
+extern void checkhmem P3H(char *s, char *p, char *q);
+extern int add_header P1H(char *s);
+extern int add_header_general P3H(char *s, char *pre, char* post);
+extern char *get_name P1H(struct header_list **what );
+extern void send_headers P1H(void);
+
+/* prototypes for functions from hps.c */
+#ifdef HPS
+extern void do_html P1H(char *s);
+extern int href_or_name P1H(void);
+extern int parseref P1H(void);
+extern int get_string P1H(void);
+extern int do_link P2H(char *s, int type);
+extern unsigned int hash_string P1H(char *s);
+extern struct nlist *lookup_link P2H(char *s, int type);
+extern struct nlist *install_link P3H(char *name, struct hps_link *defn, int type);
+extern struct hps_link *link_dup P1H(struct hps_link *s);
+extern double dvi_to_hps_conv P2H(int i, int dir);
+extern int vert_loc P1H(int i);
+extern struct hps_link *dest_link P1H(char *s);
+extern int count_targets P1H(void);
+extern void do_targets P1H(void);
+extern void do_target_dict P1H(void);
+extern int href_name_match P2H(char *h, char *n);
+extern void stamp_hps P1H(struct hps_link *pl);
+extern void stamp_external P2H(char *s, struct hps_link *pl);
+extern void finish_hps P1H(void);
+extern void set_bitfile P2H(char *s, int mode);
+extern void vertical_in_hps P1H(void);
+extern void print_rect_list P1H(void);
+extern void end_current_box P1H(void);
+extern void start_new_box P1H(void);
+#endif /* HPS */
+
+/* prototypes for functions from loadfont.c */
+extern void badpk P1H(char *s);
+extern short pkbyte P1H(void);
+extern int pkquad P1H(void);
+extern int pktrio P1H(void);
+extern void lectureuser P1H(void);
+extern Boolean pkopen P1H(fontdesctype *fd);
+extern void loadfont P1H(fontdesctype *curfnt);
+
+/* prototypes for functions from makefont.c */
+extern void makefont P3H(char *name, int dpi, int bdpi);
+
+/* prototypes for functions from output.c */
+extern void copyfile P1H(char *s);
+extern void copyfile_general P2H(char *s, struct header_list *h);
+extern void figcopyfile P2H(char *s, int systemtype);
+extern void specialout P1H(char c);
+extern void stringend P1H(void);
+#ifdef SHIFTLOWCHARS
+extern int T1Char P1H(int c);
+#endif
+extern void scout P1H(unsigned char c);
+extern void cmdout P1H(char *s);
+extern void floatout P1H(float n);
+extern void doubleout P1H(double n);
+extern void numout P1H(int n);
+extern void mhexout P2H(unsigned char *p, long len);
+extern void fontout P1H(int n);
+extern void hvpos P1H(void);
+extern void newline P1H(void);
+extern void nlcmdout P1H(char *s);
+extern int mlower P1H(int c);
+extern int ncstrcmp P2H(char *a, char *b);
+extern void findpapersize P1H(void);
+extern void paperspec P2H(char *s, int hed);
+extern char *epsftest P1H(int bop);
+extern void open_output P1H(void);
+extern void initprinter P1H(sectiontype *sect);
+extern void setup P1H(void);
+extern void cleanprinter P1H(void);
+extern void psflush P1H(void);
+extern void pageinit P1H(void);
+extern void pageend P1H(void);
+extern void drawrule P2H(int rw, int rh);
+
+extern void drawchar P2H(chardesctype * c, int cc);
+extern void tell_needed_fonts P1H(void);
+
+/* prototypes for functions from papersiz.c */
+extern long myatodim P1H(char **s );
+extern void handlepapersize P3H(char *p, int *x, int *y);
+
+/* prototypes for functions from pprescan.c */
+extern void pprescanpages P1H(void);
+
+/* prototypes for functions from prescan.c */
+extern void readpreamble P1H(void);
+extern void prescanpages P1H(void);
+
+/* prototypes for functions from repack.c */
+extern void was_putlong P2H(char *a, long i);
+extern long getlong P1H(unsigned char *a);
+extern void dochar P3H(unsigned char *from, short width, short height);
+extern char *makecopy P3H(unsigned char *what, long len, unsigned char *p);
+extern void repack P1H(struct tcd *cp);
+
+/* prototypes for functions from resident.c */
+extern int hash P1H(char *s);
+extern void revpslists P1H(void);
+extern void cleanres P1H(void);
+extern struct resfont *lookup P1H(char *name);
+extern struct resfont *findPSname P1H(char *name);
+extern void add_entry P6H(char *TeXname, char *PSname, char *Fontfile, char *Vectfile, char *specinfo, char *downloadinfo);
+extern int residentfont P1H(fontdesctype *curfnt);
+extern void bad_config P1H(char *err);
+extern char *configstring P2H(char *s, int nullok);
+extern Boolean getdefaults P1H(char *s);
+extern void getpsinfo P1H(char *name);
+extern void checkenv P1H(int which);
+
+/* prototypes for functions from scalewidth.c */
+extern int scalewidth P2H(int a, int b);
+
+/* prototypes for functions from scanpage.c */
+extern Boolean prescanchar P1H(chardesctype *cd);
+extern Boolean preselectfont P1H(fontdesctype *f);
+extern short scanpage P1H(void);
+
+/* prototypes for functions from search.c */
+#ifdef KPATHSEA
+extern FILE *search P3H(kpse_file_format_type format, char *file, char *mode);
+extern FILE *pksearch P6H(kpse_file_format_type format, char *file, char *mode, unsigned short dpi, char **name_ret , int *dpi_ret);
+#else /* !KPATSHEA */
+extern FILE *search P3H(char *path, char *file, char *mode);
+extern FILE *pksearch P6H(char *path, char *file, char *mode, unsigned short dpi, char **name_ret , int *dpi_ret);
+#endif /* KPATHSEA */
+extern FILE *my_real_fopen P2H(char *n, char *t);
+extern int close_file P1H(FILE *f);
+
+/* prototypes for functions from skippage.c */
+extern void skippage P1H(void);
+
+/* prototypes for functions from squeeze.c */
+extern void specialout P1H(char c);
+extern void strout P1H(char *s);
+extern void cmdout P1H(char *s);
+
+/* prototypes for functions from t1part.c */
+extern int DefTypeFont P1H(unsigned char *name);
+extern int GetZeroLine P1H(unsigned char *str);
+extern int GetWord P1H(unsigned char *mem);
+extern int GetToken P1H(void);
+extern int GetNum P1H(void);
+extern int PassToken P1H(void);
+extern int PassString P1H(unsigned char flg);
+extern void *getmem P1H(unsigned int size);
+extern struct Char *AddChar P3H(struct Char *TmpChar, unsigned char *CharName, int num);
+extern void AddStr P2H(unsigned char *name, int num);
+extern void RevChar P1H(struct Char *TmpChar);
+extern void OutChar P2H(struct Char *TmpChar, FILE *fout);
+extern void Reverse P1H(struct String *TmpStr);
+extern void OutStr P2H(struct String *TmpStr, FILE *fout);
+extern void PrintChar P1H(struct Char *TmpChar);
+extern int ClearB P1H(void);
+extern int ChooseChar P2H(unsigned char *name, struct Char *TmpChar);
+extern int FindSeac P1H(int num);
+extern int FindCharW P2H(unsigned char *name, int length);
+extern void ClearCW P1H(struct Char *ThisChar);
+extern int WorkVect P1H(struct Char *TmpChar);
+extern void UnDefineCharsW P1H(void);
+extern struct Char *UnDefineChars P1H(struct Char *TmpChar);
+extern void UnDefineStr P1H(void);
+extern void ScanSubrs P1H(int i);
+extern void ViewReturnCall P5H(int num_err, int top, int *pstack, int j, int depth);
+extern int DeCodeStr P2H(int num, int numseac);
+extern void ScanChars P1H(int i);
+extern void LastLook P1H(void);
+extern int FindKeyWord P2H(int First_Key, int lastkey);
+extern int ScanBinary P1H(void);
+extern unsigned char *itoasp P3H(int n, unsigned char *s, int len);
+extern void SubstNum P1H(void);
+extern unsigned long little4 P1H(unsigned char *buff);
+extern unsigned char CDeCrypt P2H(unsigned char cipher, unsigned int *lcdr);
+extern int EndOfEncoding P1H(int err_num);
+extern void CorrectGrid P1H(void);
+extern int CharEncoding P1H(void);
+extern void FindEncoding P1H(void);
+extern void CheckChoosing P1H(void);
+extern void OutASCII P3H(FILE *fout, unsigned char *buff, unsigned long len);
+extern void BinEDeCrypt P2H(unsigned char *buff, unsigned long len);
+extern void HexEDeCrypt P1H(unsigned char *mem);
+extern int PartialPFA P2H(FILE *fin, FILE *fout);
+extern int PartialPFB P2H(FILE *fin, FILE *fout);
+extern void OutHEX P1H(FILE *fout);
+extern int Afm P1H(void);
+extern int FontPart P3H(FILE *fout, unsigned char *fontfile, unsigned char *vectfile);
+extern int LoadVector P2H(int num, struct Char *TmpChar);
+extern int ChooseVect P1H(struct Char *tmpChar);
+extern void ErrorOfScan P1H(int err);
+extern void NameOfProgram P1H(void);
+
+/* prototypes for functions from tfmload.c */
+extern void badtfm P1H(char *s);
+extern void tfmopen P1H(fontdesctype *fd);
+extern short tfmbyte P1H(void);
+extern unsigned short tfm16 P1H(void);
+extern int tfm32 P1H(void);
+extern int tfmload P1H(fontdesctype *curfnt);
+
+/* prototypes for functions from unpack.c */
+extern short getnyb P1H(void);
+extern Boolean getbit P1H(void);
+extern long pkpackednum P1H(void);
+extern void flip P2H(char *s, long howmany);
+extern long unpack P5H(unsigned char *pack, unsigned short *raster, unsigned short cwidth, unsigned short cheight, unsigned short cmd);
+
+/* prototypes for functions from virtualfont.c */
+extern void badvf P1H(char *s);
+extern short vfbyte P1H(void);
+extern int vfquad P1H(void);
+extern int vftrio P1H(void);
+extern int vfopen P1H(fontdesctype *fd);
+extern struct tft *vfontdef P2H(int s, int siz);
+extern Boolean virtualfont P1H(fontdesctype *curfnt);
+
+/* prototypes for functions from writet1.c */
+extern void load_enc P2H(char *, char **);
+extern boolean t1_subset_2 P3H(char *, unsigned char *, char *);
+
+#endif
diff --git a/Build/source/texk/dvipsk/psfonts.map b/Build/source/texk/dvipsk/psfonts.map
new file mode 100644
index 00000000000..024fa337d31
--- /dev/null
+++ b/Build/source/texk/dvipsk/psfonts.map
@@ -0,0 +1,537 @@
+% original psfonts.map -- match TFM filenames to PostScript FontNames.
+% (If you change or delete `original' on the previous line, dvips won't
+% install its psfonts.map over this file.)
+%
+% This file includes mappings for the standard 35 PostScript fonts, plus
+% freely available high-quality fonts, plus fonts that come with various
+% commercial Unixes. (dvips.texi gives the precise directories for the latter.)
+%
+% The fontname distribution contains listings of many more commercially
+% available fonts. See /tex-archive/info/fontname on CTAN hosts,
+% mirrored from ftp://ftp.tug.org/tex/fontname.
+
+% The standard 35 fonts built in to almost all (but very old) PostScript
+% printers, plus a few variants afm2tfm can construct.
+rpagk AvantGarde-Book
+rpagko AvantGarde-BookOblique
+rpagd AvantGarde-Demi
+rpagdo AvantGarde-DemiOblique
+
+rpbkl Bookman-Light
+rpbkli Bookman-LightItalic
+rpbkd Bookman-Demi
+rpbkdi Bookman-DemiItalic
+
+rpcrr Courier
+rpcrro Courier-Oblique
+rpcrb Courier-Bold
+rpcrbo Courier-BoldOblique
+
+rphvr Helvetica
+rphvro Helvetica-Oblique
+rphvb Helvetica-Bold
+rphvbo Helvetica-BoldOblique
+rphvrrn Helvetica ".82 ExtendFont"
+rphvron Helvetica-Oblique ".82 ExtendFont"
+rphvbrn Helvetica-Bold ".82 ExtendFont"
+rphvbon Helvetica-BoldOblique ".82 ExtendFont"
+
+rpncr NewCenturySchlbk-Roman
+rpncri NewCenturySchlbk-Italic
+rpncb NewCenturySchlbk-Bold
+rpncbi NewCenturySchlbk-BoldItalic
+
+rpplr Palatino-Roman
+rpplri Palatino-Italic
+rpplro Palatino-Roman ".167 SlantFont"
+rpplb Palatino-Bold
+rpplbi Palatino-BoldItalic
+rpplbu Palatino-BoldItalic "-.1763 SlantFont"
+rpplru Palatino-Italic "-.1763 SlantFont"
+rpplrrn Palatino-Roman ".82 ExtendFont"
+rpplrre Palatino-Roman "1.2 ExtendFont"
+
+psyr Symbol
+rpsyr Symbol
+psyro Symbol ".167 SlantFont"
+rpsyro Symbol ".167 SlantFont"
+
+rptmr Times-Roman
+rptmri Times-Italic
+rptmro Times-Roman ".167 SlantFont"
+rptmb Times-Bold
+rptmbi Times-BoldItalic
+rptmbo Times-Bold ".167 SlantFont"
+rptmrrn Times-Roman ".8 ExtendFont"
+rptmrre Times-Roman "1.2 ExtendFont"
+
+pzdr ZapfDingbats
+rpzdr ZapfDingbats
+
+rpzcmi ZapfChancery-MediumItalic
+
+% Some fonts that have been contributed by vendors to the X
+% consortium (also Courier). You can get TFM and VF files for these
+% from ftp://ftp.tug.org/tex (and on ctan).
+rputr Utopia-Regular <putr.pfa
+rputri Utopia-Italic <putri.pfa
+rputb Utopia-Bold <putb.pfa
+rputbi Utopia-BoldItalic <putbi.pfa
+
+rbchr CharterBT-Roman <bchr.pfb
+rbchri CharterBT-Italic <bchri.pfb
+rbchb CharterBT-Bold <bchb.pfb
+rbchbi CharterBT-BoldItalic <bchbi.pfb
+
+% NimbusRoman is actually Times, and NimbusSans is Helvetica.
+ruaqrrc URWAntiquaT-RegularCondensed <uaqrrc.pfa
+rugqb URWGroteskT-Bold <ugqb.pfa
+runmr NimbusRomanNo9L-Regular <unmr.pfa
+runmrs NimbusSansL-Regular <unmrs.pfa
+
+% Bigelow&Holmes have made this freely available to linguists.
+hlcr5s LucidaSansIPA <hlcr5s.pfa
+hlcr5as LucidaSansPhoneticAlternate <hlcr5as.pfa
+
+
+% These fonts come with NeXT computers. Also AvantGarde, Bookman,
+% Helvetica Narrow, New Century Schoolbook, Palatino, Zapf Chancery, and
+% Zapf Dingbats.
+rpaab Aachen-Bold <paab.pfa
+
+rpadr AGaramond-Regular <padr.pfa
+rpadri AGaramond-Italic <padri.pfa
+rpads AGaramond-Semibold <pads.pfa
+rpadsi AGaramond-SemiboldItalic <padsi.pfa
+rpadb AGaramond-Bold <padb.pfa
+rpadbi AGaramond-BoldItalic <padbi.pfa
+rpadrd AGaramond-Titling <padrd.pfa
+rpadrx AGaramondExp-Regular <padrx.pfa
+rpadrix AGaramondExp-Italic <padrix.pfa
+rpadsx AGaramondExp-Semibold <padsx.pfa
+rpadbx AGaramondExp-Bold <padbx.pfa
+rpadbix AGaramondExp-BoldItalic <padbix.pfa
+
+rpbdr Bodoni <pbdr.pfa
+rpbdri Bodoni-Italic <pbdri.pfa
+rpbdb Bodoni-Bold <pbdb.pfa
+rpbdbi Bodoni-BoldItalic <pbdbi.pfa
+rpbdp Bodoni-Poster <pbdp.pfa
+
+rpburw BrushScript <pburw.pfa
+
+rpc5r CaslonFiveForty-Roman <pc5r.pfa
+rpc5ri CaslonFiveForty-Italic <pc5ri.pfa
+
+rpc3r CaslonThree-Roman <pc3r.pfa
+rpc3ri CaslonThree-Italic <pc3ri.pfa
+
+rphvrrc Helvetica-Condensed <phvrrc.pfa
+rphvroc Helvetica-Condensed-Oblique <phvroc.pfa
+rphvbrc Helvetica-Condensed-Bold <phvbrc.pfa
+rphvboc Helvetica-Condensed-BoldObl <phvboc.pfa
+
+rpubr BauerBodoni-Roman <pubr.pfa
+rpubri BauerBodoni-Italic <pubri.pfa
+rpubb BauerBodoni-Bold <pubb.pfa
+rpubbi BauerBodoni-BoldItalic <pubbi.pfa
+
+
+% These fonts come with DEC Ultrix and DEC OSF. Also
+% Courier, Symbol, and Times.
+rplbk LubalinGraph-Book <plbk.pfa
+rplbko LubalinGraph-BookOblique <plbko.pfa
+rplbd LubalinGraph-Demi <plbd.pfa
+rplbdo LubalinGraph-DemiOblique <plbdo.pfa
+
+rpsvl Souvenir-Light <psvl.pfa
+rpsvli Souvenir-LightItalic <psvli.pfa
+rpsvd Souvenir-Demi <psvd.pfa
+rpsvdi Souvenir-DemiItalic <psvdi.pfa
+
+
+% These fonts come with IBM AIX. See INSTALL. Also AvantGarde,
+% Courier, Helvetica, New Century Schoolbook, Symbol, and Times.
+rphbr Hobo <phbr.pfa
+
+rpslr Stencil <pslr.pfa
+
+
+% Adobe Lucida. You have to buy the outlines from Adobe, but
+% ftp.tug.org///tex/lucida.tar.gz has TFM and VF's for TeX
+% (including the math fonts).
+rplcr Lucida <plcr.pfa
+rplcri Lucida-Italic <plcri.pfa
+rplcro Lucida <plcr.pfa ".167 SlantFont"
+rplcb Lucida-Bold <plcb.pfa
+rplcbi Lucida-BoldItalic <plcbi.pfa
+rplcrs LucidaSans <plcrs.pfa
+rplcris LucidaSans-Italic <plcris.pfa
+rplcbs LucidaSans-Bold <plcbs.pfa
+rplcbis LucidaSans-BoldItalic <plcbis.pfa
+rplcrb LucidaBrightNormal <plcrb.pfa
+rplcrbi LucidaBrightItalic <plcrbi.pfa
+rplcbb LucidaBrightBold <plcbb.pfa
+rplcrst LucidaSansTypNormal <plcrst.pfa
+rplcrm LucidaMath-Italic <plcrm.pfa
+rplcrv LucidaMath-Extension <plcrv.pfa
+rplcry LucidaMath-Symbol <plcry.pfa
+
+% Y&Y Lucida. They have their own names, which it doesn't hurt to include.
+
+rylhr LucidaBright <ylhr.pfb
+lbr LucidaBright <lbr.pfb
+rylhri LucidaBright-Italic <ylhri.pfb
+lbi LucidaBright-Italic <lbi.pfb
+rylhro LucidaBright-Oblique <ylhro.pfb
+lbsl LucidaBright-Oblique <lbsl.pfb
+rylhd LucidaBright-Demi <ylhd.pfb
+lbd LucidaBright-Demi <lbd.pfb
+rylhdi LucidaBright-DemiItalic <ylhdi.pfb
+lbdi LucidaBright-DemiItalic <lbdi.pfb
+rylcrs LucidaSans <ylcrs.pfb
+lsr LucidaSans <lsr.pfb
+rylcds LucidaSans-Demi <ylcds.pfb
+lsd LucidaSans-Demi <lsd.pfb
+rylcdis LucidaSans-DemiItalic <ylcdis.pfb
+lsdi LucidaSans-DemiItalic <lsdi.pfb
+rylcrst LucidaSans-Typewriter <ylcrst.pfb
+lstr LucidaSans-Typewriter <lstr.pfb
+rylcrost LucidaSans-TypewriterOblique <ylcrost.pfb
+lsto LucidaSans-TypewriterOblique <lsto.pfb
+rylcbst LucidaSans-TypewriterBold <ylcbst.pfb
+lstb LucidaSans-TypewriterBold <lstb.pfb
+rylcbost LucidaSans-TypewriterBoldOblique <ylcbost.pfb
+lstbo LucidaSans-TypewriterBoldOblique <lstbo.pfb
+rylcr4 LucidaFax <ylcr4.pfb
+lfr LucidaFax <lfr.pfb
+rylcr4i LucidaFax-Italic <ylcr4i.pfb
+lfi LucidaFax-Italic <lfi.pfb
+rylcd4 LucidaFax-Demi <ylcd4.pfb
+lfd LucidaFax-Demi <lfd.pfb
+rylcd4i LucidaFax-DemiItalic <ylcd4i.pfb
+lfdi LucidaFax-DemiItalic <lfdi.pfb
+rylcrf LucidaBlackletter <ylcrf.pfb
+lbl LucidaBlackletter <lbl.pfb
+rylcrihw LucidaHandwriting-Italic <ylcrihw.pfb
+lbh LucidaHandwriting-Italic <lbh.pfb
+rylcris LucidaSans-Italic <ylcris.pfb
+lsi LucidaSans-Italic <lsi.pfb
+rylcriw LucidaCalligraphy-Italic <ylcriw.pfb
+lbc LucidaCalligraphy-Italic <lbc.pfb
+
+% Two random fonts CG donated to typography research at UMB.
+rcggr CgGarthGraphic <cggr.pfa
+rcggri CgGarthGraphicIt <cggri.pfa
+rcggb CgGarthGraphicBd <cggb.pfa
+rcggbi CgGarthGraphicBdIt <cggbi.pfa
+
+rcshr CgShannon <cshr.pfa
+rcshro CgShannonOb <cshro.pfa
+rcshb CgShannonBd <cshb.pfa
+rcshx CgShannonExBd <cshx.pfa
+
+% The same for 8r (new base encoding).
+bchbo8r CharterBT-Bold ".167 SlantFont " <bchb.pfa
+bchro8r CharterBT-Roman ".167 SlantFont " <bchr.pfa
+pbkdo8r Bookman-Demi ".167 SlantFont"
+pbklo8r Bookman-Light ".167 SlantFont"
+pncbo8r NewCenturySchlbk-Bold ".167 SlantFont"
+pncro8r NewCenturySchlbk-Roman ".167 SlantFont"
+pplbo8r Palatino-Bold ".167 SlantFont"
+putbo8r Utopia-Bold ".167 SlantFont " <putb8r.pfa
+putro8r Utopia-Regular ".167 SlantFont " <putr.pfa
+pagk8r AvantGarde-Book "TeXBase1Encoding ReEncodeFont" <8r.enc
+pagko8r AvantGarde-BookOblique "TeXBase1Encoding ReEncodeFont" <8r.enc
+pagd8r AvantGarde-Demi "TeXBase1Encoding ReEncodeFont" <8r.enc
+pagdo8r AvantGarde-DemiOblique "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbkl8r Bookman-Light "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbkli8r Bookman-LightItalic "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbkd8r Bookman-Demi "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbkdi8r Bookman-DemiItalic "TeXBase1Encoding ReEncodeFont" <8r.enc
+pcrr8r Courier "TeXBase1Encoding ReEncodeFont" <8r.enc
+pcrro8r Courier-Oblique "TeXBase1Encoding ReEncodeFont" <8r.enc
+pcrb8r Courier-Bold "TeXBase1Encoding ReEncodeFont" <8r.enc
+pcrbo8r Courier-BoldOblique "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvr8r Helvetica "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvro8r Helvetica-Oblique "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvb8r Helvetica-Bold "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvbo8r Helvetica-BoldOblique "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvrrn8r Helvetica ".82 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvron8r Helvetica-Oblique ".82 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvbrn8r Helvetica-Bold ".82 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvbon8r Helvetica-BoldOblique ".82 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+pncr8r NewCenturySchlbk-Roman "TeXBase1Encoding ReEncodeFont" <8r.enc
+pncri8r NewCenturySchlbk-Italic "TeXBase1Encoding ReEncodeFont" <8r.enc
+pncb8r NewCenturySchlbk-Bold "TeXBase1Encoding ReEncodeFont" <8r.enc
+pncbi8r NewCenturySchlbk-BoldItalic "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplr8r Palatino-Roman "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplri8r Palatino-Italic "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplro8r Palatino-Roman ".167 SlantFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplb8r Palatino-Bold "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplbi8r Palatino-BoldItalic "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplbu8r Palatino-BoldItalic "-.1763 SlantFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplru8r Palatino-Italic "-.1763 SlantFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplrrn8r Palatino-Roman ".82 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+pplrre8r Palatino-Roman "1.2 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmr8r Times-Roman "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmri8r Times-Italic "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmro8r Times-Roman ".167 SlantFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmb8r Times-Bold "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmbi8r Times-BoldItalic "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmbo8r Times-Bold ".167 SlantFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmrrn8r Times-Roman ".8 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmrre8r Times-Roman "1.2 ExtendFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+pzcmi8r ZapfChancery-MediumItalic "TeXBase1Encoding ReEncodeFont" <8r.enc
+putr8r Utopia-Regular <putr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+putri8r Utopia-Italic <putri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+putb8r Utopia-Bold <putb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+putbi8r Utopia-BoldItalic <putbi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+bchr8r CharterBT-Roman <bchr.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+bchri8r CharterBT-Italic <bchri.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+bchb8r CharterBT-Bold <bchb.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+bchbi8r CharterBT-BoldItalic <bchbi.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+uaqrrc8r URWAntiquaT-RegularCondensed <uaqrrc.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+ugqb8r URWGroteskT-Bold <ugqb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+unmr8r NimbusRomanNo9L-Regular <unmr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+unmrs8r NimbusSansL-Regular <unmrs.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+paab8r Aachen-Bold <paab.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padr8r AGaramond-Regular <padr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padri8r AGaramond-Italic <padri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pads8r AGaramond-Semibold <pads.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padsi8r AGaramond-SemiboldItalic <padsi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padb8r AGaramond-Bold <padb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padbi8r AGaramond-BoldItalic <padbi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padrd8r AGaramond-Titling <padrd.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padrx8r AGaramondExp-Regular <padrx.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padrix8r AGaramondExp-Italic <padrix.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padsx8r AGaramondExp-Semibold <padsx.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padbx8r AGaramondExp-Bold <padbx.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+padbix8r AGaramondExp-BoldItalic <padbix.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbdr8r Bodoni <pbdr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbdri8r Bodoni-Italic <pbdri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbdb8r Bodoni-Bold <pbdb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbdbi8r Bodoni-BoldItalic <pbdbi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pbdp8r Bodoni-Poster <pbdp.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pburw8r BrushScript <pburw.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pc5r8r CaslonFiveForty-Roman <pc5r.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pc5ri8r CaslonFiveForty-Italic <pc5ri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pc3r8r CaslonThree-Roman <pc3r.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pc3ri8r CaslonThree-Italic <pc3ri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvrrc8r Helvetica-Condensed <phvrrc.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvroc8r Helvetica-Condensed-Oblique <phvroc.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvbrc8r Helvetica-Condensed-Bold <phvbrc.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+phvboc8r Helvetica-Condensed-BoldObl <phvboc.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pubr8r BauerBodoni-Roman <pubr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pubri8r BauerBodoni-Italic <pubri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pubb8r BauerBodoni-Bold <pubb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pubbi8r BauerBodoni-BoldItalic <pubbi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plbk8r LubalinGraph-Book <plbk.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plbko8r LubalinGraph-BookOblique <plbko.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plbd8r LubalinGraph-Demi <plbd.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plbdo8r LubalinGraph-DemiOblique <plbdo.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+psvl8r Souvenir-Light <psvl.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+psvli8r Souvenir-LightItalic <psvli.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+psvd8r Souvenir-Demi <psvd.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+psvdi8r Souvenir-DemiItalic <psvdi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+phbr8r Hobo <phbr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+pslr8r Stencil <pslr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcr8r Lucida <plcr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcri8r Lucida-Italic <plcri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcro8r Lucida <plcr.pfa ".167 SlantFont" "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcb8r Lucida-Bold <plcb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcbi8r Lucida-BoldItalic <plcbi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcrs8r LucidaSans <plcrs.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcris8r LucidaSans-Italic <plcris.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcbs8r LucidaSans-Bold <plcbs.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcbis8r LucidaSans-BoldItalic <plcbis.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcrb8r LucidaBrightNormal <plcrb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcrbi8r LucidaBrightItalic <plcrbi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcbb8r LucidaBrightBold <plcbb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcrst8r LucidaSansTypNormal <plcrst.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcrm8r LucidaMath-Italic <plcrm.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcrv8r LucidaMath-Extension <plcrv.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+plcry8r LucidaMath-Symbol <plcry.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylhr8r LucidaBright <ylhr.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylhri8r LucidaBright-Italic <ylhri.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylhro8r LucidaBright-Oblique <ylhro.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylhd8r LucidaBright-Demi <ylhd.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylhdi8r LucidaBright-DemiItalic <ylhdi.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcrs8r LucidaSans <ylcrs.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcds8r LucidaSans-Demi <ylcds.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcdis8r LucidaSans-DemiItalic <ylcdis.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcrst8r LucidaSans-Typewriter <ylcrst.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcrost8r LucidaSans-TypewriterOblique <ylcrost.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcbst8r LucidaSans-TypewriterBold <ylcbst.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcbost8r LucidaSans-TypewriterBoldOblique <ylcbost.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcr48r LucidaFax <ylcr4.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcr4i8r LucidaFax-Italic <ylcr4i.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcd48r LucidaFax-Demi <ylcd4.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcd4i8r LucidaFax-DemiItalic <ylcd4i.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcrf8r LucidaBlackletter <ylcrf.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcrihw8r LucidaHandwriting-Italic <ylcrihw.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcris8r LucidaSans-Italic <ylcris.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+ylcriw8r LucidaCalligraphy-Italic <ylcriw.pfb "TeXBase1Encoding ReEncodeFont" <8r.enc
+cggr8r CgGarthGraphic <cggr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+cggri8r CgGarthGraphicIt <cggri.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+cggb8r CgGarthGraphicBd <cggb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+cggbi8r CgGarthGraphicBdIt <cggbi.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+cshr8r CgShannon <cshr.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+cshro8r CgShannonOb <cshro.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+cshb8r CgShannonBd <cshb.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+cshx8r CgShannonExBd <cshx.pfa "TeXBase1Encoding ReEncodeFont" <8r.enc
+
+% The same for 0 (old lwnfss).
+pagk0 AvantGarde-Book
+pagko0 AvantGarde-BookOblique
+pagd0 AvantGarde-Demi
+pagdo0 AvantGarde-DemiOblique
+pbkl0 Bookman-Light
+pbkli0 Bookman-LightItalic
+pbklo0 Bookman-Light ".167 SlantFont"
+pbkd0 Bookman-Demi
+pbkdi0 Bookman-DemiItalic
+pbkdo0 Bookman-Demi ".167 SlantFont"
+pcrr0 Courier
+pcrro0 Courier-Oblique
+pcrb0 Courier-Bold
+pcrbo0 Courier-BoldOblique
+phvr0 Helvetica
+phvro0 Helvetica-Oblique
+phvb0 Helvetica-Bold
+phvbo0 Helvetica-BoldOblique
+phvrrn0 Helvetica ".82 ExtendFont"
+phvron0 Helvetica-Oblique ".82 ExtendFont"
+phvbrn0 Helvetica-Bold ".82 ExtendFont"
+phvbon0 Helvetica-BoldOblique ".82 ExtendFont"
+pncr0 NewCenturySchlbk-Roman
+pncri0 NewCenturySchlbk-Italic
+pncro0 NewCenturySchlbk-Roman ".167 SlantFont"
+pncb0 NewCenturySchlbk-Bold
+pncbi0 NewCenturySchlbk-BoldItalic
+pncbo0 NewCenturySchlbk-Bold ".167 SlantFont"
+pplr0 Palatino-Roman
+pplri0 Palatino-Italic
+pplro0 Palatino-Roman ".167 SlantFont"
+pplb0 Palatino-Bold
+pplbi0 Palatino-BoldItalic
+pplbo0 Palatino-Bold ".167 SlantFont"
+pplbu0 Palatino-BoldItalic "-.1763 SlantFont"
+pplru0 Palatino-Italic "-.1763 SlantFont"
+pplrrn0 Palatino-Roman ".82 ExtendFont"
+pplrre0 Palatino-Roman "1.2 ExtendFont"
+ptmr0 Times-Roman
+ptmri0 Times-Italic
+ptmro0 Times-Roman ".167 SlantFont"
+ptmb0 Times-Bold
+ptmbi0 Times-BoldItalic
+ptmbo0 Times-Bold ".167 SlantFont"
+ptmrrn0 Times-Roman ".8 ExtendFont"
+ptmrre0 Times-Roman "1.2 ExtendFont"
+pzcmi0 ZapfChancery-MediumItalic
+putr0 Utopia-Regular <putr.pfa
+putri0 Utopia-Italic <putri.pfa
+putro0 Utopia-Regular ".167 SlantFont " <putr.pfa
+putb0 Utopia-Bold <putb.pfa
+putbi0 Utopia-BoldItalic <putbi.pfa
+putbo0 Utopia-Bold ".167 SlantFont " <putb.pfa
+bchr0 CharterBT-Roman <bchr.pfb
+bchri0 CharterBT-Italic <bchri.pfb
+bchro0 CharterBT-Roman ".167 SlantFont " <bchr.pfa
+bchb0 CharterBT-Bold <bchb.pfb
+bchbi0 CharterBT-BoldItalic <bchbi.pfb
+bchbo0 CharterBT-Bold ".167 SlantFont " <bchb.pfa
+uaqrrc0 URWAntiquaT-RegularCondensed <uaqrrc.pfa
+ugqb0 URWGroteskT-Bold <ugqb.pfa
+unmr0 NimbusRomanNo9L-Regular <unmr.pfa
+unmrs0 NimbusSansL-Regular <unmrs.pfa
+paab0 Aachen-Bold <paab.pfa
+padr0 AGaramond-Regular <padr.pfa
+padri0 AGaramond-Italic <padri.pfa
+pads0 AGaramond-Semibold <pads.pfa
+padsi0 AGaramond-SemiboldItalic <padsi.pfa
+padb0 AGaramond-Bold <padb.pfa
+padbi0 AGaramond-BoldItalic <padbi.pfa
+padrd0 AGaramond-Titling <padrd.pfa
+padrx0 AGaramondExp-Regular <padrx.pfa
+padrix0 AGaramondExp-Italic <padrix.pfa
+padsx0 AGaramondExp-Semibold <padsx.pfa
+padbx0 AGaramondExp-Bold <padbx.pfa
+padbix0 AGaramondExp-BoldItalic <padbix.pfa
+pbdr0 Bodoni <pbdr.pfa
+pbdri0 Bodoni-Italic <pbdri.pfa
+pbdb0 Bodoni-Bold <pbdb.pfa
+pbdbi0 Bodoni-BoldItalic <pbdbi.pfa
+pbdp0 Bodoni-Poster <pbdp.pfa
+pburw0 BrushScript <pburw.pfa
+pc5r0 CaslonFiveForty-Roman <pc5r.pfa
+pc5ri0 CaslonFiveForty-Italic <pc5ri.pfa
+pc3r0 CaslonThree-Roman <pc3r.pfa
+pc3ri0 CaslonThree-Italic <pc3ri.pfa
+phvrrc0 Helvetica-Condensed <phvrrc.pfa
+phvroc0 Helvetica-Condensed-Oblique <phvroc.pfa
+phvbrc0 Helvetica-Condensed-Bold <phvbrc.pfa
+phvboc0 Helvetica-Condensed-BoldObl <phvboc.pfa
+pubr0 BauerBodoni-Roman <pubr.pfa
+pubri0 BauerBodoni-Italic <pubri.pfa
+pubb0 BauerBodoni-Bold <pubb.pfa
+pubbi0 BauerBodoni-BoldItalic <pubbi.pfa
+plbk0 LubalinGraph-Book <plbk.pfa
+plbko0 LubalinGraph-BookOblique <plbko.pfa
+plbd0 LubalinGraph-Demi <plbd.pfa
+plbdo0 LubalinGraph-DemiOblique <plbdo.pfa
+psvl0 Souvenir-Light <psvl.pfa
+psvli0 Souvenir-LightItalic <psvli.pfa
+psvd0 Souvenir-Demi <psvd.pfa
+psvdi0 Souvenir-DemiItalic <psvdi.pfa
+phbr0 Hobo <phbr.pfa
+pslr0 Stencil <pslr.pfa
+plcr0 Lucida <plcr.pfa
+plcri0 Lucida-Italic <plcri.pfa
+plcro0 Lucida <plcr.pfa ".167 SlantFont"
+plcb0 Lucida-Bold <plcb.pfa
+plcbi0 Lucida-BoldItalic <plcbi.pfa
+plcrs0 LucidaSans <plcrs.pfa
+plcris0 LucidaSans-Italic <plcris.pfa
+plcbs0 LucidaSans-Bold <plcbs.pfa
+plcbis0 LucidaSans-BoldItalic <plcbis.pfa
+plcrb0 LucidaBrightNormal <plcrb.pfa
+plcrbi0 LucidaBrightItalic <plcrbi.pfa
+plcbb0 LucidaBrightBold <plcbb.pfa
+plcrst0 LucidaSansTypNormal <plcrst.pfa
+plcrm0 LucidaMath-Italic <plcrm.pfa
+plcrv0 LucidaMath-Extension <plcrv.pfa
+plcry0 LucidaMath-Symbol <plcry.pfa
+ylhr0 LucidaBright <ylhr.pfb
+ylhri0 LucidaBright-Italic <ylhri.pfb
+ylhro0 LucidaBright-Oblique <ylhro.pfb
+ylhd0 LucidaBright-Demi <ylhd.pfb
+ylhdi0 LucidaBright-DemiItalic <ylhdi.pfb
+ylcrs0 LucidaSans <ylcrs.pfb
+ylcds0 LucidaSans-Demi <ylcds.pfb
+ylcdis0 LucidaSans-DemiItalic <ylcdis.pfb
+ylcrst0 LucidaSans-Typewriter <ylcrst.pfb
+ylcrost0 LucidaSans-TypewriterOblique <ylcrost.pfb
+ylcbst0 LucidaSans-TypewriterBold <ylcbst.pfb
+ylcbost0 LucidaSans-TypewriterBoldOblique <ylcbost.pfb
+ylcr40 LucidaFax <ylcr4.pfb
+ylcr4i0 LucidaFax-Italic <ylcr4i.pfb
+ylcd40 LucidaFax-Demi <ylcd4.pfb
+ylcd4i0 LucidaFax-DemiItalic <ylcd4i.pfb
+ylcrf0 LucidaBlackletter <ylcrf.pfb
+ylcrihw0 LucidaHandwriting-Italic <ylcrihw.pfb
+ylcris0 LucidaSans-Italic <ylcris.pfb
+ylcriw0 LucidaCalligraphy-Italic <ylcriw.pfb
+cggr0 CgGarthGraphic <cggr.pfa
+cggri0 CgGarthGraphicIt <cggri.pfa
+cggb0 CgGarthGraphicBd <cggb.pfa
+cggbi0 CgGarthGraphicBdIt <cggbi.pfa
+cshr0 CgShannon <cshr.pfa
+cshro0 CgShannonOb <cshro.pfa
+cshb0 CgShannonBd <cshb.pfa
+cshx0 CgShannonExBd <cshx.pfa
+
+%
+% Local variables:
+% page-delimiter: "^% \f"
+% End:
diff --git a/Build/source/texk/dvipsk/ptexmac.h b/Build/source/texk/dvipsk/ptexmac.h
new file mode 100644
index 00000000000..ed6ebe7d9be
--- /dev/null
+++ b/Build/source/texk/dvipsk/ptexmac.h
@@ -0,0 +1,196 @@
+/*
+Copyright (c) 1996-2004 Han The Thanh, <thanh@pdftex.org>
+
+This file is part of pdfTeX.
+
+pdfTeX is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+pdfTeX is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with pdfTeX; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+$Id: //depot/Build/source.development/TeX/texk/web2c/pdftexdir/ptexmac.h#18 $
+*/
+
+#ifndef PDFTEXMAC
+#define PDFTEXMAC
+
+/* Not all systems define it. */
+#ifndef M_PI
+#define M_PI 3.14159265358979323846 /* pi */
+#define M_PI_2 1.5707963267948966192E0 /*Hex 2^ 0 * 1.921FB54442D18 */
+#define M_PI_4 7.8539816339744830962E-1 /*Hex 2^-1 * 1.921FB54442D18 */
+#endif
+
+#ifdef WIN32
+// Why relying on gmalloc() ???
+#define gmalloc(n) xmalloc(n)
+#define gfree(p) free(p)
+#define inline __inline
+#define srandom(n) srand(n)
+#define random() rand()
+#endif
+
+/* Pascal WEB macros */
+#define maxinteger 0x7FFFFFFF
+#define maxdimen 0x3FFFFFFF
+
+#define objinfo(n) objtab[n].int0
+
+#define pdfroom(n) do { \
+ if (pdfbufsize < n) \
+ pdftex_fail("PDF output buffer overflowed"); \
+ if (pdfptr + n > pdfbufsize) \
+ pdfflush(); \
+} while (0)
+
+#define pdfout(c) do { \
+ if (pdfptr > pdfbufsize) \
+ pdfflush(); \
+ pdfbuf[pdfptr++] = c; \
+} while (0)
+
+#define pdfoffset() (pdfgone + pdfptr)
+#define pdfinitfont(f) {tmpf = f; pdfcreatefontobj();}
+
+#define MAX_CHAR_CODE 255
+
+#define PRINTF_BUF_SIZE 1024
+#define MAX_CSTRING_LEN 1024
+#define MAX_PSTRING_LEN 1024
+#define SMALL_BUF_SIZE 256
+#define SMALL_ARRAY_SIZE 256
+#define FONTNAME_BUF_SIZE 128 /* a PDF name can be maximum 127 chars long */
+
+#define check_buf(size, buf_size) \
+ if ((size) > (buf_size)) \
+ pdftex_fail("buffer overflow", (buf_size))
+
+#define append_char_to_buf(c, p, buf, buf_size) do { \
+ if (c == 9) \
+ c = 32; \
+ if (c == 13 || c == EOF) \
+ c = 10; \
+ if (c != ' ' || (p > buf && p[-1] != 32)) { \
+ check_buf(p - buf + 1, (buf_size)); \
+ *p++ = c; \
+ } \
+} while (0)
+
+#define append_eol(p, buf, buf_size) do { \
+ check_buf(p - buf + 2, (buf_size)); \
+ if (p - buf > 1 && p[-1] != 10) \
+ *p++ = 10; \
+ if (p - buf > 2 && p[-2] == 32) { \
+ p[-2] = 10; \
+ p--; \
+ } \
+ *p = 0; \
+} while (0)
+
+#define remove_eol(p, buf) do { \
+ p = strend(buf) - 1; \
+ if (*p == 10) \
+ *p = 0; \
+} while (0)
+
+#define skip(p, c) if (*p == c) p++
+
+#define alloc_array(T, n, s) do { \
+ if (T##_array == NULL) { \
+ T##_limit = (s); \
+ if ((n) > T##_limit) \
+ T##_limit = (n); \
+ T##_array = xtalloc(T##_limit, T##_entry); \
+ T##_ptr = T##_array; \
+ } \
+ else if (T##_ptr - T##_array + (n) > T##_limit) { \
+ last_ptr_index = T##_ptr - T##_array; \
+ T##_limit *= 2; \
+ if (T##_ptr - T##_array + (n) > T##_limit) \
+ T##_limit = T##_ptr - T##_array + (n); \
+ xretalloc(T##_array, T##_limit, T##_entry); \
+ T##_ptr = T##_array + last_ptr_index; \
+ } \
+} while (0)
+
+#define is_cfg_comment(c) \
+ (c == 10 || c == '*' || c == '#' || c == ';' || c == '%')
+
+#define define_array(T) \
+T##_entry *T##_ptr, *T##_array = NULL; \
+size_t T##_limit
+
+#define xfree(p) do { if (p != NULL) free(p); p = NULL; } while (0)
+#define strend(s) strchr(s, 0)
+#define xtalloc XTALLOC
+#define xretalloc XRETALLOC
+
+#define ASCENT_CODE 0
+#define CAPHEIGHT_CODE 1
+#define DESCENT_CODE 2
+#define FONTNAME_CODE 3
+#define ITALIC_ANGLE_CODE 4
+#define STEMV_CODE 5
+#define XHEIGHT_CODE 6
+#define FONTBBOX1_CODE 7
+#define FONTBBOX2_CODE 8
+#define FONTBBOX3_CODE 9
+#define FONTBBOX4_CODE 10
+#define MAX_KEY_CODE (FONTBBOX1_CODE + 1)
+#define FONT_KEYS_NUM (FONTBBOX4_CODE + 1)
+
+#define F_INCLUDED 0x01
+#define F_SUBSETTED 0x02
+#define F_TRUETYPE 0x04
+#define F_BASEFONT 0x08
+
+#define set_included(fm) ((fm)->type |= F_INCLUDED)
+#define set_subsetted(fm) ((fm)->type |= F_SUBSETTED)
+#define set_truetype(fm) ((fm)->type |= F_TRUETYPE)
+#define set_basefont(fm) ((fm)->type |= F_BASEFONT)
+
+#define unset_included(fm) ((fm)->type &= ~F_INCLUDED)
+#define unset_subsetted(fm) ((fm)->type &= ~F_SUBSETTED)
+#define unset_truetype(fm) ((fm)->type &= ~F_TRUETYPE)
+#define unset_basefont(fm) ((fm)->type &= ~F_BASEFONT)
+
+#define unset_fontfile(fm) xfree((fm)->ff_name)
+
+#define is_included(fm) ((fm)->type & F_INCLUDED)
+#define is_subsetted(fm) ((fm)->type & F_SUBSETTED)
+#define is_truetype(fm) ((fm)->type & F_TRUETYPE)
+#define is_basefont(fm) ((fm)->type & F_BASEFONT)
+#define no_font_desc(fm) (is_basefont(fm) && !is_included(fm))
+
+#define fm_slant(fm) (fm)->slant
+#define fm_extend(fm) (fm)->extend
+#define fm_fontfile(fm) (fm)->ff_name
+
+#define is_reencoded(fm) ((fm)->encoding != NULL)
+#define is_fontfile(fm) (fm_fontfile(fm) != NULL)
+#define is_t1fontfile(fm) (is_fontfile(fm) && !is_truetype(fm))
+
+#define LINK_TFM 0x01
+#define LINK_PS 0x02
+#define set_tfmlink(fm) ((fm)->links |= LINK_TFM)
+#define set_pslink(fm) ((fm)->links |= LINK_PS)
+#define unset_tfmlink(fm) ((fm)->links &= ~LINK_TFM)
+#define unset_pslink(fm) ((fm)->links &= ~LINK_PS)
+#define has_tfmlink(fm) ((fm)->links & LINK_TFM)
+#define has_pslink(fm) ((fm)->links & LINK_PS)
+
+
+#define set_cur_file_name(s) \
+ cur_file_name = s; \
+ packfilename(maketexstring(cur_file_name), getnullstr(), getnullstr())
+
+#endif /* PDFTEXMAC */
diff --git a/Build/source/texk/dvipsk/reencode/8a.enc b/Build/source/texk/dvipsk/reencode/8a.enc
new file mode 100644
index 00000000000..b1b118c5ecb
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/8a.enc
@@ -0,0 +1,269 @@
+% @@psencodingfile@{
+% author = "Adobe",
+% version = "1.0",
+% date = "22 June 1996",
+% filename = "8a.enc",
+% email = "kb@@mail.tug.org",
+% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+% codetable = "ISO/ASCII",
+% checksum = "269 317 2399",
+% docstring = "Adobe StandardEncoding as an afm2tfm/dvips .enc file."
+% @}
+/StandardEncoding [
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.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
+/asciicircum
+/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
+/asciitilde
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/exclamdown
+/cent
+/sterling
+/fraction
+/yen
+/florin
+/section
+/currency
+/quotesingle
+/quotedblleft
+/guillemotleft
+/guilsinglleft
+/guilsinglright
+/fi
+/fl
+/.notdef
+/endash
+/dagger
+/daggerdbl
+/periodcentered
+/.notdef
+/paragraph
+/bullet
+/quotesinglbase
+/quotedblbase
+/quotedblright
+/guillemotright
+/ellipsis
+/perthousand
+/.notdef
+/questiondown
+/.notdef
+/grave
+/acute
+/circumflex
+/tilde
+/macron
+/breve
+/dotaccent
+/dieresis
+/.notdef
+/ring
+/cedilla
+/.notdef
+/hungarumlaut
+/ogonek
+/caron
+/emdash
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/AE
+/.notdef
+/ordfeminine
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/Lslash
+/Oslash
+/OE
+/ordmasculine
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/ae
+/.notdef
+/.notdef
+/.notdef
+/dotlessi
+/.notdef
+/.notdef
+/lslash
+/oslash
+/oe
+/germandbls
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/Build/source/texk/dvipsk/reencode/8r.enc b/Build/source/texk/dvipsk/reencode/8r.enc
new file mode 100644
index 00000000000..6743b6d0465
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/8r.enc
@@ -0,0 +1,118 @@
+% @@psencodingfile@{
+% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+% version = "0.6",
+% date = "1 July 1998",
+% filename = "8r.enc",
+% email = "tex-fonts@@tug.org",
+% docstring = "Encoding for TrueType or Type 1 fonts
+% to be used with TeX."
+% @}
+%
+% Idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+%
+% (4) Remaining positions left undefined are for use in (hopefully)
+% upward-compatible revisions, if someday more characters are generally
+% available.
+%
+% (5) hyphen appears twice for compatibility with both
+% ASCII and Windows.
+%
+/TeXBase1Encoding [
+% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef
+ /breve /minus /.notdef
+% These are the only two remaining unencoded characters, so may as
+% well include them.
+ /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi
+% (unusual TeX characters available in, e.g., Lucida Bright)
+ /dotlessj /ff /ffi /ffl
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ % very contentious; it's so painful not having quoteleft and quoteright
+ % at 96 and 145 that we move the things normally found there to here.
+ /grave /quotesingle
+% 0x20 (ASCII begins)
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde
+ /.notdef % rubout; ASCII ends
+% 0x80
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+% 0xA0
+ /.notdef % nobreakspace
+ /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot
+ /hyphen % Y&Y (also at 45); Windows' softhyphen
+ /registered
+ /macron
+% 0xD0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
diff --git a/Build/source/texk/dvipsk/reencode/EC.enc b/Build/source/texk/dvipsk/reencode/EC.enc
new file mode 100644
index 00000000000..f092a34a2fe
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/EC.enc
@@ -0,0 +1,82 @@
+%
+% This is the EC encoding.
+%
+% These are the ligs and kerns in addition to those found in the
+% AFM file. (The only ligs in the Times-Roman.afm file are the
+% fi and fl ligatures.)
+%
+% LIGKERN space l =: lslash ; space L =: Lslash ;
+% LIGKERN question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+%
+% We blow away kerns to and from spaces (TeX doesn't have a
+% space) and also remove any kerns from the numbers (although
+% the only kern pair that mentions a number in Times-Roman.afm
+% is one one.)
+%
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+%
+/ECEncoding [ % now 256 chars follow
+% 0x00
+ /grave /acute /circumflex /tilde /dieresis /hungarumlaut /ring /caron
+ /breve /macron /dotaccent /cedilla
+ /ogonek /quotesinglbase /guilsinglleft /guilsinglright
+% 0x10
+ /quotedblleft /quotedblright /quotedblbase /guillemotleft
+ /guillemotright /endash /emdash /cwm
+ /zeroinferior /dotlessi /dotlessj /ff /fi /fl /ffi /ffl
+% 0x20
+ /visualspace /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /hyphen
+% 0x80
+ /Abreve /Aogonek /Cacute /Ccaron /Dcaron /Ecaron /Eogonek /Gbreve
+ /Lacute /Lcaron /Lslash /Nacute /Ncaron /Ng /Ohungarumlaut /Racute
+% 0x90
+ /Rcaron /Sacute /Scaron /Scedilla
+ /Tcaron /Tcedilla /Uhungarumlaut /Uring
+ /Ydieresis /Zacute /Zcaron /Zdotaccent /IJ /Idotaccent /dbar /section
+% 0xA0
+ /abreve /aogonek /cacute /ccaron /dcaron /ecaron /eogonek /gbreve
+ /lacute /lcaron /lslash /nacute /ncaron /ng /ohungarumlaut /racute
+% 0xB0
+ /rcaron /sacute /scaron /scedilla
+ /tquoteright /tcedilla /uhungarumlaut /uring
+ /ldot /zacute /zcaron /zdotaccent /ij /exclamdown /questiondown /sterling
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /Germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /germandbls
+] def
diff --git a/Build/source/texk/dvipsk/reencode/README b/Build/source/texk/dvipsk/reencode/README
new file mode 100644
index 00000000000..ee37c9308a3
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/README
@@ -0,0 +1,15 @@
+This directory contains files regarding a naming scheme for fonts to be
+used with TeX. Mail comments and bug reports to tex-fonts@tug.org.
+
+See NEWS for the version number and changes by release.
+
+fontname.texi is a Texinfo document describing the overall scheme.
+fontname.info is the info version.
+You can make fontname.dvi by running TeX on fontname.texi.
+
+The *.map files are the actual tables of abbreviations and font
+lists. They include directory names where appropriate. They are used by
+the MakeTeXPK distributed with the kpathsea drivers, web2c, etc. All
+except special.map are described in fontname.texi.
+
+The *.enc files are encoding files for use with Afm2tfm (comes with dvips(k)).
diff --git a/Build/source/texk/dvipsk/reencode/ad.enc b/Build/source/texk/dvipsk/reencode/ad.enc
new file mode 100644
index 00000000000..6e1958da9d0
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/ad.enc
@@ -0,0 +1,87 @@
+% Name is ad.enc.
+% v. 1.1.
+% lesenko@mx.ihep.su (Sergey Lesenko)
+%
+% This is compatible with the Adobe StandardEncoding, but has the
+% additional characters sometimes present. It's used as the base vector
+% for partial font downloading if no other encoding vector is found.
+
+/AdobeEncoding [
+ /Zcaron /zcaron /dotlessj /ff /ffi /ffl /trademark /Ydieresis
+ /Scaron /scaron /brokenbar /copyright /logicalnot /registered
+ /degree /plusminus /twosuperior /threesuperior /mu /onesuperior
+ /onequarter /onehalf /threequarters
+ /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+
+%% 040
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand
+ /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
+ /period /slash
+
+%% 060
+ /zero /one /two /three /four /five /six /seven /eight /nine /colon
+ /semicolon /less /equal /greater /question
+
+%% 0100
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+
+%% 0120
+ /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
+ /bracketright /asciicircum /underscore
+
+%% 0140
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+
+%% 0160
+ /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde
+%%
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /.notdef /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+%%
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /.notdef /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+
+%%
+ /.notdef
+
+%% 0240
+ /.notdef /exclamdown /cent /sterling /fraction /yen /florin /section
+ /currency /quotesingle /quotedblleft /guillemotleft /guilsinglleft
+ /guilsinglright /fi /fl
+
+%% 0260
+ /.notdef /endash /dagger /daggerdbl /periodcentered /.notdef
+ /paragraph /bullet /quotesinglbase /quotedblbase /quotedblright
+ /guillemotright /ellipsis /perthousand /.notdef /questiondown
+ /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /.notdef /ring /cedilla /.notdef
+ /hungarumlaut /ogonek /caron
+
+%% 0320
+ /emdash
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn
+
+%% 0340
+ /.notdef /AE /.notdef /ordfeminine
+ /eth /ntilde /ograve /oacute
+
+%% 0350
+ /Lslash /.notdef /OE /ordmasculine
+ /ocircumflex /otilde /odieresis /divide
+
+
+%% 0360
+ /.notdef /ae /ugrave /uacute /ucircumflex
+ /dotlessi /.notdef /.notdef
+
+%% 0370
+ /lslash /oslash /oe /germandbls
+ /udieresis /yacute /thorn /ydieresis
+] def
diff --git a/Build/source/texk/dvipsk/reencode/asex.enc b/Build/source/texk/dvipsk/reencode/asex.enc
new file mode 100644
index 00000000000..f0abd28a75e
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/asex.enc
@@ -0,0 +1,120 @@
+% This is ASEX encoding. (file ASEX.enc)
+%
+% Adobe Standard Encoding Extended.
+%
+% Creator: Pierre A. MacKay mackay@cs.washington.edu
+% Creation Date: Thu Aug 31 08:56:22 PDT 1993
+%
+% This is an input coding file for creation of a "raw font".
+% It can, for esample be used with Radical Eye Software's
+% afm2tfm. Use with the -p flag. This same encoding can also be
+% used with ps2pk to create a complete set of bitmapped
+% simplex characters.
+%
+% The {\em sole} purpose of this file is to ensure that all {\em simplex}
+% characters in the font are made available in the raw TFM. Therefore
+% there are no ligatures or any other refinements. The raw TFM
+% file contains no ligatures or kernings---nothing but character
+% metrics. We retain Adobe Standard encoding for all mapped
+% characters in the AFM file, and extend the list by adding
+% the unmapped simple characters into the empty code positions
+% from O 200 to O 240. It is assumed that the output coding used
+% for the TeX tfm will be different from this ( -t flag in afm2tfm ).
+%
+% The extended part of this encoding is consistent with the general
+% run of text fonts from Adobe, BitStream, DTC, Linotype, Monotype,
+% URW and probably others as well. For SuperFont characters, see below.
+% In a library of over 300 text fonts, I have found no variants. The only
+% variant in display fonts is the occasional absence of lowercase.
+%
+% Jan Michael Rynnings has pointed out that a few very carefully designed
+% fonts, e. g. Adobe Garamond and Adobe Caslon, may treat all the accented
+% characters as simplex glyphs (must make for a large pfa file), and that
+% this input encoding would not recognize such refinements. True---but
+% such fonts will be a tiny minority, and can be dealt with by
+% special encoding files. A couple of tests indicate that it makes
+% no perceptible difference whether you use composites formed from
+% the CC recipes in the AFM file or call the characters out directly
+% from the PFA file. There seems no reason, therefore, to fill the
+% raw font with characters that are clearly identified as composites
+% in the AFM file.
+%
+% Usage:
+% afm2tfm <FontName>.afm -p ASEX.enc -t <output>.enc -v <vplname> <rawname>
+%
+/ASEXEncoding [ % now 256 chars follow
+%
+% The following will replace the characters from 0 to 32 in the raw encoding
+% if you have access to a SuperFont. There is reason to hope that this
+% set will be as stable as the unmapped set in current text fonts
+% If you don't have a SuperFont, and have to create any of these as a
+% composite, precede the name with a dot, as is done here for
+% Scedilla and scedilla. The change in name keeps afm2tfm from thinking
+% that the character already exists when it comes to evaluate the output
+% (-t flag) encoding.
+%
+% 0x00
+ /Aogonek /Eogonek /Iogonek /Kafii9170 /Lafii9170 /Lcaron /Nafii9170 /Rafii9170
+ /Safii9170 /.Scedilla /Tafii9170 /Uogonek /.notdef /.notdef /.notdef /.notdef
+% 0x10
+ /aogonek /eogonek /iogonek /kafii9170 /lafii9170 /lcaron /nafii9170 /rafii9170
+ /safii9170 /.scedilla /tafii9170 /uogonek /.notdef /.notdef /.notdef /.notdef
+% 0x20 % Keep the space, for use as \boundarychar (Give it zero width in vpl)
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+%
+% This is the Extension to Adobe Standard Encoding
+%
+% In as many of the next 32 positions as necessary, include
+% all the unmapped simple (non-composite) characters. The
+% inclusion of Ccedilla and ccedilla is problematic. These are
+% composites in some schemes, simple in others. Best to
+% assume they are simplex. Characters are entered in alphabetical order
+% by name. If you need to create your own composite for Ccedilla
+% ccedilla or Eth, precede the name with a dot as indicated above.
+%
+% 0x80
+ /Ccedilla /Eth /Thorn /brokenbar /ccedilla /copyright /degree /divide
+ /eth /logicalnot /minus /mu /multiply /onehalf /onequarter /onesuperior
+% 0x90
+ /plusminus /registered /thorn /threequarters
+ /threesuperior /trademark /twosuperior /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%
+% From here on the order is again Adobe Standard Encoding
+%
+% 0xA0
+ /.notdef /exclamdown /cent /sterling /fraction /yen /florin /section
+ /currency /quotesingle /quotedblleft /guillemotleft
+ /guilsinglleft /guilsinglright /fi /fl
+% 0xB0
+ /.notdef /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph /bullet
+ /quotesinglbase /quotedblbase /quotedblright /guillemotright
+ /ellipsis /perthousand /.notdef /questiondown
+% 0xC0
+ /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+% 0xD0
+ /emdash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% 0xE0
+ /.notdef /AE /.notdef /ordfeminine /.notdef /.notdef /.notdef /.notdef
+ /Lslash /Oslash /OE /ordmasculine /.notdef /.notdef /.notdef /.notdef
+% 0xF0
+ /.notdef /ae /.notdef /.notdef /.notdef /dotlessi /.notdef /.notdef
+ /lslash /oslash /oe /germandbls /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/Build/source/texk/dvipsk/reencode/asexp.enc b/Build/source/texk/dvipsk/reencode/asexp.enc
new file mode 100644
index 00000000000..0e769279359
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/asexp.enc
@@ -0,0 +1,84 @@
+% Date: Tue, 19 Jul 1994 07:11:11 -0700
+% From: mackay@cs.washington.edu (Pierre MacKay)
+% To: kb@cs.umb.edu, alanje@cogs.susx.ac.uk, mackay@cs.washington.edu,
+% Sebastian.Rahtz@cl.cam.ac.uk, unixtex@u.washington.edu
+% Subject: ASEXP
+%
+% Since the expert font encoding vector is apparently left
+% alone even by Windows, here is the version I have been using.
+%
+% This is ASEXP encoding, for the Monotype Expert character set.
+% In Baskerville only the Roman Regular has all the characters.
+% It seems to be the same as what Adobe uses---who knows?
+%
+/ASEXPEncoding [ % now 256 chars follow
+% 0x00
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% 0x10
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% 0x20 % The independent accent slash doesn't exist
+ /.notdef /exclamsmall /Hungarumlautsmall /.notdef
+ /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall
+ /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader
+ /comma /hyphen /period /fraction
+% 0x30
+ /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle
+ /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle
+ /eightoldstyle /nineoldstyle /colon /semicolon
+ /commasuperior /threequartersemdash /periodsuperior /questionsmall
+% 0x40
+ /.notdef /asuperior /bsuperior /centsuperior
+ /dsuperior /esuperior /.notdef /.notdef
+ /.notdef /isuperior /.notdef /.notdef
+ /lsuperior /msuperior /nsuperior /osuperior
+% 0x50
+ /.notdef /.notdef /rsuperior /ssuperior
+ /tsuperior /.notdef /ff /fi
+ /fl /ffi /ffl /parenleftinferior
+ /.notdef /parenrightinferior /Circumflexsmall /hyphensuperior
+% 0x60
+ /Gravesmall /Asmall /Bsmall /Csmall /Dsmall /Esmall /Fsmall /Gsmall
+ /Hsmall /Ismall /Jsmall /Ksmall /Lsmall /Msmall /Nsmall /Osmall
+% 0X70
+ /Psmall /Qsmall /Rsmall /Ssmall /Tsmall /Usmall /Vsmall /Wsmall
+ /Xsmall /Ysmall /Zsmall /colonmonetary
+ /onefitted /rupiah /Tildesmall /.notdef
+% 0x80
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% 0x90
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% 0xA0
+ /.notdef /exclamdownsmall /centoldstyle /Lslashsmall
+ /.notdef /.notdef /Scaronsmall /Zcaronsmall
+ /Dieresissmall /Brevesmall /Caronsmall /.notdef
+ /Dotaccentsmall /.notdef /.notdef /Macronsmall
+% 0xB0
+ /.notdef /.notdef /figuredash /hypheninferior
+ /.notdef /.notdef /Ogoneksmall /Ringsmall
+ /Cedillasmall /.notdef /.notdef /.notdef
+ /onequarter /onehalf /threequarters /questiondownsmall
+% 0xC0
+ /oneeighth /threeeighths /fiveeighths /seveneighths
+ /onethird /twothirds /.notdef /.notdef
+ /zerosuperior /onesuperior /twosuperior /threesuperior
+ /foursuperior /fivesuperior /sixsuperior /sevensuperior
+% 0xD0
+ /eightsuperior /ninesuperior /zeroinferior /oneinferior
+ /twoinferior /threeinferior /fourinferior /fiveinferior
+ /sixinferior /seveninferior /eightinferior /nineinferior
+ /centinferior /dollarinferior /periodinferior /commainferior
+% 0xE0
+ /Agravesmall /Aacutesmall /Acircumflexsmall /Atildesmall
+ /Adieresissmall /Aringsmall /AEsmall /Ccedillasmall
+ /Egravesmall /Eacutesmall /Ecircumflexsmall /Edieresissmall
+ /Igravesmall /Iacutesmall /Icircumflexsmall /Idieresissmall
+% 0xF0
+ /Ethsmall /Ntildesmall /Ogravesmall /Oacutesmall
+ /Ocircumflexsmall /Otildesmall /Odieresissmall /OEsmall
+ /Oslashsmall /Ugravesmall /Uacutesmall /Ucircumflexsmall
+ /Udieresissmall /Yacutesmall /Thornsmall /Ydieresissmall
+] def
diff --git a/Build/source/texk/dvipsk/reencode/clean.sh b/Build/source/texk/dvipsk/reencode/clean.sh
new file mode 100644
index 00000000000..411c4d92d2b
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/clean.sh
@@ -0,0 +1,2 @@
+#!/bin/csh
+rm -rf *~ *.tfm *.vpl *.vf *.afm testfont.*
diff --git a/Build/source/texk/dvipsk/reencode/cork.enc b/Build/source/texk/dvipsk/reencode/cork.enc
new file mode 100644
index 00000000000..eb80d315c7a
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/cork.enc
@@ -0,0 +1,85 @@
+% This is the Cork encoding, aka EC, Cork, aka TeX Latin 1, as
+% described in TTN 1(4), December 1992, and TUGboat 11(4), November
+% 1990, page 514. EC is the name of the Computer Modern-based fonts in
+% this encoding. NFSS and Fontinst know it by `T1'.
+%
+% These are the ligs and kerns in addition to those found in the
+% AFM file. (The only ligs in the Times-Roman.afm file are the
+% fi and fl ligatures.)
+%
+% LIGKERN space l =: lslash ; space L =: Lslash ;
+% LIGKERN question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+%
+% We blow away kerns to and from spaces (TeX doesn't have a
+% space) and also remove any kerns from the numbers (although
+% the only kern pair that mentions a number in Times-Roman.afm
+% is one one.)
+%
+% LIGKERN space @{@} * ; * @{@} space ; zero @{@} * ; * @{@} zero ;
+% LIGKERN one @{@} * ; * @{@} one ; two @{@} * ; * @{@} two ;
+% LIGKERN three @{@} * ; * @{@} three ; four @{@} * ; * @{@} four ;
+% LIGKERN five @{@} * ; * @{@} five ; six @{@} * ; * @{@} six ;
+% LIGKERN seven @{@} * ; * @{@} seven ; eight @{@} * ; * @{@} eight ;
+% LIGKERN nine @{@} * ; * @{@} nine ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+%
+/CorkEncoding [ % now 256 chars follow
+% 0x00
+ /grave /acute /circumflex /tilde /dieresis /hungarumlaut /ring /caron
+ /breve /macron /dotaccent /cedilla
+ /ogonek /quotesinglbase /guilsinglleft /guilsinglright
+% 0x10
+ /quotedblleft /quotedblright /quotedblbase /guillemotleft
+ /guillemotright /endash /emdash /compworkmark
+ /perthousandzero /dotlessi /dotlessj /ff /fi /fl /ffi /ffl
+% 0x20
+ /visualspace /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /hyphen
+% 0x80
+ /Abreve /Aogonek /Cacute /Ccaron /Dcaron /Ecaron /Eogonek /Gbreve
+ /Lacute /Lcaron /Lslash /Nacute /Ncaron /Ng /Ohungarumlaut /Racute
+% 0x90
+ /Rcaron /Sacute /Scaron /Scedilla
+ /Tcaron /Tcedilla /Uhungarumlaut /Uring
+ /Ydieresis /Zacute /Zcaron /Zdotaccent /IJ /Idotaccent /dbar /section
+% 0xA0
+ /abreve /aogonek /cacute /ccaron /dcaron /ecaron /eogonek /gbreve
+ /lacute /lcaron /lslash /nacute /ncaron /ng /ohungarumlaut /racute
+% 0xB0
+ /rcaron /sacute /scaron /scedilla
+ /tquoteright /tcedilla /uhungarumlaut /uring
+ /ydieresis /zacute /zcaron /zdotaccent
+ /ij /exclamdown /questiondown /sterling
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /Germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /germandbls
+] def
diff --git a/Build/source/texk/dvipsk/reencode/dc.enc b/Build/source/texk/dvipsk/reencode/dc.enc
new file mode 100644
index 00000000000..270afa81ef9
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/dc.enc
@@ -0,0 +1,79 @@
+% This is an old version of the Cork encoding, with no value but historical.
+%
+% These are the ligs and kerns in addition to those found in the
+% AFM file. (The only ligs in the Times-Roman.afm file are the
+% fi and fl ligatures.)
+%
+% LIGKERN space l =: lslash ; space L =: Lslash ;
+% LIGKERN question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+%
+% We blow away kerns to and from spaces (TeX doesn't have a
+% space) and also remove any kerns from the numbers (although
+% the only kern pair that mentions a number in Times-Roman.afm
+% is one one.)
+%
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+%
+/DCEncoding [ % now 256 chars follow
+% 0x00
+ /grave /acute /circumflex /tilde /dieresis /hungarumlaut /ring /caron
+ /breve /macron /dotaccent /cedilla
+ /ogonek /quotesinglbase /guilsinglleft /guilsinglright
+% 0x10
+ /quotedblleft /quotedblright /quotedblbase /guillemotleft
+ /guillemotright /endash /emdash /.notdef
+ /zeroinferior /dotlessi /dotlessj /ff /fi /fl /ffi /ffl
+% 0x20
+ /.notdef /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /hyphen
+% 0x80
+ /Abreve /Aogonek /Cacute /Ccaron /Dcaron /Ecaron /Eogonek /Gbreve
+ /Lacute /Lcaron /Lslash /Nacute /Ncaron /Ng /Ohungarumlaut /Racute
+% 0x90
+ /Rcaron /Sacute /Scaron /Scedilla /Tcaron /Tcedilla /Uhungarumlaut /Uring
+ /Ldot /Zacute /Zcaron /Zdotaccent /IJ /Idotaccent /dbar /section
+% 0xA0
+ /abreve /aogonek /cacute /ccaron /dcaron /ecaron /eogonek /gbreve
+ /lacute /lcaron /lslash /nacute /ncaron /ng /ohungarumlaut /racute
+% 0xB0
+ /rcaron /sacute /scaron /scedilla /tcaron /tcedilla /uhungarumlaut /uring
+ /ldot /zacute /zcaron /zdotaccent /ij /exclamdown /questiondown /sterling
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /SS
+% 0xE0
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /germandbls
+] def
diff --git a/Build/source/texk/dvipsk/reencode/dvips.enc b/Build/source/texk/dvipsk/reencode/dvips.enc
new file mode 100644
index 00000000000..ea451ff106b
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/dvips.enc
@@ -0,0 +1,75 @@
+% @@psencodingfile@{
+% author = "T. Rokicki, K. Berry",
+% version = "2.0",
+% date = "22 June 1996",
+% filename = "dvips.enc",
+% email = "kb@@mail.tug.org",
+% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+% codetable = "ISO/ASCII",
+% checksum = "75 515 3715",
+% docstring = "An encoding for PostScript fonts to be used with TeX."
+% @}
+%
+% This is almost the default encoding produced by the afm2tfm program
+% that comes with the dvips distribution, when it is applied to a
+% StandardEncoding PostScript font. The positions of the accented
+% characters (which afm2tfm assigned more or less randomly in the
+% previous set of fonts) have been held fixed.
+%
+% It is almost upward-compatible with TeX text. (The primary exceptions
+% are dotaccent and hungarumlaut.) Some of the ligatures are also in
+% different positions, but this is not important, since ligature
+% positions are defined in the TFM file, not by macros.
+%
+% The character positions were assigned in this order:
+% 1) non-composite characters in the afm2tfm encoding (except dotlessj
+% was included in its plain TeX position);
+% 2) available characters in the Cork (EC) encoding;
+% 3) remaining composite characters in the base encoding (starting at
+% position 130 decimal). We don't include all the other base
+% characters because that changes the height/depth/width tables in
+% the TFM files (because more characters mean more distinct values).
+%
+% We leave the initial positions open for the Greek letters in Times-Roman.
+%
+/DvipsEncoding [
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /quotesingle /exclamdown /questiondown
+ /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring
+ /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+ /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 /dieresis
+ /asciicircum /asciitilde /Ccedilla /Iacute
+ /Icircumflex /atilde /edieresis /egrave
+ /scaron /zcaron /Eth /ff /ffi /ffl /.notdef /.notdef
+ /.notdef /.notdef /Scaron /.notdef /.notdef /.notdef /.notdef /.notdef
+ /Ydieresis /.notdef /Zcaron /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /cent /sterling /fraction /yen /florin /section
+ /currency /copyright /quotedblleft /guillemotleft
+ /guilsinglleft /guilsinglright /fi /fl
+ /degree /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph /bullet
+ /quotesinglbase /quotedblbase /quotedblright /guillemotright
+ /ellipsis /perthousand /.notdef /.notdef
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /.notdef /dotaccent
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /hungarumlaut /ogonek /Idieresis
+ /emdash /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /.notdef
+ /.notdef /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /.notdef
+ /agrave /aacute /acircumflex /ordfeminine
+ /adieresis /aring /.notdef /ccedilla
+ /Lslash /eacute /ecircumflex /ordmasculine
+ /igrave /iacute /icircumflex /idieresis
+ /.notdef /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /.notdef
+ /lslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
+] def
diff --git a/Build/source/texk/dvipsk/reencode/extex.enc b/Build/source/texk/dvipsk/reencode/extex.enc
new file mode 100644
index 00000000000..e67970b5a1e
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/extex.enc
@@ -0,0 +1,79 @@
+%
+% This is the extended TeX encoding.
+%
+% These are the ligs and kerns in addition to those found in the
+% AFM file. (The only ligs in the Times-Roman.afm file are the
+% fi and fl ligatures.)
+%
+% LIGKERN space l =: lslash ; space L =: Lslash ;
+% LIGKERN question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+%
+% We blow away kerns to and from spaces (TeX doesn't have a
+% space) and also remove any kerns from the numbers (although
+% the only kern pair that mentions a number in Times-Roman.afm
+% is one one.)
+%
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+%
+/ExtendedTeXEncoding [ % now 256 chars follow
+% 0x00
+ /grave /acute /circumflex /tilde /dieresis /hungarumlaut /ring /caron
+ /breve /macron /dotaccent /cedilla
+ /ogonek /quotesinglbase /guilsinglleft /guilsinglright
+% 0x10
+ /quotedblleft /quotedblright /quotedblbase /guillemotleft
+ /guillemotright /endash /emdash /cwm
+ /zeroinferior /dotlessi /dotlessj /ff /fi /fl /ffi /ffl
+% 0x20
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /minus /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /hyphen
+% 0x80
+ /Abreve /Aogonek /Cacute /Ccaron /Dcaron /Ecaron /Eogonek /Gbreve
+ /Lacute /Lcaron /Lslash /Nacute /Ncaron /Eng /Ohungarumlaut /Racute
+% 0x90
+ /Rcaron /Sacute /Scaron /Scedilla /Tcaron /Tcedilla /Uhungarumlaut /Uring
+ /Ydieresis /Zacute /Zcaron /Zdot /IJ /Idot /dstroke /paragraph
+% 0xA0
+ /abreve /aogonek /cacute /ccaron /dcaron /ecaron /eogonek /gbreve
+ /lacute /lcaron /lslash /nacute /ncaron /eng /ohungarumlaut /racute
+% 0xB0
+ /rcaron /sacute /scaron /scedilla /tcaron /tcedilla /uhungarumlaut /uring
+ /ydieresis /zacute /zcaron /zdot /ij /exclamdown /questiondown /sterling
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /Germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /germandbls
+] def
diff --git a/Build/source/texk/dvipsk/reencode/funky.enc b/Build/source/texk/dvipsk/reencode/funky.enc
new file mode 100644
index 00000000000..84f9798cc31
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/funky.enc
@@ -0,0 +1,81 @@
+%
+% This is our funky encoding. Not for the weak.
+%
+% LIGKERN || A =:| A ; || = 46 ; a {} b ;
+%
+/FunkyEncoding [
+ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma
+ /Upsilon /Phi /Psi /Omega /arrowup /arrowdown /quotesingle
+ /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
+ /caron /breve /macron /ring /cedilla /germandbls /ae /oe
+ /oslash /AE /OE /Oslash /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
+ /E /C /D /F /I /G /H /J /O /K /L /M /N /P /U /Q /R /S /T /V /Y /W /X /Z /A /B
+ /bracketleft /backslash /bracketright /circumflex /underscore /quoteleft
+ /e /c /d /f /i /g /h /j /o /k /l /m /n /p /u /q /r /s /t /v /y /w /x /z /a /b
+ /braceleft /bar /braceright /tilde /dieresis % 128 chars
+ /T /T /T /T /T /T /T /T /T /T
+ /o /o /o /o /o /o /o /o /o /o
+ /two /two /two /two /two % 153 chars, 103 more to go
+ /fi /ff /ffi /ffl % if they exist
+ /some /characters /that /dont /exist
+ /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. % 182 so far
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef % that's 128.
+ ] def
+%
+% Let's be able to add mod 9 automatically with the kerns.
+%
+% LIGKERN zero zero =: zero ; zero one =: one ; zero two =: two ;
+% LIGKERN zero three =: three ; zero four =: four ; zero five =: five ;
+% LIGKERN zero six =: six ; zero seven =: seven ; zero eight =: eight ;
+% LIGKERN zero nine =: zero ; one zero =: one ; one one =: two ;
+% LIGKERN one two =: three ; one three =: four ; one four =: five ;
+% LIGKERN one five =: six ; one six =: seven ; one seven =: eight ;
+% LIGKERN one eight =: zero ; one nine =: one ; two zero =: two ;
+% LIGKERN two one =: three ; two two =: four ; two three =: five ;
+% LIGKERN two four =: six ; two five =: seven ; two six =: eight ;
+% LIGKERN two seven =: zero ; two eight =: one ; two nine =: two ;
+% LIGKERN three zero =: three ; three one =: four ; three two =: five ;
+% LIGKERN three three =: six ; three four =: seven ; three five =: eight ;
+% LIGKERN three six =: zero ; three seven =: one ; three eight =: two ;
+% LIGKERN three nine =: three ; four zero =: four ; four one =: five ;
+% LIGKERN four two =: six ; four three =: seven ; four four =: eight ;
+% LIGKERN four five =: zero ; four six =: one ; four seven =: two ;
+% LIGKERN four eight =: three ; four nine =: four ; five zero =: five ;
+% LIGKERN five one =: six ; five two =: seven ; five three =: eight ;
+% LIGKERN five four =: zero ; five five =: one ; five six =: two ;
+% LIGKERN five seven =: three ; five eight =: four ; five nine =: five ;
+% LIGKERN six zero =: six ; six one =: seven ; six two =: eight ;
+% LIGKERN six three =: zero ; six four =: one ; six five =: two ;
+% LIGKERN six six =: three ; six seven =: four ; six eight =: five ;
+% LIGKERN six nine =: six ; seven zero =: seven ; seven one =: eight ;
+% LIGKERN seven two =: zero ; seven three =: one ; seven four =: two ;
+% LIGKERN seven five =: three ; seven six =: four ; seven seven =: five ;
+% LIGKERN seven eight =: six ; seven nine =: seven ; eight zero =: eight ;
+% LIGKERN eight one =: zero ; eight two =: one ; eight three =: two ;
+% LIGKERN eight four =: three ; eight five =: four ; eight six =: five ;
+% LIGKERN eight seven =: six ; eight eight =: seven ; eight nine =: eight ;
+% LIGKERN nine zero =: zero ; nine one =: one ; nine two =: two ;
+% LIGKERN nine three =: three ; nine four =: four ; nine five =: five ;
+% LIGKERN nine six =: six ; nine seven =: seven ; nine eight =: eight ;
+% LIGKERN nine nine =: zero ; ten zero =: one ; ten one =: two ;
+% LIGKERN ten two =: three ; ten three =: four ; ten four =: five ;
+% LIGKERN ten five =: six ; ten six =: seven ; ten seven =: eight ;
+% LIGKERN zero || |=: emdash ; one || |=: emdash ; two || |=: emdash ;
+% LIGKERN three || |=: emdash ; four || |=: emdash ; five || |=: emdash ;
+% LIGKERN six || |=: emdash ; seven || |=: emdash ; eight || |=: emdash ;
+% LIGKERN nine || |=: emdash ; || nine =: zero ;
+% LIGKERN z || |=:> z ; q o |=:|> emdash ; plus plus |=: exclam ;
+% LIGKERN slash slash =:| backslash ; q || =: Q ; || q =: Q ;
diff --git a/Build/source/texk/dvipsk/reencode/psfonts.map b/Build/source/texk/dvipsk/reencode/psfonts.map
new file mode 100644
index 00000000000..6e59f3f1d8c
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/psfonts.map
@@ -0,0 +1,6 @@
+rptmr0 Times-Roman
+rptmr1 Times-Roman "ExtendedTeXEncoding ReEncodeFont" <extex.enc
+rptmr2 Times-Roman "ExtendedTeXEncoding ReEncodeFont" <extex.enc
+rptmr3 Times-Roman
+rptmr9 Times-Roman " FunkyEncoding ReEncodeFont " <funky.enc
+rcccc Times-Roman "DCEncoding ReEncodeFont" <DC.enc
diff --git a/Build/source/texk/dvipsk/reencode/texmext.enc b/Build/source/texk/dvipsk/reencode/texmext.enc
new file mode 100644
index 00000000000..ef84ebbf9c1
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/texmext.enc
@@ -0,0 +1,184 @@
+% TeX math extension encoding.
+% No ligatures or kerns.
+%
+/TeXMathExtensionEncoding [ % now 256 chars follow
+
+% 0x0
+/parenleftbig
+/parenrightbig
+/bracketleftbig
+/bracketrightbig
+/floorleftbig
+/floorrightbig
+/ceilingleftbig
+/ceilingrightbig
+
+% 0x8
+/braceleftbig
+/bracerightbig
+/angbracketleftbig
+/angbracketrightbig
+/vextendsingle
+/vextenddouble
+/slashbig
+/backslashbig
+
+% 0x10
+/parenleftBig
+/parenrightBig
+/parenleftbigg
+/parenrightbigg
+/bracketleftbigg
+/bracketrightbigg
+/floorleftbigg
+/floorrightbigg
+
+% 0x18
+/ceilingleftbigg
+/ceilingrightbigg
+/braceleftbigg
+/bracerightbigg
+/angbracketleftbigg
+/angbracketrightbigg
+/slashbigg
+/backslashbigg
+
+% 0x20
+/parenleftBigg
+/parenrightBigg
+/bracketleftBigg
+/bracketrightBigg
+/floorleftBigg
+/floorrightBigg
+/ceilingleftBigg
+/ceilingrightBigg
+
+% 0x28
+/braceleftBigg
+/bracerightBigg
+/angbracketleftBigg
+/angbracketrightBigg
+/slashBigg
+/backslashBigg
+/slashBig
+/backslashBig
+
+% 0x30
+/parenlefttp
+/parenrighttp
+/bracketlefttp
+/bracketrighttp
+/bracketleftbt
+/bracketrightbt
+/bracketleftex
+/bracketrightex
+
+% 0x38
+/bracelefttp
+/bracerighttp
+/braceleftbt
+/bracerightbt
+/braceleftmid
+/bracerightmid
+/braceex
+/arrowvertex
+
+% 0x40
+/parenleftbt
+/parenrightbt
+/parenleftex
+/parenrightex
+/angbracketleftBig
+/angbracketrightBig
+/unionsqtext
+/unionsqdisplay
+
+% 0x48
+/contintegraltext
+/contintegraldisplay
+/circledottext
+/circledotdisplay
+/circleplustext
+/circleplusdisplay
+/circlemultiplytext
+/circlemultiplydisplay
+
+% 0x50
+/summationtext
+/producttext
+/integraltext
+/uniontext
+/intersectiontext
+/unionmultitext
+/logicalandtext
+/logicalortext
+
+% 0x58
+/summationdisplay
+/productdisplay
+/integraldisplay
+/uniondisplay
+/intersectiondisplay
+/unionmultidisplay
+/logicalanddisplay
+/logicalordisplay
+
+% 0x60
+/coproducttext
+/coproductdisplay
+/hatwide
+/hatwider
+/hatwidest
+/tildewide
+/tildewider
+/tildewidest
+
+% 0x68
+/bracketleftBig
+/bracketrightBig
+/floorleftBig
+/floorrightBig
+/ceilingleftBig
+/ceilingrightBig
+/braceleftBig
+/bracerightBig
+
+% 0x70
+/radicalbig
+/radicalBig
+/radicalbigg
+/radicalBigg
+/radicalbt
+/radicalvertex
+/radicaltp
+/arrowvertexdbl
+
+% 0x78
+/arrowtp
+/arrowbt
+/bracehtipdownleft
+/bracehtipdownright
+/bracehtipupleft
+/bracehtipupright
+/arrowdbltp
+/arrowdblbt
+
+% Have to have 128 .notdef's now to fill things out.
+%
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/Build/source/texk/dvipsk/reencode/texmital.enc b/Build/source/texk/dvipsk/reencode/texmital.enc
new file mode 100644
index 00000000000..35453d89069
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/texmital.enc
@@ -0,0 +1,183 @@
+% TeX math italic encoding.
+% No ligatures or kerns.
+%
+/TeXMathItalicEncoding [ % now 256 chars follow
+% 0x0
+/Gamma
+/Delta
+/Theta
+/Lambda
+/Xi
+/Pi
+/Sigma
+/Upsilon
+
+% 0x8
+/Phi
+/Psi
+/Omega
+/alpha
+/beta
+/gamma
+/delta
+/epsilon1
+
+% 0x10
+/zeta
+/eta
+/theta
+/iota
+/kappa
+/lambda
+/mu
+/nu
+
+% 0x18
+/xi
+/pi
+/rho
+/sigma
+/tau
+/upsilon
+/phi
+/chi
+
+% 0x20
+/psi
+/omega
+/epsilon
+/theta1
+/pi1
+/rho1
+/sigma1
+/phi1
+
+% 0x28
+/arrowlefttophalf
+/arrowleftbothalf
+/arrowrighttophalf
+/arrowrightbothalf
+/arrowhookleft
+/arrowhookright
+/triangleright
+/triangleleft
+
+% 0x30
+/zerooldstyle
+/oneoldstyle
+/twooldstyle
+/threeoldstyle
+/fouroldstyle
+/fiveoldstyle
+/sixoldstyle
+/sevenoldstyle
+
+% 0x38
+/eightoldstyle
+/nineoldstyle
+/period
+/comma
+/less
+/slash
+/greater
+/star
+
+% 0x40
+/partialdiff
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+
+% 0x48
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+
+% 0x50
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+
+% 0x58
+/X
+/Y
+/Z
+/flat
+/natural
+/sharp
+/slurbelow
+/slurabove
+
+% 0x60
+/lscript
+/a
+/b
+/c
+/d
+/e
+/f
+/g
+
+% 0x68
+/h
+/i
+/j
+/k
+/l
+/m
+/n
+/o
+
+% 0x70
+/p
+/q
+/r
+/s
+/t
+/u
+/v
+/w
+
+% 0x78
+/x
+/y
+/z
+/dotlessi
+/dotlessj
+/weierstrass
+/vector
+/tie
+
+% Have to have 128 .notdef's now to fill things out.
+%
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/Build/source/texk/dvipsk/reencode/texmsym.enc b/Build/source/texk/dvipsk/reencode/texmsym.enc
new file mode 100644
index 00000000000..26fe7cd6c39
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/texmsym.enc
@@ -0,0 +1,183 @@
+% TeX math symbols encoding.
+% No ligatures or kerns.
+%
+/TeXMathSymbolEncoding [ % now 256 chars follow
+% 0x0
+/minus
+/periodcentered
+/multiply
+/asteriskmath
+/divide
+/diamondmath
+/plusminus
+/minusplus
+
+% 0x8
+/circleplus
+/circleminus
+/circlemultiply
+/circledivide
+/circledot
+/circlecopyrt
+/openbullet
+/bullet
+
+% 0x10
+/equivasymptotic
+/equivalence
+/reflexsubset
+/reflexsuperset
+/lessequal
+/greaterequal
+/precedesequal
+/followsequal
+
+% 0x18
+/similar
+/approxequal
+/propersubset
+/propersuperset
+/lessmuch
+/greatermuch
+/precedes
+/follows
+
+% 0x20
+/arrowleft
+/arrowright
+/arrowup
+/arrowdown
+/arrowboth
+/arrownortheast
+/arrowsoutheast
+/similarequal
+
+% 0x28
+/arrowdblleft
+/arrowdblright
+/arrowdblup
+/arrowdbldown
+/arrowdblboth
+/arrownorthwest
+/arrowsouthwest
+/proportional
+
+% 0x30
+/prime
+/infinity
+/element
+/owner
+/triangle
+/triangleinv
+/negationslash
+/mapsto
+
+% 0x38
+/universal
+/existential
+/logicalnot
+/emptyset
+/Rfractur
+/Ifractur
+/latticetop
+/perpendicular
+
+% 0x40
+/aleph
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+
+% 0x48
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+
+% 0x50
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+
+% 0x58
+/X
+/Y
+/Z
+/union
+/intersection
+/unionmulti
+/logicaland
+/logicalor
+
+% 0x60
+/turnstileleft
+/turnstileright
+/floorleft
+/floorright
+/ceilingleft
+/ceilingright
+/braceleft
+/braceright
+
+% 0x68
+/angbracketleft
+/angbracketright
+/bar
+/bardbl
+/arrowbothv
+/arrowdblbothv
+/backslash
+/wreathproduct
+
+% 0x70
+/radical
+/coproduct
+/nabla
+/integral
+/unionsq
+/intersectionsq
+/subsetsqequal
+/supersetsqequal
+
+% 0x78
+/section
+/dagger
+/daggerdbl
+/paragraph
+/club
+/diamond
+/heart
+/spade
+
+% Have to have 128 .notdef's now to fill things out.
+%
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/Build/source/texk/dvipsk/reencode/treen.sh b/Build/source/texk/dvipsk/reencode/treen.sh
new file mode 100644
index 00000000000..33270559f5b
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/treen.sh
@@ -0,0 +1,40 @@
+#!/bin/csh
+# Tests font reencoding
+afm2tfm Times-Roman.afm -v ptmr0 rptmr0
+afm2tfm Times-Roman.afm -P extex.enc -v ptmr1 rptmr1
+afm2tfm Times-Roman.afm -T extex.enc -v ptmr2 rptmr2
+afm2tfm Times-Roman.afm -t extex.enc -v ptmr3 rptmr3
+afm2tfm Times-Roman.afm -T extex.enc -V ptmr4 rptmr4
+# these three should all be the same
+cmp rptmr4.tfm rptmr2.tfm
+cmp rptmr4.tfm rptmr1.tfm
+# these two should be the same
+cmp rptmr0.tfm rptmr3.tfm
+afm2tfm Times-Roman.afm -T extex.enc -V ptmr4 rptmr2
+vptovf ptmr0.vpl ptmr0.vf ptmr0.tfm
+vptovf ptmr1.vpl ptmr1.vf ptmr1.tfm
+vptovf ptmr2.vpl ptmr2.vf ptmr2.tfm
+vptovf ptmr3.vpl ptmr3.vf ptmr3.tfm
+vptovf ptmr4.vpl ptmr4.vf ptmr4.tfm
+tex testfont <<EOF
+ptmr0
+\leftline{\bf Normal (original) Times-Roman; Standard + Text}
+\sample\init
+rptmr0
+\table\vfill\eject\init
+ptmr1
+\leftline{\bf Times-Roman; Extended + Text}
+\sample\init
+rptmr1
+\table\vfill\eject\init
+ptmr2
+\leftline{\bf Times-Roman; Extended + Extended}
+\sample\vfill\eject\init
+ptmr3
+\leftline{\bf Times-Roman; Standard + Extended}
+\sample\vfill\eject\init
+ptmr4
+\leftline{\bf Times-Roman Small Caps; Extended + Extended}
+\sample\bye
+EOF
+dvips testfont -t testfont.ps
diff --git a/Build/source/texk/dvipsk/reencode/treen2.sh b/Build/source/texk/dvipsk/reencode/treen2.sh
new file mode 100644
index 00000000000..7c5da3a4a13
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/treen2.sh
@@ -0,0 +1,12 @@
+#!/bin/csh
+# Tests font reencoding
+afm2tfm Times-Roman.afm -T funky.enc -v ptmr9 rptmr9
+vptovf ptmr9.vpl ptmr9.vf ptmr9.tfm
+tex testfont <<EOF
+ptmr9
+\leftline{\bf Funky Times-Roman; Standard + Funky}
+\sample
+Y through x or x. pp and then pp and then pp. pp//pp//pp. ++ // pippy
+\bye
+EOF
+dvips testfont -o testfont.ps
diff --git a/Build/source/texk/dvipsk/reencode/xl2.enc b/Build/source/texk/dvipsk/reencode/xl2.enc
new file mode 100644
index 00000000000..6e603ea0992
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/xl2.enc
@@ -0,0 +1,316 @@
+% Date: Thu, 25 May 1995 19:00:36 +0200 (MET DST)
+% From: Petr Sojka <sojka@daeron.ics.muni.cz>
+%
+% some of our (CSTUG- czech TeX Users Group) users want to support
+% 8bit font coding such that:
+% -- lower 7bit is exactly OT1 (but with differences imposed
+% by DEK -- e.g. layout of cmr is different from cmtt)
+% -- upper part is taken from ISO-Latin 2 (iso 8859-2),
+% but some of empty positions are filled with useful characters
+% usually available in type-1 font (permill sign etc.)
+/XL2encoding [
+%%%%% '000 = "00
+ /Gamma
+ /Delta
+ /Theta
+ /Lambda
+ /Xi
+ /Pi
+ /Sigma
+ /Upsilon
+%%%%% '010 = "08
+ /Phi
+ /Psi
+ /Omega
+ /ff
+ /fi
+ /fl
+ /ffi
+ /ffl
+%%%%% '020 = "10
+ /dotlessi
+ /dotlessj
+ /grave
+ /acute
+ /caron
+ /breve
+ /macron
+ /ring
+%%%%% '030 = "18
+ /cedilla
+ /germandbls
+ /ae
+ /oe
+ /oslash
+ /AE
+ /OE
+ /Oslash
+%%%%% '040 = "20
+ /.notdef
+ /exclam
+ /quotedblright
+ /numbersign
+ /dollar
+ /percent
+ /ampersand
+ /quoteright
+%%%%% '050 = "28
+ /parenleft
+ /parenright
+ /asterisk
+ /plus
+ /comma
+ /hyphen
+ /period
+ /slash
+%%%%% '060 = "30
+ /zero
+ /one
+ /two
+ /three
+ /four
+ /five
+ /six
+ /seven
+%%%%% '070 = "38
+ /eight
+ /nine
+ /colon
+ /semicolon
+ /exclamdown
+ /equal
+ /questiondown
+ /question
+%%%%% '100 = "40
+ /at
+ /A
+ /B
+ /C
+ /D
+ /E
+ /F
+ /G
+%%%%% '110 = "48
+ /H
+ /I
+ /J
+ /K
+ /L
+ /M
+ /N
+ /O
+%%%%% '120 = "50
+ /P
+ /Q
+ /R
+ /S
+ /T
+ /U
+ /V
+ /W
+%%%%% '130 = "58
+ /X
+ /Y
+ /Z
+ /bracketleft
+ /quotedblleft
+ /bracketright
+ /circumflex
+ /dotaccent
+%%%%% '140 = "60
+ /quoteleft
+ /a
+ /b
+ /c
+ /d
+ /e
+ /f
+ /g
+%%%%% '150 = "68
+ /h
+ /i
+ /j
+ /k
+ /l
+ /m
+ /n
+ /o
+%%%%% '160 = "70
+ /p
+ /q
+ /r
+ /s
+ /t
+ /u
+ /v
+ /w
+%%%%% '170 = "78
+ /x
+ /y
+ /z
+ /endash
+ /emdash
+ /hungarumlaut
+ /tilde
+ /dieresis
+%%%%% '200 = "80
+ /ellipsis
+ /dagger
+ /daggerdbl
+ /bullet
+ /sterling
+ /paragraph
+ /.notdef
+ /.notdef
+%%%%% '210 = "88
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /perthousand
+ /.notdef
+ /.notdef
+%%%%% '220 = "90
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+%%%%% '230 = "98
+ /Agrave
+ /.notdef
+ /.notdef
+ /.notdef
+ /hyphen
+ /ogonek
+ /guillemotleft
+ /guillemotright
+%%%%% '240 = "A0
+ /.notdef
+ /Aogonek
+ /breve
+ /Lslash
+ /currency
+ /Lcaron
+ /Sacute
+ /section
+%%%%% '250 = "A8
+ /dieresis
+ /Scaron
+ /Scedilla
+ /Tcaron
+ /Zacute
+ /.notdef
+ /Zcaron
+ /Zdotaccent
+%%%%% '260 = "B0
+ /ring
+ /aogonek
+ /cedilla
+ /lslash
+ /acute
+ /lcaron
+ /sacute
+ /caron
+%%%%% '270 = "B8
+ /agrave
+ /scaron
+ /scedilla
+ /tcaron
+ /zacute
+ /hungarumlaut
+ /zcaron
+ /zdotaccent
+%%%%% '300 = "C0
+ /Racute
+ /Aacute
+ /Acircumflex
+ /Abreve
+ /Adieresis
+ /Lacute
+ /Cacute
+ /Ccedilla
+%%%%% '310 = "C8
+ /Ccaron
+ /Eacute
+ /Eogonek
+ /Edieresis
+ /Ecaron
+ /Iacute
+ /Icircumflex
+ /Dcaron
+%%%%% '320 = "D0
+ /Eth
+ /Nacute
+ /Ncaron
+ /Oacute
+ /Ocircumflex
+ /Ohungarumlaut
+ /Odieresis
+ /multiply
+%%%%% '330 = "D8
+ /Rcaron
+ /Uring
+ /Uacute
+ /Uhungarumlaut
+ /Udieresis
+ /Yacute
+ /Togonek
+ /germandbls
+%%%%% '340 = "E0
+ /racute
+ /aacute
+ /acircumflex
+ /abreve
+ /adieresis
+ /lacute
+ /cacute
+ /ccedilla
+%%%%% '350 = "E8
+ /ccaron
+ /eacute
+ /eogonek
+ /edieresis
+ /ecaron
+ /iacute
+ /icircumflex
+ /dcaron
+%%%%% '360 = "F0
+ /eth
+ /nacute
+ /ncaron
+ /oacute
+ /ocircumflex
+ /ohungarumlaut
+ /odieresis
+ /divide
+%%%%% '370 = "F8
+ /rcaron
+ /uring
+ /uacute
+ /uhungarumlaut
+ /udieresis
+ /yacute
+ /quotedblbase
+ /quotedblleft
+] def
+
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+% LIGKERN exclamdown exclamdown =: guillemotleft ;
+% frenchdblquotes
+% LIGKERN questiondown questiondown =: guillemotright ;
+% csquoteleft
+% LIGKERN comma comma =: quotedblbase ;
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+% LIGKERN question {} quoteleft ; exclam {} quoteleft ;
diff --git a/Build/source/texk/dvipsk/reencode/xt2.enc b/Build/source/texk/dvipsk/reencode/xt2.enc
new file mode 100644
index 00000000000..d2725cda6fc
--- /dev/null
+++ b/Build/source/texk/dvipsk/reencode/xt2.enc
@@ -0,0 +1,307 @@
+% This is the typewriter version of xl2.
+/XT2encoding [
+%%%%% '000 = "00
+ /Gamma
+ /Delta
+ /Theta
+ /Lambda
+ /Xi
+ /Pi
+ /Sigma
+ /Upsilon
+%%%%% '010 = "08
+ /Phi
+ /Psi
+ /Omega
+ /arrowup
+ /arrowdown
+ /qoutesingle
+ /exclamdown
+ /questiondown
+%%%%% '020 = "10
+ /dotlessi
+ /dotlessj
+ /grave
+ /acute
+ /caron
+ /breve
+ /macron
+ /ring
+%%%%% '030 = "18
+ /cedilla
+ /germandbls
+ /ae
+ /oe
+ /oslash
+ /AE
+ /OE
+ /Oslash
+%%%%% '040 = "20
+ /.notdef
+ /exclam
+ /quotedblright
+ /numbersign
+ /dollar
+ /percent
+ /ampersand
+ /quoteright
+%%%%% '050 = "28
+ /parenleft
+ /parenright
+ /asterisk
+ /plus
+ /comma
+ /hyphen
+ /period
+ /slash
+%%%%% '060 = "30
+ /zero
+ /one
+ /two
+ /three
+ /four
+ /five
+ /six
+ /seven
+%%%%% '070 = "38
+ /eight
+ /nine
+ /colon
+ /semicolon
+ /less
+ /equal
+ /greater
+ /question
+%%%%% '100 = "40
+ /at
+ /A
+ /B
+ /C
+ /D
+ /E
+ /F
+ /G
+%%%%% '110 = "48
+ /H
+ /I
+ /J
+ /K
+ /L
+ /M
+ /N
+ /O
+%%%%% '120 = "50
+ /P
+ /Q
+ /R
+ /S
+ /T
+ /U
+ /V
+ /W
+%%%%% '130 = "58
+ /X
+ /Y
+ /Z
+ /bracketleft
+ /backslash
+ /bracketright
+ /circumflex
+ /underscore
+%%%%% '140 = "60
+ /quoteleft
+ /a
+ /b
+ /c
+ /d
+ /e
+ /f
+ /g
+%%%%% '150 = "68
+ /h
+ /i
+ /j
+ /k
+ /l
+ /m
+ /n
+ /o
+%%%%% '160 = "70
+ /p
+ /q
+ /r
+ /s
+ /t
+ /u
+ /v
+ /w
+%%%%% '170 = "78
+ /x
+ /y
+ /z
+ /braceleft
+ /bar
+ /braceright
+ /tilde
+ /dieresis
+%%%%% '200 = "80
+ /ellipsis
+ /dagger
+ /daggerdbl
+ /bullet
+ /sterling
+ /paragraph
+ /.notdef
+ /.notdef
+%%%%% '210 = "88
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /perthousand
+ /.notdef
+ /.notdef
+%%%%% '220 = "90
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+%%%%% '230 = "98
+ /Agrave
+ /.notdef
+ /.notdef
+ /.notdef
+ /hyphen
+ /ogonek
+ /guillemotleft
+ /guillemotright
+%%%%% '240 = "A0
+ /.notdef
+ /Aogonek
+ /breve
+ /Lslash
+ /currency
+ /Lcaron
+ /Sacute
+ /section
+%%%%% '250 = "A8
+ /dieresis
+ /Scaron
+ /Scedilla
+ /Tcaron
+ /Zacute
+ /.notdef
+ /Zcaron
+ /Zdotaccent
+%%%%% '260 = "B0
+ /ring
+ /aogonek
+ /cedilla
+ /lslash
+ /acute
+ /lcaron
+ /sacute
+ /caron
+%%%%% '270 = "B8
+ /agrave
+ /scaron
+ /scedilla
+ /tcaron
+ /zacute
+ /hungarumlaut
+ /zcaron
+ /zdotaccent
+%%%%% '300 = "C0
+ /Racute
+ /Aacute
+ /Acircumflex
+ /Abreve
+ /Adieresis
+ /Lacute
+ /Cacute
+ /Ccedilla
+%%%%% '310 = "C8
+ /Ccaron
+ /Eacute
+ /Eogonek
+ /Edieresis
+ /Ecaron
+ /Iacute
+ /Icircumflex
+ /Dcaron
+%%%%% '320 = "D0
+ /Eth
+ /Nacute
+ /Ncaron
+ /Oacute
+ /Ocircumflex
+ /Ohungarumlaut
+ /Odieresis
+ /multiply
+%%%%% '330 = "D8
+ /Rcaron
+ /Uring
+ /Uacute
+ /Uhungarumlaut
+ /Udieresis
+ /Yacute
+ /Togonek
+ /germandbls
+%%%%% '340 = "E0
+ /racute
+ /aacute
+ /acircumflex
+ /abreve
+ /adieresis
+ /lacute
+ /cacute
+ /ccedilla
+%%%%% '350 = "E8
+ /ccaron
+ /eacute
+ /eogonek
+ /edieresis
+ /ecaron
+ /iacute
+ /icircumflex
+ /dcaron
+%%%%% '360 = "F0
+ /eth
+ /nacute
+ /ncaron
+ /oacute
+ /ocircumflex
+ /ohungarumlaut
+ /odieresis
+ /divide
+%%%%% '370 = "F8
+ /rcaron
+ /uring
+ /uacute
+ /uhungarumlaut
+ /udieresis
+ /yacute
+ /quotedblbase
+ /quotedblleft
+] def
+
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+% LIGKERN exclamdown exclamdown =: guillemotleft ;
+% frenchdblquotes
+% LIGKERN questiondown questiondown =: guillemotright ;
+% csquoteleft
+% LIGKERN comma comma =: quotedblbase ;
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+% LIGKERN question {} quoteleft ; exclam {} quoteleft ;
+% LIGKERN f {} f ; f {} i ; f {} l ;
diff --git a/Build/source/texk/dvipsk/repack.c b/Build/source/texk/dvipsk/repack.c
new file mode 100644
index 00000000000..f3d518ef63c
--- /dev/null
+++ b/Build/source/texk/dvipsk/repack.c
@@ -0,0 +1,446 @@
+/*
+ * Compressed TeX fonts in PostScript.
+ * By Radical Eye Software.
+ * (Slight mods by Don Knuth in December 89.)
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+
+/* Given a raster that has been unpacked from PK format,
+ * we compress it by another scheme that is suitable for
+ * a PostScript-oriented unpacking. We write instructions for
+ * a little interpreter whose one-byte instructions have the form
+ * 18*opcode+parameter. The interpreter forms each row based
+ * on simple transformations to the previous row. */
+
+#define MAXOUT (18)
+#define CMD(n) (MAXOUT*(n))
+#define ADVXCHG1 CMD(0)
+#define ADVXCHG1END CMD(1)
+#define CHGX CMD(2)-1
+#define CHGXEND CMD(3)-1
+#define ADVXLSH CMD(4)
+#define ADVXLSHEND CMD(5)
+#define ADVXRSH CMD(6)
+#define ADVXRSHEND CMD(7)
+#define ADVX CMD(8)-1
+#define REPX CMD(9)-1
+#define SETX CMD(10)-1
+#define CLRX CMD(11)-1
+#define ADVXCHG2 CMD(12)
+#define ADVXCHG2END CMD(13)
+#define END CMD(14)
+
+#include "protos.h"
+
+static int rowlength = -1 ;
+static unsigned char *specdata ;
+static long tslen = 0 ;
+static unsigned char *tempstore, *tsp, *tsend ;
+
+void putlong P2C(register char *, a, long, i)
+{
+ a[0] = i >> 24 ;
+ a[1] = i >> 16 ;
+ a[2] = i >> 8 ;
+ a[3] = i ;
+}
+
+long getlong P1C(register unsigned char *, a)
+{
+ return ((((((a[0] << 8L) + a[1]) << 8L) + a[2]) << 8L) + a[3]) ;
+}
+
+/* First, a routine that appends one byte to the compressed output. */
+
+#define addtse(n) {lcm=tsp-tempstore;addts(n);} /* mark END option position */
+
+static void addts P1C(register unsigned char, what)
+{
+ register unsigned char *p, *q ;
+
+ if (tsp >= tsend) {
+ if (tempstore == NULL) {
+ tslen = 2020 ;
+ tempstore = (unsigned char *)mymalloc((integer)tslen) ;
+ tsp = tempstore ;
+ } else {
+ tslen = 2 * tslen ;
+ tsp = (unsigned char *)mymalloc((integer)tslen) ;
+ for (p=tempstore, q=tsp; p<tsend; p++, q++)
+ *q = *p ;
+ free((char *)tempstore) ;
+ tempstore = tsp ;
+ tsp = q ;
+ }
+ tsend = tempstore + tslen ;
+ }
+ *tsp++ = what ;
+}
+
+/* Next, a routine that discovers how to do the compression. */
+
+#define rsh(a,b) ( ((a)==0) ? ((b)==128) : ( ((a)==255) ? ((b)==127) :\
+ ((b)==(((a)>>1)|((a)&128))) ))
+#define lsh(a,b) ( ((a)==0) ? ((b)==1) : ( ((a)==255) ? ((b)==254) :\
+ ((b)==((((a)<<1)&255)|((a)&1))) ))
+#define DIFFERENT (1)
+#define LSHPOSSIB (2)
+#define RSHPOSSIB (4)
+#define BLKPOSSIB (8)
+#define WHTPOSSIB (16)
+#define ENDROW (32)
+#define NOPOSSIB(n) ((n&(LSHPOSSIB|RSHPOSSIB|BLKPOSSIB|WHTPOSSIB))==0)
+#define NOSHIFT(n) ((n&(LSHPOSSIB|RSHPOSSIB))==0)
+/*
+ * Our input bytes are packed to the 16-bit word. On output,
+ * they're packed to bytes. Thus, we may have to skip a byte at
+ * the end of each row.
+ */
+void dochar P3C(unsigned char *, from, short, width, short, height)
+{
+ register int i ;
+ register unsigned char *f, *t, *d ;
+ register unsigned char *e ;
+ register int accum ;
+ int j, k, kk ;
+ int diffrow ;
+ int repeatcount ;
+ int lit, pos, cmd = 0 ;
+ long lcm ;
+ int widthc ;
+
+ widthc = width + (width & 1) ; /* halfword correction */
+ lcm = -1 ;
+ if (widthc > rowlength) {
+ if (rowlength > 0)
+ free((char *)specdata) ;
+ rowlength = widthc + 30 ;
+ specdata = (unsigned char *)mymalloc((integer)(rowlength + 15)) ;
+ }
+ for (i= -15, t=specdata; i<=widthc; i++, t++)
+ *t = 0 ;
+ repeatcount = 0 ;
+ f = specdata + 2 ;
+ for (j=0; j<height; j++, f = from, from += widthc) {
+ diffrow = 0 ;
+ for (i=0, t=from, d=specdata; i<width; i++, f++, t++, d++) {
+ if (*f == *t) {
+ if (*t == 0)
+ *d = WHTPOSSIB ;
+ else if (*t == 255)
+ *d = BLKPOSSIB ;
+ else
+ *d = 0 ;
+ } else {
+ accum = DIFFERENT ;
+ if (rsh(*f, *t))
+ accum |= RSHPOSSIB ;
+ else if (lsh(*f, *t))
+ accum |= LSHPOSSIB ;
+ if (*t == 0)
+ accum |= WHTPOSSIB ;
+ else if (*t == 255)
+ accum |= BLKPOSSIB ;
+ *d = accum ;
+ diffrow++ ;
+ }
+ } /* end 'for i' */
+ *d = ENDROW ;
+ if (diffrow == 0) {
+ repeatcount++ ;
+ } else {
+ if (repeatcount) {
+ while (repeatcount > MAXOUT) {
+ addts((unsigned char)(REPX+MAXOUT)) ;
+ repeatcount -= MAXOUT ;
+ }
+ addts((unsigned char)(REPX+repeatcount)) ;
+ repeatcount = 0 ;
+ }
+ pos = 0 ;
+ for (i=0, d=specdata, f=t-width; i<width;) {
+ if ((*d & DIFFERENT) == 0) {
+ i++ ;
+ d++ ;
+ f++ ;
+ } else {
+ accum = 0 ;
+ if (pos != i)
+ lit = NOSHIFT(*d) ;
+ else /* N.B.: 'lit' does not imply literate programming here */
+ lit = NOPOSSIB(*d) ;
+ for (e=d; ;e++) {
+ if (NOPOSSIB(*e))
+ lit = 1 ;
+ if ((*e & DIFFERENT) == 0)
+ break ;
+ if ((*e & WHTPOSSIB) &&
+ (e[1] & WHTPOSSIB)) {
+ while (*e & WHTPOSSIB) {
+ e++ ;
+ accum++ ;
+ }
+ cmd = CLRX ;
+ e -= accum ;
+ break ;
+ } else if ((*e & BLKPOSSIB) &&
+ (e[1] & BLKPOSSIB)) {
+ while (*e & BLKPOSSIB) {
+ e++ ;
+ accum++ ;
+ }
+ cmd = SETX ;
+ e -= accum ;
+ break ;
+ }
+ } /* end 'for e'; d pts to first bad byte, e to next good one */
+ while (i - pos > MAXOUT) {
+ addts((unsigned char)(ADVX+MAXOUT)) ;
+ pos += MAXOUT ;
+ }
+ if (0 != (k = (e - d))) {
+ if (lit) {
+ if (k > 2) {
+ if (i > pos) {
+ addts((unsigned char)(ADVX + i - pos)) ;
+ pos = i ;
+ }
+ while (k > MAXOUT) {
+ addts((unsigned char)(CHGX + MAXOUT)) ;
+ for (kk=0; kk<MAXOUT; kk++)
+ addts((unsigned char)(*f++)) ;
+ d += MAXOUT ;
+ pos += MAXOUT ;
+ i += MAXOUT ;
+ k -= MAXOUT ;
+ }
+ addtse((unsigned char)(CHGX + k)) ;
+ pos += k ;
+ for (; d<e; d++, i++, f++)
+ addts((unsigned char)(*f)) ;
+ } else {
+ if (k == 1) {
+ if (i == pos+MAXOUT) {
+ addts((unsigned char)(ADVX + MAXOUT)) ;
+ pos = i ;
+ }
+ addtse((unsigned char)(ADVXCHG1 + i - pos)) ;
+ addts((unsigned char)(*f)) ;
+ i++ ;
+ pos = i ;
+ d++ ;
+ f++ ;
+ } else {
+ if (i == pos+MAXOUT) {
+ addts((unsigned char)(ADVX + MAXOUT)) ;
+ pos = i ;
+ }
+ addtse((unsigned char)(ADVXCHG2 + i - pos)) ;
+ addts((unsigned char)(*f)) ;
+ addts((unsigned char)(f[1])) ;
+ i += 2 ;
+ pos = i ;
+ d += 2 ;
+ f += 2 ;
+ }
+ }
+ } else {
+ while (e > d) {
+ if (*d & LSHPOSSIB) {
+ if (i == pos+MAXOUT) {
+ addts((unsigned char)(ADVX + MAXOUT)) ;
+ pos = i ;
+ }
+ addtse((unsigned char)(ADVXLSH + i - pos)) ;
+ } else if (*d & RSHPOSSIB) {
+ if (i == pos+MAXOUT) {
+ addts((unsigned char)(ADVX + MAXOUT)) ;
+ pos = i ;
+ }
+ addtse((unsigned char)(ADVXRSH + i - pos)) ;
+ } else if (*d & WHTPOSSIB) { /* i==pos */
+ addts((unsigned char)(CLRX + 1)) ; lcm = -1 ;
+ } else if (*d & BLKPOSSIB) { /* i==pos */
+ addts((unsigned char)(SETX + 1)) ; lcm = -1 ;
+ } else
+ error("! bug") ; /* why wasn't lit true? */
+ d++ ;
+ f++ ;
+ i++ ;
+ pos = i ;
+ } /* end 'while e>d' */
+ }
+ } /* end 'if e>d' */
+ if (accum > 0) {
+ if (i > pos) {
+ addts((unsigned char)(ADVX + i - pos)) ;
+ pos = i ;
+ }
+ i += accum ;
+ d += accum ;
+ f += accum ;
+ while (accum > MAXOUT) {
+ addts((unsigned char)(cmd + MAXOUT)) ;
+ accum -= MAXOUT ;
+ pos += MAXOUT ;
+ }
+ lcm = -1 ;
+ addts((unsigned char)(cmd + accum)) ;
+ pos += accum ;
+ }
+ } /* end 'else DIFFERENT' */
+ } /* end 'for i' */
+ if (lcm != -1) {
+ tempstore[lcm] += MAXOUT ; /* append END */
+ lcm = -1 ;
+ } else {
+ addts((unsigned char)(END)) ;
+ }
+ } /* end 'else rows different' */
+#ifdef DEBUG
+ if (d != specdata + width)
+ error("! internal inconsistency in repack") ;
+#endif
+ } /* end 'for j' */
+ if (repeatcount) {
+ while (repeatcount > MAXOUT) {
+ addts((unsigned char)(REPX+MAXOUT)) ;
+ repeatcount -= MAXOUT ;
+ }
+ addts((unsigned char)(REPX+repeatcount)) ;
+ repeatcount = 0 ;
+ }
+}
+
+extern long bytesleft ;
+extern quarterword *raster ;
+long mbytesleft ;
+quarterword *mraster ;
+
+char *
+makecopy P3C(register unsigned char *, what,
+ register long, len,
+ register unsigned char *, p)
+{
+ register unsigned char *q ;
+
+ if (p == NULL) {
+ if (len > MINCHUNK)
+ p = (unsigned char *)mymalloc((integer)len) ;
+ else {
+ if (bytesleft < len) {
+ raster = (quarterword *)mymalloc((integer)RASTERCHUNK) ;
+ bytesleft = RASTERCHUNK ;
+ }
+ p = (unsigned char *)raster ;
+ bytesleft -= len ;
+ raster += len ;
+ }
+ }
+ q = p ;
+ while (len > 0) {
+ *p++ = *what++ ;
+ len -- ;
+ }
+ return ((char *)q) ;
+}
+
+/* Now the main routine, which is called when a character is used
+ for the very first time. */
+void repack P1C(register chardesctype *, cp)
+{
+ register long i, j ;
+ register unsigned char *p ;
+ register int width, height ;
+ register int wwidth ;
+ char startbytes ;
+ int smallchar ;
+
+ p = cp->packptr ;
+ if (p == NULL)
+ error("! no raster?") ;
+ tsp = tempstore ;
+ tsend = tempstore + tslen ;
+ addts(*p) ; /* copy the PK flag byte */
+ if (*p & 4) {
+ if ((*p & 7) == 7) {
+ startbytes = 17 ;
+ width = getlong(p + 1) ;
+ height = getlong(p + 5) ;
+ for (i=0; i<12; i++)
+ addts(*++p) ;
+ } else {
+ startbytes = 9 ;
+ width = p[1] * 256 + p[2] ;
+ height = p[3] * 256 + p[4] ;
+ addts(*++p) ;
+ addts(*++p) ;
+ addts(*++p) ;
+ addts(*++p) ;
+ }
+ } else {
+ startbytes = 5 ;
+ width = p[1] ;
+ height = p[2] ;
+ }
+ addts(*++p) ;
+ addts(*++p) ;
+ addts(*++p) ;
+ addts(*++p) ;
+ p++ ; /* OK, p now points to beginning of the nibbles */
+ addts((unsigned char)0) ;
+ addts((unsigned char)0) ;
+ addts((unsigned char)0) ;
+ addts((unsigned char)0) ; /* leave room to stick in a new length field */
+ wwidth = (width + 15) / 16 ;
+ i = 2 * height * (long)wwidth ;
+ if (i <= 0)
+ i = 2 ;
+ if ((cp->flags & BIGCHAR) == 0)
+ smallchar = 5 ;
+ else
+ smallchar = 0 ;
+ i += smallchar ;
+ if (mbytesleft < i) {
+ if (mbytesleft >= RASTERCHUNK)
+ (void) free((char *) mraster) ;
+ if (RASTERCHUNK > i) {
+ mraster = (quarterword *)mymalloc((integer)RASTERCHUNK) ;
+ mbytesleft = RASTERCHUNK ;
+ } else {
+ i += i / 4 ;
+ mraster = (quarterword *)mymalloc((integer)(i + 3)) ;
+ mbytesleft = i ;
+ }
+ }
+ while (i > 0)
+ mraster[--i] = 0 ;
+ i = startbytes + unpack(p, (halfword *)mraster, (halfword)width,
+ (halfword)height, *(cp->packptr)) ;
+ dochar(mraster, (width + 7) >> 3, height) ;
+ if (smallchar) {
+ addts((unsigned char)0) ;
+ addts((unsigned char)0) ;
+ addts((unsigned char)0) ;
+ addts((unsigned char)0) ;
+ addts((unsigned char)0) ;
+ }
+ j = tsp - tempstore ;
+#ifdef DEBUG
+ if (dd(D_COMPRESS))
+ (void)fprintf(stderr,"PK %ld bytes, unpacked %ld, compressed %ld\n",
+ i-(long)startbytes, (long)((width+7L)/8)*height, j-(long)startbytes-4) ;
+#endif /* DEBUG */
+ if ( i < j ) {
+ if (i > MINCHUNK)
+ free(cp->packptr) ;
+ cp->packptr =
+ (unsigned char *)makecopy(tempstore, j, (unsigned char *)0) ;
+ } else
+ makecopy(tempstore, j, (unsigned char *)cp->packptr) ;
+ putlong((char *)(cp->packptr+startbytes), j-startbytes-4-smallchar) ;
+ cp->flags |= REPACKED ;
+}
diff --git a/Build/source/texk/dvipsk/resident.c b/Build/source/texk/dvipsk/resident.c
new file mode 100644
index 00000000000..80610b02c90
--- /dev/null
+++ b/Build/source/texk/dvipsk/resident.c
@@ -0,0 +1,1222 @@
+/* For use with emTeX set FONTPATH to "TEXTFM"
+ */
+#ifndef FONTPATH
+#define FONTPATH "TEXFONTS"
+#endif
+
+/*
+ * This code reads in and handles the defaults for the program from the
+ * file config.sw. This entire file is a bit kludgy, sorry.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#include "paths.h"
+#ifdef KPATHSEA
+#include <kpathsea/c-ctype.h>
+#include <kpathsea/c-pathch.h>
+#include <kpathsea/c-stat.h>
+#include <kpathsea/pathsearch.h>
+#include <kpathsea/tex-file.h>
+#include <kpathsea/variable.h>
+#endif
+/*
+ * This is the structure definition for resident fonts. We use
+ * a small and simple hash table to handle these. We don't need
+ * a big hash table.
+ */
+struct resfont *reshash[RESHASHPRIME] ;
+/*
+ * These are the external routines we use.
+ */
+#include "protos.h"
+/*
+ * These are the external variables we use.
+ */
+extern char *realnameoffile ;
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern integer pagecopies ;
+extern int overridemag ;
+extern long bytesleft ;
+extern quarterword *raster ;
+extern FILE *pkfile ;
+extern char *oname ;
+extern integer swmem, fontmem ;
+#ifndef KPATHSEA
+extern char *tfmpath, *pictpath ;
+extern char *pkpath ;
+extern char *vfpath ;
+extern char *figpath ;
+extern char *configpath ;
+extern char *headerpath ;
+#ifdef SEARCH_SUBDIRECTORIES
+extern char *fontsubdirpath ;
+#endif
+#endif
+extern Boolean noenv ;
+extern Boolean downloadpspk ;
+#ifdef FONTLIB
+extern char *flipath, *fliname ;
+#endif
+extern char *paperfmt ;
+extern char *nextstring ;
+extern char *maxstring ;
+extern char *warningmsg ;
+extern Boolean disablecomments ;
+extern Boolean compressed ;
+extern Boolean partialdownload ;
+extern int quiet ;
+extern int filter ;
+extern Boolean reverse ;
+extern Boolean usesPSfonts ;
+extern Boolean nosmallchars ;
+extern Boolean removecomments ;
+extern Boolean safetyenclose ;
+extern Boolean dopprescan ;
+extern integer maxsecsize ;
+extern double mag ;
+extern Boolean sepfiles ;
+extern int actualdpi ;
+extern int vactualdpi ;
+extern int maxdrift ;
+extern int vmaxdrift ;
+extern char *printer ;
+extern char *mfmode, *mflandmode ;
+extern int mfmode_option;
+extern int secure_option;
+extern int oname_option;
+extern Boolean sendcontrolD ;
+#ifdef SHIFTLOWCHARS
+extern Boolean shiftlowchars ;
+#endif
+extern unsigned lastresortsizes[] ;
+extern integer hoff, voff ;
+extern struct papsiz *papsizes ;
+extern Boolean secure ;
+extern integer hpapersize, vpapersize ;
+extern int landscape ;
+/*
+ * To maintain a list of document fonts, we use the following
+ * pointer.
+ */
+struct header_list *ps_fonts_used ;
+/*
+ * Our hash routine.
+ */
+int
+hash P1C(char *, s)
+{
+ int h = 12 ;
+
+ while (*s != 0)
+ h = (h + h + *s++) % RESHASHPRIME ;
+ return(h) ;
+}
+/*
+ * Reverse the hash chains.
+ */
+void
+revpslists P1H(void) {
+ register int i ;
+ for (i=0; i<RESHASHPRIME; i++)
+ reshash[i] = (struct resfont *)revlist(reshash[i]) ;
+}
+/*
+ * cleanres() marks all resident fonts as not being yet sent, except
+ * those marked with 2 meaning they were downloaded as part of the
+ * main prolog (not section prolog).
+ */
+void
+cleanres P1H(void) {
+ register int i ;
+ register struct resfont *p ;
+ for (i=0; i<RESHASHPRIME; i++)
+ for (p=reshash[i]; p; p=p->next)
+ if (p->sent == 1)
+ p->sent = 0 ;
+}
+/*
+ * The routine that looks up a font name.
+ */
+struct resfont *
+lookup P1C(char *, name)
+{
+ struct resfont *p ;
+
+ for (p=reshash[hash(name)]; p!=NULL; p=p->next)
+ if (strcmp(p->Keyname, name)==0)
+ return(p) ;
+ return(NULL) ;
+}
+
+struct resfont *
+findPSname P1C(char *, name)
+{
+ register int i ;
+ register struct resfont *p ;
+ for (i=0; i<RESHASHPRIME; i++)
+ for (p=reshash[i]; p; p=p->next) {
+ if (strcmp(p->PSname, name)==0)
+ return p;
+ }
+ return NULL;
+}
+
+/*
+ * This routine adds an entry.
+ */
+void
+add_entry P6C(char *, TeXname, char *, PSname, char *, Fontfile,
+ char *, Vectfile, char *, specinfo, char *, downloadinfo)
+{
+ struct resfont *p ;
+ int h ;
+ if (PSname == NULL)
+ PSname = TeXname ;
+ p = (struct resfont *)mymalloc((integer)sizeof(struct resfont)) ;
+ p->Keyname = TeXname ;
+ p->PSname = PSname ;
+ p->Fontfile = Fontfile;
+ p->Vectfile = Vectfile;
+ p->TeXname = TeXname ;
+ p->specialinstructions = specinfo ;
+ if (downloadinfo && *downloadinfo)
+ p->downloadheader = downloadinfo ;
+ else
+ p->downloadheader = 0 ;
+ h = hash(TeXname) ;
+ p->next = reshash[h] ;
+ p->sent = 0 ;
+ reshash[h] = p ;
+}
+/*
+ * Now our residentfont routine. Returns the number of characters in
+ * this font, based on the TFM file.
+ */
+extern char *infont ;
+int
+residentfont P1C(register fontdesctype *, curfnt)
+{
+ register shalfword i ;
+ struct resfont *p ;
+
+/*
+ * First we determine if we can find this font in the resident list.
+ */
+ if (*curfnt->area)
+ return 0 ; /* resident fonts never have a nonstandard font area */
+ if ((p=lookup(curfnt->name))==NULL)
+ return 0 ;
+/*
+ * This is not yet the correct way to do things, but it is useful as it
+ * is so we leave it in. The problem: if resident Times-Roman is
+ * re-encoded, then it will be downloaded as bitmaps; this is not
+ * right. The solution will be to introduce two types of `<'
+ * directives, one that downloads fonts and one that downloads
+ * short headers that are innocuous.
+ */
+ if (p->Fontfile && downloadpspk) {
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,"Using PK font %s for <%s>.\n",
+ curfnt->name, p->PSname) ;
+#endif /* DEBUG */
+ return 0 ;
+ }
+/*
+ * We clear out some pointers:
+ */
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,"Font %s <%s> is resident.\n",
+ curfnt->name, p->PSname) ;
+#endif /* DEBUG */
+ curfnt->resfont = p ;
+ curfnt->name = p->TeXname ;
+ for (i=0; i<256; i++) {
+ curfnt->chardesc[i].TFMwidth = 0 ;
+ curfnt->chardesc[i].packptr = NULL ;
+ curfnt->chardesc[i].pixelwidth = 0 ;
+ curfnt->chardesc[i].flags = 0 ;
+ curfnt->chardesc[i].flags2 = 0 ;
+ }
+ add_name(p->PSname, &ps_fonts_used) ;
+/*
+ * We include the font here. But we only should need to include the
+ * font if we have a stupid spooler; smart spoolers should be able
+ * to supply it automatically.
+ */
+ if (p->downloadheader) {
+ char *cp = p->downloadheader ;
+ char *q ;
+
+ infont = p->PSname ;
+ while (1) {
+ q = cp ;
+ while (*cp && *cp != ' ')
+ cp++ ;
+ if (*cp) {
+ *cp = 0 ;
+ add_header(q) ;
+ *cp++ = ' ' ;
+ } else {
+/* if (strstr(q,".pfa")||strstr(q,".pfb")||
+ strstr(q,".PFA")||strstr(q,".PFB"))
+ break ;
+ else */ {
+ add_header(q) ;
+ break;
+ }
+ }
+ infont = 0 ;
+ }
+ infont = 0 ;
+ }
+ i = tfmload(curfnt) ;
+ if (i < 0)
+ i = 1 ;
+ usesPSfonts = 1 ;
+ return(i) ;
+}
+#define INLINE_SIZE (2000)
+static char was_inline[INLINE_SIZE] ;
+static unsigned c_lineno;
+void
+bad_config P1C(char *, err)
+{
+ fprintf (stderr, "%s:%d:", realnameoffile, c_lineno);
+ error (err);
+ fprintf(stderr, " (%s)\n", was_inline) ;
+}
+
+#ifndef KPATHSEA
+/*
+ * Get environment variables! These override entries in ./config.h.
+ * We substitute everything of the form ::, ^: or :$ with default,
+ * so a user can easily build on to the existing paths.
+ */
+static char *getpath P2C(char *, who, char *, what)
+{
+ if (who) {
+ register char *pp, *qq ;
+ int lastsep = 1 ;
+
+ for (pp=nextstring, qq=who; *qq;) {
+ if (*qq == PATHSEP) {
+ if (lastsep) {
+ strcpy(pp, what) ;
+ pp = pp + strlen(pp) ;
+ }
+ lastsep = 1 ;
+ } else
+ lastsep = 0 ;
+ *pp++ = *qq++ ;
+ }
+ if (lastsep) {
+ strcpy(pp, what) ;
+ pp = pp + strlen(pp) ;
+ }
+ *pp = 0 ;
+ qq = nextstring ;
+ nextstring = pp + 1 ;
+ return qq ;
+ } else
+ return what ;
+}
+#endif
+/*
+ * We use this function so we can support strings delimited by
+ * double quotes with spaces in them. We also accept strings
+ * with spaces in them, but kill off any spaces at the end.
+ */
+char *configstring P2C(char *, s, int, nullok)
+{
+ char tstr[INLINE_SIZE] ;
+ char *p = tstr ;
+
+ while (*s && *s <= ' ')
+ s++ ;
+ if (*s == '"') {
+ s++ ;
+ while (*s != 10 && *s != 0 && *s != '"' && p < tstr+290)
+ *p++ = *s++ ;
+ } else {
+ while (*s && p < tstr+290)
+ *p++ = *s++ ;
+ while (*(p-1) <= ' ' && p > tstr)
+ p-- ;
+ }
+ *p = 0 ;
+ if (p == tstr && ! nullok)
+ bad_config("bad string") ;
+ return newstring(tstr) ;
+}
+#ifdef KPATHSEA
+/* We use this in `getdefaults' to modify the kpathsea structure for the
+ paths we read. See kpathsea/tex-file.[ch]. */
+#define SET_CLIENT_PATH(filefmt, val) \
+ kpse_format_info[filefmt].client_path = xstrdup (val)
+#endif
+/*
+ * Now we have the getdefaults routine.
+ */
+char *psmapfile = PSMAPFILE ;
+Boolean
+getdefaults P1C(char *, s)
+{
+ FILE *deffile ;
+ char PSname[INLINE_SIZE] ;
+ register char *p ;
+ integer hsiz, vsiz ;
+#ifndef KPATHSEA
+ char *d = configpath ;
+ int i, j ;
+#endif
+ int canaddtopaper = 0 ;
+
+ if (printer == NULL) {
+ if (s) {
+ strcpy(PSname, s) ;
+ } else {
+#ifdef KPATHSEA
+ char *dvipsrc = kpse_var_value ("DVIPSRC");
+#ifdef WIN32
+ if (dvipsrc && *dvipsrc) {
+ /* $DVIPSRC was set by user */
+ strcpy(PSname, dvipsrc);
+ }
+ else
+ /* No env var, looking into some kind of standard path. */
+ if (SearchPath(".;%HOME%;c:\\", ".dvipsrc", NULL,
+ INLINE_SIZE, PSname,
+ &dvipsrc) == 0) {
+ /* search failed, we must put something into PSname. */
+ dvipsrc = kpse_var_expand(DVIPSRC);
+ if (dvipsrc) {
+ strcpy(PSname, dvipsrc);
+ free(dvipsrc);
+ }
+ /* Else SearchPath has filled PSname with something */
+ }
+ /* remove any redundant path separators. Many configurations
+ can show up: c:\/.dvipsrc and so on ... */
+ {
+ char *p, *q;
+ for (p = q = PSname; *p && (p - PSname < INLINE_SIZE) ;
+ p++, q++) {
+ if (IS_DIR_SEP(*p)) {
+ *q = DIR_SEP; p++; q++;
+ while (*p && IS_DIR_SEP(*p)) p++;
+ }
+ *q = *p;
+ }
+ *q = '\0';
+ }
+#else
+ if(!dvipsrc) dvipsrc = kpse_var_expand(DVIPSRC) ;
+ strcpy(PSname, dvipsrc ? dvipsrc : "~/.dvipsrc") ;
+ if(dvipsrc) free(dvipsrc) ;
+#endif /* WIN32 */
+
+#else /* ! KPATHSEA */
+#ifndef VMCMS /* IBM: VM/CMS - don't have home directory on VMCMS */
+#ifndef MVSXA
+ d = "~" ;
+#endif
+#endif /* IBM: VM/CMS */
+ strcpy(PSname, DVIPSRC) ;
+#endif /* KPATHSEA */
+ }
+ } else {
+#if defined(MSDOS) || defined(OS2)
+ strcpy(PSname, printer) ;
+ strcat(PSname, ".cfg") ;
+#else
+ strcpy(PSname, "config.") ;
+ strcat(PSname, printer) ;
+#endif
+ }
+#ifdef KPATHSEA
+ if ((deffile=search(configpath,PSname,READ))!=NULL) {
+#else
+ if ((deffile=search(d,PSname,READ))!=NULL) {
+#endif
+#ifdef DEBUG
+ if (dd (D_CONFIG)) {
+ fprintf (stderr, "Reading dvips config file `%s':\n", realnameoffile);
+ }
+#endif
+ c_lineno = 0;
+ while (fgets(was_inline, INLINE_SIZE, deffile)!=NULL) {
+ c_lineno++;
+#ifdef DEBUG
+ if (dd (D_CONFIG)) {
+ fprintf (stderr, "%s:%d:%s", realnameoffile, c_lineno, was_inline);
+ }
+#endif
+/*
+ * We need to get rid of the newline.
+ */
+ for (p=was_inline; *p; p++) ;
+ while (p > was_inline && (*(p-1) == '\n' || *(p-1) == '\r')) {
+ *--p = '\0' ;
+ }
+ if (was_inline[0] != '@')
+ canaddtopaper = 0 ;
+ switch (was_inline[0]) {
+/*
+ * Handling paper size information:
+ *
+ * If line is empty, then we clear out the paper size information
+ * we have so far.
+ *
+ * If it is `@+', then we add to the current paper size info.
+ *
+ * If it is `name hsize vsize', then we start a new definition.
+ */
+case '@' :
+ p = was_inline + 1 ;
+ while (*p && *p <= ' ') p++ ;
+ if (*p == 0) {
+ papsizes = 0 ; /* throw away memory */
+ } else if (*p == '+') {
+ if (canaddtopaper == 0)
+ error(
+ " @+ in config files must immediately following a @ lines") ;
+ else {
+ *(nextstring-1) = '\n' ;/* IBM: VM/CMS - changed 10 to "\n" */
+ p++ ;
+ while (*p && *p == ' ') p++ ;
+ strcpy(nextstring, p) ;
+ nextstring += strlen(p) + 1 ;
+ }
+ } else {
+ struct papsiz *ps ;
+
+ ps = (struct papsiz *)mymalloc((integer)sizeof(struct papsiz)) ;
+ ps->next = papsizes ;
+ papsizes = ps ;
+ ps->name = p ;
+ while (*p && *p > ' ')
+ p++ ;
+ *p++ = 0 ;
+ ps->name = newstring(ps->name) ;
+ while (*p && *p <= ' ') p++ ;
+ handlepapersize(p, &hsiz, &vsiz) ;
+ ps->xsize = hsiz ;
+ ps->ysize = vsiz ;
+ ps->specdat = nextstring++ ;
+ *(ps->specdat) = 0 ;
+ canaddtopaper = 1 ;
+ }
+ break ;
+case 'a' :
+ dopprescan = (was_inline[1] != '0') ;
+ break ;
+case 'b':
+#ifdef SHORTINT
+ if (sscanf(was_inline+1, "%ld", &pagecopies) != 1)
+ bad_config("missing pagecopies to b") ;
+#else
+ if (sscanf(was_inline+1, "%d", &pagecopies) != 1)
+ bad_config("missing pagecopies to b") ;
+#endif
+ if (pagecopies < 1 || pagecopies > 1000)
+ bad_config("pagecopies not between 1 and 1000") ;
+ break ;
+case 'm' :
+#ifdef SHORTINT
+ if (sscanf(was_inline+1, "%ld", &swmem) != 1)
+ bad_config("missing swmem to m") ;
+#else /* ~SHORTINT */
+ if (sscanf(was_inline+1, "%d", &swmem) != 1)
+ bad_config("missing swmem to m") ;
+#endif /* ~SHORTINT */
+ swmem += fontmem ; /* grab headers we've seen already */
+ break ;
+case 'M' :
+ /* If the user specified a -mode, don't replace it. */
+ if (!mfmode_option)
+ mfmode = configstring(was_inline+1, 0) ;
+ mflandmode = 0 ;
+ {
+ char *pp ;
+ for (pp=mfmode; pp && *pp>' '; pp++) ;
+ if (pp && *pp == ' ') {
+ *pp++ = 0 ;
+ while (*pp && *pp <= ' ')
+ pp++ ;
+ if (*pp)
+ mflandmode = pp ;
+ }
+ }
+ break ;
+case 'o' :
+ if (!oname_option) {
+ struct stat st_buf;
+ oname = configstring(was_inline+1, 1) ;
+ if ((*oname && oname[strlen(oname)-1] == ':')
+ || (stat(oname, &st_buf) == 0 && S_ISCHR(st_buf.st_mode))) {
+ sendcontrolD = 1 ; /* if we send to a device, *we* are spooler */
+#if defined(MSDOS) || defined(OS2)
+ oname[strlen(oname)-1] = 0 ;
+#endif
+ }
+ }
+ break ;
+case 'F' :
+ sendcontrolD = (was_inline[1] != '0') ;
+ break ;
+case 'O' :
+ p = was_inline + 1 ;
+ handlepapersize(p, &hoff, &voff) ;
+ break ;
+#ifdef FONTLIB
+case 'L' :
+ {
+ char tempname[INLINE_SIZE] ;
+ extern char *fliparse() ;
+ if (sscanf(was_inline+1, "%s", PSname) != 1) bad_config("missing arg to L") ;
+ else {
+ flipath = getpath(fliparse(PSname,tempname), flipath);
+ fliname = newstring(tempname) ;
+ }
+ }
+ break ;
+#endif
+case 'T' :
+ if (sscanf(was_inline+1, "%s", PSname) != 1)
+ bad_config("missing arg to T") ;
+ else
+#ifdef KPATHSEA
+ SET_CLIENT_PATH (kpse_tfm_format, PSname);
+#else
+ tfmpath = getpath(PSname, tfmpath) ;
+#endif
+ break ;
+case 'P' :
+ if (sscanf(was_inline+1, "%s", PSname) != 1) bad_config("missing arg to P") ;
+ else
+#ifdef KPATHSEA
+ SET_CLIENT_PATH (kpse_pk_format, PSname);
+#else
+ pkpath = getpath(PSname, pkpath) ;
+#endif
+ break ;
+case 'p' :
+ p = was_inline + 1 ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if (*p == '+') {
+ if (sscanf(p+1, "%s", PSname) != 1)
+ bad_config("missing arg to p") ;
+ getpsinfo(PSname) ;
+ } else {
+ psmapfile = configstring(was_inline+1, 0) ;
+ }
+ break ;
+case 'v' : case 'V' :
+ if (sscanf(was_inline+1, "%s", PSname) != 1)
+ bad_config("missing arg to V") ;
+ else
+#ifdef KPATHSEA
+ SET_CLIENT_PATH (kpse_vf_format, PSname);
+#else
+ vfpath = getpath(PSname, vfpath) ;
+#endif
+ break ;
+case 'S' :
+ if (sscanf(was_inline+1, "%s", PSname) != 1)
+ bad_config("missing arg to S") ;
+ else
+#ifdef KPATHSEA
+ SET_CLIENT_PATH (kpse_pict_format, PSname);
+#else
+ figpath = getpath(PSname, figpath) ;
+#endif
+ break ;
+case 's':
+ safetyenclose = 1 ;
+ break ;
+case 'H' :
+ if (sscanf(was_inline+1, "%s", PSname) != 1)
+ bad_config("missing arg to H") ;
+ else
+#ifdef KPATHSEA
+ SET_CLIENT_PATH (headerpath, PSname);
+#else
+ headerpath = getpath(PSname, headerpath) ;
+#endif
+ break ;
+case '%': case ' ' : case '*' : case '#' : case ';' :
+case '=' : case 0 : case '\n' :
+ break ;
+case 'r' :
+ reverse = (was_inline[1] != '0') ;
+ break ;
+/*
+ * This case is for last resort font scaling; I hate this, but enough
+ * people have in no uncertain terms demanded it that I'll go ahead and
+ * add it.
+ *
+ * This line must have numbers on it, resolutions, to search for the
+ * font as a last resort, and then the font will be scaled. These
+ * resolutions should be in increasing order.
+ *
+ * For most machines, just `300' is sufficient here; on the NeXT,
+ * `300 400' may be more appropriate.
+ */
+case 'R':
+#ifndef KPATHSEA
+ i = 0 ;
+ p = was_inline + 1 ;
+ while (*p) {
+ while (*p && *p <= ' ')
+ p++ ;
+ if ('0' <= *p && *p <= '9') {
+ j = 0 ;
+ while ('0' <= *p && *p <= '9')
+ j = 10 * j + (*p++ - '0') ;
+ if (i > 0)
+ if (lastresortsizes[i-1] > j) {
+ bad_config("last resort sizes (R) must be sorted") ;
+ }
+ lastresortsizes[i++] = j ;
+ } else {
+ if (*p == 0)
+ break ;
+ bad_config("only numbers expected on `R' line") ;
+ }
+ }
+ lastresortsizes[i] = 32000 ;
+#else /* KPATHSEA */
+ for (p = was_inline + 1; *p; p++) {
+ if (isblank (*p)) {
+ *p = ':';
+ }
+ }
+ kpse_fallback_resolutions_string = xstrdup (was_inline + 1);
+#endif
+ break ;
+case 'D' :
+ if (sscanf(was_inline+1, "%d", &actualdpi) != 1)
+ bad_config("missing arg to D") ;
+ if (actualdpi < 10 || actualdpi > 10000)
+ bad_config("dpi must be between 10 and 10000") ;
+ vactualdpi = actualdpi;
+ break ;
+/*
+ * Execute a command. This can be dangerous, but can also be very useful.
+ */
+case 'E' :
+#ifdef SECURE
+ error("dvips was compiled with SECURE, which disables E in config") ;
+#else
+ if (secure) {
+ error("dvips -R option used, which disables E in config") ;
+ break ;
+ }
+ (void)system(was_inline+1) ;
+#endif
+ break ;
+case 'K':
+ removecomments = (was_inline[1] != '0') ;
+ break ;
+case 'U':
+ nosmallchars = (was_inline[1] != '0') ;
+ break ;
+case 'W':
+ for (p=was_inline+1; *p && *p <= ' '; p++) ;
+ if (*p)
+ warningmsg = newstring(p) ;
+ else
+ warningmsg = 0 ;
+ break ;
+case 'X' :
+ if (sscanf(was_inline+1, "%d", &actualdpi) != 1)
+ bad_config("missing numeric arg to X") ;
+ if (actualdpi < 10 || actualdpi > 10000)
+ bad_config("X arg must be between 10 and 10000") ;
+ break ;
+case 'Y' :
+ if (sscanf(was_inline+1, "%d", &vactualdpi) != 1)
+ bad_config("missing numeric arg to Y") ;
+ if (vactualdpi < 10 || vactualdpi > 10000)
+ bad_config("Y arg must be between 10 and 10000") ;
+ break ;
+case 'x': case 'y':
+ if (sscanf(was_inline+1, "%lg", &mag) != 1)
+ bad_config("missing arg to x or y") ;
+ overridemag = (was_inline[0] == 'x') ? 1 : -1 ;
+ break ;
+case 'e' :
+ if (sscanf(was_inline+1, "%d", &maxdrift) != 1)
+ bad_config("missing arg to e") ;
+ if (maxdrift < 0) bad_config("bad argument to e") ;
+ vmaxdrift = maxdrift;
+ break ;
+case 'z' :
+ if (secure_option && secure && was_inline[1] == '0') {
+ fprintf (stderr,
+ "warning: %s: z0 directive ignored since -R1 given\n",
+ realnameoffile);
+ } else {
+ secure = (was_inline[1] != '0') ;
+ }
+ break ;
+case 'q' : case 'Q' :
+ quiet = (was_inline[1] != '0') ;
+ break ;
+case 'f' :
+ filter = (was_inline[1] != '0') ;
+ if (filter)
+ oname = "";
+ /* noenv has already been tested, so no point in setting. */
+ sendcontrolD = 0;
+ break ;
+#ifdef SHIFTLOWCHARS
+case 'G':
+ shiftlowchars = (was_inline[1] != '0') ;
+ break ;
+#endif
+case 'h' :
+ if (sscanf(was_inline+1, "%s", PSname) != 1)
+ bad_config("missing arg to h") ;
+ else (void)add_header(PSname) ;
+ break ;
+case 'i' :
+ if (sscanf(was_inline+1, "%d", &maxsecsize) != 1)
+ maxsecsize = 0 ;
+ sepfiles = 1 ;
+ break ;
+case 'I':
+ noenv = (was_inline[1] != '0') ;
+ break ;
+case 'N' :
+ disablecomments = (was_inline[1] != '0') ;
+ break ;
+case 'Z' :
+ compressed = (was_inline[1] != '0') ;
+ break ;
+case 'j':
+ partialdownload = (was_inline[1] != '0') ;
+ break ;
+case 't' :
+ if (sscanf(was_inline+1, "%s", PSname) != 1)
+ bad_config("missing arg to t") ;
+ else {
+ if (strcmp(PSname, "landscape") == 0) {
+ if (hpapersize || vpapersize)
+ error(
+ "both landscape and papersize specified; ignoring landscape") ;
+ else
+ landscape = 1 ;
+ } else
+ paperfmt = newstring(PSname) ;
+ }
+ break ;
+default:
+ bad_config("strange line") ;
+ }
+ }
+ (void)fclose(deffile) ;
+ } else {
+ if (printer)
+ {
+ char msg[1000];
+ sprintf (msg, "warning: no config file for `%s'", printer);
+ error(msg);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/*
+* If a character pointer is passed in, use that name; else, use the
+* default (possibly set) name, psfonts.map.
+*/
+void getpsinfo P1C(char *, name)
+{
+ FILE *deffile ;
+ register char *p ;
+ char *specinfo, *downloadinfo ;
+ char downbuf[500] ;
+ char specbuf[500] ;
+ int slen ;
+
+ if (name == 0)
+ name = psmapfile ;
+ if ((deffile=search(mappath, name, READ))!=NULL) {
+ while (fgets(was_inline, INLINE_SIZE, deffile)!=NULL) {
+ p = was_inline ;
+ if (*p > ' ' && *p != '*' && *p != '#' && *p != ';' && *p != '%') {
+ char *TeXname = NULL ;
+ char *PSname = NULL ;
+ char *Fontfile = NULL;
+ char *Vectfile = NULL;
+ char *hdr_name = NULL;
+ boolean nopartial_p = false;
+ boolean encoding_p = false;
+ specinfo = NULL ;
+ downloadinfo = NULL ;
+ downbuf[0] = 0 ;
+ specbuf[0] = 0 ;
+ while (*p) {
+ encoding_p = false ;
+ while (*p && *p <= ' ')
+ p++ ;
+ if (*p) {
+ if (*p == '"') { /* PostScript instructions? */
+ if (specinfo) {
+ strcat(specbuf, specinfo) ;
+ strcat(specbuf, " ") ;
+ }
+ specinfo = p + 1 ;
+
+ } else if (*p == '<') { /* Header to download? */
+ /* If had previous downloadinfo, save it. */
+ if (downloadinfo) {
+ strcat(downbuf, downloadinfo) ;
+ strcat(downbuf, " ") ;
+ downloadinfo = NULL;
+ }
+ if (p[1] == '<') { /* << means always full download */
+ p++;
+ nopartial_p = true;
+ } else if (p[1] == '[') { /* <[ means an encoding */
+ p++;
+ encoding_p = true;
+ }
+ p++ ;
+ /* skip whitespace after < */
+ while (*p && *p <= ' ')
+ p++;
+
+ /* save start of header name */
+ hdr_name = p ;
+
+ } else if (TeXname) /* second regular word on line? */
+ PSname = p ;
+
+ else /* first regular word? */
+ TeXname = p ;
+
+ if (*p == '"') {
+ p++ ; /* find end of "..." word */
+ while (*p != '"' && *p)
+ p++ ;
+ } else
+ while (*p > ' ') /* find end of anything else */
+ p++ ;
+ if (*p)
+ *p++ = 0 ;
+
+ /* If we had a header we were downloading, figure
+ out what to do; couldn't do this above since we
+ want to check the suffix. */
+ if (hdr_name) {
+ char *suffix = find_suffix (hdr_name);
+ if (encoding_p || STREQ (suffix, "enc")) {
+ /* (SPQR) if it is a reencoding, pass on to
+ FontPart, and download as usual */
+ Vectfile = downloadinfo = hdr_name;
+ } else if (nopartial_p) {
+ downloadinfo = hdr_name ;
+ } else if (FILESTRCASEEQ (suffix, "pfa")
+ || FILESTRCASEEQ (suffix, "pfb")
+ || STREQ (suffix, "PFA")
+ || STREQ (suffix, "PFB")) {
+ Fontfile = hdr_name;
+ } else {
+ downloadinfo = hdr_name;
+ }
+ }
+ }
+ }
+ if (specinfo)
+ strcat(specbuf, specinfo) ;
+ if (downloadinfo)
+ strcat(downbuf, downloadinfo) ;
+ slen = strlen(downbuf) - 1;
+ if (downbuf[slen] == ' ') {
+ downbuf[slen] = 0;
+ }
+ if (TeXname) {
+ TeXname = newstring(TeXname) ;
+ PSname = newstring(PSname) ;
+ Fontfile = newstring(Fontfile);
+ Vectfile = newstring(Vectfile);
+ specinfo = newstring(specbuf) ;
+ downloadinfo = newstring(downbuf) ;
+ add_entry(TeXname, PSname, Fontfile, Vectfile,
+ specinfo, downloadinfo) ;
+ }
+ }
+ }
+ (void)fclose(deffile) ;
+ }
+ checkstrings() ;
+}
+#ifndef KPATHSEA
+/*
+ * Get environment variables! These override entries in ./config.h.
+ * We substitute everything of the form ::, ^: or :$ with default,
+ * so a user can easily build on to the existing paths.
+ */
+static char *getenvup P2C(char *, who, char *, what)
+{
+ return getpath(getenv(who), what) ;
+}
+#endif
+#if !defined(KPATHSEA) && defined(SEARCH_SUBDIRECTORIES)
+static char *concat3();
+#endif
+void checkenv P1C(int, which)
+{
+#ifndef KPATHSEA
+ if (which) {
+ tfmpath = getenvup(FONTPATH, tfmpath) ;
+ vfpath = getenvup("VFFONTS", vfpath) ;
+ pictpath = getenvup("TEXPICTS", pictpath) ;
+ figpath = getenvup("TEXINPUTS", figpath) ;
+ headerpath = getenvup("DVIPSHEADERS", headerpath) ;
+ if (getenv("TEXPKS"))
+ pkpath = getenvup("TEXPKS", pkpath) ;
+ else if (getenv("TEXPACKED"))
+ pkpath = getenvup("TEXPACKED", pkpath) ;
+ else if (getenv("PKFONTS"))
+ pkpath = getenvup("PKFONTS", pkpath) ;
+#ifdef SEARCH_SUBDIRECTORIES
+ else if (getenv(FONTPATH))
+ pkpath = getenvup(FONTPATH, pkpath) ;
+ if (getenv ("TEXFONTS_SUBDIR"))
+ fontsubdirpath = getenvup ("TEXFONTS_SUBDIR", fontsubdirpath);
+ {
+ char pathsep[2] ;
+ char *do_subdir_path();
+ char *dirs = do_subdir_path (fontsubdirpath);
+ /* If the paths were in dynamic storage before, that memory is
+ wasted now. */
+ pathsep[0] = PATHSEP ;
+ pathsep[1] = '\0' ;
+ tfmpath = concat3 (tfmpath, pathsep, dirs);
+ pkpath = concat3 (pkpath, pathsep, dirs);
+ }
+#endif
+ } else
+ configpath = getenvup("TEXCONFIG", configpath) ;
+#endif
+}
+
+#if !defined(KPATHSEA) && defined(SEARCH_SUBDIRECTORIES)
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#ifdef SYSV
+#include <dirent.h>
+typedef struct dirent *directory_entry_type;
+#else
+#include <sys/dir.h>
+typedef struct direct *directory_entry_type;
+#endif
+
+/* Declare the routine to get the current working directory. */
+
+#ifndef HAVE_GETCWD
+extern char *getwd ();
+#define getcwd(b, len) ((b) ? getwd (b) : getwd (xmalloc (len)))
+#else
+#ifdef ANSI
+extern char *getcwd (char *, int);
+#else
+extern char *getcwd ();
+#endif /* not ANSI */
+#endif /* not HAVE_GETWD */
+
+#if defined(SYSV) || defined(VMS) || defined(MSDOS) || defined(OS2) || defined(ATARIST)
+#define MAXPATHLEN (256)
+#else /* ~SYSV */
+#include <sys/param.h> /* for MAXPATHLEN */
+#endif
+
+extern void exit() ;
+extern int chdir() ;
+
+/* Memory operations: variants of malloc(3) and realloc(3) that just
+ give up the ghost when they fail. */
+
+char *
+xmalloc P1C(unsigned, size)
+{
+ char *mem = malloc (size);
+
+ if (mem == NULL)
+ {
+ fprintf (stderr, "! Cannot allocate %u bytes.\n", size);
+ exit (10);
+ }
+
+ return mem;
+}
+
+
+char *
+xrealloc P2C(char *, ptr, unsigned, size)
+{
+ char *mem = realloc (ptr, size);
+
+ if (mem == NULL)
+ {
+ fprintf (stderr, "! Cannot reallocate %u bytes at %x.\n", size, (int)ptr);
+ exit (10);
+ }
+
+ return mem;
+}
+
+
+/* Return, in NAME, the next component of PATH, i.e., the characters up
+ to the next PATHSEP. */
+
+static void
+next_component P2C(char *, name, char **, path)
+{
+ unsigned count = 0;
+
+ while (**path != 0 && **path != PATHSEP)
+ {
+ name[count++] = **path;
+ (*path)++; /* Move further along, even between calls. */
+ }
+
+ name[count] = 0;
+ if (**path == PATHSEP)
+ (*path)++; /* Move past the delimiter. */
+}
+
+
+#ifndef _POSIX_SOURCE
+#ifndef S_ISDIR
+#define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
+#endif
+#endif
+
+/* Return true if FN is a directory or a symlink to a directory,
+ false if not. */
+
+int
+is_dir P1C(char *, fn)
+{
+ struct stat stats;
+
+ return stat (fn, &stats) == 0 && S_ISDIR (stats.st_mode);
+}
+
+
+static char *
+concat3 P3C(char *, s1, char *, s2, char *, s3)
+{
+ char *r = xmalloc (strlen (s1) + strlen (s2) + strlen (s3) + 1);
+ strcpy (r, s1);
+ strcat (r, s2);
+ strcat (r, s3);
+ return r;
+}
+
+
+/* DIR_LIST is the default list of directories (colon-separated) to
+ search. We want to add all the subdirectories directly below each of
+ the directories in the path.
+
+ We return the list of directories found. */
+
+char *
+do_subdir_path P1C(char *, dir_list)
+{
+ char *cwd;
+ unsigned len;
+ char *result = xmalloc ((unsigned)1);
+ char *temp = dir_list;
+ char dirsep[2] ;
+
+ dirsep[0] = DIRSEP ;
+ dirsep[1] = '\0' ;
+
+ /* Make a copy in writable memory. */
+ dir_list = xmalloc (strlen (temp) + 1);
+ strcpy (dir_list, temp);
+
+ *result = 0;
+
+ /* Unfortunately, we can't look in the environment for the current
+ directory, because if we are running under a program (let's say
+ Emacs), the PWD variable might have been set by Emacs' parent
+ to the current directory at the time Emacs was invoked. This
+ is not necessarily the same directory the user expects to be
+ in. So, we must always call getcwd(3) or getwd(3), even though
+ they are slow and prone to hang in networked installations. */
+ cwd = getcwd (NULL, MAXPATHLEN + 2);
+ if (cwd == NULL)
+ {
+ perror ("getcwd");
+ exit (errno);
+ }
+
+ do
+ {
+ DIR *dir;
+ directory_entry_type e;
+ char dirname[MAXPATHLEN];
+
+ next_component (dirname, &dir_list);
+
+ /* All the `::'s should be gone by now, but we may as well make
+ sure `chdir' doesn't crash. */
+ if (*dirname == 0) continue;
+
+ /* By changing directories, we save a bunch of string
+ concatenations (and make the pathnames the kernel looks up
+ shorter). */
+ if (chdir (dirname) != 0) continue;
+
+ dir = opendir (".");
+ if (dir == NULL) continue;
+
+ while ((e = readdir (dir)) != NULL)
+ {
+ if (is_dir (e->d_name) && strcmp (e->d_name, ".") != 0
+ && strcmp (e->d_name, "..") != 0)
+ {
+ char *found = concat3 (dirname, dirsep, e->d_name);
+
+ result = xrealloc (result, strlen (result) + strlen (found) + 2);
+
+ len = strlen (result);
+ if (len > 0)
+ {
+ result[len] = PATHSEP;
+ result[len + 1] = 0;
+ }
+ strcat (result, found);
+ free (found);
+ }
+ }
+ closedir (dir);
+
+ /* Change back to the current directory, in case the path
+ contains relative directory names. */
+ if (chdir (cwd) != 0)
+ {
+ perror (cwd);
+ exit (errno);
+ }
+ }
+ while (*dir_list != 0);
+
+ return result;
+}
+#endif /* SEARCH_SUBDIRECTORIES */
diff --git a/Build/source/texk/dvipsk/scalewidth.c b/Build/source/texk/dvipsk/scalewidth.c
new file mode 100644
index 00000000000..65c7720bbb4
--- /dev/null
+++ b/Build/source/texk/dvipsk/scalewidth.c
@@ -0,0 +1,32 @@
+/*
+ * Code to scale dimensions. Takes two thirty-two bit integers, multiplies
+ * them, divides them by 2^20, and returns the thirty-two bit result.
+ * The first integer, the width in FIXes, can lie between -2^24 and 2^24-1.
+ * The second integer, the scale factor, can lie between 0 and 2^27-1.
+ *
+ * Here, unlike in TeX, we do the arithmetic exactly. Since the error
+ * in the TeX arithmetic is parts per million, and since dvips makes no
+ * layout decisions, this has no effect. (TeX stipulates that any
+ * implementation of *TeX* needs to do the arithmetic exactly as
+ * specified in TeX, but drivers need not.)
+ *
+ * Since this math is special, we put it in its own file. It is the only
+ * place in the program where such accuracy is required.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+
+integer
+scalewidth P2C(register integer, a, register integer, b)
+{
+ register integer al, bl ;
+
+ if (a < 0)
+ return -scalewidth(-a, b) ;
+ if (b < 0)
+ return -scalewidth(a, -b) ;
+ al = a & 32767 ;
+ bl = b & 32767 ;
+ a >>= 15 ;
+ b >>= 15 ;
+ return ( ((al*bl/32768) + a*bl+al*b)/32 + a*b*1024) ;
+}
diff --git a/Build/source/texk/dvipsk/scanpage.c b/Build/source/texk/dvipsk/scanpage.c
new file mode 100644
index 00000000000..87f5ef49469
--- /dev/null
+++ b/Build/source/texk/dvipsk/scanpage.c
@@ -0,0 +1,290 @@
+/*
+ * This routine scans a page for font definitions and character usage.
+ * It keeps an estimate of the memory remaining in the printer, and
+ * returns false when that memory is exhausted, unless scanning the
+ * first page. Otherwise it returns 1 if no problems were found,
+ * or 2 if it thinks the first page of a section may overflow memory.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+
+/*
+ * These are the external routines we need.
+ */
+#include "protos.h"
+
+extern integer firstboploc ;
+/*
+ * And, of course, the globals it uses.
+ */
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern fontdesctype *curfnt ;
+extern fontmaptype *ffont ;
+extern quarterword *curpos, *curlim ;
+extern integer fontmem ;
+extern integer pagecount ;
+extern integer pagenum ;
+extern Boolean compressed ;
+extern FILE *dvifile ;
+extern char errbuf[] ;
+extern frametype frames[] ;
+extern integer pagecost ;
+extern Boolean noomega ;
+/*
+ * Charge pagecost for the cost of showing the character that *cd refers to
+ * and charge fontmem for the cost of downloading the character if necessary.
+ * A zero result indicates that we have run out of memory.
+ * If the character is small (a small packet), we save 43 bytes (since we
+ * use a single string instead of an array with integers in the PostScript.)
+ */
+Boolean
+prescanchar P1C(chardesctype *, cd)
+{
+ register quarterword *cras ;
+ register integer thischar ;
+
+ if ((cd->flags & (PREVPAGE | THISPAGE)) == 0) {
+ /* the character hasn't been used before in the current section */
+ cras = cd->packptr ;
+ if (curfnt->resfont) {
+ thischar = PSCHARCOST ;
+ cd->flags |= THISPAGE ;
+ } else if (cras != NULL) {
+ thischar = CHARCOST ;
+ if (cd->flags & BIGCHAR)
+ thischar += 43 ;
+ if (compressed) {
+ if ((cd->flags & REPACKED) == 0) {
+ repack(cd) ;
+ cras = cd->packptr ;
+ }
+ if ((*cras & 4))
+ if ((*cras & 7) == 7)
+ thischar += getlong(cras + 17) ;
+ else
+ thischar += getlong(cras + 9) ;
+ else
+ thischar += getlong(cras + 5) ;
+ } else {
+ if ((*cras & 4))
+ if ((*cras & 7) == 7)
+ thischar += getlong(cras + 1)
+ * ((getlong(cras + 5) + 7) >> 3) ;
+ else
+ thischar += (cras[3] * 256L + cras[4]) *
+ ((cras[1] * 256L + cras[2] + 7) >> 3) ;
+ else
+ thischar += ((long)(cras[2] * ((cras[1] + 7) >> 3))) ;
+ }
+ cd->flags |= THISPAGE ;
+ } else
+ thischar = 0 ;
+ fontmem -= thischar ;
+ if (fontmem <= pagecost) {
+ if (pagecount > 0)
+ return(0) ;
+ }
+ }
+ return(1) ;
+}
+/*
+ * When a font is selected during the prescan, this routine makes sure that
+ * the tfm or pk file is loaded and charges fontmem for the VM overhead in
+ * creating the font. The result is true unless the section must be aborted
+ * in order to keep this font from overflowing VM.
+ */
+Boolean
+preselectfont P1C(fontdesctype *, f)
+{
+ curfnt = f ;
+ if (curfnt->loaded == 0 || curfnt->loaded == 3) {
+ if (!residentfont(curfnt))
+ if (!virtualfont(curfnt))
+ loadfont(curfnt) ;
+ }
+ if (curfnt->psname == 0) {
+ if (curfnt->loaded < 2) /* virtual font costs nothing (yet) */
+ if (curfnt->resfont)
+ fontmem -= PSFONTCOST ;
+ else {
+ fontmem -= FONTCOST + curfnt->maxchars ;
+ if (curfnt->loadeddpi != curfnt->dpi)
+ fontmem -= 48 ; /* for the new font matrix */
+ }
+ curfnt->psname = 1 ;
+ if (fontmem <= pagecost) {
+ if (pagecount > 0)
+ return(0) ;
+ }
+ }
+ return(1) ;
+}
+/*
+ * Now our scanpage routine.
+ */
+short
+scanpage P1H(void)
+{
+ register shalfword cmd ;
+ register chardesctype *cd ;
+ register fontmaptype *cfnt = 0 ;
+ integer fnt ;
+ integer mychar ;
+ register frametype *frp = frames ;
+
+ if (firstboploc == 0)
+ firstboploc = ftell(dvifile) ;
+ pagecost = 0 ;
+#ifdef DEBUG
+ if (dd(D_PAGE))
+#ifdef SHORTINT
+ (void)fprintf(stderr,"Scanning page %ld\n", pagenum) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr,"Scanning page %d\n", pagenum) ;
+#endif /* ~SHORTINT */
+#endif /* DEBUG */
+ curfnt = NULL ;
+ curpos = NULL ;
+
+ bopcolor(0) ; /* IBM: color - put current colorstack to bopstackdepth */
+
+ while (1) {
+ switch (cmd=dvibyte()) {
+case 130: case 131: case 135: case 136: case 139:
+case 247: case 248: case 249: case 250: case 251: case 252: case 253:
+case 254: case 255: /* unimplemented or illegal commands */
+ (void)sprintf(errbuf,
+ "! DVI file contains unexpected command (%d)",cmd) ;
+ error(errbuf) ;
+case 132: case 137: /* eight-byte commands setrule, putrule */
+ (void)dvibyte() ;
+ (void)dvibyte() ;
+ (void)dvibyte() ;
+ (void)dvibyte() ;
+case 146: case 151: case 156: case 160: case 165: case 170:
+ /* four-byte commands right4, w4, x4, down4, y4, z4 */
+ (void)dvibyte() ;
+case 145: case 150: case 155: case 159: case 164: case 169:
+ /* three-byte commands right3, w3, x3, down3, y3, z3 */
+ (void)dvibyte() ;
+case 144: case 149: case 154: case 158: case 163: case 168:
+ /* two-byte commands right2, w2, x2, down2, y2, z2 */
+ (void)dvibyte() ;
+case 143: case 148: case 153: case 157: case 162: case 167:
+ /* one-byte commands right1, w1, x1, down1, y1, z1 */
+ (void)dvibyte() ;
+case 147: case 152: case 161: case 166: /* w0, x0, y0, z0 */
+case 138: case 141: case 142: /* nop, push, pop */
+ break ;
+case 134: case 129: /* set2, put2 */
+ if (noomega) {
+ (void)sprintf(errbuf,
+ "! DVI file contains unexpected Omega command (%d)",cmd) ;
+ error(errbuf) ;
+ }
+ mychar = dvibyte() ; mychar = (mychar << 8) + dvibyte() ;
+ goto dochar ;
+case 133: case 128: cmd = dvibyte() ; /* set1 commands drops through */
+default: /* these are commands 0 (setchar0) thru 127 (setchar 127) */
+ mychar = cmd ;
+dochar:
+/*
+ * We are going to approximate that each string of consecutive characters
+ * requires (length of string) bytes of PostScript VM.
+ */
+ if (curfnt==NULL)
+ error("! Bad DVI file: no font selected") ;
+ if (mychar>=curfnt->maxchars) {
+ (void)sprintf(errbuf,"! invalid char %d from font %s", mychar, curfnt->name) ;
+ error(errbuf) ;
+ }
+ if (curfnt->loaded == 2) { /* scanning a virtual font character */
+ frp->curp = curpos ;
+ frp->curl = curlim ;
+ frp->ff = ffont ;
+ frp->curf = curfnt ;
+ if (++frp == &frames[MAXFRAME] )
+ error("! virtual recursion stack overflow") ;
+ cd = curfnt->chardesc + mychar ;
+ if (cd->packptr == 0)
+ error("! a non-existent virtual character is being used; check vf/tfm files") ;
+ curpos = cd->packptr + 2 ;
+ curlim = curpos + (256*(long)(*cd->packptr)+(*(cd->packptr+1))) ;
+ ffont = curfnt->localfonts ;
+ if (ffont==NULL)
+ curfnt = NULL ;
+ else if (!preselectfont(ffont->desc))
+ goto outofmem ;
+ } else {
+ pagecost++ ;
+ if (!prescanchar(curfnt->chardesc + mychar))
+ goto outofmem ;
+ }
+ break ;
+case 171: case 172: case 173: case 174: case 175: case 176: case 177:
+case 178: case 179: case 180: case 181: case 182: case 183: case 184:
+case 185: case 186: case 187: case 188: case 189: case 190: case 191:
+case 192: case 193: case 194: case 195: case 196: case 197: case 198:
+case 199: case 200: case 201: case 202: case 203: case 204: case 205:
+case 206: case 207: case 208: case 209: case 210: case 211: case 212:
+case 213: case 214: case 215: case 216: case 217: case 218: case 219:
+case 220: case 221: case 222: case 223: case 224: case 225: case 226:
+case 227: case 228: case 229: case 230: case 231: case 232: case 233:
+case 234: case 235: case 236: case 237: case 238: /* font selection commands */
+ if (cmd < 235) fnt = cmd - 171 ; /* fntnum0 thru fntnum63 */
+ else {
+ fnt = dvibyte() ; /* fnt1 */
+ while (cmd-- > 235)
+ fnt = (fnt << 8) + dvibyte() ;
+ }
+ for (cfnt=ffont; cfnt; cfnt = cfnt->next)
+ if (cfnt->fontnum == fnt) goto fontfound ;
+ printf("Font number %d not found\n", fnt) ;
+ error("! no font selected") ;
+fontfound: curfnt = cfnt->desc ;
+ if (!preselectfont(curfnt))
+ goto outofmem ;
+ break ;
+case 239: predospecial((integer)dvibyte(), 1) ; break ; /* xxx1 */
+case 240: predospecial((integer)twobytes(), 1) ; break ; /* xxx2 */
+case 241: predospecial(threebytes(), 1) ; break ; /* xxx3 */
+case 242: predospecial(signedquad(), 1) ; break ; /* xxx4 */
+case 243: case 244: case 245: case 246: fontdef(cmd-242) ; break ; /* fntdef1 */
+case 140: /* eop or end of virtual char */
+ if (curpos) {
+ --frp ;
+ curfnt = frp->curf ;
+ ffont = frp->ff ;
+ curlim = frp->curl ;
+ curpos = frp->curp ;
+ break ;
+ }
+ goto endofpage ; /* eop */
+ }
+ }
+endofpage:
+ if (fontmem > pagecost)
+ return(1) ;
+ if (pagecount > 0) {
+ return(0) ;
+ } /* IBM: color */
+#ifdef SHORTINT
+ (void)fprintf(stderr, "Page %ld may be too complex to print\n", pagenum) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr, "Page %d may be too complex to print\n", pagenum) ;
+#endif /* ~SHORTINT */
+/*
+ * This case should be rare indeed. Even with only 200K of virtual memory,
+ * at 11 bytes per char, you can have 18K characters on a page.
+ */
+ return(2) ;
+outofmem:
+ if (frp != frames) {
+ curpos = frames->curp ;
+ curlim = frames->curl ;
+ ffont = frames->ff ;
+ curfnt = frames->curf ;
+ }
+ return 0 ;
+}
diff --git a/Build/source/texk/dvipsk/search.c b/Build/source/texk/dvipsk/search.c
new file mode 100644
index 00000000000..94529af6693
--- /dev/null
+++ b/Build/source/texk/dvipsk/search.c
@@ -0,0 +1,640 @@
+/*
+ * The search routine takes a directory list, separated by PATHSEP, and
+ * tries to open a file. Null directory components indicate current
+ * directory. In an environment variable, null directory components
+ * indicate substitution of the default path list at that point.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifdef KPATHSEA
+#include <kpathsea/c-ctype.h>
+#include <kpathsea/tex-file.h>
+#include <kpathsea/tex-glyph.h>
+#include <kpathsea/absolute.h>
+#include <kpathsea/c-pathch.h>
+extern char name[];
+#else
+#include <ctype.h>
+#if !defined(WIN32)
+extern int fclose(); /* these added to keep SunOS happy */
+extern int pclose();
+extern char *getenv();
+#endif
+#ifdef OS2
+#include <stdlib.h>
+FILE *fat_fopen();
+#endif
+
+extern char *newstring P1H(char *) ;
+
+#if defined(SYSV) || defined(VMS) || defined(__THINK__) || defined(MSDOS) || defined(OS2) || defined(ATARIST) || defined(WIN32)
+#define MAXPATHLEN (2000)
+#else
+#include <sys/param.h> /* for MAXPATHLEN */
+#endif
+#if !defined(MSDOS) && !defined(OS2) && !defined(WIN32)
+#ifndef VMS
+#ifndef MVSXA
+#ifndef VMCMS /* IBM: VM/CMS */
+#ifndef __THINK__
+#ifndef ATARIST
+#include <pwd.h>
+#endif
+#endif
+#endif
+#endif /* IBM: VM/CMS */
+#endif
+#endif
+#endif /* KPATHSEA */
+/*
+ *
+ * We hope MAXPATHLEN is enough -- only rudimentary checking is done!
+ */
+
+#ifndef SECURE
+extern Boolean secure;
+#endif
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern char *mfmode ;
+extern int actualdpi ;
+int to_close ;
+
+#ifdef KPATHSEA
+#ifndef UNCOMPRESS
+#define UNCOMPRESS "uncompress"
+#endif
+
+#ifndef GUNZIP
+#define GUNZIP "gzip -d"
+#endif
+
+#ifndef BUNZIP2
+#define BUNZIP2 "bzip2 -d"
+#endif
+
+#endif
+
+#ifdef KPATHSEA
+char *realnameoffile ;
+
+FILE *
+search P3C(kpse_file_format_type, format, char *, file, char *, mode)
+{
+ FILE *ret;
+ string found_name;
+
+ /* This change suggested by maj@cl.cam.ac.uk to disallow reading of
+ arbitrary files. Further modified by Y. Oiwa. */
+#ifndef SECURE
+ if (secure) {
+#endif
+ /* an absolute path is denied */
+ if (kpse_absolute_p (file, false)) return NULL;
+
+ if (file[0] == '.' && file[1] == '.' && IS_DIR_SEP(file[2])) {
+ /* a relative path starting with ../ is denied */
+ return NULL;
+ } else {
+ /* a relative path containing /../ is denied */
+ char *p;
+
+ if (file[0] != '\0') {
+ for(p = file + 1; *p && ((p = strstr(p, "..")) != NULL); p += 2) {
+ /* p[2] is valid, because p points to string starting with ".." */
+ /* p[-1] is valid, because p does not point the top of file */
+ if ((p[2] == '\0' || IS_DIR_SEP(p[2])) && IS_DIR_SEP(p[-1])) {
+ return NULL;
+ }
+ }
+ }
+ }
+#ifndef SECURE
+ }
+#endif
+ /* Most file looked for through here must exist -- the exception is
+ VF's. Bitmap fonts go through pksearch. */
+ found_name = kpse_find_file (file, format, format != vfpath &&
+ format != ofmpath);
+ if (found_name) {
+ unsigned len = strlen (found_name);
+#ifndef AMIGA
+ if ((format == figpath || format == headerpath)
+ && ((len > 2 && FILESTRCASEEQ (found_name + len - 2, ".Z"))
+ || (len > 3 && FILESTRCASEEQ (found_name + len - 3, ".gz")))) {
+/* FIXME : use zlib instead of gzip ! */
+ char *cmd = concat3 (GUNZIP, " -c ", found_name);
+ ret = popen (cmd, "r");
+ to_close = USE_PCLOSE ;
+ } else {
+#endif /* not AMIGA */
+ ret = fopen (found_name, mode);
+ to_close = USE_FCLOSE ;
+#ifndef AMIGA
+ }
+#endif /* not AMIGA */
+ if (!ret)
+ FATAL_PERROR (found_name);
+ /* Free result of previous search. */
+ if (realnameoffile)
+ free (realnameoffile);
+ /* Save in `name' and `realnameoffile' because other routines
+ access those globals. Sigh. */
+ realnameoffile = found_name;
+ strcpy(name, realnameoffile);
+ } else
+ ret = NULL;
+
+ return ret;
+} /* end search */
+
+FILE *
+pksearch P6C(char *, path, char *, file, char *, mode,
+ halfword, dpi, char **, name_ret, int *, dpi_ret)
+{
+ FILE *ret;
+ kpse_glyph_file_type font_file;
+ string found_name = kpse_find_pk (file, dpi, &font_file);
+
+ if (found_name)
+ {
+ ret = fopen (found_name, mode);
+ if (!ret)
+ FATAL_PERROR (name);
+
+ /* Free result of previous search. */
+ if (realnameoffile)
+ free (realnameoffile);
+ /* Save in `name' and `realnameoffile' because other routines
+ access those globals. Sigh. */
+ realnameoffile = found_name;
+ strcpy(name, realnameoffile);
+ *name_ret = font_file.name;
+ *dpi_ret = font_file.dpi;
+ }
+ else
+ ret = NULL;
+
+ return ret;
+} /* end search */
+#else /* ! KPATHSEA */
+char realnameoffile[MAXPATHLEN] ;
+
+extern char *figpath, *pictpath, *headerpath ;
+FILE *
+search P3C(char *, path, char *, file, char *, mode)
+{
+ register char *nam ; /* index into fname */
+ register FILE *fd ; /* file desc of file */
+ char fname[MAXPATHLEN] ; /* to store file name */
+ static char *home = 0 ; /* home is where the heart is */
+ int len = strlen(file) ;
+ int tryz = 0 ;
+ if (len>=3 &&
+ ((file[len-2] == '.' && file[len-1] == 'Z') ||
+ (file[len-3] == '.' && file[len-2] == 'g' && file[len-1] == 'z')) &&
+ (path==figpath || path==pictpath || path==headerpath))
+ tryz = file[len-1] ;
+ to_close = USE_FCLOSE ;
+#ifdef MVSXA
+char fname_safe[256];
+register int i, firstext, lastext, lastchar;
+#endif
+#ifdef VMCMS /* IBM: VM/CMS - we don't have paths or dirsep's but we strip off
+ filename if there is a Unix path dirsep */
+ register char *lastdirsep ;
+ lastdirsep = strrchr(file, '/') ;
+ if ( NULL != lastdirsep ) file = lastdirsep + 1 ;
+ if ((fd=fopen(file,mode)) != NULL) {
+ return(fd) ;
+ } else {
+ return(NULL) ;
+ }
+#else
+ if (*file == DIRSEP
+ || NAME_BEGINS_WITH_DEVICE(file)) { /* if full path name */
+ if ((fd=fopen(file,mode)) != NULL) {
+ strcpy(realnameoffile, file) ;
+ if (tryz) {
+ char *cmd = mymalloc(strlen(file) + 20) ;
+ strcpy(cmd, (tryz=='z' ? "gzip -d <" : "compress -d <")) ;
+ strcat(cmd, file) ;
+ fclose(fd) ;
+ fd = popen(cmd, "r") ;
+ to_close = USE_PCLOSE ;
+ free(cmd) ;
+ }
+ return(fd) ;
+ } else
+ return(NULL) ;
+ }
+#endif /* IBM: VM/CMS */
+
+#if defined MSDOS || defined OS2 || defined(ATARIST) || defined(WIN32)
+ if ( isalpha(file[0]) && file[1]==':' ) { /* if full path name */
+ if ((fd=fopen(file,mode)) != NULL) {
+ strcpy(realnameoffile, file) ;
+ return(fd) ;
+ } else
+ return(NULL) ;
+ }
+ if (*file == '/') {/* if full path name with unix DIRSEP less drive code */
+ if ((fd=fopen(file,mode)) != NULL) {
+ strcpy(realnameoffile, file) ;
+ return(fd) ;
+ } else
+ return(NULL) ;
+ }
+#endif
+
+ do {
+ /* copy the current directory into fname */
+ nam = fname;
+ /* copy till PATHSEP */
+ if (*path == '~') {
+ char *p = nam ;
+ path++ ;
+ while (*path && *path != PATHSEP && *path != DIRSEP)
+ *p++ = *path++ ;
+ *p = 0 ;
+ if (*nam == 0) {
+ if (home == 0) {
+ if (0 != (home = getenv("HOME")))
+ home = newstring(home) ;
+ else
+ home = "." ;
+ }
+ strcpy(fname, home) ;
+ } else {
+#if defined MSDOS || defined OS2
+ error("! ~username in path???") ;
+#else
+#ifdef WIN32
+ /* FIXME: at least under NT, it should be possible to
+ retrieve the HOME DIR for a given user */
+ error("! ~username in path???") ;
+#else
+#ifdef VMS
+ error("! ~username in path???") ;
+#else
+#ifdef ATARIST
+ error("! ~username in path???") ;
+#else
+#ifdef VMCMS /* IBM: VM/CMS */
+ error("! ~username in path???") ;
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ error("! ~username in path???") ;
+#else
+#ifdef __THINK__
+ error("! ~username in path???") ;
+#else
+ struct passwd *pw = getpwnam(fname) ;
+ if (pw)
+ strcpy(fname, pw->pw_dir) ;
+ else
+ error("no such user") ;
+#endif
+#endif /* IBM: VM/CMS */
+#endif
+#endif
+#endif
+#endif
+#endif
+ }
+ nam = fname + strlen(fname) ;
+ }
+ while (*path != PATHSEP && *path) *nam++ = *path++;
+ *nam = 0 ;
+#ifndef VMS
+#ifndef __THINK__
+ if (nam == fname) *nam++ = '.'; /* null component is current dir */
+
+ if (*file != '\0') {
+ if ((nam != fname) && *(nam-1) != DIRSEP) /* GNW 1992.07.09 */
+ *nam++ = DIRSEP; /* add separator */
+ (void)strcpy(nam,file); /* tack the file on */
+ }
+ else
+ *nam = '\0' ;
+#else
+ (void)strcpy(nam,file); /* tack the file on */
+#endif
+#else
+ (void)strcpy(nam,file); /* tack the file on */
+#endif
+#ifdef MVSXA
+nam = fname;
+if (strchr(nam,'=') != NULL) {
+ (void) strcpy(fname_safe,fname); /* save fname */
+ firstext = strchr(nam, '=') - nam + 2;
+ lastext = strrchr(nam, '.') - nam + 1;
+ lastchar = strlen(nam) - 1;
+
+ (void) strcpy(fname,"dd:"); /* initialize fname */
+ nam=&fname[3];
+ for (i=lastext; i<=lastchar; i++) *nam++ = fname_safe[i] ;
+ *nam++ = '(' ;
+ for (i=firstext; i<lastext-1; i++) *nam++ = fname_safe[i] ;
+ *nam++ = ')' ;
+ *nam++ = 0 ;
+ }
+ else {
+ if (fname[0] == '/') {
+ fname[0] = '\'';
+ strcat(&fname[strlen(fname)],"\'");
+ }
+ if (fname[0] == '.') fname[0] = ' ';
+ if (fname[1] == '.') fname[1] = ' ';
+ }
+#endif
+
+ /* belated check -- bah! */
+ if ((nam - fname) + strlen(file) + 1 > MAXPATHLEN)
+ error("! overran allocated storage in search()");
+
+#ifdef DEBUG
+ if (dd(D_PATHS))
+ (void)fprintf(stderr,"search: Trying to open %s\n", fname) ;
+#endif
+ if ((fd=fopen(fname,mode)) != NULL) {
+ strcpy(realnameoffile, fname) ;
+ if (tryz) {
+ char *cmd = mymalloc(strlen(file) + 20) ;
+ strcpy(cmd, (tryz=='z' ? "gzip -d <" : "compress -d <")) ;
+ strcat(cmd, file) ;
+ fclose(fd) ;
+ fd = popen(cmd, "r") ;
+ to_close = USE_PCLOSE ;
+ }
+ return(fd);
+ }
+
+ /* skip over PATHSEP and try again */
+ } while (*(path++));
+
+ return(NULL);
+
+} /* end search */
+
+FILE *
+pksearch P6C(char *, path, char *, file, char *, mode,
+ char *, n, halfword, dpi, halfword, vdpi)
+{
+ register char *nam ; /* index into fname */
+ register FILE *fd ; /* file desc of file */
+ char fname[MAXPATHLEN] ; /* to store file name */
+ static char *home = 0 ; /* home is where the heart is */
+ int sub ;
+
+ if (*file == DIRSEP) { /* if full path name */
+ if ((fd=fopen(file,mode)) != NULL)
+ return(fd) ;
+ else
+ return(NULL) ;
+ }
+#if defined MSDOS || defined OS2 || defined(WIN32)
+ if ( isalpha(file[0]) && file[1]==':' ) { /* if full path name */
+ if ((fd=fopen(file,mode)) != NULL)
+ return(fd) ;
+ else
+ return(NULL) ;
+ }
+#endif
+ do {
+ /* copy the current directory into fname */
+ nam = fname;
+ sub = 0 ;
+ /* copy till PATHSEP */
+ if (*path == '~') {
+ char *p = nam ;
+ path++ ;
+ while (*path && *path != PATHSEP && *path != DIRSEP)
+ *p++ = *path++ ;
+ *p = 0 ;
+ if (*nam == 0) {
+ if (home == 0) {
+ if (0 != (home = getenv("HOME")))
+ home = newstring(home) ;
+ else
+ home = "." ;
+ }
+ strcpy(fname, home) ;
+ } else {
+#if defined MSDOS || defined OS2
+ error("! ~username in path???") ;
+#else
+#ifdef WIN32
+ error("! ~username in path???") ;
+#else
+#ifdef VMS
+ error("! ~username in path???") ;
+#else
+#ifdef ATARIST
+ error("! ~username in path???") ;
+#else
+#ifdef VMCMS /* IBM: VM/CMS */
+ error("! ~username in path???") ;
+#else
+#ifdef MVSXA /* IBM: MVS/XA */
+ error("! ~username in path???") ;
+#else
+#ifdef __THINK__
+ error("! ~username in path???") ;
+#else
+ struct passwd *pw = getpwnam(fname) ;
+ if (pw)
+ strcpy(fname, pw->pw_dir) ;
+ else
+ error("no such user") ;
+#endif
+#endif /* IBM: VM/CMS */
+#endif
+#endif
+#endif
+#endif
+#endif
+ }
+ nam = fname + strlen(fname) ;
+ }
+ /* copy till PATHSEP */
+ while (*path != PATHSEP && *path) {
+ if (*path == '%') {
+ sub = 1 ;
+ path++ ;
+ switch(*path) {
+ case 'b': sprintf(nam, "%d", actualdpi) ; break ;
+ case 'd': sprintf(nam, "%d", dpi) ; break ;
+ case 'f': strcpy(nam, n) ; break ;
+ case 'm': if (mfmode == 0)
+ if (actualdpi == 300) mfmode = "imagen" ;
+ else if (actualdpi == 400) mfmode = "nexthi" ;
+ else if (actualdpi == 635) mfmode = "linolo" ;
+ else if (actualdpi == 1270) mfmode = "linohi" ;
+ else if (actualdpi == 2540) mfmode = "linosuper" ;
+ if (mfmode == 0)
+ error("! MF mode not set, but used in pk path") ;
+ strcpy(nam, mfmode) ;
+ break ;
+ case 'p': strcpy(nam, "pk") ; break ;
+ case '%': strcpy(nam, "%") ; break ;
+ default: fprintf(stderr, "Format character: %c\n", *path) ;
+ error("! bad format character in pk path") ;
+ }
+ nam = fname + strlen(fname) ;
+ if (*path)
+ path++ ;
+ } else
+ *nam++ = *path++;
+ }
+#ifndef VMS
+#ifndef __THINK__
+ if (nam == fname) *nam++ = '.'; /* null component is current dir */
+#endif
+#endif /* VMS */
+ if (sub == 0 && *file) {
+#ifndef VMS
+ /* change suggested by MG */
+ if ((nam != fname) && *(nam-1) != DIRSEP) /* GNW 1992.07.09 */
+ *nam++ = DIRSEP ;
+#endif
+ strcpy(nam, file) ;
+ } else
+ *nam = 0 ;
+
+#ifdef MVSXA /* IBM: MVS/XA */
+ if (fname[0] == '/') {
+ fname[0] = '\'';
+ strcat(&fname[strlen(fname)],"\'");
+ }
+ if (fname[0] == '.') fname[0] = ' ';
+ if (fname[1] == '.') fname[1] = ' ';
+#endif /* IBM: MVS/XA */
+ /* belated check -- bah! */
+ if (strlen(fname) + 1 > MAXPATHLEN)
+ error("! overran allocated storage in search()");
+
+#ifdef DEBUG
+ if (dd(D_PATHS))
+ (void)fprintf(stderr,"pksearch: Trying to open %s\n", fname) ;
+#endif
+ if ((fd=fopen(fname,mode)) != NULL)
+ return(fd);
+
+ /* skip over PATHSEP and try again */
+ } while (*(path++));
+
+ return(NULL);
+
+} /* end search */
+#endif /* KPATHSEA */
+
+/* do we report file openings? */
+
+#ifdef DEBUG
+# ifdef fopen
+# undef fopen
+# endif
+# ifdef VMCMS /* IBM: VM/CMS */
+# define fopen cmsfopen
+# endif /* IBM: VM/CMS */
+FILE *my_real_fopen P2C(register char *, n, register char *, t)
+{
+ FILE *tf ;
+ if (dd(D_FILES)) {
+ fprintf(stderr, "<%s(%s)> ", n, t) ;
+ tf = fopen(n, t) ;
+ if (tf == 0)
+ fprintf(stderr, "failed\n") ;
+ else
+ fprintf(stderr, "succeeded\n") ;
+ } else
+ tf = fopen(n, t) ;
+#ifdef OS2
+ if (tf == (FILE *)NULL)
+ tf = fat_fopen(n, t); /* try again with filename truncated to 8.3 */
+#endif
+ return tf ;
+}
+#endif
+
+#ifdef OS2
+/* truncate filename at end of fname to FAT filesystem 8.3 limit */
+/* if truncated, return fopen() with new name */
+FILE *fat_fopen P2C(char *, fname, char *, t)
+{
+ char *np; /* pointer to name within path */
+ char nbuf[13], *ns, *nd;
+ char n[MAXPATHLEN];
+ int ni, ne;
+ FILE *tf;
+ strcpy(n, fname);
+ for (ns=n; *ns; ns++) {
+ if (*ns=='/')
+ *ns=DIRSEP;
+ }
+ np = strrchr(n,DIRSEP);
+ if (np==(char *)NULL)
+ np = n;
+ else
+ np++;
+ /* fail if it contains more than one '.' */
+ ni = 0;
+ for (ns=np; *ns; ns++) {
+ if (*ns=='.')
+ ni++;
+ }
+ if (ni>1)
+ return (FILE *)NULL;
+ /* copy it to nbuf, truncating to 8.3 */
+ ns = np;
+ nd = nbuf;
+ ni = 0;
+ while ((*ns!='.') && (*ns) && (ni<8)) {
+ *nd++ = *ns++;
+ ni++;
+ }
+ while ((*ns!='.') && (*ns)) {
+ ns++;
+ ni++;
+ }
+ ne = 0;
+ if (*ns=='.') {
+ *nd++ = *ns++;
+ while ((*ns!='.') && (*ns) && (ne<3)) {
+ *nd++ = *ns++;
+ ne++;
+ }
+ while (*ns) {
+ ns++;
+ ne++;
+ }
+ }
+ *nd++='\0';
+ if ((ni>8) || (ne>3)) {
+ strcpy(np,nbuf);
+ /* now code copied from my_real_fopen() */
+ if (dd(D_FILES)) {
+ fprintf(stderr, "<%s(%s)> ", n, t) ;
+ tf = fopen(n, t) ;
+ if (tf == 0)
+ fprintf(stderr, "failed\n") ;
+ else
+ fprintf(stderr, "succeeded\n") ;
+ }
+ else
+ tf = fopen(n, t) ;
+ return tf;
+ }
+ return (FILE *)NULL;
+}
+#endif
+
+int close_file P1C(FILE *, f)
+{
+ switch(to_close) {
+case USE_PCLOSE: return pclose(f) ;
+case USE_FCLOSE: return fclose(f) ;
+default: return -1 ;
+ }
+}
diff --git a/Build/source/texk/dvipsk/skippage.c b/Build/source/texk/dvipsk/skippage.c
new file mode 100644
index 00000000000..da48f8d2069
--- /dev/null
+++ b/Build/source/texk/dvipsk/skippage.c
@@ -0,0 +1,89 @@
+/*
+ * Skips over a page, collecting possible font definitions. A very simple
+ * case statement insures we maintain sync with the dvi file by collecting
+ * the necessary parameters; but font definitions must be processed normally.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+
+/*
+ * These are the external routines called.
+ */
+#include "protos.h"
+
+/*
+ * These are the external variables accessed.
+ */
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern integer pagenum ;
+extern char errbuf[] ;
+extern FILE *dvifile ;
+extern Boolean noomega ;
+/*
+ * And now the big routine.
+ */
+void
+skippage P1H(void)
+{
+ register shalfword cmd ;
+ register integer i ;
+
+#ifdef DEBUG
+ if (dd(D_PAGE))
+#ifdef SHORTINT
+ (void)fprintf(stderr,"Skipping page %ld\n", pagenum) ;
+#else /* ~SHORTINT */
+ (void)fprintf(stderr,"Skipping page %d\n", pagenum) ;
+#endif /* ~SHORTINT */
+#endif /* DEBUG */
+/* skipover(40) ; skip rest of bop command? how did this get in here? */
+ bopcolor(0) ;
+ while ((cmd=dvibyte())!=140) {
+ switch (cmd) {
+/* illegal options */
+case 130: case 131: case 135: case 136: case 139:
+case 247: case 248: case 249: case 250: case 251:
+case 252: case 253: case 254: case 255:
+ (void)sprintf(errbuf,
+ "! DVI file contains unexpected command (%d)",cmd) ;
+ error(errbuf) ;
+/* eight byte commands */
+case 132: case 137:
+ cmd = dvibyte() ;
+ cmd = dvibyte() ;
+ cmd = dvibyte() ;
+ cmd = dvibyte() ;
+/* four byte commands */
+case 146: case 151: case 156: case 160: case 165: case 170: case 238:
+ cmd = dvibyte() ;
+/* three byte commands */
+case 145: case 150: case 155: case 159: case 164: case 169: case 237:
+ cmd = dvibyte() ;
+/* two byte commands */
+case 129: case 134:
+ if (noomega) {
+ (void)sprintf(errbuf,
+ "! DVI file contains unexpected Omega command (%d)",cmd) ;
+ error(errbuf) ;
+ }
+case 144: case 149: case 154: case 158: case 163: case 168: case 236:
+ cmd = dvibyte() ;
+/* one byte commands */
+case 128: case 133: case 143: case 148: case 153: case 157: case 162:
+case 167: case 235:
+ cmd = dvibyte() ;
+ break ;
+/* specials */
+case 239: i = dvibyte() ; predospecial(i, 0) ; break ;
+case 240: i = twobytes() ; predospecial(i, 0) ; break ;
+case 241: i = threebytes() ; predospecial(i, 0) ; break ;
+case 242: i = signedquad() ; predospecial(i, 0) ; break ;
+/* font definition */
+case 243: case 244: case 245: case 246:
+ fontdef(cmd - 242) ;
+ break ;
+default: ;
+ }
+ }
+}
diff --git a/Build/source/texk/dvipsk/special.lpro b/Build/source/texk/dvipsk/special.lpro
new file mode 100644
index 00000000000..c580abd11c5
--- /dev/null
+++ b/Build/source/texk/dvipsk/special.lpro
@@ -0,0 +1,336 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% header for the \special command
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The structure of the PostScript produced by dvips for \special is:
+% @beginspecial
+% - any number of @hsize, @hoffset, @hscale, etc., commands
+% @setspecial
+% - the user's file of PostScript commands
+% @endspecial
+
+TeXDict begin
+/SDict 200 dict N
+SDict begin
+
+/@SpecialDefaults
+ { /hs 612 N
+ /vs 792 N
+ /ho 0 N
+ /vo 0 N
+ /hsc 1 N
+ /vsc 1 N
+ /ang 0 N
+ /CLIP 0 N
+ /rwiSeen false N
+ /rhiSeen false N
+ /letter {} N /note {} N /a4 {} N /legal {} N
+ } B
+
+%
+% The following definition sets up the units that hscale/vscale are in.
+% For certain sites this might require change, but it is
+% recommended instead that any macro packages that require
+% hscale/vscale set the units appropriately via
+%
+% \special{! /@scaleunit 1 def }
+%
+% if global, or
+%
+% \special{" /@scaleunit 1 def }
+%
+% before each instance if multiple macro packages with
+% different requirements are being used.
+%
+/@scaleunit 100 N
+% s @hscale - set scale factor
+/@hscale {@scaleunit div /hsc X} B
+/@vscale {@scaleunit div /vsc X} B
+
+% d @hsize - specify a horizontal clipping dimension
+/@hsize {/hs X /CLIP 1 N} B
+/@vsize {/vs X /CLIP 1 N} B
+
+/@clip {/CLIP 2 N} B
+
+% d @hoffset - specify a shift for the figure
+/@hoffset {/ho X} B
+/@voffset {/vo X} B
+
+% a @angle - set rotation angle
+/@angle {/ang X} B
+
+%
+% Here we handle bounding box calculations, if necessary.
+%
+/@rwi { 10 div /rwi X /rwiSeen true N } B % rwi will be real width after scaling
+/@rhi { 10 div /rhi X /rhiSeen true N } B % rhi will be real height after scaling
+/@llx { /llx X } B
+/@lly { /lly X } B
+/@urx { /urx X } B
+/@ury { /ury X } B
+
+/magscale true def
+
+end % of SDict
+
+/@MacSetUp
+ { userdict /md known % if md is defined
+ { userdict /md get type /dicttype eq % and if it is a dictionary
+ {
+ userdict begin % expand it if necessary
+ md length 10 add md maxlength ge
+ {/md md dup length 20 add dict copy def}if
+ end
+ md begin % then redefine some stuff
+ /letter {} N
+ /note {} N
+ /legal {} N
+ /od{txpose
+ 1 0 mtx defaultmatrix dtransform S atan/pa X
+ newpath clippath mark
+ {transform{itransform moveto}}
+ {transform{itransform lineto}}
+ { 6 -2 roll transform
+ 6 -2 roll transform
+ 6 -2 roll transform
+ { itransform 6 2 roll
+ itransform 6 2 roll
+ itransform 6 2 roll
+ curveto
+ }
+ }
+ {{closepath}}
+ pathforall newpath counttomark array astore /gc xdf
+ pop ct 39 0 put
+ 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if
+ }N
+ /txpose{
+ pxs pys scale ppr aload pop
+ por {
+ noflips {
+ pop S neg S TR pop 1 -1 scale
+ }if
+ xflip yflip and {
+ pop S neg S TR 180 rotate 1 -1 scale
+ ppr 3 get ppr 1 get neg sub neg ppr 2 get
+ ppr 0 get neg sub neg TR
+ }if
+ xflip yflip not and {
+ pop S neg S TR pop 180 rotate
+ ppr 3 get ppr 1 get neg sub neg 0 TR
+ }if
+ yflip xflip not and {
+ ppr 1 get neg ppr 0 get neg TR
+ }if
+ }
+ {
+ noflips {
+ TR pop pop 270 rotate 1 -1 scale
+ }if
+ xflip yflip and {
+ TR pop pop 90 rotate 1 -1 scale
+ ppr 3 get ppr 1 get neg sub neg ppr 2 get
+ ppr 0 get neg sub neg TR
+ }if
+ xflip yflip not and {
+ TR pop pop 90 rotate ppr 3 get
+ ppr 1 get neg sub neg 0 TR
+ }if
+ yflip xflip not and {
+ TR pop pop 270 rotate ppr 2 get
+ ppr 0 get neg sub neg 0 S TR
+ }if
+ }ifelse
+ scaleby96 {
+ ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy
+ TR .96 dup scale neg S neg S TR
+ }if
+ }N
+ /cp {pop pop showpage pm restore}N
+ end
+ }if
+ } if
+ } N
+
+%
+% The following procedure brings us back to PostScript size. It takes
+% into account the current global dvi magnification, so graphics
+% scale with the document.
+%
+/normalscale {
+ Resolution 72 div VResolution 72 div neg scale
+ magscale { DVImag dup scale } if
+ 0 setgray
+} N
+%
+% We need the psfig macros.
+%
+% All software, documentation, and related files in this distribution of
+% psfig/tex are Copyright (c) 1987 Trevor J. Darrell
+%
+% Permission is granted for use and non-profit distribution of psfig/tex
+% providing that this notice be clearly maintained, but the right to
+% distribute any portion of psfig/tex for profit or as part of any commercial
+% product is specifically reserved for the author.
+%
+%
+% psfigTeX PostScript Prolog
+% $Header: /usr/local/src/TeX/Dvips-5.0.2/RCS/special.lpro,v 1.1 90/03/10 20:32:57 grunwald Exp $
+%
+/psfts { S 65781.76 div N } N
+
+% x y bb-llx bb-lly bb-urx bb-ury startFig -
+/startTexFig {
+ /psf$SavedState save N
+ userdict maxlength dict begin
+
+ /magscale true def
+ normalscale
+ currentpoint TR %set the current point as the user's origin
+
+ /psf$ury psfts
+ /psf$urx psfts
+ /psf$lly psfts
+ /psf$llx psfts
+ /psf$y psfts
+ /psf$x psfts
+
+ currentpoint /psf$cy X /psf$cx X
+
+ /psf$sx psf$x psf$urx psf$llx sub div N % scaling for x
+ /psf$sy psf$y psf$ury psf$lly sub div N % scaling for y
+
+ psf$sx psf$sy scale % scale by (sx,sy)
+
+ psf$cx psf$sx div psf$llx sub
+ psf$cy psf$sy div psf$ury sub TR
+
+ /showpage {
+ } N
+ /erasepage {
+ } N
+ /setpagedevice {
+ pop } N
+ /copypage {
+ } N
+ /p 3 def % necessary to get around a bug in Adobe Illustrator
+ @MacSetUp
+} N
+
+% llx lly urx ury doclip - (args in figure coordinates)
+/doclip {
+ psf$llx psf$lly psf$urx psf$ury
+ currentpoint 6 2 roll
+ newpath 4 copy
+ 4 2 roll moveto
+ 6 -1 roll S lineto
+ S lineto
+ S lineto
+ closepath clip
+ newpath
+ moveto
+} N
+% - endTexFig -
+/endTexFig { end psf$SavedState restore } N
+
+% this will be invoked as the result of a \special command (for the
+% inclusion of PostScript graphics). The basic idea is to change all
+% scaling and graphics back to defaults, but to shift the origin
+% to the current position on the page.
+
+/@beginspecial % - @beginspecial - -- enter special mode
+ { SDict begin
+ /SpecialSave save N
+ gsave
+ normalscale
+ currentpoint TR %set the current point as the user's origin
+ @SpecialDefaults % setup default offsets, scales, sizes, and angle
+ count /ocount X /dcount countdictstack N
+ } N
+
+/@setspecial % to setup user specified offsets, scales, sizes (for clipping)
+ {
+ CLIP 1 eq
+ { newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+ closepath clip }
+ if
+ ho vo TR
+ hsc vsc scale
+ ang rotate
+ rwiSeen {
+ rwi urx llx sub div
+ rhiSeen { rhi ury lly sub div } { dup } ifelse
+ scale llx neg lly neg TR
+ } {
+ rhiSeen { rhi ury lly sub div dup scale llx neg lly neg TR } if
+ } ifelse
+ CLIP 2 eq
+ { newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto
+ closepath clip }
+ if
+ /showpage {} N
+ /erasepage {} N
+ /setpagedevice { pop } N
+ /copypage {} N
+ newpath
+ } N
+
+/@endspecial % - @endspecial - -- leave special mode
+ { count ocount sub {pop} repeat
+ countdictstack dcount sub {end} repeat
+ grestore SpecialSave restore
+ end
+ } N
+/@defspecial
+ {
+ SDict begin
+ } N
+/@fedspecial
+ {
+ end
+ } B
+
+%%% macros for tpic
+/li % x y li - -- draw line to
+ { lineto
+ } B
+
+/rl % dx dy rl - -- draw relative line
+ { rlineto
+ } B
+
+/rc % x0 y0 x1 y1 y2 y2 rc -- draw bezier curve
+ { rcurveto
+ } B
+
+/np % np - -- start a new path and save currentpoint
+ { /SaveX currentpoint /SaveY X N % remember current point
+ 1 setlinecap
+ newpath
+ } N
+
+/st % st - -- draw the last path and restore currentpoint
+ { stroke
+ SaveX SaveY moveto % restore the current point
+ } N
+
+/fil % fil -- fill the last path and restore currentpoint
+ { fill
+ SaveX SaveY moveto % restore the current point
+ } N
+
+/ellipse % xc yc xrad yrad startAngle endAngle ellipse
+ {
+ /endangle X
+ /startangle X
+ /yrad X
+ /xrad X
+
+ /savematrix matrix currentmatrix N
+
+ TR xrad yrad scale
+ 0 0 1 startangle endangle arc
+ savematrix setmatrix
+ } N
+%%% end of macros for tpic
+end % revert to previous dictionary
diff --git a/Build/source/texk/dvipsk/squeeze.c b/Build/source/texk/dvipsk/squeeze.c
new file mode 100644
index 00000000000..7395f604eba
--- /dev/null
+++ b/Build/source/texk/dvipsk/squeeze.c
@@ -0,0 +1,159 @@
+/*
+ * This software is Copyright 1988 by Radical Eye Software.
+ */
+/*
+ * This routine squeezes a PostScript file down to its
+ * minimum. We parse and then output it.
+ */
+
+#ifdef KPATHSEA
+#include <kpathsea/config.h>
+#include <kpathsea/c-fopen.h>
+#include <c-auto.h>
+#else
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "dvips.h"
+#endif
+#ifdef fopen
+#undef fopen
+#endif
+
+#define LINELENGTH (72)
+#define BUFLENGTH (1000)
+#ifdef putchar
+#undef putchar
+#endif
+#define putchar(a) (void)putc(a, out) ;
+FILE *in, *out ;
+static int linepos = 0 ;
+static int lastspecial = 1 ;
+/*
+ * This next routine writes out a `special' character. In this case,
+ * we simply put it out, since any special character terminates the
+ * preceding token.
+ */
+void specialout P1C(char, c)
+{
+ if (linepos + 1 > LINELENGTH) {
+ putchar('\n') ;
+ linepos = 0 ;
+ }
+ putchar(c) ;
+ linepos++ ;
+ lastspecial = 1 ;
+}
+void strout P1C(char *, s)
+{
+ if (linepos + strlen(s) > LINELENGTH) {
+ putchar('\n') ;
+ linepos = 0 ;
+ }
+ linepos += strlen(s) ;
+ while (*s != 0)
+ putchar(*s++) ;
+ lastspecial = 1 ;
+}
+void cmdout P1C(char *, s)
+{
+ int l ;
+
+ l = strlen(s) ;
+ if (linepos + l + 1 > LINELENGTH) {
+ putchar('\n') ;
+ linepos = 0 ;
+ lastspecial = 1 ;
+ }
+ if (! lastspecial && *s != '/') {
+ putchar(' ') ;
+ linepos++ ;
+ }
+ while (*s != 0) {
+ putchar(*s++) ;
+ }
+ linepos += l ;
+ lastspecial = 0 ;
+}
+char buf[BUFLENGTH] ;
+int main P2C(int, argc, char **, argv)
+{
+ int c ;
+ char *b ;
+ char seeking ;
+
+ if (argc > 3 || (in=(argc < 2 ? stdin : fopen(argv[1], "r")))==NULL ||
+ (out=(argc < 3 ? stdout : fopen(argv[2], "w")))==NULL) {
+ (void)fprintf(stderr, "Usage: squeeze [infile [outfile]]\n") ;
+ exit(1) ;
+ }
+ /* Binary output is safer (for those systems which care to know the
+ difference) since PostScript can include non-printable characters. */
+ if (O_BINARY && !isatty(fileno(in)))
+ SET_BINARY(fileno(in)) ;
+ if (O_BINARY && !isatty(fileno(out)))
+ SET_BINARY(fileno(out)) ;
+
+ (void)fprintf(out, "%%!\n") ;
+ while (1) {
+ c = getc(in) ;
+ if (c==EOF)
+ break ;
+ if (c=='%') {
+ while ((c=getc(in))!='\n') ;
+ }
+ if (c <= ' ')
+ continue ;
+ switch (c) {
+case '{' :
+case '}' :
+case '[' :
+case ']' :
+ specialout(c) ;
+ break ;
+case '<' :
+case '(' :
+ if (c=='(')
+ seeking = ')' ;
+ else
+ seeking = '>' ;
+ b = buf ;
+ *b++ = c ;
+ do {
+ c = getc(in) ;
+ if (b > buf + BUFLENGTH-2) {
+ (void)fprintf(stderr, "Overran buffer seeking %c", seeking) ;
+ exit(1) ;
+ }
+ *b++ = c ;
+ if (c=='\\')
+ *b++ = getc(in) ;
+ } while (c != seeking) ;
+ *b++ = 0 ;
+ strout(buf) ;
+ break ;
+default:
+ b = buf ;
+ while ((c>='A'&&c<='Z')||(c>='a'&&c<='z')||
+ (c>='0'&&c<='9')||(c=='/')||(c=='@')||
+ (c=='!')||(c=='"')||(c=='&')||(c=='*')||(c==':')||
+ (c==',')||(c==';')||(c=='?')||(c=='^')||(c=='~')||
+ (c=='-')||(c=='.')||(c=='#')||(c=='|')||(c=='_')||
+ (c=='=')||(c=='$')||(c=='+')) {
+ *b++ = c ;
+ c = getc(in) ;
+ }
+ if (b == buf) {
+ (void)fprintf(stderr, "Oops! Missed a case: %c.\n", c) ;
+ exit(1) ;
+ }
+ *b++ = 0 ;
+ (void)ungetc(c, in) ;
+ cmdout(buf) ;
+ }
+ }
+ if (linepos != 0)
+ putchar('\n') ;
+ exit(0) ;
+ /*NOTREACHED*/
+}
diff --git a/Build/source/texk/dvipsk/stamp-auto.in b/Build/source/texk/dvipsk/stamp-auto.in
new file mode 100644
index 00000000000..e6ce6adb9f4
--- /dev/null
+++ b/Build/source/texk/dvipsk/stamp-auto.in
@@ -0,0 +1 @@
+Mo Aug 22 08:28:45 CEST 2005
diff --git a/Build/source/texk/dvipsk/t1part.c b/Build/source/texk/dvipsk/t1part.c
new file mode 100644
index 00000000000..faffe540349
--- /dev/null
+++ b/Build/source/texk/dvipsk/t1part.c
@@ -0,0 +1,2715 @@
+/*
+ * T1part.c version 1.59 beta Copyright (C)1994, 1996
+ * by Sergey Lesenko
+ * lesenko@mx.ihep.su
+ *
+ * It is distributed with no warranty of any kind.
+ * You may modify and use this program. It can be included
+ * in any distribution, commercial or otherwise, so long as
+ * copyright notice be preserved on all copies.
+ */
+#include "dvips.h"
+#include "t1part.h"
+#ifndef SEEK_SET
+#define SEEK_SET (0)
+#endif
+
+#ifdef BORLANDC
+void huge *UniGetMem(size)
+ub4 size ;
+{
+ void huge *tmp;
+ if ((tmp =(void huge*) farcalloc(1L, size)) == NULL)
+ {
+ fprintf(stderr,"Error allocating far memory\n");
+ exit(1);
+ }
+ return tmp;
+}
+#else
+#define UniGetMem getmem
+#endif
+
+#ifdef WIN32
+/* CHAR is typedef'd by <windows.h> -- popineau@esemetz.ese-metz.fr. */
+#define CHAR CHARACTER
+#endif
+
+typedef struct Char
+{
+ unsigned char *name;
+ int length;
+ int num;
+ int choose;
+ struct Char *NextChar;
+}
+CHAR;
+
+typedef struct String
+{
+ unsigned char *name;
+ int num;
+ struct String *NextStr;
+}
+STRING;
+
+static STRING *FirstStr;
+static STRING *RevStr;
+
+static CHAR *FirstChar;
+static CHAR *FirstCharA;
+CHAR *FirstCharB;
+static CHAR *FirstCharW;
+
+int CharCount;
+int GridCount;
+int ind_ref;
+
+int LoadVector P2H(int, CHAR *) ;
+int Afm P1H(void) ;
+
+typedef struct
+{
+ int num[4];
+ int select;
+}
+def_ref;
+
+def_ref refer[10];
+
+#ifndef min
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+#ifndef max
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#endif
+
+
+#define PFA 1
+#define PFB 2
+
+
+#define NOTHING 0
+#define FLG_ASCII 1
+#define FLG_BINARY 2
+#define FLG_EOF 3
+#define FLG_ZERO_LINE 4
+
+#define FLG_OUT_STR (-1)
+#define CHAR_NOT_DEF (-1)
+#define SEAC_NOT_END (-2)
+
+#define FLG_LOAD_BASE (1)
+
+#define STANDARD_ENC (1)
+#define SPECIAL_ENC (2)
+#define AFM_ENC (4)
+
+
+#define FLG_REENCODE (4)
+
+
+#define BYTES_PER_LINE 32
+
+#ifndef KPATHSEA_TYPES_H
+#define TRUE 1
+#define FALSE 0
+#endif /* not KPATHSEA_TYPES_H */
+
+#define LENIV 0
+#define SUBRS 1
+#define CHARSTRINGS 2
+
+#define ERR_FIRST_NUM (-1)
+#define ERR_SECOND_NUM (-2)
+#define ERR_FIRST_TOK (-3)
+#define ERR_SECOND_TOK (-4)
+#define ERR_STACK (-5)
+#define ERR_NUM_CHAR (-6)
+#define ERR_NAME_CHAR (-7)
+
+#define SUBR_STR 1
+#define CHAR_STR -1
+#define CHAR_SEAC -2
+#define SKIP_ON_DUP 3
+
+#define C1 52845
+#define C2 22719
+#define EDR 55665
+#define EER 55665
+#define CDR 4330
+
+#define MAX_ESCAPE 33
+
+#define HSTEM 1
+#define VSTEM 3
+#define VMOVETO 4
+#define CHARS_RLINETO 5
+#define HLINETO 6
+#define VLINETO 7
+#define RRCURVETO 8
+#define CHARS_CLOSEPATH 9
+#define CALLSUBR 10
+#define RETURN 11
+#define ESCAPE 12
+#define HSBW 13
+#define ENDCHAR 14
+#define CHARS_RMOVETO 21
+#define HMOVETO 22
+#define VHCURVETO 30
+#define HVCURVETO 31
+
+#define DOTSECTION 0
+#define VSTEM3 1
+#define HSTEM3 2
+#define SEAC 6
+#define SBW 7
+#define CHARS_DIV 12
+#define CALLOTHERSUBR 16
+#define POP 17
+#define SETCURRENTPOINT 33
+
+typetemp _HUGE *temp;
+typetemp _HUGE *begin_of_scan;
+typetemp _HUGE *end_of_scan;
+unsigned char *line;
+unsigned char *tmpline;
+unsigned char token[64];
+unsigned char notdef[]="/.notdef";
+unsigned char grid[256];
+unsigned char tmpgrid[256];
+unsigned char psfontfile[500]; /* really should dynamically allocate */
+unsigned char psvectfile[500];
+unsigned char basevect[]="ad.enc";
+unsigned char version[] = "v1.59 beta (c)1994, 1996";
+unsigned char tmp_token[64];
+/* static int j = 0; */
+static int stack[128];
+
+ub1 buf[BUFSIZ];
+
+int loadbase = 0;
+static int encode;
+static int reencode;
+
+int find_encod;
+int lastpart=0;
+int keep_flg=0;
+int keep_num=0;
+
+int number;
+int offset;
+long value;
+int lenIV = 4;
+
+static int grow=0;
+static int level;
+static int flg_seac=0;
+
+typedef struct
+{
+ char *command;
+ int code;
+}
+tablecommand;
+
+tablecommand TableCommand[] =
+{
+ {"callsubr", CALLSUBR}, {"callothersubr", CALLOTHERSUBR},
+ {"pop", POP }, {"seac", SEAC}, {""}
+};
+
+typedef struct
+{
+ char *extension;
+ int num;
+}
+typefonts;
+
+
+typefonts TypeFonts[] =
+{
+ {".pfa", PFA}, {".pfb", PFB},
+ {".PFA", PFA}, {".PFB", PFB}, {""}
+};
+
+static char Dup[]="dup";
+
+typedef struct
+{
+ typetemp _HUGE *begin;
+ int length;
+ int type;
+ int offset;
+ int oldnum;
+ int newnum;
+}
+def_key;
+
+def_key keyword[6];
+
+int FirstKey, current;
+
+int subrs, char_str;
+
+
+typedef struct
+{
+ char *name;
+ int num;
+}
+type_key;
+
+
+type_key Key[] =
+{
+ {"/LenIV", LENIV}, {"/Subrs", SUBRS}, {"/CharStrings", CHARSTRINGS}, {""}
+};
+
+
+struct def_label
+{
+ typetemp _HUGE *begin;
+ unsigned char skip;
+ int length;
+ short select;
+ int num;
+};
+
+struct def_label label[NUM_LABEL];
+
+
+
+int DefTypeFont
+P1C(unsigned char *,name)
+{
+ int i;
+
+ for(i=0;*TypeFonts[i].extension;i++)
+ {
+ if(strstr((char *)name,TypeFonts[i].extension)!=0)
+ return(TypeFonts[i].num);
+ }
+ return -1;
+}
+
+int GetZeroLine
+P1C(unsigned char *, str)
+{
+ int token_type=0;
+ if(*str!='0')
+ {
+ return (token_type=0);
+ }
+ while(*str=='0')
+ {
+ str++;
+ }
+
+ if(*str=='\n' || *str=='\r')
+ token_type= -1;
+ else
+ token_type=0;
+ return(token_type);
+}
+
+/* We get token type and its content for ASCII code */
+
+int GetWord
+P1C(unsigned char *, mem)
+{
+ int token_type=0;
+ register unsigned char *tmp;
+ tmp=mem;
+ *tmp= *line;
+ while((*line!='\0')&&(*line!='%'))
+ {
+ if(*line=='-')
+ {
+ *tmp++= *line++;
+ }
+
+ if(isdigit(*line))
+ {
+ while(isdigit(*line))
+ {
+ *tmp++= *line++;
+ }
+ *tmp = '\0';
+ return 5;
+ }
+
+ if(*line=='/')
+ {
+ *tmp++= *line++; token_type=1;
+ }
+ if(*line=='.')
+ {
+ *tmp++= *line++;
+
+ if(token_type==1)
+ {
+ if(*line==' ')
+ {
+ *tmp = '\0';
+ return(token_type=token_type+2);
+ }
+ }
+ }
+ if(isalpha(*line))
+ {
+ *tmp++ = *line++ ;
+ while(!isspace(*line) && *line != '/')
+ *tmp++= *line++;
+ *tmp = '\0';
+ return(token_type=token_type+2);
+ }
+
+ token_type=0;
+ tmp=mem;
+ line++;
+ }
+ return(token_type= -1);
+}
+
+/* We get token type and its content for BINARY code */
+
+int GetToken P1H(void)
+{
+ register unsigned char *tmp;
+ int token_type=0;
+
+ tmp=token;
+
+ *tmp= *temp;
+ while(temp<end_of_scan)
+ {
+ if(*temp=='/')
+ {
+ *tmp++= *temp++; token_type=1;
+ }
+
+ if(*temp=='.')
+ {
+ *tmp++= *temp++;
+ token_type++;
+ }
+
+ if(isalpha(*temp))
+ {
+ while(isalnum(*temp) || *temp == '.')
+ *tmp++= *temp++;
+
+ *tmp = '\0';
+
+ return(token_type=token_type+2);
+ }
+ token_type=0;
+ tmp=token;
+ temp++;
+ }
+ return(token_type= -1);
+}
+
+int GetNum P1H(void)
+{
+ unsigned char *tmp;
+ tmp=token;
+ *tmp= *temp;
+
+ while(temp<end_of_scan)
+ {
+ if(isdigit(*temp))
+ {
+ while(isdigit(*temp))
+ *tmp++= *temp++;
+ *tmp = '\0';
+ return(atoi((char *)token));
+ }
+ temp++;
+ }
+
+ return -1;
+}
+
+/* We pass token without definition its type, it's for speed */
+
+int PassToken P1H(void)
+{
+ while(temp < end_of_scan)
+ {
+ if(!isspace(*temp))
+ {
+ while(!isspace(*temp))
+ temp++;
+ return 1;
+ }
+ temp++;
+ }
+ return -1;
+}
+
+/* */
+/* Simple pass off without charstring decrypting */
+/* */
+
+int PassString
+P1C(unsigned char, flg)
+{
+ int len_str;
+
+ len_str=GetNum();
+ if(len_str<0)
+ {
+ return ERR_SECOND_NUM;
+ }
+
+ if(PassToken()<0)
+ return ERR_FIRST_TOK;
+
+
+ if(flg==1)
+ {
+ label[number].length = len_str;
+ label[number].skip = temp - label[number].begin;
+ }
+
+ temp= temp+1+len_str;
+
+ if(PassToken()<0)
+ return ERR_SECOND_TOK;
+ return 1;
+}
+
+void *getmem
+P1C(unsigned, size)
+{
+ void *tmp;
+ if ((tmp = calloc(1, size)) == NULL)
+ {
+ fprintf(stderr,"Error allocating memory\n");
+ exit(1);
+ }
+ return tmp;
+}
+
+CHAR *AddChar P3C(CHAR *, TmpChar, unsigned char *, CharName, int, num)
+{
+ int length;
+
+ CHAR *ThisChar = (CHAR*) getmem(sizeof(CHAR));
+ length = strlen((char *) CharName);
+ ThisChar->name = (unsigned char *) getmem(length+1);
+ strcpy((char *) ThisChar->name, (char *) CharName);
+ ThisChar->length= length;
+ ThisChar->num=num;
+ ThisChar->NextChar = TmpChar;
+ TmpChar = ThisChar;
+ return TmpChar;
+}
+
+
+void AddStr P2C(unsigned char *, name, int, num)
+{
+ int length;
+
+ STRING *ThisStr = (STRING *) getmem(sizeof(STRING));
+ length = strlen((char *) name);
+ ThisStr->name = (unsigned char *) getmem(length+1);
+ strcpy((char *) ThisStr->name, (char *) name);
+ ThisStr->num=num;
+
+ ThisStr->NextStr = FirstStr;
+ FirstStr = ThisStr;
+}
+
+
+/* We prepare own encoding vector for output */
+
+void RevChar P1C(CHAR *, TmpChar)
+{
+ int i;
+ CHAR *ThisChar = TmpChar;
+
+ while (ThisChar != NULL)
+ {
+ for(i=keyword[char_str].offset-1; i < number; i++)
+ {
+ if(ThisChar->num == label[i].num)
+ {
+ if (label[i].select==FLG_BINARY)
+ {
+ CHAR *Rev_Char = (CHAR *) getmem(sizeof(CHAR));
+ Rev_Char->name = ThisChar->name;
+ Rev_Char->num = ThisChar->num;
+
+ Rev_Char->NextChar = FirstCharW;
+ FirstCharW = Rev_Char;
+ break;
+ }
+ }
+ }
+ ThisChar = ThisChar->NextChar;
+ }
+}
+
+/* And here we produce own resulting encoding vector for partial font */
+
+void OutChar
+P2C(CHAR *, TmpChar, FILE *, fout)
+{
+
+ CHAR *ThisChar = TmpChar;
+
+ while (ThisChar != NULL)
+ {
+ CHAR *tm = ThisChar;
+ if (ThisChar->num >= 0)
+#ifdef SHIFTLOWCHARS
+ fprintf(fout, "dup %d %s put\n",T1Char(ThisChar->num),ThisChar->name);
+#else
+ fprintf(fout, "dup %d %s put\n",ThisChar->num,ThisChar->name);
+#endif
+ ThisChar = ThisChar->NextChar;
+ free(tm);
+ }
+
+ FirstCharW = NULL;
+}
+
+
+
+
+/* We prepare strings list for output */
+
+void Reeverse P1C(STRING *, TmpStr)
+{
+
+ int tmp;
+
+ if(encode==AFM_ENC)
+ tmp = -2;
+ else
+ tmp=0;
+
+
+ while (TmpStr != NULL)
+ {
+
+ if(TmpStr->num < tmp)
+ {
+ STRING *ThisStr = (STRING *) getmem(sizeof(STRING));
+ ThisStr->name = TmpStr->name;
+
+ ThisStr->NextStr = RevStr;
+ RevStr = ThisStr;
+ }
+ TmpStr = TmpStr->NextStr;
+ }
+}
+
+
+/* And here we post strings to out */
+
+void OutStr
+P2C(STRING *, TmpStr, FILE *, fout)
+{
+ STRING *ThisStr = TmpStr;
+ if(encode==AFM_ENC)
+ fprintf(fout, "readonly def\n");
+ while (ThisStr != NULL)
+ {
+ STRING *tm = ThisStr;
+ fprintf(fout, "%s",ThisStr->name);
+ ThisStr = ThisStr->NextStr;
+ free(tm);
+ }
+ RevStr = NULL;
+}
+
+
+
+
+
+
+void PrintChar P1C(CHAR *, TmpChar)
+{
+ CHAR *ThisChar = TmpChar;
+ while (ThisChar != NULL)
+ {
+ if(ThisChar->choose==1)
+ {
+ fprintf(stderr, " Debug: Char %d '%s'\n",
+ ThisChar->num,ThisChar->name);
+ }
+ ThisChar = ThisChar->NextChar;
+ }
+
+}
+
+
+int ClearB P1H(void)
+{
+ CHAR *ThisChar = FirstCharB;
+ while (ThisChar != NULL)
+ {
+ ThisChar->choose=0;
+ ThisChar = ThisChar->NextChar;
+ }
+ return 1;
+}
+
+/* We mark chars in encoding vector thanks same names from
+reencoding vector */
+
+int ChooseChar
+P2C(unsigned char *, name, CHAR *, TmpChar)
+{
+ int length;
+ CHAR *ThisChar = TmpChar;
+ length=strlen((char *) name);
+ while (ThisChar != NULL)
+ {
+ CHAR *NextChar = ThisChar->NextChar;
+ if(ThisChar->length==length)
+ {
+ if (strcmp((char *) name, (char *) ThisChar->name) == 0)
+ {
+ ThisChar->choose=1;
+ return 1;
+ }
+ }
+/*
+ * If we couldn't find it, NextChar is NULL here. We fake up an entry
+ * (assuming it really does exist in the font). Fix is from Melissa
+ * O'Neill; bugs in application of fix due to me.
+ */
+ if (NextChar == 0) {
+ NextChar = (CHAR *) getmem(sizeof(CHAR)) ;
+ NextChar->name = (unsigned char *) getmem(length + 1) ;
+ strcpy((char *) NextChar->name, (char *) name) ;
+ NextChar->length = length ;
+ NextChar->num = -1 ;
+ NextChar->NextChar = 0 ;
+ NextChar->choose = 1 ;
+ ThisChar->NextChar = NextChar ;
+ }
+ ThisChar = NextChar;
+ }
+/*
+ * Can't ever get here.
+ */
+ return -1;
+}
+
+/* We find index in label array for char, wich is required
+for compose char, if it uses SEAC command */
+
+int FindSeac
+P1C(int, num)
+{
+ int i;
+
+ for(i=keyword[char_str].offset-1; i < number; i++)
+ {
+ if(label[i].num==num)
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+
+
+void ClearCW P1H(CHAR *);
+
+int FindCharW P2C(unsigned char *, name, int, length)
+{
+ CHAR *ThisChar = FirstCharW;
+
+ int find = 0;
+ int keep_char = 0;
+ int tmp = 0;
+ int tmp_num = 0;
+
+ int ddd = 0;
+
+#ifdef DEBUG
+ if(dd(D_VIEW_VECTOR))
+ {
+ ddd = 1;
+ }
+#endif
+
+ while (ThisChar != NULL)
+ {
+ /* since ClearCW may free ThisChar, follow the pointer now. */
+ CHAR *NextChar = ThisChar->NextChar;
+
+ if(ThisChar->length==length)
+ {
+ if (strcmp((char *) name, (char *) ThisChar->name) == 0)
+ {
+ if(ThisChar->choose==1)
+ {
+ if(find !=2)
+ {
+ find = 2;
+ tmp=FLG_BINARY;
+ label[number].num=ThisChar->num;
+ }
+ }
+ else
+ {
+ keep_char = 0;
+ if(find != 2)
+ {
+ find = 1;
+ tmp_num = ThisChar->num;
+ }
+ }
+
+
+ if(keep_char == 0)
+ {
+ ClearCW(ThisChar);
+ }
+
+ if((find == 2)&&(ddd == 1))
+ keep_char = 1;
+ }
+ }
+ ThisChar = NextChar;
+ }
+
+ if(find == 1)
+ {
+ tmp=NOTHING;
+ label[number].num=tmp_num;
+ }
+ return tmp;
+}
+
+
+void ClearCW
+P1C(CHAR *, ThisChar)
+{
+
+ if (ThisChar == FirstCharW)
+ FirstCharW = ThisChar->NextChar;
+ else
+ {
+ CHAR *tm = FirstCharW;
+ while (tm != NULL)
+ {
+ if (ThisChar == tm->NextChar)
+ {
+ tm->NextChar = ThisChar->NextChar;
+ break;
+ }
+ tm = tm->NextChar;
+ }
+ }
+ free(ThisChar);
+}
+
+
+/* We build temporary 'work' encoding vector only for searching
+needed chars */
+
+int WorkVect
+P1C(CHAR *, TmpChar)
+{
+ while (TmpChar != NULL) {
+ {
+ CHAR *ThisChar = (CHAR *) getmem(sizeof(CHAR));
+ ThisChar->name = TmpChar->name;
+ ThisChar->length = TmpChar->length;
+ ThisChar->num = TmpChar->num;
+ ThisChar->choose = TmpChar->choose;
+
+ ThisChar->NextChar = FirstCharW;
+ FirstCharW = ThisChar;
+ }
+ TmpChar = TmpChar->NextChar;
+ }
+ return 0;
+}
+
+
+void UnDefineCharsW P1H(void)
+{
+ CHAR *ThisChar = FirstCharW;
+ while (ThisChar != NULL)
+ {
+ CHAR *tm = ThisChar;
+ ThisChar = ThisChar->NextChar;
+ free(tm);
+ }
+ FirstCharW = NULL;
+ CharCount = 0;
+}
+
+CHAR * UnDefineChars P1C(CHAR *, TmpChar)
+{
+ CHAR *ThisChar = TmpChar;
+ while (ThisChar != NULL)
+ {
+ CHAR *tm = ThisChar;
+ free(ThisChar->name);
+ ThisChar = ThisChar->NextChar;
+ free(tm);
+ }
+ TmpChar = NULL;
+ CharCount = 0;
+ return TmpChar;
+}
+
+
+
+void UnDefineStr P1H(void)
+{
+ STRING *ThisStr = FirstStr;
+ while (ThisStr != NULL)
+ {
+ STRING *tm = ThisStr;
+ free(ThisStr->name);
+ ThisStr = ThisStr->NextStr;
+ free(tm);
+ }
+ FirstStr = NULL;
+}
+
+
+
+/* */
+/* We mark subroutines without charstring decrypting */
+/* */
+
+void ScanSubrs P1C(int, i)
+{
+ int err_num;
+ int word_type = 0;
+ int len_dup;
+ int num_err=0;
+ int test=0;
+
+ len_dup = strlen(Dup);
+
+ for( ; number < keyword[i].oldnum + keyword[i].offset;)
+ {
+ if((word_type=GetToken())>0)
+ {
+ if(word_type==2)
+ {
+ if(!strcmp((char *) token,Dup))
+ {
+ if(test==0)
+ test=1;
+ label[number].begin = temp-len_dup;
+
+ err_num=GetNum();
+ if(err_num<0)
+ ;
+ else
+ {
+ if(err_num<4)
+ {
+ label[number].select=FLG_BINARY;
+ keyword[i].newnum++;
+
+ }
+ }
+
+ label[number].num=err_num;
+
+ num_err=PassString(1);
+
+ if(num_err<0)
+ {
+ ErrorOfScan(num_err);
+ fprintf(stderr,"in %d Subr string", number - 1);
+ exit(1);
+ }
+ if(test>1)
+ PassToken();
+
+ number++;
+ }
+ else
+ {
+ if(test>=1)
+ test++;
+ }
+ }
+ }
+ else
+ {
+ ErrorOfScan(0);
+ fprintf(stderr,
+ "Token 'def' not found in %d Subr string ", number - 1);
+ exit(1);
+ }
+ }
+}
+
+void ViewReturnCall P5C(int, num_err, int, top, int *,
+ pstack, int, j, int, depth)
+{
+ int k,m;
+
+#ifdef DEBUG
+ if((dd(D_CALL_SUBR))&&(num_err>0))
+ {
+ if(grow==1)
+ {
+ grow=0;
+ fprintf(stderr, "\n Top: ");
+ }
+ else
+ fprintf(stderr, " Back: ");
+ }
+
+#endif
+
+ if(num_err<0)
+ {
+ if(grow==1)
+ {
+ grow=0;
+ fprintf(stderr, "\n ERROR: ");
+ ErrorOfScan(num_err);
+ }
+ else
+ fprintf(stderr, " Back: ");
+ }
+
+ fprintf(stderr, " %d Subr \n", top);
+
+ fprintf(stderr," %dth level> STACK: ", level);
+
+ for(m=0; m < j; m++, pstack++)
+ {
+ if(depth>(j-(m+1)))
+ {
+ for(k=0;
+ TableCommand[k].command;
+ k++)
+ {
+ if(TableCommand[k].code==*pstack)
+ {
+ fprintf(stderr," %s",
+ TableCommand[k].command);
+ k=0;
+ break;
+ }
+ }
+ if(k!=0)
+ fprintf(stderr," (%d)", *pstack);
+ }
+ else
+ fprintf(stderr, " %d", *pstack);
+ }
+ fprintf(stderr, " \n");
+}
+
+/* */
+/* We decrypt charstring with recursive descent */
+/* */
+
+int DeCodeStr
+P2C(int, num, int, numseac)
+{
+ unsigned int loccr;
+ unsigned char byte;
+ static int j ;
+ int i;
+ unsigned char jj,k;
+ int tmpnum;
+ int depth = 0;
+ int num_err = 0;
+ int len_str;
+ typetemp _HUGE *loc;
+ typetemp _HUGE *end_str;
+ int pstack[64];
+ int last_subr;
+
+ if(num > CHAR_STR)
+ {
+ last_subr=keyword[subrs].offset+keyword[subrs].oldnum;
+
+ for(tmpnum=keyword[subrs].offset; tmpnum<last_subr; tmpnum++)
+ {
+ if(label[tmpnum].num==num)
+ break;
+ }
+
+ if(tmpnum==last_subr)
+ {
+ fprintf(stderr, " Error: %d Subr not found \n", num);
+ exit(1);
+ }
+ if(label[tmpnum].select==FLG_BINARY)
+ {
+ if(j==0)
+ return 1;
+ }
+ else
+ {
+ label[tmpnum].select=FLG_BINARY;
+ if(num+1 > keyword[subrs].newnum ) /* max num of subr */
+ keyword[subrs].newnum = num+1;
+ }
+ loc = label[tmpnum].begin + label[tmpnum].skip;
+ len_str=label[tmpnum].length;
+ }
+ else
+ {
+ j=0;
+
+ if(num == CHAR_SEAC)
+ {
+ if(label[numseac].select!=FLG_BINARY)
+ {
+ label[numseac].select=FLG_BINARY;
+ keyword[char_str].newnum++;
+ temp = label[numseac].begin;
+ }
+ else return 1;
+ }
+ len_str=GetNum();
+
+ if(len_str < 0)
+ {
+ return ERR_SECOND_NUM;
+ }
+ num_err = PassToken();
+ if(num_err < 0)
+ {
+ return ERR_FIRST_TOK;
+ }
+ loc=temp;
+ }
+ loc++;
+
+ end_str=loc+len_str;
+
+ loccr = CDR;
+
+ for (i = 0; i < lenIV; i++,loc++)
+ {
+ byte = CDeCrypt(*loc, &loccr);
+ }
+ for (; loc < end_str;)
+ {
+ byte = CDeCrypt(*loc++, &loccr);
+ if (byte == RETURN)
+ {
+ j=0;
+ break;
+ }
+ else if (byte == ESCAPE)
+ {
+ byte = CDeCrypt(*loc++, &loccr);
+ if (byte > MAX_ESCAPE)
+ fprintf(stderr,
+ "Error: not_defined_e%d in %s", byte, psfontfile);
+ else
+ {
+ switch(byte)
+ {
+ case DOTSECTION : j=0; break;
+ case VSTEM3 : j=0; break;
+ case HSTEM3 : j=0; break;
+ case SEAC :
+ stack[j++]=byte;
+ grow=1;
+ level++;
+ jj=j;
+ for(k=0;k<jj;k++)
+ pstack[k]=stack[k];
+ num_err=FindSeac(pstack[jj-3]);
+ if(num_err<0)
+ {
+ flg_seac=1;
+ CharCount++;
+ keyword[char_str].newnum--;
+ if(flg_seac > -3)
+ label[number].select=SEAC_NOT_END;
+ grow=0;
+ level=0;
+ j=0;
+ break;
+ }
+
+ num_err=DeCodeStr(CHAR_SEAC, num_err);
+ level--;
+
+#ifdef DEBUG
+ if((num_err<0)||(dd(D_CALL_SUBR)))
+#else
+ if(num_err<0)
+#endif
+ ViewReturnCall
+ (num_err, pstack[jj-3],pstack,jj,1);
+ grow=1;
+ level++;
+ num_err=FindSeac(pstack[jj-2]);
+ if(num_err<0)
+ {
+ flg_seac=1;
+ CharCount++;
+ keyword[char_str].newnum--;
+ keyword[char_str].newnum--;
+ if(flg_seac > -3)
+ label[number].select=SEAC_NOT_END;
+ grow=0;
+ level=0;
+ j=0;
+ break;
+ }
+ num_err=DeCodeStr(CHAR_SEAC, num_err);
+ level--;
+#ifdef DEBUG
+ if((num_err<0)||(dd(D_CALL_SUBR)))
+#else
+ if(num_err<0)
+#endif
+
+ ViewReturnCall
+ (num_err, pstack[jj-2],pstack,jj,1);
+
+ if(num_err<0)
+ return ERR_STACK;
+ j=0; break;
+ case SBW : j=0; break;
+ case CHARS_DIV : j=0; break;
+ case CALLOTHERSUBR : stack[j++]=byte;
+ depth=depth+2;
+ break;
+ case POP : stack[j++]=byte;
+ depth=depth+2;
+ break;
+ case SETCURRENTPOINT : j=0; break;
+ }
+ }
+ continue;
+ }
+ else if (byte < 32)
+ {
+ switch(byte)
+ {
+ case HSTEM : j=0; break;
+ case VSTEM : j=0; break;
+ case VMOVETO : j=0; break;
+ case CHARS_RLINETO : j=0; break;
+ case HLINETO : j=0; break;
+ case VLINETO : j=0; break;
+ case RRCURVETO : j=0; break;
+ case CHARS_CLOSEPATH : j=0; break;
+ case CALLSUBR : stack[j++]=byte;
+ depth=depth+2;
+ level++;
+ grow=1;
+ jj=j;
+ j=j-depth;
+ for(k=0;k<jj;k++)
+ pstack[k]=stack[k];
+
+ num_err = DeCodeStr(stack[j],0);
+
+ level--;
+#ifdef DEBUG
+ if((num_err<0)||(dd(D_CALL_SUBR)))
+#else
+ if(num_err<0)
+#endif
+ ViewReturnCall
+ (num_err, pstack[jj-depth], pstack,jj,depth/2);
+
+ if(num_err<0)
+ return ERR_STACK;
+ else
+ {
+ depth=0;
+ break;
+ }
+ case RETURN : j=0; break;
+ case ESCAPE : break;
+ case HSBW : j=0; break;
+ case ENDCHAR : j=0; break;
+ case CHARS_RMOVETO : j=0; break;
+ case HMOVETO : j=0; break;
+ case VHCURVETO : j=0; break;
+ case HVCURVETO : j=0; break;
+ }
+ }
+ if (byte >= 32)
+ {
+ if (byte <= 246)
+ {
+ value= byte - 139;
+ stack[j++]=value;
+ }
+ else if ((byte >= 247) && (byte <= 250))
+ {
+ value= (byte - 247) * 256 + CDeCrypt(*loc++, &loccr) + 108;
+ stack[j++]=value;
+ }
+ else if ((byte >= 251) && (byte <= 254))
+ {
+ value= -(byte - 251) * 256 - CDeCrypt(*loc++, &loccr) - 108;
+ stack[j++]=value;
+ }
+ else if (byte == 255)
+ {
+ value = CDeCrypt(*loc++, &loccr);
+ value <<= 8;
+ value += CDeCrypt(*loc++, &loccr);
+ value <<= 8;
+ value += CDeCrypt(*loc++, &loccr);
+ value <<= 8;
+ value += CDeCrypt(*loc++, &loccr);
+ stack[j++]=value;
+ }
+ }
+ }
+ if(num == CHAR_STR)
+ {
+ temp=loc;
+ num_err = PassToken();
+ if(num_err<0)
+ {
+ return ERR_SECOND_TOK;
+ }
+ }
+ return 1;
+}
+
+/* */
+/* We mark only necessary charstring */
+/* */
+
+
+void ScanChars P1C(int, i)
+{
+
+ int word_type=0;
+ int found;
+ int str_len;
+ int max_num;
+ int counter;
+ int num_err = 0;
+ typetemp _HUGE *tmptemp;
+
+
+ CharCount++;
+ counter=number;
+ max_num = keyword[i].offset+keyword[i].oldnum;
+
+ while( number < max_num )
+ {
+ if((word_type=GetToken())>0)
+ {
+ if(word_type>=3)
+ {
+ strcpy((char *) tmp_token, (char *) token);
+ str_len = strlen((char *) token);
+
+
+ if(CharCount!=0)
+ {
+
+ num_err=FindCharW(token, str_len);
+
+ if(num_err==FLG_BINARY)
+ {
+ CharCount--;
+ found=num_err;
+ keyword[i].newnum++;
+ }
+ else
+ {
+#ifdef DEBUG
+
+ if(dd(D_VIEW_VECTOR)&&(num_err==-1))
+ {
+ fprintf(stderr,
+ " Debug: Char '%s' not used in WorkVector\n", token);
+
+ }
+#endif
+ if(word_type>3)
+ {
+ if(strstr((char *) token, (char *) notdef)!=NULL)
+ {
+ CharCount--;
+ label[number].num = -2;
+ found=FLG_BINARY;
+ keyword[i].newnum++;
+ }
+ else
+ found=NOTHING;
+ }
+ else
+ found=NOTHING;
+ }
+ }
+ else
+ {
+ found=NOTHING;
+ }
+
+ label[number].begin = temp-str_len;
+ label[number].select = found;
+
+ switch(found)
+ {
+ case FLG_BINARY:
+ tmptemp=temp;
+ for(subrs=FirstKey; subrs<char_str; subrs++)
+ {
+ level=0;
+ if(subrs!=FirstKey)
+ {
+ temp=tmptemp;
+ }
+
+ num_err=DeCodeStr(CHAR_STR,0);
+
+ }
+#ifdef DEBUG
+ if(dd(D_CALL_SUBR))
+ {
+ if(num_err>0)
+ fprintf(stderr,
+ " Debug for Char '%s'\n", tmp_token);
+ }
+#endif
+ break;
+ case NOTHING:
+
+ num_err=PassString(0);
+ break;
+ }
+
+ if(num_err<0)
+ {
+ ErrorOfScan(num_err);
+ fprintf(stderr,"in Char string of '%s'", tmp_token);
+ exit(1);
+ }
+ number++;
+ }
+ }
+ else
+ {
+ fprintf(stderr,
+ "\n File <%s> ended before all chars have been found.", psfontfile);
+
+ fprintf(stderr,
+ "\n We scan %d Chars from %d",
+ counter - (2 + keyword[subrs].oldnum),
+ keyword[i].oldnum);
+
+ if(tmp_token!=NULL)
+ {
+ fprintf(stderr, "\n Last seen token was '%s'\n", tmp_token);
+ }
+ exit(1);
+ }
+ }
+
+ if(flg_seac!=0)
+ {
+ tmptemp=temp;
+ flg_seac--;
+ for(; counter<max_num; counter++)
+ {
+ if((int) label[counter].select==SEAC_NOT_END)
+ {
+ for(subrs=FirstKey; subrs<char_str; subrs++)
+ {
+ level=0;
+ temp=label[counter].begin;
+ num_err=DeCodeStr(CHAR_STR,0);
+ }
+ if(num_err<0)
+ {
+ fprintf(stderr," Warning: %d char not choose during SEAC\n",
+ label[counter].num);
+ }
+ else
+ {
+ CharCount--;
+ label[counter].select=FLG_BINARY;
+ if(CharCount==0)
+ break;
+ }
+ }
+ }
+
+ temp=tmptemp;
+ }
+
+ if(CharCount!=0)
+ {
+ fprintf(stderr," WARNING: Not all chars found.");
+ PrintChar(FirstCharW);
+
+ }
+}
+
+void LastLook P1H(void)
+{
+ label[number].begin = temp;
+ label[number].select = FLG_BINARY;
+ number++;
+}
+
+int FindKeyWord P2C(int, First_Key, int, lastkey)
+{
+ int word_type=0;
+ int i;
+ int tmp_num=0;
+
+ for(;;)
+ {
+ if((word_type=GetToken())>0)
+ {
+ if(word_type==3)
+ {
+ for(i=First_Key; i<=lastkey; i++)
+ {
+ if(!strcmp((char *) token, Key[i].name))
+ {
+ tmp_num = GetNum();
+ if(tmp_num<0)
+ {
+ fprintf(stderr,
+ "\n ERROR: Number not found for '%s' in <%s>",
+ Key[i].name, psfontfile);
+ exit(1);
+ }
+ keyword[current].oldnum = tmp_num;
+ keyword[current].length=strlen((char *) token);
+ keyword[current].begin=temp - keyword[current].length;
+ return i;
+ }
+ }
+ }
+ }
+ else
+ {
+ fprintf(stderr,
+ "\n ERROR: In <%s> keyword not found:", psfontfile);
+
+ for(i=First_Key; i<=lastkey; i++)
+ fprintf(stderr,"\n %dth > '%s' ",i,Key[i].name);
+ exit(1);
+ }
+ }
+}
+
+/* To increase scan speed we use dynamic range of keywords */
+
+int ScanBinary P1H(void)
+{
+ int i;
+ int firstnum, lastnum;
+ firstnum= LENIV;
+ lastnum=SUBRS;
+
+ number=0;
+ label[number].begin = begin_of_scan;
+ temp = label[number].begin;
+ label[number].select = FLG_BINARY;
+ offset= ++number;
+
+ for (current=0, FirstKey=current ; ; current++)
+ {
+ i=FindKeyWord(firstnum,lastnum);
+ switch(i)
+ {
+ case LENIV:
+ FirstKey++;
+ firstnum=SUBRS;
+ lastnum=SUBRS;
+ lenIV=keyword[current].oldnum;
+ keyword[current].type=Key[0].num;
+ break;
+ case SUBRS:
+ firstnum=SUBRS;
+ lastnum= CHARSTRINGS;
+ keyword[current].offset=number;
+ keyword[current].newnum=0;
+ keyword[current].type=Key[1].num;
+ ScanSubrs(current);
+ LastLook();
+ break;
+ case CHARSTRINGS:
+ char_str=current;
+ keyword[current].offset=number;
+ keyword[current].newnum=0;
+ keyword[current].type=Key[2].num;
+ ScanChars(current);
+ LastLook();
+#ifdef DEBUG
+ if(dd(D_CALL_SUBR))
+ {
+ for(i=0;i<=2;i++)
+ {
+ if(keyword[i].oldnum!=0)
+ fprintf(stderr, " Result for <%s>: %s %d (instead %d) \n",
+ psfontfile, Key[keyword[i].type].name,keyword[i].newnum, keyword[i].oldnum);
+ }
+
+ }
+#endif
+ return 1;
+ }
+ }
+}
+
+unsigned char *itoasp
+P3C(int, n, unsigned char *, s, int, len)
+{
+ static int i, j;
+
+ j++;
+ if(n/10)
+ itoasp(n/10,s,len);
+ else
+ i=0;
+ s[i++]=abs(n)%10+'0';
+ j--;
+ if(j==0)
+ {
+ for(; i<len;)
+ s[i++]=' ';
+ s[i]='\0';
+ return s;
+ }
+ return NULL;
+}
+
+void SubstNum P1H(void)
+{
+ int i, j;
+
+ for(i=FirstKey;i<=char_str;i++)
+ {
+ itoasp(keyword[i].newnum,token,keyword[i].length);
+ temp=keyword[i].begin;
+ for(j=0;token[j];++j,++temp)
+ {
+ *temp=token[j];
+ }
+ temp=keyword[i].begin;
+ }
+}
+
+ub4 little4 P1C(ub1 *, buff)
+{
+ return (ub4) buff[0] +
+ ((ub4) buff[1] << 8) +
+ ((ub4) buff[2] << 16) +
+ ((ub4) buff[3] << 24);
+}
+
+unsigned short int c1 = C1, c2 = C2;
+unsigned short int edr;
+
+
+unsigned char CDeCrypt P2C(unsigned char, cipher, unsigned int *, lcdr)
+{
+ register unsigned char plain;
+
+ plain = (cipher ^ (*lcdr >> 8));
+ *lcdr = (cipher + *lcdr) * c1 + c2;
+ return plain;
+}
+
+unsigned short int eer;
+
+/* We find end of own vector with non StandardEncoding,
+
+
+*/
+
+
+int EndOfEncoding
+P1C(int, err_num)
+{
+
+ int j;
+ int i = 0;
+ int flg_get_word=0;
+
+
+ static char *RefKey[] =
+ {
+ "readonly",
+ "getinterval",
+ "exch",
+ "def",
+ ""
+ };
+
+ for(;;)
+ {
+ if(flg_get_word==0)
+ flg_get_word = 1;
+ else
+ {
+ err_num=GetWord(token);
+
+ }
+
+ if(err_num <= 0)
+ return -1;
+
+ if(err_num==5)
+ refer[ind_ref].num[i++]=atoi((char *) token);
+ else
+ {
+ for(j=0; *RefKey[j]; j++)
+ {
+ if(strcmp((char *) token, RefKey[j]) ==0)
+ break;
+ }
+ switch(j)
+ {
+ case 0:
+ case 3:
+ find_encod=1;
+ keep_num = -2;
+ if(ind_ref!=0)
+ {
+ CorrectGrid();
+ }
+ return 1;
+
+ case 1:
+ break;
+
+ case 2:
+ if(i==1)
+ {
+ refer[ind_ref].num[1] = 1;
+ refer[ind_ref].num[2] = refer[ind_ref].num[0];
+ GetWord(token);
+ refer[ind_ref].num[0]= atoi((char *) token);
+ }
+ i=0;
+ refer[ind_ref].select=1;
+ ind_ref++;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+}
+
+/* We rebuild grid for case
+ "dup dup 161 10 getinterval 0 exch putinterval
+ dup dup 173 23 getinterval 10 exch putinterval
+ dup dup 127 exch 196 get put readonly def"
+in non StandardEncoding */
+
+
+void CorrectGrid P1H(void)
+{
+ int i, j, k, imax;
+
+
+ for(j=0; j<=ind_ref; j++){
+ if(refer[j].select==1){
+ imax= refer[j].num[1] + refer[j].num[2];
+
+ for(k=0, i=refer[j].num[2]; i< imax; k++,i++){
+ if(grid[i]==1){
+ grid[i]=0;
+ grid[k+refer[j].num[0]]=1;
+ }
+ }
+ }
+ }
+}
+ /* We build vector for non StandardEncoding */
+
+int CharEncoding P1H(void)
+{
+ int err_token=0;
+ int num=0;
+ int seen = 0 ;
+
+ while (1) {
+ err_token=GetWord(token);
+
+ if(err_token==2)
+ {
+ if(strcmp((char *) token, Dup) ==0)
+ {
+ err_token=GetWord(token);
+ if(err_token<0)
+ return ERR_NUM_CHAR;
+
+ if(err_token!=2) /* define "dup word" */
+ {
+ num=atoi((char *) token);
+
+ err_token=GetWord(token);
+ if(err_token<0)
+ {
+ return ERR_NAME_CHAR;
+ }
+ FirstChar=AddChar(FirstChar,token, num);
+ keep_num=num;
+ keep_flg=1;
+ seen++ ;
+ err_token = GetWord(token) ;
+ }
+ } else {
+
+ if(keep_flg==1)
+ {
+ keep_num=FLG_OUT_STR;
+
+ if(EndOfEncoding(err_token)<0)
+ {
+ return -1;
+ }
+ }
+ }
+ } else
+ return seen ;
+ }
+}
+
+
+
+void FindEncoding P1H(void)
+{
+ int num_err=0;
+ int tmpnum;
+
+ line=tmpline;
+
+ if(encode==0)
+ {
+
+ while((num_err=GetWord(token))>=0)
+ {
+ if(num_err==3)
+ {
+ if (strcmp((char *) token,"/Encoding") == 0)
+ {
+
+ tmpnum=GetWord(token);
+
+ if(tmpnum==5)
+ {
+ encode=SPECIAL_ENC;
+ }
+
+ else
+ {
+ find_encod=1;
+ encode=STANDARD_ENC;
+ }
+ return;
+ }
+ }
+ }
+ }
+
+ else
+ {
+ num_err= CharEncoding();
+ if(num_err<0)
+ {
+ ErrorOfScan(num_err);
+ fprintf(stderr,
+ "\n ERROR in encoding vector in <%s>", psfontfile);
+ exit(1);
+ }
+ }
+}
+
+/* Before parse in BINARY portion of font we should mark needed chars,
+reencode them if there is reencoding vector for this case and
+build work vector */
+
+void CheckChoosing P1H(void)
+{
+
+ CHAR *TmpChar;
+ int err_num, i;
+
+ if(encode==STANDARD_ENC)
+ {
+ TmpChar = FirstCharB;
+ }
+ else
+ {
+ if(encode==SPECIAL_ENC)
+ {
+ TmpChar = FirstChar;
+ }
+ else
+ {
+ fprintf(stderr,
+ "WARNING: '/Encoding' not found in <%s>\n", psfontfile);
+ exit(1);
+ }
+ }
+
+ if(reencode==FLG_REENCODE)
+ err_num=LoadVector(reencode, TmpChar);
+ else
+ err_num=ChooseVect(TmpChar);
+
+ if(err_num<0)
+ {
+ Afm();
+ encode=AFM_ENC;
+
+ TmpChar = FirstCharA;
+
+ for(i=0;i<=255;i++)
+ grid[i]=tmpgrid[i];
+
+
+ if(reencode==FLG_REENCODE)
+ err_num=LoadVector(reencode, TmpChar);
+ else
+ err_num=ChooseVect(TmpChar);
+
+ if(err_num<0)
+ {
+ fprintf(stderr,
+ "\n Warning: after loading AFM file \n");
+
+ fprintf(stderr,
+ " only %d chars found instead %d for <%s>\n",
+ CharCount, GridCount, psfontfile);
+ }
+
+ }
+ WorkVect(TmpChar);
+
+#ifdef DEBUG
+
+ if(dd(D_VIEW_VECTOR))
+ {
+ fprintf(stderr, "\n");
+ if(encode==1)
+ fprintf(stderr, " Encoding: standard \n");
+ else
+ fprintf(stderr, " Encoding: not standard \n");
+
+ if(reencode==FLG_REENCODE)
+ fprintf(stderr, " with reencode vector <%s>\n", psvectfile);
+
+ PrintChar(FirstCharW);
+ }
+#endif
+
+}
+
+/*
+ * As we write the output file, we search for /UniqueID, and if we find
+ * such, we munge it. We need to do this because the font is only partial,
+ * and if we send out a valid UniqueID, this well may mess up future jobs
+ * that use this font, but characters that we do not include. We munge
+ * the string from /UniqueID to /UniqueXX just to make it more clear
+ * what we've done.
+ */
+
+char *KillUnique P1C(char *, s)
+{
+ char *r = strstr(s, "/UniqueID") ;
+ if (r) {
+ r[7] = 'X' ;
+ r[8] = 'X' ;
+ }
+ return s ;
+}
+
+void OutASCII P3C(FILE *, fout, ub1 *, buff, ub4, len)
+{
+ ub4 i;
+
+ for (i = 0; i < len; i++)
+ {
+ if ((*buff == 10)||(*buff == 13))
+ {
+ buff++;
+ *line++='\n';
+ *line='\0';
+
+ if((find_encod==0)&&(lastpart==0))
+ {
+ FindEncoding();
+ }
+
+ line=(unsigned char *) KillUnique((char *) tmpline);
+
+ if(keep_flg==0)
+ fprintf(fout,"%s", line);
+ else
+ {
+ if(keep_num<0)
+ {
+ AddStr(line,keep_num);
+ if(keep_num==-2)
+ keep_num = -3;
+ }
+
+ }
+ }
+ else
+ {
+ *line++ = *buff++;
+ }
+ }
+}
+
+/* It's eexec decription for PFB format */
+
+void BinEDeCrypt P2C(ub1 *, buff, ub4, len)
+{
+ ub4 i;
+
+ for (i = 0; i < len; i++, temp++, buff++)
+ {
+ *temp = (*buff ^ (edr >> 8));
+ edr = (*buff + edr) * c1 + c2;
+ }
+}
+
+/* And it's eexec decription for PFA format */
+
+
+void HexEDeCrypt P1C(unsigned char *, mem)
+{
+ int ch1, ch2, cipher;
+
+
+ for(;*mem!='\n' && *mem!='\r'; temp++)
+ {
+ ch1= *mem++;
+ ch2= *mem++;
+
+ if ('A' <= ch1 && ch1 <= 'F')
+ ch1 -= 'A' - 10;
+ else if ('a' <= ch1 && ch1 <= 'f')
+ ch1 -= 'a' - 10;
+ else
+ ch1 -= '0';
+ ch1<<=4;
+
+ if ('A' <= ch2 && ch2 <= 'F')
+ ch2 -= 'A' - 10;
+ else if ('a' <= ch2 && ch2 <= 'f')
+ ch2 -= 'a' - 10;
+ else
+ ch2 -= '0';
+
+ cipher = ch1 + ch2;
+
+ *temp = (cipher ^ (edr >> 8));
+ edr = (cipher + edr) * c1 + c2;
+
+ }
+}
+
+int PartialPFA P2C(FILE *, fin, FILE *, fout)
+{
+ ub1 type;
+ ub4 memory, addmemory, length, add_of_len;
+ unsigned char *mem = tmpline;
+ int check_vect=0;
+
+ tmpline=buf;
+ edr = EDR;
+ type = FLG_ASCII;
+ memory = BASE_MEM;
+ addmemory= ADD_MEM;
+ length=0;
+ temp=(typetemp *) UniGetMem(memory);
+ begin_of_scan=temp;
+
+ for(;;)
+ {
+ if(fgets((char *)buf,BUFSIZ,fin)==NULL)
+ break;
+ switch (type)
+ {
+ case FLG_ASCII:
+ if(strstr((char *)buf,"currentfile eexec") != NULL)
+ {
+ type=FLG_BINARY;
+ }
+
+ if((find_encod==0)&&(lastpart==0))
+ {
+ FindEncoding();
+ }
+
+ if(keep_flg==0)
+ fprintf(fout,"%s", KillUnique((char *)buf));
+ else
+ {
+ AddStr(buf,keep_num);
+ }
+ break;
+
+ case FLG_BINARY:
+ if(check_vect==0)
+ {
+ tmpline=mem;
+ CheckChoosing();
+ check_vect=1;
+ }
+
+ if(GetZeroLine(buf)<0)
+ {
+ type = FLG_ZERO_LINE;
+ end_of_scan=temp;
+ ScanBinary();
+ SubstNum();
+ if(keep_flg==1)
+ {
+ keep_flg=0;
+ lastpart=1;
+ if(encode!=1)
+ {
+ UnDefineCharsW();
+ if(encode==4)
+ RevChar(FirstCharA);
+ else
+ RevChar(FirstChar);
+
+ OutChar(FirstCharW, fout);
+ }
+ Reeverse(FirstStr);
+ OutStr(RevStr, fout);
+ }
+
+ OutHEX(fout);
+ UniFree(begin_of_scan);
+ fprintf(fout, "%s", KillUnique((char*) buf));
+ break;
+ }
+
+ add_of_len=strlen((char *) buf)/2;
+ length=length + add_of_len;
+
+ if(length>memory)
+ {
+ memory = memory + addmemory;
+/* Using "memory = length;" retains minimum */
+/* of memory but it will be more slowly */
+ begin_of_scan = (typetemp*) UniRealloc(begin_of_scan, memory);
+ temp = begin_of_scan + length - add_of_len;
+ }
+ HexEDeCrypt(buf);
+ break;
+ case FLG_ZERO_LINE:
+ fprintf(fout, "%s", buf);
+ break;
+ }
+ }
+ if(type == FLG_ZERO_LINE)
+ return TRUE;
+ else return FALSE;
+}
+
+#define FIRST_ASCII 1
+#define FIRST_BINARY 2
+#define NEXT_BINARY 3
+#define NEXT_ASCII 4
+
+int PartialPFB
+P2C(FILE *, fin, FILE *, fout)
+{
+ ub1 type;
+ ub4 t_length, length, nread;
+ int nbytes, rc;
+ int check_vect = 0;
+ int sub_type = FIRST_ASCII;
+
+ line=tmpline;
+ edr = EDR;
+
+/* To find summary length of multiple binary parts we prescan font file */
+
+ t_length = 0L;
+
+ for (;;)
+ {
+ if ((rc = fread((char *) buf, 1, 6, fin)) < 2)
+ {
+ return FALSE;
+ }
+
+ if (buf[0] != 128)
+ return FALSE;
+
+ type = buf[1];
+
+ if (type == FLG_EOF)
+ {
+ break;
+ }
+
+ if (rc != 6)
+ return FALSE;
+
+ length = little4(&buf[2]);
+
+ if(type==FLG_BINARY)
+ {
+ t_length = (ub4)(length + t_length);
+ }
+ fseek(fin, ftell(fin) + length, SEEK_SET);
+ }
+
+/* Here we start real parsing */
+
+ sub_type = FIRST_BINARY;
+
+ fseek(fin, 0L, SEEK_SET);
+
+ for (;;)
+ {
+ if ((rc = fread((char *) buf, 1, 6, fin)) < 2)
+ {
+ return FALSE;
+ }
+ if (buf[0] != 128)
+ return FALSE;
+
+ type = buf[1];
+
+ if (type == FLG_EOF)
+ {
+ return TRUE;
+ }
+
+ if (rc != 6)
+ return FALSE;
+
+ length = little4(&buf[2]);
+
+ if(type==FLG_BINARY)
+ {
+ if(sub_type == FIRST_BINARY)
+ {
+ sub_type = NEXT_BINARY;
+ temp=(typetemp*) UniGetMem(t_length);
+ begin_of_scan=temp;
+ }
+ }
+ else
+ {
+ if( sub_type == NEXT_BINARY)
+ {
+ sub_type = NEXT_ASCII;
+ end_of_scan=temp;
+ ScanBinary();
+ SubstNum();
+ if(keep_flg==1)
+ {
+ keep_flg=0;
+ lastpart=1;
+ if(encode!=1)
+ {
+ UnDefineCharsW();
+ if(encode==4)
+ RevChar(FirstCharA);
+ else
+ RevChar(FirstChar);
+
+ OutChar(FirstCharW, fout);
+ }
+
+ Reeverse(FirstStr);
+ OutStr(RevStr, fout);
+ }
+ OutHEX(fout);
+ UniFree(begin_of_scan);
+ }
+ }
+
+ for (nread = 0; nread < length; nread += rc)
+ {
+ nbytes = min(BUFSIZ, length - nread);
+
+ if ((rc = fread((char *) buf, 1, nbytes, fin)) == 0)
+ {
+ return FALSE;
+ }
+ switch (type)
+ {
+ case FLG_ASCII:
+ OutASCII(fout, buf, (ub4) rc);
+ break;
+ case FLG_BINARY:
+ if(check_vect==0)
+ {
+ CheckChoosing();
+ check_vect=1;
+ }
+ BinEDeCrypt(buf, (ub4) rc);
+ break;
+ default:
+ return FALSE;
+ }
+ }
+ }
+}
+
+void OutHEX
+P1C(FILE *, fout)
+{
+ int i=0;
+ int num;
+ static char *hexstr = "0123456789abcdef" ;
+ int bin;
+
+ line=tmpline;
+ eer = EER;
+ label[number].begin = end_of_scan;
+ label[number].select = NOTHING;
+ number++;
+
+ for(num=0; num < number; num++)
+ {
+ switch(label[num].select)
+ {
+ case NOTHING:
+ break;
+ case FLG_BINARY:
+ label[num].select=NOTHING;
+ for(temp=label[num].begin; temp<label[num+1].begin; temp++,i++)
+ {
+ bin = (*temp ^ (eer >> 8)); /* Eexec encryption */
+ eer = ((bin + eer) * c1 + c2);
+
+ *line++= hexstr[(bin&0xf0)>>4];
+ *line++= hexstr[bin&0xf];
+
+ if (!((i + 1) % BYTES_PER_LINE))
+ {
+ *line++='\0';
+ line =tmpline;
+ fprintf(fout, "%s\n",line);
+ }
+ }
+ break;
+ }
+ }
+ if (i % BYTES_PER_LINE)
+ {
+ *line++='\0';
+ line =tmpline;
+ fprintf(fout, "%s\n",line);
+ }
+}
+
+/* We parse AFM file only if we've received errors after
+parsing of own vector */
+
+int Afm P1H(void)
+{
+ unsigned char afmfile[100];
+ FILE *fafm;
+ int err_num=0;
+ int i,j,k,num=0;
+ unsigned char name[40];
+
+ static char *AfmKey[] =
+ {
+ "StartCharMetrics",
+ "EndCharMetrics",
+ ""
+ };
+
+ static char *InfoKey[] =
+ {
+ "C",
+ "N",
+ ""
+ };
+
+ for(i=0; psfontfile[i] ; i++)
+ {
+ if(psfontfile[i] == '.')
+ break;
+ else
+ afmfile[i]=psfontfile[i];
+ }
+
+ afmfile[i]='\0';
+ strcat((char *) afmfile,".afm");
+ fprintf(stderr, "<%s>", afmfile);
+
+ if ((fafm = psfopen((char *) afmfile, "r")) == NULL)
+ {
+ NameOfProgram();
+ perror((char *) afmfile);
+ return -1;
+ }
+
+ for(j=0;;)
+ {
+ line = tmpline;
+
+ if(fgets((char *) line,BUFSIZ,fafm)==NULL)
+ break;
+
+ if(strstr((char *) line, AfmKey[j])!=NULL)
+ {
+ if(j==0)
+ {
+ j++;
+ continue;
+ }
+ else
+ {
+ fclose(fafm);
+ return 1;
+ }
+ }
+
+ if(j==1)
+ {
+ for(k=0; err_num>=0; )
+ {
+ err_num=GetWord(token);
+ if(err_num==2)
+ {
+ if(strcmp((char *) token,InfoKey[k])==0)
+ {
+ if(k==0)
+ {
+ err_num=GetWord(token);
+ num=atoi((char *) token);
+ k=1;
+ continue;
+ }
+ else
+ {
+ err_num=GetWord(token);
+ name[0]='/';
+ name[1]='\0';
+ strcat((char *) name, (char *) token);
+ if(num>=0)
+ FirstCharA=AddChar(FirstCharA, name, num);
+ break;
+ }
+ }
+ }
+
+ }
+ }
+ }
+ return -2;
+}
+
+int FontPart P3C(FILE *, fout, unsigned char *, fontfile,
+ unsigned char *, vectfile )
+{
+ FILE *fin=0;
+ int num;
+ int rc;
+ int i;
+
+ ind_ref=0;
+ reencode=0;
+ encode=0;
+ lastpart=0;
+ keep_flg=0;
+ flg_seac=0;
+ strcpy((char *) psfontfile, (char *) fontfile);
+ find_encod=0;
+ CharCount=0;
+
+ if(loadbase != 1)
+ {
+ for(i=offset; i < NUM_LABEL; i++)
+ label[i].num=CHAR_NOT_DEF;
+
+
+ strcpy((char *) psvectfile, (char *) basevect);
+
+#ifdef DEBUG
+ if(dd(D_VIEW_VECTOR))
+ fprintf(stderr, " Base vector <%s>.", basevect);
+#endif
+
+ if(LoadVector(1, FirstCharB)==1)
+ {
+ loadbase = FLG_LOAD_BASE;
+
+ }
+ else
+ exit(1);
+ }
+
+ if(vectfile)
+ {
+ reencode=FLG_REENCODE;
+ strcpy((char *) psvectfile, (char *) vectfile);
+ }
+
+ for(num=0;num<NUM_LABEL;num++)
+ label[num].select = NOTHING;
+
+ switch(DefTypeFont(fontfile))
+ {
+ case PFA:
+ if ((fin = psfopen((char *) fontfile, "r"))==NULL)
+ {
+ NameOfProgram();
+ perror((char *) fontfile);
+ return -1;
+ }
+ rc = PartialPFA(fin,fout);
+ if (rc == FALSE)
+ {
+ NameOfProgram();
+ (void) fprintf(stderr,
+ "Error: %s is not a valid PFA file\n", fontfile);
+ return -1;
+ }
+
+ break;
+ case PFB:
+ if ((fin = psfopen((char *) fontfile, OPEN_READ_BINARY))==NULL)
+ {
+ NameOfProgram();
+ perror((char *) fontfile);
+ return -1;
+ }
+ rc = PartialPFB(fin,fout);
+ if (rc==FALSE)
+ {
+ NameOfProgram();
+ (void) fprintf(stderr,
+ "Error: %s is not a valid PFB file\n", fontfile);
+ return -1;
+ }
+ break;
+ case -1:
+ NameOfProgram();
+ fprintf(stderr,
+ "Error: %s has neither PFA nor PFB extension", fontfile);
+ return -1;
+ }
+
+ UnDefineCharsW();
+
+ if(encode==AFM_ENC)
+ FirstCharA=UnDefineChars(FirstCharA);
+
+ if(encode!=1)
+ {
+ UnDefineStr();
+ }
+
+ FirstChar=UnDefineChars(FirstChar);
+
+ fclose(fin);
+
+ for(i=0; i < number; i++)
+ label[i].num=CHAR_NOT_DEF;
+
+ ClearB();
+ return 1;
+}
+
+
+
+int LoadVector P2C(int, num, CHAR *, TmpChar)
+{
+
+ FILE *fvect;
+ int i = 0;
+ int j = 0;
+ int end_vect=0;
+ int index_grid = 0;
+
+ CharCount = 0;
+
+ if ((fvect = psfopen((char *) psvectfile, "r")) == NULL)
+ {
+ NameOfProgram();
+ perror((char *) psvectfile);
+ return -1;
+ }
+
+ for(;;)
+ {
+ line = tmpline;
+
+ if((fgets((char*)line,BUFSIZ,fvect)==NULL)||(end_vect!=0))
+ break;
+
+ for(;;)
+ {
+ j=GetWord(token);
+ if(j==3)
+ {
+ if(i==0)
+ {
+ i++;
+ continue;
+ }
+
+ if(num==4)
+ {
+ if(grid[index_grid]==1)
+ {
+ if(ChooseChar(token, TmpChar)> 0)
+ CharCount++;
+ else
+ {
+ fprintf(stderr,
+ "Error: '%s' not found in reencoding vector <%s> for <%s>\n",
+ token,psvectfile, psfontfile);
+ }
+ }
+ index_grid++;
+ }
+ else
+ {
+ if(num==1) /* Build base vector */
+ {
+ FirstCharB=AddChar(FirstCharB,token, CharCount);
+ CharCount++;
+ }
+ }
+ continue;
+ }
+ if(j== -1)
+ break;
+ if(j==2)
+ {
+ i=0;
+ end_vect = 1;
+ break;
+ }
+ }
+ }
+
+ if(j==2)
+ {
+ if((index_grid!=256)&&(CharCount!=256))
+ {
+ fclose(fvect);
+ fprintf(stderr,"Error during Load Vector in <%s> \n",
+ psvectfile);
+ fprintf(stderr,
+ "Found %d chars instead 256\n", max(index_grid,CharCount));
+ return -3;
+ }
+
+ if(CharCount>0)
+ {
+ fclose(fvect);
+ return 1;
+ }
+ else
+ {
+ fclose(fvect);
+ fprintf(stderr,
+ "\n Warning: Vector from <%s> for <%s> doesn't load\n",
+ psvectfile, psfontfile);
+ return -1;
+ }
+ }
+ else
+ {
+ fprintf(stderr,"\n Error: ending token 'def' not found in <%s> \n",
+ psvectfile);
+ return -2;
+ }
+}
+
+int ChooseVect
+P1C(CHAR *, tmpChar)
+{
+ CHAR *ThisChar = tmpChar;
+
+ CharCount=0;
+ while (ThisChar != NULL)
+ {
+ ThisChar->choose= grid[ThisChar->num];
+ if(grid[ThisChar->num]==1)
+ {
+ CharCount++;
+ }
+ ThisChar = ThisChar->NextChar;
+ }
+
+ if(CharCount<GridCount)
+ return -1;
+ else
+ return 1;
+
+}
+
+void ErrorOfScan
+P1C(int, err)
+{
+ switch(err)
+ {
+
+ case 0: break;
+
+ case ERR_FIRST_NUM:
+ fprintf(stderr, " First number not found ");
+ break;
+ case ERR_SECOND_NUM:
+ fprintf(stderr, " Second number not found ");
+ break;
+
+ case ERR_FIRST_TOK:
+ fprintf(stderr, " First token not found ");
+ break;
+
+ case ERR_SECOND_TOK:
+ fprintf(stderr, " Second token not found ");
+ break;
+
+ case ERR_STACK:
+ fprintf(stderr, " End of stack ");
+ break;
+
+ case ERR_NUM_CHAR:
+ fprintf(stderr, " Number of char not found ");
+ break;
+
+ case ERR_NAME_CHAR:
+ fprintf(stderr, " Name of char not found ");
+ break;
+ }
+}
+
+void NameOfProgram P1H(void)
+{
+#ifdef DVIPS
+ fprintf(stderr,"This is DVIPS, t1part module \n");
+#else
+ fprintf(stderr,"This is t1part, %s by Sergey Lesenko\n", version);
+#endif
+}
+
+
diff --git a/Build/source/texk/dvipsk/t1part.h b/Build/source/texk/dvipsk/t1part.h
new file mode 100644
index 00000000000..b33bf4dfb63
--- /dev/null
+++ b/Build/source/texk/dvipsk/t1part.h
@@ -0,0 +1,147 @@
+/*t1part.h from t1part.c version 1.59 beta (c)1994, 1996
+by Sergey Lesenko
+lesenko@desert.ihep.su
+ *
+ * It is distributed with no warranty of any kind.
+ * You may modify and use this program. It can be included
+ * in any distribution, commercial or otherwise, so long as
+ * copyright notice be preserved on all copies.
+ */
+#ifdef KPATHSEA
+#include <kpathsea/c-ctype.h>
+#else /* not KPATHSEA */
+#include <assert.h>
+
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#endif /* not KPATHSEA */
+
+#define DVIPS
+
+/*
+#define DOS
+#define BORLANDC
+*/
+
+#ifdef DEBUG
+
+extern int debug_flag;
+
+#define D_VIEW_VECTOR (1<<8)
+#define D_CALL_SUBR (1<<9)
+
+#endif
+
+#ifdef DVIPS
+extern FILE *search();
+#ifndef KPATHSEA
+extern char *headerpath ;
+#endif /* not KPATHSEA */
+#define psfopen(A,B) search(headerpath,A,B)
+#else
+#define psfopen(A,B) fopen(A,B)
+#endif
+
+#ifdef KPATHSEA
+#define OPEN_READ_BINARY FOPEN_RBIN_MODE
+#else
+#if defined(DOS) || defined(WIN32)
+#define OPEN_READ_BINARY "rb"
+#else
+#define OPEN_READ_BINARY "r"
+#endif
+#endif /* not KPATHSEA */
+
+#ifdef DOS
+typedef unsigned char ub1;
+typedef unsigned long ub4;
+#else
+typedef unsigned char ub1;
+typedef unsigned long int ub4;
+#endif
+
+#ifdef BORLANDC
+typedef unsigned char typetemp;
+#define _HUGE huge
+#else
+typedef unsigned char typetemp;
+#define _HUGE
+#endif
+
+#ifdef BORLANDC
+#include <alloc.h>
+#define UniRealloc farrealloc
+#define UniFree farfree
+#else
+#ifdef KPATHSEA
+#define UniRealloc xrealloc
+#define UniFree free
+#else
+#define UniRealloc realloc
+#define UniFree free
+#endif /* not KPATHSEA */
+#endif
+
+#include "protos.h"
+#if 0
+struct Char * AddChar ();
+void AddStr();
+void BinEDeCrypt ();
+int DeCodeStr();
+int DefTypeFont();
+unsigned
+char CDeCrypt();
+void CorrectGrid();
+int CharEncoding ();
+void CheckChoosing();
+int ChooseChar();
+int ChooseVect();
+int EndOfEncoding();
+void ErrorOfScan ();
+int FindCharW();
+void FindEncoding ();
+int FindKeyWord ();
+int FontPart ();
+void HexEDeCrypt ();
+void *getmem ();
+int GetNum ();
+int GetToken ();
+int GetWord ();
+int GetZeroLine ();
+unsigned
+char *itoasp ();
+void LastLook ();
+ub4 little4 ();
+void OutASCII ();
+void OutHEX ();
+void OutStr();
+void NameOfProgram ();
+int PartialPFA ();
+int PartialPFB ();
+void PrintChar ();
+int PassString ();
+int PassToken ();
+void Reverse();
+int ScanBinary ();
+void ScanChars ();
+void ScanSubrs ();
+void SubstNum ();
+void ViewReturnCall();
+struct Char * UnDefineChars ();
+void UnDefineCharsW();
+void UnDefineStr();
+int WorkVect();
+#endif
+
+#define NUM_LABEL 1024
+#define BASE_MEM 16384
+#define ADD_MEM 16384
+
+#define FLG_LOAD_BASE (1)
+
+extern unsigned char grid[];
+extern unsigned char *line, *tmpline ;
+extern int loadbase ;
+extern struct Char *FirstCharB;
diff --git a/Build/source/texk/dvipsk/test.ps b/Build/source/texk/dvipsk/test.ps
new file mode 100644
index 00000000000..80817381e15
--- /dev/null
+++ b/Build/source/texk/dvipsk/test.ps
@@ -0,0 +1,1856 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.74a Copyright 1997 Radical Eye Software (www.radicaleye.com)
+%%Title: test.dvi
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%EndComments
+%DVIPSCommandLine: dvips test -o test.ps
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 1997.07.01:1542
+%%BeginProcSet: tex.pro
+%!
+/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{dup length product length le{dup length product
+exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}
+ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false RMat{BDot}
+imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 false
+RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform round
+exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto
+rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup
+/delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{
+-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B
+/w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}
+B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B
+/bos{/SS save N}B /eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: special.pro
+%!
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ userdict begin /bop-hook{gsave 200 30 translate 65 rotate /Times-Roman
+findfont 260 scalefont setfont 0 0 moveto 0.8 setgray (DVIPS) show
+grestore}def end
+
+@fedspecial end TeXDict begin
+39158280 55380996 1000 600 600 (test.dvi) @start
+%DVIPSBitmapFont: Fa ptmbi8r 16 27
+/Fa 27 152 df<00000000000000003FF00000000000000000000003FFFF8007C0000000
+000000000FFFFFFFFFC0000000000000003FFFFFFFFFC000000000000000FFFE0FFFFFC0
+00000000000001FFF003FFFF8000000000000003FFE003FFFF800000000000000FFFC003
+FFFF800000000000001FFF8007FFFF800000000000001FFF0007FFFF000000000000003F
+FE000FFFFF000000000000007FFC000FFFFF00000000000000FFFC000FFFFF0000000000
+0001FFF8000FFFFE00000000000001FFF8000FFFFE00000000000003FFF0000FFFFE0000
+0000000003FFF00007FFFE00000000000007FFE00007FFFC00000000000007FFE00003FF
+FC0000000000000FFFC00003FFFC0000000000000FFFC00003FFFC0000000000001FFFC0
+0003FFF80000000000001FFF800007FFF80000000000003FFF800007FFF8000000000000
+3FFF800007FFF80000000000003FFF800007FFF00000000000007FFF00000FFFF0000000
+0000007FFF00000FFFF00000000000007FFF00000FFFF0000000000000FFFE00000FFFE0
+000000000000FFFE00001FFFE0000000000000FFFE00001FFFE0000000000001FFFE0000
+1FFFE0000000000001FFFC00001FFFC00000000007FFFFFFFFFFFFFFC00000000007FFFF
+FFFFFFFFFFC0000000000FFFFFFFFFFFFFFFC0000000000FFFFFFFFFFFFFFF8000000000
+0FFFFFFFFFFFFFFF80000000000FFFFFFFFFFFFFFF80000000000007FFF800007FFF8000
+0000000007FFF80000FFFF00000000000007FFF80000FFFF00000000000007FFF00000FF
+FF0000000000000FFFF00000FFFF0000000000000FFFF00001FFFE0000000000000FFFF0
+0001FFFE0000000000000FFFE00001FFFE0000000000000FFFE00001FFFE000000000000
+1FFFE00003FFFC0000000000001FFFE00003FFFC0000000000001FFFE00003FFFC000000
+0000001FFFC00003FFFC0000000000003FFFC00007FFF80000000000003FFFC00007FFF8
+0000000000003FFFC00007FFF80000000000003FFF800007FFF80000000000007FFF8000
+07FFF00000000000007FFF80000FFFF00000000000007FFF80000FFFF00000000000007F
+FF00000FFFF00000000000007FFF00000FFFE0000000000000FFFF00001FFFE000000000
+0000FFFF00001FFFE0000000000000FFFE00001FFFE0000000000000FFFE00001FFFC000
+0000000001FFFE00003FFFC0000000000001FFFE00003FFFC0000000000001FFFC00003F
+FF80000000000001FFFC00003FFF80000000000003FFFC00007FFF80000000000003FFFC
+00007FFF80000000000003FFF800007FFF00000000000003FFF800007FFF000000000000
+03FFF80000FFFF00000000000007FFF80000FFFF00000000000007FFF00000FFFE002000
+00000007FFF00000FFFE00780000000007FFF00001FFFE00F0000000000FFFF00001FFFE
+00E0000000000FFFE00001FFFC01E0000000000FFFE00001FFFC03C0000000000FFFE000
+03FFFC0780000000000FFFE00003FFFC0F80000000001FFFC00003FFFC1F00000000001F
+FFC00003FFFE3E00000000001FFFC00003FFFFFC00000000001FFFC00003FFFFFC000000
+00003FFF800003FFFFF800000000003FFF800003FFFFF000000000003FFF800001FFFFE0
+00000000003FFF800001FFFFC000000000007FFF000000FFFF0000000000007FFF000000
+7FFE0000000000007FFF0000001FF00000000000007FFE00000000000000000000007FFE
+0000000000000000000000FFFC0000000000000000000000FFFC00000000000000000000
+00FFFC0000000000000000000000FFF80000000000000000000001FFF800000000000000
+00000001FFF00000000000000000030001FFF000000000000000001FE001FFE000000000
+000000003FF003FFE000000000000000007FF803FFC000000000000000007FF803FFC000
+00000000000000FFF807FF800000000000000000FFF807FF000000000000000000FFF807
+FF000000000000000000FFF80FFE000000000000000000FFF80FFC000000000000000000
+FFF01FF80000000000000000007FE01FF00000000000000000007FE03FE0000000000000
+0000003FF07FC00000000000000000001FFFFF800000000000000000000FFFFE00000000
+00000000000003FFF800000000000000000000007FC000000000000000000000627999DD
+4A>3 D<FC0000000FE0FE0000001FE07F0000007FC07F800000FF803FC00003FF003FE0
+0007FE001FF0000FFC001FF8003FF8000FFC007FF0000FFE01FFE00007FF03FFC00007FF
+87FF800003FFDFFF000003FFFFFE000001FFFFFC000001FFFFF8000000FFFFF8000000FF
+FFF00000007FFFE00000007FFFC00000003FFF800000003FFF000000001FFE0000002B17
+75DB2C>16 D<060000001FC000003FE000007FF800007FF80000FFFC0000FFFE0000FFFF
+00007FFF00007FFF80003FFFC0001FFFE00007FFE00003FFF00000FFF800007FFC00001F
+FC00000FFE000003FF000001FF8000007F8000003FC000000FE0000007F01C1875DC2C>
+30 D<000FF000003FFC00007FFE0000FFFF0000FFFF8001FFFF8001FFFFC001FFFFC003
+FFFFC003FFFFE003FFFFE001FFFFE001FFFFE001FFFFE000FFFFE0007FFFE0003FFFE000
+1FFFC0000FFFC00003FFC00001FF800000FF800000FF800000FF000000FE000000FE0000
+01FC000001F8000003F8000007F000000FE000001FC000003F8000007F000001FC000003
+F800000FF000003FC000007F800000FE00000078000000600000001B2A73DA2C>39
+D<03F8000FFE001FFF003FFF807FFFC07FFFE0FFFFE0FFFFE0FFFFE0FFFFF0FFFFF0FFFF
+E0FFFFE0FFFFE07FFFC07FFFC03FFF801FFF000FFE0001F0001414819121>46
+D<00003FFFFFFFFFFF800000000000003FFFFFFFFFFFFC0000000000003FFFFFFFFFFFFF
+C000000000001FFFFFFFFFFFFFF80000000000007FFFFFF007FFFE0000000000001FFFFF
+C0007FFF8000000000000FFFFF80001FFFC000000000000FFFFF800007FFF00000000000
+0FFFFF000003FFF800000000000FFFFF000001FFFC00000000000FFFFF000000FFFE0000
+0000000FFFFF0000007FFF00000000000FFFFE0000003FFF80000000001FFFFE0000003F
+FFC0000000001FFFFE0000001FFFE0000000001FFFFE0000001FFFE0000000001FFFFC00
+00001FFFF0000000003FFFFC0000000FFFF8000000003FFFFC0000000FFFF8000000003F
+FFF80000000FFFFC000000003FFFF80000000FFFFC000000007FFFF800000007FFFC0000
+00007FFFF800000007FFFE000000007FFFF000000007FFFE000000007FFFF000000007FF
+FE00000000FFFFF000000007FFFF00000000FFFFF000000007FFFF00000000FFFFE00000
+0007FFFF00000001FFFFE000000007FFFF00000001FFFFE000000007FFFF80000001FFFF
+E000000007FFFF80000001FFFFC000000007FFFF80000003FFFFC000000007FFFF800000
+03FFFFC000000007FFFF80000003FFFF8000000007FFFF80000003FFFF8000000007FFFF
+80000007FFFF8000000007FFFF80000007FFFF800000000FFFFF80000007FFFF00000000
+0FFFFF8000000FFFFF000000000FFFFF8000000FFFFF000000000FFFFF8000000FFFFF00
+0000000FFFFF8000000FFFFE000000000FFFFF8000001FFFFE000000000FFFFF8000001F
+FFFE000000001FFFFF0000001FFFFC000000001FFFFF0000001FFFFC000000001FFFFF00
+00003FFFFC000000001FFFFF0000003FFFFC000000001FFFFF0000003FFFF8000000003F
+FFFE0000007FFFF8000000003FFFFE0000007FFFF8000000003FFFFE0000007FFFF80000
+00003FFFFC0000007FFFF0000000007FFFFC000000FFFFF0000000007FFFFC000000FFFF
+F0000000007FFFF8000000FFFFE000000000FFFFF8000000FFFFE000000000FFFFF00000
+01FFFFE000000001FFFFF0000001FFFFE000000001FFFFF0000001FFFFC000000001FFFF
+E0000003FFFFC000000003FFFFC0000003FFFFC000000003FFFFC0000003FFFFC0000000
+07FFFF80000003FFFF8000000007FFFF80000007FFFF800000000FFFFF00000007FFFF80
+0000000FFFFE00000007FFFF800000001FFFFC00000007FFFF000000001FFFFC0000000F
+FFFF000000003FFFF80000000FFFFF000000007FFFF00000000FFFFE00000000FFFFE000
+00001FFFFE00000000FFFFC00000001FFFFE00000001FFFF800000001FFFFE00000003FF
+FF000000001FFFFC00000007FFFC000000003FFFFC0000000FFFF8000000003FFFFC0000
+001FFFF0000000003FFFFC0000007FFFC0000000007FFFFC000000FFFF80000000007FFF
+FC000003FFFE0000000000FFFFFC00000FFFF80000000001FFFFFC00003FFFE000000000
+03FFFFFE0001FFFF800000000007FFFFFF801FFFFE00000000007FFFFFFFFFFFFFF00000
+000000FFFFFFFFFFFFFF800000000000FFFFFFFFFFFFF8000000000000FFFFFFFFFFFE00
+000000000000615986D860>68 D<00003FFFFFFFFFC000003FFFFFFFFFC000003FFFFFFF
+FFC000001FFFFFFFFFC00000007FFFFFF8000000001FFFFFE0000000000FFFFFC0000000
+000FFFFF80000000000FFFFF80000000000FFFFF00000000000FFFFF00000000000FFFFF
+00000000000FFFFE00000000001FFFFE00000000001FFFFE00000000001FFFFC00000000
+001FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFF800000000003FFFF8
+00000000007FFFF800000000007FFFF000000000007FFFF000000000007FFFF000000000
+00FFFFF00000000000FFFFE00000000000FFFFE00000000001FFFFE00000000001FFFFE0
+0000000001FFFFC00000000001FFFFC00000000003FFFFC00000000003FFFF8000000000
+03FFFF800000000003FFFF800000000007FFFF800000000007FFFF000000000007FFFF00
+000000000FFFFF00000000000FFFFF00000000000FFFFE00000000000FFFFE0000000000
+1FFFFE00000000001FFFFC00000000001FFFFC00000000003FFFFC00000000003FFFFC00
+000000003FFFF800000000003FFFF800000000007FFFF800000000007FFFF80000000000
+7FFFF000000000007FFFF00000000000FFFFF00000000000FFFFF00000000000FFFFE000
+00000001FFFFE00000000001FFFFE00000000001FFFFC00000000001FFFFC00000000003
+FFFFC00000000003FFFFC00000000003FFFF800000000003FFFF800000000007FFFF8000
+00000007FFFF800000000007FFFF00000000000FFFFF00000000000FFFFF00000000000F
+FFFE00000000000FFFFE00000000001FFFFE00000000001FFFFE00000000001FFFFC0000
+0000001FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000007F
+FFFC00000000007FFFFC0000000000FFFFFC0000000001FFFFFC0000000003FFFFFE0000
+000007FFFFFFC00000007FFFFFFFFE000000FFFFFFFFFE000000FFFFFFFFFE000000FFFF
+FFFFFE0000003A5984D834>73 D<000001FFC0000000000001FFE0000000000003FFE000
+0000000003FFF0000000000007FFF0000000000007FFF800000000000FFFF80000000000
+0FFFFC00000000001FFFFC00000000001FFFFE00000000003FFFFE00000000003FFFFF00
+000000007FFFFF00000000007FF7FF8000000000FFF3FF8000000000FFE3FFC000000000
+FFE1FFC000000001FFC1FFE000000001FFC0FFE000000003FFC0FFF000000003FF807FF0
+00000007FF807FF800000007FF003FF80000000FFF003FFC0000000FFE001FFC0000001F
+FE001FFE0000001FFC000FFE0000003FFC000FFF0000003FF8000FFF0000007FF80007FF
+8000007FF00007FF800000FFF00003FF800000FFE00003FFC00001FFE00001FFC00001FF
+C00001FFE00003FFC00000FFE00003FF800000FFF00007FF8000007FF00007FF8000007F
+F8000FFF0000003FF8000FFF0000003FFC001FFE0000001FFC001FFE0000001FFE003FFC
+0000000FFE003FFC0000000FFF007FF800000007FF007FF800000007FF80FFF000000007
+FF80FFF000000003FFC03A3177D84C>94 D<000000003E00000000000003FFC000020000
+000FFFE07FFE0000003FFFF0FFFE000000FFFFF0FFFE000001FFFFF8FFFC000007FFF0F9
+FFFC00000FFFC07DFFFC00001FFF803DFFF800003FFF003DFFF800007FFE001FFFF80000
+FFFC001FFFF00001FFF8001FFFF00003FFF8001FFFF00007FFF0001FFFF0000FFFE0001F
+FFE0000FFFE0003FFFE0001FFFC0003FFFE0003FFFC0003FFFC0007FFF80003FFFC0007F
+FF80003FFFC000FFFF00003FFF8001FFFE00007FFF8001FFFE00007FFF8003FFFE00007F
+FF0003FFFC00007FFF0007FFFC0000FFFF0007FFF80000FFFF000FFFF80000FFFE000FFF
+F00000FFFE000FFFF00001FFFE001FFFF00001FFFC001FFFE00001FFFC003FFFE00003FF
+FC003FFFE00003FFFC003FFFC00003FFF8007FFFC00007FFF8007FFFC00007FFF8007FFF
+80000FFFF8007FFF80000FFFF0007FFF80000FFFF000FFFF80001FFFF000FFFF00001FFF
+F000FFFF00003FFFE000FFFF00003FFFE000FFFF00007FFFE008FFFF0000FFFFE00EFFFF
+0000FFFFE01EFFFF0001EFFFC03EFFFF0003DFFFC07CFFFF8003DFFFC078FFFF80079FFF
+C0F07FFFC00F3FFFC1F07FFFE03F3FFFC3E07FFFF8FE3FFFCFC03FFFFFFC3FFFFF803FFF
+FFF83FFFFF001FFFFFF03FFFFE000FFFFFE01FFFFC000FFFFFC01FFFF80007FFFF800FFF
+F00001FFFE0007FFE000007FF80003FF8000000F8000007C00003F4083BD42>97
+D<000000001F800000000003FFF8000000000FFFFE000000007FFFFF80000001FFE3FFC0
+000003FF81FFE000000FFF00FFE000001FFE00FFF000003FFC00FFF000007FF801FFF800
+01FFF003FFF80003FFE003FFF80007FFE003FFF8000FFFC007FFF8000FFFC007FFF8001F
+FF8007FFF8003FFF0007FFF0007FFF0003FFF000FFFE0003FFE000FFFE0001FFE001FFFE
+0000FF8001FFFC00003E0003FFFC0000000007FFF80000000007FFF8000000000FFFF800
+0000000FFFF0000000001FFFF0000000001FFFF0000000001FFFE0000000003FFFE00000
+00003FFFE0000000003FFFC0000000007FFFC0000000007FFFC0000000007FFFC0000000
+007FFFC0000000007FFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000
+FFFF8000000000FFFF8000000000FFFF8000001000FFFF8000003800FFFF8000003E00FF
+FF8000007C00FFFFC00000FC007FFFC00001F8007FFFC00003F0007FFFE00007E0007FFF
+F0000FE0003FFFF8001FC0003FFFFC007F80001FFFFF83FF00001FFFFFFFFE00000FFFFF
+FFFC000007FFFFFFF8000003FFFFFFF0000001FFFFFFC00000007FFFFF800000001FFFFE
+0000000007FFF000000000007F00000000354081BD3B>99 D<0000000000000000030000
+0000000000007E000000000000001FFE0000000000003FFFFE00000000000FFFFFFC0000
+0000000FFFFFFC00000000000FFFFFFC00000000000FFFFFFC0000000000003FFFF80000
+000000001FFFF80000000000000FFFF80000000000000FFFF80000000000000FFFF00000
+000000000FFFF00000000000000FFFF00000000000001FFFE00000000000001FFFE00000
+000000001FFFE00000000000001FFFE00000000000003FFFC00000000000003FFFC00000
+000000003FFFC00000000000003FFFC00000000000007FFF800000000000007FFF800000
+000000007FFF80000000000000FFFF00000000000000FFFF00000000000000FFFF000000
+00000000FFFF00000000000001FFFE00000000000001FFFE0000000001FF81FFFE000000
+000FFFE1FFFE000000003FFFF3FFFC000000007FFFFBFFFC00000001FFFFFFFFFC000000
+03FFF8FFFFF80000000FFFE03FFFF80000001FFF801FFFF80000003FFF001FFFF8000000
+7FFE000FFFF0000000FFFC000FFFF0000001FFF8000FFFF0000003FFF8000FFFF0000007
+FFF0000FFFE0000007FFE0000FFFE000000FFFE0000FFFE000001FFFC0001FFFC000003F
+FFC0001FFFC000003FFF80001FFFC000007FFF80001FFFC00000FFFF00003FFF800000FF
+FF00003FFF800001FFFE00003FFF800001FFFE00003FFF000003FFFC00007FFF000003FF
+FC00007FFF000007FFF800007FFF000007FFF80000FFFE00000FFFF80000FFFE00000FFF
+F00000FFFE00001FFFF00001FFFC00001FFFF00001FFFC00001FFFE00003FFFC00003FFF
+E00003FFFC00003FFFE00003FFF800003FFFC00007FFF800007FFFC00007FFF800007FFF
+C0000FFFF800007FFFC0000FFFF000007FFF80001FFFF000007FFF80001FFFF000007FFF
+80001FFFE00000FFFF80003FFFE00000FFFF80007FFFE00000FFFF80007FFFE01800FFFF
+8000FFFFC01C00FFFF8000FFFFC03C00FFFF8001EFFFC07C00FFFF8003CFFFC0F800FFFF
+C007DFFF80F0007FFFC00F9FFF81E0007FFFE03F1FFF83E0007FFFF8FF1FFF87C0003FFF
+FFFE1FFFFF80003FFFFFFC1FFFFF00003FFFFFF81FFFFE00001FFFFFF01FFFFE00000FFF
+FFE01FFFFC000007FFFFC00FFFF0000003FFFF800FFFE0000001FFFE0007FFC00000007F
+F80001FF000000000F80000000000000485F83DC42>I<000000001F800000000003FFF0
+000000001FFFFC000000007FFFFF00000001FFC7FF80000007FF01FFC000000FFE01FFC0
+00001FFC00FFE000007FF800FFE00000FFF000FFF00001FFF000FFF00003FFE000FFF000
+07FFC000FFF0000FFFC000FFF0001FFF8001FFF0003FFF8001FFF0003FFF0001FFE0007F
+FF0003FFE000FFFF0003FFE000FFFE0003FFC001FFFE0007FF8003FFFC000FFF8003FFFC
+000FFF0007FFFC001FFE0007FFF8003FFC000FFFF8007FF8000FFFF800FFF0001FFFF001
+FFE0001FFFF003FFC0001FFFF00FFF80003FFFE01FFE00003FFFE0FFF800003FFFE3FFF0
+00007FFFFFFF8000007FFFFFFE0000007FFFFFF00000007FFFFF000000007FFFE0000000
+00FFFFC000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000
+FFFF8000004000FFFF800000E000FFFF800001F800FFFF800001F000FFFF800003F000FF
+FF800007E0007FFFC0000FC0007FFFC0001FC0007FFFE0003F80003FFFE0007F00003FFF
+F801FE00001FFFFE0FFE00001FFFFFFFFC00000FFFFFFFF8000007FFFFFFF0000003FFFF
+FFC0000001FFFFFF80000000FFFFFF000000003FFFFC000000000FFFF000000000007E00
+00000034407FBD3B>I<0000000000000001FF0000000000000000000FFFE00000000000
+0000007FFFF80000000000000000FFFFFC0000000000000003FFC7FE0000000000000007
+FF03FF000000000000000FFE03FF000000000000001FFC07FF000000000000003FFC07FF
+800000000000007FF80FFF80000000000000FFF00FFF80000000000001FFF00FFF800000
+00000001FFE00FFF80000000000003FFE00FFF80000000000007FFE007FF000000000000
+07FFC007FF0000000000000FFFC003FE0000000000000FFFC000F80000000000001FFF80
+00000000000000001FFF8000000000000000003FFF8000000000000000003FFF00000000
+00000000007FFF0000000000000000007FFF0000000000000000007FFF00000000000000
+0000FFFE000000000000000000FFFE000000000000000000FFFE000000000000000001FF
+FE000000000000000001FFFC000000000000000001FFFC000000000000000001FFFC0000
+00000000000003FFF8000000000000000FFFFFFFFF8000000000000FFFFFFFFF80000000
+00000FFFFFFFFF8000000000000FFFFFFFFF8000000000001FFFFFFFFF8000000000001F
+FFFFFFFF0000000000000007FFF0000000000000000007FFF000000000000000000FFFF0
+00000000000000000FFFF000000000000000000FFFE000000000000000000FFFE0000000
+00000000001FFFE000000000000000001FFFE000000000000000001FFFE0000000000000
+00001FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003F
+FFC000000000000000003FFFC000000000000000003FFF8000000000000000007FFF8000
+000000000000007FFF8000000000000000007FFF8000000000000000007FFF0000000000
+00000000FFFF000000000000000000FFFF000000000000000000FFFF0000000000000000
+00FFFF000000000000000000FFFE000000000000000001FFFE000000000000000001FFFE
+000000000000000001FFFE000000000000000001FFFC000000000000000003FFFC000000
+000000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000000
+000003FFF8000000000000000007FFF8000000000000000007FFF8000000000000000007
+FFF8000000000000000007FFF000000000000000000FFFF000000000000000000FFFF000
+000000000000000FFFF000000000000000000FFFE000000000000000001FFFE000000000
+000000001FFFE000000000000000001FFFE000000000000000001FFFC000000000000000
+001FFFC000000000000000003FFFC000000000000000003FFF8000000000000000003FFF
+8000000000000000003FFF8000000000000000003FFF0000000000000000007FFF000000
+0000000000007FFF0000000000000000007FFE0000000000000000007FFE000000000000
+000000FFFE000000000000000000FFFC000000000000000000FFFC000000000000000000
+FFFC000000000000000000FFF8000000000000000001FFF8000000000000000001FFF000
+0000000000000001FFF0000000000000000001FFF00000000000001FC003FFE000000000
+00003FE003FFE00000000000007FF003FFC00000000000007FF007FFC0000000000000FF
+F807FF80000000000000FFF807FF00000000000000FFF80FFF00000000000000FFF80FFE
+00000000000000FFF01FFC00000000000000FFF01FF8000000000000007FE03FF0000000
+000000007FE07FE0000000000000003FE0FFC0000000000000001FFFFF80000000000000
+000FFFFE000000000000000007FFF8000000000000000000FFC000000000000000005178
+96DC2C>I<000000000180000000000000003F800000000000000FFF0000000000000FFF
+FF000000000007FFFFFF000000000007FFFFFF000000000007FFFFFE000000000007FFFF
+FE0000000000000FFFFE00000000000007FFFE00000000000003FFFC00000000000003FF
+FC00000000000003FFFC00000000000003FFFC00000000000003FFF800000000000007FF
+F800000000000007FFF800000000000007FFF800000000000007FFF00000000000000FFF
+F00000000000000FFFF00000000000000FFFF00000000000001FFFE00000000000001FFF
+E00000000000001FFFE00000000000001FFFE00000000000003FFFC00000000000003FFF
+C00000000000003FFFC00000000000003FFFC00000000000007FFF800000000000007FFF
+80000F800000007FFF8000FFF0000000FFFF0003FFFC000000FFFF0007FFFE000000FFFF
+001FFFFE000000FFFF003FFFFF000001FFFE007FFFFF000001FFFE00FFFFFF800001FFFE
+01FFFFFF800001FFFE03FFFFFF800003FFFC07F1FFFF800003FFFC0FC0FFFF800003FFFC
+0F807FFF800007FFFC1F007FFF800007FFF83E007FFF800007FFF87C00FFFF000007FFF8
+7800FFFF00000FFFF8F000FFFF00000FFFF1E001FFFF00000FFFF3C001FFFE00000FFFF3
+C001FFFE00001FFFF78003FFFE00001FFFEF0003FFFC00001FFFFF0003FFFC00003FFFFE
+0007FFFC00003FFFFC0007FFFC00003FFFFC0007FFF800003FFFF8000FFFF800007FFFF0
+000FFFF800007FFFF0000FFFF000007FFFE0001FFFF000007FFFE0001FFFF00000FFFFC0
+001FFFE00000FFFFC0003FFFE00000FFFF80003FFFE00001FFFF80003FFFC00001FFFF80
+007FFFC00001FFFF00007FFFC00001FFFF00007FFF800003FFFE0000FFFF800003FFFE00
+00FFFF800003FFFE0000FFFF000003FFFC0000FFFF000007FFFC0001FFFF004007FFFC00
+01FFFE00E007FFF80001FFFE00F00FFFF80003FFFE01E00FFFF80003FFFC03E00FFFF000
+03FFFC07C00FFFF00003FFFC07801FFFF00007FFF80F801FFFE00007FFF81F001FFFE000
+07FFF83E001FFFE00007FFFC7C003FFFE00007FFFFF8003FFFC00007FFFFF8003FFFC000
+07FFFFF0007FFFC00007FFFFE0007FFF800003FFFFC0007FFF800003FFFF80007FFF8000
+01FFFE0000FFFF000000FFF8000000000000003FE00000445E82DC4A>104
+D<000001F800000007FE0000000FFF0000001FFF8000003FFFC000003FFFC000007FFFE0
+00007FFFE000007FFFE000007FFFE000007FFFE000007FFFE000003FFFC000003FFFC000
+001FFF8000000FFF00000007FE00000001F8000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000780000001FF800000FFFF8001FFFFFF8001FFFFFF0001FFFFFF0
+001FFFFFF00000FFFFE000003FFFE000003FFFE000003FFFE000003FFFC000003FFFC000
+003FFFC000003FFFC000003FFF8000003FFF8000007FFF8000007FFF0000007FFF000000
+7FFF000000FFFF000000FFFE000000FFFE000001FFFE000001FFFE000001FFFC000001FF
+FC000003FFFC000003FFF8000003FFF8000003FFF8000007FFF8000007FFF0000007FFF0
+00000FFFF000000FFFF000000FFFE000000FFFE000001FFFE000001FFFC000001FFFC000
+001FFFC000003FFFC00E003FFF801E003FFF803E007FFF803C007FFF8078007FFF00F800
+7FFF01F000FFFF01E000FFFF03C000FFFF8FC000FFFFFF8000FFFFFF0000FFFFFE0000FF
+FFFC00007FFFF800007FFFF000003FFFE000001FFF80000007FC000000235C80DA25>I<
+000000000400000001FC0000007FFC00007FFFFC003FFFFFF8003FFFFFF8003FFFFFF800
+3FFFFFF000007FFFF000001FFFF000001FFFF000001FFFE000001FFFE000001FFFE00000
+1FFFE000003FFFC000003FFFC000003FFFC000003FFF8000003FFF8000007FFF8000007F
+FF8000007FFF0000007FFF000000FFFF000000FFFE000000FFFE000001FFFE000001FFFE
+000001FFFC000001FFFC000003FFFC000003FFFC000003FFF8000003FFF8000007FFF800
+0007FFF0000007FFF000000FFFF000000FFFF000000FFFE000000FFFE000001FFFE00000
+1FFFE000001FFFC000003FFFC000003FFFC000003FFF8000003FFF8000007FFF8000007F
+FF8000007FFF000000FFFF000000FFFF000000FFFE000000FFFE000001FFFE000001FFFE
+000001FFFC000003FFFC000003FFFC000003FFFC000003FFF8000007FFF8000007FFF800
+0007FFF000000FFFF000000FFFF000000FFFF000000FFFE000001FFFE000001FFFE00000
+1FFFC000001FFFC000003FFFC000003FFFC00E003FFF801E003FFF803E007FFF803C007F
+FF8078007FFF00F8007FFF01F000FFFF01E000FFFF03C000FFFF8FC000FFFFFF8000FFFF
+FF0000FFFFFE0000FFFFFC00007FFFF800007FFFF000003FFFE000001FFF80000007FC00
+0000265E80DC25>108 D<0000000000001F0000003E0000000000038000FFE00001FFC0
+000000007F8003FFF00007FFF00000007FFF000FFFF8001FFFF80001FFFFFF001FFFFC00
+3FFFF80001FFFFFF003FFFFC007FFFFC0001FFFFFE00FFFFFE01FFFFFC0001FFFFFE01FF
+FFFE01FFFFFE00000FFFFE03FFFFFE03FFFFFE000007FFFC07FFFFFE07FFFFFE000003FF
+FC0FE7FFFE0FE7FFFE000003FFFC0F83FFFE1F81FFFE000003FFF81F01FFFE3E01FFFE00
+0007FFF83E01FFFE3C01FFFE000007FFF87C01FFFC7801FFFE000007FFF0F801FFFCF001
+FFFE000007FFF0F003FFFDF001FFFC000007FFF1E003FFF9E003FFFC00000FFFE3C003FF
+FBC003FFFC00000FFFE38003FFFB8003FFFC00000FFFE78007FFF78007FFFC00001FFFCF
+0007FFFF0007FFF800001FFFCE0007FFEE0007FFF800001FFFDE000FFFFE000FFFF80000
+1FFFBC000FFFFC000FFFF000003FFFBC000FFFFC000FFFF000003FFFF8001FFFF8001FFF
+F000003FFFF0001FFFF8001FFFE000003FFFF0001FFFF0001FFFE000007FFFE0003FFFE0
+003FFFE000007FFFE0003FFFE0003FFFC000007FFFE0003FFFC0003FFFC00000FFFFC000
+7FFFC0007FFFC00000FFFFC0007FFF80007FFF800000FFFF80007FFF80007FFF800000FF
+FF8000FFFF8000FFFF800001FFFF0000FFFF0000FFFF000001FFFF0000FFFF0000FFFF00
+0001FFFF0001FFFF0001FFFF000003FFFE0001FFFE0001FFFE000003FFFE0001FFFE0001
+FFFE000003FFFE0001FFFC0003FFFE000003FFFC0003FFFC0003FFFC000007FFFC0003FF
+FC0003FFFC000007FFFC0003FFF80003FFFC010007FFF80007FFF80007FFF8038007FFF8
+0007FFF80007FFF807800FFFF80007FFF80007FFF807800FFFF0000FFFF00007FFF80F00
+0FFFF0000FFFF00007FFF01F001FFFF0000FFFF0000FFFF01E001FFFE0001FFFE0000FFF
+F03C001FFFE0001FFFE0000FFFF07C001FFFE0001FFFE0000FFFF0F8003FFFC0003FFFC0
+000FFFFFF0003FFFC0003FFFC0000FFFFFE0003FFFC0003FFFC0000FFFFFC0007FFF8000
+3FFF80000FFFFFC0007FFF80007FFF800007FFFF00007FFF80007FFF800007FFFE00007F
+FF80007FFF800003FFFC0000FFFF0000FFFF000001FFF000000000000000000000007FC0
+0000613F82BD67>I<0000000000001F8000000000078000FFF000000001FF8003FFF800
+0003FFFF000FFFFC0001FFFFFF001FFFFE0001FFFFFF003FFFFE0001FFFFFE007FFFFE00
+01FFFFFE00FFFFFF00001FFFFE01FFFFFF000007FFFC03FFFFFF000003FFFC07E3FFFF00
+0003FFFC0F81FFFF000003FFF81F00FFFF000007FFF83C00FFFF000007FFF87800FFFF00
+0007FFF07801FFFE000007FFF0F001FFFE00000FFFF1E001FFFE00000FFFE1C003FFFE00
+000FFFE38003FFFC00000FFFE78003FFFC00001FFFCF0007FFFC00001FFFCE0007FFFC00
+001FFFDE0007FFF800001FFFBC000FFFF800003FFFBC000FFFF800003FFFF8000FFFF000
+003FFFF8001FFFF000007FFFF0001FFFF000007FFFF0001FFFE000007FFFE0003FFFE000
+007FFFE0003FFFE00000FFFFC0003FFFC00000FFFFC0007FFFC00000FFFF80007FFFC000
+01FFFF80007FFF800001FFFF0000FFFF800001FFFF0000FFFF800001FFFF0000FFFF0000
+03FFFE0000FFFF000003FFFE0001FFFF000003FFFE0001FFFE000007FFFC0001FFFE0000
+07FFFC0003FFFE000007FFFC0003FFFC010007FFF80003FFFC01C00FFFF80003FFF803C0
+0FFFF80007FFF807800FFFF00007FFF807800FFFF00007FFF00F001FFFF00007FFF01F00
+1FFFE0000FFFF03E001FFFE0000FFFF03C003FFFE0000FFFF8F8003FFFC0000FFFFFF800
+3FFFC0000FFFFFF0003FFFC0000FFFFFE0007FFFC0000FFFFFC0007FFF800007FFFF8000
+7FFF800007FFFF00007FFF800003FFFC0000FFFF000001FFF8000000000000007FC00000
+423F81BD4A>I<000000003F80000000000003FFF800000000001FFFFF0000000000FFFF
+FFC000000001FFE3FFE000000007FF00FFF00000001FFE007FF80000003FFC003FFC0000
+007FF8003FFE000000FFF0001FFF000001FFE0001FFF000003FFC0001FFF800007FFC000
+1FFF80000FFF80001FFFC0001FFF80001FFFC0003FFF00001FFFC0007FFF00001FFFE000
+7FFE00001FFFE000FFFE00001FFFE001FFFC00003FFFE001FFFC00003FFFE003FFFC0000
+3FFFE003FFF800003FFFE007FFF800003FFFE007FFF800003FFFE00FFFF000007FFFE00F
+FFF000007FFFE01FFFF000007FFFC01FFFF000007FFFC03FFFE00000FFFFC03FFFE00000
+FFFFC03FFFE00000FFFFC03FFFE00000FFFF807FFFC00001FFFF807FFFC00001FFFF807F
+FFC00001FFFF007FFFC00001FFFF007FFFC00003FFFF00FFFF800003FFFE00FFFF800003
+FFFE00FFFF800007FFFC00FFFF800007FFFC00FFFF800007FFF800FFFF80000FFFF800FF
+FF80000FFFF000FFFF00001FFFE000FFFF00001FFFE000FFFF00003FFFC000FFFF00003F
+FF80007FFF00003FFF00007FFF00007FFE00007FFF0000FFFC00003FFF0000FFFC00003F
+FF0001FFF000001FFF0001FFE000000FFF0003FFC000000FFF8007FF80000007FF800FFF
+00000003FFC03FFC00000001FFF0FFF0000000007FFFFFC0000000001FFFFF0000000000
+07FFF80000000000007F00000000003B4080BD42>I<000000000000003F000000000000
+01F003FFE000000000007FF00FFFF8000000003FFFF01FFFFC0000001FFFFFE03FFFFE00
+00001FFFFFE0FFFFFF0000001FFFFFE1FFFFFF8000001FFFFFC3FFFFFF80000000FFFFC7
+FFFFFFC00000003FFFC7FFFFFFC00000003FFF8FE1FFFFC00000003FFF9F807FFFE00000
+003FFFBE003FFFE00000003FFF7C003FFFE00000003FFF78003FFFE00000003FFFF0001F
+FFE00000007FFFF0001FFFE00000007FFFE0001FFFE00000007FFFC0001FFFE00000007F
+FFC0003FFFE0000000FFFF80003FFFE0000000FFFF00003FFFE0000000FFFF00003FFFE0
+000000FFFF00003FFFE0000001FFFE00003FFFE0000001FFFE00007FFFC0000001FFFE00
+007FFFC0000003FFFC00007FFFC0000003FFFC00007FFFC0000003FFFC0000FFFF800000
+03FFF80000FFFF80000007FFF80000FFFF80000007FFF80000FFFF00000007FFF00001FF
+FF00000007FFF00001FFFF0000000FFFF00001FFFE0000000FFFE00003FFFE0000000FFF
+E00003FFFC0000000FFFE00003FFFC0000001FFFE00007FFFC0000001FFFC00007FFF800
+00001FFFC0000FFFF00000001FFFC0000FFFF00000003FFF80001FFFE00000003FFF8000
+1FFFE00000003FFF80003FFFC00000003FFF80003FFF800000007FFF00007FFF80000000
+7FFF00007FFF000000007FFF0000FFFE000000007FFF0000FFFC00000000FFFE0001FFF8
+00000000FFFE0003FFF000000000FFFE0003FFF000000000FFFE0007FFC000000001FFFE
+000FFF8000000001FFFE001FFF0000000001FFFF003FFE0000000003FFFF80FFFC000000
+0003FFFFE3FFF00000000003FFFFFFFFC00000000003FFF9FFFF000000000007FFF87FFC
+000000000007FFF80FC0000000000007FFF00000000000000007FFF0000000000000000F
+FFF0000000000000000FFFF0000000000000000FFFE0000000000000000FFFE000000000
+0000001FFFE0000000000000001FFFE0000000000000001FFFC0000000000000001FFFC0
+000000000000003FFFC0000000000000003FFFC0000000000000003FFF80000000000000
+003FFF80000000000000007FFF80000000000000007FFF8000000000000000FFFF800000
+0000000000FFFF8000000000000000FFFF8000000000000001FFFF8000000000000007FF
+FFE0000000000000FFFFFFFF800000000000FFFFFFFF800000000000FFFFFFFF80000000
+0000FFFFFFFF8000000000004B5990BD42>I<0000000000078000000003803FE0000000
+FF807FF00000FFFF00FFF801FFFFFF01FFFC01FFFFFF03FFFC01FFFFFE07FFFC003FFFFE
+0FFFFE0007FFFE1FFFFE0003FFFC1FFFFE0003FFFC3FFFFE0003FFFC7FFFFE0003FFF87F
+FFFC0007FFF8FDFFFC0007FFF8F8FFFC0007FFF1F07FF80007FFF1E03FF00007FFF3C01F
+E0000FFFF7C00FC0000FFFE7800000000FFFEF000000000FFFEF000000001FFFDE000000
+001FFFDE000000001FFFFC000000001FFFB8000000003FFFF8000000003FFFF000000000
+3FFFF0000000003FFFE0000000007FFFE0000000007FFFC0000000007FFFC000000000FF
+FFC000000000FFFF8000000000FFFF8000000000FFFF8000000001FFFF0000000001FFFF
+0000000001FFFE0000000003FFFE0000000003FFFE0000000003FFFC0000000003FFFC00
+00000007FFFC0000000007FFFC0000000007FFF8000000000FFFF8000000000FFFF80000
+00000FFFF0000000000FFFF0000000001FFFF0000000001FFFE0000000001FFFE0000000
+003FFFE0000000003FFFC0000000003FFFC0000000003FFFC0000000007FFF8000000000
+7FFF80000000007FFF8000000000FFFF0000000000373E83BD34>114
+D<000001F0003C00001FFF003C0000FFFFC07C0001FFFFFFFC0007FFC3FFFC000FFF00FF
+F8000FFE003FF8001FFC001FF8003FFC001FF8003FF8000FF8007FF80007F8007FF80007
+F8007FF80007F000FFF80003F000FFF80003F000FFFC0003F000FFFC0001F000FFFE0001
+F000FFFE0001F000FFFF0001E000FFFF8000E000FFFF80000000FFFFC00000007FFFE000
+00007FFFF00000007FFFF80000003FFFFC0000003FFFFC0000001FFFFE0000000FFFFF00
+00000FFFFF80000007FFFF80000003FFFFC0000001FFFFE0000001FFFFE0000000FFFFF0
+0000007FFFF00000003FFFF80000001FFFF80000001FFFFC0000000FFFFC00000007FFFC
+003C0003FFFE003C0003FFFE003C0001FFFE003E0000FFFE003E0000FFFE003E00007FFE
+007E00007FFE007F00007FFE007F00003FFC007F00003FFC007F80003FFC007F80003FF8
+007FC0003FF8007FE0007FF000FFE0007FE000FFF000FFE000FFFC01FFC000FFFF87FF00
+00FFFFFFFE0000F87FFFF80000F00FFFE00000E000FE0000002E4082BD34>I<00000007
+C00000000FC00000000F800000001F800000003F800000007F000000007F00000000FF00
+000001FF00000003FE00000007FE0000000FFE0000001FFE0000007FFC000000FFFC0000
+01FFFC000007FFF800001FFFF800007FFFF80001FFFFFFFC07FFFFFFFC07FFFFFFFC07FF
+FFFFFC07FFFFFFFC07FFFFFFFC000FFFE000001FFFE000001FFFE000001FFFC000003FFF
+C000003FFFC000003FFF8000003FFF8000007FFF8000007FFF8000007FFF000000FFFF00
+0000FFFF000000FFFF000000FFFE000001FFFE000001FFFE000001FFFC000003FFFC0000
+03FFFC000003FFFC000003FFF8000007FFF8000007FFF8000007FFF000000FFFF000000F
+FFF000000FFFF000000FFFE000001FFFE000001FFFE000001FFFE000003FFFC000003FFF
+C000003FFFC000003FFFC000007FFF801C007FFF803E007FFF803C007FFF8078007FFF00
+F800FFFF00F000FFFF01E000FFFF03E000FFFF07C000FFFF8F8000FFFFFF0000FFFFFE00
+00FFFFFC0000FFFFFC00007FFFF000007FFFE000003FFFC000001FFF00000007FC000000
+265081CE25>I<0000007C0000000000001FFC0001FFFE000FFFF80001FFFC1FFFFFF800
+01FFFC1FFFFFF80003FFFC1FFFFFF00003FFFC1FFFFFF00003FFF801FFFFF00007FFF800
+7FFFF00007FFF8003FFFE00007FFF0003FFFE0000FFFF0003FFFE0000FFFF0003FFFC000
+0FFFF0003FFFC0001FFFE0003FFFC0001FFFE0007FFF80001FFFE0007FFF80001FFFC000
+7FFF80003FFFC0007FFF80003FFFC000FFFF00003FFFC000FFFF00007FFF8000FFFF0000
+7FFF8001FFFE0000FFFF8001FFFE0000FFFF0001FFFE0000FFFF0001FFFC0001FFFF0003
+FFFC0001FFFF0003FFFC0001FFFE0003FFF80003FFFE0007FFF80003FFFE0007FFF80007
+FFFC0007FFF80007FFFC000FFFF0000FFFFC000FFFF0000FFFF8000FFFF0001FFFF8000F
+FFE0001FFFF8001FFFE0003FFFF8001FFFE0003FFFF0001FFFC0007FFFF0003FFFC0007F
+FFF0003FFFC000FFFFE0003FFFC001EFFFE0003FFF8003CFFFE0007FFF8003DFFFE0087F
+FF80079FFFC00C7FFF000F1FFFC01E7FFF001E3FFFC03CFFFF003E3FFFC03CFFFF007C3F
+FF8078FFFF00F83FFF80F8FFFF01F07FFF81F0FFFF87F07FFF83E0FFFFFFE07FFFC7C0FF
+FFFFC07FFFFFC0FFFFFF807FFFFF80FFFFFF007FFFFF007FFFFE007FFFFE007FFFFC007F
+FFFC003FFFF8003FFFF0003FFFF0003FFFE0001FFFC0000FFF800007FE000007FE00003F
+3E7EBC4A>I<000000000078000000780001FE00000FF80003FF0003FFF80007FF80FFFF
+FC0007FFC0FFFFFC000FFFC0FFFFFC000FFFC0FFFFFC000FFFE007FFFC000FFFE003FFFE
+000FFFE001FFFE000FFFE001FFFE000FFFE001FFFE0007FFE000FFFE0003FFE000FFFE00
+03FFC000FFFE0001FFC000FFFF0000FFC000FFFF00007FC0007FFF00007F80007FFF0000
+7F80007FFF00007F00007FFF00007F00007FFF00007F00007FFF0000FE00007FFF0000FE
+00007FFF0001FC00007FFF0001F800003FFF0003F800003FFF0003F000003FFF0007E000
+003FFF000FE000003FFF000FC000003FFF801F8000003FFF803F8000003FFF807F000000
+3FFF807E0000003FFF80FC0000003FFF81FC0000003FFF83F80000003FFF87F00000003F
+FF87E00000003FFF8FC00000003FFF9FC00000003FFFBF800000003FFFFF000000003FFF
+FE000000003FFFFC000000003FFFF8000000003FFFF0000000003FFFE0000000003FFFC0
+000000003FFF80000000003FFF00000000003FFE00000000003FFC00000000003FF80000
+0000003FF000000000007FE000000000007FC000000000007F8000000000007F00000000
+00007E0000000000007C00000000000078000000000033407EBD3B>I<00000000000380
+000380000078000007C0000FF0001FF8000007C0003FF807FFF800000FC0003FFCFFFFFC
+00001FC0007FFEFFFFFC00001FC0007FFEFFFFFC00003FC000FFFFFFFFFC00003FC000FF
+FF07FFFE00007FC000FFFF03FFFE00007FC000FFFF01FFFE0000FFC000FFFF01FFFE0001
+FFC0007FFF01FFFE0001FFE0007FFF00FFFE0003FFE0003FFE00FFFF0003FFE0003FFE00
+FFFF0007FFE0001FFE00FFFF0007FFE0000FFE007FFF000FFFE00007FC007FFF001FFFE0
+0007FC007FFF001FFFE00003F8007FFF003FFFE00003F8007FFF003FFFE00003F0007FFF
+007FFFF00003F0003FFF807FFFF00007E0003FFF80FFFFF00007E0003FFF80FFFFF00007
+C0003FFF81F7FFF0000FC0003FFF83F7FFF0001F80003FFF83E7FFF0001F00003FFF87E7
+FFF0003F00003FFF87C7FFF0007E00003FFF8FC7FFF0007C00003FFF8F87FFF000FC0000
+3FFF9F87FFF801F800003FFF9F07FFF803F000003FFFBE03FFF803F000003FFFFE03FFF8
+07E000003FFFFC03FFF80FC000001FFFFC03FFF81F8000001FFFF803FFF83F8000001FFF
+F803FFF87F0000001FFFF003FFF8FE0000001FFFF003FFF8FC0000001FFFE003FFFDF800
+00001FFFC003FFFFF80000001FFFC003FFFFF00000001FFF8003FFFFE00000001FFF8001
+FFFFC00000001FFF0001FFFF800000001FFE0001FFFF000000001FFE0001FFFE00000000
+1FFC0001FFFE000000001FFC0001FFFC000000001FF80001FFF8000000001FF00001FFF0
+000000001FF00001FFE0000000001FE00001FFC0000000001FC00001FF80000000001FC0
+0001FF00000000001F800000FE00000000001F000000FC00000000001F000000FC000000
+00001E000000F800000000001C000000F00000000050407EBD59>I<3FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8870C85A385>151 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fb cmtt10 10 10
+/Fb 10 118 df<78000000007800000000FC00000000FC00000000FE000000007E000000
+007F000000003F000000003F800000001F800000001FC00000000FC00000000FE0000000
+07E000000007E000000007F000000003F000000003F800000001F800000001FC00000000
+FC00000000FE000000007E000000007F000000003F000000003F800000001F800000001F
+800000001FC00000000FC00000000FE000000007E000000007F000000003F000000003F8
+00000001F800000001FC00000000FC00000000FC00000000FE000000007E000000007F00
+0000003F000000003F800000001F800000001FC00000000FC00000000FE000000007E000
+000007F000000003F000000003F000000003F800000001F800000001FC00000000FC0000
+0000FE000000007E000000007F000000003F000000003F800000001F800000001F800000
+000F00000000070021417BB92C>92 D<01FFF0000007FFFE00000FFFFF80001FFFFFC000
+3FFFFFE0003FFFFFF0003FC01FF8001F8007FC000F0001FC00060001FE00000000FE0000
+0000FE0000000FFE000007FFFE00007FFFFE0001FFFFFE0007FFFFFE000FFFFFFE001FFF
+F8FE003FFC00FE007FE000FE00FF8000FE00FF0000FE00FE0000FE00FE0000FE00FE0000
+FE00FF0001FE00FF0001FE007F8007FE003FE03FFE003FFFFFFFFC1FFFFFFFFE0FFFFFFF
+FE07FFFF3FFE01FFFC1FFE007FC00FFC27247CA32C>97 D<0003FE0000001FFFC000007F
+FFF00000FFFFF80001FFFFFC0003FFFFFE0007FE03FF000FF800FF801FE0007F803FC000
+3FC03F80001FC07F80001FC07F00001FE07F00000FE0FFFFFFFFE0FFFFFFFFE0FFFFFFFF
+E0FFFFFFFFE0FFFFFFFFE0FFFFFFFFC0FE00000000FF000000007F000000007F80000000
+7F800007C03FC0000FE03FE0000FE01FF0001FE00FFC003FC007FF80FFC003FFFFFF8001
+FFFFFF0000FFFFFE00003FFFF800000FFFF0000001FF800023247CA32C>101
+D<000007F80000003FFC000000FFFE000001FFFF000003FFFF800007FFFF80000FF87F80
+000FE03F00001FE01E00001FC00000001FC00000001FC00000001FC00000001FC0000000
+1FC000003FFFFFFE007FFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF007FFFFFFE00001F
+C00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0
+0000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000
+00001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000
+001FC00000001FC000007FFFFFF000FFFFFFF800FFFFFFF800FFFFFFF800FFFFFFF8007F
+FFFFF00021337DB22C>I<3FFFF000007FFFF80000FFFFF80000FFFFF800007FFFF80000
+3FFFF800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800003FFFFFFF807FFFFFFFC0FFFFFFFFE0FF
+FFFFFFE07FFFFFFFC03FFFFFFF8023337CB22C>108 D<0007FC0000001FFF0000007FFF
+C00001FFFFF00003FFFFF80007FFFFFC000FFC07FE001FF001FF001FE000FF003FC0007F
+803F80003F807F00001FC07F00001FC07F00001FC0FE00000FE0FE00000FE0FE00000FE0
+FE00000FE0FE00000FE0FE00000FE0FE00000FE0FF00001FE07F00001FC07F00001FC07F
+80003FC03F80003F803FC0007F801FE000FF001FF803FF000FFE0FFE0007FFFFFC0003FF
+FFF80001FFFFF000007FFFC000001FFF00000007FC000023247CA32C>111
+D<3FFF003FC07FFF81FFE0FFFF87FFF0FFFF8FFFF87FFF9FFFFC3FFFBFFFFC003FFFE3FC
+003FFF01F8003FFC00F0003FF80060003FF00000003FF00000003FE00000003FE0000000
+3FC00000003FC00000003FC00000003F800000003F800000003F800000003F800000003F
+800000003F800000003F800000003F800000003F800000003F800000003F800000003F80
+0000003F8000003FFFFFF0007FFFFFF800FFFFFFF800FFFFFFF8007FFFFFF8003FFFFFF0
+0026247EA32C>114 D<003FF87003FFFFF807FFFFF80FFFFFF81FFFFFF83FFFFFF87FC0
+1FF8FF0007F8FC0003F8FC0003F8FC0003F8FE0001F0FF8000007FFC00003FFFF0001FFF
+FF000FFFFFC007FFFFE000FFFFF0000FFFF800007FFC000003FE3C0000FF7E00003FFE00
+003FFF00003FFF00003FFF80007FFFC000FEFFF007FEFFFFFFFCFFFFFFF8FFFFFFF0FFFF
+FFE0F8FFFF80701FFC0020247AA32C>I<000F000000001F800000003F800000003F8000
+00003F800000003F800000003F800000003F800000003F800000003F8000003FFFFFFF00
+7FFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF807FFFFFFF00003F800000003F80000000
+3F800000003F800000003F800000003F800000003F800000003F800000003F800000003F
+800000003F800000003F800000003F800000003F800000003F800000003F800380003F80
+07C0003F800FE0003F800FE0003F800FE0003F801FE0003FC01FC0001FC03FC0001FF07F
+80000FFFFF80000FFFFF000007FFFE000003FFF8000000FFF00000003FC000232E7EAD2C
+>I<3FF800FFE0007FFC01FFF000FFFC03FFF000FFFC03FFF0007FFC01FFF0003FFC00FF
+F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007
+F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007
+F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007
+F00001FC0007F00001FC0007F00001FC000FF00001FC000FF00001FC003FF00001FF00FF
+F00000FFFFFFFF8000FFFFFFFFC0007FFFFFFFE0003FFFFFFFE0001FFFE7FFC00003FF03
+FF802B2480A32C>I E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fc cmsy10 10 3
+/Fc 3 42 df<7FFFFFFFFFFF80FFFFFFFFFFFFC0FFFFFFFFFFFFC07FFFFFFFFFFF803204
+799641>0 D<0000000000001C00000000000000001E00000000000000001E0000000000
+0000001E00000000000000000F00000000000000000F00000000000000000F0000000000
+00000007800000000000000007800000000000000003C00000000000000003C000000000
+00000001E00000000000000001F00000000000000000F000000000000000007800000000
+000000003C00000000000000001E00000000000000001F800000000000000007C0000000
+0000000003F07FFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFF
+FFFFFFFFFFFC0000000000000003F00000000000000007C0000000000000001F80000000
+000000001E00000000000000003C0000000000000000780000000000000000F000000000
+00000001F00000000000000001E00000000000000003C00000000000000003C000000000
+0000000780000000000000000780000000000000000F00000000000000000F0000000000
+0000000F00000000000000001E00000000000000001E00000000000000001E0000000000
+0000001C0000482C7BAA53>33 D<00000000003800000000000000003C00000000000000
+003C00000000000000001E00000000000000001E00000000000000000F00000000000000
+0007800000000000000007800000000000000003C00000000000000001E0000000000000
+0001F00000000000000000F000000000000000007800007FFFFFFFFFFFFC0000FFFFFFFF
+FFFFFE0000FFFFFFFFFFFFFF80007FFFFFFFFFFFFFC00000000000000003E00000000000
+000001F800000000000000007E00000000000000003F80000000000000000FE000000000
+00000007F80000000000000001FF0000000000000001FF0000000000000007F800000000
+0000000FE0000000000000003F80000000000000007E0000000000000001F80000000000
+000003E0007FFFFFFFFFFFFFC000FFFFFFFFFFFFFF8000FFFFFFFFFFFFFE00007FFFFFFF
+FFFFFC0000000000000000780000000000000000F00000000000000001F0000000000000
+0001E00000000000000003C0000000000000000780000000000000000780000000000000
+000F00000000000000001E00000000000000001E00000000000000003C00000000000000
+003C00000000000000003800000048307BAC53>41 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fd cmr10 10 65
+/Fd 65 128 df<000007F8000000003FFE00000001FFFF80000003FC07C000000FE001E0
+00001FC003E000003F8007F000007F000FF000007E000FF00000FE000FF00000FC0007E0
+0001FC0003C00001FC0001800001FC0000000001FC0000000001FC0000000001FC000000
+0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0007F0
+00FFFFFFFFF000FFFFFFFFF000FFFFFFFFF00001FC001FF00001FC0007F00001FC0007F0
+0001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F0
+0001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F0
+0001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F0
+0001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F0
+0001FC0007F00001FC0007F00003FE000FF8007FFFE0FFFFC07FFFE0FFFFC07FFFE0FFFF
+C02A3B7FBA2E>12 D<000007FC000000007FFF70000001FFFFF0000003FC07F000000FE0
+0FF000001FC00FF000003F000FF000007F000FF000007E0007F00000FE0007F00000FC00
+07F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC00
+07F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC00
+07F000FFFFFFFFF000FFFFFFFFF000FFFFFFFFF00001FC0007F00001FC0007F00001FC00
+07F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC00
+07F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC00
+07F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC00
+07F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC00
+07F00001FC0007F00001FC0007F00003FE000FF8007FFFF1FFFFC07FFFF1FFFFC07FFFF1
+FFFFC02A3B7FBA2E>I<000007FC000FF8000000003FFF80FFFEE0000001FFFFC3FFFFE0
+000003FC03E7F80FE000000FE003FFC01FE000001FC007FF801FE000003F8007FE001FE0
+00007F0007FE001FE000007E0007FC000FE00000FE0003FC000FE00000FC0001F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+00FFFFFFFFFFFFFFE000FFFFFFFFFFFFFFE000FFFFFFFFFFFFFFE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE00001FC0003F8000FE0
+0003FE0007FC001FF0007FFFF0FFFFE3FFFF807FFFF0FFFFE3FFFF807FFFF0FFFFE3FFFF
+80413B7FBA45>15 D<01F800FFF800FFF800FFF80007F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+07FC00FFFFE0FFFFE0FFFFE013257EA418>I<007C007E00FE01FE03FE03FC07F80FF00F
+E01FC03F007E007C00F80060000F0F6FB92A>19 D<0000FF00000007FFC000000FFFF000
+001F83F800007E00FC00007E007E0000FC007F0001FC007F8001F8003F8003F8003FC003
+F8003FC003F8003FC003F8003FC003F8003FC003F8003FC003F8003FC003F8003F8003F8
+007F8003F8007F0003F8007F0003F800FE0003F801FC0003F803F800FFF81FE000FFF83F
+C000FFF83FE00003F803F00003F801FC0003F8007E0003F8007F0003F8003F0003F8001F
+8003F8001FC003F8001FC003F8000FE003F8000FE003F8000FF003F8000FF003F80007F0
+03F80007F003F80007F803F80007F803F80007F803F80007F803F80007F803F80007F803
+F80007F803F80007F803F80007F803F81007F003F87807F003F8FC0FE003F8FE0FE003F8
+FC0FC003F8FC1F8007F8783F00FFF8787E00FFF83FFC00FFF81FF800000007C000253C7E
+BA2A>25 D<003FE0000FE00000FFFC003FFC0003FFFF00FFFF0007C03F81F83F800F800F
+C7E00FC01FC007EFC00FE01FE007FF8007E01FE003FF0007F01FE003FF0003F00FC001FE
+0003F8078001FE0003F8030001FE0001F8000001FE0001FC000001FC0001FC000001FC00
+01FC000001FC0001FC000001FFFFFFFC0001FFFFFFFFFC001FFFFFFFFFFC00FFFDFC0000
+0003FF01FC00000007FC01FC0000000FF001FC0000001FC001FC0000003FC000FC000000
+7F8000FE0000007F8000FE000000FF0000FE000000FF0000FE00001CFF0000FF00001CFF
+0001FF000038FF0001FF8000387F8003EFC000707F8007C7E000703FC00F83F001E01FE0
+7F01FE07C00FFFFE00FFFF8003FFF8003FFE00007FC00007F00036277DA53C>I<0003FC
+00003F8000001FFF8000FFF000003FFFE003FFFC0000FE07F007E0FE0001F800F81F803F
+0003F0007C3F003F8007E0003E3E001F800FC0003F7C001FC01FC0001FFC000FC01F8000
+0FF8000FE03F80000FF8000FE03F80000FF80007E07F00000FF80007F07F000007F00007
+F07F000007F00007F0FF000007F00007F0FF000007FFFFFFF0FF000007FFFFFFF0FF0000
+07FFFFFFF0FF000007F0000000FF000007F0000000FF000007F0000000FF000007F00000
+00FF000007F00000007F000007F00000007F000007F80000007F80000FF80000003F8000
+0FF80000003F80000FF80000701F80001FFC0000701FC0001FFC0000E00FC0003F7E0000
+E007E0003E3F0001C003F0007C1F8001C001F801F80FC0078000FE07F007F81F00003FFF
+E003FFFE00001FFF8000FFF8000003FC00001FC0003C277EA541>I<00003FFFFFFFFFFF
+0000003FFFFFFFFFFF0000003FFFFFFFFFFF0000000077FE0003FF00000000E1FC00007F
+00000000E1FC00001F80000000E1FC00000F80000001C1FC00000F80000001C1FC000007
+80000001C1FC0000078000000381FC0000038000000381FC0000038000000381FC000003
+8000000701FC0000038000000701FC000003C000000F01FC000001C000000E01FC000001
+C000000E01FC000001C000001E01FC000701C000001C01FC0007000000001C01FC000700
+0000003C01FC0007000000003801FC0007000000003801FC0007000000007801FC000F00
+0000007001FC000F000000007001FC001F00000000E001FC007F00000000FFFFFFFFFF00
+000000FFFFFFFFFF00000001FFFFFFFFFF00000001C001FC007F00000001C001FC001F00
+0000038001FC000F000000038001FC000F000000038001FC0007003800070001FC000700
+3800070001FC00070038000F0001FC00070038000E0001FC00070070000E0001FC000700
+70001E0001FC00000070001C0001FC00000070001C0001FC00000070003C0001FC000000
+F000380001FC000000F000380001FC000000E000780001FC000001E000700001FC000001
+E000700001FC000003E000F00001FC000007E001F00001FC00000FE003F80001FC00003F
+E00FFE0003FE0001FFC0FFFFC07FFFFFFFFFC0FFFFC07FFFFFFFFFC0FFFFC07FFFFFFFFF
+C045397DB84B>29 D<000003FE00000000000000001FFFE000000000000000FFFFFFFFFF
+FFFC000003FE01FFFFFFFFFC000007F8007FFFFFFFFC00000FE0003FF0000FFC00003FC0
+003FE00001FC00007F80001FE000007E0000FF00001FE000003E0001FE00001FE000003E
+0001FC00000FE000001E0003FC00000FE000001E0007F800000FE000000E0007F800000F
+E000000E000FF000000FE000000E000FF000000FE000000E001FE000000FE000000F001F
+E000000FE0000007003FE000000FE0000E07003FC000000FE0000E07003FC000000FE000
+0E07007FC000000FE0000E00007FC000000FE0000E00007F8000000FE0000E00007F8000
+000FE0001E0000FF8000000FE0001E0000FF8000000FE0003E0000FF8000000FE000FE00
+00FF8000000FFFFFFE0000FF8000000FFFFFFE0000FF8000000FFFFFFE0000FF8000000F
+E000FE0000FF8000000FE0003E0000FF8000000FE0001E0000FF8000000FE0001E0000FF
+8000000FE0000E0000FFC000000FE0000E00007FC000000FE0000E00E07FC000000FE000
+0E00E07FC000000FE0000E00E07FC000000FE0000E00E03FE000000FE0000001C03FE000
+000FE0000001C03FE000000FE0000001C01FF000000FE0000001C01FF000000FE0000001
+C00FF800000FE0000003C00FF800000FE0000003C007FC00000FE00000038003FC00000F
+E00000078001FE00000FE00000078001FF00001FE000000F8000FF00001FE000001F8000
+7F80001FE000003F80003FC0003FE00000FF80001FF0003FF00007FF000007F8007FFFFF
+FFFF000003FF01FFFFFFFFFF000000FFFFFFFFFFFFFF0000001FFFE00000000000000003
+FE0000000000004B3D7ABA54>I<1E000F003F001F807F803FC0FFC07FE0FFC07FE0FFE0
+7FF0FFE07FF07FE03FF03FE01FF01EE00F7000E0007000E0007000E0007000E0007001C0
+00E001C000E001C000E0038001C0038001C007000380070003800E0007001C000E003C00
+1E0038001C00100008001C1A7DB92A>34 D<1E003F007F80FFC0FFC0FFE0FFE07FE03FE0
+1EE000E000E000E000E001C001C001C003800380070007000E001C003C00380010000B1A
+7AB917>39 D<0000E00001E00003C0000780000F00001E00001E00003C0000780000F800
+00F00001F00001E00003E00003C00007C00007C0000F80000F80001F80001F00001F0000
+3F00003F00003E00003E00007E00007E00007E00007E00007E00007C0000FC0000FC0000
+FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000
+FC0000FC0000FC0000FC00007C00007E00007E00007E00007E00007E00003E00003E0000
+3F00003F00001F00001F00001F80000F80000F800007C00007C00003C00003E00001E000
+01F00000F00000F800007800003C00001E00001E00000F000007800003C00001E00000E0
+135278BD20>I<600000F000007800003C00001E00000F00000F000007800003C00003E0
+0001E00001F00000F00000F800007800007C00007C00003E00003E00003F00001F00001F
+00001F80001F80000F80000F80000FC0000FC0000FC0000FC0000FC00007C00007E00007
+E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007
+E00007E00007E00007E00007E00007C0000FC0000FC0000FC0000FC0000FC0000F80000F
+80001F80001F80001F00001F00003F00003E00003E00007C00007C0000780000F80000F0
+0001F00001E00003E00003C0000780000F00000F00001E00003C0000780000F000006000
+0013527CBD20>I<1E003F007F80FFC0FFC0FFE0FFE07FE03FE01EE000E000E000E000E0
+01C001C001C003800380070007000E001C003C00380010000B1A7A8917>44
+D<FFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFC16067F941C>I<1E003F007F80FFC0FFC0
+FFC0FFC07F803F001E000A0A7A8917>I<0001C0000003C0000007C000001FC00000FFC0
+00FFFFC000FFFFC000FF1FC000001FC000001FC000001FC000001FC000001FC000001FC0
+00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
+00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
+00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
+00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
+00001FC000001FC000003FE0007FFFFFF07FFFFFF07FFFFFF01C3879B72A>49
+D<0000007800000000F800000000F800000001F800000003F800000003F800000007F800
+000007F80000000FF80000001FF80000001FF80000003FF80000007BF800000073F80000
+00F3F8000001E3F8000001C3F8000003C3F800000783F800000703F800000F03F800001E
+03F800001C03F800003C03F800007803F800007003F80000F003F80001E003F80001C003
+F80003C003F800038003F800070003F8000F0003F8000E0003F8001E0003F8003C0003F8
+00380003F800780003F800F00003F800FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000007FC000003FFFFF80003FFFFF80003FFFFF82539
+7EB82A>52 D<0400000C000F00003C000FF003FC000FFFFFF8000FFFFFF0000FFFFFE000
+0FFFFF80000FFFFF00000FFFFC00000EFFF000000E000000000E000000000E000000000E
+000000000E000000000E000000000E000000000E000000000E000000000E000000000E00
+0000000E07F800000E1FFE00000E7FFF80000EF80FC0000FE007E0000F8003F0000F0001
+F8000E0000FC00060000FC00000000FE00000000FE000000007F000000007F000000007F
+000000007F800000007F800000007F801800007F803E00007F807F00007F80FF00007F80
+FF00007F80FF00007F80FF00007F00FE00007F00780000FF00700000FE00700000FE0038
+0001FC00380001F8001C0003F0000E0007E00007800FC00003E03F800001FFFF0000007F
+FC0000001FE00000213A7CB72A>I<00003FC0000001FFF0000007FFFC00000FE03E0000
+1F000F00003E001F00007C003F8000F8007F8001F0007F8003E0007F8007E0007F8007C0
+003F000FC0001E001FC00000001F800000001F800000003F800000003F800000003F8000
+00007F002000007F03FF00007F07FFC0007F0FFFE000FF1C03F000FF3000F800FF60007C
+00FF60007E00FFC0003F00FFC0003F00FF80003F80FF80001F80FF80001FC0FF80001FC0
+FF00001FC0FF00001FE0FF00001FE0FF00001FE0FF00001FE07F00001FE07F00001FE07F
+00001FE07F00001FE07F00001FE03F00001FE03F80001FC03F80001FC01F80001FC01F80
+003F800F80003F800FC0003F0007C0007E0003E0007C0003F000F80001F801F00000FE07
+E000003FFFC000001FFF00000003FC0000233A7DB72A>I<0003F80000001FFF0000003F
+FFC00000FC07E00001F001F00003C000F80003C0007C000780003E000F80003E000F0000
+3E000F00001F001F00001F001F00001F001F00001F001F80001F001F80001F001FC0003E
+001FC0003E000FF0003C000FF8007C0007FE00F80007FF00F00003FFC3E00001FFE7C000
+00FFFF8000007FFE0000003FFF0000000FFF8000003FFFE000007FFFF00001F8FFFC0003
+E03FFE0007C01FFE000F8007FF001F0003FF801E0000FF803E00007FC07C00001FC07C00
+000FE07C00000FE0F8000007E0F8000007E0F8000003E0F8000003E0F8000003E0F80000
+03E0F8000003C07C000003C07C000007803E000007803E00000F001F00001E000F80003C
+0007E000F80003FC03F00000FFFFE000003FFF80000007FC0000233A7DB72A>56
+D<1E003F007F80FFC0FFC0FFC0FFC07F803F001E00000000000000000000000000000000
+00000000000000000000000000000000001E003F007F80FF80FFC0FFC0FFC07FC03FC01F
+C001C001C001C001C00380038003800780070007000E001E001C003800380010000A347A
+A317>59 D<7FFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFFFFFFF8000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000007FFFFFFFFFFFF8FFFFFFFFFFFF
+FCFFFFFFFFFFFFFC7FFFFFFFFFFFF836167B9F41>61 D<000000380000000000007C0000
+000000007C0000000000007C000000000000FE000000000000FE000000000000FE000000
+000001FF000000000001FF000000000001FF000000000003FF800000000003FF80000000
+0003FF800000000007FFC000000000073FC000000000073FC0000000000F3FE000000000
+0E1FE0000000000E1FE0000000001E1FF0000000001C0FF0000000001C0FF0000000003C
+0FF8000000003807F8000000003807F8000000007807FC000000007003FC000000007003
+FC00000000F003FE00000000E001FE00000000E001FE00000001E001FF00000001C000FF
+00000001C000FF00000003C000FF8000000380007F8000000380007F8000000780007FC0
+00000700003FC0000007FFFFFFC000000FFFFFFFE000000FFFFFFFE000000E00001FE000
+001E00001FF000001C00000FF000001C00000FF000003C00000FF8000038000007F80000
+38000007F8000078000007FC000070000003FC000070000003FC0000F0000003FE0000F0
+000001FE0001F0000001FE0003F8000001FF000FFE000007FF80FFFFC000FFFFFEFFFFC0
+00FFFFFEFFFFC000FFFFFE373C7DBB3E>65 D<000001FF00018000000FFFE0038000007F
+FFF803800001FF807E07800003FC000F0F80000FF000079F80001FC00001DF80003F8000
+00FF80007F0000007F8000FE0000007F8001FC0000003F8003F80000001F8003F8000000
+1F8007F00000000F800FF00000000F800FE00000000F801FE000000007801FE000000007
+803FC000000007803FC000000007803FC000000003807FC000000003807FC00000000380
+7F8000000003807F800000000000FF800000000000FF800000000000FF800000000000FF
+800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF80
+0000000000FF800000000000FF8000000000007F8000000000007F8000000000007FC000
+000003807FC000000003803FC000000003803FC000000003803FC000000003801FE00000
+0003801FE000000007000FE000000007000FF0000000070007F00000000E0003F8000000
+0E0003F80000001C0001FC0000001C0000FE0000003800007F0000007000003F800000F0
+00001FC00001E000000FF00003C0000003FC000F00000001FF807E000000007FFFFC0000
+00000FFFF00000000001FF800000313D7BBA3C>67 D<FFFFFFFFC00000FFFFFFFFF80000
+FFFFFFFFFE000001FF8001FF800000FF00003FE00000FF00000FF00000FF000003F80000
+FF000001FC0000FF000000FE0000FF0000007F0000FF0000007F0000FF0000003F8000FF
+0000003FC000FF0000001FC000FF0000001FE000FF0000000FE000FF0000000FF000FF00
+00000FF000FF0000000FF000FF00000007F800FF00000007F800FF00000007F800FF0000
+0007F800FF00000007FC00FF00000007FC00FF00000007FC00FF00000007FC00FF000000
+07FC00FF00000007FC00FF00000007FC00FF00000007FC00FF00000007FC00FF00000007
+FC00FF00000007FC00FF00000007FC00FF00000007F800FF00000007F800FF00000007F8
+00FF00000007F800FF0000000FF000FF0000000FF000FF0000000FE000FF0000000FE000
+FF0000001FE000FF0000001FC000FF0000003F8000FF0000003F8000FF0000007F0000FF
+000000FE0000FF000001FC0000FF000003F80000FF00000FF00000FF00003FE00001FF80
+00FF8000FFFFFFFFFF0000FFFFFFFFF80000FFFFFFFFC0000036397DB83F>I<FFFFFFFF
+FFFC00FFFFFFFFFFFC00FFFFFFFFFFFC0001FF80001FFC0000FF000001FC0000FF000000
+FE0000FF0000007E0000FF0000003E0000FF0000001E0000FF0000001E0000FF0000000E
+0000FF0000000E0000FF0000000E0000FF0000000E0000FF0000000F0000FF0000000700
+00FF0001C0070000FF0001C0070000FF0001C0070000FF0001C0000000FF0001C0000000
+FF0001C0000000FF0003C0000000FF0003C0000000FF0007C0000000FF001FC0000000FF
+FFFFC0000000FFFFFFC0000000FFFFFFC0000000FF001FC0000000FF0007C0000000FF00
+03C0000000FF0003C0000000FF0001C0000000FF0001C0000000FF0001C000E000FF0001
+C000E000FF0001C000E000FF0001C001E000FF00000001C000FF00000001C000FF000000
+01C000FF00000001C000FF00000003C000FF00000003C000FF00000003C000FF00000007
+8000FF000000078000FF0000000F8000FF0000000F8000FF0000001F8000FF0000003F80
+00FF000000FF8001FF80000FFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF0033
+397DB839>I<FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF801FF80001FF800FF000003F8
+00FF000001FC00FF000000FC00FF0000007C00FF0000003C00FF0000003C00FF0000001C
+00FF0000001C00FF0000001C00FF0000001C00FF0000001E00FF0000000E00FF0000000E
+00FF0003800E00FF0003800E00FF0003800000FF0003800000FF0003800000FF00038000
+00FF0007800000FF0007800000FF000F800000FF003F800000FFFFFF800000FFFFFF8000
+00FFFFFF800000FF003F800000FF000F800000FF0007800000FF0007800000FF00038000
+00FF0003800000FF0003800000FF0003800000FF0003800000FF0003800000FF00000000
+00FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000000
+00FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000000
+01FFC0000000FFFFFFC00000FFFFFFC00000FFFFFFC000002F397DB836>I<FFFFFFC0FF
+FFFFC0FFFFFFC000FFC000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000
+7F8000007F8000007F8000007F8000007F8000007F8000007F800000FFC000FFFFFFC0FF
+FFFFC0FFFFFFC01A397EB81E>73 D<FFFFFFFFC000FFFFFFFFF800FFFFFFFFFE0001FF80
+01FF8000FF00003FC000FF00000FE000FF000007F000FF000003F800FF000003FC00FF00
+0003FE00FF000001FE00FF000001FE00FF000001FF00FF000001FF00FF000001FF00FF00
+0001FF00FF000001FF00FF000001FF00FF000001FF00FF000001FE00FF000001FE00FF00
+0003FE00FF000003FC00FF000003F800FF000007F000FF00000FE000FF00003FC000FF00
+01FF8000FFFFFFFE0000FFFFFFF80000FFFFFFC00000FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+00000000FF0000000001FF80000000FFFFFF000000FFFFFF000000FFFFFF00000030397D
+B839>80 D<FFFFFFFE00000000FFFFFFFFE0000000FFFFFFFFF800000001FF8007FE0000
+0000FF0000FF80000000FF00003FC0000000FF00001FE0000000FF00000FF0000000FF00
+0007F8000000FF000007F8000000FF000003FC000000FF000003FC000000FF000003FE00
+0000FF000003FE000000FF000003FE000000FF000003FE000000FF000003FE000000FF00
+0003FE000000FF000003FC000000FF000003FC000000FF000007F8000000FF000007F800
+0000FF00000FF0000000FF00001FE0000000FF00003FC0000000FF0000FF80000000FF00
+07FE00000000FFFFFFF800000000FFFFFFE000000000FFFFFFE000000000FF0007F80000
+0000FF0001FC00000000FF0000FE00000000FF00007F00000000FF00003F80000000FF00
+003FC0000000FF00001FC0000000FF00001FE0000000FF00001FE0000000FF00001FE000
+0000FF00001FE0000000FF00001FE0000000FF00001FE0000000FF00001FF0000000FF00
+001FF0000000FF00001FF0000000FF00001FF0000000FF00001FF0000000FF00001FF001
+0000FF00001FF0038000FF00000FF8038000FF00000FF8038000FF00000FF8038001FF80
+0007F80700FFFFFF0003FC0700FFFFFF0001FE0E00FFFFFF0000FFFC0000000000003FF8
+00000000000007F000393B7DB83D>82 D<000FF800C0003FFE01C000FFFF81C001F80FE3
+C007E001F7C00F80007FC00F00003FC01F00001FC03E00000FC03E00000FC07C000007C0
+7C000007C0FC000003C0FC000003C0FC000003C0FC000003C0FC000001C0FE000001C0FE
+000001C0FF000001C07F000000007F800000007FE00000003FF80000003FFF8000001FFF
+F800000FFFFF800007FFFFE00003FFFFF80001FFFFFC0000FFFFFE00003FFFFF000007FF
+FF8000007FFFC0000007FFE00000007FE00000001FF00000000FF000000007F000000007
+F800000003F860000003F8E0000003F8E0000001F8E0000001F8E0000001F8E0000001F8
+F0000001F8F0000001F0F0000001F0F8000003F0FC000003E0FC000003E0FE000007C0FF
+00000F80FBC0001F00F9F0003E00F0FF00FC00E03FFFF800E00FFFE000C001FF0000253D
+7CBA2E>I<3FFFFFFFFFFFE03FFFFFFFFFFFE03FFFFFFFFFFFE03FE003FF003FE03F0001
+FE0007E07E0001FE0003F07C0001FE0001F0780001FE0000F0780001FE0000F0780001FE
+0000F0700001FE000070700001FE000070700001FE000070700001FE000070F00001FE00
+0078E00001FE000038E00001FE000038E00001FE000038E00001FE000038000001FE0000
+00000001FE000000000001FE000000000001FE000000000001FE000000000001FE000000
+000001FE000000000001FE000000000001FE000000000001FE000000000001FE00000000
+0001FE000000000001FE000000000001FE000000000001FE000000000001FE0000000000
+01FE000000000001FE000000000001FE000000000001FE000000000001FE000000000001
+FE000000000001FE000000000001FE000000000001FE000000000001FE000000000001FE
+000000000001FE000000000001FE000000000001FE000000000001FE000000000001FE00
+0000000001FE000000000001FE000000000007FF800000001FFFFFFFE000001FFFFFFFE0
+00001FFFFFFFE00035397DB83C>I<7FFFFF007FFFFC007FFFFF007FFFFC007FFFFF007F
+FFFC0000FFF8000FFF8000007FE00003FC0000003FE00001F00000001FF00001E0000000
+1FF00001C00000000FF80003C000000007FC00078000000007FC00070000000003FE000F
+0000000003FE001E0000000001FF001C0000000000FF803C0000000000FF807800000000
+007FC07000000000003FE0F000000000003FE1E000000000001FF1C000000000000FF3C0
+00000000000FFB80000000000007FF00000000000007FF00000000000003FE0000000000
+0001FF00000000000001FF00000000000000FF800000000000007FC0000000000000FFC0
+000000000000FFE0000000000001FFE0000000000003DFF00000000000038FF800000000
+00078FF800000000000F07FC00000000000E03FE00000000001E03FE00000000001C01FF
+00000000003800FF00000000007800FF800000000070007FC000000000F0007FC0000000
+01E0003FE000000001C0001FF000000003C0001FF00000000780000FF800000007000007
+FC0000000F000007FC0000001E000003FE0000001E000001FE0000003E000001FF000000
+FF000001FF800007FF800007FFC000FFFFF0003FFFFF80FFFFF0003FFFFF80FFFFF0003F
+FFFF8039397EB83E>88 D<FFFFFE00007FFFE0FFFFFE00007FFFE0FFFFFE00007FFFE001
+FFE000000FFE0000FFC0000007F000007FC0000003E000007FC0000003C000003FE00000
+038000001FF00000078000001FF00000070000000FF800000E0000000FF800001E000000
+07FC00001C00000003FE00003C00000003FE00003800000001FF00007800000001FF0000
+F000000000FF8000E0000000007FC001E0000000007FC001C0000000003FE003C0000000
+003FE00380000000001FF00780000000000FF80F00000000000FF80E000000000007FC1E
+000000000007FC1C000000000003FE3C000000000001FF38000000000001FF7000000000
+0000FFF0000000000000FFE00000000000007FE00000000000003FC00000000000003FC0
+0000000000003FC00000000000003FC00000000000003FC00000000000003FC000000000
+00003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC0
+0000000000003FC00000000000003FC00000000000003FC00000000000003FC000000000
+00003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC0
+0000000000007FE000000000003FFFFFC0000000003FFFFFC0000000003FFFFFC000003B
+397FB83E>I<01000080038001C0078003C0070003800E0007001C000E001C000E003800
+1C0038001C00700038007000380070003800E0007000E0007000E0007000E0007000EF00
+7780FF807FC0FFC07FE0FFE07FF0FFE07FF07FE03FF07FE03FF03FC01FE01F800FC00F00
+07801C1A76B92A>92 D<001000003800007C0000FE0001FF0003EF8007C7C00F83E01F01
+F03E00F87C007CF0001E60000C170D77B92A>94 D<01000380078007000E001C001C0038
+003800700070007000E000E000E000E000EF00FF80FFC0FFE0FFE07FE07FE03FC01F800F
+000B1A7BB917>96 D<003FE0000000FFFC000003FFFF000007C03F80000F800FC0001FC0
+07E0001FE007F0001FE003F8001FE003F8000FC001F800078001FC00030001FC00000001
+FC00000001FC00000001FC00000001FC000000FFFC00000FFFFC00007FF1FC0001FF01FC
+0007F801FC000FF001FC001FE001FC003FC001FC007F8001FC007F8001FC00FF0001FC1C
+FF0001FC1CFF0001FC1CFF0001FC1CFF0003FC1CFF0003FC1C7F8007FC1C7F8006FC1C3F
+C01C7E381FF0787FF80FFFF03FF003FFE03FE0007F000F8026277DA52A>I<03F8000000
+FFF8000000FFF8000000FFF80000000FF800000003F800000003F800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F80FE00003F87F
+FC0003F9FFFE0003FBE03F8003FF800FC003FE0007E003FC0003F003FC0003F003F80001
+F803F80001FC03F80001FC03F80001FE03F80000FE03F80000FE03F80000FF03F80000FF
+03F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03
+F80000FE03F80000FE03F80000FE03F80001FE03F80001FC03F80001FC03F80003F803FC
+0003F003FC0007E003FE000FC003E7801F8003E3E07F0003C1FFFE0003807FF80000001F
+C000283B7EB92E>I<0003FC00001FFF80007FFFE000FE01F001F800F803F001FC07E003
+FC0FC003FC1FC003FC1F8001F83F8000F03F8000607F8000007F0000007F000000FF0000
+00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000
+007F0000007F8000007F8000003F80000E3FC0000E1FC0001C0FE0001C07E0003803F000
+3801FC00F000FF03E0007FFFC0001FFF000007F8001F277DA525>I<0000001FC0000007
+FFC0000007FFC0000007FFC00000007FC00000001FC00000001FC00000001FC00000001F
+C00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0
+0000001FC00000001FC00000001FC00000001FC00000001FC00007F81FC0001FFE1FC000
+7FFF9FC000FE07DFC001F800FFC003F0007FC007E0003FC00FC0001FC01FC0001FC03F80
+001FC03F80001FC07F80001FC07F00001FC07F00001FC07F00001FC0FF00001FC0FF0000
+1FC0FF00001FC0FF00001FC0FF00001FC0FF00001FC0FF00001FC0FF00001FC0FF00001F
+C07F00001FC07F00001FC07F80001FC03F80001FC03F80001FC01F80001FC00FC0003FC0
+0FC0007FC007E000FFC003F001DFF001FC079FFF007FFF1FFF003FFE1FFF0007F01FC028
+3B7DB92E>I<0007F800001FFF00007FFF8000FC0FC001F003E003E001F007E001F80FC0
+00FC1FC000FC1F8000FE3F80007E3F80007E7F00007F7F00007F7F00007FFF00007FFFFF
+FFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF0000007F0000007F00
+00007F8000003F8000003F8000071FC000071FC0000E0FE0000E07E0001C03F0003C01FC
+007800FF01F0003FFFC0001FFF800003FC0020277EA525>I<00007E000003FF80000FFF
+C0001FC7E0003F07F0007E0FF000FE0FF000FC0FF001FC07E001F803C003F8000003F800
+0003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800
+0003F8000003F80000FFFFFC00FFFFFC00FFFFFC0003F8000003F8000003F8000003F800
+0003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800
+0003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800
+0003F8000003F8000003F8000003F8000003F8000003F8000003F8000007FC0000FFFFF8
+00FFFFF800FFFFF8001C3B7FBA19>I<00000003E0000FF00FF0003FFC1FF800FFFF3C7C
+01F81FF0FC03E007C07C07C003E0380FC003F0001FC003F8001F8001F8003F8001FC003F
+8001FC003F8001FC003F8001FC003F8001FC003F8001FC003F8001FC001F8001F8001FC0
+03F8000FC003F00007C003E00003E007C00003F81F800006FFFF0000063FFC00000E0FF0
+00000E000000001E000000001E000000001E000000001F000000000F800000000FFFFFC0
+000FFFFFF80007FFFFFE0003FFFFFF8003FFFFFFC007FFFFFFE01F80007FE03F00000FF0
+7E000003F07E000003F8FC000001F8FC000001F8FC000001F8FC000001F8FC000001F87E
+000003F07E000003F03F000007E01F80000FC00FE0003F8007FC01FF0001FFFFFC00007F
+FFF0000007FF000026387EA52A>I<03F800000000FFF800000000FFF800000000FFF800
+0000000FF80000000003F80000000003F80000000003F80000000003F80000000003F800
+00000003F80000000003F80000000003F80000000003F80000000003F80000000003F800
+00000003F80000000003F80000000003F80000000003F80000000003F80000000003F807
+F0000003F81FFC000003F87FFF000003F8F07F800003F9C01F800003FB801FC00003FF00
+0FC00003FE000FE00003FC000FE00003FC000FE00003FC000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00007FC001FF000FFFFE1FFFF80FFFFE1FFFF80FFFFE1
+FFFF80293A7EB92E>I<03C00007E0000FF0001FF8001FF8001FF8001FF8000FF00007E0
+0003C00000000000000000000000000000000000000000000000000000000001F800FFF8
+00FFF800FFF80007F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80007FC00FFFFE0FFFFE0FFFFE01338
+7EB718>I<03F8000000FFF8000000FFF8000000FFF80000000FF800000003F800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F803FFFC03F803FFFC03F803FFFC03F801FFC003F800FE0003F800FC
+0003F800F00003F801E00003F803C00003F807800003F80F000003F81E000003F83C0000
+03F878000003F8FC000003F9FE000003FBFE000003FF7F000003FE3F800003FC1F800003
+F81FC00003F80FE00003F807F00003F807F00003F803F80003F801FC0003F801FC0003F8
+00FE0003F8007F0003F8007F0003F8003F8003F8003FC007FC007FF0FFFFE1FFFFFFFFE1
+FFFFFFFFE1FFFF283A7EB92C>107 D<03F800FFF800FFF800FFF8000FF80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80007FC
+00FFFFE0FFFFE0FFFFE0133A7EB918>I<03F807F8000FF00000FFF81FFE003FFC0000FF
+F87FFF00FFFE0000FFF8F03F81E07F00000FF9C00FC3801F800003FB800FE7001FC00003
+FB000FE6001FC00003FE0007FC000FE00003FE0007FC000FE00003FC0007F8000FE00003
+FC0007F8000FE00003F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003
+F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003
+F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003
+F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003
+F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003F80007F0000FE00003
+F80007F0000FE00003F80007F0000FE00003F80007F0000FE00007FC000FF8001FF000FF
+FFE1FFFFC3FFFF80FFFFE1FFFFC3FFFF80FFFFE1FFFFC3FFFF8041257EA446>I<03F807
+F00000FFF81FFC0000FFF87FFF0000FFF8F07F80000FF9C01F800003FB801FC00003FF00
+0FC00003FE000FE00003FC000FE00003FC000FE00003FC000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F800
+0FE00003F8000FE00003F8000FE00007FC001FF000FFFFE1FFFF80FFFFE1FFFF80FFFFE1
+FFFF8029257EA42E>I<0003FE0000000FFF8000003FFFE00000FE03F80001F800FC0003
+F0007E0007E0003F000FC0001F801FC0001FC01F80000FC03F80000FE03F80000FE07F00
+0007F07F000007F07F000007F07F000007F0FF000007F8FF000007F8FF000007F8FF0000
+07F8FF000007F8FF000007F8FF000007F8FF000007F8FF000007F87F000007F07F000007
+F07F80000FF03F80000FE03F80000FE01FC0001FC00FC0001F800FE0003F8007F0007F00
+03F800FE0000FE03F800007FFFF000001FFFC0000003FE000025277EA52A>I<03F80FE0
+00FFF87FFC00FFF9FFFE00FFFBE07F8007FF801FC003FE000FE003FC0007F003FC0007F0
+03F80003F803F80003FC03F80001FC03F80001FE03F80001FE03F80001FE03F80000FF03
+F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03F8
+0000FF03F80000FE03F80001FE03F80001FE03F80001FE03F80001FC03F80003FC03F800
+03F803FC0007F003FC000FE003FE000FC003FF803F8003FBE07F0003F9FFFE0003F87FF8
+0003F81FC00003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000007FC000000FFFFE00000FF
+FFE00000FFFFE0000028357EA42E>I<0003F801C0001FFE03C0007FFF03C000FE0787C0
+01FC01C7C003F000EFC007F0007FC00FE0003FC01FC0003FC03FC0001FC03F80001FC07F
+80001FC07F80001FC07F80001FC07F00001FC0FF00001FC0FF00001FC0FF00001FC0FF00
+001FC0FF00001FC0FF00001FC0FF00001FC0FF00001FC0FF00001FC07F80001FC07F8000
+1FC07F80001FC03F80001FC03FC0001FC01FC0003FC00FE0003FC00FE0007FC007F000FF
+C003F801DFC001FE0F9FC0007FFF1FC0003FFC1FC00007F01FC00000001FC00000001FC0
+0000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000
+00001FC00000001FC00000003FE0000007FFFF000007FFFF000007FFFF28357DA42C>I<
+03F03F00FFF07F80FFF1FFE0FFF1C7E00FF38FF003F70FF003F60FF003FE07E003FC03C0
+03FC018003FC000003FC000003F8000003F8000003F8000003F8000003F8000003F80000
+03F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F80000
+03F8000003F8000003F8000003F8000003F8000003F8000007FC0000FFFFF800FFFFF800
+FFFFF8001C257EA421>I<00FF830003FFE7000FFFFF001F80FF003E003F007C001F0078
+000F0078000F00F8000700F8000700F8000700FC000700FE000000FF8000007FF800007F
+FF80003FFFE0001FFFF8000FFFFC0007FFFE0001FFFF00007FFF000003FF8000003F8060
+001FC0E0000FC0E0000FC0F00007C0F00007C0F00007C0F80007C0F8000780FC000F80FC
+000F00FF001E00FFC07C00F3FFF800E1FFF000C07F80001A277DA521>I<001C0000001C
+0000001C0000001C0000001C0000003C0000003C0000003C0000007C0000007C000000FC
+000001FC000003FC000007FC00001FFC0000FFFFFF00FFFFFF00FFFFFF0001FC000001FC
+000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC
+000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC01C001FC
+01C001FC01C001FC01C001FC01C001FC01C001FC01C001FC01C001FC01C000FE038000FE
+0380007E0300003F0700001FFE00000FFC000003F0001A347FB220>I<03F8000FE000FF
+F803FFE000FFF803FFE000FFF803FFE0000FF8003FE00003F8000FE00003F8000FE00003
+F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003
+F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003
+F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003
+F8000FE00003F8000FE00003F8000FE00003F8001FE00003F8001FE00003F8003FE00001
+F8003FE00001F8006FE00000FC00EFF800007E03CFFF80003FFF8FFF80001FFF0FFF8000
+03FC0FE00029267EA42E>I<FFFFC07FFEFFFFC07FFEFFFFC07FFE0FFC001FF003F80007
+C003F800078003FC00078001FC00070001FC00070001FE000F0000FE000E0000FE000E00
+007F001C00007F001C00007F803C00003F803800003F803800001FC07000001FC0700000
+1FE07000000FE0E000000FE0E000000FF1E0000007F1C0000007F1C0000003FB80000003
+FB80000003FF80000001FF00000001FF00000001FF00000000FE00000000FE000000007C
+000000007C000000007C0000000038000027257EA32C>I<FFFF8FFFF07FFEFFFF8FFFF0
+7FFEFFFF8FFFF07FFE0FF800FF800FF807F8007F0007E007F8007F0003C003F8007F0003
+8003F8003F00038003FC003F80078001FC007F80070001FC007F80070001FE007FC00F00
+00FE00FFC00E0000FE00EFC00E0000FF00EFE01E00007F01EFE01C00007F01C7E01C0000
+7F81C7F03C00003F83C7F03800003F8383F03800001FC383F87000001FC701F87000001F
+C701F87000000FE701FCE000000FEE00FCE000000FEE00FCE0000007FE00FFC0000007FC
+007FC0000007FC007FC0000003FC007F80000003F8003F80000003F8003F80000001F800
+3F00000001F0001F00000001F0001F00000000F0001E00000000E0000E000037257EA33C
+>I<FFFFC0FFFF00FFFFC0FFFF00FFFFC0FFFF0003FF007FF00001FE003F800000FF003E
+0000007F003C0000003F803C0000003FC0780000001FC0F00000000FE0E00000000FF1E0
+00000007FBC000000003FF8000000001FF0000000001FF0000000000FE00000000007F00
+000000007F80000000007FC000000000FFC000000001FFE000000001CFF000000003C7F0
+0000000783F80000000F03FC0000000E01FC0000001E00FE0000003C00FF00000078007F
+800000F8003F800001F8003FC0000FFC007FE000FFFF01FFFF80FFFF01FFFF80FFFF01FF
+FF8029247FA32C>I<FFFFC07FFEFFFFC07FFEFFFFC07FFE07FC001FF003F80007C003F8
+00078003FC00078001FC00070001FC00070000FE000E0000FE000E0000FF001E00007F00
+1C00007F001C00003F803800003F803800003FC07800001FC07000001FC07000001FE0F0
+00000FE0E000000FF0E0000007F1C0000007F1C0000007FBC0000003FB80000003FB8000
+0001FF00000001FF00000001FF00000000FE00000000FE000000007C000000007C000000
+007C0000000038000000003800000000780000000070000000007000000000E000000000
+E000000001E000007C01C00000FE03C00000FE03800000FE07800000FE0F000000FC1E00
+0000783C0000003FF80000001FF00000000FC000000027357EA32C>I<FFFFFFFFFFFFFF
+FFFFFFC0FFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFC05203809753>124
+D<1C001C007F007F00FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF807F007F
+001C001C00190A78B72A>127 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fe cmmi10 10 4
+/Fe 4 100 df<003FFFFFFFE000FFFFFFFFF001FFFFFFFFF003FFFFFFFFF007FFFFFFFF
+E00F80700E00001E00700E00001C00E00E00003800E01E00007000E01C00007001E01C00
+00E001C01C00000001C01C00000003C03C00000003C03C00000003803C00000007803C00
+000007803C00000007807C0000000F007C0000000F007C0000001F007C0000001F007C00
+00001E007C0000003E007C0000003E007C0000007C007C0000007C007C000000FC007E00
+0000FC007E000000F8007E000001F8007F000001F8007F000003F0003F000003F0003F00
+0003E0001E000001C0000C00002C257EA32F>25 D<00007E00000003FF8000000FFFC380
+001F81E7C0003E00FFC0007C007FC000F8007FC001F0003F8003E0003F8007E0003F800F
+C0001F800FC0003F001F80003F001F80003F003F80003F003F00007E007F00007E007F00
+007E007F00007E00FE0000FC00FE0000FC00FE0000FC00FE0000FC00FE0001F800FC0001
+F81CFC0001F81CFC0001F81CFC0003F038FC0003F0387C0007F0387C000FF0387E001FF0
+703E003BF0701F00F1F0E00F83E1F0E007FFC0FFC003FF807F8000FC001F0026267DA42C
+>97 D<003F00000FFF00001FFF00001FFF0000007E0000007E0000007E0000007E000000
+FC000000FC000000FC000000FC000001F8000001F8000001F8000001F8000003F0000003
+F0000003F0000003F0000007E0000007E0FC0007E3FF0007E7FFC00FDF07E00FFC01F00F
+F801F00FF001F81FE000F81FC000FC1F8000FC1F8000FC3F0000FC3F0000FC3F0000FC3F
+0000FC7E0001FC7E0001FC7E0001FC7E0001FCFC0003F8FC0003F8FC0003F8FC0003F0FC
+0007F0F80007E0F80007E0F8000FC0F8000FC0F8001F80F8001F007C003E007C007E003C
+00FC003E01F0001F07E0000FFFC00007FF000001FC00001E3B7CB924>I<00003FC00001
+FFF00007FFFC000FE03E003F800E007E001F00FC003F01F8007F03F000FF07E000FF07E0
+00FE0FC0007C1FC000381F8000003F8000003F0000007F0000007F0000007F000000FE00
+0000FE000000FE000000FE000000FE000000FC000000FC000000FC000000FC0000027C00
+00077E00000E7E00001C3E0000381F0000F00F8003E00FE03FC003FFFF0001FFFC00003F
+C00020267DA424>I E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Ff cmex10 10 3
+/Ff 3 119 df<0000000000003000000000000078000000000000780000000000007800
+000000000078000000000000780000000000007800000000000078000000000000780000
+000000007800000000000078000000000000780000000000007800000000000078000000
+00000078000000000000780000000000007800000000000078000C0000000078000C0000
+000078001C0000000078001E0000000078003E0000000078003E0000000078007F000000
+0078007F000000007800FF000000007800FF800000007801FF800000007801FF80000000
+7803BFC00000007803BFC000000078073FC000000078071FE0000000780E1FE000000078
+0E1FE0000000781C0FF0000000781C0FF000000078380FF000000078380FF00000007870
+07F8000000787007F800000078E007F8000000786003FC000000780003FC000000780003
+FC000000780001FE000000780001FE000000780001FE000000780000FF000000780000FF
+000000780000FF0000007800007F8000007800007F8000007800007F8000007800003FC0
+00007800003FC000007800003FC000007800001FE000007800001FE000007800001FE000
+007800000FF000007800000FF000007800000FF0000078000007F8000078000007F80000
+78000007F8000078000003FC000078000003FC000078000003FC000078000001FE000078
+000001FE000078000001FE000078000000FF000078000000FF000078000000FF00007800
+00007F8000780000007F8000780000007F8000780000003FC000780000003FC000780000
+003FC000780000001FE000780000001FE000780000001FE000780000000FF00078000000
+0FF000780000000FF0007800000007F8007800000007F8007800000007F8007800000003
+FC007800000003FC007800000003FC007800000001FE007800000001FE007800000001FE
+007800000001FE007800000000FF007800000000FF007800000000FF0078000000007F80
+78000000007F8078000000007F8078000000003FC078000000003FC078000000003FC078
+000000001FE078000000001FE078000000001FE078000000000FF078000000000FF07800
+0000000FF0780000000007F8780000000007F8780000000007F8780000000003FC780000
+000003FC780000000003FC780000000001FE780000000001FE780000000001FE78000000
+0000FF780000000000FF780000000000FF7800000000007FF800000000007FF800000000
+007FF800000000003FF800000000003FF800000000003FF800000000001FF80000000000
+1FF800000000001FF800000000000FF800000000000FF800000000000FF8000000000007
+F8000000000007F8000000000007F8000000000003F8000000000003F8000000000003F8
+000000000001F8000000000001F8000000000001F8000000000000F8000000000000F800
+0000000000F800000000000070000000000000603597778158>116
+D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600436468158>I<7FFFFFFEFFFFFFFFFFFF
+FFFFFFFFFFFEF0000000F0000000F0000000F0000000F0000000F0000000F0000000F000
+0000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000
+0000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000
+0000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000
+0000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000
+0000F0000000F0000000F0000000600000002034468358>I E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fg ptmri8r 100 1
+/Fg 1 104 df<00038007C4C01C78C0383880301800701C00701C00701C00701C003018
+003838001C700027C0002000002000003000003FF8001FFF001FFF802003806001C0C000
+C0C000C0C000C06001803003001C0E0007F800121C7F9215>103
+D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fh ptmr8r 20 20
+/Fh 20 119 df<03FC000FFE001FFF003FFF803FFFC07FFFC07FFFC07FFFE07FFFE0FFFF
+E07FFFE07FFFC07FFFC03FFF803FFF801FFE0007FC000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000003F8000FFE001FFF003FFF803FFFC07FFFC07FFFE07FFFE0FFFFE07FFF
+E07FFFE07FFFC07FFFC03FFF801FFF801FFF0007FC0001F000134E73CB2E>58
+D<00000000000001E00000000000000000000000000001F0000000000000000000000000
+0001F00000000000000000000000000003F00000000000000000000000000003F8000000
+0000000000000000000007F80000000000000000000000000007FC000000000000000000
+000000000FFC000000000000000000000000000FFE000000000000000000000000000FFE
+000000000000000000000000001FFF000000000000000000000000001FFF000000000000
+000000000000003FFF000000000000000000000000003FFF800000000000000000000000
+007FFF800000000000000000000000007FFFC00000000000000000000000007FFFC00000
+00000000000000000000FFFFE0000000000000000000000000FFFFE00000000000000000
+00000001FFFFE0000000000000000000000001FFFFF0000000000000000000000001FFFF
+F0000000000000000000000003FFFFF8000000000000000000000003FFFFF80000000000
+00000000000007FFFFFC000000000000000000000007F3FFFC0000000000000000000000
+0FF3FFFE00000000000000000000000FE1FFFE00000000000000000000000FE1FFFE0000
+0000000000000000001FE1FFFF00000000000000000000001FC0FFFF0000000000000000
+0000003FC0FFFF80000000000000000000003F807FFF80000000000000000000007F807F
+FFC0000000000000000000007F007FFFC0000000000000000000007F003FFFC000000000
+000000000000FF003FFFE000000000000000000000FE001FFFE000000000000000000001
+FE001FFFF000000000000000000001FC000FFFF000000000000000000003FC000FFFF800
+000000000000000003FC000FFFF800000000000000000003F80007FFFC00000000000000
+000007F80007FFFC00000000000000000007F00003FFFC0000000000000000000FF00003
+FFFE0000000000000000000FF00003FFFE0000000000000000000FE00001FFFF00000000
+00000000001FE00001FFFF0000000000000000001FC00000FFFF8000000000000000003F
+C00000FFFF8000000000000000003F8000007FFF8000000000000000007F8000007FFFC0
+00000000000000007F8000007FFFC000000000000000007F0000003FFFE0000000000000
+0000FF0000003FFFE00000000000000000FE0000001FFFF00000000000000001FE000000
+1FFFF00000000000000001FE0000001FFFF80000000000000003FC0000000FFFF8000000
+0000000003FC0000000FFFF80000000000000003F800000007FFFC0000000000000007F8
+00000007FFFC0000000000000007F800000003FFFE000000000000000FF000000003FFFE
+000000000000000FF000000003FFFF000000000000001FE000000001FFFF000000000000
+001FE000000001FFFF800000000000001FC000000000FFFF800000000000003FC0000000
+00FFFF800000000000003FFFFFFFFFFFFFFFC00000000000007FFFFFFFFFFFFFFFC00000
+000000007FFFFFFFFFFFFFFFE00000000000007FFFFFFFFFFFFFFFE0000000000000FFFF
+FFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFF0000000000001FE00000000001FFF
+F0000000000001FC00000000001FFFF8000000000003FC00000000000FFFF80000000000
+03FC00000000000FFFFC000000000003F800000000000FFFFC000000000007F800000000
+0007FFFE000000000007F8000000000007FFFE00000000000FF0000000000003FFFF0000
+0000000FF0000000000003FFFF00000000001FE0000000000001FFFF00000000001FE000
+0000000001FFFF80000000003FE0000000000001FFFF80000000003FC0000000000000FF
+FFC0000000003FC0000000000000FFFFC0000000007F800000000000007FFFE000000000
+7F800000000000007FFFE000000000FF800000000000003FFFE000000000FF0000000000
+00003FFFF000000001FF000000000000003FFFF000000001FE000000000000001FFFF800
+000003FE000000000000001FFFF800000003FE000000000000001FFFFC00000007FE0000
+00000000000FFFFC00000007FC000000000000000FFFFE0000000FFC000000000000000F
+FFFE0000000FFC000000000000000FFFFF0000001FFC000000000000000FFFFF0000003F
+FC000000000000000FFFFF8000007FFC000000000000000FFFFFC000007FFE0000000000
+00000FFFFFE00000FFFF000000000000001FFFFFF00003FFFF800000000000003FFFFFF8
+001FFFFFE0000000000000FFFFFFFF00FFFFFFFF80000000007FFFFFFFFFE0FFFFFFFF80
+000000007FFFFFFFFFE0FFFFFFFF80000000007FFFFFFFFFE073707EEF78>65
+D<FFFFFFFFFFFFFE00000000000000FFFFFFFFFFFFFFFC000000000000FFFFFFFFFFFFFF
+FFE000000000003FFFFFFFFFFFFFFFFE000000000000FFFFFFFFFFFFFFFFC00000000000
+3FFFFFFFFFFFFFFFF800000000000FFFFFE0003FFFFFFF00000000000FFFFF800000FFFF
+FFC00000000007FFFF0000000FFFFFF00000000007FFFE00000001FFFFFC0000000003FF
+FE000000003FFFFE0000000003FFFE000000000FFFFF8000000003FFFE0000000003FFFF
+C000000003FFFE0000000001FFFFF000000003FFFE00000000007FFFF800000003FFFE00
+000000003FFFFC00000003FFFE00000000001FFFFE00000003FFFE000000000007FFFF00
+000003FFFE000000000003FFFF80000003FFFE000000000001FFFFC0000003FFFE000000
+000000FFFFE0000003FFFE0000000000007FFFF0000003FFFE0000000000003FFFF00000
+03FFFE0000000000003FFFF8000003FFFE0000000000001FFFFC000003FFFE0000000000
+000FFFFC000003FFFE00000000000007FFFE000003FFFE00000000000007FFFF000003FF
+FE00000000000003FFFF000003FFFE00000000000003FFFF800003FFFE00000000000001
+FFFF800003FFFE00000000000000FFFFC00003FFFE00000000000000FFFFC00003FFFE00
+000000000000FFFFC00003FFFE000000000000007FFFE00003FFFE000000000000007FFF
+E00003FFFE000000000000003FFFE00003FFFE000000000000003FFFF00003FFFE000000
+000000003FFFF00003FFFE000000000000001FFFF00003FFFE000000000000001FFFF000
+03FFFE000000000000001FFFF80003FFFE000000000000000FFFF80003FFFE0000000000
+00000FFFF80003FFFE000000000000000FFFF80003FFFE000000000000000FFFF80003FF
+FE000000000000000FFFF80003FFFE000000000000000FFFFC0003FFFE00000000000000
+07FFFC0003FFFE0000000000000007FFFC0003FFFE0000000000000007FFFC0003FFFE00
+00000000000007FFFC0003FFFE0000000000000007FFFC0003FFFE0000000000000007FF
+FC0003FFFE0000000000000007FFFC0003FFFE0000000000000007FFFC0003FFFE000000
+0000000007FFFC0003FFFE0000000000000007FFFC0003FFFE0000000000000007FFFC00
+03FFFE0000000000000007FFFC0003FFFE0000000000000007FFFC0003FFFE0000000000
+000007FFFC0003FFFE0000000000000007FFF80003FFFE0000000000000007FFF80003FF
+FE000000000000000FFFF80003FFFE000000000000000FFFF80003FFFE00000000000000
+0FFFF80003FFFE000000000000000FFFF80003FFFE000000000000000FFFF00003FFFE00
+0000000000000FFFF00003FFFE000000000000001FFFF00003FFFE000000000000001FFF
+F00003FFFE000000000000001FFFF00003FFFE000000000000001FFFE00003FFFE000000
+000000003FFFE00003FFFE000000000000003FFFE00003FFFE000000000000003FFFC000
+03FFFE000000000000007FFFC00003FFFE000000000000007FFF800003FFFE0000000000
+0000FFFF800003FFFE00000000000000FFFF000003FFFE00000000000001FFFF000003FF
+FE00000000000001FFFF000003FFFE00000000000003FFFE000003FFFE00000000000003
+FFFC000003FFFE00000000000007FFFC000003FFFE0000000000000FFFF8000003FFFE00
+00000000001FFFF8000003FFFE0000000000001FFFF0000003FFFE0000000000003FFFE0
+000003FFFE0000000000007FFFC0000003FFFE000000000000FFFF80000003FFFE000000
+000001FFFF80000003FFFE000000000003FFFF00000003FFFE00000000000FFFFC000000
+03FFFE00000000001FFFF800000003FFFE00000000007FFFF000000003FFFE0000000000
+FFFFE000000003FFFE0000000003FFFFC000000007FFFE000000001FFFFF0000000007FF
+FE000000007FFFFC0000000007FFFF00000003FFFFF8000000000FFFFF8000007FFFFFE0
+000000000FFFFFE0001FFFFFFF00000000003FFFFFFFFFFFFFFFFC0000000000FFFFFFFF
+FFFFFFFFE0000000001FFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFF000000000
+00FFFFFFFFFFFFFFFE000000000000FFFFFFFFFFFFFF000000000000006E6E7DED78>68
+D<FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF
+FFFF00001FFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF0000003FFFFFFFFF
+FFFFFFFFFF0000001FFFFF8000000003FFFF0000000FFFFF00000000003FFF00000007FF
+FE000000000007FF00000007FFFE000000000003FF00000007FFFE000000000001FF0000
+0003FFFE000000000000FF00000003FFFE0000000000007F00000003FFFE000000000000
+7F00000003FFFE0000000000003F00000003FFFE0000000000003F00000003FFFE000000
+0000001F80000003FFFE0000000000001F80000003FFFE0000000000001F80000003FFFE
+0000000000000F80000003FFFE0000000000000F80000003FFFE0000000000000F800000
+03FFFE0000000000000F80000003FFFE0000000000000F80000003FFFE00000000000000
+00000003FFFE0000000000000000000003FFFE0000000000000000000003FFFE00000000
+00000000000003FFFE0000000000000000000003FFFE0000000000000000000003FFFE00
+00000000000000000003FFFE0000000000000000000003FFFE0000000000000000000003
+FFFE00000000001E0000000003FFFE00000000001E0000000003FFFE00000000001E0000
+000003FFFE00000000001E0000000003FFFE00000000003E0000000003FFFE0000000000
+3E0000000003FFFE00000000003E0000000003FFFE00000000003E0000000003FFFE0000
+0000007E0000000003FFFE00000000007E0000000003FFFE0000000000FE0000000003FF
+FE0000000000FE0000000003FFFE0000000001FE0000000003FFFE0000000003FE000000
+0003FFFE000000000FFE0000000003FFFE000000007FFE0000000003FFFFFFFFFFFFFFFE
+0000000003FFFFFFFFFFFFFFFE0000000003FFFFFFFFFFFFFFFE0000000003FFFFFFFFFF
+FFFFFE0000000003FFFFFFFFFFFFFFFE0000000003FFFFFFFFFFFFFFFE0000000003FFFE
+000000007FFE0000000003FFFE000000000FFE0000000003FFFE0000000003FE00000000
+03FFFE0000000001FE0000000003FFFE0000000000FE0000000003FFFE0000000000FE00
+00000003FFFE00000000007E0000000003FFFE00000000007E0000000003FFFE00000000
+003E0000000003FFFE00000000003E0000000003FFFE00000000003E0000000003FFFE00
+000000003E0000000003FFFE00000000003E0000000003FFFE00000000001E0000000003
+FFFE00000000001E0000000003FFFE00000000001E0000000003FFFE00000000001E0000
+000003FFFE0000000000000000000003FFFE0000000000000000000003FFFE0000000000
+000000000003FFFE0000000000000000000003FFFE0000000000000000000003FFFE0000
+000000000000000003FFFE0000000000000000000003FFFE0000000000000000000003FF
+FE0000000000000000000003FFFE0000000000000000000003FFFE000000000000000F80
+0003FFFE000000000000000F800003FFFE000000000000001F000003FFFE000000000000
+001F000003FFFE000000000000003F000003FFFE000000000000003F000003FFFE000000
+000000007E000003FFFE00000000000000FE000003FFFE00000000000000FE000003FFFE
+00000000000001FE000003FFFE00000000000001FC000003FFFE00000000000003FC0000
+03FFFE00000000000007FC000003FFFE0000000000000FFC000003FFFE0000000000001F
+F8000003FFFE0000000000003FF8000003FFFE0000000000007FF8000007FFFE00000000
+0001FFF0000007FFFF000000000007FFF0000007FFFF00000000001FFFF000000FFFFFC0
+00000001FFFFF000001FFFFFFC0000007FFFFFE000003FFFFFFFFFFFFFFFFFFFE00000FF
+FFFFFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFFFFFFFFE000FFFFFFFFFFFFFFFFFFFFFFC0
+00FFFFFFFFFFFFFFFFFFFFFFC000FFFFFFFFFFFFFFFFFFFFFFC000616E7EED65>I<FFFF
+FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF001FFF
+FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF00003FFFFFFFFFFFFFFFFFFF00001F
+FFFF8000000003FFFF00000FFFFF00000000003FFF000007FFFE000000000007FF000007
+FFFE000000000003FF000007FFFE000000000001FF000003FFFE000000000000FF000003
+FFFE0000000000007F000003FFFE0000000000007F000003FFFE0000000000003F000003
+FFFE0000000000003F000003FFFE0000000000001F800003FFFE0000000000001F800003
+FFFE0000000000001F800003FFFE0000000000000F800003FFFE0000000000000F800003
+FFFE0000000000000F800003FFFE0000000000000F800003FFFE0000000000000F800003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000003C00000003FFFE00000000007C00000003FFFE00000000007C00000003
+FFFE00000000007C00000003FFFE00000000007C00000003FFFE00000000007C00000003
+FFFE0000000000FC00000003FFFE0000000000FC00000003FFFE0000000000FC00000003
+FFFE0000000001FC00000003FFFE0000000001FC00000003FFFE0000000003FC00000003
+FFFE0000000007FC00000003FFFE000000000FFC00000003FFFE000000003FFC00000003
+FFFE00000001FFFC00000003FFFFFFFFFFFFFFFC00000003FFFFFFFFFFFFFFFC00000003
+FFFFFFFFFFFFFFFC00000003FFFFFFFFFFFFFFFC00000003FFFFFFFFFFFFFFFC00000003
+FFFFFFFFFFFFFFFC00000003FFFE00000001FFFC00000003FFFE000000003FFC00000003
+FFFE000000000FFC00000003FFFE0000000007FC00000003FFFE0000000003FC00000003
+FFFE0000000001FC00000003FFFE0000000001FC00000003FFFE0000000000FC00000003
+FFFE0000000000FC00000003FFFE0000000000FC00000003FFFE00000000007C00000003
+FFFE00000000007C00000003FFFE00000000007C00000003FFFE00000000007C00000003
+FFFE00000000007C00000003FFFE00000000003C00000003FFFE00000000003C00000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000003
+FFFE00000000000000000003FFFE00000000000000000003FFFE00000000000000000007
+FFFF00000000000000000007FFFF00000000000000000007FFFF0000000000000000000F
+FFFF8000000000000000001FFFFFC000000000000000003FFFFFE00000000000000000FF
+FFFFF8000000000000000FFFFFFFFF80000000000000FFFFFFFFFFFC000000000000FFFF
+FFFFFFFC000000000000FFFFFFFFFFFC000000000000596E7EED5C>I<FFFFFFFFFFFF80
+FFFFFFFFFFFF80FFFFFFFFFFFF8003FFFFFFFFF800003FFFFFFF0000000FFFFFF8000000
+03FFFFF000000003FFFFE000000001FFFFC000000001FFFFC000000001FFFFC000000000
+FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FF
+FF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF
+8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF80
+00000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000
+000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF800000
+0000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF80000000
+00FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000
+FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FF
+FF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF
+8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF80
+00000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000
+000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF800000
+0000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF80000000
+00FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000
+FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FF
+FF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF
+8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF8000000000FFFF80
+00000001FFFFC000000001FFFFC000000001FFFFC000000003FFFFE000000003FFFFF000
+00000FFFFFF80000003FFFFFFE000007FFFFFFFFE000FFFFFFFFFFFF80FFFFFFFFFFFF80
+FFFFFFFFFFFF80316E7DED37>73 D<FFFFFFFFFFFFF000000000FFFFFFFFFFFFFFC00000
+00FFFFFFFFFFFFFFFC0000003FFFFFFFFFFFFFFFC0000001FFFFFFFFFFFFFFF00000003F
+FFFFFFFFFFFFFE0000001FFFFF8007FFFFFF8000000FFFFF00001FFFFFE0000007FFFE00
+0003FFFFF0000007FFFE0000007FFFF8000007FFFE0000001FFFFE000003FFFE0000000F
+FFFF000003FFFE00000007FFFF800003FFFE00000001FFFF800003FFFE00000000FFFFC0
+0003FFFE00000000FFFFC00003FFFE000000007FFFE00003FFFE000000003FFFE00003FF
+FE000000003FFFF00003FFFE000000001FFFF00003FFFE000000001FFFF80003FFFE0000
+00000FFFF80003FFFE000000000FFFF80003FFFE000000000FFFF80003FFFE000000000F
+FFF80003FFFE0000000007FFFC0003FFFE0000000007FFFC0003FFFE0000000007FFFC00
+03FFFE0000000007FFFC0003FFFE0000000007FFFC0003FFFE0000000007FFFC0003FFFE
+0000000007FFFC0003FFFE0000000007FFFC0003FFFE0000000007FFFC0003FFFE000000
+0007FFFC0003FFFE0000000007FFFC0003FFFE0000000007FFF80003FFFE000000000FFF
+F80003FFFE000000000FFFF80003FFFE000000000FFFF80003FFFE000000000FFFF00003
+FFFE000000001FFFF00003FFFE000000001FFFF00003FFFE000000003FFFE00003FFFE00
+0000003FFFE00003FFFE000000007FFFC00003FFFE000000007FFFC00003FFFE00000000
+FFFF800003FFFE00000001FFFF000003FFFE00000003FFFF000003FFFE00000007FFFE00
+0003FFFE0000001FFFFC000003FFFE0000007FFFF8000003FFFE000001FFFFF0000003FF
+FE00000FFFFFC0000003FFFFC001FFFFFF80000003FFFFFFFFFFFFFE00000003FFFFFFFF
+FFFFF800000003FFFFFFFFFFFFE000000003FFFFFFFFFFFF0000000003FFFFFFFFFFF000
+00000003FFFFFFFFF8000000000003FFFE000000000000000003FFFE0000000000000000
+03FFFE000000000000000003FFFE000000000000000003FFFE000000000000000003FFFE
+000000000000000003FFFE000000000000000003FFFE000000000000000003FFFE000000
+000000000003FFFE000000000000000003FFFE000000000000000003FFFE000000000000
+000003FFFE000000000000000003FFFE000000000000000003FFFE000000000000000003
+FFFE000000000000000003FFFE000000000000000003FFFE000000000000000003FFFE00
+0000000000000003FFFE000000000000000003FFFE000000000000000003FFFE00000000
+0000000003FFFE000000000000000003FFFE000000000000000003FFFE00000000000000
+0003FFFE000000000000000003FFFE000000000000000003FFFE000000000000000003FF
+FE000000000000000003FFFE000000000000000003FFFE000000000000000003FFFE0000
+00000000000003FFFE000000000000000003FFFE000000000000000003FFFE0000000000
+00000003FFFE000000000000000003FFFE000000000000000007FFFF0000000000000000
+07FFFF000000000000000007FFFF00000000000000000FFFFF80000000000000001FFFFF
+80000000000000003FFFFFC000000000000000FFFFFFF00000000000001FFFFFFFFF0000
+00000000FFFFFFFFFFFC0000000000FFFFFFFFFFFC0000000000FFFFFFFFFFFC00000000
+00566E7DED5C>80 D<0000001FFF800000E000000000FFFFF80001E000000007FFFFFF00
+01F00000001FFFFFFFE003F00000003FFFFFFFFC07F0000000FFFFFFFFFFFFF0000001FF
+FE003FFFFFF0000003FFF00007FFFFF000000FFFC00000FFFFF000000FFF8000007FFFF0
+00001FFF0000001FFFF000003FFE0000000FFFF000007FFC00000007FFF800007FF80000
+0003FFF80000FFF800000001FFF80000FFF000000000FFF80001FFF0000000007FF80001
+FFF0000000003FF80003FFE0000000001FF80003FFE0000000000FF80003FFE000000000
+07F80003FFE00000000007F80007FFE00000000003FC0007FFE00000000003FC0007FFE0
+0000000001FC0007FFE00000000001FC0007FFF00000000000FC0007FFF00000000000FC
+0007FFF000000000007C0007FFF800000000007C0007FFFC00000000007C0007FFFC0000
+0000003E0007FFFE00000000003E0007FFFF00000000003E0003FFFF80000000001E0003
+FFFFC000000000000003FFFFE000000000000003FFFFF000000000000001FFFFF8000000
+00000001FFFFFC00000000000000FFFFFF00000000000000FFFFFF800000000000007FFF
+FFE00000000000007FFFFFF00000000000003FFFFFFC0000000000001FFFFFFF00000000
+00000FFFFFFF80000000000007FFFFFFE0000000000003FFFFFFF8000000000003FFFFFF
+FE000000000000FFFFFFFF0000000000007FFFFFFFC000000000003FFFFFFFF000000000
+001FFFFFFFF8000000000007FFFFFFFE000000000003FFFFFFFF000000000000FFFFFFFF
+C000000000007FFFFFFFE000000000001FFFFFFFF0000000000007FFFFFFFC0000000000
+01FFFFFFFE000000000000FFFFFFFF0000000000003FFFFFFF8000000000000FFFFFFFC0
+000000000003FFFFFFE0000000000001FFFFFFF00000000000007FFFFFF8000000000000
+3FFFFFF80000000000000FFFFFFC00000000000007FFFFFE00000000000003FFFFFE0000
+0000000001FFFFFF000000000000007FFFFF000000000000003FFFFF800000000000001F
+FFFF800000000000000FFFFFC000000000000007FFFFC000000000000003FFFFC0000000
+00000003FFFFC0F0000000000001FFFFE0F0000000000000FFFFE0F8000000000000FFFF
+E0F80000000000007FFFE07C0000000000007FFFE07C0000000000007FFFE07E00000000
+00003FFFE07E0000000000003FFFE07F0000000000003FFFE07F0000000000003FFFE07F
+8000000000003FFFC03FC000000000003FFFC03FC000000000003FFFC03FE00000000000
+3FFFC03FE000000000003FFF803FF000000000007FFF803FF800000000007FFF803FFC00
+000000007FFF001FFC0000000000FFFF001FFE0000000000FFFE001FFF0000000001FFFC
+001FFF8000000001FFFC001FFFC000000003FFF8001FFFF000000007FFF0001FFFF80000
+000FFFE0000FFFFE0000003FFFC0000FFFFF8000007FFF80000FFFFFE00001FFFF00000F
+FFFFFC000FFFFE00000FFFFFFFFFFFFFF800000FE03FFFFFFFFFF000000FC007FFFFFFFF
+C00000078000FFFFFFFE0000000780001FFFFFF800000007800000FFFF800000004B7279
+EF5C>83 D<7FFFFFFFFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFFFFFFE7FFFFFFFFFFFFF
+FFFFFFFFFE7FFFFFFFFFFFFFFFFFFFFFFE7FFFFFFFFFFFFFFFFFFFFFFE7FFFFFFFFFFFFF
+FFFFFFFFFE7FFFF80001FFFF00001FFFFE7FFF800001FFFF000001FFFE7FFC000001FFFF
+0000003FFEFFF8000001FFFF0000001FFEFFE0000001FFFF0000000FFEFFC0000001FFFF
+00000007FEFFC0000001FFFF00000003FEFF80000001FFFF00000001FEFF00000001FFFF
+00000001FEFF00000001FFFF00000000FEFE00000001FFFF00000000FEFE00000001FFFF
+000000007EFC00000001FFFF000000007EFC00000001FFFF000000007EFC00000001FFFF
+000000003EFC00000001FFFF000000003EF800000001FFFF000000003EF800000001FFFF
+000000003EF800000001FFFF000000001EF000000001FFFF000000001EF000000001FFFF
+000000001EF000000001FFFF000000001E0000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000001FFFF00000000000000000001FFFF00000000000000000001FFFF
+00000000000000000003FFFF80000000000000000003FFFF80000000000000000003FFFF
+80000000000000000007FFFFC000000000000000000FFFFFE000000000000000001FFFFF
+F000000000000000007FFFFFFC000000000000000FFFFFFFFFC0000000000000FFFFFFFF
+FFFF000000000000FFFFFFFFFFFF000000000000FFFFFFFFFFFF0000005F6E7DED65>I<
+FFFFFFFFFFF000000001FFFFFFFF80FFFFFFFFFFF000000001FFFFFFFF80FFFFFFFFFFF0
+00000001FFFFFFFF800FFFFFFFFF00000000000FFFFFFC0001FFFFFFC0000000000001FF
+FFE00000FFFFFF800000000000007FFF8000007FFFFF000000000000003FFF0000003FFF
+FE000000000000003FFE0000001FFFFE000000000000001FFC0000001FFFFE0000000000
+00001FFC0000000FFFFF000000000000001FF800000007FFFF000000000000001FF80000
+0007FFFF000000000000001FF000000003FFFF000000000000003FF000000003FFFF8000
+00000000003FE000000001FFFF800000000000003FE000000001FFFFC00000000000003F
+C000000000FFFFC00000000000007FC000000000FFFFC00000000000007FC0000000007F
+FFE00000000000007F80000000007FFFE0000000000000FF80000000003FFFF000000000
+0000FF00000000003FFFF0000000000000FF00000000001FFFF8000000000001FF000000
+00001FFFF8000000000001FE00000000001FFFF8000000000003FE00000000000FFFFC00
+0000000003FC00000000000FFFFC000000000003FC000000000007FFFE000000000007FC
+000000000007FFFE000000000007F8000000000003FFFF00000000000FF8000000000003
+FFFF00000000000FF0000000000001FFFF80000000000FF0000000000001FFFF80000000
+001FF0000000000001FFFF80000000001FE0000000000000FFFFC0000000003FE0000000
+000000FFFFC0000000003FC00000000000007FFFE0000000003FC00000000000007FFFE0
+000000007FC00000000000003FFFF0000000007F800000000000003FFFF000000000FF80
+0000000000001FFFF800000000FF000000000000001FFFF800000000FF00000000000000
+1FFFF800000001FF000000000000000FFFFC00000001FE000000000000000FFFFC000000
+03FE0000000000000007FFFE00000003FC0000000000000007FFFE00000003FC00000000
+00000003FFFF00000007FC0000000000000003FFFF00000007F80000000000000001FFFF
+8000000FF80000000000000001FFFF8000000FF00000000000000000FFFFC000000FF000
+00000000000000FFFFC000001FF00000000000000000FFFFC000001FE000000000000000
+007FFFE000003FE000000000000000007FFFE000003FC000000000000000003FFFF00000
+3FC000000000000000003FFFF000007FC000000000000000001FFFF800007F8000000000
+000000001FFFF80000FF8000000000000000000FFFFC0000FF8000000000000000000FFF
+FC0000FF0000000000000000000FFFFC0001FF00000000000000000007FFFE0001FE0000
+0000000000000007FFFE0003FE00000000000000000003FFFF0003FE0000000000000000
+0003FFFF0003FC00000000000000000001FFFF8007FC00000000000000000001FFFF8007
+F800000000000000000000FFFFC00FF800000000000000000000FFFFC00FF80000000000
+0000000000FFFFC00FF0000000000000000000007FFFE01FF0000000000000000000007F
+FFE01FE0000000000000000000003FFFF03FE0000000000000000000003FFFF03FE00000
+00000000000000001FFFF83FC0000000000000000000001FFFF87FC00000000000000000
+00000FFFFC7F80000000000000000000000FFFFCFF800000000000000000000007FFFCFF
+800000000000000000000007FFFEFF000000000000000000000007FFFFFF000000000000
+000000000003FFFFFE000000000000000000000003FFFFFE000000000000000000000001
+FFFFFE000000000000000000000001FFFFFC000000000000000000000000FFFFFC000000
+000000000000000000FFFFF80000000000000000000000007FFFF8000000000000000000
+0000007FFFF80000000000000000000000007FFFF00000000000000000000000003FFFF0
+0000000000000000000000003FFFE00000000000000000000000001FFFE0000000000000
+0000000000001FFFE00000000000000000000000000FFFC0000000000000000000000000
+0FFFC000000000000000000000000007FF8000000000000000000000000007FF80000000
+00000000000000000007FF8000000000000000000000000003FF00000000000000000000
+00000003FF0000000000000000000000000001FE0000000000000000000000000001FE00
+00000000000000000000000000FE0000000000000000000000000000FC00000000000000
+000000000000007C00000000000000000000000000007C00000000000000000000000000
+00380000000000000000000000000000380000000000000071707DED78>86
+D<3FFFFFFFFFFFF000003FFFFFFFFFC03FFFFFFFFFFFF000003FFFFFFFFFC03FFFFFFFFF
+FFF000003FFFFFFFFFC001FFFFFFFFFC000000007FFFFFFC00003FFFFFFF80000000000F
+FFFF8000000FFFFFFF000000000007FFFE00000007FFFFFF000000000007FFF800000001
+FFFFFE000000000003FFF000000000FFFFFE000000000003FFC0000000007FFFFE000000
+000003FF80000000003FFFFF000000000007FF00000000003FFFFF000000000007FE0000
+0000001FFFFF00000000000FFC00000000000FFFFF80000000000FF8000000000007FFFF
+80000000001FF8000000000003FFFFC0000000001FF0000000000003FFFFC0000000003F
+E0000000000001FFFFE0000000007FC0000000000000FFFFF000000000FF800000000000
+007FFFF000000001FF000000000000007FFFF800000001FE000000000000003FFFF80000
+0003FE000000000000001FFFFC00000007FC000000000000000FFFFE0000000FF8000000
+000000000FFFFE0000001FF00000000000000007FFFF0000001FE00000000000000003FF
+FF8000003FE00000000000000003FFFF8000007FC00000000000000001FFFFC00000FF80
+0000000000000000FFFFE00001FF0000000000000000007FFFE00003FE00000000000000
+00007FFFF00003FE0000000000000000003FFFF80007FC0000000000000000001FFFFC00
+0FF80000000000000000001FFFFC001FF00000000000000000000FFFFE003FE000000000
+000000000007FFFF003FE000000000000000000007FFFF007FC000000000000000000003
+FFFF80FF8000000000000000000001FFFFC1FF0000000000000000000001FFFFE3FE0000
+000000000000000000FFFFE7FE00000000000000000000007FFFF7FC0000000000000000
+0000007FFFFFF800000000000000000000003FFFFFF000000000000000000000001FFFFF
+E000000000000000000000001FFFFFE000000000000000000000000FFFFFC00000000000
+00000000000007FFFF80000000000000000000000007FFFF800000000000000000000000
+03FFFFC0000000000000000000000001FFFFC0000000000000000000000000FFFFE00000
+00000000000000000000FFFFF00000000000000000000000007FFFF00000000000000000
+000000003FFFF80000000000000000000000007FFFFC000000000000000000000000FFFF
+FC000000000000000000000000FFFFFE000000000000000000000001FFFFFF0000000000
+00000000000003FFFFFF800000000000000000000007FFFFFF8000000000000000000000
+0FFFFFFFC0000000000000000000000FF9FFFFE0000000000000000000001FF0FFFFE000
+0000000000000000003FE0FFFFF0000000000000000000007FE07FFFF800000000000000
+000000FFC03FFFFC00000000000000000000FF803FFFFC00000000000000000001FF001F
+FFFE00000000000000000003FE000FFFFF00000000000000000007FE000FFFFF00000000
+00000000000FFC0007FFFF8000000000000000001FF80003FFFFC000000000000000001F
+F00003FFFFC000000000000000003FE00001FFFFE000000000000000007FE00000FFFFF0
+0000000000000000FFC000007FFFF80000000000000001FF8000007FFFF8000000000000
+0001FF0000003FFFFC0000000000000003FE0000001FFFFE0000000000000007FE000000
+1FFFFE000000000000000FFC0000000FFFFF000000000000001FF800000007FFFF800000
+000000001FF000000007FFFF800000000000003FE000000003FFFFC00000000000007FE0
+00000001FFFFE0000000000000FFC000000001FFFFF0000000000001FF8000000000FFFF
+F0000000000003FF00000000007FFFF8000000000003FE00000000007FFFFC0000000000
+07FE00000000003FFFFC00000000000FFC00000000003FFFFE00000000001FF800000000
+001FFFFF00000000003FF800000000000FFFFF00000000007FF000000000000FFFFF8000
+000000FFE0000000000007FFFFC000000000FFE0000000000007FFFFE000000001FFC000
+0000000003FFFFF000000003FFC0000000000003FFFFF000000007FFC0000000000003FF
+FFF80000000FFFC0000000000003FFFFFC0000001FFFC0000000000003FFFFFE0000003F
+FFC0000000000003FFFFFF000000FFFFE0000000000007FFFFFFC00003FFFFF800000000
+000FFFFFFFF0001FFFFFFFE000000003FFFFFFFFFF00FFFFFFFFFC0000003FFFFFFFFFFF
+E0FFFFFFFFFC0000003FFFFFFFFFFFE0FFFFFFFFFC0000003FFFFFFFFFFFE0736E7EED78
+>88 D<000000007F0000000000000FFFF800000000007FFFFF8000000001FFFFFFE00000
+0007FFFFFFF80000001FFF83FFFC0000003FF8007FFF000000FFC0003FFF800001FF0000
+1FFFC00003FE00000FFFE00007FC00000FFFF0000FF8000007FFF0001FF0000007FFF800
+3FE0000007FFF8007FC0000003FFFC00FFC0000003FFFC01FF80000003FFFC01FF800000
+03FFFC03FF00000001FFFC07FF00000001FFFC07FE00000000FFF80FFE00000000FFF80F
+FE000000007FF00FFC000000003FE01FFC0000000007001FFC0000000000003FFC000000
+0000003FFC0000000000003FF80000000000003FF80000000000007FF80000000000007F
+F80000000000007FF80000000000007FF80000000000007FF8000000000000FFF8000000
+000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FF
+F8000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC000000
+000000FFFC000000000000FFFE000000000000FFFE000000000000FFFE0000000000007F
+FF0000000000007FFF0000000000007FFF0000000000027FFF8000000000077FFF800000
+00000F3FFFC0000000000E3FFFE0000000001E3FFFE0000000003C1FFFF0000000007C1F
+FFF800000000F81FFFFC00000001F80FFFFE00000003F00FFFFF00000007E007FFFF8000
+000FE003FFFFE000003FC003FFFFF800007F8001FFFFFE0003FF8000FFFFFFF03FFF0000
+FFFFFFFFFFFE00007FFFFFFFFFFC00003FFFFFFFFFF800001FFFFFFFFFF000000FFFFFFF
+FFE0000007FFFFFFFFC0000001FFFFFFFF00000000FFFFFFFE000000003FFFFFF8000000
+000FFFFFE00000000001FFFF00000000000007C0000000404F7CCC4A>99
+D<00000000FC000000000000003FFFE0000000000001FFFFFC00000000000FFFFFFF0000
+0000001FFFFFFFC0000000007FFFFFFFE000000001FFF0FFFFF000000003FE0007FFFC00
+000007FC0001FFFE0000000FF00000FFFF0000001FE000007FFF0000003FC000003FFF80
+00007F8000003FFFC00000FF0000001FFFC00000FF0000001FFFE00001FE0000000FFFE0
+0003FE0000000FFFF00003FC00000007FFF00007FC00000007FFF80007FC00000007FFF8
+000FFC00000007FFF8000FF800000003FFFC000FF800000003FFFC001FF800000003FFFC
+001FF800000003FFFC003FF800000003FFFC003FFFFFFFFFFFFFFE003FFFFFFFFFFFFFFE
+003FFFFFFFFFFFFFFE007FFFFFFFFFFFFFFE007FFFFFFFFFFFFFFE007FF0000000000000
+007FF0000000000000007FF0000000000000007FF000000000000000FFF0000000000000
+00FFF000000000000000FFF800000000000000FFF800000000000000FFF8000000000000
+00FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000000000
+00FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000000000
+007FFE000000000000007FFE000000000000007FFF000000000001807FFF000000000001
+C07FFF000000000003C07FFF800000000007803FFF800000000007803FFFC0000000000F
+003FFFE0000000001F001FFFE0000000003E001FFFF0000000007E001FFFF800000000FC
+000FFFFC00000001FC000FFFFE00000003F80007FFFF00000007F00007FFFF8000000FF0
+0003FFFFC000003FE00003FFFFF00000FFC00001FFFFFE0003FF800000FFFFFFE0FFFF00
+0000FFFFFFFFFFFE0000007FFFFFFFFFFC0000003FFFFFFFFFF80000001FFFFFFFFFF000
+00000FFFFFFFFFE000000003FFFFFFFF8000000001FFFFFFFF00000000007FFFFFFC0000
+0000001FFFFFE0000000000003FFFF000000000000000F8000000000424F7CCC4A>101
+D<0000F800000003FE0000000FFF8000001FFFC000001FFFC000003FFFE000003FFFE000
+003FFFE000003FFFE000003FFFE000003FFFE000001FFFC000001FFFC000000FFF800000
+07FF00000003FE00000000F8000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000E000000007E00000003FE0000001FFE000000FFFE000007FFFE000
+01FFFFE0000FFFFFE0007FFFFFE000FFFFFFE000F87FFFE000001FFFE000000FFFE00000
+0FFFE000000FFFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007
+FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FF
+E0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0
+000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE000
+0007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE00000
+07FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007
+FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FFE0000007FF
+E0000007FFE0000007FFE0000007FFE000000FFFF000000FFFF000001FFFF000001FFFF8
+00007FFFFC0001FFFFFF00FFFFFFFFFEFFFFFFFFFEFFFFFFFFFE27717DF02E>105
+D<000000007F00000000000000001FFFFC00000000000000FFFFFF80000000000007FFFF
+FFF000000000001FFFFFFFFC00000000007FFF07FFFF0000000000FFF0007FFF80000000
+03FF80001FFFE000000007FF000007FFF00000000FFC000003FFF80000001FF8000001FF
+FC0000003FF0000000FFFE0000007FF00000007FFF000000FFE00000003FFF800001FFC0
+0000003FFFC00001FFC00000001FFFC00003FF800000000FFFE00003FF800000000FFFF0
+0007FF0000000007FFF0000FFF0000000007FFF8000FFF0000000003FFF8000FFE000000
+0003FFFC001FFE0000000001FFFC001FFE0000000001FFFC003FFE0000000000FFFE003F
+FC0000000000FFFE003FFC0000000000FFFE007FFC00000000007FFF007FFC0000000000
+7FFF007FFC00000000007FFF007FFC00000000007FFF007FFC00000000003FFF007FFC00
+000000003FFF80FFFC00000000003FFF80FFFC00000000003FFF80FFFC00000000003FFF
+80FFFC00000000003FFF80FFFC00000000001FFF80FFFC00000000001FFF80FFFE000000
+00001FFF80FFFE00000000001FFF80FFFE00000000001FFF80FFFE00000000001FFF80FF
+FE00000000001FFF80FFFE00000000001FFF80FFFF00000000001FFF007FFF0000000000
+1FFF007FFF00000000001FFF007FFF00000000001FFF007FFF80000000001FFF007FFF80
+000000001FFE003FFF80000000003FFE003FFF80000000003FFE003FFFC0000000003FFC
+001FFFC0000000003FFC001FFFE0000000003FFC001FFFE0000000003FF8000FFFE00000
+00007FF8000FFFF0000000007FF00007FFF0000000007FF00007FFF800000000FFE00003
+FFF800000000FFE00003FFFC00000001FFC00001FFFC00000001FF800000FFFE00000003
+FF8000007FFE00000003FF0000007FFF00000007FE0000003FFF8000000FFC0000001FFF
+C000001FF80000000FFFE000003FF000000007FFF000007FE000000001FFFC0001FFC000
+000000FFFF0007FF00000000003FFFF07FFE00000000001FFFFFFFF8000000000007FFFF
+FFE0000000000000FFFFFF000000000000001FFFF800000000000000007E000000000049
+4F7BCC53>111 D<000000000003F000000000000380007FFF80000000000F8001FFFFE0
+000000007F800FFFFFF800000003FF801FFFFFFE0000001FFF807FFFFFFF0000007FFF80
+FFFFFFFF800003FFFF81FFFFFFFFE0003FFFFF83FFFFFFFFF000FFFFFF87FFFFFFFFF000
+FFFFFF8FFF87FFFFF800FFFFFF9FF000FFFFFC00007FFFBFC0003FFFFE00003FFFFF0000
+0FFFFE00003FFFFC000007FFFF00001FFFF8000003FFFF00001FFFF0000001FFFF80001F
+FFE0000000FFFF80001FFFC00000007FFFC0001FFFC00000007FFFC0001FFF800000003F
+FFC0001FFF800000001FFFE0001FFF800000001FFFE0001FFF800000000FFFE0001FFF80
+0000000FFFF0001FFF800000000FFFF0001FFF8000000007FFF0001FFF8000000007FFF0
+001FFF8000000007FFF0001FFF8000000003FFF8001FFF8000000003FFF8001FFF800000
+0003FFF8001FFF8000000003FFF8001FFF8000000003FFF8001FFF8000000003FFF8001F
+FF8000000001FFF8001FFF8000000001FFF8001FFF8000000001FFF8001FFF8000000001
+FFF8001FFF8000000001FFF8001FFF8000000001FFF8001FFF8000000001FFF8001FFF80
+00000001FFF8001FFF8000000001FFF0001FFF8000000001FFF0001FFF8000000001FFF0
+001FFF8000000001FFF0001FFF8000000001FFF0001FFF8000000001FFF0001FFF800000
+0001FFE0001FFF8000000003FFE0001FFF8000000003FFE0001FFF8000000003FFC0001F
+FF8000000003FFC0001FFF8000000003FFC0001FFF8000000007FF80001FFF8000000007
+FF80001FFF8000000007FF00001FFF8000000007FF00001FFF800000000FFE00001FFF80
+0000000FFE00001FFF800000001FFC00001FFF800000001FFC00001FFF800000003FF800
+001FFFC00000003FF000001FFFC00000007FF000001FFFE0000000FFE000001FFFF00000
+01FFC000001FFFF8000001FF8000001FFFFC000007FF0000001FFFFF00000FFE0000001F
+FFFFC0001FFC0000001FFFBFF0007FF80000001FFF9FFF87FFE00000001FFF87FFFFFF80
+0000001FFF83FFFFFF000000001FFF80FFFFF8000000001FFF803FFFC0000000001FFF80
+01F800000000001FFF80000000000000001FFF80000000000000001FFF80000000000000
+001FFF80000000000000001FFF80000000000000001FFF80000000000000001FFF800000
+00000000001FFF80000000000000001FFF80000000000000001FFF80000000000000001F
+FF80000000000000001FFF80000000000000001FFF80000000000000001FFF8000000000
+0000001FFF80000000000000001FFF80000000000000001FFF80000000000000001FFF80
+000000000000001FFF80000000000000001FFF80000000000000001FFF80000000000000
+001FFF80000000000000001FFF80000000000000001FFF80000000000000001FFFC00000
+00000000003FFFC0000000000000003FFFC0000000000000003FFFE0000000000000007F
+FFF000000000000001FFFFF80000000000000FFFFFFF800000000000FFFFFFFFFF000000
+0000FFFFFFFFFF0000000000FFFFFFFFFF00000000004D717FCC53>I<00000000001E00
+000001C000FFC000000FC003FFF000007FC007FFF80001FFC01FFFF8000FFFC03FFFFC00
+7FFFC07FFFFC03FFFFC0FFFFFC1FFFFFC0FFFFFEFFFFFFC1FFFFFEFFFFFFC3FFFFFEFFFF
+FFC7E1FFFC007FFFC7C0FFFC003FFFCF007FFC001FFFDE001FF8001FFFDC000FF0000FFF
+F80003C0000FFFF8000000000FFFF0000000000FFFF0000000000FFFE0000000000FFFE0
+000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC000
+0000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC00000
+00000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000
+000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC000000000
+0FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000F
+FFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFF
+C0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0
+000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC000
+0000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC00000
+00000FFFE0000000001FFFE0000000001FFFE0000000003FFFF000000000FFFFF8000000
+07FFFFFE000000FFFFFFFFE00000FFFFFFFFFF0000FFFFFFFFFF0000374D7FCC37>114
+D<0001FFFC000000000FFFFF806000003FFFFFF9E00000FFFFFFFFE00001FF8007FFE000
+03FE0001FFE00007FC0000FFE0000FF800007FE0001FF000003FE0001FE000001FE0003F
+E000000FE0003FC000000FE0007FC0000007E0007FC0000007E0007FC0000003E000FFC0
+000003E000FFC0000003E000FFC0000001E000FFE0000001E000FFE0000000E000FFE000
+0000E000FFF0000000E000FFF8000000E000FFFC0000007000FFFE00000000007FFF0000
+0000007FFFC0000000007FFFE0000000003FFFF8000000003FFFFE000000001FFFFF0000
+00000FFFFFC00000000FFFFFF000000007FFFFFC00000003FFFFFE00000001FFFFFF8000
+0000FFFFFFE00000007FFFFFF00000003FFFFFFC0000000FFFFFFE00000007FFFFFF8000
+0001FFFFFFC0000000FFFFFFE00000003FFFFFF00000000FFFFFF800000007FFFFFC0000
+0001FFFFFC000000007FFFFE000000001FFFFE000000000FFFFF0000000003FFFF00C000
+0001FFFF00E00000007FFF80E00000003FFF80E00000003FFF80F00000001FFF80F00000
+000FFF80F00000000FFF80F800000007FF80F800000007FF80F800000007FF80FC000000
+07FF00FC00000007FF00FE00000007FF00FE00000007FE00FF00000007FE00FF0000000F
+FC00FF8000000FF800FFC000001FF800FFE000003FF000FFF000007FE000FFFC0000FFC0
+00FFFF0003FF8000FFFFF83FFE0000FFFFFFFFFC0000E01FFFFFF00000C000FFFF800000
+000003F0000000314E77CB41>I<00000300000000000700000000000700000000000F00
+000000001F00000000003F00000000003F00000000007F0000000000FF0000000000FF00
+00000001FF0000000003FF0000000007FF000000000FFF000000000FFF000000001FFF00
+0000003FFF000000007FFF00000000FFFF00000001FFFF00000007FFFF0000000FFFFFFF
+FF001FFFFFFFFF007FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF00
+0000003FFF000000003FFF000000003FFF000000003FFF000000003FFF000000003FFF80
+0000003FFF800000001FFF800020001FFF800070001FFFC000F0001FFFE001E0001FFFF0
+07E0000FFFFC3FC0000FFFFFFF800007FFFFFF000007FFFFFE000003FFFFFC000001FFFF
+F8000001FFFFE00000007FFFC00000001FFE0000000001E000002C627EDF2E>I<FFFFFF
+FF800007FFFFF0FFFFFFFF800007FFFFF01FFFFFFF800007FFFFF007FFFFF00000007FFF
+8003FFFFC00000001FFE0001FFFF800000000FFE0000FFFF8000000007FC00007FFF8000
+000007F800007FFF8000000007F800003FFF8000000007F000003FFFC000000007F00000
+1FFFC00000000FE000001FFFC00000000FE000000FFFE00000000FC000000FFFE0000000
+1FC000000FFFE00000001FC0000007FFF00000001F80000007FFF00000003F80000003FF
+F80000003F00000003FFF80000007F00000001FFF80000007F00000001FFFC0000007E00
+000000FFFC000000FE00000000FFFE000000FC00000000FFFE000000FC000000007FFE00
+0001FC000000007FFF000001F8000000003FFF000003F8000000003FFF800003F0000000
+003FFF800003F0000000001FFF800007F0000000001FFFC00007E0000000000FFFC00007
+E0000000000FFFC0000FC00000000007FFE0000FC00000000007FFE0001FC00000000007
+FFF0001F800000000003FFF0001F800000000003FFF0003F000000000001FFF8003F0000
+00000001FFF8007F000000000001FFFC007E000000000000FFFC007E000000000000FFFC
+00FC0000000000007FFE00FC0000000000007FFE00FC0000000000003FFF01F800000000
+00003FFF01F80000000000003FFF03F00000000000001FFF83F00000000000001FFF83F0
+0000000000000FFFC7E00000000000000FFFC7E00000000000000FFFCFC0000000000000
+07FFEFC000000000000007FFEFC000000000000003FFFF8000000000000003FFFF800000
+0000000001FFFF0000000000000001FFFF0000000000000001FFFF0000000000000000FF
+FE0000000000000000FFFE00000000000000007FFC00000000000000007FFC0000000000
+0000003FFC00000000000000003FF800000000000000003FF800000000000000001FF000
+000000000000001FF000000000000000000FF000000000000000000FE000000000000000
+000FE0000000000000000007C0000000000000000007C000000000000000000380000000
+00000000000380000000004C4D7DCA53>118 D E
+%EndDVIPSBitmapFont
+end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 2 1
+2 0 bop -450 -400 4661 50 v -450 6216 50 6617 v 651 -150
+a Fh(D)-7 b(VIPS:)43 b(A)e(T)1446 -112 y(E)1528 -150
+y(X)g(Dri)l(v)n(er)g(F)n(or)h(PostScript)1673 475 y Fg(g)-451
+1381 y @beginspecial @setspecial
+ 0 36 translate .05 .099 .95 { 27.4 0 translate gsave 0 0 moveto dup
+90 mul rotate -10 -10 rmoveto 20 0 rlineto 0 20 rlineto -20 0 rlineto
+closepath gsave dup setgray fill grestore 1 exch sub setgray stroke
+grestore 27.4 0 translate } for
+
+@endspecial 883 1534
+a Ff(v)883 1580 y(u)883 1630 y(u)883 1680 y(u)883 1730
+y(u)883 1780 y(u)883 1829 y(u)883 1879 y(u)883 1929 y(t)p
+970 1534 1908 4 v 970 1568 a(v)970 1615 y(u)970 1664
+y(u)970 1714 y(u)970 1764 y(u)970 1814 y(u)970 1864 y(u)970
+1913 y(t)p 1058 1568 1820 4 v 1730 1649 a Fe(a)23 b Fd(=)-14
+b Fc(\))23 b Fe(b)g Fc(\000)-14 b(!)23 b Fe(c)p 1068
+1686 1800 4 v 1068 1753 a Fd(the)32 b(phase)f(of)h(the)g(mo)r(on)e(m)n
+(ultiplied)e(b)n(y)j(the)h(n)n(um)n(b)r(er)1068 1853
+y(of)22 b(angels)d(that)j(can)g(dance)f(on)h(the)g(head)g(of)f(a)h(pin)
+f(while)1068 1953 y(the)34 b(ric)n(h)e(man)h(threads)g(the)h(needle)f
+(divided)f(b)n(y)i Fe(\031)j Fd(or)1068 2052 y(some)26
+b(other)h(transcenden)n(tal)e(n)n(um)n(b)r(er)-317 5669
+y @beginspecial 18 @llx 18 @lly 577 @urx 814 @ury 2796
+@rwi @setspecial @endspecial 2180 2369 a(T)-7 b(o)36
+b(run)h(this)f(test,)j(remo)n(v)n(e)33 b(a)j(\014le)g(called)e(m)n
+(test.ps)i(if)g(it)2097 2469 y(exists.)71 b(Then,)42
+b(run)e(T)2859 2486 y(E)2905 2469 y(X)f(o)n(v)n(er)f(test.tex,)43
+b(run)c(dvips)f(o)n(v)n(er)2097 2568 y(test.dvi,)21 b(sa)n(ving)d(the)j
+(output)g(in)e(a)h(\014le)g(test.ps.)35 b(Cop)n(y)19
+b(test.ps)2097 2668 y(to)35 b(m)n(test.ps.)57 b(Run)35
+b(dvips)e(o)n(v)n(er)g(test.dvi)h(again,)g(this)g(time)2097
+2767 y(prin)n(ting)18 b(or)g(sa)n(ving)g(the)i(output,)i(as)d(y)n(ou)g
+(c)n(ho)r(ose.)33 b(\(Including)2097 2867 y(the)25 b(do)r(cumen)n(t)e
+(to)r(o)h(man)n(y)e(times)h(inside)f(itself)h(will)e(o)n(v)n(er\015o)n
+(w)2097 2967 y(the)28 b(virtual)d(memory)g(capacities)g(of)i(most)g
+(prin)n(ters.\))2180 3129 y(Some)k(things)h(to)g(c)n(hec)n(k)f(on)i
+(this)e(page.)50 b(First,)33 b(the)g(large)2097 3228
+y(rules)23 b(surrounding)f(the)j(page)f(should)f(b)r(e)i(exactly)e(one)
+i(quar-)2097 3328 y(ter)k(inc)n(h)f(from)f(eac)n(h)i(b)r(order)f
+(\(assuming)e(a)i(8.5)g(b)n(y)h(11)f(page;)2097 3428
+y(for)21 b(an)f(a4)g(page,)i(c)n(hange)e(the)h Fb(\\afourfalse)c
+Fd(to)j Fb(\\afourtrue)2097 3527 y Fd(on)28 b(line)d(16.\))2180
+3689 y(Y)-7 b(ou)27 b(should)e(see)h(a)g(title)f(at)h(the)h(top,)g(and)
+f(a)g(large)e(italic)g(g)2097 3789 y(under)d(that.)34
+b(Then,)23 b(there)d(should)f(b)r(e)i(a)f(cen)n(tered)g(ro)n(w)f(of)i
+(ten)2097 3888 y(b)r(o)n(xes,)27 b(going)e(from)i(dark)f(to)i(ligh)n(t)
+d(gra)n(y)-7 b(,)26 b(rotating)g(slo)n(wly)-7 b(.)2180
+4050 y(In)36 b(the)g(`equation')f(that)h(follo)n(ws,)f(c)n(hec)n(k)g
+(the)h(upp)r(er)g(left)2097 4150 y(corner)f(of)h(the)g(radical)d(signs)
+h(for)i(alignmen)n(t.)59 b(Also)34 b(c)n(hec)n(k)2097
+4249 y(the)28 b(righ)n(t)e(arro)n(ws.)2180 4411 y(In)e(the)h(recursiv)n
+(ely)20 b(included)i(page)h(to)h(the)h(left,)f(note)g(ho)n(w)2097
+4511 y(bad)35 b(the)h(bitmapp)r(ed)e(fon)n(ts)h(lo)r(ok)f(\(they)i(are)
+e(the)i(ones)e(un-)2097 4611 y(der)e(the)h(radical,)e(and)h(indeed)g
+(this)g(text)h(itself.\))50 b(The)33 b(thin)2097 4710
+y(rules)k(ma)n(y)g(disapp)r(ear)f(altogether.)68 b(This)37
+b(p)r(oin)n(ts)g(out)i(the)2097 4810 y(resolution)20
+b(dep)r(endence)j(of)g(dvips)e(output;)k(this)d(is)g(an)g(unfor-)2097
+4910 y(tunate)33 b(necessit)n(y)e(of)i(using)e(bitmapp)r(ed)h(fon)n
+(ts.)52 b(The)33 b(P)n(ost-)2097 5009 y(Script)27 b(fon)n(ts,)g(on)h
+(the)g(other)f(hand,)g(should)g(scale)e(\014ne.)2180
+5171 y(Finally)-7 b(,)23 b(at)i(the)h(b)r(ottom)f(of)g(the)h(page,)f(y)
+n(ou)f(will)f(see)i(some)2097 5271 y(tests)f(of)g(the)h(accen)n(ts)e
+(in)h(the)g(P)n(ostScript)e(fon)n(ts.)35 b(P)n(a)n(y)23
+b(careful)2097 5370 y(atten)n(tion)36 b(to)g(the)h(w)n(ord)f(na)-9
+b(\177)-32 b(\020v)n(e;)38 b(there)f(should)e(b)r(e)i(an)f(um-)2097
+5470 y(laut)d(o)n(v)n(er)f(a)i(dotless)e(i.)55 b(The)34
+b(text)g(should)f(read)g(\\Ic)n(h)g(w)n(ei\031)2097 5570
+y(tats\177)-42 b(ac)n(hlic)n(h)27 b(nic)n(h)n(t)i(mehr)g(als)f(das.)43
+b(D\032monic)28 b(sou\017)n(\023)-39 b(es)29 b(ha)n(v)n(e)2097
+5669 y(no)f(r^)-42 b(ole)25 b(in)i(na)-9 b(\177)-32 b(\020v)n(e)25
+b(\033uvres.)35 b(|\035sop's)27 b(\036uvres.")200 5923
+y Fa(Ic)o(h)36 b(w)o(ei)g(tatsac)o(hlic)o(h)h(nic)o(ht)f(mehr)h(als)g
+(das.)54 b(Dmonic)37 b(souf)n(\003es)g(hav)n(e)200 6050
+y(no)c(r)420 6051 y(^)425 6050 y(ole)g(in)g(na\020v)n(e)h(uvres.)41
+b(\227sop')-10 b(s)33 b(\036uvres.)p 4161 6216 50 6617
+v -450 6266 4661 50 v eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Build/source/texk/dvipsk/testdata/8r.enc b/Build/source/texk/dvipsk/testdata/8r.enc
new file mode 100644
index 00000000000..6743b6d0465
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/8r.enc
@@ -0,0 +1,118 @@
+% @@psencodingfile@{
+% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+% version = "0.6",
+% date = "1 July 1998",
+% filename = "8r.enc",
+% email = "tex-fonts@@tug.org",
+% docstring = "Encoding for TrueType or Type 1 fonts
+% to be used with TeX."
+% @}
+%
+% Idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+%
+% (4) Remaining positions left undefined are for use in (hopefully)
+% upward-compatible revisions, if someday more characters are generally
+% available.
+%
+% (5) hyphen appears twice for compatibility with both
+% ASCII and Windows.
+%
+/TeXBase1Encoding [
+% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef
+ /breve /minus /.notdef
+% These are the only two remaining unencoded characters, so may as
+% well include them.
+ /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi
+% (unusual TeX characters available in, e.g., Lucida Bright)
+ /dotlessj /ff /ffi /ffl
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ % very contentious; it's so painful not having quoteleft and quoteright
+ % at 96 and 145 that we move the things normally found there to here.
+ /grave /quotesingle
+% 0x20 (ASCII begins)
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde
+ /.notdef % rubout; ASCII ends
+% 0x80
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+% 0xA0
+ /.notdef % nobreakspace
+ /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot
+ /hyphen % Y&Y (also at 45); Windows' softhyphen
+ /registered
+ /macron
+% 0xD0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
diff --git a/Build/source/texk/dvipsk/testdata/ad.enc b/Build/source/texk/dvipsk/testdata/ad.enc
new file mode 100644
index 00000000000..6e1958da9d0
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/ad.enc
@@ -0,0 +1,87 @@
+% Name is ad.enc.
+% v. 1.1.
+% lesenko@mx.ihep.su (Sergey Lesenko)
+%
+% This is compatible with the Adobe StandardEncoding, but has the
+% additional characters sometimes present. It's used as the base vector
+% for partial font downloading if no other encoding vector is found.
+
+/AdobeEncoding [
+ /Zcaron /zcaron /dotlessj /ff /ffi /ffl /trademark /Ydieresis
+ /Scaron /scaron /brokenbar /copyright /logicalnot /registered
+ /degree /plusminus /twosuperior /threesuperior /mu /onesuperior
+ /onequarter /onehalf /threequarters
+ /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+
+%% 040
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand
+ /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
+ /period /slash
+
+%% 060
+ /zero /one /two /three /four /five /six /seven /eight /nine /colon
+ /semicolon /less /equal /greater /question
+
+%% 0100
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+
+%% 0120
+ /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
+ /bracketright /asciicircum /underscore
+
+%% 0140
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+
+%% 0160
+ /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde
+%%
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /.notdef /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+%%
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /.notdef /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+
+%%
+ /.notdef
+
+%% 0240
+ /.notdef /exclamdown /cent /sterling /fraction /yen /florin /section
+ /currency /quotesingle /quotedblleft /guillemotleft /guilsinglleft
+ /guilsinglright /fi /fl
+
+%% 0260
+ /.notdef /endash /dagger /daggerdbl /periodcentered /.notdef
+ /paragraph /bullet /quotesinglbase /quotedblbase /quotedblright
+ /guillemotright /ellipsis /perthousand /.notdef /questiondown
+ /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /.notdef /ring /cedilla /.notdef
+ /hungarumlaut /ogonek /caron
+
+%% 0320
+ /emdash
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn
+
+%% 0340
+ /.notdef /AE /.notdef /ordfeminine
+ /eth /ntilde /ograve /oacute
+
+%% 0350
+ /Lslash /.notdef /OE /ordmasculine
+ /ocircumflex /otilde /odieresis /divide
+
+
+%% 0360
+ /.notdef /ae /ugrave /uacute /ucircumflex
+ /dotlessi /.notdef /.notdef
+
+%% 0370
+ /lslash /oslash /oe /germandbls
+ /udieresis /yacute /thorn /ydieresis
+] def
diff --git a/Build/source/texk/dvipsk/testdata/cmex10.pfb b/Build/source/texk/dvipsk/testdata/cmex10.pfb
new file mode 100644
index 00000000000..db477fa43ba
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/cmex10.pfb
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/cmmi10.pfb b/Build/source/texk/dvipsk/testdata/cmmi10.pfb
new file mode 100644
index 00000000000..b53fe888065
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/cmmi10.pfb
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/cmr10.pfb b/Build/source/texk/dvipsk/testdata/cmr10.pfb
new file mode 100644
index 00000000000..337b4b58c45
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/cmr10.pfb
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/cmsy10.pfb b/Build/source/texk/dvipsk/testdata/cmsy10.pfb
new file mode 100644
index 00000000000..e2dbb2233e7
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/cmsy10.pfb
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/cmtt10.pfb b/Build/source/texk/dvipsk/testdata/cmtt10.pfb
new file mode 100644
index 00000000000..839931ab256
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/cmtt10.pfb
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/config.ps b/Build/source/texk/dvipsk/testdata/config.ps
new file mode 100644
index 00000000000..edf49a49182
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/config.ps
@@ -0,0 +1,48 @@
+m 1000000
+D 600
+X 600
+Y 600
+M ljfour
+R 300 600
+O 0pt,0pt
+Z
+
+@ A4size 210mm 297mm
+@+ %%PaperSize: A4
+
+@ letterSize 8.5in 11in
+
+@ letter 8.5in 11in
+@+ %%BeginPaperSize: Letter
+@+ letter
+@+ %%EndPaperSize
+
+@ legal 8.5in 14in
+@+ ! %%DocumentPaperSizes: Legal
+@+ %%BeginPaperSize: Legal
+@+ legal
+@+ %%EndPaperSize
+
+@ ledger 17in 11in
+@+ ! %%DocumentPaperSizes: Ledger
+@+ %%BeginPaperSize: Ledger
+@+ ledger
+@+ %%EndPaperSize
+
+@ tabloid 11in 17in
+@+ ! %%DocumentPaperSizes: Tabloid
+@+ %%BeginPaperSize: Tabloid
+@+ 11x17
+@+ %%EndPaperSize
+
+@ A4 210mm 297mm
+@+ ! %%DocumentPaperSizes: A4
+@+ %%BeginPaperSize: A4
+@+ a4
+@+ %%EndPaperSize
+
+@ A3 297mm 420mm
+@+ ! %%DocumentPaperSizes: A3
+@+ %%BeginPaperSize: A3
+@+ a3
+@+ %%EndPaperSize
diff --git a/Build/source/texk/dvipsk/testdata/dvipstst.tex b/Build/source/texk/dvipsk/testdata/dvipstst.tex
new file mode 100644
index 00000000000..11abb16e42b
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/dvipstst.tex
@@ -0,0 +1,136 @@
+%
+% This file is a quick and simple, gross test of dvips. It only tests
+% the most basic things.
+%
+% To run:
+% remove the file mtest.ps if it exists
+% tex test
+% dvips test -o test.ps (ignore the error)
+% copy test.ps mtest.ps
+% dvips test
+% and print.
+%
+% First, paper size
+%
+\newif\ifafour
+\afourtrue
+%
+% Next, big rules.
+%
+\nopagenumbers\raggedbottom
+\ifafour
+ \special{papersize=210mm,297mm}
+ \hsize=7.7677truein\vsize=11.1929truein
+\else
+ \special{papersize=8.5in,11in} % the default anyway, so not necessary
+ \hsize=8truein\vsize=10.5truein
+\fi
+\hoffset=-0.75truein\voffset=-0.75truein
+\newdimen\ovsize \ovsize=\vsize
+\newdimen\ohsize \ohsize=\hsize
+\vbox to\vsize{\hrule height 6pt\advance\vsize by -12pt
+\hbox{\vrule width 6pt\vbox to\vsize{\advance\hsize by -12pt
+%
+% Now, PostScript fonts.
+%
+\bigskip
+\font\norm=ptmr at 20truept
+\centerline{\norm DVIPS: A \TeX\ Driver For PostScript}
+\font\foolish=ptmri at 100truept\
+\bigskip
+\centerline{\foolish g}
+\bigskip
+%
+% Next, literal graphics. It's not supposed to look pretty.
+%
+\vskip1truein
+\centerline{\special{" 0 36 translate .05 .099 .95 {
+ 27.4 0 translate gsave
+ 0 0 moveto dup 90 mul rotate
+ -10 -10 rmoveto 20 0 rlineto 0 20 rlineto -20 0 rlineto closepath
+ gsave dup setgray fill grestore 1 exch sub setgray stroke
+ grestore 27.4 0 translate } for }\hskip 7.77truein}
+%
+% Next, some alignment problems that are not done correctly by some
+% dvi2ps programs.
+%
+$$\sqrt{\sqrt{{a\Longrightarrow b\longrightarrow c}\over
+\vbox{\hsize=3in\noindent
+the phase of the moon multiplied by the number of angels that can
+dance on the head of a pin while the rich man threads the needle
+divided by $\pi$ or some other transcendental number}}}$$
+\bigskip
+%
+% Now, included epsf graphics. We include this document
+% recursively. Of course, things will be ugly.
+%
+\input epsf
+\epsfxsize=0.5\ohsize
+%
+% If you go to a4 paper, change the following supplied bounding box
+% appropriately.
+%
+\ifafour
+ \line{\hfil\epsffile[18 18 577 814]{mtest.ps}\hfil
+\else
+ \line{\hfil\epsffile[18 18 594 774]{mtest.ps}\hfil
+\fi
+\vbox to 0.5\ovsize{\hsize=3.3truein\parindent=10pt\parskip=0pt plus 1fil
+To run this test, remove a file called mtest.ps if it exists.
+Then, run \TeX\ over
+test.tex, run dvips over test.dvi, saving the output in a file test.ps.
+Copy test.ps to mtest.ps.
+Run dvips over test.dvi again, this time printing or saving the output,
+as you choose. (Including the document too many times inside itself
+will overflow the virtual memory capacities of most printers.)
+
+Some things to check on this page. First, the large rules surrounding
+the page should be exactly one quarter inch from each border (assuming
+a 8.5 by 11 page; for an a4 page, change the {\tt\char92 afourfalse}
+to {\tt\char92 afourtrue} on line 16.)
+
+You should see a title at the top, and a large italic g under that.
+Then, there should be a centered row of ten boxes, going from dark to
+light gray, rotating slowly.
+
+In the `equation' that follows, check the upper left corner of the radical
+signs for alignment. Also check the right arrows.
+
+In the recursively included page to the left,
+note how bad the bitmapped fonts look
+(they are the ones under the radical, and indeed this text itself.)
+The thin
+rules may disappear altogether. This points out the resolution dependence
+of dvips output; this is an unfortunate necessity of using bitmapped fonts.
+The PostScript fonts, on the other hand, should scale fine.
+
+Finally, at the bottom of the page, you will see some tests of the accents in
+the PostScript fonts. Pay careful attention to the word na\"\i ve; there
+should be an umlaut over a dotless i. The text should read
+``Ich wei\ss\ tats\"achlich nicht mehr als das.
+D\ae monic souffl\'es have no r\^ole in na\"\i ve \oe uvres.
+---\AE sop's \OE uvres.''
+}\hfil}
+%
+% Finally, PostScript fonts again; let's test some accents.
+%
+\bigskip
+\font\foo=ptmbi at 16truept
+\centerline{\vbox{\advance\hsize by -2in
+{\foo\noindent Ich wei\ss\ tats\"achlich nicht mehr als das.
+D\ae monic souffl\'es have no r\^ole in na\"\i ve \oe uvres.
+---\AE sop's \OE uvres.}}}
+\bigskip}\vrule width 6pt}\hrule height 6pt}
+%
+% We also want to test bop-hook stuff.
+%
+\special{! userdict begin /bop-hook{gsave 200 30 translate
+65 rotate /Times-Roman findfont 260 scalefont setfont
+0 0 moveto 0.8 setgray (DVIPS) show grestore}def end}
+%
+\bye
+
+%%% Local Variables:
+%%% mode: plain-tex
+%%% TeX-master: t
+%%% End:
diff --git a/Build/source/texk/dvipsk/testdata/dvipstst.xdv b/Build/source/texk/dvipsk/testdata/dvipstst.xdv
new file mode 100644
index 00000000000..368192baa14
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/dvipstst.xdv
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/dvipstst.xps b/Build/source/texk/dvipsk/testdata/dvipstst.xps
new file mode 100644
index 00000000000..42659519620
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/dvipstst.xps
@@ -0,0 +1,3239 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.85 Copyright 1999 Radical Eye Software
+%%Title: ./testdata/dvipstst.xdv
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentFonts: Times-Roman Times-Italic CMEX10 CMMI10 CMR10 CMSY10
+%%+ CMTT10 Times-BoldItalic
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: ./dvips -D 300 ./testdata/dvipstst.xdv -o
+%DVIPSParameters: dpi=300, compressed
+%DVIPSSource: TeX output 1998.01.01:1040
+%%BeginProcSet: texc.pro
+%!
+/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
+/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
+gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
+add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
+/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
+dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
+adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
+idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
+adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
+{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
+adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
+chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
+put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
+/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
+X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
+(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
+length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
+forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: 8r.enc
+% @@psencodingfile@{
+% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+% version = "0.6",
+% date = "22 June 1996",
+% filename = "8r.enc",
+% email = "kb@@mail.tug.org",
+% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+% codetable = "ISO/ASCII",
+% checksum = "119 662 4424",
+% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
+% @}
+%
+% Idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+%
+% (4) Remaining positions left undefined are for use in (hopefully)
+% upward-compatible revisions, if someday more characters are generally
+% available.
+%
+% (5) hyphen appears twice for compatibility with both ASCII and Windows.
+%
+/TeXBase1Encoding [
+% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef
+ /breve /minus /.notdef
+% These are the only two remaining unencoded characters, so may as
+% well include them.
+ /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi
+% (unusual TeX characters available in, e.g., Lucida Bright)
+ /dotlessj /ff /ffi /ffl
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ % very contentious; it's so painful not having quoteleft and quoteright
+ % at 96 and 145 that we move the things normally found there down to here.
+ /grave /quotesingle
+% 0x20 (ASCII begins)
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde
+ /.notdef % rubout; ASCII ends
+% 0x80
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+% 0xA0
+ /.notdef % nobreakspace
+ /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot
+ /hyphen % Y&Y (also at 45); Windows' softhyphen
+ /registered
+ /macron
+% 0xD0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
+
+%%EndProcSet
+%%BeginProcSet: cmtt10.pfb
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 161 /Gamma put
+dup 162 /Delta put
+dup 163 /Theta put
+dup 164 /Lambda put
+dup 165 /Xi put
+dup 166 /Pi put
+dup 167 /Sigma put
+dup 168 /Upsilon put
+dup 169 /Phi put
+dup 170 /Psi put
+dup 173 /Omega put
+dup 174 /arrowup put
+dup 175 /arrowdown put
+dup 176 /quotesingle put
+dup 177 /exclamdown put
+dup 178 /questiondown put
+dup 179 /dotlessi put
+dup 180 /dotlessj put
+dup 181 /grave put
+dup 182 /acute put
+dup 183 /caron put
+dup 184 /breve put
+dup 185 /macron put
+dup 186 /ring put
+dup 187 /cedilla put
+dup 188 /germandbls put
+dup 189 /ae put
+dup 190 /oe put
+dup 191 /oslash put
+dup 192 /AE put
+dup 193 /OE put
+dup 194 /Oslash put
+dup 195 /visiblespace put
+dup 196 /dieresis put
+dup 0 /Gamma put
+dup 1 /Delta put
+dup 2 /Theta put
+dup 3 /Lambda put
+dup 4 /Xi put
+dup 5 /Pi put
+dup 6 /Sigma put
+dup 7 /Upsilon put
+dup 8 /Phi put
+dup 9 /Psi put
+dup 10 /Omega put
+dup 11 /arrowup put
+dup 12 /arrowdown put
+dup 13 /quotesingle put
+dup 14 /exclamdown put
+dup 15 /questiondown put
+dup 16 /dotlessi put
+dup 17 /dotlessj put
+dup 18 /grave put
+dup 19 /acute put
+dup 20 /caron put
+dup 21 /breve put
+dup 22 /macron put
+dup 23 /ring put
+dup 24 /cedilla put
+dup 25 /germandbls put
+dup 26 /ae put
+dup 27 /oe put
+dup 28 /oslash put
+dup 29 /AE put
+dup 30 /OE put
+dup 31 /Oslash put
+dup 32 /visiblespace put
+dup 33 /exclam put
+dup 34 /quotedbl put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 37 /percent put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 61 /equal put
+dup 62 /greater put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 92 /backslash put
+dup 93 /bracketright put
+dup 94 /asciicircum put
+dup 95 /underscore put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /braceleft put
+dup 124 /bar put
+dup 125 /braceright put
+dup 126 /asciitilde put
+dup 127 /dieresis put
+dup 128 /visiblespace put
+dup 160 /space put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueID 5000832 def
+currentdict end
+currentfile eexec
+
+8053514D28EC28DA1630165FAB262882D3FCA78881823C5537FE6C3DDA8EE5B897E17CB027F5
+C73FDBB56B0A7C25FC3512B55FE8F3ACFBFFCC7F4A382D8299CC8FD37D3CEA49DABDCA92847A
+F0560B404EF71134B0F3D99934FC9D0B4E602011B9CFB856C23F958F3C5A2FBE0EF8587D1F57
+74879C324E51FCB22888B74F241550D7401EB990D4F3A7AF635198422283CAC1B6CD446DDBCB
+D915DB9BFF88844E784C6BF7389803D9450B0C21756A017306462C563D51ECEFAACD079732F1
+2C29315E4B9623A5752C6F1D8145869E120D910B2644887CEA7E30B15676A92537C29D3AA80D
+C30082ABA94B40990B82FB1A877E805E0C8C48F61E9F2EDAC05B944EE4D8084EC1D5CC517AAE
+EC5B3EA379DD011EEB454CECAB3AD2443C887C58278972355673E503AFFE0394FC7DB31DE364
+E4F56C24033C7DF2265C56445EC63A1D5695A6041EA1B94407E1CDB7C5635603A4FD047E6EDC
+AEB2D0DA6C9E0E9396D51A4A58E8FDC1578730F992435560A6E2D3E3687703EE2F78F5896389
+AC8470BC806169EB01762E89B6DC9ADF857EAD656620E2589AAE722C37A2ED7A2941C360B067
+EE34D8D5CA3BF68DB725614D936BCB207781F4D4EC2AC67B13A5AD161F3F059ADD7B5E3D9048
+31E31C20C04546FAE83CA93A35989E65C201756888F727B97E5313C9870EC96E4CEC3901EA03
+A5C744754485E7D169BBC98BF872D0796E189D43B712950C3786257D8BE06AB6080B9D939231
+3298327549A8A41C00A2CEA3690B4A333E45AA815A64FACAE1C2B44640860B8B8687AFBEFDBD
+5B4A541A72514EE7D3E0752AF3E96A88C95D31FA16D34BA2F02FDB0088B165844F02611C734A
+DBCC2037BF741FDEA7E8BCDC130C70C33772F777D8BCDDF4611DB99001CCFF14D7AF2BB05DEF
+C3480BDAB312A0EFF2F375AFB4E0DF2F803C594B7C93F71CA4AF861AE1711932FEF19BFE2F9B
+7ADB69D68E5A70EA4D1A3D5BD85231B16993F65EFB37A0A823F0542F8C2340A073DC1BE4A834
+7F9D3068A6435CD8278B0DB1809E8AF9664C2C989B9F16873C009449B6284B85DA4DEE11C96A
+05BA83292F0EDBD92CF674AAD6AC1A5FF966FFC37E88A66048DEED053565B55EF6BDB8C2F2F6
+7832F8939A32442EA54F13D003494D6350A2864B427A9126A9C26A031909FE53FA8463B80C3F
+FD536C9A5DD29CEB03148DBC24C0033AEE72DDD159F2E8A6FC113F428070EB36CE5A38A72ED5
+BD94D81AB4DAF08EBD42C8E5BC695622E02AECD4004E6D4CFE72534CA56291FF5F2F83361BCD
+B9489A993F663289B6DD492499DD5713227210F89370928ADA0085E2AF277F53E4CEC34D6C4B
+8CD5F2E016052A04C20AAECE8B81AF9E9F33643C0FA69A5BA864D2A173221071A965F9970D72
+93DCDE8C3FF60A86A4D3706850CBC45440DCD22F307261E2F6FAA3EE156A58069DF979C9B5EA
+A326C5A36B6E0FC0333D7B4046D636461CA2EF70648C37A953F96FAED6266EC9022753EBC390
+BE93C0CCB7C318C4314D9F6E54274C8046A8C5CC7EEBE625BF59A03F5405733ED120841560CB
+93210EA1EAAF3402ADCF1FAB986521BDB7CBA72A2353942FBEA4A0D1B67ECDE589A65AF8E7A5
+FA4B87672AD55F57D783C66DE1D11E0A16BCF32530692380C730D12834777AC6750F85131D77
+B0F53B626635CAD3BB8E9F0454FA085CBCCB0339034F5FB2E225E62CE12E8C792F5B7E234688
+D2AA8F627A4670339E646399F91E94424263E5C12F9F3D411FA44449611EA9785A20FBA733FF
+2A7892D1641F836CD42C58CCB81E41D6E2A5AE30FA18DE9846AD981923604C799B16A99779FC
+CBA11044740BBCC78116E857B4B390DE0E66921376101D621E1FA003F01AE344FEA0215F2577
+E9C92C6AD07F2F4674A00FE42AC51FE5A9186C3C1956B535FF1DD64BA514534DDD73C0C61C54
+FBD6FAC3B4FD9010FC55DF2A37A111BD1402D4E90FD8B3601DD3E9FE25634D709C289E524A66
+DFC33CDA640D397269BD9ECB9D0EE84A7D7B93A97DC522A16B6965B7D5D7790A3002341ECB3E
+80985371A5169B38133B13FC5C1DEBE2D90C43BA5D2CEC7D3B972D32AA1A932B750D6CC83439
+73FBB9972D84670AC5CAC5D0B5E75CE021F99493CE29AE90BCA0CB75058BB0A47DFAE6C8D075
+043BFD738991C2A0B80BE18386D7A6FAF89FEBC4AD142A1B0EEA8884EBFA87817E22C222170C
+B6D04BC6DDB541284E16400028EEA275244B69B033D200AD997BE7D1DEBE13CF783BE1137278
+24006CE4B5E3F34D09FAB236749D3E72C033997A652982829376DF91ABF533F0100BF224C279
+D3515176DFD56C325B3D7A3EFE0BEFF84233B5A7EE262557F84D754F03817C900945DBD5DC59
+B46BE8847D1FBEDD70799DC42D0148841DE2F816F894ADD5EB2C0E1BF19F52558AF84DE5B693
+86020DF814DE7647FD41127459D65798B06EC5D132AC0F181BE211624E97F8096C0A22E6B216
+0878909D00A918E90B435C8C87D1033E40B56B4F15752D5A8AC019837604DB9E1AF709A2EA36
+4F174DC2EB1957F0E5F477CE06A0EB78026BD1B23D76102C6862156C47040EC259FF4E89F83A
+42D8DFE53F96127C8AB4037EFEF724ED011928C2CEECB4A8A4B5A480595A2AAF93228EE37205
+2428BCCCB4685246BF3E9FFDB2845CA05DFD4902E74483626C2FEBB4E76C78B2AD6A96372D0E
+AE47FDF4B8D1F068FF0D1EED01C6860C86275A2EE3C2A97AA6033AAAC489E1A540432BF92A75
+7205428AEE30CCD48DC234C521003D7EF7B88BDA8E72A12AD36C2BEAB1177CA82BB2458997A4
+B5094A9DABAAE0A83D7ACF4F7727223303D5D8ACB9B265B3326CFB1AAC4BDB80B28E828DA936
+BCA574722A73B05D447C9F7E506D78B33F582B3BBEA37BF8380CDD32B15E74ACFEA5BD635C2D
+FC3A6090E7D96DB7E9127A3660024258A3A7DA06D08C4691B19F88D0BC719B1414E953B26F09
+6A0379BD71ADCE16DA6EB552A50EC318456CFDE8FBED1DD92200A9EBE83849AE3FDE58B5400E
+0C173E01F5E23E883119421C7BF5F12ACAE87B3C3DF0D824A67A320273D41607306B14A63D46
+2C042A6C6A31B92D54E01D7AFEE232DDAC002D012B950A71C2F065BD478196779544093A5B61
+93247AAD7970AB5E306EDBDC24EB4C6B71A174ADC6565A99EBD7EC83E01ECEA533D364C2F07D
+8A48C84C0A3941DD6B75422FCB49AE7BB79245CFE9ADC2C9B3E6B48A46867CC72F26D8C82C2B
+F5E8F60763CB9B473473F521FB016CD1D07B3216C496CDC68F72C6E9AC5B8193CB3E20EA84C5
+A7CAE4905261B554D6BA006C787658463215646AE218972219EB34A5964F0A277A1D1A20CBBC
+94FBE359573A672EFD0019B2C0A6A02F4B15D14B961383630F0CC578168F9DF7D33D3509CE75
+D272141AC8EAD6C708227A193A5542A213E6435AB543754A75D066C000A1FA060053A862A013
+799F762B5403BEF0E52C8208D3E690393BD3FF71C8EAA08C49C77F33BFD9A6F9370A88CDC3E5
+B1012FB13C784E637A4891503B5FFB4A0BEB105458413D3FC880B92671E786BFD03F158429E1
+E80EE252159C6B61079092C2035748A3C0D1B7C400B88666F94601D53C2EB3308AA791F66E40
+DB8CD2CD53ABE4A018A2BEFF566806C6CA7108EFE8C70C7E4058853019425AA8EE77D3E75973
+1A80FFFB59CDECD15D099E336A63A605DCCCAAD3FC55300B12402FB10A9FA4292D61F8967C21
+8E008343617BE44D29AA7DD755609EBEEF555F8291543623BE6CDAD4F46CA20063DDE0EC4F24
+B9052D6092BA0FB03EC7277643F178CFDD5314F597B93139183823C2049FA4FE0E1F7913348E
+B83F151E13251C3C2ED100CB9C907969669D98C5F349FD064A677FB689671C27B658C3118B20
+6AFA9478A4F0AC3E6325139045C83C046D0F81BB002757DE25E9778A4D835E6D61E563293923
+CCF415FF132B34BA9ADC441B806151561C59662867F91CDDA7579CB77326D5C34BE9149E9629
+8787F98EAE3B5A2E2190D932581F36C547680C3266770786DF978FDFBF96D7DAD68969EFC46F
+5A39567D97CCF08BD361FE650629A6CEC31DDF856640E6A2842447A87264503B7917AF46D7D5
+14BDCC09B23E7DA51C47816EF27100FA60AE3FBDC320B6E792AF15CCE9412C8C80B3A46F5E31
+E380D93EE3D17A5F674684AE28C56381892B66AA5A37B67B6E7CB9D65D359791E8EE0A36A4B6
+537315C99505BF6264B6C3BDB62A368AA4C5784409166831B36AC6241C24C9EBEE261196E7C5
+B55480CDFADA76C0F979FBFC9F3AB5A53CAC4C6DE0BC8CC9BC93221347EC17FC024CEF796410
+67DE49A3460AE6C83464CE27DB329E16605DC22D727F578F14764720F4D6BDC24E171B27EAF1
+43EB293A70525452FEE8100DBB2D7ABCC5177C7BA96CD07A8667103312BC495FD7813A5DC7BD
+37C1C96B1DDD53841B9DE37C5BE008AD67706045EC1AB4F418F60A17C0786136A5B9617CAEA4
+BF319CA20636691BCA83918785CC15FA19B4E8CB5AFFA398DCB868AE139124E6DF8BC1CA29C4
+3E4F7D57AD6D625D570B498FD8D2B3FB7080E312D95DBED16A8FD3ADCFAC9FC0EDA131913647
+6EA4C0FA1B6EEAC95FFC35326124EB2DDA055EC0FF6A304EF0CBFB3DEA094810A52D5193F041
+D99872CC6A71DFE5B46ED2EFC3F45D6560276FDBA056A78F9D76EDA2467AD4C44930558DB88E
+ED42F6C88B0C1E3DD5101A6590ECBF56E32BE0BF76B515235D00121CF0ADC12346997AB62DC2
+A1FC37DA89CC3992BC1C6D5380D0D5AB94551833B65A2336EBC9923E58CB1E47444BC6E49BE3
+042C94624373B1C34F593E7C8E043A6DE75A27DE4E305272EC9996499517F1577DEE3F9ADC0E
+3C21B61F81D165E903E1457BF33830E5369CFED65ABC46089647B5C01CD089DDCC7CB8CBBE01
+EDD7BF01C3636CE3D274A7C59B937E4547BE0DDB0FE9616E0EBC5078ADF5D7C8984C5DC85FF5
+099A00B84E44178D78B293288F664F19C7FFB7C52C04ADCF8718DBC94021C28290E2E5808687
+5C2B23EDF938C52CF0274F8150CB577FA02A7BDDD290839B69F6D5AF1B70896ECBC07CA8F1F8
+6EA38CFC5F852A5F5249BCF04A878BB56EAB61A1F53B60697DB77FEE8327166B399D413C62B7
+42870C3D77544FBF9B63511669E778C3CB1C009D17EAA536B93EEB5D15DF014673A66B43A102
+02C424DB51D501610A59B01D5ADDB4A62B7E86688D86A3786B08F14D5BBB93C63C88D7F70D57
+4AD84DE70430799DB3C19FC1EBC35D44C8661ECC763B46445AED62F1BB25A6C7D1A7E8C685DD
+1ECC9660FE97CE2CDF6D259CF0869BB93F00D98D4BF87969636FB6DDAA09FD32F6F31DA2F1B2
+47ADFE919932298D32C8C96FE9DCE6F4A75F071EEA657935F7F30C32353DC4B25819F7070F6B
+518C909BE0CEE0FB262EAC59C893DCA6C2B69CB0147206BDD4ECA2C4C8A232FE1B1DDB9C9B7E
+EE10FD8A0259364B697AB94D2481FF1751FA9782EB84DD7B481D0FE16D09AA95C00861F081C4
+04B638F1086D8C108953B5828960BE46BAC02B635F7E4290EDECDE73860DDB2E987467C70E20
+D93CAD40AE9BE998D64B3BD4D600EA6C8E2F5155A9264F9D090567FB7ABE1B4E2E1EC5D4E298
+66D289B5647146B7989DBAFEFB7AC0DBEC9DE8D12749113212DA3C5E9CF4224825F9AAA5ABC1
+662AE3B3FABD40D17408BBCB0FFAA37EA2C05569ADAE243114BE87B6421590A440036A071E70
+B77968A4A6C6AA4FB68D32417DA597F5396A4ACDB74BDB1FDEA82BAD3B998B8399029F0726C8
+F83C65AD45D14A1AEBC019F885BA60B0B6A260899BECA00C0F01E1AC25490DD78CF40924901F
+E877E66F23C977B8754623D1D0F7ABD00753C3A0D124FC297D647F78380C139C2F82EFA9C9D6
+7600079805EA3BBB31C79716E3A4DACB2BB00A21F34220BE2A202FE29265024AAE48C23B0FCF
+6142EC6587DA235577B6E57345FCDF32B83F6532023F8A3DDF97B01FBFC8B853E90536165AC9
+29DF10E253D8C4569616F297F7E09C06489E67618FD7148E6A89E249C62898E64A03D958EB88
+F6E3361F0EF2148BE4576E4D97D320B4CB7F412FEDBAABBFAE057AC533AF9CF9627BBFAED3A6
+C6CA676148B005038149259589FE227CBB4B8576810EFACA8EBFB5B52ACD96B373462336D791
+9FE2D926C0B23BAFA3024F15EA433414CEA280F1E20650F1EFDD04959A61A5C362C98B855361
+F2971287F63D512AF98695C02A5473AC45088D478509C2BA84967AEC0FC1D538654523791773
+D8A5B9D73C2EB52FEE2586333FBF6241A829811E06C2CE93EE1F0FA3CE620AD06984347CB30C
+2AEC9CDB0F97CE991ADD184ABA3783B556662C833A874E5C38A64B6438CE5348ED802000631D
+B9B3B33F0D90941BA80E92D4F00C64E62A7A0520D94E76F782CC734DE498ECFF23A5F24BCAA9
+7150F721064114CCA8CD690993A1274A5BD3F15A6D6EE5C237D7823E18661667B593FEFA30EC
+07E974AC8C6629A8DCC41F3F02D14F620BD415841709E7296D2E606D040D29D501927F9CEE38
+A4FEEC83A2FF45814700D41437C65AE671A5A6E83964EE131D909E56926D3BE03871341FF7FB
+BD19437C7A0C3FFE3D6B50479B56D774F8D2EFB59006AF71B47C7BED0DBFA8E8D95CEB3E5B1C
+65111377CB66E0817B2AF45607708868976661C469D4C1A3719B90B43FAC9BD8F0FA5558DA8A
+158B31D4866017BD8E144C630CB3FB547A0C6035D3D4565536D88D219D98FE96580B651FE0B6
+4FF75E13BFB841137459E93A0779616B9F67865F5F72503E60EA30AC387ECB6BBB2039582DBD
+891BB344D685BD7B4A44C73B3ACAF4BFD4170B2A529E8181763CF0990EEC3310B321F4D6D5F8
+84824ACD20B409B7DAA1186B998DE184C41A1C815F09C5902EFA03BCD1AC9DB7B844353B399C
+184088DA2DE7A98D789F1F7B56FD8375ECF32AC7AE6B9645C3EBD42D333061835230C4068720
+4AB8AF146DB9E945A631AFA80CD3237A27C6ADA5DF3F1E65DD74289E58048A40AB6374A4F479
+13A872042CCA0CF0BC34A30ABB0AB215BB09AA2FEF09CD664AC1F76736CB236AACB271B9783E
+1A94EF666A52B5A56A0BC90DB43762B33CECA87E1C8BC43B6B1FC6F0D8D8829A1DDC6A87A8EC
+8287A7D9FA52C848A76BF04EB015DC3C79DE6AACDF7316415280AFF2DFD989F8C7887253E6AD
+B49D6C78C8350F6764BA14AD14ADE05C76D9BC480B394753468AE029865248C2C760E3BBF647
+178F10A294506950073262EAFF3E956E7484636D18F2F4B4AC01F7F3DBA5C647209C29CC0ECB
+195764FE2AF2DB0C9086B587EC51A76AF1590D67102AD6BCEBF7B6D845FAE94D6BDF6BD0E910
+14DD679F56DA651F747FD08494A136E401A8E23772D3EC931A7524673346AC575756E278AB36
+4A1055CC920294D276373C881D8AB49CEC190A4DC921BBEB75A413CBCC503F96B862F1F446F2
+CE232E45652292A02349D7856904B46F9606D6AC8446F91B03118E28ECB7DB4BFAA9D79A12ED
+57B1F9086541F1D2AD9C55834A5061B1434BDA4F001BB74A3EBC61CE7D8353B6C57A7DAD0FD2
+403CB55B1111DB56CA38D2F5BDF3FCB687B08BA9CA70380EF03E837B95CA0C7812EB9D7D0B51
+00E052493BCFCC91B26D64B3B95BEA68F7AB187F5BC4B15CD5B2182103FF8C21D7B23FE7E302
+69E19619103362EF40128B0E1A0285299853239D28EA3EAE1F32ADCC813FA4C2D2FE80D3124F
+4BB2BC57F386DE387454AADAFF1CE4FE5769DB0B7A53B49DAF9E6B501834A117988081D2AF14
+56160BDF52CE6E1EEB12FD7B4C8B4C8C71D766C71A99F768B16EF1574583006FBA51963655ED
+C565B7306093E356B223DBE43B25162600F4E0254F9D8BF36306ABAE55C77640A63F4F7EB19F
+091F533DAEF035E5F7BFEEB59AF6A3DC336D953CDC9B527B1E6CB4E75BC0D6704AB8AFF7C511
+35EE9EC739B4DB64B145E42D7CE5C33FA78310654E0E02359BD52B49074CDE8768741ACB2922
+4EB52BABE235547A693E94D591673F5070045973D20AA8B76A525F6F3BC6E456A1BB17DB2556
+04A60A8344A7CF57411CB1626CEB4E02375AD6F549E6B21AF25C18418908ED928057525C9C84
+71F15F7EB1A471F57C314ED9EC16CA55B2D2492EF44BD9104AF9C7283FD1B192457AC32F8760
+32F204BA71A9010FF71FA0A74E6649BC382F883FA09EC0C46410E3AA49A39CD0A56F30A74233
+844F786EB37AE9E0FF1891EA5A7BA07A826D3A543462B30F5DDB9398B3618D06AEFC7221C8C5
+D1313BDD8179E2C38571CE735ED88592E1464E0A27876F40C2AC6CDC00D6B6BB2093AB39C825
+57D0DF90654D57EB09E4978BD9F5AEF16B76F80154EDC4CB61A17E2DEA5EAB9032101B259058
+4600FE5F74E288B16B41B18D42410D91E391F31FBD5B9DBC1A42BBF529F33EDA35757560AC9A
+13336809D78CA855015D9B3254F54FA9047CCAC1A1DECD2359FD6C5388A54F21C009402E5E6C
+5B2E4A504FCFD286EB6448E94012BF6AEA62AB724D774589B1818D2372E76200C1E13194A2B3
+4C2445AF8E6A63E7E270F54694CD71967FECB36CB10F9B7C7EB9C53B98128FA6A2D8171FB911
+20FA46D522C6682030000BB239F8BF8D1D9A923AF7104DE7DE2125425951040FB14466EC2B77
+E04DADC9CFA4E13C52CF0E75237E3CA0500857930D1B5BFF827AAAB103F5E220D1FA7FC206F3
+6967E00346C436BF3D15B0DDED15E17A33EF57991C0727C12863177BE68654EB63B242CE4D8A
+B2992DDB37130156C9D380F721C6B954ED6062033A11291332F32763B7DE9A35CFD34DFE9D76
+8C5187FAB040057769D2E52AFB30F7D5372165827680E85C3BC7645AF4441B11712C9DD1935D
+32C58B92709B7ECAFB1F9008582C8E0FD93FDF6BA3F93E38666F37C79DA45E8A7F0017F3A887
+A4F54923C9C107801AC9736E344693D57BA6648B44B9F6ACF6A9D940CA7960F35E0734213EBC
+6745E5AB6424B0F1FADAEB69C35319266314003C80EF00DD1C373DB42EBCF5ABE5D16142B44D
+BAD5C8E9E291C912F828D2BAF4965CBE826AC4D2081C8C382752C3EE0BCFD391A46B2A304187
+3BD2B28D7038EADFC4B031D06E4150801DDAC8B18264BE969DFA3C80C4FF17D29BAF3AF53F93
+6DD506C33704055B0AC76E436F2D54F4AA3CBD545FF1B67CD57325D48F28F3F7FC171548C106
+8AF2AF4414B92A014FAC72BB51A0279CB33B881DD767DFEAB867D0069273EE9DE19FF1D63A59
+AE534DA02495E0E4E5AA0B52F923228AC819E084F4E94CA631BD44B01B3025D8CAAB06F57D23
+1652FEFE73803221E39F284150DC944B0D2CD9A1F208AB552CA3C6A23D5ED3E0A350FBC963A3
+16B37D2CDB610A9FCC069B7669E2CB7505DE6D003D7F4F695DB88BC696AB9F87CCCB1EB635BB
+CB1978F46F4D1EE5A5ACB380BB435E424A7FE8A20F6F3F1E8745781601D76567AD9C1076FA1A
+1EFBDFF6F9969DF3C0F337B805B1AE318124274C0D7E0EC6F43299EE7DC48AFE50D428430524
+73CCA6ECA462CE40CBD2ADDCE28D3676DD125D404EB2C2706170EB35DA0FF60C1A8A9E36A659
+00C02D19219C6AF5BC3DBE759153B27658663F7C6ABA6327031A37F58F948FA4F636FA989C95
+3FA91EE86B93617C3369C51841B3FC5A533FB1754ACFB5BC80E97B002B34388D365CE95067B7
+F31DF8D6BB61DB83C0FC5C3FB54350C9B3A2F69153620AA7D2639116DB4A06166BB58FA0B9EC
+87726935BC6324D503017B679F52840957DE5C018C4F02F86D2F555CBE67568AC075877B1B96
+A759556EF292881CC358114E60A1B72F589F749E64BE973B6BF41692AA93F7604AD7D8376A94
+37A13EBE498DEE73F6E22BACC58108C83791C496773240B7BCFE6702FEDB9C4A3BEC1CE45396
+C5E88A770A61BCFE8755519D7E4007CFEE9919D528C651E40E05D7D03B28839255B7182CFAAF
+FEEAB7B7BD2DF6C56F52F7201351BA2B7705054B418E691276A78984A2EA2E7D991721C368BA
+22A7C8B738F1A9266064FF5DC036A20C8570A2CC0BBF74B25D7A691A20A1C1A5FB1400C66AEB
+CD3013C43D1328F5F5D0635631A3A21AC4884F0306623EE1C2EAE491DCB845E34D749A6CE4CC
+80B2E2049C0907249284BBBDBDE08588D5D1FE1031B2A2FF3756E7E2F670FF768F638D83216A
+2270902867F072D9E4E6735CEDE427730B942FA67D89494D959D0FCCB923A85C07EA3272FE4D
+018F1EB2A34FA95FDB6D31650AC2D6355EC338D36DE42547A6432CB847D27C74834036DB59A9
+344F59C9F610091E2D5FA6157C8BA4232937DB379D43F922E2A7581819A4598B436C60510B95
+6450A6DD2AC04FEC337B443463B4336008DB2289A8F9B126F0A998431D8E503B1781F42443E4
+0BE700D6C47D1D65EDC74E665C0EA196767E46BB11BC0ED69199F32DA3F4398342DD22EFC529
+6CB169043C3C902DF485A8B50A94C307FC14A6274570F878C6CBF18AF910EC20B0726684ED02
+1F862FD1F9273F32826D6D9569BFCD3DAC8B6D9BEC14562E22031BD61B4CFDA7B2C95F25E78F
+045E616A6090417F1DFC14A7A168B1B121C229598FDB040B336E1959BE810C03401D601A63E2
+7F8D501F830A591884EDCFED1C2A44409DAB3CFCEF74FA27D44734D071E33EC9C23A525E4612
+32135D02388D032BB8B9B8C1C8F46EDB55C98EAE149619244642D2926D3180BB66CB7D0C0146
+561E452B59FC7437D42B5F3424D5F30509EF1914E75D4B73E483701026F269169934EA1AD0EE
+3D1DBD25DE247F866E6FF52999DEFE6F5D5DDE98E974FF9DB4D9B99688652D209EC49AA0E0EC
+F73574CCC419039056CDD2D2EB3290D0784E295400ABE8331D978DE83A2B4001D35F51E39034
+E0BF49945B9B7C4EA6CA382684B996F12EC9438567A20C6C7713D4A6CCB3389B2934E45A1796
+42CC9E65199AD61C07769C3030D87E9F23E85469C583DB065691EE228FC2AF56632E9EF15646
+67ABFDD20776425AE23D22C16C3C005518590DED8A5DB841CE25BFB4C1BEDA4FA6575726517A
+269274B1517662BDFEEC6018FF525B4604446520067198FFE83C950F3D2880B5C9FB91DAA169
+91BFE63CFB48A3EBF24B7A33F43E1C7827D81CA611DF3476CACCE15A7978271C3DE2B48E1929
+B4233CE6A62F54BAC964C9ACBD1DC4B64C5CFAD4682FFC880B8B6E14DBA2234D6CE8F0494E02
+9A2123FE0D63B39DF8DC30F65969B8A659C0C40DF04B603EDAE85E81E634E58D053FB8826603
+96B30790E8D2613B273B238365F35F21631335882693410ECFA8749E23D34371FD28F3CE9AE7
+192389D7162E3F180D161B3A46B371F27E4596209057C4EF994E2D63791F32B77F9ACCE54577
+A56B50B4FA026D6C1573F45542D9B9338BBD2D4695F124C83D489606103807B66385C5E70078
+5418C29853BEC2D18985AE0640DC7F2FEE566599EC473AB3E04052BCA6F6BB26C27D6CE87187
+A3D4C69845A242FCAD1B66F5CD67D7F70422577DF10B05CC54D9F7FB036C289948F0387CBCEA
+D3A91CDEB9C2D1547BC6CB7B4A2581F39DBB75EA08A22542A723CDFFE7CFDE9D9FD926D1003B
+A3137A003FEFBB9FC84B0665D5B2DA9B37A3951A3E6EE16CE6F2216575C7C53061E5D64250C0
+9E8EEA685306DD9F693CBBAFDEE2A6A188B21EC458230E078BF9C7CAFC1FD601449F647C4B59
+B37CF7DB2B3070356900B3056B9272B476277AA35B97486585983EB96361D26F6714B49E000D
+16007B397175B0AC21D7064AF77144D1C0800689468351A1605E21FE5175320701DFEFBAF066
+2B93D79B0E5E7CCCCF8CEA636AB27E0A852F67B2C5F201081335D3C2B4EE9BC5D7F342B49848
+E6DBC3D2BC0F4274C2C6F54DF2EB4A23D2D736BF0823581C1EB35C8C0471AD17FD0E177F4C85
+A33522F002954E8BFB33C0ACE5DCF7B8310D71678C0EEB45A6F0014F0080B4DAF40BE2D890BD
+3FD44E14F04AFF9FBA9D98466BDED50680BDFA0C95011E2026053FCF08E0C67AF107D50CE001
+C7AAAE3FE75F5C3505BE54CC683FC9660425C17C9740D27C0634F04B784F758A6947A4F69010
+8FACB2D6B08C7FAE8D40A4183CC6329F8B921660E54420E2FBC44E43724E8F30196888AECD45
+5CFF68E47E28F68A8D82E0E7FDA8CCCE35EBDE0D146D120B1044A6E0BBD91B29A38FCF4DC8BE
+9158C1C698DDEE07E0BB6D0AF5DFF5C1020E8406CD1449E012EEC3A82D6CDB42F8318BDFF262
+54F3B528F01E8D09C147934DF965ECE201038EE90F5982CDA85381C2431A2BBC8DD5BA1FDB8D
+9236B699215626F78172D3B4135716D592EC1DA0F30B6EFA498CC3192847C45F2019DC74F618
+A7414DE75988D8AB737EE75A0CC778B00D6A84A647105664A6D147715C2CD14B78F261C05464
+490115BEF6A00282BF422807BA6E62E5D6FDD7D838E8C39EC86970CC7D86BB6EF72E885987EC
+8D919C37112C63FBE1993071D9B5B467E0917B35BBACB4ED99D4DD7E037B9AF008A5F7EB8308
+037E0E5C6862864C9F77CE7054ECED04E93A1FE549E1200368F3702A95B519D50AC654CDE6ED
+297A3C6A60EF1BB36A036900D4BE955EB4D72CB719B08694DCFB3125386C7CDA2DADD0AFE974
+C974E18501F4A21AEFD4E0B4A9D2124EAD0F97C5F20F67C7100921B151E8D492B0D607D0A208
+ADD6F315FAF3F054CDBB8EB9C5D39B56752B0AF1187F076A7CB7FC79DD1D01394FA6529C309A
+77F74E0614E79A84FE47A6518F74376B4E4E76A6E0BBA7043066C177BC8B979A6F5EE3EB5BC3
+16FF17BA8C4026F9BC861D524B223208CF94D89633DEDC9D80E79C0B8A620A5AF902879CEBDF
+1E0EDE231BDBEF0BAB71952B8D04A1D572EC97FCA725883FB2D4CAB5572261FAC4BDF70615D1
+5A1B79B856F0B393F2A065555FD2522EA74FED08700EFA68270627E09B91ED5D02299E75B066
+C5908A5790E45376C149AD782BBC1DD01D49B555B7F3B4BE829E3D28878F575C778D26FA2CC1
+74683854E0FA65D3969A3F9200F91258F274CF60978E45534514703BD6F1B7D69B41526CB310
+2FC836D074C3FAD523CFE04EF705552C365A82E2376D208AC859E308CB61603C59C80FDBEE2D
+15E1950EC314F2039B03B0FC16F45B2579CE2D45AEB8B978872E19E55CB9841859BC72AEFE96
+BC6CD048DD1F2FDAF87E31AD8292B7BFB9623B1D1DF85325B5F757206F8228A5F81BB4D93A77
+550632DDD41E61DECC1441152D3743A5074B6381F5842D8C9B5B468AF871978DA6B8A7301640
+323C65FDDB483A6F7CC512D523AC9A2F47616BB4847A61D187408664C758A79904D81DD29127
+9E8134FE1EE90AC55B2DA653FFD91E2D9D0B3594D19FF546DB593C8A699046C0F841B5F19758
+749A14CFB0AB686D7E17C58468E950255FD299DC7E6435A303B5100FF844DCDF52E3FCDA4A20
+8F42CC3BB0960E28B8ED5906AEE9C176BA5FDD3EF8BEF2A6C00E01D44AF23ED706E740ABA3D6
+FE39A0E806A2FAC4E5D7BDF53322682A8D0DC5FE490815F388223B0316592FB2DA05434BF842
+29DFB33DB898A5CC233102E29AB9C0DDEC5163E8D8E5FECF77C3D829FC98099C1F43A56161BD
+DE9373A14F69D5C35FB258CB96508DDB7B35A191C49ECD2A14C1907107BFB583E7B9BFCA5C7E
+E6D72F573E067990572BBC240D4C828E61F6394B4A071608637338987115F7437A65DF30ABBF
+5DED1A9DD5059610EB306071E42F46A55EB396EA11832FEFD4BE1E6F8704E5124A162CF209D9
+27F725D8D528408E8CDDA8BB494EB5EF2EF90DADEAF45E8624E89FE5080A04D2625DE67AD601
+DFB2131AF164F8169239A4478434FC2C2D882FF899721938BD643A41298DF0BFE1EE3F3698C5
+128028FF6BE57E6700B20649CEB0FB3C78B2BEF03BA238615FB8AE5201B111607CBE45241AF2
+AD6473AA54E9739E20F3F84DDDE871F1C881705E2C75FD0143398D968F49BE08899FF79A6076
+B4F283588F2DB488B2B58275E6E28739D80D0B4D18EE94EA308C01EA16F856C94C95DAAAA0AC
+A857F66E40498FD7CC3A8A98DB095BF04C6411A90A534E5FCFAFB3A2EAF29D2C9B24863F1D9E
+12A63FEF41A06F1BA5D26962C6A12D1A73DA880AD379F14BF568C90F206CFB6D5D53FF552D15
+C261F08B12965ACC6D86C25C0D1278A0F929EB931436A24875A01CC6E793EBBE243D880F9D38
+9C96E63793DD75CECD3D86895117F3AE55D9921A1968AAC765AA2B99AA4B21B203EE68F644EC
+5C1E965BE0885CEFD3FD0A2E0537BD02EB24102C8F3B365E255AEEBBC1CEDC7BC2A8DD1EAEC5
+7EC0E642A22805F2BC745A778E25A9723B420C1FFCDD3E641445E18AE18097A7A8E54E1C9DDA
+53E7EBD84CE3C18D56BBDC54C180E899D4BCF87C1CED04E10C401FDB83C6F353A28688BA6317
+D51A09250E1C2C63A6F9E8707D4B578CC61CC39E60B29EC86FE27FE12CD893C0C4CE3EC5F88E
+837623E202D5CF939AD560888684DF0A6C0BEBC5478F588F5234EDC52384895A564AF2145FE1
+E11228F9BF5106D900011F9A9A953B768B5CFDD595987C6F5A1F2031261C2AAB5B5CEDB11F76
+BED3147F301F821662B24D3FEED7A7A2D08F1009BD80593A7B885A4998E59683EC88DEC130BF
+CA01BD0A9265D74CC75A2560280FEF13012351B99176CE25E7BBB0E3CFB46BD5D7C64494478C
+87E7060C80CA5D5AC356CFE128783D6513670E1574FB06F009BB2671F0201B847460A54C669D
+8059A0056B75EAA5236216911B9FF62DB67979DE3DF71977EA93B3626961CE1D174A10B675A5
+763B8126E0E7E9D862ED49D82F1CFAB85CE6C94AED40A3E28EC2C7130C1BB420AB7DB578EAF4
+D81E4FADECC7E639F154D90E1194E1FBA01F611AAF2D634CAC03A34E9E25CD247DA54A1FB27B
+2888342850824E004B167D9EE44BCFB4541344E4F7884591622DB99132B1AF86A261CA17DA15
+FD4A2584681C7189FE4CE25B2986CDDED549BB0DA8C06FDEBF64C80B0B1A89D2585B9190EF58
+847BA4559EFB7C7BAAE64D37D95549061A8064637238FE3DE8AE31F06AE4E7FA588F85C45766
+EED78D8E2D9E8D96E40CD161D820C00CB0312463FEDE8441E6CD3AA8777F8D4FA553FE9A747B
+416A83FA728A52AC033A2DC128EFAE88808CCC435F1FD45CBCF963B263E714CD8C11715B4BFD
+8E0F5613101E11720C2EBEED9879894FC85927DD8303B990A2062198CE7F3A0A48528FE25497
+0DDBEBCA2C1A2160548C1E97EF58769EB684598ABA001EC66A278D4E353CDCFFF720AFDE2481
+B9DBCAC57EE38D9C464FC1F331A45D1CEEB585388E00B139F638BAED8F6ADF8D11FBD0677716
+AB72017C1349B72739749FFD24D00D8435AFE78805E455DAD15F6F4500A041E25E4E890DC0FB
+A5E88B7354302F59D03203997948AEF1FD05116A2856CC2A44BD0C2147C7CFE5AE9A9575A49E
+1EDAFB0FE0C7F18D1466946398B8099D3CD61F38950BADDAB531B2757395B3718FD42651344F
+CBB9AE1783CEEBD9F1AE5260AFEE7A037D195E25C673BE0389CA160BBF2D117DDFCC409DDB63
+DCD48185ADF29955FDB42537EC1C19A0B5E51D8785F06769C0ADCC90F5632A9F58F89D333F04
+623ADC50F2C78661B84FADFC524445374F394EF24EBB0FCF338FE9F86B654F112E8C987BE7A9
+A23C0AE29841F69B6F936E22507882D1A557E36B4F9F2C3D5D054A0167CF2890EDC16E5D260F
+3D48E5117E6B8758DA5CB55694862564D0060AFB15641040F1BFC982926BDD21FAEA2264C8BC
+94F5E4F882DC8772C4A0E049AD5561F0F240C28F7F863AA572E1743E27C1E9C1FD00D0C501E3
+A90E9F86536B2695B38955C97095E1892ADFC6A6BE12A986F2C79F218B1F0BE6BF3364A29B20
+3FDDE896664EACA5D770C769A36BCB8AA57083B55E9A31457EA37E4B83EA4C28EAADF56256CC
+630EC37F5CA96952F816EC04A3797A8DD0A33CFF1C4171AE5163D786105B0AFC689BC96336B5
+B28396E0F56193E684163234A361A57C826E805477BFA84F78BED285E64C5C0B0173A82EEC75
+A897AA2739DB136529C9CA30E67832981685D75F7B51360A97256CF5CF87E2A0CD4FCB59E64B
+3B506871549892DE880F4C39D40865E1A643D72B5CF0AD4A56FF0A6E68B356E2FF10265B069E
+954D2E1C5F6D0BF4633F5CA75617C42D53A35AF4EA98654303B54BF58EA419F054E4786704AB
+99B67A3F293A027B6F3D6EC6ED3AAF74B7CFE18ACEFE143F65CD7774191CBB8F00B3027BA684
+194B6CBE20796A9A85E205D774C47EDD8D68D754C8EED1211044BB4DCC0E7E14A1F1EB857BB2
+5D4191E0984EEFDBB7CD70958673AD34A0D182687DADC837139F087F94F526B93189C2AD5495
+56621F38A8D492B144881C69C76E611DEEE5606E8D9A3620B946571711ABC30BD4C2BD2153D5
+E557F53B667F996199989CB477381AAF8B554E4B0D0B3B41CD2DA66E120856DDFBE6894484C8
+8EC36E804C598C9DE38490313ABFC3B2E9E67F6E304B347F537995416CF9B00CD0DA9045003D
+7D3F6C7F358C00BCF66C9924D4D0ABF8BA9EAB1F37ABC4FC276D18ABCD2CF5E583004A4787A1
+0DD260923D86CD83BCB52B8E1A7643EC39F4EAAE5F4C7FA0B93177D273492F0EE0688F63A0C7
+765168619C5793BFF01FB5E65557D3452BDB63377DEA0462A0294114C125D79A59BAA2DB0B61
+0E9A5DDBA3A298AB82E721674656EBADAF525861D924DD0BE6182B74B548ED0912E6D0216F94
+D2DE6103F81C8DFEE4E771DA478E303D5A19170CC4CCE2DECDFCE2260A491DC221A04CE42EA8
+2AC34011E8DF80DDDBB11D5CD87C77EFEB80179BB5834D4D4F84CD7ED478DC2D5D6C20E9F666
+B5345B4C34DA11391C607CB413BC8C7169ACB9C2BA5CD27436B274C5342B2AF7AF334A2D6307
+6DA21B66E87F86F916C03AE2D514931A8251DF60C4E50780F4622279B8A8612377401411A808
+2EE7A7363381C053BB136FBEF76B96B3AD7D1018C9991A4D17CE2F3B626169F606787B2A54EE
+FA97EDA191919F4C9511ADA863E93135BE665ADBE9C523813004175CDA72A880C72FE711ABC6
+7446CBD6DB20D7EE6C0EC8CE999A4E28B7125086B0600AB0F34C5AF47892FE3FB9403AF0EB4C
+7C8E39E2229A2512A6944119F10C7136F81385372B28D39F1850E77DDF02E7A0FE4063915E12
+BCCEFA52086840D7E26B6FB8BCE852311CAD8B0FECA03DC393B896B0EF334BD4A25D80EFCFAE
+9398CE495A8176810DF51AC2C7D6145DFCE312860248C802EA7373D7B1F59BAE9A8EBC594E2B
+11C184AD793E8F9F0C03F2BD30EB454101EE8ED0FB66B9AE0594897F908273E591849F822285
+35D122BEAED330283C76080394C89B534029B637E895A8F1A36B01CCDA7924FE2AC9F0442520
+47D9979C77F4F52442A806A9CC723EDAFC8B9AE8AB884E9AC1309C9E55AE8B5935AB1F70F413
+41E718E995262DAA8716A2BE97F1506441317E556690684E040D23A1B83A32B747E7C44F3046
+58E9B8A364028086EA8BB8E654B4612BA44D8E39A1163E7103912B98894A79BD5EAE70815A16
+8229B8965DF0D76B20B081B527F16039AD39FE609510F68BD48D8B6CFE02A9784E282FE64DC3
+061AC3094BF3BE7E9E7F7EC1807F0EEBB0225CB37A4443CD9E4B2F25DAC8196ADA984DC31CD3
+52424CAB7FD0497A3FBF2F02435B8E661F0F73D21DA704FA37C69407AE9DF10DB5723CF9AEF4
+0D3A860F9027D0B1431CD2A92409E1E4D986D34B64DE243CA561293D0569648D5BC9CAD90581
+C666709DED4565C386907F9397C442A2C0D358701AC2AF50D5F376B384D52E395D52BF6A741D
+18E6AD76914D68C7E3FE1246CEAE4BFFFFEFBD7178BD8EBD239EF6D5D59F2BD71E899E763A3B
+EE734080790DE33CD9D0FE3D1289E80C3EB0C8ACAFD4F3BD4DF6537B1ACD2BBCA186CE615A9D
+0F0735048268D370AE929E84D2953882F8762D3819F61C0ED85A115C6037BCB108B66C7CD1C8
+3673914FE883AE6331BF32C3E199F7235FEFF1895577D216C8ED6E77DC5708F4CBA32CF1EEB1
+3D9C0145713A954072637DB4FCC1C1FDF0B5FE965DB518500063090DA4BEB238EF9F67F92B1B
+ABD56D2D82975D246E6AFA021E0C23E88A70554C2B5F0A328BE693E22400BA163AEA84453BFB
+05396E1C1A90AE9EE51F5C8A98EACE0A0CCDFE699B5DD368CBC7F6FB25A237FF848C01414DE5
+63BC991CC1A0A5AE840E8EC328303206D4FDC06BC7D89EB8498B611A91DC1037378AFFBF21EE
+248D15C95BC9F07A856771546E28EF1954445155DF4689527EE4B72A3F54D2F66696371B6AB5
+848A50D4A3F5534BE82FF257BF014769B253DEE02AC57A1CC3325B5DC44895D210671E7C77B3
+0C8266A1C9D9552DBEB49177A44A6F5F018C1D6DAD19F65C5ABA1F7FE55D80E93507338B0F0B
+3FEFA0565E6BF4334D98AE53911433146731E6399A8E5783BDBEFA8EF739FEC5353E07E423DF
+FE5CAA3DA0A486E4DA42E84618ED89E60ECC6E103BE8E61ED5C396EE9D800CC83AFB6E532BFD
+DD96ADDAD7DD85146F410B40C43BF1F12BC27E07982099BC4718170D8043297DB95A571E1268
+638621D6E295CAA2739F9251E7644EEA31715A42FC9A56EC891B5366F3C4F26C77AAEBDC1BC1
+FDD5E1AF4A140D6AE1EAAF67C0C28B2B4F886F0D8674B7C0FA6E7AE7F05D56457D1A9E055C2B
+30B809E3A84E706CE981107FC33D61FB6B6BBC9FE5952EFAAB183C994A2C606AEDA95E949231
+926FA1CFEFF17B86469CB504ACAB435E8CDC732380E4B887DD9E08618BB8134F4E75417EE647
+8B9BFB11DA7595E042B8D1BA639A1606441872AC2BBF7065341604565B8D266D64340B9B1810
+8B9A065E9614107C3B2A6E1E7FC4C65331D63278F113D9724A92C0AE7A1F98D5C07DD09A7802
+A77F14A551508B77316E4DF79497DA97823812A6153D81DF7F172C96E5827A5BEC3BF2401009
+E212C8AD794D49548485B72C67DB2815DDDC3055ADB819C1461DBCF71FE60F7E0D5BBFD010ED
+BDB843603BF2DBF73B69A9685CB4D282B4B5CFBD47D805B9E9BF38949A59B4DBEE9FFFD200E1
+8E163866CFB2300DC446A7F7BFD22AA5474B706573FB73336840A60CD62906CACA961B801AF7
+8DE0CEF472C0B96413847AE7A911CD28638F44BD04E6D1A1F6847A50407CA9A351B914EC5906
+540B097448B4473F56E77E568DC0822CB54B312E4F9AE5742F6E61C1A5557BC04BC08F39AAA4
+2AB36A10996E1412D7B046EBE11C4131F1859178DFE84AC8CFBE05CC3B919D5BC91DF294640D
+4FD5835CC5CDA37E9062634745E5F3D3C310CF73F810100EF5945725FBF38496AC8763E28B9E
+69566C0F8032129D569ED8B93FB794473094700911A2090A9F6D8FC5186ED4DB8648C32BA583
+65D1DC247BA2FE69FE4A42F5423EC4A8D1B9B07A836B83201EC205D158A80A8918143CAED74A
+60A4D022EFEE3C44FA24FAAFD7E0B08106AC9B851DF68C1643D9BCDDC72905440C980113BD78
+91394313840F7B4ACFD26CA6C1FC757436AE7D499801FE39594393E0FB3699AE6A7F387AAA2A
+6D955739B2729CBD00BEFFE282E12D0E938D512C451E186E82703BFAC1FC85C57957B482CABD
+8D3032CEC83C3F75D981129A6B5736577CF55C417D11F26BA143D197B53FD97B7766971DBDC2
+BE12F9EFA47A0DAF683F504EF5726AAFDF01FF5B5D941722C6D1973FF92DEFA5DAAE8554DD48
+B01FF2660B6A31A210F504BEF75C1E8EA6E243972114DB296D19C790F1806E58CEF7F17673EE
+6254A4D8D14C3ECF591AEBBC869861604E181BC8E70E19A178F0118FA307C16778810FDBDA4B
+148BA33FF3A4B38F3175267E7924E7912C52CD78352688C45644794CBB843A501F6DCB88BAB4
+6CBBD6F36E31DD0FDFE755081BF4F0168AC57D32E63BCD9E95C6C55D9E56690B7ABCBFB535C8
+0AF3825F921CF6C3953E40BAEC3795A32B04328750932DDA02B0408EB74210EAA082D7E81C04
+DEFE9E7923DBC0A175EE616161F96FEA8BC29953EC47B82951DDFD4996A6573C40220A36355A
+C3E696C07F61D6C0B16D2124F2CAC8766C65BBC7B8BC8B8B0D5D766533868A1664E319719863
+F29BB802EEAEB5D384E95FB9A784F894CE477D8A41DF73E6B560447644F54EE71741AA8C3CFC
+F40547426B5D397F873D38051A1C37C05DC2BF7C77F4068D01DBB0E5FC2E3CF2524774C37525
+8AB840929F058BB06B958E6C9157425C3D7A2C047272C387E92ED820C92583E3624E6E498A5C
+23264DE1CD9000C7B97081E40023C071EC3968D22331DA058AB5DC1A4039B0A313D70255281A
+B7CDF91FCB32A991EEB82E6AFB4313D4E236E57819ED4739863997EFBF139624F650842DCF91
+A3782B41851EDA4B45FD9E46BD4002379C66F700AFCF7B04328948841749EDC07B03277B01DC
+DF1527F14E261788FBD4D326177246589B5D6003653154D8CF5B262FFEF2BC3C5A4F2C1000CF
+1E22408F1C4C972969EA4156B3B0DE2905EDCC99326C3F72438C659BCFE4E420C643BF6FE226
+5CE6EC9092859A20C8A8D0BBEE2FC3FB0D14217E973E4C7B318CB7A8F6ECE8021EFBA044B1FD
+CA1BB763C1E37D622F833FAC366C66CCB1C44D8EDD405087D720BAB0EC695D22D86272BFD95F
+35FEBDE770C397DA6D5B212AF2DBF1A16FF5F125F3F524F53B98BA064535346D0DCDD2CC02E1
+C55EA0E0F847F766720D6A9D45B9D9776F35B65DA3D8A3C78BB235B0E5FF8819217B77B86A46
+FA0ECC6ACA8C6A053562FAFFD3350F2A056D2622A3A4D673A6A586A03042815ABA31AEAA78F1
+09410D270DDE0CC99110A420B54AD9CE4B54D4687B07EB3AF950C1D4B88B0AFC37D792407D94
+50EC4D77EE6DDFF803CFD0F67354DE749FCCBFE296924AEC3A305857E94B65E91FDD9F11B289
+CA47B191C7613DF209896366E9D07431BEA6A229652AB7FE6A210277334784C8D6627D7D8ECA
+43D4B8E75E1E6AE21651E7B9942FC0E781D502D8D51D7ED6F9576A12A2CDC40F3781AB70437F
+9D958EB6477833B9B85F391AA10201E89C70C0A6B053E5D95A550BD380809C3D9249602F7EFD
+81EF86F7BEA0CEBEE78FF7E51FFDC2CAC7BC2692E3096A1642F40687ADC3CAB1626F7311CDC3
+B1EDBCF3BC8A56153580484B30875BD19B65F77320A26A4540C1079D23B07C48FE5D69EBD7E8
+AC5C11333D9837FD706D1C52FDCC2AE9D13B3CEAD494B7D0AF602A57E5032F872EF41C71BD1C
+53896529E6050BFB85998F489CDCEFFCF9B70E5D7371422F031AC9C00D00E8C436B6EC76C9A1
+1B9F92AEF7246D46EA779C051C539A5D0B537F05ACAB9C2C22BE43EEA3D56F52CC7087EBA41A
+894CF633481422F5E6270A4E6445496DD020BD3CD846F98CB64061BC16E6C7E5430EC1BBE8CA
+2A9390EC2B3EBF282226EB70D5AAB4B911EF1347299FDE67868D6C1ECD96B2A8377068808629
+E2BEF81138EE0966A059BB6058CDB7D418CD5F217DE21C03C596471AD4125FF448B5DE9D50EF
+DA9CCF04B3D4D74B452BD00C7AE549FD0F2F1E7919DEC06ACB53D39A38E75397296A32E61A43
+5D4554A1DB7757288ED367DC6989FAE7F428A8E28E806EF90C4CE040D1478FBE47E2CED9C3C2
+4716AB2E4A138046BF7F7C5C6ADBC75A3283CCB5F9F53E1FF05D09186C8EAD24CE641DF1844B
+A76AA15586A93049EA5C279CD92F070B162F59A7023B716D9901F332C7C05DF88C27BEB76A50
+4BFB2F9DD053627942AD6F04315B51140A6DD16A9CE1A4AF46AF3EEDEB07EFF17F6BCC85BD86
+6E763C64CE25F9F9D278F04AC4B12A03EA26BE39FEC35434A1A105DD410FFFE7B99C0AADA93C
+6A834BA7774BAA5C01D2A8D89812433D5AFA22507ECE5014737136641953F6B053E93500B069
+34C25D5F2E7F45B00D78A4702A086AD89A965EBFAEDE1CCB95DCB9B8F0BC376CF29EAB1288CE
+A94F572383D358AA48EE8DFF88B20A78262813BC1A2849716F6FE7295CC153069E511281DE2E
+1135B90F14A9AF09AB377E76A38D0A8C87AA352130228BE170E0845B1FD3C115E7BCD94A807D
+0B079CF9D0A4FBA455CA2CE547F24A5AF1A58EE39CA617E2C15ADFD2AF1B6625EB8310CF7831
+EA2744FB523816373E69139B2014771C6D7C9DE12CDC486943D716B9ED76F5500455641DBC52
+D5D20D43A41D28FBD23D557AFE215ED0E7B9ABED8A5F908CC8331E3FB61C9A9E73546AF3ED88
+A024607B738849BCF80112E995BEB93433174D2FA06F12B159979743EA404625BA7448F54DE4
+46C9252A6A2769506905F8448A938EC2BF8EEF3F73BD5C7B5B5DD81416DCE2EC74AA7ED2D510
+CC6F591D0C51F2DC4B8379D06775F0C2BEF70343097C44EC7FA8F711A745F3330DF7B8BB7742
+EDE598BED07CC879A10B0B34B20335A36383A01057A53A5243363855C70AFF48F259A5B2882B
+B302D320E533225326249E426BA07FBE02C76D5193DBDAA10FB23DFFEAC7E2AD096F324E86E5
+A6B76FCD07D6129338D14A893EE8D92F71A9DE75D6195F71DBB650F0AF3989A02002DC32D1EA
+DCDB40CA3ADB7B50286F2618EC285B822EBE484E9AD72591F5DDB07F3A31EA9FFC3B26039676
+D1BB14983439F0E7517674C9E36D1F86FF8032E6BF2801ADA6BD004454BC61FBDF33A2788CEA
+419B4BA1A0AC2E19660D6173F539E7EFE000AB18CE9F724E5CC641D6052A70F994A38E050030
+ED2CF32A037B56E9CB96C149A10F34932FEB06AAF48C2BD54D25B58412CA1FEC65891DB9064F
+3CAF93D6FCC90EDCB298BCD09ED00AB7B46F5E776DB5AE0E397F8E780C4F9F19A339CFF8C9D6
+6920AC9E95B3D90F335B7B5BBEA40082EE405AFEB3397A4090BF854F0A34DDBB7D80FC30BDF6
+DA9032106C0A090004D0DAD25B27B99470796E5C4402D05D82FE0533A2FC0641E06086D5A63D
+FB4C9E35A8A6ECAA9259F93B812796C4A331895EA2547ECEA1EB254B1AB777FD3EF87E583817
+4BD6919E04FA04FF349906D4AA7AD2CE33BA754276E5712F3EF752065019563446103EF6713F
+E9ABEEB69D73A66FE463A37EFBD1A37A53B42F445D13DC40C1042C38B09478E35901501053E5
+6E98C2EC86B364594FA23DEB6EC3D4B16C41A5FE34A13B880066B3DDFE51D5DD7C74CAE27085
+9934A57FDE18D4BCCEA46CF0B05C2EDED63629700526B0FC9B40A3ED89A3718DDF61A554FAC0
+6F4722CBCC8FAABD7960DD7D733A73E820787F5AE1F5B0526A76FE49057AFAA7D42654C95B39
+C9294C20F36694DEE69404A8F1FAE78CD75FBF9F59AA7D9887DF8783775F26CFACBA6CB01B30
+602446E1754E2F6BC3CA692B4A6F078736F9FC74312DD87AD5974C45B386CDC5E64205AFAEED
+297B40BEDD7630660FF644A7A9734113E58ED8893C3B93A73F183C1CCE12035FFEE9A515C349
+16A92220D07F065436313638617BF3780BE2C9173472B8A69E9EF800CD93709AAFECC61734D5
+DFBE4DF2AA1AF855786753A0CF176BF74CCB46D2CF239BFC37B2554F17C1DCBD693786A0B5EB
+82831F9E8A4B42EFAEA6B10E7942AD1B783B1D644DBA9B5EE4B45CFC496FDA6F98881689760F
+734AA938CDEA288427833C4F24999E85DC610EF3A484587266F72E1D9EC3ED7798DD3A9EFAD9
+854133875C0F42453C21287E5A4D1854CDD50DF26F572A5933CBF0944F611366C6E6E3B80D2C
+4C44DD99E80FB8351C9DFBF38CA541892804DC2FBD14B1CB344555FE484BF649C9308B751AE3
+F27D7FA779B59C3D796493D14426A31C4825DAE251B80D462C98F287C5E60B782153854E29FC
+3BF95B2C4B3A987909ED65D3345F947DF42A7C0249602EC342404301F2D1D1DF0CB61DDC5F38
+C3A967A0CBB707EF6D2458AC4F51388F803C2D4ABAE337F604D8508BF79A9A1BC185C5030DEF
+FAC72A16CB51EA6FA8DA134DEE3EF13226FC0C5C5A00573CCC71B7F414E93442B0558A328805
+786DBAF0E9470431002F0EA58A40AC74DBD1805734CEC67FF5B8E3AD354FCF9AAA26FC636EA3
+0B026DDB98B7749DE54C37EED9B0C614C1CC5F1DBFD618BE5728772E67F85AFE1DA3E907AD8A
+BF69F6CA96E5452DDE3C047E35FC55AE164729E59AE10FE733FE1B58FAB7EBAB46120ADFBE71
+3529D6B8728C772DCF0B43D42E9D7B7DE2FD45B042DABB9D573FD68BBDAFD6E26ECA6672A425
+5D591136049F9C2CD467299EEE7766880F5B174C2CD570011824C958D102EB97BDEEDADC9B07
+33BDDF99CF1C20136F34EE2461C6D5CD1A77DA5A901A66B2E3D57910CEBB30C60AB149336F2A
+91A9CCD9C6771D4A48DF99FA4683DB39A8161B83CD29E70D51E2ECDA3DD5A34455585899F61E
+7E4FC376111D29CAB945D3FFA57E7DB12B894948A37DCB2BA9E79537E3FF095C81CDC6A4B228
+19D7E579355B281A4F44C5F475AC8F984B78A91B20D4B11EB47BE5905059A211A6696DC066D2
+A5792F6AA667BD5AFE92C81CCE1753DD689FA80010DBC4E0BC917CD4FC8171C991D6FCBE5D42
+CCD8EA0017C0DA02CF307EF321A0F883FE33731655A5528AF87F05C406C7A05DDFD4D6889654
+99A3ACA7E82F3F2D85941653AC8E45C3956CFFDAF91CEF1F1AEBA26EE5495A3A28073D190A38
+1DF5F2384D12C1FDE082378B6FCEED74831C12A54337D64A6352E2EA85E67DE10B4CB5E09E5A
+B6A356F2345EB68EDE34CCCBFA9AA7DE38B5FBFDC6973531B20F85D127EAA05DF03AD933D546
+0C50933F551493AE28544F62D126F2964E834DAA0C652C2EB4DE3B0FEF10C974FCC7C10F0196
+AB56D47E268AF927A96EAFADA234F1030E58A257163B72793D8340957515D2E7FF6153923E5E
+3EE290B6284960967479B4D81BAEB242B327D6B2D0FF46F77E43B4A0F820F66204D507E7C1E7
+BBAF0927478F9F9F7121E11CA789C0E0418217CDAF10875F96FD05D49913091B920DCA3BB373
+99A1D88109D834742524CDA2FEC84E86F232E5DD433F924E9E01BF6E446A63DC40741D349420
+26DBFC8D3888A3A834BD4AEF3F5D38000FE075AFD4CB3DEC0415EFE16FA1820341A48EC4B3A1
+086BBF729E68EC9DA96296A4C9D551E099E3D3BD8F464FAA5735B99963DE4C2AC96BD0FAEC57
+E61C59133EF494085A9DD295B45B5B86307C7FA720F7170DEE2728CC31C58BA1360EF0733918
+D1663BD355295CB8363E9C53B1F271D5CAA6D53B80D8DAA29E9B834271422637CCBE92D7D9F2
+7B3D3BFB8B3FDE5C6959CD831B09948F92943A455E911801BB69CDC4AF15ED67529D529B9915
+2AB50B8ADA7690135C54465F46AA2D6E17FBC36E92E3C9A2EE01CA9693646DDBCCB439F3405E
+A6C6FB477B56BEF0FA5C5EBCC067C959C4453046959C4A9F1B166AACE020CA94F082899CD9B0
+FEC62E8B60851D872E56D48C6CD9D69D5540D1B3F1102E0B641BC40E17FD99A9FCF1048E44F6
+ABF60352446E3C8520273DED902ED39EB7BAE21995A6F48D89A74A31C40E585D6206D90434DF
+E9E3FD3DAF501AA292BDAE3040FCE06586D10B19612590DF6D9D60C086C9BE4D2467DFC042D3
+4BC7C37C93E58924BDF35C5380B84B5BB19F3658696D32AD3E48F95A0EBD2005E50423C9E3F5
+DF1DF53F001CF6A914D3F7545531E578422D99F9D914C7D83FAB83424C583F4A78C51B194E0C
+5A80BD051BB9C62553EC3443315DED169EA666119BF3C5730391FC08EBFE0F2B8D6B18EF38FE
+726E9EB4C41E11C9A22351C374341AB728D0224582689A104A8B3E7DE0FCAE31EE8BD13397DF
+DFD04211B18938BCA715A66A1C7AEC553A14C20C909AFD757241C62DCA34D6CF7ABA262066C6
+3BDA13D3ED508F90AC4CC8F34A3C7B8596A47A24B0C048898CA14D7DBE9C48B8D1DF2057BF83
+1C0C89C470F3E526DCC94D247E54757DE9AB8516A1EDE99EA0902025818A06C68064AA4A7706
+3908CCFFE4751E161EBB1F5BF09AB351D39D0FC2CB8021B73A8CBFC7BE80FF63577CD226554F
+A9DB429B058B02314ADC063D859740747B54961512B3160EA441AD31F6DC6A0D8AE9BA50B0DB
+545870A451690DADBE35FD8BF54D32C06BAC67C886516BDC7FC91CB9B6435525073E37CF4670
+708805243C6F9809C610CCA49C7D53A638B04B15FE1FDC4F6C2C6C274D18DE17284A4A6E871C
+22D1D525C23FFD924AAD6367E6F3E576667A2766102BA4754E6E3BF0F854B328874BEAE2065B
+5984E0FD540F228BC854E6DDE07788975FA64CB562656490CD30C95D4DDBD8171E4FB1A2B5C6
+D50755375446CDD0B405B47143538D4FDBDA098AF40A06B1CF7A0565009458CD116069C86746
+DAD2C0E2F24AF45B40BE740E7485BAA6B776D99ABA9BB0A25C53E3AA56EDAAC25BCA78BA2A7D
+0AE5DC30D2D80493F95AE152DC0C07946BC5B5EEC417E1903B3ADA7D1738A3EFCD223F743CDB
+75F34A83E3EE70339BE05C352D8A8C3D3BB7B3F934A43C26EB2A849A2B390D779C9989E57006
+AE913F406998391013A463175E9E4C8DFA17ADD0A743322734CE5BEA82CD7A4CC1115FB00D1B
+212C8A340B0AFE77568219B9A3C523090ECE0515CA21C05264BF1934F557AA0197934B8D27DC
+634A30C5C325309E6E7704E97BA8C06A8200B041FCBD0D539D972FFC6B1250F047C4D6C5D549
+7B3FDDC7DFC0AE135AF47C31446D8EBB91190847F870897CD034F87F76C4AB03901B37B18746
+0A32360B86D753C9FA87EFA92B79919BC2D181A81CEA92C438E05EB257839443FDB5E96A4CC9
+898801D4D69EABCE3B92AB3427930C462290300E334EC1DBC9E54453F466B9CE2374CAB66535
+DCF6312784A708A25165D6667088BEC143F05A827EBA0A9F6AB536B69F8EECC44CA548F7072D
+B51B6A189B4260ABF269B0A1869763ADA330A595CEBE655FAAD08D62415ED6587B393360DD36
+6E5350EBBBC3098317B97581BE36742DCC36CCDBB3B42420C791A20CD92FE82947EE6144787C
+4C3A6EAE1B13EB6BCF4D0BFDCF25DC941B47FEEBDF2D49293DAADE949AE1CE74037676E01A39
+C2AAC54ECE35A8630A1756AB03059A7456E1048033C7F1248324643395FA6FACAB5E915F76D4
+40CBF009E1AB1F39E87D9D5F2B5F6BEB9034A987A18F05A558C173B145BB865FBD5EEEAC935C
+70E207BFCD63C514FFEA2250B6EBB33EAFCDA4CCFD0503E5842D6B1E27E546BE5FBED519603A
+EE73CBF5B83C51C1BAE439A559477FD7BABE6B33AFF69EBBA394355679A1518928FBEED5A751
+6488EDC265BE1C1BAED666E33FC9CFFC35347FF8834489A916F048B25E96AD4E8DEE3AE05C75
+D3AECEB30547329D9FFC69BA98E2FBB7D1D78FB6355CCDA87826AACCE1AD13C39D718AE32310
+14EEEA3A5C79309FF453C8461A4C66C3751F1CBC06CB25B9DC60BF3583B142AFB8334EE23DF3
+C69F8AC7C2CBEE75CD7F4A33DAB9C8481B6282FC58ED195F1780E493541C208686B71EAAD9F5
+358C0DE284D54F0B6341807BE697E3D737BA6D7796529FC73843722507DFC1598C1B808BDC6B
+12A4259862FE387617B2E189B194D96AC95DA4DE3663FBB4770341BCEEF13C75D76C655B40FF
+EBC66713A3416E7BE641F5F8875D36495DE4E94A8B6508E6F3EDABAB9FF52829CC674340DB57
+B248864BB9365AEA3A6C84B6A1D0D6928D275B5A79ECADBC1836F4768A715556B98FAF6AB81B
+289831B71AAD06F5217610CD7BF4F92B48F7681EEC635B26E9DA602962E4BB9B3FC4E561E629
+767C0816DDF8073E7E387A125FD81592A714B58A03768A8309BFFE17F7BF45FC0C0820F0137B
+398E2DFA6376F9A7808E9F7987F7E8D4898CC8D16500BF4BBD6BE2B9A166DF05DA84AAA132EC
+B88A11BE7929811EAEA87299F26CCC439A374173B6AB3CACC2645781F787F3EEEDCE87427F6F
+FDCE837946A0D5171769FB3F150A51E16448C08B8F8D78CFAE3A98D5F18F26E745CF9DC64403
+91AECB0B61C713978EA17623CC5ECCD22F4BFA6E655BD0A3212B9E2ED3BA6E85D61F099983AA
+1EA8CF1D1D852C03B2BD92F0F51E09C154DA9EC5C879CF489BF99923DB4D9B68A6EC66EF1D37
+B8A1B27D50CB931B87E74B65A9130423C162E66AF90B61A32C63B1C92F9A01C4A3917407FE69
+A2F64FA60C808EEDD1825A02C9AC689641B6AD379D64F153D063CF3664751B06FAE88D17014E
+5E0B0DB0D41A5817149DF3773F81541EBA95093B338EA9CA58ADEE6578A540B59927384F0F08
+536A57686AAB0AD877E29AB626E9B14FA7B1C4710300583DD5AF73098E1CF1B807D647149523
+E1B64427E7E5D1CE78EE1E7025A34041E87D9F6A97CD1B37BE324571FF184EF3DB86EBF77894
+5F7277D0C194419CCE2546727552660115002034E6DA52BDF3FA669EA30318BEDDA7E7C02588
+8C1DEC52925AF96697919C162167E3746FDA83CBFEB79DF4D2E8576C8F186C31ED02BB428817
+B0F8BDA82D74DB4903CC1F7B18872EBE75C7EEF577BE9309DEA7ADA7565B6943A28BAB624C0E
+7FD1783314A82C41097031886D8D70FDF368E95BAD9CED5F620A11031ED312FFC1C2A587BB5A
+6570AD89CC3FFF6F5AF56C361BA367A5FAF9C1E4D9F2F799479730FAD7DDE0F1557225054646
+9C9C64EA50DD1071701D2E0CF69F227C2400F01B5ADBD34887C95CE68F26A6879CD224D2B1C1
+8F11E02E3CD42E35D3C3D30084688F798FF91EB3D0A82F11AC9212B2F7D9E135BD3411CC7188
+76775573497F2E5D97F5FD3D0C8AD2FEF53654D0E016A39D4E5717D09CCC87367E1F3193A4ED
+5714F783794436403209E50D8B96533F76CC66151CC6124CD63F33BD572D25FF824AD44D5163
+7BBB017453E4B3B37C0140075422BCAC441047654119577EC6ECFF0B580655C21772F99DE072
+503A7688E22BDD7723AE7E7537ABEDA2064A1C48424B0BFCE52607CAC741B762622E6BDE5B27
+794B4989FFE55F4F2EBF290B0FFB53C62A2BF670946C8CFD089242341637B237C37269FC32B3
+E61A27DDEDDAF2897844A3AAC99E2E23AD7EF3010D2AD92EA14FCA6D68448E961212AD79962F
+1608F0193E7C301F5117C3B7CA92DCD9613F4F90FE4235916F17598AE3CBD144CCFE9F2937FB
+44CE9CEA13CB7298B02621DDCDF2CCEAC48D2A22177E244592FDB96BC75B0D4D9C2108DE86A0
+1D197E13FDF277FEC5D59A04380AAEE76ED736324239FE2103240000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+
+
+%%EndProcSet
+%%BeginProcSet: texps.pro
+%!
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont cvx]cvx def}def /ObliqueSlant
+{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1
+roll mul exch}def /ReEncodeFont{/Encoding exch def}def end
+
+%%EndProcSet
+%%BeginProcSet: special.pro
+%!
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ userdict begin /bop-hook{gsave 200 30 translate 65 rotate /Times-Roman
+findfont 260 scalefont setfont 0 0 moveto 0.8 setgray (DVIPS) show
+grestore}def end
+
+@fedspecial end
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 92 /backslash put
+dup 97 /a put
+dup 101 /e put
+dup 102 /f put
+dup 108 /l put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueXX 5000832 def
+currentdict end
+currentfile eexec
+8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
+97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
+8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
+b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
+50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
+784c6bf7389803d9450b0c21756a017306462c563d51ecefaacd079732f12c29
+315e4b9623a5752c6f1d8145869e120d910b2644887cea7e30b15676a92537c2
+9d3aa80dc30082aba94b40990b82fb1a877e805e0c8c48f61e9f2edac05b944e
+e4d8084ec1d5cc517aaeec5b3ea379dd011eeb454cecab3ad2443c887c582789
+72355673e503affe0394fc7db31de364e4f56c24033c7df2265c56445ec63a1d
+5695a6041ea1b94407e1cdb7c5635603a4fd047e6edcaeb2d0da6c9e0e9396d5
+1a4a58e8fdc1578730f992435560a6e2d3e3687703ee2f78f5896389ac8470bc
+806169eb01762e89b6dc9adf857ead656620e2589aae722c37a2ed7a2941c360
+b067ee34d8d5ca3bf68db725614d936bcb207781f4d4ec2ac67b13a5ad161f3f
+059add7b5e3d904831e31c20c04546fae83ca93a35989e65c201756888f727b9
+7e5313c9870ec96e4cec3901ea03a5c744754485e7d169bbc98bf872d0796e18
+9d43b712950c3786257d8be06ab6080b9d9392313298327549a8a41c00a2cea3
+690b4a333e45aa815a64facae1c2b44640860b8b8687afbefdbd5b4a541a7251
+4ee7d3e0752af3e96a88c95d31fa16d34ba2f02fdb0088b165844f02611c734a
+dbcc2037bf741fdea7e8bcdc130c70c33772f777d8bcddf4611db99001ccff14
+d7af2bb05defc3480bdab312a0eff2f375afb4e0df2f803c594b7c93f71ca4af
+861ae1711932fef19bfe2f9b7adb69d68e5a70ea4d1a3d5bd85231b16993f65e
+fb37a0a823f0542f8c2340a073dc1be4a8347f9d3068a6435cd8278b0db1809e
+8af9664c2c989b9f16873c009449b6284b85da4dee11c96a05ba83292f0edbd9
+2cf674aad6ac1a5ff966ffc37e88a66048deed053565b55ef6bdb8c2f2f67832
+f8939a32442ea54f13d003494d6350a2864b427a9126a9c26a031909fe53fa84
+63b80c3ffd536c9a5dd29ceb03148dbc24c0033aea2115e1bfe3b6fcb656c12d
+e575584cd5412ce8b1fde28f9a199091442dda4990d873dbd4bc7ada4dcf4147
+ca1308b05e8f5412e872f42375b62ee9433b57ab45e30eff343cd19d1afe2ac1
+55aa2b20021122e90c48f01c319b2d570327c046ec7f3f363cca68ae2fddc933
+a41fca23cae97cc23be42846570d475b801ffaf02bf6a4a94ec1c2b73dd93ae6
+ac20190024c731b5806712c823cbf7d8291ea94e9a76bf1e3c715b90bd674aa0
+3da0320af0450fff4a75f5e1e83fbf6536eb9691909a655765083ac504cc855b
+9329df0dd5ee13003c240714c37eca8d518896bbe495329007451fba9df14cdd
+d8950c4c1636988c4e8de3dbc01277dfa36029116035c1eda42f4ac07f8c6883
+eb4eac8f278213d40cf49cae813cd0269be8e1443bcaf9aa4f9383a5d8823585
+1c385826de6cf55f7fdbfb74a99328cc64a1b4ad7991a3b9d9409952ae5b291f
+d5b2d2080fd62b248470d6eefe3111cb994e5731b9f1027c33c9154b0ce0a637
+d33729c36924df540a864ed2196415230b81752222df8779f37d9c2a0f33f203
+83744827452ff4d3042432ccb3d5f4314c6d51e6a8f53d35e458186f0f9061a2
+a53b7dfcebab03dff2029d8377945c1a61d48db1fa628074359b845fa06d23b6
+038b071c3601471c5ab555e440e46b81ddffcb0be3effe1e8c9b3b1f7f0608f3
+a6e63a49a35ef71b3e9260cecfe913069e460b40bda636ff1da4a081a392f160
+4e04b59522d3a0ebd09ca931979630b91265d0942485547f99cb9cf6e28a766d
+3eb812599dbdfdc48ba6da66687899eee0e3b71911a30bc7f553cecf8bff1c73
+4adb0035dc9ea4ff49404d66174aa5c25ef1352302c6432051cfd8da3eef1c17
+6d96da475ef37303ae6499802c12986c497434a16eac7010e436cf47eead9abc
+7a38bf20a20765008924ed4ae7a7a7554f2cf379161b073d6c429d3ca9157db8
+aa7376874b1106588cd4b4855827b09065803c630d593bd1a5eb3a7ed7311e85
+8f4219afb8559655444f8d9eb06e309ff626c33e2edafe56f96b69e1b0524163
+215382f1d40f69c5a80de4ca466bad9dcbc895a3218c4a0476c5b9f86299551d
+3fb81c90ded8cedd875981a61e68a4bb9276912a7642466ebd5ce0d4f3e6e9f7
+e7f7371daa0e4104250edb7f0a4b28cdfecd60cb87115691d2eeb3ebf5d341c3
+dc18a30a3c6b2d067363426064e4762c3e6abde9a201563d1f5cf2b4889a46e4
+fbc30229a5ae97572c894277a6ca919dc425679bfa0c86fc9276bea056504c09
+0ea9cec7ddc5ace9094d73f6e35e733f99eae54541a0486acde9c1ce4e96e25c
+683a3512a8fb401832263336e7d1a1ea019d8829b41fce35d711adee4458fad4
+6100584cef41dfda91037ce9a814082ca8f9f5789571c675c6f087acb7bee72e
+be41c47e20d7f3727bb1c4dfbf8441836e5e410b843091d6c926bdf8d19c3a69
+d558fa8ee330cf1f2b0e0831f4532478ece8b7f50f98fc2f5756b5e31c9c36be
+9b1eb0c563a1175566e559761b853ea9d1958d23ba35de9cb700102652d1fe3a
+01982c8ace2a228af7094baad9de58e0f05539ae4920a6883d765f0faabc321b
+1f9865066dbcbe1654c81a0388c3f407eeb40bba12c6a99c610e5f0616d03391
+656386e6d341583ea15db7d3fbb674f79c4fd16633fa5abb9b84b3eca11be36c
+f21aa5edfd8224ceb89503db18f3148935d425acb8bd2ba0daa823355c82a6fc
+1e1ea8d910468fdf058d0fdcd209557383dca05b45795dd4e03c7d598bd7377a
+6bd3f601327734912728871eaa0585ed28477c6fea33358d89ba4c89acf24540
+3c394088608d8aa25666406875d71a2193f9c49dbdca193caca5f9dbf26374a0
+475969ee2f1d7bcacaecc49e331908c8813fbb6e26be0d4ca614ead1898551cc
+b0c0d4e7fef0f48a84880411f8101be5eef09962aa75aa2912bfc9ce225691fe
+7dcec03cb22804c19c9a4e379df3fad8f875fa2d5edfb188a64c3111310bfca4
+6bc6e4de7b202634d16136ce43ac1aa81d6591b0d1aa13f7300980449b819e54
+98a6f8582b7bf69a32225067ba1c62f750b869c50bce47447b6c8961966dd59f
+55d4ea56461d0e3035e8064273ca30cf67ca8b9e0e8efd7ff2c6aa3538a13ed9
+17f408c558c95f379afe4280006402540c26b43e7bf0dd26e0874f73c9f25ab6
+1de5ace591d953986d322ee6872bfb67a604ed39ae4cf005b6cdf32f2c1b7517
+afc3c0626c6049c2713b079a1247c2c1a5442ba1459f180bf7fd78098d5d35bc
+eb97d566c468a5309f8d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /minus put
+dup 33 /arrowright put
+dup 41 /arrowdblright put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+/UniqueXX 5000820 def
+currentdict end
+currentfile eexec
+9b9c1569015f2c1d2bf560f4c0d52257bac8ced9b09a275ab231194ecf829352
+05826f4e975dcecec72b2cf3a18899ccde1fd935d09d813b096cc6b83cdf4f23
+b9a60db41f9976ac333263c908dcefcdbd4c8402ed00a36e7487634d089fd45a
+f4a38a56a4412c3b0baffaeb717bf0de9ffb7a8460bf475a6718b0c73c571145
+d026957276530530a2fbefc6c8f67052788e6703bb5ee49533870bca1f113ad8
+3750d597b842d8d96c423ba1273ddd32f3a54a912a443fcd44f7c3a6fe3956b0
+aa1e784aaec6fce08dae0c76da9d0a3eba57b98a6233d9e9f0c3f00fcc6b2c6a
+9ba23af389e6dfff4efec3de05d6276c6be417703ce508377f25960ef4ed83b4
+9b01b873f3a639ce00f356229b6477a081933fef3bb80e2b9dffa7f75567b1fa
+4d739b772f8d674e567534c6c5bbf1cf615372be20b18472f7aa58be8c216dbd
+df81cc0a86b6d8318ca68fe22c8af13b54d7576fe4ca5a7af9005ea5cc4edb79
+c0ab668e4fec4b7f5a9eb5f0e4c088cd818ecc4feb4b40ec8bd2981bf2336074
+b64c43079a611075699b4d5902c9a10bde669900444dd85bb50c1e6578957747
+b8084982a5828fd7a9e3b9924a6ac5c404fc795f3fccdc98d530eacff0f28288
+a34abdbb317d637d067dd07dd4168a3503519bc9093290a1e4bf69952b84acf4
+ef4c3f13b51f2d1d79384e692b8efa1d7746b979b1a59812af57dd0da8eaae6c
+05a62feda23714073d7b51ac3b8b688965df7b8ef00c00fcd28db19ec1f8cfd5
+ce04ccc85d4292c4631d33d80c4a7659b7e1a0a67831c478c9a287d7738d3aea
+ca618d42d7ed26d9518dfed077319141e5854b0865aaaf29bf2ab46b40253c1f
+f7ab99d4b47fce091fb12faa57f990020e64b532e0906ab6d0d1db3c175021e9
+dfa0cbe8dbe9903dcf86f752736e4e587693a81d58891784a13d33481b5d5d38
+721721821e62ecd5d18cef58d38a6040b0cab2df935b54f758bb3fefe9a359e2
+fe0aa2fd7f8e63e39bf225000be99bd9c4091fdf062f3b09ccb1963570d89e41
+ee3b5d8f223db9031bc43ad2f5ee9ec190d9229ce70332ed03015989d19e47fb
+4728c1c56863f1e4ffd3b422a738876531a06cc93c2211e2a5e849f6216c461c
+53af1837650eb1dec1e17963155079d44f8b63c7e56da41bbf899e599e0d8eb3
+4358fbc4a0ed5e7d3684c01b1c874fc5405c7ef58c0d66f3b34292e87abfad0c
+b36b5ea4ca4237467fde4fd43efb210c9c016634c22510cad36207dc9e65be80
+49e59d573a0ef1fa462d298d3d8b381185
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 13 /fl put
+dup 15 /ffl put
+dup 16 /dotlessi put
+dup 19 /acute put
+dup 25 /germandbls put
+dup 26 /ae put
+dup 27 /oe put
+dup 29 /AE put
+dup 30 /OE put
+dup 34 /quotedblright put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 56 /eight put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 73 /I put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 88 /X put
+dup 89 /Y put
+dup 92 /quotedblleft put
+dup 94 /circumflex put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 124 /emdash put
+dup 127 /dieresis put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueXX 5000793 def
+currentdict end
+currentfile eexec
+8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
+97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
+8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
+b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
+50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
+784c6bf7389803d9450b0c21756a017306457c7e62c1d269f306bd3402e266de
+fc3b5e7d8a8d2f5bf0fe6ddd40d07391df4fad4a6018dce29a2b8f692b29f202
+3a7c0e66de8ed85c14f1f8492167357f51a7e84cc5d92e0fee4d81cf7fbc8de5
+2d2e7bb57142033993f9c08c315abade8dbc4a732e84e142d3bee51557910e12
+cd8aa37c459a5e6b7f5269f59078aba3be4641a11ac48d0b625c8325b38ec08e
+4c9e5e7fed976a5650d99d82114f449b9ca14c4ec957702295a39a93ef93f618
+99b8ea06b092c3c1e503e6e436e0a9fa22576c8930ab3dc8c20f5d82b69cddf8
+ff4dacfa9c54bed5a3aa3ea5b129fe96be632843b9b6bc91b615581a985db56b
+1e01ca60ee69ca92cf5c0882ece62edad3e106d835348822400f0b66af658f2a
+e56ed08f8b0010571807009b73ab12a8cf14ca6c71f03c2a48c500f9d62266af
+154a6375ff600d9bac3f05ce34142d6867a79581c533176bb2f3117336671e2e
+44638a97167e2ea9644e31ea16c2ad2990ea33c54001e0c8156e6de8ab6a4d40
+a7137ba275f39589fea2e2db8256adc103d6f9cc038037a47e8fd469c5f98a5e
+3c15bd4ace40d340018b1cff7d1ed8abb0ac57b5b5a2c20a51957b96c453edb7
+dae5affd91a46d938fe0a13363001d844ded4323f1ee6d30012aea19b024a552
+315505535c85dc26bad31e09c50e6512802976d298c4e90d0044c362e6bf3ab3
+62a454ee93de25ce54411090c29e9d75c80ce26a84404bd9de3aee0e3f921ac5
+87f907572b8354a5c3165eea7e8b2ba4e333802132f760b41a900c698eb3d273
+8bea0aaf7aae96a558f08b61aec7c7d65b2889bb7b99800cffee5ba19ac90fce
+11437be1ddfcf0bca5670b543b9644a71c8726d0c1005abdb96f6e0cf7caaa31
+95017ca81519151c2c0b04f81e717c0691b63a76e9b25329ce2625b711cb7bf9
+9d23ec2bb5ec8aefb8c1a3b422ad617b3da4d49685fd44cc21a1fe5e1541163a
+b3e1594601d63c7e98801d7746474377ce93f81404f3570afbd5dbfe77578605
+917ab96963987e6efc2d3f99fa56ecae6422579852567f90cc90e4ef6d6f71d1
+858270205477e221018a375ca83c572b3f972c5181d189ef4f3e3fb66f9815d9
+b1bd406c1a645e8c66f53aa5d4bc2f4d0444412e1fa5d7238a7675e7cc9abda9
+2065e641151f8d4793ce2385eff2dc1d08d6400624e77064fb08261091d6f932
+c1ca0a102e9f438b86eaf91325876bf20b18005b9481db55864ea17e789202c8
+fb89602f404043088da30ff4117fc061ce251785d5ae7d6cdaf7b5d5ec5151e7
+249d4bc536705d99a55b17e9fb4c239f8c15d9b6e408013da8c171f6fd6204ee
+16bdda4099494907d42586428602bec7eca4dd48c2a52b54fa821883661797a5
+1fd6ae9253a211a8f687cd1233c579dc179ae59e2fa1b6825eff00f7accea0b0
+247885b39355a8f4680b5db0e2baa48154f0b63f13a0c161095c26a13a6fca11
+0016d69f63b3190e191ef5ddd06633533398a4671465de003ca627a0fe57be67
+876185e099442b766a1513272676e775af0ab36cba03c02d8c11bae771eeda93
+8b1fb4bd985e59a216dc0f199111c0f2544d7e77c800343a6fe7063f8bac8314
+cab1c57054152a75da2bd1c1d433fb6a23dd19c6b523d270ee2ec1be09377b26
+cc9f3bc1f90c5c5b8bbdb46eee75a66b4cc769cc9e06d6643f9730fadb35572f
+e38989263fe70333601fc4556d9dedb3ef75b522eb29cc0f4add67ae494abebd
+f105b2b6d0bef8430373c82a97e2ea3b6453e635f580687e36c3906f453dd157
+d442d902b21ae3cb1495812b383315595cc69dda1ae5a9e963ceff5ad37dd976
+a9a01d168199ad4fc0d02d1999cef8461c1ab3c34227832785a5adac572775b4
+9563c201712394804bd06bd979a20badcc3db165733e86d6e51517c59beb4efd
+7c76515c0a6b86d43bdace3ef38bfae98dee11282e592a66133b0cc869ddc5c4
+043230521181d9a8676f103861b5dfe8373b6570c8577c096c415ea3df297aea
+d6d2075a5dbfd64b24c56bdc67f6f14fc7e34745c2ef4abd6827190b633cc08a
+a2563509c44c9aab7b4e9f705cc655a5c48b218846f0203bcd4b42706a88eebc
+3650e2d016f19eaff962105ba8f5e1e1f045081f09a935be846eb568a522e510
+358a00fa2a6f164592ff6b2410808480e6965705cf6ff8cbb6e376824d9ddb7e
+72292a0b35610f7bc7057c781be9494698982ed7df62e52a30cc91ee84da86f5
+480384093cf0a16cccbc0f5f016645383e544b33488436c4ccd212a9e59df18d
+12cbb1c299343d13006da477da18162169868f6046c56d426fea2ed2a0a857ec
+3f0aa14fd5e10d91934198fb577d3fc368eece32f934cf1e8a0dcaa6f3fe7853
+8f1d02c151b229b178e00cbe4672d3d77d762f039d5478110226cab024fc9378
+17ebf3559ddab5349b12bb1bb3743efee48512fe8c321cfcb0dca9fd2862acf2
+f662211a8d432f2e8c42f4120af0b5fc2eb3dd6ede07dbe233989d2ab6ab23ef
+0b35bc4b4f1958713dce98a5872b7ad0df5194c8156874a2a2f994befdaae464
+5fe6484c700837e8b96ffeb520ebe64a19d3ea0a0c751f8ed3e8b141f27c0b2d
+5ac82dca96c3f997673a1512f18eb99740bfe6c507fb336c89dcb2fd54bc3750
+8c494c40f35af00c8bff6fcf3dbaf21a99491fc4a5d7ca8d211ea711e79f778d
+a5587494905569b2d63f0234e1339bb62d21c3b4a97b1f6838e8de056f765742
+6f114657b3ab78bbf2dc88561d13df6830827f04626df0b0bdc85a2a27889986
+cc5683b46d5a1a0fa64e2e74fafa5e6e45415a406d850a5aea592ec660a5c740
+151427beedd6376703cdf91b9341105bc6e810de491cce20b1dab8981267c804
+e105bab54e4794841ba6f0ae594aaef43e3a08888f1572343dec0a6c68395803
+360ca667d163687f1569cbd0436242aea5673cbfb49ce8ea3ea2064807cecd98
+18d1d55b5d5f698aaf00ccc301bb94a7d77546402ff894fb02fd372ac7170c14
+9700d4aef3f91843fcb696227a629b437763e9f67b9fa92cde309d0da6427920
+f46d64a679d82fe9e83007a68983a902ccdae36f69434d0fe4f617f78b6d0ce8
+136a5535edaf3d43bd8e8f1e9b9480f974d79b1c29455dd93a496dd7d0d40cf3
+f89bd01a20e923c3159186eafac1e584412023897532cb7fa158263b875cc445
+bb8fdcd12b3987a49f46a40cf3e1e951ddb7d109fe0ee7a6e152a5df886af20e
+94782ea9d48012d37e6e7c852008d6121fd88c04ba2829467ff846a8869521d2
+95763e1123f62a7be1ecd3722b1f321299a22c5c7f5db458472199187e34c2a2
+b8116314c71b243c535c9372c0ca2bbe160c5a378c80981a5ed1a70663a6db4b
+86514f06b07e825660655fbe6cdea02201304d22ffbfdcca808b79f9a7e13fb7
+fab5b551e36e757a909ecbdf2537d3a1c10b63ee0456e29d2131051ddb922c9c
+d6e875ef5cfeb8150dbb3040e64a269355a5c24e1ee92f31d8249628d9faa814
+4040ccbf9c35999a19d38e2c383e0cc0a66eb614a6045b77b7d66a8c8e060df0
+6cc7988b6bfbbf92ae74e63c95989cc38ebf40ef5c7609d96793e42578e3e0d8
+2122cff161b2a8f096af90e03d2d7cc27459f54fa695286764b9007a2aa52d8f
+19d7cad16a191b2f727d458bbb3a3a3edc8749711f62aec6ea1f074dc59b4d5a
+1b4b5c73718f4c235e9bcb745bad6e01290996cc987b5dc3efda72b3b9d8bc45
+a8c9e7505074c4c98eb29ff24d7c9f6988ad771a3c096668dbd3b10ea31fab91
+590df16246e9851d9a00d8d7873454e464d0ca8359210afb37c05529a0d3df6f
+7370e044c010896f528cb0ce7bdb95f0fcc447ae8f6f684f2a69d6507dee93ad
+702d89d0a451e281bf679572cc8b2af1bf727d51e3afb753ef773d6cb37e24c4
+6967c6b9a5d460d647117dad9ab0cbf38fdc8babd2d82314b646c09473be772b
+8d4e2b47e5f16f061eff9e7fc2a61454cc6211c343f0145b1d4f4941f2fbdf1d
+f35ea62e70f0af95344e91d2c2c4ddabf9184740cf4208bf8a433f5e89f82e16
+5b0d4a8175906c4345197f9e31c0edacab667ab62a86b59933dc858b49825201
+cfa7ef8450eb4c3d3c0584b81f5f778bc97efb41f003f240e9da6db131ee25df
+c6c934b844508933120cd46de89ff18051a07a63c5712fd944dd8b104114bbf4
+bf2bfdcc897d73efd5a1b506e694f5a2eaa99ea101f17057df0c5dcefac518bc
+8c874646e8624ccb62d5d2c14fee75ddc1e8185f62a23a3eee78a4eececc92c3
+71ce73c225ee7ff2da20b7b7f5e0d4af223ba49bf16baefe7805917149ed300c
+465f7ece0d0ca756b0eb6bf7edb0936d5a2adb097f0f0e5f2c112833a0aa08e0
+f5583be11be43f1c035704048d15d263c8f595ed0bffec05511f33b85f9efa35
+0bdd02b87477dd96403f0263b449fcd9269d0769e6b53e93190cfeda96a3003e
+d9f11e70369e268b5b75fee9112525485271e5f51f833828b66bf9e76a8a6f30
+8b021ddf0e3ceabdd395537d4488bd002b36a88156da857432f51e1067cce350
+ae26a238235fbe61f6e0350a4e21d4fecb52b40d368214ab97e5908e7ed64d69
+e5a6f2a041ba57b41daaf11f3658d8990dfd1bc54a2101d8916f6c61e3b0bd8a
+6e0da2a74d7456e7386557b56e0623f203cb493c0529d3dec615e383ca8f2ef5
+64591bd4739fad8ee86fd6d8f236e865c342c6faf10cdf95566c96509b3b589b
+7bf33f7192065f208a53b8cfbe62b4c9261c5f8fc26da054ca591f7e7d05c2bf
+5fcdbd9a3d21dfccd687084c68609cc2833a846974b0b69afffd65e4a29df09c
+59bda18bb6cfd101a23a0d5768356d1b78949d668399ef48ad0633d1c7c3ba2f
+6e1222269b76198d22fd5adbc568dfb36a0ffc955a1e219b9e71c348e2d54a31
+eff43b5da97634f00f1cc71c6bc2e6cdedbbc15398c9ed55e867e86be6d02b33
+c91cd0d41e53aeffab126d4936adc29abac839b4de494350c40671e0d3908f2e
+4a1736c9a5a10014015615d8d8b0af745b3141d7ba094848da502d15de14cfc4
+f76ef0482d9cfe62e31dfde244d5e8204d3f523e8c9487ffd1dc4f6473ce2855
+d7fe290542726553407899392bff64e42dae9f06d4953bd857c9b01aa05ad3f2
+a2e10e157b50610c74b05877f9c9e85aa3b24d19dd193c9c67b40b2e6224b713
+f386fa40c1a5127a22be43cb5790d249999534c3a6bfdbc22ea85cefdf25b0cf
+0b316fe1a40e1786a0cc7900600051c9f39551bfabd1dcd51902c363bba3ce38
+55f3ef77f2785382a0f16228e12e54d31a2aa8e5e800107872126469355d0e58
+06edef93af116bde482d936626aa54f894b0a09097a9773f96140915abeec6c0
+10d744d7a7f97c538f9985499ec88cf9ab967d0613733b4782a8ae1d09bc8390
+e301ff1d8bde7106e40368e7173df368f8777b07f411af5f4961087c06940ee6
+8fac0f47fe453640210a42d4173c92307e74f6488335f516dda74857661845f3
+0e49358f16f8e96f5b35c10d4612aa555c7ac952376305e0bc0c02e348423b2e
+2c21554d68d9b51d6c427e6d065f5298654d76b45e3f22d4f2fb1f1e109ebfec
+311fe3ba652639072112e9564bed7590ee7189589b1fa1adcad3224deee45efb
+b83f2273a9ff41296a289ea43bf1b73f131811156c3c14e76ed8706d4f3354a4
+215fdf81f1319fb463c18d6f257155f779e83e39a7b69609260aed95246bae53
+44f092df6636af6e2a2ba9339525819ffc092aeb7e38c672fa99aa6ca26dc8cc
+73fa450d295564238c88065fb6b879fd53bf0fe29ef8ceaafe0cb3c510118ca8
+c0df8976e7f3072f1e1d4dedcd772b424f4f0f138e421558298d4f5f8bc936da
+8856b0db4e4b62f20c1d6ab58ae03b6395cf228c9a70efabd29991f5ab8df7dd
+4fd47c9733573c67198cbab65ae651e025211419b170aefb294d2e80cfb5f9eb
+36ac969019c2cdb44a57ffb66afe77302aaaa2dbcdf49ec728c345dd5e1d0046
+b16ce7d795227cfa0bc873aab9b49d59d3ae8ba58d7ad1e0a5999d51ea336326
+d94c31c8fe9f2061a935f0331bee01da7e7c9e099739061333b6c170d659463c
+cced3816caf5acb6da1e08287edce23d676e8665f6642a9116b3ac39b9560201
+4c51ebf987f6ee7f662b76aa55f50aaf7a2e365970e1aeba25d2144c919f0fc1
+e7a3864d90f9e8e57068e107f24d9380400929c0afbc5c702da2bb8394067951
+565b2377764521b41e278cd9ee14b8b48b7b9042090e4bd92dd410dbfeeb3bb2
+fcf70e76c03f37ce963a169bd51ec34cfe92ec199edce16373911512312cc454
+95655ba9a81bbdd16ae2f442e45c4b6ddc0aa42bbfa0162e0e4841a20f4828a1
+420d9dcc9fa817d605e8ca1382413d5e27620fc91a84c0cfb3fe08aacbf81f26
+774428cbe16ffe835615a81a17d1a1bc94bcc0d4b1281387eed65128148cf50a
+5ae8ef388574b3ac1d7f46a4b948deec4dfe37c01898bfe1b327b914b99a1b7f
+0ff1782d5471dc008a85f331e045c555adcf83821919a79f3fcff66d0a4cdb90
+ed7aa7abb087cf7977506b633a77d2431e217de51a1fc2b3ec14f46bc9331cc1
+28e97ac7c6fefdf1384948485cb4c2886e657d3f0ab0bc70bcc16c758748185d
+dafa880905e2e70299f23c1e80c9b5c297a31ef9529608b3a96d5c98949da94b
+b0b34bc103f03532b68aee10fa178d2530d5ef5b9d2459b0c69fe66895ae76d7
+0b6a63d9559e115c474490a311a8f4b554c7143cf48de949556e63dd9475241d
+9452863f4480e520dc163d38ae9d38bba68dd0370e8207c55a9ee9ae7bbadb5c
+181a13313c5b1a1cf9e4dcc818b2809608ea15d7973ffe3d639d3a110cd6f7f6
+85d7e42ad6c8189e51f009b78a0f0a12da8933c4067ccffb675759b06a37ecc7
+c839a4fefd7627cad46261f1dea98fbf549d82b266f7afa06e864d06b079de09
+66c8cb6447f208778baa95fd0ff6d66d1864702513e0fc4ce09018f90d1a71cb
+0493ee58a44b09bf3c98d63e2a130290d3c26a8b241e927f7ee608e19895c082
+b50cac9c6c1bd411eb4ac9845cc80162f71ce0716a3a7aa31a882fefa87df826
+d032f7bdf6dd6f0177857e55acb2eb2b2d7cc785749d0a89169a6e77f2eacb71
+cfbba6fd6a062bb1c679d6cccdde2d92321bb9b078cd36aa33d31eb3c067e93d
+2d5ed444fbda7fb401ff6b1af75078de4860e9ccadda4ccf230b9ecd80bf2cca
+d5525d165fba606b6dfaa81bf779865277790dae1529e51e1f8ca382ab64b0b8
+1bf336c9f81e86b08e9b18f073c593f6f71e5771870614502471dfc386ebcda2
+ad1a00c4cda1330a6fa94a79e58e9a58d5772721295053b25877188d1f9e5b9f
+ebd5c318aa18f8869339f6c212cb62afbfb6959418b76e7f30a454def2994b68
+6381895987d76f2153340704d3e624cd29d04722f7be2072e6e07948c53b94b5
+bba0b965e351ab6b5a49a1212f721e7febafde73cf0d33479431c606de53b715
+5d85ef5ff827724c57cbe933a5e9827f6e697c9e587c93afbe8b6908e92d7238
+e9582bb8e4a838ee39c5edcbac03845fc0b1b2bdb45b91c11689a675be038742
+d78453c7b4714ac10fe67e5b352cd4ac1e7b53a88f9d30a12b24e13840423e60
+6b877b4583610625cfb0dd32c026f6def079980a255d7d8ea615bdbb68c1e8b0
+7fd1587187e629df14d51ee1bba24ac8ee2b3b2b30b00f863a2d434700488ab1
+dd1844c82c33df17adf32e9f22d535056ea9ecab138311ee5a4cfc14354a7e46
+0ad3ac6d9c9ac0427fc8cbd84ebe1000a05be466a674189ad8f03d3aca29983d
+5517b9a0b0a793e88acc9a8831b28129f7ea986b1c1e7e7cbfb4d202c3ed2208
+b04b2defab992f3550d0b6d7e2d8cbc64cb5f6f90e3f442ecc29383d4bbd45ba
+3ebe3fada59b4cc519df6bb324599276c09edde3e77c87e016dccdfcafb4190b
+522208a90a0d9f6f603388e949ef491a26a2378db50c69fce93395b7012ac751
+b7c0da66f931850bf2200d87394990bb673273e386d20df8560d893402e2f761
+bb216ea2530dcb27274cb81f2087c64155223d97af4b001ba8eb0a90ab5521c2
+9fc8f83d01910dad063be555aadac8f7e281689df391f909fba84e20fef2a993
+8caecefe097e279fb7678f69b82f8d89630595daac8f21d5e972829be216f962
+835118acbf30fdca82256e598e0a3fc6c4099354d2acf44658c5598a96d07a82
+412ff4aa22dfaf33e47250c183acceffb996405e373c22bc346a63231c7880cd
+f7ba283e77fcaa59756129c11eb010e8cc4c7fd5b3310db0394e3cf93dbff250
+412fc01f08ab5ad0f51f7d473a5127a02067749f71e31712e2852879b628c4a3
+5c2addd08340ef5a648b2886c5c31dbd75840215db72ac33fa8155588e502e60
+7ffdadaa7c5116969a89deea790b2ca28bd54ea26d6dc490e820c0b44dacec8a
+ec1debe7b6560d75a115c3694112101929b9ab2a852e3fb6369b170ba4f77901
+65d8347be454217587b3227d523aa73ef48e478e50c01123927322d05d390539
+caccabd75cae8229419add110eba5a6d87c3cd44cb9e21b85665a4e44c095086
+7bb5a8bad6fa3389267f2abb65037ec9793432f062d79b5d887de26bc1450bbb
+9d058246ff0c4c5510017ef4d96293524c6ff46568ecb39c096c1baa57bfdaca
+089aa112cdd8b546270658a0c56aea9e25ec2577a00d649b80ab589d2e3582dc
+fe215481fc54758742bc947ecf14058e0364eaedfe41e4045bbf0946e60911f3
+1cca86bb700ed3f357279f920c4bfd9e9e8df4c3ea559a7d3d532bfe41d26178
+17dd65299bcbd52d899ea539fc0274c338ee77398f69646b31f44a3084435689
+f138b4c556c208ac5e59aac13e89d5b8f6018c6c3c1068838f387c699e7514bf
+4b8a608d898df563e4e727f915fe1cc3f65fc7b96f8c1c83e7484735edf700e6
+0ee4d09796500b1a200581583228ba47a98520fb0531d7d88ad8b0b5c9f6c937
+58dae9786155ce58658685e8e027fdca5e09cb648b0f7e0e9aa2b6d3e6c673c2
+d670dc95a3b8a4a6e405ebc8b48f5c90d050e666cd91901214f8a071310fd833
+cea2290c694fa9b2bd781c4d25633ad46af6c07e2b2a7e5adfad8bb33e69c74b
+7373f37999eeff3b5597073c69df3f637dc0a28e7a344a2c4847ae8185301c1c
+33b379bccfb5a1813934ebe52c818ffb5ea72fa1eb54e2757930a349da35a280
+d1ed7feea6b83d25f0ec6248b3f81d043b61089fe751ff7b210f872d7f9feca7
+63cfae266c27ea61dd847806bcfa1f3e8d1f33707706a931a1d862f2b5585755
+51e236a077f116e9d3298a7ca44f61daf86f718809dd27b820c795b5696363c0
+9e0d9322a49a709cb470db9a2064561f9c6480514fa9eb41e30075f5aa1eb20a
+1b5a5e23f84925be630dcfecfb3c2b4f290858506d4006e2d832df79b9be0a52
+f42485ff3422b5f3df50de4cb18e006d81e8541be2013258af761723c908ebd7
+c3d474d2affa85a0616a0bdc6186784e6ae6accf532059aa3a3f8a04629782e0
+7769789984d0fc5d9d8f524ec8d578059096c7e517145e25bcc51bd45745e6ff
+eff1e5b55e045f53a0624ed5510fbbf7ee4fc40de4aaa82b4eaa5cdf37104b3c
+b40fa87b565bd37a225edfef2d41cc09a87cd8cbb3746244b0c335ec48590272
+5ab1df0f5862f5b7f44b47e47f835a3c0ff0a87e10a50d60d553c17a9ae757c3
+c2f2c35fcaca956943390e16ff670d2a460380eedfb195e9d9366f3ad6867ec3
+aa199068fcb194c4ee06f62c018878f7e7a102afbbeeea3a343572266189feaf
+fca0c9f231eb58fc453a8eed2893332ec1fb3d99fc44d7d7e5a39e1feff513f0
+312a7273a7610556b30b4276b474300b1666530f2602724e36c2dca4e8f1d858
+0bb1d22d414f447798ce120d2b7fc8b8dbb042b02694b65cabb5ea50bb4f7d17
+946bf7f70818e8f0e965f744a46df3d33bec94677b220214ea7f90863b72f42c
+b273296428aa663263a9c87d12ebf64eaf065cbf17022bd19ffdb0190df7897a
+0d5bc2e761177b38b994bf51ca4e0ba101bc496a4ecba6b990fea92ddbf12131
+e195dd17da487c525e012bab938b1f68911a1845a4d07372d4d6340a8415e739
+776f085f73565b843eb405847401d80b3b484ef01609161d5bac8b379a0311a2
+8063d0189feabdf89437e1707d74f690ef93b4d8a94977340a9961b92cfd57df
+4d63aa87bf59d80e8dc495e3c118057890478599d6a1082a07c8c30c54b1224e
+d050611be8ce37ce615bc64c8b58f24abee247da6ce92fd5d71650f85059792b
+b1e8ed8fc287b63ce68fb34994a08e2a7a305f0767b7e3f9bd92ed7b7d625321
+40849256e610f88361c783b990d87fe4d326d1dd2b00d19b7d6c4ba7cf66e56f
+a72494037094abf2edf1d0851d04d4a8b4480a13b3a88f68916745ea2f776607
+8591ef49dc351a07ba3d53045fe5e9df5d38e92259feb561228c399ca16269d7
+08ffa0142194141e621c8ad300544627ac5bd08a327bf2de4d6b916653c34120
+ff229b8b3d7fa62c10e47222615fcedeea760237e42c9cb34a3d335e4eddff60
+96161e91a9477776866c3120e252b8a83497b96947d4394e428a5b324cc54a2b
+1f861b99db3ba3c9e780421749c749ff2ed7a48aba4a09450e00bd80e89c1004
+d60fcbab0321d516b6dbc8098c6157c601528f0f122b275c664b258f83285bd7
+047afbadb5e51628a91a0c1fbf1f098ae78fa1fe88782e2a4ea1c47e34ff277a
+87518e379018f4636a9d15fc3b0bf92366cd05a8fd8332cc36091ef2244d3c30
+c4721c25349358b8457a2e50d03a3f9674827b66efebc6d2df6b1af87a5da25a
+dbcd04b24db31f6cd17690e1bb55f310fc267bcb377d57f0c3cf1c3fb4925bbf
+6ceef3348f6be726c0a5274d3c6cb328a7c66ad9e966663174e93af6a27751ec
+e8a1196eaee381cbddf7fa64c2910f101b083f39968a4e93d79bf998ae7d6835
+c739a92ae2fc949d3d3bfc1d171d3c7ba8ed416bcd35be5d4eb80c1d8f319604
+8eed1d50feba9a35055ceeb3282c10c53ec0c2c3962c0537e2d881f54da3019b
+fe0ecaad02fb03d7294e4e6b597ca78b429919bbca7db49662017c17bfcd7b74
+c2ce2d2f0fdcbcf45aeed12d23f2518b129e491040b61187b935360730fdd6b3
+5d8976497002ad582de4afbf811d0af9f45c5c0b3a6fb3937470d3313173dd9e
+9b8d9d51521a809029efcbd7e88703851127de2496be97683962c1ca054ba244
+593aa48c70ac36ac7d9574be2ccef5cfa071b1f65c3aff6191be60d986e0cb21
+b26de38793de394003e277dd68ccfda1123ad3474cbfeaaf5ecf15bbda72acea
+150d4b241193d450e3c3b92f758fd2a6516f07d3599e680e6fcba1171250245a
+e9f4a7741e817f2c2d455125c4405e299edb88771df944b4899acde5612cd3f7
+bcb097be7c996559a8b724043992a3db9b9744564d0734bbdf6d4283f0ec7656
+2eebb6dcf37ff4e9b1553bacbe9b1270f99c0e73dbb4acac4e221e8bb7da348d
+0c8af4db6493d7b7fadeb70d6648991bb6bbc4eb862e3e9f08d3222c295a0618
+0915bbdb4bd678ff4983e061bd29e8bd6d1a48db9df42ef59ee7492f1586b857
+51ce4eae0c02046ad511a385447b9e13b3b6f62920184da93cd978909bce5de7
+e15f39ccaabb6f08172f94f811f80e5ffcfc8be5307a69a2424af4d72102ca9e
+14fcde9e540a6d9cf57b9e6c56670fa22e806ed33755b352d6ec527104609a10
+1b3e71e689a0c7ffeb9b48c5c075771baae17b8832148ac28a7bd4dba5bc1049
+78adf0e820148fa6a90545378b0268865abae637bb216bcc00aff113ba0e8bf0
+828b68f60b28f4a2637639f33f491dd3de2155768151b62832bdd788034d9719
+183b8f4ded0a486fe041f962155b64de9bb4a46cf7beae3b55a8698576e7d6d0
+05d4293643dec08b5eae6f89e1c5aac003da0ee2a2f3aba3eb18f2e77ab035f3
+0fe56488ebf42b59263bd4e61e0c868c4b5581feae5e91bb80b62dab428c87ba
+d79809858312a6abf6187c1cd2a7c28bb124e6b9347a1f0e804890d80fe44888
+4ba908820fa43d8c8c755072927edff164e6b603a127262f70cdb3f775bfd50d
+c00056c049e93574f88385a99c2d9becb2e886c1d90419730d0b8186f720c652
+c2ecf7bea7cac2f191e671fcdc84ab50116b04a37c8e074fd9182c45b9253fd5
+5cbf8f30e3cef6bac8059e844fcb763d338f4b94edf8247e9e269335e2b546d3
+b502baf5e1515ac61de0e89987c425d3013a7256d72c543a67eb08234611447b
+5b276f420cff6dfa3427141e6d83966ea50a1de859af007f876fa8b65ed171f5
+201fa992466df6d2207170d447f505e2c35d09be3436bdfad538b644d1881759
+2577a5c15b7188c9887da87657686bcad61b6270b82cf789b5eaef79f3a5aa25
+ed755b8c53a6fca530f85e9fc2acb5b378e4cccbd5de2c5b8df8319be2b0d8db
+d87693abea58f6865c16c30415a191b62ccab357002cf0d8d1c7f93aa4408f49
+964f407467fd6c3f7e7b395d3b3ad381a658b78219bb75888262a1337a6c67b0
+cac22a83b6c867024b536ff7061750958c697ae8f658c0b8d63dae6a31192797
+1e320de30d3108cc5fab9edb9b56f172d11ecc1564224fcd2e89c4d835c35513
+55607086cf2c59ee68f7951334d2736e07ebcd9c7c615faadbfdeb6967a3a712
+4157d091c6742d203ff25ea67892a52bbc9e61df30e98c81280a273b57dc1d12
+96c1cfa164f13f2cac17926b79c35f473a668c3a025cb013e1316441c0abafdf
+aedb95d62971b86956f0c9c32ef1d1b2d93362032f19c72da6d5c9759310694e
+efbc072dc6581b5b9ed8586ea5945ca4543f28ae0269ba1d5df705235d3b44a7
+b33c2c84fbec31031a87910537a941080d8a87d6406c237093f487f03722aaab
+258510ffcf4c4fade4066aa7c2b64d3a4fd34693ff1ef18ba23af5b00761a17a
+3f6057d86e0e4c42de919d7c847ed72feb545d7d2a6fec374f413cd13c57ecab
+02cf17518fd5096112fa475f80ee345600c95e0cbebd3ab70ca5189ec3c96ef4
+78f5e22acdffc0fa71705c223cfdd8a9f28a13458e11e35eb300f80d8a1a4353
+0fca1305ea87464c5a44df910343ff15436ca508ff4229e5007c7d2929827f38
+9afc24be23088f0229e3e24d06ce357df383437e0cd7cad77b95f16f80a38b8f
+67bdab2eff74f1017eb43f1525a4bbe2be25d14aac0c231d57bad93051b3f663
+987fedf66d2cf59d5fcd3e40423bd50ef476697efaad54ff64a3836884f91f07
+827270793f1804de5fc95eccc4a009fb3280fe8240b60bd9738b0b8bef04aaf6
+9b5321ef284eca3ca1ddcd9594d6e801767f395dae321860c4cd5203dd5fa2fe
+687f6a6f786a201d803cc9b3d697c53db1bff53f90e694761d59f2f3fd73bb70
+0d5518d4b691b3b4caa9f77a694cef0663900d61b6124ef7b40b73363a44b955
+24b49e573b28fb58d134eef2a7b88f5be4cd6d3e577587f8ca2b73ce44cce68f
+1c235bcb224eb59c1e61e5e7746d35deee11f891186aa86a99806199ee8c2c5b
+f517b17fdecafcc4fe40114fbc5de7b7ed0880554052df18dc90928c580b8fbd
+bbdec1fec4a38332405535cc3045fa280adee50c8b56f195142d25b0ab202d2a
+b781ca92efd3c2238e7e6b73d0fb706cdd931590865fa81e0f5b368c65f53d0f
+865ea386aee57a649431351fb480e3a531a4da45ac60fbd7f2e5dc7053341e43
+0296d65105e3bdbd9cb99d3387f78409c7ad5aeefaf49bdf5351d9d01941f14d
+16ebcf8633c682d123771cd369145b25eb020a8c56c70c43d7e6700377992367
+ccdb65ef22453c53b2fe07a0d025cf953809ced8fc3230703c2da46389610d59
+586871679439ae58c0848a1ae5abf77e308b07711ea6a74269df22de41de6ac8
+f7cc5a948a0a62d1c9303129daaac7b72fac4898c5c6b9a870dbe75610492f5f
+3121516efe9b3a1ae1e94c0e29a2a52256772fb67993eb152c40f65d1249755f
+335225abce8be0de8d033aa432ba13ae229039a2169649d5ba4b28ee11ddfc08
+f91f86591911ba88611629dcdd5a081ea1bde8af301f3ad0063f28c33c2c65c9
+38283e876be91207e249aa3927576dcf539de2cba8a2f14aec67560d754470e5
+358afc36cae477d9f9ea61b47b64d26c92437c80ecd706c328c0d918bf253466
+4c6a074a0b43aad427cefc990b0bd7c77ebcf643007d9c930f4aa7cc36dc681e
+70bca4e727fdefe6492f675d578816ba6092794de8f8e0610867c0b9ec6780bf
+3d29fbbfe7699efbf7dfb0102a4c96a1117530c19064df685f4f1288279c1948
+e74e563bad0cef02499af1daa0cb95ea249db6baf600a0aa0a53f0ec68bad5ad
+9b0d7471c4486f88ae2be029baeb32d72b2d613af9dcdd874748ae30d08ccaf7
+176271f1bc14456e9554f37da5b85541178f9f9289a89669cb4921d12772d07a
+b33174c84f574fc95c276f69d73cedab4077b26f56911fc435e6d2514417dd8c
+4215cbfa620338044a4bcae0d45735331a9fc7f8b80aa3ee14ac267ef0fc2d8a
+7506a377ab51876bd3ec78eb552c327f9c9c3a8d1dc8a1b01428e99021aa3b9f
+01f57c4f60c192415af53fd497f406ed514598bb175c7b21928a2c5fd265a343
+2f08dd80964dfe9b42565a3a38b9fe4b52fb31ba9d5992c99c0d7a658aed561e
+9c50657dec64d416fb2f6326cd26181cd8b45ae1a8886fe986a375c9798b94f1
+1859754b2f420791f8350c1b810b741707409158d4f83ce3cc0a74f4535ad6b6
+8603d39e34c29f40a0e73553844cff55f0e336da9f90f2353e626703f3a3af41
+ed6af2e513d2166779b4a955137664993fa25513db29539ba31d966c2d2163a0
+ed3782990a47394f3fbbcde6775c1ec76b4daf49a7e4726eb6dac796b089b14e
+c4a83b30fee477b7fb3aeb9a8f31defddd61a0fff25967ad80c2851e55dc5c26
+c84514402225c409bcb0f0dc4738b1e3f7f2524ea2c5c4efb184f880670e9a65
+c90ff6b0d2594f33d43fe4fcef58ed7cedd73cf2c410276a4d9d5f06ba155017
+d32e70ae2f93b552d0c0b8e0d8ab112d741b54133f91470ec3c28e4731d15b12
+3a44ef63538c9fe837300562047d7b8585b4e00693741737d1c5e8d6cef0ab12
+b65cdcc5bb5c766d9a6590c60aee88556d20b071b2c9f6506518f13a9461a85d
+ed9524440d0fbdce913030eaf79436cda3efeb67fef77a259aecf445828938fc
+e264788a928915351c643a092ace3857005fb64501cc778764169a13013a4b99
+dd695618af53bc8c26eff31c724f301726756cd2415f4f17b90755ec1d745121
+26a0f9d01da1962213cda30a59068586ce26d92b1814130b4ff77a334d1d48d8
+6b9542dac0c945141ed69b5ec940dcd5d9fa3d892fa4043fffadcbd1a0b51b4c
+704dcebda6f9aa43463c6707cba64db4e294940086062201b4b4a8fe9b0f300b
+4275ad0c4c92e26892b4077dedf2c6604383400ce1f8f4d63365a7217c1cf834
+9aad15faf7f21d09ebb3df67cfbbe251ba3121e698923e631233188fcfb16c12
+1c5c23f8bdb4b0e5ad4d2389874413a00933dca8b87b9db5c52f8c37509be0f5
+6b50256c3c9182975c8e13c7b5da8e818ac6cad0327d365610f1244ab3f7ebb2
+e32a0212f00748565aeea0be81c9a7fe11796f07bef253c724269a4783a8d34e
+c3545d80dd8fdc466aada30ae86e6a1aea3288b2dab999bdac8c6bb52ff41f4e
+f24bd2fdf4c4435e466ba6218a6b8e4597bac9c03817481adeb21a047cf34eb5
+ccf3fc45698034129ac197928c86d8c975f0e86832df44d0e52f6e56ffc1b306
+6817f5fdbce03a8e449027aa122e2ac2a28748b3e5d5114f01b4faca0ea7364f
+b93af7584f01016c2b6bb1278f9c8d8edfae99395c1d9c0048be9a38b283b22e
+0737cdb51d548c0860e0381d74cc932b279ab6d62e44448c83f49e670c927dcd
+73a81f51edb4698dd3d7e4554d5b9e411a0421b0db1fa75bf94bf77ba0489dc9
+126bb21a975f6aa1aaeefea082186cac478d6267e373ce65dee5add48dae4708
+a34e1fe4a01bf96a99374edee8f016c600bc3bee6951699f0be054297270b8bb
+f0559cfe02bda0ad4a2a4dd0fda595c1336a664c04bd5e64675b6495513fb8ab
+261a740792e95cb18d6d7994efd85b95c0c1aad40b61a84934958fc90d77435a
+5e7d542d08b8c7f9a7328f6bdcdd204a595fc5ddf3d4056f24aef7ae04c5ada0
+df13978758f1c31ee153164229fc748e725c87f2f941077331ad83db1b81fc2c
+4423b15cb4638b1fefb8207e01c6643560ca9f51aac52f6b1890a8877d8f1951
+2d20f6765aa120f2b1d1811b87dfa928a668966461e5fa2aa74be5a154b6630c
+fae5d882c4d8a692acece141dd63dbfb471d746f2c7d930b48e814f90b33d10f
+b9d58ed82a27d8fadb9d5d96436665974048c3afa992345fc5051ed83fff1b93
+3f4aec562038fd62819d675e76c12cca1ee8099544965e9d63b3a8d91042d071
+a2c41ccf9464b3f6a373d56fb166015be39553fe7f6ea7b5642e5669f5a44804
+24f7a4fed8966f3ad5be261cca182b5f9a92793af1f3d4da5709acb4b8771f8a
+6c467918fe9ffbdbef1a974c57fb948ab3da6e6e3f4b58915f58b0ccddd27ffe
+171ee22fcd3615edc81af5fa5fe712040a8eba47191e5a5566e5bab7be507f14
+ead70352bed34a443f48bc6919d3ecf5246ec5db649bf01ff3c8fa8b29b415d9
+1f28ff5190c5a37c11dfd4328d3d08921156101ff3615ad513f3b2356386c42f
+a07f0fd822104dd8f5a63c606684cb8f2d8a6bfefc1997c2d1db6747a00a489c
+198b46f93582aa3e09b403ea2789e482e481d17584953876214c32165be6ee19
+7952becd780c414acbfacaa1a5712da00f7aba8e62b1122ffe6853ae103e8481
+8855c70c15782a6342d2602e715d553d9bbfc9c3c5b8e0661ec0f4498530c97a
+afb833a68e98c16901c6c70aef6ef303f9f1ab603085fee230d086fbaea5cf34
+1e9ea3d16e58a24ce0dbf664a605429e50930a2b29a1c45a01b5126b0efce248
+4ac57548de3adbd362a7d3f1f8e99b79c1e46d241195e9d8dc49b8111b36195f
+fad7db28630bbb2023a316301d82e3562f0554e0b1c16819ec9e836d338baab0
+82a619a39fdbd95ea5b2c7b96d28234f17eec431df24f200e94f2dad9d1f9eba
+8602eeaf0ebc3a16c77c109b33a77de490a5def568d2b120e48f36c49b71f219
+64602ba574d1c5ef73d6b6abdbc78ba8afb1fe83bb055ab688f986e0608f708b
+045272644d9cb83e2b6ea88e934117e837fd18eed15aad674a35f74edf49cac9
+2f41806552789b4017af81e9adb4417da096
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 25 /pi put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+/UniqueXX 5087385 def
+currentdict end
+currentfile eexec
+80347982ab3942d930e069a70d0d48311d725e830d1c76fba12e12486e989c98
+74c2b527f0925722787027f44470d484262c360cdfdddf3657533a57bb16f730
+48bfbbfcb73a650484015441fdc837add94ac8fbd2022e3ec8f115d4b4bb7b7f
+15388f22cc6198efe768bd9fceb3446ee4a8dc27d6cd152485384ef5f59381ff
+da43f2d20c8fb08aa27ab2015b774db10dacfdcd33e60f178c461553146ab427
+bdd7da12534ba078ad3d780414930da4f8d58abefd45db119b10eb409dd89792
+3c6e705479464a4b310b58348c4b42393988fef4925cf984423aaf65fea9f0e6
+4629953bcf50b919d968d99bd185f83112b2759cc411764e9bde677f57c5ee5a
+c555448d5f81a16259ded1e11bf4119d53e8ab07a802df900d3a2d5ccc1c6876
+d29c5e9effb7af3ef83400b0910c07873a8c56fa7b1eb1ba426043b00cc95dbe
+dc6e136cbbbcb3f67509964f9f281ebf81fe5b018122eaf66c4a838487e82e18
+6e006093042848a903efb3469ab6b4049767aadb95c30408dfd58d8a10f4cb22
+168decd9f3ee100f07b49aa44c92139b669cc312ba20192454eb2375be6284b0
+26659d964b96ae82d4942e758027fcf23c25ed01115af27ce7f20efe2a822bb6
+84004f20243a49c9e93301fc21b80815c033c3e2ba58ef53da2157d524b395f2
+b37abca13bc6a2f42e824ab7e47106176b0d6db267fbb795ac7425582df2e3dc
+55863468a9200742bd7b552c48f8cf58bc21343bd3b95abfa140f33f37c6f3f7
+8b0d8a5154eb7c1f62ec598267f13e841a3e64172663935ac8b665d86540d316
+ddece329c008049c5e74b27d59022c5515059bc3b89370b1bc6a169c888bb325
+e0b74282d6f053a50da4024ed1e433271a32ab8c17d41c632b41cf9f3ecd5fe1
+24daf7aea7ce8a63047b245822930d517df7baaafa69d2d17f7d93cebd45416d
+f3459365434123a76ccf883a4973bab19807e1f0c4bab03a45f7ed69ff2660ff
+3963e4def11001eec4238c368a39d874fd30b3c14f4186ec7700fbce22abe468
+eb32baf7b0164f8f21a9b5e706b91411faaa44467cb2180ab03de375c1ab93e9
+76e11ab92fdd4a7280a6d1a8dc65c4c89d04c8ed6988045a2a3de9a4c7b1efd3
+75b039396b2b2fbce3411457e1e57ac7a384d9b78115e83ab521e184b967ce5c
+e092e438389425a12f58dbee0001e7033a91d3b0e9a125333f45f35d430550fe
+ad3202aaba81a150b1ec34728f8109d39d5d163a57da9a47ba373d1b86f2da4e
+be09454415d644e1fbef933f8663390912ad15247dc543b417fd9bedec05f8f3
+7c9d5b173ec38cc7f61452a942023c17f01220547a06962ba53adb46b82005e8
+7113e70e9981ff1e37e6834c8d29ce11c6e0f91bc9924d48fa5a127b031e466a
+c9699299989c92487f88e1d6e59e6d4ec5461b68b3979cd8ecc13bbef603d714
+d5ca9341d79f2ab6e200cec023020841b2598b2489c4d54fd35753081acda3da
+6f6afa5ce44b46391fce0e84f4e05f6f343b3f0501e546fd1aaf73cd8d640a99
+7e237bc5ebe85b1a4adee6abf5cb4566ad001acc34fe95b8cbf74a67d94334f2
+ac6d7f5e327ac1336ab13a94da916532d6d68bc5783a02dcb7da158002a16151
+35483906b884df3c115d3751002afe38e2fa21678b40e26d26da7c5303720f54
+89a88633e03555724710902a4c266afad5d1d9799bfc5191fae942b6f85fad06
+d4939cf5ed9d86126067a3a16fe186899d100e135d03abc11192cb965c57b743
+9d1bba286487e5e44d8e2cf3f9f2eb973924bf0d152aa1f0361b1622c506bc56
+2a74e050f5da01d948bb4bb9bb69ee09581866a640dd234915ad9ab104ab7281
+bcdf80110e85e9c2082741975d8f94c85ddd8e22ef84c4611b11879a9a4394cc
+25a09db1146baf1f8721c71713315ba274dc1850138421fec50e4b71155d6b74
+01951cb91214ecdad8ac19a19cad86c5e2a01912d9d439b1a19b734649784e5f
+bc9928792b040831e51b54043400194377d0ea5b0a4aca856e15e0657b163021
+07fecb822d7e706230d29fd6c17f95d5a3507af0f81594633fa734232d908889
+b6b1726f2ed970b85b27141f0d5cfe699dc6f07b8a0efbf71a5ac51ba4c6c057
+e2688073c8748e6e60cdfd716286e7b79b0b1d3cab2e8d3d801d3fcfce711d69
+42395895aba13f4084ce84787dd45f77412d4bb6fb7561f17cfecda1e257fcaf
+4b44b392d5660bdbab2f86a4ccca2255fd2f1b957a556f53f77156d539c70790
+e30582bc3f6e9b0b584bfa8af5b92a6ec1582c3086be1704fe1dbf9f48e74aaf
+f0a824b9f37d7bd5c6d05028955d2b42dc4023b4c2c91ea823ea4ecdecaae79c
+5cee
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMEX10
+%!PS-AdobeFont-1.1: CMEX10 1.00
+%%CreationDate: 1992 Jul 23 21:22:48
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMEX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMEX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 116 /radicalbt put
+dup 117 /radicalvertex put
+dup 118 /radicaltp put
+readonly def
+/FontBBox{-24 -2960 1454 772}readonly def
+/UniqueXX 5000774 def
+currentdict end
+currentfile eexec
+80347982ab3942d930e069a70d0d48311d7190fa2d133a583138f76695558e7a
+e9348d37cac6651806d08527c1bb4a062a4835ac37784cc39ad8841404e438b4
+d52d3901e47a1de4f7924e0fb3daf442499175bab1226edf692a4956739f8828
+e80592f450c5d5c22ac88bcfbe9748f61d18243a16f4a4467f084e8e2be46ef4
+7fc51c3a8199e3cda62ff9c4fb73956dab8b6683d2156377808cb35026073e80
+523f59a30d195fcf9b9fce4ffafc6d5649664203ab24acb938d58d246707ffe7
+d62f04bec4b70c21ef75beb2b812622b3c74e969d72d3cd11bd7106294a99caf
+0b1629bc7d4de6b96ca82930831d64575f23f4ad06a0e45e315b1d392411be8d
+6d73c998789ff258a07a3c8c2057325784514c845500bfd1a971310cfc11d41c
+1a167dbd5ff012c60add4e87325f6e5299032a839de65fb1473a166aae1876a4
+414a434f22c1d241591fb36f857df6fa930608750ffc0c54f44994662b1f00f1
+400bf752ea8d83ffc4cb77a290bc2d99981ae59a191748ba5c7ba1a9d2583fd2
+1398452b6ff5d83a059f7eadcd2ef744e9dd22bdf9c79d049bf06835e878c32b
+7765c69bdd8ef4deb4ea7cfff4cf9354a4ddffa689de961d16772491c7afbd7f
+ffde42400764c68e954ee5c455a5687959829bc3b319b2147deaab3628662c80
+30c5e02fea09609abe4eaa12e217bc3af673f1bc36a7039eb13fcacb4218fe0f
+c5a3f9452d4edf46cc91db67b624d4f2d37502fb9f11af4da18ca40b61097f95
+d44329375467ed13c5cb585ec53f62b83ef9502cc755af44bf32b87b8ae9f3f2
+f8dbf72dab90acafbacd280db6aaffaefdff6d5eff26669bac56280a950560e3
+d01714ba38659b0e4e28bf8cdc1f15ff7e3ea9d95a6afbbe3d8e6905aa6d531d
+6b6dcab89e2036cc492c65f76ddcc3cfcff33fde3d9ffd10f7a90530fd5c7683
+4329baa902e701ca42717476298c9ff511b1941244bb1dfd0e5cab92a43970cd
+1bdb292eadd055c97972844fdcdb0aa06401e7b2632b9d134f96bce0064860f3
+9859da7a9a82be0a840672a1331212752ae1b521b693b384a72dba8d37a86eaf
+a0341e7fc5f6ef7a8c566aacb91e8bf5005c18837894c4eacff41dba54e071ca
+83f80e7f256d4fe2fde6e2408ec819f8fecbb87409f8f9c35a722494d279b0d2
+9ef6281f11d144eb362d34c20dfc58ead6a17cb0429ca22b44d307134497d1db
+e12b46cb16bf4aeb600463d05ec3d04ff464f4d61be7feeb7a3805b3f767bef6
+240d59d8a026581e5ecfadb595fbcfc59ee1f1f88fb995319fa99b744a274972
+c95971a00bdf7c2ca0b47856e2caa561a22a7ba32de87c5075cb4dc4ad680dba
+d837e74bb0c64aaf1287e059946a83dff78831b493841179583dfa0a42f1e08d
+71f5406eba065f25c1f724a2b9e37855f7decf7de70d0efe5bf63250acf798eb
+2ab1bef909a76568800af7d5d44ad80383a913815490e3c2fb9e9284fb3aa8f8
+46bdcdfa944e757faef290bf48db6dea131ef5d7f107e5690926edfc34651323
+b0608622983f92e99ce363df17a81967f2adb131e18aac3639c947b81da87849
+2efa86cb8a1973900d843a579cebbe2a7f43558296b6475c4d96243803d45715
+8056da4a158b7bcb9d1e762ce646d1c6f7cc7b15b92cbad4ab4977e184835fca
+5d1a60816a969cc18609160740c903af208babd9bbf51315eedb5f0bef81e223
+eee2b49b8f7b
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+TeXDict begin 39158280 55380996 1000 300 300 (./testdata/dvipstst.xdv)
+@start /Fa 25[48 6[33 24[63 17[22 11[22 11[48 4[66 10[63
+3[22 16[44 29 37 18 26 26 1[33 33 37 52 18 2[18 37 1[22
+29 33 29 1[33 23[26 4[48 21[17 6[22 21[18 13[37 3[{
+TeXBase1Encoding ReEncodeFont}33 66.4176 /Times-BoldItalic
+rf /Fb 138[22 22 22 22 2[22 2[22 5[22 22 3[22 4[22 92[{}10
+41.511 /CMTT10 rf /Fc 214[42 7[42 32[32{}3 41.511 /CMSY10
+rf /Fd 128[21 2[42 2[22 22 30 22 23 16 16 16 22 23 21
+23 35 12 22 1[12 23 21 13 18 23 18 23 21 12 1[21 1[21
+2[31 31 3[30 23 31 1[28 6[15 2[27 28 32 30 1[31 3[32
+1[12 2[21 1[21 21 21 2[21 2[12 14 12 2[16 16 12 4[21
+3[42 37 1[32 30 21 5[21 2[12 35 1[23 23 12[{}65 41.511
+/CMR10 rf /Fe 156[18 18 22 71[24 25[{}4 41.511 /CMMI10
+rf /Ff 137[44 44 44 116[{}3 41.511 /CMEX10 rf /Fg 152[208
+103[{TeXBase1Encoding ReEncodeFont}1 415.11 /Times-Italic
+rf /Fh 137[42 1[23 32 28 1[42 42 5[23 3[37 1[37 10[60
+1[60 1[51 46 2[46 6[28 2[46 51 60 2[60 6[23 58[{
+TeXBase1Encoding ReEncodeFont}20 83.022 /Times-Roman
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: A4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -225 -200 2331 25 v -225 3108 25 3309 v 325 -77
+a Fh(D)m(VIPS:)21 b(A)g(T)724 -58 y(E)764 -77 y(X)f(Dri)n(v)o(er)g(F)o
+(or)f(PostScript)836 238 y Fg(g)-225 695 y @beginspecial
+@setspecial
+ 0 36 translate .05 .099 .95 { 27.4 0 translate gsave 0 0 moveto dup
+90 mul rotate -10 -10 rmoveto 20 0 rlineto 0 20 rlineto -20 0 rlineto
+closepath gsave dup setgray fill grestore 1 exch sub setgray stroke
+grestore 27.4 0 translate } for
+
+@endspecial 441 770 a Ff(v)441 794 y(u)441
+818 y(u)441 843 y(u)441 868 y(u)441 893 y(u)441 918 y(u)441
+943 y(u)441 968 y(t)p 485 770 954 2 v -180 x(v)485 811
+y(u)485 836 y(u)485 861 y(u)485 885 y(u)485 910 y(u)485
+935 y(u)485 960 y(t)p 529 788 910 2 v 865 828 a Fe(a)12
+b Fd(=)-7 b Fc(\))11 b Fe(b)g Fc(\000)-6 b(!)11 b Fe(c)p
+534 846 900 2 v 534 880 a Fd(the)17 b(phase)f(of)f(the)i(mo)q(on)e(m)o
+(ultiplied)f(b)o(y)i(the)h(n)o(um)o(b)q(er)534 930 y(of)10
+b(angels)h(that)g(can)g(dance)h(on)f(the)h(head)f(of)f(a)h(pin)f(while)
+534 980 y(the)18 b(ric)o(h)f(man)f(threads)i(the)g(needle)g(divided)e
+(b)o(y)h Fe(\031)h Fd(or)534 1030 y(some)c(other)g(transcenden)o(tal)i
+(n)o(um)o(b)q(er)-158 2836 y @beginspecial 18 @llx 18
+@lly 577 @urx 814 @ury 2796 @rwi @setspecial
+%%BeginDocument: mtest.ps
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.85 Copyright 1999 Radical Eye Software
+%%Title: ./testdata/dvipstst.xdv
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentFonts: Times-Roman Times-Italic CMEX10 CMMI10 CMR10 CMSY10
+%%+ CMTT10 Times-BoldItalic
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: ./dvips -D 300 ./testdata/dvipstst.xdv -o dvipstst.ps
+%DVIPSParameters: dpi=300, compressed
+%DVIPSSource: TeX output 1998.01.01:1040
+%%BeginProcSet: texc.pro
+%!
+/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
+/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
+gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
+add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
+/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
+dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
+adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
+idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
+adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
+{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
+adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
+chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
+put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
+/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
+X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
+(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
+length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
+forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: 8r.enc
+% @@psencodingfile@{
+% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+% version = "0.6",
+% date = "22 June 1996",
+% filename = "8r.enc",
+% email = "kb@@mail.tug.org",
+% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+% codetable = "ISO/ASCII",
+% checksum = "119 662 4424",
+% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
+% @}
+%
+% Idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+%
+% (4) Remaining positions left undefined are for use in (hopefully)
+% upward-compatible revisions, if someday more characters are generally
+% available.
+%
+% (5) hyphen appears twice for compatibility with both ASCII and Windows.
+%
+/TeXBase1Encoding [
+% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef
+ /breve /minus /.notdef
+% These are the only two remaining unencoded characters, so may as
+% well include them.
+ /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi
+% (unusual TeX characters available in, e.g., Lucida Bright)
+ /dotlessj /ff /ffi /ffl
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ % very contentious; it's so painful not having quoteleft and quoteright
+ % at 96 and 145 that we move the things normally found there down to here.
+ /grave /quotesingle
+% 0x20 (ASCII begins)
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde
+ /.notdef % rubout; ASCII ends
+% 0x80
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+% 0xA0
+ /.notdef % nobreakspace
+ /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot
+ /hyphen % Y&Y (also at 45); Windows' softhyphen
+ /registered
+ /macron
+% 0xD0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro
+%!
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont cvx]cvx def}def /ObliqueSlant
+{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1
+roll mul exch}def /ReEncodeFont{/Encoding exch def}def end
+
+%%EndProcSet
+%%BeginProcSet: special.pro
+%!
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ userdict begin /bop-hook{gsave 200 30 translate 65 rotate /Times-Roman
+findfont 260 scalefont setfont 0 0 moveto 0.8 setgray (DVIPS) show
+grestore}def end
+
+@fedspecial end
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 92 /backslash put
+dup 97 /a put
+dup 101 /e put
+dup 102 /f put
+dup 108 /l put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueXX 5000832 def
+currentdict end
+currentfile eexec
+8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
+97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
+8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
+b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
+50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
+784c6bf7389803d9450b0c21756a017306462c563d51ecefaacd079732f12c29
+315e4b9623a5752c6f1d8145869e120d910b2644887cea7e30b15676a92537c2
+9d3aa80dc30082aba94b40990b82fb1a877e805e0c8c48f61e9f2edac05b944e
+e4d8084ec1d5cc517aaeec5b3ea379dd011eeb454cecab3ad2443c887c582789
+72355673e503affe0394fc7db31de364e4f56c24033c7df2265c56445ec63a1d
+5695a6041ea1b94407e1cdb7c5635603a4fd047e6edcaeb2d0da6c9e0e9396d5
+1a4a58e8fdc1578730f992435560a6e2d3e3687703ee2f78f5896389ac8470bc
+806169eb01762e89b6dc9adf857ead656620e2589aae722c37a2ed7a2941c360
+b067ee34d8d5ca3bf68db725614d936bcb207781f4d4ec2ac67b13a5ad161f3f
+059add7b5e3d904831e31c20c04546fae83ca93a35989e65c201756888f727b9
+7e5313c9870ec96e4cec3901ea03a5c744754485e7d169bbc98bf872d0796e18
+9d43b712950c3786257d8be06ab6080b9d9392313298327549a8a41c00a2cea3
+690b4a333e45aa815a64facae1c2b44640860b8b8687afbefdbd5b4a541a7251
+4ee7d3e0752af3e96a88c95d31fa16d34ba2f02fdb0088b165844f02611c734a
+dbcc2037bf741fdea7e8bcdc130c70c33772f777d8bcddf4611db99001ccff14
+d7af2bb05defc3480bdab312a0eff2f375afb4e0df2f803c594b7c93f71ca4af
+861ae1711932fef19bfe2f9b7adb69d68e5a70ea4d1a3d5bd85231b16993f65e
+fb37a0a823f0542f8c2340a073dc1be4a8347f9d3068a6435cd8278b0db1809e
+8af9664c2c989b9f16873c009449b6284b85da4dee11c96a05ba83292f0edbd9
+2cf674aad6ac1a5ff966ffc37e88a66048deed053565b55ef6bdb8c2f2f67832
+f8939a32442ea54f13d003494d6350a2864b427a9126a9c26a031909fe53fa84
+63b80c3ffd536c9a5dd29ceb03148dbc24c0033aea2115e1bfe3b6fcb656c12d
+e575584cd5412ce8b1fde28f9a199091442dda4990d873dbd4bc7ada4dcf4147
+ca1308b05e8f5412e872f42375b62ee9433b57ab45e30eff343cd19d1afe2ac1
+55aa2b20021122e90c48f01c319b2d570327c046ec7f3f363cca68ae2fddc933
+a41fca23cae97cc23be42846570d475b801ffaf02bf6a4a94ec1c2b73dd93ae6
+ac20190024c731b5806712c823cbf7d8291ea94e9a76bf1e3c715b90bd674aa0
+3da0320af0450fff4a75f5e1e83fbf6536eb9691909a655765083ac504cc855b
+9329df0dd5ee13003c240714c37eca8d518896bbe495329007451fba9df14cdd
+d8950c4c1636988c4e8de3dbc01277dfa36029116035c1eda42f4ac07f8c6883
+eb4eac8f278213d40cf49cae813cd0269be8e1443bcaf9aa4f9383a5d8823585
+1c385826de6cf55f7fdbfb74a99328cc64a1b4ad7991a3b9d9409952ae5b291f
+d5b2d2080fd62b248470d6eefe3111cb994e5731b9f1027c33c9154b0ce0a637
+d33729c36924df540a864ed2196415230b81752222df8779f37d9c2a0f33f203
+83744827452ff4d3042432ccb3d5f4314c6d51e6a8f53d35e458186f0f9061a2
+a53b7dfcebab03dff2029d8377945c1a61d48db1fa628074359b845fa06d23b6
+038b071c3601471c5ab555e440e46b81ddffcb0be3effe1e8c9b3b1f7f0608f3
+a6e63a49a35ef71b3e9260cecfe913069e460b40bda636ff1da4a081a392f160
+4e04b59522d3a0ebd09ca931979630b91265d0942485547f99cb9cf6e28a766d
+3eb812599dbdfdc48ba6da66687899eee0e3b71911a30bc7f553cecf8bff1c73
+4adb0035dc9ea4ff49404d66174aa5c25ef1352302c6432051cfd8da3eef1c17
+6d96da475ef37303ae6499802c12986c497434a16eac7010e436cf47eead9abc
+7a38bf20a20765008924ed4ae7a7a7554f2cf379161b073d6c429d3ca9157db8
+aa7376874b1106588cd4b4855827b09065803c630d593bd1a5eb3a7ed7311e85
+8f4219afb8559655444f8d9eb06e309ff626c33e2edafe56f96b69e1b0524163
+215382f1d40f69c5a80de4ca466bad9dcbc895a3218c4a0476c5b9f86299551d
+3fb81c90ded8cedd875981a61e68a4bb9276912a7642466ebd5ce0d4f3e6e9f7
+e7f7371daa0e4104250edb7f0a4b28cdfecd60cb87115691d2eeb3ebf5d341c3
+dc18a30a3c6b2d067363426064e4762c3e6abde9a201563d1f5cf2b4889a46e4
+fbc30229a5ae97572c894277a6ca919dc425679bfa0c86fc9276bea056504c09
+0ea9cec7ddc5ace9094d73f6e35e733f99eae54541a0486acde9c1ce4e96e25c
+683a3512a8fb401832263336e7d1a1ea019d8829b41fce35d711adee4458fad4
+6100584cef41dfda91037ce9a814082ca8f9f5789571c675c6f087acb7bee72e
+be41c47e20d7f3727bb1c4dfbf8441836e5e410b843091d6c926bdf8d19c3a69
+d558fa8ee330cf1f2b0e0831f4532478ece8b7f50f98fc2f5756b5e31c9c36be
+9b1eb0c563a1175566e559761b853ea9d1958d23ba35de9cb700102652d1fe3a
+01982c8ace2a228af7094baad9de58e0f05539ae4920a6883d765f0faabc321b
+1f9865066dbcbe1654c81a0388c3f407eeb40bba12c6a99c610e5f0616d03391
+656386e6d341583ea15db7d3fbb674f79c4fd16633fa5abb9b84b3eca11be36c
+f21aa5edfd8224ceb89503db18f3148935d425acb8bd2ba0daa823355c82a6fc
+1e1ea8d910468fdf058d0fdcd209557383dca05b45795dd4e03c7d598bd7377a
+6bd3f601327734912728871eaa0585ed28477c6fea33358d89ba4c89acf24540
+3c394088608d8aa25666406875d71a2193f9c49dbdca193caca5f9dbf26374a0
+475969ee2f1d7bcacaecc49e331908c8813fbb6e26be0d4ca614ead1898551cc
+b0c0d4e7fef0f48a84880411f8101be5eef09962aa75aa2912bfc9ce225691fe
+7dcec03cb22804c19c9a4e379df3fad8f875fa2d5edfb188a64c3111310bfca4
+6bc6e4de7b202634d16136ce43ac1aa81d6591b0d1aa13f7300980449b819e54
+98a6f8582b7bf69a32225067ba1c62f750b869c50bce47447b6c8961966dd59f
+55d4ea56461d0e3035e8064273ca30cf67ca8b9e0e8efd7ff2c6aa3538a13ed9
+17f408c558c95f379afe4280006402540c26b43e7bf0dd26e0874f73c9f25ab6
+1de5ace591d953986d322ee6872bfb67a604ed39ae4cf005b6cdf32f2c1b7517
+afc3c0626c6049c2713b079a1247c2c1a5442ba1459f180bf7fd78098d5d35bc
+eb97d566c468a5309f8d
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /minus put
+dup 33 /arrowright put
+dup 41 /arrowdblright put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+/UniqueXX 5000820 def
+currentdict end
+currentfile eexec
+9b9c1569015f2c1d2bf560f4c0d52257bac8ced9b09a275ab231194ecf829352
+05826f4e975dcecec72b2cf3a18899ccde1fd935d09d813b096cc6b83cdf4f23
+b9a60db41f9976ac333263c908dcefcdbd4c8402ed00a36e7487634d089fd45a
+f4a38a56a4412c3b0baffaeb717bf0de9ffb7a8460bf475a6718b0c73c571145
+d026957276530530a2fbefc6c8f67052788e6703bb5ee49533870bca1f113ad8
+3750d597b842d8d96c423ba1273ddd32f3a54a912a443fcd44f7c3a6fe3956b0
+aa1e784aaec6fce08dae0c76da9d0a3eba57b98a6233d9e9f0c3f00fcc6b2c6a
+9ba23af389e6dfff4efec3de05d6276c6be417703ce508377f25960ef4ed83b4
+9b01b873f3a639ce00f356229b6477a081933fef3bb80e2b9dffa7f75567b1fa
+4d739b772f8d674e567534c6c5bbf1cf615372be20b18472f7aa58be8c216dbd
+df81cc0a86b6d8318ca68fe22c8af13b54d7576fe4ca5a7af9005ea5cc4edb79
+c0ab668e4fec4b7f5a9eb5f0e4c088cd818ecc4feb4b40ec8bd2981bf2336074
+b64c43079a611075699b4d5902c9a10bde669900444dd85bb50c1e6578957747
+b8084982a5828fd7a9e3b9924a6ac5c404fc795f3fccdc98d530eacff0f28288
+a34abdbb317d637d067dd07dd4168a3503519bc9093290a1e4bf69952b84acf4
+ef4c3f13b51f2d1d79384e692b8efa1d7746b979b1a59812af57dd0da8eaae6c
+05a62feda23714073d7b51ac3b8b688965df7b8ef00c00fcd28db19ec1f8cfd5
+ce04ccc85d4292c4631d33d80c4a7659b7e1a0a67831c478c9a287d7738d3aea
+ca618d42d7ed26d9518dfed077319141e5854b0865aaaf29bf2ab46b40253c1f
+f7ab99d4b47fce091fb12faa57f990020e64b532e0906ab6d0d1db3c175021e9
+dfa0cbe8dbe9903dcf86f752736e4e587693a81d58891784a13d33481b5d5d38
+721721821e62ecd5d18cef58d38a6040b0cab2df935b54f758bb3fefe9a359e2
+fe0aa2fd7f8e63e39bf225000be99bd9c4091fdf062f3b09ccb1963570d89e41
+ee3b5d8f223db9031bc43ad2f5ee9ec190d9229ce70332ed03015989d19e47fb
+4728c1c56863f1e4ffd3b422a738876531a06cc93c2211e2a5e849f6216c461c
+53af1837650eb1dec1e17963155079d44f8b63c7e56da41bbf899e599e0d8eb3
+4358fbc4a0ed5e7d3684c01b1c874fc5405c7ef58c0d66f3b34292e87abfad0c
+b36b5ea4ca4237467fde4fd43efb210c9c016634c22510cad36207dc9e65be80
+49e59d573a0ef1fa462d298d3d8b381185
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 13 /fl put
+dup 15 /ffl put
+dup 16 /dotlessi put
+dup 19 /acute put
+dup 25 /germandbls put
+dup 26 /ae put
+dup 27 /oe put
+dup 29 /AE put
+dup 30 /OE put
+dup 34 /quotedblright put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 56 /eight put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 73 /I put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 88 /X put
+dup 89 /Y put
+dup 92 /quotedblleft put
+dup 94 /circumflex put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 124 /emdash put
+dup 127 /dieresis put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueXX 5000793 def
+currentdict end
+currentfile eexec
+8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
+97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
+8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
+b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
+50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
+784c6bf7389803d9450b0c21756a017306457c7e62c1d269f306bd3402e266de
+fc3b5e7d8a8d2f5bf0fe6ddd40d07391df4fad4a6018dce29a2b8f692b29f202
+3a7c0e66de8ed85c14f1f8492167357f51a7e84cc5d92e0fee4d81cf7fbc8de5
+2d2e7bb57142033993f9c08c315abade8dbc4a732e84e142d3bee51557910e12
+cd8aa37c459a5e6b7f5269f59078aba3be4641a11ac48d0b625c8325b38ec08e
+4c9e5e7fed976a5650d99d82114f449b9ca14c4ec957702295a39a93ef93f618
+99b8ea06b092c3c1e503e6e436e0a9fa22576c8930ab3dc8c20f5d82b69cddf8
+ff4dacfa9c54bed5a3aa3ea5b129fe96be632843b9b6bc91b615581a985db56b
+1e01ca60ee69ca92cf5c0882ece62edad3e106d835348822400f0b66af658f2a
+e56ed08f8b0010571807009b73ab12a8cf14ca6c71f03c2a48c500f9d62266af
+154a6375ff600d9bac3f05ce34142d6867a79581c533176bb2f3117336671e2e
+44638a97167e2ea9644e31ea16c2ad2990ea33c54001e0c8156e6de8ab6a4d40
+a7137ba275f39589fea2e2db8256adc103d6f9cc038037a47e8fd469c5f98a5e
+3c15bd4ace40d340018b1cff7d1ed8abb0ac57b5b5a2c20a51957b96c453edb7
+dae5affd91a46d938fe0a13363001d844ded4323f1ee6d30012aea19b024a552
+315505535c85dc26bad31e09c50e6512802976d298c4e90d0044c362e6bf3ab3
+62a454ee93de25ce54411090c29e9d75c80ce26a84404bd9de3aee0e3f921ac5
+87f907572b8354a5c3165eea7e8b2ba4e333802132f760b41a900c698eb3d273
+8bea0aaf7aae96a558f08b61aec7c7d65b2889bb7b99800cffee5ba19ac90fce
+11437be1ddfcf0bca5670b543b9644a71c8726d0c1005abdb96f6e0cf7caaa31
+95017ca81519151c2c0b04f81e717c0691b63a76e9b25329ce2625b711cb7bf9
+9d23ec2bb5ec8aefb8c1a3b422ad617b3da4d49685fd44cc21a1fe5e1541163a
+b3e1594601d63c7e98801d7746474377ce93f81404f3570afbd5dbfe77578605
+917ab96963987e6efc2d3f99fa56ecae6422579852567f90cc90e4ef6d6f71d1
+858270205477e221018a375ca83c572b3f972c5181d189ef4f3e3fb66f9815d9
+b1bd406c1a645e8c66f53aa5d4bc2f4d0444412e1fa5d7238a7675e7cc9abda9
+2065e641151f8d4793ce2385eff2dc1d08d6400624e77064fb08261091d6f932
+c1ca0a102e9f438b86eaf91325876bf20b18005b9481db55864ea17e789202c8
+fb89602f404043088da30ff4117fc061ce251785d5ae7d6cdaf7b5d5ec5151e7
+249d4bc536705d99a55b17e9fb4c239f8c15d9b6e408013da8c171f6fd6204ee
+16bdda4099494907d42586428602bec7eca4dd48c2a52b54fa821883661797a5
+1fd6ae9253a211a8f687cd1233c579dc179ae59e2fa1b6825eff00f7accea0b0
+247885b39355a8f4680b5db0e2baa48154f0b63f13a0c161095c26a13a6fca11
+0016d69f63b3190e191ef5ddd06633533398a4671465de003ca627a0fe57be67
+876185e099442b766a1513272676e775af0ab36cba03c02d8c11bae771eeda93
+8b1fb4bd985e59a216dc0f199111c0f2544d7e77c800343a6fe7063f8bac8314
+cab1c57054152a75da2bd1c1d433fb6a23dd19c6b523d270ee2ec1be09377b26
+cc9f3bc1f90c5c5b8bbdb46eee75a66b4cc769cc9e06d6643f9730fadb35572f
+e38989263fe70333601fc4556d9dedb3ef75b522eb29cc0f4add67ae494abebd
+f105b2b6d0bef8430373c82a97e2ea3b6453e635f580687e36c3906f453dd157
+d442d902b21ae3cb1495812b383315595cc69dda1ae5a9e963ceff5ad37dd976
+a9a01d168199ad4fc0d02d1999cef8461c1ab3c34227832785a5adac572775b4
+9563c201712394804bd06bd979a20badcc3db165733e86d6e51517c59beb4efd
+7c76515c0a6b86d43bdace3ef38bfae98dee11282e592a66133b0cc869ddc5c4
+043230521181d9a8676f103861b5dfe8373b6570c8577c096c415ea3df297aea
+d6d2075a5dbfd64b24c56bdc67f6f14fc7e34745c2ef4abd6827190b633cc08a
+a2563509c44c9aab7b4e9f705cc655a5c48b218846f0203bcd4b42706a88eebc
+3650e2d016f19eaff962105ba8f5e1e1f045081f09a935be846eb568a522e510
+358a00fa2a6f164592ff6b2410808480e6965705cf6ff8cbb6e376824d9ddb7e
+72292a0b35610f7bc7057c781be9494698982ed7df62e52a30cc91ee84da86f5
+480384093cf0a16cccbc0f5f016645383e544b33488436c4ccd212a9e59df18d
+12cbb1c299343d13006da477da18162169868f6046c56d426fea2ed2a0a857ec
+3f0aa14fd5e10d91934198fb577d3fc368eece32f934cf1e8a0dcaa6f3fe7853
+8f1d02c151b229b178e00cbe4672d3d77d762f039d5478110226cab024fc9378
+17ebf3559ddab5349b12bb1bb3743efee48512fe8c321cfcb0dca9fd2862acf2
+f662211a8d432f2e8c42f4120af0b5fc2eb3dd6ede07dbe233989d2ab6ab23ef
+0b35bc4b4f1958713dce98a5872b7ad0df5194c8156874a2a2f994befdaae464
+5fe6484c700837e8b96ffeb520ebe64a19d3ea0a0c751f8ed3e8b141f27c0b2d
+5ac82dca96c3f997673a1512f18eb99740bfe6c507fb336c89dcb2fd54bc3750
+8c494c40f35af00c8bff6fcf3dbaf21a99491fc4a5d7ca8d211ea711e79f778d
+a5587494905569b2d63f0234e1339bb62d21c3b4a97b1f6838e8de056f765742
+6f114657b3ab78bbf2dc88561d13df6830827f04626df0b0bdc85a2a27889986
+cc5683b46d5a1a0fa64e2e74fafa5e6e45415a406d850a5aea592ec660a5c740
+151427beedd6376703cdf91b9341105bc6e810de491cce20b1dab8981267c804
+e105bab54e4794841ba6f0ae594aaef43e3a08888f1572343dec0a6c68395803
+360ca667d163687f1569cbd0436242aea5673cbfb49ce8ea3ea2064807cecd98
+18d1d55b5d5f698aaf00ccc301bb94a7d77546402ff894fb02fd372ac7170c14
+9700d4aef3f91843fcb696227a629b437763e9f67b9fa92cde309d0da6427920
+f46d64a679d82fe9e83007a68983a902ccdae36f69434d0fe4f617f78b6d0ce8
+136a5535edaf3d43bd8e8f1e9b9480f974d79b1c29455dd93a496dd7d0d40cf3
+f89bd01a20e923c3159186eafac1e584412023897532cb7fa158263b875cc445
+bb8fdcd12b3987a49f46a40cf3e1e951ddb7d109fe0ee7a6e152a5df886af20e
+94782ea9d48012d37e6e7c852008d6121fd88c04ba2829467ff846a8869521d2
+95763e1123f62a7be1ecd3722b1f321299a22c5c7f5db458472199187e34c2a2
+b8116314c71b243c535c9372c0ca2bbe160c5a378c80981a5ed1a70663a6db4b
+86514f06b07e825660655fbe6cdea02201304d22ffbfdcca808b79f9a7e13fb7
+fab5b551e36e757a909ecbdf2537d3a1c10b63ee0456e29d2131051ddb922c9c
+d6e875ef5cfeb8150dbb3040e64a269355a5c24e1ee92f31d8249628d9faa814
+4040ccbf9c35999a19d38e2c383e0cc0a66eb614a6045b77b7d66a8c8e060df0
+6cc7988b6bfbbf92ae74e63c95989cc38ebf40ef5c7609d96793e42578e3e0d8
+2122cff161b2a8f096af90e03d2d7cc27459f54fa695286764b9007a2aa52d8f
+19d7cad16a191b2f727d458bbb3a3a3edc8749711f62aec6ea1f074dc59b4d5a
+1b4b5c73718f4c235e9bcb745bad6e01290996cc987b5dc3efda72b3b9d8bc45
+a8c9e7505074c4c98eb29ff24d7c9f6988ad771a3c096668dbd3b10ea31fab91
+590df16246e9851d9a00d8d7873454e464d0ca8359210afb37c05529a0d3df6f
+7370e044c010896f528cb0ce7bdb95f0fcc447ae8f6f684f2a69d6507dee93ad
+702d89d0a451e281bf679572cc8b2af1bf727d51e3afb753ef773d6cb37e24c4
+6967c6b9a5d460d647117dad9ab0cbf38fdc8babd2d82314b646c09473be772b
+8d4e2b47e5f16f061eff9e7fc2a61454cc6211c343f0145b1d4f4941f2fbdf1d
+f35ea62e70f0af95344e91d2c2c4ddabf9184740cf4208bf8a433f5e89f82e16
+5b0d4a8175906c4345197f9e31c0edacab667ab62a86b59933dc858b49825201
+cfa7ef8450eb4c3d3c0584b81f5f778bc97efb41f003f240e9da6db131ee25df
+c6c934b844508933120cd46de89ff18051a07a63c5712fd944dd8b104114bbf4
+bf2bfdcc897d73efd5a1b506e694f5a2eaa99ea101f17057df0c5dcefac518bc
+8c874646e8624ccb62d5d2c14fee75ddc1e8185f62a23a3eee78a4eececc92c3
+71ce73c225ee7ff2da20b7b7f5e0d4af223ba49bf16baefe7805917149ed300c
+465f7ece0d0ca756b0eb6bf7edb0936d5a2adb097f0f0e5f2c112833a0aa08e0
+f5583be11be43f1c035704048d15d263c8f595ed0bffec05511f33b85f9efa35
+0bdd02b87477dd96403f0263b449fcd9269d0769e6b53e93190cfeda96a3003e
+d9f11e70369e268b5b75fee9112525485271e5f51f833828b66bf9e76a8a6f30
+8b021ddf0e3ceabdd395537d4488bd002b36a88156da857432f51e1067cce350
+ae26a238235fbe61f6e0350a4e21d4fecb52b40d368214ab97e5908e7ed64d69
+e5a6f2a041ba57b41daaf11f3658d8990dfd1bc54a2101d8916f6c61e3b0bd8a
+6e0da2a74d7456e7386557b56e0623f203cb493c0529d3dec615e383ca8f2ef5
+64591bd4739fad8ee86fd6d8f236e865c342c6faf10cdf95566c96509b3b589b
+7bf33f7192065f208a53b8cfbe62b4c9261c5f8fc26da054ca591f7e7d05c2bf
+5fcdbd9a3d21dfccd687084c68609cc2833a846974b0b69afffd65e4a29df09c
+59bda18bb6cfd101a23a0d5768356d1b78949d668399ef48ad0633d1c7c3ba2f
+6e1222269b76198d22fd5adbc568dfb36a0ffc955a1e219b9e71c348e2d54a31
+eff43b5da97634f00f1cc71c6bc2e6cdedbbc15398c9ed55e867e86be6d02b33
+c91cd0d41e53aeffab126d4936adc29abac839b4de494350c40671e0d3908f2e
+4a1736c9a5a10014015615d8d8b0af745b3141d7ba094848da502d15de14cfc4
+f76ef0482d9cfe62e31dfde244d5e8204d3f523e8c9487ffd1dc4f6473ce2855
+d7fe290542726553407899392bff64e42dae9f06d4953bd857c9b01aa05ad3f2
+a2e10e157b50610c74b05877f9c9e85aa3b24d19dd193c9c67b40b2e6224b713
+f386fa40c1a5127a22be43cb5790d249999534c3a6bfdbc22ea85cefdf25b0cf
+0b316fe1a40e1786a0cc7900600051c9f39551bfabd1dcd51902c363bba3ce38
+55f3ef77f2785382a0f16228e12e54d31a2aa8e5e800107872126469355d0e58
+06edef93af116bde482d936626aa54f894b0a09097a9773f96140915abeec6c0
+10d744d7a7f97c538f9985499ec88cf9ab967d0613733b4782a8ae1d09bc8390
+e301ff1d8bde7106e40368e7173df368f8777b07f411af5f4961087c06940ee6
+8fac0f47fe453640210a42d4173c92307e74f6488335f516dda74857661845f3
+0e49358f16f8e96f5b35c10d4612aa555c7ac952376305e0bc0c02e348423b2e
+2c21554d68d9b51d6c427e6d065f5298654d76b45e3f22d4f2fb1f1e109ebfec
+311fe3ba652639072112e9564bed7590ee7189589b1fa1adcad3224deee45efb
+b83f2273a9ff41296a289ea43bf1b73f131811156c3c14e76ed8706d4f3354a4
+215fdf81f1319fb463c18d6f257155f779e83e39a7b69609260aed95246bae53
+44f092df6636af6e2a2ba9339525819ffc092aeb7e38c672fa99aa6ca26dc8cc
+73fa450d295564238c88065fb6b879fd53bf0fe29ef8ceaafe0cb3c510118ca8
+c0df8976e7f3072f1e1d4dedcd772b424f4f0f138e421558298d4f5f8bc936da
+8856b0db4e4b62f20c1d6ab58ae03b6395cf228c9a70efabd29991f5ab8df7dd
+4fd47c9733573c67198cbab65ae651e025211419b170aefb294d2e80cfb5f9eb
+36ac969019c2cdb44a57ffb66afe77302aaaa2dbcdf49ec728c345dd5e1d0046
+b16ce7d795227cfa0bc873aab9b49d59d3ae8ba58d7ad1e0a5999d51ea336326
+d94c31c8fe9f2061a935f0331bee01da7e7c9e099739061333b6c170d659463c
+cced3816caf5acb6da1e08287edce23d676e8665f6642a9116b3ac39b9560201
+4c51ebf987f6ee7f662b76aa55f50aaf7a2e365970e1aeba25d2144c919f0fc1
+e7a3864d90f9e8e57068e107f24d9380400929c0afbc5c702da2bb8394067951
+565b2377764521b41e278cd9ee14b8b48b7b9042090e4bd92dd410dbfeeb3bb2
+fcf70e76c03f37ce963a169bd51ec34cfe92ec199edce16373911512312cc454
+95655ba9a81bbdd16ae2f442e45c4b6ddc0aa42bbfa0162e0e4841a20f4828a1
+420d9dcc9fa817d605e8ca1382413d5e27620fc91a84c0cfb3fe08aacbf81f26
+774428cbe16ffe835615a81a17d1a1bc94bcc0d4b1281387eed65128148cf50a
+5ae8ef388574b3ac1d7f46a4b948deec4dfe37c01898bfe1b327b914b99a1b7f
+0ff1782d5471dc008a85f331e045c555adcf83821919a79f3fcff66d0a4cdb90
+ed7aa7abb087cf7977506b633a77d2431e217de51a1fc2b3ec14f46bc9331cc1
+28e97ac7c6fefdf1384948485cb4c2886e657d3f0ab0bc70bcc16c758748185d
+dafa880905e2e70299f23c1e80c9b5c297a31ef9529608b3a96d5c98949da94b
+b0b34bc103f03532b68aee10fa178d2530d5ef5b9d2459b0c69fe66895ae76d7
+0b6a63d9559e115c474490a311a8f4b554c7143cf48de949556e63dd9475241d
+9452863f4480e520dc163d38ae9d38bba68dd0370e8207c55a9ee9ae7bbadb5c
+181a13313c5b1a1cf9e4dcc818b2809608ea15d7973ffe3d639d3a110cd6f7f6
+85d7e42ad6c8189e51f009b78a0f0a12da8933c4067ccffb675759b06a37ecc7
+c839a4fefd7627cad46261f1dea98fbf549d82b266f7afa06e864d06b079de09
+66c8cb6447f208778baa95fd0ff6d66d1864702513e0fc4ce09018f90d1a71cb
+0493ee58a44b09bf3c98d63e2a130290d3c26a8b241e927f7ee608e19895c082
+b50cac9c6c1bd411eb4ac9845cc80162f71ce0716a3a7aa31a882fefa87df826
+d032f7bdf6dd6f0177857e55acb2eb2b2d7cc785749d0a89169a6e77f2eacb71
+cfbba6fd6a062bb1c679d6cccdde2d92321bb9b078cd36aa33d31eb3c067e93d
+2d5ed444fbda7fb401ff6b1af75078de4860e9ccadda4ccf230b9ecd80bf2cca
+d5525d165fba606b6dfaa81bf779865277790dae1529e51e1f8ca382ab64b0b8
+1bf336c9f81e86b08e9b18f073c593f6f71e5771870614502471dfc386ebcda2
+ad1a00c4cda1330a6fa94a79e58e9a58d5772721295053b25877188d1f9e5b9f
+ebd5c318aa18f8869339f6c212cb62afbfb6959418b76e7f30a454def2994b68
+6381895987d76f2153340704d3e624cd29d04722f7be2072e6e07948c53b94b5
+bba0b965e351ab6b5a49a1212f721e7febafde73cf0d33479431c606de53b715
+5d85ef5ff827724c57cbe933a5e9827f6e697c9e587c93afbe8b6908e92d7238
+e9582bb8e4a838ee39c5edcbac03845fc0b1b2bdb45b91c11689a675be038742
+d78453c7b4714ac10fe67e5b352cd4ac1e7b53a88f9d30a12b24e13840423e60
+6b877b4583610625cfb0dd32c026f6def079980a255d7d8ea615bdbb68c1e8b0
+7fd1587187e629df14d51ee1bba24ac8ee2b3b2b30b00f863a2d434700488ab1
+dd1844c82c33df17adf32e9f22d535056ea9ecab138311ee5a4cfc14354a7e46
+0ad3ac6d9c9ac0427fc8cbd84ebe1000a05be466a674189ad8f03d3aca29983d
+5517b9a0b0a793e88acc9a8831b28129f7ea986b1c1e7e7cbfb4d202c3ed2208
+b04b2defab992f3550d0b6d7e2d8cbc64cb5f6f90e3f442ecc29383d4bbd45ba
+3ebe3fada59b4cc519df6bb324599276c09edde3e77c87e016dccdfcafb4190b
+522208a90a0d9f6f603388e949ef491a26a2378db50c69fce93395b7012ac751
+b7c0da66f931850bf2200d87394990bb673273e386d20df8560d893402e2f761
+bb216ea2530dcb27274cb81f2087c64155223d97af4b001ba8eb0a90ab5521c2
+9fc8f83d01910dad063be555aadac8f7e281689df391f909fba84e20fef2a993
+8caecefe097e279fb7678f69b82f8d89630595daac8f21d5e972829be216f962
+835118acbf30fdca82256e598e0a3fc6c4099354d2acf44658c5598a96d07a82
+412ff4aa22dfaf33e47250c183acceffb996405e373c22bc346a63231c7880cd
+f7ba283e77fcaa59756129c11eb010e8cc4c7fd5b3310db0394e3cf93dbff250
+412fc01f08ab5ad0f51f7d473a5127a02067749f71e31712e2852879b628c4a3
+5c2addd08340ef5a648b2886c5c31dbd75840215db72ac33fa8155588e502e60
+7ffdadaa7c5116969a89deea790b2ca28bd54ea26d6dc490e820c0b44dacec8a
+ec1debe7b6560d75a115c3694112101929b9ab2a852e3fb6369b170ba4f77901
+65d8347be454217587b3227d523aa73ef48e478e50c01123927322d05d390539
+caccabd75cae8229419add110eba5a6d87c3cd44cb9e21b85665a4e44c095086
+7bb5a8bad6fa3389267f2abb65037ec9793432f062d79b5d887de26bc1450bbb
+9d058246ff0c4c5510017ef4d96293524c6ff46568ecb39c096c1baa57bfdaca
+089aa112cdd8b546270658a0c56aea9e25ec2577a00d649b80ab589d2e3582dc
+fe215481fc54758742bc947ecf14058e0364eaedfe41e4045bbf0946e60911f3
+1cca86bb700ed3f357279f920c4bfd9e9e8df4c3ea559a7d3d532bfe41d26178
+17dd65299bcbd52d899ea539fc0274c338ee77398f69646b31f44a3084435689
+f138b4c556c208ac5e59aac13e89d5b8f6018c6c3c1068838f387c699e7514bf
+4b8a608d898df563e4e727f915fe1cc3f65fc7b96f8c1c83e7484735edf700e6
+0ee4d09796500b1a200581583228ba47a98520fb0531d7d88ad8b0b5c9f6c937
+58dae9786155ce58658685e8e027fdca5e09cb648b0f7e0e9aa2b6d3e6c673c2
+d670dc95a3b8a4a6e405ebc8b48f5c90d050e666cd91901214f8a071310fd833
+cea2290c694fa9b2bd781c4d25633ad46af6c07e2b2a7e5adfad8bb33e69c74b
+7373f37999eeff3b5597073c69df3f637dc0a28e7a344a2c4847ae8185301c1c
+33b379bccfb5a1813934ebe52c818ffb5ea72fa1eb54e2757930a349da35a280
+d1ed7feea6b83d25f0ec6248b3f81d043b61089fe751ff7b210f872d7f9feca7
+63cfae266c27ea61dd847806bcfa1f3e8d1f33707706a931a1d862f2b5585755
+51e236a077f116e9d3298a7ca44f61daf86f718809dd27b820c795b5696363c0
+9e0d9322a49a709cb470db9a2064561f9c6480514fa9eb41e30075f5aa1eb20a
+1b5a5e23f84925be630dcfecfb3c2b4f290858506d4006e2d832df79b9be0a52
+f42485ff3422b5f3df50de4cb18e006d81e8541be2013258af761723c908ebd7
+c3d474d2affa85a0616a0bdc6186784e6ae6accf532059aa3a3f8a04629782e0
+7769789984d0fc5d9d8f524ec8d578059096c7e517145e25bcc51bd45745e6ff
+eff1e5b55e045f53a0624ed5510fbbf7ee4fc40de4aaa82b4eaa5cdf37104b3c
+b40fa87b565bd37a225edfef2d41cc09a87cd8cbb3746244b0c335ec48590272
+5ab1df0f5862f5b7f44b47e47f835a3c0ff0a87e10a50d60d553c17a9ae757c3
+c2f2c35fcaca956943390e16ff670d2a460380eedfb195e9d9366f3ad6867ec3
+aa199068fcb194c4ee06f62c018878f7e7a102afbbeeea3a343572266189feaf
+fca0c9f231eb58fc453a8eed2893332ec1fb3d99fc44d7d7e5a39e1feff513f0
+312a7273a7610556b30b4276b474300b1666530f2602724e36c2dca4e8f1d858
+0bb1d22d414f447798ce120d2b7fc8b8dbb042b02694b65cabb5ea50bb4f7d17
+946bf7f70818e8f0e965f744a46df3d33bec94677b220214ea7f90863b72f42c
+b273296428aa663263a9c87d12ebf64eaf065cbf17022bd19ffdb0190df7897a
+0d5bc2e761177b38b994bf51ca4e0ba101bc496a4ecba6b990fea92ddbf12131
+e195dd17da487c525e012bab938b1f68911a1845a4d07372d4d6340a8415e739
+776f085f73565b843eb405847401d80b3b484ef01609161d5bac8b379a0311a2
+8063d0189feabdf89437e1707d74f690ef93b4d8a94977340a9961b92cfd57df
+4d63aa87bf59d80e8dc495e3c118057890478599d6a1082a07c8c30c54b1224e
+d050611be8ce37ce615bc64c8b58f24abee247da6ce92fd5d71650f85059792b
+b1e8ed8fc287b63ce68fb34994a08e2a7a305f0767b7e3f9bd92ed7b7d625321
+40849256e610f88361c783b990d87fe4d326d1dd2b00d19b7d6c4ba7cf66e56f
+a72494037094abf2edf1d0851d04d4a8b4480a13b3a88f68916745ea2f776607
+8591ef49dc351a07ba3d53045fe5e9df5d38e92259feb561228c399ca16269d7
+08ffa0142194141e621c8ad300544627ac5bd08a327bf2de4d6b916653c34120
+ff229b8b3d7fa62c10e47222615fcedeea760237e42c9cb34a3d335e4eddff60
+96161e91a9477776866c3120e252b8a83497b96947d4394e428a5b324cc54a2b
+1f861b99db3ba3c9e780421749c749ff2ed7a48aba4a09450e00bd80e89c1004
+d60fcbab0321d516b6dbc8098c6157c601528f0f122b275c664b258f83285bd7
+047afbadb5e51628a91a0c1fbf1f098ae78fa1fe88782e2a4ea1c47e34ff277a
+87518e379018f4636a9d15fc3b0bf92366cd05a8fd8332cc36091ef2244d3c30
+c4721c25349358b8457a2e50d03a3f9674827b66efebc6d2df6b1af87a5da25a
+dbcd04b24db31f6cd17690e1bb55f310fc267bcb377d57f0c3cf1c3fb4925bbf
+6ceef3348f6be726c0a5274d3c6cb328a7c66ad9e966663174e93af6a27751ec
+e8a1196eaee381cbddf7fa64c2910f101b083f39968a4e93d79bf998ae7d6835
+c739a92ae2fc949d3d3bfc1d171d3c7ba8ed416bcd35be5d4eb80c1d8f319604
+8eed1d50feba9a35055ceeb3282c10c53ec0c2c3962c0537e2d881f54da3019b
+fe0ecaad02fb03d7294e4e6b597ca78b429919bbca7db49662017c17bfcd7b74
+c2ce2d2f0fdcbcf45aeed12d23f2518b129e491040b61187b935360730fdd6b3
+5d8976497002ad582de4afbf811d0af9f45c5c0b3a6fb3937470d3313173dd9e
+9b8d9d51521a809029efcbd7e88703851127de2496be97683962c1ca054ba244
+593aa48c70ac36ac7d9574be2ccef5cfa071b1f65c3aff6191be60d986e0cb21
+b26de38793de394003e277dd68ccfda1123ad3474cbfeaaf5ecf15bbda72acea
+150d4b241193d450e3c3b92f758fd2a6516f07d3599e680e6fcba1171250245a
+e9f4a7741e817f2c2d455125c4405e299edb88771df944b4899acde5612cd3f7
+bcb097be7c996559a8b724043992a3db9b9744564d0734bbdf6d4283f0ec7656
+2eebb6dcf37ff4e9b1553bacbe9b1270f99c0e73dbb4acac4e221e8bb7da348d
+0c8af4db6493d7b7fadeb70d6648991bb6bbc4eb862e3e9f08d3222c295a0618
+0915bbdb4bd678ff4983e061bd29e8bd6d1a48db9df42ef59ee7492f1586b857
+51ce4eae0c02046ad511a385447b9e13b3b6f62920184da93cd978909bce5de7
+e15f39ccaabb6f08172f94f811f80e5ffcfc8be5307a69a2424af4d72102ca9e
+14fcde9e540a6d9cf57b9e6c56670fa22e806ed33755b352d6ec527104609a10
+1b3e71e689a0c7ffeb9b48c5c075771baae17b8832148ac28a7bd4dba5bc1049
+78adf0e820148fa6a90545378b0268865abae637bb216bcc00aff113ba0e8bf0
+828b68f60b28f4a2637639f33f491dd3de2155768151b62832bdd788034d9719
+183b8f4ded0a486fe041f962155b64de9bb4a46cf7beae3b55a8698576e7d6d0
+05d4293643dec08b5eae6f89e1c5aac003da0ee2a2f3aba3eb18f2e77ab035f3
+0fe56488ebf42b59263bd4e61e0c868c4b5581feae5e91bb80b62dab428c87ba
+d79809858312a6abf6187c1cd2a7c28bb124e6b9347a1f0e804890d80fe44888
+4ba908820fa43d8c8c755072927edff164e6b603a127262f70cdb3f775bfd50d
+c00056c049e93574f88385a99c2d9becb2e886c1d90419730d0b8186f720c652
+c2ecf7bea7cac2f191e671fcdc84ab50116b04a37c8e074fd9182c45b9253fd5
+5cbf8f30e3cef6bac8059e844fcb763d338f4b94edf8247e9e269335e2b546d3
+b502baf5e1515ac61de0e89987c425d3013a7256d72c543a67eb08234611447b
+5b276f420cff6dfa3427141e6d83966ea50a1de859af007f876fa8b65ed171f5
+201fa992466df6d2207170d447f505e2c35d09be3436bdfad538b644d1881759
+2577a5c15b7188c9887da87657686bcad61b6270b82cf789b5eaef79f3a5aa25
+ed755b8c53a6fca530f85e9fc2acb5b378e4cccbd5de2c5b8df8319be2b0d8db
+d87693abea58f6865c16c30415a191b62ccab357002cf0d8d1c7f93aa4408f49
+964f407467fd6c3f7e7b395d3b3ad381a658b78219bb75888262a1337a6c67b0
+cac22a83b6c867024b536ff7061750958c697ae8f658c0b8d63dae6a31192797
+1e320de30d3108cc5fab9edb9b56f172d11ecc1564224fcd2e89c4d835c35513
+55607086cf2c59ee68f7951334d2736e07ebcd9c7c615faadbfdeb6967a3a712
+4157d091c6742d203ff25ea67892a52bbc9e61df30e98c81280a273b57dc1d12
+96c1cfa164f13f2cac17926b79c35f473a668c3a025cb013e1316441c0abafdf
+aedb95d62971b86956f0c9c32ef1d1b2d93362032f19c72da6d5c9759310694e
+efbc072dc6581b5b9ed8586ea5945ca4543f28ae0269ba1d5df705235d3b44a7
+b33c2c84fbec31031a87910537a941080d8a87d6406c237093f487f03722aaab
+258510ffcf4c4fade4066aa7c2b64d3a4fd34693ff1ef18ba23af5b00761a17a
+3f6057d86e0e4c42de919d7c847ed72feb545d7d2a6fec374f413cd13c57ecab
+02cf17518fd5096112fa475f80ee345600c95e0cbebd3ab70ca5189ec3c96ef4
+78f5e22acdffc0fa71705c223cfdd8a9f28a13458e11e35eb300f80d8a1a4353
+0fca1305ea87464c5a44df910343ff15436ca508ff4229e5007c7d2929827f38
+9afc24be23088f0229e3e24d06ce357df383437e0cd7cad77b95f16f80a38b8f
+67bdab2eff74f1017eb43f1525a4bbe2be25d14aac0c231d57bad93051b3f663
+987fedf66d2cf59d5fcd3e40423bd50ef476697efaad54ff64a3836884f91f07
+827270793f1804de5fc95eccc4a009fb3280fe8240b60bd9738b0b8bef04aaf6
+9b5321ef284eca3ca1ddcd9594d6e801767f395dae321860c4cd5203dd5fa2fe
+687f6a6f786a201d803cc9b3d697c53db1bff53f90e694761d59f2f3fd73bb70
+0d5518d4b691b3b4caa9f77a694cef0663900d61b6124ef7b40b73363a44b955
+24b49e573b28fb58d134eef2a7b88f5be4cd6d3e577587f8ca2b73ce44cce68f
+1c235bcb224eb59c1e61e5e7746d35deee11f891186aa86a99806199ee8c2c5b
+f517b17fdecafcc4fe40114fbc5de7b7ed0880554052df18dc90928c580b8fbd
+bbdec1fec4a38332405535cc3045fa280adee50c8b56f195142d25b0ab202d2a
+b781ca92efd3c2238e7e6b73d0fb706cdd931590865fa81e0f5b368c65f53d0f
+865ea386aee57a649431351fb480e3a531a4da45ac60fbd7f2e5dc7053341e43
+0296d65105e3bdbd9cb99d3387f78409c7ad5aeefaf49bdf5351d9d01941f14d
+16ebcf8633c682d123771cd369145b25eb020a8c56c70c43d7e6700377992367
+ccdb65ef22453c53b2fe07a0d025cf953809ced8fc3230703c2da46389610d59
+586871679439ae58c0848a1ae5abf77e308b07711ea6a74269df22de41de6ac8
+f7cc5a948a0a62d1c9303129daaac7b72fac4898c5c6b9a870dbe75610492f5f
+3121516efe9b3a1ae1e94c0e29a2a52256772fb67993eb152c40f65d1249755f
+335225abce8be0de8d033aa432ba13ae229039a2169649d5ba4b28ee11ddfc08
+f91f86591911ba88611629dcdd5a081ea1bde8af301f3ad0063f28c33c2c65c9
+38283e876be91207e249aa3927576dcf539de2cba8a2f14aec67560d754470e5
+358afc36cae477d9f9ea61b47b64d26c92437c80ecd706c328c0d918bf253466
+4c6a074a0b43aad427cefc990b0bd7c77ebcf643007d9c930f4aa7cc36dc681e
+70bca4e727fdefe6492f675d578816ba6092794de8f8e0610867c0b9ec6780bf
+3d29fbbfe7699efbf7dfb0102a4c96a1117530c19064df685f4f1288279c1948
+e74e563bad0cef02499af1daa0cb95ea249db6baf600a0aa0a53f0ec68bad5ad
+9b0d7471c4486f88ae2be029baeb32d72b2d613af9dcdd874748ae30d08ccaf7
+176271f1bc14456e9554f37da5b85541178f9f9289a89669cb4921d12772d07a
+b33174c84f574fc95c276f69d73cedab4077b26f56911fc435e6d2514417dd8c
+4215cbfa620338044a4bcae0d45735331a9fc7f8b80aa3ee14ac267ef0fc2d8a
+7506a377ab51876bd3ec78eb552c327f9c9c3a8d1dc8a1b01428e99021aa3b9f
+01f57c4f60c192415af53fd497f406ed514598bb175c7b21928a2c5fd265a343
+2f08dd80964dfe9b42565a3a38b9fe4b52fb31ba9d5992c99c0d7a658aed561e
+9c50657dec64d416fb2f6326cd26181cd8b45ae1a8886fe986a375c9798b94f1
+1859754b2f420791f8350c1b810b741707409158d4f83ce3cc0a74f4535ad6b6
+8603d39e34c29f40a0e73553844cff55f0e336da9f90f2353e626703f3a3af41
+ed6af2e513d2166779b4a955137664993fa25513db29539ba31d966c2d2163a0
+ed3782990a47394f3fbbcde6775c1ec76b4daf49a7e4726eb6dac796b089b14e
+c4a83b30fee477b7fb3aeb9a8f31defddd61a0fff25967ad80c2851e55dc5c26
+c84514402225c409bcb0f0dc4738b1e3f7f2524ea2c5c4efb184f880670e9a65
+c90ff6b0d2594f33d43fe4fcef58ed7cedd73cf2c410276a4d9d5f06ba155017
+d32e70ae2f93b552d0c0b8e0d8ab112d741b54133f91470ec3c28e4731d15b12
+3a44ef63538c9fe837300562047d7b8585b4e00693741737d1c5e8d6cef0ab12
+b65cdcc5bb5c766d9a6590c60aee88556d20b071b2c9f6506518f13a9461a85d
+ed9524440d0fbdce913030eaf79436cda3efeb67fef77a259aecf445828938fc
+e264788a928915351c643a092ace3857005fb64501cc778764169a13013a4b99
+dd695618af53bc8c26eff31c724f301726756cd2415f4f17b90755ec1d745121
+26a0f9d01da1962213cda30a59068586ce26d92b1814130b4ff77a334d1d48d8
+6b9542dac0c945141ed69b5ec940dcd5d9fa3d892fa4043fffadcbd1a0b51b4c
+704dcebda6f9aa43463c6707cba64db4e294940086062201b4b4a8fe9b0f300b
+4275ad0c4c92e26892b4077dedf2c6604383400ce1f8f4d63365a7217c1cf834
+9aad15faf7f21d09ebb3df67cfbbe251ba3121e698923e631233188fcfb16c12
+1c5c23f8bdb4b0e5ad4d2389874413a00933dca8b87b9db5c52f8c37509be0f5
+6b50256c3c9182975c8e13c7b5da8e818ac6cad0327d365610f1244ab3f7ebb2
+e32a0212f00748565aeea0be81c9a7fe11796f07bef253c724269a4783a8d34e
+c3545d80dd8fdc466aada30ae86e6a1aea3288b2dab999bdac8c6bb52ff41f4e
+f24bd2fdf4c4435e466ba6218a6b8e4597bac9c03817481adeb21a047cf34eb5
+ccf3fc45698034129ac197928c86d8c975f0e86832df44d0e52f6e56ffc1b306
+6817f5fdbce03a8e449027aa122e2ac2a28748b3e5d5114f01b4faca0ea7364f
+b93af7584f01016c2b6bb1278f9c8d8edfae99395c1d9c0048be9a38b283b22e
+0737cdb51d548c0860e0381d74cc932b279ab6d62e44448c83f49e670c927dcd
+73a81f51edb4698dd3d7e4554d5b9e411a0421b0db1fa75bf94bf77ba0489dc9
+126bb21a975f6aa1aaeefea082186cac478d6267e373ce65dee5add48dae4708
+a34e1fe4a01bf96a99374edee8f016c600bc3bee6951699f0be054297270b8bb
+f0559cfe02bda0ad4a2a4dd0fda595c1336a664c04bd5e64675b6495513fb8ab
+261a740792e95cb18d6d7994efd85b95c0c1aad40b61a84934958fc90d77435a
+5e7d542d08b8c7f9a7328f6bdcdd204a595fc5ddf3d4056f24aef7ae04c5ada0
+df13978758f1c31ee153164229fc748e725c87f2f941077331ad83db1b81fc2c
+4423b15cb4638b1fefb8207e01c6643560ca9f51aac52f6b1890a8877d8f1951
+2d20f6765aa120f2b1d1811b87dfa928a668966461e5fa2aa74be5a154b6630c
+fae5d882c4d8a692acece141dd63dbfb471d746f2c7d930b48e814f90b33d10f
+b9d58ed82a27d8fadb9d5d96436665974048c3afa992345fc5051ed83fff1b93
+3f4aec562038fd62819d675e76c12cca1ee8099544965e9d63b3a8d91042d071
+a2c41ccf9464b3f6a373d56fb166015be39553fe7f6ea7b5642e5669f5a44804
+24f7a4fed8966f3ad5be261cca182b5f9a92793af1f3d4da5709acb4b8771f8a
+6c467918fe9ffbdbef1a974c57fb948ab3da6e6e3f4b58915f58b0ccddd27ffe
+171ee22fcd3615edc81af5fa5fe712040a8eba47191e5a5566e5bab7be507f14
+ead70352bed34a443f48bc6919d3ecf5246ec5db649bf01ff3c8fa8b29b415d9
+1f28ff5190c5a37c11dfd4328d3d08921156101ff3615ad513f3b2356386c42f
+a07f0fd822104dd8f5a63c606684cb8f2d8a6bfefc1997c2d1db6747a00a489c
+198b46f93582aa3e09b403ea2789e482e481d17584953876214c32165be6ee19
+7952becd780c414acbfacaa1a5712da00f7aba8e62b1122ffe6853ae103e8481
+8855c70c15782a6342d2602e715d553d9bbfc9c3c5b8e0661ec0f4498530c97a
+afb833a68e98c16901c6c70aef6ef303f9f1ab603085fee230d086fbaea5cf34
+1e9ea3d16e58a24ce0dbf664a605429e50930a2b29a1c45a01b5126b0efce248
+4ac57548de3adbd362a7d3f1f8e99b79c1e46d241195e9d8dc49b8111b36195f
+fad7db28630bbb2023a316301d82e3562f0554e0b1c16819ec9e836d338baab0
+82a619a39fdbd95ea5b2c7b96d28234f17eec431df24f200e94f2dad9d1f9eba
+8602eeaf0ebc3a16c77c109b33a77de490a5def568d2b120e48f36c49b71f219
+64602ba574d1c5ef73d6b6abdbc78ba8afb1fe83bb055ab688f986e0608f708b
+045272644d9cb83e2b6ea88e934117e837fd18eed15aad674a35f74edf49cac9
+2f41806552789b4017af81e9adb4417da096
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 25 /pi put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+/UniqueXX 5087385 def
+currentdict end
+currentfile eexec
+80347982ab3942d930e069a70d0d48311d725e830d1c76fba12e12486e989c98
+74c2b527f0925722787027f44470d484262c360cdfdddf3657533a57bb16f730
+48bfbbfcb73a650484015441fdc837add94ac8fbd2022e3ec8f115d4b4bb7b7f
+15388f22cc6198efe768bd9fceb3446ee4a8dc27d6cd152485384ef5f59381ff
+da43f2d20c8fb08aa27ab2015b774db10dacfdcd33e60f178c461553146ab427
+bdd7da12534ba078ad3d780414930da4f8d58abefd45db119b10eb409dd89792
+3c6e705479464a4b310b58348c4b42393988fef4925cf984423aaf65fea9f0e6
+4629953bcf50b919d968d99bd185f83112b2759cc411764e9bde677f57c5ee5a
+c555448d5f81a16259ded1e11bf4119d53e8ab07a802df900d3a2d5ccc1c6876
+d29c5e9effb7af3ef83400b0910c07873a8c56fa7b1eb1ba426043b00cc95dbe
+dc6e136cbbbcb3f67509964f9f281ebf81fe5b018122eaf66c4a838487e82e18
+6e006093042848a903efb3469ab6b4049767aadb95c30408dfd58d8a10f4cb22
+168decd9f3ee100f07b49aa44c92139b669cc312ba20192454eb2375be6284b0
+26659d964b96ae82d4942e758027fcf23c25ed01115af27ce7f20efe2a822bb6
+84004f20243a49c9e93301fc21b80815c033c3e2ba58ef53da2157d524b395f2
+b37abca13bc6a2f42e824ab7e47106176b0d6db267fbb795ac7425582df2e3dc
+55863468a9200742bd7b552c48f8cf58bc21343bd3b95abfa140f33f37c6f3f7
+8b0d8a5154eb7c1f62ec598267f13e841a3e64172663935ac8b665d86540d316
+ddece329c008049c5e74b27d59022c5515059bc3b89370b1bc6a169c888bb325
+e0b74282d6f053a50da4024ed1e433271a32ab8c17d41c632b41cf9f3ecd5fe1
+24daf7aea7ce8a63047b245822930d517df7baaafa69d2d17f7d93cebd45416d
+f3459365434123a76ccf883a4973bab19807e1f0c4bab03a45f7ed69ff2660ff
+3963e4def11001eec4238c368a39d874fd30b3c14f4186ec7700fbce22abe468
+eb32baf7b0164f8f21a9b5e706b91411faaa44467cb2180ab03de375c1ab93e9
+76e11ab92fdd4a7280a6d1a8dc65c4c89d04c8ed6988045a2a3de9a4c7b1efd3
+75b039396b2b2fbce3411457e1e57ac7a384d9b78115e83ab521e184b967ce5c
+e092e438389425a12f58dbee0001e7033a91d3b0e9a125333f45f35d430550fe
+ad3202aaba81a150b1ec34728f8109d39d5d163a57da9a47ba373d1b86f2da4e
+be09454415d644e1fbef933f8663390912ad15247dc543b417fd9bedec05f8f3
+7c9d5b173ec38cc7f61452a942023c17f01220547a06962ba53adb46b82005e8
+7113e70e9981ff1e37e6834c8d29ce11c6e0f91bc9924d48fa5a127b031e466a
+c9699299989c92487f88e1d6e59e6d4ec5461b68b3979cd8ecc13bbef603d714
+d5ca9341d79f2ab6e200cec023020841b2598b2489c4d54fd35753081acda3da
+6f6afa5ce44b46391fce0e84f4e05f6f343b3f0501e546fd1aaf73cd8d640a99
+7e237bc5ebe85b1a4adee6abf5cb4566ad001acc34fe95b8cbf74a67d94334f2
+ac6d7f5e327ac1336ab13a94da916532d6d68bc5783a02dcb7da158002a16151
+35483906b884df3c115d3751002afe38e2fa21678b40e26d26da7c5303720f54
+89a88633e03555724710902a4c266afad5d1d9799bfc5191fae942b6f85fad06
+d4939cf5ed9d86126067a3a16fe186899d100e135d03abc11192cb965c57b743
+9d1bba286487e5e44d8e2cf3f9f2eb973924bf0d152aa1f0361b1622c506bc56
+2a74e050f5da01d948bb4bb9bb69ee09581866a640dd234915ad9ab104ab7281
+bcdf80110e85e9c2082741975d8f94c85ddd8e22ef84c4611b11879a9a4394cc
+25a09db1146baf1f8721c71713315ba274dc1850138421fec50e4b71155d6b74
+01951cb91214ecdad8ac19a19cad86c5e2a01912d9d439b1a19b734649784e5f
+bc9928792b040831e51b54043400194377d0ea5b0a4aca856e15e0657b163021
+07fecb822d7e706230d29fd6c17f95d5a3507af0f81594633fa734232d908889
+b6b1726f2ed970b85b27141f0d5cfe699dc6f07b8a0efbf71a5ac51ba4c6c057
+e2688073c8748e6e60cdfd716286e7b79b0b1d3cab2e8d3d801d3fcfce711d69
+42395895aba13f4084ce84787dd45f77412d4bb6fb7561f17cfecda1e257fcaf
+4b44b392d5660bdbab2f86a4ccca2255fd2f1b957a556f53f77156d539c70790
+e30582bc3f6e9b0b584bfa8af5b92a6ec1582c3086be1704fe1dbf9f48e74aaf
+f0a824b9f37d7bd5c6d05028955d2b42dc4023b4c2c91ea823ea4ecdecaae79c
+5cee
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+%%BeginFont: CMEX10
+%!PS-AdobeFont-1.1: CMEX10 1.00
+%%CreationDate: 1992 Jul 23 21:22:48
+
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMEX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMEX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 116 /radicalbt put
+dup 117 /radicalvertex put
+dup 118 /radicaltp put
+readonly def
+/FontBBox{-24 -2960 1454 772}readonly def
+/UniqueXX 5000774 def
+currentdict end
+currentfile eexec
+80347982ab3942d930e069a70d0d48311d7190fa2d133a583138f76695558e7a
+e9348d37cac6651806d08527c1bb4a062a4835ac37784cc39ad8841404e438b4
+d52d3901e47a1de4f7924e0fb3daf442499175bab1226edf692a4956739f8828
+e80592f450c5d5c22ac88bcfbe9748f61d18243a16f4a4467f084e8e2be46ef4
+7fc51c3a8199e3cda62ff9c4fb73956dab8b6683d2156377808cb35026073e80
+523f59a30d195fcf9b9fce4ffafc6d5649664203ab24acb938d58d246707ffe7
+d62f04bec4b70c21ef75beb2b812622b3c74e969d72d3cd11bd7106294a99caf
+0b1629bc7d4de6b96ca82930831d64575f23f4ad06a0e45e315b1d392411be8d
+6d73c998789ff258a07a3c8c2057325784514c845500bfd1a971310cfc11d41c
+1a167dbd5ff012c60add4e87325f6e5299032a839de65fb1473a166aae1876a4
+414a434f22c1d241591fb36f857df6fa930608750ffc0c54f44994662b1f00f1
+400bf752ea8d83ffc4cb77a290bc2d99981ae59a191748ba5c7ba1a9d2583fd2
+1398452b6ff5d83a059f7eadcd2ef744e9dd22bdf9c79d049bf06835e878c32b
+7765c69bdd8ef4deb4ea7cfff4cf9354a4ddffa689de961d16772491c7afbd7f
+ffde42400764c68e954ee5c455a5687959829bc3b319b2147deaab3628662c80
+30c5e02fea09609abe4eaa12e217bc3af673f1bc36a7039eb13fcacb4218fe0f
+c5a3f9452d4edf46cc91db67b624d4f2d37502fb9f11af4da18ca40b61097f95
+d44329375467ed13c5cb585ec53f62b83ef9502cc755af44bf32b87b8ae9f3f2
+f8dbf72dab90acafbacd280db6aaffaefdff6d5eff26669bac56280a950560e3
+d01714ba38659b0e4e28bf8cdc1f15ff7e3ea9d95a6afbbe3d8e6905aa6d531d
+6b6dcab89e2036cc492c65f76ddcc3cfcff33fde3d9ffd10f7a90530fd5c7683
+4329baa902e701ca42717476298c9ff511b1941244bb1dfd0e5cab92a43970cd
+1bdb292eadd055c97972844fdcdb0aa06401e7b2632b9d134f96bce0064860f3
+9859da7a9a82be0a840672a1331212752ae1b521b693b384a72dba8d37a86eaf
+a0341e7fc5f6ef7a8c566aacb91e8bf5005c18837894c4eacff41dba54e071ca
+83f80e7f256d4fe2fde6e2408ec819f8fecbb87409f8f9c35a722494d279b0d2
+9ef6281f11d144eb362d34c20dfc58ead6a17cb0429ca22b44d307134497d1db
+e12b46cb16bf4aeb600463d05ec3d04ff464f4d61be7feeb7a3805b3f767bef6
+240d59d8a026581e5ecfadb595fbcfc59ee1f1f88fb995319fa99b744a274972
+c95971a00bdf7c2ca0b47856e2caa561a22a7ba32de87c5075cb4dc4ad680dba
+d837e74bb0c64aaf1287e059946a83dff78831b493841179583dfa0a42f1e08d
+71f5406eba065f25c1f724a2b9e37855f7decf7de70d0efe5bf63250acf798eb
+2ab1bef909a76568800af7d5d44ad80383a913815490e3c2fb9e9284fb3aa8f8
+46bdcdfa944e757faef290bf48db6dea131ef5d7f107e5690926edfc34651323
+b0608622983f92e99ce363df17a81967f2adb131e18aac3639c947b81da87849
+2efa86cb8a1973900d843a579cebbe2a7f43558296b6475c4d96243803d45715
+8056da4a158b7bcb9d1e762ce646d1c6f7cc7b15b92cbad4ab4977e184835fca
+5d1a60816a969cc18609160740c903af208babd9bbf51315eedb5f0bef81e223
+eee2b49b8f7b
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+
+%%EndFont
+TeXDict begin 39158280 55380996 1000 300 300 (./testdata/dvipstst.xdv)
+@start /Fa 25[48 6[33 24[63 17[22 11[22 11[48 4[66 10[63
+3[22 16[44 29 37 18 26 26 1[33 33 37 52 18 2[18 37 1[22
+29 33 29 1[33 23[26 4[48 21[17 6[22 21[18 13[37 3[{
+TeXBase1Encoding ReEncodeFont}33 66.4176 /Times-BoldItalic
+rf /Fb 138[22 22 22 22 2[22 2[22 5[22 22 3[22 4[22 92[{}10
+41.511 /CMTT10 rf /Fc 214[42 7[42 32[32{}3 41.511 /CMSY10
+rf /Fd 128[21 2[42 2[22 22 30 22 23 16 16 16 22 23 21
+23 35 12 22 1[12 23 21 13 18 23 18 23 21 12 1[21 1[21
+2[31 31 3[30 23 31 1[28 6[15 2[27 28 32 30 1[31 3[32
+1[12 2[21 1[21 21 21 2[21 2[12 14 12 2[16 16 12 4[21
+3[42 37 1[32 30 21 5[21 2[12 35 1[23 23 12[{}65 41.511
+/CMR10 rf /Fe 156[18 18 22 71[24 25[{}4 41.511 /CMMI10
+rf /Ff 137[44 44 44 116[{}3 41.511 /CMEX10 rf /Fg 152[208
+103[{TeXBase1Encoding ReEncodeFont}1 415.11 /Times-Italic
+rf /Fh 137[42 1[23 32 28 1[42 42 5[23 3[37 1[37 10[60
+1[60 1[51 46 2[46 6[28 2[46 51 60 2[60 6[23 58[{
+TeXBase1Encoding ReEncodeFont}20 83.022 /Times-Roman
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: A4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -225 -200 2331 25 v -225 3108 25 3309 v 325 -77
+a Fh(D)m(VIPS:)21 b(A)g(T)724 -58 y(E)764 -77 y(X)f(Dri)n(v)o(er)g(F)o
+(or)f(PostScript)836 238 y Fg(g)-225 695 y @beginspecial
+@setspecial
+ 0 36 translate .05 .099 .95 { 27.4 0 translate gsave 0 0 moveto dup
+90 mul rotate -10 -10 rmoveto 20 0 rlineto 0 20 rlineto -20 0 rlineto
+closepath gsave dup setgray fill grestore 1 exch sub setgray stroke
+grestore 27.4 0 translate } for
+
+@endspecial 441 770 a Ff(v)441 794 y(u)441
+818 y(u)441 843 y(u)441 868 y(u)441 893 y(u)441 918 y(u)441
+943 y(u)441 968 y(t)p 485 770 954 2 v -180 x(v)485 811
+y(u)485 836 y(u)485 861 y(u)485 885 y(u)485 910 y(u)485
+935 y(u)485 960 y(t)p 529 788 910 2 v 865 828 a Fe(a)12
+b Fd(=)-7 b Fc(\))11 b Fe(b)g Fc(\000)-6 b(!)11 b Fe(c)p
+534 846 900 2 v 534 880 a Fd(the)17 b(phase)f(of)f(the)i(mo)q(on)e(m)o
+(ultiplied)f(b)o(y)i(the)h(n)o(um)o(b)q(er)534 930 y(of)10
+b(angels)h(that)g(can)g(dance)h(on)f(the)h(head)f(of)f(a)h(pin)f(while)
+534 980 y(the)18 b(ric)o(h)f(man)f(threads)i(the)g(needle)g(divided)e
+(b)o(y)h Fe(\031)h Fd(or)534 1030 y(some)c(other)g(transcenden)o(tal)i
+(n)o(um)o(b)q(er)-158 2836 y @beginspecial 18 @llx 18
+@lly 577 @urx 814 @ury 2796 @rwi @setspecial @endspecial
+1090 1185 a(T)m(o)i(run)g(this)h(test,)h(remo)o(v)o(e)e(a)g(\014le)h
+(called)f(m)o(test.ps)g(if)g(it)1049 1235 y(exists.)36
+b(Then,)21 b(run)f(T)1429 1244 y(E)1452 1235 y(X)g(o)o(v)o(er)g
+(test.tex,)i(run)e(dvips)g(o)o(v)o(er)1049 1285 y(test.dvi,)10
+b(sa)o(ving)g(the)h(output)f(in)g(a)g(\014le)g(test.ps.)18
+b(Cop)o(y)10 b(test.ps)1049 1335 y(to)17 b(m)o(test.ps.)29
+b(Run)17 b(dvips)g(o)o(v)o(er)g(test.dvi)h(again,)e(this)i(time)1049
+1385 y(prin)o(ting)9 b(or)h(sa)o(ving)f(the)h(output,)h(as)f(y)o(ou)f
+(c)o(ho)q(ose.)18 b(\(Including)1049 1434 y(the)12 b(do)q(cumen)o(t)h
+(to)q(o)f(man)o(y)f(times)h(inside)g(itself)g(will)f(o)o(v)o(er\015o)o
+(w)1049 1484 y(the)j(virtual)f(memory)h(capacities)g(of)f(most)h(prin)o
+(ters.\))1090 1565 y(Some)i(things)g(to)g(c)o(hec)o(k)i(on)e(this)g
+(page.)25 b(First,)17 b(the)g(large)1049 1615 y(rules)c(surrounding)f
+(the)h(page)g(should)f(b)q(e)h(exactly)f(one)h(quar-)1049
+1665 y(ter)i(inc)o(h)f(from)g(eac)o(h)h(b)q(order)h(\(assuming)e(a)g
+(8.5)g(b)o(y)g(11)g(page;)1049 1715 y(for)c(an)g(a4)g(page,)h(c)o
+(hange)g(the)g Fb(\\afourfalse)d Fd(to)j Fb(\\afourtrue)1049
+1765 y Fd(on)i(line)h(16.\))1090 1845 y(Y)m(ou)f(should)g(see)i(a)e
+(title)g(at)g(the)h(top,)f(and)g(a)g(large)g(italic)f(g)1049
+1895 y(under)f(that.)17 b(Then,)11 b(there)g(should)g(b)q(e)g(a)f(cen)o
+(tered)i(ro)o(w)e(of)g(ten)1049 1945 y(b)q(o)o(xes,)k(going)e(from)h
+(dark)h(to)g(ligh)o(t)f(gra)o(y)m(,)f(rotating)h(slo)o(wly)m(.)1090
+2026 y(In)18 b(the)h(`equation')d(that)i(follo)o(ws,)f(c)o(hec)o(k)i
+(the)g(upp)q(er)g(left)1049 2076 y(corner)g(of)e(the)i(radical)f(signs)
+g(for)f(alignmen)o(t.)30 b(Also)18 b(c)o(hec)o(k)1049
+2126 y(the)c(righ)o(t)g(arro)o(ws.)1090 2207 y(In)e(the)h(recursiv)o
+(ely)g(included)f(page)g(to)g(the)h(left,)f(note)g(ho)o(w)1049
+2256 y(bad)g(the)i(bitmapp)q(ed)e(fon)o(ts)h(lo)q(ok)f(\(they)i(are)f
+(the)g(ones)h(under)1049 2306 y(the)g(radical,)f(and)g(indeed)i(this)f
+(text)g(itself.\))k(The)c(thin)g(rules)1049 2356 y(ma)o(y)g(disapp)q
+(ear)i(altogether.)23 b(This)16 b(p)q(oin)o(ts)f(out)g(the)h(resolu-)
+1049 2406 y(tion)11 b(dep)q(endence)j(of)d(dvips)h(output;)g(this)g(is)
+g(an)f(unfortunate)1049 2456 y(necessit)o(y)23 b(of)d(using)h(bitmapp)q
+(ed)h(fon)o(ts.)40 b(The)22 b(P)o(ostScript)1049 2506
+y(fon)o(ts,)13 b(on)h(the)g(other)h(hand,)e(should)g(scale)i(\014ne.)
+1090 2586 y(Finally)m(,)c(at)h(the)i(b)q(ottom)e(of)g(the)h(page,)g(y)o
+(ou)f(will)f(see)j(some)1049 2636 y(tests)f(of)f(the)g(accen)o(ts)i(in)
+e(the)h(P)o(ostScript)f(fon)o(ts.)18 b(P)o(a)o(y)11 b(careful)1049
+2686 y(atten)o(tion)18 b(to)g(the)h(w)o(ord)f(na)-5 b(\177)-16
+b(\020v)o(e;)20 b(there)g(should)e(b)q(e)h(an)f(um-)1049
+2736 y(laut)e(o)o(v)o(er)h(a)g(dotless)h(i.)27 b(The)17
+b(text)h(should)e(read)i(\\Ic)o(h)f(w)o(ei\031)1049 2786
+y(tats\177)-21 b(ac)o(hlic)o(h)15 b(nic)o(h)o(t)f(mehr)i(als)e(das.)22
+b(D\032monic)14 b(sou\017)o(\023)-20 b(es)16 b(ha)o(v)o(e)1049
+2836 y(no)d(r^)-21 b(ole)14 b(in)g(na)-5 b(\177)-16 b(\020v)o(e)13
+b(\033uvres.)19 b(|\035sop's)14 b(\036uvres.")100 2963
+y Fa(Ic)o(h)25 b(w)o(ei\337)i(tats)467 2962 y(\250)461
+2963 y(ac)o(hlich)g(nic)o(ht)g(mehr)d(als)i(das.)48 b(D\346monic)25
+b(souf)o(\003)1729 2962 y(\264)1725 2963 y(es)100 3027
+y(hav)o(e)18 b(no)e(r)363 3026 y(\210)357 3027 y(ole)i(in)f(na)595
+3026 y(\250)597 3027 y(\021v)o(e)h(\234uvres.)24 b(\227\306sop')-5
+b(s)17 b(\214uvres.)p 2080 3108 25 3309 v -225 3133 2331
+25 v eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
+
+%%EndDocument
+ @endspecial 1090 1185 a(T)m(o)i(run)g(this)h(test,)h(remo)o(v)o(e)e(a)
+g(\014le)h(called)f(m)o(test.ps)g(if)g(it)1049 1235 y(exists.)36
+b(Then,)21 b(run)f(T)1429 1244 y(E)1452 1235 y(X)g(o)o(v)o(er)g
+(test.tex,)i(run)e(dvips)g(o)o(v)o(er)1049 1285 y(test.dvi,)10
+b(sa)o(ving)g(the)h(output)f(in)g(a)g(\014le)g(test.ps.)18
+b(Cop)o(y)10 b(test.ps)1049 1335 y(to)17 b(m)o(test.ps.)29
+b(Run)17 b(dvips)g(o)o(v)o(er)g(test.dvi)h(again,)e(this)i(time)1049
+1385 y(prin)o(ting)9 b(or)h(sa)o(ving)f(the)h(output,)h(as)f(y)o(ou)f
+(c)o(ho)q(ose.)18 b(\(Including)1049 1434 y(the)12 b(do)q(cumen)o(t)h
+(to)q(o)f(man)o(y)f(times)h(inside)g(itself)g(will)f(o)o(v)o(er\015o)o
+(w)1049 1484 y(the)j(virtual)f(memory)h(capacities)g(of)f(most)h(prin)o
+(ters.\))1090 1565 y(Some)i(things)g(to)g(c)o(hec)o(k)i(on)e(this)g
+(page.)25 b(First,)17 b(the)g(large)1049 1615 y(rules)c(surrounding)f
+(the)h(page)g(should)f(b)q(e)h(exactly)f(one)h(quar-)1049
+1665 y(ter)i(inc)o(h)f(from)g(eac)o(h)h(b)q(order)h(\(assuming)e(a)g
+(8.5)g(b)o(y)g(11)g(page;)1049 1715 y(for)c(an)g(a4)g(page,)h(c)o
+(hange)g(the)g Fb(\\afourfalse)d Fd(to)j Fb(\\afourtrue)1049
+1765 y Fd(on)i(line)h(16.\))1090 1845 y(Y)m(ou)f(should)g(see)i(a)e
+(title)g(at)g(the)h(top,)f(and)g(a)g(large)g(italic)f(g)1049
+1895 y(under)f(that.)17 b(Then,)11 b(there)g(should)g(b)q(e)g(a)f(cen)o
+(tered)i(ro)o(w)e(of)g(ten)1049 1945 y(b)q(o)o(xes,)k(going)e(from)h
+(dark)h(to)g(ligh)o(t)f(gra)o(y)m(,)f(rotating)h(slo)o(wly)m(.)1090
+2026 y(In)18 b(the)h(`equation')d(that)i(follo)o(ws,)f(c)o(hec)o(k)i
+(the)g(upp)q(er)g(left)1049 2076 y(corner)g(of)e(the)i(radical)f(signs)
+g(for)f(alignmen)o(t.)30 b(Also)18 b(c)o(hec)o(k)1049
+2126 y(the)c(righ)o(t)g(arro)o(ws.)1090 2207 y(In)e(the)h(recursiv)o
+(ely)g(included)f(page)g(to)g(the)h(left,)f(note)g(ho)o(w)1049
+2256 y(bad)g(the)i(bitmapp)q(ed)e(fon)o(ts)h(lo)q(ok)f(\(they)i(are)f
+(the)g(ones)h(under)1049 2306 y(the)g(radical,)f(and)g(indeed)i(this)f
+(text)g(itself.\))k(The)c(thin)g(rules)1049 2356 y(ma)o(y)g(disapp)q
+(ear)i(altogether.)23 b(This)16 b(p)q(oin)o(ts)f(out)g(the)h(resolu-)
+1049 2406 y(tion)11 b(dep)q(endence)j(of)d(dvips)h(output;)g(this)g(is)
+g(an)f(unfortunate)1049 2456 y(necessit)o(y)23 b(of)d(using)h(bitmapp)q
+(ed)h(fon)o(ts.)40 b(The)22 b(P)o(ostScript)1049 2506
+y(fon)o(ts,)13 b(on)h(the)g(other)h(hand,)e(should)g(scale)i(\014ne.)
+1090 2586 y(Finally)m(,)c(at)h(the)i(b)q(ottom)e(of)g(the)h(page,)g(y)o
+(ou)f(will)f(see)j(some)1049 2636 y(tests)f(of)f(the)g(accen)o(ts)i(in)
+e(the)h(P)o(ostScript)f(fon)o(ts.)18 b(P)o(a)o(y)11 b(careful)1049
+2686 y(atten)o(tion)18 b(to)g(the)h(w)o(ord)f(na)-5 b(\177)-16
+b(\020v)o(e;)20 b(there)g(should)e(b)q(e)h(an)f(um-)1049
+2736 y(laut)e(o)o(v)o(er)h(a)g(dotless)h(i.)27 b(The)17
+b(text)h(should)e(read)i(\\Ic)o(h)f(w)o(ei\031)1049 2786
+y(tats\177)-21 b(ac)o(hlic)o(h)15 b(nic)o(h)o(t)f(mehr)i(als)e(das.)22
+b(D\032monic)14 b(sou\017)o(\023)-20 b(es)16 b(ha)o(v)o(e)1049
+2836 y(no)d(r^)-21 b(ole)14 b(in)g(na)-5 b(\177)-16 b(\020v)o(e)13
+b(\033uvres.)19 b(|\035sop's)14 b(\036uvres.")100 2963
+y Fa(Ic)o(h)25 b(w)o(ei\337)i(tats)467 2962 y(\250)461
+2963 y(ac)o(hlich)g(nic)o(ht)g(mehr)d(als)i(das.)48 b(D\346monic)25
+b(souf)o(\003)1729 2962 y(\264)1725 2963 y(es)100 3027
+y(hav)o(e)18 b(no)e(r)363 3026 y(\210)357 3027 y(ole)i(in)f(na)595
+3026 y(\250)597 3027 y(\021v)o(e)h(\234uvres.)24 b(\227\306sop')-5
+b(s)17 b(\214uvres.)p 2080 3108 25 3309 v -225 3133 2331
+25 v eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Build/source/texk/dvipsk/testdata/psfonts.map b/Build/source/texk/dvipsk/testdata/psfonts.map
new file mode 100644
index 00000000000..12cbe35d25d
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/psfonts.map
@@ -0,0 +1,104 @@
+cmb10 CMB10 <cmb10.pfb
+cmbsy10 CMBSY10 <cmbsy10.pfb
+cmbx10 CMBX10 <cmbx10.pfb
+cmbx12 CMBX12 <cmbx12.pfb
+cmbx5 CMBX5 <cmbx5.pfb
+cmbx6 CMBX6 <cmbx6.pfb
+cmbx7 CMBX7 <cmbx7.pfb
+cmbx8 CMBX8 <cmbx8.pfb
+cmbx9 CMBX9 <cmbx9.pfb
+cmbxsl10 CMBXSL10 <cmbxsl10.pfb
+cmbxti10 CMBXTI10 <cmbxti10.pfb
+cmcsc10 CMCSC10 <cmcsc10.pfb
+cmdunh10 CMDUNH10 <cmdunh10.pfb
+cmex10 CMEX10 <cmex10.pfb
+cmff10 CMFF10 <cmff10.pfb
+cmfi10 CMFI10 <cmfi10.pfb
+cmfib8 CMFIB8 <cmfib8.pfb
+cminch CMINCH <cminch.pfb
+cmitt10 CMITT10 <cmitt10.pfb
+cmmi10 CMMI10 <cmmi10.pfb
+cmmi12 CMMI12 <cmmi12.pfb
+cmmi5 CMMI5 <cmmi5.pfb
+cmmi6 CMMI6 <cmmi6.pfb
+cmmi7 CMMI7 <cmmi7.pfb
+cmmi8 CMMI8 <cmmi8.pfb
+cmmi9 CMMI9 <cmmi9.pfb
+cmmib10 CMMIB10 <cmmib10.pfb
+cmr10 CMR10 <cmr10.pfb
+cmr12 CMR12 <cmr12.pfb
+cmr17 CMR17 <cmr17.pfb
+cmr5 CMR5 <cmr5.pfb
+cmr6 CMR6 <cmr6.pfb
+cmr7 CMR7 <cmr7.pfb
+cmr8 CMR8 <cmr8.pfb
+cmr9 CMR9 <cmr9.pfb
+cmsl10 CMSL10 <cmsl10.pfb
+cmsl12 CMSL12 <cmsl12.pfb
+cmsl8 CMSL8 <cmsl8.pfb
+cmsl9 CMSL9 <cmsl9.pfb
+cmsltt10 CMSLTT10 <cmsltt10.pfb
+cmss10 CMSS10 <cmss10.pfb
+cmss12 CMSS12 <cmss12.pfb
+cmss17 CMSS17 <cmss17.pfb
+cmss8 CMSS8 <cmss8.pfb
+cmss9 CMSS9 <cmss9.pfb
+cmssbx10 CMSSBX10 <cmssbx10.pfb
+cmssdc10 CMSSDC10 <cmssdc10.pfb
+cmssi10 CMSSI10 <cmssi10.pfb
+cmssi12 CMSSI12 <cmssi12.pfb
+cmssi17 CMSSI17 <cmssi17.pfb
+cmssi8 CMSSI8 <cmssi8.pfb
+cmssi9 CMSSI9 <cmssi9.pfb
+cmssq8 CMSSQ8 <cmssq8.pfb
+cmssqi8 CMSSQI8 <cmssqi8.pfb
+cmsy10 CMSY10 <cmsy10.pfb
+cmsy5 CMSY5 <cmsy5.pfb
+cmsy6 CMSY6 <cmsy6.pfb
+cmsy7 CMSY7 <cmsy7.pfb
+cmsy8 CMSY8 <cmsy8.pfb
+cmsy9 CMSY9 <cmsy9.pfb
+cmtcsc10 CMTCSC10 <cmtcsc10.pfb
+cmtex10 CMTEX10 <cmtex10.pfb
+cmtex8 CMTEX8 <cmtex8.pfb
+cmtex9 CMTEX9 <cmtex9.pfb
+cmti10 CMTI10 <cmti10.pfb
+cmti12 CMTI12 <cmti12.pfb
+cmti7 CMTI7 <cmti7.pfb
+cmti8 CMTI8 <cmti8.pfb
+cmti9 CMTI9 <cmti9.pfb
+cmtt10 CMTT10 <cmtt10.pfb
+cmtt12 CMTT12 <cmtt12.pfb
+cmtt8 CMTT8 <cmtt8.pfb
+cmtt9 CMTT9 <cmtt9.pfb
+cmu10 CMU10 <cmu10.pfb
+cmvtt10 CMVTT10 <cmvtt10.pfb
+lasy10 LASY10 <lasy10.pfb
+lasy5 LASY5 <lasy5.pfb
+lasy6 LASY6 <lasy6.pfb
+lasy7 LASY7 <lasy7.pfb
+lasy8 LASY8 <lasy8.pfb
+lasy9 LASY9 <lasy9.pfb
+lasyb10 LASYB10 <lasyb10.pfb
+lcircle10 LCIRCLE10 <lcircle1.pfb
+lcirclew10 LCIRCLEW10 <lcirclew.pfb
+lcircle1 LCIRCLE10 <lcircle1.pfb
+lcirclew LCIRCLEW10 <lcirclew.pfb
+lcmss8 LCMSS8 <lcmss8.pfb
+lcmssb8 LCMSSB8 <lcmssb8.pfb
+lcmssi8 LCMSSI8 <lcmssi8.pfb
+line10 LINE10 <line10.pfb
+linew10 LINEW10 <linew10.pfb
+logo10 LOGO10 <logo10.pfb
+logo8 LOGO8 <logo8.pfb
+logo9 LOGO9 <logo9.pfb
+logobf10 LOGOBF10 <logobf10.pfb
+logosl10 LOGOSL10 <logosl10.pfb
+ptmb8r Times-Bold "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmbi8r Times-BoldItalic "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmbo8r Times-Bold ".167 SlantFont TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmr8r Times-Roman "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmri8r Times-Italic "TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmro8r Times-Roman ".167 SlantFont TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmrre8r Times-Roman "1.2 ExtendFont TeXBase1Encoding ReEncodeFont" <8r.enc
+ptmrrn8r Times-Roman ".82 ExtendFont TeXBase1Encoding ReEncodeFont" <8r.enc
diff --git a/Build/source/texk/dvipsk/testdata/ptmbi.vf b/Build/source/texk/dvipsk/testdata/ptmbi.vf
new file mode 100644
index 00000000000..cf5bde827d7
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/ptmbi.vf
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/ptmbi8r.tfm b/Build/source/texk/dvipsk/testdata/ptmbi8r.tfm
new file mode 100644
index 00000000000..8c9a366fb31
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/ptmbi8r.tfm
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/ptmr.vf b/Build/source/texk/dvipsk/testdata/ptmr.vf
new file mode 100644
index 00000000000..58c76028edb
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/ptmr.vf
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/ptmr8r.tfm b/Build/source/texk/dvipsk/testdata/ptmr8r.tfm
new file mode 100644
index 00000000000..3fa1c10a4c3
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/ptmr8r.tfm
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/ptmri.vf b/Build/source/texk/dvipsk/testdata/ptmri.vf
new file mode 100644
index 00000000000..1bfdd4a0de2
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/ptmri.vf
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/ptmri8r.tfm b/Build/source/texk/dvipsk/testdata/ptmri8r.tfm
new file mode 100644
index 00000000000..b4fc44501cb
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/ptmri8r.tfm
Binary files differ
diff --git a/Build/source/texk/dvipsk/testdata/special.pro b/Build/source/texk/dvipsk/testdata/special.pro
new file mode 100644
index 00000000000..e0c9faa6ec6
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/special.pro
@@ -0,0 +1,56 @@
+%!
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
diff --git a/Build/source/texk/dvipsk/testdata/texc.pro b/Build/source/texk/dvipsk/testdata/texc.pro
new file mode 100644
index 00000000000..1cbc36a57f0
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/texc.pro
@@ -0,0 +1,60 @@
+%!
+/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
+/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
+gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
+add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
+/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
+dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
+adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
+idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
+adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
+{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
+adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
+chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
+put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
+/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
+X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
+(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
+length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
+forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
diff --git a/Build/source/texk/dvipsk/testdata/texps.pro b/Build/source/texk/dvipsk/testdata/texps.pro
new file mode 100644
index 00000000000..45989d8f19d
--- /dev/null
+++ b/Build/source/texk/dvipsk/testdata/texps.pro
@@ -0,0 +1,10 @@
+%!
+TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2
+index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont /setfont cvx]cvx def}def /ObliqueSlant
+{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1
+roll mul exch}def /ReEncodeFont{/Encoding exch def}def end
diff --git a/Build/source/texk/dvipsk/tex.lpro b/Build/source/texk/dvipsk/tex.lpro
new file mode 100644
index 00000000000..f4ad44436e7
--- /dev/null
+++ b/Build/source/texk/dvipsk/tex.lpro
@@ -0,0 +1,351 @@
+% The following defines procedures assumed and used by program "dvips"
+% and must be downloaded or sent as a header file for all TeX jobs.
+% Originated by Neal Holtz, Carleton University, Ottawa, Canada
+% <holtz@cascade.carleton.cdn>
+% June, 1985
+%
+% Hacked by tgr, July 1987, stripped down to bare essentials,
+% plus a few new commands for speed.
+%
+% Hacked by don, December 1989, to give characters top down and to
+% remove other small nuisances; merged with tgr's compression scheme
+%
+% To convert this file into a downloaded file instead of a header
+% file, uncomment all of the lines beginning with %-%
+%
+% To observe available VM, uncomment the following.
+% (The first ten lines define a general 'printnumber' routine.)
+%
+% /VirginMtrx 6 array currentmatrix def
+% /dummystring 20 string def
+% /numberpos 36 def
+% /printnumber { gsave VirginMtrx setmatrix
+% /Helvetica findfont 10 scalefont setfont
+% 36 numberpos moveto
+% /numberpos numberpos 12 add def
+% dummystring cvs show
+% grestore
+% } bind def
+% /showVM { vmstatus exch sub exch pop printnumber } def
+% /eop-aux { showVM } def
+%
+%-%0000000 % Server loop exit password
+%-%serverdict begin exitserver
+%-% systemdict /statusdict known
+%-% {statusdict begin 9 0 3 setsccinteractive /waittimeout 300 def end}
+%-% if
+
+/TeXDict 300 dict def % define a working dictionary
+TeXDict begin % start using it.
+/N {def} def
+/B {bind def} N
+/S {exch} N
+/X { S N } B
+/A {dup} B
+/TR {translate} N
+
+% The output of dvips assumes pixel units, Resolution/inch, with
+% increasing y coordinates corresponding to moving DOWNWARD.
+% The PostScript default is big point units (bp), 72/inch, with
+% increasing y coordinates corresponding to moving UP; the
+% following routines handle conversion to dvips conventions.
+
+% Let the PostScript origin be (xps,yps) in dvips coordinates.
+
+/isls false N
+/vsize 11 72 mul N
+/hsize 8.5 72 mul N
+/landplus90 { false } def % make this true to flip landscape
+
+/@rigin % -xps -yps @rigin - establishes dvips conventions
+ { isls { [ 0 landplus90 { 1 -1 } { -1 1 } ifelse 0 0 0 ] concat } if
+ 72 Resolution div 72 VResolution div neg scale
+ isls { landplus90 { VResolution 72 div vsize mul 0 exch }
+ { Resolution -72 div hsize mul 0 } ifelse TR } if
+ Resolution VResolution vsize -72 div 1 add mul TR
+% As bad as setmatrix is, it is better than misalignment.
+ [ matrix currentmatrix
+ { A A round sub abs 0.00001 lt {round} if } forall
+ round exch round exch
+ ] setmatrix } N
+
+/@landscape { /isls true N } B
+
+/@manualfeed
+ { statusdict /manualfeed true put
+ } B
+
+ % n @copies - set number of copies
+/@copies
+ { /#copies X
+ } B
+
+% Bitmap fonts are called Fa, Fb, ..., Fz, F0, F1 . . . Ga . . .
+% The calling sequence for downloading font foo is
+% /foo df charde1 ... chardefn E
+% where each chardef is
+% <hexstring> wd ht xoff yoff dx charno D
+% or <hexstring> wd ht xoff yoff dx I
+% or <hexstring> charno D
+% or <hexstring> I
+
+/FMat [1 0 0 -1 0 0] N
+/FBB [0 0 0 0] N
+
+/nn 0 N /IEn 0 N /ctr 0 N
+/df-tail % id numcc maxcc df-tail -- initialize a new font dictionary
+ {
+% dmystr 2 fontname cvx (@@@@) cvs putinterval % put name in template
+ /nn 8 dict N % allocate new font dictionary
+ nn begin
+ /FontType 3 N
+ /FontMatrix fntrx N
+ /FontBBox FBB N
+ string /base X
+ array /BitMaps X
+ /BuildChar {CharBuilder} N
+ /Encoding IEn N
+ end
+ A { /foo setfont } % dummy macro to be filled in
+ 2 array copy cvx N % have to allocate a new one
+ load % now we change it
+% 0 dmystr 6 string copy % get a copy of the font name
+ 0 nn put
+% cvn cvx put % and stick it in the dummy macro
+ /ctr 0 N % go, count, and etc.
+ [ % start next char definition
+ } B
+/sf 0 N
+/df {
+ /sf 1 N
+ /fntrx FMat N
+ df-tail
+} B
+/dfs { div /sf X
+ /fntrx [ sf 0 0 sf neg 0 0 ] N
+ df-tail
+} B
+
+/E { pop nn A definefont setfont } B
+
+% the following is the only character builder we need. it looks up the
+% char data in the BitMaps array, and paints the character if possible.
+% char data -- a bitmap descriptor -- is an array of length 6, of
+% which the various slots are:
+
+/Cw {Cd A length 5 sub get} B % the number of pixels across
+/Ch {Cd A length 4 sub get} B % the number of pixels tall
+/Cx {128 Cd A length 3 sub get sub} B % num pixels right of origin
+/Cy {Cd A length 2 sub get 127 sub} B % number of pixels below origin
+/Cdx {Cd A length 1 sub get} B % number of pixels to next character
+/Ci {Cd A type /stringtype ne
+ { ctr get /ctr ctr 1 add N } if
+ } B % the hex string image, or array of same
+% begin code for uncompressed fonts only
+/CharBuilder % fontdict ch Charbuilder - -- image one character
+ {save 3 1 roll S A /base get 2 index get S /BitMaps get S get
+ /Cd X pop
+ /ctr 0 N
+ Cdx 0 Cx Cy Ch sub
+ Cx Cw add Cy
+ setcachedevice
+ Cw Ch true
+ [1 0 0 -1 -.1 Cx sub Cy .1 sub]
+ {Ci} imagemask
+ restore
+ } B
+% end code for uncompressed fonts only
+% % here's the alternate code for unpacking compressed fonts
+% /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N
+% /CharBuilder % fontdict ch Charbuilder - -- image one character
+% {save 3 1 roll S A /base get 2 index get S /BitMaps get S get
+% /Cd X pop
+% /ctr 0 N
+% Cdx 0 Cx Cy Ch sub
+% Cx Cw add Cy
+% setcachedevice
+% Cw Ch true
+% [1 0 0 -1 -.1 Cx sub Cy .1 sub]
+% /id Ci N % image data
+% /rw Cw 7 add 8 idiv string N % row, initially zero
+% /rc 0 N % repeat count
+% /gp 0 N % image data pointer
+% /cp 0 N % column pointer
+% { rc 0 ne { rc 1 sub /rc X rw } { G } ifelse } imagemask
+% restore
+% } B
+% /G { { id gp get /gp gp 1 add N
+% A 18 mod S 18 idiv pl S get exec } loop } B
+% /adv { cp add /cp X } B
+% /chg { rw cp id gp 4 index getinterval putinterval
+% A gp add /gp X adv } B
+% /nd { /cp 0 N rw exit } B
+% /lsh { rw cp 2 copy get A 0 eq { pop 1 } { A 255 eq { pop 254 }
+% { A A add 255 and S 1 and or } ifelse } ifelse put 1 adv } B
+% /rsh { rw cp 2 copy get A 0 eq { pop 128 } { A 255 eq { pop 127 }
+% { A 2 idiv S 128 and or } ifelse } ifelse put 1 adv } B
+% /clr { rw cp 2 index string putinterval adv } B
+% /set { rw cp fillstr 0 4 index getinterval putinterval adv } B
+% /fillstr 18 string 0 1 17 { 2 copy 255 put pop } for N
+% /pl [
+% { adv 1 chg }
+% { adv 1 chg nd }
+% { 1 add chg }
+% { 1 add chg nd }
+% { adv lsh }
+% { adv lsh nd }
+% { adv rsh }
+% { adv rsh nd }
+% { 1 add adv }
+% { /rc X nd }
+% { 1 add set }
+% { 1 add clr }
+% { adv 2 chg }
+% { adv 2 chg nd }
+% { pop nd } ] A { bind pop } forall N
+% % end of code for unpacking compressed fonts
+
+/D % char-data ch D - -- define character bitmap in current font
+ { /cc X
+ A type /stringtype ne {]} if
+ nn /base get cc ctr put
+ nn /BitMaps get S ctr S
+ sf 1 ne {
+ A A length 1 sub A 2 index S get sf div put
+ } if
+ put
+ /ctr ctr 1 add N
+ } B
+
+/I % a faster D for when the next char follows immediately
+ { cc 1 add D } B
+
+/bop % %t %d bop - -- begin a brand new page, %t=pageno %d=seqno
+ {
+ userdict /bop-hook known { bop-hook } if
+ /SI save N
+ @rigin
+%
+% Now we check the resolution. If it's correct, we use RV as V,
+% otherwise we use QV.
+%
+ 0 0 moveto
+ /V matrix currentmatrix
+ A 1 get A mul exch 0 get A mul add .99 lt
+ {/QV} {/RV} ifelse load def
+ pop pop
+ } N
+
+/eop % - eop - -- end a page
+ { % eop-aux % -- to observe VM usage
+ SI restore
+ userdict /eop-hook known { eop-hook } if
+ showpage
+ } N
+
+/@start % hsz vsz mag dpi vdpi name @start - -- start everything
+ {
+ userdict /start-hook known { start-hook } if
+ pop % the job name string is used only by start-hook
+ /VResolution X
+ /Resolution X
+ 1000 div /DVImag X
+ /IEn 256 array N
+ 2 string 0 1 255 { IEn S A 360 add 36 4 index cvrs cvn put } for pop
+ 65781.76 div /vsize X
+ 65781.76 div /hsize X
+ } N
+
+/p {show} N % the main character setting routine
+
+/RMat [ 1 0 0 -1 0 0 ] N % things we need for rules
+/BDot 260 string N
+/Rx 0 N /Ry 0 N
+%
+% What we need to do to get things to work here is tragic.
+%
+/V {} B /RV
+/v { % can't use ...fill; it makes rules too big
+ /Ry X /Rx X
+ V
+} B
+%
+% Which do we use? The first if we are talking to Display
+% PostScript, the latter otherwise.
+%
+statusdict begin /product where
+ { pop false [(Display) (NeXT) (LaserWriter 16/600)] {
+ A length product length le {
+ A length product exch 0 exch getinterval eq
+ { pop true exit } if
+ } { pop } ifelse
+ } forall }
+ { false } ifelse end
+{ {
+ gsave
+ TR -.1 .1 TR 1 1 scale Rx Ry
+ false RMat { BDot } imagemask
+ grestore
+} }
+{ {
+ gsave
+ TR -.1 .1 TR Rx Ry scale 1 1
+ false RMat { BDot } imagemask
+ grestore
+} } ifelse B
+%
+% We use this if the resolution doesn't match.
+%
+/QV {
+ gsave
+ newpath transform round exch round exch itransform moveto
+ Rx 0 rlineto 0 Ry neg rlineto
+ Rx neg 0 rlineto fill
+ grestore
+} B
+%
+/a { moveto } B % absolute positioning
+/delta 0 N % we need a variable to hold space moves
+%
+% The next ten macros allow us to make horizontal motions that
+% are within 4 of the previous horizontal motion with a single
+% character. These are typically used for spaces.
+%
+/tail { A /delta X 0 rmoveto } B
+/M { S p delta add tail } B
+/b { S p tail } B % show and tail!
+/c { -4 M } B
+/d { -3 M } B
+/e { -2 M } B
+/f { -1 M } B
+/g { 0 M } B
+/h { 1 M } B
+/i { 2 M } B
+/j { 3 M } B
+/k { 4 M } B
+%
+% These next allow us to make small motions (-4..4) cheaply.
+% Typically used for kerns.
+%
+/w { 0 rmoveto } B
+/l { p -4 w } B
+/m { p -3 w } B
+/n { p -2 w } B
+/o { p -1 w } B
+/q { p 1 w } B
+/r { p 2 w } B
+/s { p 3 w } B
+/t { p 4 w } B
+%
+% x is good for small vertical positioning.
+% And y is good for a print followed by a move.
+%
+/x { 0 S rmoveto } B
+/y { 3 2 roll p a } B
+%
+% The bos and eos commands bracket sections of downloaded characters.
+%
+/bos { /SS save N } B
+/eos { SS restore } B
+
+end % revert to previous dictionary
diff --git a/Build/source/texk/dvipsk/tex/blackdvi.tex b/Build/source/texk/dvipsk/tex/blackdvi.tex
new file mode 100644
index 00000000000..85e7fd38a28
--- /dev/null
+++ b/Build/source/texk/dvipsk/tex/blackdvi.tex
@@ -0,0 +1,109 @@
+% This is BLACKDVI.STY and BLACKDVI.TEX in text format, as of March 5,
+% 1992, written by Jim Hafner, HAFNER@ALMADEN, or hafner@almaden.ibm.com.
+% This file turns all color commands defined by COLORDVI.STY or COLORDVI.TEX
+% into no-ops and so can be used to get B/W printing without having to
+% ferret out all the color macros. Modified by Tomas Rokicki to be a
+% bit smaller.
+%
+% 20 Aug. 1992: Revised by J. Hafner, by adding \globalColor as a no-op.
+%
+% For example, with FoilTeX, just use
+% \documentstyle[blackdvi]{foils}
+% in place of
+% \documentstyle[colordvi]{foils}
+%
+% This file can be used anywhere COLORDVI.STY or COLORDVI.TEX is used. In
+% particular, It can be used in any flavor of LaTeX (e.g. LaTeX,
+% FoilTeX, AMS-LaTeX) by adding the keyword "blackdvi" to the options in
+% the \documentstyle command (e.g., "\documentstyle[blackdvi]{foils}") or
+% \input in any flavor of TeX (e.g. Plain TeX, eplain, AMS-TeX or any of
+% the above LaTeX flavors) with the command "\input blackdvi".
+%
+% Here is the background command
+\def\background#1{}%
+%
+% This is used to define all the \newColor macros defined by \newColor
+% as no-ops.
+\def\newColor #1 {\expandafter\def\csname text#1\endcsname{}%
+ \expandafter\def\csname #1\endcsname##1{##1}}%
+%
+% Here are the two macros used for user-definable colors
+\def\textColor#1{}
+\def\Color#1#2{#2}
+%
+% This is the macro that is used to protect certain regions of the
+% text from corruption by local color commands. See COLORDVI.STY for
+% more information. We make it a no-op in this style.
+\def\globalColor#1{#1}
+%
+% Here are the preset color names. This list should match the list
+% in <colordvi.[tex,sty]>.
+%
+\newColor GreenYellow
+\newColor Yellow
+\newColor Goldenrod
+\newColor Dandelion
+\newColor Apricot
+\newColor Peach
+\newColor Melon
+\newColor YellowOrange
+\newColor Orange
+\newColor BurntOrange
+\newColor Bittersweet
+\newColor RedOrange
+\newColor Mahogany
+\newColor Maroon
+\newColor BrickRed
+\newColor Red
+\newColor OrangeRed
+\newColor RubineRed
+\newColor WildStrawberry
+\newColor Salmon
+\newColor CarnationPink
+\newColor Magenta
+\newColor VioletRed
+\newColor Rhodamine
+\newColor Mulberry
+\newColor RedViolet
+\newColor Fuchsia
+\newColor Lavender
+\newColor Thistle
+\newColor Orchid
+\newColor DarkOrchid
+\newColor Purple
+\newColor Plum
+\newColor Violet
+\newColor RoyalPurple
+\newColor BlueViolet
+\newColor Periwinkle
+\newColor CadetBlue
+\newColor CornflowerBlue
+\newColor MidnightBlue
+\newColor NavyBlue
+\newColor RoyalBlue
+\newColor Blue
+\newColor Cerulean
+\newColor Cyan
+\newColor ProcessBlue
+\newColor SkyBlue
+\newColor Turquoise
+\newColor TealBlue
+\newColor Aquamarine
+\newColor BlueGreen
+\newColor Emerald
+\newColor JungleGreen
+\newColor SeaGreen
+\newColor Green
+\newColor ForestGreen
+\newColor PineGreen
+\newColor LimeGreen
+\newColor YellowGreen
+\newColor SpringGreen
+\newColor OliveGreen
+\newColor RawSienna
+\newColor Sepia
+\newColor Brown
+\newColor Tan
+\newColor Gray
+\newColor Black
+\newColor White
diff --git a/Build/source/texk/dvipsk/tex/colordvi.tex b/Build/source/texk/dvipsk/tex/colordvi.tex
new file mode 100644
index 00000000000..df812f8df60
--- /dev/null
+++ b/Build/source/texk/dvipsk/tex/colordvi.tex
@@ -0,0 +1,162 @@
+% This is COLORDVI.TEX and COLORDVI.STY in text format, as of
+% March 5, 1992, written by Jim Hafner, HAFNER@ALMADEN, or
+% hafner@almaden.ibm.com. Modified by Tomas Rokicki to be a
+% bit smaller and easier to add to.
+%
+% 20 Aug. 1992: Revised by J. Hafner, by adding \globalColor.
+%
+% This style file can be used to get color in TeX, LaTeX or more
+% importantly, FoilTeX as an optional style file. It is generic in
+% that the color parameters are determined by the driver's header files.
+%
+% It can be used with any driver which knows how to process the keywords
+% in the \special commands. Currently, only versions of dvips greater
+% than 5.478 (dvips is the DVI->PostScript driver by Tom Rokicki) and
+% TeXview on the NeXT interpret these specials.
+%
+% This file can be used in any flavor of LaTeX (e.g. LaTeX, FoilTeX,
+% AMS-LaTeX) by adding the keyword "colordvi" to the options in the
+% \documentstyle command (e.g., "\documentstyle[colordvi]{foils}") or \input
+% in any flavor of TeX (e.g. Plain TeX, eplain, AMS-TeX or any of the
+% above LaTeX flavors) with the command "\input colordvi".
+%
+% The actual parameters for each color are determined by the device
+% driver.
+% For "dvips", that is the header file color.pro prepended to the
+% output file by dvips. They can be overrriden by a user-supplied
+% header, called by either the -h option or the "h" flag in a printer
+% configuration file, or in the .dvipsrc (or its analogue on other
+% systems).
+%
+% Most of the color names and their matches were based on the
+% most recent (at time of writing) Crayola Crayon box of 64 colors.
+%
+% There are 68 predefined colors. At the end of this file is a
+% listing of the color names and their approximate PANTONE color
+% match. This is for reference purposes only.
+%
+% The first macro lets the user specify the background color for the
+% document. It sets the background color for the current page and all
+% succeeding pages, unless changed by another command of this type. To
+% change the background color back to the default, issue
+% \background{White}
+%
+\def\background#1{\special{background #1}}
+%
+% There are two types of text color commands. The first is in the form
+% \ColorName (note the uppercase for the color name).
+%
+% It is called a local color command since it takes one argument
+% enclosed in brackets. It writes the contents of its argument in the
+% selected color. This should be used for local or nested color
+% changes, since it restores the original color state when it completes.
+% The second type of color command is in the form
+% \textColorName
+% This uses the same naming convention as before. It is called a global
+% color command since it takes no arguments and simply sets the color at
+% this point. No previous color information is saved. IF YOU USE THIS
+% INTERNAL TO ANY LOCAL COLOR COMMAND, THE NESTING HISTORY IS LOST.
+%
+% This next definition is used in an invocation of a \textColorName
+% macro to save the global color value in local form via the \globalColor
+% macro. This new macro can then be used to protect certain regions of
+% the text, like item tags and headers and footers which can be
+% corrupted by local colors. In particular, item tags in lists can
+% incorrectly inherit the color from a local color command immediately
+% following it. The \subdef macro is invoked within the invocation of a
+% global color change.
+%
+\def\subdef#1{\gdef\globalColor##1{\special
+ {color push #1}##1\special{color pop}}}
+%
+% Here are the global color changers, with color codes defined;
+% these are used to define the small region colors.
+%
+% This first is for user defined color. The argument #1 is for a "CMYK"
+% quadruple of intensity values between 0 and 1. (CMYK stands for Cyan,
+% Magenta, Yellow and Black.) E.g., \textColor{.2 .3 .4 .1}
+%
+\def\textColor#1{\subdef{cmyk #1}\special{color cmyk #1}}
+%
+% and a userdefinable local color command.
+\def\Color#1#2{\special{color push cmyk #1}#2\special{color pop}}
+%
+%
+\def\newColor #1 {\expandafter\def\csname #1\endcsname##1{\special
+ {color push #1}##1\special{color pop}}%
+ \expandafter\def\csname text#1\endcsname{\subdef{#1}%
+ \special{color #1}}}%
+%
+% Here are the color names and their PANTONE match (approximately)
+%
+\newColor GreenYellow % GreenYellow Approximate PANTONE 388
+\newColor Yellow % Yellow Approximate PANTONE YELLOW
+\newColor Goldenrod % Goldenrod Approximate PANTONE 109
+\newColor Dandelion % Dandelion Approximate PANTONE 123
+\newColor Apricot % Apricot Approximate PANTONE 1565
+\newColor Peach % Peach Approximate PANTONE 164
+\newColor Melon % Melon Approximate PANTONE 177
+\newColor YellowOrange % YellowOrange Approximate PANTONE 130
+\newColor Orange % Orange Approximate PANTONE ORANGE-021
+\newColor BurntOrange % BurntOrange Approximate PANTONE 388
+\newColor Bittersweet % Bittersweet Approximate PANTONE 167
+\newColor RedOrange % RedOrange Approximate PANTONE 179
+\newColor Mahogany % Mahogany Approximate PANTONE 484
+\newColor Maroon % Maroon Approximate PANTONE 201
+\newColor BrickRed % BrickRed Approximate PANTONE 1805
+\newColor Red % Red VERY-Approx PANTONE RED
+\newColor OrangeRed % OrangeRed No PANTONE match
+\newColor RubineRed % RubineRed Approximate PANTONE RUBINE-RED
+\newColor WildStrawberry % WildStrawberry Approximate PANTONE 206
+\newColor Salmon % Salmon Approximate PANTONE 183
+\newColor CarnationPink % CarnationPink Approximate PANTONE 218
+\newColor Magenta % Magenta Approximate PANTONE PROCESS-MAGENTA
+\newColor VioletRed % VioletRed Approximate PANTONE 219
+\newColor Rhodamine % Rhodamine Approximate PANTONE RHODAMINE-RED
+\newColor Mulberry % Mulberry Approximate PANTONE 241
+\newColor RedViolet % RedViolet Approximate PANTONE 234
+\newColor Fuchsia % Fuchsia Approximate PANTONE 248
+\newColor Lavender % Lavender Approximate PANTONE 223
+\newColor Thistle % Thistle Approximate PANTONE 245
+\newColor Orchid % Orchid Approximate PANTONE 252
+\newColor DarkOrchid % DarkOrchid No PANTONE match
+\newColor Purple % Purple Approximate PANTONE PURPLE
+\newColor Plum % Plum VERY-Approx PANTONE 518
+\newColor Violet % Violet Approximate PANTONE VIOLET
+\newColor RoyalPurple % RoyalPurple Approximate PANTONE 267
+\newColor BlueViolet % BlueViolet Approximate PANTONE 2755
+\newColor Periwinkle % Periwinkle Approximate PANTONE 2715
+\newColor CadetBlue % CadetBlue Approximate PANTONE (534+535)/2
+\newColor CornflowerBlue % CornflowerBlue Approximate PANTONE 292
+\newColor MidnightBlue % MidnightBlue Approximate PANTONE 302
+\newColor NavyBlue % NavyBlue Approximate PANTONE 293
+\newColor RoyalBlue % RoyalBlue No PANTONE match
+\newColor Blue % Blue Approximate PANTONE BLUE-072
+\newColor Cerulean % Cerulean Approximate PANTONE 3005
+\newColor Cyan % Cyan Approximate PANTONE PROCESS-CYAN
+\newColor ProcessBlue % ProcessBlue Approximate PANTONE PROCESS-BLUE
+\newColor SkyBlue % SkyBlue Approximate PANTONE 2985
+\newColor Turquoise % Turquoise Approximate PANTONE (312+313)/2
+\newColor TealBlue % TealBlue Approximate PANTONE 3145
+\newColor Aquamarine % Aquamarine Approximate PANTONE 3135
+\newColor BlueGreen % BlueGreen Approximate PANTONE 320
+\newColor Emerald % Emerald No PANTONE match
+\newColor JungleGreen % JungleGreen Approximate PANTONE 328
+\newColor SeaGreen % SeaGreen Approximate PANTONE 3268
+\newColor Green % Green VERY-Approx PANTONE GREEN
+\newColor ForestGreen % ForestGreen Approximate PANTONE 349
+\newColor PineGreen % PineGreen Approximate PANTONE 323
+\newColor LimeGreen % LimeGreen No PANTONE match
+\newColor YellowGreen % YellowGreen Approximate PANTONE 375
+\newColor SpringGreen % SpringGreen Approximate PANTONE 381
+\newColor OliveGreen % OliveGreen Approximate PANTONE 582
+\newColor RawSienna % RawSienna Approximate PANTONE 154
+\newColor Sepia % Sepia Approximate PANTONE 161
+\newColor Brown % Brown Approximate PANTONE 1615
+\newColor Tan % Tan No PANTONE match
+\newColor Gray % Gray Approximate PANTONE COOL-GRAY-8
+\newColor Black % Black Approximate PANTONE PROCESS-BLACK
+\newColor White % White No PANTONE match
+
+% Now we make sure that we initialize the global color to Black
+\subdef{Black}
diff --git a/Build/source/texk/dvipsk/tex/rotate.tex b/Build/source/texk/dvipsk/tex/rotate.tex
new file mode 100644
index 00000000000..27891ee95ee
--- /dev/null
+++ b/Build/source/texk/dvipsk/tex/rotate.tex
@@ -0,0 +1,43 @@
+%
+% These macros allow you to rotate or flip a \TeX\ box. Very useful for
+% sideways tables or upsidedown answers.
+%
+% To use, create a box containing the information you want to rotate.
+% (An hbox or vbox will do.) Now call \rotr\boxnum to rotate the
+% material and create a new box with the appropriate (flipped) dimensions.
+% \rotr rotates right, \rotl rotates left, \rotu turns upside down, and
+% \rotf flips. These boxes may contain other rotated boxes.
+%
+\newdimen\rotdimen
+\def\vspec#1{\special{ps:#1}}% passes #1 verbatim to the output
+\def\rotstart#1{\vspec{gsave currentpoint currentpoint translate
+ #1 neg exch neg exch translate}}% #1 can be any origin-fixing transformation
+\def\rotfinish{\vspec{currentpoint grestore moveto}}% gets back in synch
+%
+% First, the rotation right. The reference point of the rotated box
+% is the lower right corner of the original box.
+%
+\def\rotr#1{\rotdimen=\ht#1\advance\rotdimen by\dp#1%
+ \hbox to\rotdimen{\hskip\ht#1\vbox to\wd#1{\rotstart{90 rotate}%
+ \box#1\vss}\hss}\rotfinish}
+%
+% Next, the rotation left. The reference point of the rotated box
+% is the upper left corner of the original box.
+%
+\def\rotl#1{\rotdimen=\ht#1\advance\rotdimen by\dp#1%
+ \hbox to\rotdimen{\vbox to\wd#1{\vskip\wd#1\rotstart{270 rotate}%
+ \box#1\vss}\hss}\rotfinish}%
+%
+% Upside down is simple. The reference point of the rotated box
+% is the upper right corner of the original box. (The box's height
+% should be the current font's xheight, \fontdimen5\font,
+% if you want that xheight to be at the baseline after rotation.)
+%
+\def\rotu#1{\rotdimen=\ht#1\advance\rotdimen by\dp#1%
+ \hbox to\wd#1{\hskip\wd#1\vbox to\rotdimen{\vskip\rotdimen
+ \rotstart{-1 dup scale}\box#1\vss}\hss}\rotfinish}%
+%
+% And flipped end for end is pretty ysae too. We retain the baseline.
+%
+\def\rotf#1{\hbox to\wd#1{\hskip\wd#1\rotstart{-1 1 scale}%
+ \box#1\hss}\rotfinish}%
diff --git a/Build/source/texk/dvipsk/tex/rotsample.tex b/Build/source/texk/dvipsk/tex/rotsample.tex
new file mode 100644
index 00000000000..4a14658e9ce
--- /dev/null
+++ b/Build/source/texk/dvipsk/tex/rotsample.tex
@@ -0,0 +1,32 @@
+\input rotate
+\newbox\rotbox
+\newbox\rottwo
+%
+\font\big=cmr17 scaled\magstep4
+This is a \setbox\rotbox=\hbox{simple}\rotl\rotbox\ test of
+\setbox\rotbox=\hbox{some}\rotu\rotbox\ rotation primitives that
+\setbox\rotbox=\hbox{\big work}\rotr\rotbox.
+Or maybe \setbox\rotbox=\hbox{\vrule height .2in width .2in}\rotl\rotbox\
+not.
+\bigskip
+\centerline{\vbox{\offinterlineskip
+\def\tablerule{\noalign{\hrule}}
+\def\breather{height 2pt&&&&&&&&&&\cr}
+\def\allfive#1{\breather
+&\global\setbox\rottwo=\hbox{#1}\copy\rottwo&&%
+\setbox\rotbox=\copy\rottwo\rotl\rotbox&&%
+\setbox\rotbox=\copy\rottwo\rotu\rotbox&&%
+\setbox\rotbox=\copy\rottwo\rotr\rotbox&&%
+\rotf\rottwo&\cr
+\breather\tablerule}
+\offinterlineskip
+\halign{\vrule#&\hfil\ #\ \hfil&\vrule#&\hfil\ #\ \hfil&\vrule#&%
+ \hfil\ #\ \hfil&\vrule#&\hfil\ #\ \hfil&\vrule#&\hfil\ #\ \hfil&\vrule#\cr
+\tablerule
+\breather
+&\strut Upside&&Leftside&&Downside&&Rightside&&Flipside&\cr
+\breather\tablerule
+\allfive{gnus}
+\allfive{$-b\pm\sqrt{b^2-4ac}\over2a$}
+\allfive{{\big A}}}}}%
+\bye
diff --git a/Build/source/texk/dvipsk/texc.script b/Build/source/texk/dvipsk/texc.script
new file mode 100644
index 00000000000..c83122054f2
--- /dev/null
+++ b/Build/source/texk/dvipsk/texc.script
@@ -0,0 +1,12 @@
+#! /bin/sh
+# A shell script to convert tex.lpro to texc.lpro
+#
+# To use it, say
+# texc.script tex.lpro texc.lpro
+#
+ed $1 <<edscriptend
+/% begin code for uncompressed fonts only/d
+.,/% end code for uncompressed fonts only/d
+.,/% end of code for unpacking compressed fonts/s/% //
+w $2
+edscriptend
diff --git a/Build/source/texk/dvipsk/texps.lpro b/Build/source/texk/dvipsk/texps.lpro
new file mode 100644
index 00000000000..8d56d4174f4
--- /dev/null
+++ b/Build/source/texk/dvipsk/texps.lpro
@@ -0,0 +1,129 @@
+% Thanks for some changes to:
+%+ This is TEXPS.LPRO as modified by Rob Hutchings 1992Apr02
+%+ My comments are marked as %+
+% PostScript prolog for using resident fonts.
+%+ Provision is made to change the encoding scheme in special instructions.
+%+ This is the only way to access the 20 characters which are present in
+%+ a standard PostScript font, but not included in the standard encoding.
+% All we do is change the widths so that PostScript positioning
+% matches the assumptions of dvips.
+
+% The calling sequence defining font foo to be resident font Bar is
+%+ /foo wd(n-1) ... wd1 wd0 {specials} n atsize /Bar rf
+% where each character width wdi is in pixels,
+%+ and atsize is the desired font size, after magnification, in pixels.
+% The locations of unused characters are specified by codes of the form
+% `m [', denoted m consecutive unused characters, interspersed among the
+% widths of the n characters that are actually used.
+% The total n + (sum of m's) must equal 256.
+
+%
+TeXDict begin
+%
+/rf
+% We copy everything but the FID entry of the resident font
+% (just as in section 5.6 of the Red Book second edition).
+% We also don't copy UniqueID, even though we want to, because
+% this messes up systems that cache the fonts, for some
+% PostScript fonts.
+{ findfont dup length 1 add dict begin
+ { 1 index /FID ne 2 index /UniqueID ne and
+ {def} {pop pop} ifelse } forall
+% Now the top entry on the stack is the desired size, which
+% we use to construct the matrix to transform the font.
+% The way we do this is constrained by our desire to leave
+% a hook for extending and/or slanting; the hook also allows
+% the font to be reencoded extremely cheaply.
+% Extend and slant are coded in positions 0 and 2 of the matrix,
+% whose default values are atsize and 0
+ [ 1 index 0
+% at this point we pick up and obey the special instructions
+ 6 -1 roll exec
+% which changes `{s} n at [ at 0' to `n at [ AT S' (see SlantFont below)
+% and then we will insert the rest of the matrix. It is imperative that
+% VResolution Resolution div mul
+% be used instead of
+% VResolution mul Resolution div
+% because the latter gives us floating point roundoff error that
+% causes the interpreter to think the font isn't square, and this
+% leads to substantially deteriorated character glyphs.
+ 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0 ]
+% The top of stack is now `n [ AT 0 S at*aspect 0 0]';
+% we use this matrix to scale the font later. We store it in Metrics,
+% which we'll give a different definition to anyway later.
+ FontType 0 ne {
+ /Metrics exch def
+% Now we start the dictionary of length n that will eventually be Metrics:
+ dict begin
+% When the font is used the width in the Metrics dictionary will be
+% multiplied by FontMatrix[0] to give the actual character width.
+% We therefore divide each width by FontMatrix[0] before storing.
+% (We assume that FontMatrix has the form [ x 0 0 x 0 0 ].)
+% Note that using FontMatrix[0] is safer than assuming milli-em units,
+% and that loading the widths on to the stack rather than using an array
+% allows the following simple coding.
+% We also allow marks on the stack ([) to mean that we don't use
+% that character and thus don't need any Metrics entry for it.
+% This saves lots of VM.
+% A sequence of m marks is represented by `m ['.
+ Encoding { exch dup type /integertype ne
+ {pop pop 1 sub dup 0 le {pop} {[} ifelse}
+ {FontMatrix 0 get div Metrics 0 get div def} ifelse } forall
+% Now we put the widths dictionary into the font, after grabbing
+% the current definition of Metrics back.
+ Metrics /Metrics currentdict end def
+ } {
+ { 1 index type /nametype eq {exit } if exch pop } loop
+ } ifelse
+% and duplicate /foo so that it can be used both in definefont
+% and as the name of the macro, which is created first as a
+% non-executable array so that we can put the new font dictionary
+% itself inside the macro;
+ [ 2 index currentdict end definefont 3 -1 roll makefont
+% this involves a circumlocution to insert the setfont command.
+ /setfont cvx ]
+% Finally the macro is made executable and given the name /foo.
+ cvx def } def
+%
+% Now here's some oblique hackery... an example of making
+% variants of a resident font look like it is resident.
+%+ Since dvips has to repeat the special instructions for each
+%+ incarnation of such a hacked font, there appears to be little virtue in
+%+ the halfway-house of naming the hacked font. I have therefore omitted
+%+ the PostScript names of the modified fonts;
+%+ the defining lines in psfonts could be
+%+ rptmro Times-Roman ".167 SlantFont"
+%+ My versions of SlantFont and ExtendFont are obeyed in the core of the
+%+ main macro, at a point where the stack contains
+%+ atsize [ x y
+%+ where x and y will become entries 0 and 2 of the transformation matrix.
+% Optionally replace the `slant' by `angle ObliqueSlant';
+% note that the ObliqueSlant of Times-Italic is -15.5 (negative).
+%
+/ObliqueSlant { % angle ObliqueSlant slant
+ dup sin S cos div neg
+ } B
+
+% A slant is multiplied by atsize and added to entry 2 (initially 0)
+/SlantFont {4 index mul add} def
+
+% An extend is simply a multiplier for entry 0 (initially atsize)
+/ExtendFont {3 -1 roll mul exch} def
+
+% Since at the point at which the hook is obeyed, the current dictionary
+% is that of the new font and writeable, it is trivial to include the
+% option of reencoding the font.
+/ReEncodeFont {
+ CharStrings rcheck {
+ /Encoding false def dup
+ [ exch {
+ dup CharStrings exch known not {
+ pop /.notdef
+ /Encoding true def
+ } if
+ } forall
+ Encoding {] exch pop} {cleartomark} ifelse
+ } if
+ /Encoding exch def
+} def
+end
diff --git a/Build/source/texk/dvipsk/tfmload.c b/Build/source/texk/dvipsk/tfmload.c
new file mode 100644
index 00000000000..abe3e0af83c
--- /dev/null
+++ b/Build/source/texk/dvipsk/tfmload.c
@@ -0,0 +1,231 @@
+/*
+ * Loads a tfm file. It marks the characters as undefined.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifdef KPATHSEA
+#include <kpathsea/c-pathmx.h>
+#endif
+/*
+ * These are the external routines it calls:
+ */
+#include "protos.h"
+/*
+ * Here are the external variables we use:
+ */
+extern real conv ;
+extern real vconv ;
+extern real alpha ;
+#ifndef KPATHSEA
+extern char *tfmpath ;
+#endif
+extern char errbuf[] ;
+extern integer fsizetol ;
+extern Boolean noomega ;
+/*
+ * Our static variables:
+ */
+FILE *tfmfile ;
+static char name[50] ;
+
+void
+badtfm P1C(char *, s)
+{
+ (void)sprintf(errbuf,"! Bad TFM file %s: %s",name,s) ;
+ error(errbuf);
+}
+
+/*
+ * Tries to open a tfm file. Uses cmr10.tfm if unsuccessful,
+ * and complains loudly about it.
+ */
+void
+tfmopen P1C(register fontdesctype *, fd)
+{
+ register char *n;
+#ifdef KPATHSEA
+ kpse_file_format_type d ;
+#else
+ register char *d;
+#endif
+ n = fd->name ;
+ if (!noomega) {
+#ifdef KPATHSEA
+ d = ofmpath;
+#else
+ d = fd->area ;
+ if (*d==0)
+ d = ofmpath ;
+#endif
+#ifdef MVSXA /* IBM: MVS/XA */
+ (void)sprintf(name, "ofm(%s)", n) ;
+#else
+ (void)sprintf(name, "%s.ofm", n) ;
+#endif
+ if ((tfmfile=search(d, name, READBIN))!=NULL)
+ return ;
+ }
+#ifdef KPATHSEA
+ d = tfmpath;
+#else
+ d = fd->area ;
+ if (*d==0)
+ d = tfmpath ;
+#endif
+#ifdef MVSXA /* IBM: MVS/XA */
+ (void)sprintf(name, "tfm(%s)", n) ;
+#else
+ (void)sprintf(name, "%s.tfm", n) ;
+#endif
+ if ((tfmfile=search(d, name, READBIN))!=NULL)
+ return ;
+ (void)sprintf(errbuf, "Can't open font metric file %s%s",
+ fd->area, name) ;
+ error(errbuf) ;
+ error("I will use cmr10.tfm instead, so expect bad output.") ;
+#ifdef MVSXA /* IBM: MVS/XA */
+ if ((tfmfile=search(d, "tfm(cmr10)", READBIN))!=NULL)
+#else
+ if ((tfmfile=search(d, "cmr10.tfm", READBIN))!=NULL)
+#endif
+ return ;
+ error("! I can't find cmr10.tfm; please reinstall me with proper paths") ;
+}
+
+shalfword
+tfmbyte P1H(void)
+{
+ return(getc(tfmfile)) ;
+}
+
+halfword
+tfm16 P1H(void)
+{
+ register halfword a ;
+ a = tfmbyte () ;
+ return ( a * 256 + tfmbyte () ) ;
+}
+
+integer
+tfm32 P1H(void)
+{
+ register integer a ;
+ a = tfm16 () ;
+ if (a > 32767) a -= 65536 ;
+ return ( a * 65536 + tfm16 () ) ;
+}
+
+int
+tfmload P1C(register fontdesctype *, curfnt)
+{
+ register integer i, j ;
+ register integer li, cd=0 ;
+ integer scaledsize ;
+ integer nw, hd ;
+ integer bc, ec ;
+ integer nco=0, ncw=0, npc=0, no_repeats = 0 ;
+ integer *scaled ;
+ integer *chardat ;
+ int font_level ;
+ integer pretend_no_chars ;
+ int charcount = 0 ;
+
+ tfmopen(curfnt) ;
+/*
+ * Next, we read the font data from the tfm file, and store it in
+ * our own arrays.
+ */
+ li = tfm16() ;
+ if (li!=0) {
+ font_level = -1 ;
+ hd = tfm16() ;
+ bc = tfm16() ; ec = tfm16() ;
+ nw = tfm16() ;
+ li = tfm32() ; li = tfm32() ; li = tfm32() ; li = tfm16() ;
+ if (hd<2 || bc>ec+1 || ec>255 || nw>256)
+ badtfm("header") ;
+ } else { /* In an .ofm file */
+ if (noomega) badtfm("length") ;
+ font_level = tfm16();
+ li = tfm32() ; hd = tfm32() ;
+ bc = tfm32() ; ec = tfm32() ;
+ nw = tfm32() ;
+ for (i=0; i<8; i++) li=tfm32();
+ if (font_level>1 || hd<2 || bc<0 || ec<0 || nw<0
+ || bc>ec+1 || ec>65535 || nw>65536)
+ badtfm("header") ;
+ if (font_level==1) {
+ nco = tfm32() ;
+ ncw = tfm32() ;
+ npc = tfm32() ;
+ for (i=0; i<12; i++) li=tfm32();
+ }
+ }
+ li = tfm32() ;
+ check_checksum (li, curfnt->checksum, curfnt->name);
+ li = (integer)(alpha * (real)tfm32()) ;
+ if (li > curfnt->designsize + fsizetol ||
+ li < curfnt->designsize - fsizetol) {
+ (void)sprintf(errbuf,"Design size mismatch in %s", name) ;
+ error(errbuf) ;
+ }
+ pretend_no_chars=ec+1 ;
+ if (pretend_no_chars<256) pretend_no_chars=256 ;
+ else {
+ curfnt->chardesc = (chardesctype *)
+ xrealloc(curfnt->chardesc, sizeof(chardesctype)*pretend_no_chars) ;
+ curfnt->maxchars = pretend_no_chars ;
+ }
+ for (i=2; i<((font_level==1)?nco-29:hd); i++)
+ li = tfm32() ;
+ chardat = (integer *) xmalloc(pretend_no_chars*sizeof(integer)) ;
+ for (i=0; i<pretend_no_chars; i++)
+ chardat[i] = -1 ;
+ for (i=bc; i<=ec; i++) {
+ if (no_repeats>0) {
+ no_repeats-- ;
+ } else if (font_level>=0) {
+ cd = tfm16() ;
+ li = tfm32() ;
+ li = tfm16() ;
+ if (font_level==1) {
+ no_repeats = tfm16() ;
+ for (j=0; j<(npc|1); j++) tfm16() ;
+ ncw -= 3 + npc/2 ;
+ }
+ } else {
+ cd = tfmbyte() ;
+ li = tfm16() ;
+ li = tfmbyte() ;
+ }
+ if (cd>=nw) badtfm("char info") ;
+ if (cd) {
+ chardat[i] = cd ;
+ charcount++ ;
+ }
+ }
+ if (font_level==1&&ncw!=0) {
+ sprintf(errbuf, "Table size mismatch in %s", curfnt->name) ;
+ error(errbuf) ;
+ }
+ scaledsize = curfnt->scaledsize ;
+ scaled = (integer *) xmalloc(nw*sizeof(integer)) ;
+ for (i=0; i<nw; i++)
+ scaled[i] = scalewidth(tfm32(), scaledsize) ;
+ (void)fclose(tfmfile) ;
+ for (i=0; i<pretend_no_chars; i++)
+ if (chardat[i]!= -1) {
+ li = scaled[chardat[i]] ;
+ curfnt->chardesc[i].TFMwidth = li ;
+ if (li >= 0)
+ curfnt->chardesc[i].pixelwidth = ((integer)(conv*li+0.5)) ;
+ else
+ curfnt->chardesc[i].pixelwidth = -((integer)(conv*-li+0.5)) ;
+ curfnt->chardesc[i].flags = (curfnt->resfont ? EXISTS : 0) ;
+ curfnt->chardesc[i].flags2 = EXISTS ;
+ } else curfnt->chardesc[i].flags = curfnt->chardesc[i].flags2 = 0 ;
+ free(chardat) ;
+ free(scaled) ;
+ if (ec>=256) curfnt->codewidth = 2 ; /* XXX: 2byte-code can have ec<256 */
+ curfnt->loaded = 1 ;
+ return charcount ;
+}
diff --git a/Build/source/texk/dvipsk/unpack.c b/Build/source/texk/dvipsk/unpack.c
new file mode 100644
index 00000000000..de5e41a67df
--- /dev/null
+++ b/Build/source/texk/dvipsk/unpack.c
@@ -0,0 +1,179 @@
+/*
+ * Unpacks the raster data from the packed buffer. This code was
+ * translated from pktopx.web using an automatic translator, then
+ * converted for this purpose. This little routine can be very useful
+ * in other drivers as well.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+
+/*
+ * external procedures
+ */
+#include "protos.h"
+
+/*
+ * Some statics for use here.
+ */
+static halfword bitweight ;
+static halfword dynf ;
+static halfword gpower[17] = { 0 , 1 , 3 , 7 , 15 , 31 , 63 , 127 ,
+ 255 , 511 , 1023 , 2047 , 4095 , 8191 , 16383 , 32767 , 65535 } ;
+static long repeatcount ;
+static quarterword *p ;
+
+/*
+ * We need procedures to get a nybble, bit, and packed word from the
+ * packed data structure.
+ */
+
+shalfword
+getnyb P1H(void)
+{
+ if ( bitweight == 0 )
+ { bitweight = 16 ;
+ return(*p++ & 15) ;
+ } else {
+ bitweight = 0 ;
+ return(*p >> 4) ;
+ }
+}
+
+Boolean
+getbit P1H(void)
+{
+ bitweight >>= 1 ;
+ if ( bitweight == 0 )
+ { p++ ;
+ bitweight = 128 ;
+ }
+ return(*p & bitweight) ;
+}
+
+long pkpackednum P1H(void) {
+ register halfword i;
+ register long j ;
+ i = getnyb () ;
+ if ( i == 0 ) {
+ do { j = getnyb () ;
+ i++ ;
+ } while ( j == 0 ) ;
+ while ( i != 0 ) {
+ j = j * 16 + ((long) getnyb ()) ;
+ i-- ;
+ }
+ return ( j - 15 + ( 13 - dynf ) * 16 + dynf ) ;
+ }
+ else if ( i <= dynf ) return ( i ) ;
+ else if ( i < 14 ) return ( ( i - dynf - 1 )*16 + getnyb() + dynf + 1 ) ;
+ else {
+ if (repeatcount != 0)
+ error("! recursive repeat count in pk file") ;
+ repeatcount = 1 ;
+ if ( i == 14 ) repeatcount = pkpackednum () ;
+ return ( pkpackednum() ) ;
+ }
+}
+
+void flip P2C(register char *, s, register long, howmany)
+{
+ register char t ;
+
+ while (howmany > 0) {
+ t = *s ;
+ *s = s[1] ;
+ s[1] = t ;
+ howmany-- ;
+ s += 2 ;
+ }
+}
+/*
+ * And now we have our main routine.
+ */
+static halfword bftest = 1 ;
+long
+unpack P5C(quarterword *, pack, halfword *, raster,
+ halfword, cwidth, halfword, cheight, halfword, cmd)
+{
+ register integer i, j ;
+ shalfword wordwidth ;
+ register halfword word, wordweight ;
+ shalfword rowsleft ;
+ Boolean turnon ;
+ shalfword hbit, ww ;
+ long count ;
+ halfword *oraster ;
+
+ oraster = raster ;
+ p = pack ;
+ dynf = cmd / 16 ;
+ turnon = cmd & 8 ;
+ wordwidth = (cwidth + 15)/16 ;
+ if ( dynf == 14 )
+ { bitweight = 256 ;
+ for ( i = 1 ; i <= cheight ; i ++ )
+ { word = 0 ;
+ wordweight = 32768 ;
+ for ( j = 1 ; j <= cwidth ; j ++ )
+ { if ( getbit () ) word += wordweight ;
+ wordweight >>= 1 ;
+ if ( wordweight == 0 )
+ { *raster++ = word ;
+ word = 0 ;
+ wordweight = 32768 ;
+ }
+ }
+ if ( wordweight != 32768 )
+ *raster++ = word ;
+ }
+ } else {
+ rowsleft = cheight ;
+ hbit = cwidth ;
+ repeatcount = 0 ;
+ ww = 16 ;
+ word = 0 ;
+ bitweight = 16 ;
+ while ( rowsleft > 0 )
+ { count = pkpackednum() ;
+ while ( count != 0 )
+ { if ( ( count <= ww ) && ( count < hbit ) )
+ { if ( turnon ) word += gpower [ ww ] - gpower
+ [ ww - count ] ;
+ hbit -= count ;
+ ww -= count ;
+ count = 0 ;
+ }
+ else if ( ( count >= hbit ) && ( hbit <= ww ) )
+ { if ( turnon )
+ word += gpower[ww] - gpower[ww-hbit] ;
+ *raster++ = word ;
+ for ( i = 1 ; i <= repeatcount ; i ++ ) {
+ for ( j = 1 ; j <= wordwidth ; j ++ ) {
+ *raster = *(raster - wordwidth) ;
+ raster++ ;
+ }
+ }
+ rowsleft -= repeatcount + 1 ;
+ repeatcount = 0 ;
+ word = 0 ;
+ ww = 16 ;
+ count -= hbit ;
+ hbit = cwidth ;
+ }
+ else
+ { if ( turnon ) word += gpower [ ww ] ;
+ *raster++ = word ;
+ word = 0 ;
+ count -= ww ;
+ hbit -= ww ;
+ ww = 16 ;
+ }
+ }
+ turnon = ! turnon ;
+ }
+ if ( ( rowsleft != 0 ) || ( (unsigned)hbit != cwidth ) )
+ error ( "! error while unpacking; more bits than required" ) ;
+ }
+ if (*(char *)&bftest) /* is the hardware LittleEndian? */
+ flip((char *)oraster, ((cwidth + 15) >> 4) * (long)cheight) ;
+ return(p-pack) ;
+}
diff --git a/Build/source/texk/dvipsk/virtualfont.c b/Build/source/texk/dvipsk/virtualfont.c
new file mode 100644
index 00000000000..db0aa32affb
--- /dev/null
+++ b/Build/source/texk/dvipsk/virtualfont.c
@@ -0,0 +1,301 @@
+/*
+ * Here's the code to load a VF file into memory.
+ * Any resemblance between this file and loadfont.c is purely uncoincidental.
+ */
+#include "dvips.h" /* The copyright notice in that file is included too! */
+#ifdef KPATHSEA
+#include <kpathsea/c-pathmx.h>
+#endif
+/*
+ * These are the external routines we use.
+ */
+#include "protos.h"
+/*
+ * These are the external variables we use.
+ */
+#ifdef DEBUG
+extern integer debug_flag;
+#endif /* DEBUG */
+extern long bytesleft ;
+extern quarterword *raster ;
+#ifndef KPATHSEA
+extern char *vfpath ;
+#endif
+extern char errbuf[200] ;
+extern real conv ;
+extern real vconv ;
+extern real alpha ;
+extern int actualdpi ;
+extern int vactualdpi ;
+extern char *nextstring, *maxstring ;
+extern fontdesctype *fonthead ;
+extern real alpha ;
+extern Boolean noomega ;
+/*
+ * Now we have some routines to get stuff from the VF file.
+ * Subroutine vfbyte returns the next byte.
+ */
+static FILE *vffile ;
+static char name[50] ;
+void
+badvf P1C(char *, s)
+{
+ (void)sprintf(errbuf,"! Bad VF file %s: %s",name,s) ;
+ error(errbuf);
+}
+
+shalfword
+vfbyte P1H(void)
+{
+ register shalfword i ;
+
+ if ((i=getc(vffile))==EOF)
+ badvf("unexpected eof") ;
+ return(i) ;
+}
+
+integer
+vfquad P1H(void)
+{
+ register integer i ;
+
+ i = vfbyte() ;
+ if (i > 127)
+ i -= 256 ;
+ i = i * 256 + vfbyte() ;
+ i = i * 256 + vfbyte() ;
+ i = i * 256 + vfbyte() ;
+ return(i) ;
+}
+
+integer
+vftrio P1H(void)
+{
+ register integer i ;
+
+ i = vfbyte() ;
+ i = i * 256 + vfbyte() ;
+ i = i * 256 + vfbyte() ;
+ return(i) ;
+}
+
+int
+vfopen P1C(register fontdesctype *, fd)
+{
+ register char *n ;
+#ifndef KPATHSEA
+ register char *d ;
+#endif
+
+ n = fd->name ;
+#ifndef KPATHSEA
+ d = fd->area ;
+ if (*d==0)
+ d = vfpath ;
+#endif
+#ifdef MVSXA /* IBM: MVS/XA */
+ (void)sprintf(name, "vf(%s)", n) ;
+#else
+ (void)sprintf(name, "%s.vf", n) ;
+#endif
+#ifdef KPATHSEA
+ if (0 != (vffile=search(vfpath, name, READBIN)))
+#else
+ if (0 != (vffile=search(d, name, READBIN)))
+#endif
+ return(1) ;
+ if (!noomega)
+#ifdef KPATHSEA
+ if (0 != (vffile=search(ovfpath, n, READBIN)))
+#else
+ if (0 != (vffile=search(d, n, READBIN)))
+#endif
+ return(2) ;
+ return(0) ;
+}
+
+/*
+ * The following routine is like fontdef, but for local fontdefs in VF files.
+ */
+fontmaptype *
+vfontdef P2C(integer, s, int, siz)
+{
+ register integer i, j, fn ;
+ register fontdesctype *fp ;
+ register fontmaptype *cfnt ;
+ char *nam, *area ;
+ integer cksum, scsize, dssize ;
+
+ fn = vfbyte() ;
+ while (siz-- > 1)
+ fn = (fn << 8) + vfbyte() ;
+ cfnt = (fontmaptype *)mymalloc((integer)sizeof(fontmaptype)) ;
+ cfnt->fontnum = fn ;
+ cksum = vfquad() ;
+ scsize = scalewidth(s, vfquad()) ;
+ dssize = (integer)(alpha * (real)vfquad()) ;
+ i = vfbyte() ; j = vfbyte() ;
+ if (nextstring + i + j > maxstring)
+ error("! out of string space") ;
+ area = nextstring ;
+ for (; i>0; i--)
+ *nextstring++ = vfbyte() ;
+ *nextstring++ = 0 ;
+ nam = nextstring ;
+ for (; j>0; j--)
+ *nextstring++ = vfbyte() ;
+ *nextstring++ = 0 ;
+ fp = matchfont(nam, area, scsize, (char *)0) ;
+ if (fp) {
+ nextstring = nam ;
+ fp->checksum = cksum ;
+ } else {
+ fp = newfontdesc(cksum, scsize, dssize, nam, area) ;
+ fp->next = fonthead ;
+ fonthead = fp ;
+ }
+ cfnt->desc = fp ;
+ return (cfnt) ;
+}
+
+/*
+ * Now our virtualfont routine.
+ */
+Boolean
+virtualfont P1C(register fontdesctype *, curfnt)
+{
+ register integer i ;
+ register shalfword cmd ;
+ register integer k ;
+ register integer length ;
+ register integer cc ;
+ register chardesctype *cd ;
+ integer scaledsize = curfnt->scaledsize ;
+ integer no_of_chars=256 ;
+ integer maxcc=255 ;
+ register quarterword *tempr ;
+ fontmaptype *fm, *newf ;
+ int kindfont ;
+ kindfont = vfopen(curfnt) ; /* 1 for TeX, 2 for Omega */
+ if (!kindfont)
+ return (0) ;
+#ifdef DEBUG
+ if (dd(D_FONTS))
+ (void)fprintf(stderr,"Loading virtual font %s at %.1fpt\n",
+ name, (real)scaledsize/(alpha*0x100000)) ;
+#endif /* DEBUG */
+
+/*
+ * We clear out some pointers:
+ */
+ if (kindfont==2) {
+ no_of_chars = 65536;
+ curfnt->maxchars=65536;
+ free(curfnt->chardesc);
+ curfnt->chardesc = (chardesctype *)
+ mymalloc(65536 * (integer)sizeof(chardesctype));
+ }
+ for (i=0; i<no_of_chars; i++) {
+ curfnt->chardesc[i].TFMwidth = 0 ;
+ curfnt->chardesc[i].packptr = NULL ;
+ curfnt->chardesc[i].pixelwidth = 0 ;
+ curfnt->chardesc[i].flags = 0 ;
+ curfnt->chardesc[i].flags2 = 0 ;
+ }
+ if (vfbyte()!=247)
+ badvf("expected pre") ;
+ if (vfbyte()!=202)
+ badvf("wrong id byte") ;
+ for(i=vfbyte(); i>0; i--)
+ (void)vfbyte() ;
+ k = vfquad() ;
+ check_checksum (k, curfnt->checksum, curfnt->name);
+ k = (integer)(alpha * (real)vfquad()) ;
+ if (k > curfnt->designsize + 2 || k < curfnt->designsize - 2) {
+ (void)sprintf(errbuf,"Design size mismatch in font %s", name) ;
+ error(errbuf) ;
+ }
+/*
+ * Now we look for font definitions.
+ */
+ fm = NULL ;
+ while ((cmd=vfbyte())>=243) {
+ if (cmd>246)
+ badvf("unexpected command in preamble") ;
+ newf = vfontdef(scaledsize, cmd-242) ;
+ if (fm)
+ fm->next = newf ;
+ else curfnt->localfonts = newf ;
+ fm = newf ;
+ fm->next = NULL ; /* FIFO */
+ }
+/*
+ * Now we get down to the serious business of reading character definitions.
+ */
+ do {
+ if (cmd==242) {
+ length = vfquad() + 2 ;
+ if (length<2) badvf("negative length packet") ;
+ if (length>65535) badvf("packet too long") ;
+ cc = vfquad() ;
+ if (cc<0 || cc>=no_of_chars) badvf("character code out of range") ;
+ cd = curfnt->chardesc + cc ;
+ cd->TFMwidth = scalewidth(vfquad(), scaledsize) ;
+ } else {
+ length = cmd + 2;
+ cc = vfbyte() ;
+ cd = curfnt->chardesc + cc ;
+ cd->TFMwidth = scalewidth(vftrio(), scaledsize) ;
+ }
+ maxcc = (maxcc<cc) ? cc : maxcc;
+ if (cd->TFMwidth >= 0)
+ cd->pixelwidth = ((integer)(conv*cd->TFMwidth+0.5)) ;
+ else
+ cd->pixelwidth = -((integer)(conv*-cd->TFMwidth+0.5)) ;
+ cd->flags = EXISTS ;
+ cd->flags2 = EXISTS ;
+ if (bytesleft < length) {
+#ifdef DEBUG
+ if (dd(D_MEM))
+ (void)fprintf(stderr,
+#ifdef SHORTINT
+ "Allocating new raster memory (%ld req, %ld left)\n",
+#else
+ "Allocating new raster memory (%d req, %ld left)\n",
+#endif
+ length, bytesleft) ;
+#endif /* DEBUG */
+ if (length > MINCHUNK) {
+ tempr = (quarterword *)mymalloc((integer)length) ;
+ bytesleft = 0 ;
+ } else {
+ raster = (quarterword *)mymalloc((integer)RASTERCHUNK) ;
+ tempr = raster ;
+ bytesleft = RASTERCHUNK - length ;
+ raster += length ;
+ }
+ } else {
+ tempr = raster ;
+ bytesleft -= length ;
+ raster += length ;
+ }
+ cd->packptr = tempr ;
+ length -= 2 ;
+ *tempr++ = length / 256 ;
+ *tempr++ = length % 256 ;
+ for (; length>0; length--)
+ *tempr++ = vfbyte() ;
+ cmd = vfbyte() ;
+ } while (cmd < 243) ;
+ if (cmd != 248)
+ badvf("missing postamble") ;
+ (void)fclose(vffile) ;
+ curfnt->loaded = 2 ;
+ if (maxcc+1<no_of_chars) {
+ curfnt->chardesc = (chardesctype *)
+ xrealloc(curfnt->chardesc,
+ (maxcc+1) * (integer)sizeof(chardesctype));
+ curfnt->maxchars=maxcc+1;
+ }
+ return (1) ;
+}
diff --git a/Build/source/texk/dvipsk/vmcms/Makefile.IBM b/Build/source/texk/dvipsk/vmcms/Makefile.IBM
new file mode 100644
index 00000000000..76906af9cee
--- /dev/null
+++ b/Build/source/texk/dvipsk/vmcms/Makefile.IBM
@@ -0,0 +1,199 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# First, the things that absolutely must be edited for your system.
+# Please, don't forget to edit MakeTeXPK in the same way!
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# TFMPATH = /LocalLibrary/Fonts/TeXFonts/tfm:/usr/lib/tex/fonts/tfm
+TFMPATH = /usr/local/lib/tex/fonts/tfm:/local/lib/tex/fonts/tfm
+
+# the default path to search for PK files (usually omits `.')
+# Don't forget to add the directory that
+# MakeTeXPK puts the files! (In this case, /LocalLibrary/Fonts...)
+# PKPATH = /LocalLibrary/Fonts/TeXFonts/pk:/usr/lib/tex/fonts/pk
+PKPATH = /local/lib/tex/fonts/%m/%f.%d%p:/usr/local/lib/tex/fonts/%m/%f.%d%p:
+
+# the default path to search for VF files (usually omits `.')
+# VFPATH = /LocalLibrary/Fonts/TeXFonts/vf:/usr/lib/tex/fonts/vf
+VFPATH = /local/lib/tex/fonts/vf:/usr/local/lib/tex/fonts/vf
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH =
+
+# where the config files go
+# CONFIGDIR = /usr/lib/tex/ps
+CONFIGDIR = /local/lib/tex/dvips
+
+# the default path to search for config files
+# CONFIGPATH = .:$(CONFIGDIR)
+CONFIGPATH = .:$(CONFIGDIR):/usr/local/lib/tex/dvips
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = /usr/lib/tex/ps
+HEADERDIR = /local/lib/tex/dvips
+
+# the default path to search for header files
+# HEADERPATH = .:$(HEADERDIR)
+HEADERPATH = .:$(HEADERDIR):/usr/local/lib/tex/dvips
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = /usr/lib/tex/inputs
+TEXMACRODIR = /local/lib/tex/inputs
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .:..:/usr/lib/tex/inputs
+FIGPATH = .:..:/local/lib/tex/inputs:/usr/local/lib/tex/inputs
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DIBM6000 for compiling on IBM 6000 systems
+# (for VM/CMS, see the MKDVIPS.EXEC file in the vmcms subdirectory).
+DEFS= -DTPIC -DDEBUG -DDEFRES=300 -DIBM6000
+
+# either use
+# OPT = -g -Wall
+# or
+#OPT = -O -s -Wall
+OPT = -O
+
+# libraries to include (-lm -lc on most systems)
+#FLIBS= -lNeXT_s -lsys_s
+FLIBS= -lm
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+
+# If you want EMTEX specials, define the following.
+#EMTEX = -DEMTEX
+
+# for SYSV (and friends which use <string.h> instead of <strings.h>)
+# define the c-compiler flag
+# add -D_POSIX_SOURCE if you are POSIX (also define SYSV) (only relevant
+# for subdir searching)
+# SYS = -DSYSV
+
+# Define this to be whatever you use for installation. If you don't have
+# install, use a script that invokes copy and chmod's the files
+# appropriately.
+# INSTALL = install
+INSTALL = install
+
+# where the installed binary goes
+# BINDIR = /usr/bin
+BINDIR =
+
+PATHS = -DTFMPATH=\"$(TFMPATH)\" \
+ -DPKPATH=\"$(PKPATH)\" \
+ -DVFPATH=\"$(VFPATH)\" \
+ -DHEADERPATH=\"$(HEADERPATH)\" \
+ -DCONFIGPATH=\"$(CONFIGPATH)\" \
+ -DCONFIGFILE=\"$(CONFIGFILE)\" \
+ -DFONTSUBDIRPATH=\"$(FONTSUBDIRPATH)\" \
+ -DFIGPATH=\"$(FIGPATH)\"
+
+CFLAGS = $(DEFS) $(PATHS) $(OPT) $(SYS) $(SECURE) $(EMTEX) $(DEFPFMT)
+
+SRC = dospecial.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c \
+ download.c prescan.c scanpage.c skippage.c output.c scalewidth.c \
+ dosection.c dopage.c resident.c search.c unpack.c drawPS.c \
+ header.c makefont.c repack.c virtualfont.c dpicheck.c finclude.c \
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecial.c
+
+OBJ = dospecial.o dviinput.o fontdef.o loadfont.o dvips.o tfmload.o \
+ download.o prescan.o scanpage.o skippage.o output.o scalewidth.o \
+ dosection.o dopage.o resident.o search.o unpack.o drawPS.o \
+ header.o makefont.o repack.o virtualfont.o dpicheck.o finclude.o \
+ pprescan.o papersiz.o flib.o color.o bbox.o emspecial.o
+
+all : afm2tfm dvips tex.pro texps.pro texc.pro special.pro finclude.pro \
+ color.pro
+
+dvips : $(OBJ)
+ $(CC) $(CFLAGS) $(OBJ) $(LIBS) $(FLIBS) -o dvips
+
+afm2tfm: afm2tfm.c
+ $(CC) $(CFLAGS) -o afm2tfm afm2tfm.c $(LIBS) $(FLIBS)
+
+$(OBJ) : dvips.h debug.h Makefile
+flib.o resident.o dvips.o loadfont.o tfmload.o : paths.h
+
+squeeze : squeeze.o
+ $(CC) $(CFLAGS) squeeze.o -o squeeze $(LIBS) $(FLIBS)
+
+tex.pro : tex.lpro squeeze
+ ./squeeze <tex.lpro > tex.pro
+
+texc.pro: texc.lpro squeeze
+ ./squeeze <texc.lpro >texc.pro
+
+texc.lpro: texc.script tex.lpro
+ ./texc.script tex.lpro texc.lpro
+
+texps.pro : texps.lpro squeeze
+ ./squeeze <texps.lpro >texps.pro
+
+special.pro : special.lpro squeeze
+ ./squeeze <special.lpro >special.pro
+
+finclude.pro : finclude.lpro squeeze
+ ./squeeze <finclude.lpro >finclude.pro
+
+color.pro : color.lpro squeeze
+ ./squeeze <color.lpro >color.pro
+
+install : afm2tfm dvips MakeTeXPK \
+ tex.pro texc.pro texps.pro special.pro finclude.pro color.pro \
+ config.ps psfonts.map epsf.tex epsf.sty rotate.tex rotate.sty \
+ colordvi.tex colordvi.sty blackdvi.tex blackdvi.sty
+ - mkdir $(BINDIR)
+ - mkdir $(HEADERDIR)
+ - mkdir $(CONFIGDIR)
+ - mkdir $(MANDIR)
+ - mkdir $(TEXMACRODIR)
+ $(INSTALL) -c -m 755 afm2tfm $(BINDIR)/afm2tfm
+ $(INSTALL) -c -m 755 dvips $(BINDIR)/dvips
+ $(INSTALL) -c -m 755 MakeTeXPK $(BINDIR)/MakeTeXPK
+ $(INSTALL) -c -m 644 tex.pro $(HEADERDIR)
+ $(INSTALL) -c -m 644 texc.pro $(HEADERDIR)
+ $(INSTALL) -c -m 644 texps.pro $(HEADERDIR)
+ $(INSTALL) -c -m 644 special.pro $(HEADERDIR)
+ $(INSTALL) -c -m 644 finclude.pro $(HEADERDIR)
+ $(INSTALL) -c -m 644 color.pro $(HEADERDIR)
+ $(INSTALL) -c -m 644 config.ps $(CONFIGDIR)/$(CONFIGFILE)
+ $(INSTALL) -c -m 644 psfonts.map $(CONFIGDIR)
+ $(INSTALL) -c -m 644 epsf.tex $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 epsf.sty $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 rotate.tex $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 rotate.sty $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 colordvi.sty $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 colordvi.tex $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 blackdvi.sty $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 blackdvi.tex $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 dvips.tex $(TEXMACRODIR)
+ $(INSTALL) -c -m 644 dvipsmac.tex $(TEXMACRODIR)
+
+veryclean :
+ rm -f *.o dvips squeeze afm2tfm texc.lpro *.pro *~ *.log *.dvi
+
+clean :
+ rm -f *.o squeeze afm2tfm *~ *.log *.dvi
+
+lint :
+ lint $(DEFS) $(PATHS) $(SRC)
+ lint $(DEFS) squeeze.c
+ lint $(DEFS) afm2tfm.c
diff --git a/Build/source/texk/dvipsk/vmcms/README.VMCMS b/Build/source/texk/dvipsk/vmcms/README.VMCMS
new file mode 100644
index 00000000000..3312ddcc7a4
--- /dev/null
+++ b/Build/source/texk/dvipsk/vmcms/README.VMCMS
@@ -0,0 +1,168 @@
+README.VMCMS: Remarks and history of the VM/CMS port of DVIPS.
+
+Appropos DVIPS version 5.495, 5.55.
+
+Written by Jim Hafner (hafner@almaden.ibm.com).
+Last revised 10 Nov. 1992.
+
+Version 5.55 checked and slightly modified on 2 May 1994.
+
+NOTE: This port was not done by Tom Rokicki and he has no responsibility
+for it. You can direct questions to the name and address above.
+
+The current set of changes and enhancements to the VM/CMS port over
+the previous release should be fairly complete. Lots of things have
+changed and been enhanced.
+
+Here are some of the features of the port and VM/CMS package:
+
+1) We have completely revised the MKDVIPS EXEC so that it behaves
+ a bit more like the Unix 'make' facility. In particular, it
+ now allows for command line options to do any or all of the
+ package building for the DVIPS program, the AFM2TFM program,
+ the HEADERS files and to clean up the TEXT and LOAD MAP files
+ after completion. This has only been tested with C/370, not,
+ in particular with Waterloo C.
+
+ Furthermore, it also does a rudimentary time stamp check of
+ existing TEXT files against that for the corresponding C file
+ and ALL H files so that the compiler will not be called unless
+ it seems necessary.
+
+ Note that it checks ALL H files in all ACCESSED disks. This can
+ be fixed by simply editing the MKDVIPS EXEC. See the file itself
+ for more detailed information.
+
+2) We have completed the port of AFM2TFM. If should now produce
+ identical files on VM/CMS as on Unix (it certainly does as far as
+ we could test it). There is a small front-end EXEC included that
+ sets up the necessary run-time environment. The current version is
+ extensively revised from the original port due to Alessio Guglielmi
+ and Marco Prevedelli of Pisa. The syntax for the EXEC is the same
+ as described in the DVIPS manual and the manpage is available as
+ AFM2TFM.DOC.
+
+3) The DVIPS front-end EXEC has been extensively remodeled. It now
+ supports automatic font generation at the EXEC level (and the
+ MODULE level with the appropriate command line options).
+ More on this feature later.
+
+ The EXEC assumes that the first command line argument is the
+ dvifilename. The online documentation indicates this as well,
+ though DVIPS.DOC does not. This is NOT required by the MODULE,
+ just the EXEC, and only to make parsing the arguments easier.
+
+ The current version of this exec handles the LOADLIB and TXTLIB
+ save/reset/restore processes much better, so users with very
+ large libraries accessed will not have them lost along the way.
+
+ This version does not access any font disks since that is surely
+ site dependent. So, it assumes that the required fonts are
+ available. It also assumes that MF is somewhere to be found.
+
+ Local installers might want to modify this exec in the following
+ way. Parse the command line options for a -P PRINTER specification.
+ If found, then either use PRINTER to determine which font disk
+ to access OR read the corresponding CONFIG.PRINTER file and use
+ the 'M' option to get the Metafont mode for that PRINTER. Then
+ use that mfmode to access the right font disk.
+
+4) AUTOMATIC FONT GENERATION:
+ This can be handled in two ways, at the installers or users
+ discretion.
+
+ First, we have included a MakeTeXP EXEC which we think is pretty
+ generic and should need little modifications. (See below for
+ a few additional comments.)
+
+ This MakeTeXP EXEC can be called in two different ways. The default
+ (based on DVIPS EXEC) is to have DVIPS run completely and create
+ a MISSFONT LOG file for any missing fonts. If there are any found,
+ then the DVIPS EXEC prompts the user, asking to attempt to generate
+ the fonts. If requested, then MakeTeXP EXEC is called by processing
+ each line of MISSFONT LOG. If this process completes, then the
+ user is again prompted. This time, the user can specify an exit
+ from the EXEC or to RE-invoke DVIPS (the module not the exec)
+ on the file. In this way, all the font generation can be handled
+ entirely OUTSIDE of the module, using no special system calls
+ (which have been known to cause memory clashes).
+
+ To make sure that DVIPS doesn't try to make the system call,
+ a '-M' flag is prepended to the options list. Consequently,
+ if the installer is sure that system calls will be safe, then
+ this option can be removed. Conversely, if a user wants to
+ risk it, putting '-M0' in the command line options will override
+ this default.
+
+ We mention explicitly that, contrary to the earlier VM/CMS port,
+ we have NOT disabled the system call within DVIPS itself.
+
+5) MakeTeXP EXEC: This exec is similar to the Unix version in that
+ if no Metafont mode is specified on the command line, then it
+ tries to 'guess' a mode from the base dpi. This part of the
+ exec is very site dependent and will need to be modified for your
+ location.
+
+ You might want to modify this exec to read some configuration
+ file like CONFIG.MODES or DVIPS.MODES and use this to set the
+ mfmode from the base dpi.
+
+ Furthermore, we have written this to not invoke MF EXEC but to
+ call MF MODULE directly. We hope that this will be more generic
+ since we structure the parameters as MF MODULE wants them and not
+ as some fancy execs might.
+
+ We have set up a special default for passing arguments to the
+ module. Namely,
+ &plain modes; \mode=mfmode; ...
+ where 'modes' is the name of your local .MF file that contains
+ the mode definitions. Because of this, each output file of MF
+ will have a filename of MODES. Later in the exec, these output
+ files are renamed with the font input filename. If you have a
+ mode def file of a different name, you will need to change the
+ defining variable (localModeFile) accordingly. If you don't have
+ such a file, then you will probably have to modify this EXEC
+ somewhat to compensate.
+
+ All (we hope) site dependent parts of the code are tagged boldly
+ with 'SITE DEPENDENCIES'. Look at these locations for places that
+ might require modifications.
+
+5) As before, the .dvipsrc file referred to in the manuals has the new
+ name DVIPS.PROFILE on VM/CMS.
+
+6) Online documentation is available by invoking DVIPS with no
+ arguments or filename. You can also browse the file dvips.doc for
+ some additional comments (this was converted from the Unix manpage
+ via, on Unix, "nroff -man dvips.1 | col -b > vmcms/dvips.doc"
+ and so some comments may not be appropriate for VM/CMS, e.g.,
+ the order of the filename in the command line arguments.
+
+8) Since there are no pipes on VM/CMS, the option -f is meaningless.
+ Also, the output is always written to a file, with the same filename
+ as the dvi file and filetype "PS". You can always override this with
+ the -o option.
+
+9) Since there are no PATHs in VM/CMS, the H, P, S and T configuration
+ file options are meaningless. The DVIPS.EXEC file should make sure
+ that all the necessary disks are linked (we have all .tfm, .pro,
+ config. and other files on our main TeX disk, with the EXECs and
+ MODULES -- only our fonts (the pk files) are on separate disks.)
+
+
+To compile the programs, run the program MKDVIPS.EXEC program. Be
+sure you edit this file first to make sure that your C/370 programs
+disks and libraries are all correctly link. See the comments at the
+beginning of that file for more information. When complete, all the
+necessary modules and files should be built, on your primary
+write-accessed disk. You may need to move them to their destination
+manually.
+
+
+THANKS:
+Some of this port was provided courtesy of Alessio Guglielmi
+(guglielm@di.unipi.it) and Marco Prevedelli
+(prevedelli@ipisnsva.bitnet) with help from via Michel Goossens
+(goossens@cernvm.bitnet) and Ronald Kappert (R.Kappert@uci.kun.nl).
+Acknowledgements to Shashi Sathaye for fix to 5.55 and other
+helpful hints for the original port of 5.495.
diff --git a/Build/source/texk/dvipsk/vmcms/afm2tfm.doc b/Build/source/texk/dvipsk/vmcms/afm2tfm.doc
new file mode 100644
index 00000000000..e1df6a38311
--- /dev/null
+++ b/Build/source/texk/dvipsk/vmcms/afm2tfm.doc
@@ -0,0 +1,323 @@
+
+
+
+ AFM2TFM(1) (9 August 1990) AFM2TFM(1)
+
+
+
+ NAME
+ afm2tfm - convert Adobe font metrics to TeX font metrics
+
+ SYNOPSIS
+ afm2tfm foo1[.afm] [ -e ratio ] [ -s slant ] [ -t foo2[.tfm]
+ ] [ -v bar[.vpl] | -V bar[.vpl] ] [ foo3[.tfm] ]
+
+ DESCRIPTION
+ PostScript fonts are (or should be) accompanied by font metric
+ files such as Times-Roman.afm, which describes the
+ characteristics of the font called Times-Roman. To use such
+ fonts with TeX, we need TFM files that contain similar
+ information. The command
+
+ afm2tfm Times-Roman.afm Times-Roman.tfm
+
+ (which can be reduced to simply
+
+ afm2tfm Times-Roman
+
+ by taking default shortcuts) will create the necessary file
+ Times-Roman.tfm, which can then be moved to the directory where
+ TeX normally looks for font metric information. The PostScript
+ conversion program dvips will also treat Times-Roman as a
+ resident PostScript font if you include the line
+
+ Times-Roman
+
+ in the file psfonts.map.
+
+ The file names used in this manual page are not consistent with
+ the new font naming scheme implemented by Karl Berry; please
+ refer to the main dvips.tex documentation for the correct names
+ to use.
+
+ PostScript fonts have a different encoding scheme from that of
+ plain TeX. Although both schemes are based on ASCII, special
+ characters such as ligatures and accents are handled quite
+ differently. Therefore we obtain best results by using a
+ "virtual font" interface, which makes TeX act as if the
+ PostScript font had a standard TeX encoding. Such a virtual
+ font can be obtained, for example, by the command
+
+ afm2tfm Times-Roman -v times
+
+ or, more fully, by:
+
+ afm2tfm Times-Roman.afm -v times.vpl Times-Roman.tfm
+
+ This produces two outputs, namely the "virtual property list"
+ file times.vpl and the TeX font metric file Times-Roman.tfm.
+ The latter file describes an "actual font" on
+
+
+
+ Page 1 (printed 2/26/92)
+
+
+
+
+
+
+ AFM2TFM(1) (9 August 1990) AFM2TFM(1)
+
+
+
+ which the virtual font is based.
+
+ If you wish to specify a different TFM file name than the
+ default, you can use the -t option; this will override any
+ default TFM file name that would be calculated from the input
+ file name.
+
+ To use the font in TeX, you should first run
+
+ vptovf times.vpl times.vf times.tfm
+
+ then install the file times.vf in the directory for virtual
+ fonts and install times.tfm in the directory for TeX font
+ metrics. (You can also make more complex virtual fonts by
+ editing times.vpl first.) Once this has been done, you're all
+ set. You can use code like this in TeX henceforth:
+
+ \font\myfont=times at 10pt
+ \myfont
+ Hello, I am being typeset in Times-Roman.
+
+
+ Note that there are two fonts, one actual (`Times-Roman', which
+ is analogous to a raw piece of hardware) and one virtual
+ (`times', which has typesetting knowhow added). You could also
+ say `\font\TR=Times-Roman at 10pt' and typeset directly with
+ that, but then you would have no ligatures or kerning, and you
+ would have to use Adobe character positions for special letters
+ like \ae. The virtual font called times not only has ligatures
+ and kerning, and most of the standard accent conventions of
+ TeX, it also has a few additional features not present in the
+ Computer Modern fonts. For example, it includes all the Adobe
+ characters (such as the Polish ogonek and the French
+ guillemots). It also allows you to type 58 accented letters
+ from `Aacute' to `zcaron' as if they were ligatures --- namely
+ as `acute' followed by `A', etc., where you can get `acute'
+ (\char 19) by defining a suitable control sequence. (The 58
+ constructed characters are found in the AFM file, and
+ constructed as specified by Adobe; you may wish to adjust the
+ spacing and/or add additional accent combinations by editing
+ the VPL file.) The only things you lose from ordinary TeX text
+ fonts are the dotless j (which can be hacked into the VPL file
+ with literal PostScript specials if you have the patience) and
+ uppercase Greek letters (which just don't exist unless you buy
+ them separately).
+
+ These fonts can be scaled to any size. Go wild! Note however,
+ that using PostScript fonts does use up the printer's virtual
+ memory and it does take time. You may find downloading the
+ Computer Modern fonts to be faster than using the built-in
+ PostScript fonts!
+
+
+
+ Page 2 (printed 2/26/92)
+
+
+
+
+
+
+ AFM2TFM(1) (9 August 1990) AFM2TFM(1)
+
+
+
+ OPTIONS
+ Special effects are also obtainable, with commands such as
+
+ afm2tfm Times-Roman -s .167 -v timessl Times-Slanted
+
+ which create timessl.vpl and Times-Slanted.tfm. To use this,
+ proceed as above but put the line
+
+ Times-Slanted "/Times-Roman .167 SlantFont"
+
+ into psfonts.map. Then Times-Slanted will act as if it were a
+ resident font, although it is actually constructed from
+ Times-Roman by PostScript hackery. (It's an oblique version of
+ Times-Roman, obtained by slanting everything 1/6 to the right.)
+ Similarly, you can get an extended font by
+
+ afm2tfm Times-Extended -e 1.2 -v timesx Times-Extended
+
+ and by recording the pseudo-resident font
+
+ Times-Extended "/Times-Roman 1.2 ExtendFont"
+
+ The command line switches are:
+
+ -e ratio
+ All characters are stretched horizontally by the stated
+ ratio; if it is less than 1.0, you get a condensed font.
+
+ -s slant
+ All characters are slanted to the right by the stated
+ slant; if it is negative, the letters slope to the left
+ (or they might be upright if you start with an italic
+ font).
+
+ -v file[.vpl]
+ Generate a virtual property list (VPL) file as well as a
+ TFM file.
+
+ -V file[.vpl]
+ Same as -v, but the virtual font generated is a caps
+ and-small-caps font obtained by scaling uppercase letters
+ by .8 to typeset lowercase. This font handles accented
+ letters and retains proper kerning.
+
+
+ NON-RESIDENT POSTSCRIPT FONTS
+ If you want to use a non-printer-resident PostScript font for
+ which you have a .pfb file (an Adobe Type 1 font program), you
+ can make it act like a resident font by putting a `<' sign and
+ the name of the .pfb file just after the font name in the
+ psfonts.map file entry. For example,
+
+
+
+ Page 3 (printed 2/26/92)
+
+
+
+
+
+
+ AFM2TFM(1) (9 August 1990) AFM2TFM(1)
+
+
+
+ StoneInformal <StoneInformal.pfb
+
+ will cause dvips to include StoneInformal.pfb in your document
+ as if it were a header file, whenever the pseudo-resident font
+ StoneInformal is used in a document. Similarly, you can
+ generate transformed fonts and include lines like
+
+ StoneInformal-Condensed <StoneInformal.pfb "/StoneInformal .8 ExtendF
+
+ in psfonts.map, in which case StoneInformal.pfb will be loaded
+ whenever StoneInformal-Condensed is used. (Each header file is
+ loaded at most once per document. The .pfb files should be
+ installed in the config directory with the other header files.)
+
+
+ FONT ALIASES
+ Some systems don't handle files with long names well---MSDOS
+ and TWENEX are two notable examples. For this reason, dvips
+ will accept an alias for such fonts. Such an alias shoul be
+ the first word on the psfonts.map line. For instance, if we
+ wanted the name ptmr to be used for Times-Roman since our
+ computer can't handle long names, we would use the following
+ line in our psfonts.map file:
+
+ ptmr Times-Roman
+
+ The TFM file must have the name ptmr.tfm.
+
+ The parsing of the psfonts.map file should be explained to
+ eliminate all confusion. Each line is separated into words,
+ where words are separated by spaces or tabs. If a word begins
+ with a double quote, however, it extends until the next double
+ quote or the end of the line. If a word starts with a less
+ than character, it is treated as a font head file (or
+ downloaded PostScript font). If a word starts with a double
+ quote, it is special instructions on how to generate that font.
+ Otherwise it is a name. The first such name is always the name
+ TeX uses for the font and is also the name of the TFM file. If
+ there is another name word, that name is used as the PostScript
+ name; if there is only one name word, it is used for both the
+ TeX name and the PostScript name.
+
+ Note that the aliases also register the full PostScript name,
+ so the single line
+
+ ptmr Times-Roman
+
+ would allow dvips to `find' the ptmr font as well as the
+ Times-Roman font.
+
+
+
+ Page 4 (printed 2/26/92)
+
+
+
+
+
+
+ AFM2TFM(1) (9 August 1990) AFM2TFM(1)
+
+
+
+ Incidentally, many font files (e.g., in the Adobe Type Library)
+ include more characters internally than you can access directly
+ without making a few changes. These characters typically have
+ code -1 in the afm file and no corresponding "constructed
+ character" (CC) specification. For example, in Adobe Garamond
+ there are Eth and eth, Thorn and thorn, plus things like
+ copyright and onehalf, plus 58 accented letters Aacute thru
+ zcaron (with accents over caps much better looking than you can
+ get from constructed accents). To use these characters, give
+ them character codes between 0 and 255 in the afm file, and
+ build the corresponding EncodingVector (instead of
+ StandardEncoding) in the pfb file. Then afm2tfm will generate
+ a vpl file that includes accented characters as ligatures, as
+ explained above; for example, `Aacute' will be accessible as
+ `acute' followed by `A' (as well as by its character code in
+ the virtual font).
+
+ FILES
+ psfonts.map in the config directory used by dvips (update
+ this). ../afm/Makefile in the dvips sources (look at this for
+ examples).
+
+ SEE ALSO
+ dvips(1), tex(1), vptovf(1)
+
+ BUGS
+ An option to add letterspacing to the virtual font was rejected
+ by Knuth because it would make the fi and f ligatures break the
+ normal rhythmic pattern.
+
+ AUTHORS
+ Tomas Rokicki <rokicki@neon.stanford.edu> and Don Knuth
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page 5 (printed 2/26/92)
+
+
+
diff --git a/Build/source/texk/dvipsk/vmcms/dvips.doc b/Build/source/texk/dvipsk/vmcms/dvips.doc
new file mode 100644
index 00000000000..5e7ea40a20e
--- /dev/null
+++ b/Build/source/texk/dvipsk/vmcms/dvips.doc
@@ -0,0 +1,65 @@
+
+
+
+ DVIPS(1) TeXware (13 February 1992) DVIPS(1)
+
+
+
+ NAME
+ dvips - convert a TeX DVI file to PostScript
+
+ SYNOPSIS
+ dvips [ options ] file[.dvi]
+
+ DESCRIPTION
+ The program dvips converts a DVI file file[.dvi] produced by TeX
+ (or by some other processor like GFtoDVI) and converts it to
+ PostScript, normally sending the result directly to the
+ laserprinter. The DVI file may be specified without the .dvi
+ extension. Fonts used may either be resident in the printer or
+ defined as bitmaps in PK files, or a `virtual' combination of
+ both. If the MakeTeXPK program is installed, dvips will
+ automatically invoke METAFONT to generate fonts that don't
+ already exist.
+
+ For more information, see the manual dvips.tex is in the
+ TEXINPUTS directory. The manual can be printed with the
+ following commands: tex dvips dvips dvips -o dvips.ps lpr
+ dvips.ps
+
+ OPTIONS
+ A summary of command line options can be obtained by running
+ dvips without a filename. For more details refer to dvips.tex.
+
+ SEE ALSO
+ mf(1), afm2tfm(1), tex(1), latex(1), lpr(1)
+
+ NOTES
+ PostScript is a registered trademark of Adobe Systems
+ Incorporated.
+
+ AUTHOR
+ Tomas Rokicki <rokicki@cs.stanford.edu>; extended to virtual
+ fonts by Don Knuth.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page 1 (printed 2/24/92)
+
+
+
diff --git a/Build/source/texk/dvipsk/vmcms/dvipscms.h b/Build/source/texk/dvipsk/vmcms/dvipscms.h
new file mode 100644
index 00000000000..d17d959027e
--- /dev/null
+++ b/Build/source/texk/dvipsk/vmcms/dvipscms.h
@@ -0,0 +1,153 @@
+/*
+ * These are changes needed for the VM/CMS version of dvips as of
+ * May 21, 1991. Revised 12/1/92.
+ * This was written by J. Hafner, E. Blanz and M. Flickner of IBM Research,
+ * Almaden Research Center. Contact hafner@almaden.ibm.com.
+ * The changes to the rest of the code can be found by searching for
+ * "VMCMS".
+ *
+ * This code can be included in dvips, subject to the same restrictions as
+ * in the copyright notice.
+ */
+extern char *malloc();
+/*
+ * Added ascii to ebcdic conversion table for VMCMS.
+ * Only for the printable characters. This is used by DVIPS.
+*/
+char ascii2ebcdic[256] = {
+ 0, 1, 2, 3, 53, 45, 46, 47,
+ 22, 5, 37, 11, 12, 64, 14, 15,
+ 16, 17, 18, 19, 60, 61, 50, 38,
+ 24, 25, 63, 39,111,111,111,111,
+ 64, 90,127,123, 91,108, 80,125,
+ 77, 93, 92, 78,107, 96, 75, 97,
+ 240,241,242,243,244,245,246,247,
+ 248,249,122, 94, 76,126,110,111,
+ 124,193,194,195,196,197,198,199,
+ 200,201,209,210,211,212,213,214,
+ 215,216,217,226,227,228,229,230,
+ 231,232,233,173,224,189, 95,109,
+ 121,129,130,131,132,133,134,135,
+ 136,137,145,146,147,148,149,150,
+ 151,152,153,162,163,164,165,166,
+ 167,168,169,192, 79,208,161, 7,
+ 128,129,130,131,132,133,134,135,
+ 136,137,138,139,140,141,142,143,
+ 144,145,146,147,148,149,150,151,
+ 152,153,154,155,156,157,158,159,
+ 160,161,162,163,164,165,166,167,
+ 168,169,170,171,172,173,174,175,
+ 176,177,178,179,180,181,182,183,
+ 184,185,186,187,188,189,190,191,
+ 192,193,194,195,196,197,198,199,
+ 200,201,202,203,204,205,206,207,
+ 208,209,210,211,212,213,214,215,
+ 216,217,218,219,220,221,222,223,
+ 224,225,226,227,228,229,230,231,
+ 232,233,234,235,236,237,238,239,
+ 240,241,242,243,244,245,246,247,
+ 248,249,250,251,252,253,254,255
+};
+/*
+ * Added ebcdic to ascii conversion table for VMCMS.
+ * Only for the printable characters. This inverts the
+ * table above and is used by AFM2TFM.
+*/
+char ebcdic2ascii[256] = {
+ 0, 1, 2, 3, 4, 9, 6,127,
+ 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 8, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 10, 23, 27,
+ 40, 41, 42, 43, 44, 5, 6, 7,
+ 48, 49, 22, 51, 52, 4, 54, 55,
+ 56, 57, 58, 59, 20, 21, 62, 26,
+ 32, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 46, 60, 40, 43,124,
+ 38, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 33, 36, 42, 41, 59, 94,
+ 45, 47, 98, 99,100,101,102,103,
+ 104,105,124, 44, 37, 95, 62, 63,
+ 112,113,114,115,116,117,118,119,
+ 120, 96, 58, 35, 64, 39, 61, 34,
+ 128, 97, 98, 99,100,101,102,103,
+ 104,105,138,123,140,141,142,143,
+ 144,106,107,108,109,110,111,112,
+ 113,114,154,125,156,157,158,159,
+ 160,161,115,116,117,118,119,120,
+ 121,122,170,171,172, 91,174,175,
+ 176,177,178,179,180,181,182,183,
+ 184,185,186,187,188, 93,190,191,
+ 192, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73,202,203,204,205,206,207,
+ 208, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82,218,219,220,221,222,223,
+ 92,225, 83, 84, 85, 86, 87, 88,
+ 89, 90,234,235,236,237,238,239,
+ 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57,250,251,252,253,254,255
+ };
+/*
+ * This redefines fopen for VMCMS, truncating long filenames for
+ * portability of TeX source.
+ */
+#ifdef fopen
+#undef fopen
+#endif
+FILE *cmsfopen(filename, mode)
+char *filename, *mode ;
+{
+ char cmsfile[21] ;
+ char *save_file;
+ char *ptr;
+ void exit() ;
+
+ if (!(save_file =
+ (char *)malloc(strlen(filename) + 1, sizeof(char)))) {
+ fprintf (stderr, "sorry---out of memory\n");
+ exit(10);
+ }
+
+ strcpy(save_file, filename);
+
+ cmsfile[0] = '\0' ;
+
+ ptr = strtok(save_file, ". ") ;
+ strncat(cmsfile, ptr, 8) ;
+
+ strcat(cmsfile, ".");
+
+ if (!(ptr = strtok(NULL, ". "))) {
+/* Remove this, not much help anyway since most filenames are built
+ internally. */
+/*
+ fprintf(stderr, "\n<%s> is not a legitimate VM/CMS file name\n",
+ filename);
+ fprintf(stderr, "...we'll try to continue...\n");
+*/
+ return(NULL);
+ }
+
+ strncat(cmsfile, ptr, 8);
+
+ if (ptr = strtok(NULL, ". ")) {
+ strcat(cmsfile, ".");
+ strncat(cmsfile, ptr, 2);
+ }
+
+ free(save_file);
+
+ return(fopen(cmsfile, mode));
+
+}
+
+
+/*
+ * access.c for VMCMS
+ */
+int access (path, amode)
+char *path;
+int amode;
+{
+ return(1);
+}
diff --git a/Build/source/texk/dvipsk/vms/MAKETEXPK.COM b/Build/source/texk/dvipsk/vms/MAKETEXPK.COM
new file mode 100644
index 00000000000..594d49092d7
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/MAKETEXPK.COM
@@ -0,0 +1,127 @@
+!!/bin/sh
+!
+! This script file makes a new TeX PK font, because one wasn't
+! found. Parameters are:
+!
+! name dpi bdpi magnification [mode]
+!
+! `name' is the name of the font, such as `cmr10'. `dpi' is
+! the resolution the font is needed at. `bdpi' is the base
+! resolution, useful for figuring out the mode to make the font
+! in. `magnification' is a string to pass to MF as the
+! magnification. `mode', if supplied, is the mode to use.
+!
+! Note that this file must execute Metafont, and then gftopk,
+! and place the result in the correct location for the PostScript
+! driver to find it subsequently. If this doesn't work, it will
+! be evident because MF will be invoked over and over again.
+!
+! Of course, it needs to be set up for your site.
+!
+!
+$ set mess/nofa/nose/note/noid
+$ newtex
+$ set mess/se/fa/id/te
+$ NAME = f$sear("mf_inputs:"+p1+".mf")
+$ onlyname=f$parse(name,,,"name")
+$ name= f$parse(name,,,"device")+f$parse(name,,,"directory")+f$parse(name,,, -
+ "name")
+$ DPI = f$integer(P2)
+$ BDPI = f$integer(P3)
+$ MAG = f$edit(P4,"LOWERCASE")
+$ MODE = P5
+$ if MODE .EQS. "" then
+$ if BDPI .EQ. 300
+$ then
+$ MODE := "imagen"
+$ goto GotMode
+$ endif
+$ if BDPI .EQ. 400
+$ then
+$ MODE := "nexthi"
+$ goto GotMode
+$ endif
+$ if BDPI .EQ. 100
+$ then
+$ MODE := "nextscreen"
+$ goto GotMode
+$ endif
+$ if BDPI .EQ. 635
+$ then
+$ MODE := "linolo"
+$ goto GotMode
+$ endif
+$ if BDPI .EQ. 1270
+$ then
+$ MODE := "linohi"
+$ goto GotMode
+$ endif
+$ if BDPI .EQ. 2540
+$ then
+$ MODE := "linosuper"
+$ goto GotMode
+$ endif
+$ write sys$output "I don't know the mode for ",BDPI
+$ write sys$output "Have your system admin update MakeTeXPK"
+$ exit 1
+$ GotMode:
+$
+$ GFNAME = f$fao("!AS.!ASgf",onlyNAME,f$string(DPI))
+$ PKNAME = f$fao("!AS.!ASPK",onlyNAME,f$string(DPI))
+$
+$ pkfilename = f$fao("tex_pk:!AS",PKNAME)
+$ pkfile = f$search (pkfilename)
+$ if pkfile .EQS. ""
+$ then
+$! Clean up on normal or abnormal exit
+$ on control_y then goto ControlY
+$ on error then goto ControlY
+$ on severe_error then goto ControlY
+$
+$ OLDDIR = f$environment("DEFAULT")
+$ set def sys$login
+$ command = f$fao -
+ ("mf ""\mode:=!AS; mag:=!AS; scrollmode ; input !AS""", -
+ MODE,MAG,NAME)
+$ write sys$output "Creating font file for ",onlyname
+$ write sys$output "Please wait about 2 minutes"
+$ write sys$output ""
+$ set noon
+$ command
+$ set on
+$
+$ gffile=f$sear(onlyname+"."+f$str(dpi)+"gf")
+$ if gffile .EQS. ""
+$ then
+$ write sys$output "Metafont failed for some reason on ",gfname
+$ goto ControlY
+$ endif
+$
+$ gftopk 'gfname'
+$ delete/noconf/nolog 'gfname';
+$ delete/noconf/nolog 'onlyname'.lis;
+$
+$ if f$getsyi("nodename").eqs."VAXSNS"
+$ then
+$ on error then goto goodexit
+$ on severe_error then goto goodexit
+$ send/file/vms 'pkname' newtex
+$! write sys$output "------- ",pkname," has been sent to NEWTEX"
+$ send/file/vms 'onlyname'.tfm newtex
+$! write sys$output "------- ",onlyname,".TFM has been sent to NEWTEX"
+$ endif
+$
+$ goto GoodExit
+$ else
+$ write sys$output "tex_pk:",PKNAME," already exists!"
+$ exit
+$ endif
+$
+$
+$ GoodExit:
+$ set default 'olddir
+$ exit
+$
+$ ControlY:
+$ set default 'olddir
+$ exit 1
diff --git a/Build/source/texk/dvipsk/vms/Makefile b/Build/source/texk/dvipsk/vms/Makefile
new file mode 100644
index 00000000000..3bdd15523c7
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/Makefile
@@ -0,0 +1,281 @@
+#
+# Makefile for dvips. Edit this first part of the file.
+#
+# This version is for Vax/VMS running the Todd Aven MAKE program.
+#
+# First, the things that absolutely must be edited for your system.
+# Please, don't forget to edit MakeTeXPK in the same way!
+
+# where TeX is `rooted'. Sometimes /usr/local/lib/tex.
+# TEXDIR = /usr/lib/tex
+TEXDIR = /usr/lib/tex
+
+# another place pk, tfm, and vf files might be found.
+# LOCALDIR = /LocalLibrary/Fonts/TeXFonts
+LOCALDIR = /LocalLibrary/Fonts/TeXFonts
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# overridden by the environment variable TEXFONTS
+# TFMPATH = $(LOCALDIR)/tfm:$(TEXDIR)/fonts/tfm
+TFMPATH = ""TEX_FONTS:"" # TEX_FONTS is a searchlist.
+
+# the default path to search for PK files (usually omits `.')
+# Don't forget to add the directory that
+# MakeTeXPK puts the files! (In this case, /LocalLibrary/Fonts...)
+# overridden by the environment variable TEXPKS or TEXPACKED or PKFONTS
+# PKPATH = $(LOCALDIR)/pk:$(TEXDIR)/fonts/pk
+PKPATH = ""VC$3:[PHS595F.FONTS.%d]%f.PK,TEX_DISK:[TEX.FONTS.%d]%f.PK,""
+
+# the default path to search for VF files (usually omits `.')
+# overridden by the environment variable VFFONTS
+# VFPATH = $(LOCALDIR)/vf:$(TEXDIR)/fonts/vf
+VFPATH = ""TEX_VF:"" # TEX_VF may be a searchlist.
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH = """"
+
+# where the config files go
+# CONFIGDIR = $(TEXDIR)/ps
+CONFIGDIR = TEX$POSTSCRIPT: # The Physics Dept. DVIPS directory
+
+# the default path to search for config files
+# overridden by the environment variable TEXCONFIG
+# CONFIGPATH = .:$(CONFIGDIR)
+CONFIGPATH = "" ,SYS$LOGIN:,$(CONFIGDIR),""
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = $(TEXDIR)/ps
+HEADERDIR = TEX$POSTSCRIPT: # The Physics Dept. DVIPS directory
+
+# the default path to search for header files
+# HEADERPATH = .:$(HEADERDIR)
+HEADERPATH = "" ,SYS$LOGIN:,$(HEADERDIR),""
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = $(TEXDIR)/inputs
+TEXMACRODIR = TEX_INPUTS:
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .:..:$(TEXDIR)/inputs
+FIGPATH = "" ,TEX_INPUTS:,"" # Include blank so it looks on default dir.
+
+# the place man pages are located.
+# MANDIR = /usr/man/man1
+MANDIR = TEX_INPUTS:
+
+# change -DDEFRES=300 or whatever is required
+# if the default resolution is not 300 dpi,
+# add -DDEBUG to turn on debugging capability
+# add -DTPIC for tpic support
+# add -DFONTLIB to search font libraries
+# add -DSEARCH_SUBDIRECTORIES to search the FONTSUBDIRPATH.
+# add -DHAVE_GETCWD if you have getcwd (relevant only for subdir searching)
+# add -DIBM6000 for compiling on IBM 6000 systems
+# add -DCREATIONDATE if your system has a working time() and you want dated files
+# (for VM/CMS, see the MKDVIPS.EXEC file in the vmcms subdirectory).
+#
+# If you define FONTLIB, make sure to also give definitions to
+# FLIPATH and FLINAME.
+#
+# DEFS= -DTPIC -DDEBUG -DDEFRES=400
+DEFS= TPIC,DEBUG,DEFRES=300,HAVE_GETCWD,ANSI,CREATIONDATE
+
+# either use
+# OPT = -g -Wall -funsigned-char
+# or
+# OPT = -O -s -Wall -funsigned-char
+OPT =
+
+# libraries to include (-lm -lc on most systems)
+#FLIBS= -lNeXT_s -lsys_s
+FLIBS=,sys$disk:[.vms]vaxcrtl/opt
+# LIBS= # VAXC
+LIBS= ,gnu_cc:[000000]GCCLIB/LIB # GNUC
+
+# If you are compiling dvips for suid or other privileges, you will
+# definitely want to define the following symbol; else don't.
+# SECURE = -DSECURE
+SECURE =
+
+# If you want EMTEX specials, define the following.
+EMTEX =,EMTEX
+
+# for SYSV (and friends which use <string.h> instead of <strings.h>)
+# define the c-compiler flag
+# add -D_POSIX_SOURCE if you are POSIX (also define SYSV) (only relevant
+# for subdir searching)
+# SYS = -DSYSV
+SYS =
+
+# Define this to be whatever you use for installation. If you don't have
+# install, use a script that invokes copy and chmod's the files
+# appropriately.
+# INSTALL = install
+INSTALL = copy
+
+# where the installed binary goes
+# BINDIR = /usr/bin
+BINDIR = TEX$POSTSCRIPT: # The Physics Dept. DVIPS directory
+
+# Define the default paper format (Actually no longer used)
+DEFPFMT =
+
+# PATHS =\ # VAXC
+# ,TFMPATH="$(TFMPATH)",\
+# PKPATH="$(PKPATH)",\
+# VFPATH="$(VFPATH)",\
+# HEADERPATH="$(HEADERPATH)",\
+# CONFIGPATH="$(CONFIGPATH)",\
+# CONFIGFILE="""$(CONFIGFILE)""",\
+# FONTSUBDIRPATH="$(FONTSUBDIRPATH)",\
+# FIGPATH="$(FIGPATH)"
+PATHS = # GNUC
+
+INC = /include="SYS$DISK:[],SYS$SHARE:"
+# CC = CC # VAXC
+CC = GCC/NoCase_Hack # GNUC
+CFLAGS = /NoList $(INC)-
+ /Define=($(DEFS) $(OPT) $(SYS) $(SECURE) $(EMTEX) $(DEFPFMT))
+CFLAGS2 = /NoList $(INC)-
+ /Define=($(DEFS) $(OPT) $(SYS) $(SECURE) $(EMTEX) $(DEFPFMT) $(PATHS))
+LFLAGS = /NoMap
+
+SRC = dospecial.c dviinput.c fontdef.c loadfont.c dvips.c tfmload.c \
+ download.c prescan.c scanpage.c skippage.c output.c scalewidth.c \
+ dosection.c dopage.c resident.c search.c unpack.c drawPS.c \
+ header.c makefont.c repack.c virtualfont.c dpicheck.c finclude.c \
+ pprescan.c papersiz.c flib.c color.c bbox.c emspecial.c
+
+OBJ = dospecial.obj, dviinput.obj, fontdef.obj, loadfont.obj, dvips.obj,\
+ tfmload.obj, download.obj, prescan.obj, scanpage.obj, skippage.obj,\
+ output.obj, scalewidth.obj, dosection.obj, dopage.obj, resident.obj,\
+ search.obj, unpack.obj, drawPS.obj, header.obj, makefont.obj,\
+ repack.obj, virtualfont.obj, dpicheck.obj, finclude.obj, \
+ pprescan.obj, papersiz.obj, flib.obj, color.obj, bbox.obj, \
+ emspecial.obj, vaxvms.obj
+
+all : afm2tfm.exe dvips.exe tex.pro texps.pro texc.pro special.pro \
+ finclude.pro color.pro crop.pro dvips.hlb
+
+dvips.exe : $(OBJ)
+ Link /Exe=DviPS.exe $(LFLAGS) $(OBJ) $(LIBS) $(FLIBS)
+
+# dvips.obj : dvips.c vmscli.c # VAXC
+dvips.obj : dvips.c vmscli.c vms_gcc_paths.h # GNUC
+ $(CC) $(CFLAGS2) dvips.c
+
+afm2tfm.exe : afm2tfm.obj
+ Link $(LFLAGS) afm2tfm.obj $(LIBS) $(FLIBS)
+
+afm2tfm.obj : afm2tfm.c
+ $(CC) $(CFLAGS) afm2tfm.c
+
+$(OBJ) : dvips.h debug.h vms.h
+
+flib.obj resident.obj dvips.obj loadfont.obj tfmload.obj : paths.h
+
+vaxvms.obj : [.vms]vaxvms.c
+! $(CC) $(CFLAGS) [.vms]vaxvms.c /object=[]vaxvms.obj
+
+vmscli.c : [.vms]vmscli.c
+ Copy /Log [.vms]vmscli.c []
+
+vms.h : [.vms]vms.h
+ Copy /Log [.vms]vms.h []
+
+vms_gcc_paths.h : [.vms]vms_gcc_paths.h # GNUC
+ Copy /Log [.vms]vms_gcc_paths.h [] # GNUC
+
+*.obj : *.c
+ $(CC) $(CFLAGS) $<
+
+squeeze.exe : squeeze.obj
+ Link $(LFLAGS) squeeze.obj $(LIBS) $(FLIBS)
+
+squeeze.obj : squeeze.c
+ $(CC) $(CFLAGS) squeeze.c
+
+tex.pro : tex.lpro squeeze.exe
+ MCR sys$disk:[]squeeze tex.lpro tex.pro
+
+texc.pro: texc.lpro squeeze.exe
+ MCR sys$disk:[]squeeze texc.lpro texc.pro
+
+texc.lpro: tex.lpro
+ @[.vms]texc_scr.com # tex.lpro texc.lpro
+
+texps.pro : texps.lpro squeeze.exe
+ MCR sys$disk:[]squeeze texps.lpro texps.pro
+
+special.pro : special.lpro squeeze.exe
+ MCR sys$disk:[]squeeze special.lpro special.pro
+
+finclude.pro : finclude.lpro squeeze.exe
+ MCR sys$disk:[]squeeze finclude.lpro finclude.pro
+
+color.pro : color.lpro squeeze.exe
+ MCR sys$disk:[]squeeze color.lpro color.pro
+
+crop.pro : crop.lpro squeeze.exe
+ MCR sys$disk:[]squeeze crop.lpro crop.pro
+
+dvips.hlb : dvips.hlp
+ Library/Create=Blocks:40/Help dvips.hlb dvips.hlp
+
+dvips.hlp : [.vms]dvips.rnh
+ Runoff [.vms]dvips.rnh
+
+install : afm2tfm.exe dvips.exe dvips.hlb [.vms]MakeTeXPK.com \
+ tex.pro texc.pro texps.pro special.pro finclude.pro color.pro \
+ crop.pro config.ps psfonts.map epsf.tex epsf.sty rotate.tex \
+ rotate.sty colordvi.tex colordvi.sty blackdvi.tex blackdvi.sty
+# - mkdir $(BINDIR)
+# - mkdir $(HEADERDIR)
+# - mkdir $(CONFIGDIR)
+# - mkdir $(MANDIR)
+# - mkdir $(TEXMACRODIR)
+ $(INSTALL) afm2tfm.exe $(BINDIR)afm2tfm.exe
+ $(INSTALL) dvips.exe $(BINDIR)dvips.exe
+ $(INSTALL) dvips.hlb $(BINDIR)dvips.hlb
+# $(INSTALL) [.VMS]MakeTeXPK.COM $(BINDIR)MakeTeXPK.COM
+ $(INSTALL) tex.pro $(HEADERDIR)
+ $(INSTALL) texc.pro $(HEADERDIR)
+ $(INSTALL) texps.pro $(HEADERDIR)
+ $(INSTALL) special.pro $(HEADERDIR)
+ $(INSTALL) finclude.pro $(HEADERDIR)
+ $(INSTALL) color.pro $(HEADERDIR)
+ $(INSTALL) crop.pro $(HEADERDIR)
+ $(INSTALL) config.ps $(CONFIGDIR)$(CONFIGFILE)
+ $(INSTALL) psfonts.map $(CONFIGDIR)
+ $(INSTALL) epsf.tex $(TEXMACRODIR)
+ $(INSTALL) epsf.sty $(TEXMACRODIR)
+ $(INSTALL) rotate.tex $(TEXMACRODIR)
+ $(INSTALL) rotate.sty $(TEXMACRODIR)
+ $(INSTALL) colordvi.sty $(TEXMACRODIR)
+ $(INSTALL) colordvi.tex $(TEXMACRODIR)
+ $(INSTALL) blackdvi.sty $(TEXMACRODIR)
+ $(INSTALL) blackdvi.tex $(TEXMACRODIR)
+ $(INSTALL) dvips.tex $(TEXMACRODIR)
+ $(INSTALL) dvipsmac.tex $(TEXMACRODIR)
+ $(INSTALL) dvips.1 $(MANDIR)
+ $(INSTALL) afm2tfm.1 $(MANDIR)
+
+veryclean :
+ Delete *.obj;*, dvips.exe;*, squeeze.exe;*, afm2tfm.exe;*,\
+ texc.lpro;*, *.pro;*, *.log;*, *.dvi;*
+
+clean :
+ Delete *.obj;*, squeeze.exe;*, afm2tfm.exe;*, *.log;*, *.dvi;*
+
+# lint :
+# lint $(DEFS) $(PATHS) $(SRC)
+# lint $(DEFS) squeeze.c
+# lint $(DEFS) afm2tfm.c
diff --git a/Build/source/texk/dvipsk/vms/README b/Build/source/texk/dvipsk/vms/README
new file mode 100644
index 00000000000..ec89bbc988a
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/README
@@ -0,0 +1,128 @@
+I backed out some of the changes, but it should compile and run on VMS.
+I removed the changes that guarantee that the scratch files get unique
+names; I did this because the resulting filenames would not work on
+some systems, and because if this is a problem I feel the correct
+solution would be to make sure each user is actually running in the
+correct unique directory, rather than changing the names of all of the
+temporary files that dvips might create. -tgr
+
+Original message:
+
+From: "Edward J. Groth" <groth@PUPGG.PRINCETON.EDU>
+To: doyle@mmm.lanl.gov, rokicki@CS.Stanford.EDU
+CC: groth@PUPGG.PRINCETON.EDU
+Message-ID: <009A5364.5D7EC83B.21977@PUPGG.PRINCETON.EDU>
+Subject: vms port and mods of hyper dvips 5.58
+Content-Type: text
+Content-Length: 155227
+Status: RO
+
+To: Mark Doyle and Tomas Rokicki
+
+I've picked up dvips version 5.58 from LANL, with Mark's hps
+modifications. I've ported (reported?) this to VMS. Below is a
+summary of my changes, followed by a copy of each changed
+routine (all changes are annotated with EJG).
+
+(It looks like whoever was keeping the vms port going hasn't
+worked on it for a while.)
+
+Thanks for the good work!
+
+ - Ed
+
+
+
+
+
+EJG 08-Jul-1996
+
+This directory contains dvips 5.58 hacked by Mark Doyle to put in
+mods for hyperps and hacked by me to make sure it ports to VMS.
+
+This was obtained by following links from http://xxx.lanl.gov/hypertex
+in early July, 1996.
+
+Dvips has been made for vms v6.2 (alpha and vax) using DEC C
+v5.0.
+
+Main changes I made:
+
+******
+dvips.c
+
+include subdirectory [.vms] where vmscli.c is included.
+
+get process id and use in constructing file names
+dvips_h_pidxxxxx.tmp and dvips_b_pidxxxxx.tmp to replace head.tmp
+and body.tmp, so we don't get a name collision if two users are
+using the same scratch space. Change all references to these
+names to reference the variables holding the new names.
+
+******
+hps.c
+
+replace head.tmp and body.tmp as above.
+
+replace ERROR with ERROR_HPS to avoid collision with error()
+function. Question: why us a boolean variable to represent a
+constant?
+
+after the former head.tmp and body.tmp files are copied to the
+output, they are deleted. (neatness)
+
+
+******
+output.c
+
+replace head.tmp and body.tmp as above. Required a little bit of
+extra logic when testing to see if the output file is the former
+head.tmp (so we don't put in a \n). Don't want to do the test if
+the HPS_FLAG hasn't been set.
+
+******
+dvips.h
+
+include subdirectory [.vms] where vms.h is included.
+
+******
+[.vms]vmscli.c
+
+add qualifiers for new options since this file was last updated.
+
+fix up some bugs in qualifiers.
+
+******
+[.vms]dvips.cld
+
+add qualifiers for new options since this file was last updated.
+
+fix up some bugs in qualifiers.
+
+******
+[.vms]dvips.hlp
+
+add help for new qualifiers added above.
+
+make help agree with what the qualifiers actually do. For
+example, the /filter qualifier, sends the output to stdout, but
+still requires an input file (it will not read from stdin).
+
+******
+[.vms]newmake.com
+
+Made from [.vms]make.com. Don't prompt for options - all
+hardwired as defaults, except fontlib is turned off. HPS is
+defined in all cc's, and /standard=vaxc is added to all cc's.
+
+hps.c is included in the compile and link steps
+
+options file is removed from the link steps.
+
+/----------------------------------------------------------------------\
+| Edward J. Groth | Phone: 609-258-4361 Fax: 609-258-6853 |
+| Physics Dept., Jadwin Hall | URL: http://pupgg.princeton.edu/~groth/ |
+| Princeton University | SPAN/HEPNET: PUPGG::GROTH=44117::GROTH |
+| Princeton, NJ 08544 | Internet: groth@pupgg.princeton.edu |
+\----------------------------------------------------------------------/
+
diff --git a/Build/source/texk/dvipsk/vms/README.VMS b/Build/source/texk/dvipsk/vms/README.VMS
new file mode 100644
index 00000000000..93698e30c02
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/README.VMS
@@ -0,0 +1,48 @@
+This is the beginnings of a port to VMS. The documentation is not yet
+complete, but the program works. To compile, set the following in
+MAKE.COM:
+
+Set TFMPATH to where the TFM files are located. Default is TEX$FONTS:
+ ($ TFMPATH = "TEX$FONTS:")
+
+Set PKPATH to where the PK fonts are located. Default is TEX_PK:
+ ($ PKPATH = "TEX_PK:")
+
+Set VFPATH to where the VF fonts are located. Default is TEX_VF:
+ ($ VFPATH = "TEX_VF:")
+
+Set FIGPATH to where the epsf and psfiles are located. Default is TEX_INPUTS:
+ ($ FIGPATH = "TEX_INPUTS:")
+
+Set HEADERPATH to where the header files are located. Default is
+TEX$POSTSCRIPT:,SYS$LOGIN:,"
+ ($ HEADERPATH = "TEX$POSTSCRIPT:,SYS$LOGIN:,")
+
+Set CONFIGPATH to where the config files are located. Default is
+TEX$POSTSCRIPT:
+ ($ CONFIGPATH = "TEX$POSTSCRIPT:")
+
+Set TPIC to ",TPIC" if you want TPIC support enabled. Default is enabled.
+ ($ TPIC = ",TPIC")
+
+Set DEBUG to ",DEBUG" if you want DEBUG support enabled. Default is enabled.
+ ($ DEBUG = ",DEBUG")
+
+Expect 1 warning in dospecial.c
+
+To install:
+
+dvips := $DIRECTORY:dvips
+maketexpk := @DIRECTORY:maketexpk
+
+Make sure that all the logicals defined above (eg, tex_pk, tex_vf) are
+actually defined.
+
+Again, this is a first cut, with improvements to come later. It has
+not been thoroughly tested. More documentation will be coming later,
+and possibly a VMS command line interface. If you have any problems or
+improvements, please let me know.
+
+Xev Gittler
+GTE Laboratories, Inc.
+xev@bunny.gte.com
diff --git a/Build/source/texk/dvipsk/vms/dvips.cld b/Build/source/texk/dvipsk/vms/dvips.cld
new file mode 100644
index 00000000000..a246e692448
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/dvips.cld
@@ -0,0 +1,55 @@
+! EJG 02-Jul-1996
+! Add secure qualifier
+! Add oddpages qualifier
+! Add evenpages qualifier
+! Default mode is letter rather than A4
+! Add downloadPS (as PK) fonts qualifier
+! Add hyperPS qualifier
+! EJG 07-Jul-1996
+! change output qualifier to remove placement=positional
+define verb dvips
+ image tex$postscript:dvips
+ parameter p1, label=dvifile, prompt="DVI File",
+ value(required,type=$infile)
+ qualifier copies, default, value(default=1)
+ qualifier debug default, value(required)
+ qualifier maxdrift default, value(required)
+ qualifier filter negatable
+ qualifier last, default, value(required)
+ qualifier manual, negatable
+ qualifier number, default, value(required)
+ qualifier output, nonnegatable,
+ value(type=$file,required) !EJG 07-Jul-1996
+ qualifier start, default, value(required)
+ qualifier quiet, negatable
+ qualifier reverse, negatable
+ qualifier sav_res, negatable
+ qualifier mode, value(list,default="letter") ! EJG 02-Jul-1996
+ qualifier magnification,default, value(required)
+ qualifier collate, default, value(default=1)
+ qualifier dpi, default, value(default=300)
+ qualifier ctrld, negatable
+ qualifier inc_com, negatable
+ qualifier comment, negatable
+ qualifier vm_save, negatable
+ qualifier h_dpi, default, value(required)
+ qualifier v_dpi, default, value(required)
+ qualifier compress, negatable
+ qualifier printer, default, value(required)
+ qualifier header, negatable, value(list,required)
+ qualifier absolute
+ qualifier epsf, negatable
+ qualifier prescan, negatable
+ qualifier pagecopies, default, value(default=1)
+ qualifier separate, negatable
+ qualifier cropmarks, negatable
+ qualifier sec_size, default, value(required)
+ qualifier help
+ qualifier makefont, default, negatable
+ qualifier psize, value(required)
+ qualifier poffset, value(required)
+ qualifier secure, negatable ! EJG 02-Jul-1996
+ qualifier oddpages, negatable ! EJG 02-Jul-1996
+ qualifier evenpages, negatable ! EJG 02-Jul-1996
+ qualifier downloadps, negatable ! EJG 02-Jul-1996
+ qualifier hyperps, negatable ! EJG 02-Jul-1996
diff --git a/Build/source/texk/dvipsk/vms/dvips.hlp b/Build/source/texk/dvipsk/vms/dvips.hlp
new file mode 100644
index 00000000000..760abc3bac4
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/dvips.hlp
@@ -0,0 +1,435 @@
+1 DVIPS
+
+! Modified 07-Jul-1996 - EJG
+! Fix description of filter (can write to stdout, but not read from stdin!
+! Change mode description, landscape used with others just gives
+! landscape. So took that out. Removed warning about quotes (not
+! necessary). Added tabloid.
+! Changed qualifier ctrl_d to ctrld to agree with cld file
+! Changed default for inc_com to be noinc_com to agree with dvips
+! Fix header qualifier
+!
+! Added comment about the manual to front and also under the
+! special heading.
+
+The dvips program converts a TEX dvi file into a PostScript file for
+printing or distribution. Seldom has such a seemingly easy programming
+task required so much effort. The dvips program has a number of features
+that set it apart from other PostScript drivers for TEX. The dvips
+driver generates excellent, standard PostScript, that can be included in
+other documents as figures or printed through a variety of spoolers. The
+generated PostScript requires very little printer memory, so very complex
+documents with a lot of fonts can easily be printed even on PostScript
+printers without much memory, such as the original Apple LaserWriter. The
+PostScript output is also compact, requiring less disk space to store and
+making it feasible as a transfer format. Missing fonts can be automatically
+generated if METAFONT exists on the system, or fonts can be converted from
+gf to pk format on demand. If a font cannot be generated, a scaled
+version of the same font at a different size can be used instead, although
+dvips will complain loudly about the poor aesthetics of the resulting
+output.
+
+A manual for dvips may be printed with the command:
+
+ printps tex_root:[local]dvips.ps
+
+In this manual, the command line options are for the unix variant
+of dvips. Our version has the qualifiers as detailed in this help
+file. Also, some of the latest options are not in the manual (in
+particular, the /hyperps option).
+
+ usage:
+ DVIPS filename[.dvi]
+
+2 /COPIES
+ /COPIES=num
+
+ Generate num copies of every page. Default is 1.
+ (For collated copies, see the /COLLATE option.)
+
+2 /DEBUG
+ /DEBUG=num
+
+ Set the debug flags. This is intended only for
+ emergencies or for unusual fact-finding expeditions; it
+ will work only if dvips has been compiled with the
+ DEBUG option. Use
+
+ num=1 for special
+
+ num=2 for paths
+
+ num=4 for fonts
+
+ num=8 for pages
+
+ num=16 for headers
+
+ num=32 for font compression
+
+ num=64 for files
+
+ num=128 for memory allocation
+
+ Use a value of -1 for maximum output.
+
+2 /MAXDRIFT
+ /MAXDRIFT=num
+
+ Make sure that each character is placed at most this many pixels
+ from its `true' resolution-independent position on the page. The
+ default value of this parameter is resolution dependent (it is the
+ number of entries in the list [100, 200, 300, 400, 500, 600, 800,
+ 1000, 1200, 1600, 2000, 2400, 2800, 3200, : : :] that are less
+ than or equal to the resolution in dots per inch). Allowing
+ individual characters to `drift' from their correctly rounded
+ positions by a few pixels, while regaining the true position at
+ the beginning of each new word, improves the spacing of letters in
+ words.
+
+2 /FILTER
+
+ Run as a filter writing the output to the standard output.
+ (The input must still be specified as the argument.)
+
+2 /LAST
+ /LAST=num
+
+ The last page printed will be the first one numbered num. Default
+ is the last page in the document.
+
+
+2 /MANUAL
+
+ Specify manual feed for printer.
+
+2 /NUMBER
+ /NUMBER=num
+ At most num pages will be printed. Default is 100000.
+
+2 /OUTPUT
+ /OUTPUT=filename.ext
+
+ The output will be sent to file name. If no file name is given,
+ the default name is file.ps where the dvi file was called
+ file.dvi .
+
+2 /START
+ /START=num
+
+ The first page printed will be the first one numbered
+ num. Default is the first page in the document.
+
+2 /QUIET
+
+ Run in quiet mode. Don't chatter about pages converted,
+ etc.; report nothing but errors to standard error.
+
+2 /REVERSE
+
+ Stack pages in reverse order. Normally, page 1 will be printed
+ first.
+
+2 /SAV_RES
+
+ Causes the entire global output to be enclosed in a save/restore
+ pair. This causes the file to not be truly conformant, and is
+ thus not recommended, but is useful if you are driving the printer
+ directly and don't care too much about the portability of the
+ output.
+
+2 /MODE
+ /MODE=modename
+
+ This sets the paper mode to modename. Currently, the only modes
+ allowable are
+
+ "letter", which selects an 8.5 by 11 inch page,
+ "a3", which selects an a3 sized page,
+ "a4" , which selects an a4 sized page,
+ "legal", which selects an 8.5 by 14 inch page,
+ "ledger", which selects an 11 by 17 inch page, and
+ "tabloid", which selects a 17 by 11 inch page, and
+ "landscape", which rotates a letter size document by 90 degrees.
+
+
+ The default mode is "letter". The upper left corner of each page in
+ the dvi file is placed one inch from the left and one inch from the top.
+
+2 /MAGNIFICATION
+ /MAGNIFICATION=num
+
+ Set the magnification ratio to num/1000. Overrides the
+ magnification specified in the dvi file. Must be between 10 and
+ 100000.
+
+2 /COLLATE
+ /COLLATE=num
+
+ Create num copies, but collated (by replicating the data in the
+ PostScript file). Slower than the /COPIES option, but easier on
+ the hands, and faster than resubmitting the same PostScript file
+ multiple times.
+
+2 /DPI
+ /DPI=num
+
+ Set the resolution in dpi (dots per inch) to num. This
+ affects the choice of bitmap fonts that are loaded and also the
+ positioning of letters in resident PostScript fonts. Must be
+ between 10 and 10000. This affects both the horizontal and
+ vertical resolution. If a high resolution (something greater than
+ 400 dpi, say) is selected, the /COMPRESS flag should probably also
+ be used.
+
+2 /CTRLD
+
+ Causes Control-D (ASCII code 4) to be appended as the
+ very last character of the PostScript file. This is useful
+ when dvips is driving the printer directly instead of working
+ through a spooler, as is common on extremely small systems.
+ Otherwise, it is not recommended.
+
+2 /INC_COM
+ /INC_COM
+ /NOINC_COM (default)
+
+ /NOINC_COM option causes comments in included PostScript graphics,
+ font files, and headers to be removed. This is sometimes
+ necessary to get around bugs in spoolers or PostScript
+ post-processing programs. Specifically, the %%Page comments,
+ when left in, often cause difficulties. Use of this flag can
+ cause some included graphics to fail, since the PostScript header
+ macros from some software packages read portions of the
+ input stream line by line, searching for a particular comment.
+
+2 /COMMENT
+ /COMMENT (default)
+ /NOCOMMENT
+
+ /NOCOMMENT turns off structured comments; this might be necessary
+ on some systems that try to interpret PostScript comments in weird
+ ways, or on some PostScript printers. Old versions of Transcript
+ in particular cannot handle modern Encapsulated PostScript.
+
+2 /PRINTER
+ /PRINTER=printername
+
+ Sets up the output for the appropriate printer. This is
+ implemented by reading in config.printername , which can set
+ various parameters such as the font paths and any other defaults
+ for that printer only. It is recommended that all standard
+ defaults go in the one master config.ps file and only things that
+ vary printer to printer go in the config.printername files. Note
+ that config.ps is read before config.printername. In
+ addition, another file called "/.dvipsrc is searched for
+ immediately after config.ps; this file is intended for user
+ defaults. If no /PRINTER command is given, the environment
+ variable PRINTER is checked. If that variable exists, and a
+ corresponding configuration file exists, that configuration file
+ is read in.
+
+2 /HEADER
+ /HEADER=(file1,file2,...)
+ /NOHEADER
+
+ Prepend file1, file2, ... as additional header files.
+ This header file gets added to the PostScript userdict.
+ With /NOHEADER, suppress all header output.
+
+
+2 /VM_SAVE
+ /VM_SAVE (default)
+ /NOVM_SAVE
+
+ /NOVM_SAVE disables a PostScript virtual memory saving
+ optimization that stores the character metric information in the
+ same string that is used to store the bitmap information. This
+ is only necessary when driving the Xerox 4045 PostScript
+ interpreter, and it is caused by a bug in that interpreter that
+ results in `garbage' on the bottom of each character. Not
+ recommended unless you must drive this printer.
+
+2 /H_DPI
+ /H_DPI=num
+
+ Set the horizontal resolution in dots per inch to num.
+
+
+2 /V_DPI
+ /V_DPI=num
+
+ Set the vertical resolution in dots per inch to num.
+
+2 /COMPRESS
+
+ Causes bitmapped fonts to be compressed before they are
+ downloaded, thereby reducing the size of the PostScript
+ font-downloading information. Especially useful at high
+ resolutions or when very large fonts are used. Will slow down
+ printing somewhat, especially on early 68000-based PostScript
+ printers.
+
+2 /ABSOLUTE
+
+ Makes references to page numbers absolute (rather than TeX
+ page numbers).
+
+2 /EPSF
+ /EPSF
+ /NOEPSF (default)
+
+ /EPSF makes dvips attempt to generate an EPSF file with a
+ tight bounding box. This only works on one-page files, and it
+ only looks at marks made by characters and rules, not by any
+ included graphics. In addition, it gets the glyph metrics
+ from the tfm file, so characters that lie outside their
+ enclosing tfm box may confuse it. In addition, the bounding
+ box might be a bit too loose if the character glyph has
+ significant left or right side bearings. Nonetheless, this
+ option works well for creating small EPSF files for equations
+ or tables or the like. (Note, of course, that dvips output is
+ resolution dependent and thus does not make very good EPSF
+ files, especially if the images are to be scaled; use these
+ EPSF files with a great deal of care.)
+
+
+2 /PRESCAN
+ /PRESCAN
+ /NOPRESCAN (default)
+
+ Conserve memory by making three passes over the .dvi file
+ instead of two and only loading those characters actually
+ used. Generally only useful on machines with a very limited
+ amount of memory, like some PCs.
+
+2 /PAGECOPIES
+ /PAGECOPIES=num (default=1)
+
+ Number of times to print each page. Executes the postscript
+ for each page this number of times (unlike /COPIES which
+ executes the postscript once and prints multiple times.)
+
+2 /SEPARATE
+ /SEPARATE
+ /NOSEPARATE (default)
+
+ Make each section be a separate file. Under certain
+ circumstances, dvips will split the document up into
+ `sections' to be processed independently; this is most often
+ done for memory reasons. Using this option tells dvips to
+ place each section into a separate file; the new file names
+ are created replacing the suffix of the supplied output file
+ name by a three-digit sequence number. This option is most
+ often used in conjunction with the /SEC_SIZE option which
+ sets the maximum section length in pages. For instance, some
+ phototypesetters cannot print more than ten or so consecutive
+ pages before running out of steam; these options can be used
+ to automatically split a book into ten-page sections, each to
+ its own file.
+
+2 /CROPMARKS
+ /CROPMARKS
+ /NOCROPMARKS (default)
+
+ Print crop marks. This option increases the paper size
+ (which should be specified, either with a paper size special
+ or with the /PSIZE option) by a half inch in each dimension.
+ It translates each page by a quarter inch and draws
+ cross-style crop marks. It is mostly useful with typesetters
+ that can set the page size automatically.
+
+
+2 /SEC_SIZE
+ /SEC_SIZE=number
+
+ Set the maximum number of pages in each `section'. This
+ option is most commonly used with the /SEPARATE option; see
+ that documentation above for more information.
+
+
+2 /HELP
+ /HELP
+
+ Given with a dummy file name, causes dvips to output a one
+ page listing of options in unix form. Not very useful!
+
+
+
+2 /MAKEFONT
+ /MAKEFONT (default)
+ /NOMAKEFONT
+
+ The /NOMAKEFONT option turns off the automatic font
+ generation facility. If any fonts are missing, commands to
+ generate the fonts are appended to the file missfont.log in
+ the current directory; this file can then be executed and
+ deleted to create the missing fonts.
+
+2 /PSIZE
+ /PSIZE="dim,dim"
+
+ Set the paper size to the given pair of dimensions. This
+ option takes its arguments in the same syntax as the
+ papersize special, for example 8.5in,11in. It overrides any
+ paper size special in the dvi file. The dimensions must
+ resolve to a papersize specified in the configuration files.
+
+
+2 /POFFSET
+ /POFFSET="dim,dim"
+
+ Move the origin by a certain amount. The offset is a
+ comma-separated pair of dimensions, such as .1in,-.3cm (in
+ the same syntax used in the papersize special). The origin
+ of the page is shifted from the default position (of one inch
+ down, one inch to the right from the upper left corner of the
+ paper) by this amount.
+
+
+2 /SECURE
+ /SECURE
+ /NOSECURE (default)
+
+ With the /SECURE option, dvips will not attempt to open pipes
+ or run commands (such as commands to make fonts).
+
+2 /ODDPAGES
+ /ODDPAGES
+ /NOODDPAGES (default)
+
+ Print only odd pages (TeX pages, not sequence pages).
+
+2 /EVENPAGES
+ /EVENPAGES
+ /NOEVENPAGES (default)
+
+ Print only even pages (TeX pages, not sequence pages).
+
+2 /DOWNLOADPS
+ /DOWNLOADPS
+ /NODOWNLOADPS (default)
+
+ Downloadable postscript fonts are set in PK (compressed
+ bitmap) format.
+
+2 /HYPERPS
+ /HYPERPS
+ /NOHYPERPS (default)
+
+ Outputs \specials containing hyperlinks to the output file as
+ pdf marks embedded in postscript comments. These can then be
+ turned into hyperlinks with Adobe Distiller and viewed with
+ Adobe Acrobat.
+
+2 Specials
+
+ The specials are described in the manual which may be printed
+ with the command
+
+ printps tex_root:[local]dvips.ps
+
+ In this manual, the command line options are for the unix
+ variant of dvips. Our version has the qualifiers as detailed
+ in this help file. Also, some of the latest options are not
+ in the manual (in particular, the /hyperps option).
diff --git a/Build/source/texk/dvipsk/vms/dvips.rnh b/Build/source/texk/dvipsk/vms/dvips.rnh
new file mode 100644
index 00000000000..d1da4f998f5
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/dvips.rnh
@@ -0,0 +1,532 @@
+.RM 68
+.NO NUMBER
+.NO PAGING
+.STHL 5,1,1
+.lm 0
+1 DVIPS
+.lm 2
+The dvips program converts a TEX dvi file into a PostScript file for
+printing or distribution. Seldom has such a seemingly easy programming task
+required so much effort. The dvips program has a number of features that set
+it apart from other PostScript drivers for TEX. The dvips driver generates
+excellent, standard PostScript, that can be included in other documents as
+figures or printed through a variety of spoolers. The generated PostScript
+requires very little printer memory, so very complex documents with a lot of
+fonts can easily be printed even on PostScript printers without much memory,
+such as the original Apple LaserWriter. The PostScript output is also
+compact, requiring less disk space to store and making it feasible as a
+transfer format.
+.skip 1
+Missing fonts can be automatically generated if METAFONT exists on the
+system, or fonts can be converted from gf to pk format on demand. If a
+font cannot be generated, a scaled version of the same font at a different
+size can be used instead, although dvips will complain loudly about the
+poor aesthetics of the resulting output.
+.skip 1
+.literal
+ usage:
+ DVIPS filename[.dvi]
+.end literal
+.skip 1
+.lm 0
+2 Parameters
+.s
+.lm 2
+Filename
+.s
+Specifies the name of the .DVI file that is to be processed.
+.lm 0
+2 Command__Qualifiers
+.skip 1
+/COPIES
+.lm 6
+.skip 1
+/COPIES=num
+.lm 2
+.skip 1
+ Generate num copies of every page. Default is 1.
+ (For collated copies, see the /COLLATE option.)
+.skip 1
+.lm 0
+/DEBUG
+.skip 1
+.lm 6
+ /DEBUG=num
+.lm 2
+.skip 1
+ Set the debug flags. This is intended only for
+ emergencies or for unusual fact-finding expeditions; it
+ will work only if dvips has been compiled with the
+ DEBUG option. Use
+.skip 1
+.literal
+ num=1 for special
+
+ num=2 for paths
+
+ num=4 for fonts
+
+ num=8 for pages
+
+ num=16 for headers
+
+ num=32 for font compression
+
+ num=64 for files
+
+ num=128 for memory allocation
+.end literal
+.skip 1
+ Use a value of -1 for maximum output.
+.skip 1
+.lm 0
+/MAXDRIFT
+.skip 1
+.lm 6
+ /MAXDRIFT=num
+.lm 2
+.skip 1
+ Make sure that each character is placed at most this many pixels
+ from its `true' resolution-independent position on the page. The
+ default value of this parameter is resolution dependent (it is the
+ number of entries in the list [100, 200, 300, 400, 500, 600, 800,
+ 1000, 1200, 1600, 2000, 2400, 2800, 3200, : : :] that are less
+ than or equal to the resolution in dots per inch). Allowing
+ individual characters to `drift' from their correctly rounded
+ positions by a few pixels, while regaining the true position at
+ the beginning of each new word, improves the spacing of letters in
+ words.
+.skip 1
+.lm 0
+/FILTER
+.skip 1
+.lm 2
+Run as a filter. Read the dvi file from standard input and write
+the PostScript to standard output. The standard input must be seekable, so
+it cannot be a pipe. If you must use a pipe, write a shell script that copies
+the pipe output to a temporary file and then points dvips at this file. i-h
+name: Prepend file name as an additional header file. (However, if the name
+is simply `- ', suppress all header files from the output.) This header file
+gets added to the PostScript userdict.
+.skip 1
+.lm 0
+/LAST
+.skip 1
+.lm 6
+ /LAST=num
+.lm 2
+.skip 1
+ The last page printed will be the first one numbered num. Default
+ is the last page in the document.
+.skip 1
+If the /ABSOLUTE qualifier has been used then it (and any argument to the
+/START qualifier) is treated as a sequence number, rather than a value to
+compare with \count0 values. Thus, using /LAST=9/ABSOLUTE will end with
+the ninth page of the document, no matter what the pages are actually
+numbered.
+.skip 1
+.lm 0
+/MANUAL
+.skip 1
+.lm 2
+ Specify manual feed for printer.
+.skip 1
+.lm 0
+/NUMBER
+.skip 1
+.lm 6
+ /NUMBER=num
+.lm 2
+.skip 1
+ At most num pages will be printed. Default is 100000.
+.skip 1
+.lm 0
+/OUTPUT
+.skip 1
+.lm 6
+ /OUTPUT=filename.ext
+.lm 2
+.skip 1
+ The output will be sent to file name. If no file name is given,
+ the default name is file.ps where the dvi file was called
+ file.dvi .
+.skip 1
+.lm 0
+/START
+.skip 1
+.lm 6
+ /START=num
+.lm 2
+.skip 1
+ The first page printed will be the first one numbered
+ num. Default is the first page in the document.
+.skip 1
+If the /ABSOLUTE qualifier has been used then it (and any argument to the
+/LAST qualifier) is treated as a sequence number, rather than a value to
+compare with \count0 values. Thus, using /START=3/ABSOLUTE will start with
+the third page of the document, no matter what the pages are actually
+numbered.
+.skip 1
+.lm 0
+/QUIET
+.skip 1
+.lm 2
+ Run in quiet mode. Don't chatter about pages converted,
+ etc.; report nothing but errors to standard error.
+.skip 1
+.lm 0
+/REVERSE
+.skip 1
+.lm 2
+ Stack pages in reverse order. Normally, page 1 will be printed
+ first.
+.skip 1
+.lm 0
+/SAV__RES
+.skip 1
+.lm 2
+ Causes the entire global output to be enclosed in a save/restore
+ pair. This causes the file to not be truly conformant, and is
+ thus not recommended, but is useful if you are driving the printer
+ directly and don't care too much about the portability of the
+ output.
+.skip 1
+.lm 0
+/MODE
+.skip 1
+.lm 6
+ /MODE=modename
+.lm 2
+.skip 1
+ This sets the paper mode to modename. Currently, the only modes
+ allowable are
+.skip 1
+.literal
+ "letter", which selects an 8.5 by 11 inch page,
+ "a3", which selects an a3 sized page,
+ "a4" , which selects an a4 sized page,
+ "legal", which selects an 8.5 by 14 inch page,
+ "ledger", which selects an 11 by 17 inch page, and
+ "landscape", which rotates a letter size document by 90 degrees.
+.end literal
+.skip 1
+ WARNING: always include paper format between quotation marks!
+.skip 1
+ The default mode is "letter". The upper left corner of each page in
+ the dvi file is placed one inch from the left and one inch from the top.
+.skip 1
+ If you want to specify a paper format (e.g. a4) AND landscape
+ mode, you must use something like
+.literal
+ /MODE=("landscape","a4")
+.end literal
+ putting "landscape" as the first value.
+.skip 1
+.lm 0
+/MAGNIFICATION
+.skip 1
+.lm 6
+ /MAGNIFICATION=num
+.lm 2
+.skip 1
+ Set the magnification ratio to num/1000. Overrides the
+ magnification specified in the dvi file. Must be between 10 and
+ 100000.
+.skip 1
+.lm 0
+/COLLATE
+.skip 1
+.lm 6
+ /COLLATE=num
+.lm 2
+.skip 1
+ Create num copies, but collated (by replicating the data in the
+ PostScript file). Slower than the /COPIES option, but easier on
+ the hands, and faster than resubmitting the same PostScript file
+ multiple times.
+.skip 1
+.lm 0
+/DPI
+.skip 1
+.lm 6
+ /DPI=num
+.lm 2
+.skip 1
+ Set the resolution in dpi (dots per inch) to num. This
+ affects the choice of bitmap fonts that are loaded and also the
+ positioning of letters in resident PostScript fonts. Must be
+ between 10 and 10000. This affects both the horizontal and
+ vertical resolution. If a high resolution (something greater than
+ 400 dpi, say) is selected, the /COMPRESS flag should probably also
+ be used.
+.skip 1
+.lm 0
+/CTRL__D
+.skip 1
+.lm 2
+ Causes Control-D (ASCII code 4) to be appended as the
+ very last character of the PostScript file. This is useful
+ when dvips is driving the printer directly instead of working
+ through a spooler, as is common on extremely small systems.
+ Otherwise, it is not recommended.
+.skip 1
+.lm 0
+/INC__COM
+.skip 1
+.lm 6
+ /INC__COM (default)
+.break
+ /NOINC__COM
+.lm 2
+.skip 1
+ /NOINC__COM option causes comments in included PostScript graphics,
+ font files, and headers to be removed. This is sometimes
+ necessary to get around bugs in spoolers or PostScript
+ post-processing programs. Specifically, the %%Page comments,
+ when left in, often cause difficulties. Use of this flag can
+ cause some included graphics to fail, since the PostScript header
+ macros from some software packages read portions of the
+ input stream line by line, searching for a particular comment.
+.skip 1
+.lm 0
+/COMMENT
+.skip 1
+.lm 6
+ /COMMENT (default)
+.break
+ /NOCOMMENT
+.lm 2
+.skip 1
+ /NOCOMMENT turns off structured comments; this might be necessary
+ on some systems that try to interpret PostScript comments in weird
+ ways, or on some PostScript printers. Old versions of Transcript
+ in particular cannot handle modern Encapsulated PostScript.
+.skip 1
+.lm 0
+/PRINTER
+.skip 1
+.lm 6
+ /PRINTER=printername
+.lm 2
+.skip 1
+ Sets up the output for the appropriate printer. This is
+ implemented by reading in config.printername , which can set
+ various parameters such as the font paths and any other defaults
+ for that printer only. It is recommended that all standard
+ defaults go in the one master config.ps file and only things that
+ vary printer to printer go in the config.printername files. Note
+ that config.ps is read before config.printername. In
+ addition, another file called "/.dvipsrc is searched for
+ immediately after config.ps; this file is intended for user
+ defaults. If no /PRINTER command is given, the environment
+ variable PRINTER is checked. If that variable exists, and a
+ corresponding configuration file exists, that configuration file
+ is read in.
+.skip 1
+.lm 0
+/VM__SAVE
+.skip 1
+.lm 6
+ /VM__SAVE (default)
+.break
+ /NOVM__SAVE
+.lm 2
+.skip 1
+/NOVM__SAVE disables a PostScript virtual memory saving optimization that
+stores the character metric information in the same string that is used to
+store the bitmap information. This is only necessary when driving the Xerox
+4045 PostScript interpreter, and it is caused by a bug in that interpreter that
+results in `garbage' on the bottom of each character. Not recommended unless
+you must drive this printer.
+.skip 1
+.lm 0
+/H__DPI
+.skip 1
+.lm 6
+/H__DPI=num
+.lm 2
+.skip 1
+Set the horizontal resolution in dots per inch to num.
+.skip 1
+.lm 0
+/V__DPI
+.skip 1
+.lm 6
+/V__DPI=num
+.lm 2
+.skip 1
+Set the vertical resolution in dots per inch to num.
+.skip 1
+.lm 0
+/COMPRESS
+.skip 1
+.lm 2
+Causes bitmapped fonts to be compressed before they are downloaded, thereby
+reducing the size of the PostScript font-downloading information. Especially
+useful at high resolutions or when very large fonts are used. Will slow down
+printing somewhat, especially on early 68000-based PostScript printers.
+.skip 1
+.lm 0
+.!-----------------------------------------------------------------------
+.! New stuff for version 5.497
+.!-----------------------------------------------------------------------
+/HEADER
+.skip 1
+.lm 6
+/HEADER=file-spec
+.break
+/NOHEADER
+.lm 2
+.skip 1
+Prepend file "file-spec" as an additional header file. However, if the name
+is simply `-', suppress all header files from the output. Similarly,
+/NOHEADER suppress all header files from the output. This header file gets
+added to the PostScript userdict. (Corresponds to the -h option)
+.skip 1
+.lm 0
+/ABSOLUTE
+.lm 2
+.skip 1
+If the /ABSOLUTE qualifier has been used then any argument to the /START
+and/or /LAST qualifiers are treated as sequence numbers, rather than a
+value to compare with \count0 values. Thus, using /START=3/ABSOLUTE will
+start with the third page of the document, no matter what the pages are
+actually numbered.
+(Corresponds to the -p and -l options)
+.skip 1
+.lm 0
+/EPSF
+.lm 2
+.skip 1
+Makes `dvips' attempt to generate an EPSF file with a tight bounding box.
+This only works on one-page files, and it only looks at marks made by
+characters and rules, not by any included graphics. In addition, it gets
+the glyph metrics from the `tfm' file, so characters that lie outside their
+enclosing `tfm' box may confuse it. In addition, the bounding box might be
+a bit too loose if the character glyph has significant left or right side
+bearings. Nonetheless, this option works well for creating small EPSF files
+for equations or tables or the like. (Note, of course, that `dvips' output
+is resolution dependent and thus does not make very good EPSF files,
+especially if the images are to be scaled; use these EPSF files with a great
+deal of care.)
+(Corresponds to the -E option)
+.skip 1
+.lm 0
+/PRESCAN
+.lm 2
+.skip 1
+Conserve memory by making three passes over the `dvi' file instead of two
+and only loading those characters actually used. Generally only useful on
+machines with a very limited amount of memory, like some PCs.
+(Corresponds to the -a option)
+.skip 1
+.lm 0
+/PAGECOPIES
+.skip 1
+.lm 6
+/PAGECOPIES=num
+.lm 2
+.skip 1
+Generate `num' copies of each page, but duplicating the page body rather
+than using the `#numcopies' option. This can be useful in conjunction with
+a header file setting \bop-hook to do color separations or other neat
+tricks. (Corresponds to the -b option)
+.skip 1
+.lm 0
+/SEPARATE
+.skip 1
+.lm 2
+Make each section be a separate file. Under certain circumstances,
+`dvips' will split the document up into `sections' to be processed
+independently; this is most often done for memory reasons. Using this
+option tells `dvips' to place each section into a separate file; the
+new file names are created replacing the suffix of the supplied output
+file name by a three-digit sequence number.
+.break
+This option is most often used in conjunction with the /SEC_SIZE qualifier
+which sets the maximum section length in pages. For instance, some
+phototypesetters cannot print more than ten or so consecutive pages before
+running out of steam; these options can be used to automatically split a
+book into ten-page sections, each to its own file. (Corresponds to the -i
+option)
+.skip 1
+.lm 0
+/CROPMARKS
+.skip 1
+.lm 2
+Print crop marks. This option increases the paper size (which should be
+specified, either with a paper size special or with the /PSIZE qualifier) by
+a half inch in each dimension. It translates each page by a quarter inch
+and draws cross-style crop marks. It is mostly useful with typesetters that
+can set the page size automatically. (Corresponds to the -k option)
+.skip 1
+.lm 0
+/SEC_SIZE
+.skip 1
+.lm 6
+/SEC_SIZE=num
+.lm 2
+.skip 1
+Set the maximum number of pages in each `section'. This option is most
+commonly used with the /SEPARATE qualifier; see that documentation above for
+more information. (Corresponds to the -S option)
+.skip 1
+.lm 0
+/HELP
+.skip 1
+.lm 2
+Displays a summary of the comand line options for the DVIPS program, but it
+show the UNIX version. Not much use to the VMS people, maybe one day we can
+set it to read this help library through the LBR$ utility routines.
+(Corresponds to the -? option)
+.skip 1
+.lm 0
+/MAKEFONT
+.skip 1
+.lm 6
+/MAKEFONT (default)
+/NOMAKEFONT
+.lm 2
+By default an attempt is made to make missing fonts. Use of /NOMAKEFONT
+turns off the automatic font generation facility. If any fonts are missing,
+commands to generate the fonts are appended to the file `missfont.log' in
+the current directory; this file can then be executed and deleted to create
+the missing fonts.
+.skip 1
+.lm 0
+/PSIZE
+.skip 1
+.lm 6
+/PSIZE="xsize,ysize"
+.lm 2
+.skip 1
+Set the paper size to the given pair of dimensions. This option takes
+its arguments in the same style as /POFFSET. It overrides any paper
+size special in the `dvi' file.
+.skip 1
+Example : /PSIZE="6in,8in"
+.skip 1
+.lm 0
+/POFFSET
+.skip 1
+.lm 6
+/POFFSET="xoffset,yoffset"
+.lm 2
+.skip 1
+Move the origin by a certain amount. The `offset' is a comma-separated
+pair of dimensions, such as ".1in,-.3cm" (in the same syntax used in
+the /PSIZE qualifier). The origin of the page is shifted from the
+default position (of one inch down, one inch to the right from the upper
+left corner of the paper) by this amount.
+.skip 1
+Example : /POFFSET=".1in,-.3cm"
+.skip 1
+.!-----------------------------------------------------------------------
+.lm 0
+2 Specials
+.skip 1
+.lm 2
+For a description of the special features of dvips see the dvips manual a LaTeX
+version of which may be copied using the command
+.skip 1
+copy tex$postscript:dvips.tex dvips.tex
diff --git a/Build/source/texk/dvipsk/vms/make.com b/Build/source/texk/dvipsk/vms/make.com
new file mode 100644
index 00000000000..e3fcd15209a
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/make.com
@@ -0,0 +1,351 @@
+$ !
+$ ! dvips for VAX/VMS
+$ !
+$ !
+$ ! Use to compile and link dvips with VAXC under VMS. Before using
+$ ! this command file you must set the following definitions according
+$ ! to your own environment;
+$ !
+$ ! TFMPATH - The directory where TFM files live ( needed for
+$ ! the compilation of dvips.c ). Be sure and include
+$ ! the needed directory separator in the path ( i.e.
+$ ! TEX_FONTS: )
+$ ! PKPATH - The directory where PK files live ( needed for the
+$ ! compilation of dvips.c ). You should also decided
+$ ! whether you need VMS_ROOTED ( needed for the
+$ ! compilation of loadfont.c ) defined so that
+$ ! PKPATH will be interpreted as a rooted directory
+$ ! under VMS. Be sure and include the needed directory
+$ ! separator in the path ( i.e. TEX_FONTS: ).
+$ ! HEADERPATH - The directory where the PostScript prologue file
+$ ! live ( needed for the compilation of output.c &
+$ ! dvips.c). Be sure and include a trailing comma in
+$ ! your definition of the header path as dvips uses this
+$ ! definition as a path for both PostScript prologue
+$ ! files and files which are included with \special
+$ ! options. This definition should be a comma
+$ ! separated list of directories where dvips will
+$ ! look for a specified file. As an example;
+$ !
+$ ! "HEADERPATH=""TEX_POSTSCRIPT:,SYS$LOGIN:,"""
+$ !
+$ ! to look first in TEX_POSTSCRIPT:, then in SYS$LOGIN:,
+$ ! and finally in the current default directory.
+$ ! CONFIGPATH - The directory where the configuration file lives
+$ ! ( needed for the compilation of resident.c ). Be
+$ ! sure and include the needed directory separator
+$ ! in the path ( i.e. TEX_POSTSCRIPT: ).
+$ !
+$ ! FIGPATH - Where the .ps and .eps files are
+$ !
+$ ! After dvips has been compiled and linked the user will be given the
+$ ! option of compressing the PostScript prologue files which are used
+$ ! by dvips and copying the resultant prologue files to the specifed
+$ ! HEADERPATH. The user will also be given the option of copying the
+$ ! dvips image file to the area where TeX related images are stored.
+$ ! Answering "yes" to either of these options should be done only if
+$ ! the user has write priviledges to the directories which are specified.
+$ !
+$ ! Command file by: Robert Schneider
+$ ! Department of Petroleum Engineering
+$ ! The University of Texas at Austin
+$ !
+$ ! October 1989
+$ !
+$ ! Updates by: Earle Ake
+$ ! Science Applications International Corporation
+$ ! Dayton, Ohio
+$ ! ake@dayton.saic.com
+$ !
+$ ! Updated for DVIPS 5.34
+$ ! August 1990
+$ !
+$ ! Ted Nieland
+$ ! Control Data Corporation
+$ ! DECUS TeX Collection Editor
+$ ! ted@nieland.dayton.oh.us
+$ !
+$ ! Updated for DVIPS 5.47, February 1991
+$ !
+$ ! Updated for DVIPS 5.474, March 1992
+$ ! Earle F. Ake
+$ !
+$! Updated for DVIPS 5.493, Sept 1992
+$! Added HAVE_GETCWD,ANSI in CC for
+$! dvips.c and resident.c
+$! Max Calvani
+$! calvani@astrpd.astro.it
+$!
+$! Updated for DVIPS 5.495, Oct. 1992
+$! calvani@astrpd.astro.it
+$!
+$! Updated for DVIPS 5.499, Jan. 1993
+$! Added FONTLIB support
+$! calvani@astrpd.astro.it
+$!
+$ on error then goto bad_exit
+$ on severe_error then goto bad_exit
+$ !
+$ TFMPATH = "TEX_FONTS:"
+$ PKPATH = "TEX_PKDIR:"
+$ VFPATH = "TEX_VFDIR:"
+$ HEADERPATH = "DVI_INPUTS:,TEX_INPUTS:,SYS$LOGIN:,SYS$DISK:[],"
+$ PLACEHEADER_DIR = "TEX_DISK:[TEX.INPUTS.DVIDRIVERS]"
+$ CONFIGPATH = "TEX_INPUTS:"
+$ FIGPATH = "TEX_INPUTS:,SYS$DISK:"
+$ TPIC = ",TPIC"
+$ EMTEX = ",EMTEX"
+$ FONTLIB = ",FONTLIB"
+$ VMS_ROOTED = ",VMS_ROOTED"
+$ TEXEXEPATH = "TEX_DISK:[TEX.EXE]"
+$ DEBUG = ",DEBUG"
+$ !
+$ write sys$output " "
+$ inquire/nop ANSWER "Have you read the file VMS_INSTALL.TXT [no]? "
+$ if ANSWER .eqs. "" then ANSWER = 0
+$ if ANSWER then goto read_instructions
+$ write sys$output " "
+$ write sys$output "Please read the VMS_INSTALL.TXT file, edit this command"
+$ write sys$output "file if necessary, and then execute this file again."
+$ write sys$output " "
+$ exit
+$ read_instructions:
+$ write sys$output " "
+$ inquire/nop ANSWER "Compile sources [no]? "
+$ if ANSWER .eqs. "" then ANSWER = 0
+$ if .not. ANSWER then goto linkstep
+$ !
+$ get_definitions:
+$ write sys$output " "
+$ !
+$ inquire/nop ANSWER "TFM path [''TFMPATH']? "
+$ if ANSWER .nes. "" then TFMPATH = ANSWER
+$ inquire/nop ANSWER "PK path [''PKPATH']? "
+$ if ANSWER .nes. "" then PKPATH = ANSWER
+$ inquire/nop ANSWER "VF path [''VFPATH']? "
+$ if ANSWER .nes. "" then VFPATH = ANSWER
+$ inquire/nop ANSWER "PostScript HEADER path [''HEADERPATH']? "
+$ if ANSWER .nes. "" then HEADERPATH = ANSWER
+$ inquire/nop ANSWER "PostScript CONFIG path [''CONFIGPATH'])? "
+$ if ANSWER .nes. "" then CONFIGPATH = ANSWER
+$ inquire/nop ANSWER "FIG path [''FIGPATH'])? "
+$ if ANSWER .nes. "" then FIGPATH = ANSWER
+$ inquire/nop ANSWER "Do you want TPIC support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then TPIC = ""
+$ inquire/nop ANSWER "Do you want EMTEX support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then EMTEX = ""
+$ inquire/nop ANSWER "Do you want FONTLIB support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then FONTLIB = ""
+$ inquire/nop ANSWER "Do you want DEBUG support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then DEBUG = ""
+$ inquire/nop ANSWER "Is ''PKPATH' a rooted directory [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then VMS_ROOTED = ""
+$ write sys$output " "
+$ write sys$output "dvips will be compiled with the following definitions;"
+$ write sys$output " "
+$ write sys$output "TFMPATH = ",TFMPATH
+$ write sys$output "PKPATH = ",PKPATH
+$ write sys$output "VFPATH = ",VFPATH
+$ write sys$output "HEADERPATH = ",HEADERPATH
+$ write sys$output "CONFIGPATH = ",CONFIGPATH
+$ write sys$output "FIGPATH = ",FIGPATH
+$ if TPIC .eqs. "" then -
+ write sys$output "TPIC support is not enabled."
+$ if TPIC .nes. "" then -
+ write sys$output "TPIC support is enabled."
+$ if FONTLIB .eqs. "" then -
+ write sys$output "FONTLIB support is not enabled."
+$ if FONTLIB .nes. "" then -
+ write sys$output "FONTLIB support is enabled."
+$ if EMTEX .eqs. "" then -
+ write sys$output "EMTEX support is not enabled."
+$ if EMTEX .nes. "" then -
+ write sys$output "EMTEX support is enabled."
+$ if DEBUG .eqs. "" then -
+ write sys$output "DEBUG support is not enabled."
+$ if DEBUG .nes. "" then -
+ write sys$output "DEBUG support is enabled."
+$ if VMS_ROOTED .eqs. "" then -
+ write sys$output PKPATH," is not a rooted directory."
+$ if VMS_ROOTED .nes. "" then -
+ write sys$output PKPATH," is a rooted directory."
+$ write sys$output " "
+$ inquire/nop ANSWER "Is this correct [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto get_definitions
+$ !
+$ if VMS_ROOTED .nes. "" then PKPATH = "''PKPATH'[%d]%f.PK"
+$ write sys$output " "
+$ write sys$output "Compiling sources ..."
+$ write sys$output " "
+$ write sys$output "afm2tfm.c ..."
+$ cc /define=(VMS'DEBUG') AFM2TFM.C
+$ write sys$output "color.c ..."
+$ cc /define=(VMS'DEBUG') COLOR.C
+$ write sys$output "dopage.c ..."
+$ cc /define=(VMS'DEBUG''EMTEX') DOPAGE.C
+$ write sys$output "dosection.c ..."
+$ cc /define=(VMS'DEBUG') DOSECTION.C
+$ write sys$output "dospecial.c ..."
+$ cc /define=(VMS'DEBUG''TPIC') DOSPECIAL.C
+$ write sys$output "download.c ..."
+$ cc /define=(VMS'DEBUG') DOWNLOAD.C
+$ write sys$output "dpicheck.c ..."
+$ cc /define=(VMS'DEBUG') DPICHECK.C
+$ write sys$output "drawps.c ..."
+$ cc /define=(VMS'DEBUG''TPIC') DRAWPS.C
+$ write sys$output "dviinput.c ..."
+$ cc /define=(VMS'DEBUG') DVIINPUT.C
+$ write sys$output "dvips.c ..."
+$ cc /define=(VMS'DEBUG',"TFMPATH=""''TFMPATH'""","PKPATH=""''PKPATH'""", -
+ "VFPATH=""''VFPATH'""","FIGPATH=""''FIGPATH'""",HAVE_GETCWD,ANSI, -
+ "CONFIGPATH=""''CONFIGPATH'""","HEADERPATH=""''HEADERPATH'""") DVIPS.C
+$ write sys$output "finclude.c ..."
+$ cc /DEF=(VMS'DEBUG') FINCLUDE.C
+$ write sys$output "flib.c ..."
+$ cc /DEF=(VMS'DEBUG''FONTLIB') FLIB.C
+$ write sys$output "fontdef.c ..."
+$ cc /define=(VMS'DEBUG') FONTDEF.C
+$ write sys$output "header.c ..."
+$ cc /define=(VMS'DEBUG') HEADER.C
+$ write sys$output "loadfont.c ..."
+$ cc /define=(VMS'DEBUG') LOADFONT.C
+$ write sys$output "makefont.c ..."
+$ cc /define=(VMS'DEBUG') MAKEFONT.C
+$ write sys$output "output.c ..."
+$ cc /define=(VMS'DEBUG',"HEADERPATH=""''HEADERPATH'""") OUTPUT.C
+$ write sys$output "papersiz.c ..."
+$ cc /define=(VMS'DEBUG') PAPERSIZ.C
+$ write sys$output "pprescan.c ..."
+$ cc /define=(VMS'DEBUG') PPRESCAN.C
+$ write sys$output "prescan.c ..."
+$ cc /define=(VMS'DEBUG') PRESCAN.C
+$ write sys$output "repack.c ..."
+$ cc /define=(VMS'DEBUG') REPACK.C
+$ write sys$output "resident.c ..."
+$ cc /define=(VMS'DEBUG',"CONFIGPATH=""''CONFIGPATH'""",HAVE_GETCWD,ANSI) -
+ RESIDENT.C
+$ write sys$output "scalewidth.c ..."
+$ cc /define=(VMS'DEBUG') SCALEWIDTH.C
+$ write sys$output "scanpage.c ..."
+$ cc /define=(VMS'DEBUG') SCANPAGE.C
+$ write sys$output "search.c ..."
+$ cc /define=(VMS'DEBUG') SEARCH.C
+$ write sys$output "skippage.c ..."
+$ cc /define=(VMS'DEBUG') SKIPPAGE.C
+$ write sys$output "squeeze.c ..."
+$ cc /define=(VMS'DEBUG') SQUEEZE.C
+$ write sys$output "tfmload.c ..."
+$ cc /define=(VMS'DEBUG') TFMLOAD.C
+$ write sys$output "unpack.c ..."
+$ cc /define=(VMS'DEBUG') UNPACK.C
+$ write sys$output "virtualfont.c ..."
+$ cc /define=(VMS'DEBUG') VIRTUALFONT.C
+$ write sys$output "bbox.c ..."
+$ cc /define=(VMS'DEBUG') BBOX.C
+$ write sys$output "emspecial.c ..."
+$ cc /define=(VMS'DEBUG''EMTEX') EMSPECIAL.C
+$ !
+$ ! vaxvms fixes some irritating problems with VAXC ( particulary
+$ ! fseek and ftell ). Thanks to Nelson Beebee at Utah.
+$ !
+$ write sys$output "vaxvms.c ..."
+$ cc /define=(VMS'DEBUG') [.VMS]VAXVMS.C
+$ !
+$ linkstep:
+$ write sys$output " "
+$ write sys$output "Linking dvips ..."
+$ link /exe=dvips dvips,dopage,dosection,dospecial,download,dpicheck,drawps, -
+ dviinput,header,finclude,flib,fontdef,loadfont,tfmload,prescan, -
+ scanpage,skippage,output,scalewidth,resident,search,unpack, -
+ makefont,repack,virtualfont,vaxvms,color,papersiz,pprescan, -
+ bbox,emspecial,[.vms]vaxcrtl.opt/opt
+$ write sys$output " "
+$ write sys$output "Linking squeeze ..."
+$ link /exe=squeeze squeeze,vaxvms,[.vms]vaxcrtl.opt/opt
+$ write sys$output " "
+$ write sys$output "Linking afm2tfm ..."
+$ write sys$output " "
+$ link /exe=afm2tfm afm2tfm,vaxvms,[.vms]vaxcrtl.opt/opt
+$ !
+$ inquire/nop ANSWER -
+ "Do you wish to compress the PostScript prologue files [no]? "
+$ if ANSWER .eqs. "" then ANSWER = 0
+$ if .not. ANSWER then goto copy_prologue
+$ squeeze :== $'f$environment("DEFAULT")'squeeze.exe
+$ write sys$output " "
+$ set verify
+$ squeeze COLOR.LPRO COLOR.PRO
+$ squeeze FINCLUDE.LPRO FINCLUDE.PRO
+$ squeeze TEX.LPRO TEX.PRO
+$ squeeze TEXPS.LPRO TEXPS.PRO
+$ squeeze SPECIAL.LPRO SPECIAL.PRO
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ copy_prologue:
+$ FIRSTPATH = PLACEHEADER_DIR
+$ inquire/nop ANSWER -
+ "Do you wish to copy the prologue files to ''FIRSTPATH' [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto copy_config
+$ write sys$output " "
+$ set verify
+$ copy COLOR.PRO 'FIRSTPATH'COLOR.PRO
+$ copy FINCLUDE.PRO 'FIRSTPATH'FINCLUDE.PRO
+$ copy TEX.PRO 'FIRSTPATH'TEX.PRO
+$ copy TEXPS.PRO 'FIRSTPATH'TEXPS.PRO
+$ copy SPECIAL.PRO 'FIRSTPATH'SPECIAL.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'COLOR.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'FINCLUDE.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'TEX.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'SPECIAL.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'TEXPS.PRO
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ copy_config:
+$ FIRSTPATH = PLACEHEADER_DIR
+$ inquire/nop ANSWER -
+ "Do you wish to copy the CONFIG.PS file to ''FIRSTPATH' [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto copy_image
+$ write sys$output " "
+$ set verify
+$ copy CONFIG.PS 'FIRSTPATH'CONFIG.PS
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'CONFIG.PS
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ copy_image:
+$ inquire/nop ANSWER "Do you wish to copy DVIPS.EXE to the TeX area [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto done
+$ inquire/nop ANSWER "TeX image area [''TEXEXEPATH']? "
+$ if ANSWER .nes. "" THEN TEXEXEPATH = ANSWER
+$ write sys$output " "
+$ set verify
+$ copy dvips.exe 'TEXEXEPATH'
+$ set protect=(s:rwed,o:rwed,g:re,w:re) 'TEXEXEPATH'dvips.exe
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ done:
+$ write sys$output " "
+$ write sys$output "Be sure to add dvips to your CLI by using the SET "
+$ write sys$output "COMMAND syntax and do the other steps which are"
+$ write sys$output "necessary to finish up the installation of dvips."
+$ write sys$output " "
+$ goto good_exit
+$ bad_exit:
+$ write sys$output " "
+$ write sys$output "Something's wrong here. You might want to take a look"
+$ write sys$output "at the offending code or command and start over."
+$ write sys$output " "
+$ exit
+$ good_exit:
+$ write sys$output "Done."
+$ write sys$output " "
+$ exit
+$! --------------------- EOF -------------------------------------
diff --git a/Build/source/texk/dvipsk/vms/newmake.com b/Build/source/texk/dvipsk/vms/newmake.com
new file mode 100644
index 00000000000..e137caf39c7
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/newmake.com
@@ -0,0 +1,387 @@
+$! EJG - 02-Jul-1996 - Made from Make.com
+$! PWD - 03-Mar-1997 - Add t1part.c
+$! Changes:
+$!
+$! Added HPS define to compilation.
+$! Skip all the questions at the beginning and go straight to compile.
+$! Reorder modules (bbox and emspecial) to be in alphabetical order
+$! during compile.
+$! Add hps.c to compile.
+$! Add hps to link.
+$! Remove option file from links.
+$! Add /standard=vaxc to all cc commands
+$! Remove FONTLIB (if included, need to define FLINAME and FLIPATH, but
+$! before I do this I need to find out what a font library is!)
+$!
+$! PWD: add t1part.c to compile and link
+$! change TEX$POSTSCRIPT to TEX_POSTSCRIPT
+$ !
+$ ! dvips for VAX/VMS
+$ !
+$ !
+$ ! Use to compile and link dvips with VAXC under VMS. Before using
+$ ! this command file you must set the following definitions according
+$ ! to your own environment;
+$ !
+$ ! TFMPATH - The directory where TFM files live ( needed for
+$ ! the compilation of dvips.c ). Be sure and include
+$ ! the needed directory separator in the path ( i.e.
+$ ! TEX_FONTS: )
+$ ! PKPATH - The directory where PK files live ( needed for the
+$ ! compilation of dvips.c ). You should also decided
+$ ! whether you need VMS_ROOTED ( needed for the
+$ ! compilation of loadfont.c ) defined so that
+$ ! PKPATH will be interpreted as a rooted directory
+$ ! under VMS. Be sure and include the needed directory
+$ ! separator in the path ( i.e. TEX_FONTS: ).
+$ ! HEADERPATH - The directory where the PostScript prologue file
+$ ! live ( needed for the compilation of output.c &
+$ ! dvips.c). Be sure and include a trailing comma in
+$ ! your definition of the header path as dvips uses this
+$ ! definition as a path for both PostScript prologue
+$ ! files and files which are included with \special
+$ ! options. This definition should be a comma
+$ ! separated list of directories where dvips will
+$ ! look for a specified file. As an example;
+$ !
+$ ! "HEADERPATH=""TEX_POSTSCRIPT:,SYS$LOGIN:,"""
+$ !
+$ ! to look first in TEX_POSTSCRIPT:, then in SYS$LOGIN:,
+$ ! and finally in the current default directory.
+$ ! CONFIGPATH - The directory where the configuration file lives
+$ ! ( needed for the compilation of resident.c ). Be
+$ ! sure and include the needed directory separator
+$ ! in the path ( i.e. TEX_POSTSCRIPT: ).
+$ !
+$ ! FIGPATH - Where the .ps and .eps files are
+$ !
+$ ! After dvips has been compiled and linked the user will be given the
+$ ! option of compressing the PostScript prologue files which are used
+$ ! by dvips and copying the resultant prologue files to the specifed
+$ ! HEADERPATH. The user will also be given the option of copying the
+$ ! dvips image file to the area where TeX related images are stored.
+$ ! Answering "yes" to either of these options should be done only if
+$ ! the user has write priviledges to the directories which are specified.
+$ !
+$ ! Command file by: Robert Schneider
+$ ! Department of Petroleum Engineering
+$ ! The University of Texas at Austin
+$ !
+$ ! October 1989
+$ !
+$ ! Updates by: Earle Ake
+$ ! Science Applications International Corporation
+$ ! Dayton, Ohio
+$ ! ake@dayton.saic.com
+$ !
+$ ! Updated for DVIPS 5.34
+$ ! August 1990
+$ !
+$ ! Ted Nieland
+$ ! Control Data Corporation
+$ ! DECUS TeX Collection Editor
+$ ! ted@nieland.dayton.oh.us
+$ !
+$ ! Updated for DVIPS 5.47, February 1991
+$ !
+$ ! Updated for DVIPS 5.474, March 1992
+$ ! Earle F. Ake
+$ !
+$! Updated for DVIPS 5.493, Sept 1992
+$! Added HAVE_GETCWD,ANSI in CC for
+$! dvips.c and resident.c
+$! Max Calvani
+$! calvani@astrpd.astro.it
+$!
+$! Updated for DVIPS 5.495, Oct. 1992
+$! calvani@astrpd.astro.it
+$!
+$! Updated for DVIPS 5.499, Jan. 1993
+$! Added FONTLIB support
+$! calvani@astrpd.astro.it
+$!
+$ on error then goto bad_exit
+$ on severe_error then goto bad_exit
+$ !
+$ TFMPATH = "TEX_FONTS:"
+$ PKPATH = "TEX_PKDIR:"
+$ VFPATH = "TEX_VFDIR:"
+$ HEADERPATH = "TEX_POSTSCRIPT:,TEX_INPUTS:,SYS$LOGIN:,SYS$DISK:[]," ! PWD
+$ PLACEHEADER_DIR = "TEX_POSTSCRIPT:,TEX_ROOT:[TEX.DVIDRIVERS]" ! Changed by PWD
+$ CONFIGPATH = "TEX_POSTSCRIPT:" !Changed by PWD
+$ FIGPATH = "TEX_INPUTS:,SYS$DISK:"
+$ TPIC = ",TPIC"
+$ EMTEX = ",EMTEX"
+$! FONTLIB = ",FONTLIB" !EJG 02-Jul-1996
+$ FONTLIB = "" !EJG 02-Jul-1996
+$ VMS_ROOTED = ",VMS_ROOTED"
+$ TEXEXEPATH = "TEX_DISK:[TEX.EXE]"
+$ DEBUG = ",DEBUG"
+$ HPS = ",HPS" !EJG 02-Jul-1996
+$ GOTO DOCOMPILE !EJG 02-Jul-1996
+$ !
+$ write sys$output " "
+$ inquire/nop ANSWER "Have you read the file VMS_INSTALL.TXT [no]? "
+$ if ANSWER .eqs. "" then ANSWER = 0
+$ if ANSWER then goto read_instructions
+$ write sys$output " "
+$ write sys$output "Please read the VMS_INSTALL.TXT file, edit this command"
+$ write sys$output "file if necessary, and then execute this file again."
+$ write sys$output " "
+$ exit
+$ read_instructions:
+$ write sys$output " "
+$ inquire/nop ANSWER "Compile sources [no]? "
+$ if ANSWER .eqs. "" then ANSWER = 0
+$ if .not. ANSWER then goto linkstep
+$ !
+$ get_definitions:
+$ write sys$output " "
+$ !
+$ inquire/nop ANSWER "TFM path [''TFMPATH']? "
+$ if ANSWER .nes. "" then TFMPATH = ANSWER
+$ inquire/nop ANSWER "PK path [''PKPATH']? "
+$ if ANSWER .nes. "" then PKPATH = ANSWER
+$ inquire/nop ANSWER "VF path [''VFPATH']? "
+$ if ANSWER .nes. "" then VFPATH = ANSWER
+$ inquire/nop ANSWER "PostScript HEADER path [''HEADERPATH']? "
+$ if ANSWER .nes. "" then HEADERPATH = ANSWER
+$ inquire/nop ANSWER "PostScript CONFIG path [''CONFIGPATH'])? "
+$ if ANSWER .nes. "" then CONFIGPATH = ANSWER
+$ inquire/nop ANSWER "FIG path [''FIGPATH'])? "
+$ if ANSWER .nes. "" then FIGPATH = ANSWER
+$ inquire/nop ANSWER "Do you want TPIC support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then TPIC = ""
+$ inquire/nop ANSWER "Do you want EMTEX support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then EMTEX = ""
+$ inquire/nop ANSWER "Do you want FONTLIB support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then FONTLIB = ""
+$ inquire/nop ANSWER "Do you want DEBUG support [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then DEBUG = ""
+$ inquire/nop ANSWER "Is ''PKPATH' a rooted directory [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then VMS_ROOTED = ""
+$ write sys$output " "
+$ write sys$output "dvips will be compiled with the following definitions;"
+$ write sys$output " "
+$ write sys$output "TFMPATH = ",TFMPATH
+$ write sys$output "PKPATH = ",PKPATH
+$ write sys$output "VFPATH = ",VFPATH
+$ write sys$output "HEADERPATH = ",HEADERPATH
+$ write sys$output "CONFIGPATH = ",CONFIGPATH
+$ write sys$output "FIGPATH = ",FIGPATH
+$ if TPIC .eqs. "" then -
+ write sys$output "TPIC support is not enabled."
+$ if TPIC .nes. "" then -
+ write sys$output "TPIC support is enabled."
+$ if FONTLIB .eqs. "" then -
+ write sys$output "FONTLIB support is not enabled."
+$ if FONTLIB .nes. "" then -
+ write sys$output "FONTLIB support is enabled."
+$ if EMTEX .eqs. "" then -
+ write sys$output "EMTEX support is not enabled."
+$ if EMTEX .nes. "" then -
+ write sys$output "EMTEX support is enabled."
+$ if DEBUG .eqs. "" then -
+ write sys$output "DEBUG support is not enabled."
+$ if DEBUG .nes. "" then -
+ write sys$output "DEBUG support is enabled."
+$ if VMS_ROOTED .eqs. "" then -
+ write sys$output PKPATH," is not a rooted directory."
+$ if VMS_ROOTED .nes. "" then -
+ write sys$output PKPATH," is a rooted directory."
+$ write sys$output " "
+$ inquire/nop ANSWER "Is this correct [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto get_definitions
+$ !
+$DOCOMPILE: !EJG 02-Jul-1996
+$ if VMS_ROOTED .nes. "" then PKPATH = "''PKPATH'[%d]%f.PK"
+$ write sys$output " "
+$ write sys$output "Compiling sources ..."
+$ write sys$output " "
+$ write sys$output "afm2tfm.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') AFM2TFM.C
+$ write sys$output "bbox.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') BBOX.C
+$ write sys$output "color.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') COLOR.C
+$ write sys$output "dopage.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS''EMTEX') DOPAGE.C
+$ write sys$output "dosection.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') DOSECTION.C
+$ write sys$output "dospecial.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS''TPIC') DOSPECIAL.C
+$ write sys$output "download.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') DOWNLOAD.C
+$ write sys$output "dpicheck.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') DPICHECK.C
+$ write sys$output "drawps.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS''TPIC') DRAWPS.C
+$ write sys$output "dviinput.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') DVIINPUT.C
+$ write sys$output "dvips.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS',"TFMPATH=""''TFMPATH'""","PKPATH=""''PKPATH'""", -
+ "VFPATH=""''VFPATH'""","FIGPATH=""''FIGPATH'""",HAVE_GETCWD,ANSI, -
+ "CONFIGPATH=""''CONFIGPATH'""","HEADERPATH=""''HEADERPATH'""") DVIPS.C
+$ write sys$output "emspecial.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS''EMTEX') EMSPECIAL.C
+$ write sys$output "finclude.c ..."
+$ cc/standard=vaxc /DEF=(VMS'DEBUG''HPS') FINCLUDE.C
+$ write sys$output "flib.c ..."
+$ cc/standard=vaxc /DEF=(VMS'DEBUG''HPS''FONTLIB') FLIB.C
+$ write sys$output "fontdef.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') FONTDEF.C
+$ write sys$output "header.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') HEADER.C
+$ write sys$output "hps.c ..." !EJG 02-Jul-1996
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') HPS.C !EJG 02-Jul-1996
+$ write sys$output "loadfont.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') LOADFONT.C
+$ write sys$output "makefont.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') MAKEFONT.C
+$ write sys$output "output.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS',"HEADERPATH=""''HEADERPATH'""") OUTPUT.C
+$ write sys$output "papersiz.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') PAPERSIZ.C
+$ write sys$output "pprescan.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') PPRESCAN.C
+$ write sys$output "prescan.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') PRESCAN.C
+$ write sys$output "repack.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') REPACK.C
+$ write sys$output "resident.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS',"CONFIGPATH=""''CONFIGPATH'""",HAVE_GETCWD,ANSI) -
+ RESIDENT.C
+$ write sys$output "scalewidth.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') SCALEWIDTH.C
+$ write sys$output "scanpage.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') SCANPAGE.C
+$ write sys$output "search.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') SEARCH.C
+$ write sys$output "skippage.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') SKIPPAGE.C
+$ write sys$output "squeeze.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') SQUEEZE.C
+$ write sys$output "t1part.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') T1PART.C
+$ write sys$output "tfmload.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') TFMLOAD.C
+$ write sys$output "unpack.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') UNPACK.C
+$ write sys$output "virtualfont.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') VIRTUALFONT.C
+$ !
+$ ! vaxvms fixes some irritating problems with VAXC ( particulary
+$ ! fseek and ftell ). Thanks to Nelson Beebee at Utah.
+$ !
+$ write sys$output "vaxvms.c ..."
+$ cc/standard=vaxc /define=(VMS'DEBUG''HPS') [.VMS]VAXVMS.C
+$ !
+$ linkstep:
+$ write sys$output " "
+$ write sys$output "Linking dvips ..."
+$ link /exe=dvips dvips,dopage,dosection,dospecial,download,dpicheck,drawps, -
+ t1part, -
+ dviinput,header,hps,finclude,flib,fontdef,loadfont,tfmload,prescan, -
+ scanpage,skippage,output,scalewidth,resident,search,unpack, -
+ makefont,repack,virtualfont,vaxvms,color,papersiz,pprescan, -
+ bbox,emspecial !EJG 02-Jul-1996
+$ write sys$output " "
+$ write sys$output "Linking squeeze ..."
+$ link /exe=squeeze squeeze,vaxvms !EJG 02-Jul-1996
+$ write sys$output " "
+$ write sys$output "Linking afm2tfm ..."
+$ write sys$output " "
+$ link /exe=afm2tfm afm2tfm,vaxvms !EJG 02-Jul-1996
+$ exit !EJG 02-Jul-1996
+$ !
+$ inquire/nop ANSWER -
+ "Do you wish to compress the PostScript prologue files [no]? "
+$ if ANSWER .eqs. "" then ANSWER = 0
+$ if .not. ANSWER then goto copy_prologue
+$ squeeze :== $'f$environment("DEFAULT")'squeeze.exe
+$ write sys$output " "
+$ set verify
+$ squeeze COLOR.LPRO COLOR.PRO
+$ squeeze FINCLUDE.LPRO FINCLUDE.PRO
+$ squeeze TEX.LPRO TEX.PRO
+$ squeeze TEXC.LPRO TEXC.PRO
+$ squeeze TEXPS.LPRO TEXPS.PRO
+$ squeeze SPECIAL.LPRO SPECIAL.PRO
+$ squeeze CROP.LPRO CROP.PRO
+$ squeeze HPS.LPRO HPS.PRO
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ copy_prologue:
+$ FIRSTPATH = PLACEHEADER_DIR
+$ inquire/nop ANSWER -
+ "Do you wish to copy the prologue files to ''FIRSTPATH' [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto copy_config
+$ write sys$output " "
+$ set verify
+$ copy COLOR.PRO 'FIRSTPATH'COLOR.PRO
+$ copy FINCLUDE.PRO 'FIRSTPATH'FINCLUDE.PRO
+$ copy TEX.PRO 'FIRSTPATH'TEX.PRO
+$ copy TEXC.PRO 'FIRSTPATH'TEXC.PRO
+$ copy TEXPS.PRO 'FIRSTPATH'TEXPS.PRO
+$ copy SPECIAL.PRO 'FIRSTPATH'SPECIAL.PRO
+$ copy HPS.PRO 'FIRSTPATH'HPS.PRO
+$ copy CROP.PRO 'FIRSTPATH'CROP.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'COLOR.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'FINCLUDE.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'TEX.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'TEXC.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'SPECIAL.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'TEXPS.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'HPS.PRO
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'CROP.PRO
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ copy_config:
+$ FIRSTPATH = PLACEHEADER_DIR
+$ inquire/nop ANSWER -
+ "Do you wish to copy the CONFIG.PS file to ''FIRSTPATH' [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto copy_image
+$ write sys$output " "
+$ set verify
+$ copy CONFIG.PS 'FIRSTPATH'CONFIG.PS
+$ set protection=(s:rwed,o:rwed,g:re,w:re) 'FIRSTPATH'CONFIG.PS
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ copy_image:
+$ inquire/nop ANSWER "Do you wish to copy DVIPS.EXE to the TeX area [yes]? "
+$ if ANSWER .eqs. "" then ANSWER = 1
+$ if .not. ANSWER then goto done
+$ inquire/nop ANSWER "TeX image area [''TEXEXEPATH']? "
+$ if ANSWER .nes. "" THEN TEXEXEPATH = ANSWER
+$ write sys$output " "
+$ set verify
+$ copy dvips.exe 'TEXEXEPATH'
+$ set protect=(s:rwed,o:rwed,g:re,w:re) 'TEXEXEPATH'dvips.exe
+$ verify = 'f$verify(0)
+$ write sys$output " "
+$ done:
+$ write sys$output " "
+$ write sys$output "Be sure to add dvips to your CLI by using the SET "
+$ write sys$output "COMMAND syntax and do the other steps which are"
+$ write sys$output "necessary to finish up the installation of dvips."
+$ write sys$output " "
+$ goto good_exit
+$ bad_exit:
+$ write sys$output " "
+$ write sys$output "Something's wrong here. You might want to take a look"
+$ write sys$output "at the offending code or command and start over."
+$ write sys$output " "
+$ exit
+$ good_exit:
+$ write sys$output "Done."
+$ write sys$output " "
+$ exit
+$! --------------------- EOF -------------------------------------
diff --git a/Build/source/texk/dvipsk/vms/texc_scr.com b/Build/source/texk/dvipsk/vms/texc_scr.com
new file mode 100644
index 00000000000..40519a41e2d
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/texc_scr.com
@@ -0,0 +1,104 @@
+$!----------------------------------------------------------------------
+$!
+$! TEXC_SCR.COM
+$!
+$! Convert TEX.LPRO to TEXC.LPRO
+$! This command file replaces the TexC.script file, intended for Unix OS,
+$! with its TPU equivalent.
+$!
+$! Tony McGrath 5-OCT-1990
+$! Dept. of Physics, Monash University, Victoria, Australia 3168
+$!
+$!----------------------------------------------------------------------
+$!
+$ Edit/TPU/NoSection/NoDisplay/Command=SYS$Input/Output=TEXC.LPRO TEX.LPRO
+!
+PROCEDURE texc$script
+
+LOCAL string_1, string_2, string_3, a_range, a_line, two_chars;
+
+!-----------------------------------------------------------------------
+! Won't bother with CREATE_ARRAY, try to keep the TPU as basic as possible
+! so it works on older versions of VMS.
+!-----------------------------------------------------------------------
+string_1 := "% begin code for uncompressed fonts only";
+string_2 := "% end code for uncompressed fonts only";
+string_3 := "% end of code for unpacking compressed fonts";
+!-----------------------------------------------------------------------
+! Search for the first of the 3 special strings.
+! Exit if we can't find it.
+!-----------------------------------------------------------------------
+a_range := search( string_1, forward);
+if( a_range = 0)
+then
+ message( "TEXC-F-NoString, Couldn't locate first string, Aborting");
+ return(0);
+endif;
+!-----------------------------------------------------------------------
+! Go to the start of the first string.
+!-----------------------------------------------------------------------
+position( beginning_of( a_range));
+!-----------------------------------------------------------------------
+! Search for the second of the 3 special strings.
+! Exit if we can't find it.
+!-----------------------------------------------------------------------
+a_range := search( string_2, forward);
+if( a_range = 0)
+then
+ message( "TEXC-F-NoString, Couldn't locate second string, Aborting");
+ return(0);
+endif;
+!-----------------------------------------------------------------------
+! Then start deleting lines until the second special string is found.
+!-----------------------------------------------------------------------
+loop
+ a_line := erase_line;
+ exitif a_line = string_2;
+endloop;
+!-----------------------------------------------------------------------
+! Search for the third of the 3 special strings.
+! Exit if we can't find it.
+!-----------------------------------------------------------------------
+a_range := search( string_3, forward);
+if( a_range = 0)
+then
+ message( "TEXC-F-NoString, Couldn't locate third string, Aborting");
+ return(0);
+endif;
+!-----------------------------------------------------------------------
+! Again start looping, deleting the first 2 characters from each line
+! until the 3rd special string is found, making sure that the first two
+! characters are "% "
+!-----------------------------------------------------------------------
+loop
+ two_chars := erase_character(2);
+ if two_chars <> "% "
+ then
+ message( "TEXC-F-NoComment, First 2 chars not correct, Aborting");
+ return(0);
+ endif;
+ exitif current_line = string_3;
+ move_vertical(1);
+endloop;
+!-----------------------------------------------------------------------
+! Assume all is well, return TRUE.
+!-----------------------------------------------------------------------
+return(1);
+
+ENDPROCEDURE
+!-----------------------------------------------------------------------
+! Initialize the main buffer.
+!-----------------------------------------------------------------------
+f:=Get_Info(Command_Line,"File_Name");
+b:=Create_Buffer("",f);
+o:=Get_Info(Command_Line,"Output_File");
+Set (Output_File,b,o);
+Position (Beginning_of(b));
+!
+if texc$script
+then
+ Exit;
+else
+ message( "TEXC-W-NoSave, current buffer not saved, errors were encountered");
+ Quit;
+endif;
diff --git a/Build/source/texk/dvipsk/vms/vaxcrtl.opt b/Build/source/texk/dvipsk/vms/vaxcrtl.opt
new file mode 100644
index 00000000000..a01884977fe
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/vaxcrtl.opt
@@ -0,0 +1 @@
+sys$share:vaxcrtl/share
diff --git a/Build/source/texk/dvipsk/vms/vaxvms.c b/Build/source/texk/dvipsk/vms/vaxvms.c
new file mode 100644
index 00000000000..d13e362b951
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/vaxvms.c
@@ -0,0 +1,470 @@
+/***********************************************************************
+This file provides alternative functions for several VMS VMS C library
+routines which either unacceptable, or incorrect, implementations. They
+have been developed and tested under VMS Version 4.4, but indications
+are that they apply to earlier versions, back to 3.2 at least. They
+should be retested with each new release of VMS C.
+
+Contents:
+ EXIT
+ FSEEK
+ FTELL
+ GETCHAR
+ GETENV
+ READ
+ UNGETC
+ getlogin
+ qsort
+ system
+ tell
+ unlink
+
+The VAX VMS file system record structure has unfortunate consequences
+for random access files.
+
+By default, text files written by most system utilities, and languages
+other than C, have a variable length record format, in which a 16-bit
+character count is aligned on an even-byte boundary in the disk block
+b(always 512 bytes in VMS, independent of record and file formats),
+followed by <count> bytes of data. Binary files, such as .EXE, .OBJ,
+and TeX .DVI and font files, all use a 512-byte fixed record format
+which has no explicit length field. No file byte count is stored;
+instead, the block count, and the offset of the last data byte in the
+last block are recorded in the file header (do ``DUMP/HEADER filespec''
+to see it). For binary files with fixed-length records, the last block
+is normally assumed to be full, and consequently, file transfer of
+binary data from other machines via Kermit, FTP, or DCL COPY from ANSI
+tapes, generally fails because the input file length is not a multiple
+of 512.
+
+This record organization may be contrasted with the STREAM, STREAM_LF,
+and STREAM_CR organizations supported from Version 4.0; in these, disk
+blocks contain a continuous byte stream in which nothing, or LF, or CR,
+is recognized as a record terminator. These formats are similar to the
+Unix and TOPS-20 file system formats which also use continuous byte
+streams.
+
+For C, this means that a program operating on a file in record format
+cannot count input characters and expect that count to be the same value
+as the offset parameter passed to fseek(), which numerous C programs
+assume to be the case. The draft ANSI C standard, and Harbison and
+Steele's ``C Reference Manual'', emphasize that only values returned by
+ftell() should be used as arguments to fseek(), allowing the program to
+return to a position previously read or written. UNFORTUNATELY, VMS C
+ftell() DOES NOT RETURN A CORRECT OFFSET VALUE FOR RECORD FILES.
+Instead, for record files, it returns the byte offset of the start of
+the current record, no matter where in that record the current position
+may be. This misbehavior is completely unnecessary, since the
+replacements below perform correctly, and are written entirely in C.
+
+Another problem is that ungetc(char c, FILE* fp) is unreliable. VMS C
+implements characters as signed 8-bit integers (so do many other C
+implementations). fgetc(FILE* fp) returns an int, not a char, whose
+value is EOF (-1) in the event of end-of-file; however, this value will
+also be returned for a character 0xFF, so it is essential to use
+feof(FILE *fp) to test for a true end-of-file condition when EOF is
+returned. ungetc() checks the sign of its argument c, and if it is
+negative (which it will be for 128 of the 256 signed bytes), REFUSES TO
+PUT IT BACK IN THE INPUT STREAM, on the assumption that c is really EOF.
+This too can be fixed; ungetc() should only do nothing if feof()
+indicates a true end-of-file condition. The overhead of this is
+trivial, since feof() is actually implemented as a macro which does
+nothing more than a logical AND and compare-with-zero.
+
+getchar() waits for a <CR> to be typed when stdin is a terminal; the
+replacement vms_getchar() remedies this.
+
+Undoubtedly other deficiencies in VMS C will reveal themselves.
+
+VMS read() returns only a single disk block on each call. Its
+replacment, vms_read(), will return the requested number of bytes, if
+possible.
+
+There are also a few Unix standard functions which are unimplemented.
+qsort() is not provided. getlogin() and unlink() have VMS equivalents
+provided below. tell() is considered obsolete, since its functionality
+is available from lseek(), but it is still seen in a few programs, so is
+provided below. getenv() fails if the name contains a colon; its
+replacement allows the colon.
+
+In the interest of minimal source perturbation, replacements for VMS
+functions are given the same names, but prefixed "vms_". For
+readability, the original names are preserved, but are converted to
+upper-case:
+
+ #define FTELL vms_ftell
+ #define FSEEK vms_fseek
+ #define GETCHAR vms_getchar
+ #define GETENV vms_getenv
+ #define UNGETC vms_ungetc
+
+These are only defined to work correctly for fixed length 512-byte
+records, and no check is made that the file has that organization (it is
+possible, but not without expensive calls to fstat(), or access to
+internal library structures).
+
+[02-Apr-87] -- Nelson H.F. Beebe, University of Utah Center for
+ Scientific Computing
+***********************************************************************/
+
+#define EXIT vms_exit
+#define FTELL vms_ftell
+#define FSEEK vms_fseek
+#define GETENV vms_getenv
+#define GETCHAR vms_getchar
+#define READ vms_read
+#define UNGETC vms_ungetc
+
+#include <stdio.h>
+#include <types.h>
+#include <ctype.h>
+#include <stat.h>
+#include <descrip.h>
+#include <iodef.h> /* need for vms_getchar() */
+#include <ssdef.h>
+
+#ifdef __GNUC__
+#include <stdlib.h>
+#endif
+
+void EXIT(int code);
+long FTELL(FILE *fp);
+long FSEEK(FILE *fp, long n, long dir);
+long UNGETC(char c, FILE *fp);
+int GETCHAR(void);
+int READ(int file_desc, char *buffer, int nbytes);
+char *GETENV(char *name);
+char *getlogin(void);
+long tell(int handle);
+int unlink(char *filename);
+
+/**********************************************************************/
+/*-->EXIT*/
+
+void
+vms_exit(int code)
+{
+ switch (code)
+ {
+ case 0:
+ exit(1); /* success */
+ break;
+
+ default:
+ exit(2); /* error */
+ break;
+ }
+}
+
+
+/**********************************************************************/
+/*-->FSEEK*/
+
+/* VMS fseek() and ftell() on fixed-length record files work correctly
+only at block boundaries. This replacement code patches in the offset
+within the block. Directions from current position and from
+end-of-file are converted to absolute positions, and then the code for
+that case is invoked. */
+
+long
+FSEEK(FILE *fp, long n, long dir)
+{
+ long k,m,pos,val,oldpos;
+ struct stat buffer;
+
+ for (;;) /* loops only once or twice */
+ {
+ switch (dir)
+ {
+ case 0: /* from BOF */
+ oldpos = FTELL(fp); /* get current byte offset in file */
+ k = n & 511; /* offset in 512-byte block */
+ m = n >> 9; /* relative block number in file */
+ if (((*fp)->_cnt) && ((oldpos >> 9) == m)) /* still in same block */
+ {
+ val = 0; /* success */
+ (*fp)->_ptr = ((*fp)->_base) + k; /* reset pointers to requested byte */
+ (*fp)->_cnt = 512 - k;
+ }
+ else
+ {
+ val = fseek(fp,m << 9,0); /* move to start of requested 512-byte block */
+ if (val == 0) /* success */
+ {
+ (*fp)->_cnt = 0; /* indicate empty buffer */
+ (void)fgetc(fp); /* force refill of buffer */
+ (*fp)->_ptr = ((*fp)->_base) + k; /* reset pointers to requested byte */
+ (*fp)->_cnt = 512 - k;
+ }
+ }
+ return(val);
+
+ case 1: /* from current pos */
+ pos = FTELL(fp);
+ if (pos == EOF) /* then error */
+ return (EOF);
+ n += pos;
+ dir = 0;
+ break; /* go do case 0 */
+
+ case 2: /* from EOF */
+ val = fstat(fileno(fp),&buffer);
+ if (val == EOF) /* then error */
+ return (EOF);
+ n += buffer.st_size - 1; /* convert filesize to offset and */
+ /* add to requested offset */
+ dir = 0;
+ break; /* go do case 0 */
+
+ default: /* illegal direction parameter */
+ return (EOF);
+ }
+ }
+}
+
+/**********************************************************************/
+/*-->FTELL*/
+
+/* With fixed-length record files, ftell() returns the offset of the
+start of block. To get the true position, this must be biased by
+the offset within the block. */
+
+long
+FTELL(FILE *fp)
+{
+ char c;
+ long pos;
+ long val;
+ if ((*fp)->_cnt == 0) /* buffer empty--force refill */
+ {
+ c = fgetc(fp);
+ val = UNGETC(c,fp);
+ if (val != c)
+ return (EOF); /* should never happen */
+ }
+ pos = ftell(fp); /* this returns multiple of 512 (start of block) */
+ if (pos >= 0) /* then success--patch in offset in block */
+ pos += ((*fp)->_ptr) - ((*fp)->_base);
+ return (pos);
+}
+
+/**********************************************************************/
+/*-->GETCHAR*/
+
+static int tt_channel = -1; /* terminal channel for image QIO's */
+
+#define FAILED(status) (~(status) & 1) /* failure if LSB is 0 */
+
+int
+GETCHAR()
+{
+ int ret_char; /* character returned */
+ int status; /* system service status */
+ static $DESCRIPTOR(sys_in,"TT:");
+
+ if (tt_channel == -1) /* then first call--assign channel */
+ {
+ status = sys$assign(&sys_in,&tt_channel,0,0);
+ if (FAILED(status))
+ lib$stop(status);
+ }
+ ret_char = 0;
+ status = sys$qiow(0,tt_channel,IO$_TTYREADALL | IO$M_NOECHO,0,0,0,
+ &ret_char,1,0,0,0,0);
+ if (FAILED(status))
+ lib$stop(status);
+
+ return (ret_char);
+}
+
+/**********************************************************************/
+/*-->READ*/
+int
+READ(register int file_desc,register char *buffer,register int nbytes)
+{
+ register int ngot;
+ register int left;
+
+ for ((left = nbytes, ngot = 0); left > 0; /* NOOP */)
+ {
+ ngot = read(file_desc,buffer,left);
+ if (ngot < 0)
+ return (-1); /* error occurred */
+ buffer += ngot;
+ left -= ngot;
+ }
+ return(nbytes-left);
+}
+
+/**********************************************************************/
+/*-->UNGETC*/
+long
+UNGETC(char c, FILE *fp) /* VMS ungetc() is a no-op if c < 0 */
+{ /* (which is half the time!) */
+
+ if ((c == EOF) && feof(fp))
+ return (EOF); /* do nothing at true end-of-file */
+ else if ((*fp)->_cnt >= 512)/* buffer full--no fgetc() done in this block!*/
+ return (EOF); /* must be user error if this happens */
+ else /* put the character back in the buffer */
+ {
+ (*fp)->_cnt++; /* increase count of characters left */
+ (*fp)->_ptr--; /* backup pointer to next available char */
+ *((*fp)->_ptr) = c; /* save the character */
+ return (c); /* and return it */
+ }
+}
+
+/**********************************************************************/
+/*-->getenv*/
+char*
+GETENV(char *name)
+{
+ char* p;
+ char* result;
+ char ucname[256];
+
+ p = ucname;
+ while (*name) /* VMS logical names must be upper-case */
+ {
+ *p++ = islower(*name) ? toupper(*name) : *name;
+ ++name;
+ }
+ *p = '\0';
+
+ p = strchr(ucname,':'); /* colon in name? */
+ if (p == (char *)NULL) /* no colon in name */
+ result = getenv(ucname);
+ else /* try with and without colon */
+ {
+ result = getenv(ucname);
+ if (result == (char *)NULL)
+ {
+ *p = '\0';
+ result = getenv(ucname);
+ *p = ':';
+ }
+ }
+ return (result);
+}
+
+/**********************************************************************/
+/*-->getlogin*/
+char*
+getlogin()
+{
+ return ((char *)getenv("USER")); /* use equivalent VMS routine */
+}
+
+/**********************************************************************/
+/*-->qsort*/
+
+/***********************************************************************
+TeXindex uses the standard Unix library function qsort() for
+record sorting. Unfortunately, qsort() is not a stable sorting
+algorithm, so input order is not necessarily preserved for equal
+sort keys. This is important, because the sorting is
+case-independent, while the actual entries may not be. For
+example, the input
+
+\entry{i}{22}{{\CODE{i}}}
+\entry{i}{42}{{\CODE{i}}}
+\entry{I}{41}{{\CODE{I}}}
+\entry{I}{42}{{\CODE{I}}}
+
+produces
+
+\initial {I}
+\entry {{\CODE{i}}}{22}
+\entry {{\CODE{I}}}{41--42}
+\entry {{\CODE{i}}}{42}
+
+instead of the correct
+
+\initial {I}
+\entry {{\CODE{i}}}{22, 42}
+\entry {{\CODE{I}}}{41--42}
+
+We therefore provide this stable shellsort replacement for
+qsort() based on the code given on p. 116 of Kernighan and
+Ritchie, ``The C Programming Language'', Prentice-Hall (1978).
+This has order N**1.5 average performance, which is usually
+slower than qsort(). In the interests of simplicity, we make no
+attempt to handle short sequences by alternative methods.
+
+[07-Nov-86]
+***********************************************************************/
+
+#if VMS_QSORT
+#define BASE(i) &base[(i)*width]
+
+void
+qsort(base, nel, width, compar)
+ char base[]; /* start of data in memory */
+ int nel; /* number of elements to be sorted */
+ int width; /* size (in bytes) of each element */
+ int (*compar)(); /* comparison function */
+{
+ int gap;
+ int i;
+ int j;
+
+ register int k; /* inner exchange loop parameters */
+ register char* p;
+ register char* q;
+ register char c;
+
+ for (gap = nel/2; gap > 0; gap /= 2)
+ {
+ for (i = gap; i < nel; i++)
+ {
+ for (j = i-gap; j >= 0; j -= gap)
+ {
+ p = BASE(j);
+ q = BASE(j+gap);
+ if ((*compar)(p,q) <= 0)
+ break; /* exit j loop */
+ else
+ {
+ for (k = 0; k < width; (++p, ++q, ++k))
+ {
+ c = *q;
+ *q = *p;
+ *p = c;
+ }
+ }
+ }
+ }
+ }
+}
+#endif
+/**********************************************************************
+*-->system*
+int
+system(char *s)
+{
+ struct dsc$descriptor t;
+
+ t.dsc$w_length = strlen(s);
+ t.dsc$a_pointer = s;
+ t.dsc$b_class = DSC$K_CLASS_S;
+ t.dsc$b_dtype = DSC$K_DTYPE_T;
+ return (LIB$SPAWN(&t) == SS$_NORMAL) ? 0 : 127;
+}
+
+
+**********************************************************************/
+/*-->tell*/
+long
+tell(int handle)
+{
+ return (lseek(handle,0L,1));
+}
+
+/**********************************************************************/
+/*-->unlink*/
+int
+unlink(char *filename)
+{
+ return (delete(filename)); /* use equivalent VMS routine */
+}
diff --git a/Build/source/texk/dvipsk/vms/vms.h b/Build/source/texk/dvipsk/vms/vms.h
new file mode 100644
index 00000000000..f9088861b43
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/vms.h
@@ -0,0 +1,17 @@
+#ifdef VMS
+/* The replacement ftell and fseek functions in the vaxvms.c file dated
+ * [02-Apr-87] do not work properly under OpenVMS 1.5 on DEC Alpha, when
+ * compiled using DEC C 1.3. However, the DEC supplied ftell and fseek
+ * functions work fine. They should also work for DEC C on a VAX.
+ */
+#ifndef __DECC
+#define ftell vms_ftell
+#define fseek vms_fseek
+#endif /* __DECC */
+#define getchar vms_getchar
+#define getenv vms_getenv
+#define ungetc vms_ungetc
+#define getname vms_getname
+#define popen(pcmd, pmode) fopen(pcmd, pmode)
+#define pclose(pstream) fclose(pstream)
+#endif /* VMS */
diff --git a/Build/source/texk/dvipsk/vms/vms_gcc.txt b/Build/source/texk/dvipsk/vms/vms_gcc.txt
new file mode 100644
index 00000000000..5159ce6ddb1
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/vms_gcc.txt
@@ -0,0 +1,75 @@
+ DVIPS & GNU C
+
+Changes that had to be made in order to compile the DVIPS program with the GNU
+CC (GCC) compiler on Vax/VMS.
+
+(1) DVIPS.C
+(a) Problem with 'include' files. The person who did the original port to VMS
+used the :
+#include filename
+notation rather than the more traditional
+#include "filename.h"
+notation. With the VAX C compiler this means that the chosen header file is
+extracted from the SYS$SHARE:VAXCDEF.TLB text library. Well, the GCC compiler
+doesn't understand this notation. Now, I could've simply changed it so that if
+the code was being compiled on a VMS machine then use the
+#include "filename.h"
+notation regardless of the compiler. But some sites may not have extracted the
+header files from the text library when the VAX C compiler was installed.
+This problem also affects the VMSCLI.C file on the [.VMS] directory.
+
+(b) The TFMPATH, PKPATH, etc.., definitions cannot be defined in the MAKEFILE
+because the GCC.EXE program complains with the following error message...
+% gcc-cpp command too long. Unable to compile.
+
+After removing some of the path definitions to shorten the command (just too
+see roughly how big the buffer was) I eventually tricked the GCC.EXE program
+into getting as far as executing the GNU_CC:[000000]GCC.COM command file but
+it then complained, giving the following message...
+%DCL-W-TKNOVF, command element is too long - shorten
+So, I gave up and took the easy way out, i.e. put these PATH definitions back
+in to a new GCC-specific PATHS.H, called VMS_GCC_PATHS.H
+
+(2) DOSPECIAL.C
+The "tolower" macro, defined in GNU_CC:[INCLUDE]CTYPE.H, is too simple. It
+doesn't check to see if the character is in the range 'A' to 'Z' therefore
+we may as well use the "Tolower" function supplied in the DOSPECIAL.C file.
+
+(3) The MAKEFILE has been updated to handle the GCC compiler. It must be edited
+by the user to select either the VAX11C or the GCC compiler. Search for the
+strings VAXC or GNUC and comment out the appropriate lines.
+
+(4) VMS.H
+The "getchar" macro is undefined if it already exists. This is just to stop the
+warning message from the GCC compiler informing us that it is being redefined.
+GNUC defines it in GNU_CC:[INCLUDE]STDIO.H
+
+(5) VAXVMS.C
+Defined all the functions at the top of the file to keep the GCC compiler
+quiet, since it reported the following problems...
+
+vaxvms.c;1: In function vms_ftell:
+vaxvms.c;1:223: warning: `vms_ftell' was previously implicitly declared to return `int'
+vaxvms.c;1: In function vms_ungetc:
+vaxvms.c;1:296: warning: `vms_ungetc' was previously implicitly declared to return `int'
+vaxvms.c;1: In function vms_getenv:
+
+Next, if using the GNU CC compiler then #include <stdlib.h> so that the
+compiler knows all about the `strchr' and `getenv' functions, hence avoiding
+the following warnings...
+
+vaxvms.c;1:331: warning: assignment of pointer from integer lacks a cast
+vaxvms.c;1:333: warning: assignment of pointer from integer lacks a cast
+vaxvms.c;1:336: warning: assignment of pointer from integer lacks a cast
+vaxvms.c;1:340: warning: assignment of pointer from integer lacks a cast
+
+-------------------------------------------------------------------------------
+These changes were tested with GCC 1.42 which is the current official release
+of VMS GCC, available from any of the many GNU archive sites. These changes
+were also tested with GCC 2.3.3 which is avaliable from MANGO.RSMAS.MIAMI.EDU
+(pub/VMS-gcc). The problem to be aware of is that GNUC doesn't have a
+CLIMSGDEF.H header file (needed for DVIPS.C). One way out it to create one by
+hand from the output from ...
+$ LIBRARY/MACRO/EXTRACT=$CLIMSGDEF/OUTPUT=SYS$OUTPUT SYS$LIBRARY:STARLET.MLB
+The other solution is to use the more complete package of C header files
+provided by Pat Rankin, also available at MANGO.RSMAS.MIAMI.EDU
diff --git a/Build/source/texk/dvipsk/vms/vms_gcc_paths.h b/Build/source/texk/dvipsk/vms/vms_gcc_paths.h
new file mode 100644
index 00000000000..520c2b46b9a
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/vms_gcc_paths.h
@@ -0,0 +1,33 @@
+/*-----------------------------------------------------------------------*
+ * These definitions cannot be defined on the command line because so many
+ * DEFINE's overflow the DCL buffer when using the GNU CC compiler.
+ *-----------------------------------------------------------------------*/
+#ifndef TFMPATH
+#define TFMPATH "TEX_FONTS:"
+#endif
+#ifndef PKPATH
+#define PKPATH "TEX_DISK:[TEX.FONTS.%d]%f.PK"
+#endif
+#ifndef VFPATH
+#define VFPATH "TEX_VF:"
+#endif
+#ifndef FIGPATH
+#define FIGPATH ",TEX_INPUTS:,TEX$POSTSCRIPT:," /* Include blank so it looks on default dir. */
+#endif
+#ifndef HEADERPATH
+#define HEADERPATH "TEX$POSTSCRIPT:,SYS$LOGIN:"
+#endif
+#ifndef CONFIGPATH
+#define CONFIGPATH "TEX$POSTSCRIPT:"
+#endif
+#ifndef CONFIGFILE
+#define CONFIGFILE "config.ps"
+#endif
+#ifdef FONTLIB
+#ifndef FLIPATH
+#define FLIPATH ""
+#endif
+#ifndef FLINAME
+#define FLINAME ""
+#endif
+#endif
diff --git a/Build/source/texk/dvipsk/vms/vmscli.c b/Build/source/texk/dvipsk/vms/vmscli.c
new file mode 100644
index 00000000000..438e23ec841
--- /dev/null
+++ b/Build/source/texk/dvipsk/vms/vmscli.c
@@ -0,0 +1,466 @@
+/* EJG - 02-Jul-1996 */
+/* fix processing of filter qualifier */
+/* add secure qualifier */
+/* add oddpages qualifier */
+/* add evenpages qualifier */
+/* set sendcontrold only if qualifier present, not if merely negated */
+/* check for setting or resetting disablecomments was cli$_negated in both cases - fix */
+/* add downloadps (as PK) fonts qualifier */
+/* add hyperps qualifier */
+/* EJG - 07-Jul-1996 */
+/* test for INC_COM was looking for negated in both cases, so fixed */
+#ifdef __GNUC__
+#include "ssdef.h"
+#else
+#include ssdef
+#endif
+/* this code is included into dvips.c; don't compile it separately. */
+int vmscli()
+ {long int k,scnt;
+ int length,status,maxdrift,jext;
+ float offset,conversion;
+ char *u;
+ static char dummy[100],prtr[20];
+ static $DESCRIPTOR(qual1,"copies");
+ static $DESCRIPTOR(qual2,"debug");
+ static $DESCRIPTOR(qual3,"maxdrift");
+ static $DESCRIPTOR(qual4,"filter");
+ static $DESCRIPTOR(qual5,"last");
+ static $DESCRIPTOR(qual6,"manual");
+ static $DESCRIPTOR(qual7,"number");
+ static $DESCRIPTOR(qual8,"output");
+ static $DESCRIPTOR(qual9,"start");
+ static $DESCRIPTOR(qual10,"quiet");
+ static $DESCRIPTOR(qual11,"reverse");
+ static $DESCRIPTOR(qual12,"sav_res");
+ static $DESCRIPTOR(qual13,"mode");
+ static $DESCRIPTOR(qual14,"magnification");
+ static $DESCRIPTOR(qual15,"collate");
+ static $DESCRIPTOR(qual16,"dpi");
+ static $DESCRIPTOR(qual17,"ctrld");
+ static $DESCRIPTOR(qual18,"inc_com");
+ static $DESCRIPTOR(qual19,"comment");
+ static $DESCRIPTOR(qual20,"vm_save");
+ static $DESCRIPTOR(qual21,"h_dpi");
+ static $DESCRIPTOR(qual22,"v_dpi");
+ static $DESCRIPTOR(qual23,"compress");
+ static $DESCRIPTOR(qual24,"printer");
+ static $DESCRIPTOR(qual25,"header");
+ static $DESCRIPTOR(qual26,"absolute");
+ static $DESCRIPTOR(qual27,"epsf");
+ static $DESCRIPTOR(qual28,"prescan");
+ static $DESCRIPTOR(qual29,"pagecopies");
+ static $DESCRIPTOR(qual30,"separate");
+ static $DESCRIPTOR(qual31,"cropmarks");
+ static $DESCRIPTOR(qual32,"sec_size");
+ static $DESCRIPTOR(qual33,"help");
+ static $DESCRIPTOR(qual34,"makefont");
+ static $DESCRIPTOR(qual35,"psize");
+ static $DESCRIPTOR(qual36,"poffset");
+ static $DESCRIPTOR(qual37,"secure"); /* EJG 02-Jul-1996 */
+ static $DESCRIPTOR(qual38,"oddpages"); /* EJG 02-Jul-1996 */
+ static $DESCRIPTOR(qual39,"evenpages"); /* EJG 02-Jul-1996 */
+ static $DESCRIPTOR(qual40,"downloadps"); /* EJG 02-Jul-1996 */
+ static $DESCRIPTOR(qual41,"hyperps"); /* EJG 02-Jul-1996 */
+ static $DESCRIPTOR(dumdum,dummy);
+ static $DESCRIPTOR(dvi_file,"dvifile");
+ static $DESCRIPTOR(input_file,infnme);
+ scnt=0;
+ status = cli$present(&dvi_file);
+
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&dvi_file,&input_file,&jext);
+ length=0;
+ for(k=0;k<252;k++)
+ { if(infnme[k] == ':' || infnme[k] == ']')
+ scnt=k+1;
+ }
+ for(k=scnt;k<252;k++)
+ {if(infnme[k]=='.')
+ {length=k;
+ jext=k;
+ }
+ else
+ {if(infnme[k]=='/' || infnme[k]==' ' || infnme[k]=='\0')
+ infnme[k]='\0';
+ }
+ }
+ if(length==0)
+ {jext= strlen(infnme);
+ strcat(infnme,".DVI");}
+
+ iname = &infnme[0] ;
+ length = 0; /* Initialize length...VAX C bug? */
+
+ }
+ status = cli$present(&qual1);
+
+ if(status == CLI$_PRESENT | status == CLI$_DEFAULTED)
+ {status = cli$get_value(&qual1,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&numcopies) == 0)
+ error("!Bad copies option");
+ }
+#ifdef DEBUG
+ status = cli$present(&qual2);
+
+ if(status == CLI$_PRESENT)
+ {
+ status = cli$get_value(&qual2,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&debug_flag) == 0)
+ error("!Bad debug option");
+ }
+#else
+ error("not compiled in debug mode");
+#endif
+ status = cli$present(&qual3);
+
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual3,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&maxdrift) == 0 ||maxdrift <0)
+ error("bad maxdrift option");
+ vmaxdrift=maxdrift;
+ }
+
+
+ status = cli$present(&qual5);
+
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual5,&dumdum,&length);
+
+#ifdef SHORTINT
+ switch(sscanf(&dummy[0], "%ld.%ld", &lastpage, &lastseq)) {
+#else /* ~SHORTINT */
+ switch(sscanf(&dummy[0], "%ld.%ld", &lastpage, &lastseq)) {
+#endif /* ~SHORTINT */
+case 1: lastseq = 0 ;
+case 2: break ;
+default:
+ error("! Bad last page option.") ;
+ }
+ notlast = 1 ;
+ }
+ status = cli$present(&qual6);
+
+ if(status == CLI$_PRESENT)
+ manualfeed=1;
+ else
+ if(status == CLI$_NEGATED)
+ manualfeed=0;
+
+ status = cli$present(&qual7);
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual7,&dumdum,&length);
+#ifdef SHORTINT
+ if (sscanf(&dummy[0], "%ld", &maxpages)==0)
+#else /* ~SHORTINT */
+ if (sscanf(&dummy[0], "%d", &maxpages)==0)
+#endif /* ~SHORTINT */
+ error("! Bad number of pages option.") ;
+ }
+
+ status = cli$present(&qual8);
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual8,&dumdum,&length);
+ sscanf(&dummy[0],"%s",ofnme);
+ }
+ else
+ {for(k=scnt;k<jext;k++)ofnme[k-scnt]=infnme[k];
+ strcat(ofnme,".PS");}
+ oname = &ofnme[0] ;
+
+ status = cli$present(&qual4);
+
+ if(status == CLI$_PRESENT)
+ {oname="";
+ filter=1; /* EJG 02-Jul-1996 */
+ noenv=(1==1);
+ }
+ else /* EJG 02-Jul-1996 */
+ filter=0; /* EJG 02-Jul-1996 */
+
+ status = cli$present(&qual9);
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual9,&dumdum,&length);
+#ifdef SHORTINT
+ switch(sscanf(&dummy[0], "%ld.%ld", &firstpage, &firstseq)) {
+#else /* ~SHORTINT */
+ switch(sscanf(&dummy[0], "%ld.%ld", &firstpage, &firstseq)) {
+#endif /* ~SHORTINT */
+case 1: firstseq = 0 ;
+case 2: break ;
+default:
+ error("! Bad first page option.") ;
+ }
+ notfirst = 1 ;
+ }
+
+ status = cli$present(&qual10);
+
+ if(status == CLI$_PRESENT)
+ quiet=(1==1);
+ else
+ if(status == CLI$_NEGATED)
+ quiet=(1==0);
+
+ status = cli$present(&qual11);
+
+ if(status == CLI$_PRESENT)
+ reverse=1;
+ else
+ if(status == CLI$_NEGATED)
+ reverse=0;
+
+ status = cli$present(&qual12);
+
+ if(status == CLI$_PRESENT)
+ safetyenclose=1;
+ else
+ if(status == CLI$_NEGATED)
+ safetyenclose=0;
+
+ status = cli$present(&qual13);
+ if(status == CLI$_PRESENT | status == CLI$_DEFAULTED)
+ {status = cli$get_value(&qual13,&dumdum,&length);
+ sscanf(&dummy[0],"%s",pap);
+ if (strcmp(&pap[0], "landscape") == 0)
+ { if (hpapersize || vpapersize)
+ error( "both landscape and papersize specified; ignoring landscape") ;
+ else
+ landscape = 1 ;
+ /* The following lines have been added by G.Bonacci */
+ if ((status=cli$get_value(&qual13,&dumdum,&length))==1)
+ {
+ sscanf(&dummy[0],"%s",pap);
+
+ paperfmt = &pap[0] ;
+ }
+ /* end G.Bonacci 20.3.92 */
+ }
+ else
+ paperfmt = &pap[0] ;
+ }
+
+ status = cli$present(&qual14);
+
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual14,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&mag) == 0 || mag < 10 || mag >100000)
+ error("!Bad magnification parameter.");
+ overridemag=1;
+ }
+ status = cli$present(&qual15);
+
+ if(status == CLI$_PRESENT | status == CLI$_DEFAULTED)
+ {status = cli$get_value(&qual15,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&collatedcopies) == 0)
+ error("!Bad number of collated copies");
+ }
+ status = cli$present(&qual16);
+
+ if(status == CLI$_PRESENT | status == CLI$_DEFAULTED)
+ {status = cli$get_value(&qual16,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&actualdpi) == 0 ||
+ actualdpi < 10 || actualdpi >10000)
+ error("!Bad dpi parameter.");
+ vactualdpi=actualdpi;
+ }
+
+ status = cli$present(&qual17);
+
+ if(status == CLI$_PRESENT) /* EJG 02-Jul-1996 */
+ sendcontrolD =1;
+ else
+ if(status == CLI$_NEGATED | status==CLI$_DEFAULTED) /* EJG 02-Jul-1996 */
+ sendcontrolD =0;
+
+ status = cli$present(&qual18);
+
+ if(status == CLI$_PRESENT) /* EJG 07-Jul-1996 */
+ removecomments =0;
+ else
+ if(status == CLI$_NEGATED)
+ removecomments =1;
+
+ status = cli$present(&qual19);
+
+ if(status == CLI$_PRESENT) /* EJG 02-JUL-1996 */
+ disablecomments = 0;
+ else
+ if(status == CLI$_NEGATED)
+ disablecomments = 1;
+
+ status = cli$present(&qual20);
+
+ if(status == CLI$_PRESENT)
+ nosmallchars=1;
+ else
+ if(status == CLI$_NEGATED)
+ nosmallchars=0;
+
+ status = cli$present(&qual21);
+
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual21,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&actualdpi) == 0 ||
+ actualdpi < 10 || actualdpi >10000)
+ error("!Bad dpi parameter in X.");
+ }
+
+ status = cli$present(&qual22);
+
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual22,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&vactualdpi) == 0 ||
+ vactualdpi < 10 || vactualdpi >10000)
+ error("!Bad dpi parameter in Y.");
+ }
+
+ status = cli$present(&qual23);
+
+ if(status == CLI$_PRESENT)
+ compressed=1;
+ else
+ if(status == CLI$_NEGATED)
+ compressed=0;
+
+ status = cli$present(&qual24);
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual24,&dumdum,&length);
+ sscanf(&dummy[0],"%s",prtr);
+ u = &dummy[0] ;
+ strcpy(u,"config.");
+ strcat(u,&prtr[0]);
+ getdefaults("");
+ noenv=1;
+ getdefaults(u);
+ }
+
+ status = cli$present(&qual25);
+ if(status == CLI$_PRESENT) {
+ while (status != SS$_NORMAL) {
+ status = cli$get_value(&qual25,&dumdum,&length);
+ dummy[length] = '\0';
+ if (strcmp(dummy, "-") == 0)
+ headers_off = 1;
+ else
+ (void)add_header(dummy) ;
+ }
+ }
+ else {
+ if(status == CLI$_NEGATED)
+ headers_off = 1;
+ }
+
+ status = cli$present(&qual26);
+ if(status == CLI$_PRESENT) abspage = 1;
+
+ status = cli$present(&qual27);
+ if(status == CLI$_PRESENT | status==CLI$_DEFAULTED) tryepsf = 1;
+ else
+ if(status == CLI$_NEGATED) tryepsf = 0;
+
+ status = cli$present(&qual28);
+ if(status == CLI$_PRESENT | status==CLI$_DEFAULTED) dopprescan = 1;
+ else
+ if(status == CLI$_NEGATED) dopprescan = 0;
+
+ status = cli$present(&qual29);
+
+ if(status == CLI$_PRESENT | status == CLI$_DEFAULTED)
+ {status = cli$get_value(&qual29,&dumdum,&length);
+
+ if(sscanf(&dummy[0],"%d",&pagecopies) == 0)
+ error("!Bad number of page copies option /PAGECOPIES");
+ if (pagecopies < 1 || pagecopies > 1000)
+ error("! can only print one to a thousand page copies") ;
+ }
+
+ status = cli$present(&qual30);
+ if(status == CLI$_PRESENT | status==CLI$_DEFAULTED) sepfiles = 1;
+ else
+ if(status == CLI$_NEGATED) sepfiles = 0;
+
+ status = cli$present(&qual31);
+ if(status == CLI$_PRESENT | status==CLI$_DEFAULTED) cropmarks = 1;
+ else
+ if(status == CLI$_NEGATED) cropmarks = 0;
+
+ status = cli$present(&qual32);
+ if(status == CLI$_PRESENT)
+ {status = cli$get_value(&qual32,&dumdum,&length);
+#ifdef SHORTINT
+ if (sscanf(&dummy[0], "%ld", &maxsecsize)==0)
+#else /* ~SHORTINT */
+ if (sscanf(&dummy[0], "%d", &maxsecsize)==0)
+#endif /* ~SHORTINT */
+ error("! Bad section size arg (/SEC_SIZE).") ;
+ }
+
+ status = cli$present(&qual33);
+ if(status == CLI$_PRESENT)
+ { (void)fprintf(stderr, banner) ;
+ help() ;
+ }
+
+ status = cli$present(&qual34);
+ if(status == CLI$_NEGATED) dontmakefont = 1;
+/*-----------------------------------------------------------------------
+ * Currently one uses /PSIZE="5mm,10mm" This way CASE is preserved
+ * Should I convert the PSIZE to allow a LIST => /PSIZE=(5mm,10mm) and
+ * convert the case back to lowercase in here.
+ *-----------------------------------------------------------------------*/
+ status = cli$present(&qual35);
+ if(status == CLI$_PRESENT) {
+ status = cli$get_value(&qual35,&dumdum,&length);
+ dummy[length] = '\0';
+ handlepapersize(&dummy[0], &hpapersize, &vpapersize) ;
+ if (landscape) {
+ error("both landscape and papersize specified; ignoring landscape") ;
+ landscape = 0 ;
+ }
+ }
+
+ status = cli$present(&qual36);
+ if(status == CLI$_PRESENT) {
+ status = cli$get_value(&qual36,&dumdum,&length);
+ dummy[length] = '\0';
+ handlepapersize(&dummy[0], &hoff, &voff) ;
+ }
+
+ status = cli$present(&qual37); /* EJG 02-Jul-1996 */
+ if(status == CLI$_PRESENT) secure = 1; /* EJG 02-Jul-1996 */
+ else /* EJG 02-Jul-1996 */
+ if(status == CLI$_NEGATED | status == CLI$_DEFAULTED) secure = 0; /* EJG 02-Jul-1996 */
+
+ status = cli$present(&qual38); /* EJG 02-Jul-1996 */
+ if(status == CLI$_PRESENT) oddpages = 1; /* EJG 02-Jul-1996 */
+ else /* EJG 02-Jul-1996 */
+ if(status == CLI$_NEGATED | status == CLI$_DEFAULTED) oddpages = 0; /* EJG 02-Jul-1996 */
+
+ status = cli$present(&qual39); /* EJG 02-Jul-1996 */
+ if(status == CLI$_PRESENT) evenpages = 1; /* EJG 02-Jul-1996 */
+ else /* EJG 02-Jul-1996 */
+ if(status == CLI$_NEGATED | status == CLI$_DEFAULTED) evenpages = 0; /* EJG 02-Jul-1996 */
+
+ status = cli$present(&qual40); /* EJG 02-Jul-1996 */
+ if(status == CLI$_PRESENT) downloadpspk = 1; /* EJG 02-Jul-1996 */
+ else /* EJG 02-Jul-1996 */
+ if(status == CLI$_NEGATED | status == CLI$_DEFAULTED) downloadpspk = 0; /* EJG 02-Jul-1996 */
+
+#ifdef HPS /* EJG 02-Jul-1996 */
+
+ status = cli$present(&qual41); /* EJG 02-Jul-1996 */
+ if(status == CLI$_PRESENT) HPS_FLAG = 1; /* EJG 02-Jul-1996 */
+ else /* EJG 02-Jul-1996 */
+ if(status == CLI$_NEGATED | status == CLI$_DEFAULTED) HPS_FLAG = 0; /* EJG 02-Jul-1996 */
+#endif /* EJG 02-Jul-1996 */
+
+}
diff --git a/Build/source/texk/dvipsk/win32.mak b/Build/source/texk/dvipsk/win32.mak
new file mode 100644
index 00000000000..3867c08082c
--- /dev/null
+++ b/Build/source/texk/dvipsk/win32.mak
@@ -0,0 +1,242 @@
+################################################################################
+#
+# Makefile : Dvipsk
+# Author : Fabrice Popineau <Fabrice.Popineau@supelec.fr>
+# Platform : Win32, Microsoft VC++ 6.0, depends upon fpTeX 0.5 sources
+# Time-stamp: <03/11/16 17:29:08 popineau>
+#
+################################################################################
+root_srcdir = ..\..
+!ifdef DEVELOPMENT
+INCLUDE=$(INCLUDE);$(root_srcdir)\texk.development
+!else
+INCLUDE=$(INCLUDE);$(root_srcdir)\texk
+!endif
+
+version = 5.86g
+
+# Add -DDEFRES=dpi to DEFS to change the default resolution from 600.
+# Add -DSECURE if you will install dvips with special privileges.
+# Add -DNO_DEBUG to omit debugging support.
+# Add -DNO_EMTEX to omit EMTEX specials.
+# Add -DNO_HPS to omit hypertex support.
+# Add -DNO_TPIC to omit tpic support.
+#
+# For VM/CMS or (perhaps) VMS or DOS compilation, need the corresponding
+# subdirectory from the original dvips distribution. (Maybe dvipsk
+# won't work at all on such systems; if you have info one way or the
+# other, please let kb@cs.umb.edu know.)
+USE_KPATHSEA = 1
+USE_GNUW32 = 1
+
+!include <msvc/common.mak>
+
+DEFS = $(DEFS) -DHAVE_CONFIG_H
+
+!ifdef USE_KPATHSEA
+DEFS = $(DEFS) -DDEFRES=600 -DA4 -DSHIFTLOWCHARS \
+ -DKPATHSEA \
+ -DNeedFunctionPrototypes
+
+!else
+DEFS = $(DEFS) -DDEFRES=600
+!endif
+
+# writet1.c is taken from pdftex
+pdftexdir = ..\web2c\pdftexdir
+
+# The `t[mp]-' business is so that we don't create an empty .pro file,
+# if running squeeze fails for some reason. A dependency on squeeze
+# fails here, so we include it below.
+.SUFFIXES: .pro .lpro
+.lpro.pro:
+ .\$(objdir)\squeeze <$< >t-$@
+ $(copy) t-$@ $@ && $(del) t-$@ $(redir_stdout)
+
+prologues = tex.pro texps.pro texc.pro special.pro finclude.pro \
+ color.pro crop.pro hps.pro
+
+srcfiles = dospecial.c dviinput.c emspecial.c fontdef.c loadfont.c \
+ dvips.c tfmload.c download.c prescan.c scanpage.c \
+ skippage.c output.c scalewidth.c dosection.c dopage.c \
+ resident.c search.c unpack.c drawPS.c header.c repack.c \
+ virtualfont.c dpicheck.c finclude.c $(pdftexdir)\writet1.c pprescan.c \
+ papersiz.c color.c bbox.c hps.c flib.c
+
+objects = $(objdir)\dospecial.obj $(objdir)\dviinput.obj \
+ $(objdir)\emspecial.obj $(objdir)\fontdef.obj \
+ $(objdir)\loadfont.obj $(objdir)\dvips.obj \
+ $(objdir)\tfmload.obj $(objdir)\download.obj \
+ $(objdir)\prescan.obj $(objdir)\scanpage.obj \
+ $(objdir)\skippage.obj $(objdir)\output.obj \
+ $(objdir)\scalewidth.obj $(objdir)\dosection.obj \
+ $(objdir)\dopage.obj $(objdir)\resident.obj \
+ $(objdir)\search.obj $(objdir)\unpack.obj \
+ $(objdir)\drawPS.obj $(objdir)\header.obj \
+ $(objdir)\repack.obj $(objdir)\virtualfont.obj \
+ $(objdir)\dpicheck.obj $(objdir)\finclude.obj \
+ $(objdir)\writet1.obj $(objdir)\pprescan.obj \
+ $(objdir)\papersiz.obj $(objdir)\color.obj \
+ $(objdir)\bbox.obj $(objdir)\hps.obj
+
+program = $(objdir)\dvips.exe
+programs = $(objdir)\afm2tfm.exe $(program)
+
+installdirs = $(mandir) $(infodir) $(psheaderdir)/base # $(dvips_plain_macrodir)
+
+manfiles = dvips.1 afm2tfm.1
+infofiles = dvips.info # dvips.info-1 dvips.info-2 dvips.info-3 dvips.info-3 dvips.info-4
+pdfdocfiles = dvips.pdf
+docsubdir = dvips
+
+default all: $(objdir) $(programs) $(prologues) dvips.info
+
+!ifdef USE_KPATHSEA
+$(program): $(kpathsealib) $(objects) $(objdir)\dvips.res
+ $(link) $(**) $(conlibs)
+$(objdir)\afm2tfm.exe: $(kpathsealib) $(objdir)\afm2tfm.obj $(objdir)\afm2tfm.res
+ $(link) $(**) $(conlibs)
+# Omit LOADLIBES since no need to dynamically link with kpathsea.
+$(objdir)\squeeze.exe: $(objdir)\squeeze.obj
+ $(link) $(**) $(conlibs)
+
+$(objdir)\writet1.obj: $(pdftexdir)\writet1.c
+ $(compile) -I$(pdftexdir) $(pdftexdir)\writet1.c
+
+!else
+# where TeX is `rooted'. Sometimes /usr/local/lib/tex.
+# TEXDIR = /usr/lib/tex
+TEXDIR = e:/Local/TeX/share/texmf
+
+# another place pk, tfm, and vf files might be found.
+# LOCALDIR = /LocalLibrary/Fonts/TeXFonts
+LOCALDIR = .
+
+# the default path to search for TFM files
+# (this usually is identical to TeX's defaultfontpath, which omits `.')
+# (private fonts are given an explicit directory, which overrides the path)
+# overridden by the environment variable TEXFONTS
+# TFMPATH = $(LOCALDIR)/tfm;$(TEXDIR)/fonts/tfm
+TFMPATH = .;$(LOCALDIR)/tfm;$(TEXDIR)/fonts/tfm
+
+# the default path to search for PK files (usually omits `.')
+# Don't forget to add the directory that
+# MakeTeXPK puts the files! (In this case, /LocalLibrary/Fonts...)
+# overridden by the environment variable TEXPKS or TEXPACKED or PKFONTS
+# PKPATH = $(LOCALDIR)/pk;$(TEXDIR)/fonts/pk
+PKPATH = .;$(LOCALDIR)/pk;$(TEXDIR)/fonts/pk
+
+# the default path to search for VF files (usually omits `.')
+# overridden by the environment variable VFFONTS
+# VFPATH = $(LOCALDIR)/vf;$(TEXDIR)/fonts/vf
+VFPATH = .;$(LOCALDIR)/vf;$(TEXDIR)/fonts/vf
+
+# additional directories in which to search for subdirectories to find
+# both tfm and pk files
+FONTSUBDIRPATH =
+
+# where the config files go
+# CONFIGDIR = $(TEXDIR)/ps
+CONFIGDIR = $(TEXDIR)/dvips
+
+# the default path to search for config files
+# overridden by the environment variable TEXCONFIG
+# CONFIGPATH = .;$(CONFIGDIR)
+CONFIGPATH = .;$(CONFIGDIR)
+
+# the name of your config file
+# CONFIGFILE = config.ps
+CONFIGFILE = config.ps
+
+# where the header PS files go
+# HEADERDIR = $(TEXDIR)/ps
+HEADERDIR = $(TEXDIR)/dvips
+
+# the default path to search for header files
+# HEADERPATH = .;$(HEADERDIR)
+HEADERPATH = .;$(HEADERDIR)
+
+# where epsf.tex and rotate.tex go (usually the TeX macros directory)
+# TEXMACRODIR = $(TEXDIR)/inputs
+TEXMACRODIR = $(TEXDIR)/inputs
+
+# the default path to search for epsf and psfiles
+# (usually the same as TeX's defaultinputpath)
+# FIGPATH = .;..;$(TEXDIR)/inputs
+FIGPATH = .;..;$(TEXDIR)/inputs
+
+PATHS = -DTFMPATH=\"$(TFMPATH)\" \
+ -DPKPATH=\"$(PKPATH)\" \
+ -DVFPATH=\"$(VFPATH)\" \
+ -DHEADERPATH=\"$(HEADERPATH)\" \
+ -DCONFIGPATH=\"$(CONFIGPATH)\" \
+ -DCONFIGFILE=\"$(CONFIGFILE)\" \
+ -DFONTSUBDIRPATH=\"$(FONTSUBDIRPATH)\" \
+ -DFIGPATH=\"$(FIGPATH)\"
+
+DEFS = $(DEFS) $(PATHS)
+
+objects = $(objects) $(objdir)/makefont.obj
+
+$(program): $(objects) $(objdir)\dvips.res
+ $(link) $(**) $(conlibs)
+$(objdir)\afm2tfm.exe: $(objdir)\afm2tfm.obj $(objdir)\afm2tfm.res
+ $(link) $(**) $(conlibs)
+# Omit LOADLIBES since no need to dynamically link with kpathsea.
+$(objdir)\squeeze.exe: $(objdir)\squeeze.obj
+ $(link) $(**) $(conlibs)
+!endif
+
+$(prologues): $(objdir)\squeeze.exe
+
+texc.lpro: texc.script tex.lpro
+ $(sed) -f $(win32seddir)/texc-script.sed < .\tex.lpro > $@
+
+!include <msvc/config.mak>
+
+!include <msvc/install.mak>
+
+check: all
+ -@$(del) mtest.ps
+ set TFMFONTS=$(srcdir)/testdata
+ set VFFONTS=$(srcdir)/testdata
+ -.\$(objdir)\dvips -D 300 $(srcdir)/testdata/dvipstst.xdv -o dvipstst.ps
+ $(move) dvipstst.ps mtest.ps
+ -.\$(objdir)\dvips -D 300 $(srcdir)/testdata/dvipstst.xdv -o
+ -diff --ignore-all-space $(srcdir)/testdata/dvipstst.xps dvipstst.ps
+ -@$(del) dvipstst.ps # mtest.ps
+
+install:: install-exec install-data install-info install-man install-doc
+ @echo "Create $(psheaderdir)/base/config.ps if necessary (see ./INSTALL)."
+
+install-data::
+# PostScript prologues and encodings.
+ -@echo $(verbose) & ( \
+ for %%h in ($(prologues)) do $(copy) %%h $(psheaderdir)\base\%%h $(redir_stdout) \
+ )
+ -@echo $(verbose) & ( \
+ for %%e in (*.enc) do $(copy) reencode\%%e $(psheaderdir)\base\%%e $(redir_stdout) \
+ )
+!ifdef TETEX
+ -@echo $(verbose) & ( \
+ for %%m in (blackdvi.tex colordvi.tex epsf.tex rotate.tex) do \
+ $(copy) tex\%%m $(dvips_plain_macrodir)\%%m $(redir_stdout) \
+ )
+!endif
+
+!include <msvc/clean.mak>
+
+extraclean::
+ -@$(del) afm2tfm.ps dvips.ps testdata\*.log testdata\dvipstst.dvi \
+ testdata\dvipstst.pdf testdata\dvipstst.ps testdata\mtest.ps
+
+distclean::
+ -@$(del) *.pro texc.lpro
+
+!include <msvc/rdepend.mak>
+!include "./depend.mak"
+
+#
+# Local Variables:
+# mode: Makefile
+# End:
diff --git a/Build/source/texk/dvipsk/writet1.c b/Build/source/texk/dvipsk/writet1.c
new file mode 100644
index 00000000000..41ef48d4df8
--- /dev/null
+++ b/Build/source/texk/dvipsk/writet1.c
@@ -0,0 +1,1780 @@
+/*
+Copyright (c) 1996-2005 Han The Thanh, <thanh@pdftex.org>
+
+This file is part of pdfTeX.
+
+pdfTeX is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+pdfTeX is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with pdfTeX; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+$Id: //depot/Build/source.development/TeX/texk/web2c/pdftexdir/writet1.c#24 $
+*/
+
+static const char perforce_id[] =
+ "$Id: //depot/Build/source.development/TeX/texk/web2c/pdftexdir/writet1.c#24 $";
+
+#ifdef pdfTeX /* writet1 used with pdfTeX */
+#include "ptexlib.h"
+#define t1_log(s) tex_printf(s)
+#define t1_open() \
+ open_input(&t1_file, kpse_type1_format, FOPEN_RBIN_MODE)
+#define enc_open() \
+ open_input(&enc_file, kpse_enc_format, FOPEN_RBIN_MODE)
+#define external_enc() (fm_cur->encoding)->glyph_names
+#define full_file_name() (char*)nameoffile + 1
+#define get_length1() t1_length1 = t1_offset() - t1_save_offset
+#define get_length2() t1_length2 = t1_offset() - t1_save_offset
+#define get_length3() t1_length3 = t1_offset() - t1_save_offset
+#define is_used_char(c) pdfcharmarked(tex_font, c)
+#define t1_putchar fb_putchar
+#define t1_offset fb_offset
+#define out_eexec_char t1_putchar
+#define save_offset() t1_save_offset = t1_offset()
+#define end_last_eexec_line() \
+ t1_eexec_encrypt = false
+#define t1_char(c) c
+#define embed_all_glyphs(tex_font) fm_cur->all_glyphs
+#define extra_charset() fm_cur->charset
+#define update_subset_tag() \
+ strncpy(fb_array + t1_fontname_offset, fm_cur->subset_tag, 6)
+
+integer t1_length1, t1_length2, t1_length3;
+static integer t1_save_offset;
+static integer t1_fontname_offset;
+extern char *fb_array;
+
+#else /* writet1 used with dvips */
+#include "dvips.h"
+#include "ptexmac.h"
+#undef fm_extend
+#define fm_extend(f) 0
+#undef fm_slant
+#define fm_slant(f) 0
+#undef is_reencoded
+#define is_reencoded(f) (cur_enc_name != NULL)
+#undef is_subsetted
+#define is_subsetted(f) true
+#undef is_included
+#define is_included(f) true
+#undef set_cur_file_name
+#define set_cur_file_name(s) cur_file_name = s
+#define t1_open() \
+ ((t1_file = search(headerpath, cur_file_name, FOPEN_RBIN_MODE)) != NULL)
+#define enc_open() \
+ ((enc_file = search(encpath, cur_file_name, FOPEN_RBIN_MODE)) != NULL)
+#define external_enc() ext_glyph_names
+#define full_file_name() cur_file_name
+#define get_length1()
+#define get_length2()
+#define get_length3()
+#define is_used_char(c) (grid[c] == 1)
+#define out_eexec_char t1_outhex
+#define save_offset()
+#define end_last_eexec_line() \
+ hexline_length = HEXLINE_WIDTH; \
+ end_hexline(); \
+ t1_eexec_encrypt = false
+#define t1_log(s)
+#define t1_scan_only()
+#define t1_include()
+#define t1_putchar(c) fputc(c, bitfile)
+#define t1_scan_keys()
+#define embed_all_glyphs(tex_font) false
+#undef pdfmovechars
+#ifdef SHIFTLOWCHARS
+extern char errbuf[];
+extern Boolean shiftlowchars;
+#define pdfmovechars shiftlowchars
+#define t1_char(c) T1Char(c)
+#else /* SHIFTLOWCHARS */
+#define t1_char(c) c
+#define pdfmovechars 0
+#endif /* SHIFTLOWCHARS */
+#define extra_charset() dvips_extra_charset
+#define make_subset_tag(a, b)
+#define update_subset_tag()
+
+static char *dvips_extra_charset ;
+extern FILE *bitfile ;
+extern FILE *search();
+static char *cur_file_name;
+static char *cur_enc_name;
+static unsigned char *grid;
+static char *ext_glyph_names[MAX_CHAR_CODE + 1];
+static char print_buf[PRINTF_BUF_SIZE];
+static int hexline_length;
+static char notdef[] = ".notdef";
+static size_t last_ptr_index;
+#endif /* pdfTeX */
+
+#include <kpathsea/c-vararg.h>
+#include <kpathsea/c-proto.h>
+
+#define t1_getchar() getc(t1_file)
+#define t1_ungetchar(c) ungetc(c, t1_file)
+#define t1_eof() feof(t1_file)
+#define t1_close() xfclose(t1_file, cur_file_name)
+
+#define enc_getchar() getc(enc_file)
+#define enc_eof() feof(enc_file)
+#define enc_close() xfclose(enc_file, cur_file_name)
+
+#define valid_code(c) (c >= 0 && c <= MAX_CHAR_CODE)
+
+static const char *standard_glyph_names[MAX_CHAR_CODE + 1] = {
+notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef,
+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", "asciicircum", "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", "asciitilde", notdef, notdef, notdef, notdef, notdef, notdef,
+notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef,
+notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef,
+notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef,
+notdef, "exclamdown", "cent", "sterling", "fraction", "yen", "florin",
+"section", "currency", "quotesingle", "quotedblleft", "guillemotleft",
+"guilsinglleft", "guilsinglright", "fi", "fl", notdef, "endash", "dagger",
+"daggerdbl", "periodcentered", notdef, "paragraph", "bullet",
+"quotesinglbase", "quotedblbase", "quotedblright", "guillemotright",
+"ellipsis", "perthousand", notdef, "questiondown", notdef, "grave", "acute",
+"circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", notdef,
+"ring", "cedilla", notdef, "hungarumlaut", "ogonek", "caron", "emdash",
+notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef, notdef,
+notdef, notdef, notdef, notdef, notdef, notdef, notdef, "AE", notdef,
+"ordfeminine", notdef, notdef, notdef, notdef, "Lslash", "Oslash", "OE",
+"ordmasculine", notdef, notdef, notdef, notdef, notdef, "ae", notdef, notdef,
+notdef, "dotlessi", notdef, notdef, "lslash", "oslash", "oe", "germandbls",
+notdef, notdef, notdef, notdef
+};
+
+static char charstringname[] = "/CharStrings";
+
+char **t1_glyph_names;
+char *t1_builtin_glyph_names[MAX_CHAR_CODE + 1];
+static boolean read_encoding_only;
+static int t1_encoding;
+
+#define T1_BUF_SIZE 0x10
+#define ENC_BUF_SIZE 0x1000
+
+#define ENC_STANDARD 0
+#define ENC_BUILTIN 1
+
+#define CS_HSTEM 1
+#define CS_VSTEM 3
+#define CS_VMOVETO 4
+#define CS_RLINETO 5
+#define CS_HLINETO 6
+#define CS_VLINETO 7
+#define CS_RRCURVETO 8
+#define CS_CLOSEPATH 9
+#define CS_CALLSUBR 10
+#define CS_RETURN 11
+#define CS_ESCAPE 12
+#define CS_HSBW 13
+#define CS_ENDCHAR 14
+#define CS_RMOVETO 21
+#define CS_HMOVETO 22
+#define CS_VHCURVETO 30
+#define CS_HVCURVETO 31
+#define CS_1BYTE_MAX (CS_HVCURVETO + 1)
+
+#define CS_DOTSECTION CS_1BYTE_MAX + 0
+#define CS_VSTEM3 CS_1BYTE_MAX + 1
+#define CS_HSTEM3 CS_1BYTE_MAX + 2
+#define CS_SEAC CS_1BYTE_MAX + 6
+#define CS_SBW CS_1BYTE_MAX + 7
+#define CS_DIV CS_1BYTE_MAX + 12
+#define CS_CALLOTHERSUBR CS_1BYTE_MAX + 16
+#define CS_POP CS_1BYTE_MAX + 17
+#define CS_SETCURRENTPOINT CS_1BYTE_MAX + 33
+#define CS_2BYTE_MAX (CS_SETCURRENTPOINT + 1)
+#define CS_MAX CS_2BYTE_MAX
+
+typedef unsigned char byte;
+
+typedef struct {
+ byte nargs; /* number of arguments */
+ boolean bottom; /* take arguments from bottom of stack? */
+ boolean clear; /* clear stack? */
+ boolean valid;
+} cc_entry; /* CharString Command */
+
+typedef struct {
+ char *name; /* glyph name (or notdef for Subrs entry) */
+ byte *data;
+ unsigned short len; /* length of the whole string */
+ unsigned short cslen; /* length of the encoded part of the string */
+ boolean used;
+ boolean valid;
+} cs_entry;
+
+static unsigned short t1_dr, t1_er;
+static const unsigned short t1_c1 = 52845, t1_c2 = 22719;
+static unsigned short t1_cslen;
+static short t1_lenIV;
+static char enc_line[ENC_BUF_SIZE];
+
+/* define t1_line_ptr, t1_line_array & t1_line_limit */
+typedef char t1_line_entry;
+define_array(t1_line);
+
+/* define t1_buf_ptr, t1_buf_array & t1_buf_limit */
+typedef char t1_buf_entry;
+define_array(t1_buf);
+
+static int cs_start;
+
+static cs_entry *cs_tab, *cs_ptr, *cs_notdef;
+static char *cs_dict_start, *cs_dict_end;
+static int cs_count, cs_size, cs_size_pos;
+
+static cs_entry *subr_tab;
+static char *subr_array_start, *subr_array_end;
+static int subr_max, subr_size, subr_size_pos;
+
+/* This list contains the begin/end tokens commonly used in the */
+/* /Subrs array of a Type 1 font. */
+static const char *cs_token_pairs_list[][2] = {
+ {" RD", "NP"},
+ {" -|", "|"},
+ {" RD", "noaccess put"},
+ {" -|", "noaccess put"},
+ {NULL, NULL}
+};
+static const char **cs_token_pair;
+
+static boolean t1_pfa, t1_cs, t1_scan, t1_eexec_encrypt, t1_synthetic;
+static int t1_in_eexec; /* 0 before eexec-encrypted, 1 during, 2 after */
+static long t1_block_length;
+static int last_hexbyte;
+static FILE *t1_file;
+static FILE *enc_file;
+
+#define str_prefix(s1, s2) (strncmp(s1, s2, strlen(s2)) == 0)
+#define t1_prefix(s) str_prefix(t1_line_array, s)
+#define t1_buf_prefix(s) str_prefix(t1_buf_array, s)
+#define t1_suffix(s) str_suffix(t1_line_array, t1_line_ptr, s)
+#define t1_buf_suffix(s) str_suffix(t1_buf_array, t1_buf_ptr, s)
+#define t1_charstrings() strstr(t1_line_array, charstringname)
+#define t1_subrs() t1_prefix("/Subrs")
+#define t1_end_eexec() t1_suffix("mark currentfile closefile")
+#define t1_cleartomark() t1_prefix("cleartomark")
+
+#ifndef pdfTeX
+static void pdftex_fail(char *fmt,...)
+{
+ va_list args;
+ va_start(args, fmt);
+ fputs("\nError: module writet1", stderr);
+ if (cur_file_name)
+ fprintf(stderr, " (file %s)", cur_file_name);
+ fputs(": ", stderr);
+ vsprintf(print_buf, fmt, args);
+ fputs(print_buf, stderr);
+ fputs("\n ==> Fatal error occurred, the output PS file is not finished!\n", stderr);
+ va_end(args);
+ exit(-1);
+}
+
+static void pdftex_warn(char *fmt,...)
+{
+ va_list args;
+ va_start(args, fmt);
+ fputs("\nWarning: module writet1 of dvips", stderr);
+ if (cur_file_name)
+ fprintf(stderr, " (file %s)", cur_file_name);
+ fputs(": ", stderr);
+ vsprintf(print_buf, fmt, args);
+ fputs(print_buf, stderr);
+ fputs("\n", stderr);
+ va_end(args);
+}
+
+#define HEXLINE_WIDTH 64
+
+static void end_hexline()
+{
+ if (hexline_length == HEXLINE_WIDTH) {
+ fputs("\n", bitfile);
+ hexline_length = 0;
+ }
+}
+
+static void t1_outhex(byte b)
+{
+ static char *hexdigits = "0123456789ABCDEF";
+ t1_putchar(hexdigits[b/16]);
+ t1_putchar(hexdigits[b%16]);
+ hexline_length += 2;
+ end_hexline();
+}
+#endif /* pdfTeX */
+
+
+static void enc_getline(void)
+{
+ char *p;
+ int c;
+restart:
+ if (enc_eof())
+ pdftex_fail("unexpected end of file");
+ p = enc_line;
+ do {
+ c = enc_getchar();
+ append_char_to_buf(c, p, enc_line, ENC_BUF_SIZE);
+ } while (c != 10);
+ append_eol(p, enc_line, ENC_BUF_SIZE);
+ if (p - enc_line < 2 || *enc_line == '%')
+ goto restart;
+}
+
+void load_enc(char *enc_name, char **glyph_names)
+{
+ char buf[ENC_BUF_SIZE], *p, *r;
+ int names_count;
+ set_cur_file_name(enc_name);
+ if (!enc_open()) {
+ pdftex_warn("cannot open encoding file for reading");
+ cur_file_name = NULL;
+ return;
+ }
+ t1_log("{");
+ t1_log(cur_file_name = full_file_name());
+ enc_getline();
+ if (*enc_line != '/' || (r = strchr(enc_line, '[')) == NULL) {
+ remove_eol(r, enc_line);
+ pdftex_fail("invalid encoding vector (a name or `[' missing): `%s'", enc_line);
+ }
+ names_count = 0;
+ r++; /* skip '[' */
+ skip(r, ' ');
+ for (;;) {
+ while (*r == '/') {
+ for (p = buf, r++; *r != ' ' && *r != 10 && *r != ']' && *r != '/'; *p++ = *r++);
+ *p = 0;
+ skip(r, ' ');
+ if (names_count > MAX_CHAR_CODE)
+ pdftex_fail("encoding vector contains more than %i names",
+ (int)(MAX_CHAR_CODE + 1));
+ if (strcmp(buf, notdef) != 0)
+ glyph_names[names_count] = xstrdup(buf);
+ names_count++;
+ }
+ if (*r != 10 && *r != '%') {
+ if (strncmp(r, "] def", strlen("] def")) == 0)
+ goto done;
+ else {
+ remove_eol(r, enc_line);
+ pdftex_fail("invalid encoding vector: a name or `] def' expected: `%s'", enc_line);
+ }
+ }
+ enc_getline();
+ r = enc_line;
+ }
+done:
+ enc_close();
+ t1_log("}");
+ cur_file_name = NULL;
+}
+
+static void t1_check_pfa(void)
+{
+ int c = t1_getchar();
+ if (c != 128)
+ t1_pfa = true;
+ else
+ t1_pfa = false;
+ t1_ungetchar(c);
+}
+
+static int t1_getbyte(void)
+{
+ int c = t1_getchar();
+ if (t1_pfa)
+ return c;
+ if (t1_block_length == 0) {
+ if (c != 128)
+ pdftex_fail("invalid marker");
+ c = t1_getchar();
+ if (c == 3) {
+ while (!t1_eof())
+ t1_getchar();
+ return EOF;
+ }
+ t1_block_length = t1_getchar() & 0xff;
+ t1_block_length |= (t1_getchar() & 0xff) << 8;
+ t1_block_length |= (t1_getchar() & 0xff) << 16;
+ t1_block_length |= (t1_getchar() & 0xff) << 24;
+ c = t1_getchar();
+ }
+ t1_block_length--;
+ return c;
+}
+
+static int hexval(int c)
+{
+ if (c >= 'A' && c <= 'F')
+ return c - 'A' + 10;
+ else if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+ else if (c >= '0' && c <= '9')
+ return c - '0';
+ else
+ return -1;
+}
+
+static byte edecrypt(byte cipher)
+{
+ byte plain;
+ if (t1_pfa) {
+ while (cipher == 10 || cipher == 13)
+ cipher = t1_getbyte();
+ last_hexbyte = cipher = (hexval(cipher) << 4) + hexval(t1_getbyte());
+ }
+ plain = (cipher^(t1_dr >> 8));
+ t1_dr = (cipher + t1_dr)*t1_c1 + t1_c2;
+ return plain;
+}
+
+static byte cdecrypt(byte cipher, unsigned short *cr)
+{
+ byte plain = (cipher^(*cr >> 8));
+ *cr = (cipher + *cr)*t1_c1 + t1_c2;
+ return plain;
+}
+
+static byte eencrypt(byte plain)
+{
+ byte cipher = (plain^(t1_er >> 8));
+ t1_er = (cipher + t1_er)*t1_c1 + t1_c2;
+ return cipher;
+}
+
+static byte cencrypt(byte plain, unsigned short *cr)
+{
+ byte cipher = (plain^(*cr >> 8));
+ *cr = (cipher + *cr)*t1_c1 + t1_c2;
+ return cipher;
+}
+
+static char *eol(char *s)
+{
+ char *p = strend(s);
+ if (p - s > 1 && p[-1] != 10) {
+ *p++ = 10;
+ *p = 0;
+ }
+ return p;
+}
+
+static float t1_scan_num(char *p, char **r)
+{
+ float f;
+ skip(p, ' ');
+ if (sscanf(p, "%g", &f) != 1) {
+ remove_eol(p, t1_line_array);
+ pdftex_fail("a number expected: `%s'", t1_line_array);
+ }
+ if (r != NULL) {
+ for (; isdigit(*p) || *p == '.' ||
+ *p == 'e' || *p == 'E' || *p == '+' || *p == '-'; p++);
+ *r = p;
+ }
+ return f;
+}
+
+static boolean str_suffix(const char *begin_buf, const char *end_buf,
+ const char *s)
+{
+ const char *s1 = end_buf - 1,
+ *s2 = strend(s) - 1;
+ if (*s1 == 10)
+ s1--;
+ while (s1 >= begin_buf && s2 >= s) {
+ if (*s1-- != *s2--)
+ return false;
+ }
+ return s2 < s;
+}
+
+static void t1_getline(void)
+{
+ int c, l, eexec_scan;
+ char *p;
+ static const char eexec_str[] = "currentfile eexec";
+ static int eexec_len = 17; /* strlen(eexec_str) */
+restart:
+ if (t1_eof())
+ pdftex_fail("unexpected end of file");
+ t1_line_ptr = t1_line_array;
+ alloc_array(t1_line, 1, T1_BUF_SIZE);
+ t1_cslen = 0;
+ eexec_scan = 0;
+ c = t1_getbyte();
+ if (c == EOF)
+ goto exit;
+ while (!t1_eof()) {
+ if (t1_in_eexec == 1)
+ c = edecrypt(c);
+ alloc_array(t1_line, 1, T1_BUF_SIZE);
+ append_char_to_buf(c, t1_line_ptr, t1_line_array, t1_line_limit);
+ if (t1_in_eexec == 0 && eexec_scan >= 0 && eexec_scan < eexec_len) {
+ if (t1_line_array[eexec_scan] == eexec_str[eexec_scan])
+ eexec_scan++;
+ else
+ eexec_scan = -1;
+ }
+ if (c == 10 || (t1_pfa && eexec_scan == eexec_len && c == 32))
+ break;
+ if (t1_cs && t1_cslen == 0 && (t1_line_ptr - t1_line_array > 4) &&
+ (t1_suffix(" RD ") || t1_suffix(" -| "))) {
+ p = t1_line_ptr - 5;
+ while (*p != ' ')
+ p--;
+ t1_cslen = l = t1_scan_num(p + 1, 0);
+ cs_start = t1_line_ptr - t1_line_array; /* cs_start is an index now */
+ alloc_array(t1_line, l, T1_BUF_SIZE);
+ while (l-- > 0)
+ *t1_line_ptr++ = edecrypt(t1_getbyte());
+ }
+ c = t1_getbyte();
+ }
+ alloc_array(t1_line, 2, T1_BUF_SIZE); /* append_eol can append 2 chars */
+ append_eol(t1_line_ptr, t1_line_array, t1_line_limit);
+ if (t1_line_ptr - t1_line_array < 2)
+ goto restart;
+ if (eexec_scan == eexec_len)
+ t1_in_eexec = 1;
+exit:
+ /* ensure that t1_buf_array has as much room as t1_line_array */
+ t1_buf_ptr = t1_buf_array;
+ alloc_array(t1_buf, t1_line_limit, t1_line_limit);
+}
+
+static void t1_putline(void)
+{
+ char *p = t1_line_array;
+ if (t1_line_ptr - t1_line_array <= 1)
+ return;
+ if (t1_eexec_encrypt) {
+ while (p < t1_line_ptr)
+ out_eexec_char(eencrypt(*p++));
+ }
+ else
+ while (p < t1_line_ptr)
+ t1_putchar(*p++);
+}
+
+static void t1_puts(const char *s)
+{
+ if (s != t1_line_array)
+ strcpy(t1_line_array, s);
+ t1_line_ptr = strend(t1_line_array);
+ t1_putline();
+}
+
+static void t1_printf(const char *fmt,...)
+{
+ va_list args;
+ va_start(args, fmt);
+ vsprintf(t1_line_array, fmt, args);
+ t1_puts(t1_line_array);
+ va_end(args);
+}
+
+static void t1_init_params(const char *open_name_prefix)
+{
+ t1_log(open_name_prefix);
+ t1_log(cur_file_name);
+ t1_lenIV = 4;
+ t1_dr = 55665;
+ t1_er = 55665;
+ t1_in_eexec = 0;
+ t1_cs = false;
+ t1_scan = true;
+ t1_synthetic = false;
+ t1_eexec_encrypt = false;
+ t1_block_length = 0;
+ t1_check_pfa();
+}
+
+static void t1_close_font_file(const char *close_name_suffix)
+{
+ t1_log(close_name_suffix);
+ t1_close();
+ cur_file_name = NULL;
+}
+
+static void t1_check_block_len(boolean decrypt)
+{
+ int l, c;
+ if (t1_block_length == 0)
+ return;
+ c = t1_getbyte();
+ if (decrypt)
+ c = edecrypt(c);
+ l = t1_block_length;
+ if (!(l == 0 && (c == 10 || c == 13))) {
+ pdftex_warn("%i bytes more than expected were ignored", l + 1);
+ while (l-- > 0)
+ t1_getbyte();
+ }
+}
+
+static void t1_start_eexec(void)
+{
+ int i;
+ if (is_included(fm_cur)) {
+ get_length1();
+ save_offset();
+ }
+ if (!t1_pfa)
+ t1_check_block_len(false);
+ for (t1_line_ptr = t1_line_array, i = 0; i < 4; i++) {
+ edecrypt(t1_getbyte());
+ *t1_line_ptr++ = 0;
+ }
+ t1_eexec_encrypt = true;
+ if (is_included(fm_cur))
+ t1_putline(); /* to put the first four bytes */
+}
+
+static void t1_stop_eexec(void)
+{
+ int c;
+ if (is_included(fm_cur)) {
+ get_length2();
+ save_offset();
+ }
+ end_last_eexec_line();
+ if (!t1_pfa)
+ t1_check_block_len(true);
+ else {
+ c = edecrypt(t1_getbyte());
+ if (!(c == 10 || c == 13)) {
+ if (last_hexbyte == 0)
+ t1_puts("00");
+ else
+ pdftex_warn("unexpected data after eexec");
+ }
+ }
+ t1_cs = false;
+ t1_in_eexec = 2;
+}
+
+#ifdef pdfTeX
+static void t1_modify_fm(void)
+{
+ /*
+ * font matrix is given as six numbers a0..a5, which stands for the matrix
+ *
+ * a0 a1 0
+ * M = a2 a3 0
+ * a4 a5 1
+ *
+ * ExtendFont is given as
+ *
+ * e 0 0
+ * E = 0 1 0
+ * 0 0 1
+ *
+ * SlantFont is given as
+ *
+ * 1 0 0
+ * S = s 1 0
+ * 0 0 1
+ *
+ * and the final transformation is
+ *
+ * e*a0 e*a1 0
+ * F = E.S.M = s*e*a0+a2 s*e*a1+a3 0
+ * a4 a5 1
+ */
+ float e, s, a[6], b[6];
+ int i, c;
+ char *p, *q, *r;
+ if ((p = strchr(t1_line_array, '[')) == 0)
+ if ((p = strchr(t1_line_array, '{')) == 0) {
+ remove_eol(p, t1_line_array);
+ pdftex_fail("FontMatrix: an array expected: `%s'", t1_line_array);
+ }
+ c = *p++; /* save the character '[' resp. '{' */
+ strncpy(t1_buf_array, t1_line_array, (unsigned)(p - t1_line_array));
+ r = t1_buf_array + (p - t1_line_array);
+ for (i = 0; i < 6; i++) {
+ a[i] = t1_scan_num(p, &q);
+ p = q;
+ }
+ if (fm_extend(fm_cur) != 0)
+ e = fm_extend(fm_cur)*1E-3;
+ else
+ e = 1;
+ s = fm_slant(fm_cur)*1E-3;
+ b[0] = e*a[0];
+ b[1] = e*a[1];
+ b[2] = s*e*a[0] + a[2];
+ b[3] = s*e*a[1] + a[3];
+ b[4] = a[4];
+ b[5] = a[5];
+ for (i = 0; i < 6; i++) {
+ sprintf(r, "%g ", b[i]);
+ r = strend(r);
+ }
+ if (c == '[') {
+ while (*p != ']' && *p != 0)
+ p++;
+ }
+ else {
+ while (*p != '}' && *p != 0)
+ p++;
+ }
+ if (*p == 0) {
+ remove_eol(p, t1_line_array);
+ pdftex_fail("FontMatrix: cannot find the corresponding character to '%c': `%s'", c, t1_line_array);
+ }
+ strcpy(r, p);
+ strcpy(t1_line_array, t1_buf_array);
+ t1_line_ptr = eol(t1_line_array);
+}
+
+static void t1_modify_italic(void)
+{
+ float a;
+ char *p, *r;
+ if (fm_slant(fm_cur) == 0)
+ return;
+ p = strchr(t1_line_array, ' ');
+ strncpy(t1_buf_array, t1_line_array, (unsigned)(p - t1_line_array + 1));
+ a = t1_scan_num(p + 1, &r);
+ a -= atan(fm_slant(fm_cur)*1E-3)*(180/M_PI);
+ sprintf(t1_buf_array + (p - t1_line_array + 1), "%g", a);
+ strcpy(strend(t1_buf_array), r);
+ strcpy(t1_line_array, t1_buf_array);
+ t1_line_ptr = eol(t1_line_array);
+ font_keys[ITALIC_ANGLE_CODE].value = round(a);
+ font_keys[ITALIC_ANGLE_CODE].valid = true;
+}
+
+static void t1_scan_keys(void)
+{
+ int i, k;
+ char *p, *q, *r;
+ key_entry *key;
+ if (fm_extend(fm_cur) != 0 || fm_slant(fm_cur) != 0) {
+ if (t1_prefix("/FontMatrix")) {
+ t1_modify_fm();
+ return;
+ }
+ if (t1_prefix("/ItalicAngle")) {
+ t1_modify_italic();
+ return;
+ }
+ }
+ if (t1_prefix("/FontType")) {
+ p = t1_line_array + strlen("FontType") + 1;
+ if ((i = t1_scan_num(p, 0)) != 1)
+ pdftex_fail("Type%d fonts unsupported by pdfTeX", i);
+ return;
+ }
+ for (key = font_keys; key - font_keys < MAX_KEY_CODE; key++)
+ if (strncmp(t1_line_array + 1, key->t1name, strlen(key->t1name)) == 0)
+ break;
+ if (key - font_keys == MAX_KEY_CODE)
+ return;
+ key->valid = true;
+ p = t1_line_array + strlen(key->t1name) + 1;
+ skip(p, ' ');
+ if ((k = key - font_keys) == FONTNAME_CODE) {
+ if (*p != '/') {
+ remove_eol(p, t1_line_array);
+ pdftex_fail("a name expected: `%s'", t1_line_array);
+ }
+ r = ++p; /* skip the slash */
+ for (q = t1_buf_array; *p != ' ' && *p != 10; *q++ = *p++);
+ *q = 0;
+ if (fm_slant(fm_cur) != 0) {
+ sprintf(q, "-Slant_%i", (int)fm_slant(fm_cur));
+ q = strend(q);
+ }
+ if (fm_extend(fm_cur) != 0) {
+ sprintf(q, "-Extend_%i", (int)fm_extend(fm_cur));
+ }
+ strncpy(fontname_buf, t1_buf_array, FONTNAME_BUF_SIZE);
+ /* at this moment we cannot call make_subset_tag() yet, as the encoding
+ * is not read; thus we mark the offset of the subset tag and write it
+ * later */
+ if (is_included(fm_cur) && is_subsetted(fm_cur)) {
+ t1_fontname_offset = t1_offset() + (r - t1_line_array);
+ strcpy(t1_buf_array, p);
+ sprintf(r, "ABCDEF+%s%s", fontname_buf, t1_buf_array);
+ t1_line_ptr = eol(r);
+ }
+ return;
+ }
+ if ((k == STEMV_CODE || k == FONTBBOX1_CODE) &&
+ (*p == '[' || *p == '{'))
+ p++;
+ if (k == FONTBBOX1_CODE) {
+ for (i = 0; i < 4; i++) {
+ key[i].value = t1_scan_num(p, &r);
+ p = r;
+ }
+ return;
+ }
+ key->value = t1_scan_num(p, 0);
+}
+
+#endif /* pdfTeX */
+
+static void t1_scan_param(void)
+{
+ static const char *lenIV = "/lenIV";
+ if (!t1_scan || *t1_line_array != '/')
+ return;
+ if (t1_prefix(lenIV)) {
+ t1_lenIV = t1_scan_num(t1_line_array + strlen(lenIV), 0);
+ return;
+ }
+ t1_scan_keys();
+}
+
+static void copy_glyph_names(char **glyph_names, int a, int b)
+{
+ if (glyph_names[b] != notdef) {
+ free(glyph_names[b]);
+ glyph_names[b] = (char*) notdef;
+ }
+ if (glyph_names[a] != notdef) {
+ glyph_names[b] = xstrdup(glyph_names[a]);
+ }
+}
+
+static void t1_builtin_enc(void)
+{
+ int i, a, b, c, counter = 0;
+ char *r, *p;
+ /*
+ * At this moment "/Encoding" is the prefix of t1_line_array
+ */
+ if (t1_suffix("def")) { /* predefined encoding */
+ sscanf(t1_line_array + strlen("/Encoding"), "%256s", t1_buf_array);
+ if (strcmp(t1_buf_array, "StandardEncoding") == 0) {
+ for (i = 0; i <= MAX_CHAR_CODE; i++)
+ if (standard_glyph_names[i] == notdef)
+ t1_builtin_glyph_names[i] = (char*) notdef;
+ else
+ t1_builtin_glyph_names[i] = xstrdup(standard_glyph_names[i]);
+ t1_encoding = ENC_STANDARD;
+ }
+ else
+ pdftex_fail("cannot subset font (unknown predefined encoding `%s')",
+ t1_buf_array);
+ return;
+ } else
+ t1_encoding = ENC_BUILTIN;
+ /*
+ * At this moment "/Encoding" is the prefix of t1_line_array, and the encoding is
+ * not a predefined encoding
+ *
+ * We have two possible forms of Encoding vector. The first case is
+ *
+ * /Encoding [/a /b /c...] readonly def
+ *
+ * and the second case can look like
+ *
+ * /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for
+ * dup 0 /x put
+ * dup 1 /y put
+ * ...
+ * readonly def
+ */
+ for (i = 0; i <= MAX_CHAR_CODE; i++)
+ t1_builtin_glyph_names[i] = (char*) notdef;
+ if (t1_prefix("/Encoding [") || t1_prefix("/Encoding[")) { /* the first case */
+ r = strchr(t1_line_array, '[') + 1;
+ skip(r, ' ');
+ for(;;) {
+ while (*r == '/') {
+ for (p = t1_buf_array, r++;
+ *r != 32 && *r != 10 && *r != ']' && *r != '/';
+ *p++ = *r++);
+ *p = 0;
+ skip(r, ' ');
+ if (counter > MAX_CHAR_CODE)
+ pdftex_fail("encoding vector contains more than %i names",
+ (int)(MAX_CHAR_CODE + 1));
+ if (strcmp(t1_buf_array, notdef) != 0)
+ t1_builtin_glyph_names[counter] = xstrdup(t1_buf_array);
+ counter++;
+ }
+ if (*r != 10 && *r != '%') {
+ if (str_prefix(r, "] def") || str_prefix(r, "] readonly def"))
+ break;
+ else {
+ remove_eol(r, t1_line_array);
+ pdftex_fail("a name or `] def' or `] readonly def' expected: `%s'",
+ t1_line_array);
+ }
+ }
+ t1_getline();
+ r = t1_line_array;
+ }
+ }
+ else { /* the second case */
+ p = strchr(t1_line_array, 10);
+ for (;;) {
+ if (*p == 10) {
+ t1_getline();
+ p = t1_line_array;
+ }
+ /*
+ check for `dup <index> <glyph> put'
+ */
+ if (sscanf(p, "dup %i%256s put", &i, t1_buf_array) == 2 &&
+ *t1_buf_array == '/' && valid_code(i)) {
+ if (strcmp(t1_buf_array + 1, notdef) != 0)
+ t1_builtin_glyph_names[i] = xstrdup(t1_buf_array + 1);
+ p = strstr(p, " put") + strlen(" put");
+ skip(p, ' ');
+ }
+ /*
+ check for `dup dup <to> exch <from> get put'
+ */
+ else if (sscanf(p, "dup dup %i exch %i get put", &b, &a) == 2 &&
+ valid_code(a) && valid_code(b)) {
+ copy_glyph_names(t1_builtin_glyph_names, a, b);
+ p = strstr(p, " get put") + strlen(" get put");
+ skip(p, ' ');
+ }
+ /*
+ check for `dup dup <from> <size> getinterval <to> exch putinterval'
+ */
+ else if (sscanf(p, "dup dup %i %i getinterval %i exch putinterval",
+ &a, &c, &b) == 3 &&
+ valid_code(a) && valid_code(b) && valid_code(c)) {
+ for (i = 0; i < c; i++)
+ copy_glyph_names(t1_builtin_glyph_names, a + i, b + i);
+ p = strstr(p, " putinterval") + strlen(" putinterval");
+ skip(p, ' ');
+ }
+ /*
+ check for `def' or `readonly def'
+ */
+ else if ((p == t1_line_array || (p > t1_line_array && p[-1] == ' ')) &&
+ strcmp(p, "def\n") == 0)
+ return;
+ /*
+ skip an unrecognizable word
+ */
+ else {
+ while (*p != ' ' && *p != 10)
+ p++;
+ skip(p, ' ');
+ }
+ }
+ }
+}
+
+static void t1_check_end(void)
+{
+ if (t1_eof())
+ return;
+ t1_getline();
+ if (t1_prefix("{restore}"))
+ t1_putline();
+}
+
+#ifdef pdfTeX
+static boolean t1_open_fontfile(const char *open_name_prefix)
+{
+ char *ex_ffname = NULL;
+ ff_entry *ff;
+ ff = check_ff_exist(fm_cur);
+ if (ff->ff_path != NULL)
+ t1_file = xfopen(cur_file_name = ff->ff_path, FOPEN_RBIN_MODE);
+ else {
+ set_cur_file_name(fm_cur->ff_name);
+ pdftex_warn("cannot open Type 1 font file for reading");
+ return false;
+ }
+ t1_init_params(open_name_prefix);
+ fontfile_found = true;
+ return true;
+}
+
+static void t1_scan_only(void)
+{
+ do {
+ t1_getline();
+ t1_scan_param();
+ } while (t1_in_eexec == 0);
+ t1_start_eexec();
+ do {
+ t1_getline();
+ t1_scan_param();
+ } while (!(t1_charstrings() || t1_subrs()));
+}
+
+static void t1_include(void)
+{
+ do {
+ t1_getline();
+ t1_scan_param();
+ t1_putline();
+ } while (t1_in_eexec == 0);
+ t1_start_eexec();
+ do {
+ t1_getline();
+ t1_scan_param();
+ t1_putline();
+ } while (!(t1_charstrings() || t1_subrs()));
+ t1_cs = true;
+ do {
+ t1_getline();
+ t1_putline();
+ } while (!t1_end_eexec());
+ t1_stop_eexec();
+ do {
+ t1_getline();
+ t1_putline();
+ } while (!t1_cleartomark());
+ t1_check_end(); /* write "{restore}if" if found */
+ get_length3();
+}
+
+#else /* not pdfTeX */
+static boolean t1_open_fontfile(char *open_name_prefix)
+{
+ if (!t1_open()) {
+ (void)sprintf(errbuf, "! Couldn't find font file %s", cur_file_name);
+ error(errbuf);
+ }
+ t1_init_params(open_name_prefix);
+ return true;
+}
+#endif /* pdfTeX */
+
+#define check_subr(subr) \
+ if (subr >= subr_size || subr < 0) \
+ pdftex_fail("Subrs array: entry index out of range (%i)", subr);
+
+static const char **check_cs_token_pair()
+{
+ const char **p = (const char**) cs_token_pairs_list;
+ for (; p[0] != NULL; ++p)
+ if (t1_buf_prefix(p[0]) && t1_buf_suffix(p[1]))
+ return p;
+ return NULL;
+}
+
+static void cs_store(boolean is_subr)
+{
+ char *p;
+ cs_entry *ptr;
+ int subr;
+ for (p = t1_line_array, t1_buf_ptr = t1_buf_array; *p != ' '; *t1_buf_ptr++ = *p++);
+ *t1_buf_ptr = 0;
+ if (is_subr) {
+ subr = t1_scan_num(p + 1, 0);
+ check_subr(subr);
+ ptr = subr_tab + subr;
+ }
+ else {
+ ptr = cs_ptr++;
+ if (cs_ptr - cs_tab > cs_size)
+ pdftex_fail("CharStrings dict: more entries than dict size (%i)", cs_size);
+ if (strcmp(t1_buf_array + 1, notdef) == 0) /* skip the slash */
+ ptr->name = (char*) notdef;
+ else
+ ptr->name = xstrdup(t1_buf_array + 1);
+ }
+ /* copy " RD " + cs data to t1_buf_array */
+ memcpy(t1_buf_array, t1_line_array + cs_start - 4, (unsigned)(t1_cslen + 4));
+ /* copy the end of cs data to t1_buf_array */
+ for (p = t1_line_array + cs_start + t1_cslen, t1_buf_ptr = t1_buf_array + t1_cslen + 4;
+ *p != 10; *t1_buf_ptr++ = *p++);
+ *t1_buf_ptr++ = 10;
+ if (is_subr && cs_token_pair == NULL)
+ cs_token_pair = check_cs_token_pair();
+ ptr->len = t1_buf_ptr - t1_buf_array;
+ ptr->cslen = t1_cslen;
+ ptr->data = xtalloc(ptr->len, byte);
+ memcpy(ptr->data, t1_buf_array, ptr->len);
+ ptr->valid = true;
+}
+
+#define store_subr() cs_store(true)
+#define store_cs() cs_store(false)
+
+#define CC_STACK_SIZE 24
+
+static integer cc_stack[CC_STACK_SIZE], *stack_ptr = cc_stack;
+static cc_entry cc_tab[CS_MAX];
+static boolean is_cc_init = false;
+
+
+#define cc_pop(N) \
+ if (stack_ptr - cc_stack < (N)) \
+ stack_error(N); \
+ stack_ptr -= N
+
+#define stack_error(N) { \
+ pdftex_warn("CharString: invalid access (%i) to stack (%i entries)", \
+ N, stack_ptr - cc_stack); \
+ goto cs_error; \
+}
+
+/*
+static integer cc_get(integer index)
+{
+ if (index < 0) {
+ if (stack_ptr + index < cc_stack )
+ stack_error(stack_ptr - cc_stack + index);
+ return *(stack_ptr + index);
+ }
+ else {
+ if (cc_stack + index >= stack_ptr)
+ stack_error(index);
+ return cc_stack[index];
+ }
+}
+*/
+
+#define cc_get(N) ((N) < 0 ? *(stack_ptr + (N)) : *(cc_stack + (N)))
+
+#define cc_push(V) *stack_ptr++ = V
+#define cc_clear() stack_ptr = cc_stack
+
+#define set_cc(N, B, A, C) \
+ cc_tab[N].nargs = A; \
+ cc_tab[N].bottom = B; \
+ cc_tab[N].clear = C; \
+ cc_tab[N].valid = true
+
+static void cc_init(void)
+{
+ int i;
+ if (is_cc_init)
+ return;
+ for (i = 0; i < CS_MAX; i++)
+ cc_tab[i].valid = false;
+ set_cc(CS_HSTEM, true, 2, true);
+ set_cc(CS_VSTEM, true, 2, true);
+ set_cc(CS_VMOVETO, true, 1, true);
+ set_cc(CS_RLINETO, true, 2, true);
+ set_cc(CS_HLINETO, true, 1, true);
+ set_cc(CS_VLINETO, true, 1, true);
+ set_cc(CS_RRCURVETO, true, 6, true);
+ set_cc(CS_CLOSEPATH, false, 0, true);
+ set_cc(CS_CALLSUBR, false, 1, false);
+ set_cc(CS_RETURN, false, 0, false);
+ /*
+ set_cc(CS_ESCAPE, false, 0, false);
+ */
+ set_cc(CS_HSBW, true, 2, true);
+ set_cc(CS_ENDCHAR, false, 0, true);
+ set_cc(CS_RMOVETO, true, 2, true);
+ set_cc(CS_HMOVETO, true, 1, true);
+ set_cc(CS_VHCURVETO, true, 4, true);
+ set_cc(CS_HVCURVETO, true, 4, true);
+ set_cc(CS_DOTSECTION, false, 0, true);
+ set_cc(CS_VSTEM3, true, 6, true);
+ set_cc(CS_HSTEM3, true, 6, true);
+ set_cc(CS_SEAC, true, 5, true);
+ set_cc(CS_SBW, true, 4, true);
+ set_cc(CS_DIV, false, 2, false);
+ set_cc(CS_CALLOTHERSUBR, false, 0, false);
+ set_cc(CS_POP, false, 0, false);
+ set_cc(CS_SETCURRENTPOINT, true, 2, true);
+ is_cc_init = true;
+}
+
+#define cs_getchar() cdecrypt(*data++, &cr)
+
+#define mark_subr(n) cs_mark(0, n)
+#define mark_cs(s) cs_mark(s, 0)
+
+static void cs_warn(const char *cs_name, int subr, const char *fmt,...)
+{
+ char buf[SMALL_BUF_SIZE];
+ va_list args;
+ va_start(args, fmt);
+ vsprintf(buf, fmt, args);
+ va_end(args);
+ if (cs_name == NULL)
+ pdftex_warn("Subr (%i): %s", (int)subr, buf);
+ else
+ pdftex_warn("CharString (/%s): %s", cs_name, buf);
+}
+
+static void cs_mark(const char *cs_name, int subr)
+{
+ byte *data;
+ int i, b, cs_len;
+ integer a, a1, a2;
+ unsigned short cr;
+ static integer lastargOtherSubr3 = 3; /* the argument of last call to
+ OtherSubrs[3] */
+ cs_entry *ptr;
+ cc_entry *cc;
+ if (cs_name == NULL) {
+ check_subr(subr);
+ ptr = subr_tab + subr;
+ if (!ptr->valid)
+ return;
+ }
+ else {
+ if (cs_notdef != NULL &&
+ (cs_name == notdef || strcmp(cs_name, notdef) == 0))
+ ptr = cs_notdef;
+ else {
+ for (ptr = cs_tab; ptr < cs_ptr; ptr++)
+ if (strcmp(ptr->name, cs_name) == 0)
+ break;
+ if (ptr == cs_ptr) {
+ pdftex_warn("glyph `%s' undefined", cs_name);
+ return;
+ }
+ if (ptr->name == notdef)
+ cs_notdef = ptr;
+ }
+ }
+ /* only marked CharString entries and invalid entries can be skipped;
+ valid marked subrs must be parsed to keep the stack in sync */
+ if (!ptr->valid || (ptr->used && cs_name != NULL))
+ return;
+ ptr->used = true;
+ cr = 4330;
+ cs_len = ptr->cslen;
+ data = ptr->data + 4;
+ for (i = 0; i < t1_lenIV; i++, cs_len--)
+ cs_getchar();
+ while (cs_len > 0) {
+ --cs_len;
+ b = cs_getchar();
+ if (b >= 32) {
+ if (b <= 246)
+ a = b - 139;
+ else if (b <= 250) {
+ --cs_len;
+ a = ((b - 247) << 8) + 108 + cs_getchar();
+ }
+ else if (b <= 254) {
+ --cs_len;
+ a = -((b - 251) << 8) - 108 - cs_getchar();
+ }
+ else {
+ cs_len -= 4;
+ a = (cs_getchar() & 0xff) << 24;
+ a |= (cs_getchar() & 0xff) << 16;
+ a |= (cs_getchar() & 0xff) << 8;
+ a |= (cs_getchar() & 0xff) << 0;
+ if (sizeof(integer) > 4 && (a & 0x80000000))
+ a |= ~0x7FFFFFFF;
+ }
+ cc_push(a);
+ }
+ else {
+ if (b == CS_ESCAPE) {
+ b = cs_getchar() + CS_1BYTE_MAX;
+ cs_len--;
+ }
+ if (b >= CS_MAX) {
+ cs_warn(cs_name, subr, "command value out of range: %i", (int)b);
+ goto cs_error;
+ }
+ cc = cc_tab + b;
+ if (!cc->valid) {
+ cs_warn(cs_name, subr, "command not valid: %i", (int)b);
+ goto cs_error;
+ }
+ if (cc->bottom) {
+ if (stack_ptr - cc_stack < cc->nargs)
+ cs_warn(cs_name, subr,
+ "less arguments on stack (%i) than required (%i)",
+ (int)(stack_ptr - cc_stack), (int)cc->nargs);
+ else if (stack_ptr - cc_stack > cc->nargs)
+ cs_warn(cs_name, subr,
+ "more arguments on stack (%i) than required (%i)",
+ (int)(stack_ptr - cc_stack), (int)cc->nargs);
+ }
+ switch (cc - cc_tab) {
+ case CS_CALLSUBR:
+ a1 = cc_get(-1);
+ cc_pop(1);
+ mark_subr(a1);
+ if (!subr_tab[a1].valid) {
+ cs_warn(cs_name, subr,
+ "cannot call subr (%i)", (int)a1);
+ goto cs_error;
+ }
+ break;
+ case CS_DIV:
+ cc_pop(2);
+ cc_push(0);
+ break;
+ case CS_CALLOTHERSUBR:
+ if (cc_get(-1) == 3)
+ lastargOtherSubr3 = cc_get(-3);
+ a1 = cc_get(-2) + 2;
+ cc_pop(a1);
+ break;
+ case CS_POP:
+ cc_push(lastargOtherSubr3);
+ /* the only case when we care about the value being pushed onto
+ stack is when POP follows CALLOTHERSUBR (changing hints by
+ OtherSubrs[3])
+ */
+ break;
+ case CS_SEAC:
+ a1 = cc_get(3);
+ a2 = cc_get(4);
+ cc_clear();
+ mark_cs(standard_glyph_names[a1]);
+ mark_cs(standard_glyph_names[a2]);
+ break;
+ default:
+ if (cc->clear)
+ cc_clear();
+ }
+ }
+ }
+ return;
+cs_error: /* an error occured during parsing */
+ cc_clear();
+ ptr->valid = false;
+ ptr->used = false;
+}
+
+static void t1_subset_ascii_part(void)
+{
+ int i, j;
+ t1_getline();
+ while (!t1_prefix("/Encoding")) {
+ t1_scan_param();
+ t1_putline();
+ t1_getline();
+ }
+ t1_builtin_enc();
+ if (is_reencoded(fm_cur))
+ t1_glyph_names = external_enc();
+ else
+ t1_glyph_names = t1_builtin_glyph_names;
+ if (is_included(fm_cur) && is_subsetted(fm_cur)) {
+ make_subset_tag(fm_cur, t1_glyph_names);
+ update_subset_tag();
+ }
+ if (t1_encoding == ENC_STANDARD)
+ t1_puts("/Encoding StandardEncoding def\n");
+ else {
+ t1_puts("/Encoding 256 array\n0 1 255 {1 index exch /.notdef put} for\n");
+ for (i = 0, j = 0; i <= MAX_CHAR_CODE; i++) {
+ if (is_used_char(i) && t1_glyph_names[i] != notdef) {
+ j++;
+ t1_printf("dup %i /%s put\n", (int)t1_char(i), t1_glyph_names[i]);
+ }
+ }
+ /* We didn't mark anything for the Encoding array. */
+ /* We add "dup 0 /.notdef put" for compatibility */
+ /* with Acrobat 5.0. */
+ if (j == 0)
+ t1_puts("dup 0 /.notdef put\n");
+ t1_puts("readonly def\n");
+ }
+ do {
+ t1_getline();
+ t1_scan_param();
+ if (!t1_prefix("/UniqueID")) /* ignore UniqueID for subsetted fonts */
+ t1_putline();
+ } while (t1_in_eexec == 0);
+}
+
+#define t1_subr_flush() t1_flush_cs(true)
+#define t1_cs_flush() t1_flush_cs(false)
+
+static void t1_flush_cs(boolean);
+
+static void cs_init(void)
+{
+ cs_ptr = cs_tab = NULL;
+ cs_dict_start = cs_dict_end = NULL;
+ cs_count = cs_size = cs_size_pos = 0;
+ cs_token_pair = NULL;
+ subr_tab = NULL;
+ subr_array_start = subr_array_end = NULL;
+ subr_max = subr_size = subr_size_pos = 0;
+}
+
+static void init_cs_entry(cs_entry *cs)
+{
+ cs->data = NULL;
+ cs->name = NULL;
+ cs->len = 0;
+ cs->cslen = 0;
+ cs->used = false;
+ cs->valid = false;
+}
+
+static void t1_mark_glyphs(void);
+
+static void t1_read_subrs(void)
+{
+ int i, s;
+ cs_entry *ptr;
+ t1_getline();
+ while (!(t1_charstrings() || t1_subrs())) {
+ t1_scan_param();
+ t1_putline();
+ t1_getline();
+ }
+found:
+ t1_cs = true;
+ t1_scan = false;
+ if (!t1_subrs())
+ return;
+ subr_size_pos = strlen("/Subrs") + 1;
+ /* subr_size_pos points to the number indicating dict size after "/Subrs" */
+ subr_size = t1_scan_num(t1_line_array + subr_size_pos, 0);
+ if (subr_size == 0) {
+ while (!t1_charstrings())
+ t1_getline();
+ return;
+ }
+ subr_tab = xtalloc(subr_size, cs_entry);
+ for (ptr = subr_tab; ptr - subr_tab < subr_size; ptr++)
+ init_cs_entry(ptr);
+ subr_array_start = xstrdup(t1_line_array);
+ t1_getline();
+ while (t1_cslen) {
+ store_subr();
+ t1_getline();
+ }
+ /* mark the first four entries without parsing */
+ for (i = 0; i < subr_size && i < 4; i++)
+ subr_tab[i].used = true;
+ /* the end of the Subrs array might have more than one line so we need to
+ concatnate them to subr_array_end. Unfortunately some fonts don't have
+ the Subrs array followed by the CharStrings dict immediately (synthetic
+ fonts). If we cannot find CharStrings in next POST_SUBRS_SCAN lines then
+ we will treat the font as synthetic and ignore everything until next
+ Subrs is found
+ */
+#define POST_SUBRS_SCAN 5
+ s = 0;
+ *t1_buf_array = 0;
+ for (i = 0; i < POST_SUBRS_SCAN; i++) {
+ if (t1_charstrings())
+ break;
+ s += t1_line_ptr - t1_line_array;
+ alloc_array(t1_buf, s, T1_BUF_SIZE);
+ strcat(t1_buf_array, t1_line_array);
+ t1_getline();
+ }
+ subr_array_end = xstrdup(t1_buf_array);
+ if (i == POST_SUBRS_SCAN) { /* CharStrings not found;
+ suppose synthetic font */
+ for (ptr = subr_tab; ptr - subr_tab < subr_size; ptr++)
+ if (ptr->valid)
+ xfree(ptr->data);
+ xfree(subr_tab);
+ xfree(subr_array_start);
+ xfree(subr_array_end);
+ cs_init();
+ t1_cs = false;
+ t1_synthetic = true;
+ while (!(t1_charstrings() || t1_subrs()))
+ t1_getline();
+ goto found;
+ }
+}
+
+static void t1_flush_cs(boolean is_subr)
+{
+ char *p;
+ byte *r, *return_cs = NULL;
+ cs_entry *tab, *end_tab, *ptr;
+ char *start_line, *line_end;
+ int count, size_pos;
+ unsigned short cr, cs_len;
+ if (is_subr) {
+ start_line = subr_array_start;
+ line_end = subr_array_end;
+ size_pos = subr_size_pos;
+ tab = subr_tab;
+ count = subr_max + 1;
+ end_tab = subr_tab + count;
+ }
+ else {
+ start_line = cs_dict_start;
+ line_end = cs_dict_end;
+ size_pos = cs_size_pos;
+ tab = cs_tab;
+ end_tab = cs_ptr;
+ count = cs_count;
+ }
+ t1_line_ptr = t1_line_array;
+ for (p = start_line; p - start_line < size_pos;)
+ *t1_line_ptr++ = *p++;
+ while (isdigit(*p))
+ p++;
+ sprintf(t1_line_ptr, "%u", count);
+ strcat(t1_line_ptr, p);
+ t1_line_ptr = eol(t1_line_array);
+ t1_putline();
+
+ /* create return_cs to replace unsused subr's */
+ if (is_subr) {
+ cr = 4330;
+ cs_len = 0;
+ return_cs = xtalloc(t1_lenIV + 1, byte);
+ if (t1_lenIV > 0) {
+ for (cs_len = 0, r = return_cs; cs_len < t1_lenIV; cs_len++, r++)
+ *r = cencrypt(0x00, &cr);
+ *r = cencrypt(CS_RETURN, &cr);
+ }
+ else {
+ *return_cs = CS_RETURN;
+ }
+ cs_len++;
+ }
+
+ for (ptr = tab; ptr < end_tab; ptr++) {
+ if (ptr->used) {
+ if (is_subr)
+ sprintf(t1_line_array, "dup %u %u", ptr - tab, ptr->cslen);
+ else
+ sprintf(t1_line_array, "/%s %u", ptr->name, ptr->cslen);
+ p = strend(t1_line_array);
+ memcpy(p, ptr->data, ptr->len);
+ t1_line_ptr = p + ptr->len;
+ t1_putline();
+ }
+ else {
+ /* replace unsused subr's by return_cs */
+ if (is_subr) {
+ sprintf(t1_line_array, "dup %u %u%s ", ptr - tab, cs_len,
+ cs_token_pair[0]);
+ p = strend(t1_line_array);
+ memcpy(p, return_cs, cs_len);
+ t1_line_ptr = p + cs_len;
+ t1_putline();
+ sprintf(t1_line_array, " %s", cs_token_pair[1]);
+ t1_line_ptr = eol(t1_line_array);
+ t1_putline();
+ }
+ }
+ xfree(ptr->data);
+ if (ptr->name != notdef)
+ xfree(ptr->name);
+ }
+ sprintf(t1_line_array, "%s", line_end);
+ t1_line_ptr = eol(t1_line_array);
+ t1_putline();
+ if (is_subr)
+ xfree(return_cs);
+ xfree(tab);
+ xfree(start_line);
+ xfree(line_end);
+}
+
+static void t1_mark_glyphs(void)
+{
+ int i;
+ char *charset = extra_charset();
+ char *g, *s, *r;
+ cs_entry *ptr;
+ if (t1_synthetic || embed_all_glyphs(tex_font)) { /* mark everything */
+ if (cs_tab != NULL)
+ for (ptr = cs_tab; ptr < cs_ptr; ptr++)
+ if (ptr->valid)
+ ptr->used = true;
+ if (subr_tab != NULL) {
+ for (ptr = subr_tab; ptr - subr_tab < subr_size; ptr++)
+ if (ptr->valid)
+ ptr->used = true;
+ subr_max = subr_size - 1;
+ }
+ return;
+ }
+ mark_cs(notdef);
+ for (i = 0; i <= MAX_CHAR_CODE; i++)
+ if (is_used_char(i)) {
+ if (t1_glyph_names[i] == notdef)
+ pdftex_warn("character %i is mapped to %s", i, notdef);
+ else
+ mark_cs(t1_glyph_names[i]);
+ }
+ if (charset == NULL)
+ goto set_subr_max;
+ g = s = charset + 1; /* skip the first '/' */
+ r = strend(g);
+ while (g < r) {
+ while (*s != '/' && s < r)
+ s++;
+ *s = 0; /* terminate g by rewriting '/' to 0 */
+ mark_cs(g);
+ g = s + 1;
+ }
+set_subr_max:
+ if (subr_tab != NULL)
+ for (subr_max = -1, ptr = subr_tab; ptr - subr_tab < subr_size; ptr++)
+ if (ptr->used && ptr - subr_tab > subr_max)
+ subr_max = ptr - subr_tab;
+}
+
+static void t1_subset_charstrings(void)
+{
+ cs_entry *ptr;
+ cs_size_pos = strstr(t1_line_array, charstringname) + strlen(charstringname)
+ - t1_line_array + 1;
+ /* cs_size_pos points to the number indicating
+ dict size after "/CharStrings" */
+ cs_size = t1_scan_num(t1_line_array + cs_size_pos, 0);
+ cs_ptr = cs_tab = xtalloc(cs_size, cs_entry);
+ for (ptr = cs_tab; ptr - cs_tab < cs_size; ptr++)
+ init_cs_entry(ptr);
+ cs_notdef = NULL;
+ cs_dict_start = xstrdup(t1_line_array);
+ t1_getline();
+ while (t1_cslen) {
+ store_cs();
+ t1_getline();
+ }
+ cs_dict_end = xstrdup(t1_line_array);
+ t1_mark_glyphs();
+ if (subr_tab != NULL) {
+ if (cs_token_pair == NULL)
+ pdftex_fail("This Type 1 font uses mismatched subroutine begin/end token pairs.");
+ t1_subr_flush();
+ }
+ for (cs_count = 0, ptr = cs_tab; ptr < cs_ptr; ptr++)
+ if (ptr->used)
+ cs_count++;
+ t1_cs_flush();
+}
+
+static void t1_subset_end(void)
+{
+ if (t1_synthetic) { /* copy to "dup /FontName get exch definefont pop" */
+ while (!strstr(t1_line_array, "definefont")) {
+ t1_getline();
+ t1_putline();
+ }
+ while (!t1_end_eexec())
+ t1_getline(); /* ignore the rest */
+ t1_putline(); /* write "mark currentfile closefile" */
+ }
+ else while (!t1_end_eexec()) { /* copy to "mark currentfile closefile" */
+ t1_getline();
+ t1_putline();
+ }
+ t1_stop_eexec();
+ while (!t1_cleartomark()) {
+ t1_getline();
+ t1_putline();
+ }
+ if (!t1_synthetic) /* don't check "{restore}if" for synthetic fonts */
+ t1_check_end(); /* write "{restore}if" if found */
+ get_length3();
+}
+
+void writet1(void)
+{
+ read_encoding_only = false;
+#ifdef pdfTeX
+ t1_save_offset = 0;
+ if (strcasecmp(strend(fm_fontfile(fm_cur)) - 4, ".otf") == 0) {
+ if (!is_included(fm_cur) || is_subsetted(fm_cur))
+ pdftex_fail("OTF fonts must be included entirely");
+ writeotf();
+ is_otf_font = true;
+ return;
+ }
+#endif
+ if (!is_included(fm_cur)) { /* scan parameters from font file */
+ if (!t1_open_fontfile("{"))
+ return;
+ t1_scan_only();
+ t1_close_font_file("}");
+ return;
+ }
+ if (!is_subsetted(fm_cur)) { /* include entire font */
+ if (!t1_open_fontfile("<<"))
+ return;
+ t1_include();
+ t1_close_font_file(">>");
+ return;
+ }
+ /* partial downloading */
+ if (!t1_open_fontfile("<"))
+ return;
+ t1_subset_ascii_part();
+ t1_start_eexec();
+ cc_init();
+ cs_init();
+ t1_read_subrs();
+ t1_subset_charstrings();
+ t1_subset_end();
+ t1_close_font_file(">");
+}
+
+void t1_free()
+{
+ xfree(t1_line_array);
+ xfree(t1_buf_array);
+}
+
+#ifndef pdfTeX
+boolean t1_subset(char *fontfile, char *encfile, unsigned char *g)
+{
+ int i;
+ cur_enc_name = encfile;
+ for (i = 0; i <= MAX_CHAR_CODE; i++)
+ ext_glyph_names[i] = (char*) notdef;
+ if (cur_enc_name != NULL)
+ load_enc(cur_enc_name, ext_glyph_names);
+ grid = g;
+ cur_file_name = fontfile;
+ hexline_length = 0;
+ writet1();
+ for (i = 0; i <= MAX_CHAR_CODE; i++)
+ if (ext_glyph_names[i] != notdef)
+ free(ext_glyph_names[i]);
+ return 1 ; /* note: there *is* no unsuccessful return */
+}
+
+boolean t1_subset_2(char *fontfile, unsigned char *g, char *extraGlyphs)
+{
+ int i;
+ for (i = 0; i <= MAX_CHAR_CODE; i++)
+ ext_glyph_names[i] = (char*) notdef;
+ grid = g;
+ cur_file_name = fontfile;
+ hexline_length = 0;
+ dvips_extra_charset = extraGlyphs ;
+ writet1();
+ for (i = 0; i <= MAX_CHAR_CODE; i++)
+ if (ext_glyph_names[i] != notdef)
+ free(ext_glyph_names[i]);
+ return 1 ; /* note: there *is* no unsuccessful return */
+}
+#endif /* not pdfTeX */