xref: /csrg-svn/old/refer/lookbib/lookbib.c (revision 13433)
112260Stut #ifndef lint
2*13433Stut static char *sccsid = "@(#)lookbib.c	4.3 (Berkeley) 06/28/83";
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();
1412260Stut 
1512260Stut 	if (argc == 1 || argc > 2)
1612260Stut 	{
1712260Stut 		fputs("Usage:  lookbib database\n",
1812260Stut 			stderr);
1912260Stut 		fputs("\tfinds citations specified on standard input\n",
2012260Stut 			stderr);
2112260Stut 		exit(1);
2212260Stut 	}
2312260Stut 	if (!isatty(fileno(stdin)))
2412260Stut 		fp = stdin;
2512260Stut 	else if ((fp = fopen("/dev/tty", "r")) == NULL)
2612260Stut 	{
2712260Stut 		perror("lookbib: /dev/tty");
2812260Stut 		exit(1);
2912260Stut 	}
3012260Stut 	sprintf(s, "%s.ia", argv[1]);
3112260Stut 	if (access(s, 0) == -1) {
3213240Sgarrison 		sprintf (s, "%s", argv[1]);
3313240Sgarrison 		if (access(s, 0) == -1) {
3413240Sgarrison 			perror(s);
35*13433Stut 			fprintf(stderr, "\tNeither index file %s.ia ", s);
36*13433Stut 			fprintf(stderr, "nor reference file %s found\n", s);
3713240Sgarrison 			exit(1);
3813240Sgarrison 		}
3912260Stut 	}
4012260Stut 	sprintf(hunt, "/usr/lib/refer/hunt %s", argv[1]);
4112260Stut 
4212260Stut 	if (isatty(fileno(fp)))
4312260Stut 	{
4412260Stut 		fprintf(stderr, "Instructions? ");
4512260Stut 		fgets(s, BUFSIZ, fp);
4612260Stut 		if (*s == 'y')
4712260Stut 			instruct();
4812260Stut 	}
4912260Stut    again:
5012260Stut 	fprintf(stderr, "> ");
5112260Stut 	if (fgets(s, BUFSIZ, fp))
5212260Stut 	{
5312260Stut 		if (*s == '\n')
5412260Stut 			goto again;
5512260Stut 		if ((hfp = popen(hunt, "w")) == NULL)
5612260Stut 		{
5712260Stut 			perror("lookbib: /usr/lib/refer/hunt");
5812260Stut 			exit(1);
5912260Stut 		}
6012260Stut 		map_lower(s);
6112260Stut 		fputs(s, hfp);
6212260Stut 		pclose(hfp);
6312260Stut 		goto again;
6412260Stut 	}
6512260Stut 	fclose(fp);
6612260Stut 	fprintf(stderr, "EOT\n");
6712260Stut 	exit(0);
6812260Stut }
6912260Stut 
7012260Stut map_lower(s)		/* map string s to lower case */
7112260Stut char *s;
7212260Stut {
7312260Stut 	for ( ; *s; ++s)
7412260Stut 		if (isupper(*s))
7512260Stut 			*s = tolower(*s);
7612260Stut }
7712260Stut 
7812260Stut instruct()
7912260Stut {
8012260Stut 	fputs("\nType keywords (such as author and date) after the > prompt.\n",
8112260Stut 		stderr);
8212260Stut 	fputs("References with those keywords are printed if they exist;\n",
8312260Stut 		stderr);
8412260Stut 	fputs("\tif nothing matches you are given another prompt.\n",
8512260Stut 		stderr);
8612260Stut 	fputs("To quit lookbib, press CTRL-d after the > prompt.\n\n",
8712260Stut 		stderr);
8812260Stut }
89