|
|
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.