tr2post and aux/download; download is a shell script in $PLAN9/bin.
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