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