Commit | Line | Data |
---|---|---|
cf87d959 BT |
1 | #ifndef lint |
2 | static char *sccsid = "@(#)flagger.c 4.1 (Berkeley) %G%"; | |
3 | #endif | |
4 | ||
5 | #include <stdio.h> | |
6 | ||
7 | char wds[100][40]; | |
8 | int synwd[100]; | |
9 | int mark[100]; | |
10 | int justw = 0; | |
11 | extern int comcount; | |
12 | int blank[100]; | |
13 | int wdp, wdf; | |
14 | int bl; | |
15 | int sargc; | |
16 | char **sargv; | |
17 | FILE *inf; | |
18 | ||
19 | main(argc,argv) | |
20 | char *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 | ||
74 | next(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 | ||
93 | prev(i) | |
94 | { | |
95 | i = (i-1)%100; | |
96 | return(i); | |
97 | } | |
98 | ||
99 | allpunct(s) | |
100 | char *s; | |
101 | { | |
102 | int c; | |
103 | while (c = *s++) | |
104 | if (isalpha(c)) | |
105 | return(0); | |
106 | return(1); | |
107 | } | |
108 | ||
109 | gw(s, b) | |
110 | char *s; | |
111 | int *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 | ||
158 | trimnl(s) | |
159 | char *s; | |
160 | { | |
161 | while (*s) s++; | |
162 | if (*--s=='\n') *s=0; | |
163 | } | |
164 | ||
165 | upcase(s) | |
166 | char *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 | ||
176 | sstrip(s) | |
177 | char *s; | |
178 | { | |
179 | char *p ; | |
180 | p=s; | |
181 | while (*s) s++; | |
182 | if (*--s=='s') *s=0; | |
183 | return(p); | |
184 | } |