Annotation of researchv10no/cmd/cref/acts.c, revision 1.1.1.1

1.1       root        1: #
                      2: # include "mcons.c"
                      3: # include "ccmn.c"
                      4: 
                      5: int    cross   1;
                      6: int    order   1;
                      7: char   mone    -1;
                      8: 
                      9: coll()
                     10: {
                     11:        cs = COLLECT;
                     12:        temp[t1].beg = &line[l];
                     13:        return;
                     14: }
                     15: 
                     16: save()
                     17: {
                     18:        extern  wspace();
                     19: 
                     20:        line[l] = '\0';
                     21:        temp[t1].ct = &line[l] - temp[t1].beg;
                     22:        temp[t1].term = c;
                     23: 
                     24:        if((c == ' ' || c == '\t') && cflag) {
                     25:                gch[++fl] = mone;
                     26:                flag[fl] = &wspace;
                     27:        } else {
                     28:                sav1();
                     29:        }
                     30:        return;
                     31: }
                     32: 
                     33: sav1()
                     34: {
                     35:        extern  only;
                     36:        struct tempent  *ptr;
                     37:        int     a,tt,val;
                     38:        int     xval;
                     39: 
                     40:        ptr = &temp[t1];
                     41:        val = search(ptr->beg,ptr->ct,&itab,0);
                     42:        if(cflag && c == '(' && level == 0 && hlevel == 0)
                     43:                csym();
                     44: 
                     45:        cs = SKIP;
                     46: 
                     47:        if(xsw) {
                     48:            switch(val) {
                     49:                case 0:
                     50:                        if((!level&&!hlevel)||(c == '(')||xtrn
                     51:                                || ssw) {
                     52:                                xval = search(ptr->beg,ptr->ct,&xtab,1);
                     53:                                goto yes;
                     54:                        } else {
                     55:                                if(xval = search(ptr->beg,ptr->ct,&xtab,0)) {
                     56:                                        goto yes;
                     57:                                }
                     58:                        }
                     59:                        goto no;
                     60: 
                     61:                case 1:
                     62:                        break;
                     63: 
                     64:                case 2:
                     65:                        xtrn = 1;
                     66:                        goto no;
                     67: 
                     68:                case 3:
                     69:                        if(hlevel)      type = 1;
                     70:                        if(!level&&!hlevel)     ssw = 1;
                     71:                        goto no;
                     72: 
                     73:                case 4:
                     74:                        if(hlevel)      type = 1;
                     75:                        goto no;
                     76: 
                     77:                case 5:
                     78:                        goto no;
                     79:            }
                     80:        }
                     81: 
                     82:        if(hlevel && (val == 4 || val == 3))    type = 1;
                     83:        if(!val == !only)       goto yes;
                     84: no:
                     85:        *(ptr->beg + ptr->ct) = ptr->term;
                     86:        return(0);
                     87: yes:
                     88:        tt = t1;
                     89:        while(tt)
                     90:                if(comp(ptr->beg,temp[--tt].beg))       goto no;
                     91:        t1++;
                     92:        return(1);
                     93: }
                     94: 
                     95: out()
                     96: {
                     97:        auto    i,ct;
                     98:        if(cs == COLLECT)       save();
                     99: 
                    100:        ct = t1;
                    101:        while(ct--)
                    102:                temp[ct].beg[temp[ct].ct] = temp[ct].term;
                    103: 
                    104:        while(t1--) {
                    105: /*printf("t1 = %d  beg = %d  ct = %d\n",t1,temp[t1].beg,temp[t1].ct); /* DEBUG */
                    106: 
                    107:                switch(order) {
                    108: 
                    109:                        case 1:
                    110:                                if(utmp)
                    111:                                        i = 0;
                    112:                                else
                    113:                                        i = dfile(temp[t1].beg);
                    114: 
                    115:                                if((ct = temp[t1].ct) >= 8) {
                    116:                                        ct = 8;
                    117:                                        *curf = -1;
                    118:                                } else {
                    119:                                        *curf = '\t';
                    120:                                }
                    121: 
                    122:                                put(i,temp[t1].beg,ct);
                    123:                                if(!single)
                    124:                                        put(i, curf, curfl);
                    125:                                else
                    126:                                        put(i, curf, 1);
                    127:                                if(cross)       put(i,curs,cursl);
                    128:                                conf(lno,4,lbuf);
                    129:                                put(i,lbuf,5);
                    130:                                break;
                    131: 
                    132:                        case 2:
                    133:                                i = dfile(curf+1);
                    134:                                put(i,curf+1,curfl-1);
                    135:                                if(cross)       put(i,curs,cursl);
                    136:                                else {
                    137:                                        conf(lno,4,lbuf);
                    138:                                        put(i,lbuf,5);
                    139:                                }
                    140:                                if((ct = temp[t1].ct) >= 8) {
                    141:                                        put(i,temp[t1].beg,8);
                    142:                                        put(i,&mone,1);
                    143:                                } else {
                    144:                                        put(i,temp[t1].beg,ct);
                    145:                                        put(i,"\t",1);
                    146:                                }
                    147:                                if(cross) {
                    148:                                        conf(lno,4,lbuf);
                    149:                                        put(i,lbuf,5);
                    150:                                }
                    151:                                break;
                    152: 
                    153:                        case 3:
                    154:                                i = dfile(curs);
                    155:                                put(i,curs,cursl);
                    156:                                if((ct = temp[t1].ct) >= 8) {
                    157:                                        put(i,temp[t1].beg,8);
                    158:                                        *curf = -1;
                    159:                                } else {
                    160:                                        put(i,temp[t1].beg,ct);
                    161:                                        *curf = '\t';
                    162:                                }
                    163:                                put(i,curf,curfl);
                    164:                                conf(lno,4,lbuf);
                    165:                                put(i,lbuf,5);
                    166:                }
                    167:                if(!nocont)
                    168:                        put(i,line,l + 1);
                    169: 
                    170:        }
                    171:        t1 = 0;
                    172:        l = -1;
                    173:        lno++;
                    174:        cs = SKIP;
                    175: 
                    176:        return;
                    177: }
                    178: 
                    179: 
                    180: asym()
                    181: {
                    182:        int     i;
                    183:        char    *p;
                    184: 
                    185:        if(cs == COLLECT) {
                    186:                if(cross) {
                    187:                        p = temp[t1].beg;
                    188:                        cursl = &line[l] - p;
                    189:                        cursl = cursl>8?8:cursl;
                    190:                        i = -1;
                    191:                        while(++i < cursl)
                    192:                                curs[i] = *p++;
                    193:                        if(cursl < 8)
                    194:                                curs[cursl++] = '\t';
                    195:                        else
                    196:                                curs[cursl++] = -1;
                    197:                }
                    198:                save();
                    199:        }
                    200:        cs = SKIP;
                    201: }
                    202: 
                    203: asw()
                    204: {
                    205:        switch(gch[fl]) {
                    206: 
                    207:                case 0:
                    208:                        if(cs == COLLECT)       save();
                    209:                        cs = SKIP;
                    210:                        flag[++fl] = &asw;
                    211:                        gch[fl] = c;
                    212:                        return(1);
                    213: 
                    214:                case '\'':
                    215:                        if(c == '\\') {
                    216:                                gch[fl] = c;
                    217:                                return(1);
                    218:                        }
                    219:                        break;
                    220: 
                    221:                case '"':
                    222:                        gch[fl] = '\'';
                    223: 
                    224:                        if(c == '\\') {
                    225:                                flag[++fl] = &asw;
                    226:                                gch[fl] = c;
                    227:                                return(1);
                    228:                        }
                    229:                        return(1);
                    230: 
                    231:                case '<':
                    232:                        if(c == '\n')   out();
                    233:                        if(c == '\\') {
                    234:                                flag[++fl] = &asw;
                    235:                                gch[fl] = c;
                    236:                                return(1);
                    237:                        }
                    238:                        if(c != '>')    return(1);
                    239:                        break;
                    240: 
                    241:                case '/':
                    242:                        if(c != '\n')   return(1);
                    243: 
                    244:                case '\\': 
                    245:                        if(c == '\n')   out();
                    246: 
                    247:        }
                    248:        fl--;
                    249:        return(1);
                    250: 
                    251: }
                    252: 
                    253: csw()
                    254: {
                    255:        if(cs == COLLECT)       save();
                    256: 
                    257:        switch(gch[fl]) {
                    258: 
                    259:                case 0:
                    260:                        if(c == '*')
                    261:                                if(line[l - 1] != '/')
                    262:                                        return(1);
                    263:                        gch[++fl] = c;
                    264:                        flag[fl] = &csw;
                    265:                        return(1);
                    266: 
                    267:                case '*':
                    268:                        if(c == '\n')   out();
                    269:                        if(c == '/' && line[l - 1] == '*')
                    270:                                break;
                    271:                        return(1);
                    272: 
                    273:                case '\'':
                    274:                case '"':
                    275:                        if(c == gch[fl])
                    276:                                break;
                    277:                        if(c == '\\') {
                    278:                                gch[++fl] = c;
                    279:                                flag[fl] = &csw;
                    280:                        }
                    281:                        return(1);
                    282: 
                    283:                case '\\':
                    284:                        break;
                    285:                }
                    286:                fl--;
                    287:                return(1);
                    288: }
                    289: 
                    290: incl()
                    291: {
                    292: /*     printf("incl: l = %d hl = %d dl = %d\n",level,hlevel,dlevel);/*DEBUG*/
                    293:        if(cs == COLLECT)       save();
                    294:        if(hlevel) {
                    295:                hlevel = 0;
                    296:                level++;
                    297:        } else {
                    298:                dlevel++;
                    299:        }
                    300: 
                    301:        cs = SKIP;
                    302: }
                    303: 
                    304: decl()
                    305: {
                    306: /*     printf("decl: l = %d hl = %d dl = %d\n",level,hlevel,dlevel);/*DEBUG*/
                    307:        if(cs == COLLECT)       save();
                    308:        cs = SKIP;
                    309:        if(dlevel) {
                    310:                dlevel--;
                    311:                return;
                    312:        }
                    313:        if(--level > 0) return;
                    314:        curs[0] = '_';
                    315:        curs[1] = '\t';
                    316:        cursl = 2;
                    317:        level = 0;
                    318:        return;
                    319: }
                    320: 
                    321: csym()
                    322: {
                    323:        int     i;
                    324:        char    *p;
                    325: 
                    326: /*     printf("csym: l = %d hl = %d dl = %d\n",level,hlevel,dlevel);/*DEBUG*/
                    327: /*     printf("%s\n", temp[t1].beg);   /*DEBUG */
                    328:        p = temp[t1].beg;
                    329:        if(cs == COLLECT && level == 0) {
                    330:                if(cross) {
                    331:                        cursl = temp[t1].ct;
                    332:                        cursl = cursl>8?8:cursl;
                    333:                        i = -1;
                    334:                        while(++i < cursl)
                    335:                                curs[i] = *p++;
                    336:                        if(cursl < 8)
                    337:                                curs[cursl++] = '\t';
                    338:                        else
                    339:                                curs[cursl++] = -1;
                    340:                }
                    341:                hlevel = 1;
                    342:        }
                    343:        cs = SKIP;
                    344: }
                    345: 
                    346: dfile(a)
                    347:        char    *a;
                    348: {
                    349:        if(*a < 'c')    return(0);
                    350:        if(*a < 'h')    return(1);
                    351:        if(*a < 'r')    return(2);
                    352:        return(3);
                    353: }
                    354: 
                    355: 
                    356: sk2()
                    357: {
                    358:        cs = SKIP2;
                    359: }
                    360: 
                    361: sk()
                    362: {
                    363:        cs = SKIP;
                    364: }
                    365: 
                    366: tabs()
                    367: {
                    368:        if(l == 0)      l = -1;
                    369: }
                    370: 
                    371: 
                    372: search(symbol,length,params,install)
                    373:        char    *symbol;
                    374:        int     length;
                    375:        struct  htab    *params;
                    376:        int     install;
                    377: {
                    378:        char    *sp,*p;
                    379:        static  int     curb,*hptr,hsiz,nsym,ssiz;
                    380:        static  char    *symt;
                    381:        auto    h,i,j,k;
                    382: 
                    383:        if(hptr != params->hptr) {
                    384:                hptr = params->hptr;
                    385:                hsiz = params->hsiz;
                    386:                symt = params->symt;
                    387:                ssiz = params->ssiz;
                    388:                curb = params->curb;
                    389:                nsym = params->nsym;
                    390:        }
                    391: 
                    392:        symbol[length] = '\0';
                    393:        sp = symbol;
                    394: 
                    395:        i = length;
                    396:        h = 1;
                    397:        while(i--)
                    398:                h =* *sp++;
                    399: 
                    400:        if(h == 0100000) {
                    401:                h = 1;
                    402:        } else {
                    403:                h = h<0?(-h)%hsiz:h%hsiz;
                    404:        }
                    405:        if(h == 0)      h++;
                    406: /*             printf("%s %d\n",symbol,h);     /*DEBUG*/
                    407: 
                    408:        while((p = &symt[hptr[h]]) > symt) {
                    409:                j = length + 2;
                    410:                sp = symbol;
                    411:                while(--j) {
                    412:                        if(*p++ != *sp++)       goto no;
                    413:                }
                    414:                return(*p);
                    415: no:
                    416:                h = (h + h)%hsiz;
                    417:        }
                    418:        if(install) {
                    419:                if(++nsym >= hsiz) {
                    420:                        printf("Too many symbols.\n");
                    421:                        dexit();
                    422:                }
                    423: 
                    424:                hptr[h] = curb;
                    425:                length++;
                    426:                if((curb + length) >= ssiz) {
                    427:                        printf("Too many characters in symbols.\n");
                    428:                        dexit();
                    429:                }
                    430: 
                    431:                while(length--)
                    432:                        symt[curb++] = *symbol++;
                    433:                symt[curb++] = install;
                    434:                params->curb = curb;
                    435:                params->nsym = nsym;
                    436:        }
                    437:        return(0);
                    438: }
                    439: 
                    440: conf(n,width,buf) 
                    441:        char    *buf;
                    442: {
                    443:        auto    i,a;
                    444: 
                    445:        i = width;
                    446:        while(i--)      buf[i] = ' ';
                    447: 
                    448:        buf[(a = n/10)?conf(a,--width,buf):--width] = n%10 + '0';
                    449: 
                    450:        return(++width);
                    451: }
                    452: 
                    453: 
                    454: comp(a,b)
                    455:        char    *a;
                    456:        char    *b;
                    457: {
                    458:        a--;
                    459:        b--;
                    460:        while(*++a == *++b)
                    461:                if(*a == '\0')  return(1);
                    462:        return(0);
                    463: }
                    464: 
                    465: semi()
                    466: {
                    467:        if(cs == COLLECT)       save();
                    468:        if(only)        return;
                    469:        xtrn = 0;
                    470:        if(!level) {
                    471:                ssw = 0;
                    472:                if(!type) {
                    473:                        hlevel = 0;
                    474:                        curs[0] = '_';
                    475:                        curs[1] = '\t';
                    476:                        cursl = 2;
                    477:                }
                    478:                type = 0;
                    479:        }
                    480:        cs = SKIP;
                    481: }
                    482: 
                    483: wspace()
                    484: {
                    485:        if(c == ' ' || c == '\t')
                    486:                return(1);
                    487:        sav1();
                    488:        fl--;
                    489:        return(0);
                    490: }
                    491: 

unix.superglobalmegacorp.com

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