home *** CD-ROM | disk | FTP | other *** search
- /*
- ** m a i n . c
- **
- ** This is a interactive utility for RJE print spool management.
- ** It presents print files in list format to the user, displaying
- ** pertinent information about the file such as jobname, date, time,
- ** line count, etc. The user may perform a variety of functions
- ** on the file such as print, view and delete. Additionally, many
- ** of these singular operations may be done en masse on "tagged" or
- ** "untagged" files.
- **
- ** Arthur W. Neilson III
- ** art@bohtsg.pegasus.com
- ** Feb 7, 1991
- **
- */
-
- #include "main.h"
- #include "node.h"
-
- Node *head, *tail;
-
- WINDOW *hlpscr, *jobscr;
-
- UINT total, bytes;
-
- /* keys allowed on main prompt */
- static char valid_keys[] = {
- ' ', '\n', 'b', 'f', 'j', 'd', 'v', 'p',
- 't', 'u', 'a', 'x', 'T', 'U', 'W', 'M',
- KEY_UP, KEY_DOWN
- };
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- int c, op;
- int row, col;
- int i = 1;
-
- char buf[MAXNAMLEN];
-
- Node *node;
-
- /* initialize curses */
- initcurses();
-
- /* trap signals */
- trapsigs();
-
- /* set user id */
- setuserid();
-
- /* change directory */
- echdir(JOBDIR);
-
- /* build linked list */
- node = head = thread(mklist("."));
-
- /* display help */
- help(hlpscr);
-
- /* infinite loop */
- for (;;) {
-
- /* display printline and */
- /* get user keystroke */
- printline(jobscr, node, i);
- getyx(jobscr, row, col);
- wmove(jobscr, row, col - 2);
- wrefresh(jobscr);
- c = getkey(jobscr, valid_keys);
- echokey(jobscr, ECHOKEYS, c);
- wmove(jobscr, row, col);
-
- /* handle user keystroke */
- switch (c) {
- case KEY_DOWN:
- case '\n':
- case ' ': /* forward */
- docntf(jobscr);
- newline(jobscr);
- break;
- case KEY_UP:
- case 'b': /* backward */
- wprintw(jobscr, "ack");
- docntb(jobscr);
- newline(jobscr);
- break;
- case 'd': /* delete file */
- if (access(node->name, W_OK) != 0) {
- wprintw(jobscr, " %s\n", sys_errlist[errno]);
- docntf(jobscr);
- } else {
- echo();
- wprintw(jobscr, "elete ? ");
- noecho();
- wrefresh(jobscr);
- if (tolower(wgetch(jobscr)) == 'y') {
- node = del(node);
- if (i > total) {
- i = 1;
- newline(jobscr);
- }
- } else {
- docntf(jobscr);
- }
- newline(jobscr);
- }
- break;
- case 'v': /* view file */
- if ((node->st->st_mode & S_IFMT) != S_IFREG ||
- access(node->name, R_OK) != 0) {
- wprintw(jobscr, " not editable\n");
- docntf(jobscr);
- break;
- } else {
- echo();
- wprintw(jobscr, "iew ? ");
- noecho();
- wrefresh(jobscr);
- if (tolower(wgetch(jobscr)) == 'y') {
- clear();
- refresh();
- endwin();
- execute(VIEW, VIEW, node->name, NULL);
- initcurses();
- help(hlpscr);
- break;
- } else
- docntf(jobscr);
- }
- case 'p': /* print file */
- if ((node->st->st_mode & S_IFMT) != S_IFREG ||
- access(node->name, R_OK) != 0)
- wprintw(jobscr, " not printable\n");
- else {
- echo();
- wprintw(jobscr, "rint ? ");
- noecho();
- wrefresh(jobscr);
- if (tolower(wgetch(jobscr)) == 'y')
- lp(node->name);
- }
- docntf(jobscr);
- newline(jobscr);
- break;
- case 't': /* tag file */
- wprintw(jobscr, "\b\b\b\b*[%c]ag", c);
- node->flags |= TAG;
- docntf(jobscr);
- newline(jobscr);
- break;
- case 'u': /* untag file */
- wprintw(jobscr, "\b\b\b\b [%c]ntag", c);
- node->flags &= ~TAG;
- docntf(jobscr);
- newline(jobscr);
- break;
- case 'a': /* tag again */
- wprintw(jobscr, "gain");
- retag();
- docntf(jobscr);
- newline(jobscr);
- break;
- case 'T': /* tag all files */
- wprintw(jobscr, "ag all");
- tagall();
- docntf(jobscr);
- newline(jobscr);
- break;
- case 'U': /* untag all files */
- wprintw(jobscr, "ntag all");
- untagall();
- docntf(jobscr);
- newline(jobscr);
- break;
- case 'M': /* mass operations */
- /* operation? */
- wprintw(jobscr, "ass d,p ? ");
- wrefresh(jobscr);
- op = tolower(getkey(jobscr, "\ndp"));
- echokey(jobscr, "dp", op);
- if (op == '\n') {
- docntf(jobscr);
- newline(jobscr);
- break;
- }
- wprintw(jobscr, "\b\b\b\b\b\b");
- switch (op) {
- case 'd':
- wprintw(jobscr, "del");
- break;
- case 'p':
- wprintw(jobscr, "print");
- break;
- }
- /* tagged or untagged? */
- wprintw(jobscr, " t,u ? ");
- wrefresh(jobscr);
- c = tolower(getkey(jobscr, "\ntu"));
- echokey(jobscr, "tu", c);
- if (c == '\n') {
- docntf(jobscr);
- newline(jobscr);
- break;
- }
- /* operations en masse */
- switch (op) {
- case 'd': /* mass delete */
- node = massdel(c);
- i = 1;
- newline(jobscr);
- break;
- case 'p': /* mass print */
- node = massprint(c);
- i = 1;
- newline(jobscr);
- break;
- }
- break;
- case 'x': /* exit program */
- quit(0);
- }
- }
- }
-