exec.h (2828B)
1 /* 2 * Definitions used in the interpreter 3 */ 4 extern void Xappend(void), Xasync(void), Xbackq(void), Xbang(void), Xclose(void); 5 extern void Xconc(void), Xcount(void), Xdelfn(void), Xdol(void), Xqdol(void), Xdup(void); 6 extern void Xexit(void), Xfalse(void), Xfn(void), Xfor(void), Xglob(void); 7 extern void Xjump(void), Xmark(void), Xmatch(void), Xpipe(void), Xread(void); 8 extern void Xrdwr(void); 9 extern void Xrdfn(void), Xunredir(void), Xstar(void), Xreturn(void), Xsubshell(void); 10 extern void Xtrue(void), Xword(void), Xwrite(void), Xpipefd(void), Xcase(void); 11 extern void Xlocal(void), Xunlocal(void), Xassign(void), Xsimple(void), Xpopm(void); 12 extern void Xrdcmds(void), Xwastrue(void), Xif(void), Xifnot(void), Xpipewait(void); 13 extern void Xdelhere(void), Xpopredir(void), Xsub(void), Xeflag(void), Xsettrue(void); 14 extern void Xerror(char*); 15 extern void Xerror1(char*); 16 /* 17 * word lists are in correct order, 18 * i.e. word0->word1->word2->word3->0 19 */ 20 struct word{ 21 char *word; 22 word *next; 23 }; 24 struct list{ 25 word *words; 26 list *next; 27 }; 28 word *newword(char *, word *), *copywords(word *, word *); 29 struct redir{ 30 char type; /* what to do */ 31 short from, to; /* what to do it to */ 32 struct redir *next; /* what else to do (reverse order) */ 33 }; 34 #define NSTATUS ERRMAX /* length of status (from plan 9) */ 35 /* 36 * redir types 37 */ 38 #define ROPEN 1 /* dup2(from, to); close(from); */ 39 #define RDUP 2 /* dup2(from, to); */ 40 #define RCLOSE 3 /* close(from); */ 41 struct thread{ 42 union code *code; /* code for this thread */ 43 int pc; /* code[pc] is the next instruction */ 44 struct list *argv; /* argument stack */ 45 struct redir *redir; /* redirection stack */ 46 struct redir *startredir; /* redir inheritance point */ 47 struct var *local; /* list of local variables */ 48 char *cmdfile; /* file name in Xrdcmd */ 49 struct io *cmdfd; /* file descriptor for Xrdcmd */ 50 int iflast; /* static `if not' checking */ 51 int eof; /* is cmdfd at eof? */ 52 int iflag; /* interactive? */ 53 int lineno; /* linenumber */ 54 int pid; /* process for Xpipewait to wait for */ 55 char status[NSTATUS]; /* status for Xpipewait */ 56 tree *treenodes; /* tree nodes created by this process */ 57 thread *ret; /* who continues when this finishes */ 58 }; 59 thread *runq; 60 code *codecopy(code*); 61 code *codebuf; /* compiler output */ 62 int ntrap; /* number of outstanding traps */ 63 int trap[NSIG]; /* number of outstanding traps per type */ 64 struct builtin{ 65 char *name; 66 void (*fnc)(void); 67 }; 68 extern struct builtin Builtin[]; 69 int eflagok; /* kludge flag so that -e doesn't exit in startup */ 70 int havefork; 71 72 void execcd(void), execwhatis(void), execeval(void), execexec(void); 73 int execforkexec(void); 74 void execexit(void), execshift(void); 75 void execwait(void), execumask(void), execdot(void), execflag(void); 76 void execfunc(var*), execcmds(io *);