|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <ctype.h> ! 3: /* ! 4: * whatis - what the heck is that file anyways ! 5: * ! 6: * Bill Joy UCB ! 7: */ ! 8: ! 9: char *calloc(); ! 10: char *trim(); ! 11: unsigned blklen(); ! 12: ! 13: main(argc, argv) ! 14: int argc; ! 15: char *argv[]; ! 16: { ! 17: register char **avp; ! 18: ! 19: argc--, argv++; ! 20: if (argc == 0) { ! 21: fprintf(stderr, "whatis name ...\n"); ! 22: exit(1); ! 23: } ! 24: if (freopen("/usr/lib/whatis", "r", stdin) == NULL) { ! 25: perror("/usr/lib/whatis"); ! 26: exit (1); ! 27: } ! 28: argv[argc] = 0; ! 29: for (avp = argv; *avp; avp++) ! 30: *avp = trim(*avp); ! 31: whatis(argv); ! 32: exit(0); ! 33: } ! 34: ! 35: whatis(argv) ! 36: char **argv; ! 37: { ! 38: char buf[BUFSIZ]; ! 39: register char *gotit; ! 40: register char **vp; ! 41: ! 42: gotit = calloc(1, blklen(argv)); ! 43: while (fgets(buf, sizeof buf, stdin) != NULL) ! 44: for (vp = argv; *vp; vp++) ! 45: if (match(buf, *vp)) { ! 46: printf("%s", buf); ! 47: gotit[vp - argv] = 1; ! 48: for (vp++; *vp; vp++) ! 49: if (match(buf, *vp)) ! 50: gotit[vp - argv] = 1; ! 51: break; ! 52: } ! 53: for (vp = argv; *vp; vp++) ! 54: if (gotit[vp - argv] == 0) ! 55: printf("%s: not found\n", *vp); ! 56: } ! 57: ! 58: match(buf, str) ! 59: char *buf, *str; ! 60: { ! 61: register char *bp, *cp; ! 62: ! 63: bp = buf; ! 64: again: ! 65: cp = str; ! 66: while (*bp && *cp && lmatch(*bp, *cp)) ! 67: bp++, cp++; ! 68: if (*cp == 0 && (*bp == '(' || *bp == ',' || *bp == '\t' || *bp == ' ')) ! 69: return (1); ! 70: while (isalpha(*bp) || isdigit(*bp)) ! 71: bp++; ! 72: if (*bp != ',') ! 73: return (0); ! 74: bp++; ! 75: while (isspace(*bp)) ! 76: bp++; ! 77: goto again; ! 78: } ! 79: ! 80: lmatch(c, d) ! 81: char c, d; ! 82: { ! 83: ! 84: if (c == d) ! 85: return (1); ! 86: if (!isalpha(c) || !isalpha(d)) ! 87: return (0); ! 88: if (islower(c)) ! 89: c = toupper(c); ! 90: if (islower(d)) ! 91: d = toupper(d); ! 92: return (c == d); ! 93: } ! 94: ! 95: unsigned ! 96: blklen(ip) ! 97: register char **ip; ! 98: { ! 99: register int i = 0; ! 100: ! 101: while (*ip++) ! 102: i++; ! 103: return (i); ! 104: } ! 105: ! 106: char * ! 107: trim(cp) ! 108: register char *cp; ! 109: { ! 110: register char *dp; ! 111: ! 112: for (dp = cp; *dp; dp++) ! 113: if (*dp == '/') ! 114: cp = dp + 1; ! 115: if (cp[0] != '.') { ! 116: if (cp + 3 <= dp && dp[-2] == '.' && any(dp[-1], "cosa12345678npP")) ! 117: dp[-2] = 0; ! 118: if (cp + 4 <= dp && dp[-3] == '.' && any(dp[-2], "13") && isalpha(dp[-1])) ! 119: dp[-3] = 0; ! 120: } ! 121: return (cp); ! 122: } ! 123: ! 124: any(c, cp) ! 125: register int c; ! 126: register char *cp; ! 127: { ! 128: ! 129: while (*cp) ! 130: if (c == *cp++) ! 131: return (1); ! 132: return (0); ! 133: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.