|
|
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[] = "@(#)expand.c 5.1 (Berkeley) 5/31/85"; ! 15: #endif not lint ! 16: ! 17: #include <stdio.h> ! 18: /* ! 19: * expand - expand tabs to equivalent spaces ! 20: */ ! 21: int nstops; ! 22: int tabstops[100]; ! 23: ! 24: main(argc, argv) ! 25: int argc; ! 26: char *argv[]; ! 27: { ! 28: register int c, column; ! 29: register int n; ! 30: ! 31: argc--, argv++; ! 32: do { ! 33: while (argc > 0 && argv[0][0] == '-') { ! 34: getstops(argv[0]); ! 35: argc--, argv++; ! 36: } ! 37: if (argc > 0) { ! 38: if (freopen(argv[0], "r", stdin) == NULL) { ! 39: perror(argv[0]); ! 40: exit(1); ! 41: } ! 42: argc--, argv++; ! 43: } ! 44: column = 0; ! 45: for (;;) { ! 46: c = getc(stdin); ! 47: if (c == -1) ! 48: break; ! 49: switch (c) { ! 50: ! 51: case '\t': ! 52: if (nstops == 0) { ! 53: do { ! 54: putchar(' '); ! 55: column++; ! 56: } while (column & 07); ! 57: continue; ! 58: } ! 59: if (nstops == 1) { ! 60: do { ! 61: putchar(' '); ! 62: column++; ! 63: } while (((column - 1) % tabstops[0]) != (tabstops[0] - 1)); ! 64: continue; ! 65: } ! 66: for (n = 0; n < nstops; n++) ! 67: if (tabstops[n] > column) ! 68: break; ! 69: if (n == nstops) { ! 70: putchar(' '); ! 71: column++; ! 72: continue; ! 73: } ! 74: while (column < tabstops[n]) { ! 75: putchar(' '); ! 76: column++; ! 77: } ! 78: continue; ! 79: ! 80: case '\b': ! 81: if (column) ! 82: column--; ! 83: putchar('\b'); ! 84: continue; ! 85: ! 86: default: ! 87: putchar(c); ! 88: column++; ! 89: continue; ! 90: ! 91: case '\n': ! 92: putchar(c); ! 93: column = 0; ! 94: continue; ! 95: } ! 96: } ! 97: } while (argc > 0); ! 98: exit(0); ! 99: } ! 100: ! 101: getstops(cp) ! 102: register char *cp; ! 103: { ! 104: register int i; ! 105: ! 106: nstops = 0; ! 107: cp++; ! 108: for (;;) { ! 109: i = 0; ! 110: while (*cp >= '0' && *cp <= '9') ! 111: i = i * 10 + *cp++ - '0'; ! 112: if (i <= 0 || i > 256) { ! 113: bad: ! 114: fprintf(stderr, "Bad tab stop spec\n"); ! 115: exit(1); ! 116: } ! 117: if (nstops > 0 && i <= tabstops[nstops-1]) ! 118: goto bad; ! 119: tabstops[nstops++] = i; ! 120: if (*cp == 0) ! 121: break; ! 122: if (*cp++ != ',') ! 123: goto bad; ! 124: } ! 125: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.