113111Srrh #ifndef lint 2*15889Srrh static char sccsid[] = "@(#)lookup.c 2.3 01/24/84"; 313111Srrh #endif not lint 412914Sgarrison # include "stdio.h" 512914Sgarrison # include "streams.h" 612914Sgarrison # include "bib.h" 712914Sgarrison 812914Sgarrison char *locate(); 912914Sgarrison 10*15889Srrh int fflag = 0; /* print out file names */ 1112914Sgarrison int max_klen = 6; /* max length of keys */ 1212914Sgarrison char *common = /* name of file of common words */ 1312914Sgarrison COMFILE; 1412914Sgarrison char INDEX[maxstr] = /* name of index file */ 1512914Sgarrison INDXFILE; 1612914Sgarrison 1712914Sgarrison int argc; 1812914Sgarrison char **argv; 1912914Sgarrison 2012914Sgarrison main(argcount,arglist) 2112914Sgarrison int argcount; 2212914Sgarrison char **arglist; 2312914Sgarrison { char *refs; 2412914Sgarrison char keys[maxstr]; 2512914Sgarrison char *p,*q; 2612914Sgarrison char one_index[maxstr]; 2712914Sgarrison 2812914Sgarrison argc= argcount-1; 2912914Sgarrison argv= arglist+1; 3012914Sgarrison flags(); 3112914Sgarrison 3212914Sgarrison /* add SYSINDEX to search path. all names are comma terminated */ 3312914Sgarrison strcat(INDEX, ","); 3412914Sgarrison strcat(INDEX, SYSINDEX); 3512914Sgarrison strcat(INDEX, ","); 3612914Sgarrison 3712914Sgarrison while (fgets(keys,maxstr,stdin)!=NULL) 3812914Sgarrison { for (p = one_index, q = INDEX; *q != 0 ; q++) 3912914Sgarrison if (*q == ',' ) 4012914Sgarrison { *p = 0; 4112914Sgarrison refs = locate(keys, one_index, max_klen, common); 4212914Sgarrison if( refs==NULL ) 4312914Sgarrison { fprintf(stderr, 4412914Sgarrison "%s removed from index list.\n", one_index); 4512914Sgarrison /* delete this file name (shift remainder on top) */ 4612914Sgarrison strcpy(q-strlen(one_index),q+1); 4712914Sgarrison q = q-strlen(one_index)-1; 4812914Sgarrison } 4912914Sgarrison if (refs!=NULL && *refs!=NULL) break; 5012914Sgarrison p = one_index; 5112914Sgarrison } 5212914Sgarrison else *p++ = *q; 5312914Sgarrison 5412914Sgarrison if (refs==NULL || *refs==NULL) printf("No references found.\n"); 5512914Sgarrison else printf("%s", refs); 5612914Sgarrison if (refs!=NULL) free(refs); 5712914Sgarrison } 5812914Sgarrison exit(0); 5912914Sgarrison } 6012914Sgarrison 6112914Sgarrison # define operand (strlen(*argv+2)==0 ? (argv++,argc--,*argv) : *argv+2) 6212914Sgarrison 6312914Sgarrison flags() 6412914Sgarrison { for (; argc>0 && *argv[0]=='-'; argc--,argv++) 6512914Sgarrison { switch ((*argv)[1]) 6612914Sgarrison { case 'l': max_klen= atoi(operand); 6712914Sgarrison break; 68*15889Srrh case 'f': fflag++; 69*15889Srrh break; 7012914Sgarrison case 'c': common= operand; 7112914Sgarrison break; 7212914Sgarrison case 'p': strcpy(INDEX,operand); 7312914Sgarrison break; 7412914Sgarrison default: fprintf(stderr, "unknown flag '%s'\n", *argv); 7512914Sgarrison } 7612914Sgarrison } 7712914Sgarrison } 78