Blame


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