home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / cpgms.zip / SLIST.C < prev    next >
C/C++ Source or Header  |  1985-11-17  |  2KB  |  126 lines

  1. #include "stdio.h"
  2. #define END 0xff
  3. #define ERROR 0
  4. #define CPMEOF 0X1A
  5. #define NULL 0
  6. #define DeSmet 1
  7.  
  8.  
  9. char    *documentation[] = {
  10. "slist lists a few lines starting with a given line number.",
  11. "   slist [flags] [file] [<file] [>file]",
  12. "",
  13. "Flags are single characters preceeded by '-':",
  14. "   -snnn   Start at line nnn. Default is 1",
  15. "   -cnnn   Print nnn lines. Default is 20",
  16. "",
  17. "Input is from the given file or stdin, if none given.",
  18. "Output is to stdout.  To print add >PRN: to your command.",
  19. 0 };
  20.  
  21. int tflg = 0;
  22. int sflg = 1;
  23. int cflg = 20;
  24. int debug = 0;
  25.  
  26.  
  27. main(argc, argv)
  28. char *argv[];
  29. {
  30.    register char   *p;
  31.    register int    c, i;
  32.     int nfile;
  33.     char tolower();
  34.    FILE        *f;
  35.  
  36.    if (argc == 2 && argv[1][0] == '?' && argv[1][1] == 0) {
  37.       help(documentation);
  38.       return;
  39.       }
  40.    nfile = argc-1;
  41.    for (i=1; i < argc; ++i) {
  42.       p = argv[i];
  43.       if (*p == '-') {
  44.      ++p;
  45.      while (c = *p++) {
  46.         switch(tolower(c)) {
  47.  
  48.         case '?':
  49.            help(documentation);
  50.            break;
  51.  
  52.         case 'S':
  53.         case 's':
  54.            sflg = atoi(p);
  55.            while (isdigit(*p)) p++;
  56.            break;
  57.  
  58.         case 'C':
  59.         case 'c':
  60.            cflg = atoi(p);
  61.            while (isdigit(*p)) p++;
  62.            break;
  63.  
  64.         case 'D':
  65.         case 'd':
  66.            debug++;
  67.            break;
  68.  
  69.  
  70.         default:
  71.            usage("Unknown flag");
  72.         }
  73.      }
  74.      argv[i] = 0;
  75.      --nfile;
  76.       }
  77.    }
  78.     if (nfile == 0)
  79.         slist(stdin, 0);
  80.     else if (nfile > 1)
  81.         usage("Too many filenames");
  82.     else
  83.         if ((f=fopen(p, "r")) == NULL)
  84.            cant(p);
  85.         else {
  86.            slist(f, p);
  87.            fclose(f);
  88.         }
  89. }
  90.  
  91.  
  92. /*******************************************************/
  93.  
  94. usage(s)
  95. char    *s;
  96. {
  97.    puts("?SLIST-E-");
  98.    puts(s);
  99.    puts("\n");
  100.    puts("Usage: slist [-snnn] [-cnnn] [file] [<file] [>file].  \n");
  101.    puts(" slist ? for help\n");
  102.    exit(1);
  103. }
  104.  
  105.  
  106. /*******************************************************/
  107.  
  108. slist(fp, fn)
  109. FILE       *fp;       /* File to process        */
  110. char       *fn;       /* File name (for -f option)  */
  111. /*
  112.  * short list of file from line# sflg for cflg lines.
  113.  */
  114. {
  115.     char buff[512];
  116.     int iflg, fgets(), fputs();
  117.  
  118.     iflg = 1;
  119.     while (iflg++ < sflg)
  120.         if (!fgets(buff,sizeof(buff),fp))
  121.             break;
  122.     for (iflg=1; iflg < cflg; iflg++)
  123.          if (fgets(buff,sizeof(buff),fp))
  124.             fputs(buff,stdout);
  125. }
  126.