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