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