xref: /csrg-svn/contrib/bib/src/lookup.c (revision 15889)
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