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