|
|
1.1 root 1: /* @(#)mode.h 1.5 */
2: /*
3: * UNIX shell
4: */
5:
6: #ifdef pdp11
7: typedef char BOOL;
8: #else
9: typedef short BOOL;
10: #endif
11:
12: #define BYTESPERWORD (sizeof (char *))
13: #define NIL ((char*)0)
14:
15:
16: /* the following nonsense is required
17: * because casts turn an Lvalue
18: * into an Rvalue so two cheats
19: * are necessary, one for each context.
20: */
21: union { int _cheat;};
22: #define Lcheat(a) ((a)._cheat)
23: #define Rcheat(a) ((int)(a))
24:
25:
26: /* address puns for storage allocation */
27: typedef union
28: {
29: struct forknod *_forkptr;
30: struct comnod *_comptr;
31: struct fndnod *_fndptr;
32: struct parnod *_parptr;
33: struct ifnod *_ifptr;
34: struct whnod *_whptr;
35: struct fornod *_forptr;
36: struct lstnod *_lstptr;
37: struct blk *_blkptr;
38: struct namnod *_namptr;
39: char *_bytptr;
40: } address;
41:
42:
43: /* heap storage */
44: struct blk
45: {
46: struct blk *word;
47: };
48:
49: #define BUFSIZ 128
50: struct fileblk
51: {
52: int fdes;
53: unsigned flin;
54: BOOL feof;
55: unsigned char fsiz;
56: char *fnxt;
57: char *fend;
58: char **feval;
59: struct fileblk *fstak;
60: char fbuf[BUFSIZ];
61: };
62:
63: struct tempblk
64: {
65: int fdes;
66: struct tempblk *fstak;
67: };
68:
69:
70: /* for files not used with file descriptors */
71: struct filehdr
72: {
73: int fdes;
74: unsigned flin;
75: BOOL feof;
76: unsigned char fsiz;
77: char *fnxt;
78: char *fend;
79: char **feval;
80: struct fileblk *fstak;
81: char _fbuf[1];
82: };
83:
84: struct sysnod
85: {
86: char *sysnam;
87: int sysval;
88: };
89:
90: /* this node is a proforma for those that follow */
91: struct trenod
92: {
93: int tretyp;
94: struct ionod *treio;
95: };
96:
97: /* dummy for access only */
98: struct argnod
99: {
100: struct argnod *argnxt;
101: char argval[1];
102: };
103:
104: struct dolnod
105: {
106: struct dolnod *dolnxt;
107: int doluse;
108: char *dolarg[1];
109: };
110:
111: struct forknod
112: {
113: int forktyp;
114: struct ionod *forkio;
115: struct trenod *forktre;
116: };
117:
118: struct comnod
119: {
120: int comtyp;
121: struct ionod *comio;
122: struct argnod *comarg;
123: struct argnod *comset;
124: };
125:
126: struct fndnod
127: {
128: int fndtyp;
129: char *fndnam;
130: struct trenod *fndval;
131: };
132:
133: struct ifnod
134: {
135: int iftyp;
136: struct trenod *iftre;
137: struct trenod *thtre;
138: struct trenod *eltre;
139: };
140:
141: struct whnod
142: {
143: int whtyp;
144: struct trenod *whtre;
145: struct trenod *dotre;
146: };
147:
148: struct fornod
149: {
150: int fortyp;
151: struct trenod *fortre;
152: char *fornam;
153: struct comnod *forlst;
154: };
155:
156: struct swnod
157: {
158: int swtyp;
159: char *swarg;
160: struct regnod *swlst;
161: };
162:
163: struct regnod
164: {
165: struct argnod *regptr;
166: struct trenod *regcom;
167: struct regnod *regnxt;
168: };
169:
170: struct parnod
171: {
172: int partyp;
173: struct trenod *partre;
174: };
175:
176: struct lstnod
177: {
178: int lsttyp;
179: struct trenod *lstlef;
180: struct trenod *lstrit;
181: };
182:
183: struct ionod
184: {
185: int iofile;
186: char *ioname;
187: char *iolink;
188: struct ionod *ionxt;
189: struct ionod *iolst;
190: };
191:
192: struct fdsave
193: {
194: int org_fd;
195: int dup_fd;
196: };
197:
198:
199: #define fndptr(x) ((struct fndnod *)x)
200: #define comptr(x) ((struct comnod *)x)
201: #define forkptr(x) ((struct forknod *)x)
202: #define parptr(x) ((struct parnod *)x)
203: #define lstptr(x) ((struct lstnod *)x)
204: #define forptr(x) ((struct fornod *)x)
205: #define whptr(x) ((struct whnod *)x)
206: #define ifptr(x) ((struct ifnod *)x)
207: #define swptr(x) ((struct swnod *)x)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.