Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bio.h>
4
#include "../6c/6.out.h"
5
 
6
 
7
#ifndef	EXTERN
8
#define	EXTERN	extern
9
#endif
10
 
11
typedef	struct	Sym	Sym;
12
typedef	struct	Ref	Ref;
13
typedef	struct	Gen	Gen;
14
typedef	struct	Io	Io;
15
typedef	struct	Hist	Hist;
16
typedef	struct	Gen2 	Gen2;
17
 
18
#define	MAXALIGN	7
19
#define	FPCHIP		1
20
#define	NSYMB		500
21
#define	BUFSIZ		8192
22
#define	HISTSZ		20
23
#define	NINCLUDE	10
24
#define	NHUNK		10000
25
#define	EOF		(-1)
26
#define	IGN		(-2)
27
#define	GETC()		((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
28
#define	NHASH		503
29
#define	STRINGSZ	200
30
#define	NMACRO		10
31
 
32
struct	Sym
33
{
34
	Sym*	link;
35
	Ref*	ref;
36
	char*	macro;
37
	vlong	value;
38
	ushort	type;
39
	char	*name;
40
	char	sym;
41
};
42
#define	S	((Sym*)0)
43
 
44
struct	Ref
45
{
46
	int	class;
47
};
48
 
49
EXTERN struct
50
{
51
	char*	p;
52
	int	c;
53
} fi;
54
 
55
struct	Io
56
{
57
	Io*	link;
58
	char	b[BUFSIZ];
59
	char*	p;
60
	short	c;
61
	short	f;
62
};
63
#define	I	((Io*)0)
64
 
65
EXTERN struct
66
{
67
	Sym*	sym;
68
	short	type;
69
} h[NSYM];
70
 
71
struct	Gen
72
{
73
	double	dval;
74
	char	sval[8];
75
	vlong	offset;
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
	vlong	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
 *	Posix.c/Inferno.c/Nt.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);