Commit | Line | Data |
---|---|---|
862515b8 TL |
1 | # |
2 | /* | |
3 | * UNIX shell | |
4 | */ | |
5 | ||
6 | /* error exits from various parts of shell */ | |
7 | #define ERROR 1 | |
8 | #define SYNBAD 2 | |
9 | #define SIGFAIL 3 | |
10 | #define SIGFLG 0200 | |
11 | ||
12 | /* command tree */ | |
13 | #define FPRS 020 | |
14 | #define FINT 040 | |
15 | #define FAMP 0100 | |
16 | #define FPIN 0400 | |
17 | #define FPOU 01000 | |
18 | #define FPCL 02000 | |
19 | #define FCMD 04000 | |
20 | #define COMMSK 017 | |
21 | ||
22 | #define TCOM 0 | |
23 | #define TPAR 1 | |
24 | #define TFIL 2 | |
25 | #define TLST 3 | |
26 | #define TIF 4 | |
27 | #define TWH 5 | |
28 | #define TUN 6 | |
29 | #define TSW 7 | |
30 | #define TAND 8 | |
31 | #define TORF 9 | |
32 | #define TFORK 10 | |
33 | #define TFOR 11 | |
34 | ||
35 | /* execute table */ | |
36 | #define SYSSET 1 | |
37 | #define SYSCD 2 | |
38 | #define SYSEXEC 3 | |
39 | #define SYSLOGIN 4 | |
40 | #define SYSTRAP 5 | |
41 | #define SYSEXIT 6 | |
42 | #define SYSSHFT 7 | |
43 | #define SYSWAIT 8 | |
44 | #define SYSCONT 9 | |
45 | #define SYSBREAK 10 | |
46 | #define SYSEVAL 11 | |
47 | #define SYSDOT 12 | |
48 | #define SYSRDONLY 13 | |
49 | #define SYSTIMES 14 | |
50 | #define SYSXPORT 15 | |
51 | #define SYSNULL 16 | |
52 | #define SYSREAD 17 | |
53 | #define SYSTST 18 | |
54 | #define SYSUMASK 19 | |
55 | ||
56 | /* used for input and output of shell */ | |
57 | #define INIO 10 | |
58 | #define OTIO 11 | |
59 | ||
60 | /*io nodes*/ | |
61 | #define USERIO 10 | |
62 | #define IOUFD 15 | |
63 | #define IODOC 16 | |
64 | #define IOPUT 32 | |
65 | #define IOAPP 64 | |
66 | #define IOMOV 128 | |
67 | #define IORDW 256 | |
68 | #define INPIPE 0 | |
69 | #define OTPIPE 1 | |
70 | ||
71 | /* arg list terminator */ | |
72 | #define ENDARGS 0 | |
73 | ||
74 | #include "mac.h" | |
75 | #include "mode.h" | |
76 | #include "name.h" | |
77 | ||
78 | ||
79 | /* result type declarations */ | |
80 | #define alloc malloc | |
81 | ADDRESS alloc(); | |
82 | VOID addblok(); | |
83 | STRING make(); | |
84 | STRING movstr(); | |
85 | TREPTR cmd(); | |
86 | TREPTR makefork(); | |
87 | NAMPTR lookup(); | |
88 | VOID setname(); | |
89 | VOID setargs(); | |
90 | DOLPTR useargs(); | |
91 | REAL expr(); | |
92 | STRING catpath(); | |
93 | STRING getpath(); | |
94 | STRING *scan(); | |
95 | STRING mactrim(); | |
96 | STRING macro(); | |
97 | STRING execs(); | |
98 | VOID await(); | |
99 | VOID post(); | |
100 | STRING copyto(); | |
101 | VOID exname(); | |
102 | STRING staknam(); | |
103 | VOID printnam(); | |
104 | VOID printflg(); | |
105 | VOID prs(); | |
106 | VOID prc(); | |
107 | VOID getenv(); | |
108 | STRING *setenv(); | |
109 | ||
110 | #define attrib(n,f) (n->namflg |= f) | |
111 | #define round(a,b) (((int)((ADR(a)+b)-1))&~((b)-1)) | |
112 | #define closepipe(x) (close(x[INPIPE]), close(x[OTPIPE])) | |
113 | #define eq(a,b) (cf(a,b)==0) | |
114 | #define max(a,b) ((a)>(b)?(a):(b)) | |
115 | #define assert(x) ; | |
116 | ||
117 | /* temp files and io */ | |
118 | UFD output; | |
119 | INT ioset; | |
120 | IOPTR iotemp; /* files to be deleted sometime */ | |
121 | IOPTR iopend; /* documents waiting to be read at NL */ | |
122 | ||
123 | /* substitution */ | |
124 | INT dolc; | |
125 | STRING *dolv; | |
126 | DOLPTR argfor; | |
127 | ARGPTR gchain; | |
128 | ||
129 | /* stack */ | |
130 | #define BLK(x) ((BLKPTR)(x)) | |
131 | #define BYT(x) ((BYTPTR)(x)) | |
132 | #define STK(x) ((STKPTR)(x)) | |
133 | #define ADR(x) ((char*)(x)) | |
134 | ||
135 | /* stak stuff */ | |
136 | #include "stak.h" | |
137 | ||
138 | /* string constants */ | |
139 | MSG atline; | |
140 | MSG readmsg; | |
141 | MSG colon; | |
142 | MSG minus; | |
143 | MSG nullstr; | |
144 | MSG sptbnl; | |
145 | MSG unexpected; | |
146 | MSG endoffile; | |
147 | MSG synmsg; | |
148 | ||
149 | /* name tree and words */ | |
150 | SYSTAB reserved; | |
151 | INT wdval; | |
152 | INT wdnum; | |
153 | ARGPTR wdarg; | |
154 | INT wdset; | |
155 | BOOL reserv; | |
156 | ||
157 | /* prompting */ | |
158 | MSG stdprompt; | |
159 | MSG supprompt; | |
160 | MSG profile; | |
161 | ||
162 | /* built in names */ | |
163 | NAMNOD fngnod; | |
164 | NAMNOD ifsnod; | |
165 | NAMNOD homenod; | |
166 | NAMNOD mailnod; | |
167 | NAMNOD pathnod; | |
168 | NAMNOD ps1nod; | |
169 | NAMNOD ps2nod; | |
170 | ||
171 | /* special names */ | |
172 | MSG flagadr; | |
173 | STRING cmdadr; | |
174 | STRING exitadr; | |
175 | STRING dolladr; | |
176 | STRING pcsadr; | |
177 | STRING pidadr; | |
178 | ||
179 | MSG defpath; | |
180 | ||
181 | /* names always present */ | |
182 | MSG mailname; | |
183 | MSG homename; | |
184 | MSG pathname; | |
185 | MSG fngname; | |
186 | MSG ifsname; | |
187 | MSG ps1name; | |
188 | MSG ps2name; | |
189 | ||
190 | /* transput */ | |
191 | CHAR tmpout[]; | |
192 | STRING tmpnam; | |
193 | INT serial; | |
194 | #define TMPNAM 7 | |
195 | FILE standin; | |
196 | #define input (standin->fdes) | |
197 | #define eof (standin->feof) | |
198 | INT peekc; | |
199 | STRING comdiv; | |
200 | MSG devnull; | |
201 | ||
202 | /* flags */ | |
203 | #define noexec 01 | |
204 | #define intflg 02 | |
205 | #define prompt 04 | |
206 | #define setflg 010 | |
207 | #define errflg 020 | |
208 | #define ttyflg 040 | |
209 | #define forked 0100 | |
210 | #define oneflg 0200 | |
211 | #define rshflg 0400 | |
212 | #define waiting 01000 | |
213 | #define stdflg 02000 | |
214 | #define execpr 04000 | |
215 | #define readpr 010000 | |
216 | #define keyflg 020000 | |
217 | INT flags; | |
218 | ||
219 | /* error exits from various parts of shell */ | |
220 | #include <setjmp.h> | |
221 | jmp_buf subshell; | |
222 | jmp_buf errshell; | |
223 | ||
224 | /* fault handling */ | |
225 | #include "brkincr.h" | |
226 | POS brkincr; | |
227 | ||
228 | #define MINTRAP 0 | |
229 | #define MAXTRAP 17 | |
230 | ||
231 | #define INTR 2 | |
232 | #define QUIT 3 | |
233 | #define MEMF 11 | |
234 | #define ALARM 14 | |
235 | #define KILL 15 | |
236 | #define TRAPSET 2 | |
237 | #define SIGSET 4 | |
238 | #define SIGMOD 8 | |
239 | ||
240 | VOID fault(); | |
241 | BOOL trapnote; | |
242 | STRING trapcom[]; | |
243 | BOOL trapflg[]; | |
244 | ||
245 | /* name tree and words */ | |
246 | STRING *environ; | |
247 | CHAR numbuf[]; | |
248 | MSG export; | |
249 | MSG readonly; | |
250 | ||
251 | /* execflgs */ | |
252 | INT exitval; | |
253 | BOOL execbrk; | |
254 | INT loopcnt; | |
255 | INT breakcnt; | |
256 | ||
257 | /* messages */ | |
258 | MSG mailmsg; | |
259 | MSG coredump; | |
260 | MSG badopt; | |
261 | MSG badparam; | |
262 | MSG badsub; | |
263 | MSG nospace; | |
264 | MSG notfound; | |
265 | MSG badtrap; | |
266 | MSG baddir; | |
267 | MSG badshift; | |
268 | MSG illegal; | |
269 | MSG restricted; | |
270 | MSG execpmsg; | |
271 | MSG notid; | |
272 | MSG wtfailed; | |
273 | MSG badcreate; | |
274 | MSG piperr; | |
275 | MSG badopen; | |
276 | MSG badnum; | |
277 | MSG arglist; | |
278 | MSG txtbsy; | |
279 | MSG toobig; | |
280 | MSG badexec; | |
281 | MSG notfound; | |
282 | MSG badfile; | |
283 | ||
284 | address end[]; | |
285 | ||
286 | #include "ctype.h" | |
287 |