113111Srrh #ifndef lint
2*60507Sbostic static char sccsid[] = "@(#)lookup.c 2.6 05/27/93";
313111Srrh #endif not lint
412914Sgarrison # include "stdio.h"
512914Sgarrison # include "streams.h"
612914Sgarrison # include "bib.h"
712914Sgarrison
812914Sgarrison char *locate();
912914Sgarrison
1015889Srrh int fflag = 0; /* print out file names */
1123487Sgarrison int Aflag = 0; /* print hits from All indexes */
1212914Sgarrison int max_klen = 6; /* max length of keys */
1312914Sgarrison char INDEX[maxstr] = /* name of index file */
1412914Sgarrison INDXFILE;
1512914Sgarrison
1612914Sgarrison int argc;
1712914Sgarrison char **argv;
1812914Sgarrison
main(argcount,arglist)1912914Sgarrison main(argcount,arglist)
2012914Sgarrison int argcount;
2112914Sgarrison char **arglist;
2212914Sgarrison { char *refs;
2312914Sgarrison char keys[maxstr];
2412914Sgarrison char *p,*q;
2512914Sgarrison char one_index[maxstr];
2623487Sgarrison int found;
2712914Sgarrison
28*60507Sbostic InitDirectory(BMACLIB,N_BMACLIB);
29*60507Sbostic InitDirectory(COMFILE,N_COMFILE);
3017250Srrh
3112914Sgarrison argc= argcount-1;
3212914Sgarrison argv= arglist+1;
3312914Sgarrison flags();
3412914Sgarrison
3512914Sgarrison /* add SYSINDEX to search path. all names are comma terminated */
3612914Sgarrison strcat(INDEX, ",");
3712914Sgarrison strcat(INDEX, SYSINDEX);
3812914Sgarrison strcat(INDEX, ",");
3912914Sgarrison
4012914Sgarrison while (fgets(keys,maxstr,stdin)!=NULL)
4123487Sgarrison { found = 0;
4223487Sgarrison for (p = one_index, q = INDEX; *q != 0 ; q++)
4312914Sgarrison if (*q == ',' )
4412914Sgarrison { *p = 0;
45*60507Sbostic refs = locate(keys, one_index, max_klen, COMFILE);
4612914Sgarrison if( refs==NULL )
47*60507Sbostic { fprintf(stderr,"%s removed from index list.\n", one_index);
4812914Sgarrison /* delete this file name (shift remainder on top) */
4912914Sgarrison strcpy(q-strlen(one_index),q+1);
5012914Sgarrison q = q-strlen(one_index)-1;
5112914Sgarrison }
5223487Sgarrison if (refs!=NULL && *refs!=NULL)
5323487Sgarrison {
5423487Sgarrison printf("%s", refs);
5523487Sgarrison free(refs);
5623487Sgarrison found = 1;
5723487Sgarrison if (!Aflag) break;
5823487Sgarrison }
5912914Sgarrison p = one_index;
6012914Sgarrison }
6112914Sgarrison else *p++ = *q;
6212914Sgarrison
6323487Sgarrison if (!found) printf("No references found.\n");
6412914Sgarrison }
6512914Sgarrison exit(0);
6612914Sgarrison }
6712914Sgarrison
6812914Sgarrison # define operand (strlen(*argv+2)==0 ? (argv++,argc--,*argv) : *argv+2)
6912914Sgarrison
flags()7012914Sgarrison flags()
7117250Srrh {
7217250Srrh char *p;
7317250Srrh for (; argc>0 && *argv[0]=='-'; argc--,argv++)
7412914Sgarrison { switch ((*argv)[1])
7512914Sgarrison { case 'l': max_klen= atoi(operand);
7612914Sgarrison break;
7715889Srrh case 'f': fflag++;
7815889Srrh break;
79*60507Sbostic case 'c': strcpy(COMFILE, operand);
8012914Sgarrison break;
8123487Sgarrison case 'A': Aflag++;
8223487Sgarrison break;
8312914Sgarrison case 'p': strcpy(INDEX,operand);
8412914Sgarrison break;
8517250Srrh case 'd':
8617250Srrh p = &argv[0][2];
8717250Srrh if (!p) {
8817250Srrh argv++;
8917250Srrh p = &argv[0][0];
9017250Srrh }
9117250Srrh strreplace(COMFILE, BMACLIB, p);
9217250Srrh strcpy(BMACLIB, p);
9317250Srrh break;
9412914Sgarrison default: fprintf(stderr, "unknown flag '%s'\n", *argv);
9512914Sgarrison }
9612914Sgarrison }
9712914Sgarrison }
98