Annotation of 43BSD/usr.bin/cb.c, revision 1.1

1.1     ! root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.