home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3542 < prev    next >
Internet Message Format  |  1991-06-25  |  4KB

  1. From: erc@Apple.COM (Ed Carp)
  2. Newsgroups: alt.sources
  3. Subject: filter lpc(1) output intelligently
  4. Message-ID: <54330@apple.Apple.COM>
  5. Date: 25 Jun 91 23:27:21 GMT
  6.  
  7.  
  8. /*
  9. *
  10. * lpcfilt - filter lpc(1) output and display on screen using curses
  11. *
  12. * To compile:
  13. *         cc -s -o lpcfilt lpcfilt.c -lcurses [-lterm{cap|info}] -O
  14. *
  15. * Written 06/25/91 by Ed Carp
  16. *
  17. * Copyright 1991, by Ed Carp
  18. *
  19. * You can do anything you like with this code, except sell it or pretend
  20. * you wrote it.
  21. *
  22. */
  23.  
  24. #include <stdio.h>
  25. #include <string.h>
  26. #include <curses.h>
  27. main(argc, argv)
  28.    int             argc;
  29.    char          **argv;
  30. {
  31.    FILE           *in;
  32.    char            linein[512];
  33.    char            printer[50];
  34.    char            q[10];
  35.    char            pr[10];
  36.    int             entries;
  37.    int             score;
  38.    int             all;
  39.    int             prcnt;
  40.    int             statlen;
  41.    char            status[512];
  42.    char           *ptr;
  43.    char           *ptr2;
  44.    char            c;
  45.  
  46.    if (argc > 1)
  47.    {
  48.       if (strcmp(argv[1], "-a") == 0)
  49.      all = 1;
  50.       else
  51.      all = 0;
  52.    } else
  53.       all = 0;
  54.    puts("Please wait...");
  55.    initscr();
  56.    statlen = COLS - 46;        /* length of status line */
  57.    while (1)
  58.    {
  59.       if ((in = popen("lpc stat", "r")) == (FILE *) NULL)
  60.       {
  61.      endwin();
  62.      perror("lpc");
  63.      exit(1);
  64.       }
  65.       erase();
  66.       prcnt = 0;
  67.       printw("%-20s %-8s %-8s %-5s    %s\n\n",
  68.          "Printer", "Queuing", "Printing", "Entry", "Status");
  69.       while (fgets(linein, 510, in) != (char *) NULL)
  70.       {
  71.      if (prcnt > LINES)
  72.         break;
  73.      linein[strlen(linein) - 1] = NULL;    /* get rid of \n */
  74.      score = 0;
  75.      score += all;
  76.      if (strlen(linein) < 2)
  77.         continue;
  78.      linein[strlen(linein) - 1] = NULL;    /* get rid of ":" */
  79.    prx:
  80.      strcpy(printer, linein);    /* get printer name */
  81.      printer[20] = NULL;    /* shorten name */
  82.      fgets(linein, 510, in);
  83.      linein[strlen(linein) - 1] = NULL;    /* get rid of \n */
  84.      strcpy(q, linein + 12);/* is queuing enabled? */
  85.      if (strcmp(q, "disabled") == 0)
  86.         score++;
  87.      fgets(linein, 510, in);
  88.      linein[strlen(linein) - 1] = NULL;    /* get rid of \n */
  89.      strcpy(pr, linein + 13);    /* is printing enabled? */
  90.      if (strcmp(pr, "disabled") == 0)
  91.         score++;
  92.      fgets(linein, 510, in);
  93.      linein[strlen(linein) - 1] = NULL;    /* get rid of \n */
  94.      if (*(linein + 1) == 'n' || atoi(linein + 1) > 0)
  95.      {
  96.         entries = atoi(linein + 1);    /* how many entries? */
  97.         if (entries < 0)
  98.            entries = 0;
  99.         score += entries;
  100.         fgets(linein, 510, in);
  101.         linein[strlen(linein) - 1] = NULL;    /* get rid of \n */
  102.      } else
  103.         entries = 0;
  104.      strcpy(status, linein + 1);    /* what's the status? */
  105.      if (strcmp(status, "no daemon present") != 0)
  106.         score++;
  107.      if (score == 0)
  108.         continue;
  109.      printw("%-20s %-8s %-8s %-5d ", printer, q, pr, entries);
  110.      prcnt++;
  111.      if (strlen(status) < statlen + 1)
  112.         printw("%s\n", status);
  113.      else
  114.      {
  115.         ptr = status;
  116.         ptr2 = ptr + statlen;
  117.         while ((*ptr2 != ' ') && (ptr2 != ptr))
  118.            ptr2--;
  119.         if (ptr2 == ptr)
  120.            ptr2 = ptr + statlen;
  121.         c = *ptr2;
  122.         *ptr2 = NULL;
  123.         printw("%s\n", ptr);
  124.         *ptr2 = c;
  125.         ptr = ptr2 + 1;
  126.         while (strlen(ptr) > statlen)
  127.         {
  128.            ptr2 = ptr + statlen;
  129.            while ((*ptr2 != ' ') && (ptr2 != ptr))
  130.           ptr2--;
  131.            if (ptr2 == ptr)
  132.           ptr2 = ptr + statlen;
  133.            c = *ptr2;
  134.            *ptr2 = NULL;
  135.            printw("                                             %s\n",
  136.               ptr);
  137.            *ptr2 = c;
  138.            ptr = ptr2 + 1;
  139.            prcnt++;
  140.         }
  141.         printw("                                             %s\n",
  142.            ptr);
  143.         prcnt++;
  144.      }
  145.       }
  146.       pclose(in);
  147.       clrtobot();
  148.       refresh();
  149.       sleep(5);
  150.    }
  151. }
  152. -- 
  153. Ed Carp  N7EKG/6    erc@khijol.UUCP        ...uunet!khijol!erc
  154. Packet:  N7EKG @ N6IIU.#NOCAL.CA.US
  155. UUWEST Consulting    Alameda, CA        415/814-0550
  156.  
  157. Computers HAVE caused a revolution in how much information we
  158. can safely ignore!    --robs@ux1.cso.uiuc.edu (Rob Schaeffer)
  159.  
  160. -- Absolutely unabashed Gates McFadden groupie! --
  161.