summaryrefslogtreecommitdiff
path: root/dviware/beebe/src/option.h
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/beebe/src/option.h
Initial commit
Diffstat (limited to 'dviware/beebe/src/option.h')
-rw-r--r--dviware/beebe/src/option.h337
1 files changed, 337 insertions, 0 deletions
diff --git a/dviware/beebe/src/option.h b/dviware/beebe/src/option.h
new file mode 100644
index 0000000000..ae5c160b4b
--- /dev/null
+++ b/dviware/beebe/src/option.h
@@ -0,0 +1,337 @@
+/* -*-C-*- option.h */
+/*-->option*/
+/**********************************************************************/
+/******************************* option *******************************/
+/**********************************************************************/
+
+void
+option(optstr) /* process command-line option */
+char *optstr; /* option string (e.g. "-m1500") */
+{
+ register UNSIGN32 k; /* magnification */
+ register int value; /* converted digit string value */
+ register int m; /* loop index */
+ char *p; /* pointer into optstr */
+ int p1,p2,p3; /* temp values for sscanf() */
+ double fltmag; /* floating-point mag value */
+
+ typedef struct
+ {
+ char* envname;
+ char* envvar;
+ } envstruct;
+
+ static envstruct envlist[] =
+ { /* names and addresses of environment vars (alphabetical order) */
+ "DVIHELP", helpcmd,
+ "FONTLIST", fontlist,
+ "TEXFONTS", fontpath,
+ "TEXINPUTS", subpath,
+ };
+
+ if (*optstr != '-')
+ return; /* return if this is not an option */
+
+ switch (*(optstr+1))
+ {
+
+ case 'a': /* A selects virtual font caching */
+ case 'A':
+
+#if VIRTUAL_FONTS
+ virt_font = TRUE;
+#endif
+ break;
+
+ case 'b': /* b selects backwards printing order */
+ case 'B':
+ backwards = TRUE;
+ break;
+
+
+ case 'c': /* c selects number of copies */
+ case 'C':
+ copies = (UNSIGN16) atoi(optstr+2);
+ copies = MAX(1,MIN(copies,256)); /* enforce reasonable limits */
+ break;
+
+
+ case 'd': /* d selects debug output */
+ case 'D':
+ debug_code |= (BYTE)atoi(optstr+2);
+ break;
+
+
+ case 'e': /* e specifies ``environment'' variable definition */
+ case 'E': /* We ignore letter case since these come from */
+ /* the command line */
+ if (!(p = strrchr(optstr,'=')))
+ {
+ (void)usage(stderr);
+ (void)sprintf(message,
+ "option(): Bad switch [%s]--expected -eENVNAME=value",
+ optstr);
+ (void)fatal(message);
+ }
+ *p = '\0'; /* clobber "=" by string terminator */
+ for (m = 0; m < sizeof(envlist)/sizeof(envlist[0]); ++m)
+ {
+ if (strcm2(optstr+2,envlist[m].envname) == 0)
+ {
+ (void)strcpy(envlist[m].envvar,p+1);
+ return;
+ }
+ }
+ (void)usage(stderr);
+
+ (void)sprintf(message,"option(): Bad switch [%s]--expected one of:",
+ optstr);
+ for (m = 0; m < sizeof(envlist)/sizeof(envlist[0]); ++m)
+ {
+ (void)strcat(message," ");
+ (void)strcat(message,envlist[m].envname);
+ }
+ (void)fatal(message);
+ break;
+
+
+ case 'f': /* f specifies font substitution file */
+ case 'F':
+ (void)strcpy(subfile,optstr+2);
+ break;
+
+
+#if CANON_A2
+
+#ifdef CANON_TEST
+ case 'g':
+ case 'G':
+ stor_fonts = (UNSIGN32)atoi(optstr + 2 );
+ break;
+#endif /* CANON_TEST */
+
+#endif
+
+ case 'l': /* l prohibits logging of errors */
+ case 'L':
+ g_dolog = FALSE;
+ break;
+
+
+ case 'm': /* m selects alternate magnification */
+ case 'M':
+ /* Collect 2*value initially. Then if value is small, assume
+ user specified magstep value; magstep k means 1.2**k, where k
+ is integral, or half-integral. Otherwise, assume user has
+ specified pxl file magnification (1000 == 200dpi, 1500 ==
+ 300dpi, etc.). */
+
+
+ if (strchr(optstr+2,'.') != (char *)NULL)
+ fltmag = (double)(2.0 * atof(optstr+2));
+ else
+ fltmag = (double)(2 * atoi(optstr+2));
+ if ((0.0 != fltmag) &&
+ (-30.0 <= fltmag) && (fltmag <= 30.0)) /* magstep 15 is limit */
+ {
+ if (fltmag < 0.0)
+ runmag = (UNSIGN32)(0.5 +
+ (1.0/pow((double)sqrt(1.2),-fltmag))*(double)STDMAG);
+ else
+ runmag = (UNSIGN32)(0.5 + pow((double)sqrt(1.2),fltmag)*
+ (double)STDMAG);
+ }
+ else
+ runmag = (UNSIGN32)(0.5 + fltmag/2.0);
+
+ k = MAGSIZE(actfact(runmag)); /* rounded magnification */
+ if (k != runmag)
+ {
+ (void)sprintf(message,
+ "option(): Requested magnification %d not available.",
+ (int)runmag);
+ (void)warning(message);
+ runmag = k;
+ k = (UNSIGN32) MAX(1,MIN(mag_index,(MAGTABSIZE-1)));
+ (void)sprintf(message,
+ " Magnification reset to nearest legal value %d in \
+family ..%d..%d..%d..",
+ (int)runmag,(int)MAGSIZE(mag_table[k-1]),
+ (int)MAGSIZE(mag_table[k]),
+ (int)MAGSIZE(mag_table[k+1]));
+ (void)warning(message);
+ }
+ break;
+
+
+ case 'o':
+ case 'O': /* o selects output page range (-o# or -o#:# or -o#:#:#) */
+ p1 = p2 = p3 = 0;
+ value = (int)sscanf(optstr+2,"%d:%d:%d",&p1,&p2,&p3);
+ page_begin[npage] = p1;
+ page_end[npage] = p2;
+ page_step[npage] = p3;
+ switch (value)
+ {
+ case 1:
+ optstr++; /* point past "-" */
+
+ do /* skip over digit string */
+ {
+ optstr++;
+ }
+ while (isdigit(*optstr) || (*optstr == '-') || (*optstr == '+'));
+
+ if (*optstr) /* trash follows number */
+ {
+ (void)usage(stderr);
+ (void)sprintf(message,
+ "option(): %s is not a legal page number switch",optstr);
+ (void)fatal(message);
+ }
+ else /* had expected end-of-string */
+ page_end[npage] = (INT16)page_begin[npage];
+ page_step[npage] = 1;
+ break;
+
+ case 2: /* supply default step */
+ page_step[npage] = 1;
+ /* FALL THROUGH to case 3 for order check */
+
+ case 3: /* check for positive step */
+ page_step[npage] = ABS(page_step[npage]);
+ if (page_step[npage] == 0)
+ page_step[npage] = 1;
+ break;
+
+ default: /* illegal value */
+ (void)usage(stderr);
+ (void)sprintf(message,
+ "option(): %s is not a legal page number switch",optstr);
+ (void)fatal(message);
+ }
+ npage++;
+ break;
+
+
+ case 'p': /* p prohibits pre-font loading */
+ case 'P':
+#if (HPLASERJET|HPJETPLUS|GOLDENDAWNGL100|POSTSCRIPT|IMPRESS|CANON_A2)
+ preload = TRUE; /* preloading required for Canon engines */
+ /* because of reverse printing order */
+#else
+ preload = FALSE;
+#endif /*NOT(HPLASERJET|HPJETPLUS|GOLDENDAWNGL100|POSTSCRIPT|IMPRESS|CANON_A2)*/
+ break;
+
+
+ case 'q': /* q inhibits status display */
+ case 'Q':
+ quiet = TRUE;
+ break;
+
+
+#if HPLASERJET
+ case 'r': /* r selects output resolution */
+ case 'R':
+ hpres = (INT16)atoi(optstr+2);
+ if ((hpres != 75) && (hpres != 100) && (hpres != 150) &&
+ (hpres != 300))
+ {
+ (void)sprintf(message,
+ "option(): Output resolution not in [75,100,150,300] dpi; \
+reset to %d",
+ DEFAULT_RESOLUTION);
+ (void)warning(message);
+ hpres = DEFAULT_RESOLUTION;
+ }
+ break;
+#endif /* HPLASERJET */
+
+
+#if (APPLEIMAGEWRITER | EPSON | GOLDENDAWNGL100 | TOSHIBAP1351)
+ case 'r': /* r selects run-length coding of output */
+ case 'R':
+ runlengthcode = TRUE;
+ break;
+#endif /* (APPLEIMAGEWRITER | EPSON | GOLDENDAWNGL100 | TOSHIBAP1351) */
+
+
+#if CANON_A2
+
+#ifdef CANON_TEST
+ case 's': /* pixel size limit to force character reloading */
+ case 'S':
+ size_limit = (UNSIGN16)atoi(optstr+2);
+ break;
+#endif /* CANON_TEST */
+
+#endif /* CANON_A2 */
+
+#if POSTSCRIPT
+ case 's': /* pixel size limit to force character reloading */
+ case 'S':
+ size_limit = (UNSIGN16)atoi(optstr+2);
+ break;
+#endif
+
+#if EPSON
+ case 't':
+ case 'T':
+
+#if HIRES
+ twice_a_line = TRUE;
+#endif /* HIRES */
+
+ break;
+#endif /* EPSON */
+
+
+#if CANON_A2
+
+#ifdef CANON_TEST
+ case 'u':
+ case 'U':
+ merit_fact = (UNSIGN16)atoi(optstr+2);
+ break;
+
+ case 'v':
+ case 'V':
+ stor_limit = (UNSIGN32)atoi(optstr+2);
+ break;
+#endif /* CANON_TEST */
+
+#endif /* CANON_A2 */
+
+#if POSTSCRIPT
+ case 'v': /* vmbug -- reload fonts on each page */
+ case 'V':
+ ps_vmbug = TRUE;
+ break;
+#endif /* POSTSCRIPT */
+
+
+ case 'x':
+ case 'X':
+ leftmargin = inch(optstr+2);
+ break;
+
+
+ case 'y':
+ case 'Y':
+ topmargin = inch(optstr+2);
+ break;
+
+#if (OS_TOPS20 | BSD42)
+ case 'z':
+ case 'Z':
+ spool_output = TRUE; /* offer to send output to spooler */
+ break;
+#endif /* (OS_TOPS20 | BSD42) */
+
+ default:
+ (void)usage(stderr);
+ (void)sprintf(message,"option(): %s is not a legal switch", optstr);
+ (void)fatal(message);
+ }
+}