|
|
1.1 root 1: /*
2: * Copyright (c) 1980 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: char copyright[] =
20: "@(#) Copyright (c) 1980 The Regents of the University of California.\n\
21: All rights reserved.\n";
22: #endif /* not lint */
23:
24: #ifndef lint
25: static char sccsid[] = "@(#)unexpand.c 5.2 (Berkeley) 10/26/88";
26: #endif /* not lint */
27:
28: /*
29: * unexpand - put tabs into a file replacing blanks
30: */
31: #include <stdio.h>
32:
33: char genbuf[BUFSIZ];
34: char linebuf[BUFSIZ];
35: int all;
36:
37: main(argc, argv)
38: int argc;
39: char *argv[];
40: {
41: register char *cp;
42:
43: argc--, argv++;
44: if (argc > 0 && argv[0][0] == '-') {
45: if (strcmp(argv[0], "-a") != 0) {
46: fprintf(stderr, "usage: unexpand [ -a ] file ...\n");
47: exit(1);
48: }
49: all++;
50: argc--, argv++;
51: }
52: do {
53: if (argc > 0) {
54: if (freopen(argv[0], "r", stdin) == NULL) {
55: perror(argv[0]);
56: exit(1);
57: }
58: argc--, argv++;
59: }
60: while (fgets(genbuf, BUFSIZ, stdin) != NULL) {
61: for (cp = linebuf; *cp; cp++)
62: continue;
63: if (cp > linebuf)
64: cp[-1] = 0;
65: tabify(all);
66: printf("%s", linebuf);
67: }
68: } while (argc > 0);
69: exit(0);
70: }
71:
72: tabify(c)
73: char c;
74: {
75: register char *cp, *dp;
76: register int dcol;
77: int ocol;
78:
79: ocol = 0;
80: dcol = 0;
81: cp = genbuf, dp = linebuf;
82: for (;;) {
83: switch (*cp) {
84:
85: case ' ':
86: dcol++;
87: break;
88:
89: case '\t':
90: dcol += 8;
91: dcol &= ~07;
92: break;
93:
94: default:
95: while (((ocol + 8) &~ 07) <= dcol) {
96: if (ocol + 1 == dcol)
97: break;
98: *dp++ = '\t';
99: ocol += 8;
100: ocol &= ~07;
101: }
102: while (ocol < dcol) {
103: *dp++ = ' ';
104: ocol++;
105: }
106: if (*cp == 0 || c == 0) {
107: strcpy(dp, cp);
108: return;
109: }
110: *dp++ = *cp;
111: ocol++, dcol++;
112: }
113: cp++;
114: }
115: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.