|
|
1.1 ! root 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 Xrdfn(void), Xunredir(void), Xstar(void), Xreturn(void), Xsubshell(void); ! 9: extern void Xtrue(void), Xword(void), Xwrite(void), Xpipefd(void), Xcase(void); ! 10: extern void Xlocal(void), Xunlocal(void), Xassign(void), Xsimple(void), Xpopm(void); ! 11: extern void Xrdcmds(void), Xwastrue(void), Xif(void), Xifnot(void), Xpipewait(void); ! 12: extern void Xdelhere(void), Xpopredir(void), Xsub(void), Xeflag(void), Xsettrue(); ! 13: extern void Xerror(char*), Xperror(char*); ! 14: /* ! 15: * word lists are in correct order, ! 16: * i.e. word0->word1->word2->word3->0 ! 17: */ ! 18: struct word{ ! 19: char *word; ! 20: word *next; ! 21: }; ! 22: struct list{ ! 23: word *words; ! 24: list *next; ! 25: }; ! 26: word *newword(char *, word *), *copywords(word *, word *); ! 27: struct redir{ ! 28: char type; /* what to do */ ! 29: short from, to; /* what to do it to */ ! 30: struct redir *next; /* what else to do (reverse order) */ ! 31: }; ! 32: #define NSTATUS 64 /* length of status (from plan 9) */ ! 33: /* ! 34: * redir types ! 35: */ ! 36: #define ROPEN 1 /* dup2(from, to); close(from); */ ! 37: #define RDUP 2 /* dup2(from, to); */ ! 38: #define RCLOSE 3 /* close(from); */ ! 39: struct thread{ ! 40: union code *code; /* code for this thread */ ! 41: int pc; /* code[pc] is the next instruction */ ! 42: struct list *argv; /* argument stack */ ! 43: struct redir *redir; /* redirection stack */ ! 44: struct redir *startredir; /* redir inheritance point */ ! 45: struct var *local; /* list of local variables */ ! 46: char *cmdfile; /* file name in Xrdcmd */ ! 47: struct io *cmdfd; /* file descriptor for Xrdcmd */ ! 48: int iflast; /* static `if not' checking */ ! 49: int eof; /* is cmdfd at eof? */ ! 50: int iflag; /* interactive? */ ! 51: int lineno; /* linenumber */ ! 52: int pid; /* process for Xpipewait to wait for */ ! 53: char status[NSTATUS]; /* status for Xpipewait */ ! 54: tree *treenodes; /* tree nodes created by this process */ ! 55: thread *ret; /* who continues when this finishes */ ! 56: }; ! 57: thread *runq; ! 58: code *codecopy(code*); ! 59: code *codebuf; /* compiler output */ ! 60: int ntrap; /* number of outstanding traps */ ! 61: int trap[NSIG]; /* number of outstanding traps per type */ ! 62: struct builtin{ ! 63: char *name; ! 64: void (*fnc)(void); ! 65: }Builtin[]; ! 66: int eflagok; /* kludge flag so that -e doesn't exit in startup */ ! 67: void execcd(void), execwhatis(void), execeval(void), execexec(void); ! 68: void execexit(void), execshift(void); ! 69: void execwait(void), execumask(void), execdot(void), execflag(void); ! 70: void execfunc(var*), execcmds(io *);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.