rc.h (3645B)
1 /* 2 * Plan9 is defined for plan 9 3 * V9 is defined for 9th edition 4 * Sun is defined for sun-os 5 * Please don't litter the code with ifdefs. The three below (and one in 6 * getflags) should be enough. 7 */ 8 #define Plan9 9 #ifdef Plan9 10 #include <u.h> 11 #include <libc.h> 12 #undef NSIG 13 #undef SIGINT 14 #undef SIGQUIT 15 #define NSIG 32 16 #define SIGINT 2 17 #define SIGQUIT 3 18 #endif 19 #ifdef V9 20 #include <signal.h> 21 #include <libc.h> 22 #endif 23 #ifdef Sun 24 #include <signal.h> 25 #endif 26 #define YYMAXDEPTH 500 27 #ifndef PAREN 28 #ifndef YYMAJOR 29 #include "x.tab.h" 30 #endif 31 #endif 32 33 #undef pipe /* so that /dev/fd works */ 34 #define searchpath rcsearchpath /* avoid new libc function */ 35 36 /* some systems define a global "var", "thread" */ 37 #undef var 38 #define var rcvar 39 #undef thread 40 #define thread rcthread 41 42 typedef struct tree tree; 43 typedef struct word word; 44 typedef struct io io; 45 typedef union code code; 46 typedef struct var var; 47 typedef struct list list; 48 typedef struct redir redir; 49 typedef struct thread thread; 50 typedef struct builtin builtin; 51 52 struct tree{ 53 int type; 54 int rtype, fd0, fd1; /* details of REDIR PIPE DUP tokens */ 55 char *str; 56 int quoted; 57 int iskw; 58 tree *child[3]; 59 tree *next; 60 }; 61 tree *newtree(void); 62 tree *token(char*, int), *klook(char*), *tree1(int, tree*); 63 tree *tree2(int, tree*, tree*), *tree3(int, tree*, tree*, tree*); 64 tree *mung1(tree*, tree*), *mung2(tree*, tree*, tree*); 65 tree *mung3(tree*, tree*, tree*, tree*), *epimung(tree*, tree*); 66 tree *simplemung(tree*), *heredoc(tree*); 67 void freetree(tree*); 68 tree *cmdtree; 69 /* 70 * The first word of any code vector is a reference count. 71 * Always create a new reference to a code vector by calling codecopy(.). 72 * Always call codefree(.) when deleting a reference. 73 */ 74 union code{ 75 void (*f)(void); 76 int i; 77 char *s; 78 }; 79 char *promptstr; 80 #define NTOK 8192 81 char tok[NTOK]; 82 #define APPEND 1 83 #define WRITE 2 84 #define READ 3 85 #define HERE 4 86 #define DUPFD 5 87 #define CLOSE 6 88 #define RDWR 7 89 struct var{ 90 char *name; /* ascii name */ 91 word *val; /* value */ 92 int changed; 93 code *fn; /* pointer to function's code vector */ 94 int fnchanged; 95 int pc; /* pc of start of function */ 96 var *next; /* next on hash or local list */ 97 void (*changefn)(var*); 98 }; 99 var *vlook(char*), *gvlook(char*), *newvar(char*, var*); 100 #define NVAR 521 101 var *gvar[NVAR]; /* hash for globals */ 102 #define new(type) ((type *)emalloc(sizeof(type))) 103 char *emalloc(long); 104 void *Malloc(ulong); 105 void efree(char*); 106 #define NOFILE 128 /* should come from <param.h> */ 107 struct here{ 108 tree *tag; 109 char *name; 110 struct here *next; 111 }; 112 int mypid; 113 /* 114 * Glob character escape in strings: 115 * In a string, GLOB must be followed by *?[ or GLOB. 116 * GLOB* matches any string 117 * GLOB? matches any single character 118 * GLOB[...] matches anything in the brackets 119 * GLOBGLOB matches GLOB 120 */ 121 #define GLOB ((char)0x01) 122 /* 123 * onebyte(c), twobyte(c), threebyte(c) 124 * Is c the first character of a one- two- or three-byte utf sequence? 125 */ 126 #define onebyte(c) ((c&0x80)==0x00) 127 #define twobyte(c) ((c&0xe0)==0xc0) 128 #define threebyte(c) ((c&0xf0)==0xe0) 129 #define fourbyte(c) ((c&0xf8)==0xf0) 130 131 char **argp; 132 char **args; 133 int nerror; /* number of errors encountered during compilation */ 134 extern int doprompt; /* is it time for a prompt? */ 135 /* 136 * Which fds are the reading/writing end of a pipe? 137 * Unfortunately, this can vary from system to system. 138 * 9th edition Unix doesn't care, the following defines 139 * work on plan 9. 140 */ 141 #define PRD 0 142 #define PWR 1 143 extern char *Rcmain(), Fdprefix[]; 144 #define register 145 /* 146 * How many dot commands have we executed? 147 * Used to ensure that -v flag doesn't print rcmain. 148 */ 149 int ndot; 150 char *getstatus(void); 151 int lastc; 152 int lastword; 153 int kidpid;