Checkpoint -- still merging with Taj's version of the world.
diff --git a/src/cmd/troff/dwbinit.c b/src/cmd/troff/dwbinit.c
index a63e5fd..59f74ec 100644
--- a/src/cmd/troff/dwbinit.c
+++ b/src/cmd/troff/dwbinit.c
@@ -143,6 +143,8 @@
 
 /*****************************************************************************/
 
+extern	char	*unsharp(char*);
+
 char *DWBhome(void)
 {
 
@@ -186,6 +188,7 @@
 	    if ( (home = DWBHOME) == NULL || *home == '\0' || *home == ' ' )
 		home = NULL;
 	}   /* End if */
+	home = unsharp(home);
     }	/* End if */
 
     while (home && *home == '/' && *(home +1) == '/')	/* remove extra slashes */
diff --git a/src/cmd/troff/ext.h b/src/cmd/troff/ext.h
index 4214788..5e18756 100644
--- a/src/cmd/troff/ext.h
+++ b/src/cmd/troff/ext.h
@@ -1,3 +1,5 @@
+#define	devname	p9_devname
+
 extern	int	TROFF;
 
 extern	int	alphabet;
diff --git a/src/cmd/troff/fns.h b/src/cmd/troff/fns.h
index 6bd94ad..087d4c8 100644
--- a/src/cmd/troff/fns.h
+++ b/src/cmd/troff/fns.h
@@ -1,6 +1,7 @@
 /*
  * other
  */
+#ifdef NOTDEF
 int	pclose(FILE*);
 long	filesize(int fd);
 int	open(char *, int);
@@ -8,6 +9,7 @@
 int	lseek(int, long, int);
 int	close(int);
 int	getpid(void);
+#endif
 
 /*
  * c1.c
diff --git a/src/cmd/troff/mbwc.c b/src/cmd/troff/mbwc.c
index 66a9821..8bc2e94 100644
--- a/src/cmd/troff/mbwc.c
+++ b/src/cmd/troff/mbwc.c
@@ -130,7 +130,7 @@
 size_t
 wcstombs(char *s, const wchar_t *pwcs, size_t n)
 {
-	int i, d;
+	int /*i,*/ d;
 	long c;
 	char *p, *pe;
 	char buf[3];
diff --git a/src/cmd/troff/n1.c b/src/cmd/troff/n1.c
index d0949fe..45e99f3 100644
--- a/src/cmd/troff/n1.c
+++ b/src/cmd/troff/n1.c
@@ -10,9 +10,6 @@
 #include "ext.h"
 #include "dwbinit.h"
 
-#undef MB_CUR_MAX
-#define MB_CUR_MAX 3
-
 #include <setjmp.h>
 #include <time.h>
 
@@ -50,6 +47,7 @@
 int	trace = 0;	/* tracing mode: default off */
 int	trace1 = 0;
 
+int
 main(int argc, char *argv[])
 {
 	char *p;
@@ -57,7 +55,7 @@
 	Tchar i;
 	char buf[100];
 
-	ifile = stdin;
+	ifile = stdin;		/* gcc */
 	ptid = stdout;
 
 	buf[0] = '\0';		/* make sure it's empty (silly 3b2) */
@@ -279,7 +277,7 @@
 
 void cvtime(void)
 {
-	long tt;
+	time_t tt;
 	struct tm *ltime;
 
 	time(&tt);
@@ -676,7 +674,6 @@
 
 Tchar getch0(void)
 {
-	int j;
 	Tchar i;
 
 again:
@@ -719,7 +716,7 @@
 			if (ip)
 				goto again;
 		}
-g2:
+//g2:
 		if (i >= 040)			/* zapped: && i < 0177 */
 			goto g4;
 		i = ifilt[i];
@@ -754,6 +751,7 @@
 		if ((n = mbtowc(&wc, buf, p-buf)) >= 0)
 			break;
 	}
+
 	if (n == 1)	/* real ascii, presumably */
 		return wc;
 	if (n == 0)
@@ -830,7 +828,7 @@
 	if (p[0] == '-' && p[1] == 0) {
 		ifile = stdin;
 		strcpy(cfname[ifi], "stdin");
-	} else if ((ifile = fopen(unsharp(p), "r")) == NULL) {
+	} else if ((ifile = fopen(p, "r")) == NULL) {
 		ERROR "cannot open file %s", p WARN;
 		nfo -= mflg;
 		done(02);
@@ -840,7 +838,7 @@
 	return(0);
 }
 
-
+int
 popf(void)
 {
 	--ifi;
@@ -874,6 +872,7 @@
  * (internal names), spaces and special cookies (below 040).
  * Leave STX ETX ENQ ACK and BELL in to maintain compatibility with v7 troff.
  */
+int
 getach(void)
 {
 	Tchar i;
@@ -913,11 +912,10 @@
 	nxf = frame + 1;
 }
 
-
+int
 getname(void)
 {
 	int j, k;
-	Tchar i;
 
 	lgf++;
 	for (k = 0; k < NS - 1; k++) {
@@ -934,12 +932,11 @@
 
 void caseso(void)
 {
-	FILE *fp;
-	char *p, *q;
+	FILE *fp = 0;
 
 	lgf++;
 	nextf[0] = 0;
-	if (skip() || !getname() || (fp = fopen(unsharp(nextf), "r")) == NULL || ifi >= NSO) {
+	if (skip() || !getname() || (fp = fopen(nextf, "r")) == NULL || ifi >= NSO) {
 		ERROR "can't open file %s", nextf WARN;
 		done(02);
 	}
@@ -1008,7 +1005,7 @@
 	nextf[0] = 0;
 	if (!skip() && getname()) {
 		if (strncmp("<<", nextf, 2) != 0) {
-			if ((fd = fopen(unsharp(nextf), "r")) == NULL) {
+			if ((fd = fopen(nextf, "r")) == NULL) {
 				ERROR "can't open file %s", nextf WARN;
 				done(02);
 			}
diff --git a/src/cmd/troff/n10.c b/src/cmd/troff/n10.c
index 0183cad..de2461d 100644
--- a/src/cmd/troff/n10.c
+++ b/src/cmd/troff/n10.c
@@ -74,14 +74,13 @@
 
 static int getnrfont(FILE *fp)	/* read the nroff description file */
 {
-	FILE *fin;
 	Chwid chtemp[NCHARS];
 	static Chwid chinit;
 	int i, nw, n, wid, code, type;
-	char buf[100], ch[100], s1[100], s2[100], cmd[300];
+	char buf[100], ch[100], s1[100], s2[100];
 	wchar_t wc;
 
-
+	code = 0;
 	chinit.wid = 1;
 	chinit.str = "";
 	for (i = 0; i < ALPHABET; i++) {
@@ -139,7 +138,7 @@
 void n_ptinit(void)
 {
 	int i;
-	char *p, *cp;
+	char *p;
 	char opt[50], cmd[100];
 	FILE *fp;
 
@@ -186,7 +185,7 @@
 	/* hyphalg = 0;	/* for testing */
 
 	strcat(termtab, devname);
-	if ((fp = fopen(unsharp(termtab), "r")) == NULL) {
+	if ((fp = fopen(termtab, "r")) == NULL) {
 		ERROR "cannot open %s", termtab WARN;
 		exit(-1);
 	}
diff --git a/src/cmd/troff/n2.c b/src/cmd/troff/n2.c
index 8164c03..22fd101 100644
--- a/src/cmd/troff/n2.c
+++ b/src/cmd/troff/n2.c
@@ -137,7 +137,6 @@
 
 void outascii(Tchar i)	/* print i in best-guess ascii */
 {
-	char *p;
 	int j = cbits(i);
 
 /* is this ever called with NROFF set? probably doesn't work at all. */
diff --git a/src/cmd/troff/n3.c b/src/cmd/troff/n3.c
index 6918d06..8279d74 100644
--- a/src/cmd/troff/n3.c
+++ b/src/cmd/troff/n3.c
@@ -64,7 +64,7 @@
 
 char *grow(char *ptr, int num, int size)	/* make array bigger */
 {
-	char *p, new;
+	char *p;
 
 	if (ptr == NULL)
 		p = (char *) calloc(num, size);
@@ -307,7 +307,6 @@
 Offset finds(int mn)
 {
 	int i;
-	Tchar j = IMP;
 	Offset savip;
 
 	oldmn = findmn(mn);
@@ -372,6 +371,7 @@
 	Offset savoff;
 	Uchar *p;
 
+	savoff = 0;
 	if (skip() || !(j = getrq()))
 		j = '.';
 	req = j;
diff --git a/src/cmd/troff/n4.c b/src/cmd/troff/n4.c
index 3b3698e..71162cc 100644
--- a/src/cmd/troff/n4.c
+++ b/src/cmd/troff/n4.c
@@ -141,7 +141,7 @@
  			for( i = 0; tabtab[i] != 0 && i < NTAB; i++) {
  				if (i > 0)
  					buf[j++] = ' ';
- 				sprintf(&buf[j], "%d", tabtab[i] & TABMASK);
+ 				sprintf(&buf[j], "%ld", tabtab[i] & TABMASK);
  				j = strlen(buf);
  				if ( tabtab[i] & RTAB)
  					sprintf(&buf[j], "uR");
diff --git a/src/cmd/troff/n5.c b/src/cmd/troff/n5.c
index c2801e4..ab5ef2e 100644
--- a/src/cmd/troff/n5.c
+++ b/src/cmd/troff/n5.c
@@ -78,11 +78,12 @@
 	dip->nls++;
 }
 
-
+int
 chget(int c)
 {
 	Tchar i;
 
+	i = 0;
 	if (skip() || ismot(i = getch()) || cbits(i) == ' ' || cbits(i) == '\n') {
 		ch = i;
 		return(c);
@@ -142,7 +143,7 @@
 	hyf = 0;
 }
 
-
+int
 max(int aa, int bb)
 {
 	if (aa > bb)
@@ -333,7 +334,7 @@
 	nlist[k] = i;
 }
 
-
+int
 findn(int i)
 {
 	int k;
@@ -408,7 +409,7 @@
 		return;
 	}
 	if (fcache[i].fp == NULL) {
-		if( (fcache[i].fp = fopen(unsharp(nextf), "w")) == NULL) {
+		if( (fcache[i].fp = fopen(nextf, "w")) == NULL) {
 			ERROR "fm: cannot open %s", nextf WARN;
 			return;
 		}
@@ -742,7 +743,7 @@
 	}
 }
 
-
+int
 cmpstr(Tchar c)
 {
 	int j, delim;
@@ -830,7 +831,7 @@
 	pushi(RD_OFFSET, PAIR('r','d'));
 }
 
-
+int
 rdtty(void)
 {
 	char	onechar;
diff --git a/src/cmd/troff/n6.c b/src/cmd/troff/n6.c
index e4affa1..2328d6a 100644
--- a/src/cmd/troff/n6.c
+++ b/src/cmd/troff/n6.c
@@ -7,6 +7,7 @@
  * n6.c -- width functions, sizes and fonts
 */
 
+int
 n_width(Tchar j)
 {
 	int i, k;
@@ -294,7 +295,7 @@
 {
 	int i, j, k;
 
-	k = 0;
+	j = k = 0;
 bd0:
 	if (skip() || !(i = getrq()) || (j = findft(i)) == -1) {
 		if (k)
diff --git a/src/cmd/troff/n7.c b/src/cmd/troff/n7.c
index c22a485..bcea354 100644
--- a/src/cmd/troff/n7.c
+++ b/src/cmd/troff/n7.c
@@ -354,6 +354,7 @@
 	int i, j, nlss;
 	int opn;
 
+	nlss = 0;
 	if (a)
 		goto nl1;
 	if (dip != d) {
@@ -445,7 +446,7 @@
 	}
 }
 
-
+int
 findn1(int a)
 {
 	int i, j;
@@ -477,7 +478,7 @@
 	}
 }
 
-
+int
 findt(int a)
 {
 	int i, j, k;
@@ -504,7 +505,7 @@
 	return(k);
 }
 
-
+int
 findt1(void)
 {
 	int i;
@@ -539,7 +540,7 @@
 		goto e1;
 }
 
-
+int
 movword(void)
 {
 	int w;
@@ -648,7 +649,7 @@
 	}
 }
 
-
+int
 getword(int x)
 {
 	int j, k;
@@ -656,6 +657,7 @@
 	int noword;
 	int obits;
 
+	j = 0;
 	noword = 0;
 	if (x)
 		if (pendw) {
diff --git a/src/cmd/troff/n8.c b/src/cmd/troff/n8.c
index d1be508..bace4aa 100644
--- a/src/cmd/troff/n8.c
+++ b/src/cmd/troff/n8.c
@@ -72,7 +72,7 @@
 		}
 }
 
-static alpha(Tchar i)	/* non-zero if really alphabetic */
+static int alpha(Tchar i)	/* non-zero if really alphabetic */
 {
 	if (ismot(i))
 		return 0;
@@ -82,7 +82,7 @@
 		return isalpha(cbits(i));
 }
 
-
+int
 punct(Tchar i)
 {
 	if (!i || alpha(i))
@@ -217,7 +217,7 @@
 	}
 }
 
-
+int
 suffix(void)
 {
 	Tchar *w;
@@ -269,7 +269,7 @@
 	goto again;
 }
 
-
+int
 maplow(int i)
 {
 	if (isupper(i)) 
@@ -277,7 +277,7 @@
 	return(i);
 }
 
-
+int
 vowel(int i)
 {
 	switch (i) {
@@ -310,7 +310,7 @@
 	Tchar *nhyend, *maxw;
 	int maxval;
 	extern char bxh[26][13], bxxh[26][13], xxh[26][13], xhx[26][13], hxx[26][13];
-
+        maxw = 0;
 again:
 	if (!(w = chkvow(hyend + 1)))
 		return;
@@ -341,7 +341,7 @@
 	goto again;
 }
 
-
+int
 dilook(int a, int b, char t[26][13])
 {
 	int i, j;
@@ -461,13 +461,19 @@
 	characters.  sigh.
 */
 
+extern	char	*unsharp(char*);
+
+static	char	*texhyphens;
+
 static int readpats(void)
 {
 	FILE *fp;
 	char buf[200], buf1[200];
 
-	if ((fp = fopen(unsharp(TEXHYPHENS), "r")) == NULL
-	 && (fp = fopen(unsharp(DWBalthyphens), "r")) == NULL) {
+	if(texhyphens == 0)
+		texhyphens = unsharp(TEXHYPHENS);
+	if ((fp = fopen(texhyphens, "r")) == NULL
+	 && (fp = fopen(DWBalthyphens, "r")) == NULL) {
 		ERROR "warning: can't find hyphen.tex" WARN;
 		return 0;
 	}
diff --git a/src/cmd/troff/n9.c b/src/cmd/troff/n9.c
index 5cd7064..3e3ad97 100644
--- a/src/cmd/troff/n9.c
+++ b/src/cmd/troff/n9.c
@@ -75,7 +75,7 @@
 	pushback(linebuf);
 }
 
-
+int
 eat(int c)
 {
 	int i;
@@ -341,6 +341,7 @@
 	int savepos;
 	static Tchar wbuf[] = { WORDSP, 0};
 
+	rchar = 0;
 	if (x == tabch) 
 		rchar = tabc | chbits;
 	else if (x ==  ldrch) 
diff --git a/src/cmd/troff/t10.c b/src/cmd/troff/t10.c
index 3e8026d..0022cc7 100644
--- a/src/cmd/troff/t10.c
+++ b/src/cmd/troff/t10.c
@@ -159,6 +159,7 @@
 	Tchar i;
 	int outsize;	/* size of object being printed */
 
+	w = 0;
 	outsize = 1;	/* default */
 	i = *pi;
 	k = cbits(i);
@@ -176,11 +177,11 @@
 		xpts = fbits(i);	/* sneaky, font bits as size bits */
 		if (xpts != mpts)
 			ptps();
-		OUT "x H %d\n", sbits(i) PUT;
+		OUT "x H %ld\n", sbits(i) PUT;
 		return(outsize);
 	}
 	if (k == SLANT) {
-		OUT "x S %d\n", sfbits(i)-180 PUT;
+		OUT "x S %ld\n", sfbits(i)-180 PUT;
 		return(outsize);
 	}
 	if (k == WORDSP) {
@@ -300,7 +301,7 @@
 			pi[1] = '~';
 		case DRAWSPLINE:	/* spline */
 		default:	/* something else; copy it like spline */
-			OUT "D%c %d %d", cbits(pi[1]), dx, dy PUT;
+			OUT "D%ld %d %d", cbits(pi[1]), dx, dy PUT;
 			hpos += dx;
 			vpos += dy;
 			if (cbits(pi[3]) == DRAWFCN || cbits(pi[4]) == DRAWFCN) {
diff --git a/src/cmd/troff/t11.c b/src/cmd/troff/t11.c
index 5511748..398d74d 100644
--- a/src/cmd/troff/t11.c
+++ b/src/cmd/troff/t11.c
@@ -17,13 +17,14 @@
 
 #define	eq(s1, s2)	(strcmp(s1, s2) == 0)
 
+int
 getdesc(char *name)
 {
 	FILE *fin;
 	char cmd[100], s[100];
 	int i, v;
 
-	if ((fin = fopen(unsharp(name), "r")) == NULL)
+	if ((fin = fopen(name, "r")) == NULL)
 		return -1;
 	while (fscanf(fin, "%s", cmd) != EOF) {
 		if (strcmp(cmd, "res") == 0) {
@@ -64,7 +65,7 @@
 	char buf[300], buf2[300];
 	int i, status = -1;
 
-	if ((fp = fopen(unsharp(name), "r")) == NULL)
+	if ((fp = fopen(name, "r")) == NULL)
 		return -1;
 	for (i = 1; i <= 10; i++) {
 		if (fgets(buf, sizeof buf, fp) == NULL)
@@ -85,6 +86,7 @@
 	
 }
 
+int
 getfont(char *name, int pos)	/* create width tab for font */
 {
 	FILE *fin;
@@ -94,10 +96,11 @@
 	int i, nw, n, wid, kern, code, type;
 	char buf[100], ch[100], s1[100], s2[100], s3[100], cmd[300];
 
+	nw = code = 0;
 	/* fprintf(stderr, "read font %s onto %d\n", name, pos); */
 	if (checkfont(name) == -1)
 		return -1;
-	if ((fin = fopen(unsharp(name), "r")) == NULL)
+	if ((fin = fopen(name, "r")) == NULL)
 		return -1;
 	for (i = 0; i < ALPHABET; i++)
 		chtemp[i] = chinit;	/* zero out to begin with */
@@ -189,6 +192,7 @@
 	return 1;
 }
 
+int
 chadd(char *s, int type, int install)	/* add s to global character name table; */
 {					/* or just look it up */
 
@@ -231,6 +235,7 @@
 		return "";
 }
 
+int
 getlig(FILE *fin)	/* pick up ligature list */
 {
 	int lig;
diff --git a/src/cmd/troff/t6.c b/src/cmd/troff/t6.c
index b778916..583d4aa 100644
--- a/src/cmd/troff/t6.c
+++ b/src/cmd/troff/t6.c
@@ -14,6 +14,7 @@
 int	bdtab[MAXFONTS+1];
 int	sbold = 0;
 
+int
 t_width(Tchar j)
 {
 	int i, k;
@@ -75,6 +76,7 @@
 		widcache[i].fontpts = 0;
 }
 
+int
 onfont(int n, int f)	/* is char n on font f? */
 {
 	int i;
@@ -108,6 +110,7 @@
 	return -1;	/* vanilla not found */
 }
 
+int
 getcw(int i)
 {
 	int k, n, x;
@@ -218,6 +221,7 @@
 	char temp[50];
 	char *s;
 
+	j = 0;
 	s = temp;
 	if (c == '(') {	/* \(xx */
 		if ((*s++ = getach()) == 0 || (*s++ = getach()) == 0)
@@ -283,7 +287,7 @@
  * 	returns -1 on error
  */
 
-
+int
 t_findft(int i)
 {
 	int k;
@@ -362,7 +366,7 @@
 	mchbits();
 }
 
-
+int
 findps(int i)
 {
 	int j, k;
@@ -396,6 +400,7 @@
 {
 	int i, j;
 
+	j = 0;
 	i = cbits(getch());
 	if (isdigit(i)) {		/* \sd or \sdd */
 		i -= '0';
@@ -703,10 +708,12 @@
 	return t;
 }
 
+int
 setfp(int pos, int f, char *truename, int print)	/* mount font f at position pos[0...nfonts] */
 {
 	char pathname[NS], shortname[NS], *sl;
 
+	sl = (char*)0;
 	zapwcache(0);
 	if (truename)
 		strcpy(shortname, truename);
@@ -780,6 +787,7 @@
 {
 	int i, j, k;
 
+	j=0;
 	if (!TROFF) {
 		n_casebd();
 		return;
diff --git a/src/cmd/troff/tdef.h b/src/cmd/troff/tdef.h
index e9e1f65..0b3f2b1 100644
--- a/src/cmd/troff/tdef.h
+++ b/src/cmd/troff/tdef.h
@@ -3,10 +3,13 @@
 #include <limits.h>
 #include <ctype.h>
 #include <string.h>
+#include <unistd.h>
+
+#undef MB_CUR_MAX
+#define MB_CUR_MAX 3
 
 #define	NROFF	(!TROFF)
 
-
 /* Site dependent definitions */
 
 #ifndef TMACDIR