home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / plotting / imagetoo / imagetl1.lha / Imagetool / src+obj / option.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-03-11  |  22.4 KB  |  856 lines

  1. /* cat > headers/option.h << "EOF" */
  2. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  3. /* option.h: header for option.c file            */
  4. /*         -set laser printer name            */
  5. /*         -set Imagetool defaults for image        */
  6. /*          directory, palette, help directory    */
  7. /*         -set reversed image display (change    */
  8. /*          origin)                    */
  9. /*         -set dark background            */
  10. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  11. /* SCCS information: %W%    %G% - NCSA */
  12.  
  13. #define option_h    1
  14.  
  15. #include "all.h"
  16. #include "newext.h"
  17.  
  18.     static void set_reversed();
  19.     static void set_darkbg();
  20.  
  21. /* EOF */
  22. /* cat > src+obj/option/create_def_box.c << "EOF" */
  23. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  24. /* create_def_box: create defaults frame        */
  25. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  26. /* SCCS information: %W%    %G% - NCSA */
  27.  
  28. /* #include "option.h" */
  29.  
  30. create_def_box ()
  31. {
  32.     int             h, w;
  33.  
  34.     def_box = window_create (0, FRAME,
  35.                  FRAME_SHOW_LABEL, FALSE,
  36.                  WIN_SHOW, FALSE,
  37.                  0);
  38.     def_panel = window_create (def_box, PANEL,
  39.                    PANEL_FONT, font_panel,
  40.                    PANEL_LABEL_BOLD, TRUE,
  41.                    0);
  42.     panel_create_item (def_panel, PANEL_MESSAGE,
  43.                PANEL_LABEL_STRING, "Please enter Imagetool default paths:",
  44.                0);
  45.     image_item = panel_create_item (def_panel, PANEL_TEXT,
  46.                     PANEL_VALUE_DISPLAY_LENGTH, 64,
  47.                     PANEL_VALUE_STORED_LENGTH, MAXNAMELEN - 1,
  48.                     PANEL_LABEL_STRING, "     Default image directory: ",
  49.                     PANEL_MENU_CHOICE_STRINGS,
  50.                         "^N - Get directory name",
  51.                         0,
  52.                     PANEL_MENU_CHOICE_FONTS,
  53.                         font_menu,
  54.                         0,
  55.                     PANEL_MENU_CHOICE_VALUES,
  56.                         CTRL_N,
  57.                         0,
  58.                     PANEL_SHOW_MENU, TRUE,
  59.                     PANEL_NOTIFY_LEVEL, PANEL_ALL,
  60.                     PANEL_NOTIFY_PROC, defaults_proc,
  61.                     PANEL_CLIENT_DATA, 1,
  62.                     0);
  63.     pal_item = panel_create_item (def_panel, PANEL_TEXT,
  64.                       PANEL_VALUE_DISPLAY_LENGTH, 64,
  65.                       PANEL_VALUE_STORED_LENGTH, MAXNAMELEN - 1,
  66.                       PANEL_LABEL_STRING, "     Default palette: ",
  67.                       PANEL_MENU_CHOICE_STRINGS,
  68.                               "^N - Get file name",
  69.                               0,
  70.                       PANEL_MENU_CHOICE_FONTS,
  71.                               font_menu,
  72.                               0,
  73.                       PANEL_MENU_CHOICE_VALUES,
  74.                               CTRL_N,
  75.                               0,
  76.                       PANEL_SHOW_MENU, TRUE,
  77.                       PANEL_NOTIFY_LEVEL, PANEL_ALL,
  78.                       PANEL_NOTIFY_PROC, defaults_proc,
  79.                       PANEL_CLIENT_DATA, 2,
  80.                       0);
  81.     help_item = panel_create_item (def_panel, PANEL_TEXT,
  82.                        PANEL_VALUE_DISPLAY_LENGTH, 64,
  83.                        PANEL_VALUE_STORED_LENGTH, MAXNAMELEN - 1,
  84.                        PANEL_LABEL_STRING, "     Default help file directory: ",
  85.                        PANEL_MENU_CHOICE_STRINGS,
  86.                                "^N - Get directory name",
  87.                                0,
  88.                        PANEL_MENU_CHOICE_FONTS,
  89.                                font_menu,
  90.                                0,
  91.                        PANEL_MENU_CHOICE_VALUES,
  92.                                CTRL_N,
  93.                                0,
  94.                        PANEL_SHOW_MENU, TRUE,
  95.                        PANEL_NOTIFY_LEVEL, PANEL_ALL,
  96.                        PANEL_NOTIFY_PROC, defaults_proc,
  97.                        PANEL_CLIENT_DATA, 3,
  98.                        0);
  99.     save_toggle = panel_create_item (def_panel, PANEL_CYCLE,
  100.                      PANEL_LABEL_STRING, "Save:",
  101.                      PANEL_CHOICE_STRINGS,
  102.                          "This session only",
  103.                          "This session and defaults file",
  104.                          0,
  105.                      0);
  106.     panel_create_item (def_panel, PANEL_BUTTON,
  107.                PANEL_LABEL_IMAGE, panel_button_image (def_panel, "Ok", 3, font_panel_button),
  108.                PANEL_CLIENT_DATA, 1,
  109.                PANEL_NOTIFY_PROC, def_ok_cancel,
  110.                0);
  111.     panel_create_item (def_panel, PANEL_BUTTON,
  112.                PANEL_LABEL_IMAGE, panel_button_image (def_panel, "Cancel", 6, font_panel_button),
  113.                PANEL_CLIENT_DATA, 0,
  114.                PANEL_NOTIFY_PROC, def_ok_cancel,
  115.                0);
  116.     window_fit (def_panel);
  117.     window_fit (def_box);
  118.  
  119.     w = (int) window_get (def_box, WIN_WIDTH);
  120.     h = (int) window_get (def_box, WIN_HEIGHT);
  121.     window_set (def_box, WIN_X, 1150 / 2 - w / 2, WIN_Y, 900 / 2 - h / 2, 0);
  122.  
  123.         /* set color map same with imagetool */
  124.     (void) color_def_win ();
  125.  
  126. }
  127. /* EOF */
  128. /* cat > src+obj/option/create_opt_menu.c << "EOF" */
  129. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  130. /* create_opt_menu: create option menu            */
  131. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  132. /* SCCS information: %W%    %G% - NCSA */
  133.  
  134. /* #include "option.h" */
  135.  
  136. create_opt_menu ()
  137. {
  138.     option_menu = menu_create (
  139.                    MENU_FONT, font_menu,
  140.                    MENU_GEN_PROC, option_mark_menu,
  141.                    MENU_ACTION_ITEM, "Set default paths", set_defaults,
  142.                    MENU_ACTION_ITEM, "Set laser printer default", set_printer,
  143.                    MENU_ACTION_ITEM, "Set reversed image on", set_reversed,
  144.                    MENU_ACTION_ITEM, "Set dark background on", set_darkbg,
  145.                    0);
  146. }
  147. /* EOF */
  148. /* cat > src+obj/option/create_printer_menu.c << "EOF" */
  149. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  150. /* create_printer_menu: create printer menu with    */
  151. /*            with entries from        */
  152. /*            /etc/printcap            */
  153. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  154. /* SCCS information: %W%    %G% - NCSA */
  155.  
  156. /* #include "option.h" */
  157.  
  158. create_printer_menu ()
  159. {
  160.         /* initialize printer menu */
  161.     printer_menu = menu_create (MENU_FONT, font_menu,
  162.                     MENU_NOTIFY_PROC, printer_proc,
  163.                     0);
  164.     (void) getname_printer (printer_menu);
  165. }
  166. /* EOF */
  167. /* cat > src+obj/option/def_ok_cancel.c << "EOF" */
  168. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  169. /* def_ok_cancel: cancel notify proc for defaults    */
  170. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  171. /* SCCS information: %W%    %G% - NCSA */
  172.  
  173. /* #include "option.h" */
  174.  
  175. def_ok_cancel (item, event)
  176.     Panel_item      item;
  177.     Event          *event;
  178. {
  179.     int             which_item;
  180.     int             value, err;
  181.     char            dir[MAXNAMELEN], pal[MAXNAMELEN], help[MAXNAMELEN];
  182.     enum pal_type   ptype;
  183.  
  184.     if ((which_item = (int) panel_get (item, PANEL_CLIENT_DATA)))
  185.     {
  186.         strcpy (dir, (char *) panel_get_value (image_item));
  187.         strcpy (pal, (char *) panel_get_value (pal_item));
  188.         strcpy (help, (char *) panel_get_value (help_item));
  189.  
  190.             /* check values  - report first error and wait for the
  191.                        user to respond again */
  192.  
  193.             /* image directory - null string OK */
  194.  
  195.         if (word_count (dir) != 0)    /* non-null entry */
  196.         {
  197.             sprintf (wkstr, "csh -fc \"test -d '%s'\"", dir);
  198. /* printf ("wkstr = %s\n", wkstr); */
  199.             if (check_system (wkstr))    /* 0 exit status means true */
  200.             {
  201.                 msg_write ("Error: Image directory is bad or does not exist. Fix or cancel.");
  202.                 return;
  203.             }
  204.             else
  205.             {        /* fully resolve pathname */
  206.                 if ((err = get_abspathname (dir, MAXNAMELEN, 0)))
  207.                 {        /* error should not occur */
  208.                     sprintf (wkstr, "Internal error (%d): While resolving default image directory. Cancel and report bug!", err);
  209.                     msg_write (wkstr);
  210.                     return;
  211.                 }
  212. /* printf ("dir = %s\n", dir); */
  213.             }
  214.         }
  215.         else        /* be sure string is null */
  216.             *dir = '\0';
  217.  
  218.             /* palette - null string OK */
  219.         if (word_count (pal) != 0)
  220.         {        /* non-null entry */
  221.             sprintf (wkstr, "csh -fc \"test -f '%s'\"", pal);
  222.             if (check_system (wkstr))
  223.             {        /* 0 exit status means true */
  224.                 msg_write ("Error: Palette filename is bad or file does not exist. Fix or cancel.");
  225.                 return;
  226.             }
  227.             else
  228.             {        /* fully resolve pathname */
  229.                 if ((err = get_abspathname (pal, MAXNAMELEN, 1)))
  230.                 {        /* error should not occur */
  231.                     sprintf (wkstr, "Internal error (%d): While resolving default palette filename. Cancel and report bug!", err);
  232.                     msg_write (wkstr);
  233.                     return;
  234.                 }
  235.                     /* compare with current palette */
  236.                 if (strcmp (pal, curr_pal.fn) && curr_pal.type == PAL_UNKNOWN)
  237.                 {
  238.                     if ((err = check_palette (pal, &ptype)))
  239.                     {
  240.                         switch (err)
  241.                         {
  242.                             case 2:
  243.                                 msg_write ("Error: Raw palette size != 768. Choose another file or cancel.");
  244.                                 return;
  245.                             case 3:
  246.                                 msg_write ("Error: HDF file has no palettes. Choose another file or cancel.");
  247.                                 return;
  248.                             default:
  249.                                 sprintf (wkstr, "HDF file error: (DFerror = %d) while checking palette. Choose another file or cancel.");
  250.                                 msg_write (wkstr);
  251.                                 return;
  252.                         }
  253.                     }
  254.                     strcpy (default_pal.fn, pal);
  255.                     default_pal.type = ptype;
  256.                     switch (ptype)
  257.                     {
  258.                         case PAL_RAW:
  259.                             default_pal.num = 0;
  260.                             break;
  261.                         case PAL_HDF:
  262.                             default_pal.num = 1;
  263.                             break;
  264.                     }
  265.                 }
  266.                 strcpy (default_pal.fn, curr_pal.fn);
  267.                 default_pal.type = curr_pal.type;
  268.                 default_pal.num = curr_pal.num;
  269. /* printf ("pal = %s\n", pal); */
  270.             }
  271.         }
  272.         else
  273.         {        /* be sure string is null */
  274.             default_pal.fn[0] = '\0';
  275.             default_pal.type = PAL_UNKNOWN;
  276.             default_pal.num = 0;
  277.         }
  278.  
  279.             /* help directory - null string NOT OK */
  280.         if (word_count (help) != 0)    /* non-null entry */
  281.         {
  282.             sprintf (wkstr, "csh -fc \"test -d '%s'\"", help);
  283.             if (check_system (wkstr))
  284.             {        /* 0 exit status means true */
  285.                 msg_write ("Error: Help directory is bad or does not exist. Fix or cancel.");
  286.                 return;
  287.             }
  288.             else
  289.             {        /* fully resolve pathname */
  290.                 if ((err = get_abspathname (help, MAXNAMELEN, 0)))    /* error should not occur */
  291.                 {
  292.                     sprintf (wkstr, "Internal error (%d): While resolving help directory. Cancel and report bug!", err);
  293.                     msg_write (wkstr);
  294.                     return;
  295.                 }
  296. /* printf ("help = %s\n", help); */
  297.             }
  298.         }
  299.         else
  300.         {
  301.             msg_write ("Error: Help directory cannot be null. Fix or cancel.");
  302.             return;
  303.         }
  304.  
  305.             /* save values */
  306.         strcpy (default_cdir, dir);
  307.             /* pal saved above */
  308.         strcpy (help_dir, help);
  309.  
  310.         value = (int) panel_get_value (save_toggle);
  311.         switch (value)
  312.         {
  313.             case 0:/* session only */
  314.                 msg_write ("Note: Defaults saved (session only).");
  315.                 break;
  316.             case 1:/* session and ~/.defaults file */
  317.  
  318.                 if (default_pal.type == PAL_RIS8)
  319.                     msg_write ("Warning: Default palette is associated with a 8-Bit Raster Image.");
  320.                 put_defaults (dir, pal, help);
  321.                 msg_write ("Note: Defaults saved (session and defaults file).");
  322.                 break;
  323.         }
  324.         window_set (def_box, WIN_SHOW, FALSE, 0);
  325.     }
  326.     else
  327.         window_set (def_box, WIN_SHOW, FALSE, 0);
  328.  
  329.     return;
  330. }
  331. /* EOF */
  332. /* cat > src+obj/option/defaults_proc.c << "EOF" */
  333. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  334. /* defaults_proc: notify proc for defaults panel text    */
  335. /*          items                    */
  336. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  337. /* SCCS information: %W%    %G% - NCSA */
  338.  
  339. /* #include "option.h" */
  340.  
  341. Panel_setting
  342. defaults_proc (item, event)
  343.     Panel_item      item;
  344.     Event          *event;
  345. {
  346.     int             which_item;
  347.  
  348.     switch (event_id (event))
  349.     {
  350.         case CTRL_N:
  351.             which_item = (int) panel_get (item, PANEL_CLIENT_DATA);
  352.             switch (which_item)
  353.             {
  354.                 case 1:
  355.                     (void) display_pathnamesw ("Get default image directory", update_default_image);
  356.                     break;
  357.                 case 2:
  358.                     (void) display_pathnamesw ("Get default palette filename", update_default_pal);
  359.                     break;
  360.                 case 3:
  361.                     (void) display_pathnamesw ("Get default help directory", update_default_help);
  362.                     break;
  363.             }
  364.             return PANEL_NONE;
  365.         default:
  366.             return panel_text_notify (item, event);
  367.     }
  368. }
  369. /* EOF */
  370. /* cat > src+obj/option/get_defaults.c << "EOF" */
  371. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  372. /* get_defaults: get value of entry in defaults        */
  373. /*         database                */
  374. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  375. /* SCCS information: %W%    %G% - NCSA */
  376.  
  377. /* #include "option.h" */
  378.  
  379. char           *
  380. get_defaults (s)
  381.     char           *s;
  382. {
  383. /* Implementation note(s):
  384.     1. The default value will be "".
  385. */
  386.     char           *value_s;
  387.  
  388.     value_s = defaults_get_string (s, "", 0);
  389.     return ((*value_s == NULL) ? NULL : value_s);
  390. }
  391. /* EOF */
  392. /* cat > src+obj/option/get_printer_field.c << "EOF" */
  393. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  394. /* get_printer_field: get the string up to the next    */
  395. /*              | or : or \n or EOF        */
  396. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  397. /* SCCS information: %W%    %G% - NCSA */
  398.  
  399. /* #include "option.h" */
  400.  
  401. int
  402. get_printer_field (fp, c, wkstr, maxlen) /* returns: either |, :, \n or EOF */
  403.     FILE           *fp;
  404.                 /* input: file pointer of file to read */
  405.     int             c;
  406.                 /* input: last character scanned so far */
  407.     char           *wkstr;
  408.                 /* input: storage of size maxlen */
  409.     int             maxlen;
  410.                 /* input: size of wkstr including \0. Must be at least 2 */
  411. {
  412.     int             n;
  413.  
  414.     n = 0;
  415.     *wkstr++ = c;
  416.     while ((c = getc (fp)) != EOF)
  417.     {
  418.         if (c != '|' && c != ':' && c != '\n')
  419.         {
  420.             if (n++ < maxlen - 1)
  421.                 *wkstr++ = c;
  422.         }
  423.         else
  424.         {
  425.             if (c == '\n' && *(wkstr - 1) == '\\')
  426.                 wkstr--;
  427.             else
  428.             {
  429.                 *wkstr = '\0';
  430.                 return (c);
  431.             }
  432.         }
  433.     }
  434.     *wkstr = '\0';
  435.     return (EOF);
  436. }
  437. /* EOF */
  438. /* cat > src+obj/option/getname_printer.c << "EOF" */
  439. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  440. /* getname_printer: get names from /etc/printcap and    */
  441. /*            fill out menu print_menu        */
  442. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  443. /* SCCS information: %W%    %G% - NCSA */
  444.  
  445. /* #include "option.h" */
  446.  
  447. getname_printer (printer_menu)
  448.     Menu            printer_menu;
  449.                 /* input: printer menu */
  450. {
  451.     FILE           *fp;
  452.     int             found_lp;    /* lp string found - TRUE or FALSE */
  453.     int             alias_number;    /* number of alias for a given printer */
  454.     int             loop_printer_entry;    /* more printer aliases - TRUE or FALSE */
  455.     char            wkstr[MAXNAMELEN], str[MAXNAMELEN];
  456.     int             c;
  457.     char           *dstr;
  458.  
  459.     char           *malloc ();
  460.  
  461.     if ((fp = fopen ("/etc/printcap", "r")) == NULL)
  462.     {
  463.         msg_write ("Error: Couldn't open /etc/printcap file to get printer names.");
  464.         menu_set (printer_menu,
  465.               MENU_APPEND_ITEM,
  466.               menu_create_item (MENU_STRING, "Error: no names",
  467.                         MENU_INACTIVE, TRUE,
  468.                         0),
  469.               0);
  470.         return (-1);
  471.     }
  472.  
  473.         /* search /etc/printcap for entries and insert into menu */
  474.  
  475.     found_lp = FALSE;
  476.     c = getc (fp);
  477.     while (c != EOF)
  478.     {
  479.         *str = '\0';
  480.         alias_number = 0;
  481.         loop_printer_entry = TRUE;
  482.         switch (c)
  483.         {
  484.             case ' ':
  485.             case '\t':
  486.             case '#':
  487.                 c = skip_to_newline (fp, c);
  488.                 loop_printer_entry = FALSE;
  489.                 break;
  490.             case '\n':
  491.                 c = getc (fp);
  492.                 loop_printer_entry = FALSE;
  493.                 break;
  494.             default:
  495.                 break;
  496.         }
  497.         while (loop_printer_entry)
  498.         {
  499.             c = get_printer_field (fp, c, wkstr, MAXNAMELEN);
  500.             switch (c)
  501.             {
  502.                 case '|':
  503.                 case ':':
  504.                     if (alias_number == 0)
  505.                     {
  506.                         strcpy (str, wkstr);
  507.                         if (!strcmp ("lp", wkstr))
  508.                             found_lp = TRUE;
  509.                         alias_number++;
  510.                     }
  511.                     else
  512.                     {
  513.                         if (!found_lp && !strcmp ("lp", wkstr))
  514.                         {
  515.                             found_lp = TRUE;
  516.                             (void) strcat (str, " (lp)");
  517.                         }
  518.                     }
  519.                     switch (c)
  520.                     {
  521.                         case '|':
  522.                             c = getc (fp);
  523.                             break;
  524.                         case ':':
  525.                             dstr = (char *) malloc (strlen (str) + 1);
  526.                             strcpy (dstr, str);
  527.                             menu_set (printer_menu,
  528.                                   MENU_APPEND_ITEM,
  529.                                   menu_create_item (MENU_STRING, dstr,
  530.                                             0),
  531.                                   0);
  532.  
  533.                             c = skip_to_newline (fp, c);
  534.                             loop_printer_entry = FALSE;
  535.                             break;
  536.                     }
  537.                     break;
  538.                 case '\n':
  539.                     c = getc (fp);
  540.                     loop_printer_entry = FALSE;
  541.                     break;
  542.                 case EOF:
  543.                     loop_printer_entry = FALSE;
  544.                     break;
  545.             }
  546.         }
  547.     }
  548.     return (0);
  549. }
  550. /* EOF */
  551. /* cat > src+obj/option/opt_handler.c << "EOF" */
  552. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  553. /* opt_handler: option handler                */
  554. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  555. /* SCCS information: %W%    %G% - NCSA */
  556.  
  557. /* #include "option.h" */
  558.  
  559. opt_handler (item, event)
  560.     Panel_item      item;
  561.     Event          *event;
  562. {
  563.     if (display_panel_menu (item, event, menu_panel, option_menu))
  564.         set_defaults (option_menu, menu_get (option_menu, MENU_NTH_ITEM, 1));
  565. }
  566. /* EOF */
  567. /* cat > src+obj/option/option_mark_menu.c << "EOF" */
  568. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  569. /* option_mark_menu: menu generate proc to set         */
  570. /*             reversed image and dark background */
  571. /*             strings in option menu.        */
  572. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  573. /* SCCS information: %W%    %G% - NCSA */
  574.  
  575. /* #include "option.h" */
  576.  
  577. Menu 
  578. option_mark_menu (m, operation)
  579.     Menu            m;
  580.     Menu_generate   operation;
  581. {
  582.     int             which_button, i;
  583.     static char     rev_image_on[] = "Set reversed image ON?";
  584.     static char rev_image_off[] = "Set reversed image OFF?";
  585.     static char dark_bg_on[] = "Set dark background ON?";
  586.     static char     dark_bg_off[] = "Set dark background OFF?";
  587.  
  588.     switch (operation)
  589.     {
  590.         case MENU_DISPLAY:
  591.             menu_set ((Menu_item) menu_get (m, MENU_NTH_ITEM, 3, 0), MENU_STRING, (rev_image) ? rev_image_off : rev_image_on, 0);
  592.             menu_set ((Menu_item) menu_get (m, MENU_NTH_ITEM, 4, 0), MENU_STRING, (dark_bg) ? dark_bg_off : dark_bg_on, 0);
  593.             break;
  594.  
  595.         case MENU_DISPLAY_DONE:
  596.  
  597.             break;
  598.  
  599.         case MENU_NOTIFY:
  600.  
  601.             break;
  602.  
  603.         case MENU_NOTIFY_DONE:
  604.  
  605.             break;
  606.     }
  607.         /* The current or newly-created menu is returned */
  608.     return m;
  609. }
  610. /* EOF */
  611. /* cat > src+obj/option/printer_proc.c << "EOF" */
  612. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  613. /* printer_proc: menu notify proc for printer menu    */
  614. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  615. /* SCCS information: %W%    %G% - NCSA */
  616.  
  617. /* #include "option.h" */
  618.  
  619. caddr_t 
  620. printer_proc (m, mi)
  621.     Menu            m;
  622.     Menu_item       mi;
  623. {
  624.     char           *mstr;
  625.     int             len;
  626.  
  627.     mstr = first_word ((char *) menu_get (mi, MENU_STRING), &len);
  628.     strncpy (wkstr, mstr, len);
  629.     *(wkstr + len) = '\0';
  630.  
  631.     panel_set_value (text_item, wkstr);
  632. }
  633. /* EOF */
  634. /* cat > src+obj/option/put_defaults.c << "EOF" */
  635. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  636. /* put_defaults: save Imagetool defaults in        */
  637. /*         $HOME/.defaults, the private user    */
  638. /*         defaults database.            */
  639. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  640. /* SCCS information: %W%    %G% - NCSA */
  641.  
  642. /* #include "option.h" */
  643.  
  644. int 
  645. put_defaults (dir, pal, help)
  646.     char           *dir;
  647.                 /* input: default image directory pathname */
  648.     char           *pal;
  649.                 /* input: default palette pathname */
  650.     char           *help;
  651.                 /* input: help directory */
  652. {
  653.     int             status;
  654.  
  655.     defaults_set_string (DEFAULT_IMAGE_DIR, dir, NULL);
  656.     defaults_set_string (DEFAULT_PALETTE_FILE, pal, NULL);
  657.     defaults_set_string (DEFAULT_HELP_DIR, help, NULL);
  658.  
  659.     defaults_write_changed (NULL, NULL);
  660.     return;
  661. }
  662. /* EOF */
  663. /* cat > src+obj/option/set_darkbg.c << "EOF" */
  664. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  665. /* set_darkbg: (static) set dark background        */
  666. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  667. /* SCCS information: %W%    %G% - NCSA */
  668.  
  669. /* #include "option.h" */
  670.  
  671. static void
  672. set_darkbg ()
  673. {
  674.     int             answer;
  675.  
  676.     if (dark_bg)
  677.     {
  678.         dark_bg = 0;
  679.         msg_write ("Note: Dark background now OFF.");
  680.     }
  681.     else
  682.     {
  683.         dark_bg = 1;
  684.         msg_write ("Note: Dark background now ON.");
  685.     }
  686.  
  687.     init_cmsname ();
  688.     reset_pal (REGULAR);
  689.  
  690.     return;
  691. }
  692. /* EOF */
  693. /* cat > src+obj/option/set_defaults.c << "EOF" */
  694. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  695. /* set_defaults: set defaults                */
  696. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  697. /* SCCS information: %W%    %G% - NCSA */
  698.  
  699. /* #include "option.h" */
  700.  
  701. set_defaults ()
  702. {
  703.     panel_set_value (image_item, default_cdir);
  704.     panel_set_value (pal_item, default_pal.fn);
  705.     panel_set_value (help_item, help_dir);
  706.  
  707.     window_set (def_box, WIN_SHOW, TRUE, 0);
  708. }
  709. /* EOF */
  710. /* cat > src+obj/option/set_printer.c << "EOF" */
  711. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  712. /* set_printer: set printer                 */
  713. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  714. /* SCCS information: %W%    %G% - NCSA */
  715.  
  716. /* #include "option.h" */
  717.  
  718. set_printer (m, mi)
  719.     Menu            m;
  720.     Menu_item       mi;
  721. {
  722. /* Implementation note(s):
  723.     1. printer is initialized in function init_vars.
  724. */
  725.     char            str[MAXNAMELEN];
  726.     int             answer;
  727.  
  728.     sprintf (str, "%s", printer);
  729.     while ((answer = mydialog ("Printer name:", NULL, str, 0, 64, 64, printer_menu)))
  730.     {
  731.         if (strip_wspace (str) > 0)
  732.         {
  733.             if (word_count (str) != 1)    /* must be one word */
  734.                 msg_write ("Error: Printer name must be one word. Please retype or cancel.");
  735.             else
  736.             {
  737.                 strcpy (printer, str);
  738.                 break;
  739.             }
  740.         }
  741.         else
  742.             msg_write ("Error: No printer name. Please type one in or cancel.");
  743.     }
  744. }
  745. /* EOF */
  746. /* cat > src+obj/option/set_reversed.c << "EOF" */
  747. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  748. /* set_reversed: (static) set reserve image        */
  749. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  750. /* SCCS information: %W%    %G% - NCSA */
  751.  
  752. /* #include "option.h" */
  753.  
  754. static void
  755. set_reversed ()
  756. {
  757.     if (rev_image)
  758.     {
  759.         rev_image = 0;
  760.         msg_write ("Note: Reverse image now OFF.");
  761.     }
  762.     else
  763.     {
  764.         rev_image = 1;
  765.         msg_write ("Note: Reverse image now ON.");
  766.     }
  767.     return;
  768. }
  769. /* EOF */
  770. /* cat > src+obj/option/skip_to_newline.c << "EOF" */
  771. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  772. /* skip_to_newline: skip all characters on fp until    */
  773. /*            newline not preceeded by \        */
  774. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  775. /* SCCS information: %W%    %G% - NCSA */
  776.  
  777. /* #include "option.h" */
  778.  
  779. int
  780. skip_to_newline (fp, c)    /* returns: next character or EOF after newline */
  781.     FILE           *fp;
  782.                 /* input: file pointer of file to read */
  783.     int             c;
  784.                 /* input: last character scanned */
  785. {
  786.     int             c0, c1;
  787.  
  788.     c0 = c;
  789.     c1 = getc (fp);
  790.     while (c1 != EOF)
  791.         if (c1 == '\n' && c0 != '\\')
  792.             return (getc (fp));
  793.         else
  794.         {
  795.             c0 = c1;
  796.             c1 = getc (fp);
  797.         }
  798.     return (EOF);
  799. }
  800. /* EOF */
  801. /* cat > src+obj/option/update_default_help.c << "EOF" */
  802. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  803. /* update_default_help: updates the defaults panel     */
  804. /*            text help_item with directory    */
  805. /*                from pathname frame        */
  806. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  807. /* SCCS information: %W%    %G% - NCSA */
  808.  
  809. /* #include "option.h" */
  810.  
  811. int
  812. update_default_help (dir, file)
  813.     char           *dir;
  814.     char           *file;
  815. {
  816.     panel_set_value (help_item, dir);
  817. }
  818. /* EOF */
  819. /* cat > src+obj/option/update_default_image.c << "EOF" */
  820. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  821. /* update_default_image: updates the defaults panel     */
  822. /*             text image_item with directory    */
  823. /*                 from pathname frame        */
  824. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  825. /* SCCS information: %W%    %G% - NCSA */
  826.  
  827. /* #include "option.h" */
  828.  
  829. int
  830. update_default_image (dir, file)
  831.     char           *dir;
  832.     char           *file;
  833. {
  834.     panel_set_value (image_item, dir);
  835. }
  836. /* EOF */
  837. /* cat > src+obj/option/update_default_pal.c << "EOF" */
  838. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  839. /* update_default_pal: updates the defaults panel     */
  840. /*               text pal_item with filename    */
  841. /*               from pathname frame        */
  842. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  843. /* SCCS information: %W%    %G% - NCSA */
  844.  
  845. /* #include "option.h" */
  846.  
  847. int
  848. update_default_pal (dir, file)
  849.     char           *dir;
  850.     char           *file;
  851. {
  852.     sprintf (wkstr, "%s/%s", dir, file);
  853.     panel_set_value (pal_item, wkstr);
  854. }
  855. /* EOF */
  856.