diff --git a/src/cmd/troff/fns.h b/src/cmd/troff/fns.h
new file mode 100644
index 0000000..6bd94ad
--- /dev/null
+++ b/src/cmd/troff/fns.h
@@ -0,0 +1,384 @@
+/*
+ * 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);
