void	addrule(char*, Word*, char*, Word*, int, int, char*);
void	addrules(Word*, Word*, char*, int, int, char*);
int	assline(Biobuf *, Bufblock *);
long	atimeof(int,char*);
void	atouch(char*);
void	bufcpy(Bufblock *, char *);
void	bufcpyq(Bufblock *, char *);
void	bufcpyw(Bufblock *, Word *);
void	bufncpy(Bufblock *, char *, int);
Symtab	**buildenv(Job*, int);
void	catchnotes(void);
char 	*charin(char *, char *);
int	chgtime(char*);
void	clrmade(Node*);
char	*copyq(char*, Rune, Bufblock*);
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*);
int	empty(Word*);
int	escapetoken(Biobuf*, Bufblock*, int, int);
Symtab	**execinit(void);
int	execsh(char*, char*, Symtab**, Bufblock*);
void	Exit(void);
char	*expandquote(char*, Rune, Bufblock*);
void	expunge(int, char*);
void	freearc(Arc*);
void	freebuf(Bufblock*);
void	freejob(Job*);
void	front(char*);
Word	*getvar(char*);
Node	*graph(char*);
void	growbuf(Bufblock *);
void	initenv(void);
void	insert(Bufblock *, int);
void	killchildren(char*);
void	*Malloc(int);
int	match(char*, char*, char*);
void	mk(char*);
ulong	mkmtime(char*, int);
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	pipecmd(char*, char*, Symtab**, int*);
Word	*popword(Word*);
void	prusage(void);
void	rcopy(char**, Resub*, int);
void	readenv(void);
void	*Realloc(void*, int);
void	rinsert(Bufblock *, Rune);
char	*rulecnt(void);
void	run(Job*);
void	setvar(char*, Word*);
char	*shname(char*);
void	shprint(char*, Bufblock*);
Word	*stow(char*);
char	*Strdup(char*);
void	subst(char*, char*, char*, int);
Symtab	*symlook(char*, int, int);
void	symtraverse(int, void(*)(Symtab*));
void	timeinit(char*);
long	timeof(char*, int);
void	touch(char*);
void	update(int, Node*);
void	usage(void);
void	varoverride(char*);
Word	*varsub(char**);
int	wadd(Word**, char*);
int	waitfor(char*);
int	waitup(int, int*);
int	wcmp(Word*, Word*);
Word	*wdup(Word*);
int	work(Node*, Node*, Arc*);
char	*wtos(Word*);
