# include "what..c" struct filans files[NFILES]; char fnames[NAMES]; int relfeed 0; char *rb[NFEED]; char rbb[200], *rbp rbb;; main(argc,argv) char *argv[]; { char *s, *t, *xargv[50], *wd[50]; struct filans *af; int xargc 0, nw, nf, i; while (argc>1 && argv[1][0]=='-') { switch(argv[1][1]) { case 'r': relfeed=1; break; } argc--; argv++; } if (argc<=1) { printf("No query.\n"); return(0); } nf = doclook(argc,argv,0); printf(" %d files\n",nf); if (relfeed && nf>NFEED) { wrdoc(NFEED, argc, argv, 1); nw = freqwd (rb, wd, argc); for(i=0; rb[i]; i++) unlink(rb[i]); } for(i=0; i<argc; i++) xargv[xargc++]=argv[i]; if (relfeed) { printf("Adding: "); for(i=0; i<nw; i++) if (!lfind(wd[i], xargc, xargv)) printf("%s ", xargv[xargc++]=wd[i]); printf("\n"); nf = doclook(xargc, xargv, relfeed? xargc/4 : 0); printf(" %d files\n",nf); } shell (nf, comp, exch); wrdoc(nf, xargc, xargv, 0); return(0); } exch( i1, i2 ) { struct filans *p1, *p2; struct filans xt; p1=files+i1; p2=files+i2; xt = *p1; *p1 = *p2; *p2 = xt; } comp(i1, i2) { struct filans *p1, *p2; p1 = files+i1; p2= files+i2; if (p1->fdate != p2->fdate) return(p2->fdate > p1->fdate); return(p2->uid >= p1->uid); } wrdoc ( np, argc, argv, relfeed ) { struct filans *af; char *s, *t, buf[200]; int eval, k, pid; FILE *rf NULL; FILE *ans NULL; pid=getpid(); for(af=files; af<files+np; af++) { t = ctime(&af->fdate); getpw(af->uid, s=buf); while (*s && *s!=':') s++; *s=0; printf("%s (%.20s) %s, %ld bytes\n",af->nm,t+4,buf,af->size); if (relfeed) { k=af-files; _assert (k<NFEED); sprintf(rb[k]=rbp, "rf%d.%d",pid, k); rf = fopen(rb[k], "w"); while (*rbp++); } describe(af->nm, argc,argv, rf); if (relfeed) { printf("You like that one?"); fflush(stdout); fgets(buf, 100, stdin); switch(buf[0]) { case 'y': case 'Y': eval=1; break; case 'n': case 'N': eval = -1; break; default: eval=0; break; } fclose(rf); if (eval<=0) { unlink(rb[k]); rb[k][0]=0; } } } if (relfeed) rb[np]=0; } lfind( wl, n, wds) char *wl, *wds[]; { int i; for(i=0; i<n; i++) if (str6cmp(wl, wds[i])==0) return(1); return(0); } str6cmp(s, t) char *s, *t; { int i 0, c; while ( (c= *s++ ) == ( *t++)) if (c==0 || ++i ==6) return(0); return(1); }