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