home *** CD-ROM | disk | FTP | other *** search
- /* -*-C-*- dvihead.h */
- /*-->dvihead*/
- /**********************************************************************/
- /****************************** dvihead *******************************/
- /**********************************************************************/
-
- /**********************************************************************/
- /************************* Revision History *************************/
- /**********************************************************************/
-
- /***********************************************************************
- [Begin Revision History]
-
- <BEEBE.TEX.DVI.NEW>DVIHEAD.H.2, 24-Jun-86 18:11:55, Edit by BEEBE
- Added saving of all ten TeX page counters in prtpage() in global array
- tex_counter[], and function tctos() to convert them to a string for
- printing. All warning and error messages are now accompanied by a list
- of the non-zero page counters to help relate errors to output document
- pages.
-
- <BEEBE.TEX.DVI>DVIHEADER.H.21, 13-Mar-86 10:43:33, Edit by BEEBE
- Added use of getenv() for Unix and PC-DOS to pick up definitions of
- texinputs and texfonts at runtime; if these are available, they override
- built-in choices. This makes it possible to move compiled code to
- similar machines with different directory structures without having to
- recompile. For TOPS-20, this is unnecessary, since the defaults already
- point to these, and a name of the form /texinputs/foo.bar is translated
- by PCC-20 to texinputs:foo.bar, from which the current definition of the
- logical name "texinputs:" is used to find the desired directory. It can
- even be a chain of directories; in Unix and PC-DOS, we will need to
- introduce a special version of fopen() to handle filenames with
- environment variable prefixes which might represent directory chains.
-
- Removed variable-length argument lists to fatal() and warning() for
- portability. Changed all preprocessor #ifdef's and #ifndef's to #if's
- for portability; all symbols for devices, operating systems, and
- implementations are now explicitly defined to be 0 or 1. IBM PC Lattice
- C will not accept the operators "!", "||", or "&&" in #if expressions,
- although they should be perfectly legal; rearranged several expressions
- to avoid these (introduce #else, use "|" and "&").
-
- Added procedures fontfile() and fontsub() to encapsulate construction of
- system-dependent font file names and provide for user-specifiable font
- substitutions for unavailable font files (new runtime option
- -ffontfile).
-
- Removed old #ifdef FOOBAR ... #endif code sections in several procedures
- which were completely obsolete. Added header comment line to every
- file; it contains the EMACS "-*-C-*-" mode string and the exact
- (case-sensive) filename, since many functions have been defined with
- names in mixed case for readability (probably should have used
- underscore instead, but none do), and on Unix, the letter case matters.
-
- Replaced index() and rindex(), which have different definitions in
- different C implementations, by 4.2BSD (and coming ANSI C standard)
- functions strchr() and strrchr(), for which .h files are provided.
-
-
- <BEEBE.TEX.DVI>DVIHEADER.H.11, 8-Jan-86 16:55:59, Edit by BEEBE
- Added DVITYPE Version 2.6 MAXDRIFT correction to pixel coordinates.
- This adds function fixpos() called from movedown(), moveover(),
- setchar(), and setrule(), and #include'd in DVI*.c with definitions in
- gblprocs.h and machdefs.h. Revision level incremented by 0.01 (most are
- now at 2.01)
-
-
- <BEEBE.TEX.DVI>DVIHEADER.H.7, 22-Jul-85 12:51:02, Edit by BEEBE
- Added PostScript driver for Apple LaserWriter.
-
- Added support for multiple input DVI files to each of which all switch
- options apply.
-
-
- <BEEBE.TEX>DVIJET.C.70, 30-May-85 00:33:51, Edit by BEEBE
- Revised "int" type declarations to signed types (INT8, INT16, INT32),
- unsigned types (BYTE, UNSIGN16, UNSIGN32), and coordinate type
- (COORDINATE) as a prelude to moving to microprocessors where long
- integers impose a serious runtime penalty.
-
- Type casts added to many assignments and arguments.
-
- "double" changed to "float".
-
- Added a few more "register" declarations and deleted unused variables.
-
- Device-dependent code sections identified as prelude to code sharing
- between device drivers via "#include" statements for each shareable
- procedure.
-
- Added -c, -o, -r, -x, -y options and inch() procedure.
-
- Several passes with "lint" under VAX Unix to detect further problems
-
-
- <BEEBE.TEX>DVIJET.C.18, 27-May-85 23:44:34, Edit by BEEBE
- Revise copy of Printronix driver for output on Hewlett-Packard Laser Jet
-
-
- <BEEBE.TEX>DVIPRX.C.125, 20-Oct-84 14:02:27, Edit by BEEBE
- Add mag_table[] and rewrite actfact() to use it. Add code to readfont()
- and openfont() to choose nearest available font magnification when
- required one is unavailable. Enable USEGLOBALMAG since code now can
- handle it properly. Allow upper-case option letters as equivalents of
- lower-case ones -- non-Unix folks abhor such distinctions.
-
-
- <BEEBE.TEX>DVIPRX.C.118, 30-Sep-84 14:42:10, Edit by BEEBE
- Change = to == in "if (...)" in procedure warning, change g_dolog to
- BOOLEAN.
-
-
- [End Revision History]
- ***********************************************************************/
-
- /**********************************************************************/
- /************************ Development History ***********************/
- /**********************************************************************/
-
- /***********************************************************************
- **
- ** The code is arranged to allow easy modification of the output for
- ** display on other dot matrix printers, and for porting to a new host
- ** computing environment. The sections labelled "Device Definitions"
- ** and "Global Definitions" below definitely need to be modified in
- ** such a case. A couple of the 40 or so procedures in the '#include
- ** "xxx.h"' section may need to be adjusted as well, but almost all the
- ** rest should be both host- and output-device-independent.
- **
- ** The runtime switches will be similar for most devices, but some will
- ** require additional ones. Device-name conditionals should be used to
- ** bracket these, so that code can be lifted without modification for
- ** use in a new dvi driver.
- **
- ** Instead of building up a bit map corresponding to the final printer
- ** file, we keep a large array which has a one-to-one correspondence
- ** with the printed page; dots in a horizontal raster on the page are
- ** consecutive in memory. This allows us to OR in character raster
- ** patterns without having to unpack every single bit. At end-of-page
- ** time, each raster row is trimmed of trailing white space and
- ** formatted into a line of data to be sent to the printer file. For
- ** those devices which pack dots for 6, 7, or 8 rows into a single
- ** character, some merging of raster lines will be necessary.
- **
- ** To use the program, type:
- **
- ** dvixxx {-b} {-c#} {-d#} {-ffontsubfile} {-l} {-m#} {-o#:#} {-o#} {-p}
- ** {-r#} {-v} {-x#units} {-y#units} dvifile(s)
- **
- ** The order of command options and DVI file names is not significant;
- ** all switch values apply to all DVI files. DVI files are processed
- ** in order from left to right. The command options are (letter case
- ** is IGNORED):
- **
- ** b Backwards order printing from the default. For example,
- ** laser printers using the Canon engine print normally
- ** receive pages in reverse order because they stack printed
- ** side up. Some have page handling mechanisms that stack
- ** them face down, and in such a case -b will ensure that
- ** they come out in order 1,2,... instead of n,n-1,n-2,...
- **
- ** c# Print # copies of each output page.
- **
- ** d# Debug output to stderr if non-zero value given.
- **
- ** ffontsubfile Define an alternate font substitution file which
- ** is to be used instead of the default ones (see below).
- **
- ** l Inhibit logging.
- **
- ** m# Reset magnification to #. The default is "-m603",
- ** corresponding to (1/1.2**5) magnification of 300dpi
- ** fonts. Legal values are int(1000*(1.2)**(k/2)) (k =
- ** -16,16); other values will be set to the nearest in this
- ** family. Not all fonts will be available in this wide
- ** range, and most installations will probably have only a
- ** half dozen or so magnifications.
- **
- ** o# and
- ** o#:# Specify a page number, or range of page numbers, to be
- ** selected for output. This option may be specified any
- ** number of times. If it is not specified, then all pages
- ** will be printed. Pages are numbered in order 1,2,3,...
- ** in the file, but any page number recorded by TeX on the
- ** printed page will in general be different. As pages are
- ** selected for printing, "[#{#}" will be printed on
- ** stderr, where the first is the page number in the file,
- ** and the second is the value of the TeX counter, \count0,
- ** which usually records the printed page number. When the
- ** page is completely output, a closing "]" will be printed
- ** on stderr. Any error messages from processing of that
- ** page will therefore occur between the square brackets.
- ** For example, "-o1:3 -o12 -o17:23" would select pages 1,
- ** 2, 3, 12, 17, 18, 19, 20, 21, 22, and 23 for printing.
- ** Pages will always be printed in an order appropriate for
- ** the device so that the first document page occurs first
- ** face up in the document stack.
- **
- ** p Inhibit font preloading. This may produce output a few
- ** seconds earlier when all pages are output, but should
- ** have negligible effect on the execution time, and
- ** consequently, should normally not be specified. When
- ** individual pages are being printed with the -o# option,
- ** preloading is necessary (and will be forced) to ensure
- ** that all fonts are defined before they are referenced.
- **
- ** q Quiet mode. Status displays to stderr are suppressed,
- ** unless warning or error messages are issued.
- **
- ** r# (Device = HP Laser Jet only). Specify the Laser Jet
- ** output resolution in dots per inch. "#" must be one of
- ** 75, 100, 150, or 300. The actual plot file is identical
- ** in each case; only the size on the output page is
- ** changed, because the resolution change is effected by
- ** printing 1 x 1, 2 x 2, 3 x 3, or 4 x 4 pixel blocks.
- **
- ** r (Device = Golden Laser 100 only). Select run-length
- ** encoding of the output file. This reduces disk space
- ** typically by 10% to 40%, but increases host CPU time for
- ** the preparation of the output file.
- **
- ** r (Device = Apple ImageWriter only). Select run-length
- ** encoding of the output file.
- **
- ** r (Device = Toshiba P-1351 only). Select run-length
- ** encoding of the output file. This reduces disk space
- ** typically by 10% to 40%, but increases host CPU time for
- ** the preparation of the output file, and because of poor
- ** logic in the printer, may double the print time! The
- ** print quality is also substantially worse, so this
- ** option is generally NOT recommended.
- **
- ** s# (Device = Apple LaserWriter only). Force characters
- ** larger than # pixels wide or high to be reloaded each
- ** time they are required. The Version 23.0 PostScript
- ** interpreter has a bug which manifests itself in fatal
- ** 'VM error' messages when large characters are sent. A
- ** reasonable default value has been set for this which
- ** should normally avoid the problem. Specifying -s0 will
- ** cause reloading of every character each time it is used.
- **
- ** v (Device = Apple LaserWriter only). Force reloading of
- ** all required fonts at start of each page.
- **
- ** x#bp big point (1in = 72bp)
- ** x#cc cicero (1cc = 12dd)
- ** x#cm centimeter
- ** x#dd didot point (1157dd = 1238pt)
- ** x#in inch
- ** x#mm millimeter (10mm = 1cm)
- ** x#pc pica (1pc = 12pt)
- ** x#pt point (72.27pt = 1in)
- ** x#sp scaled point (65536sp = 1pt)
- ** Specify the left margin of the TeX page on the output
- ** page in any of the indicated units. Letter case is not
- ** significant in the unit field, which must not be
- ** separated from the number by any space. # may be
- ** fractional. For example, "-x1.0in", "-x2.54cm",
- ** "-x72.27pt", and "-x6.0225pc" all specify a one inch
- ** left margin. Negative values are permissible, and may
- ** be used to shift the output page left (possibly
- ** truncating it on the left) in order to display a wide
- ** TeX page.
- **
- ** y# inch
- ** y#bp big point (1in = 72bp)
- ** y#cc cicero (1cc = 12dd)
- ** y#cm centimeter
- ** y#dd didot point (1157dd = 1238pt)
- ** y#in inch
- ** y#mm millimeter (10mm = 1cm)
- ** y#pc pica (1pc = 12pt)
- ** y#pt point (72.27pt = 1in)
- ** y#sp scaled point (65536sp = 1pt)
- ** Specify the top margin of the TeX page on the output
- ** page in any of the indicated units. Letter case is not
- ** significant in the unit field, which must not be
- ** separated from the number by any space. # may be
- ** fractional. For example, "-y1.0in", "-y2.54cm",
- ** "-y72.27pt", and "-y6.0225pc" all specify a one inch top
- ** margin. Negative values are permissible, and may be
- ** used to shift the output page up (possibly truncating it
- ** on the top) in order to display a long TeX page.
- **
- **
- ** If no -ffontsubfile option is given, and font substitution is
- ** required, the files "dvifile.sub" (minus any extension),
- ** "texfonts.sub", and "texinputs:texfonts.sub" will be tried in order.
- ** The first two will be found on the current directory, and the last
- ** is the system default. This gives the option of document-specific,
- ** user-specific, and system-specific substitutions, and the -f option
- ** allows all of these to be overridden.
- **
- ** This program can only process DVI format 2 files.
- **
- ** Mark Senn at Purdue University wrote the first BitGraph driver,
- ** dvibit. This was further worked on at the University of Washington
- ** by Stephen Bechtolsheim, Bob Brown, Richard Furuta, and Robert
- ** Wells. The transformation to about ten other device drivers, plus
- ** the massive code rearrangement for many new features as well as easy
- ** identification of host- and device-dependent sections, was carried
- ** out at the University of Utah by Nelson H.F. Beebe.
- **
- ** Support for pixel file caching and character raster caching was
- ** added by NHFB; this should give a decided performance improvement
- ** provided the cache sizes, MAXCACHE and MAXOPEN, defined below are
- ** sufficiently large.
- **
- ** MAXOPEN can be set as low as 1, but should ideally be about 15,
- ** since this may be more typical of the number of different font files
- ** required in mathematical manuscripts.
- **
- ** In the current version, MAXCACHE is not actually used, because it
- ** appears sufficient raster storage will always be available even for
- ** relatively complex manuscripts. However, a record is kept which
- ** will permit dynamic freeing and reallocation of raster storage; see
- ** procedure loadchar for details.
- **
- ***********************************************************************/
-
-
- /**********************************************************************/
- /************************ Global Definitions ************************/
- /**********************************************************************/
-
- /* All host-specific material resides in machdefs.h and typedefs.h;
- they must be revised when this dvi driver is rehosted to a new machine */
-
- #define DEBUG 1 /* for optional massive trace printing */
- #undef DEBUG /* do not want this now */
-
- #include "machdefs.h" /* all host-specific defines */
-
- #include "typedefs.h" /* typedefs (also host-specific) */
-
- #include <stdio.h> /* must come after the others to */
- /* enable type checking */
- #include <errno.h> /* needed only for DISKFULL() definition */
- #if (BSD41 | BSD42)
- extern int errno; /* not in all errno.h files, sigh... */
- #endif
-
- #if IBM_PC_MICROSOFT
- #include <io.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #endif
-
- /* types.h and stat.h are needed for fstat(), which is used by special()
- and the virtual font mechanism in openfont.h to get the input file size. */
-
- #if (OS_ATARI | OS_VAXVMS | KCC_20)
- #include <types.h>
- #include <stat.h>
- #else /* NOT (OS_ATARI | OS_VAXVMS | KCC_20) */
- #include <sys/types.h>
- #include <sys/stat.h>
- #endif /* (OS_ATARI | OS_VAXVMS | KCC_20) */
-
-