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