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