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