erc@Apple.COM (Ed Carp) (06/26/91)
/* * * 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! --