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

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

unix.superglobalmegacorp.com

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