xref: /plan9-contrib/sys/src/cmd/9a/a.h (revision 2ec6491f4460014c01f3ea5c06b30b1a392b0bb2)
1fbadb1c4SDavid du Colombier #include <u.h>
2fbadb1c4SDavid du Colombier #include <libc.h>
3fbadb1c4SDavid du Colombier #include <bio.h>
4fbadb1c4SDavid du Colombier #include "../9c/9.out.h"
5fbadb1c4SDavid du Colombier 
6fbadb1c4SDavid du Colombier #ifndef	EXTERN
7fbadb1c4SDavid du Colombier #define	EXTERN	extern
8fbadb1c4SDavid du Colombier #endif
9fbadb1c4SDavid du Colombier 
10fbadb1c4SDavid du Colombier typedef	struct	Sym	Sym;
11fbadb1c4SDavid du Colombier typedef	struct	Gen	Gen;
12fbadb1c4SDavid du Colombier typedef	struct	Io	Io;
13fbadb1c4SDavid du Colombier typedef	struct	Hist	Hist;
14fbadb1c4SDavid du Colombier 
15fbadb1c4SDavid du Colombier #define	MAXALIGN	7
16fbadb1c4SDavid du Colombier #define	FPCHIP		1
17fbadb1c4SDavid du Colombier #define	NSYMB		8192
18*2ec6491fSDavid du Colombier #define	BUFSIZ		(16*1024)
19fbadb1c4SDavid du Colombier #define	HISTSZ		20
20fbadb1c4SDavid du Colombier #define	NINCLUDE	10
21fbadb1c4SDavid du Colombier #define	NHUNK		10000
22fbadb1c4SDavid du Colombier #define	EOF		(-1)
23fbadb1c4SDavid du Colombier #define	IGN		(-2)
24fbadb1c4SDavid du Colombier #define	GETC()		((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
25fbadb1c4SDavid du Colombier #define	NHASH		503
26fbadb1c4SDavid du Colombier #define	STRINGSZ	200
27fbadb1c4SDavid du Colombier #define	NMACRO		10
28fbadb1c4SDavid du Colombier 
29fbadb1c4SDavid du Colombier #define	ALLOC(lhs, type)\
30fbadb1c4SDavid du Colombier 	while(nhunk < sizeof(type))\
31fbadb1c4SDavid du Colombier 		gethunk();\
32fbadb1c4SDavid du Colombier 	lhs = (type*)hunk;\
33fbadb1c4SDavid du Colombier 	nhunk -= sizeof(type);\
34fbadb1c4SDavid du Colombier 	hunk += sizeof(type);
35fbadb1c4SDavid du Colombier 
36fbadb1c4SDavid du Colombier #define	ALLOCN(lhs, len, n)\
37fbadb1c4SDavid du Colombier 	if(lhs+len != hunk || nhunk < n) {\
38fbadb1c4SDavid du Colombier 		while(nhunk <= len)\
39fbadb1c4SDavid du Colombier 			gethunk();\
40fbadb1c4SDavid du Colombier 		memmove(hunk, lhs, len);\
41fbadb1c4SDavid du Colombier 		lhs = hunk;\
42fbadb1c4SDavid du Colombier 		hunk += len;\
43fbadb1c4SDavid du Colombier 		nhunk -= len;\
44fbadb1c4SDavid du Colombier 	}\
45fbadb1c4SDavid du Colombier 	hunk += n;\
46fbadb1c4SDavid du Colombier 	nhunk -= n;
47fbadb1c4SDavid du Colombier 
48fbadb1c4SDavid du Colombier struct	Sym
49fbadb1c4SDavid du Colombier {
50fbadb1c4SDavid du Colombier 	Sym*	link;
51fbadb1c4SDavid du Colombier 	char*	macro;
52fbadb1c4SDavid du Colombier 	vlong	value;
53fbadb1c4SDavid du Colombier 	ushort	type;
54fbadb1c4SDavid du Colombier 	char	*name;
55fbadb1c4SDavid du Colombier 	char	sym;
56fbadb1c4SDavid du Colombier };
57fbadb1c4SDavid du Colombier #define	S	((Sym*)0)
58fbadb1c4SDavid du Colombier 
59fbadb1c4SDavid du Colombier struct
60fbadb1c4SDavid du Colombier {
61fbadb1c4SDavid du Colombier 	char*	p;
62fbadb1c4SDavid du Colombier 	int	c;
63fbadb1c4SDavid du Colombier } fi;
64fbadb1c4SDavid du Colombier 
65fbadb1c4SDavid du Colombier struct	Io
66fbadb1c4SDavid du Colombier {
67fbadb1c4SDavid du Colombier 	Io*	link;
68fbadb1c4SDavid du Colombier 	char	b[BUFSIZ];
69fbadb1c4SDavid du Colombier 	char*	p;
70fbadb1c4SDavid du Colombier 	short	c;
71fbadb1c4SDavid du Colombier 	short	f;
72fbadb1c4SDavid du Colombier };
73fbadb1c4SDavid du Colombier #define	I	((Io*)0)
74fbadb1c4SDavid du Colombier 
75fbadb1c4SDavid du Colombier struct
76fbadb1c4SDavid du Colombier {
77fbadb1c4SDavid du Colombier 	Sym*	sym;
78fbadb1c4SDavid du Colombier 	short	type;
79fbadb1c4SDavid du Colombier } h[NSYM];
80fbadb1c4SDavid du Colombier 
81fbadb1c4SDavid du Colombier struct	Gen
82fbadb1c4SDavid du Colombier {
83fbadb1c4SDavid du Colombier 	Sym*	sym;
84fbadb1c4SDavid du Colombier 	vlong	offset;
85fbadb1c4SDavid du Colombier 	short	type;
86fbadb1c4SDavid du Colombier 	short	reg;
87fbadb1c4SDavid du Colombier 	short	xreg;
88fbadb1c4SDavid du Colombier 	short	name;
89fbadb1c4SDavid du Colombier 	ushort	mask;
90fbadb1c4SDavid du Colombier 	double	dval;
91fbadb1c4SDavid du Colombier 	char	sval[8];
92fbadb1c4SDavid du Colombier };
93fbadb1c4SDavid du Colombier 
94fbadb1c4SDavid du Colombier struct	Hist
95fbadb1c4SDavid du Colombier {
96fbadb1c4SDavid du Colombier 	Hist*	link;
97fbadb1c4SDavid du Colombier 	char*	name;
98fbadb1c4SDavid du Colombier 	long	line;
99fbadb1c4SDavid du Colombier 	vlong	offset;
100fbadb1c4SDavid du Colombier };
101fbadb1c4SDavid du Colombier #define	H	((Hist*)0)
102fbadb1c4SDavid du Colombier 
103fbadb1c4SDavid du Colombier enum
104fbadb1c4SDavid du Colombier {
105fbadb1c4SDavid du Colombier 	CLAST,
106fbadb1c4SDavid du Colombier 	CMACARG,
107fbadb1c4SDavid du Colombier 	CMACRO,
108fbadb1c4SDavid du Colombier 	CPREPROC
109fbadb1c4SDavid du Colombier };
110fbadb1c4SDavid du Colombier 
111fbadb1c4SDavid du Colombier EXTERN	char	debug[256];
112fbadb1c4SDavid du Colombier EXTERN	Sym*	hash[NHASH];
113fbadb1c4SDavid du Colombier EXTERN	char*	Dlist[30];
114fbadb1c4SDavid du Colombier EXTERN	int	nDlist;
115fbadb1c4SDavid du Colombier EXTERN	Hist*	ehist;
116fbadb1c4SDavid du Colombier EXTERN	int	newflag;
117fbadb1c4SDavid du Colombier EXTERN	Hist*	hist;
118fbadb1c4SDavid du Colombier EXTERN	char*	hunk;
119fbadb1c4SDavid du Colombier EXTERN	char*	include[NINCLUDE];
120fbadb1c4SDavid du Colombier EXTERN	Io*	iofree;
121fbadb1c4SDavid du Colombier EXTERN	Io*	ionext;
122fbadb1c4SDavid du Colombier EXTERN	Io*	iostack;
123fbadb1c4SDavid du Colombier EXTERN	long	lineno;
124fbadb1c4SDavid du Colombier EXTERN	int	nerrors;
125fbadb1c4SDavid du Colombier EXTERN	long	nhunk;
126fbadb1c4SDavid du Colombier EXTERN	int	nosched;
127fbadb1c4SDavid du Colombier EXTERN	int	ninclude;
128fbadb1c4SDavid du Colombier EXTERN	Gen	nullgen;
129fbadb1c4SDavid du Colombier EXTERN	char*	outfile;
130fbadb1c4SDavid du Colombier EXTERN	int	pass;
131fbadb1c4SDavid du Colombier EXTERN	char*	pathname;
132fbadb1c4SDavid du Colombier EXTERN	long	pc;
133fbadb1c4SDavid du Colombier EXTERN	int	peekc;
134fbadb1c4SDavid du Colombier EXTERN	int	sym;
135fbadb1c4SDavid du Colombier EXTERN	char	symb[NSYMB];
136fbadb1c4SDavid du Colombier EXTERN	int	thechar;
137fbadb1c4SDavid du Colombier EXTERN	char*	thestring;
138fbadb1c4SDavid du Colombier EXTERN	long	thunk;
139fbadb1c4SDavid du Colombier EXTERN	Biobuf	obuf;
140fbadb1c4SDavid du Colombier 
141fbadb1c4SDavid du Colombier void	errorexit(void);
142fbadb1c4SDavid du Colombier void	pushio(void);
143fbadb1c4SDavid du Colombier void	newio(void);
144fbadb1c4SDavid du Colombier void	newfile(char*, int);
145fbadb1c4SDavid du Colombier Sym*	slookup(char*);
146fbadb1c4SDavid du Colombier Sym*	lookup(void);
147fbadb1c4SDavid du Colombier void	syminit(Sym*);
148fbadb1c4SDavid du Colombier long	yylex(void);
149fbadb1c4SDavid du Colombier int	getc(void);
150fbadb1c4SDavid du Colombier int	getnsc(void);
151fbadb1c4SDavid du Colombier void	unget(int);
152fbadb1c4SDavid du Colombier int	escchar(int);
153fbadb1c4SDavid du Colombier void	cinit(void);
154fbadb1c4SDavid du Colombier void	pinit(char*);
155fbadb1c4SDavid du Colombier void	cclean(void);
156fbadb1c4SDavid du Colombier void	outcode(int, Gen*, int, Gen*);
157fbadb1c4SDavid du Colombier void	outgcode(int, Gen*, int, Gen*, Gen*);
158fbadb1c4SDavid du Colombier void	zname(char*, int, int);
159fbadb1c4SDavid du Colombier void	zaddr(Gen*, int);
160fbadb1c4SDavid du Colombier void	ieeedtod(Ieee*, double);
161fbadb1c4SDavid du Colombier int	filbuf(void);
162fbadb1c4SDavid du Colombier Sym*	getsym(void);
163fbadb1c4SDavid du Colombier void	domacro(void);
164fbadb1c4SDavid du Colombier void	macund(void);
165fbadb1c4SDavid du Colombier void	macdef(void);
166fbadb1c4SDavid du Colombier void	macexpand(Sym*, char*);
167fbadb1c4SDavid du Colombier void	macinc(void);
168fbadb1c4SDavid du Colombier void	macprag(void);
169fbadb1c4SDavid du Colombier void	maclin(void);
170fbadb1c4SDavid du Colombier void	macif(int);
171fbadb1c4SDavid du Colombier void	macend(void);
172fbadb1c4SDavid du Colombier void	dodefine(char*);
173fbadb1c4SDavid du Colombier void	prfile(long);
174fbadb1c4SDavid du Colombier void	outhist(void);
175fbadb1c4SDavid du Colombier void	linehist(char*, int);
176fbadb1c4SDavid du Colombier void	gethunk(void);
177fbadb1c4SDavid du Colombier void	yyerror(char*, ...);
178fbadb1c4SDavid du Colombier int	yyparse(void);
179fbadb1c4SDavid du Colombier void	setinclude(char*);
180fbadb1c4SDavid du Colombier int	assemble(char*);
181fbadb1c4SDavid du Colombier 
182fbadb1c4SDavid du Colombier /*
183fbadb1c4SDavid du Colombier  *	system-dependent stuff from ../cc/compat.c
184fbadb1c4SDavid du Colombier  */
185fbadb1c4SDavid du Colombier enum				/* keep in synch with ../cc/cc.h */
186fbadb1c4SDavid du Colombier {
187fbadb1c4SDavid du Colombier 	Plan9	= 1<<0,
188fbadb1c4SDavid du Colombier 	Unix	= 1<<1,
189fbadb1c4SDavid du Colombier 	Windows	= 1<<2
190fbadb1c4SDavid du Colombier };
191fbadb1c4SDavid du Colombier int	mywait(int*);
192fbadb1c4SDavid du Colombier int	mycreat(char*, int);
193fbadb1c4SDavid du Colombier int	systemtype(int);
194fbadb1c4SDavid du Colombier int	pathchar(void);
195fbadb1c4SDavid du Colombier char*	mygetwd(char*, int);
196fbadb1c4SDavid du Colombier int	myexec(char*, char*[]);
197fbadb1c4SDavid du Colombier int	mydup(int, int);
198fbadb1c4SDavid du Colombier int	myfork(void);
199fbadb1c4SDavid du Colombier int	mypipe(int*);
200fbadb1c4SDavid du Colombier void*	mysbrk(ulong);
201