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