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