diff options
| author | tim <tim> | 1997-05-14 15:30:41 +0000 |
|---|---|---|
| committer | Toby Goodwin <toby@paccrat.org> | 2015-05-16 21:23:00 +0100 |
| commit | 53cf1b1c1c3f0c2b5067afccc2976b99a574a089 (patch) | |
| tree | a31f167c3779362e29ab377d662052b6257253a8 /rc.h | |
| parent | b87bfedf65c289bf0ee5338c9e10492b70b1e8e0 (diff) | |
Initial revision
Diffstat (limited to 'rc.h')
| -rw-r--r-- | rc.h | 406 |
1 files changed, 0 insertions, 406 deletions
@@ -1,406 +0,0 @@ -#include "config.h" - -#if HAVE_SYS_TYPES_H -#include <sys/types.h> -#endif - -#if HAVE_UNISTD_H -#include <unistd.h> -#endif - -#include "proto.h" - -/* datatypes */ - -/* braindamaged IBM header files #define true and false */ -#undef FALSE -#undef TRUE - -#include <stdarg.h> - -#if HAVE_SETPGRP - -#if SETPGRP_VOID -/* Smells like POSIX: should all be ok. */ -#else -/* BSD: fake it. */ -#define setpgid(pid, pgrp) setpgrp(pid, pgrp) -#define tcsetpgrp(fd, pgrp) ioctl((fd), TIOCSPGRP, &(pgrp)) -#endif - -#else /* HAVE_SETPGRP */ - -/* Nothing doing. */ -#define setpgid -#define tcsetpgrp - -#endif /*HAVE_SETPGRP */ - -typedef void builtin_t(char **); -typedef struct Block Block; -typedef struct Dup Dup; -typedef struct Estack Estack; -typedef struct Function Function; -typedef struct Hq Hq; -typedef struct Htab Htab; -typedef struct Jbwrap Jbwrap; -typedef struct List List; -typedef struct Node Node; -typedef struct Pipe Pipe; -typedef struct Redir Redir; -typedef struct Rq Rq; -typedef struct Variable Variable; -typedef struct Word Word; -typedef struct Format Format; -typedef union Edata Edata; - -typedef enum nodetype { - nAndalso, nAssign, nBackq, nBang, nBody, nCbody, nNowait, nBrace, nConcat, - nCount, nElse, nFlat, nDup, nEpilog, nNewfn, nForin, nIf, nQword, - nOrelse, nPipe, nPre, nRedir, nRmfn, nArgs, nSubshell, nCase, - nSwitch, nMatch, nVar, nVarsub, nWhile, nWord, nLappend, nNmpipe -} nodetype; - -typedef enum ecodes { - eError, eBreak, eReturn, eVarstack, eArena, eFifo, eFd -} ecodes; - -typedef enum bool { - FALSE, TRUE -} bool; - -typedef enum inputtype { - iFd, iString -} inputtype; - -typedef enum redirtype { - rFrom, rCreate, rAppend, rHeredoc, rHerestring -} redirtype; - -typedef bool (*Conv)(Format *, int); - -union Edata { - Jbwrap *jb; - Block *b; - char *name; - int fd; -}; - -struct Estack { - ecodes e; - bool interactive; - Edata data; - Estack *prev; -}; - -struct List { - char *w, *m; - List *n; -}; - -struct Node { - nodetype type; - union { - char *s; - int i; - Node *p; - } u[4]; -}; - -struct Pipe { - int left, right; -}; - -struct Dup { - redirtype type; - int left, right; -}; - -struct Redir { - redirtype type; - int fd; -}; - -struct Word { - char *w, *m; -}; - -struct Rq { - Node *r; - struct Rq *n; -}; - -struct Function { - Node *def; - char *extdef; -}; - -struct Variable { - List *def; - char *extdef; - Variable *n; -}; - -struct Htab { - char *name; - void *p; -}; - -struct Format { - /* for the formatting routines */ - va_list args; - long flags, f1, f2; - /* for the buffer maintainence routines */ - char *buf, *bufbegin, *bufend; - int flushed; - void (*grow)(Format *, size_t); - union { int n; void *p; } u; -}; - -/* Format->flags values */ -enum { - FMT_quad = 1, /* %q */ - FMT_long = 2, /* %l */ - FMT_short = 4, /* %h */ - FMT_unsigned = 8, /* %u */ - FMT_zeropad = 16, /* %0 */ - FMT_leftside = 32, /* %- */ - FMT_altform = 64, /* %# */ - FMT_f1set = 128, /* %<n> */ - FMT_f2set = 256 /* %.<n> */ -}; - -/* macros */ -#define EOF (-1) -#ifndef NULL -#define NULL 0 -#endif -#define a2u(x) n2u(x, 10) -#define o2u(x) n2u(x, 8) -#define arraysize(a) ((int)(sizeof(a)/sizeof(*a))) -#define memzero(s, n) memset(s, 0, n) -#define enew(x) ((x *) ealloc(sizeof(x))) -#define ecpy(x) strcpy((char *) ealloc(strlen(x) + 1), x) -#define lookup_fn(s) ((Function *) lookup(s, fp)) -#define lookup_var(s) ((Variable *) lookup(s, vp)) -#define nnew(x) ((x *) nalloc(sizeof(x))) -#define ncpy(x) (strcpy((char *) nalloc(strlen(x) + 1), x)) -#ifndef offsetof -#define offsetof(t, m) ((size_t) (((char *) &((t *) 0)->m) - (char *)0)) -#endif -#define streq(x, y) (*(x) == *(y) && strcmp(x, y) == 0) -#define conststrlen(x) (sizeof (x) - 1) - -/* rc prototypes */ - -/* main.c */ -extern char *prompt, *prompt2; -extern Rq *redirq; -extern bool dashdee, dashee, dashvee, dashex, dashell, - dasheye, dashen, dashpee, interactive; -extern pid_t rc_pid; -extern int lineno; - -/* builtins.c */ -extern builtin_t *isbuiltin(char *); -extern void b_exec(char **), funcall(char **), b_dot(char **), b_builtin(char **); -extern char *which(char *, bool); - -/* except.c */ -extern bool nl_on_intr; -extern bool outstanding_cmdarg(void); -extern void pop_cmdarg(bool); -extern void rc_raise(ecodes); -extern void except(ecodes, Edata, Estack *); -extern void unexcept(void); -extern void rc_error(char *); -extern void sigint(int); - -/* exec.c */ -extern void exec(List *, bool); -extern void doredirs(void); - -/* footobar.c */ -extern char **list2array(List *, bool); -extern char *get_name(char *); -extern List *parse_var(char *, char *); -extern Node *parse_fn(char *, char *); -extern void initprint(void); -extern void rc_exit(int); /* here for odd reasons; user-defined signal handlers are kept in fn.c */ - -/* getopt.c */ -extern int rc_getopt(int, char **, char *); - -extern int rc_optind, rc_opterr, rc_optopt; -extern char *rc_optarg; - -/* glob.c */ -extern bool lmatch(List *, List *); -extern List *glob(List *); - -/* glom.c */ -extern void assign(List *, List *, bool); -extern void qredir(Node *); -extern List *append(List *, List*); -extern List *flatten(List *); -extern List *glom(Node *); -extern List *concat(List *, List *); -extern List *varsub(List *, List *); -extern List *word(char *, char *); - -/* hash.c */ -extern Htab *fp, *vp; -extern void *lookup(char *, Htab *); -extern Function *get_fn_place(char *); -extern List *varlookup(char *); -extern Node *fnlookup(char *); -extern Variable *get_var_place(char *, bool); -extern bool varassign_string(char *); -extern char **makeenv(void); -extern char *fnlookup_string(char *); -extern char *varlookup_string(char *); -extern void alias(char *, List *, bool); -extern void starassign(char *, char **, bool); -extern void delete_fn(char *); -extern void delete_var(char *, bool); -extern void fnassign(char *, Node *); -extern void fnassign_string(char *); -extern void fnrm(char *); -extern void initenv(char **); -extern void inithash(void); -extern void setsigdefaults(bool); -extern void inithandler(void); -extern void varassign(char *, List *, bool); -extern void varrm(char *, bool); -extern void whatare_all_vars(bool, bool); -extern void whatare_all_signals(void); -extern void prettyprint_var(int, char *, List *); -extern void prettyprint_fn(int, char *, Node *); - -/* heredoc.c */ -extern int heredoc(int); -extern int qdoc(Node *, Node *); -extern Hq *hq; - -/* input.c */ -extern void initinput(void); -extern Node *parseline(char *); -extern int gchar(void); -extern void ugchar(int); -extern Node *doit(bool); -extern void flushu(void); -extern void pushfd(int); -extern void pushstring(char **, bool); -extern void popinput(void); -extern void closefds(void); -extern int last; -extern bool rcrc; - -/* lex.c */ -extern int yylex(void); -extern void inityy(void); -extern void yyerror(const char *); -extern void scanerror(char *); -extern void print_prompt2(void); -extern const char nw[], dnw[]; - -/* list.c */ -extern void listfree(List *); -extern List *listcpy(List *, void *(*)(size_t)); -extern size_t listlen(List *); -extern int listnel(List *); - -/* match.c */ -extern bool match(char *, char *, char *); - -/* alloc.c */ -extern void *ealloc(size_t); -extern void *erealloc(void *, size_t); -extern void efree(void *); -extern Block *newblock(void); -extern void *nalloc(size_t); -extern void nfree(void); -extern void restoreblock(Block *); - -/* open.c */ -extern int rc_open(const char *, redirtype); - -/* print.c */ -/* - The following prototype should be: -extern Conv fmtinstall(int, Conv); - but this freaks out SGI's compiler under IRIX3.3.2 -*/ -extern bool (*fmtinstall(int, bool (*)(Format *, int)))(Format *, int); -extern int printfmt(Format *, const char *); -extern int fmtprint(Format *, const char *,...); -extern void fmtappend(Format *, const char *, size_t); -extern void fmtcat(Format *, const char *); -extern int fprint(int fd, const char *fmt,...); -extern char *mprint(const char *fmt,...); -extern char *nprint(const char *fmt,...); -/* - the following macro should by rights be coded as an expression, not - a statement, but certain compilers (notably DEC) have trouble with - void expressions inside the ?: operator. (sheesh, give me a break!) -*/ -#define fmtputc(f, c) {\ - if ((f)->buf >= (f)->bufend)\ - (*(f)->grow)((f), (size_t)1);\ - *(f)->buf++ = (c);\ -} - -/* y.tab.c (parse.y) */ -extern Node *parsetree; -extern int yyparse(void); -extern void initparse(void); - -/* redir.c */ -extern void doredirs(void); - -/* signal.c */ -extern void initsignal(void); -extern void catcher(int); -extern void sigchk(void); -extern void (*rc_signal(int, void (*)(int)))(int); -extern void (*sighandlers[])(int); -extern volatile SIG_ATOMIC_T slow, interrupt_happened; - -/* status.c */ -extern int istrue(void); -extern int getstatus(void); -extern void set(bool); -extern void setstatus(pid_t, int); -extern List *sgetstatus(void); -extern void setpipestatus(int [], int); -extern void statprint(pid_t, int); -extern void ssetstatus(char **); -extern char *strstatus(int s); - -/* tree.c */ -extern Node *mk(int /*nodetype*/,...); -extern Node *treecpy(Node *, void *(*)(size_t)); -extern void treefree(Node *); - -/* utils.c */ -extern bool isabsolute(char *); -extern int n2u(char *, unsigned int); -extern int rc_read(int, char *, size_t); -extern int mvfd(int, int); -extern int starstrcmp(const void *, const void *); -extern void pr_error(char *); -extern void panic(char *); -extern void uerror(char *); -extern void writeall(int, char *, size_t); - -/* wait.c */ -extern pid_t rc_fork(void); -extern pid_t rc_wait4(pid_t, int *, bool); -extern List *sgetapids(void); -extern void waitforall(void); -extern bool forked; - -/* walk.c */ -extern bool walk(Node *, bool); -extern bool cond; - |