|
|
1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.