dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / lib / libshell / common / include / shnodes.h
blob032ef2609d8de1a241ecb4f1d939bd22481ffeb6
1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1982-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
12 * *
13 * Information and Software Systems Research *
14 * AT&T Research *
15 * Florham Park NJ *
16 * *
17 * David Korn <dgk@research.att.com> *
18 * *
19 ***********************************************************************/
20 #pragma prototyped
21 #ifndef _SHNODES_H
22 #define _SHNODES_H 1
24 * UNIX shell
25 * Written by David Korn
30 #include <ast.h>
31 #include "argnod.h"
33 /* command tree for tretyp */
34 #define FINT (02<<COMBITS) /* non-interruptable */
35 #define FAMP (04<<COMBITS) /* background */
36 #define FPIN (010<<COMBITS) /* input is a pipe */
37 #define FPOU (040<<COMBITS) /* output is a pipe */
38 #define FPCL (0100<<COMBITS) /* close the pipe */
39 #define FCOOP (0200<<COMBITS) /* cooperating process */
40 #define FSHOWME (0400<<COMBITS) /* set for showme commands */
41 #define FPOSIX (02<<COMBITS) /* posix semantics function */
42 #define FLINENO (04<<COMBITS) /* for/case has line number */
43 #define FOPTGET (010<<COMBITS) /* function calls getopts */
45 #define TNEGATE (01<<COMBITS) /* ! inside [[...]] */
46 #define TBINARY (02<<COMBITS) /* binary operator in [[...]] */
47 #define TUNARY (04<<COMBITS) /* unary operator in [[...]] */
48 #define TTEST (010<<COMBITS)
49 #define TPAREN (TBINARY|TUNARY)
50 #define TSHIFT (COMBITS+4)
51 #define TNSPACE (TFUN|COMSCAN)
53 #define TCOM 0
54 #define TPAR 1
55 #define TFIL 2
56 #define TLST 3
57 #define TIF 4
58 #define TWH 5
59 #define TUN (TWH|COMSCAN)
60 #define TTST 6
61 #define TSW 7
62 #define TAND 8
63 #define TORF 9
64 #define TFORK 10
65 #define TFOR 11
66 #define TSELECT (TFOR|COMSCAN)
67 #define TARITH 12
68 #define TTIME 13
69 #define TSETIO 14
70 #define TFUN 15
72 /* this node is a proforma for those that follow */
74 struct trenod
76 int tretyp;
77 struct ionod *treio;
81 struct forknod
83 int forktyp;
84 struct ionod *forkio;
85 Shnode_t *forktre;
86 int forkline;
90 struct ifnod
92 int iftyp;
93 Shnode_t *iftre;
94 Shnode_t *thtre;
95 Shnode_t *eltre;
98 struct whnod
100 int whtyp;
101 Shnode_t *whtre;
102 Shnode_t *dotre;
103 struct arithnod *whinc;
106 struct fornod
108 int fortyp;
109 char *fornam;
110 Shnode_t *fortre;
111 struct comnod *forlst;
112 int forline;
115 struct swnod
117 int swtyp;
118 struct argnod *swarg;
119 struct regnod *swlst;
120 struct ionod *swio;
121 int swline;
124 struct regnod
126 struct argnod *regptr;
127 Shnode_t *regcom;
128 struct regnod *regnxt;
129 char regflag;
132 struct parnod
134 int partyp;
135 Shnode_t *partre;
138 struct lstnod
140 int lsttyp;
141 Shnode_t *lstlef;
142 Shnode_t *lstrit;
145 /* tst is same as lst, but with extra field for line number */
146 struct tstnod
148 struct lstnod tstlst;
149 int tstline;
152 struct functnod
154 int functtyp;
155 char *functnam;
156 Shnode_t *functtre;
157 int functline;
158 off_t functloc;
159 struct slnod *functstak;
160 struct comnod *functargs;
163 struct arithnod
165 int artyp;
166 int arline;
167 struct argnod *arexpr;
168 void *arcomp;
172 /* types of ionodes stored in iofile */
173 #define IOUFD 0x3f /* file descriptor number mask */
174 #define IOPUT 0x40 /* > redirection operator */
175 #define IOAPP 0x80 /* >> redirection operator */
176 #define IODOC 0x100 /* << redirection operator */
177 #define IOMOV 0x200 /* <& or >& operators */
178 #define IOCLOB 0x400 /* noclobber bit */
179 #define IORDW 0x800 /* <> redirection operator */
180 #define IORAW 0x1000 /* no expansion needed for filename */
181 #define IOSTRG 0x2000 /* here-document stored as incore string */
182 #define IOSTRIP 0x4000 /* strip leading tabs for here-document */
183 #define IOQUOTE 0x8000 /* here-document delimiter was quoted */
184 #define IOVNM 0x10000 /* iovname field is non-zero */
185 #define IOLSEEK 0x20000 /* seek operators <# or ># */
186 #define IOARITH 0x40000 /* arithmetic seek <# ((expr)) */
187 #define IOREWRITE 0x80000 /* arithmetic seek <# ((expr)) */
188 #define IOCOPY IOCLOB /* copy skipped lines onto standard output */
189 #define IOPROCSUB IOARITH /* process substitution redirection */
191 union Shnode_u
193 struct argnod arg;
194 struct ionod io;
195 struct whnod wh;
196 struct swnod sw;
197 struct ifnod if_;
198 struct dolnod dol;
199 struct comnod com;
200 struct trenod tre;
201 struct forknod fork;
202 struct fornod for_;
203 struct regnod reg;
204 struct parnod par;
205 struct lstnod lst;
206 struct tstnod tst;
207 struct functnod funct;
208 struct arithnod ar;
211 extern void sh_freeup(Shell_t*);
212 extern void sh_funstaks(struct slnod*,int);
213 extern Sfio_t *sh_subshell(Shnode_t*, int, int);
214 #if defined(__EXPORT__) && defined(_BLD_DLL) && defined(_BLD_shell)
215 __EXPORT__
216 #endif
217 extern int sh_tdump(Sfio_t*, const Shnode_t*);
218 extern Shnode_t *sh_trestore(Shell_t*, Sfio_t*);
220 #endif /* _SHNODES_H */