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