|
|
1.1 ! root 1: ! 2: # line 4 "gram.y" ! 3: ! 4: #include "scsi.h" ! 5: ! 6: ! 7: # line 17 "gram.y" ! 8: typedef union { ! 9: char *str; ! 10: int num; /* 32 bits */ ! 11: } YYSTYPE; ! 12: # define DISK 257 ! 13: # define ID 258 ! 14: # define RELEASE 259 ! 15: # define HELP 260 ! 16: # define SET 261 ! 17: # define EJECT 262 ! 18: # define INQUIRY 263 ! 19: # define READ 264 ! 20: # define CAPACITY 265 ! 21: # define SENSE 266 ! 22: # define NUMBER 267 ! 23: # define EXT 268 ! 24: # define SIDEA 269 ! 25: # define SIDEB 270 ! 26: # define ALL 271 ! 27: # define RESET 272 ! 28: # define SLEEP 273 ! 29: # define START 274 ! 30: # define STOP 275 ! 31: # define STATUS 276 ! 32: # define ECHO 277 ! 33: # define ERROR 278 ! 34: # define MEDIA 279 ! 35: # define WORM 280 ! 36: # define WRITE 281 ! 37: # define DIAGNOSTIC 282 ! 38: # define STRING 283 ! 39: # define COPY 284 ! 40: # define CONFIG 285 ! 41: # define TEST 286 ! 42: # define INTERNAL 287 ! 43: # define ALTERNATE 288 ! 44: #define yyclearin yychar = -1 ! 45: #define yyerrok yyerrflag = 0 ! 46: extern int yychar; ! 47: extern short yyerrflag; ! 48: #ifndef YYMAXDEPTH ! 49: #define YYMAXDEPTH 150 ! 50: #endif ! 51: YYSTYPE yylval, yyval; ! 52: # define YYERRCODE 256 ! 53: ! 54: # line 100 "gram.y" ! 55: ! 56: ! 57: yywrap() ! 58: { ! 59: return(1); ! 60: } ! 61: ! 62: yyerror(s1, s2) ! 63: char *s1, *s2; ! 64: { ! 65: fprint(2, s1, s2); ! 66: fprint(2, "\n"); ! 67: } ! 68: short yyexca[] ={ ! 69: -1, 1, ! 70: 0, -1, ! 71: -2, 6, ! 72: }; ! 73: # define YYNPROD 47 ! 74: # define YYLAST 257 ! 75: short yyact[]={ ! 76: ! 77: 7, 10, 81, 9, 73, 74, 11, 15, 4, 17, ! 78: 26, 14, 43, 2, 83, 16, 18, 19, 21, 20, ! 79: 8, 82, 13, 23, 24, 42, 45, 6, 5, 22, ! 80: 12, 3, 32, 77, 76, 32, 75, 61, 70, 69, ! 81: 68, 66, 63, 29, 56, 47, 40, 37, 34, 35, ! 82: 31, 36, 33, 72, 54, 60, 1, 0, 28, 27, ! 83: 0, 38, 39, 30, 41, 0, 44, 0, 46, 0, ! 84: 48, 49, 50, 51, 52, 53, 0, 0, 0, 0, ! 85: 0, 0, 0, 0, 57, 58, 59, 0, 0, 0, ! 86: 0, 0, 0, 64, 65, 0, 67, 0, 0, 62, ! 87: 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, ! 88: 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, ! 89: 0, 78, 0, 80, 0, 79, 0, 0, 0, 0, ! 90: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 91: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 92: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 93: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 94: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 95: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 96: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 97: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 98: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 99: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 100: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 101: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 102: 0, 0, 0, 0, 0, 0, 25 }; ! 103: short yypact[]={ ! 104: ! 105: -1000,-257, 0,-224,-224,-1000,-235,-210,-220,-1000, ! 106: -235,-235,-221,-235,-254,-232,-1000,-235,-222,-235, ! 107: -235,-235,-235,-235,-235, 44,-1000,-1000,-1000,-1000, ! 108: -1000,-223,-1000,-235,-235,-235,-230,-1000,-1000,-1000, ! 109: -224,-225,-235,-235,-226,-235,-1000,-1000,-1000,-1000, ! 110: -1000,-1000,-227,-228,-1000,-1000,-229,-1000,-1000,-230, ! 111: -265,-1000,-1000,-231,-233,-1000,-1000,-1000,-1000,-234, ! 112: -235,-265,-235,-1000,-1000,-281,-246,-1000,-253,-1000, ! 113: -1000,-1000,-1000,-1000 }; ! 114: short yypgo[]={ ! 115: ! 116: 0, 56, 50, 53, 55, 58, 13 }; ! 117: short yyr1[]={ ! 118: ! 119: 0, 1, 1, 1, 1, 1, 6, 6, 6, 6, ! 120: 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, ! 121: 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, ! 122: 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, ! 123: 6, 2, 5, 5, 4, 3, 3 }; ! 124: short yyr2[]={ ! 125: ! 126: 0, 0, 4, 3, 3, 4, 0, 2, 2, 1, ! 127: 6, 3, 3, 5, 3, 5, 2, 1, 2, 1, ! 128: 2, 1, 3, 4, 5, 5, 3, 3, 1, 2, ! 129: 3, 2, 2, 2, 1, 2, 2, 2, 3, 3, ! 130: 4, 1, 1, 0, 1, 1, 1 }; ! 131: short yychk[]={ ! 132: ! 133: -1000, -1, -6, 288, 265, 285, 284, 257, 277, 260, ! 134: 258, 263, 287, 279, 268, 264, 272, 266, 273, 274, ! 135: 276, 275, 286, 280, 281, 256, 10, 59, -5, 267, ! 136: -5, -2, 267, 262, 258, 259, 261, 267, -2, -2, ! 137: 267, -2, 279, 266, -2, 258, -2, 267, -2, -2, ! 138: -2, -2, -2, -2, 10, 59, 267, -2, -2, -2, ! 139: -4, 267, -5, 267, -2, -2, 267, -2, 267, 267, ! 140: 267, -4, -3, 269, 270, 267, 267, 267, -2, -3, ! 141: -2, 283, 267, 267 }; ! 142: short yydef[]={ ! 143: ! 144: 1, -2, 0, 43, 43, 9, 0, 0, 0, 17, ! 145: 0, 19, 21, 0, 0, 0, 28, 0, 0, 0, ! 146: 34, 0, 0, 0, 0, 0, 3, 4, 7, 42, ! 147: 8, 0, 41, 0, 0, 0, 0, 16, 18, 20, ! 148: 43, 0, 0, 0, 0, 0, 29, 31, 32, 33, ! 149: 35, 36, 37, 0, 2, 5, 0, 11, 12, 14, ! 150: 0, 44, 22, 0, 0, 30, 26, 27, 38, 39, ! 151: 0, 0, 0, 45, 46, 23, 0, 40, 0, 13, ! 152: 15, 24, 25, 10 }; ! 153: # ifdef YYDEBUG ! 154: # include "y.debug" ! 155: # endif ! 156: ! 157: # define YYFLAG -1000 ! 158: # define YYERROR goto yyerrlab ! 159: # define YYACCEPT return(0) ! 160: # define YYABORT return(1) ! 161: ! 162: /* parser for yacc output */ ! 163: ! 164: #ifdef YYDEBUG ! 165: int yydebug = 0; /* 1 for debugging */ ! 166: #endif ! 167: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */ ! 168: int yychar = -1; /* current input token number */ ! 169: int yynerrs = 0; /* number of errors */ ! 170: short yyerrflag = 0; /* error recovery flag */ ! 171: ! 172: yyparse() ! 173: { short yys[YYMAXDEPTH]; ! 174: int yyj, yym; ! 175: register YYSTYPE *yypvt; ! 176: register int yystate, yyn; ! 177: register short *yyps; ! 178: register YYSTYPE *yypv; ! 179: register short *yyxi; ! 180: ! 181: yystate = 0; ! 182: yychar = -1; ! 183: yynerrs = 0; ! 184: yyerrflag = 0; ! 185: yyps= &yys[-1]; ! 186: yypv= &yyv[-1]; ! 187: ! 188: yystack: /* put a state and value onto the stack */ ! 189: #ifdef YYDEBUG ! 190: if(yydebug >= 3) ! 191: if(yychar < 0 || yytoknames[yychar] == 0) ! 192: print("char %d in %s", yychar, yystates[yystate]); ! 193: else ! 194: print("%s in %s", yytoknames[yychar], yystates[yystate]); ! 195: #endif ! 196: if( ++yyps >= &yys[YYMAXDEPTH] ) { ! 197: yyerror( "yacc stack overflow" ); ! 198: return(1); ! 199: } ! 200: *yyps = yystate; ! 201: ++yypv; ! 202: *yypv = yyval; ! 203: yynewstate: ! 204: yyn = yypact[yystate]; ! 205: if(yyn <= YYFLAG) goto yydefault; /* simple state */ ! 206: if(yychar<0) { ! 207: yychar = yylex(); ! 208: #ifdef YYDEBUG ! 209: if(yydebug >= 2) { ! 210: if(yychar <= 0) ! 211: print("lex EOF\n"); ! 212: else if(yytoknames[yychar]) ! 213: print("lex %s\n", yytoknames[yychar]); ! 214: else ! 215: print("lex (%c)\n", yychar); ! 216: } ! 217: #endif ! 218: if(yychar < 0) ! 219: yychar = 0; ! 220: } ! 221: if((yyn += yychar) < 0 || yyn >= YYLAST) ! 222: goto yydefault; ! 223: if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */ ! 224: yychar = -1; ! 225: yyval = yylval; ! 226: yystate = yyn; ! 227: if( yyerrflag > 0 ) --yyerrflag; ! 228: goto yystack; ! 229: } ! 230: yydefault: ! 231: /* default state action */ ! 232: if( (yyn=yydef[yystate]) == -2 ) { ! 233: if(yychar < 0) { ! 234: yychar = yylex(); ! 235: #ifdef YYDEBUG ! 236: if(yydebug >= 2) ! 237: if(yychar < 0) ! 238: print("lex EOF\n"); ! 239: else ! 240: print("lex %s\n", yytoknames[yychar]); ! 241: #endif ! 242: if(yychar < 0) ! 243: yychar = 0; ! 244: } ! 245: /* look through exception table */ ! 246: for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate); ! 247: yyxi += 2 ) ; /* VOID */ ! 248: while( *(yyxi+=2) >= 0 ){ ! 249: if( *yyxi == yychar ) break; ! 250: } ! 251: if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */ ! 252: } ! 253: if( yyn == 0 ){ /* error */ ! 254: /* error ... attempt to resume parsing */ ! 255: switch( yyerrflag ){ ! 256: case 0: /* brand new error */ ! 257: #ifdef YYDEBUG ! 258: yyerror("syntax error\n%s", yystates[yystate]); ! 259: if(yytoknames[yychar]) ! 260: yyerror("saw %s\n", yytoknames[yychar]); ! 261: else if(yychar >= ' ' && yychar < '\177') ! 262: yyerror("saw `%c'\n", yychar); ! 263: else if(yychar == 0) ! 264: yyerror("saw EOF\n"); ! 265: else ! 266: yyerror("saw char 0%o\n", yychar); ! 267: #else ! 268: yyerror( "syntax error" ); ! 269: #endif ! 270: yyerrlab: ! 271: ++yynerrs; ! 272: case 1: ! 273: case 2: /* incompletely recovered error ... try again */ ! 274: yyerrflag = 3; ! 275: /* find a state where "error" is a legal shift action */ ! 276: while ( yyps >= yys ) { ! 277: yyn = yypact[*yyps] + YYERRCODE; ! 278: if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){ ! 279: yystate = yyact[yyn]; /* simulate a shift of "error" */ ! 280: goto yystack; ! 281: } ! 282: yyn = yypact[*yyps]; ! 283: /* the current yyps has no shift onn "error", pop stack */ ! 284: #ifdef YYDEBUG ! 285: if( yydebug ) print( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] ); ! 286: #endif ! 287: --yyps; ! 288: --yypv; ! 289: } ! 290: /* there is no state on the stack with an error shift ... abort */ ! 291: yyabort: ! 292: return(1); ! 293: case 3: /* no shift yet; clobber input char */ ! 294: #ifdef YYDEBUG ! 295: if( yydebug ) { ! 296: print("error recovery discards "); ! 297: if(yytoknames[yychar]) ! 298: print("%s\n", yytoknames[yychar]); ! 299: else if(yychar >= ' ' && yychar < '\177') ! 300: print("`%c'\n", yychar); ! 301: else if(yychar == 0) ! 302: print("EOF\n"); ! 303: else ! 304: print("char 0%o\n", yychar); ! 305: } ! 306: #endif ! 307: if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ ! 308: yychar = -1; ! 309: goto yynewstate; /* try again in the same state */ ! 310: } ! 311: } ! 312: /* reduction by production yyn */ ! 313: #ifdef YYDEBUG ! 314: if(yydebug) { char *s; ! 315: print("reduce %d in:\n\t", yyn); ! 316: for(s = yystates[yystate]; *s; s++) { ! 317: putchar(*s); ! 318: if(*s == '\n' && *(s+1)) ! 319: putchar('\t'); ! 320: } ! 321: } ! 322: #endif ! 323: yyps -= yyr2[yyn]; ! 324: yypvt = yypv; ! 325: yypv -= yyr2[yyn]; ! 326: yyval = yypv[1]; ! 327: yym=yyn; ! 328: /* consult goto table to find next state */ ! 329: yyn = yyr1[yyn]; ! 330: yyj = yypgo[yyn] + *yyps + 1; ! 331: if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; ! 332: switch(yym){ ! 333: ! 334: case 7: ! 335: # line 35 "gram.y" ! 336: { s_alternate(yypvt[-0].num); } break; ! 337: case 8: ! 338: # line 36 "gram.y" ! 339: { s_capacity(yypvt[-0].num, (long *)0, (long *)0); } break; ! 340: case 9: ! 341: # line 37 "gram.y" ! 342: { s_config(); } break; ! 343: case 10: ! 344: # line 38 "gram.y" ! 345: {/*:COPY sdrive sstart nblocks ddrive dstart:: */ ! 346: s_copy(yypvt[-4].num, yypvt[-3].num, yypvt[-2].num, yypvt[-1].num, yypvt[-0].num); ! 347: } break; ! 348: case 11: ! 349: # line 41 "gram.y" ! 350: { s_diskeject(yypvt[-0].num); } break; ! 351: case 12: ! 352: # line 42 "gram.y" ! 353: { s_diskid(yypvt[-0].num); } break; ! 354: case 13: ! 355: # line 43 "gram.y" ! 356: { s_diskrelease(yypvt[-1].num, yypvt[-0].num, yypvt[-2].num, 1); } break; ! 357: case 14: ! 358: # line 44 "gram.y" ! 359: { s_diskrelease(-1, A, yypvt[-0].num, 1); } break; ! 360: case 15: ! 361: # line 45 "gram.y" ! 362: { s_diskset(yypvt[-2].num, yypvt[-1].num, yypvt[-0].num, 1); } break; ! 363: case 16: ! 364: # line 46 "gram.y" ! 365: { print(">> %d <<\n", yypvt[-0].num); } break; ! 366: case 17: ! 367: # line 47 "gram.y" ! 368: { help(); } break; ! 369: case 18: ! 370: # line 48 "gram.y" ! 371: { scsiid(yypvt[-0].num); } break; ! 372: case 19: ! 373: # line 49 "gram.y" ! 374: { ! 375: int i; ! 376: for(i = 0; i<8; i++) ! 377: s_inquiry(scsi_id, i); ! 378: } break; ! 379: case 20: ! 380: # line 54 "gram.y" ! 381: { s_inquiry(scsi_id, yypvt[-0].num); } break; ! 382: case 21: ! 383: # line 55 "gram.y" ! 384: { s_internal(-1, 0); } break; ! 385: case 22: ! 386: # line 56 "gram.y" ! 387: { s_internal(yypvt[-1].num, yypvt[-0].num); } break; ! 388: case 23: ! 389: # line 57 "gram.y" ! 390: { s_media(yypvt[-2].num, yypvt[-1].num, yypvt[-0].num, 0); } break; ! 391: case 24: ! 392: # line 58 "gram.y" ! 393: { s_mediaf(yypvt[-3].num, yypvt[-2].num, yypvt[-1].num, yypvt[-0].str); } break; ! 394: case 25: ! 395: # line 59 "gram.y" ! 396: { s_media(yypvt[-2].num, yypvt[-1].num, yypvt[-0].num, 1); } break; ! 397: case 26: ! 398: # line 60 "gram.y" ! 399: { ! 400: struct scsi_o output; ! 401: s_read(yypvt[-1].num, yypvt[-0].num, 1, &output); ! 402: scsiodump(output.data, 1024); ! 403: } break; ! 404: case 27: ! 405: # line 65 "gram.y" ! 406: { ! 407: char name[256]; ! 408: ; ! 409: s_readid(yypvt[-0].num, name); ! 410: print("id='%s'\n", name); ! 411: } break; ! 412: case 28: ! 413: # line 71 "gram.y" ! 414: { s_reset(); } break; ! 415: case 29: ! 416: # line 72 "gram.y" ! 417: { s_sense(yypvt[-0].num, 0); } break; ! 418: case 30: ! 419: # line 73 "gram.y" ! 420: { s_sense(yypvt[-0].num, 1); } break; ! 421: case 31: ! 422: # line 74 "gram.y" ! 423: { sleep(yypvt[-0].num); } break; ! 424: case 32: ! 425: # line 75 "gram.y" ! 426: { s_start(yypvt[-0].num); } break; ! 427: case 33: ! 428: # line 76 "gram.y" ! 429: { s_status(yypvt[-0].num, (struct scsi_o *)0); } break; ! 430: case 34: ! 431: # line 77 "gram.y" ! 432: { s_status(0, (struct scsi_o *)0); } break; ! 433: case 35: ! 434: # line 78 "gram.y" ! 435: { s_stop(yypvt[-0].num); } break; ! 436: case 36: ! 437: # line 79 "gram.y" ! 438: { s_testunit(scsi_id, yypvt[-0].num); } break; ! 439: case 37: ! 440: # line 80 "gram.y" ! 441: { s_worm(yypvt[-0].num, 1); } break; ! 442: case 38: ! 443: # line 81 "gram.y" ! 444: { s_worm(yypvt[-1].num, yypvt[-0].num); } break; ! 445: case 39: ! 446: # line 82 "gram.y" ! 447: { s_write(yypvt[-1].num, yypvt[-0].num, 1); } break; ! 448: case 40: ! 449: # line 83 "gram.y" ! 450: { s_write(yypvt[-2].num, yypvt[-1].num, yypvt[-0].num); } break; ! 451: case 43: ! 452: # line 90 "gram.y" ! 453: { yyval.num = 0; } break; ! 454: case 45: ! 455: # line 96 "gram.y" ! 456: { yyval.num = 0; } break; ! 457: case 46: ! 458: # line 97 "gram.y" ! 459: { yyval.num = 1; } break; ! 460: } ! 461: goto yystack; /* stack new state and value */ ! 462: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.