|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: #define BACKSPACE 0 ! 4: #define QUOTE 0200 ! 5: /* ! 6: * iul - a cat like program to indicate underlining for graphic terminals ! 7: * ! 8: * Bill Joy UCB June 22, 1977 ! 9: * ! 10: * This program was a piece of the editor ex. ! 11: */ ! 12: ! 13: #define LBSIZE 512 ! 14: ! 15: char linebuf[LBSIZE], genbuf[LBSIZE]; ! 16: char *strcpy(); ! 17: ! 18: main(argc, argv) ! 19: int argc; ! 20: char *argv[]; ! 21: { ! 22: register c; ! 23: register char *lp; ! 24: char obuf[BUFSIZ]; ! 25: ! 26: setbuf(stdout, obuf); ! 27: argc--; ! 28: argv++; ! 29: do { ! 30: if (argc > 0) { ! 31: if (freopen(argv[0], "r", stdin) == NULL) { ! 32: perror(argv[0]); ! 33: exit(1); ! 34: } ! 35: argc--; argv++; ! 36: } ! 37: while (fgets(linebuf, sizeof linebuf, stdin) != 0) { ! 38: for (lp = linebuf; *lp; lp++) ! 39: continue; ! 40: *--lp = 0; ! 41: doulg(); ! 42: dographic(); ! 43: if (genbuf[0]) ! 44: printf("\n%s", genbuf); ! 45: putchar('\n'); ! 46: fflush(stdout); ! 47: } ! 48: } while (argc > 0); ! 49: exit(0); ! 50: } ! 51: ! 52: dographic() ! 53: { ! 54: register char *lp; ! 55: register c; ! 56: ! 57: for (lp = linebuf; c = *lp++;) { ! 58: switch (c) { ! 59: case '\b': ! 60: if (BACKSPACE == 0) ! 61: c = '?'; ! 62: break; ! 63: default: ! 64: if (c < ' ' || c == 0177) ! 65: c = '?'; ! 66: break; ! 67: case '\t': ! 68: break; ! 69: } ! 70: putchar(c); ! 71: } ! 72: } ! 73: ! 74: doulg() ! 75: { ! 76: register char *lp, *gp; ! 77: char *maxgp; ! 78: register c; ! 79: char csw; ! 80: int col; ! 81: ! 82: gp = genbuf; ! 83: *gp = 0; ! 84: maxgp = gp; ! 85: col = 0; ! 86: for (lp = linebuf; c = *lp++;) { ! 87: switch (c) { ! 88: case '\t': ! 89: while ((col & 7) != 7) { ! 90: *gp++ = ' '; ! 91: if (gp >= &genbuf[LBSIZE - 2]) ! 92: goto ovflo; ! 93: col++; ! 94: } ! 95: break; ! 96: default: ! 97: if (gp >= maxgp) ! 98: break; ! 99: c =| (*gp & QUOTE); ! 100: break; ! 101: case '_': ! 102: if (gp >= maxgp) ! 103: c = QUOTE; ! 104: else ! 105: c = *gp | QUOTE; ! 106: break; ! 107: case '\b': ! 108: if (gp > genbuf) { ! 109: gp--; ! 110: col--; ! 111: } ! 112: continue; ! 113: } ! 114: if (gp >= &genbuf[LBSIZE - 2]) { ! 115: ovflo: ! 116: fprintf(stderr, "Line too long\n"); ! 117: exit(1); ! 118: } ! 119: *gp++ = c; ! 120: if (gp > maxgp) ! 121: maxgp = gp; ! 122: col++; ! 123: } ! 124: *maxgp = 0; ! 125: strcpy(linebuf, genbuf); ! 126: for (lp = linebuf, gp = genbuf; c = *lp; gp++, lp++) ! 127: if (c & QUOTE) { ! 128: c =& 0177; ! 129: if (c == 0) ! 130: *lp = '_', *gp = ' '; ! 131: else ! 132: *lp = c, *gp = '-'; ! 133: } else ! 134: *gp = ' '; ! 135: --gp; ! 136: while (gp >= genbuf && *gp == ' ') ! 137: --gp; ! 138: gp[1] = 0; ! 139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.