xref: /plan9/sys/src/cmd/5a/a.h (revision 27acba7cf6d37c65abba4ecf8ad572a5980447ad)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "../5c/5.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 	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	name;
69 	double	dval;
70 	char	sval[8];
71 };
72 
73 struct	Hist
74 {
75 	Hist*	link;
76 	char*	name;
77 	long	line;
78 	long	offset;
79 };
80 #define	H	((Hist*)0)
81 
82 enum
83 {
84 	CLAST,
85 	CMACARG,
86 	CMACRO,
87 	CPREPROC,
88 
89 	Always	= 14,
90 };
91 
92 EXTERN	char	debug[256];
93 EXTERN	Sym*	hash[NHASH];
94 EXTERN	char*	Dlist[30];
95 EXTERN	int	nDlist;
96 EXTERN	Hist*	ehist;
97 EXTERN	int	newflag;
98 EXTERN	Hist*	hist;
99 EXTERN	char*	hunk;
100 EXTERN	char*	include[NINCLUDE];
101 EXTERN	Io*	iofree;
102 EXTERN	Io*	ionext;
103 EXTERN	Io*	iostack;
104 EXTERN	long	lineno;
105 EXTERN	int	nerrors;
106 EXTERN	long	nhunk;
107 EXTERN	int	ninclude;
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 int	isreg(Gen*);
139 void	outcode(int, int, Gen*, int, Gen*);
140 void	zname(char*, int, int);
141 void	zaddr(Gen*, int);
142 void	ieeedtod(Ieee*, double);
143 int	filbuf(void);
144 Sym*	getsym(void);
145 void	domacro(void);
146 void	macund(void);
147 void	macdef(void);
148 void	macexpand(Sym*, char*);
149 void	macinc(void);
150 void	maclin(void);
151 void	macprag(void);
152 void	macif(int);
153 void	macend(void);
154 void	outhist(void);
155 void	dodefine(char*);
156 void	prfile(long);
157 void	linehist(char*, int);
158 void	gethunk(void);
159 void	yyerror(char*, ...);
160 int	yyparse(void);
161 void	setinclude(char*);
162 int	assemble(char*);
163 
164 /*
165  *	system-dependent stuff from ../cc/compat.c
166  */
167 
168 enum				/* keep in synch with ../cc/cc.h */
169 {
170 	Plan9	= 1<<0,
171 	Unix	= 1<<1,
172 	Windows	= 1<<2,
173 };
174 int	mywait(int*);
175 int	mycreat(char*, int);
176 int	systemtype(int);
177 int	pathchar(void);
178 int	myfork(void);
179 void*	mysbrk(ulong);
180