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

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

unix.superglobalmegacorp.com

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