xref: /titanic_51/usr/src/cmd/sh/defs.h (revision 4f60987df4dcaa54a88b596f861fbf4f3382c65e)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28 /*	  All Rights Reserved  	*/
29 
30 #ifndef	_DEFS_H
31 #define	_DEFS_H
32 
33 #ifdef	__cplusplus
34 extern "C" {
35 #endif
36 
37 /*
38  *	UNIX shell
39  */
40 
41 /* execute flags */
42 #define		XEC_EXECED	01
43 #define			XEC_LINKED	02
44 #define		XEC_NOSTOP	04
45 
46 /* endjobs flags */
47 #define			JOB_STOPPED	01
48 #define			JOB_RUNNING	02
49 
50 /* error exits from various parts of shell */
51 #define		ERROR		1
52 #define		SYNBAD		2
53 #define		SIGFAIL 	2000
54 #define		SIGFLG		0200
55 
56 /* command tree */
57 #define		FPIN		0x0100
58 #define		FPOU		0x0200
59 #define		FAMP		0x0400
60 #define		COMMSK		0x00F0
61 #define		CNTMSK		0x000F	/* this bit fields no longer used */
62 
63 #define		TCOM		0x0000
64 #define		TPAR		0x0010
65 #define		TFIL		0x0020
66 #define		TLST		0x0030
67 #define		TIF			0x0040
68 #define		TWH			0x0050
69 #define		TUN			0x0060
70 #define		TSW			0x0070
71 #define		TAND		0x0080
72 #define		TORF		0x0090
73 #define		TFORK		0x00A0
74 #define		TFOR		0x00B0
75 #define			TFND		0x00C0
76 
77 /* execute table */
78 #define		SYSSET		1
79 #define		SYSCD		2
80 #define		SYSEXEC		3
81 
82 #ifdef RES	/*	include login code	*/
83 #define		SYSLOGIN	4
84 #else
85 #define		SYSNEWGRP 	4
86 #endif
87 
88 #define		SYSTRAP		5
89 #define		SYSEXIT		6
90 #define		SYSSHFT 	7
91 #define		SYSWAIT		8
92 #define		SYSCONT 	9
93 #define		SYSBREAK	10
94 #define		SYSEVAL 	11
95 #define		SYSDOT		12
96 #define		SYSRDONLY 	13
97 #define		SYSTIMES 	14
98 #define		SYSXPORT	15
99 #define		SYSNULL 	16
100 #define		SYSREAD 	17
101 #define			SYSTST		18
102 
103 #ifndef RES	/*	exclude umask code	*/
104 #define		SYSUMASK 	20
105 #define		SYSULIMIT 	21
106 #endif
107 
108 #define		SYSECHO		22
109 #define			SYSHASH		23
110 #define			SYSPWD		24
111 #define		SYSRETURN	25
112 #define			SYSUNS		26
113 #define			SYSMEM		27
114 #define			SYSTYPE  	28
115 #define			SYSGETOPT	29
116 #define		SYSJOBS		30
117 #define		SYSFGBG		31
118 #define		SYSKILL		32
119 #define		SYSSUSP		33
120 #define		SYSSTOP		34
121 
122 /* used for input and output of shell */
123 #define		INIO 		19
124 
125 /* io nodes */
126 #define		USERIO		10
127 #define		IOUFD		15
128 #define		IODOC		0x0010
129 #define		IOPUT		0x0020
130 #define		IOAPP		0x0040
131 #define		IOMOV		0x0080
132 #define		IORDW		0x0100
133 #define		IOSTRIP		0x0200
134 #define		IODOC_SUBST	0x0400
135 #define		INPIPE		0
136 #define		OTPIPE		1
137 
138 /* arg list terminator */
139 #define		ENDARGS		0
140 
141 #include	<unistd.h>
142 #include 	"mac.h"
143 #include	"mode.h"
144 #include	"name.h"
145 #include	<signal.h>
146 #include	<sys/types.h>
147 
148 /* id's */
149 extern pid_t	mypid;
150 extern pid_t	mypgid;
151 extern pid_t	mysid;
152 
153 /* getopt */
154 
155 extern int		optind;
156 extern int		opterr;
157 extern int 		_sp;
158 extern char 		*optarg;
159 
160 
161 /* use sh-private versions of memory allocation routines */
162 
163 #define		alloc 		malloc
164 
165 /* result type declarations */
166 
167 extern int handle();
168 extern void chktrap();
169 extern void done(int)
170 	__NORETURN;
171 extern void sh_free();
172 extern unsigned char *make();
173 extern unsigned char *movstr();
174 extern unsigned char *movstrn();
175 extern unsigned char *cwdget();
176 extern struct trenod *cmd();
177 extern struct trenod *makefork();
178 extern struct namnod *lookup();
179 extern struct namnod *findnam();
180 extern struct dolnod *useargs();
181 extern float expr();
182 extern unsigned char *catpath();
183 extern unsigned char *getpath();
184 extern unsigned char *nextpath();
185 extern unsigned char **scan();
186 extern unsigned char *mactrim();
187 extern unsigned char *macro();
188 extern void exname(struct namnod *);
189 extern void printnam(struct namnod *);
190 extern void printro(struct namnod *);
191 extern void printexp(struct namnod *);
192 extern unsigned int readwc();
193 extern unsigned int nextwc();
194 extern unsigned char skipc();
195 extern unsigned char **local_setenv();
196 extern time_t time();
197 extern void exitsh(int)
198 	__NORETURN;
199 extern void failed_real(unsigned char *, const char *, unsigned char *)
200     __NORETURN;
201 extern void error(const char *) __NORETURN;
202 extern void prf();
203 extern void assign(struct namnod *, unsigned char *);
204 extern void setmode(int);
205 extern void trim(unsigned char *);
206 extern void preacct(unsigned char *);
207 extern void addblok(unsigned int);
208 extern void freetree(struct trenod *);
209 
210 
211 
212 #define		attrib(n, f)		(n->namflg |= f)
213 #define		round(a, b)		(((int)(((char *)(a)+b)-1))&~((b)-1))
214 #define		closepipe(x)		(close(x[INPIPE]), close(x[OTPIPE]))
215 #define		eq(a, b)		(cf(a, b) == 0)
216 #define		max(a, b)		((a) > (b)?(a):(b))
217 #define		assert(x)
218 #define		_gettext(s)		(unsigned char *)gettext(s)
219 
220 /*
221  * macros using failed_real(). Only s2 is gettext'd with both functions.
222  */
223 #define		failed(s1, s2)		failed_real(s1, s2, NULL)
224 #define		bfailed(s1, s2, s3)	failed_real(s1, s2, s3)
225 
226 /*
227  * macros using failure_real(). s1 and s2 is gettext'd with gfailure(), but
228  * only s2 is gettext'd with failure().
229  */
230 #define		failure(s1, s2)		failure_real(s1, s2, 0)
231 #define		gfailure(s1, s2)	failure_real(s1, s2, 1)
232 
233 /* temp files and io */
234 extern int				output;
235 extern int				ioset;
236 extern struct ionod	*iotemp; /* files to be deleted sometime */
237 extern struct ionod	*fiotemp; /* function files to be deleted sometime */
238 extern struct ionod	*iopend; /* documents waiting to be read at NL */
239 extern struct fdsave	fdmap[];
240 extern int savpipe;
241 
242 /* substitution */
243 extern int				dolc;
244 extern unsigned char				**dolv;
245 extern struct dolnod	*argfor;
246 extern struct argnod	*gchain;
247 
248 /* stak stuff */
249 #include		"stak.h"
250 
251 /*
252  * If non-ANSI C, make const go away.  We bring it back
253  * at the end of the file to avoid side-effects.
254  */
255 #ifndef __STDC__
256 #define	const
257 #endif
258 
259 /* string constants */
260 extern const char				atline[];
261 extern const char				readmsg[];
262 extern const char				colon[];
263 extern const char				minus[];
264 extern const char				nullstr[];
265 extern const char				sptbnl[];
266 extern const char				unexpected[];
267 extern const char				endoffile[];
268 extern const char				synmsg[];
269 
270 /* name tree and words */
271 extern const struct sysnod	reserved[];
272 extern const int				no_reserved;
273 extern const struct sysnod	commands[];
274 extern const int				no_commands;
275 
276 extern int				wdval;
277 extern int				wdnum;
278 extern int				fndef;
279 extern int				nohash;
280 extern struct argnod	*wdarg;
281 extern int				wdset;
282 extern BOOL				reserv;
283 
284 /* prompting */
285 extern const char				stdprompt[];
286 extern const char				supprompt[];
287 extern const char				profile[];
288 extern const char				sysprofile[];
289 
290 /* locale testing */
291 extern const char			localedir[];
292 extern int				localedir_exists;
293 
294 /* built in names */
295 extern struct namnod	fngnod;
296 extern struct namnod	cdpnod;
297 extern struct namnod	ifsnod;
298 extern struct namnod	homenod;
299 extern struct namnod	mailnod;
300 extern struct namnod	pathnod;
301 extern struct namnod	ps1nod;
302 extern struct namnod	ps2nod;
303 extern struct namnod	mchknod;
304 extern struct namnod	acctnod;
305 extern struct namnod	mailpnod;
306 
307 /* special names */
308 extern unsigned char				flagadr[];
309 extern unsigned char				*pcsadr;
310 extern unsigned char				*pidadr;
311 extern unsigned char				*cmdadr;
312 
313 /* names always present */
314 extern const char				defpath[];
315 extern const char				mailname[];
316 extern const char				homename[];
317 extern const char				pathname[];
318 extern const char				cdpname[];
319 extern const char				ifsname[];
320 extern const char				ps1name[];
321 extern const char				ps2name[];
322 extern const char				mchkname[];
323 extern const char				acctname[];
324 extern const char				mailpname[];
325 
326 /* transput */
327 extern unsigned char				tmpout[];
328 extern int 					tmpout_offset;
329 extern unsigned int				serial;
330 
331 /*
332  * allow plenty of room for size for temp file name:
333  * "/tmp/sh"(7) + <pid> (<=6) + <unsigned int #> (<=10) + \0 (1)
334  */
335 #define			TMPOUTSZ 		32
336 
337 extern struct fileblk	*standin;
338 
339 #define		input		(standin->fdes)
340 #define		eof			(standin->feof)
341 
342 extern int				peekc;
343 extern int				peekn;
344 extern unsigned char				*comdiv;
345 extern
346 #ifdef __STDC__
347 const
348 #endif
349 char				devnull[];
350 
351 /* flags */
352 #define			noexec		01
353 #define			sysflg		01
354 #define			intflg		02
355 #define			prompt		04
356 #define			setflg		010
357 #define			errflg		020
358 #define			ttyflg		040
359 #define			forked		0100
360 #define			oneflg		0200
361 #define			rshflg		0400
362 #define			subsh		01000
363 #define			stdflg		02000
364 #define			STDFLG		's'
365 #define			execpr		04000
366 #define			readpr		010000
367 #define			keyflg		020000
368 #define			hashflg		040000
369 #define			nofngflg	0200000
370 #define			exportflg	0400000
371 #define			monitorflg	01000000
372 #define			jcflg		02000000
373 #define			privflg		04000000
374 #define			forcexit	010000000
375 #define			jcoff		020000000
376 #define			pfshflg		040000000
377 
378 extern long				flags;
379 extern int				rwait;	/* flags read waiting */
380 
381 /* error exits from various parts of shell */
382 #include	<setjmp.h>
383 extern jmp_buf			subshell;
384 extern jmp_buf			errshell;
385 
386 /* fault handling */
387 #include	"brkincr.h"
388 
389 extern unsigned			brkincr;
390 #define		MINTRAP		0
391 #define		MAXTRAP		NSIG
392 
393 #define		TRAPSET		2
394 #define		SIGSET		4
395 #define			SIGMOD		8
396 #define			SIGIGN		16
397 
398 extern BOOL				trapnote;
399 
400 /* name tree and words */
401 extern unsigned char				**environ;
402 extern unsigned char				numbuf[];
403 extern const char				export[];
404 extern const char				duperr[];
405 extern const char				readonly[];
406 
407 /* execflgs */
408 extern int				exitval;
409 extern int				retval;
410 extern BOOL				execbrk;
411 extern int				loopcnt;
412 extern int				breakcnt;
413 extern int				funcnt;
414 extern int				tried_to_exit;
415 
416 /* messages */
417 extern const char				mailmsg[];
418 extern const char				coredump[];
419 extern const char				badopt[];
420 extern const char				badparam[];
421 extern const char				unset[];
422 extern const char				badsub[];
423 extern const char				nospace[];
424 extern const char				nostack[];
425 extern const char				notfound[];
426 extern const char				badtrap[];
427 extern const char				baddir[];
428 extern const char				badshift[];
429 extern const char				restricted[];
430 extern const char				execpmsg[];
431 extern const char				notid[];
432 extern const char 				badulimit[];
433 extern const char 				ulimit[];
434 extern const char				wtfailed[];
435 extern const char				badcreate[];
436 extern const char				nofork[];
437 extern const char				noswap[];
438 extern const char				piperr[];
439 extern const char				badopen[];
440 extern const char				badnum[];
441 extern const char				badsig[];
442 extern const char				badid[];
443 extern const char				arglist[];
444 extern const char				txtbsy[];
445 extern const char				toobig[];
446 extern const char				badexec[];
447 extern const char				badfile[];
448 extern const char				badreturn[];
449 extern const char				badexport[];
450 extern const char				badunset[];
451 extern const char				nohome[];
452 extern const char				badperm[];
453 extern const char				mssgargn[];
454 extern const char				libacc[];
455 extern const char				libbad[];
456 extern const char				libscn[];
457 extern const char				libmax[];
458 extern const char				emultihop[];
459 extern const char				nulldir[];
460 extern const char				enotdir[];
461 extern const char				enoent[];
462 extern const char				eacces[];
463 extern const char				enolink[];
464 extern const char				exited[];
465 extern const char				running[];
466 extern const char				ambiguous[];
467 extern const char				nosuchjob[];
468 extern const char				nosuchpid[];
469 extern const char				nosuchpgid[];
470 extern const char				usage[];
471 extern const char				nojc[];
472 extern const char				killuse[];
473 extern const char				jobsuse[];
474 extern const char				stopuse[];
475 extern const char				ulimuse[];
476 extern const char				nocurjob[];
477 extern const char				loginsh[];
478 extern const char				jobsstopped[];
479 extern const char				jobsrunning[];
480 extern const char				nlorsemi[];
481 extern const char				signalnum[];
482 extern const char				badpwd[];
483 extern const char				badlocale[];
484 extern const char				nobracket[];
485 extern const char				noparen[];
486 extern const char				noarg[];
487 
488 /*	'builtin' error messages	*/
489 
490 extern const char				btest[];
491 extern const char				badop[];
492 
493 #ifndef __STDC__
494 #undef const 					/* bring back const */
495 #endif
496 
497 /*	fork constant	*/
498 
499 #define		FORKLIM 	32
500 
501 extern address			end[];
502 
503 #include	"ctype.h"
504 #include	<ctype.h>
505 #include	<locale.h>
506 
507 extern int				eflag;
508 extern int				ucb_builtins;
509 
510 /*
511  * Find out if it is time to go away.
512  * `trapnote' is set to SIGSET when fault is seen and
513  * no trap has been set.
514  */
515 
516 #define		sigchk()	if (trapnote & SIGSET)	\
517 					exitsh(exitval ? exitval : SIGFAIL)
518 
519 #define		exitset()	retval = exitval
520 
521 /* Multibyte characters */
522 unsigned char *readw();
523 #include <stdlib.h>
524 #include <limits.h>
525 #define	MULTI_BYTE_MAX MB_LEN_MAX
526 
527 
528 #ifdef	__cplusplus
529 }
530 #endif
531 
532 #endif	/* _DEFS_H */
533