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: }
Defined functions
gw
defined in line
93; used 1 times
main
defined in line
12;
never used
next
defined in line
61; used 3 times
prev
defined in line
79; used 1 times
Defined variables
bl
defined in line
9; used 2 times
blank
defined in line
7; used 2 times
justw
defined in line
5; used 2 times
mark
defined in line
4; used 4 times
sargc
defined in line
10; used 3 times
sargv
defined in line
10; used 3 times
synwd
defined in line
3; used 6 times
wdf
defined in line
8; used 6 times
wdp
defined in line
8; used 17 times
wds
defined in line
2; used 7 times