xref: /csrg-svn/old/refer/lookbib/lookbib.c (revision 16047)
112260Stut #ifndef lint
2*16047Sralph static char *sccsid = "@(#)lookbib.c	4.4 (Berkeley) 02/15/84";
312260Stut #endif
412260Stut 
512260Stut #include <stdio.h>
612260Stut #include <ctype.h>
712260Stut 
812260Stut main(argc, argv)	/* look in biblio for record matching keywords */
912260Stut int argc;
1012260Stut char **argv;
1112260Stut {
1212260Stut 	FILE *fp, *hfp, *fopen(), *popen();
1312260Stut 	char s[BUFSIZ], hunt[64], *sprintf();
14*16047Sralph 	int instructions = 1;
1512260Stut 
16*16047Sralph 	if (strcmp(argv[1],"-n") == 0)
17*16047Sralph 	{
18*16047Sralph 		argv++;
19*16047Sralph 		argc--;
20*16047Sralph 		instructions = 0;
21*16047Sralph 	}
2212260Stut 	if (argc == 1 || argc > 2)
2312260Stut 	{
2412260Stut 		fputs("Usage:  lookbib database\n",
2512260Stut 			stderr);
2612260Stut 		fputs("\tfinds citations specified on standard input\n",
2712260Stut 			stderr);
2812260Stut 		exit(1);
2912260Stut 	}
3012260Stut 	if (!isatty(fileno(stdin)))
3112260Stut 		fp = stdin;
3212260Stut 	else if ((fp = fopen("/dev/tty", "r")) == NULL)
3312260Stut 	{
3412260Stut 		perror("lookbib: /dev/tty");
3512260Stut 		exit(1);
3612260Stut 	}
3712260Stut 	sprintf(s, "%s.ia", argv[1]);
3812260Stut 	if (access(s, 0) == -1) {
3913240Sgarrison 		sprintf (s, "%s", argv[1]);
4013240Sgarrison 		if (access(s, 0) == -1) {
4113240Sgarrison 			perror(s);
4213433Stut 			fprintf(stderr, "\tNeither index file %s.ia ", s);
4313433Stut 			fprintf(stderr, "nor reference file %s found\n", s);
4413240Sgarrison 			exit(1);
4513240Sgarrison 		}
4612260Stut 	}
4712260Stut 	sprintf(hunt, "/usr/lib/refer/hunt %s", argv[1]);
4812260Stut 
49*16047Sralph 	if (instructions && isatty(fileno(fp)))
5012260Stut 	{
5112260Stut 		fprintf(stderr, "Instructions? ");
5212260Stut 		fgets(s, BUFSIZ, fp);
5312260Stut 		if (*s == 'y')
5412260Stut 			instruct();
5512260Stut 	}
5612260Stut    again:
5712260Stut 	fprintf(stderr, "> ");
5812260Stut 	if (fgets(s, BUFSIZ, fp))
5912260Stut 	{
6012260Stut 		if (*s == '\n')
6112260Stut 			goto again;
6212260Stut 		if ((hfp = popen(hunt, "w")) == NULL)
6312260Stut 		{
6412260Stut 			perror("lookbib: /usr/lib/refer/hunt");
6512260Stut 			exit(1);
6612260Stut 		}
6712260Stut 		map_lower(s);
6812260Stut 		fputs(s, hfp);
6912260Stut 		pclose(hfp);
7012260Stut 		goto again;
7112260Stut 	}
7212260Stut 	fclose(fp);
7312260Stut 	fprintf(stderr, "EOT\n");
7412260Stut 	exit(0);
7512260Stut }
7612260Stut 
7712260Stut map_lower(s)		/* map string s to lower case */
7812260Stut char *s;
7912260Stut {
8012260Stut 	for ( ; *s; ++s)
8112260Stut 		if (isupper(*s))
8212260Stut 			*s = tolower(*s);
8312260Stut }
8412260Stut 
8512260Stut instruct()
8612260Stut {
8712260Stut 	fputs("\nType keywords (such as author and date) after the > prompt.\n",
8812260Stut 		stderr);
8912260Stut 	fputs("References with those keywords are printed if they exist;\n",
9012260Stut 		stderr);
9112260Stut 	fputs("\tif nothing matches you are given another prompt.\n",
9212260Stut 		stderr);
9312260Stut 	fputs("To quit lookbib, press CTRL-d after the > prompt.\n\n",
9412260Stut 		stderr);
9512260Stut }
96