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