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