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