|
|
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.