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