xref: /plan9/sys/src/cmd/acid/acid.h (revision 7c70c028d2d46a27a61ae88e6df0eb0935d9da7a)
1bd389b36SDavid du Colombier /* acid.h */
2bd389b36SDavid du Colombier enum
3bd389b36SDavid du Colombier {
4bd389b36SDavid du Colombier 	Eof		= -1,
5219b2ee8SDavid du Colombier 	Strsize		= 4096,
6bd389b36SDavid du Colombier 	Hashsize	= 128,
7219b2ee8SDavid du Colombier 	Maxarg		= 512,
8bd389b36SDavid du Colombier 	NFD		= 100,
9bd389b36SDavid du Colombier 	Maxproc		= 50,
10bd389b36SDavid du Colombier 	Maxval		= 10,
11219b2ee8SDavid du Colombier 	Mempergc	= 1024*1024,
12bd389b36SDavid du Colombier };
13bd389b36SDavid du Colombier 
147dd7cddfSDavid du Colombier #pragma varargck type "L"	void
157dd7cddfSDavid du Colombier 
16bd389b36SDavid du Colombier typedef struct Node	Node;
17bd389b36SDavid du Colombier typedef struct String	String;
18bd389b36SDavid du Colombier typedef struct Lsym	Lsym;
19bd389b36SDavid du Colombier typedef struct List	List;
20bd389b36SDavid du Colombier typedef struct Store	Store;
21bd389b36SDavid du Colombier typedef struct Gc	Gc;
22bd389b36SDavid du Colombier typedef struct Strc	Strc;
23bd389b36SDavid du Colombier typedef struct Rplace	Rplace;
24bd389b36SDavid du Colombier typedef struct Ptab	Ptab;
25bd389b36SDavid du Colombier typedef struct Value	Value;
26bd389b36SDavid du Colombier typedef struct Type	Type;
27219b2ee8SDavid du Colombier typedef struct Frtype	Frtype;
28bd389b36SDavid du Colombier 
297dd7cddfSDavid du Colombier Extern int	kernel;
30219b2ee8SDavid du Colombier Extern int	remote;
31bd389b36SDavid du Colombier Extern int	text;
32219b2ee8SDavid du Colombier Extern int	silent;
33bd389b36SDavid du Colombier Extern Fhdr	fhdr;
34bd389b36SDavid du Colombier Extern int	line;
35bd389b36SDavid du Colombier Extern Biobuf*	bout;
36219b2ee8SDavid du Colombier Extern Biobuf*	io[32];
37219b2ee8SDavid du Colombier Extern int	iop;
38bd389b36SDavid du Colombier Extern char	symbol[Strsize];
39bd389b36SDavid du Colombier Extern int	interactive;
40bd389b36SDavid du Colombier Extern int	na;
41bd389b36SDavid du Colombier Extern int	wtflag;
42bd389b36SDavid du Colombier Extern Map*	cormap;
43bd389b36SDavid du Colombier Extern Map*	symmap;
44bd389b36SDavid du Colombier Extern Lsym*	hash[Hashsize];
45bd389b36SDavid du Colombier Extern long	dogc;
46bd389b36SDavid du Colombier Extern Rplace*	ret;
47bd389b36SDavid du Colombier Extern char*	aout;
48bd389b36SDavid du Colombier Extern int	gotint;
49bd389b36SDavid du Colombier Extern Gc*	gcl;
50bd389b36SDavid du Colombier Extern int	stacked;
51bd389b36SDavid du Colombier Extern jmp_buf	err;
52219b2ee8SDavid du Colombier Extern Node*	prnt;
53219b2ee8SDavid du Colombier Extern List*	tracelist;
54219b2ee8SDavid du Colombier Extern int	initialising;
55219b2ee8SDavid du Colombier Extern int	quiet;
56*7c70c028SDavid du Colombier 
57219b2ee8SDavid du Colombier extern void	(*expop[])(Node*, Node*);
58219b2ee8SDavid du Colombier #define expr(n, r) (r)->comt=0; (*expop[(n)->op])(n, r);
59*7c70c028SDavid du Colombier extern int	fmtsize(Value *v) ;
60bd389b36SDavid du Colombier 
61bd389b36SDavid du Colombier enum
62bd389b36SDavid du Colombier {
63bd389b36SDavid du Colombier 	TINT,
64bd389b36SDavid du Colombier 	TFLOAT,
65bd389b36SDavid du Colombier 	TSTRING,
66bd389b36SDavid du Colombier 	TLIST,
67219b2ee8SDavid du Colombier 	TCODE,
68bd389b36SDavid du Colombier };
69bd389b36SDavid du Colombier 
70bd389b36SDavid du Colombier struct Type
71bd389b36SDavid du Colombier {
72bd389b36SDavid du Colombier 	Type*	next;
73bd389b36SDavid du Colombier 	int	offset;
74bd389b36SDavid du Colombier 	char	fmt;
75219b2ee8SDavid du Colombier 	char	depth;
76219b2ee8SDavid du Colombier 	Lsym*	type;
77219b2ee8SDavid du Colombier 	Lsym*	tag;
78219b2ee8SDavid du Colombier 	Lsym*	base;
79219b2ee8SDavid du Colombier };
80219b2ee8SDavid du Colombier 
81219b2ee8SDavid du Colombier struct Frtype
82219b2ee8SDavid du Colombier {
83219b2ee8SDavid du Colombier 	Lsym*	var;
84219b2ee8SDavid du Colombier 	Type*	type;
85219b2ee8SDavid du Colombier 	Frtype*	next;
86bd389b36SDavid du Colombier };
87bd389b36SDavid du Colombier 
88bd389b36SDavid du Colombier struct Ptab
89bd389b36SDavid du Colombier {
90bd389b36SDavid du Colombier 	int	pid;
91bd389b36SDavid du Colombier 	int	ctl;
92bd389b36SDavid du Colombier };
93bd389b36SDavid du Colombier Extern Ptab	ptab[Maxproc];
94bd389b36SDavid du Colombier 
95bd389b36SDavid du Colombier struct Rplace
96bd389b36SDavid du Colombier {
97bd389b36SDavid du Colombier 	jmp_buf	rlab;
98219b2ee8SDavid du Colombier 	Node*	stak;
99bd389b36SDavid du Colombier 	Node*	val;
100bd389b36SDavid du Colombier 	Lsym*	local;
101bd389b36SDavid du Colombier 	Lsym**	tail;
102bd389b36SDavid du Colombier };
103bd389b36SDavid du Colombier 
104bd389b36SDavid du Colombier struct Gc
105bd389b36SDavid du Colombier {
106bd389b36SDavid du Colombier 	char	gcmark;
107bd389b36SDavid du Colombier 	Gc*	gclink;
108bd389b36SDavid du Colombier };
109bd389b36SDavid du Colombier 
110bd389b36SDavid du Colombier struct Store
111bd389b36SDavid du Colombier {
112bd389b36SDavid du Colombier 	char	fmt;
113bd389b36SDavid du Colombier 	Type*	comt;
114bd389b36SDavid du Colombier 	union {
1157dd7cddfSDavid du Colombier 		vlong	ival;
116bd389b36SDavid du Colombier 		double	fval;
117bd389b36SDavid du Colombier 		String*	string;
118bd389b36SDavid du Colombier 		List*	l;
119219b2ee8SDavid du Colombier 		Node*	cc;
120bd389b36SDavid du Colombier 	};
121bd389b36SDavid du Colombier };
122bd389b36SDavid du Colombier 
123bd389b36SDavid du Colombier struct List
124bd389b36SDavid du Colombier {
125bd389b36SDavid du Colombier 	Gc;
126bd389b36SDavid du Colombier 	List*	next;
127bd389b36SDavid du Colombier 	char	type;
128bd389b36SDavid du Colombier 	Store;
129bd389b36SDavid du Colombier };
130bd389b36SDavid du Colombier 
131bd389b36SDavid du Colombier struct Value
132bd389b36SDavid du Colombier {
133bd389b36SDavid du Colombier 	char	set;
134bd389b36SDavid du Colombier 	char	type;
135bd389b36SDavid du Colombier 	Store;
136bd389b36SDavid du Colombier 	Value*	pop;
137bd389b36SDavid du Colombier 	Lsym*	scope;
138bd389b36SDavid du Colombier 	Rplace*	ret;
139bd389b36SDavid du Colombier };
140bd389b36SDavid du Colombier 
141bd389b36SDavid du Colombier struct Lsym
142bd389b36SDavid du Colombier {
143bd389b36SDavid du Colombier 	char*	name;
144bd389b36SDavid du Colombier 	int	lexval;
145bd389b36SDavid du Colombier 	Lsym*	hash;
146bd389b36SDavid du Colombier 	Value*	v;
147bd389b36SDavid du Colombier 	Type*	lt;
148bd389b36SDavid du Colombier 	Node*	proc;
149219b2ee8SDavid du Colombier 	Frtype*	local;
150bd389b36SDavid du Colombier 	void	(*builtin)(Node*, Node*);
151bd389b36SDavid du Colombier };
152bd389b36SDavid du Colombier 
153bd389b36SDavid du Colombier struct Node
154bd389b36SDavid du Colombier {
155bd389b36SDavid du Colombier 	Gc;
156bd389b36SDavid du Colombier 	char	op;
157bd389b36SDavid du Colombier 	char	type;
158bd389b36SDavid du Colombier 	Node*	left;
159bd389b36SDavid du Colombier 	Node*	right;
160bd389b36SDavid du Colombier 	Lsym*	sym;
1610b459c2cSDavid du Colombier 	int	builtin;
162bd389b36SDavid du Colombier 	Store;
163bd389b36SDavid du Colombier };
164bd389b36SDavid du Colombier #define ZN	(Node*)0
165bd389b36SDavid du Colombier 
166bd389b36SDavid du Colombier struct String
167bd389b36SDavid du Colombier {
168bd389b36SDavid du Colombier 	Gc;
169bd389b36SDavid du Colombier 	char	*string;
170bd389b36SDavid du Colombier 	int	len;
171bd389b36SDavid du Colombier };
172bd389b36SDavid du Colombier 
173bd389b36SDavid du Colombier List*	addlist(List*, List*);
174bd389b36SDavid du Colombier List*	al(int);
175bd389b36SDavid du Colombier Node*	an(int, Node*, Node*);
176bd389b36SDavid du Colombier void	append(Node*, Node*, Node*);
177bd389b36SDavid du Colombier int	bool(Node*);
178bd389b36SDavid du Colombier void	build(Node*);
179bd389b36SDavid du Colombier void	call(char*, Node*, Node*, Node*, Node*);
180bd389b36SDavid du Colombier void	catcher(void*, char*);
181bd389b36SDavid du Colombier void	checkqid(int, int);
182bd389b36SDavid du Colombier void	cmd(void);
1834de34a7eSDavid du Colombier Node*	con(vlong);
184bd389b36SDavid du Colombier List*	construct(Node*);
185bd389b36SDavid du Colombier void	ctrace(int);
186219b2ee8SDavid du Colombier void	decl(Node*);
187219b2ee8SDavid du Colombier void	defcomplex(Node*, Node*);
188bd389b36SDavid du Colombier void	deinstall(int);
189bd389b36SDavid du Colombier void	delete(List*, int n, Node*);
190bd389b36SDavid du Colombier void	dostop(int);
191bd389b36SDavid du Colombier Lsym*	enter(char*, int);
192bd389b36SDavid du Colombier void	error(char*, ...);
193bd389b36SDavid du Colombier void	execute(Node*);
194bd389b36SDavid du Colombier void	fatal(char*, ...);
195bd389b36SDavid du Colombier void	flatten(Node**, Node*);
196219b2ee8SDavid du Colombier void	gc(void);
197219b2ee8SDavid du Colombier char*	getstatus(int);
198bd389b36SDavid du Colombier void*	gmalloc(long);
1994de34a7eSDavid du Colombier void	indir(Map*, uvlong, char, Node*);
200bd389b36SDavid du Colombier void	installbuiltin(void);
201bd389b36SDavid du Colombier void	kinit(void);
2029a747e4fSDavid du Colombier int	Lfmt(Fmt*);
203bd389b36SDavid du Colombier int	listcmp(List*, List*);
204219b2ee8SDavid du Colombier int	listlen(List*);
2054de34a7eSDavid du Colombier List*	listvar(char*, vlong);
206219b2ee8SDavid du Colombier void	loadmodule(char*);
207219b2ee8SDavid du Colombier void	loadvars(void);
208bd389b36SDavid du Colombier Lsym*	look(char*);
209bd389b36SDavid du Colombier void	ltag(char*);
210219b2ee8SDavid du Colombier void	marklist(List*);
211bd389b36SDavid du Colombier Lsym*	mkvar(char*);
212bd389b36SDavid du Colombier void	msg(int, char*);
213bd389b36SDavid du Colombier void	notes(int);
214bd389b36SDavid du Colombier int	nproc(char**);
215bd389b36SDavid du Colombier void	nthelem(List*, int, Node*);
216bd389b36SDavid du Colombier int	numsym(char);
217219b2ee8SDavid du Colombier void	odot(Node*, Node*);
218bd389b36SDavid du Colombier void	pcode(Node*, int);
219bd389b36SDavid du Colombier void	pexpr(Node*);
220219b2ee8SDavid du Colombier int	popio(void);
221bd389b36SDavid du Colombier void	pstr(String*);
222219b2ee8SDavid du Colombier void	pushfile(char*);
223219b2ee8SDavid du Colombier void	pushstr(Node*);
224bd389b36SDavid du Colombier void	readtext(char*);
225219b2ee8SDavid du Colombier void	restartio(void);
2264de34a7eSDavid du Colombier uvlong	rget(Map*, char*);
227219b2ee8SDavid du Colombier String	*runenode(Rune*);
228bd389b36SDavid du Colombier int	scmp(String*, String*);
229bd389b36SDavid du Colombier void	sproc(int);
230bd389b36SDavid du Colombier String*	stradd(String*, String*);
231ab3dc52fSDavid du Colombier String*	straddrune(String*, Rune);
232bd389b36SDavid du Colombier String*	strnode(char*);
233219b2ee8SDavid du Colombier String*	strnodlen(char*, int);
2347dd7cddfSDavid du Colombier char*	system(void);
2354de34a7eSDavid du Colombier void	trlist(Map*, uvlong, uvlong, Symbol*);
236bd389b36SDavid du Colombier void	unwind(void);
237219b2ee8SDavid du Colombier void	userinit(void);
238bd389b36SDavid du Colombier void	varreg(void);
239bd389b36SDavid du Colombier void	varsym(void);
2409a747e4fSDavid du Colombier Waitmsg*	waitfor(int);
241bd389b36SDavid du Colombier void	whatis(Lsym*);
242219b2ee8SDavid du Colombier void	windir(Map*, Node*, Node*, Node*);
243bd389b36SDavid du Colombier void	yyerror(char*, ...);
244bd389b36SDavid du Colombier int	yylex(void);
245bd389b36SDavid du Colombier int	yyparse(void);
246bd389b36SDavid du Colombier 
247bd389b36SDavid du Colombier enum
248bd389b36SDavid du Colombier {
249bd389b36SDavid du Colombier 	ONAME,
250bd389b36SDavid du Colombier 	OCONST,
251bd389b36SDavid du Colombier 	OMUL,
252bd389b36SDavid du Colombier 	ODIV,
253bd389b36SDavid du Colombier 	OMOD,
254bd389b36SDavid du Colombier 	OADD,
255bd389b36SDavid du Colombier 	OSUB,
256bd389b36SDavid du Colombier 	ORSH,
257bd389b36SDavid du Colombier 	OLSH,
258bd389b36SDavid du Colombier 	OLT,
259bd389b36SDavid du Colombier 	OGT,
260bd389b36SDavid du Colombier 	OLEQ,
261bd389b36SDavid du Colombier 	OGEQ,
262bd389b36SDavid du Colombier 	OEQ,
263bd389b36SDavid du Colombier 	ONEQ,
264bd389b36SDavid du Colombier 	OLAND,
265bd389b36SDavid du Colombier 	OXOR,
266bd389b36SDavid du Colombier 	OLOR,
267bd389b36SDavid du Colombier 	OCAND,
268bd389b36SDavid du Colombier 	OCOR,
269bd389b36SDavid du Colombier 	OASGN,
270bd389b36SDavid du Colombier 	OINDM,
271bd389b36SDavid du Colombier 	OEDEC,
272bd389b36SDavid du Colombier 	OEINC,
273bd389b36SDavid du Colombier 	OPINC,
274bd389b36SDavid du Colombier 	OPDEC,
275bd389b36SDavid du Colombier 	ONOT,
276bd389b36SDavid du Colombier 	OIF,
277bd389b36SDavid du Colombier 	ODO,
278bd389b36SDavid du Colombier 	OLIST,
279bd389b36SDavid du Colombier 	OCALL,
280bd389b36SDavid du Colombier 	OCTRUCT,
281bd389b36SDavid du Colombier 	OWHILE,
282bd389b36SDavid du Colombier 	OELSE,
283bd389b36SDavid du Colombier 	OHEAD,
284bd389b36SDavid du Colombier 	OTAIL,
285bd389b36SDavid du Colombier 	OAPPEND,
286bd389b36SDavid du Colombier 	ORET,
287bd389b36SDavid du Colombier 	OINDEX,
288bd389b36SDavid du Colombier 	OINDC,
289bd389b36SDavid du Colombier 	ODOT,
290bd389b36SDavid du Colombier 	OLOCAL,
291bd389b36SDavid du Colombier 	OFRAME,
292bd389b36SDavid du Colombier 	OCOMPLEX,
293bd389b36SDavid du Colombier 	ODELETE,
294219b2ee8SDavid du Colombier 	OCAST,
295219b2ee8SDavid du Colombier 	OFMT,
296219b2ee8SDavid du Colombier 	OEVAL,
297219b2ee8SDavid du Colombier 	OWHAT,
298bd389b36SDavid du Colombier };
299