1*48292Sbostic /*-
2*48292Sbostic * %sccs.include.proprietary.c%
3*48292Sbostic */
4*48292Sbostic
512307Stut #ifndef lint
6*48292Sbostic static char sccsid[] = "@(#)what1.c 4.3 (Berkeley) 04/18/91";
7*48292Sbostic #endif /* not lint */
812307Stut
912307Stut #include "what..c"
1012307Stut
1112307Stut struct filans files[NFILES];
1212307Stut char fnames[NAMES];
1332129Sbostic int relfeed = 0;
1412307Stut char *rb[NFEED];
1532129Sbostic char rbb[200], *rbp = rbb;
1612307Stut ;
1712307Stut
main(argc,argv)1812307Stut main(argc,argv)
1912307Stut char *argv[];
2012307Stut {
2112307Stut char *s, *t, *xargv[50], *wd[50];
2212307Stut struct filans *af;
2332129Sbostic int xargc = 0, nw, nf, i;
2412307Stut while (argc>1 && argv[1][0]=='-')
2512307Stut {
2612307Stut switch(argv[1][1])
2712307Stut {
2812307Stut case 'r':
2912307Stut relfeed=1;
3012307Stut break;
3112307Stut }
3212307Stut argc--;
3312307Stut argv++;
3412307Stut }
3512307Stut if (argc<=1)
3612307Stut {
3712307Stut printf("No query.\n");
3812307Stut return(0);
3912307Stut }
4012307Stut nf = doclook(argc,argv,0);
4112307Stut printf(" %d files\n",nf);
4212307Stut if (relfeed && nf>NFEED)
4312307Stut {
4412307Stut wrdoc(NFEED, argc, argv, 1);
4512307Stut nw = freqwd (rb, wd, argc);
4612307Stut for(i=0; rb[i]; i++)
4712307Stut unlink(rb[i]);
4812307Stut }
4912307Stut for(i=0; i<argc; i++)
5012307Stut xargv[xargc++]=argv[i];
5112307Stut if (relfeed)
5212307Stut {
5312307Stut printf("Adding: ");
5412307Stut for(i=0; i<nw; i++)
5512307Stut if (!lfind(wd[i], xargc, xargv))
5612307Stut printf("%s ", xargv[xargc++]=wd[i]);
5712307Stut printf("\n");
5812307Stut nf = doclook(xargc, xargv, relfeed? xargc/4 : 0);
5912307Stut printf(" %d files\n",nf);
6012307Stut }
6112307Stut shell (nf, comp, exch);
6212307Stut wrdoc(nf, xargc, xargv, 0);
6312307Stut return(0);
6412307Stut }
6512307Stut
exch(i1,i2)6612307Stut exch( i1, i2 )
6712307Stut {
6812307Stut struct filans *p1, *p2;
6912307Stut struct filans xt;
7012307Stut p1=files+i1;
7112307Stut p2=files+i2;
7212307Stut xt = *p1;
7312307Stut *p1 = *p2;
7412307Stut *p2 = xt;
7512307Stut }
7612307Stut
comp(i1,i2)7712307Stut comp(i1, i2)
7812307Stut {
7912307Stut struct filans *p1, *p2;
8012307Stut p1 = files+i1;
8112307Stut p2= files+i2;
8212307Stut if (p1->fdate != p2->fdate)
8312307Stut return(p2->fdate > p1->fdate);
8412307Stut return(p2->uid >= p1->uid);
8512307Stut }
8612307Stut
wrdoc(np,argc,argv,relfeed)8712307Stut wrdoc ( np, argc, argv, relfeed )
8812307Stut {
8912307Stut struct filans *af;
9032129Sbostic char *s, *t, buf[200], *ctime();
9112307Stut int eval, k, pid;
9232129Sbostic FILE *rf = NULL;
9332129Sbostic FILE *ans = NULL;
9412307Stut pid=getpid();
9512307Stut for(af=files; af<files+np; af++)
9612307Stut {
9712307Stut t = ctime(&af->fdate);
9812307Stut getpw(af->uid, s=buf);
9912307Stut while (*s && *s!=':') s++;
10012307Stut *s=0;
10112307Stut printf("%s (%.20s) %s, %ld bytes\n",af->nm,t+4,buf,af->size);
10212307Stut if (relfeed)
10312307Stut {
10412307Stut k=af-files;
10512307Stut _assert (k<NFEED);
10612307Stut sprintf(rb[k]=rbp, "rf%d.%d",pid, k);
10712307Stut rf = fopen(rb[k], "w");
10812307Stut while (*rbp++);
10912307Stut }
11012307Stut describe(af->nm, argc,argv, rf);
11112307Stut if (relfeed)
11212307Stut {
11312307Stut printf("You like that one?");
11412307Stut fflush(stdout);
11512307Stut fgets(buf, 100, stdin);
11612307Stut switch(buf[0])
11712307Stut {
11812307Stut case 'y':
11912307Stut case 'Y':
12012307Stut eval=1;
12112307Stut break;
12212307Stut case 'n':
12312307Stut case 'N':
12412307Stut eval = -1;
12512307Stut break;
12612307Stut default:
12712307Stut eval=0;
12812307Stut break;
12912307Stut }
13012307Stut fclose(rf);
13112307Stut if (eval<=0)
13212307Stut {
13312307Stut unlink(rb[k]);
13412307Stut rb[k][0]=0;
13512307Stut }
13612307Stut }
13712307Stut }
13812307Stut if (relfeed) rb[np]=0;
13912307Stut }
14012307Stut
lfind(wl,n,wds)14112307Stut lfind( wl, n, wds)
14212307Stut char *wl, *wds[];
14312307Stut {
14412307Stut int i;
14512307Stut for(i=0; i<n; i++)
14612307Stut if (str6cmp(wl, wds[i])==0)
14712307Stut return(1);
14812307Stut return(0);
14912307Stut }
15012307Stut
str6cmp(s,t)15112307Stut str6cmp(s, t)
15212307Stut char *s, *t;
15312307Stut {
15432129Sbostic int i = 0, c;
15512307Stut while ( (c= *s++ ) == ( *t++))
15612307Stut if (c==0 || ++i ==6)
15712307Stut return(0);
15812307Stut return(1);
15912307Stut }
160