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

Defined functions

comment defined in line 347; used 2 times
getch defined in line 260; used 17 times
getnl defined in line 326; used 7 times
getstr defined in line 302; used 3 times
gotelse defined in line 320; used 3 times
lookup defined in line 287; used 6 times
main defined in line 41; never used
ptabs defined in line 256; used 2 times
puts defined in line 266; used 23 times

Defined variables

aflg defined in line 20; used 6 times
c defined in line 39; used 26 times
cc defined in line 34; used 11 times
clevel defined in line 4; used 14 times
ct defined in line 21; used 4 times
eflg defined in line 14; used 2 times
ifflg defined in line 10; used 7 times
iflev defined in line 9; used 14 times
ind defined in line 12; used 9 times
j defined in line 32; used 39 times
lastchar defined in line 38; used 5 times
lchar defined in line 18; used 3 times
level defined in line 11; used 30 times
paren defined in line 15; used 4 times
pchar defined in line 19; used 2 times
peek defined in line 36; used 24 times
pflg defined in line 16; used 16 times
qflg defined in line 23; used 3 times
sccsid defined in line 1; never used
sflg defined in line 35; used 18 times
sifflg defined in line 8; used 2 times
siflev defined in line 7; used 2 times
sind defined in line 6; used 2 times
slevel defined in line 3; used 2 times
spflg defined in line 5; used 2 times
stabs defined in line 22; used 2 times
string defined in line 33; used 36 times
tabs defined in line 37; used 16 times
wds defined in line 30; used 1 times
welse defined in line 26; used 3 times
wfor defined in line 28; used 1 times
wif defined in line 24; used 1 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2887
Valid CSS Valid XHTML 1.0 Strict