home *** CD-ROM | disk | FTP | other *** search
- # 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);
- }
-