Let's try this.  It's BUGGERED.
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);