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