1*48291Sbostic /*-
2*48291Sbostic * %sccs.include.proprietary.c%
3*48291Sbostic */
4*48291Sbostic
512277Stut #ifndef lint
6*48291Sbostic static char sccsid[] = "@(#)flagger.c 4.2 (Berkeley) 04/18/91";
7*48291Sbostic #endif /* not lint */
812277Stut
912277Stut #include <stdio.h>
1012277Stut
1112277Stut char wds[100][40];
1212277Stut int synwd[100];
1312277Stut int mark[100];
1412277Stut int justw = 0;
1512277Stut extern int comcount;
1612277Stut int blank[100];
1712277Stut int wdp, wdf;
1812277Stut int bl;
1912277Stut int sargc;
2012277Stut char **sargv;
2112277Stut FILE *inf;
2212277Stut
main(argc,argv)2312277Stut main(argc,argv)
2412277Stut char *argv[];
2512277Stut {
2612277Stut int i;
2712277Stut while (--argc && **++argv== '-')
2812277Stut switch(argv[0][1])
2912277Stut {
3012277Stut case 'w':
3112277Stut justw=1;
3212277Stut break;
3312277Stut case 'c':
3412277Stut comcount=atoi(argv[0]+2);
3512277Stut break;
3612277Stut }
3712277Stut wdp=wdf=0;
3812277Stut if (argc>0)
3912277Stut {
4012277Stut argc--;
4112277Stut inf = fopen(argv[0], "r");
4212277Stut if (inf==NULL) exit(0);
4312277Stut argv++;
4412277Stut }
4512277Stut else
4612277Stut inf=stdin;
4712277Stut sargc=argc;
4812277Stut sargv= argv;
4912277Stut while ( gw (wds[wdp = next(wdp)], &bl))
5012277Stut {
5112277Stut blank[wdp] = bl;
5212277Stut mark[wdp]=0;
5312277Stut synwd[wdp] = common(upcase(wds[wdp]));
5412277Stut if (common(sstrip(upcase(wds[wdp]))))
5512277Stut synwd[wdp]=1;
5612277Stut if (allpunct(wds[wdp]))
5712277Stut synwd[wdp]=1;
5812277Stut if (strlen(wds[wdp])<3)
5912277Stut synwd[wdp]=1;
6012277Stut if (synwd[wdp]==1)
6112277Stut {
6212277Stut for(i=wdp; i!=wdf; i=prev(i))
6312277Stut {
6412277Stut if (synwd[i]>0)
6512277Stut continue;
6612277Stut mark[i]=1;
6712277Stut break;
6812277Stut }
6912277Stut }
7012277Stut }
7112277Stut if (wdp<0) return(0);
7212277Stut i=wdf -1;
7312277Stut i = next(i);
7412277Stut while (i != wdp)
7512277Stut i= next(i);
7612277Stut }
7712277Stut
next(i)7812277Stut next(i)
7912277Stut {
8012277Stut int j;
8112277Stut j = (i+1) % 100;
8212277Stut if (j==wdf)
8312277Stut {
8412277Stut if (justw==0)
8512277Stut {
8612277Stut if (mark[j] ) putchar('*');
8712277Stut printf("%s",wds[j]);
8812277Stut if (blank[j]) putchar(' ');
8912277Stut }
9012277Stut else
9112277Stut if (mark[j]) printf("%s\n", wds[j]);
9212277Stut wdf = (wdf+1)%100;
9312277Stut }
9412277Stut return(j);
9512277Stut }
9612277Stut
prev(i)9712277Stut prev(i)
9812277Stut {
9912277Stut i = (i-1)%100;
10012277Stut return(i);
10112277Stut }
10212277Stut
allpunct(s)10312277Stut allpunct(s)
10412277Stut char *s;
10512277Stut {
10612277Stut int c;
10712277Stut while (c = *s++)
10812277Stut if (isalpha(c))
10912277Stut return(0);
11012277Stut return(1);
11112277Stut }
11212277Stut
gw(s,b)11312277Stut gw(s, b)
11412277Stut char *s;
11512277Stut int *b;
11612277Stut {
11712277Stut int c, type, nt;
11812277Stut c = getc(inf);
11912277Stut while (c==EOF)
12012277Stut {
12112277Stut fclose(inf);
12212277Stut inf=NULL;
12312277Stut if (sargc-->0)
12412277Stut {
12512277Stut inf = fopen ( *sargv++, "r");
12612277Stut }
12712277Stut if (inf==NULL) return(0);
12812277Stut c = getc(inf);
12912277Stut }
13012277Stut *s++ = c;
13112277Stut type = isalpha(c) || isdigit(c);
13212277Stut while ( (c = getc(inf)) != EOF )
13312277Stut {
13412277Stut nt = isalpha(c) || isdigit(c);
13512277Stut if (nt==type)
13612277Stut *s++= c;
13712277Stut else
13812277Stut break;
13912277Stut }
14012277Stut *s=0;
14112277Stut if (c== ' ')
14212277Stut {
14312277Stut *b = 1;
14412277Stut return(1);
14512277Stut }
14612277Stut while (c==EOF)
14712277Stut {
14812277Stut fclose(inf);
14912277Stut inf=NULL;
15012277Stut if (sargc-- > 0)
15112277Stut {
15212277Stut inf= fopen( *sargv++, "r");
15312277Stut }
15412277Stut if (inf==NULL) return(0);
15512277Stut c = getc(inf);
15612277Stut }
15712277Stut ungetc(c, inf);
15812277Stut *b=0;
15912277Stut return(1);
16012277Stut }
16112277Stut
trimnl(s)16212277Stut trimnl(s)
16312277Stut char *s;
16412277Stut {
16512277Stut while (*s) s++;
16612277Stut if (*--s=='\n') *s=0;
16712277Stut }
16812277Stut
upcase(s)16912277Stut upcase(s)
17012277Stut char *s;
17112277Stut {
17212277Stut static char buf[100];
17312277Stut strcpy (buf, s);
17412277Stut for(s=buf; *s; s++)
17512277Stut if (isupper(*s))
17612277Stut *s = *s-'A'+'a';
17712277Stut return(buf);
17812277Stut }
17912277Stut
sstrip(s)18012277Stut sstrip(s)
18112277Stut char *s;
18212277Stut {
18312277Stut char *p ;
18412277Stut p=s;
18512277Stut while (*s) s++;
18612277Stut if (*--s=='s') *s=0;
18712277Stut return(p);
18812277Stut }
189