diff --git a/src/cmd/postscript/tr2post/Bgetfield.c b/src/cmd/postscript/tr2post/Bgetfield.c
index 974fce6..fc0dfc1 100644
--- a/src/cmd/postscript/tr2post/Bgetfield.c
+++ b/src/cmd/postscript/tr2post/Bgetfield.c
@@ -4,6 +4,9 @@
 #include "../common/common.h"
 #include "tr2post.h"
 
+#undef isspace
+#define isspace risspace
+
 int
 isspace(Rune r)
 {
@@ -11,9 +14,8 @@
 }
 
 int
-Bskipws(Biobufhdr *bp) {
+Bskipws(Biobuf *bp) {
 	int r;
-	char c[UTFmax];
 	int sindex = 0;
 
 	/* skip over initial white space */
@@ -54,7 +56,7 @@
  */
 
 int
-Bgetfield(Biobufhdr *bp, int type, void *thing, int size) {
+Bgetfield(Biobuf *bp, int type, void *thing, int size) {
 	int r;
 	Rune R;
 	char c[UTFmax];
@@ -65,6 +67,8 @@
 	int dig;
 	unsigned int u = 0;
 
+	r = 0;
+
 	/* skip over initial white space */
 	if (Bskipws(bp) < 0)
 		return(-1);
diff --git a/src/cmd/postscript/tr2post/chartab.c b/src/cmd/postscript/tr2post/chartab.c
index 89bf0ff..8b831d3 100644
--- a/src/cmd/postscript/tr2post/chartab.c
+++ b/src/cmd/postscript/tr2post/chartab.c
@@ -120,17 +120,17 @@
 	return(-1);
 }
 
-char postroffdirname[] = LIBDIR "/postscript/troff";		/* "/sys/lib/postscript/troff/"; */
-char troffmetricdirname[] = LIBDIR "/troff/font";	/* "/sys/lib/troff/font/devutf/"; */
+char postroffdirname[] = "#9/postscript/troff";		/* "/sys/lib/postscript/troff/"; */
+char troffmetricdirname[] = "#9/troff/font";	/* "/sys/lib/troff/font/devutf/"; */
 
 int
 readpsfontdesc(char *fontname, int trindex) {
 	static char *filename = 0;
 	Biobuf *bfd;
-	Biobufhdr *Bfd;
-	int warn = 0, errorflg = 0, line =1, rv;
+	Biobuf *Bfd;
+	int errorflg = 0, line =1, rv;
 	int start, end, offset;
-	int startfont, endfont, startchar, endchar, i, pfid;
+	int startfont, endfont, startchar, endchar, pfid;
 	char psfontnam[128];
 	struct troffont *tp;
 /*	struct charent *cp[]; */
@@ -139,7 +139,7 @@
 	filename=galloc(filename, strlen(postroffdirname)+1+strlen(fontname)+1, "readpsfontdesc: cannot allocate memory\n");
 	sprint(filename, "%s/%s", postroffdirname, fontname);
 
-	bfd = Bopen(filename, OREAD);
+	bfd = Bopen(unsharp(filename), OREAD);
 	if (bfd == 0) {
 		error(WARNING, "cannot open file %s\n", filename);
 		return(0);
@@ -212,9 +212,8 @@
 readtroffmetric(char *fontname, int trindex) {
 	static char *filename = 0;
 	Biobuf *bfd;
-	Biobufhdr *Bfd;
-	int warn = 0, errorflg = 0, line =1, rv;
-	struct troffont *tp;
+	Biobuf *Bfd;
+	int errorflg = 0, line =1, rv;
 	struct charent **cp;
 	char stoken[128], *str;
 	int ntoken;
@@ -226,7 +225,7 @@
 	filename=galloc(filename, strlen(troffmetricdirname)+4+strlen(devname)+1+strlen(fontname)+1, "readtroffmetric():filename");
 	sprint(filename, "%s/dev%s/%s", troffmetricdirname, devname, fontname);
 
-	bfd = Bopen(filename, OREAD);
+	bfd = Bopen(unsharp(filename), OREAD);
 	if (bfd == 0) {
 		error(WARNING, "cannot open file %s\n", filename);
 		return(0);
diff --git a/src/cmd/postscript/tr2post/conv.c b/src/cmd/postscript/tr2post/conv.c
index ebc1f43..25575cc 100644
--- a/src/cmd/postscript/tr2post/conv.c
+++ b/src/cmd/postscript/tr2post/conv.c
@@ -5,8 +5,8 @@
 #include "tr2post.h"
 
 void
-conv(Biobufhdr *Bp) {
-	long c, n;
+conv(Biobuf *Bp) {
+	long n;
 	int r;
 	char special[10];
 	int save;
diff --git a/src/cmd/postscript/tr2post/devcntl.c b/src/cmd/postscript/tr2post/devcntl.c
index 2566229..f0a9800 100644
--- a/src/cmd/postscript/tr2post/devcntl.c
+++ b/src/cmd/postscript/tr2post/devcntl.c
@@ -51,10 +51,10 @@
 */
 
 void
-devcntl(Biobufhdr *inp) {
+devcntl(Biobuf *inp) {
 
 	char cmd[50], buf[256], str[MAXTOKENSIZE], *line;
-	int c, n, linelen;
+	int c, n;
 
 /*
  *
diff --git a/src/cmd/postscript/tr2post/draw.c b/src/cmd/postscript/tr2post/draw.c
index 0cb368a..ace749e 100644
--- a/src/cmd/postscript/tr2post/draw.c
+++ b/src/cmd/postscript/tr2post/draw.c
@@ -13,7 +13,7 @@
 }
 
 void
-drawspline(Biobufhdr *Bp, int flag) {	/* flag!=1 connect end points */
+drawspline(Biobuf *Bp, int flag) {	/* flag!=1 connect end points */
 	int x[100], y[100];
 	int i, N;
 /*
@@ -96,7 +96,7 @@
 }
 
 void
-draw(Biobufhdr *Bp) {
+draw(Biobuf *Bp) {
 
 	int r, x1, y1, x2, y2, i;
 	int d1, d2;
@@ -234,7 +234,7 @@
 static void
 parsebuf(char *buf)
 {
-	char	*p;			/* usually the next token */
+	char	*p = (char*)0;			/* usually the next token */
 	char *q;
 	int		gsavelevel = 0;		/* non-zero if we've done a gsave */
 
diff --git a/src/cmd/postscript/tr2post/mkfile b/src/cmd/postscript/tr2post/mkfile
index e1e5aec..4a5f47d 100644
--- a/src/cmd/postscript/tr2post/mkfile
+++ b/src/cmd/postscript/tr2post/mkfile
@@ -28,6 +28,8 @@
 
 BIN=$POSTBIN
 
+LIB=../common/libcom.a
+
 <$PLAN9/src/mkone
 
 CFLAGS=$CFLAGS -c -D'PROGRAMVERSION="0.1"' -D'DOROUND=1' -I$COMMONDIR
diff --git a/src/cmd/postscript/tr2post/pictures.c b/src/cmd/postscript/tr2post/pictures.c
index 8d758cb..1246bcf 100644
--- a/src/cmd/postscript/tr2post/pictures.c
+++ b/src/cmd/postscript/tr2post/pictures.c
@@ -50,8 +50,8 @@
 /* #include "ext.h" */
 
 Biobuf	*bfp_pic = NULL;
-Biobufhdr	*Bfp_pic;
-Biobufhdr	*picopen(char *);
+Biobuf	*Bfp_pic;
+Biobuf	*picopen(char *);
 
 #define MAXGETFIELDS	16
 char *fields[MAXGETFIELDS];
@@ -63,7 +63,7 @@
 /*****************************************************************************/
 
 void
-picture(Biobufhdr *inp, char *buf) {
+picture(Biobuf *inp, char *buf) {
 	int	poffset;		/* page offset */
 	int	indent;		/* indent */
 	int	length;		/* line length  */
@@ -80,7 +80,7 @@
 	double	adjx = 0.5;	/* left-right adjustment */
 	double	adjy = 0.5;	/* top-bottom adjustment */
 	double	rot = 0;	/* rotation in clockwise degrees */
-	Biobufhdr	*fp_in;	/* for *name */
+	Biobuf	*fp_in;	/* for *name */
 	int	i;			/* loop index */
 
 /*
@@ -195,13 +195,13 @@
  * open file *path and return the resulting file pointer to the caller.
  *
  */
-Biobufhdr *
+Biobuf *
 picopen(char *path) {
 /*	char	name[100];	/* pathnames */
 /*	long	pos;			/* current position */
 /*	long	total;			/* and sizes - from *fp_pic */
 	Biobuf *bfp;
-	Biobufhdr	*Bfp;		/* and pointer for the new temp file */
+	Biobuf	*Bfp;		/* and pointer for the new temp file */
 
 
 	if ((bfp = Bopen(path, OREAD)) == 0)
@@ -285,7 +285,7 @@
 /*	*fp_out;	and output file pointers */
 /*	total;		number of bytes to be copied */
 void
-piccopy(Biobufhdr *Bfp_in, Biobufhdr *Bfp_out, long total) {
+piccopy(Biobuf *Bfp_in, Biobuf *Bfp_out, long total) {
 	long i;
 
 	for (i = 0; i < total; i++)
diff --git a/src/cmd/postscript/tr2post/ps_include.c b/src/cmd/postscript/tr2post/ps_include.c
index 27d020a..8ab840f 100644
--- a/src/cmd/postscript/tr2post/ps_include.c
+++ b/src/cmd/postscript/tr2post/ps_include.c
@@ -11,9 +11,8 @@
 typedef struct {long start, end;} Section;
 static char *buf;
 
-static
-copy(Biobufhdr *fin, Biobufhdr *fout, Section *s) {
-	int cond;
+static void
+copy(Biobuf *fin, Biobuf *fout, Section *s) {
 	if (s->end <= s->start)
 		return;
 	Bseek(fin, s->start, 0);
@@ -57,7 +56,7 @@
 /*	rot;			/* rotation - in clockwise degrees */
 
 void
-ps_include(Biobufhdr *fin, Biobufhdr *fout, int page_no, int whiteout,
+ps_include(Biobuf *fin, Biobuf *fout, int page_no, int whiteout,
 	int outline, int scaleboth, double cx, double cy, double sx, double sy,
 	double ax, double ay, double rot) {
 	char		**strp;
@@ -66,7 +65,7 @@
 	int		nglobal = 0;		/* number of global defs so far */
 	int		maxglobal = 0;		/* and the number we've got room for */
 	Section	prolog, page, trailer;	/* prologue, page, and trailer offsets */
-	Section	*global;		/* offsets for all global definitions */
+	Section	*global = 0;		/* offsets for all global definitions */
 	double	llx, lly;		/* lower left and */
 	double	urx, ury;		/* upper right corners - default coords */
 	double	w = whiteout != 0;	/* mostly for the var() macro */
diff --git a/src/cmd/postscript/tr2post/readDESC.c b/src/cmd/postscript/tr2post/readDESC.c
index 4dbc193..600fc17 100644
--- a/src/cmd/postscript/tr2post/readDESC.c
+++ b/src/cmd/postscript/tr2post/readDESC.c
@@ -44,7 +44,7 @@
 	char *descnameformat = "%s/dev%s/DESC";
 	char *descfilename = 0;
 	Biobuf *bfd;
-	Biobufhdr *Bfd;
+	Biobuf *Bfd;
 	int i, state = -1;
 	int fontindex = 0;
 
@@ -52,7 +52,7 @@
 	descfilename = galloc(descfilename, strlen(descnameformat)+strlen(FONTDIR)
 		+strlen(devname), "readdesc");
 	sprint(descfilename, descnameformat, FONTDIR, devname);
-	if ((bfd = Bopen(descfilename, OREAD)) == 0) {
+	if ((bfd = Bopen(unsharp(descfilename), OREAD)) == 0) {
 		error(WARNING, "cannot open file %s\n", descfilename);
 		return(0);
 	}
@@ -136,4 +136,5 @@
 		}
 	}
 	Bterm(Bfd);
+	return 0;
 }
diff --git a/src/cmd/postscript/tr2post/tr2post.c b/src/cmd/postscript/tr2post/tr2post.c
index acfe604..5a22ac7 100644
--- a/src/cmd/postscript/tr2post/tr2post.c
+++ b/src/cmd/postscript/tr2post/tr2post.c
@@ -23,6 +23,10 @@
 Biobuf *Bstdin, *Bstdout, *Bstderr;
 int debug = 0;
 
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 255
+#endif
+
 char tmpfilename[MAXPATHLEN+1];
 char copybuf[BUFSIZ];
 
@@ -41,20 +45,20 @@
 	Bprint(Bstdout, "%s %s\n", PAGES, ATEND);
 	Bprint(Bstdout, "%s", ENDCOMMENTS);
 
-	if (cat(DPOST)) {
+	if (cat(unsharp(DPOST))) {
 		Bprint(Bstderr, "can't read %s\n", DPOST);
 		exits("dpost prologue");
 	}
 
 	if (drawflag) {
-		if (cat(DRAW)) {
+		if (cat(unsharp(DRAW))) {
 			Bprint(Bstderr, "can't read %s\n", DRAW);
 			exits("draw prologue");
 		}
 	}
 
 	if (DOROUND)
-		cat(ROUNDPAGE);
+		cat(unsharp(ROUNDPAGE));
 
 	Bprint(Bstdout, "%s", ENDPROLOG);
 	Bprint(Bstdout, "%s", BEGINSETUP);
@@ -70,19 +74,19 @@
 	if (pointsize != 10) Bprint(Bstdout, "/pointsize %d def\n", pointsize);
 	if (xoffset != .25) Bprint(Bstdout, "/xoffset %g def\n", xoffset);
 	if (yoffset != .25) Bprint(Bstdout, "/yoffset %g def\n", yoffset);
-	cat(ENCODINGDIR"/Latin1.enc");
+	cat(unsharp(ENCODINGDIR"/Latin1.enc"));
 	if (passthrough != 0) Bprint(Bstdout, "%s\n", passthrough);
 
 	Bprint(Bstdout, "setup\n");
 	if (formsperpage > 1) {
-		cat(FORMFILE);
+		cat(unsharp(FORMFILE));
 		Bprint(Bstdout, "%d setupforms \n", formsperpage);
 	}
 /* output Build character info from charlib if necessary. */
 
 	for (i=0; i<build_char_cnt; i++) {
 		sprint(charlibname, "%s/%s", CHARLIB, build_char_list[i]->name);
-		if (cat(charlibname))
+		if (cat(unsharp(charlibname)))
 		Bprint(Bstderr, "cannot open %s\n", charlibname);
 	}
 
@@ -94,10 +98,11 @@
 	remove(tmpfilename);
 }
 
+int
 main(int argc, char *argv[]) {
 	Biobuf btmp;
 	Biobuf *binp;
-	Biobufhdr *Binp;
+	Biobuf *Binp;
 	int i, tot, ifd, fd;
 	char *t;
 
@@ -217,4 +222,5 @@
 	finish();
 		
 	exits("");
+	return 0;
 }
diff --git a/src/cmd/postscript/tr2post/tr2post.h b/src/cmd/postscript/tr2post/tr2post.h
index 68299cc..3f557b9 100644
--- a/src/cmd/postscript/tr2post/tr2post.h
+++ b/src/cmd/postscript/tr2post/tr2post.h
@@ -1,6 +1,6 @@
 #define MAXSPECHARS 	512
 #define MAXTOKENSIZE	128
-#define CHARLIB	FONTDIR "/devutf/charlib"
+#define CHARLIB	"#9/troff/font/devutf/charlib"
 
 /* devname clashes with libc on *BSD */
 #define devname		troff_devname
diff --git a/src/cmd/postscript/tr2post/utils.c b/src/cmd/postscript/tr2post/utils.c
index e9979ff..9b51d03 100644
--- a/src/cmd/postscript/tr2post/utils.c
+++ b/src/cmd/postscript/tr2post/utils.c
@@ -88,12 +88,13 @@
 glyphout(Rune rune, char *stoken, BOOLEAN specialflag) {
 	struct charent **cp;
 	struct troffont *tfp;
-	struct psfent *psfp;
+	struct psfent *psfp = (struct psfent*)0;
 	int i, t;
 	int fontid;	/* this is the troff font table index, not the mounted font table index */
-	int mi, fi, wid;
+	int mi, wid;
 	Rune r;
 
+	mi = 0;
 	settrfont();
 
 	/* check current font for the character, special or not */
@@ -187,8 +188,6 @@
 	if (t == 0x0001) {	/* character is in charlib */
 		endstring();
 		if (pageon()) {
-			struct charent *tcp;
-
 			Bprint(Bstdout, "%d %d m ", hpos, vpos);
 			/* if char is unicode character rather than name, clean up for postscript */
 			wid = chartorune(&r, (*cp)->name);
@@ -250,7 +249,7 @@
 }
 
 void
-graphfunc(Biobufhdr *bp) {
+graphfunc(Biobuf *bp) {
 }
 
 long
