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