Annotation of researchv9/cmd/lex/sub1.c, revision 1.1

1.1     ! root        1: # include "ldefs.c"
        !             2: char *
        !             3: getl(p)        /* return next line of input, throw away trailing '\n' */
        !             4:        /* returns 0 if eof is had immediately */
        !             5:   char *p;
        !             6:        {
        !             7:        register int c;
        !             8:        register char *s, *t;
        !             9:        t = s = p;
        !            10:        while(((c = gch()) != 0) && c != '\n')
        !            11:                *t++ = c;
        !            12:        *t = 0;
        !            13:        if(c == 0 && s == t) return((char *)0);
        !            14:        prev = '\n';
        !            15:        pres = '\n';
        !            16:        return(s);
        !            17:        }
        !            18: space(ch)
        !            19:        {
        !            20:        switch(ch)
        !            21:                {
        !            22:                case ' ':
        !            23:                case '\t':
        !            24:                case '\n':
        !            25:                        return(1);
        !            26:                }
        !            27:        return(0);
        !            28:        }
        !            29: 
        !            30: digit(c)
        !            31: {
        !            32:        return(c>='0' && c <= '9');
        !            33: }
        !            34: error(s,p,d)
        !            35:        {
        !            36:        if(!eof)fprintf(errorf,"%d: ",yyline);
        !            37:        fprintf(errorf,"(Error) ");
        !            38:        fprintf(errorf,s,p,d);
        !            39:        putc('\n',errorf);
        !            40: # ifdef DEBUG
        !            41:        if(debug && sect != ENDSECTION) {
        !            42:                sect1dump();
        !            43:                sect2dump();
        !            44:        }
        !            45: # endif
        !            46:        if(
        !            47: # ifdef DEBUG
        !            48:                debug ||
        !            49: # endif
        !            50:                report == 1) statistics();
        !            51:        exit(1);        /* error return code */
        !            52:        }
        !            53: 
        !            54: warning(s,p,d)
        !            55:        {
        !            56:        if(!eof)fprintf(errorf,"%d: ",yyline);
        !            57:        fprintf(errorf,"(Warning) ");
        !            58:        fprintf(errorf,s,p,d);
        !            59:        putc('\n',errorf);
        !            60:        fflush(errorf);
        !            61:        fflush(fout);
        !            62:        fflush(stdout);
        !            63:        }
        !            64: index(a,s)
        !            65:        char *s;
        !            66: {
        !            67:        register int k;
        !            68:        for(k=0; s[k]; k++)
        !            69:                if (s[k]== a)
        !            70:                        return(k);
        !            71:        return(-1);
        !            72:        }
        !            73: 
        !            74: alpha(c)
        !            75:   int c; {
        !            76: # ifdef ASCII
        !            77: return('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z');
        !            78: # endif
        !            79: # ifdef EBCDIC
        !            80: return(index(c,"abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") >= 0);
        !            81: # endif
        !            82: }
        !            83: printable(c)
        !            84: {
        !            85: # ifdef ASCII
        !            86: return( c>040 && c < 0177);
        !            87: # endif
        !            88: # ifdef EBCDIC
        !            89: return(index(c, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,;:><+*)('&%!-=\"")>=0);
        !            90: # endif
        !            91: }
        !            92: lgate()
        !            93: {
        !            94:        char fname[20];
        !            95:        if (lgatflg) return;
        !            96:        lgatflg=1;
        !            97:        if(fout == NULL){
        !            98:                sprintf(fname, "lex.yy.%c", ratfor ? 'r' : 'c' );
        !            99:                fout = fopen(fname, "w");
        !           100:                }
        !           101:        if(fout == NULL) error("Can't open %s",fname);
        !           102:        if(ratfor) fprintf( fout, "#\n");
        !           103:        phead1();
        !           104:        }
        !           105: /* scopy(ptr to str, ptr to str) - copy first arg str to second */
        !           106: /* returns ptr to second arg */
        !           107: scopy(s,t)
        !           108:   char *s, *t; {
        !           109:        register char *i;
        !           110:        i = t;
        !           111:        while(*i++ = *s++);
        !           112:        return;
        !           113:        }
        !           114: siconv(t)      /* convert string t, return integer value */
        !           115:   char *t; {
        !           116:        register int i,sw;
        !           117:        register char *s;
        !           118:        s = t;
        !           119:        while(!(('0' <= *s && *s <= '9') || *s == '-') && *s) s++;
        !           120:        sw = 0;
        !           121:        if(*s == '-'){  /* neg */
        !           122:                sw = 1;
        !           123:                s++;
        !           124:                }
        !           125:        i = 0;
        !           126:        while('0' <= *s && *s <= '9')
        !           127:                i = i * 10 + (*(s++)-'0');
        !           128:        return(sw ? -i : i);
        !           129:        }
        !           130: /* slength(ptr to str) - return integer length of string arg */
        !           131: /* excludes '\0' terminator */
        !           132: slength(s)
        !           133:   char *s; {
        !           134:        register int n;
        !           135:        register char *t;
        !           136:        t = s;
        !           137:        for (n = 0; *t++; n++);
        !           138:        return(n);
        !           139:        }
        !           140: /* scomp(x,y) - return -1 if x < y,
        !           141:                0 if x == y,
        !           142:                return 1 if x > y, all lexicographically */
        !           143: scomp(x,y)
        !           144:   char *x,*y; {
        !           145:        register char *a,*d;
        !           146:        a = x;
        !           147:        d = y;
        !           148:        while(*a || *d){
        !           149:                if(*a > *d)
        !           150:                        return(1);      /* greater */
        !           151:                if(*a < *d)
        !           152:                        return(-1);     /* less */
        !           153:                a++;
        !           154:                d++;
        !           155:                }
        !           156:        return(0);      /* equal */
        !           157:        }
        !           158: ctrans(ss)
        !           159:        char **ss;
        !           160: {
        !           161:        register int c, k;
        !           162:        if ((c = **ss) != '\\')
        !           163:                return(c);
        !           164:        switch(c= *++*ss)
        !           165:        {
        !           166:        case 'n': c = '\n'; break;
        !           167:        case 't': c = '\t'; break;
        !           168:        case 'r': c = '\r'; break;
        !           169:        case 'b': c = '\b'; break;
        !           170:        case 'f': c = 014; break;               /* form feed for ascii */
        !           171:        case '\\': c = '\\'; break;
        !           172:        case '0': case '1': case '2': case '3':
        !           173:        case '4': case '5': case '6': case '7':
        !           174:                c -= '0';
        !           175:                while ((k = *(*ss+1)) >= '0' && k <= '7')
        !           176:                        {
        !           177:                        c = c*8 + k - '0';
        !           178:                        (*ss)++;
        !           179:                        }
        !           180:                break;
        !           181:        }
        !           182:        return(c);
        !           183: }
        !           184: cclinter(sw)
        !           185:   int sw; {
        !           186:                /* sw = 1 ==> ccl */
        !           187:        register int i, j, k;
        !           188:        int m;
        !           189:        if(!sw){                /* is NCCL */
        !           190:                for(i=1;i<NCH;i++)
        !           191:                        symbol[i] ^= 1;                 /* reverse value */
        !           192:                }
        !           193:        for(i=1;i<NCH;i++)
        !           194:                if(symbol[i]) break;
        !           195:        if(i >= NCH) return;
        !           196:        i = cindex[i];
        !           197:        /* see if ccl is already in our table */
        !           198:        j = 0;
        !           199:        if(i){
        !           200:                for(j=1;j<NCH;j++){
        !           201:                        if((symbol[j] && cindex[j] != i) ||
        !           202:                           (!symbol[j] && cindex[j] == i)) break;
        !           203:                        }
        !           204:                }
        !           205:        if(j >= NCH) return;            /* already in */
        !           206:        m = 0;
        !           207:        k = 0;
        !           208:        for(i=1;i<NCH;i++)
        !           209:                if(symbol[i]){
        !           210:                        if(!cindex[i]){
        !           211:                                cindex[i] = ccount;
        !           212:                                symbol[i] = 0;
        !           213:                                m = 1;
        !           214:                                }
        !           215:                        else k = 1;
        !           216:                        }
        !           217:                        /* m == 1 implies last value of ccount has been used */
        !           218:        if(m)ccount++;
        !           219:        if(k == 0) return;      /* is now in as ccount wholly */
        !           220:        /* intersection must be computed */
        !           221:        for(i=1;i<NCH;i++){
        !           222:                if(symbol[i]){
        !           223:                        m = 0;
        !           224:                        j = cindex[i];  /* will be non-zero */
        !           225:                        for(k=1;k<NCH;k++){
        !           226:                                if(cindex[k] == j){
        !           227:                                        if(symbol[k]) symbol[k] = 0;
        !           228:                                        else {
        !           229:                                                cindex[k] = ccount;
        !           230:                                                m = 1;
        !           231:                                                }
        !           232:                                        }
        !           233:                                }
        !           234:                        if(m)ccount++;
        !           235:                        }
        !           236:                }
        !           237:        return;
        !           238:        }
        !           239: usescape(c)
        !           240:   int c; {
        !           241:        register char d;
        !           242:        switch(c){
        !           243:        case 'n': c = '\n'; break;
        !           244:        case 'r': c = '\r'; break;
        !           245:        case 't': c = '\t'; break;
        !           246:        case 'b': c = '\b'; break;
        !           247:        case 'f': c = 014; break;               /* form feed for ascii */
        !           248:        case '0': case '1': case '2': case '3':
        !           249:        case '4': case '5': case '6': case '7':
        !           250:                c -= '0';
        !           251:                while('0' <= (d=gch()) && d <= '7'){
        !           252:                        c = c * 8 + (d-'0');
        !           253:                        if(!('0' <= peek && peek <= '7')) break;
        !           254:                        }
        !           255:                break;
        !           256:        }
        !           257:        return(c);
        !           258:        }
        !           259: lookup(s,t)
        !           260:   char *s;
        !           261:   char **t; {
        !           262:        register int i;
        !           263:        i = 0;
        !           264:        while(*t){
        !           265:                if(scomp(s,*t) == 0)
        !           266:                        return(i);
        !           267:                i++;
        !           268:                t++;
        !           269:                }
        !           270:        return(-1);
        !           271:        }
        !           272: cpyact(){ /* copy C action to the next ; or closing } */
        !           273:        register int brac, c, mth;
        !           274:        int savline, sw;
        !           275: 
        !           276:        brac = 0;
        !           277:        sw = TRUE;
        !           278: 
        !           279: while(!eof){
        !           280:        c = gch();
        !           281: swt:
        !           282:        switch( c ){
        !           283: 
        !           284: case '|':      if(brac == 0 && sw == TRUE){
        !           285:                        if(peek == '|')gch();           /* eat up an extra '|' */
        !           286:                        return(0);
        !           287:                        }
        !           288:                break;
        !           289: 
        !           290: case ';':
        !           291:                if( brac == 0 ){
        !           292:                        putc(c,fout);
        !           293:                        putc('\n',fout);
        !           294:                        return(1);
        !           295:                        }
        !           296:                break;
        !           297: 
        !           298: case '{':
        !           299:                brac++;
        !           300:                savline=yyline;
        !           301:                break;
        !           302: 
        !           303: case '}':
        !           304:                brac--;
        !           305:                if( brac == 0 ){
        !           306:                        putc(c,fout);
        !           307:                        putc('\n',fout);
        !           308:                        return(1);
        !           309:                        }
        !           310:                break;
        !           311: 
        !           312: case '/':      /* look for comments */
        !           313:                putc(c,fout);
        !           314:                c = gch();
        !           315:                if( c != '*' ) goto swt;
        !           316: 
        !           317:                /* it really is a comment */
        !           318: 
        !           319:                putc(c,fout);
        !           320:                savline=yyline;
        !           321:                while( c=gch() ){
        !           322:                        if( c=='*' ){
        !           323:                                putc(c,fout);
        !           324:                                if( (c=gch()) == '/' ) goto loop;
        !           325:                                }
        !           326:                        putc(c,fout);
        !           327:                        }
        !           328:                yyline=savline;
        !           329:                error( "EOF inside comment" );
        !           330: 
        !           331: case '\'':     /* character constant */
        !           332:                mth = '\'';
        !           333:                goto string;
        !           334: 
        !           335: case '"':      /* character string */
        !           336:                mth = '"';
        !           337: 
        !           338:        string:
        !           339: 
        !           340:                putc(c,fout);
        !           341:                while( c=gch() ){
        !           342:                        if( c=='\\' ){
        !           343:                                putc(c,fout);
        !           344:                                c=gch();
        !           345:                                }
        !           346:                        else if( c==mth ) goto loop;
        !           347:                        putc(c,fout);
        !           348:                        if (c == '\n')
        !           349:                                {
        !           350:                                yyline--;
        !           351:                                error( "Non-terminated string or character constant");
        !           352:                                }
        !           353:                        }
        !           354:                error( "EOF in string or character constant" );
        !           355: 
        !           356: case '\0':
        !           357:                yyline = savline;
        !           358:                error("Action does not terminate");
        !           359: default:
        !           360:                break;          /* usual character */
        !           361:                }
        !           362: loop:
        !           363:        if(c != ' ' && c != '\t' && c != '\n') sw = FALSE;
        !           364:        putc(c,fout);
        !           365:        }
        !           366: error("Premature EOF");
        !           367: }
        !           368: gch(){
        !           369:        register int c;
        !           370:        prev = pres;
        !           371:        c = pres = peek;
        !           372:        peek = pushptr > pushc ? *--pushptr : getc(fin);
        !           373:        if(peek == EOF && sargc > 1){
        !           374:                fclose(fin);
        !           375:                fin = fopen(sargv[++fptr],"r");
        !           376:                if(fin == NULL)
        !           377:                        error("Cannot open file %s",sargv[fptr]);
        !           378:                peek = getc(fin);
        !           379:                sargc--;
        !           380:                sargv++;
        !           381:                }
        !           382:        if(c == EOF) {
        !           383:                eof = TRUE;
        !           384:                fclose(fin);
        !           385:                return(0);
        !           386:                }
        !           387:        if(c == '\n')yyline++;
        !           388:        return(c);
        !           389:        }
        !           390: mn2(a,d,c)
        !           391:   int a,d,c;
        !           392:        {
        !           393:        name[tptr] = a;
        !           394:        left[tptr] = d;
        !           395:        right[tptr] = c;
        !           396:        parent[tptr] = 0;
        !           397:        nullstr[tptr] = 0;
        !           398:        switch(a){
        !           399:        case RSTR:
        !           400:                parent[d] = tptr;
        !           401:                break;
        !           402:        case BAR:
        !           403:        case RNEWE:
        !           404:                if(nullstr[d] || nullstr[c]) nullstr[tptr] = TRUE;
        !           405:                parent[d] = parent[c] = tptr;
        !           406:                break;
        !           407:        case RCAT:
        !           408:        case DIV:
        !           409:                if(nullstr[d] && nullstr[c])nullstr[tptr] = TRUE;
        !           410:                parent[d] = parent[c] = tptr;
        !           411:                break;
        !           412:        case RSCON:
        !           413:                parent[d] = tptr;
        !           414:                nullstr[tptr] = nullstr[d];
        !           415:                break;
        !           416: # ifdef DEBUG
        !           417:        default:
        !           418:                warning("bad switch mn2 %d %d",a,d);
        !           419:                break;
        !           420: # endif
        !           421:                }
        !           422:        if(tptr > treesize)
        !           423:                error("Parse tree too big %s",(treesize == TREESIZE?"\nTry using %e num":""));
        !           424:        return(tptr++);
        !           425:        }
        !           426: mn1(a,d)
        !           427:   int a,d;
        !           428:        {
        !           429:        name[tptr] = a;
        !           430:        left[tptr] = d;
        !           431:        parent[tptr] = 0;
        !           432:        nullstr[tptr] = 0;
        !           433:        switch(a){
        !           434:        case RCCL:
        !           435:        case RNCCL:
        !           436:                if(slength(d) == 0) nullstr[tptr] = TRUE;
        !           437:                break;
        !           438:        case STAR:
        !           439:        case QUEST:
        !           440:                nullstr[tptr] = TRUE;
        !           441:                parent[d] = tptr;
        !           442:                break;
        !           443:        case PLUS:
        !           444:        case CARAT:
        !           445:                nullstr[tptr] = nullstr[d];
        !           446:                parent[d] = tptr;
        !           447:                break;
        !           448:        case S2FINAL:
        !           449:                nullstr[tptr] = TRUE;
        !           450:                break;
        !           451: # ifdef DEBUG
        !           452:        case FINAL:
        !           453:        case S1FINAL:
        !           454:                break;
        !           455:        default:
        !           456:                warning("bad switch mn1 %d %d",a,d);
        !           457:                break;
        !           458: # endif
        !           459:                }
        !           460:        if(tptr > treesize)
        !           461:                error("Parse tree too big %s",(treesize == TREESIZE?"\nTry using %e num":""));
        !           462:        return(tptr++);
        !           463:        }
        !           464: mn0(a)
        !           465:   int a;
        !           466:        {
        !           467:        name[tptr] = a;
        !           468:        parent[tptr] = 0;
        !           469:        nullstr[tptr] = 0;
        !           470:        if(a >= NCH) switch(a){
        !           471:        case RNULLS: nullstr[tptr] = TRUE; break;
        !           472: # ifdef DEBUG
        !           473:        default:
        !           474:                warning("bad switch mn0 %d",a);
        !           475:                break;
        !           476: # endif
        !           477:        }
        !           478:        if(tptr > treesize)
        !           479:                error("Parse tree too big %s",(treesize == TREESIZE?"\nTry using %e num":""));
        !           480:        return(tptr++);
        !           481:        }
        !           482: munput(t,p)    /* implementation dependent */
        !           483:   char *p;
        !           484:   int t; {
        !           485:        register int i,j;
        !           486:        if(t == 'c'){
        !           487:                *pushptr++ = peek;              /* watch out for this */
        !           488:                peek = (int)p;
        !           489:                }
        !           490:        else if(t == 's'){
        !           491:                *pushptr++ = peek;
        !           492:                peek = p[0];
        !           493:                i = slength(p);
        !           494:                for(j = i-1; j>=1; j--)
        !           495:                        *pushptr++ = p[j];
        !           496:                }
        !           497: # ifdef DEBUG
        !           498:        else error("Unrecognized munput option %c",t);
        !           499: # endif
        !           500:        if(pushptr >= pushc+TOKENSIZE)
        !           501:                error("Too many characters pushed");
        !           502:        return;
        !           503:        }
        !           504: 
        !           505: dupl(n)
        !           506:   int n; {
        !           507:        /* duplicate the subtree whose root is n, return ptr to it */
        !           508:        register int i;
        !           509:        i = name[n];
        !           510:        if(i < NCH) return(mn0(i));
        !           511:        switch(i){
        !           512:        case RNULLS:
        !           513:                return(mn0(i));
        !           514:        case RCCL: case RNCCL: case FINAL: case S1FINAL: case S2FINAL:
        !           515:                return(mn1(i,left[n]));
        !           516:        case STAR: case QUEST: case PLUS: case CARAT:
        !           517:                return(mn1(i,dupl(left[n])));
        !           518:        case RSTR: case RSCON:
        !           519:                return(mn2(i,dupl(left[n]),right[n]));
        !           520:        case BAR: case RNEWE: case RCAT: case DIV:
        !           521:                return(mn2(i,dupl(left[n]),dupl(right[n])));
        !           522: # ifdef DEBUG
        !           523:        default:
        !           524:                warning("bad switch dupl %d",n);
        !           525: # endif
        !           526:        }
        !           527:        return(0);
        !           528:        }
        !           529: # ifdef DEBUG
        !           530: allprint(c)
        !           531:   char c; {
        !           532:        switch(c){
        !           533:                case 014:
        !           534:                        printf("\\f");
        !           535:                        charc++;
        !           536:                        break;
        !           537:                case '\n':
        !           538:                        printf("\\n");
        !           539:                        charc++;
        !           540:                        break;
        !           541:                case '\t':
        !           542:                        printf("\\t");
        !           543:                        charc++;
        !           544:                        break;
        !           545:                case '\b':
        !           546:                        printf("\\b");
        !           547:                        charc++;
        !           548:                        break;
        !           549:                case ' ':
        !           550:                        printf("\\\bb");
        !           551:                        break;
        !           552:                default:
        !           553:                        if(!printable(c)){
        !           554:                                printf("\\%-3o",c);
        !           555:                                charc += 3;
        !           556:                                }
        !           557:                        else 
        !           558:                                putchar(c);
        !           559:                        break;
        !           560:                }
        !           561:        charc++;
        !           562:        return;
        !           563:        }
        !           564: strpt(s)
        !           565:   char *s; {
        !           566:        charc = 0;
        !           567:        while(*s){
        !           568:                allprint(*s++);
        !           569:                if(charc > LINESIZE){
        !           570:                        charc = 0;
        !           571:                        printf("\n\t");
        !           572:                        }
        !           573:                }
        !           574:        return;
        !           575:        }
        !           576: sect1dump(){
        !           577:        register int i;
        !           578:        printf("Sect 1:\n");
        !           579:        if(def[0]){
        !           580:                printf("str     trans\n");
        !           581:                i = -1;
        !           582:                while(def[++i])
        !           583:                        printf("%s\t%s\n",def[i],subs[i]);
        !           584:                }
        !           585:        if(sname[0]){
        !           586:                printf("start names\n");
        !           587:                i = -1;
        !           588:                while(sname[++i])
        !           589:                        printf("%s\n",sname[i]);
        !           590:                }
        !           591:        if(chset == TRUE){
        !           592:                printf("char set changed\n");
        !           593:                for(i=1;i<NCH;i++){
        !           594:                        if(i != ctable[i]){
        !           595:                                allprint(i);
        !           596:                                putchar(' ');
        !           597:                                printable(ctable[i]) ? putchar(ctable[i]) : printf("%d",ctable[i]);
        !           598:                                putchar('\n');
        !           599:                                }
        !           600:                        }
        !           601:                }
        !           602:        }
        !           603: sect2dump(){
        !           604:        printf("Sect 2:\n");
        !           605:        treedump();
        !           606:        }
        !           607: treedump()
        !           608:        {
        !           609:        register int t;
        !           610:        register char *p;
        !           611:        printf("treedump %d nodes:\n",tptr);
        !           612:        for(t=0;t<tptr;t++){
        !           613:                printf("%4d ",t);
        !           614:                parent[t] ? printf("p=%4d",parent[t]) : printf("      ");
        !           615:                printf("  ");
        !           616:                if(name[t] < NCH) {
        !           617:                                allprint(name[t]);
        !           618:                                }
        !           619:                else switch(name[t]){
        !           620:                        case RSTR:
        !           621:                                printf("%d ",left[t]);
        !           622:                                allprint(right[t]);
        !           623:                                break;
        !           624:                        case RCCL:
        !           625:                                printf("ccl ");
        !           626:                                strpt(left[t]);
        !           627:                                break;
        !           628:                        case RNCCL:
        !           629:                                printf("nccl ");
        !           630:                                strpt(left[t]);
        !           631:                                break;
        !           632:                        case DIV:
        !           633:                                printf("/ %d %d",left[t],right[t]);
        !           634:                                break;
        !           635:                        case BAR:
        !           636:                                printf("| %d %d",left[t],right[t]);
        !           637:                                break;
        !           638:                        case RCAT:
        !           639:                                printf("cat %d %d",left[t],right[t]);
        !           640:                                break;
        !           641:                        case PLUS:
        !           642:                                printf("+ %d",left[t]);
        !           643:                                break;
        !           644:                        case STAR:
        !           645:                                printf("* %d",left[t]);
        !           646:                                break;
        !           647:                        case CARAT:
        !           648:                                printf("^ %d",left[t]);
        !           649:                                break;
        !           650:                        case QUEST:
        !           651:                                printf("? %d",left[t]);
        !           652:                                break;
        !           653:                        case RNULLS:
        !           654:                                printf("nullstring");
        !           655:                                break;
        !           656:                        case FINAL:
        !           657:                                printf("final %d",left[t]);
        !           658:                                break;
        !           659:                        case S1FINAL:
        !           660:                                printf("s1final %d",left[t]);   
        !           661:                                break;
        !           662:                        case S2FINAL:
        !           663:                                printf("s2final %d",left[t]);
        !           664:                                break;
        !           665:                        case RNEWE:
        !           666:                                printf("new %d %d",left[t],right[t]);
        !           667:                                break;
        !           668:                        case RSCON:
        !           669:                                p = (char *)right[t];
        !           670:                                printf("start %s",sname[*p++-1]);
        !           671:                                while(*p)
        !           672:                                        printf(", %s",sname[*p++-1]);
        !           673:                                printf(" %d",left[t]);
        !           674:                                break;
        !           675:                        default:
        !           676:                                printf("unknown %d %d %d",name[t],left[t],right[t]);
        !           677:                                break;
        !           678:                        }
        !           679:                if(nullstr[t])printf("\t(null poss.)");
        !           680:                putchar('\n');
        !           681:                }
        !           682:        }
        !           683: # endif

unix.superglobalmegacorp.com

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