Annotation of 42BSD/ucb/unexpand.c, revision 1.1.1.1

1.1       root        1: static char *sccsid = "@(#)unexpand.c  4.2 (Berkeley) 2/9/83";
                      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 (argc > 0 && 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.