|
|
1.1 root 1: /* Input/Output Statements */
2:
3: io: io1
4: { endio(); }
5: ;
6:
7: io1: iofmove ioctl
8: | iofmove unpar_fexpr
9: { ioclause(IOSUNIT, $2); endioctl(); }
10: | iofmove SSTAR
11: { ioclause(IOSUNIT, PNULL); endioctl(); }
12: | iofmove SPOWER
13: { ioclause(IOSUNIT, IOSTDERR); endioctl(); }
14: | iofctl ioctl
15: | read ioctl
16: { doio(PNULL); }
17: | read infmt
18: { doio(PNULL); }
19: | read ioctl inlist
20: { doio($3); }
21: | read infmt SCOMMA inlist
22: { doio($4); }
23: | read ioctl SCOMMA inlist
24: { doio($4); }
25: | write ioctl
26: { doio(PNULL); }
27: | write ioctl outlist
28: { doio($3); }
29: | print
30: { doio(PNULL); }
31: | print SCOMMA outlist
32: { doio($3); }
33: ;
34:
35: iofmove: fmkwd end_spec in_ioctl
36: ;
37:
38: fmkwd: SBACKSPACE
39: { iostmt = IOBACKSPACE; }
40: | SREWIND
41: { iostmt = IOREWIND; }
42: | SENDFILE
43: { iostmt = IOENDFILE; }
44: ;
45:
46: iofctl: ctlkwd end_spec in_ioctl
47: ;
48:
49: ctlkwd: SINQUIRE
50: { iostmt = IOINQUIRE; }
51: | SOPEN
52: { iostmt = IOOPEN; }
53: | SCLOSE
54: { iostmt = IOCLOSE; }
55: ;
56:
57: infmt: unpar_fexpr
58: {
59: ioclause(IOSUNIT, PNULL);
60: ioclause(IOSFMT, $1);
61: endioctl();
62: }
63: | SSTAR
64: {
65: ioclause(IOSUNIT, PNULL);
66: ioclause(IOSFMT, PNULL);
67: endioctl();
68: }
69: ;
70:
71: ioctl: SLPAR fexpr SRPAR
72: { if($2->headblock.vtype == TYCHAR)
73: {
74: ioclause(IOSUNIT, PNULL);
75: ioclause(IOSFMT, $2);
76: }
77: else
78: ioclause(IOSUNIT, $2);
79: endioctl();
80: }
81: | SLPAR ctllist SRPAR
82: { endioctl(); }
83: ;
84:
85: ctllist: ioclause
86: | ctllist SCOMMA ioclause
87: ;
88:
89: ioclause: fexpr
90: { ioclause(IOSPOSITIONAL, $1); }
91: | SSTAR
92: { ioclause(IOSPOSITIONAL, PNULL); }
93: | SPOWER
94: { ioclause(IOSPOSITIONAL, IOSTDERR); }
95: | nameeq expr
96: { ioclause($1, $2); }
97: | nameeq SSTAR
98: { ioclause($1, PNULL); }
99: | nameeq SPOWER
100: { ioclause($1, IOSTDERR); }
101: ;
102:
103: nameeq: SNAMEEQ
104: { $$ = iocname(); }
105: ;
106:
107: read: SREAD end_spec in_ioctl
108: { iostmt = IOREAD; }
109: ;
110:
111: write: SWRITE end_spec in_ioctl
112: { iostmt = IOWRITE; }
113: ;
114:
115: print: SPRINT end_spec fexpr in_ioctl
116: {
117: iostmt = IOWRITE;
118: ioclause(IOSUNIT, PNULL);
119: ioclause(IOSFMT, $3);
120: endioctl();
121: }
122: | SPRINT end_spec SSTAR in_ioctl
123: {
124: iostmt = IOWRITE;
125: ioclause(IOSUNIT, PNULL);
126: ioclause(IOSFMT, PNULL);
127: endioctl();
128: }
129: ;
130:
131: inlist: inelt
132: { $$ = mkchain($1, CHNULL); }
133: | inlist SCOMMA inelt
134: { $$ = hookup($1, mkchain($3, CHNULL)); }
135: ;
136:
137: inelt: lhs
138: { $$ = (tagptr) $1; }
139: | SLPAR inlist SCOMMA dospec SRPAR
140: { $$ = (tagptr) mkiodo($4,$2); }
141: ;
142:
143: outlist: uexpr
144: { $$ = mkchain($1, CHNULL); }
145: | other
146: { $$ = mkchain($1, CHNULL); }
147: | out2
148: ;
149:
150: out2: uexpr SCOMMA uexpr
151: { $$ = mkchain($1, mkchain($3, CHNULL) ); }
152: | uexpr SCOMMA other
153: { $$ = mkchain($1, mkchain($3, CHNULL) ); }
154: | other SCOMMA uexpr
155: { $$ = mkchain($1, mkchain($3, CHNULL) ); }
156: | other SCOMMA other
157: { $$ = mkchain($1, mkchain($3, CHNULL) ); }
158: | out2 SCOMMA uexpr
159: { $$ = hookup($1, mkchain($3, CHNULL) ); }
160: | out2 SCOMMA other
161: { $$ = hookup($1, mkchain($3, CHNULL) ); }
162: ;
163:
164: other: complex_const
165: { $$ = (tagptr) $1; }
166: | SLPAR uexpr SCOMMA dospec SRPAR
167: { $$ = (tagptr) mkiodo($4, mkchain($2, CHNULL) ); }
168: | SLPAR other SCOMMA dospec SRPAR
169: { $$ = (tagptr) mkiodo($4, mkchain($2, CHNULL) ); }
170: | SLPAR out2 SCOMMA dospec SRPAR
171: { $$ = (tagptr) mkiodo($4, $2); }
172: ;
173:
174: in_ioctl:
175: { startioctl(); }
176: ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.