Annotation of researchv9/sys.vax/conf/src/config/y.tab.c, revision 1.1.1.1

1.1       root        1: 
                      2: # line 1 "config.y"
                      3: typedef union  {
                      4:        int i;
                      5:        char *cp;
                      6:        struct idlst *idlst;
                      7: } YYSTYPE;
                      8: # define CPU 257
                      9: # define IDENT 258
                     10: # define CONFIG 259
                     11: # define ANY 260
                     12: # define DEVICE 261
                     13: # define UBA 262
                     14: # define MBA 263
                     15: # define NEXUS 264
                     16: # define CSR 265
                     17: # define DRIVE 266
                     18: # define VECTOR 267
                     19: # define OPTIONS 268
                     20: # define CONTROLLER 269
                     21: # define PSEUDO_DEVICE 270
                     22: # define FLAGS 271
                     23: # define ID 272
                     24: # define SEMICOLON 273
                     25: # define NUMBER 274
                     26: # define FPNUMBER 275
                     27: # define TRACE 276
                     28: # define DISK 277
                     29: # define SLAVE 278
                     30: # define AT 279
                     31: # define HZ 280
                     32: # define TIMEZONE 281
                     33: # define DST 282
                     34: # define MAXUSERS 283
                     35: # define MASTER 284
                     36: # define MAKEFILE 285
                     37: # define COMMA 286
                     38: # define MINUS 287
                     39: 
                     40: # line 13 "config.y"
                     41: /*     config.y        1.11    81/05/22        */
                     42: #include "config.h"
                     43: #include <stdio.h>
                     44:        struct device cur;
                     45:        struct device *curp = NULL;
                     46:        char *temp_id;
                     47: #define yyclearin yychar = -1
                     48: #define yyerrok yyerrflag = 0
                     49: extern int yychar;
                     50: extern short yyerrflag;
                     51: #ifndef YYMAXDEPTH
                     52: #define YYMAXDEPTH 150
                     53: #endif
                     54: YYSTYPE yylval, yyval;
                     55: # define YYERRCODE 256
                     56: 
                     57: # line 169 "config.y"
                     58: 
                     59: 
                     60: yyerror(s)
                     61: char *s;
                     62: {
                     63:        fprintf(stderr, "config: %s at line %d\n", s, yyline);
                     64: }
                     65: 
                     66: /*
                     67:  * ns:
                     68:  *     Return the passed string in a new space
                     69:  */
                     70: 
                     71: char *
                     72: ns(str)
                     73: register char *str;
                     74: {
                     75:        register char *cp;
                     76: 
                     77:        cp = malloc(strlen(str)+1);
                     78:        strcpy(cp, str);
                     79:        return cp;
                     80: }
                     81: 
                     82: /*
                     83:  * newdev
                     84:  *     Add a device to the list
                     85:  */
                     86: 
                     87: newdev(dp)
                     88: register struct device *dp;
                     89: {
                     90:        register struct device *np;
                     91: 
                     92:        np = (struct device *) malloc(sizeof *np);
                     93:        *np = *dp;
                     94:        if (curp == NULL)
                     95:                dtab = np;
                     96:        else
                     97:                curp->d_next = np;
                     98:        curp = np;
                     99: }
                    100: 
                    101: /*
                    102:  * mkconf
                    103:  *     Note that a configuration should be made
                    104:  */
                    105: 
                    106: mkconf(dev, sysname)
                    107: char *dev, *sysname;
                    108: {
                    109:        register struct file_list *fl;
                    110: 
                    111:        fl = (struct file_list *) malloc(sizeof *fl);
                    112:        fl->f_fn = ns(dev);
                    113:        fl->f_needs = ns(sysname);
                    114:        if (confp == NULL)
                    115:            conf_list = fl;
                    116:        else
                    117:            confp->f_next = fl;
                    118:        confp = fl;
                    119: }
                    120: 
                    121: /*
                    122:  * Connect:
                    123:  *     Find the pointer to connect to the given device and number.
                    124:  *     returns NULL if no such device and prints an error message
                    125:  */
                    126: 
                    127: struct device *connect(dev, num)
                    128: register char *dev;
                    129: register int num;
                    130: {
                    131:        register struct device *dp;
                    132:        struct device *huhcon();
                    133: 
                    134:        if (num == QUES)
                    135:            return huhcon(dev);
                    136:        for (dp = dtab; dp != NULL; dp = dp->d_next)
                    137:                if ((num == dp->d_unit) && eq(dev, dp->d_name))
                    138:                    if (dp->d_type != CONTROLLER && dp->d_type != MASTER)
                    139:                    {
                    140:                        sprintf(errbuf, "%s connected to non-controller", dev);
                    141:                        yyerror(errbuf);
                    142:                        return NULL;
                    143:                    }
                    144:                    else
                    145:                        return dp;
                    146:        sprintf(errbuf, "%s %d not defined", dev, num);
                    147:        yyerror(errbuf);
                    148:        return NULL;
                    149: }
                    150: 
                    151: /*
                    152:  * huhcon
                    153:  *     Connect to an unspecific thing
                    154:  */
                    155: 
                    156: struct device *huhcon(dev)
                    157: register char *dev;
                    158: {
                    159:     register struct device *dp, *dcp;
                    160:     struct device rdev;
                    161:     int oldtype;
                    162: 
                    163:     /*
                    164:      * First make certain that there are some of these to wildcard on
                    165:      */
                    166:     for (dp = dtab; dp != NULL; dp = dp->d_next)
                    167:        if (eq(dp->d_name, dev))
                    168:            break;
                    169:     if (dp == NULL)
                    170:     {
                    171:        sprintf(errbuf, "no %s's to wildcard", dev);
                    172:        yyerror(errbuf);
                    173:        return NULL;
                    174:     }
                    175:     oldtype = dp->d_type;
                    176:     dcp = dp->d_conn;
                    177:     /*
                    178:      * Now see if there is already a wildcard entry for this device
                    179:      * (e.g. Search for a "uba ?")
                    180:      */
                    181:     for (; dp != NULL; dp = dp->d_next)
                    182:        if (eq(dev, dp->d_name) && dp->d_unit == -1)
                    183:            break;
                    184:     /*
                    185:      * If there isn't, make one becuase everything needs to be connected
                    186:      * to something.
                    187:      */
                    188:     if (dp == NULL)
                    189:     {
                    190:        dp = &rdev;
                    191:        init_dev(dp);
                    192:        dp->d_unit = QUES;
                    193:        dp->d_name = ns(dev);
                    194:        dp->d_type = oldtype;
                    195:        newdev(dp);
                    196:        dp = curp;
                    197:        /*
                    198:         * Connect it to the same thing that other similar things are
                    199:         * connected to, but make sure it is a wildcard unit
                    200:         * (e.g. up connected to sc ?, here we make connect sc? to a uba?)
                    201:         * If other things like this are on the NEXUS or if the aren't
                    202:         * connected to anything, then make the same connection, else
                    203:         * call ourself to connect to another unspecific device.
                    204:         */
                    205:        if (dcp == TO_NEXUS || dcp == NULL)
                    206:            dp->d_conn = dcp;
                    207:        else
                    208:            dp->d_conn = connect(dcp->d_name, QUES);
                    209:     }
                    210:     return dp;
                    211: }
                    212: 
                    213: /*
                    214:  * init_dev:
                    215:  *     Set up the fields in the current device to their
                    216:  *     default values.
                    217:  */
                    218: 
                    219: init_dev(dp)
                    220: register struct device *dp;
                    221: {
                    222:     dp->d_name = "OHNO!!!";
                    223:     dp->d_type = DEVICE;
                    224:     dp->d_conn = NULL;
                    225:     dp->d_vec = NULL;
                    226:     dp->d_addr = dp->d_flags = dp->d_dk = 0;
                    227:     dp->d_slave = dp->d_drive = dp->d_unit = UNKNOWN;
                    228:     dp->d_count = 0;
                    229: }
                    230: 
                    231: /*
                    232:  * Check_nexus:
                    233:  *     Make certain that this is a reasonable type of thing to put
                    234:  *     on the nexus.
                    235:  */
                    236: 
                    237: check_nexus(dev, num)
                    238: register struct device *dev;
                    239: int num;
                    240: {
                    241:     if (!eq(dev->d_name, "uba") && !eq(dev->d_name, "mba"))
                    242:        yyerror("only uba's and mba's should be connected to the nexus");
                    243:     if (num != QUES)
                    244:        yyerror("can't give specific nexus numbers");
                    245: }
                    246: 
                    247: /*
                    248:  * Check the timezone to make certain it is sensible
                    249:  */
                    250: 
                    251: check_tz()
                    252: {
                    253:        if (timezone > 24 * 60)
                    254:                yyerror("timezone is unreasonable");
                    255:        else
                    256:                hadtz = TRUE;
                    257: }
                    258: short yyexca[] ={
                    259: -1, 1,
                    260:        0, -1,
                    261:        -2, 0,
                    262: -1, 2,
                    263:        0, 1,
                    264:        -2, 0,
                    265:        };
                    266: # define YYNPROD 53
                    267: # define YYLAST 138
                    268: short yyact[]={
                    269: 
                    270:    8,  14,  16,  17,  57,   9,  75,  74,  60,  59,
                    271:   79,  80,  15,  12,  13,  43,  82,   7,  48,  26,
                    272:    6,  11,  89,  81,  18,  19,  88,  22,  10,  21,
                    273:   87,  20,  61,  62,  41,  42,  50,  51,  67,  86,
                    274:   84,  83,  72,  68,  50,  51,  52,  45,  34,  40,
                    275:   25,  24,  23,  58,  52,  44,  38,  64,  37,  76,
                    276:   63,  36,  49,  28,  78,  65,  46,  27,  47,  35,
                    277:    5,   4,   3,  33,   2,   1,  39,  32,  29,  30,
                    278:   31,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                    279:    0,   0,   0,   0,   0,  56,  53,  54,  55,   0,
                    280:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                    281:    0,  66,   0,   0,  69,  70,  71,   0,   0,  73,
                    282:    0,   0,   0,  77,   0,   0,   0,   0,   0,   0,
                    283:    0,   0,   0,   0,   0,   0,  77,  85 };
                    284: short yypact[]={
                    285: 
                    286: -1000,-1000,-256,-1000,-221,-222,-223,-1000,-254,-1000,
                    287: -1000,-1000,-1000,-1000,-224,-224,-216,-224,-225,-240,
                    288: -266,-217,-227,-1000,-1000,-1000,-1000,-261,-218,-261,
                    289: -261,-261,-218,-1000,-1000,-282,-1000,-1000,-1000,-219,
                    290: -1000,-273,-274,-242,-1000,-1000,-210,-1000,-226,-231,
                    291: -1000,-1000,-1000,-210,-210,-210,-232,-224,-1000,-1000,
                    292: -1000,-275,-276,-1000,-224,-255,-233,-234,-1000,-1000,
                    293: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-224,-1000,-235,
                    294: -244,-248,-252,-1000,-1000,-1000,-1000,-1000,-1000,-1000 };
                    295: short yypgo[]={
                    296: 
                    297:    0,  58,  62,  59,  75,  74,  72,  71,  70,  69,
                    298:   61,  67,  66,  60,  63,  68,  65,  64 };
                    299: short yyr1[]={
                    300: 
                    301:    0,   4,   5,   5,   6,   6,   6,   6,   6,   8,
                    302:    8,   8,   8,   8,   8,   8,   8,   8,   8,   8,
                    303:    8,   8,   8,   8,   9,   9,  10,   1,   2,   2,
                    304:    2,   7,   7,   7,   7,   7,   7,  11,  14,  12,
                    305:   12,  15,  15,  16,  16,  17,  17,  17,  17,  13,
                    306:   13,   3,   3 };
                    307: short yyr2[]={
                    308: 
                    309:    0,   1,   2,   0,   2,   2,   2,   1,   2,   2,
                    310:    2,   2,   3,   2,   2,   3,   2,   3,   3,   4,
                    311:    3,   4,   2,   2,   3,   1,   1,   1,   1,   1,
                    312:    1,   4,   4,   4,   4,   3,   4,   3,   0,   2,
                    313:    0,   3,   3,   2,   0,   2,   2,   2,   2,   2,
                    314:    0,   1,   2 };
                    315: short yychk[]={
                    316: 
                    317: -1000,  -4,  -5,  -6,  -7,  -8, 276, 273, 256, 261,
                    318:  284, 277, 269, 270, 257, 268, 258, 259, 280, 281,
                    319:  287, 285, 283, 273, 273, 273, 273, -11, -14, -11,
                    320:  -11, -11, -14,  -1, 272,  -9, -10,  -1, 272,  -1,
                    321:  274, 274, 275, 281, 272, 274, -12, -15, 279,  -2,
                    322:  262, 263, 272, -12, -12, -12,  -2, 286, 272, 282,
                    323:  282, 274, 275, -13, 267, -16,  -2, 264, 274, -13,
                    324:  -13, -13, 274, -10, 282, 282,  -3,  -1, -17, 265,
                    325:  266, 278, 271, 274, 274,  -3, 274, 274, 274, 274 };
                    326: short yydef[]={
                    327: 
                    328:    3,  -2,  -2,   2,   0,   0,   0,   7,   0,  38,
                    329:   38,  38,  38,  38,   0,   0,   0,   0,   0,   0,
                    330:    0,   0,   0,   4,   5,   6,   8,  40,   0,  40,
                    331:   40,  40,   0,   9,  27,  10,  25,  26,  11,   0,
                    332:   13,  14,  16,   0,  22,  23,  50,  44,   0,   0,
                    333:   28,  29,  30,  50,  50,  50,  35,   0,  12,  15,
                    334:   17,  18,  20,  31,   0,  39,   0,   0,  37,  32,
                    335:   33,  34,  36,  24,  19,  21,  49,  51,  43,   0,
                    336:    0,   0,   0,  41,  42,  52,  45,  46,  47,  48 };
                    337: # ifdef YYDEBUG
                    338: # include "y.debug"
                    339: # endif
                    340: 
                    341: # define YYFLAG -1000
                    342: # define YYERROR goto yyerrlab
                    343: # define YYACCEPT return(0)
                    344: # define YYABORT return(1)
                    345: 
                    346: /*     parser for yacc output  */
                    347: 
                    348: #ifdef YYDEBUG
                    349: int yydebug = 0; /* 1 for debugging */
                    350: #endif
                    351: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
                    352: int yychar = -1; /* current input token number */
                    353: int yynerrs = 0;  /* number of errors */
                    354: short yyerrflag = 0;  /* error recovery flag */
                    355: 
                    356: yyparse()
                    357: {      short yys[YYMAXDEPTH];
                    358:        int yyj, yym;
                    359:        register YYSTYPE *yypvt;
                    360:        register int yystate, yyn;
                    361:        register short *yyps;
                    362:        register YYSTYPE *yypv;
                    363:        register short *yyxi;
                    364: 
                    365:        yystate = 0;
                    366:        yychar = -1;
                    367:        yynerrs = 0;
                    368:        yyerrflag = 0;
                    369:        yyps= &yys[-1];
                    370:        yypv= &yyv[-1];
                    371: 
                    372: yystack:    /* put a state and value onto the stack */
                    373: #ifdef YYDEBUG
                    374:        if(yydebug >= 3)
                    375:                if(yychar < 0 || yytoknames[yychar] == 0)
                    376:                        printf("char %d in %s", yychar, yystates[yystate]);
                    377:                else
                    378:                        printf("%s in %s", yytoknames[yychar], yystates[yystate]);
                    379: #endif
                    380:        if( ++yyps >= &yys[YYMAXDEPTH] ) { 
                    381:                yyerror( "yacc stack overflow" ); 
                    382:                return(1); 
                    383:        }
                    384:        *yyps = yystate;
                    385:        ++yypv;
                    386:        *yypv = yyval;
                    387: yynewstate:
                    388:        yyn = yypact[yystate];
                    389:        if(yyn <= YYFLAG) goto yydefault; /* simple state */
                    390:        if(yychar<0) {
                    391:                yychar = yylex();
                    392: #ifdef YYDEBUG
                    393:                if(yydebug >= 2) {
                    394:                        if(yychar <= 0)
                    395:                                printf("lex EOF\n");
                    396:                        else if(yytoknames[yychar])
                    397:                                printf("lex %s\n", yytoknames[yychar]);
                    398:                        else
                    399:                                printf("lex (%c)\n", yychar);
                    400:                }
                    401: #endif
                    402:                if(yychar < 0)
                    403:                        yychar = 0;
                    404:        }
                    405:        if((yyn += yychar) < 0 || yyn >= YYLAST)
                    406:                goto yydefault;
                    407:        if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
                    408:                yychar = -1;
                    409:                yyval = yylval;
                    410:                yystate = yyn;
                    411:                if( yyerrflag > 0 ) --yyerrflag;
                    412:                goto yystack;
                    413:        }
                    414: yydefault:
                    415:        /* default state action */
                    416:        if( (yyn=yydef[yystate]) == -2 ) {
                    417:                if(yychar < 0) {
                    418:                        yychar = yylex();
                    419: #ifdef YYDEBUG
                    420:                        if(yydebug >= 2)
                    421:                                if(yychar < 0)
                    422:                                        printf("lex EOF\n");
                    423:                                else
                    424:                                        printf("lex %s\n", yytoknames[yychar]);
                    425: #endif
                    426:                        if(yychar < 0)
                    427:                                yychar = 0;
                    428:                }
                    429:                /* look through exception table */
                    430:                for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
                    431:                        yyxi += 2 ) ; /* VOID */
                    432:                while( *(yyxi+=2) >= 0 ){
                    433:                        if( *yyxi == yychar ) break;
                    434:                }
                    435:                if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
                    436:        }
                    437:        if( yyn == 0 ){ /* error */
                    438:                /* error ... attempt to resume parsing */
                    439:                switch( yyerrflag ){
                    440:                case 0:   /* brand new error */
                    441: #ifdef YYDEBUG
                    442:                        yyerror("syntax error\n%s", yystates[yystate]);
                    443:                        if(yytoknames[yychar])
                    444:                                yyerror("saw %s\n", yytoknames[yychar]);
                    445:                        else if(yychar >= ' ' && yychar < '\177')
                    446:                                yyerror("saw `%c'\n", yychar);
                    447:                        else if(yychar == 0)
                    448:                                yyerror("saw EOF\n");
                    449:                        else
                    450:                                yyerror("saw char 0%o\n", yychar);
                    451: #else
                    452:                        yyerror( "syntax error" );
                    453: #endif
                    454: yyerrlab:
                    455:                        ++yynerrs;
                    456:                case 1:
                    457:                case 2: /* incompletely recovered error ... try again */
                    458:                        yyerrflag = 3;
                    459:                        /* find a state where "error" is a legal shift action */
                    460:                        while ( yyps >= yys ) {
                    461:                                yyn = yypact[*yyps] + YYERRCODE;
                    462:                                if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
                    463:                                        yystate = yyact[yyn];  /* simulate a shift of "error" */
                    464:                                        goto yystack;
                    465:                                }
                    466:                                yyn = yypact[*yyps];
                    467:                                /* the current yyps has no shift onn "error", pop stack */
                    468: #ifdef YYDEBUG
                    469:                                if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
                    470: #endif
                    471:                                --yyps;
                    472:                                --yypv;
                    473:                        }
                    474:                        /* there is no state on the stack with an error shift ... abort */
                    475: yyabort:
                    476:                        return(1);
                    477:                case 3:  /* no shift yet; clobber input char */
                    478: #ifdef YYDEBUG
                    479:                        if( yydebug ) {
                    480:                                printf("error recovery discards ");
                    481:                                if(yytoknames[yychar])
                    482:                                        printf("%s\n", yytoknames[yychar]);
                    483:                                else if(yychar >= ' ' && yychar < '\177')
                    484:                                        printf("`%c'\n", yychar);
                    485:                                else if(yychar == 0)
                    486:                                        printf("EOF\n");
                    487:                                else
                    488:                                        printf("char 0%o\n", yychar);
                    489:                        }
                    490: #endif
                    491:                        if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
                    492:                        yychar = -1;
                    493:                        goto yynewstate;   /* try again in the same state */
                    494:                }
                    495:        }
                    496:        /* reduction by production yyn */
                    497: #ifdef YYDEBUG
                    498:        if(yydebug) {   char *s;
                    499:                printf("reduce %d in:\n\t", yyn);
                    500:                for(s = yystates[yystate]; *s; s++) {
                    501:                        putchar(*s);
                    502:                        if(*s == '\n' && *(s+1))
                    503:                                putchar('\t');
                    504:                }
                    505:        }
                    506: #endif
                    507:        yyps -= yyr2[yyn];
                    508:        yypvt = yypv;
                    509:        yypv -= yyr2[yyn];
                    510:        yyval = yypv[1];
                    511:        yym=yyn;
                    512:        /* consult goto table to find next state */
                    513:        yyn = yyr1[yyn];
                    514:        yyj = yypgo[yyn] + *yyps + 1;
                    515:        if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
                    516:        switch(yym){
                    517:                
                    518: case 4:
                    519: # line 31 "config.y"
                    520:  { newdev(&cur); } break;
                    521: case 6:
                    522: # line 33 "config.y"
                    523:  { do_trace = ! do_trace; } break;
                    524: case 9:
                    525: # line 39 "config.y"
                    526:  {
                    527:                    struct cputype *cp = (struct cputype *)malloc(sizeof (struct cputype));
                    528:                    cp->cpu_name = ns(yypvt[-0].cp);
                    529:                    cp->cpu_next = cputype;
                    530:                    cputype = cp;
                    531:                    free(temp_id);
                    532:                    } break;
                    533: case 11:
                    534: # line 47 "config.y"
                    535: { ident = ns(yypvt[-0].cp); } break;
                    536: case 12:
                    537: # line 48 "config.y"
                    538:  { mkconf(temp_id, yypvt[-0].cp); free(temp_id); } break;
                    539: case 13:
                    540: # line 49 "config.y"
                    541:  {
                    542:                yyerror("HZ specification obsolete; delete");
                    543:                hz = 60;
                    544:                } break;
                    545: case 14:
                    546: # line 53 "config.y"
                    547:  { timezone = 60 * yypvt[-0].i; check_tz(); } break;
                    548: case 15:
                    549: # line 54 "config.y"
                    550:  { timezone = 60 * yypvt[-1].i; dst = 1; check_tz(); } break;
                    551: case 16:
                    552: # line 55 "config.y"
                    553:  { timezone = yypvt[-0].i; check_tz(); } break;
                    554: case 17:
                    555: # line 56 "config.y"
                    556:  { timezone = yypvt[-1].i; dst = 1; check_tz(); } break;
                    557: case 18:
                    558: # line 57 "config.y"
                    559: 
                    560:            { timezone = -60 * yypvt[-0].i; check_tz(); } break;
                    561: case 19:
                    562: # line 59 "config.y"
                    563: 
                    564:            { timezone = -60 * yypvt[-1].i; dst = 1; check_tz(); } break;
                    565: case 20:
                    566: # line 61 "config.y"
                    567: 
                    568:            { timezone = -yypvt[-0].i; check_tz(); } break;
                    569: case 21:
                    570: # line 63 "config.y"
                    571: 
                    572:            { timezone = -yypvt[-1].i; dst = 1; check_tz(); } break;
                    573: case 22:
                    574: # line 65 "config.y"
                    575: 
                    576:            { mkfile = ns(yypvt[-0].cp); } break;
                    577: case 23:
                    578: # line 67 "config.y"
                    579:  { maxusers = yypvt[-0].i; } break;
                    580: case 26:
                    581: # line 76 "config.y"
                    582:  {
                    583:                    struct opt *op = (struct opt *)malloc(sizeof (struct opt));
                    584:                    op->op_name = ns(yypvt[-0].cp);
                    585:                    op->op_next = opt;
                    586:                    opt = op;
                    587:                    free(temp_id);
                    588:        } break;
                    589: case 27:
                    590: # line 86 "config.y"
                    591:  { yyval.cp = temp_id = ns(yypvt[-0].cp); } break;
                    592: case 28:
                    593: # line 90 "config.y"
                    594:  { yyval.cp = ns("uba"); } break;
                    595: case 29:
                    596: # line 91 "config.y"
                    597:  { yyval.cp = ns("mba"); } break;
                    598: case 30:
                    599: # line 92 "config.y"
                    600:  { yyval.cp = ns(yypvt[-0].cp); } break;
                    601: case 31:
                    602: # line 96 "config.y"
                    603:  {  cur.d_type = DEVICE; } break;
                    604: case 32:
                    605: # line 97 "config.y"
                    606:  {  cur.d_type = MASTER; } break;
                    607: case 33:
                    608: # line 98 "config.y"
                    609: 
                    610:                                {  cur.d_dk = 1; cur.d_type = DEVICE; } break;
                    611: case 34:
                    612: # line 100 "config.y"
                    613:  {  cur.d_type = CONTROLLER; } break;
                    614: case 35:
                    615: # line 101 "config.y"
                    616: 
                    617:                        { cur.d_name = yypvt[-0].cp; cur.d_type = PSEUDO_DEVICE; } break;
                    618: case 36:
                    619: # line 103 "config.y"
                    620: 
                    621:                        { cur.d_name = yypvt[-1].cp; cur.d_type = PSEUDO_DEVICE;
                    622:                          cur.d_count = yypvt[-0].i; } break;
                    623: case 37:
                    624: # line 109 "config.y"
                    625:        {
                    626:                        cur.d_name = yypvt[-1].cp;
                    627:                        if (eq(yypvt[-1].cp, "mba"))
                    628:                            seen_mba = TRUE;
                    629:                        else if (eq(yypvt[-1].cp, "uba"))
                    630:                            seen_uba = TRUE;
                    631:                        cur.d_unit = yypvt[-0].i;
                    632:                } break;
                    633: case 38:
                    634: # line 120 "config.y"
                    635:  { init_dev(&cur); } break;
                    636: case 41:
                    637: # line 129 "config.y"
                    638:  {
                    639:                if (eq(cur.d_name, "mba") || eq(cur.d_name, "uba")) {
                    640:                        sprintf(errbuf,
                    641:                                "%s must be connected to a nexus", cur.d_name);
                    642:                        yyerror(errbuf);
                    643:                }
                    644:                cur.d_conn = connect(yypvt[-1].cp, yypvt[-0].i);
                    645:        } break;
                    646: case 42:
                    647: # line 137 "config.y"
                    648:  { check_nexus(&cur, yypvt[-0].i); cur.d_conn = TO_NEXUS; } break;
                    649: case 45:
                    650: # line 146 "config.y"
                    651:  { cur.d_addr = yypvt[-0].i; } break;
                    652: case 46:
                    653: # line 147 "config.y"
                    654:  { cur.d_drive = yypvt[-0].i; } break;
                    655: case 47:
                    656: # line 148 "config.y"
                    657: 
                    658:        {
                    659:                if (cur.d_conn != NULL && cur.d_conn != TO_NEXUS
                    660:                    && cur.d_conn->d_type == MASTER)
                    661:                        cur.d_slave = yypvt[-0].i;
                    662:                else
                    663:                        yyerror("can't specify slave--not to master");
                    664:        } break;
                    665: case 48:
                    666: # line 156 "config.y"
                    667:  { cur.d_flags = yypvt[-0].i; } break;
                    668: case 49:
                    669: # line 160 "config.y"
                    670:  { cur.d_vec = yypvt[-0].idlst; } break;
                    671: case 51:
                    672: # line 163 "config.y"
                    673: 
                    674:            { struct idlst *a = (struct idlst *)malloc(sizeof(struct idlst));
                    675:              a->id = yypvt[-0].cp; a->id_next = 0; yyval.idlst = a; } break;
                    676: case 52:
                    677: # line 166 "config.y"
                    678: 
                    679:            { struct idlst *a = (struct idlst *)malloc(sizeof(struct idlst));
                    680:              a->id = yypvt[-1].cp; a->id_next = yypvt[-0].idlst; yyval.idlst = a; } break;
                    681:        }
                    682:        goto yystack;  /* stack new state and value */
                    683: }

unix.superglobalmegacorp.com

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