# include "stdio.h"
# include "error.h"
#include "refer.h"
Builtin builtins[] = {{0}}; /* no built-in commands to corout */
FILE *fd = NULL;
int colevel = 0;
int soutlen = 1000;
int reached = 0;
int prfreqs = 0;
char usedir[100];
char *referlib = "/bin/refer";
char gfile[50];
static int full = 1000;
static int tags = 0;
char *sinput, *soutput, *tagout;
long indexdate = 0;
#define MAXOUT 32767
void
main(int argc, char **argv)
{
/* read query from stdin, expect name of indexes in argv[1] */
static FILE *fa, *fb, *fc;
char nma[100], nmb[100], nmc[100], *qitem[NITEM], *rprog = 0;
char nmd[100];
static char oldname[DIRLEN] ;
static int was = 0;
List *drops;
int alldrops = 0, nitem;
Index ind;
/* special wart for refpart: default is tags only */
progname = mkprogname(argv[0]);
drops = 0;
initindex(&ind);
for (; argc > 1 && argv[1][0] == '-'; argc--, argv++) {
switch (argv[1][1]) {
case 'a': /* all output, incl. false drops */
alldrops = 1;
break;
case 'r':
argc--;
argv++;
rprog = argv[1];
break;
case 'F': /* put out full text */
full = setfrom(argv[1][2]);
break;
case 'T': /* put out tags */
tags = setfrom(argv[1][2]);
break;
case 'i': /* input in argument string */
argc--;
argv++;
sinput = argv[1];
break;
case 's': /*text output to string */
case 'o':
argc--;
argv++;
soutput = argv[1];
if ((int)argv[2] < 16000) {
soutlen = (int)argv[2];
argc--;
argv++;
}
break;
case 't': /*tag output to string */
argc--;
argv++;
tagout = argv[1];
break;
case 'l': /* length of internal lists */
argc--;
argv++;
break;
case 'g': /* suppress fgrep search on old files */
break;
case 'C': /* coordination level */
colevel = atoi(argv[1] + 2);
# if D1
fprintf(stderr, "colevel set to %d\n", colevel);
#endif
break;
case 'P': /* print term freqs */
prfreqs = 1;
break;
}
}
strcpy (nma, todir(argv[1]));
if (was == 0 || strcmp (oldname, nma) != 0) {
strcpy (oldname, nma);
strcpy (nmb, nma);
strcpy (nmc, nmb);
strcpy(nmd, nma);
strcat (nma, ".ia");
strcat (nmb, ".ib");
strcat (nmc, ".ic");
strcat (nmd, ".id");
if (was) {
fclose(fa);
fclose(fb);
fclose(fc);
}
fa = fopen(nma, "r");
if (fa == NULL)
err("can't find index files %s.i[abc] - run pubindex", oldname);
fb = fopen(nmb, "r");
fc = fopen(nmc, "r");
was = 1;
if (fb == NULL || fc == NULL) {
err("Index incomplete %s", nmb);
exit(1);
}
indexdate = gdate(fb);
fd = fopen(nmd, "r");
}
xseek(fa, 0, 0);
getindex(&ind, fa);
for (;;) {
nitem = getq(qitem, NITEM);
if (nitem == 0)
continue;
if (nitem < 0)
break;
if (tagout)
tagout[0] = 0;
if (fb != NULL) {
drops = doquery(&ind, fb, nitem, qitem);
# if D1
fprintf(stderr, "after doquery nfound %d\n", nfound);
#endif
if (!alldrops)
dropout(drops, fc, nitem, qitem, rprog, full);
# if D1
fprintf(stderr, "after dropout nfound %d\n", drops->n);
#endif
}
if (tags && drops)
result(drops, tags, fc);
}
exit(0);
}
|