xref: /original-bsd/contrib/bib/src/lookup.c (revision ec7df300)
1 #ifndef lint
2 static char sccsid[] = "@(#)lookup.c	2.5	06/10/85";
3 #endif not lint
4 # include "stdio.h"
5 # include "streams.h"
6 # include "bib.h"
7 
8 char *locate();
9 
10 int     fflag =   0;        /*  print out file names                    */
11 int     Aflag =   0;        /*  print hits from All indexes 		*/
12 int     max_klen =   6;     /*  max length of keys                      */
13 char    *common =           /*  name of file of common words            */
14             COMFILE;
15 char    INDEX[maxstr] =     /*  name of index file                      */
16             INDXFILE;
17 
18 int     argc;
19 char    **argv;
20 
21 main(argcount,arglist)
22 int argcount;
23 char **arglist;
24 {   char *refs;
25     char keys[maxstr];
26     char *p,*q;
27     char one_index[maxstr];
28     int found;
29 
30     strcpy(BMACLIB, N_BMACLIB);
31     strcpy(COMFILE, N_COMFILE);
32     strcpy(DEFSTYLE, N_DEFSTYLE);
33 
34     argc= argcount-1;
35     argv= arglist+1;
36     flags();
37 
38     /*  add SYSINDEX to search path.  all names are comma terminated */
39 	strcat(INDEX, ",");
40 	strcat(INDEX, SYSINDEX);
41 	strcat(INDEX, ",");
42 
43     while (fgets(keys,maxstr,stdin)!=NULL)
44     {	found = 0;
45 	for (p = one_index, q = INDEX; *q != 0 ; q++)
46 	    if (*q == ',' )
47 	    {   *p = 0;
48 	        refs = locate(keys, one_index, max_klen, common);
49 		if( refs==NULL )
50 		{   fprintf(stderr,
51 			"%s removed from index list.\n", one_index);
52 		    /* delete this file name (shift remainder on top) */
53 			strcpy(q-strlen(one_index),q+1);
54 			q = q-strlen(one_index)-1;
55 		}
56                 if (refs!=NULL && *refs!=NULL)
57 		{
58 		    printf("%s", refs);
59 		    free(refs);
60 		    found = 1;
61 		    if (!Aflag) break;
62 		}
63 	        p = one_index;
64 	    }
65 	    else *p++ = *q;
66 
67         if (!found)  printf("No references found.\n");
68     }
69     exit(0);
70 }
71 
72 # define    operand     (strlen(*argv+2)==0 ? (argv++,argc--,*argv) : *argv+2)
73 
74 flags()
75 {
76     char *p;
77     for (; argc>0 && *argv[0]=='-';  argc--,argv++)
78     {   switch ((*argv)[1])
79         {   case 'l':   max_klen= atoi(operand);
80                         break;
81 	    case 'f':	fflag++;
82 			break;
83             case 'c':   common=  operand;
84                         break;
85 	    case 'A':	Aflag++;
86 			break;
87             case 'p':   strcpy(INDEX,operand);
88                         break;
89 	    case 'd':
90 		p = &argv[0][2];
91 		if (!p) {
92 			argv++;
93 			p = &argv[0][0];
94 		}
95 		strreplace(COMFILE, BMACLIB, p);
96 		strcpy(BMACLIB, p);
97 		break;
98             default:    fprintf(stderr, "unknown flag '%s'\n", *argv);
99         }
100     }
101 }
102