1 /* mode.h 4.2 88/04/24 */ 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 UNION 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 Lcheat(a) (*(int *)&(a)) 60 #define Rcheat(a) ( (int ) (a)) 61 62 63 /* address puns for storage allocation */ 64 UNION { 65 FORKPTR _forkptr; 66 COMPTR _comptr; 67 PARPTR _parptr; 68 IFPTR _ifptr; 69 WHPTR _whptr; 70 FORPTR _forptr; 71 LSTPTR _lstptr; 72 BLKPTR _blkptr; 73 NAMPTR _namptr; 74 BYTPTR _bytptr; 75 } address; 76 77 78 /* for functions that do not return values */ 79 /* 80 struct void {INT vvvvvvvv;}; 81 */ 82 83 84 /* heap storage */ 85 struct blk { 86 BLKPTR word; 87 }; 88 89 #define BUFSIZ 64 90 struct fileblk { 91 UFD fdes; 92 POS flin; 93 BOOL feof; 94 CHAR fsiz; 95 STRING fnxt; 96 STRING fend; 97 STRING *feval; 98 FILE fstak; 99 CHAR fbuf[BUFSIZ]; 100 }; 101 102 /* for files not used with file descriptors */ 103 struct filehdr { 104 UFD fdes; 105 POS flin; 106 BOOL feof; 107 CHAR fsiz; 108 STRING fnxt; 109 STRING fend; 110 STRING *feval; 111 FILE fstak; 112 CHAR _fbuf[1]; 113 }; 114 115 struct sysnod { 116 STRING sysnam; 117 INT sysval; 118 }; 119 120 /* dummy for access only */ 121 struct argnod { 122 ARGPTR argnxt; 123 CHAR argval[1]; 124 }; 125 126 struct dolnod { 127 DOLPTR dolnxt; 128 INT doluse; 129 CHAR dolarg[1]; 130 }; 131 132 struct forknod { 133 INT forktyp; 134 IOPTR forkio; 135 TREPTR forktre; 136 }; 137 138 struct comnod { 139 INT comtyp; 140 IOPTR comio; 141 ARGPTR comarg; 142 ARGPTR comset; 143 }; 144 145 struct ifnod { 146 INT iftyp; 147 TREPTR iftre; 148 TREPTR thtre; 149 TREPTR eltre; 150 }; 151 152 struct whnod { 153 INT whtyp; 154 TREPTR whtre; 155 TREPTR dotre; 156 }; 157 158 struct fornod { 159 INT fortyp; 160 TREPTR fortre; 161 STRING fornam; 162 COMPTR forlst; 163 }; 164 165 struct swnod { 166 INT swtyp; 167 STRING swarg; 168 REGPTR swlst; 169 }; 170 171 struct regnod { 172 ARGPTR regptr; 173 TREPTR regcom; 174 REGPTR regnxt; 175 }; 176 177 struct parnod { 178 INT partyp; 179 TREPTR partre; 180 }; 181 182 struct lstnod { 183 INT lsttyp; 184 TREPTR lstlef; 185 TREPTR lstrit; 186 }; 187 188 struct ionod { 189 INT iofile; 190 STRING ioname; 191 IOPTR ionxt; 192 IOPTR iolst; 193 }; 194 195 #define FORKTYPE (sizeof(struct forknod)) 196 #define COMTYPE (sizeof(struct comnod)) 197 #define IFTYPE (sizeof(struct ifnod)) 198 #define WHTYPE (sizeof(struct whnod)) 199 #define FORTYPE (sizeof(struct fornod)) 200 #define SWTYPE (sizeof(struct swnod)) 201 #define REGTYPE (sizeof(struct regnod)) 202 #define PARTYPE (sizeof(struct parnod)) 203 #define LSTTYPE (sizeof(struct lstnod)) 204 #define IOTYPE (sizeof(struct ionod)) 205 206 /* this node is a proforma for those that precede it */ 207 union trenod { 208 INT tretyp; 209 struct { INT dummyy; IOPTR treio;} treio; 210 struct forknod forknod; 211 struct comnod comnod; 212 struct ifnod ifnod; 213 struct whnod whnod; 214 struct fornod fornod; 215 struct swnod swnod; 216 struct lstnod lstnod; 217 struct parnod parnod; 218 }; 219