|
|
1.1 root 1: static char *sccsid = "@(#)cb.c 4.1 (Berkeley) 10/1/80";
2: #include <stdio.h>
3: int slevel[10];
4: int clevel = 0;
5: int spflg[20][10];
6: int sind[20][10];
7: int siflev[10];
8: int sifflg[10];
9: int iflev = 0;
10: int ifflg = -1;
11: int level = 0;
12: int ind[10] = {
13: 0,0,0,0,0,0,0,0,0,0 };
14: int eflg = 0;
15: int paren = 0;
16: int pflg[10] = {
17: 0,0,0,0,0,0,0,0,0,0 };
18: char lchar;
19: char pchar;
20: int aflg = 0;
21: int ct;
22: int stabs[20][10];
23: int qflg = 0;
24: char *wif[] = {
25: "if",0};
26: char *welse[] = {
27: "else",0};
28: char *wfor[] = {
29: "for",0};
30: char *wds[] = {
31: "case","default",0};
32: int j = 0;
33: char string[200];
34: char cc;
35: int sflg = 1;
36: int peek = -1;
37: int tabs = 0;
38: int lastchar;
39: int c;
40: main(argc,argv) int argc;
41: char argv[];
42: {
43: while((c = getch()) != EOF){
44: switch(c){
45: case ' ':
46: case '\t':
47: if(lookup(welse) == 1){
48: gotelse();
49: if(sflg == 0 || j > 0)string[j++] = c;
50: puts();
51: sflg = 0;
52: continue;
53: }
54: if(sflg == 0 || j > 0)string[j++] = c;
55: continue;
56: case '\n':
57: if((eflg = lookup(welse)) == 1)gotelse();
58: puts();
59: printf("\n");
60: sflg = 1;
61: if(eflg == 1){
62: pflg[level]++;
63: tabs++;
64: }
65: else
66: if(pchar == lchar)
67: aflg = 1;
68: continue;
69: case '{':
70: if(lookup(welse) == 1)gotelse();
71: siflev[clevel] = iflev;
72: sifflg[clevel] = ifflg;
73: iflev = ifflg = 0;
74: clevel++;
75: if(sflg == 1 && pflg[level] != 0){
76: pflg[level]--;
77: tabs--;
78: }
79: string[j++] = c;
80: puts();
81: getnl();
82: puts();
83: printf("\n");
84: tabs++;
85: sflg = 1;
86: if(pflg[level] > 0){
87: ind[level] = 1;
88: level++;
89: slevel[level] = clevel;
90: }
91: continue;
92: case '}':
93: clevel--;
94: if((iflev = siflev[clevel]-1) < 0)iflev = 0;
95: ifflg = sifflg[clevel];
96: if(pflg[level] >0 && ind[level] == 0){
97: tabs -= pflg[level];
98: pflg[level] = 0;
99: }
100: puts();
101: tabs--;
102: ptabs();
103: if((peek = getch()) == ';'){
104: printf("%c;",c);
105: peek = -1;
106: }
107: else printf("%c",c);
108: getnl();
109: puts();
110: printf("\n");
111: sflg = 1;
112: if(clevel < slevel[level])if(level > 0)level--;
113: if(ind[level] != 0){
114: tabs -= pflg[level];
115: pflg[level] = 0;
116: ind[level] = 0;
117: }
118: continue;
119: case '"':
120: case '\'':
121: string[j++] = c;
122: while((cc = getch()) != c){
123: string[j++] = cc;
124: if(cc == '\\'){
125: string[j++] = getch();
126: }
127: if(cc == '\n'){
128: puts();
129: sflg = 1;
130: }
131: }
132: string[j++] = cc;
133: if(getnl() == 1){
134: lchar = cc;
135: peek = '\n';
136: }
137: continue;
138: case ';':
139: string[j++] = c;
140: puts();
141: if(pflg[level] > 0 && ind[level] == 0){
142: tabs -= pflg[level];
143: pflg[level] = 0;
144: }
145: getnl();
146: puts();
147: printf("\n");
148: sflg = 1;
149: if(iflev > 0)
150: if(ifflg == 1){iflev--;
151: ifflg = 0;
152: }
153: else iflev = 0;
154: continue;
155: case '\\':
156: string[j++] = c;
157: string[j++] = getch();
158: continue;
159: case '?':
160: qflg = 1;
161: string[j++] = c;
162: continue;
163: case ':':
164: string[j++] = c;
165: if(qflg == 1){
166: qflg = 0;
167: continue;
168: }
169: if(lookup(wds) == 0){
170: sflg = 0;
171: puts();
172: }
173: else{
174: tabs--;
175: puts();
176: tabs++;
177: }
178: if((peek = getch()) == ';'){
179: printf(";");
180: peek = -1;
181: }
182: getnl();
183: puts();
184: printf("\n");
185: sflg = 1;
186: continue;
187: case '/':
188: string[j++] = c;
189: if((peek = getch()) != '*')continue;
190: string[j++] = peek;
191: peek = -1;
192: comment();
193: continue;
194: case ')':
195: paren--;
196: string[j++] = c;
197: puts();
198: if(getnl() == 1){
199: peek = '\n';
200: if(paren != 0)aflg = 1;
201: else if(tabs > 0){
202: pflg[level]++;
203: tabs++;
204: ind[level] = 0;
205: }
206: }
207: continue;
208: case '#':
209: string[j++] = c;
210: while((cc = getch()) != '\n')string[j++] = cc;
211: string[j++] = cc;
212: sflg = 0;
213: puts();
214: sflg = 1;
215: continue;
216: case '(':
217: string[j++] = c;
218: paren++;
219: if(lookup(wfor) == 1){
220: while((c = gets()) != ';');
221: ct=0;
222: cont:
223: while((c = gets()) != ')'){
224: if(c == '(') ct++;
225: }
226: if(ct != 0){
227: ct--;
228: goto cont;
229: }
230: paren--;
231: puts();
232: if(getnl() == 1){
233: peek = '\n';
234: pflg[level]++;
235: tabs++;
236: ind[level] = 0;
237: }
238: continue;
239: }
240: if(lookup(wif) == 1){
241: puts();
242: stabs[clevel][iflev] = tabs;
243: spflg[clevel][iflev] = pflg[level];
244: sind[clevel][iflev] = ind[level];
245: iflev++;
246: ifflg = 1;
247: }
248: continue;
249: default:
250: string[j++] = c;
251: if(c != ',')lchar = c;
252: }
253: }
254: }
255: ptabs(){
256: int i;
257: for(i=0; i < tabs; i++)printf("\t");
258: }
259: getch(){
260: if(peek < 0 && lastchar != ' ' && lastchar != '\t')pchar = lastchar;
261: lastchar = (peek<0) ? getc(stdin):peek;
262: peek = -1;
263: return(lastchar);
264: }
265: puts(){
266: if(j > 0){
267: if(sflg != 0){
268: ptabs();
269: sflg = 0;
270: if(aflg == 1){
271: aflg = 0;
272: if(tabs > 0)printf(" ");
273: }
274: }
275: string[j] = '\0';
276: printf("%s",string);
277: j = 0;
278: }
279: else{
280: if(sflg != 0){
281: sflg = 0;
282: aflg = 0;
283: }
284: }
285: }
286: lookup(tab)
287: char *tab[];
288: {
289: char r;
290: int l,kk,k,i;
291: if(j < 1)return(0);
292: kk=0;
293: while(string[kk] == ' ')kk++;
294: for(i=0; tab[i] != 0; i++){
295: l=0;
296: for(k=kk;(r = tab[i][l++]) == string[k] && r != '\0';k++);
297: if(r == '\0' && (string[k] < 'a' || string[k] > 'z' || k >= j))return(1);
298: }
299: return(0);
300: }
301: gets(){
302: char ch;
303: beg:
304: if((ch = string[j++] = getch()) == '\\'){
305: string[j++] = getch();
306: goto beg;
307: }
308: if(ch == '\'' || ch == '"'){
309: while((cc = string[j++] = getch()) != ch)if(cc == '\\')string[j++] = getch();
310: goto beg;
311: }
312: if(ch == '\n'){
313: puts();
314: aflg = 1;
315: goto beg;
316: }
317: else return(ch);
318: }
319: gotelse(){
320: tabs = stabs[clevel][iflev];
321: pflg[level] = spflg[clevel][iflev];
322: ind[level] = sind[clevel][iflev];
323: ifflg = 1;
324: }
325: getnl(){
326: while((peek = getch()) == '\t' || peek == ' '){
327: string[j++] = peek;
328: peek = -1;
329: }
330: if((peek = getch()) == '/'){
331: peek = -1;
332: if((peek = getch()) == '*'){
333: string[j++] = '/';
334: string[j++] = '*';
335: peek = -1;
336: comment();
337: }
338: else string[j++] = '/';
339: }
340: if((peek = getch()) == '\n'){
341: peek = -1;
342: return(1);
343: }
344: return(0);
345: }
346: comment(){
347: rep:
348: while((c = string[j++] = getch()) != '*')
349: if(c == '\n'){
350: puts();
351: sflg = 1;
352: }
353: gotstar:
354: if((c = string[j++] = getch()) != '/'){
355: if(c == '*')goto gotstar;
356: goto rep;
357: }
358: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.