diff options
Diffstat (limited to 'Build/source/texk/dvipsk')
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 Binary files differnew file mode 100644 index 00000000000..db477fa43ba --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/cmex10.pfb diff --git a/Build/source/texk/dvipsk/testdata/cmmi10.pfb b/Build/source/texk/dvipsk/testdata/cmmi10.pfb Binary files differnew file mode 100644 index 00000000000..b53fe888065 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/cmmi10.pfb diff --git a/Build/source/texk/dvipsk/testdata/cmr10.pfb b/Build/source/texk/dvipsk/testdata/cmr10.pfb Binary files differnew file mode 100644 index 00000000000..337b4b58c45 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/cmr10.pfb diff --git a/Build/source/texk/dvipsk/testdata/cmsy10.pfb b/Build/source/texk/dvipsk/testdata/cmsy10.pfb Binary files differnew file mode 100644 index 00000000000..e2dbb2233e7 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/cmsy10.pfb diff --git a/Build/source/texk/dvipsk/testdata/cmtt10.pfb b/Build/source/texk/dvipsk/testdata/cmtt10.pfb Binary files differnew file mode 100644 index 00000000000..839931ab256 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/cmtt10.pfb 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 Binary files differnew file mode 100644 index 00000000000..368192baa14 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/dvipstst.xdv 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 Binary files differnew file mode 100644 index 00000000000..cf5bde827d7 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/ptmbi.vf diff --git a/Build/source/texk/dvipsk/testdata/ptmbi8r.tfm b/Build/source/texk/dvipsk/testdata/ptmbi8r.tfm Binary files differnew file mode 100644 index 00000000000..8c9a366fb31 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/ptmbi8r.tfm diff --git a/Build/source/texk/dvipsk/testdata/ptmr.vf b/Build/source/texk/dvipsk/testdata/ptmr.vf Binary files differnew file mode 100644 index 00000000000..58c76028edb --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/ptmr.vf diff --git a/Build/source/texk/dvipsk/testdata/ptmr8r.tfm b/Build/source/texk/dvipsk/testdata/ptmr8r.tfm Binary files differnew file mode 100644 index 00000000000..3fa1c10a4c3 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/ptmr8r.tfm diff --git a/Build/source/texk/dvipsk/testdata/ptmri.vf b/Build/source/texk/dvipsk/testdata/ptmri.vf Binary files differnew file mode 100644 index 00000000000..1bfdd4a0de2 --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/ptmri.vf diff --git a/Build/source/texk/dvipsk/testdata/ptmri8r.tfm b/Build/source/texk/dvipsk/testdata/ptmri8r.tfm Binary files differnew file mode 100644 index 00000000000..b4fc44501cb --- /dev/null +++ b/Build/source/texk/dvipsk/testdata/ptmri8r.tfm 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 */ |