| 1 | /* mode.h 4.1 82/05/07 */ |
| 2 | |
| 3 | # |
| 4 | /* |
| 5 | * UNIX shell |
| 6 | */ |
| 7 | |
| 8 | |
| 9 | #define BYTESPERWORD (sizeof(char *)) |
| 10 | |
| 11 | TYPE char CHAR; |
| 12 | TYPE char BOOL; |
| 13 | TYPE int UFD; |
| 14 | TYPE int INT; |
| 15 | TYPE float REAL; |
| 16 | TYPE char *ADDRESS; |
| 17 | TYPE long int L_INT; |
| 18 | TYPE int VOID; |
| 19 | TYPE unsigned POS; |
| 20 | TYPE char *STRING; |
| 21 | TYPE char MSG[]; |
| 22 | TYPE int PIPE[]; |
| 23 | TYPE char *STKPTR; |
| 24 | TYPE char *BYTPTR; |
| 25 | |
| 26 | STRUCT stat STATBUF; /* defined in /usr/sys/stat.h */ |
| 27 | STRUCT blk *BLKPTR; |
| 28 | STRUCT fileblk FILEBLK; |
| 29 | STRUCT filehdr FILEHDR; |
| 30 | STRUCT fileblk *FILE; |
| 31 | STRUCT trenod *TREPTR; |
| 32 | STRUCT forknod *FORKPTR; |
| 33 | STRUCT comnod *COMPTR; |
| 34 | STRUCT swnod *SWPTR; |
| 35 | STRUCT regnod *REGPTR; |
| 36 | STRUCT parnod *PARPTR; |
| 37 | STRUCT ifnod *IFPTR; |
| 38 | STRUCT whnod *WHPTR; |
| 39 | STRUCT fornod *FORPTR; |
| 40 | STRUCT lstnod *LSTPTR; |
| 41 | STRUCT argnod *ARGPTR; |
| 42 | STRUCT dolnod *DOLPTR; |
| 43 | STRUCT ionod *IOPTR; |
| 44 | STRUCT namnod NAMNOD; |
| 45 | STRUCT namnod *NAMPTR; |
| 46 | STRUCT sysnod SYSNOD; |
| 47 | STRUCT sysnod *SYSPTR; |
| 48 | STRUCT sysnod SYSTAB[]; |
| 49 | #define NIL ((char*)0) |
| 50 | |
| 51 | |
| 52 | /* the following nonsense is required |
| 53 | * because casts turn an Lvalue |
| 54 | * into an Rvalue so two cheats |
| 55 | * are necessary, one for each context. |
| 56 | */ |
| 57 | union { int _cheat;}; |
| 58 | #define Lcheat(a) ((a)._cheat) |
| 59 | #define Rcheat(a) ((int)(a)) |
| 60 | |
| 61 | |
| 62 | /* address puns for storage allocation */ |
| 63 | UNION { |
| 64 | FORKPTR _forkptr; |
| 65 | COMPTR _comptr; |
| 66 | PARPTR _parptr; |
| 67 | IFPTR _ifptr; |
| 68 | WHPTR _whptr; |
| 69 | FORPTR _forptr; |
| 70 | LSTPTR _lstptr; |
| 71 | BLKPTR _blkptr; |
| 72 | NAMPTR _namptr; |
| 73 | BYTPTR _bytptr; |
| 74 | } address; |
| 75 | |
| 76 | |
| 77 | /* for functions that do not return values */ |
| 78 | /* |
| 79 | struct void {INT vvvvvvvv;}; |
| 80 | */ |
| 81 | |
| 82 | |
| 83 | /* heap storage */ |
| 84 | struct blk { |
| 85 | BLKPTR word; |
| 86 | }; |
| 87 | |
| 88 | #define BUFSIZ 64 |
| 89 | struct fileblk { |
| 90 | UFD fdes; |
| 91 | POS flin; |
| 92 | BOOL feof; |
| 93 | CHAR fsiz; |
| 94 | STRING fnxt; |
| 95 | STRING fend; |
| 96 | STRING *feval; |
| 97 | FILE fstak; |
| 98 | CHAR fbuf[BUFSIZ]; |
| 99 | }; |
| 100 | |
| 101 | /* for files not used with file descriptors */ |
| 102 | struct filehdr { |
| 103 | UFD fdes; |
| 104 | POS flin; |
| 105 | BOOL feof; |
| 106 | CHAR fsiz; |
| 107 | STRING fnxt; |
| 108 | STRING fend; |
| 109 | STRING *feval; |
| 110 | FILE fstak; |
| 111 | CHAR _fbuf[1]; |
| 112 | }; |
| 113 | |
| 114 | struct sysnod { |
| 115 | STRING sysnam; |
| 116 | INT sysval; |
| 117 | }; |
| 118 | |
| 119 | /* this node is a proforma for those that follow */ |
| 120 | struct trenod { |
| 121 | INT tretyp; |
| 122 | IOPTR treio; |
| 123 | }; |
| 124 | |
| 125 | /* dummy for access only */ |
| 126 | struct argnod { |
| 127 | ARGPTR argnxt; |
| 128 | CHAR argval[1]; |
| 129 | }; |
| 130 | |
| 131 | struct dolnod { |
| 132 | DOLPTR dolnxt; |
| 133 | INT doluse; |
| 134 | CHAR dolarg[1]; |
| 135 | }; |
| 136 | |
| 137 | struct forknod { |
| 138 | INT forktyp; |
| 139 | IOPTR forkio; |
| 140 | TREPTR forktre; |
| 141 | }; |
| 142 | |
| 143 | struct comnod { |
| 144 | INT comtyp; |
| 145 | IOPTR comio; |
| 146 | ARGPTR comarg; |
| 147 | ARGPTR comset; |
| 148 | }; |
| 149 | |
| 150 | struct ifnod { |
| 151 | INT iftyp; |
| 152 | TREPTR iftre; |
| 153 | TREPTR thtre; |
| 154 | TREPTR eltre; |
| 155 | }; |
| 156 | |
| 157 | struct whnod { |
| 158 | INT whtyp; |
| 159 | TREPTR whtre; |
| 160 | TREPTR dotre; |
| 161 | }; |
| 162 | |
| 163 | struct fornod { |
| 164 | INT fortyp; |
| 165 | TREPTR fortre; |
| 166 | STRING fornam; |
| 167 | COMPTR forlst; |
| 168 | }; |
| 169 | |
| 170 | struct swnod { |
| 171 | INT swtyp; |
| 172 | STRING swarg; |
| 173 | REGPTR swlst; |
| 174 | }; |
| 175 | |
| 176 | struct regnod { |
| 177 | ARGPTR regptr; |
| 178 | TREPTR regcom; |
| 179 | REGPTR regnxt; |
| 180 | }; |
| 181 | |
| 182 | struct parnod { |
| 183 | INT partyp; |
| 184 | TREPTR partre; |
| 185 | }; |
| 186 | |
| 187 | struct lstnod { |
| 188 | INT lsttyp; |
| 189 | TREPTR lstlef; |
| 190 | TREPTR lstrit; |
| 191 | }; |
| 192 | |
| 193 | struct ionod { |
| 194 | INT iofile; |
| 195 | STRING ioname; |
| 196 | IOPTR ionxt; |
| 197 | IOPTR iolst; |
| 198 | }; |
| 199 | |
| 200 | #define FORKTYPE (sizeof(struct forknod)) |
| 201 | #define COMTYPE (sizeof(struct comnod)) |
| 202 | #define IFTYPE (sizeof(struct ifnod)) |
| 203 | #define WHTYPE (sizeof(struct whnod)) |
| 204 | #define FORTYPE (sizeof(struct fornod)) |
| 205 | #define SWTYPE (sizeof(struct swnod)) |
| 206 | #define REGTYPE (sizeof(struct regnod)) |
| 207 | #define PARTYPE (sizeof(struct parnod)) |
| 208 | #define LSTTYPE (sizeof(struct lstnod)) |
| 209 | #define IOTYPE (sizeof(struct ionod)) |