1*12307Stut #ifndef lint 2*12307Stut static char *sccsid = "@(#)what1.c 4.1 (Berkeley) 05/06/83"; 3*12307Stut #endif 4*12307Stut 5*12307Stut #include "what..c" 6*12307Stut 7*12307Stut struct filans files[NFILES]; 8*12307Stut char fnames[NAMES]; 9*12307Stut int relfeed 0; 10*12307Stut char *rb[NFEED]; 11*12307Stut char rbb[200], *rbp rbb; 12*12307Stut ; 13*12307Stut 14*12307Stut main(argc,argv) 15*12307Stut char *argv[]; 16*12307Stut { 17*12307Stut char *s, *t, *xargv[50], *wd[50]; 18*12307Stut struct filans *af; 19*12307Stut int xargc 0, nw, nf, i; 20*12307Stut while (argc>1 && argv[1][0]=='-') 21*12307Stut { 22*12307Stut switch(argv[1][1]) 23*12307Stut { 24*12307Stut case 'r': 25*12307Stut relfeed=1; 26*12307Stut break; 27*12307Stut } 28*12307Stut argc--; 29*12307Stut argv++; 30*12307Stut } 31*12307Stut if (argc<=1) 32*12307Stut { 33*12307Stut printf("No query.\n"); 34*12307Stut return(0); 35*12307Stut } 36*12307Stut nf = doclook(argc,argv,0); 37*12307Stut printf(" %d files\n",nf); 38*12307Stut if (relfeed && nf>NFEED) 39*12307Stut { 40*12307Stut wrdoc(NFEED, argc, argv, 1); 41*12307Stut nw = freqwd (rb, wd, argc); 42*12307Stut for(i=0; rb[i]; i++) 43*12307Stut unlink(rb[i]); 44*12307Stut } 45*12307Stut for(i=0; i<argc; i++) 46*12307Stut xargv[xargc++]=argv[i]; 47*12307Stut if (relfeed) 48*12307Stut { 49*12307Stut printf("Adding: "); 50*12307Stut for(i=0; i<nw; i++) 51*12307Stut if (!lfind(wd[i], xargc, xargv)) 52*12307Stut printf("%s ", xargv[xargc++]=wd[i]); 53*12307Stut printf("\n"); 54*12307Stut nf = doclook(xargc, xargv, relfeed? xargc/4 : 0); 55*12307Stut printf(" %d files\n",nf); 56*12307Stut } 57*12307Stut shell (nf, comp, exch); 58*12307Stut wrdoc(nf, xargc, xargv, 0); 59*12307Stut return(0); 60*12307Stut } 61*12307Stut 62*12307Stut exch( i1, i2 ) 63*12307Stut { 64*12307Stut struct filans *p1, *p2; 65*12307Stut struct filans xt; 66*12307Stut p1=files+i1; 67*12307Stut p2=files+i2; 68*12307Stut xt = *p1; 69*12307Stut *p1 = *p2; 70*12307Stut *p2 = xt; 71*12307Stut } 72*12307Stut 73*12307Stut comp(i1, i2) 74*12307Stut { 75*12307Stut struct filans *p1, *p2; 76*12307Stut p1 = files+i1; 77*12307Stut p2= files+i2; 78*12307Stut if (p1->fdate != p2->fdate) 79*12307Stut return(p2->fdate > p1->fdate); 80*12307Stut return(p2->uid >= p1->uid); 81*12307Stut } 82*12307Stut 83*12307Stut wrdoc ( np, argc, argv, relfeed ) 84*12307Stut { 85*12307Stut struct filans *af; 86*12307Stut char *s, *t, buf[200]; 87*12307Stut int eval, k, pid; 88*12307Stut FILE *rf NULL; 89*12307Stut FILE *ans NULL; 90*12307Stut pid=getpid(); 91*12307Stut for(af=files; af<files+np; af++) 92*12307Stut { 93*12307Stut t = ctime(&af->fdate); 94*12307Stut getpw(af->uid, s=buf); 95*12307Stut while (*s && *s!=':') s++; 96*12307Stut *s=0; 97*12307Stut printf("%s (%.20s) %s, %ld bytes\n",af->nm,t+4,buf,af->size); 98*12307Stut if (relfeed) 99*12307Stut { 100*12307Stut k=af-files; 101*12307Stut _assert (k<NFEED); 102*12307Stut sprintf(rb[k]=rbp, "rf%d.%d",pid, k); 103*12307Stut rf = fopen(rb[k], "w"); 104*12307Stut while (*rbp++); 105*12307Stut } 106*12307Stut describe(af->nm, argc,argv, rf); 107*12307Stut if (relfeed) 108*12307Stut { 109*12307Stut printf("You like that one?"); 110*12307Stut fflush(stdout); 111*12307Stut fgets(buf, 100, stdin); 112*12307Stut switch(buf[0]) 113*12307Stut { 114*12307Stut case 'y': 115*12307Stut case 'Y': 116*12307Stut eval=1; 117*12307Stut break; 118*12307Stut case 'n': 119*12307Stut case 'N': 120*12307Stut eval = -1; 121*12307Stut break; 122*12307Stut default: 123*12307Stut eval=0; 124*12307Stut break; 125*12307Stut } 126*12307Stut fclose(rf); 127*12307Stut if (eval<=0) 128*12307Stut { 129*12307Stut unlink(rb[k]); 130*12307Stut rb[k][0]=0; 131*12307Stut } 132*12307Stut } 133*12307Stut } 134*12307Stut if (relfeed) rb[np]=0; 135*12307Stut } 136*12307Stut 137*12307Stut lfind( wl, n, wds) 138*12307Stut char *wl, *wds[]; 139*12307Stut { 140*12307Stut int i; 141*12307Stut for(i=0; i<n; i++) 142*12307Stut if (str6cmp(wl, wds[i])==0) 143*12307Stut return(1); 144*12307Stut return(0); 145*12307Stut } 146*12307Stut 147*12307Stut str6cmp(s, t) 148*12307Stut char *s, *t; 149*12307Stut { 150*12307Stut int i 0, c; 151*12307Stut while ( (c= *s++ ) == ( *t++)) 152*12307Stut if (c==0 || ++i ==6) 153*12307Stut return(0); 154*12307Stut return(1); 155*12307Stut } 156