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