Annotation of 40BSD/cmd/unexpand.c, revision 1.1

1.1     ! root        1: static char *sccsid = "@(#)unexpand.c  4.1 (Berkeley) 10/1/80";
        !             2: /*
        !             3:  * unexpand - put tabs into a file replacing blanks
        !             4:  */
        !             5: #include <stdio.h>
        !             6: 
        !             7: char   genbuf[BUFSIZ];
        !             8: char   linebuf[BUFSIZ];
        !             9: int    all;
        !            10: 
        !            11: main(argc, argv)
        !            12:        int argc;
        !            13:        char *argv[];
        !            14: {
        !            15:        register char *cp;
        !            16: 
        !            17:        argc--, argv++;
        !            18:        if (argv[0][0] == '-') {
        !            19:                if (strcmp(argv[0], "-a") != 0) {
        !            20:                        fprintf(stderr, "usage: unexpand [ -a ] file ...\n");
        !            21:                        exit(1);
        !            22:                }
        !            23:                all++;
        !            24:                argc--, argv++;
        !            25:        }
        !            26:        do {
        !            27:                if (argc > 0) {
        !            28:                        if (freopen(argv[0], "r", stdin) == NULL) {
        !            29:                                perror(argv[0]);
        !            30:                                exit(1);
        !            31:                        }
        !            32:                        argc--, argv++;
        !            33:                }
        !            34:                while (fgets(genbuf, BUFSIZ, stdin) != NULL) {
        !            35:                        for (cp = linebuf; *cp; cp++)
        !            36:                                continue;
        !            37:                        if (cp > linebuf)
        !            38:                                cp[-1] = 0;
        !            39:                        tabify(all);
        !            40:                        printf("%s", linebuf);
        !            41:                }
        !            42:        } while (argc > 0);
        !            43:        exit(0);
        !            44: }
        !            45: 
        !            46: tabify(c)
        !            47:        char c;
        !            48: {
        !            49:        register char *cp, *dp;
        !            50:        register int dcol;
        !            51:        int ocol;
        !            52: 
        !            53:        ocol = 0;
        !            54:        dcol = 0;
        !            55:        cp = genbuf, dp = linebuf;
        !            56:        for (;;) {
        !            57:                switch (*cp) {
        !            58: 
        !            59:                case ' ':
        !            60:                        dcol++;
        !            61:                        break;
        !            62: 
        !            63:                case '\t':
        !            64:                        dcol =+ 8;
        !            65:                        dcol =& ~07;
        !            66:                        break;
        !            67: 
        !            68:                default:
        !            69:                        while (((ocol + 8) &~ 07) <= dcol) {
        !            70:                                if (ocol + 1 == dcol)
        !            71:                                        break;
        !            72:                                *dp++ = '\t';
        !            73:                                ocol =+ 8;
        !            74:                                ocol =& ~07;
        !            75:                        }
        !            76:                        while (ocol < dcol) {
        !            77:                                *dp++ = ' ';
        !            78:                                ocol++;
        !            79:                        }
        !            80:                        if (*cp == 0 || c == 0) {
        !            81:                                strcpy(dp, cp);
        !            82:                                return;
        !            83:                        }
        !            84:                        *dp++ = *cp;
        !            85:                        ocol++, dcol++;
        !            86:                }
        !            87:                cp++;
        !            88:        }
        !            89: }

unix.superglobalmegacorp.com

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