home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 7 / FreshFishVol7.bin / bbs / text / dvips-5.58.lha / DviPS / dvips / dvips.c < prev    next >
C/C++ Source or Header  |  1994-09-27  |  37KB  |  1,153 lines

  1. /*
  2.  *   This is the main routine.
  3.  */
  4. #ifndef DEFRES
  5. #define DEFRES (300)
  6. #endif
  7.  
  8. #include "dvips.h" /* The copyright notice there is included too! */
  9. #ifdef AMIGA
  10. #include "amigapaths.h"
  11. #endif
  12. #ifndef SYSV
  13. extern char *strtok() ; /* some systems don't have this in strings.h */
  14. #endif
  15. #ifdef VMS
  16. #define GLOBAL globaldef
  17. #ifdef __GNUC__
  18. #include "climsgdef.h"    /* created by hand, extracted from STARLET.MLB */
  19.             /* and put in GNU_CC:[INCLUDE.LOCAL]           */
  20. #include "ctype.h"
  21. #include "descrip.h"
  22. #else
  23. #include climsgdef
  24. #include ctype
  25. #include descrip
  26. #endif
  27. #endif
  28. /*
  29.  *   First we define some globals.
  30.  */
  31. #ifdef VMS
  32.     static char ofnme[252],infnme[252],pap[40],thh[20];
  33. #endif
  34. fontdesctype *fonthead ;      /* list of all fonts mentioned so far */
  35. fontdesctype *curfnt ;        /* the currently selected font */
  36. sectiontype *sections ;       /* sections to process document in */
  37. Boolean manualfeed ;          /* manual feed? */
  38. Boolean compressed ;          /* compressed? */
  39. Boolean downloadpspk ;        /* use PK for downloaded PS fonts? */
  40. Boolean safetyenclose ;
  41.                           /* enclose in save/restore for stupid spoolers? */
  42. Boolean removecomments = 1 ;  /* remove comments from included PS? */
  43. Boolean nosmallchars ;        /* disable small char optimization for X4045? */
  44. Boolean cropmarks ;           /* add cropmarks? */
  45. Boolean abspage = 0 ;         /* are page numbers absolute? */
  46. Boolean tryepsf = 0 ;         /* should we try to make it espf? */
  47. Boolean secure = 0 ;          /* make safe for suid */
  48. int collatedcopies = 1 ;      /* how many collated copies? */
  49. int sectioncopies = 1 ;       /* how many times to repeat each section? */
  50. integer pagecopies = 1 ;          /* how many times to repeat each page? */
  51. shalfword linepos = 0 ;       /* where are we on the line being output? */
  52. integer maxpages ;            /* the maximum number of pages */
  53. Boolean notfirst, notlast ;   /* true if a first page was specified */
  54. Boolean evenpages, oddpages ; /* true if doing only even/only odd pages */
  55. Boolean pagelist ;            /* true if using page ranges */
  56. Boolean sendcontrolD ;        /* should we send a control D at end? */
  57. integer firstpage ;           /* the number of the first page if specified */
  58. integer lastpage ;
  59. integer firstseq ;
  60. integer lastseq ;
  61. integer hpapersize, vpapersize ; /* horizontal and vertical paper size */
  62. integer hoff, voff ;          /* horizontal and vertical offsets */
  63. integer maxsecsize ;          /* the maximum size of a section */
  64. integer firstboploc ;         /* where the first bop is */
  65. Boolean sepfiles ;            /* each section in its own file? */
  66. int numcopies ;               /* number of copies of each page to print */
  67. char *oname ;                 /* output file name */
  68. char *iname ;                 /* dvi file name */
  69. char *fulliname ;             /* same, with current working directory */
  70. char *strings ;               /* strings for program */
  71. char *nextstring, *maxstring ; /* string pointers */
  72. FILE *dvifile, *bitfile ;     /* dvi and output files */
  73. quarterword *curpos ;        /* current position in virtual character packet */
  74. quarterword *curlim ;         /* final byte in virtual character packet */
  75. fontmaptype *ffont ;          /* first font in current frame */
  76. real conv ;                   /* conversion ratio, pixels per DVI unit */
  77. real vconv ;                  /* conversion ratio, pixels per DVI unit */
  78. real alpha ;                  /* conversion ratio, DVI unit per TFM unit */
  79. #ifndef ATARIST
  80. integer
  81. #else
  82. long
  83. #endif
  84. mag ;                         /* the magnification of this document */
  85. integer num, den ;            /* the numerator and denominator */
  86. int overridemag ;             /* substitute for mag value in DVI file? */
  87. int actualdpi = DEFRES ;      /* the actual resolution of the printer */
  88. int vactualdpi = DEFRES ;     /* the actual resolution of the printer */
  89. int maxdrift ;                /* max pixels away from true rounded position */
  90. int vmaxdrift ;               /* max pixels away from true rounded position */
  91. char *paperfmt ;              /* command-line paper format */
  92. int landscape = 0 ;           /* landscape mode */
  93. integer fontmem ;             /* memory remaining in printer */
  94. integer pagecount ;           /* page counter for the sections */
  95. integer pagenum ;             /* the page number we currently look at */
  96. long bytesleft ;              /* number of bytes left in raster */
  97. quarterword *raster ;         /* area for raster manipulations */
  98. integer hh, vv ;              /* horizontal and vertical pixel positions */
  99.  
  100. /*-----------------------------------------------------------------------*
  101.  * The PATH definitions cannot be defined on the command line because so many
  102.  * DEFINE's overflow the DCL buffer when using the GNU CC compiler.
  103.  *-----------------------------------------------------------------------*/
  104. #if defined(VMS) && defined(__GNUC__)
  105. #include "vms_gcc_paths.h"
  106. #endif
  107.  
  108. #ifdef ATARIST
  109. #   define TFMPATH "."
  110. #   define PKPATH "."
  111. #   define VFPATH "."
  112. #   define FIGPATH "."
  113. #   define HEADERPATH "."
  114. #   define CONFIGPATH "."
  115. #endif
  116. char *tfmpath = TFMPATH ;     /* pointer to directories for tfm files */
  117. char *pkpath = PKPATH ;       /* pointer to directories for pk files */
  118. char *vfpath = VFPATH ;       /* pointer to directories for vf files */
  119. char *figpath = FIGPATH ;     /* pointer to directories for figure files */
  120. char *headerpath = HEADERPATH ; /* pointer to directories for header files */
  121. char *configpath = CONFIGPATH ; /* where to find config files */
  122. char *infont ;                /* is the file we are downloading a font? */
  123. #ifndef PICTPATH
  124. #ifndef __THINK__
  125. #define PICTPATH "."
  126. #else
  127. #define PICTPATH ":"
  128. #endif
  129. #endif
  130. char *pictpath = PICTPATH ;   /* where IFF/etc. pictures are found */
  131. #ifdef SEARCH_SUBDIRECTORIES
  132. char *fontsubdirpath = FONTSUBDIRPATH ;
  133. #endif
  134. #ifdef FONTLIB
  135. char *flipath = FLIPATH ;     /* pointer to directories for fli files */
  136. char *fliname = FLINAME ;     /* pointer to names of fli files */
  137. #endif
  138. integer swmem ;               /* font memory in the PostScript printer */
  139. int quiet ;                   /* should we only print errors to stderr? */
  140. int filter ;                  /* act as filter default output to stdout,
  141.                                                default input to stdin? */
  142. int prettycolumn ;            /* the column we are at when running pretty */
  143. int gargc ;                   /* global argument count */
  144. char **gargv ;                /* global argument vector */
  145. int totalpages = 0 ;          /* total number of pages */
  146. Boolean reverse ;             /* are we going reverse? */
  147. Boolean usesPSfonts ;         /* do we use local PostScript fonts? */
  148. Boolean usesspecial ;         /* do we use \special? */
  149. Boolean headers_off ;         /* do we send headers or not? */
  150. Boolean usescolor ;           /* IBM: color - do we use colors? */
  151. char *headerfile ;            /* default header file */
  152. char *warningmsg ;            /* a message to write, if set in config file */
  153. Boolean multiplesects ;       /* more than one section? */
  154. Boolean disablecomments ;     /* should we suppress any EPSF comments? */
  155. char *printer ;               /* what printer to send this to? */
  156. char *mfmode ;                /* default MF mode */
  157. frametype frames[MAXFRAME] ;  /* stack for virtual fonts */
  158. fontdesctype *baseFonts[256] ; /* base fonts for dvi file */
  159. integer pagecost;               /* memory used on the page being prescanned */
  160. int delchar;                    /* characters to delete from prescanned page */
  161. integer fsizetol;               /* max dvi units error for psfile font sizes */
  162. Boolean includesfonts;          /* are fonts used in included psfiles? */
  163. fontdesctype *fonthd[MAXFONTHD];/* list headers for included fonts of 1 name */
  164. int nextfonthd;                 /* next unused fonthd[] index */
  165. char xdig[256];                 /* table for reading hexadecimal digits */
  166. char banner[] = BANNER ;        /* our startup message */
  167. Boolean noenv = 0 ;             /* ignore PRINTER envir variable? */
  168. Boolean dopprescan = 0 ;        /* do we do a scan before the prescan? */
  169. integer lastheadermem ;         /* how much mem did th