Annotation of researchv10no/cmd/cref/mtab.c, revision 1.1

1.1     ! root        1: # include "econs.h"
        !             2: struct {
        !             3:                int     cl[NUMC];
        !             4:        }tab[NUMS];
        !             5: char   state[NUMS][8];
        !             6: char   class[NUMC][8];
        !             7: char   act[NUMA][8];
        !             8: char   def[NUMS][8];
        !             9: char   temp[8];
        !            10: 
        !            11: char   *st[NUMS];
        !            12: char   *df[NUMS];
        !            13: char   *cl[NUMC];
        !            14: char   *ac[NUMA];
        !            15: 
        !            16: int    t1;
        !            17: int    t2;
        !            18: 
        !            19: 
        !            20: main(argc,argv)        char    **argv;
        !            21: {
        !            22: 
        !            23:        extern  fin;
        !            24:        char    fl,nlfl,c,bfl,fo,brk;
        !            25:        int     cs,ca,cc,i,j,cd;
        !            26: 
        !            27:        if(argc != 3) {
        !            28:                printf("Usage: mtab input output\n");
        !            29:                exit();
        !            30:        }
        !            31: 
        !            32:        if((fo = creat(argv[2],0644)) < 0) {
        !            33:                printf("Output file.\n");
        !            34:                exit();
        !            35:        }
        !            36:        if((fin = open(argv[1],0)) < 0) {
        !            37:                printf("Input file.\n");
        !            38:                exit();
        !            39:        }
        !            40: 
        !            41: 
        !            42: 
        !            43:        nlfl = 1;
        !            44:        i = -1;
        !            45:        while(brk = rword()) {
        !            46:                switch (brk) {
        !            47:                        case '\n':
        !            48:                                if(nlfl) {
        !            49:                                        move(temp,state[++i]);
        !            50:                                        st[i] = &state[i];
        !            51:                                } else {
        !            52:                                        move(temp,def[i]);
        !            53:                                        df[i] = &def[i];
        !            54:                                        nlfl = 1;
        !            55:                                }
        !            56:                                continue;
        !            57:                        case ' ':
        !            58:                                if(nlfl) {
        !            59:                                        move(temp,state[++i]);
        !            60:                                        st[i] = &state[i];
        !            61:                                        nlfl = 0;
        !            62:                                } else {
        !            63:                                        error(7);
        !            64:                                }
        !            65:                                continue;
        !            66:                }
        !            67:        }
        !            68: 
        !            69: 
        !            70:        i = 128;
        !            71:        while(--i) {
        !            72:                class[i][0] = i;
        !            73:                class[i][1] = '\0';
        !            74:                cl[i] = &class[i];
        !            75:        }
        !            76:        cl[0] = &class[0];
        !            77: 
        !            78: 
        !            79:        bfl = nlfl = 0;
        !            80:        t1 = 0;
        !            81:        t2 = -1;
        !            82:        while(c = getchar()) {
        !            83: 
        !            84:                switch(c) {
        !            85: 
        !            86:                        default:
        !            87:                                if(t1 >= NUMA)  error(4);
        !            88:                                bfl = nlfl = 0;
        !            89:                                act[t1][++t2<8?t2:7] = c;
        !            90:                                continue;
        !            91: 
        !            92:                        case '\n':
        !            93:                                if(nlfl)        break;
        !            94:                                nlfl = 1;
        !            95: 
        !            96:                        case ' ':
        !            97:                                if(bfl) continue;
        !            98:                                bfl = 1;
        !            99:                                act[t1][++t2<8?t2:7] = '\0';
        !           100:                                ac[t1] = &act[t1];
        !           101:                                t1++;
        !           102:                                t2 = -1;
        !           103:                                continue;
        !           104:                }
        !           105:        break;
        !           106:        }
        !           107:        if(c == '\0')   exit();
        !           108: 
        !           109:        i = -1;
        !           110:        while(++i < NUMS) {
        !           111:                if(df[i]) {
        !           112:                        cd = find(ac,df[i],NUMA);
        !           113:                        j = -1;
        !           114:                        while(++j < NUMC)
        !           115:                                tab[i].cl[j] = cd;
        !           116:                }
        !           117:        }
        !           118: 
        !           119: 
        !           120:        fl = 0;
        !           121:        i = -1;
        !           122:        while(c = getchar()) {
        !           123: 
        !           124:                switch(c) {
        !           125: 
        !           126:                        case '\\':
        !           127:                                temp[++i] = getchar();
        !           128:                                continue;
        !           129: 
        !           130:                        case '\n':
        !           131:                                if(fl != 1)     continue;
        !           132: 
        !           133:                        default:
        !           134:                                temp[++i] = c;
        !           135:                                continue;
        !           136: 
        !           137:                        case '/':
        !           138:                                temp[++i] = '\0';
        !           139:                                i = -1;
        !           140:                                switch(fl) {
        !           141:                                        case 0:
        !           142:                                                cs = find(st,temp,NUMS);
        !           143:                                                fl = 1;
        !           144:                                                continue;
        !           145: 
        !           146:                                        case 1:
        !           147:                                                cc = find(cl,temp,NUMC);
        !           148:                                                fl = 2;
        !           149:                                                continue;
        !           150: 
        !           151:                                        default:
        !           152:                                                error(1);
        !           153: 
        !           154:                                }
        !           155: 
        !           156:                        case ';':
        !           157: 
        !           158:                                if(fl != 2)     error(2);
        !           159: 
        !           160:                                temp[++i] = '\0';
        !           161:                                i = -1;
        !           162:                                ca = find(ac,temp,NUMA);
        !           163: 
        !           164: /*printf("%o %o %o\n",cs,cc,ca); /*DEBUG*/
        !           165:                                tab[cs].cl[cc] = ca;
        !           166: 
        !           167:                                fl = 0;
        !           168:                                continue;
        !           169: 
        !           170: 
        !           171:                }
        !           172:        }
        !           173: 
        !           174:        i = -1;
        !           175:        while(++i < NUMS)
        !           176:                write(fo,tab[i].cl,256);
        !           177: 
        !           178: }
        !           179: 
        !           180: error(a)
        !           181: {
        !           182: 
        !           183:        printf("Error %d\n",a);
        !           184:        exit();
        !           185: 
        !           186: }
        !           187: 
        !           188: find(a, b, c)
        !           189: char   *a[];
        !           190: char   b[];
        !           191: int    c;
        !           192: {
        !           193:        int     i,j;
        !           194: 
        !           195: /*     printf("%s\n",b); /*DEBUG*/
        !           196:        i = -1;
        !           197:        while(++i < c) {
        !           198: /*     printf("        %s\n",a[i]); /*DEBUG*/
        !           199:                j = 0;
        !           200:                while(b[j] == a[i][j]) {
        !           201:                        if(b[j] == '\0')        goto found;
        !           202:                        j++;
        !           203:                }
        !           204:        }
        !           205: found:
        !           206:        return(i);
        !           207: }
        !           208: 
        !           209: rword() {
        !           210: 
        !           211:        char    c;
        !           212:        int     ct;
        !           213: 
        !           214:        ct = -1;
        !           215:        while(c = getchar()) {
        !           216:                switch(c) {
        !           217: 
        !           218:                        default:
        !           219:                                temp[++ct] = c;
        !           220:                                continue;
        !           221: 
        !           222:                        case '\n':
        !           223:                                if(ct == -1)    return('\0');
        !           224:                        case ' ':
        !           225:                                temp[++ct] = '\0';
        !           226:                                return(c);
        !           227:                }
        !           228:        }
        !           229: }
        !           230: 
        !           231: move(a,b)      char    *a;
        !           232:                char    *b;
        !           233: {
        !           234:        while((*b++ = *a++) != '\0');
        !           235:        return;
        !           236: }
        !           237: 

unix.superglobalmegacorp.com

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