xref: /csrg-svn/local/toolchest/ksh/sh/defs.h (revision 35134)
1*35134Smarc /*
2*35134Smarc 
3*35134Smarc  *      Copyright (c) 1984, 1985, 1986 AT&T
4*35134Smarc  *      All Rights Reserved
5*35134Smarc 
6*35134Smarc  *      THIS IS UNPUBLISHED PROPRIETARY SOURCE
7*35134Smarc  *      CODE OF AT&T.
8*35134Smarc  *      The copyright notice above does not
9*35134Smarc  *      evidence any actual or intended
10*35134Smarc  *      publication of such source code.
11*35134Smarc 
12*35134Smarc  */
13*35134Smarc /* @(#)defs.h	1.1 */
14*35134Smarc 
15*35134Smarc /*
16*35134Smarc  *	UNIX shell
17*35134Smarc  *	S. R. Bourne
18*35134Smarc  *	Rewritten by David Korn
19*35134Smarc  *
20*35134Smarc  */
21*35134Smarc 
22*35134Smarc #include	<stdio.h>
23*35134Smarc #include	<setjmp.h>
24*35134Smarc #include	<signal.h>
25*35134Smarc 
26*35134Smarc #define const
27*35134Smarc 
28*35134Smarc /* error exits from various parts of shell */
29*35134Smarc #define ERROR	1
30*35134Smarc #define SYNBAD	2
31*35134Smarc 
32*35134Smarc #define BYTESPERWORD	(sizeof(char *))
33*35134Smarc #define ENDARGS	0	/* arg list terminator */
34*35134Smarc #define	NIL	((char*)0)
35*35134Smarc #ifndef NULL
36*35134Smarc #define NULL 0
37*35134Smarc #endif
38*35134Smarc 
39*35134Smarc 
40*35134Smarc /* typedefs used in the shell */
41*35134Smarc typedef char	BOOL;
42*35134Smarc typedef char	*ADDRESS;
43*35134Smarc typedef char	MSG[];
44*35134Smarc typedef char	*STKPTR;
45*35134Smarc 
46*35134Smarc typedef struct stat	STATBUF;	/* defined in /usr/include/sys/stat.h */
47*35134Smarc typedef struct blk	*BLKPTR;
48*35134Smarc typedef struct fileblk	FILEBLK;
49*35134Smarc typedef struct fileblk	*SHFILE;
50*35134Smarc typedef struct trenod	*TREPTR;
51*35134Smarc typedef struct forknod	*FORKPTR;
52*35134Smarc typedef struct comnod	*COMPTR;
53*35134Smarc typedef struct swnod	*SWPTR;
54*35134Smarc typedef struct regnod	*REGPTR;
55*35134Smarc typedef struct parnod	*PARPTR;
56*35134Smarc typedef struct ifnod	*IFPTR;
57*35134Smarc typedef struct whnod	*WHPTR;
58*35134Smarc typedef struct fornod	*FORPTR;
59*35134Smarc typedef struct lstnod	*LSTPTR;
60*35134Smarc typedef struct chnnod	*CHNPTR;
61*35134Smarc typedef struct dolnod	*DOLPTR;
62*35134Smarc typedef struct ionod	*IOPTR;
63*35134Smarc typedef struct Namnod	NAMNOD;
64*35134Smarc typedef struct Namnod	*NAMPTR;
65*35134Smarc typedef struct sysnod	*SYSPTR;
66*35134Smarc typedef struct procnod	*PROCPTR;
67*35134Smarc 
68*35134Smarc #define Rcheat(a)	((unsigned)(a))
69*35134Smarc 
70*35134Smarc #define blank()		putc(SP,output)
71*35134Smarc #define newline()	putc(NL,output)
72*35134Smarc #define round(a,b)	(((int)((ADR(a)+b)-1))&~((b)-1))
73*35134Smarc #define eq(a,b)		(strcmp(a,b)==0)
74*35134Smarc #define max(a,b)	((a)>(b)?(a):(b))
75*35134Smarc #define assert(x)	;
76*35134Smarc #define exitset()	(savexit=exitval)
77*35134Smarc #define error(s)	failed(s,NIL)
78*35134Smarc #define		BLK(x)	((BLKPTR)(x))
79*35134Smarc #define		BYT(x)	((BYTPTR)(x))
80*35134Smarc #define		STK(x)	((STKPTR)(x))
81*35134Smarc #define		ADR(x)	((char*)(x))
82*35134Smarc #ifdef BSD
83*35134Smarc #define	strchr		index
84*35134Smarc #define	strrchr		rindex
85*35134Smarc #endif	/* BSD */
86*35134Smarc #ifdef  VENIX
87*35134Smarc #define	strchr		index
88*35134Smarc #define	strrchr		rindex
89*35134Smarc #endif	/* VENIX */
90*35134Smarc 
91*35134Smarc /* flags */
92*35134Smarc 
93*35134Smarc typedef long optflag;
94*35134Smarc #ifdef INT16
95*35134Smarc # ifndef pdp11
96*35134Smarc # define _OPTIM_	1
97*35134Smarc # endif /* pdp11 */
98*35134Smarc #endif /* INT16 */
99*35134Smarc 
100*35134Smarc #ifdef _OPTIM_
101*35134Smarc #define _HIGH_	1
102*35134Smarc #define _LOW_	_HIGH_-1
103*35134Smarc #define is_option(flag)		((flag)&0xffffL?\
104*35134Smarc 					st.Flags.i[_LOW_]&(unsigned int)(flag):\
105*35134Smarc 					st.Flags.i[_HIGH_]&(unsigned int)((flag)>>16))
106*35134Smarc #define on_option(flag)		((flag)&0xffffL?\
107*35134Smarc 					(st.Flags.i[_LOW_] |= (unsigned int)(flag)):\
108*35134Smarc 					(st.Flags.i[_HIGH_] |= (unsigned int)((flag)>>16)))
109*35134Smarc #define off_option(flag)	((flag)&0xffffL?\
110*35134Smarc 					(st.Flags.i[_LOW_] &= ~(unsigned int)(flag)):\
111*35134Smarc 					(st.Flags.i[_HIGH_] &= ~(unsigned int)((flag)>>16)))
112*35134Smarc #else
113*35134Smarc #define is_option(flag)		(st.Flags.l & (flag))
114*35134Smarc #define on_option(flag)		(st.Flags.l |= (flag))
115*35134Smarc #define off_option(flag)	(st.Flags.l &= ~(flag))
116*35134Smarc #endif /* _OPTIM_ */
117*35134Smarc 
118*35134Smarc #define Fixflg	1
119*35134Smarc #define Errflg	2
120*35134Smarc #define Readpr	3
121*35134Smarc #define Monitor	4
122*35134Smarc #define	Intflg	5
123*35134Smarc #define Rshflg	6
124*35134Smarc #define Execpr	7
125*35134Smarc #define Keyflg	8
126*35134Smarc #define Noset	9
127*35134Smarc #define Noglob	10
128*35134Smarc #define Allexp	11
129*35134Smarc #define Noeof	13
130*35134Smarc #define Nomatch	14
131*35134Smarc #define Markdir	15
132*35134Smarc #define Bgnice	16
133*35134Smarc #define Editvi	17
134*35134Smarc #define Viraw	18
135*35134Smarc #define Oneflg	19
136*35134Smarc #define Hashall	20
137*35134Smarc #define Stdflg	21
138*35134Smarc #define Noexec	22
139*35134Smarc #define Notify	23
140*35134Smarc #define Gmacs	24
141*35134Smarc #define Emacs	25
142*35134Smarc #define	Privmod 26
143*35134Smarc #define	Inproc	27
144*35134Smarc 
145*35134Smarc #define FIXFLG	(1<<Fixflg) /* used also as a state */
146*35134Smarc #define	ERRFLG	(1<<Errflg) /* used also as a state */
147*35134Smarc #define	READPR	(1<<Readpr) /* used also as a state */
148*35134Smarc #define MONITOR	(1<<Monitor)/* used also as a state */
149*35134Smarc #define	INTFLG	(1<<Intflg) /* used also as a state */
150*35134Smarc #define	RSHFLG	(1L<<Rshflg)
151*35134Smarc #define	EXECPR	(1L<<Execpr)
152*35134Smarc #define	KEYFLG	(1L<<Keyflg)
153*35134Smarc #define NOSET	(1L<<Noset)
154*35134Smarc #define NOGLOB	(1L<<Noglob)
155*35134Smarc #define ALLEXP	(1L<<Allexp)
156*35134Smarc #define NOEOF	(1L<<Noeof)
157*35134Smarc #define NOMATCH	(1L<<Nomatch)
158*35134Smarc #define EMACS	(1L<<Emacs)
159*35134Smarc #define BGNICE	(1L<<Bgnice)
160*35134Smarc #define EDITVI	(1L<<Editvi)
161*35134Smarc #define VIRAW	(1L<<Viraw)
162*35134Smarc #define	ONEFLG	(1L<<Oneflg)
163*35134Smarc #define HASHALL	(1L<<Hashall)
164*35134Smarc #define	STDFLG	(1L<<Stdflg)
165*35134Smarc #define	NOEXEC	(1L<<Noexec)
166*35134Smarc #define	NOTIFY	(1L<<Notify)
167*35134Smarc #define GMACS	(1L<<Gmacs)
168*35134Smarc #define MARKDIR	(1L<<Markdir)
169*35134Smarc #define PRIVM	(1L<<Privmod)
170*35134Smarc #define INPROC	(1L<<Inproc)
171*35134Smarc #define CFLAG	(1L<<30)
172*35134Smarc 
173*35134Smarc 
174*35134Smarc /* states */
175*35134Smarc /* low numbered states are same as flags */
176*35134Smarc #define	PROMPT		INTFLG
177*35134Smarc #define	WAITING		0x40
178*35134Smarc #define	FORKED		0x80
179*35134Smarc #define	TTYFLG		0x100
180*35134Smarc #define IS_TMP		0x200	/* set when TMPFD is available */
181*35134Smarc #define	NO_TMP		0x400	/* set when invalid /tmp/filename */
182*35134Smarc #define RM_TMP		0x800	/* temp files to remove on exit */
183*35134Smarc #define FUNCTION 	0x1000	/* set when entering a function */
184*35134Smarc #define RWAIT		0x2000	/* set when waiting for a read */
185*35134Smarc #define BUILTIN		0x4000	/* set when processing built-in command */
186*35134Smarc #define NONSTOP		0x8000	/* set when job cannot be stopped */
187*35134Smarc #define READC		0x10000	/* only for BSD */
188*35134Smarc #define VFORKED		0x20000	/* only used with VFORK mode */
189*35134Smarc 
190*35134Smarc 
191*35134Smarc 
192*35134Smarc /*	fork constant	*/
193*35134Smarc #define FORKLIM 32
194*35134Smarc /*	comment delimiter 	*/
195*35134Smarc 
196*35134Smarc #define	COMCHAR	'#'
197*35134Smarc 
198*35134Smarc 
199*35134Smarc #define NL	'\n'
200*35134Smarc #define LITERAL	'\''
201*35134Smarc #define ENDOF	0
202*35134Smarc #define STRIP	0377
203*35134Smarc #define SP	' '
204*35134Smarc #define NOEXP	1
205*35134Smarc #define HAT	'^'
206*35134Smarc #define ESCAPE	'\\'
207*35134Smarc #define HIGHBIT	0200
208*35134Smarc #define TO_PRINT 0100	/* bit to set for printing control char */
209*35134Smarc 
210*35134Smarc extern MSG	argcount;
211*35134Smarc extern MSG	argexp;
212*35134Smarc extern MSG	arglist;
213*35134Smarc extern MSG	atline;
214*35134Smarc extern MSG	baddir;
215*35134Smarc extern MSG	badexec;
216*35134Smarc extern MSG	badnum;
217*35134Smarc extern MSG	badop;
218*35134Smarc extern MSG	badopt;
219*35134Smarc extern MSG	badparam;
220*35134Smarc extern MSG	badsub;
221*35134Smarc extern MSG	badtrap;
222*35134Smarc extern MSG	blet;
223*35134Smarc extern MSG	bltfn;
224*35134Smarc extern MSG	bset;
225*35134Smarc extern MSG	bread;
226*35134Smarc extern MSG	colon;
227*35134Smarc extern MSG	coredump;
228*35134Smarc extern MSG	defedit;
229*35134Smarc extern MSG	defpath;
230*35134Smarc extern MSG	dot;
231*35134Smarc extern MSG	endmatch;
232*35134Smarc extern MSG	fn_hdr;
233*35134Smarc extern MSG	execpmsg;
234*35134Smarc extern MSG	intbase;
235*35134Smarc extern MSG	is_;
236*35134Smarc extern MSG	is_alias;
237*35134Smarc extern MSG	is_builtin;
238*35134Smarc extern MSG	is_function;
239*35134Smarc extern MSG	is_reserved;
240*35134Smarc extern MSG	is_talias;
241*35134Smarc extern MSG	is_xalias;
242*35134Smarc extern MSG	is_xfunction;
243*35134Smarc extern MSG	logout;
244*35134Smarc extern MSG	mailmsg;
245*35134Smarc extern MSG	minus;
246*35134Smarc extern MSG	noalias;
247*35134Smarc extern MSG	nofork;
248*35134Smarc extern MSG	noquery;
249*35134Smarc extern MSG	nosign;
250*35134Smarc extern MSG	nospace;
251*35134Smarc extern MSG	noswap;
252*35134Smarc extern MSG	notfound;
253*35134Smarc extern MSG	nullstr;
254*35134Smarc extern MSG	off_;
255*35134Smarc extern MSG	on_;
256*35134Smarc extern MSG	opt_heading;
257*35134Smarc extern MSG	parexp;
258*35134Smarc extern MSG	pexists;
259*35134Smarc extern MSG	ptrace;
260*35134Smarc extern MSG	recursive;
261*35134Smarc extern MSG	restricted;
262*35134Smarc extern MSG	setpwd;
263*35134Smarc extern MSG	sptbnl;
264*35134Smarc extern MSG	stdprompt;
265*35134Smarc extern MSG	suid_profile;
266*35134Smarc extern MSG	supprompt;
267*35134Smarc extern MSG	t_real;
268*35134Smarc extern MSG	t_sys;
269*35134Smarc extern MSG	t_user;
270*35134Smarc extern MSG	toobig;
271*35134Smarc extern MSG	txtbsy;
272*35134Smarc extern MSG	unlimited;
273*35134Smarc extern MSG	unset;
274*35134Smarc extern MSG	version;
275*35134Smarc extern MSG	pcsadr;
276*35134Smarc extern MSG	pidadr;
277*35134Smarc extern MSG	pwderr;
278*35134Smarc 
279*35134Smarc 
280*35134Smarc extern struct Amemory	*alias;	/* for alias names */
281*35134Smarc extern struct Namnod	*bltin_nodes;
282*35134Smarc 
283*35134Smarc /*
284*35134Smarc  * Saves the state of the shell
285*35134Smarc  */
286*35134Smarc 
287*35134Smarc struct State
288*35134Smarc {
289*35134Smarc 	jmp_buf		jmpbuf;
290*35134Smarc 	union
291*35134Smarc 	{
292*35134Smarc 		long	l;
293*35134Smarc #ifdef _OPTIM_
294*35134Smarc 		int	i[2];
295*35134Smarc #endif /* _OPTIM_ */
296*35134Smarc 	}		Flags;
297*35134Smarc 	unsigned	States;
298*35134Smarc 	int		Breakcnt;
299*35134Smarc 	int		Execbrk;
300*35134Smarc 	int		Loopcnt;
301*35134Smarc 	int		Fn_depth;
302*35134Smarc 	int		Peekc;
303*35134Smarc 	int		Peekn;
304*35134Smarc 	int		Aliflg;
305*35134Smarc 	int		Reserv;
306*35134Smarc 	char		*Cmdadr;
307*35134Smarc 	int		Cmdline;
308*35134Smarc 	int		Firstline;
309*35134Smarc 	int		Exec_flag;
310*35134Smarc 	int		Dolc;
311*35134Smarc 	char		**Dolv;
312*35134Smarc 	IOPTR		Iopend;
313*35134Smarc 	int		Ioset;
314*35134Smarc 	IOPTR		Iotemp;
315*35134Smarc 	int		Linked;
316*35134Smarc 	SHFILE		Standin;
317*35134Smarc 	FILE		*Standout;
318*35134Smarc 	FILE		*Cpipe[2];
319*35134Smarc 	int		Cpid;
320*35134Smarc 	int		Wdset;
321*35134Smarc };
322*35134Smarc 
323*35134Smarc extern struct State st;
324*35134Smarc 
325*35134Smarc #define flags		st.Flags.l
326*35134Smarc 
327*35134Smarc #define states		st.States
328*35134Smarc #define breakcnt	st.Breakcnt
329*35134Smarc #define loopcnt		st.Loopcnt
330*35134Smarc #define execbrk		st.Execbrk
331*35134Smarc #define fn_depth	st.Fn_depth
332*35134Smarc #define peekc		st.Peekc
333*35134Smarc #define peekn		st.Peekn
334*35134Smarc #define aliflg		st.Aliflg
335*35134Smarc #define reserv		st.Reserv
336*35134Smarc #define cmdadr		st.Cmdadr
337*35134Smarc #define cmdline		st.Cmdline
338*35134Smarc #define firstline	st.Firstline
339*35134Smarc #define exec_flag	st.Exec_flag
340*35134Smarc #define dolc		st.Dolc
341*35134Smarc #define dolv		st.Dolv
342*35134Smarc #define linked		st.Linked
343*35134Smarc #define iotemp		st.Iotemp
344*35134Smarc #define ioset		st.Ioset
345*35134Smarc #define iopend		st.Iopend
346*35134Smarc #define	standout	st.Standout
347*35134Smarc #define	standin		st.Standin
348*35134Smarc #define	cpipe		st.Cpipe
349*35134Smarc #define	cpid		st.Cpid
350*35134Smarc #define wdset		st.Wdset
351*35134Smarc 
352*35134Smarc extern char	*comdiv;
353*35134Smarc extern int	errno;
354*35134Smarc extern int	exitval;
355*35134Smarc extern char	*lastarg;
356*35134Smarc extern long	mailchk;
357*35134Smarc extern int	oldexit;
358*35134Smarc extern FILE	*output;
359*35134Smarc extern long	ppid;
360*35134Smarc extern struct Amemory *prnames;	/* for function names */
361*35134Smarc extern int	savexit;
362*35134Smarc extern int	topfd;
363*35134Smarc extern char	*trapcom[];
364*35134Smarc extern BOOL	trapnote;
365*35134Smarc extern BOOL	login_sh;
366*35134Smarc extern int 	userid;
367*35134Smarc #ifdef pdp11
368*35134Smarc # ifndef INT16
369*35134Smarc # define INT16
370*35134Smarc # endif /* INT16 */
371*35134Smarc #endif	/* pdp11 */
372*35134Smarc 
373*35134Smarc #ifdef INT16
374*35134Smarc /* save space */
375*35134Smarc #undef putc
376*35134Smarc #define putc fputc
377*35134Smarc #endif	/* INT16 */
378