|
|
1.1 root 1: #include <stdio.h>
2: #include <ctype.h>
3:
4: main(argc, argv)
5: int argc;
6: char *argv[];
7: {
8:
9: argc--, argv++;
10: if (argc == 0) {
11: usage:
12: fprintf(stderr, "apropos word ...\n");
13: exit(1);
14: }
15: if (freopen("/usr/lib/whatis", "r", stdin) == NULL) {
16: perror("/usr/lib/whatis");
17: exit (1);
18: }
19: argv[argc] = 0;
20: apropos(argv);
21: exit(0);
22: }
23:
24: apropos(argv)
25: char **argv;
26: {
27: char buf[BUFSIZ];
28: char *gotit;
29: register char **vp;
30:
31: gotit = (char *) calloc(1, blklen(argv));
32: while (fgets(buf, sizeof buf, stdin) != NULL)
33: for (vp = argv; *vp; vp++)
34: if (match(buf, *vp)) {
35: printf("%s", buf);
36: gotit[vp - argv] = 1;
37: for (vp++; *vp; vp++)
38: if (match(buf, *vp))
39: gotit[vp - argv] = 1;
40: break;
41: }
42: for (vp = argv; *vp; vp++)
43: if (gotit[vp - argv] == 0)
44: printf("%s: nothing apropriate\n", *vp);
45: }
46:
47: match(buf, str)
48: char *buf, *str;
49: {
50: register char *bp, *cp;
51:
52: bp = buf;
53: for (;;) {
54: if (*bp == 0)
55: return (0);
56: if (amatch(bp, str))
57: return (1);
58: bp++;
59: }
60: }
61:
62: amatch(cp, dp)
63: register char *cp, *dp;
64: {
65:
66: while (*cp && *dp && lmatch(*cp, *dp))
67: cp++, dp++;
68: if (*dp == 0)
69: return (1);
70: return (0);
71: }
72:
73: lmatch(c, d)
74: char c, d;
75: {
76:
77: if (c == d)
78: return (1);
79: if (!isalpha(c) || !isalpha(d))
80: return (0);
81: if (islower(c))
82: c = toupper(c);
83: if (islower(d))
84: d = toupper(d);
85: return (c == d);
86: }
87:
88: blklen(ip)
89: register int *ip;
90: {
91: register int i = 0;
92:
93: while (*ip++)
94: i++;
95: return (i);
96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.