xref: /plan9/sys/src/cmd/8a/a.h (revision 6520663fb7ebac8d17e4a1dbc55d10bf525f7b14)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
47dd7cddfSDavid du Colombier #include "../8c/8.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	Ref	Ref;
123e12c5d1SDavid du Colombier typedef	struct	Gen	Gen;
133e12c5d1SDavid du Colombier typedef	struct	Io	Io;
143e12c5d1SDavid du Colombier typedef	struct	Hist	Hist;
153e12c5d1SDavid du Colombier typedef	struct	Gen2 	Gen2;
163e12c5d1SDavid du Colombier 
177dd7cddfSDavid du Colombier #define	MAXALIGN	7
183e12c5d1SDavid du Colombier #define	FPCHIP		1
193e12c5d1SDavid du Colombier #define	NSYMB		500
203e12c5d1SDavid du Colombier #define	BUFSIZ		8192
213e12c5d1SDavid du Colombier #define	HISTSZ		20
223e12c5d1SDavid du Colombier #define	NINCLUDE	10
233e12c5d1SDavid du Colombier #define	NHUNK		10000
243e12c5d1SDavid du Colombier #define	EOF		(-1)
253e12c5d1SDavid du Colombier #define	IGN		(-2)
263e12c5d1SDavid du Colombier #define	GETC()		((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
273e12c5d1SDavid du Colombier #define	NHASH		503
283e12c5d1SDavid du Colombier #define	STRINGSZ	200
293e12c5d1SDavid du Colombier #define	NMACRO		10
303e12c5d1SDavid du Colombier 
313e12c5d1SDavid du Colombier struct	Sym
323e12c5d1SDavid du Colombier {
333e12c5d1SDavid du Colombier 	Sym*	link;
343e12c5d1SDavid du Colombier 	Ref*	ref;
353e12c5d1SDavid du Colombier 	char*	macro;
363e12c5d1SDavid du Colombier 	long	value;
373e12c5d1SDavid du Colombier 	ushort	type;
38219b2ee8SDavid du Colombier 	char	*name;
393e12c5d1SDavid du Colombier 	char	sym;
403e12c5d1SDavid du Colombier };
413e12c5d1SDavid du Colombier #define	S	((Sym*)0)
423e12c5d1SDavid du Colombier 
433e12c5d1SDavid du Colombier struct	Ref
443e12c5d1SDavid du Colombier {
453e12c5d1SDavid du Colombier 	int	class;
463e12c5d1SDavid du Colombier };
473e12c5d1SDavid du Colombier 
487dd7cddfSDavid du Colombier EXTERN struct
493e12c5d1SDavid du Colombier {
503e12c5d1SDavid du Colombier 	char*	p;
513e12c5d1SDavid du Colombier 	int	c;
523e12c5d1SDavid du Colombier } fi;
533e12c5d1SDavid du Colombier 
543e12c5d1SDavid du Colombier struct	Io
553e12c5d1SDavid du Colombier {
563e12c5d1SDavid du Colombier 	Io*	link;
573e12c5d1SDavid du Colombier 	char	b[BUFSIZ];
583e12c5d1SDavid du Colombier 	char*	p;
593e12c5d1SDavid du Colombier 	short	c;
603e12c5d1SDavid du Colombier 	short	f;
613e12c5d1SDavid du Colombier };
623e12c5d1SDavid du Colombier #define	I	((Io*)0)
633e12c5d1SDavid du Colombier 
647dd7cddfSDavid du Colombier EXTERN struct
653e12c5d1SDavid du Colombier {
663e12c5d1SDavid du Colombier 	Sym*	sym;
673e12c5d1SDavid du Colombier 	short	type;
683e12c5d1SDavid du Colombier } h[NSYM];
693e12c5d1SDavid du Colombier 
703e12c5d1SDavid du Colombier struct	Gen
713e12c5d1SDavid du Colombier {
723e12c5d1SDavid du Colombier 	double	dval;
733e12c5d1SDavid du Colombier 	char	sval[8];
743e12c5d1SDavid du Colombier 	long	offset;
75*6520663fSDavid du Colombier 	long	offset2;
763e12c5d1SDavid du Colombier 	Sym*	sym;
773e12c5d1SDavid du Colombier 	short	type;
783e12c5d1SDavid du Colombier 	short	index;
793e12c5d1SDavid du Colombier 	short	scale;
803e12c5d1SDavid du Colombier };
813e12c5d1SDavid du Colombier struct	Gen2
823e12c5d1SDavid du Colombier {
833e12c5d1SDavid du Colombier 	Gen	from;
843e12c5d1SDavid du Colombier 	Gen	to;
853e12c5d1SDavid du Colombier };
863e12c5d1SDavid du Colombier 
873e12c5d1SDavid du Colombier struct	Hist
883e12c5d1SDavid du Colombier {
893e12c5d1SDavid du Colombier 	Hist*	link;
903e12c5d1SDavid du Colombier 	char*	name;
913e12c5d1SDavid du Colombier 	long	line;
923e12c5d1SDavid du Colombier 	long	offset;
933e12c5d1SDavid du Colombier };
943e12c5d1SDavid du Colombier #define	H	((Hist*)0)
953e12c5d1SDavid du Colombier 
963e12c5d1SDavid du Colombier enum
973e12c5d1SDavid du Colombier {
983e12c5d1SDavid du Colombier 	CLAST,
993e12c5d1SDavid du Colombier 	CMACARG,
1003e12c5d1SDavid du Colombier 	CMACRO,
1013e12c5d1SDavid du Colombier 	CPREPROC,
1023e12c5d1SDavid du Colombier };
1033e12c5d1SDavid du Colombier 
1043e12c5d1SDavid du Colombier 
1057dd7cddfSDavid du Colombier EXTERN	char	debug[256];
1067dd7cddfSDavid du Colombier EXTERN	Sym*	hash[NHASH];
1077dd7cddfSDavid du Colombier EXTERN	char*	Dlist[30];
1087dd7cddfSDavid du Colombier EXTERN	int	nDlist;
1097dd7cddfSDavid du Colombier EXTERN	Hist*	ehist;
1107dd7cddfSDavid du Colombier EXTERN	int	newflag;
1117dd7cddfSDavid du Colombier EXTERN	Hist*	hist;
1127dd7cddfSDavid du Colombier EXTERN	char*	hunk;
1137dd7cddfSDavid du Colombier EXTERN	char*	include[NINCLUDE];
1147dd7cddfSDavid du Colombier EXTERN	Io*	iofree;
1157dd7cddfSDavid du Colombier EXTERN	Io*	ionext;
1167dd7cddfSDavid du Colombier EXTERN	Io*	iostack;
1177dd7cddfSDavid du Colombier EXTERN	long	lineno;
1187dd7cddfSDavid du Colombier EXTERN	int	nerrors;
1197dd7cddfSDavid du Colombier EXTERN	long	nhunk;
1207dd7cddfSDavid du Colombier EXTERN	int	ninclude;
1217dd7cddfSDavid du Colombier EXTERN	Gen	nullgen;
1227dd7cddfSDavid du Colombier EXTERN	char*	outfile;
1237dd7cddfSDavid du Colombier EXTERN	int	pass;
1247dd7cddfSDavid du Colombier EXTERN	char*	pathname;
1257dd7cddfSDavid du Colombier EXTERN	long	pc;
1267dd7cddfSDavid du Colombier EXTERN	int	peekc;
1277dd7cddfSDavid du Colombier EXTERN	int	sym;
1287dd7cddfSDavid du Colombier EXTERN	char	symb[NSYMB];
1297dd7cddfSDavid du Colombier EXTERN	int	thechar;
1307dd7cddfSDavid du Colombier EXTERN	char*	thestring;
1317dd7cddfSDavid du Colombier EXTERN	long	thunk;
1327dd7cddfSDavid du Colombier EXTERN	Biobuf	obuf;
1337dd7cddfSDavid du Colombier 
1347dd7cddfSDavid du Colombier void*	allocn(void*, long, long);
1353e12c5d1SDavid du Colombier void	errorexit(void);
1363e12c5d1SDavid du Colombier void	pushio(void);
1373e12c5d1SDavid du Colombier void	newio(void);
1383e12c5d1SDavid du Colombier void	newfile(char*, int);
1393e12c5d1SDavid du Colombier Sym*	slookup(char*);
1403e12c5d1SDavid du Colombier Sym*	lookup(void);
1413e12c5d1SDavid du Colombier void	syminit(Sym*);
1427dd7cddfSDavid du Colombier long	yylex(void);
1433e12c5d1SDavid du Colombier int	getc(void);
1443e12c5d1SDavid du Colombier int	getnsc(void);
1453e12c5d1SDavid du Colombier void	unget(int);
1463e12c5d1SDavid du Colombier int	escchar(int);
1473e12c5d1SDavid du Colombier void	cinit(void);
1483e12c5d1SDavid du Colombier void	checkscale(int);
1493e12c5d1SDavid du Colombier void	pinit(char*);
1503e12c5d1SDavid du Colombier void	cclean(void);
1513e12c5d1SDavid du Colombier int	isreg(Gen*);
1523e12c5d1SDavid du Colombier void	outcode(int, Gen2*);
1533e12c5d1SDavid du Colombier void	outhist(void);
1543e12c5d1SDavid du Colombier void	zaddr(Gen*, int);
1553e12c5d1SDavid du Colombier void	zname(char*, int, int);
1563e12c5d1SDavid du Colombier void	ieeedtod(Ieee*, double);
1573e12c5d1SDavid du Colombier int	filbuf(void);
1583e12c5d1SDavid du Colombier Sym*	getsym(void);
1593e12c5d1SDavid du Colombier void	domacro(void);
1603e12c5d1SDavid du Colombier void	macund(void);
1613e12c5d1SDavid du Colombier void	macdef(void);
1623e12c5d1SDavid du Colombier void	macexpand(Sym*, char*);
1633e12c5d1SDavid du Colombier void	macinc(void);
1643e12c5d1SDavid du Colombier void	macprag(void);
1653e12c5d1SDavid du Colombier void	maclin(void);
1663e12c5d1SDavid du Colombier void	macif(int);
1673e12c5d1SDavid du Colombier void	macend(void);
1683e12c5d1SDavid du Colombier void	dodefine(char*);
1693e12c5d1SDavid du Colombier void	prfile(long);
1703e12c5d1SDavid du Colombier void	linehist(char*, int);
1713e12c5d1SDavid du Colombier void	gethunk(void);
1723e12c5d1SDavid du Colombier void	yyerror(char*, ...);
1733e12c5d1SDavid du Colombier int	yyparse(void);
1747dd7cddfSDavid du Colombier void	setinclude(char*);
1757dd7cddfSDavid du Colombier int	assemble(char*);
1763e12c5d1SDavid du Colombier 
1773e12c5d1SDavid du Colombier /*
1787dd7cddfSDavid du Colombier  *	system-dependent stuff from ../cc/compat.c
1793e12c5d1SDavid du Colombier  */
1807dd7cddfSDavid du Colombier enum	/* keep in synch with ../cc/cc.h */
1817dd7cddfSDavid du Colombier {
1827dd7cddfSDavid du Colombier 	Plan9	= 1<<0,
1837dd7cddfSDavid du Colombier 	Unix	= 1<<1,
184375daca8SDavid du Colombier 	Windows	= 1<<2
1857dd7cddfSDavid du Colombier };
1867dd7cddfSDavid du Colombier int	mywait(int*);
1873e12c5d1SDavid du Colombier int	mycreat(char*, int);
1887dd7cddfSDavid du Colombier int	systemtype(int);
1897dd7cddfSDavid du Colombier int	pathchar(void);
1907dd7cddfSDavid du Colombier char*	mygetwd(char*, int);
1917dd7cddfSDavid du Colombier int	myexec(char*, char*[]);
1927dd7cddfSDavid du Colombier int	mydup(int, int);
1937dd7cddfSDavid du Colombier int	myfork(void);
1947dd7cddfSDavid du Colombier int	mypipe(int*);
1957dd7cddfSDavid du Colombier void*	mysbrk(ulong);
196