#undef waitfor
#define waitfor mkwaitfor

void	addrule(char*, Word*, char*, Word*, int, int, char*);
void	addrules(Word*, Word*, char*, int, int, char*);
void	addw(Word*, char*);
void	assert(char*, int);
int	assline(Biobuf *, Bufblock *);
long	atimeof(int,char*);
void	atouch(char*);
void	bufcpy(Bufblock *, char *, int);
Envy	*buildenv(Job*, int);
void	catchnotes(void);
int	chgtime(char*);
void	clrmade(Node*);
void	delete(char*);
void	delword(Word*);
int	dorecipe(Node*);
void	dumpa(char*, Arc*);
void	dumpj(char*, Job*, int);
void	dumpn(char*, Node*);
void	dumpr(char*, Rule*);
void	dumpv(char*);
void	dumpw(char*, Word*);
void	execinit(void);
int	execsh(char*, char*, Bufblock*, Envy*, Shell*, Word*);
void	Exit(void);
void	expunge(int, char*);
void	freebuf(Bufblock*);
void	front(char*);
Node	*graph(char*);
void	growbuf(Bufblock *);
void	initenv(void);
void	initshell(void);
void	insert(Bufblock *, int);
void	ipop(void);
void	ipush(void);
void	killchildren(char*);
void	*Malloc(int);
char	*maketmp(int*);
int	match(char*, char*, char*, Shell*);
char *membername(char*, int, char*);
void	mk(char*);
unsigned long	mkmtime(char*);
long	mtime(char*);
Arc	*newarc(Node*, Rule*, char*, Resub*);
Bufblock *newbuf(void);
Job	*newjob(Rule*, Node*, char*, char**, Word*, Word*, Word*, Word*);
Word	*newword(char*);
int	nextrune(Biobuf*, int);
int	nextslot(void);
void	nproc(void);
void	nrep(void);
int	outofdate(Node*, Arc*, int);
void	parse(char*, int, int);
int	pipecmd(char*, Envy*, int*, Shell*, Word*);
void	popshell(void);
void	prusage(void);
void	pushshell(void);
void	rcopy(char**, Resub*, int);
void	readenv(void);
void	*Realloc(void*, int);
void	rinsert(Bufblock *, Rune);
char	*rulecnt(void);
void	run(Job*);
char	*setshell(Word*);
void	setvar(char*, void*);
int	shargv(Word*, int, char***);
char	*shname(char*);
void	shprint(char*, Envy*, Bufblock*, Shell*);
Word	*stow(char*);
void	subst(char*, char*, char*);
void	symdel(char*, int);
void	syminit(void);
Symtab	*symlook(char*, int, void*);
void	symstat(void);
void	symtraverse(int, void(*)(Symtab*));
void	timeinit(char*);
long	timeof(char*, int);
void	touch(char*);
void	update(int, Node*);
void	usage(void);
Word	*varsub(char**);
int	waitfor(char*);
int	waitup(int, int*);
Word	*wdup(Word*);
int	work(Node*, Node*, Arc*);
char	*wtos(Word*, int);
