xref: /plan9-contrib/sys/src/cmd/5a/a.h (revision 2ec6491f4460014c01f3ea5c06b30b1a392b0bb2)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
47dd7cddfSDavid du Colombier #include "../5c/5.out.h"
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier #ifndef	EXTERN
77dd7cddfSDavid du Colombier #define	EXTERN	extern
87dd7cddfSDavid du Colombier #endif
97dd7cddfSDavid du Colombier 
107dd7cddfSDavid du Colombier typedef	struct	Sym	Sym;
117dd7cddfSDavid du Colombier typedef	struct	Gen	Gen;
127dd7cddfSDavid du Colombier typedef	struct	Io	Io;
137dd7cddfSDavid du Colombier typedef	struct	Hist	Hist;
147dd7cddfSDavid du Colombier 
157dd7cddfSDavid du Colombier #define	MAXALIGN	7
167dd7cddfSDavid du Colombier #define	FPCHIP		1
177dd7cddfSDavid du Colombier #define	NSYMB		8192
18*2ec6491fSDavid du Colombier #define	BUFSIZ		(16*1024)
197dd7cddfSDavid du Colombier #define	HISTSZ		20
207dd7cddfSDavid du Colombier #define	NINCLUDE	10
217dd7cddfSDavid du Colombier #define	NHUNK		10000
227dd7cddfSDavid du Colombier #define	EOF		(-1)
237dd7cddfSDavid du Colombier #define	IGN		(-2)
247dd7cddfSDavid du Colombier #define	GETC()		((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
257dd7cddfSDavid du Colombier #define	NHASH		503
267dd7cddfSDavid du Colombier #define	STRINGSZ	200
277dd7cddfSDavid du Colombier #define	NMACRO		10
287dd7cddfSDavid du Colombier 
297dd7cddfSDavid du Colombier struct	Sym
307dd7cddfSDavid du Colombier {
317dd7cddfSDavid du Colombier 	Sym*	link;
327dd7cddfSDavid du Colombier 	char*	macro;
337dd7cddfSDavid du Colombier 	long	value;
347dd7cddfSDavid du Colombier 	ushort	type;
357dd7cddfSDavid du Colombier 	char	*name;
367dd7cddfSDavid du Colombier 	char	sym;
377dd7cddfSDavid du Colombier };
387dd7cddfSDavid du Colombier #define	S	((Sym*)0)
397dd7cddfSDavid du Colombier 
407dd7cddfSDavid du Colombier EXTERN	struct
417dd7cddfSDavid du Colombier {
427dd7cddfSDavid du Colombier 	char*	p;
437dd7cddfSDavid du Colombier 	int	c;
447dd7cddfSDavid du Colombier } fi;
457dd7cddfSDavid du Colombier 
467dd7cddfSDavid du Colombier struct	Io
477dd7cddfSDavid du Colombier {
487dd7cddfSDavid du Colombier 	Io*	link;
497dd7cddfSDavid du Colombier 	char	b[BUFSIZ];
507dd7cddfSDavid du Colombier 	char*	p;
517dd7cddfSDavid du Colombier 	short	c;
527dd7cddfSDavid du Colombier 	short	f;
537dd7cddfSDavid du Colombier };
547dd7cddfSDavid du Colombier #define	I	((Io*)0)
557dd7cddfSDavid du Colombier 
567dd7cddfSDavid du Colombier EXTERN	struct
577dd7cddfSDavid du Colombier {
587dd7cddfSDavid du Colombier 	Sym*	sym;
597dd7cddfSDavid du Colombier 	short	type;
607dd7cddfSDavid du Colombier } h[NSYM];
617dd7cddfSDavid du Colombier 
627dd7cddfSDavid du Colombier struct	Gen
637dd7cddfSDavid du Colombier {
647dd7cddfSDavid du Colombier 	Sym*	sym;
657dd7cddfSDavid du Colombier 	long	offset;
667dd7cddfSDavid du Colombier 	short	type;
677dd7cddfSDavid du Colombier 	short	reg;
687dd7cddfSDavid du Colombier 	short	name;
697dd7cddfSDavid du Colombier 	double	dval;
707dd7cddfSDavid du Colombier 	char	sval[8];
717dd7cddfSDavid du Colombier };
727dd7cddfSDavid du Colombier 
737dd7cddfSDavid du Colombier struct	Hist
747dd7cddfSDavid du Colombier {
757dd7cddfSDavid du Colombier 	Hist*	link;
767dd7cddfSDavid du Colombier 	char*	name;
777dd7cddfSDavid du Colombier 	long	line;
787dd7cddfSDavid du Colombier 	long	offset;
797dd7cddfSDavid du Colombier };
807dd7cddfSDavid du Colombier #define	H	((Hist*)0)
817dd7cddfSDavid du Colombier 
827dd7cddfSDavid du Colombier enum
837dd7cddfSDavid du Colombier {
847dd7cddfSDavid du Colombier 	CLAST,
857dd7cddfSDavid du Colombier 	CMACARG,
867dd7cddfSDavid du Colombier 	CMACRO,
877dd7cddfSDavid du Colombier 	CPREPROC,
887dd7cddfSDavid du Colombier 
897dd7cddfSDavid du Colombier 	Always	= 14,
907dd7cddfSDavid du Colombier };
917dd7cddfSDavid du Colombier 
927dd7cddfSDavid du Colombier EXTERN	char	debug[256];
937dd7cddfSDavid du Colombier EXTERN	Sym*	hash[NHASH];
947dd7cddfSDavid du Colombier EXTERN	char*	Dlist[30];
957dd7cddfSDavid du Colombier EXTERN	int	nDlist;
967dd7cddfSDavid du Colombier EXTERN	Hist*	ehist;
977dd7cddfSDavid du Colombier EXTERN	int	newflag;
987dd7cddfSDavid du Colombier EXTERN	Hist*	hist;
997dd7cddfSDavid du Colombier EXTERN	char*	hunk;
1007dd7cddfSDavid du Colombier EXTERN	char*	include[NINCLUDE];
1017dd7cddfSDavid du Colombier EXTERN	Io*	iofree;
1027dd7cddfSDavid du Colombier EXTERN	Io*	ionext;
1037dd7cddfSDavid du Colombier EXTERN	Io*	iostack;
1047dd7cddfSDavid du Colombier EXTERN	long	lineno;
1057dd7cddfSDavid du Colombier EXTERN	int	nerrors;
1067dd7cddfSDavid du Colombier EXTERN	long	nhunk;
1077dd7cddfSDavid du Colombier EXTERN	int	ninclude;
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;
1207dd7cddfSDavid du Colombier 
1217dd7cddfSDavid du Colombier void*	alloc(long);
1227dd7cddfSDavid du Colombier void*	allocn(void*, long, long);
1237dd7cddfSDavid du Colombier void	errorexit(void);
1247dd7cddfSDavid du Colombier void	pushio(void);
1257dd7cddfSDavid du Colombier void	newio(void);
1267dd7cddfSDavid du Colombier void	newfile(char*, int);
1277dd7cddfSDavid du Colombier Sym*	slookup(char*);
1287dd7cddfSDavid du Colombier Sym*	lookup(void);
1297dd7cddfSDavid du Colombier void	syminit(Sym*);
1307dd7cddfSDavid du Colombier long	yylex(void);
1317dd7cddfSDavid du Colombier int	getc(void);
1327dd7cddfSDavid du Colombier int	getnsc(void);
1337dd7cddfSDavid du Colombier void	unget(int);
1347dd7cddfSDavid du Colombier int	escchar(int);
1357dd7cddfSDavid du Colombier void	cinit(void);
1367dd7cddfSDavid du Colombier void	pinit(char*);
1377dd7cddfSDavid du Colombier void	cclean(void);
1387dd7cddfSDavid du Colombier int	isreg(Gen*);
1397dd7cddfSDavid du Colombier void	outcode(int, int, Gen*, int, Gen*);
1407dd7cddfSDavid du Colombier void	zname(char*, int, int);
1417dd7cddfSDavid du Colombier void	zaddr(Gen*, int);
1427dd7cddfSDavid du Colombier void	ieeedtod(Ieee*, double);
1437dd7cddfSDavid du Colombier int	filbuf(void);
1447dd7cddfSDavid du Colombier Sym*	getsym(void);
1457dd7cddfSDavid du Colombier void	domacro(void);
1467dd7cddfSDavid du Colombier void	macund(void);
1477dd7cddfSDavid du Colombier void	macdef(void);
1487dd7cddfSDavid du Colombier void	macexpand(Sym*, char*);
1497dd7cddfSDavid du Colombier void	macinc(void);
1507dd7cddfSDavid du Colombier void	maclin(void);
1517dd7cddfSDavid du Colombier void	macprag(void);
1527dd7cddfSDavid du Colombier void	macif(int);
1537dd7cddfSDavid du Colombier void	macend(void);
1547dd7cddfSDavid du Colombier void	outhist(void);
1557dd7cddfSDavid du Colombier void	dodefine(char*);
1567dd7cddfSDavid du Colombier void	prfile(long);
1577dd7cddfSDavid du Colombier void	linehist(char*, int);
1587dd7cddfSDavid du Colombier void	gethunk(void);
1597dd7cddfSDavid du Colombier void	yyerror(char*, ...);
1607dd7cddfSDavid du Colombier int	yyparse(void);
1617dd7cddfSDavid du Colombier void	setinclude(char*);
1627dd7cddfSDavid du Colombier int	assemble(char*);
1637dd7cddfSDavid du Colombier 
1647dd7cddfSDavid du Colombier /*
1657dd7cddfSDavid du Colombier  *	system-dependent stuff from ../cc/compat.c
1667dd7cddfSDavid du Colombier  */
1677dd7cddfSDavid du Colombier 
1687dd7cddfSDavid du Colombier enum				/* keep in synch with ../cc/cc.h */
1697dd7cddfSDavid du Colombier {
1707dd7cddfSDavid du Colombier 	Plan9	= 1<<0,
1717dd7cddfSDavid du Colombier 	Unix	= 1<<1,
1727dd7cddfSDavid du Colombier 	Windows	= 1<<2,
1737dd7cddfSDavid du Colombier };
1747dd7cddfSDavid du Colombier int	mywait(int*);
1757dd7cddfSDavid du Colombier int	mycreat(char*, int);
1767dd7cddfSDavid du Colombier int	systemtype(int);
1777dd7cddfSDavid du Colombier int	pathchar(void);
1787dd7cddfSDavid du Colombier int	myfork(void);
1797dd7cddfSDavid du Colombier void*	mysbrk(ulong);
180