summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipsk/dvips.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipsk/dvips.c')
-rw-r--r--Build/source/texk/dvipsk/dvips.c1552
1 files changed, 0 insertions, 1552 deletions
diff --git a/Build/source/texk/dvipsk/dvips.c b/Build/source/texk/dvipsk/dvips.c
deleted file mode 100644
index ab2411370fb..00000000000
--- a/Build/source/texk/dvipsk/dvips.c
+++ /dev/null
@@ -1,1552 +0,0 @@
-/*
- * This is the main routine.
- */
-#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/variable.h>
-#include <kpathsea/version.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
-#ifdef __APPLE__ /* for Mac OS X, T. Uchiyama */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-
-#if defined(WIN32) && defined(KPATHSEA)
-FILE *generic_fsyscp_fopen(const char *filename, const char *mode)
-{
- FILE *f;
-
- f = fsyscp_fopen (filename, mode);
-
- if (f == NULL && file_system_codepage != win32_codepage) {
- int tmpcp = file_system_codepage;
- file_system_codepage = win32_codepage;
- f = fsyscp_fopen (filename, mode);
- file_system_codepage = tmpcp;
- }
-
- return f;
-}
-#undef fopen
-#define fopen(file, fmode) generic_fsyscp_fopen(file, fmode)
-#endif
-
-#ifndef DEFRES
-#define DEFRES (600)
-#endif
-
-/*
- * The external declarations:
- */
-#include "protos.h"
-
-/*
- * First we define some globals.
- */
-#ifdef VMS
- static char ofnme[252],infnme[252],pap[40],thh[20];
-#endif
-
-/* PS fonts fully downloaded as headers */
-char *downloadedpsnames[DOWNLOADEDPSSIZE];
-
-int found_problems = 0; /* should we exit successfully? */
-int unused_top_of_psnames; /* unused top number of downloadedpsnames[#] */
-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? */
-int secure = 1; /* 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 *titlename=""; /* if given, used for %%Title */
-const 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 */
-Boolean noptex = 0; /* pTeX extensions are enabled */
-Boolean lastpsizwins = 1; /* if 1, last \special{papersize=w,h} wins */
-
-/*-----------------------------------------------------------------------*
- * 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
-
-const 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 dvips_debug_flag; /* output config and map files to stderr if 1 */
-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? */
-const 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? */
-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;
-#ifdef HPS
-Boolean HPS_FLAG = 0;
-#endif
-
-/* 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 const 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
-"Convert DVI input files to PostScript.",
-"See http://tug.org/dvips/ for the full manual and other information.",
-"",
-"Options:",
-"-a* Conserve memory, not time -A Print only odd (TeX) pages",
-"-b # Page copies, for posters e.g. -B Print only even (TeX) pages",
-"-bitmapfontenc [on,off,strict] control bitmap font encoding",
-"-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 -L* Last special papersize wins",
-"-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",
-"-noptex Disable pTeX 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",
-"-title s Title in comment",
-"-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(int status)
-{
- const char **p;
- FILE *f = status == 0 ? stdout : stderr;
- for (p=helparr; *p; p++)
- fprintf (f, "%s\n", *p);
-
- putc ('\n', f);
-#ifdef KPATHSEA
- fputs (kpse_bug_address, f);
-#endif
-}
-
-static void
-freememforpsnames(void)
-{
- int i;
-
- for (i = 0; i < unused_top_of_psnames && downloadedpsnames[i]; i++)
- free (downloadedpsnames[i]);
-}
-
-/*
- * This error routine prints an error message; if the first
- * character is !, it aborts the job.
- */
-
-static char *progname;
-
-void
-error_with_perror(const char *s, const char *fname)
-{
- if (prettycolumn > 0)
- fprintf(stderr,"\n");
- prettycolumn = 0;
- fprintf_str(stderr, "%s: %s", progname, s);
- if (fname) {
- putc (' ', stderr);
- perror (fname);
- } else {
- putc ('\n', stderr);
- }
-
- if (*s=='!') {
- freememforpsnames();
- 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(const char *s)
-{
- error_with_perror (s, NULL);
-}
-
-#ifndef KPATHSEA
-char *
-concat(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(unsigned c1, unsigned c2, const char *name)
-{
- if (c1 && c2 && c1 != c2
-#ifdef KPATHSEA
- && !kpse_tex_hush ("checksum")
-#endif
- ) {
- char *msg = concat ("Checksum mismatch in %s", name);
- error (msg);
- free (msg);
- }
-}
-
-/*
- * 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(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;
-}
-static void
-morestrings(void) {
- strings = mymalloc((integer)STRINGSIZE);
- nextstring = strings;
- maxstring = strings + STRINGSIZE - 200;
- *nextstring++ = 0;
-}
-void
-checkstrings(void) {
- if (nextstring - strings > STRINGSIZE / 2)
- morestrings();
-}
-/*
- * Initialize sets up all the globals and data structures.
- */
-static void
-initialize(void)
-{
- int i;
- const 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++;
- for(i=0; i < DOWNLOADEDPSSIZE; i++)
- downloadedpsnames[i] = NULL;
- unused_top_of_psnames = 0;
- 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(const char *s)
-{
- int l;
- char *q;
-
- if (s == NULL)
- return(NULL);
- l = strlen(s);
- if (nextstring + l >= maxstring)
- morestrings();
- if (nextstring + l >= maxstring)
- error("! out of string space");
- strcpy(nextstring, s);
- q = nextstring;
- nextstring += l + 1;
- return(q);
-}
-static void
-newoutname(void) {
- static int seq = 0;
- static char *seqptr = 0;
- char *p, *q;
-
- if (oname == 0 || *oname == 0)
- error("! need an output file name to specify separate files");
- if (*oname != '!' && *oname != '|') {
- if (seqptr == 0) {
- q = newstring(oname);
- for (p = q; *p; p++) /* find last dot after last slash */
- if (*p == '.')
- seqptr = p + 1;
- else if (IS_DIR_SEP (*p))
- seqptr = 0;
-#ifdef WIN32
- else if (IS_KANJI(p))
- p++;
-#endif
- if (seqptr == 0)
- seqptr = p;
- nextstring += 5; /* make room for the number, up to five digits */
- oname = q;
- }
- 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(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 */
-static void
-queryargs(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.
- */
-#ifdef VMS
-main(void)
-#else
-int
-main(int argc, char **argv)
-#endif
-{
- int i, lastext = -1;
-#ifdef MVSXA
- int firstext = -1;
-#endif
- sectiontype *sects;
-
-#ifdef WIN32
-#if defined(KPATHSEA)
- int ac;
- char **av, *enc;
-#endif
- SET_BINARY(fileno(stdin));
- SET_BINARY(fileno(stdout));
-#endif
-
-#ifdef __APPLE__ /* for Mac OS X, T. Uchiyama */
- struct rlimit rl;
- getrlimit(RLIMIT_STACK, &rl);
- rl.rlim_cur = 2048 * 1024;
- setrlimit(RLIMIT_STACK, &rl);
-#endif
-#ifdef KPATHSEA
- kpse_set_program_name (argv[0], "dvips");
- kpse_set_program_enabled (kpse_pk_format, MAKE_TEX_PK_BY_DEFAULT, kpse_src_compile);
-#ifdef WIN32
- enc = kpse_var_value("command_line_encoding");
- if (get_command_line_args_utf8(enc, &ac, &av)) {
- argc = ac;
- argv = av;
- }
-#endif
-#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;
- }
- }
-#if defined(KPATHSEA) && defined(KPSE_DEBUG)
- 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 && KPSE_DEBUG */
-#endif /* DEBUG */
-#ifdef KPATHSEA
- if (argc > 1) {
- 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 /* KPATHSEA */
-#endif /* VMS */
- dvips_debug_flag = 0;
- { /* for compilers incompatible with c99 */
- char *s = getenv ("DVIPSDEBUG");
- if (s) {
- dvips_debug_flag = 1;
- } else {
- s = getenv ("KPATHSEA_DEBUG");
- if (s) {
- dvips_debug_flag = 1;
- }
- }
- }
- 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(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];
-#ifdef KPATHSEA
- /* print information and exit if dvips finds options
- --help or --version */
- if (strlen (argv[i] + 1) == 5 && strcmp (argv[i] + 1, "-help") == 0) {
- help (0);
- exit (0);
- }
- if (strlen (argv[i] + 1) == 8 &&
- strcmp (argv[i] + 1, "-version") == 0) {
- puts (BANNER);
- puts (kpathsea_version_string);
- puts ("Copyright 2021 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.");
- exit (0);
- }
-#endif /* KPATHSEA */
- switch (c) {
-case '-':
- queryoptions = 1;
- break;
-case 'a':
- dopprescan = (*p != '0');
- break;
-case 'b':
- if (strcmp(p, "itmapfontenc") == 0) {
- p = argv[++i] ;
- if (strcmp(p, "off") == 0) {
- bitmapencopt(0) ; // disable bitmap font enc feature
- } else if (strcmp(p, "on") == 0) {
- bitmapencopt(1) ; // try to include bitmap font encs
- } else if (strcmp(p, "strict") == 0) {
- bitmapencopt(2) ; // issue warnings for missing encs
- } else {
- error(
- "! -bitmapfontenc option only supports off, on, and strict") ;
- }
- break ;
- }
- 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' :
- {
- 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
- 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':
- if (*p == '0') {
- secure = 0;
- } else if (*p == '2') {
- secure = 2;
- } else {
- secure = 1;
- }
- if (secure)
- secure_option = 1; /* Never used */
- 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 (STREQ (p, "optex")) {
- noptex = 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;
- }
- lastpsizwins = 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 (STREQ (p, "itle") && argv[i+1]) {
- titlename = argv[++i];
- } else {
- 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 'L' :
- lastpsizwins = (*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;
-#ifdef WIN32
- else if (IS_KANJI(p-1)) {
- nextstring++;
- *nextstring = *p++;
- }
-#endif
- 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 */
- 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(KPSE_DEBUG) && 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 /* KPATHSEA && KPSE_DEBUG && 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 (dvips_debug_flag) {
- if (!quiet)
- fprintf(stderr, "\n%s %s\n", banner, banner2);
- prettycolumn = 0;
- } else {
- if (!quiet)
- 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 = "";
- else if (*oname == 0 && ! filter && *iname) {
- /* determine output name from input name */
- 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.
- */
- {
- const 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 WIN32
- else if (IS_KANJI(p))
- p++;
-#endif
- }
- }
-#ifdef DEBUG
- if (dd(D_PATHS)) {
-#ifdef SHORTINT
- fprintf_str(stderr,"input file %s output file %s swmem %ld\n",
-#else /* ~SHORTINT */
- fprintf_str(stderr,"input file %s output file %s swmem %d\n",
-#endif /* ~SHORTINT */
- iname, oname, swmem);
-#ifndef KPATHSEA
- fprintf_str(stderr,"tfm path %s\npk path %s\n", tfmpath, pkpath);
- fprintf_str(stderr,"fig path %s\nvf path %s\n", figpath, vfpath);
- fprintf_str(stderr,"config path %s\nheader path %s\n",
- configpath, headerpath);
-#endif
-#ifdef FONTLIB
- fprintf_str(stderr,"fli path %s\nfli names %s\n", flipath, fliname);
-#endif
- } /* dd(D_PATHS) */
-#endif /* DEBUG */
-
-/*
- * Check if oname != iname
- */
- if (iname && *iname && oname && *oname) {
-#ifdef DOSISH
- if (strcasecmp (iname, oname) == 0) {
-#else
- if (strcmp (iname, oname) == 0) {
-#endif
- fprintf (stderr, "! Output name should be different from input name.\n");
- exit (20);
- }
- }
-/*
- * Now we try to open the dvi file.
- */
- if (!quiet && warningmsg)
- error(warningmsg);
- headersready = 1;
- headerfile = (compressed? CHEADERFILE : HEADERFILE);
- 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, "dvips: Missing DVI file argument (or -f).\n");
- fprintf (stderr, "dvips: Try --help for more information.\n");
-#else
- help(1);
-#endif
- exit(1);
- }
- if (dvifile==NULL) {
- error_with_perror("DVI file can't be opened:", iname);
- exit(1);
- }
- if (fseek(dvifile, 0L, 0) < 0)
- error("! DVI file must not be a pipe.");
-
- initcolor();
-#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)
- add_header(IFONTHEADER);
- if (usesPSfonts)
- add_header(PSFONTHEADER);
- if (usesspecial)
- add_header(SPECIALHEADER);
- if (usescolor) /* IBM: color */
- add_header(COLORHEADER);
-#ifdef HPS
- if (HPS_FLAG)
- 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;
- }
- fprintf_str(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;
- }
- fprintf(stderr, ". ");
- prettycolumn += 2;
- }
- fflush(stderr);
- dosection(sects, sectioncopies);
- sects = sects->next;
- if (sepfiles) {
-#ifdef HPS
- if (HPS_FLAG)
- finish_hps();
-#endif
- cleanprinter();
- }
- }
- }
- freememforpsnames();
- if (! sepfiles) {
-#ifdef HPS
- if (HPS_FLAG)
- finish_hps();
-#endif
- cleanprinter();
- }
- if (! quiet)
- 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 found_problems ? EXIT_FAILURE : EXIT_SUCCESS;
- /*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