home *** CD-ROM | disk | FTP | other *** search
- From: erc@Apple.COM (Ed Carp)
- Newsgroups: alt.sources
- Subject: filter lpc(1) output intelligently
- Message-ID: <54330@apple.Apple.COM>
- Date: 25 Jun 91 23:27:21 GMT
-
-
- /*
- *
- * lpcfilt - filter lpc(1) output and display on screen using curses
- *
- * To compile:
- * cc -s -o lpcfilt lpcfilt.c -lcurses [-lterm{cap|info}] -O
- *
- * Written 06/25/91 by Ed Carp
- *
- * Copyright 1991, by Ed Carp
- *
- * You can do anything you like with this code, except sell it or pretend
- * you wrote it.
- *
- */
-
- #include <stdio.h>
- #include <string.h>
- #include <curses.h>
- main(argc, argv)
- int argc;
- char **argv;
- {
- FILE *in;
- char linein[512];
- char printer[50];
- char q[10];
- char pr[10];
- int entries;
- int score;
- int all;
- int prcnt;
- int statlen;
- char status[512];
- char *ptr;
- char *ptr2;
- char c;
-
- if (argc > 1)
- {
- if (strcmp(argv[1], "-a") == 0)
- all = 1;
- else
- all = 0;
- } else
- all = 0;
- puts("Please wait...");
- initscr();
- statlen = COLS - 46; /* length of status line */
- while (1)
- {
- if ((in = popen("lpc stat", "r")) == (FILE *) NULL)
- {
- endwin();
- perror("lpc");
- exit(1);
- }
- erase();
- prcnt = 0;
- printw("%-20s %-8s %-8s %-5s %s\n\n",
- "Printer", "Queuing", "Printing", "Entry", "Status");
- while (fgets(linein, 510, in) != (char *) NULL)
- {
- if (prcnt > LINES)
- break;
- linein[strlen(linein) - 1] = NULL; /* get rid of \n */
- score = 0;
- score += all;
- if (strlen(linein) < 2)
- continue;
- linein[strlen(linein) - 1] = NULL; /* get rid of ":" */
- prx:
- strcpy(printer, linein); /* get printer name */
- printer[20] = NULL; /* shorten name */
- fgets(linein, 510, in);
- linein[strlen(linein) - 1] = NULL; /* get rid of \n */
- strcpy(q, linein + 12);/* is queuing enabled? */
- if (strcmp(q, "disabled") == 0)
- score++;
- fgets(linein, 510, in);
- linein[strlen(linein) - 1] = NULL; /* get rid of \n */
- strcpy(pr, linein + 13); /* is printing enabled? */
- if (strcmp(pr, "disabled") == 0)
- score++;
- fgets(linein, 510, in);
- linein[strlen(linein) - 1] = NULL; /* get rid of \n */
- if (*(linein + 1) == 'n' || atoi(linein + 1) > 0)
- {
- entries = atoi(linein + 1); /* how many entries? */
- if (entries < 0)
- entries = 0;
- score += entries;
- fgets(linein, 510, in);
- linein[strlen(linein) - 1] = NULL; /* get rid of \n */
- } else
- entries = 0;
- strcpy(status, linein + 1); /* what's the status? */
- if (strcmp(status, "no daemon present") != 0)
- score++;
- if (score == 0)
- continue;
- printw("%-20s %-8s %-8s %-5d ", printer, q, pr, entries);
- prcnt++;
- if (strlen(status) < statlen + 1)
- printw("%s\n", status);
- else
- {
- ptr = status;
- ptr2 = ptr + statlen;
- while ((*ptr2 != ' ') && (ptr2 != ptr))
- ptr2--;
- if (ptr2 == ptr)
- ptr2 = ptr + statlen;
- c = *ptr2;
- *ptr2 = NULL;
- printw("%s\n", ptr);
- *ptr2 = c;
- ptr = ptr2 + 1;
- while (strlen(ptr) > statlen)
- {
- ptr2 = ptr + statlen;
- while ((*ptr2 != ' ') && (ptr2 != ptr))
- ptr2--;
- if (ptr2 == ptr)
- ptr2 = ptr + statlen;
- c = *ptr2;
- *ptr2 = NULL;
- printw(" %s\n",
- ptr);
- *ptr2 = c;
- ptr = ptr2 + 1;
- prcnt++;
- }
- printw(" %s\n",
- ptr);
- prcnt++;
- }
- }
- pclose(in);
- clrtobot();
- refresh();
- sleep(5);
- }
- }
- --
- Ed Carp N7EKG/6 erc@khijol.UUCP ...uunet!khijol!erc
- Packet: N7EKG @ N6IIU.#NOCAL.CA.US
- UUWEST Consulting Alameda, CA 415/814-0550
-
- Computers HAVE caused a revolution in how much information we
- can safely ignore! --robs@ux1.cso.uiuc.edu (Rob Schaeffer)
-
- -- Absolutely unabashed Gates McFadden groupie! --
-