home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / compiler / small_c / cb / sources / prt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-09-12  |  4.0 KB  |  170 lines

  1. /*
  2. ** prt.c -- print files with optional page skips, headings, and line numbers.
  3. **
  4. ** Copyright 1982 J. E. Hendrix.  All rights reserved.
  5. */
  6. #include <stdio.h>
  7. #include "tools.h"
  8. #define MARGIN1 0
  9. #define MARGIN2 1
  10. char name[MAXFN], inclext[MAXFN];
  11. int
  12.   i,
  13.   fin,
  14.   files,
  15.   headings,
  16.   skips,
  17.   numbers,
  18.   begin,
  19.   end,
  20.   ready,
  21.   pause;
  22. int lineno, pageno, margin;
  23. main(argc, argv) int argc, *argv; {
  24.   headings=skips=numbers=YES;
  25.   doargs(argc, argv);
  26.   if(iscons(stdout)) freopen("PRN", "w", stdout);
  27.   if(ready && isatty(stdout)) {
  28.     fputs("ready printer... ", stderr);
  29.     fgetc(stderr);
  30.     }
  31.   files=NO;
  32.   i=0;
  33.   while(getarg(++i, name, MAXFN, argc, argv)!=EOF) {
  34.     if((name[0]=='-')|(name[0]==EXTMARK)) continue;
  35.     files=YES;
  36.     fin=fopen(name, "r");
  37.     if(fin==0) cant(name);
  38.     pageno=lineno=0;
  39.     fprnt(name, fin);
  40.     fclose(fin);
  41.     if((lineno > 0)&(skips)) skip(PTRHIGH-lineno);
  42.     }
  43.   if(files==NO) {
  44.     pageno=lineno=0;
  45.     fprnt("<stdin>", stdin);
  46.     if((lineno > 0)&(skips)) skip(PTRHIGH-lineno);
  47.     }
  48.   fclose(stdout);
  49.   exit(0);
  50.   }
  51.  
  52. doargs(argc, argv) int argc, *argv; {
  53.   int i, j;
  54.   inclext[0]=NULL;
  55.   begin=0;
  56.   end=32767;
  57.   ready=YES;
  58.   pause=NO;
  59.   margin=0;
  60.   i=0;
  61.   while(getarg(++i, name, MAXFN, argc, argv)!=EOF) {
  62.     if(name[0]==EXTMARK) {
  63.       j=0;
  64.       while(inclext[j]=toupper(name[j])) ++j;
  65.       continue;
  66.       }
  67.     if(name[0]!='-') continue;
  68.     if((same(name[1], 'b'))&(same(name[2], 'p'))) {
  69.       utoi(name+3, &begin);
  70.       continue;
  71.       }
  72.     if((same(name[1], 'e'))&(same(name[2], 'p'))) {
  73.       utoi(name+3, &end);
  74.       continue;
  75.       }
  76.     if((same(name[1], 'l'))&(same(name[2], 'm'))) {
  77.       utoi(name+3, &margin);
  78.       continue;
  79.       }
  80.     if((same(name[1], 'n'))&(same(name[2], 'r'))) {
  81.       ready=NO;
  82.       continue;
  83.       }
  84.     if(same(name[1], 'p')) {
  85.       pause=YES;
  86.       continue;
  87.       }
  88.     if(same(name[1], 'n')) {
  89.       if(same(name[2], 'h')) {headings=NO; continue;}
  90.       if(same(name[2], 's')) {   skips=NO; continue;}
  91.       if(same(name[2], 'n')) { numbers=NO; continue;}
  92.       }
  93.     fputs("usage: PRT [file]... [.?] [-NN] [-NH|-NS]\n",
  94.           stderr);
  95.     fputs("     [-LM#] [-BP#] [-EP#] [-P] [-NR]\n", stderr);
  96.     abort(7);
  97.     }
  98.   }
  99.  
  100. fprnt(name, fin)
  101.   char name[]; int fin; {
  102.   char line[MAXLINE+1], word[MAXLINE+1];
  103.   int textline, fin2, i, temp;
  104.   textline=0;
  105.   while(fgets(line, MAXLINE+1, fin)!=NULL) {
  106.     poll(YES);
  107.     if((lineno==0)&(skips)) {
  108.       if(++pageno > end) exit(0);
  109.       if(pageno >= begin) {
  110.         page(pageno, pause, stdout);
  111.         skip(MARGIN1);
  112.         if(headings) {
  113.           temp=margin;
  114.           while(temp--) printf(" ", 0);
  115.           if(numbers) printf("      ", 0);
  116.           printf("File: %s    Page: %d\n", name, pageno, 2);
  117.           }
  118.         else printf("\n",0);
  119.         ++lineno;
  120.         skip(MARGIN2);
  121.         }
  122.       lineno=lineno+MARGIN1+MARGIN2;
  123.       }
  124.     ++textline;
  125.     ++lineno;
  126.     if(pageno >= begin) {
  127.       temp=margin;
  128.       while(temp--) printf(" ", 0);
  129.       if(numbers)
  130.         printf("%5d %s", textline, line, 2);
  131.       else printf("%s", line, 1);
  132.       }
  133.     if((lineno >= (PTRHIGH-PTRSKIP))&(skips)) {
  134.       skip(PTRHIGH-lineno);
  135.       lineno=0;
  136.       }
  137.     if(inclext[0]!=EXTMARK) continue;
  138.     i=0;
  139.     getwrd(line, &i, word);
  140.     if((lexcmp(word, "#include")==0) ||
  141.        (lexcmp(word, ".so")==0)) {
  142.       if(getwrd(line, &i, word) >= MAXFN) cant(word);
  143.       strip(word);
  144.       i=0;
  145.       while((word[i]!=EXTMARK) && (word[i])) ++i;
  146.       if((inclext[1]) &&
  147.          (lexcmp(word+i, inclext)!=0)) continue;
  148.       if((fin2=fopen(word, "r"))==NULL) cant(word);
  149.       fprnt(name, fin2);
  150.       fclose(fin2);
  151.       }
  152.     }
  153.   }
  154.  
  155. skip(n) int n; {
  156.   int i;
  157.   if(pageno < begin) return;
  158.   i=0;
  159.   while(++i <= n) {
  160.     poll(YES);
  161.     fputc('\n', stdout);
  162.     }
  163.   }
  164. #include "cant.c"
  165. #include "page.c"
  166. #include "same.c"
  167. #include "strip.c"
  168. #include "getwrd.c"
  169.  
  170.