home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2785 / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-20  |  4.6 KB  |  228 lines

  1. /*
  2. **    m a i n . c
  3. **
  4. **    This is a interactive utility for RJE print spool management.
  5. **    It presents print files in list format to the user, displaying
  6. **    pertinent information about the file such as jobname, date, time,
  7. **    line count, etc.  The user may perform a variety of functions
  8. **    on the file such as print, view and delete.  Additionally, many
  9. **    of these singular operations may be done en masse on "tagged" or
  10. **    "untagged" files.
  11. **
  12. **    Arthur W. Neilson III
  13. **    art@bohtsg.pegasus.com
  14. **    Feb 7, 1991
  15. **
  16. */
  17.  
  18. #include "main.h"
  19. #include "node.h"
  20.  
  21. Node   *head, *tail;
  22.  
  23. WINDOW *hlpscr, *jobscr;
  24.  
  25. UINT    total, bytes;
  26.  
  27. /* keys allowed on main prompt */
  28. static char valid_keys[] = {
  29.     ' ', '\n', 'b', 'f', 'j', 'd', 'v', 'p',
  30.     't', 'u', 'a', 'x', 'T', 'U', 'W', 'M',
  31.     KEY_UP, KEY_DOWN
  32. };
  33.  
  34. main(argc, argv)
  35. int     argc;
  36. char   *argv[];
  37. {
  38.     int     c, op;
  39.     int     row, col;
  40.     int     i = 1;
  41.  
  42.     char    buf[MAXNAMLEN];
  43.  
  44.     Node   *node;
  45.  
  46.     /* initialize curses */
  47.     initcurses();
  48.  
  49.     /* trap signals */
  50.     trapsigs();
  51.  
  52.     /* set user id */
  53.     setuserid();
  54.  
  55.     /* change directory */
  56.     echdir(JOBDIR);
  57.  
  58.     /* build linked list */
  59.     node = head = thread(mklist("."));
  60.  
  61.     /* display help */
  62.     help(hlpscr);
  63.  
  64.     /* infinite loop */
  65.     for (;;) {
  66.  
  67.         /* display printline and  */
  68.         /* get user keystroke */
  69.         printline(jobscr, node, i);
  70.         getyx(jobscr, row, col);
  71.         wmove(jobscr, row, col - 2);
  72.         wrefresh(jobscr);
  73.         c = getkey(jobscr, valid_keys);
  74.         echokey(jobscr, ECHOKEYS, c);
  75.         wmove(jobscr, row, col);
  76.  
  77.         /* handle user keystroke */
  78.         switch (c) {
  79.         case KEY_DOWN:
  80.         case '\n':
  81.         case ' ':    /* forward */
  82.             docntf(jobscr);
  83.             newline(jobscr);
  84.             break;
  85.         case KEY_UP:
  86.         case 'b':    /* backward */
  87.             wprintw(jobscr, "ack");
  88.             docntb(jobscr);
  89.             newline(jobscr);
  90.             break;
  91.         case 'd':    /* delete file */
  92.             if (access(node->name, W_OK) != 0) {
  93.                 wprintw(jobscr, " %s\n", sys_errlist[errno]);
  94.                 docntf(jobscr);
  95.             } else {
  96.                 echo();
  97.                 wprintw(jobscr, "elete ? ");
  98.                 noecho();
  99.                 wrefresh(jobscr);
  100.                 if (tolower(wgetch(jobscr)) == 'y') {
  101.                     node = del(node);
  102.                     if (i > total) {
  103.                         i = 1;
  104.                         newline(jobscr);
  105.                     }
  106.                 } else {
  107.                     docntf(jobscr);
  108.                 }
  109.                 newline(jobscr);
  110.             }
  111.             break;
  112.         case 'v':    /* view file */
  113.             if ((node->st->st_mode & S_IFMT) != S_IFREG ||
  114.                 access(node->name, R_OK) != 0) {
  115.                 wprintw(jobscr, " not editable\n");
  116.                 docntf(jobscr);
  117.                 break;
  118.             } else {
  119.                 echo();
  120.                 wprintw(jobscr, "iew ? ");
  121.                 noecho();
  122.                 wrefresh(jobscr);
  123.                 if (tolower(wgetch(jobscr)) == 'y') {
  124.                     clear();
  125.                     refresh();
  126.                     endwin();
  127.                     execute(VIEW, VIEW, node->name, NULL);
  128.                     initcurses();
  129.                     help(hlpscr);
  130.                     break;
  131.                 } else
  132.                     docntf(jobscr);
  133.             }
  134.         case 'p':    /* print file */
  135.             if ((node->st->st_mode & S_IFMT) != S_IFREG ||
  136.                 access(node->name, R_OK) != 0)
  137.                 wprintw(jobscr, " not printable\n");
  138.             else {
  139.                 echo();
  140.                 wprintw(jobscr, "rint ? ");
  141.                 noecho();
  142.                 wrefresh(jobscr);
  143.                 if (tolower(wgetch(jobscr)) == 'y')
  144.                     lp(node->name);
  145.             }
  146.             docntf(jobscr);
  147.             newline(jobscr);
  148.             break;
  149.         case 't':    /* tag file */
  150.             wprintw(jobscr, "\b\b\b\b*[%c]ag", c);
  151.             node->flags |= TAG;
  152.             docntf(jobscr);
  153.             newline(jobscr);
  154.             break;
  155.         case 'u':    /* untag file */
  156.             wprintw(jobscr, "\b\b\b\b [%c]ntag", c);
  157.             node->flags &= ~TAG;
  158.             docntf(jobscr);
  159.             newline(jobscr);
  160.             break;
  161.         case 'a':    /* tag again */
  162.             wprintw(jobscr, "gain");
  163.             retag();
  164.             docntf(jobscr);
  165.             newline(jobscr);
  166.             break;
  167.         case 'T':    /* tag all files */
  168.             wprintw(jobscr, "ag all");
  169.             tagall();
  170.             docntf(jobscr);
  171.             newline(jobscr);
  172.             break;
  173.         case 'U':    /* untag all files */
  174.             wprintw(jobscr, "ntag all");
  175.             untagall();
  176.             docntf(jobscr);
  177.             newline(jobscr);
  178.             break;
  179.         case 'M':    /* mass operations */
  180.             /* operation? */
  181.             wprintw(jobscr, "ass d,p ? ");
  182.             wrefresh(jobscr);
  183.             op = tolower(getkey(jobscr, "\ndp"));
  184.             echokey(jobscr, "dp", op);
  185.             if (op == '\n') {
  186.                 docntf(jobscr);
  187.                 newline(jobscr);
  188.                 break;
  189.             }
  190.             wprintw(jobscr, "\b\b\b\b\b\b");
  191.             switch (op) {
  192.             case 'd':
  193.                 wprintw(jobscr, "del");
  194.                 break;
  195.             case 'p':
  196.                 wprintw(jobscr, "print");
  197.                 break;
  198.             }
  199.             /* tagged or untagged? */
  200.             wprintw(jobscr, " t,u ? ");
  201.             wrefresh(jobscr);
  202.             c = tolower(getkey(jobscr, "\ntu"));
  203.             echokey(jobscr, "tu", c);
  204.             if (c == '\n') {
  205.                 docntf(jobscr);
  206.                 newline(jobscr);
  207.                 break;
  208.             }
  209.             /* operations en masse */
  210.             switch (op) {
  211.             case 'd':    /* mass delete */
  212.                 node = massdel(c);
  213.                 i = 1;
  214.                 newline(jobscr);
  215.                 break;
  216.             case 'p':    /* mass print */
  217.                 node = massprint(c);
  218.                 i = 1;
  219.                 newline(jobscr);
  220.                 break;
  221.             }
  222.             break;
  223.         case 'x':    /* exit program */
  224.             quit(0);
  225.         }
  226.     }
  227. }
  228.