|
|
1.1 root 1: #ifndef lint
2: static char *sccsid = "@(#)lookbib.c 4.3 (Berkeley) 6/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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.