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