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