Commit | Line | Data |
---|---|---|
2b1a705e TL |
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 | } |