init.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:18k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* $Header: /usr/src/mash/repository/vint/xgraph/init.c,v 1.2 1999/12/19 00:52:06 heideman Exp $ */
  2. /*
  3.  * init.c: xgraph initialization code
  4.  *
  5.  * Routines:
  6.  * InitSets();
  7.  * ParseArgs();
  8.  * ReadDefaults();
  9.  *
  10.  * $Log: init.c,v $
  11.  * Revision 1.2  1999/12/19 00:52:06  heideman
  12.  * warning suppresion, slightly different flot ahndling
  13.  *
  14.  * Revision 1.1.1.1  1999/12/03 23:15:53  heideman
  15.  * xgraph-12.0
  16.  *
  17.  */
  18. #ifndef lint
  19. static char rcsid[] = "$Id: init.c,v 1.2 1999/12/19 00:52:06 heideman Exp $";
  20. #endif
  21. #include "copyright.h"
  22. #include <stdio.h>
  23. #include <math.h>
  24. #include <pwd.h>
  25. #include <ctype.h>
  26. #include "xgraph.h"
  27. #include "xtb.h"
  28. #include "hard_devices.h"
  29. #include "params.h"
  30. /*
  31.  * Default settings for xgraph parameters
  32.  */
  33. /* PW */
  34. #define DEF_ANIMATE             "off"
  35. #define DEF_DELAY_VALUE         "2"
  36. #define DEF_BORDER_WIDTH "2"
  37. #define DEF_BORDER_COLOR "Black"
  38. #define DEF_TITLE_TEXT "X Graph"
  39. #define DEF_XUNIT_TEXT "X"
  40. #define DEF_YUNIT_TEXT "Y"
  41. #define DEF_TICK_FLAG "off"
  42. #define DEF_TICKAXIS_FLAG "off"
  43. #define DEF_MARK_FLAG "off"
  44. #define DEF_PIXMARK_FLAG "off"
  45. #define DEF_LARGEPIX_FLAG "off"
  46. #define DEF_DIFFMARK_FLAG "off"
  47. #define DEF_BB_FLAG "off"
  48. #define DEF_NOLINE_FLAG "off"
  49. #define DEF_NOLEGEND_FLAG "off"
  50. #define DEF_NOBUTTON_FLAG "off"
  51. #define DEF_LOGX_FLAG "off"
  52. #define DEF_LOGY_FLAG "off"
  53. #define DEF_BAR_FLAG "off"
  54. #define DEF_STK_FLAG "off"
  55. #define DEF_FITX_FLAG "off"
  56. #define DEF_FITY_FLAG "off"
  57. #define DEF_BAR_BASE "0.0"
  58. #define DEF_BAR_OFFS "0.0"
  59. #define DEF_BAR_WIDTH "-1.0"
  60. #define DEF_LINE_WIDTH "0"
  61. #define DEF_GRID_SIZE "0"
  62. #define DEF_GRID_STYLE "10"
  63. #define DEF_LABEL_FONT "helvetica-10"
  64. #define DEF_TITLE_FONT "helvetica-18"
  65. #define DEF_GEOMETRY ""
  66. #define DEF_REVERSE "off"
  67. /* PW Changes these to please JM */
  68. #define DEF_FMT_X "%.4f"
  69. #define DEF_FMT_Y "%.4f"
  70. #define DEF_DEVICE ""
  71. #define DEF_OUTPUT_DEVICE D_XWINDOWS
  72. #define DEF_DISPOSITION "To Device"
  73. #define DEF_FILEORDEV ""
  74. #define DEF_DOCUMENT "off"
  75. #define DEF_SCALE "1.0"
  76. #define DEF_MARKER_FLAG "off"
  77. #define DEF_DIFFMARK_FLAG "off"
  78. #define DEF_PIXMARK_FLAG "off"
  79. #define DEF_LARGEPIX_FLAG "off"
  80. /* Low > High means set it based on the data */
  81. #define DEF_LOW_LIMIT "1.0"
  82. #define DEF_HIGH_LIMIT "0.0"
  83. /* Black and white defaults */
  84. #define DEF_BW_BACKGROUND "white"
  85. #define DEF_BW_BORDER "black"
  86. #define DEF_BW_ZEROCOLOR "black"
  87. #define DEF_BW_ZEROWIDTH "3"
  88. #define DEF_BW_ZEROSTYLE "1"
  89. #define DEF_BW_FOREGROUND "black"
  90. /* Color defaults */
  91. #define DEF_COL_BACKGROUND "#ccc"
  92. #define DEF_COL_BORDER "black"
  93. #define DEF_COL_ZEROCOLOR "white"
  94. #define DEF_COL_ZEROWIDTH "0"
  95. #define DEF_COL_ZEROSTYLE "1"
  96. #define DEF_COL_FOREGROUND "black"
  97. #define DEF_COL_FIRSTSTYLE "1"
  98. /* Default line styles */
  99. static char *defStyle[MAXATTR] =
  100. {
  101.     "1", "10", "11110000", "010111", "1110",
  102.     "1111111100000000", "11001111", "0011000111"
  103. };
  104. /* Default color names */
  105. /*static char *defColors[MAXATTR] =
  106. {
  107.     "red", "SpringGreen", "blue", "yellow",
  108.     "cyan", "sienna", "orange", "coral"
  109. };*/
  110. static char *defColors[MAXATTR] =
  111. {
  112.     "red", "SpringGreen", "blue", "yellow",
  113.     "purple", "orange", "hotpink", "cyan"
  114. };
  115. void
  116. InitSets(o)
  117. int     o;
  118. /*
  119.  * Initializes the data sets with default information.  Sets up
  120.  * original values for parameters in parameters package.
  121.  */
  122. {
  123.     int     idx;
  124.     char    buf[1024];
  125.     if (o == D_XWINDOWS) {
  126. /*
  127.  * Used to do all kinds of searching through visuals, etc. Got
  128.  * complaints -- so back to the simple version.
  129.  */
  130. vis = DefaultVisual(disp, DefaultScreen(disp));
  131. cmap = DefaultColormap(disp, DefaultScreen(disp));
  132. screen = DefaultScreen(disp);
  133. depth = DefaultDepth(disp, DefaultScreen(disp));
  134. param_init(disp, cmap);
  135.     }
  136.     else
  137. param_init(NULL, 0);
  138.     param_set("Debug", BOOL, "false");
  139.     param_set("Geometry", STR, DEF_GEOMETRY);
  140.     param_set("ReverseVideo", BOOL, DEF_REVERSE);
  141.     param_set("BorderSize", INT, DEF_BORDER_WIDTH);
  142.     param_set("TitleText", STR, DEF_TITLE_TEXT);
  143.     param_set("XUnitText", STR, DEF_XUNIT_TEXT);
  144.     param_set("YUnitText", STR, DEF_YUNIT_TEXT); /* YUnits */
  145.     param_set("Ticks", BOOL, DEF_TICK_FLAG);
  146.     param_set("TickAxis", BOOL, DEF_TICKAXIS_FLAG);
  147.     param_set("Markers", BOOL, DEF_MARKER_FLAG); /* markFlag (-m) */
  148.     param_set("StyleMarkers", BOOL, DEF_DIFFMARK_FLAG); /* colorMark (-M) */
  149.     param_set("PixelMarkers", BOOL, DEF_PIXMARK_FLAG); /* pixelMarks  (-p) */
  150.     param_set("LargePixels", BOOL, DEF_LARGEPIX_FLAG); /* bigPixel (-P) */
  151.     param_set("BoundBox", BOOL, DEF_BB_FLAG);
  152.     param_set("NoLines", BOOL, DEF_NOLINE_FLAG);
  153.     param_set("NoLegend", BOOL, DEF_NOLEGEND_FLAG);
  154.     param_set("NoButton", BOOL, DEF_NOBUTTON_FLAG);
  155.     param_set("LogX", BOOL, DEF_LOGX_FLAG);
  156.     param_set("LogY", BOOL, DEF_LOGY_FLAG); /* logYFlag */
  157.     param_set("BarGraph", BOOL, DEF_BAR_FLAG);
  158.     param_set("StackGraph", BOOL, DEF_STK_FLAG);
  159.     param_set("FitX", BOOL, DEF_FITX_FLAG);
  160.     param_set("FitY", BOOL, DEF_FITY_FLAG);
  161.     param_set("BarBase", DBL, DEF_BAR_BASE);
  162.     param_set("BarWidth", DBL, DEF_BAR_WIDTH);
  163.     param_set("BarOffset", DBL, DEF_BAR_OFFS);
  164.     param_set("LineWidth", INT, DEF_LINE_WIDTH);
  165.     param_set("GridSize", INT, DEF_GRID_SIZE);
  166.     param_set("GridStyle", STYLE, DEF_GRID_STYLE);
  167.     param_set("Format X", STR, DEF_FMT_X);
  168.     param_set("Format Y", STR, DEF_FMT_Y);
  169.     param_set("Device", STR, DEF_DEVICE);
  170.     param_set("Disposition", STR, DEF_DISPOSITION);
  171.     param_set("FileOrDev", STR, DEF_FILEORDEV);
  172.     sprintf(buf, "%d", o);
  173.     param_set("Output Device", INT, buf);
  174.     param_set("Document", BOOL, DEF_DOCUMENT);
  175.     param_set("Scale", DBL, DEF_SCALE);
  176.     /* Set the user bounding box */
  177.     param_set("XLowLimit", DBL, DEF_LOW_LIMIT);
  178.     param_set("YLowLimit", DBL, DEF_LOW_LIMIT);
  179.     param_set("XHighLimit", DBL, DEF_HIGH_LIMIT);
  180.     param_set("YHighLimit", DBL, DEF_HIGH_LIMIT);
  181.     /* Depends critically on whether the display has color */
  182.     if (depth < 4) {
  183. /* Its black and white */
  184. param_set("Background", PIXEL, DEF_BW_BACKGROUND);
  185. param_set("Border", PIXEL, DEF_BW_BORDER);
  186. param_set("ZeroColor", PIXEL, DEF_BW_ZEROCOLOR);
  187. param_set("ZeroWidth", INT, DEF_BW_ZEROWIDTH);
  188. param_set("ZeroStyle", STYLE, DEF_BW_ZEROSTYLE);
  189. param_set("Foreground", PIXEL, DEF_BW_FOREGROUND);
  190. /* Initialize set defaults */
  191. for (idx = 0; idx < MAXATTR; idx++) {
  192.     (void) sprintf(buf, "%d.Style", idx);
  193.     param_set(buf, STYLE, defStyle[idx]);
  194.     (void) sprintf(buf, "%d.Color", idx);
  195.     param_set(buf, PIXEL, DEF_BW_FOREGROUND);
  196. }
  197.     }
  198.     else {
  199. /* Its color */
  200. param_set("Background", PIXEL, DEF_COL_BACKGROUND);
  201. param_set("Border", PIXEL, DEF_COL_BORDER);
  202. param_set("ZeroColor", PIXEL, DEF_COL_ZEROCOLOR);
  203. param_set("ZeroWidth", INT, DEF_COL_ZEROWIDTH);
  204. param_set("ZeroStyle", STYLE, DEF_COL_ZEROSTYLE);
  205. param_set("Foreground", PIXEL, DEF_COL_FOREGROUND);
  206. /* Initalize attribute colors defaults */
  207. for (idx = 0; idx < MAXATTR; idx++) {
  208.     (void) sprintf(buf, "%d.Style", idx);
  209.     param_set(buf, STYLE, defStyle[idx]);
  210.     (void) sprintf(buf, "%d.Color", idx);
  211.     param_set(buf, PIXEL, defColors[idx]);
  212. }
  213.     }
  214.     param_set("LabelFont", FONT, DEF_LABEL_FONT);
  215.     param_set("TitleFont", FONT, DEF_TITLE_FONT);
  216.     /* PW */
  217.     param_set("Animate", BOOL, DEF_ANIMATE);
  218.     param_set("DelayValue", INT, DEF_DELAY_VALUE);
  219.     /* Initialize the data sets */
  220.     for (idx = 0; idx < MAXSETS; idx++) {
  221. (void) sprintf(buf, "Set %d", idx);
  222. PlotData[idx].setName = STRDUP(buf);
  223. PlotData[idx].list = (PointList *) 0;
  224.     }
  225. }
  226. static char *def_str;
  227. #define DEF(name, type) 
  228. if (def_str = XGetDefault(disp, Prog_Name, name)) { 
  229.     param_set(name, type, def_str); 
  230. }
  231. void
  232. ReadDefaults()
  233. /*
  234.  * Reads X default values which override the hard-coded defaults
  235.  * set up by InitSets.
  236.  */
  237. {
  238.     char    newname[100];
  239.     int     idx;
  240.     DEF("Debug", BOOL);
  241.     DEF("Geometry", STR);
  242.     DEF("Background", PIXEL);
  243.     DEF("BorderSize", INT);
  244.     DEF("Border", PIXEL);
  245.     DEF("GridSize", INT);
  246.     DEF("GridStyle", STYLE);
  247.     DEF("Foreground", PIXEL);
  248.     DEF("ZeroColor", PIXEL);
  249.     DEF("ZeroStyle", STYLE);
  250.     DEF("ZeroWidth", INT);
  251.     DEF("LabelFont", FONT);
  252.     DEF("TitleFont", FONT);
  253.     DEF("Ticks", BOOL);
  254.     DEF("TickAxis", BOOL);
  255.     DEF("Device", STR);
  256.     DEF("Disposition", STR);
  257.     DEF("FileOrDev", STR);
  258.     DEF("PixelMarkers", BOOL);
  259.     DEF("LargePixels", BOOL);
  260.     DEF("Markers", BOOL);
  261.     DEF("StyleMarkers", BOOL);
  262.     DEF("BoundBox", BOOL);
  263.     DEF("NoLines", BOOL);
  264.     DEF("LineWidth", INT);
  265.     /* PW */
  266.     DEF("Animate",BOOL);
  267.     DEF("DelayValue",INT);
  268.     /* End PW */
  269.     /* Read device specific parameters */
  270.     for (idx = 0; idx < hard_count; idx++) {
  271. sprintf(newname, "%s.Dimension", hard_devices[idx].dev_name);
  272. DEF(newname, DBL); /* hard_devices[idx].dev_max_dim */
  273. sprintf(newname, "%s.OutputTitleFont", hard_devices[idx].dev_name);
  274. DEF(newname, STR); /* hard_devices[idx].dev_title_font */
  275. sprintf(newname, "%s.OutputTitleSize", hard_devices[idx].dev_name);
  276. DEF(newname, DBL); /* hard_devices[idx].dev_title_size */
  277. sprintf(newname, "%s.OutputAxisFont", hard_devices[idx].dev_name);
  278. DEF(newname, STR); /* hard_devices[idx].dev_axis_font */
  279. sprintf(newname, "%s.OutputAxisSize", hard_devices[idx].dev_name);
  280. DEF(newname, DBL); /* hard_devices[idx].dev_axis_size */
  281.     }
  282.     /* Read the default line and color attributes */
  283.     for (idx = 0; idx < MAXATTR; idx++) {
  284. (void) sprintf(newname, "%d.Style", idx);
  285. DEF(newname, STYLE); /* AllAttrs[idx].lineStyleLen */
  286. (void) sprintf(newname, "%d.Color", idx);
  287. DEF(newname, PIXEL); /* AllAttrs[idx].pixelValue */
  288.     }
  289.     DEF("ReverseVideo", BOOL);
  290. }
  291. #define FS(str) (void) fprintf(stderr, str)
  292. static void
  293. argerror(err, val)
  294. char   *err,
  295.        *val;
  296. {
  297.     (void) fprintf(stderr, "Error: %s: %snn", val, err);
  298.     FS("Usage: xgraph [-device <ps|X|hpgl|idraw|tgif>]n");
  299.     FS("t[-bd border_color] [-bg background_color] [-fg foreground_color]n");
  300.     FS("t[-bar] [-brb bar_base] [-brw bar_width] [-bof bar_offset] [-stk]n");
  301.     FS("t[-bw bdr_width] [-db]  [-gw grid_size] [-fitx] [-fity]n");
  302.     FS("t[-gs grid_style] [-lf label_font] [-lnx] [-lny] [-lw line_width]n");
  303.     FS("t[-lx x1,x2] [-ly y1,y2] [-m] [-M] [-nl] [-ng] [-nb] [-p] [-P]n");
  304.     FS("t[-rv] [-t title] [-tf title_font] [-tk] [-scale factor]n");
  305.     FS("t[-x x_unit_name] [-y y_unit_name] [-fmtx format] [-fmty format]n");
  306.     FS("t[[-geometry |=]W=H+X+Y] [[-display] <host>:<disp>.<screen>]n");
  307.     FS("t[-Pprinter|-o output_file|-O output_file] [[-<digit> set_name]n");
  308.     FS("t[-zg zero_color] [-zw zero_size] [-a] [-dl <delay>] input_files...nn");
  309.     FS("-bar   Draw bar graph with base -brb, width -brw, and offset -bofn");
  310.     FS("-stk   Draw bar graph stacking data sets.n");
  311.     FS("-fitx  Scale all sets to fit the x-axis [0,1].n");
  312.     FS("-fity  Scale all sets to fit the y-axis [0,1].n");
  313.     FS("-fmtx  Printf format for the x-axisn");
  314.     FS("-fmty  Printf format for the y-axisn");
  315.     FS("-scale Scale the output file with factorn");
  316.     FS("-O fn  Printer ready output filen");
  317.     FS("-o fn  Encapsulated (document) output filen");
  318.     FS("-bb    Draw bounding box around datan");
  319.     FS("-db    Turn on debuggingn");
  320.     FS("-lnx   Logarithmic scale for X axisn");
  321.     FS("-lny   Logarithmic scale for Y axisn");
  322.     FS("-m -M  Mark points distinctively (M varies with color)n");
  323.     FS("-nl    Don't draw lines (scatter plot)n");
  324.     FS("-ng    Don't draw legendn");
  325.     FS("-nb    Don't draw buttonsn");
  326.     FS("-p -P  Mark points with dot (P means big dot)n");
  327.     FS("-rv    Reverse video on black and white displaysn");
  328.     FS("-tk    Draw tick marks instead of full gridn");
  329.     FS("-a     Start in animation moden");
  330.     FS("-dl    Animation delay.  Default is 2n");
  331.     exit(1);
  332. }
  333. #define ARG(opt, name) 
  334. if (strcmp(argv[idx], opt) == 0) { 
  335.     if (do_it) param_set(name, BOOL, "on"); 
  336.     idx++; continue; 
  337. }
  338. #define ARG2(opt, name, type, missing) 
  339. if (strcmp(argv[idx], opt) == 0) { 
  340.    if (idx+1 >= argc) argerror(missing, argv[idx]); 
  341.    if (do_it) param_set(name, type, argv[idx+1]); 
  342.    idx += 2; continue;
  343. }
  344. #define MAXLO 30
  345. int
  346. ParseArgs(argc, argv, do_it)
  347. int     argc;
  348. char   *argv[];
  349. int     do_it;
  350. /*
  351.  * This routine parses the argument list for xgraph.  There are too
  352.  * many to mention here so I won't.  If `do_it' is non-zero, options
  353.  * are actually changed.  If `do_it' is zero, the argument list
  354.  * is parsed but the options aren't set.  The routine is called
  355.  * once to obtain the input files then again after the data is
  356.  * read to set the options.
  357.  */
  358. {
  359.     int     idx,
  360.             set,
  361.             dflag;
  362.     char   *hi;
  363.     dflag = DEF_OUTPUT_DEVICE;
  364.     idx = 1;
  365.     while (idx < argc) {
  366. if (argv[idx][0] == '-') {
  367.     /* Check to see if its a data set name */
  368.     if (sscanf(argv[idx], "-%d", &set) == 1) {
  369. /* The next string is a set name */
  370. if (idx + 1 >= argc)
  371.     argerror("missing set name", argv[idx]);
  372. if (do_it) {
  373.     PlotData[set].setName = argv[idx + 1];
  374. }
  375. idx += 2;
  376.     }
  377.     else {
  378. /* Some non-dataset option */
  379. ARG2("-x", "XUnitText", STR, "missing axis name");
  380. ARG2("-y", "YUnitText", STR, "missing axis name");
  381. ARG2("-t", "TitleText", STR, "missing plot title");
  382. ARG2("-fg", "Foreground", PIXEL, "missing color name");
  383. ARG2("-bg", "Background", PIXEL, "missing color name");
  384. ARG2("-bd", "Border", PIXEL, "missing color name");
  385. ARG2("-bw", "BorderSize", INT, "missing border size");
  386. ARG2("-zg", "ZeroColor", PIXEL, "missing color name");
  387. ARG2("-zw", "ZeroWidth", INT, "missing width");
  388. ARG2("-tf", "TitleFont", FONT, "missing font name");
  389. ARG2("-lf", "LabelFont", FONT, "missing font name");
  390.                 /* PW */
  391.                 ARG2("-dl", "DelayValue", INT, "missing delay value");
  392.                 /* Doesn't make much sense to PW why this must be
  393.                    switched, but it must. */
  394.                 ARG2("-digy", "Format X", STR, "Missing C-String");
  395.                 ARG2("-digx", "Format Y", STR, "Missing C-String");
  396.                 ARG("-a", "Animate");
  397.                 /* End PW */
  398. ARG("-rv", "ReverseVideo");
  399. ARG("-tk", "Ticks");
  400. ARG("-tkax", "TickAxis");
  401. ARG("-bb", "BoundBox");
  402. if (strcmp(argv[idx], "-lx") == 0) {
  403.     /* Limit the X coordinates */
  404.     if (idx + 1 >= argc)
  405. argerror("missing coordinate(s)",
  406.  argv[idx]);
  407.     if (hi = index(argv[idx + 1], ',')) {
  408. char    low[MAXLO];
  409. (void) strncpy(low, argv[idx + 1], hi - argv[idx + 1]);
  410. low[hi - argv[idx + 1]] = '';
  411. hi++;
  412. if (do_it) {
  413.     param_set("XLowLimit", DBL, argv[idx + 1]);
  414.     param_set("XHighLimit", DBL, hi);
  415. }
  416.     }
  417.     else {
  418. argerror("limit coordinates not specified right",
  419.  argv[idx]);
  420.     }
  421.     idx += 2;
  422.     continue;
  423. }
  424. if (strcmp(argv[idx], "-ly") == 0) {
  425.     /* Limit the Y coordinates */
  426.     if (idx + 1 >= argc)
  427. argerror("missing coordinate(s)",
  428.  argv[idx]);
  429.     if (hi = index(argv[idx + 1], ',')) {
  430. char    low[MAXLO];
  431. (void) strncpy(low, argv[idx + 1], hi - argv[idx + 1]);
  432. low[hi - argv[idx + 1]] = '';
  433. hi++;
  434. if (do_it) {
  435.     param_set("YLowLimit", DBL, argv[idx + 1]);
  436.     param_set("YHighLimit", DBL, hi);
  437. }
  438.     }
  439.     else {
  440. argerror("limit coordinates not specified right",
  441.  argv[idx]);
  442.     }
  443.     idx += 2;
  444.     continue;
  445. }
  446. ARG2("-lw", "LineWidth", INT, "missing line width");
  447. ARG("-nl", "NoLines");
  448. ARG("-ng", "NoLegend");
  449. ARG("-nb", "NoButton");
  450. ARG("-m", "Markers");
  451. ARG("-M", "StyleMarkers");
  452. ARG("-p", "PixelMarkers");
  453. ARG("-P", "LargePixels");
  454. ARG("-lnx", "LogX");
  455. ARG("-lny", "LogY");
  456. ARG("-bar", "BarGraph");
  457. ARG("-stk", "StackGraph");
  458. ARG("-fitx", "FitX");
  459. ARG("-fity", "FitY");
  460. ARG2("-brw", "BarWidth", DBL, "missing width");
  461. ARG2("-bof", "BarOffset", DBL, "missing offset");
  462. ARG2("-brb", "BarBase", DBL, "missing base");
  463. ARG("-db", "Debug");
  464. ARG2("-gw", "GridSize", INT, "missing grid size");
  465. ARG2("-gs", "GridStyle", STYLE, "missing grid style");
  466. if (strcmp(argv[idx], "-display") == 0) {
  467.     /* Harmless display specification */
  468.     dflag = D_XWINDOWS;
  469.     disp_name = argv[idx+1];
  470.     idx += 2;
  471.     continue;
  472. }
  473. if (strcmp(argv[idx], "-geometry") == 0) {
  474.     if (do_it)
  475. param_set("Geometry", STR, argv[idx + 1]);
  476.     idx += 2;
  477.     continue;
  478. }
  479. if (strcmp(argv[idx], "-device") == 0) {
  480.     if (idx + 1 >= argc)
  481. argerror("missing device", argv[idx]);
  482.     if (strcmp(argv[++idx], "hpgl") == 0)
  483. dflag = D_HPGL;
  484.     else if (strcmp(argv[idx], "idraw") == 0)
  485. dflag = D_IDRAW;
  486.     else if (strcmp(argv[idx], "x") == 0)
  487. dflag = D_XWINDOWS;
  488.     else if (strcmp(argv[idx], "ps") == 0)
  489. dflag = D_POSTSCRIPT;
  490.     else if (strcmp(argv[idx], "tgif") == 0)
  491. dflag = D_TGIF;
  492.     else
  493. argerror("bad device specification", argv[idx]);
  494.     idx++;
  495.     continue;
  496. }
  497. if (strncmp(argv[idx], "-P", 2) == 0) {
  498.     /* Printer spec */
  499.     if (do_it)
  500. param_set("Disposition", STR, "To Device");
  501.     if (do_it)
  502. param_set("FileOrDev", STR, &(argv[idx][2]));
  503.     idx++;
  504.     continue;
  505. }
  506. if (strcmp(argv[idx], "-o") == 0) {
  507.     if (do_it)
  508. param_set("Disposition", STR, "To File");
  509.     if (idx + 1 >= argc)
  510. argerror("missing file", argv[idx]);
  511.     if (do_it)
  512. param_set("FileOrDev", STR, argv[idx + 1]);
  513.     idx += 2;
  514.     continue;
  515. }
  516. if (strcmp(argv[idx], "-O") == 0) {
  517.     if (do_it)
  518. param_set("Disposition", STR, "To File");
  519.     if (do_it)
  520. param_set("Document", BOOL, "on");
  521.     if (idx + 1 >= argc)
  522. argerror("missing file", argv[idx]);
  523.     if (do_it)
  524. param_set("FileOrDev", STR, argv[idx + 1]);
  525.     idx += 2;
  526.     continue;
  527. }
  528. if (strcmp(argv[idx], "-fmtx") == 0) {
  529.     if (idx + 1 >= argc)
  530. argerror("missing x format", argv[idx]);
  531.     if (do_it)
  532. param_set("Format Y", STR, argv[idx + 1]);
  533.     idx += 2;
  534.     continue;
  535. }
  536. if (strcmp(argv[idx], "-fmty") == 0) {
  537.     if (idx + 1 >= argc)
  538. argerror("missing y format", argv[idx]);
  539.     if (do_it)
  540. param_set("Format X", STR, argv[idx + 1]);
  541.     idx += 2;
  542.     continue;
  543. }
  544. if (strcmp(argv[idx], "-scale") == 0) {
  545.     if (idx + 1 >= argc)
  546. argerror("scale factor", argv[idx]);
  547.     if (do_it)
  548. param_set("Scale", DBL, argv[idx + 1]);
  549.     idx += 2;
  550.     continue;
  551. }
  552. argerror("unknown option", argv[idx]);
  553.     }
  554. }
  555. else if (argv[idx][0] == '=') {
  556.     /* Its a geometry specification */
  557.     if (do_it)
  558. param_set("Geometry", STR, argv[idx] + 1);
  559.     idx++;
  560. }
  561. else {
  562.     /* It might be the host:display string */
  563.     if (rindex(argv[idx], ':') == (char *) 0) {
  564. /* Should be an input file */
  565. inFileNames[numFiles] = argv[idx];
  566. numFiles++;
  567.     }
  568.     idx++;
  569. }
  570.     }
  571.     return (dflag);
  572. }