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