|
|
1.1 root 1: static char *sccsid = "@(#)unexpand.c 4.1 (Berkeley) 10/1/80";
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 (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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.