1 #ifndef lint
2 static char *sccsid = "@(#)what1.c	4.1 (Berkeley) 05/06/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 }
156