113111Srrh #ifndef lint 2*23487Sgarrison static char sccsid[] = "@(#)lookup.c 2.5 06/10/85"; 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 */ 11*23487Sgarrison int Aflag = 0; /* print hits from All indexes */ 1212914Sgarrison int max_klen = 6; /* max length of keys */ 1312914Sgarrison char *common = /* name of file of common words */ 1412914Sgarrison COMFILE; 1512914Sgarrison char INDEX[maxstr] = /* name of index file */ 1612914Sgarrison INDXFILE; 1712914Sgarrison 1812914Sgarrison int argc; 1912914Sgarrison char **argv; 2012914Sgarrison 2112914Sgarrison main(argcount,arglist) 2212914Sgarrison int argcount; 2312914Sgarrison char **arglist; 2412914Sgarrison { char *refs; 2512914Sgarrison char keys[maxstr]; 2612914Sgarrison char *p,*q; 2712914Sgarrison char one_index[maxstr]; 28*23487Sgarrison int found; 2912914Sgarrison 3017250Srrh strcpy(BMACLIB, N_BMACLIB); 3117250Srrh strcpy(COMFILE, N_COMFILE); 3217250Srrh strcpy(DEFSTYLE, N_DEFSTYLE); 3317250Srrh 3412914Sgarrison argc= argcount-1; 3512914Sgarrison argv= arglist+1; 3612914Sgarrison flags(); 3712914Sgarrison 3812914Sgarrison /* add SYSINDEX to search path. all names are comma terminated */ 3912914Sgarrison strcat(INDEX, ","); 4012914Sgarrison strcat(INDEX, SYSINDEX); 4112914Sgarrison strcat(INDEX, ","); 4212914Sgarrison 4312914Sgarrison while (fgets(keys,maxstr,stdin)!=NULL) 44*23487Sgarrison { found = 0; 45*23487Sgarrison for (p = one_index, q = INDEX; *q != 0 ; q++) 4612914Sgarrison if (*q == ',' ) 4712914Sgarrison { *p = 0; 4812914Sgarrison refs = locate(keys, one_index, max_klen, common); 4912914Sgarrison if( refs==NULL ) 5012914Sgarrison { fprintf(stderr, 5112914Sgarrison "%s removed from index list.\n", one_index); 5212914Sgarrison /* delete this file name (shift remainder on top) */ 5312914Sgarrison strcpy(q-strlen(one_index),q+1); 5412914Sgarrison q = q-strlen(one_index)-1; 5512914Sgarrison } 56*23487Sgarrison if (refs!=NULL && *refs!=NULL) 57*23487Sgarrison { 58*23487Sgarrison printf("%s", refs); 59*23487Sgarrison free(refs); 60*23487Sgarrison found = 1; 61*23487Sgarrison if (!Aflag) break; 62*23487Sgarrison } 6312914Sgarrison p = one_index; 6412914Sgarrison } 6512914Sgarrison else *p++ = *q; 6612914Sgarrison 67*23487Sgarrison if (!found) printf("No references found.\n"); 6812914Sgarrison } 6912914Sgarrison exit(0); 7012914Sgarrison } 7112914Sgarrison 7212914Sgarrison # define operand (strlen(*argv+2)==0 ? (argv++,argc--,*argv) : *argv+2) 7312914Sgarrison 7412914Sgarrison flags() 7517250Srrh { 7617250Srrh char *p; 7717250Srrh for (; argc>0 && *argv[0]=='-'; argc--,argv++) 7812914Sgarrison { switch ((*argv)[1]) 7912914Sgarrison { case 'l': max_klen= atoi(operand); 8012914Sgarrison break; 8115889Srrh case 'f': fflag++; 8215889Srrh break; 8312914Sgarrison case 'c': common= operand; 8412914Sgarrison break; 85*23487Sgarrison case 'A': Aflag++; 86*23487Sgarrison break; 8712914Sgarrison case 'p': strcpy(INDEX,operand); 8812914Sgarrison break; 8917250Srrh case 'd': 9017250Srrh p = &argv[0][2]; 9117250Srrh if (!p) { 9217250Srrh argv++; 9317250Srrh p = &argv[0][0]; 9417250Srrh } 9517250Srrh strreplace(COMFILE, BMACLIB, p); 9617250Srrh strcpy(BMACLIB, p); 9717250Srrh break; 9812914Sgarrison default: fprintf(stderr, "unknown flag '%s'\n", *argv); 9912914Sgarrison } 10012914Sgarrison } 10112914Sgarrison } 102