113111Srrh #ifndef lint 2*17250Srrh static char sccsid[] = "@(#)lookup.c 2.4 10/12/84"; 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 */ 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 28*17250Srrh strcpy(BMACLIB, N_BMACLIB); 29*17250Srrh strcpy(COMFILE, N_COMFILE); 30*17250Srrh strcpy(DEFSTYLE, N_DEFSTYLE); 31*17250Srrh 3212914Sgarrison argc= argcount-1; 3312914Sgarrison argv= arglist+1; 3412914Sgarrison flags(); 3512914Sgarrison 3612914Sgarrison /* add SYSINDEX to search path. all names are comma terminated */ 3712914Sgarrison strcat(INDEX, ","); 3812914Sgarrison strcat(INDEX, SYSINDEX); 3912914Sgarrison strcat(INDEX, ","); 4012914Sgarrison 4112914Sgarrison while (fgets(keys,maxstr,stdin)!=NULL) 4212914Sgarrison { for (p = one_index, q = INDEX; *q != 0 ; q++) 4312914Sgarrison if (*q == ',' ) 4412914Sgarrison { *p = 0; 4512914Sgarrison refs = locate(keys, one_index, max_klen, common); 4612914Sgarrison if( refs==NULL ) 4712914Sgarrison { fprintf(stderr, 4812914Sgarrison "%s removed from index list.\n", one_index); 4912914Sgarrison /* delete this file name (shift remainder on top) */ 5012914Sgarrison strcpy(q-strlen(one_index),q+1); 5112914Sgarrison q = q-strlen(one_index)-1; 5212914Sgarrison } 5312914Sgarrison if (refs!=NULL && *refs!=NULL) break; 5412914Sgarrison p = one_index; 5512914Sgarrison } 5612914Sgarrison else *p++ = *q; 5712914Sgarrison 5812914Sgarrison if (refs==NULL || *refs==NULL) printf("No references found.\n"); 5912914Sgarrison else printf("%s", refs); 6012914Sgarrison if (refs!=NULL) free(refs); 6112914Sgarrison } 6212914Sgarrison exit(0); 6312914Sgarrison } 6412914Sgarrison 6512914Sgarrison # define operand (strlen(*argv+2)==0 ? (argv++,argc--,*argv) : *argv+2) 6612914Sgarrison 6712914Sgarrison flags() 68*17250Srrh { 69*17250Srrh char *p; 70*17250Srrh for (; argc>0 && *argv[0]=='-'; argc--,argv++) 7112914Sgarrison { switch ((*argv)[1]) 7212914Sgarrison { case 'l': max_klen= atoi(operand); 7312914Sgarrison break; 7415889Srrh case 'f': fflag++; 7515889Srrh break; 7612914Sgarrison case 'c': common= operand; 7712914Sgarrison break; 7812914Sgarrison case 'p': strcpy(INDEX,operand); 7912914Sgarrison break; 80*17250Srrh case 'd': 81*17250Srrh p = &argv[0][2]; 82*17250Srrh if (!p) { 83*17250Srrh argv++; 84*17250Srrh p = &argv[0][0]; 85*17250Srrh } 86*17250Srrh strreplace(COMFILE, BMACLIB, p); 87*17250Srrh strcpy(BMACLIB, p); 88*17250Srrh break; 8912914Sgarrison default: fprintf(stderr, "unknown flag '%s'\n", *argv); 9012914Sgarrison } 9112914Sgarrison } 9212914Sgarrison } 93