forsyth20121205-174063a80cc13 years agoHistory
317 lines · 4.8 KB · C
RawDownload
/* acid.h */enum{	Eof		= -1,	Strsize		= 4096,	Hashsize	= 128,	Maxarg		= 512,	NFD		= 100,	Maxproc		= 50,	Maxval		= 10,	Mempergc	= 1024*1024,}; #pragma varargck type "L"	void typedef struct Node	Node;typedef struct String	String;typedef struct Lsym	Lsym;typedef struct List	List;typedef struct Store	Store;typedef struct Gc	Gc;typedef struct Strc	Strc;typedef struct Rplace	Rplace;typedef struct Ptab	Ptab;typedef struct Value	Value;typedef struct Type	Type;typedef struct Frtype	Frtype; Extern int	kernel;Extern int	remote;Extern int rdebug;Extern int remfd;Extern int	protodebug;Extern int	text;Extern int	silent;Extern Fhdr	fhdr;Extern int	line;Extern Biobuf*	bout;Extern Biobuf*	io[32];Extern int	iop;Extern char	symbol[Strsize];Extern int	interactive;Extern Node*	code;Extern int	na;Extern int	wtflag;Extern Map*	cormap;Extern Map*	symmap;Extern Lsym*	hash[Hashsize];Extern long	dogc;Extern Rplace*	ret;Extern char*	filename;Extern char*	aout;Extern int	gotint;Extern long	flen;Extern Gc*	gcl;Extern int	stacked;Extern jmp_buf	err;Extern Node*	prnt;Extern Node*	fomt;Extern List*	tracelist;Extern int	initialising;Extern int	quiet;extern void	(*expop[])(Node*, Node*);#define expr(n, r) (r)->nstore.comt=0; (*expop[(n)->op])(n, r); enum{	TINT,	TFLOAT,	TSTRING,	TLIST,	TCODE,}; struct Type{	Type*	next;	int	offset;	char	fmt;	char	depth;	Lsym*	type;	Lsym*	tag;	Lsym*	base;}; struct Frtype{	Lsym*	var;	Type*	type;	Frtype*	next;}; struct Ptab{	int	pid;	int	ctl;};Extern Ptab	ptab[Maxproc]; struct Rplace{	jmp_buf	rlab;	Node*	stak;	Node*	val;	Lsym*	local;	Lsym**	tail;}; struct Gc{	char	gcmark;	Gc*	gclink;}; struct Store{	char	fmt;	Type*	comt;	union {		vlong	sival;		double	sfval;		String*	sstring;		List*	sl;		Node*	scc;	} u0;}; struct List{	Gc	lgc;	List*	next;	char	type;	Store	lstore;}; struct Value{	char	set;	char	type;	Store	vstore;	Value*	pop;	Lsym*	scope;	Rplace*	ret;}; struct Lsym{	char*	name;	int	lexval;	Lsym*	hash;	Value*	v;	Type*	lt;	Node*	proc;	Frtype*	local;	void	(*builtin)(Node*, Node*);}; struct Node{	Gc	ngc;	char	op;	char	type;	Node*	left;	Node*	right;	Lsym*	sym;	Store	nstore;};#define ZN	(Node*)0 struct String{	Gc	sgc;	char	*string;	int	len;}; List*	addlist(List*, List*);List*	al(int);Node*	an(int, Node*, Node*);void	append(Node*, Node*, Node*);int	bool(Node*);void	build(Node*);void	call(char*, Node*, Node*, Node*, Node*);void	checkqid(int, int);void	cmd(void);Node*	con(int);List*	construct(Node*);void	ctrace(int);void	decl(Node*);void	defcomplex(Node*, Node*);void	deinstall(int);void	delete(List*, int n, Node*);void	detach(void);void	dostop(int);Lsym*	enter(char*, int);void	error(char*, ...);void	execute(Node*);void	fatal(char*, ...);ulong	findframe(ulong);void	flatten(Node**, Node*);void	gc(void);char*	getstatus(int);void*	gmalloc(long);void	indir(Map*, ulong, char, Node*);void install(int);void	installbuiltin(void);void	kinit(void);int	Lfmt(Fmt*);int	listcmp(List*, List*);int	listlen(List*);List*	listvar(char*, long);void	loadmodule(char*);void	loadvars(void);Lsym*	look(char*);void	ltag(char*);void	setup_os_notify(void);void	marklist(List*);Lsym*	mkvar(char*);void	msg(int, char*);void	notes(int);int	nproc(char**);void	nthelem(List*, int, Node*);int	numsym(char);void	odot(Node*, Node*);int	opentty(char*, int);void	closetty(int);void	pcode(Node*, int);void	pexpr(Node*);int	popio(void);void	pstr(String*);void	pushfile(char*);void	pushstr(Node*);ulong	raddr(char*);void	readtext(char*);int	remcondset(char, ulong);int	remcondstartstop(int);int	remget(struct segment*, ulong, long, char*, int);int	remoteio(int, char*, char*, int);int	remote_read(int, char*, int);int	remote_write(int, char*, int);int	remput(struct segment*, ulong, long, char*, int);void	restartio(void);uvlong	rget(Map*, char*);String	*runenode(Rune*);char*	runcmd(char*);int	scmp(String*, String*);void	setdbg_opt(char, int);int	sendremote(int, char*);void	sproc(int);String*	stradd(String*, String*);String*	strnode(char*);String*	strnodlen(char*, int);char*	mysystem(void);void	trlist(Map*, uvlong, uvlong, Symbol*);void	unwind(void);void	userinit(void);void	varreg(void);void	varsym(void);char*	waitfor(int);void	whatis(Lsym*);void	windir(Map*, Node*, Node*, Node*);void	yyerror(char*, ...);int	yylex(void);int	yyparse(void); enum{	ONAME,	OCONST,	OMUL,	ODIV,	OMOD,	OADD,	OSUB,	ORSH,	OLSH,	OLT,	OGT,	OLEQ,	OGEQ,	OEQ,	ONEQ,	OLAND,	OXOR,	OLOR,	OCAND,	OCOR,	OASGN,	OINDM,	OEDEC,	OEINC,	OPINC,	OPDEC,	ONOT,	OIF,	ODO,	OLIST,	OCALL,	OCTRUCT,	OWHILE,	OELSE,	OHEAD,	OTAIL,	OAPPEND,	ORET,	OINDEX,	OINDC,	ODOT,	OLOCAL,	OFRAME,	OCOMPLEX,	ODELETE,	OCAST,	OFMT,	OEVAL,	OWHAT,};