]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/rc/rc.h
disk/format: implement long name support
[plan9front.git] / sys / src / cmd / rc / rc.h
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
68 int newwdir;
69 char *promptstr;
70 int doprompt;
71
72 #define NTOK    8192
73
74 char tok[NTOK];
75
76 #define APPEND  1
77 #define WRITE   2
78 #define READ    3
79 #define HERE    4
80 #define DUPFD   5
81 #define CLOSE   6
82 #define RDWR    7
83
84 struct var{
85         char    *name;          /* ascii name */
86         word    *val;           /* value */
87         int     changed;
88         code    *fn;            /* pointer to function's code vector */
89         int     fnchanged;
90         int     pc;             /* pc of start of function */
91         var     *next;          /* next on hash or local list */
92 };
93 var *vlook(char*), *gvlook(char*), *newvar(char*, var*);
94
95 #define NVAR    521
96
97 var *gvar[NVAR];                                /* hash for globals */
98
99 #define new(type)       ((type *)emalloc(sizeof(type)))
100
101 void *emalloc(long);
102 void *erealloc(void *, long);
103 char *estrdup(char*);
104
105 #define NOFILE  128             /* should come from <param.h> */
106
107 struct here{
108         tree    *tag;
109         char    *name;
110         struct here *next;
111 };
112 int mypid;
113
114 /*
115  * Glob character escape in strings:
116  *      In a string, GLOB must be followed by *?[ or GLOB.
117  *      GLOB* matches any string
118  *      GLOB? matches any single character
119  *      GLOB[...] matches anything in the brackets
120  *      GLOBGLOB matches GLOB
121  */
122 #define GLOB    ((char)0x01)
123 /*
124  * onebyte(c)
125  * Is c the first character of a one-byte utf sequence?
126  */
127 #define onebyte(c)      ((c&0x80)==0x00)
128
129 char **argp;
130 char **args;
131 int nerror;             /* number of errors encountered during compilation */
132 int doprompt;           /* is it time for a prompt? */
133 /*
134  * Which fds are the reading/writing end of a pipe?
135  * Unfortunately, this can vary from system to system.
136  * 9th edition Unix doesn't care, the following defines
137  * work on plan 9.
138  */
139 #define PRD     0
140 #define PWR     1
141 char Rcmain[], Fdprefix[];
142 /*
143  * How many dot commands have we executed?
144  * Used to ensure that -v flag doesn't print rcmain.
145  */
146 int ndot;
147 char *getstatus(void);
148 int lastc;
149 int lastword;