|
|
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.