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