/*
 * other
 */
int	pclose(FILE*);
long	filesize(int fd);
int	open(char *, int);
int	read(int, char *, int);
int	lseek(int, long, int);
int	close(int);
int	getpid(void);

/*
 * c1.c
 */
void	init0(void);
void	init2(void);
void	cvtime(void);
void	errprint(void);
int	control(int a, int b);
void	casept(void);
int	getrq(void);
Tchar	getch(void);
void	setxon(void);
Tchar	getch0(void);
Tchar	get1ch(FILE *);
void	pushback(Tchar *b);
void	cpushback(char *b);
int	nextfile(void);
int	popf(void);
void	flushi(void);
int	getach(void);
void	casenx(void);
int	getname(void);
void	caseso(void);
void	caself(void);
void	casecf(void);
void	getline(char *s, int n);
void	casesy(void);
void	getpn(char *a);
void	setrpt(void);

/*
 * n2.c
 */
int	pchar(Tchar i);
void	pchar1(Tchar i);
int	pchar2(Tchar i);
int	flusho(void);
void	casedone(void);
void	caseex(void);
void	done(int x);
void	done1(int x);
void	done2(int x);
void	done3(int x);
void	edone(int x);
void	casepi(void);

/*
 * c3.c
 */
void	blockinit(void);
char*	grow(char *, int, int);
void	mnspace(void);
void	caseig(void);
void	casern(void);
void	maddhash(Contab *rp);
void	munhash(Contab *mp);
void	mrehash(void);
void	caserm(void);
void	caseas(void);
void	caseds(void);
void	caseam(void);
void	casede(void);
int	findmn(int i);
void	clrmn(int i);
Offset	finds(int mn);
int	skip(void);
int	copyb(void);
void	copys(void);
Offset	alloc(void);
void	ffree(Offset i);
void	wbf(Tchar i);
Tchar	rbf(void);
Tchar	popi(void);
Offset	pushi(Offset newip, int mname);
void*	setbrk(int x);
int	getsn(void);
Offset	setstr(void);
void	collect(void);
void	seta(void);
void	caseda(void);
void	casegd(void);
void	casedi(void);
void	casedt(void);
void	casetl(void);
void	casepc(void);
void	casepm(void);
void	stackdump(void);

/*
 * c4.c
 */
void	setn(void);
int	wrc(Tchar i);
void	setn1(int i, int form, Tchar bits);
void	nnspace(void);
void	nrehash(void);
void	nunhash(Numtab *rp);
int	findr(int i);
int	usedr(int i);
int	fnumb(int i, int (*f)(Tchar));
int	decml(int i, int (*f)(Tchar));
int	roman(int i, int (*f)(Tchar));
int	roman0(int i, int (*f)(Tchar), char *onesp, char *fivesp);
int	abc(int i, int (*f)(Tchar));
int	abc0(int i, int (*f)(Tchar));
long	atoi0(void);
long	ckph(void);
long	atoi1(Tchar ii);
void	caserr(void);
void	casenr(void);
void	caseaf(void);
void	setaf(void);
int	vnumb(int *i);
int	hnumb(int *i);
int	inumb(int *n);
int	quant(int n, int m);

/*
 * c5.c
 */
void	casead(void);
void	casena(void);
void	casefi(void);
void	casenf(void);
void	casers(void);
void	casens(void);
int	chget(int c);
void	casecc(void);
void	casec2(void);
void	casehc(void);
void	casetc(void);
void	caselc(void);
void	casehy(void);
int	max(int aa, int bb);
void	casenh(void);
void	casece(void);
void	casein(void);
void	casell(void);
void	caselt(void);
void	caseti(void);
void	casels(void);
void	casepo(void);
void	casepl(void);
void	casewh(void);
void	casech(void);
int	findn(int i);
void	casepn(void);
void	casebp(void);
void	casextm(void);
void	casetm(void);
void	casefm(void);
void	casetm1(int ab, FILE *out);
void	casesp(void);
void	casesp1(int a);
void	casert(void);
void	caseem(void);
void	casefl(void);
void	caseev(void);
void	envcopy(Env *e1, Env *e2);
void	caseel(void);
void	caseie(void);
void	casexif(void);
void	caseif(void);
void	caseif1(int);
void	eatblk(int inblk);
int	cmpstr(Tchar c);
void	caserd(void);
int	rdtty(void);
void	caseec(void);
void	caseeo(void);
void	caseta(void);
void	casene(void);
void	casetr(void);
void	casecu(void);
void	caseul(void);
void	caseuf(void);
void	caseit(void);
void	casemc(void);
void	casemk(void);
void	casesv(void);
void	caseos(void);
void	casenm(void);
void	getnm(int *p, int min);
void	casenn(void);
void	caseab(void);
void	save_tty(void);
void	restore_tty(void);
void	set_tty(void);
void	echo_off(void);
void	echo_on(void);

/*
 * t6.c
 */
int	t_width(Tchar j);
void	zapwcache(int s);
int	onfont(int n, int f);
int	getcw(int i);
void	xbits(Tchar i, int bitf);
Tchar	t_setch(int c);
Tchar	t_setabs(void);
int	t_findft(int i);
void	caseps(void);
void	casps1(int i);
int	findps(int i);
void	t_mchbits(void);
void	t_setps(void);
Tchar	t_setht(void);
Tchar	t_setslant(void);
void	caseft(void);
void	t_setfont(int a);
void	t_setwd(void);
Tchar	t_vmot(void);
Tchar	t_hmot(void);
Tchar	t_mot(void);
Tchar	t_sethl(int k);
Tchar	t_makem(int i);
Tchar	getlg(Tchar i);
void	caselg(void);
void	casefp(void);
char	*strdupl(const char *);
int	setfp(int pos, int f, char *truename, int print);
void	casecs(void);
void	casebd(void);
void	casevs(void);
void	casess(void);
Tchar	t_xlss(void);
Uchar*	unpair(int i);
void	outascii(Tchar i);

/*
 * c7.c
 */
void	tbreak(void);
void	donum(void);
void	text(void);
void	nofill(void);
void	callsp(void);
void	ckul(void);
void	storeline(Tchar c, int w);
void	newline(int a);
int	findn1(int a);
void	chkpn(void);
int	findt(int a);
int	findt1(void);
void	eject(Stack *a);
int	movword(void);
void	horiz(int i);
void	setnel(void);
int	getword(int x);
void	storeword(Tchar c, int w);
Tchar	gettch(void);

/*
 * c8.c
 */
void	hyphen(Tchar *wp);
int	punct(Tchar i);
int	alph(int i);
void	caseha(void);
void	caseht(void);
void	casehw(void);
int	exword(void);
int	suffix(void);
int	maplow(int i);
int	vowel(int i);
Tchar*	chkvow(Tchar *w);
void	digram(void);
int	dilook(int a, int b, char t[26][13]);

/*
 * c9.c
 */
Tchar	setz(void);
void	setline(void);
int	eat(int c);
void	setov(void);
void	setbra(void);
void	setvline(void);
void	setdraw(void);
void	casefc(void);
Tchar	setfield(int x);

/*
 * t10.c
 */
void	t_ptinit(void);
void	t_specnames(void);
void	t_ptout(Tchar i);
int	ptout0(Tchar *pi);
void	ptchname(int);
void	ptflush(void);
void	ptps(void);
void	ptfont(void);
void	ptfpcmd(int f, char *s, char *fn);
void	t_ptlead(void);
void	ptesc(void);
void	ptpage(int n);
void	pttrailer(void);
void	ptstop(void);
void	t_ptpause(void);

/*
 * t11.c
 */
int	getdesc(char *name);
int	getfont(char *name, int pos);
int	chadd(char *s, int, int);
char*	chname(int n);
int	getlig(FILE *fin);

/*
 * n6.c
 */
int	n_width(Tchar j);
Tchar	n_setch(int c);
Tchar	n_setabs(void);
int	n_findft(int i);
void	n_mchbits(void);
void	n_setps(void);
Tchar	n_setht(void);
Tchar	n_setslant(void);
void	n_caseft(void);
void	n_setfont(int a);
void	n_setwd(void);
Tchar	n_vmot(void);
Tchar	n_hmot(void);
Tchar	n_mot(void);
Tchar	n_sethl(int k);
Tchar	n_makem(int i);
void	n_casefp(void);
void	n_casebd(void);
void	n_casevs(void);
Tchar	n_xlss(void);

/*
 * n10.c
 */
void	n_ptinit(void);
char*	skipstr(char *s);
char*	getstr(char *s, char *t);
char*	getint(char *s, int *pn);
void	twdone(void);
void	n_specnames(void);
int	findch(char *s);
void	n_ptout(Tchar i);
void	ptout1(void);
char*	plot(char *x);
void	move(void);
void	n_ptlead(void);
void	n_ptpause(void);

/*
 * indirect calls on TROFF/!TROFF.  these are variables!
 */
extern Tchar	(*hmot)(void);
extern Tchar	(*makem)(int i);
extern Tchar	(*setabs)(void);
extern Tchar	(*setch)(int c);
extern Tchar	(*sethl)(int k);
extern Tchar	(*setht)(void);
extern Tchar	(*setslant)(void);
extern Tchar	(*vmot)(void);
extern Tchar	(*xlss)(void);
extern int	(*findft)(int i);
extern int	(*width)(Tchar j);
extern void	(*mchbits)(void);
extern void	(*ptlead)(void);
extern void	(*ptout)(Tchar i);
extern void	(*ptpause)(void);
extern void	(*setfont)(int a);
extern void	(*setps)(void);
extern void	(*setwd)(void);
