xref: /plan9/sys/src/cmd/ka/a.h (revision 375daca8932d0755549a5f8e4d068a24a49927d4)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "../kc/k.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		500
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 	long	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 	long	offset;
66 	short	type;
67 	short	reg;
68 	short	xreg;
69 	short	name;
70 	double	dval;
71 	char	sval[8];
72 };
73 
74 struct	Hist
75 {
76 	Hist*	link;
77 	char*	name;
78 	long	line;
79 	long	offset;
80 };
81 #define	H	((Hist*)0)
82 
83 enum
84 {
85 	CLAST,
86 	CMACARG,
87 	CMACRO,
88 	CPREPROC,
89 };
90 
91 EXTERN	char	debug[256];
92 EXTERN	Sym*	hash[NHASH];
93 EXTERN	char*	Dlist[30];
94 EXTERN	int	nDlist;
95 EXTERN	Hist*	ehist;
96 EXTERN	int	newflag;
97 EXTERN	Hist*	hist;
98 EXTERN	char*	hunk;
99 EXTERN	char*	include[NINCLUDE];
100 EXTERN	Io*	iofree;
101 EXTERN	Io*	ionext;
102 EXTERN	Io*	iostack;
103 EXTERN	long	lineno;
104 EXTERN	int	nerrors;
105 EXTERN	long	nhunk;
106 EXTERN	int	ninclude;
107 EXTERN	int	nosched;
108 EXTERN	Gen	nullgen;
109 EXTERN	char*	outfile;
110 EXTERN	int	pass;
111 EXTERN	char*	pathname;
112 EXTERN	long	pc;
113 EXTERN	int	peekc;
114 EXTERN	int	sym;
115 EXTERN	char	symb[NSYMB];
116 EXTERN	int	thechar;
117 EXTERN	char*	thestring;
118 EXTERN	long	thunk;
119 EXTERN	Biobuf	obuf;
120 
121 void*	alloc(long);
122 void*	allocn(void*, long, long);
123 void	errorexit(void);
124 void	pushio(void);
125 void	newio(void);
126 void	newfile(char*, int);
127 Sym*	slookup(char*);
128 Sym*	lookup(void);
129 void	syminit(Sym*);
130 long	yylex(void);
131 int	getc(void);
132 int	getnsc(void);
133 void	unget(int);
134 int	escchar(int);
135 void	cinit(void);
136 void	pinit(char*);
137 void	cclean(void);
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	macprag(void);
150 void	maclin(void);
151 void	macif(int);
152 void	macend(void);
153 void	dodefine(char*);
154 void	prfile(long);
155 void	outhist(void);
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