exec.h - 9base - revived minimalist port of Plan 9 userland to Unix
 (HTM) git clone git://git.suckless.org/9base
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       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 *);