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