home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / refer / flagger.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  2.1 KB  |  164 lines

  1. # include "stdio.h"
  2. char wds[100][40];
  3. int synwd[100];
  4. int mark[100];
  5. int justw 0;
  6. extern int comcount;
  7. int blank[100];
  8. int wdp, wdf;
  9. int bl;
  10. int sargc; char **sargv;
  11. FILE *inf;
  12. main(argc,argv)
  13.     char *argv[];
  14. {
  15. int i;
  16. while (--argc && **++argv== '-')
  17.     switch(argv[0][1])
  18.         {
  19.         case 'w': justw=1; break;
  20.         case 'c': comcount=atoi(argv[0]+2); break;
  21.         }
  22. wdp=wdf=0;
  23. if (argc>0)
  24.     {
  25.     argc--;
  26.     inf = fopen(argv[0], "r");
  27.     if (inf==NULL) exit(0);
  28.     argv++;
  29.     }
  30. else
  31.     inf=stdin;
  32. sargc=argc;  sargv= argv;
  33. while ( gw (wds[wdp = next(wdp)], &bl))
  34.     {
  35.     blank[wdp] = bl;
  36.     mark[wdp]=0;
  37.     synwd[wdp] = common(upcase(wds[wdp]));
  38.     if (common(sstrip(upcase(wds[wdp]))))
  39.         synwd[wdp]=1;
  40.     if (allpunct(wds[wdp]))
  41.         synwd[wdp]=1;
  42.     if (strlen(wds[wdp])<3)
  43.         synwd[wdp]=1;
  44.     if (synwd[wdp]==1)
  45.         {
  46.         for(i=wdp; i!=wdf; i=prev(i))
  47.             {
  48.             if (synwd[i]>0)
  49.                 continue;
  50.             mark[i]=1;
  51.             break;
  52.             }
  53.         }
  54.     }
  55. if (wdp<0) return(0);
  56. i=wdf -1;
  57. i = next(i);
  58. while (i != wdp)
  59.     i= next(i);
  60. }
  61. next(i)
  62. {
  63. int j;
  64. j = (i+1) % 100;
  65. if (j==wdf)
  66.     {
  67.     if (justw==0)
  68.         {
  69.         if (mark[j] ) putchar('*');
  70.         printf("%s",wds[j]);
  71.         if (blank[j]) putchar(' ');
  72.         }
  73.     else
  74.         if (mark[j]) printf("%s\n", wds[j]);
  75.     wdf = (wdf+1)%100;
  76.     }
  77. return(j);
  78. }
  79. prev(i)
  80. {
  81. i = (i-1)%100;
  82. return(i);
  83. }
  84. allpunct(s)
  85.  char *s;
  86. {
  87. int c;
  88. while (c = *s++)
  89.     if (isalpha(c))
  90.         return(0);
  91. return(1);
  92. }
  93. gw(s, b)
  94.     char *s;
  95.     int *b;
  96. {
  97. int c, type, nt;
  98. c = getc(inf);
  99. while (c==EOF)
  100.     {
  101.     fclose(inf);
  102.     inf=NULL;
  103.     if (sargc-->0)
  104.         {
  105.         inf = fopen ( *sargv++, "r");
  106.         }
  107.     if (inf==NULL) return(0);
  108.     c = getc(inf);
  109.     }
  110. *s++ = c;
  111. type = isalpha(c) || isdigit(c);
  112. while ( (c = getc(inf)) != EOF )
  113.     {
  114.     nt = isalpha(c) || isdigit(c);
  115.     if (nt==type)
  116.         *s++= c;
  117.     else
  118.         break;
  119.     }
  120. *s=0;
  121. if (c== ' ')
  122.     {
  123.     *b = 1;
  124.     return(1);
  125.     }
  126. while (c==EOF)
  127.     {
  128.     fclose(inf); inf=NULL;
  129.     if (sargc-- > 0)
  130.         {
  131.         inf= fopen( *sargv++, "r");
  132.         }
  133.     if (inf==NULL) return(0);
  134.     c = getc(inf);
  135.     }
  136. ungetc(c, inf);
  137. *b=0;
  138. return(1);
  139. }
  140. trimnl(s)
  141.  char *s;
  142. {
  143. while (*s) s++;
  144. if (*--s=='\n') *s=0;
  145. }
  146. upcase(s)
  147.  char *s;
  148. {
  149. static char buf[100];
  150. strcpy (buf, s);
  151. for(s=buf; *s; s++)
  152.     if (isupper(*s))
  153.         *s = *s-'A'+'a';
  154. return(buf);
  155. }
  156. sstrip(s)
  157.  char *s;
  158. {
  159. char *p ; p=s;
  160. while (*s) s++;
  161. if (*--s=='s') *s=0;
  162. return(p);
  163. }
  164.