]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/acid/acid.h
acid: fixed $terminal handling
[plan9front.git] / sys / src / cmd / acid / acid.h
1 /* acid.h */
2 enum
3 {
4         Eof             = -1,
5         Strsize         = 4096,
6         Hashsize        = 128,
7         Maxarg          = 512,
8         NFD             = 100,
9         Maxproc         = 50,
10         Maxval          = 10,
11         Mempergc        = 1024*1024,
12 };
13
14 #pragma varargck type "L"       void
15
16 typedef struct Node     Node;
17 typedef struct String   String;
18 typedef struct Lsym     Lsym;
19 typedef struct List     List;
20 typedef struct Store    Store;
21 typedef struct Gc       Gc;
22 typedef struct Strc     Strc;
23 typedef struct Rplace   Rplace;
24 typedef struct Ptab     Ptab;
25 typedef struct Value    Value;
26 typedef struct Type     Type;
27 typedef struct Frtype   Frtype;
28
29 Extern int      kernel;
30 Extern int      remote;
31 Extern int      text;
32 Extern int      silent;
33 Extern Fhdr     fhdr;
34 Extern int      line;
35 Extern Biobuf*  bout;
36 Extern Biobuf*  io[32];
37 Extern int      iop;
38 Extern char     symbol[Strsize];
39 Extern int      interactive;
40 Extern int      na;
41 Extern int      wtflag;
42 Extern Map*     cormap;
43 Extern Map*     symmap;
44 Extern Lsym*    hash[Hashsize];
45 Extern long     dogc;
46 Extern Rplace*  ret;
47 Extern char*    aout;
48 Extern int      gotint;
49 Extern Gc*      gcl;
50 Extern int      stacked;
51 Extern jmp_buf  err;
52 Extern Node*    prnt;
53 Extern List*    tracelist;
54 Extern int      initialising;
55 Extern int      quiet;
56
57 extern void     (*expop[])(Node*, Node*);
58 #define expr(n, r) (r)->comt=0; (*expop[(n)->op])(n, r);
59 extern int      fmtsize(Value *v) ;
60
61 enum
62 {
63         TINT,
64         TFLOAT,
65         TSTRING,
66         TLIST,
67         TCODE,
68 };
69
70 struct Type
71 {
72         Type*   next;
73         int     offset;
74         char    fmt;
75         char    depth;
76         Lsym*   type;
77         Lsym*   tag;
78         Lsym*   base;
79 };
80
81 struct Frtype
82 {
83         Lsym*   var;
84         Type*   type;
85         Frtype* next;
86 };
87
88 struct Ptab
89 {
90         int     pid;
91         int     ctl;
92 };
93 Extern Ptab     ptab[Maxproc];
94
95 struct Rplace
96 {
97         jmp_buf rlab;
98         Node*   stak;
99         Node*   val;
100         Lsym*   local;
101         Lsym**  tail;
102 };
103
104 struct Gc
105 {
106         char    gcmark;
107         Gc*     gclink;
108 };
109
110 struct Store
111 {
112         char    fmt;
113         Type*   comt;
114         union {
115                 vlong   ival;
116                 double  fval;
117                 String* string;
118                 List*   l;
119                 Node*   cc;
120         };
121 };
122
123 struct List
124 {
125         Gc;
126         List*   next;
127         char    type;
128         Store;
129 };
130
131 struct Value
132 {
133         char    set;
134         char    type;
135         Store;
136         Value*  pop;
137         Lsym*   scope;
138         Rplace* ret;
139 };
140
141 struct Lsym
142 {
143         char*   name;
144         int     lexval;
145         Lsym*   hash;
146         Value*  v;
147         Type*   lt;
148         Node*   proc;
149         Frtype* local;
150         void    (*builtin)(Node*, Node*);
151 };
152
153 struct Node
154 {
155         Gc;
156         char    op;
157         char    type;
158         Node*   left;
159         Node*   right;
160         Lsym*   sym;
161         int     builtin;
162         Store;
163 };
164 #define ZN      (Node*)0
165
166 struct String
167 {
168         Gc;
169         char    *string;
170         int     len;
171 };
172
173 List*   addlist(List*, List*);
174 List*   al(int);
175 Node*   an(int, Node*, Node*);
176 void    append(Node*, Node*, Node*);
177 int     bool(Node*);
178 void    build(Node*);
179 void    call(char*, Node*, Node*, Node*, Node*);
180 void    catcher(void*, char*);
181 void    checkqid(int, int);
182 void    cmd(void);
183 Node*   con(vlong);
184 List*   construct(Node*);
185 void    ctrace(int);
186 void    decl(Node*);
187 void    defcomplex(Node*, Node*);
188 void    deinstall(int);
189 void    delete(List*, int n, Node*);
190 void    dostop(int);
191 Lsym*   enter(char*, int);
192 void    error(char*, ...);
193 void    execute(Node*);
194 void    fatal(char*, ...);
195 void    flatten(Node**, Node*);
196 void    gc(void);
197 char*   getstatus(int);
198 void*   gmalloc(long);
199 void    indir(Map*, uvlong, char, Node*);
200 void    installbuiltin(void);
201 void    kinit(void);
202 int     Lfmt(Fmt*);
203 int     listcmp(List*, List*);
204 int     listlen(List*);
205 List*   listvar(char*, vlong);
206 void    loadmodule(char*);
207 void    loadvars(void);
208 Lsym*   look(char*);
209 void    ltag(char*);
210 void    marklist(List*);
211 Lsym*   mkvar(char*);
212 void    msg(int, char*);
213 void    notes(int);
214 int     nproc(char**);
215 void    nthelem(List*, int, Node*);
216 int     numsym(char);
217 void    odot(Node*, Node*);
218 void    pcode(Node*, int);
219 void    pexpr(Node*);
220 int     popio(void);
221 void    pstr(String*);
222 void    pushfile(char*);
223 void    pushstr(Node*);
224 void    readtext(char*);
225 void    restartio(void);
226 uvlong  rget(Map*, char*);
227 String  *runenode(Rune*);
228 int     scmp(String*, String*);
229 void    sproc(int);
230 String* stradd(String*, String*);
231 String* straddrune(String*, Rune);
232 String* strnode(char*);
233 String* strnodlen(char*, int);
234 char*   system(void);
235 void    trlist(Map*, uvlong, uvlong, Symbol*);
236 void    unwind(void);
237 void    userinit(void);
238 void    varreg(void);
239 void    varsym(void);
240 Waitmsg*        waitfor(int);
241 void    whatis(Lsym*);
242 void    windir(Map*, Node*, Node*, Node*);
243 void    yyerror(char*, ...);
244 int     yylex(void);
245 int     yyparse(void);
246
247 enum
248 {
249         ONAME,
250         OCONST,
251         OMUL,
252         ODIV,
253         OMOD,
254         OADD,
255         OSUB,
256         ORSH,
257         OLSH,
258         OLT,
259         OGT,
260         OLEQ,
261         OGEQ,
262         OEQ,
263         ONEQ,
264         OLAND,
265         OXOR,
266         OLOR,
267         OCAND,
268         OCOR,
269         OASGN,
270         OINDM,
271         OEDEC,
272         OEINC,
273         OPINC,
274         OPDEC,
275         ONOT,
276         OIF,
277         ODO,
278         OLIST,
279         OCALL,
280         OCTRUCT,
281         OWHILE,
282         OELSE,
283         OHEAD,
284         OTAIL,
285         OAPPEND,
286         ORET,
287         OINDEX,
288         OINDC,
289         ODOT,
290         OLOCAL,
291         OFRAME,
292         OCOMPLEX,
293         ODELETE,
294         OCAST,
295         OFMT,
296         OEVAL,
297         OWHAT,
298 };