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