Annotation of 3BSD/cmd/iul.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.