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)) 210