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

  1. /* cat > headers/main.h << "EOF" */
  2. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  3. /* main.h: header for main.c file            */
  4. /*       main.c creates imagetool windows,        */
  5. /*       initializes vars, canvas event handling,    */
  6. /*       image editing (cut, copy, paste), etc.    */
  7. /*       1.0 version author(s):            */
  8. /*        Carol Song, Mike Norman, Ron Chen,    */
  9. /*        Tom Redman                */
  10. /*       1.1 version author(s):            */
  11. /*        Martin Knapp-Cordes            */
  12. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  13. /* SCCS information: %W%    %G% - NCSA */
  14.  
  15. #define main_h        1
  16.  
  17. #include "all.h"
  18. #include "newext.h"
  19. #include "define.h"
  20. #include "newdefine.h"
  21.  
  22. /* EOF */
  23. /* cat > src+obj/main/main.c << "EOF" */
  24. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  25. /* main: main routine                    */
  26. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  27. /* SCCS information: %W%    %G% - NCSA */
  28.  
  29. /* #include "main.h" */
  30.  
  31. main (argc, argv)
  32.     char           *argv[];
  33.     int             argc;
  34. {
  35.         /* initializations */
  36.  
  37.     init_vars ();
  38.  
  39.         /* create imagetool windows, menus */
  40.  
  41.     create_base (argc, argv);
  42.  
  43.     create_ttysw ();
  44.     create_panel ();
  45.     create_msgsw ();
  46.     create_panel_menu ();
  47.  
  48.     create_canvas ();
  49.     init_cmsname ();
  50.     create_menus ();
  51. /* printf ("after menus\n"); */
  52.     create_helpsw ();
  53. /* printf ("after helpsw\n"); */
  54.     create_printer_menu ();
  55. /* printf ("after printer_menu\n"); */
  56.  
  57.         /* init environment from defaults */
  58.     if (init_env ())    /* quit if problem */
  59.         exit (-1);
  60. /* printf ("after init_env\n"); */
  61.     make_id_symbol ();
  62. /* printf ("after make_id_symbol\n"); */
  63.  
  64.         /* other windows */
  65.     create_imagesave_box ();
  66. /* printf ("after create_imagesave_box\n"); */
  67.     create_palsave_box ();
  68. /* printf ("create_palsave_box\n"); */
  69.     create_def_box ();
  70.     create_pathnamesw ();
  71. /* printf ("after pathnamesw\n"); */
  72.     create_entrysw ();
  73.  
  74.         /* start Imagetool event-driven interface */
  75.     window_main_loop (base);
  76.     exit (0);
  77. }
  78. /* EOF */
  79. /* cat > src+obj/main/cancel.c << "EOF" */
  80. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  81. /* cancel: handler for cancel button. Release memory    */
  82. /*       if animation and stack ops go stop ftp loop    */
  83. /*       if any                    */
  84. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  85. /* SCCS information: %W%    %G% - NCSA */
  86.  
  87. /* #include "main.h" */
  88.  
  89. cancel (item, event)
  90.     Panel_item      item;
  91.     Event          *event;
  92. {
  93.     if (animation_go)
  94.     {
  95.         msg_write ("Note: Animation cancelled.");
  96.         done_seq ();
  97.         return;
  98.     }
  99.  
  100.     if (getloop_go)
  101.     {
  102.         loop_stop (NULL, NULL);
  103.         msg_write ("Note: Get-loop cancelled.");
  104.         return;
  105.     }
  106.  
  107.     flush_table ();
  108.     if (panel_get (store_but, PANEL_SHOW_ITEM, 0))
  109.         invalid_stack ();
  110. }
  111. /* EOF */
  112. /* cat > src+obj/main/clear.c << "EOF" */
  113. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  114. /* clear: clear button                    */
  115. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  116. /* SCCS information: %W%    %G% - NCSA */
  117.  
  118. /* #include "main.h" */
  119.  
  120. clear (item, event)
  121.     Panel_item      item;
  122.     Event          *event;
  123. {
  124.         /* first clear click erases the last image */
  125.     if (!clear_request)
  126.     {
  127.         erase_last ();
  128.         msg_write ("Note: Last image cleared if any.");
  129.         clear_request++;
  130.     }
  131.     else
  132.     {        /* two clicks erase entire canvas */
  133.         if (clear_request)
  134.         {
  135.             erase_all ();
  136.             msg_write ("Note: Entire canvas cleared.");
  137.             clear_request = 0;
  138.         }
  139.     }
  140.     reset_pos ();
  141.     square_drawn = 0;
  142.     line_drawn = 0;
  143.     first_middle_down = 0;
  144.     return;
  145. }
  146. /* EOF */
  147. /* cat > src+obj/main/colorsetup.c << "EOF" */
  148. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  149. /* colorsetup: setup color                */
  150. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  151. /* SCCS information: %W%    %G% - NCSA */
  152.  
  153. /* #include "main.h" */
  154.  
  155. colorsetup (item, value, event)
  156.     Panel_item      item;
  157.     int             value;
  158.     Event          *event;
  159. {
  160.     msg_write ("Note: Function colors not available yet.");
  161. }
  162. /* EOF */
  163. /* cat > src+obj/main/dir_board_proc.c << "EOF" */
  164. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  165. /* dir_board_proc: handler to process dir operations    */
  166. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  167. /* SCCS information: %W%    %G% - NCSA */
  168.  
  169. /* #include "main.h" */
  170.  
  171. Panel_setting
  172. dir_board_proc (item, event)
  173.     Panel_item      item;
  174.     Event          *event;
  175. {
  176.     char            path[MAXNAMELEN];
  177.     int             err;
  178.  
  179.     switch (event_id (event))
  180.     {
  181.         case CTRL_N:
  182.             (void) display_pathnamesw ("Get image directory", update_dir_board);
  183.             return PANEL_NONE;
  184.         case CTRL_C:
  185.             strcpy (path, (char *) panel_get_value (dir_board));
  186. /* printf ("path = %s\n", path); */
  187.             if (word_count (path) == 0)
  188.             {    /* empty entry - use default */
  189.                 strcpy (path, default_cdir);
  190.                 (void) chdir (path);
  191.                 panel_set_value (dir_board, path);
  192.                 strcpy (current_dir, path);
  193.                 set_frame_label (base);
  194.                 msg_write ("Note: No directory. Default image directory used. ");
  195.                 return PANEL_NONE;
  196.             }
  197.             sprintf (wkstr, "csh -fc \"test -d '%s'\"", path);
  198.             if (check_system (wkstr))    /* 0 exit status means true */
  199.                 msg_write ("Error: Image directory bad or does not exist. Please fix.");
  200.             else
  201.             {
  202.                 if ((err = get_abspathname (path, MAXNAMELEN, TYPE_DIR)))
  203.                 {        /* error should not occur */
  204.                     sprintf (wkstr, "Internal error (%d): While resolving image directory. Report bug!", err);
  205.                     msg_write (wkstr);
  206.                 }
  207.                 else
  208.                 {
  209.                     (void) chdir (path);
  210.                     panel_set_value (dir_board, path);
  211.                     strcpy (current_dir, path);
  212.                     set_frame_label (base);
  213.                     sprintf (wkstr, "cd %s\r", path);
  214.                     tty_write (wkstr);
  215.                     msg_write ("Note: Image directory set.");
  216.                 }
  217.             }
  218.             return PANEL_NONE;
  219.         default:
  220.             return panel_text_notify (item, event);
  221.     }
  222. }
  223. /* EOF */
  224. /* cat > src+obj/main/erase_all.c << "EOF" */
  225. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  226. /* erase_all: erase all                    */
  227. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  228. /* SCCS information: %W%    %G% - NCSA */
  229.  
  230. /* #include "main.h" */
  231.  
  232. erase_all ()
  233. {
  234.     Pixwin         *pw = canvas_pixwin (canvas);
  235.  
  236.     pw_writebackground (pw, 0, 0,
  237.                 (int) window_get (canvas, CANVAS_WIDTH),
  238.                 (int) window_get (canvas, CANVAS_HEIGHT), PIX_CLR);
  239. }
  240. /* EOF */
  241. /* cat > src+obj/main/erase_last.c << "EOF" */
  242. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  243. /* erase_last: last erase                */
  244. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  245. /* SCCS information: %W%    %G% - NCSA */
  246.  
  247. /* #include "main.h" */
  248.  
  249. erase_last ()
  250. {
  251.     Pixwin         *pw = canvas_pixwin (canvas);
  252.  
  253.     if (square_drawn)
  254.         pw_write (pw, square.startx, square.starty,
  255.               square.endx - square.startx + 1,
  256.               square.endy - square.starty + 1,
  257.               PIX_CLR, NULL, 0, 0);
  258.     else
  259.         pw_write (pw, curr_image.startx, curr_image.starty,
  260.               curr_image.xdim, curr_image.ydim,
  261.               PIX_CLR, NULL, 0, 0);
  262. }
  263. /* EOF */
  264. /* cat > src+obj/main/get_selection.c << "EOF" */
  265. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  266. /* get_selection: get selection                */
  267. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  268. /* SCCS information: %W%    %G% - NCSA */
  269.  
  270. /* #include "main.h" */
  271.  
  272. char           *
  273. get_selection (namestr)
  274.     char           *namestr;
  275. {
  276.     Seln_holder     holder;
  277.     Seln_request   *buf;
  278.  
  279.     if (namestr == NULL)
  280.         return (NULL);
  281.  
  282.     holder = seln_inquire (SELN_PRIMARY);
  283.     buf = seln_ask (&holder, SELN_REQ_CONTENTS_ASCII, 0, 0);
  284.     strncpy (namestr, buf->data + sizeof (Seln_attribute), MAXNAMELEN - 1);
  285.     return (namestr);
  286. }
  287. /* EOF */
  288. /* cat > src+obj/main/main_cleanup.c << "EOF" */
  289. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  290. /* main_cleanup: clean up routine called up when quit    */
  291. /*         the main window            */
  292. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  293. /* SCCS information: %W%    %G% - NCSA */
  294.  
  295. /* #include "main.h" */
  296.  
  297. main_cleanup ()
  298. {
  299.     if (plot_window != NULL)
  300.     {
  301.         window_set (plot_window, FRAME_NO_CONFIRM, TRUE, 0);
  302.         window_destroy (plot_window);
  303.     }
  304.     if (scale_box != NULL)
  305.     {
  306.         window_set (scale_box, FRAME_NO_CONFIRM, TRUE, 0);
  307.         window_destroy (scale_box);
  308.     }
  309.     if (clipboard.pr != NULL)
  310.         pr_close (clipboard.pr);
  311.  
  312.     if (help_window != NULL)
  313.     {
  314.         window_set (help_window, FRAME_NO_CONFIRM, TRUE, 0);
  315.         window_destroy (help_window);
  316.     }
  317.     if (def_box != NULL)
  318.     {
  319.         window_set (def_box, FRAME_NO_CONFIRM, TRUE, 0);
  320.         window_destroy (def_box);
  321.     }
  322.     if (path_frame != NULL)
  323.     {
  324.         window_set (path_frame, FRAME_NO_CONFIRM, TRUE, 0);
  325.         window_destroy (path_frame);
  326.     }
  327.     if (entry_frame != NULL)
  328.     {
  329.         window_set (entry_frame, FRAME_NO_CONFIRM, TRUE, 0);
  330.         window_destroy (entry_frame);
  331.     }
  332.     if (imagesave_box != NULL)
  333.     {
  334.         window_set (imagesave_box, FRAME_NO_CONFIRM, TRUE, 0);
  335.         window_destroy (imagesave_box);
  336.     }
  337.     if (palsave_box != NULL)
  338.     {
  339.         window_set (palsave_box, FRAME_NO_CONFIRM, TRUE, 0);
  340.         window_destroy (palsave_box);
  341.     }
  342.  
  343.     flush_call ();
  344.     tty_write ("exit\r");
  345. }
  346. /* EOF */
  347. /* cat > src+obj/main/quit.c << "EOF" */
  348. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  349. /* quit: quit button handler                */
  350. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  351. /* SCCS information: %W%    %G% - NCSA */
  352.  
  353. /* #include "main.h" */
  354.  
  355. quit (item, event)
  356.     Panel_item      item;
  357.     Event          *event;
  358. {
  359.     textsw_reset (msgsw, 0, 0);
  360.     textsw_reset (textsw, 0, 0);
  361.     window_destroy (base);
  362.     return;
  363. }
  364. /* EOF */
  365. /* cat > src+obj/main/reset_pos.c << "EOF" */
  366. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  367. /* reset_pos: reset position                */
  368. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  369. /* SCCS information: %W%    %G% - NCSA */
  370.  
  371. /* #include "main.h" */
  372.  
  373. reset_pos ()
  374. {
  375.     pos_picked = 0;
  376.     startx = starty = ORIGINXY;
  377. }
  378. /* EOF */
  379. /* cat > src+obj/main/update_dir_board.c << "EOF" */
  380. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  381. /* update_dir_board: updates the dir_board with     */
  382. /*             directory from pathname frame    */
  383. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  384. /* SCCS information: %W%    %G% - NCSA */
  385.  
  386. /* #include "main.h" */
  387.  
  388. int
  389. update_dir_board (dir, file)
  390.     char           *dir;
  391.     char           *file;
  392. {
  393.     panel_set_value (dir_board, dir);
  394. }
  395. /* EOF */
  396.