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