xref: /csrg-svn/old/refer/lookbib/lookbib.c (revision 12260)
1*12260Stut #ifndef lint
2*12260Stut static char *sccsid = "@(#)lookbib.c	4.1 (Berkeley) 05/06/83";
3*12260Stut #endif
4*12260Stut 
5*12260Stut #include <stdio.h>
6*12260Stut #include <ctype.h>
7*12260Stut 
8*12260Stut main(argc, argv)	/* look in biblio for record matching keywords */
9*12260Stut int argc;
10*12260Stut char **argv;
11*12260Stut {
12*12260Stut 	FILE *fp, *hfp, *fopen(), *popen();
13*12260Stut 	char s[BUFSIZ], hunt[64], *sprintf();
14*12260Stut 
15*12260Stut 	if (argc == 1 || argc > 2)
16*12260Stut 	{
17*12260Stut 		fputs("Usage:  lookbib database\n",
18*12260Stut 			stderr);
19*12260Stut 		fputs("\tdatabase must have indexes built by indxbib\n",
20*12260Stut 			stderr);
21*12260Stut 		fputs("\tfinds citations specified on standard input\n",
22*12260Stut 			stderr);
23*12260Stut 		exit(1);
24*12260Stut 	}
25*12260Stut 	if (!isatty(fileno(stdin)))
26*12260Stut 		fp = stdin;
27*12260Stut 	else if ((fp = fopen("/dev/tty", "r")) == NULL)
28*12260Stut 	{
29*12260Stut 		perror("lookbib: /dev/tty");
30*12260Stut 		exit(1);
31*12260Stut 	}
32*12260Stut 	sprintf(s, "%s.ia", argv[1]);
33*12260Stut 	if (access(s, 0) == -1) {
34*12260Stut 		perror(s);
35*12260Stut 		fputs("\trun indxbib to make inverted indexes\n", stderr);
36*12260Stut 		exit(1);
37*12260Stut 	}
38*12260Stut 	sprintf(hunt, "/usr/lib/refer/hunt %s", argv[1]);
39*12260Stut 
40*12260Stut 	if (isatty(fileno(fp)))
41*12260Stut 	{
42*12260Stut 		fprintf(stderr, "Instructions? ");
43*12260Stut 		fgets(s, BUFSIZ, fp);
44*12260Stut 		if (*s == 'y')
45*12260Stut 			instruct();
46*12260Stut 	}
47*12260Stut    again:
48*12260Stut 	fprintf(stderr, "> ");
49*12260Stut 	if (fgets(s, BUFSIZ, fp))
50*12260Stut 	{
51*12260Stut 		if (*s == '\n')
52*12260Stut 			goto again;
53*12260Stut 		if ((hfp = popen(hunt, "w")) == NULL)
54*12260Stut 		{
55*12260Stut 			perror("lookbib: /usr/lib/refer/hunt");
56*12260Stut 			exit(1);
57*12260Stut 		}
58*12260Stut 		map_lower(s);
59*12260Stut 		fputs(s, hfp);
60*12260Stut 		pclose(hfp);
61*12260Stut 		goto again;
62*12260Stut 	}
63*12260Stut 	fclose(fp);
64*12260Stut 	fprintf(stderr, "EOT\n");
65*12260Stut 	exit(0);
66*12260Stut }
67*12260Stut 
68*12260Stut map_lower(s)		/* map string s to lower case */
69*12260Stut char *s;
70*12260Stut {
71*12260Stut 	for ( ; *s; ++s)
72*12260Stut 		if (isupper(*s))
73*12260Stut 			*s = tolower(*s);
74*12260Stut }
75*12260Stut 
76*12260Stut instruct()
77*12260Stut {
78*12260Stut 	fputs("\nType keywords (such as author and date) after the > prompt.\n",
79*12260Stut 		stderr);
80*12260Stut 	fputs("References with those keywords are printed if they exist;\n",
81*12260Stut 		stderr);
82*12260Stut 	fputs("\tif nothing matches you are given another prompt.\n",
83*12260Stut 		stderr);
84*12260Stut 	fputs("To quit lookbib, press CTRL-d after the > prompt.\n\n",
85*12260Stut 		stderr);
86*12260Stut }
87