1*12914Sgarrison # include "stdio.h" 2*12914Sgarrison # include "streams.h" 3*12914Sgarrison # include "bib.h" 4*12914Sgarrison 5*12914Sgarrison char *locate(); 6*12914Sgarrison 7*12914Sgarrison int max_klen = 6; /* max length of keys */ 8*12914Sgarrison char *common = /* name of file of common words */ 9*12914Sgarrison COMFILE; 10*12914Sgarrison char INDEX[maxstr] = /* name of index file */ 11*12914Sgarrison INDXFILE; 12*12914Sgarrison 13*12914Sgarrison int argc; 14*12914Sgarrison char **argv; 15*12914Sgarrison 16*12914Sgarrison main(argcount,arglist) 17*12914Sgarrison int argcount; 18*12914Sgarrison char **arglist; 19*12914Sgarrison { char *refs; 20*12914Sgarrison char keys[maxstr]; 21*12914Sgarrison char *p,*q; 22*12914Sgarrison char one_index[maxstr]; 23*12914Sgarrison 24*12914Sgarrison argc= argcount-1; 25*12914Sgarrison argv= arglist+1; 26*12914Sgarrison flags(); 27*12914Sgarrison 28*12914Sgarrison /* add SYSINDEX to search path. all names are comma terminated */ 29*12914Sgarrison strcat(INDEX, ","); 30*12914Sgarrison strcat(INDEX, SYSINDEX); 31*12914Sgarrison strcat(INDEX, ","); 32*12914Sgarrison 33*12914Sgarrison while (fgets(keys,maxstr,stdin)!=NULL) 34*12914Sgarrison { for (p = one_index, q = INDEX; *q != 0 ; q++) 35*12914Sgarrison if (*q == ',' ) 36*12914Sgarrison { *p = 0; 37*12914Sgarrison refs = locate(keys, one_index, max_klen, common); 38*12914Sgarrison if( refs==NULL ) 39*12914Sgarrison { fprintf(stderr, 40*12914Sgarrison "%s removed from index list.\n", one_index); 41*12914Sgarrison /* delete this file name (shift remainder on top) */ 42*12914Sgarrison strcpy(q-strlen(one_index),q+1); 43*12914Sgarrison q = q-strlen(one_index)-1; 44*12914Sgarrison } 45*12914Sgarrison if (refs!=NULL && *refs!=NULL) break; 46*12914Sgarrison p = one_index; 47*12914Sgarrison } 48*12914Sgarrison else *p++ = *q; 49*12914Sgarrison 50*12914Sgarrison if (refs==NULL || *refs==NULL) printf("No references found.\n"); 51*12914Sgarrison else printf("%s", refs); 52*12914Sgarrison if (refs!=NULL) free(refs); 53*12914Sgarrison } 54*12914Sgarrison exit(0); 55*12914Sgarrison } 56*12914Sgarrison int fileflag; 57*12914Sgarrison 58*12914Sgarrison # define operand (strlen(*argv+2)==0 ? (argv++,argc--,*argv) : *argv+2) 59*12914Sgarrison 60*12914Sgarrison flags() 61*12914Sgarrison { for (; argc>0 && *argv[0]=='-'; argc--,argv++) 62*12914Sgarrison { switch ((*argv)[1]) 63*12914Sgarrison { case 'l': max_klen= atoi(operand); 64*12914Sgarrison break; 65*12914Sgarrison case 'c': common= operand; 66*12914Sgarrison break; 67*12914Sgarrison case 'p': strcpy(INDEX,operand); 68*12914Sgarrison break; 69*12914Sgarrison case 'f': fileflag = 1; 70*12914Sgarrison break; 71*12914Sgarrison default: fprintf(stderr, "unknown flag '%s'\n", *argv); 72*12914Sgarrison } 73*12914Sgarrison } 74*12914Sgarrison } 75