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