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