|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.