xref: /plan9/sys/src/cmd/ka/a.h (revision 375daca8932d0755549a5f8e4d068a24a49927d4)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
47dd7cddfSDavid du Colombier #include "../kc/k.out.h"
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier #ifndef	EXTERN
77dd7cddfSDavid du Colombier #define	EXTERN	extern
87dd7cddfSDavid du Colombier #endif
93e12c5d1SDavid du Colombier 
103e12c5d1SDavid du Colombier typedef	struct	Sym	Sym;
113e12c5d1SDavid du Colombier typedef	struct	Gen	Gen;
123e12c5d1SDavid du Colombier typedef	struct	Io	Io;
133e12c5d1SDavid du Colombier typedef	struct	Hist	Hist;
143e12c5d1SDavid du Colombier 
157dd7cddfSDavid du Colombier #define	MAXALIGN	7
163e12c5d1SDavid du Colombier #define	FPCHIP		1
173e12c5d1SDavid du Colombier #define	NSYMB		500
183e12c5d1SDavid du Colombier #define	BUFSIZ		8192
193e12c5d1SDavid du Colombier #define	HISTSZ		20
203e12c5d1SDavid du Colombier #define	NINCLUDE	10
213e12c5d1SDavid du Colombier #define	NHUNK		10000
223e12c5d1SDavid du Colombier #define	EOF		(-1)
233e12c5d1SDavid du Colombier #define	IGN		(-2)
243e12c5d1SDavid du Colombier #define	GETC()		((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
253e12c5d1SDavid du Colombier #define	NHASH		503
263e12c5d1SDavid du Colombier #define	STRINGSZ	200
273e12c5d1SDavid du Colombier #define	NMACRO		10
283e12c5d1SDavid du Colombier 
293e12c5d1SDavid du Colombier struct	Sym
303e12c5d1SDavid du Colombier {
313e12c5d1SDavid du Colombier 	Sym*	link;
323e12c5d1SDavid du Colombier 	char*	macro;
333e12c5d1SDavid du Colombier 	long	value;
343e12c5d1SDavid du Colombier 	ushort	type;
35219b2ee8SDavid du Colombier 	char	*name;
363e12c5d1SDavid du Colombier 	char	sym;
373e12c5d1SDavid du Colombier };
383e12c5d1SDavid du Colombier #define	S	((Sym*)0)
393e12c5d1SDavid du Colombier 
407dd7cddfSDavid du Colombier EXTERN	struct
413e12c5d1SDavid du Colombier {
423e12c5d1SDavid du Colombier 	char*	p;
433e12c5d1SDavid du Colombier 	int	c;
443e12c5d1SDavid du Colombier } fi;
453e12c5d1SDavid du Colombier 
463e12c5d1SDavid du Colombier struct	Io
473e12c5d1SDavid du Colombier {
483e12c5d1SDavid du Colombier 	Io*	link;
493e12c5d1SDavid du Colombier 	char	b[BUFSIZ];
503e12c5d1SDavid du Colombier 	char*	p;
513e12c5d1SDavid du Colombier 	short	c;
523e12c5d1SDavid du Colombier 	short	f;
533e12c5d1SDavid du Colombier };
543e12c5d1SDavid du Colombier #define	I	((Io*)0)
553e12c5d1SDavid du Colombier 
567dd7cddfSDavid du Colombier EXTERN	struct
573e12c5d1SDavid du Colombier {
583e12c5d1SDavid du Colombier 	Sym*	sym;
593e12c5d1SDavid du Colombier 	short	type;
603e12c5d1SDavid du Colombier } h[NSYM];
613e12c5d1SDavid du Colombier 
623e12c5d1SDavid du Colombier struct	Gen
633e12c5d1SDavid du Colombier {
643e12c5d1SDavid du Colombier 	Sym	*sym;
653e12c5d1SDavid du Colombier 	long	offset;
663e12c5d1SDavid du Colombier 	short	type;
673e12c5d1SDavid du Colombier 	short	reg;
683e12c5d1SDavid du Colombier 	short	xreg;
693e12c5d1SDavid du Colombier 	short	name;
703e12c5d1SDavid du Colombier 	double	dval;
713e12c5d1SDavid du Colombier 	char	sval[8];
723e12c5d1SDavid du Colombier };
733e12c5d1SDavid du Colombier 
743e12c5d1SDavid du Colombier struct	Hist
753e12c5d1SDavid du Colombier {
763e12c5d1SDavid du Colombier 	Hist*	link;
773e12c5d1SDavid du Colombier 	char*	name;
783e12c5d1SDavid du Colombier 	long	line;
793e12c5d1SDavid du Colombier 	long	offset;
803e12c5d1SDavid du Colombier };
813e12c5d1SDavid du Colombier #define	H	((Hist*)0)
823e12c5d1SDavid du Colombier 
833e12c5d1SDavid du Colombier enum
843e12c5d1SDavid du Colombier {
853e12c5d1SDavid du Colombier 	CLAST,
863e12c5d1SDavid du Colombier 	CMACARG,
873e12c5d1SDavid du Colombier 	CMACRO,
883e12c5d1SDavid du Colombier 	CPREPROC,
893e12c5d1SDavid du Colombier };
903e12c5d1SDavid du Colombier 
917dd7cddfSDavid du Colombier EXTERN	char	debug[256];
927dd7cddfSDavid du Colombier EXTERN	Sym*	hash[NHASH];
937dd7cddfSDavid du Colombier EXTERN	char*	Dlist[30];
947dd7cddfSDavid du Colombier EXTERN	int	nDlist;
957dd7cddfSDavid du Colombier EXTERN	Hist*	ehist;
967dd7cddfSDavid du Colombier EXTERN	int	newflag;
977dd7cddfSDavid du Colombier EXTERN	Hist*	hist;
987dd7cddfSDavid du Colombier EXTERN	char*	hunk;
997dd7cddfSDavid du Colombier EXTERN	char*	include[NINCLUDE];
1007dd7cddfSDavid du Colombier EXTERN	Io*	iofree;
1017dd7cddfSDavid du Colombier EXTERN	Io*	ionext;
1027dd7cddfSDavid du Colombier EXTERN	Io*	iostack;
1037dd7cddfSDavid du Colombier EXTERN	long	lineno;
1047dd7cddfSDavid du Colombier EXTERN	int	nerrors;
1057dd7cddfSDavid du Colombier EXTERN	long	nhunk;
1067dd7cddfSDavid du Colombier EXTERN	int	ninclude;
1077dd7cddfSDavid du Colombier EXTERN	int	nosched;
1087dd7cddfSDavid du Colombier EXTERN	Gen	nullgen;
1097dd7cddfSDavid du Colombier EXTERN	char*	outfile;
1107dd7cddfSDavid du Colombier EXTERN	int	pass;
1117dd7cddfSDavid du Colombier EXTERN	char*	pathname;
1127dd7cddfSDavid du Colombier EXTERN	long	pc;
1137dd7cddfSDavid du Colombier EXTERN	int	peekc;
1147dd7cddfSDavid du Colombier EXTERN	int	sym;
1157dd7cddfSDavid du Colombier EXTERN	char	symb[NSYMB];
1167dd7cddfSDavid du Colombier EXTERN	int	thechar;
1177dd7cddfSDavid du Colombier EXTERN	char*	thestring;
1187dd7cddfSDavid du Colombier EXTERN	long	thunk;
1197dd7cddfSDavid du Colombier EXTERN	Biobuf	obuf;
1203e12c5d1SDavid du Colombier 
1217dd7cddfSDavid du Colombier void*	alloc(long);
1227dd7cddfSDavid du Colombier void*	allocn(void*, long, long);
1233e12c5d1SDavid du Colombier void	errorexit(void);
1243e12c5d1SDavid du Colombier void	pushio(void);
1253e12c5d1SDavid du Colombier void	newio(void);
1263e12c5d1SDavid du Colombier void	newfile(char*, int);
1273e12c5d1SDavid du Colombier Sym*	slookup(char*);
1283e12c5d1SDavid du Colombier Sym*	lookup(void);
1293e12c5d1SDavid du Colombier void	syminit(Sym*);
1303e12c5d1SDavid du Colombier long	yylex(void);
1313e12c5d1SDavid du Colombier int	getc(void);
1323e12c5d1SDavid du Colombier int	getnsc(void);
1333e12c5d1SDavid du Colombier void	unget(int);
1343e12c5d1SDavid du Colombier int	escchar(int);
1353e12c5d1SDavid du Colombier void	cinit(void);
1363e12c5d1SDavid du Colombier void	pinit(char*);
1373e12c5d1SDavid du Colombier void	cclean(void);
1383e12c5d1SDavid du Colombier void	outcode(int, Gen*, int, Gen*);
1393e12c5d1SDavid du Colombier void	zname(char*, int, int);
1403e12c5d1SDavid du Colombier void	zaddr(Gen*, int);
1413e12c5d1SDavid du Colombier void	ieeedtod(Ieee*, double);
1423e12c5d1SDavid du Colombier int	filbuf(void);
1433e12c5d1SDavid du Colombier Sym*	getsym(void);
1443e12c5d1SDavid du Colombier void	domacro(void);
1453e12c5d1SDavid du Colombier void	macund(void);
1463e12c5d1SDavid du Colombier void	macdef(void);
1473e12c5d1SDavid du Colombier void	macexpand(Sym*, char*);
1483e12c5d1SDavid du Colombier void	macinc(void);
1493e12c5d1SDavid du Colombier void	macprag(void);
1503e12c5d1SDavid du Colombier void	maclin(void);
1513e12c5d1SDavid du Colombier void	macif(int);
1523e12c5d1SDavid du Colombier void	macend(void);
1533e12c5d1SDavid du Colombier void	dodefine(char*);
1543e12c5d1SDavid du Colombier void	prfile(long);
1553e12c5d1SDavid du Colombier void	outhist(void);
1567dd7cddfSDavid du Colombier void	linehist(char*, int);
1573e12c5d1SDavid du Colombier void	gethunk(void);
1583e12c5d1SDavid du Colombier void	yyerror(char*, ...);
1593e12c5d1SDavid du Colombier int	yyparse(void);
1607dd7cddfSDavid du Colombier void	setinclude(char*);
1617dd7cddfSDavid du Colombier int	assemble(char*);
1623e12c5d1SDavid du Colombier 
1633e12c5d1SDavid du Colombier /*
1647dd7cddfSDavid du Colombier  *	system-dependent stuff from ../cc/compat.c
1653e12c5d1SDavid du Colombier  */
1667dd7cddfSDavid du Colombier 
1677dd7cddfSDavid du Colombier enum				/* keep in synch with ../cc/cc.h */
1687dd7cddfSDavid du Colombier {
1697dd7cddfSDavid du Colombier 	Plan9	= 1<<0,
1707dd7cddfSDavid du Colombier 	Unix	= 1<<1,
171*375daca8SDavid du Colombier 	Windows	= 1<<2
1727dd7cddfSDavid du Colombier };
1737dd7cddfSDavid du Colombier int	mywait(int*);
1743e12c5d1SDavid du Colombier int	mycreat(char*, int);
1757dd7cddfSDavid du Colombier int	systemtype(int);
1767dd7cddfSDavid du Colombier int	pathchar(void);
1777dd7cddfSDavid du Colombier char*	mygetwd(char*, int);
1787dd7cddfSDavid du Colombier int	myexec(char*, char*[]);
1797dd7cddfSDavid du Colombier int	mydup(int, int);
1807dd7cddfSDavid du Colombier int	myfork(void);
1817dd7cddfSDavid du Colombier int	mypipe(int*);
1827dd7cddfSDavid du Colombier void*	mysbrk(ulong);
183