|
|
1.1 root 1: /*
2: * apropos.c
3: *
4: * implement a simple version of the Berkeley command "apropos". This
5: * command searches the file /usr/man/man.index for a word that the
6: * user enters on the command line, and prints every index entry in which
7: * that token appears.
8: *
9: * Usage: apropos token
10: *
11: * 3/17/1993 (aye and begorah!), fwb, first draft
12: * 9/1/1993, fwb, changed behavior to continue when it reads a "bad" line
13: */
14: #ifdef TEST
15: # define INDEXFILE "/v/fwb/doc/coherent/man.index"
16: #else
17: # define INDEXFILE "/usr/man/man.index"
18: #endif
19:
20: #define BUFFERSIZE 200
21:
22: #include <ctype.h>
23: #include <stdio.h>
24: #include <string.h>
25: #include <stdlib.h>
26:
27: main(argc, argv)
28: int argc; char **argv;
29: {
30: char inb[BUFFERSIZE], testb[BUFFERSIZE], *inbp;
31: int i, j, lowerflag;
32: FILE *fp;
33:
34: if (argc < 2) {
35: fprintf(stderr, "Usage: apropos word\n");
36: exit(EXIT_FAILURE);
37: }
38:
39: if ((fp = fopen(INDEXFILE, "r")) == NULL) {
40: fprintf(stderr, "apropos: Cannot open index file %s\n",
41: INDEXFILE);
42: exit(EXIT_FAILURE);
43: }
44:
45: /* if first character of user's word is upper-cased, then assume
46: * the user wants an exact match, and therefore do not
47: * shift the description into lower case.
48: */
49:
50: if (isupper(argv[1][0]))
51: lowerflag = 0;
52: else
53: lowerflag = 1;
54:
55: for (i = 1; fgets(inb, BUFFERSIZE-1, fp) != NULL; i++) {
56: if ((inbp = strchr(inb, '\t')) == NULL)
57: continue;
58:
59: inbp++;
60: strcpy (testb, inbp);
61:
62: if (lowerflag)
63: for (j = 0; j < strlen (testb); j++)
64: if (isupper(testb[j]))
65: testb[j] = tolower(testb[j]);
66:
67: if (strstr(testb, argv[1]) != NULL)
68: printf("%s", inbp);
69: }
70: fclose(fp);
71: exit(EXIT_SUCCESS);
72: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.