xref: /plan9/sys/src/cmd/rc/exec.h (revision 99eb86a7eded05d02373a1dc66f01c7d211105e0)
13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier  * Definitions used in the interpreter
33e12c5d1SDavid du Colombier  */
43e12c5d1SDavid du Colombier extern void Xappend(void), Xasync(void), Xbackq(void), Xbang(void), Xclose(void);
53e12c5d1SDavid du Colombier extern void Xconc(void), Xcount(void), Xdelfn(void), Xdol(void), Xqdol(void), Xdup(void);
63e12c5d1SDavid du Colombier extern void Xexit(void), Xfalse(void), Xfn(void), Xfor(void), Xglob(void);
73e12c5d1SDavid du Colombier extern void Xjump(void), Xmark(void), Xmatch(void), Xpipe(void), Xread(void);
8119a69faSDavid du Colombier extern void Xrdwr(void);
93e12c5d1SDavid du Colombier extern void Xrdfn(void), Xunredir(void), Xstar(void), Xreturn(void), Xsubshell(void);
103e12c5d1SDavid du Colombier extern void Xtrue(void), Xword(void), Xwrite(void), Xpipefd(void), Xcase(void);
113e12c5d1SDavid du Colombier extern void Xlocal(void), Xunlocal(void), Xassign(void), Xsimple(void), Xpopm(void);
123e12c5d1SDavid du Colombier extern void Xrdcmds(void), Xwastrue(void), Xif(void), Xifnot(void), Xpipewait(void);
139a747e4fSDavid du Colombier extern void Xdelhere(void), Xpopredir(void), Xsub(void), Xeflag(void), Xsettrue(void);
147dd7cddfSDavid du Colombier extern void Xerror(char*);
159a747e4fSDavid du Colombier extern void Xerror1(char*);
163e12c5d1SDavid du Colombier /*
173e12c5d1SDavid du Colombier  * word lists are in correct order,
183e12c5d1SDavid du Colombier  * i.e. word0->word1->word2->word3->0
193e12c5d1SDavid du Colombier  */
203e12c5d1SDavid du Colombier struct word{
213e12c5d1SDavid du Colombier 	char *word;
223e12c5d1SDavid du Colombier 	word *next;
233e12c5d1SDavid du Colombier };
243e12c5d1SDavid du Colombier struct list{
253e12c5d1SDavid du Colombier 	word *words;
263e12c5d1SDavid du Colombier 	list *next;
273e12c5d1SDavid du Colombier };
283e12c5d1SDavid du Colombier word *newword(char *, word *), *copywords(word *, word *);
293e12c5d1SDavid du Colombier struct redir{
303e12c5d1SDavid du Colombier 	char type;			/* what to do */
313e12c5d1SDavid du Colombier 	short from, to;			/* what to do it to */
323e12c5d1SDavid du Colombier 	struct redir *next;		/* what else to do (reverse order) */
333e12c5d1SDavid du Colombier };
349a747e4fSDavid du Colombier #define	NSTATUS	ERRMAX			/* length of status (from plan 9) */
353e12c5d1SDavid du Colombier /*
363e12c5d1SDavid du Colombier  * redir types
373e12c5d1SDavid du Colombier  */
383e12c5d1SDavid du Colombier #define	ROPEN	1			/* dup2(from, to); close(from); */
393e12c5d1SDavid du Colombier #define	RDUP	2			/* dup2(from, to); */
403e12c5d1SDavid du Colombier #define	RCLOSE	3			/* close(from); */
413e12c5d1SDavid du Colombier struct thread{
423e12c5d1SDavid du Colombier 	union code *code;		/* code for this thread */
433e12c5d1SDavid du Colombier 	int pc;				/* code[pc] is the next instruction */
443e12c5d1SDavid du Colombier 	struct list *argv;		/* argument stack */
453e12c5d1SDavid du Colombier 	struct redir *redir;		/* redirection stack */
463e12c5d1SDavid du Colombier 	struct redir *startredir;	/* redir inheritance point */
473e12c5d1SDavid du Colombier 	struct var *local;		/* list of local variables */
483e12c5d1SDavid du Colombier 	char *cmdfile;			/* file name in Xrdcmd */
493e12c5d1SDavid du Colombier 	struct io *cmdfd;		/* file descriptor for Xrdcmd */
503e12c5d1SDavid du Colombier 	int iflast;			/* static `if not' checking */
513e12c5d1SDavid du Colombier 	int eof;			/* is cmdfd at eof? */
523e12c5d1SDavid du Colombier 	int iflag;			/* interactive? */
533e12c5d1SDavid du Colombier 	int lineno;			/* linenumber */
543e12c5d1SDavid du Colombier 	int pid;			/* process for Xpipewait to wait for */
553e12c5d1SDavid du Colombier 	char status[NSTATUS];		/* status for Xpipewait */
563e12c5d1SDavid du Colombier 	tree *treenodes;		/* tree nodes created by this process */
573e12c5d1SDavid du Colombier 	thread *ret;		/* who continues when this finishes */
583e12c5d1SDavid du Colombier };
593e12c5d1SDavid du Colombier thread *runq;
603e12c5d1SDavid du Colombier code *codecopy(code*);
613e12c5d1SDavid du Colombier code *codebuf;				/* compiler output */
62*99eb86a7SDavid du Colombier int ntrap;				/* number of outstanding traps */
63*99eb86a7SDavid du Colombier int trap[NSIG];				/* number of outstanding traps per type */
643e12c5d1SDavid du Colombier struct builtin{
653e12c5d1SDavid du Colombier 	char *name;
663e12c5d1SDavid du Colombier 	void (*fnc)(void);
67d3907fe5SDavid du Colombier };
68d3907fe5SDavid du Colombier extern struct builtin Builtin[];
69219b2ee8SDavid du Colombier int eflagok;			/* kludge flag so that -e doesn't exit in startup */
70dc5a79c1SDavid du Colombier int havefork;
71dc5a79c1SDavid du Colombier 
723e12c5d1SDavid du Colombier void execcd(void), execwhatis(void), execeval(void), execexec(void);
73dc5a79c1SDavid du Colombier int execforkexec(void);
743e12c5d1SDavid du Colombier void execexit(void), execshift(void);
753e12c5d1SDavid du Colombier void execwait(void), execumask(void), execdot(void), execflag(void);
763e12c5d1SDavid du Colombier void execfunc(var*), execcmds(io *);
77