12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
- /*
- * Definitions used in the interpreter
- */
- extern void Xappend(void), Xasync(void), Xbackq(void), Xbang(void), Xclose(void);
- extern void Xconc(void), Xcount(void), Xdelfn(void), Xdol(void), Xqdol(void), Xdup(void);
- extern void Xexit(void), Xfalse(void), Xfn(void), Xfor(void), Xglob(void);
- extern void Xjump(void), Xmark(void), Xmatch(void), Xpipe(void), Xread(void);
- extern void Xrdwr(void);
- extern void Xrdfn(void), Xunredir(void), Xstar(void), Xreturn(void), Xsubshell(void);
- extern void Xtrue(void), Xword(void), Xwrite(void), Xpipefd(void), Xcase(void);
- extern void Xlocal(void), Xunlocal(void), Xassign(void), Xsimple(void), Xpopm(void);
- extern void Xrdcmds(void), Xwastrue(void), Xif(void), Xifnot(void), Xpipewait(void);
- extern void Xdelhere(void), Xpopredir(void), Xsub(void), Xeflag(void), Xsettrue(void);
- extern void Xerror(char*);
- extern void Xerror1(char*);
- /*
- * word lists are in correct order,
- * i.e. word0->word1->word2->word3->0
- */
- struct word{
- char *word;
- word *next;
- };
- struct list{
- word *words;
- list *next;
- };
- word *newword(char *, word *), *copywords(word *, word *);
- struct redir{
- char type; /* what to do */
- short from, to; /* what to do it to */
- struct redir *next; /* what else to do (reverse order) */
- };
- #define NSTATUS ERRMAX /* length of status (from plan 9) */
- /*
- * redir types
- */
- #define ROPEN 1 /* dup2(from, to); close(from); */
- #define RDUP 2 /* dup2(from, to); */
- #define RCLOSE 3 /* close(from); */
- struct thread{
- union code *code; /* code for this thread */
- int pc; /* code[pc] is the next instruction */
- struct list *argv; /* argument stack */
- struct redir *redir; /* redirection stack */
- struct redir *startredir; /* redir inheritance point */
- struct var *local; /* list of local variables */
- char *cmdfile; /* file name in Xrdcmd */
- struct io *cmdfd; /* file descriptor for Xrdcmd */
- int iflast; /* static `if not' checking */
- int eof; /* is cmdfd at eof? */
- int iflag; /* interactive? */
- int lineno; /* linenumber */
- int pid; /* process for Xpipewait to wait for */
- char status[NSTATUS]; /* status for Xpipewait */
- tree *treenodes; /* tree nodes created by this process */
- thread *ret; /* who continues when this finishes */
- };
- thread *runq;
- code *codecopy(code*);
- code *codebuf; /* compiler output */
- int ntrap; /* number of outstanding traps */
- int trap[NSIG]; /* number of outstanding traps per type */
- struct builtin{
- char *name;
- void (*fnc)(void);
- };
- extern struct builtin Builtin[];
- int eflagok; /* kludge flag so that -e doesn't exit in startup */
- int havefork;
- void execcd(void), execwhatis(void), execeval(void), execexec(void);
- int execforkexec(void);
- void execexit(void), execshift(void);
- void execwait(void), execumask(void), execdot(void), execflag(void);
- void execfunc(var*), execcmds(io *);
|