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