diff --git a/src/cmd/tbl/t.h b/src/cmd/tbl/t.h
index ba9cd79..efcab37 100644
--- a/src/cmd/tbl/t.h
+++ b/src/cmd/tbl/t.h
@@ -1,9 +1,9 @@
 /* t..c : external declarations */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+# include <ctype.h>
 
 # define MAXLIN 250
 # define MAXHEAD 44
@@ -62,7 +62,7 @@
 extern int linstart;
 
 
-extern FILE *tabin, *tabout;
+extern Biobuf *tabin, tabout;
 # define CRIGHT 2
 # define CLEFT 0
 # define CMID 1
diff --git a/src/cmd/tbl/t0.c b/src/cmd/tbl/t0.c
index 5121870..0c0895b 100644
--- a/src/cmd/tbl/t0.c
+++ b/src/cmd/tbl/t0.c
@@ -45,5 +45,5 @@
 char texstr[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789";
 int linstart;
 char *exstore, *exlim, *exspace;
-FILE *tabin;
-FILE *tabout;
+Biobuf *tabin  /*= stdin */;
+Biobuf tabout  /* = stdout */;
diff --git a/src/cmd/tbl/t1.c b/src/cmd/tbl/t1.c
index aff5f3d..1e6cbf1 100644
--- a/src/cmd/tbl/t1.c
+++ b/src/cmd/tbl/t1.c
@@ -8,17 +8,10 @@
 
 # define ever (;;)
 
-int
+void
 main(int argc, char *argv[])
 {
-	tabin = stdin;
-	tabout = stdout;
-
-	if(tbl(argc, argv)){
-		fprintf(stderr, "error");
-		return 1;
-	}
-	return 0;
+	exits(tbl(argc, argv)? "error" : 0);
 }
 
 
@@ -28,14 +21,14 @@
 	char	line[5120];
 	/*int x;*/
 	/*x=malloc((char *)0);	uncomment when allocation breaks*/
-	/*Binit(&tabout, 1, OWRITE); /* tabout=stdout */
+	Binit(&tabout, 1, OWRITE);
 	setinp(argc, argv);
 	while (gets1(line, sizeof(line))) {
-		fprintf(tabout, "%s\n", line);
+		Bprint(&tabout, "%s\n", line);
 		if (prefix(".TS", line))
 			tableput();
 	}
-	fclose(tabin);
+	Bterm(tabin);
 	return(0);
 }
 
@@ -52,8 +45,10 @@
 	sargv++;
 	if (sargc > 0)
 		swapin();
-	else
-		tabin = stdin;
+	else {
+		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
+		Binit(tabin, 0, OREAD);
+	}
 }
 
 
@@ -81,16 +76,17 @@
 		return(0);
 	/* file closing is done by GCOS troff preprocessor */
 	if(tabin)
-		fclose(tabin);
+		Bterm(tabin);
 	ifile = *sargv;
 	name = ifile;
 	if (match(ifile, "-")) {
-		tabin = stdin;
+		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
+		Binit(tabin, 0, OREAD);
 	} else
-		tabin = fopen(ifile, "r");
+		tabin = Bopen(ifile, OREAD);
 	iline = 1;
-	fprintf(tabout, ".ds f. %s\n", ifile);
-	fprintf(tabout, ".lf %d %s\n", iline, name);
+	Bprint(&tabout, ".ds f. %s\n", ifile);
+	Bprint(&tabout, ".lf %d %s\n", iline, name);
 	if (tabin == 0)
 		error("Can't open file");
 	sargc--;
diff --git a/src/cmd/tbl/t3.c b/src/cmd/tbl/t3.c
index 5429e52..a4dc9f9 100644
--- a/src/cmd/tbl/t3.c
+++ b/src/cmd/tbl/t3.c
@@ -4,28 +4,27 @@
 	char	*optnam; 
 	int	*optadd;
 } options [] = {
-	{ "expand", &expflg },
-	{ "EXPAND", &expflg },
-	{ "center", &ctrflg },
-	{ "CENTER", &ctrflg },
-	{ "box", &boxflg },
-	{ "BOX", &boxflg },
-	{ "allbox", &allflg },
-	{ "ALLBOX", &allflg },
-	{ "doublebox", &dboxflg },
-	{ "DOUBLEBOX", &dboxflg },
-	{ "frame", &boxflg },
-	{ "FRAME", &boxflg },
-	{ "doubleframe", &dboxflg },
-	{ "DOUBLEFRAME", &dboxflg },
-	{ "tab", &tab },
-	{ "TAB", &tab },
-	{ "linesize", &linsize },
-	{ "LINESIZE", &linsize },
-	{ "delim", &delim1 },
-	{ "DELIM", &delim1 },
-	{ 0, 0}
-};
+	"expand", &expflg,
+	"EXPAND", &expflg,
+	"center", &ctrflg,
+	"CENTER", &ctrflg,
+	"box", &boxflg,
+	"BOX", &boxflg,
+	"allbox", &allflg,
+	"ALLBOX", &allflg,
+	"doublebox", &dboxflg,
+	"DOUBLEBOX", &dboxflg,
+	"frame", &boxflg,
+	"FRAME", &boxflg,
+	"doubleframe", &dboxflg,
+	"DOUBLEFRAME", &dboxflg,
+	"tab", &tab,
+	"TAB", &tab,
+	"linesize", &linsize,
+	"LINESIZE", &linsize,
+	"delim", &delim1,
+	"DELIM", &delim1,
+	0, 0};
 
 
 void
@@ -39,7 +38,7 @@
 		*(lp->optadd) = 0;
 	texname = texstr[texct=0];
 	tab = '\t';
-	fprintf(tabout, ".nr %d \\n(.s\n", LSIZE);
+	Bprint(&tabout, ".nr %d \\n(.s\n", LSIZE);
 	gets1(line, sizeof(line));
 	/* see if this is a command line */
 	if (strchr(line, ';') == 0) {
@@ -71,7 +70,7 @@
 						*(lp->optadd) = nb[0];
 				}
 				if (lp->optadd == &linsize)
-					fprintf(tabout, ".nr %d %s\n", LSIZE, nb);
+					Bprint(&tabout, ".nr %d %s\n", LSIZE, nb);
 				if (lp->optadd == &delim1) {
 					delim1 = nb[0];
 					delim2 = nb[1];
diff --git a/src/cmd/tbl/t4.c b/src/cmd/tbl/t4.c
index 0b60a94..558d3ba 100644
--- a/src/cmd/tbl/t4.c
+++ b/src/cmd/tbl/t4.c
@@ -28,10 +28,10 @@
 	oncol = 0;
 	left1flg = rightl = 0;
 	readspec();
-	fprintf(tabout, ".rm");
+	Bprint(&tabout, ".rm");
 	for (i = 0; i < ncol; i++)
-		fprintf(tabout, " %2s", reg(i, CRIGHT));
-	fprintf(tabout, "\n");
+		Bprint(&tabout, " %2s", reg(i, CRIGHT));
+	Bprint(&tabout, "\n");
 }
 
 
@@ -42,12 +42,12 @@
 	char	sn[10], *snp, *temp;
 
 	sawchar = icol = 0;
-	while ((c = get1char())) {
+	while (c = get1char()) {
 		switch (c) {
 		default:
 			if (c != tab) {
 				char buf[64];
-				sprintf(buf, "bad table specification character %c", c);
+				sprint(buf, "bad table specification character %c", c);
 				error(buf);
 			}
 		case ' ': /* note this is also case tab */
@@ -108,11 +108,11 @@
 			if (c == 's' && icol <= 0)
 				error("first column can not be S-type");
 			if (c == 's' && style[icol-1][nclin] == 'a') {
-				fprintf(tabout, ".tm warning: can't span a-type cols, changed to l\n");
+				Bprint(&tabout, ".tm warning: can't span a-type cols, changed to l\n");
 				style[icol-1][nclin] = 'l';
 			}
 			if (c == 's' && style[icol-1][nclin] == 'n') {
-				fprintf(tabout, ".tm warning: can't span n-type cols, changed to c\n");
+				Bprint(&tabout, ".tm warning: can't span n-type cols, changed to c\n");
 				style[icol-1][nclin] = 'c';
 			}
 			icol++;
@@ -181,7 +181,7 @@
 			if (icol <= 0) 
 				continue;
 			temp = snp = csize[icol-1][nclin];
-			while ((c = get1char())) {
+			while (c = get1char()) {
 				if (c == ' ' || c == tab || c == '\n') 
 					break;
 				if (c == '-' || c == '+')
@@ -206,7 +206,7 @@
 			if (icol <= 0) 
 				continue;
 			temp = snp = vsize[icol-1][nclin];
-			while ((c = get1char())) {
+			while (c = get1char()) {
 				if (c == ' ' || c == tab || c == '\n') 
 					break;
 				if (c == '-' || c == '+')
@@ -231,12 +231,12 @@
 		   of different widths now ....
 			if (*snp)
 				{
-				fprintf(tabout, "Ignored second width specification");
+				Bprint(&tabout, "Ignored second width specification");
 				continue;
 				}
 		/* end commented out code ... */
 			stopc = 0;
-			while ((c = get1char())) {
+			while (c = get1char()) {
 				if (snp == cll[icol-1] && c == '(') {
 					stopc = ')';
 					continue;
@@ -312,7 +312,7 @@
 		;
 	if (c != '\n')
 		un1getc(c);
-	for (s = line; (*s = c = get1char()); s++) {
+	for (s = line; *s = c = get1char(); s++) {
 		if (c == ')') 
 			inpar = 0;
 		if (inpar) 
@@ -371,7 +371,7 @@
 }
 
 
-char*
+char	*
 getcore(int a, int b)
 {
 	char	*x;
diff --git a/src/cmd/tbl/t5.c b/src/cmd/tbl/t5.c
index 9ad6b3c..8b7a65d 100644
--- a/src/cmd/tbl/t5.c
+++ b/src/cmd/tbl/t5.c
@@ -31,7 +31,7 @@
 		} else 
 			instead[nlin] = 0;
 		if (nodata(nlin)) {
-			if ((ch = oneh(nlin)))
+			if (ch = oneh(nlin))
 				fullbot[nlin] = ch;
 			table[nlin] = (struct colstr *) alocv((ncol + 2) * sizeof(table[0][0]));
 			for (icol = 0; icol < ncol; icol++) {
diff --git a/src/cmd/tbl/t6.c b/src/cmd/tbl/t6.c
index e650691..a78368f 100644
--- a/src/cmd/tbl/t6.c
+++ b/src/cmd/tbl/t6.c
@@ -14,10 +14,10 @@
 
 	for (icol = 0; icol < ncol; icol++) {
 		doubled[icol] = acase[icol] = 0;
-		fprintf(tabout, ".nr %2s 0\n", reg(icol, CRIGHT));
+		Bprint(&tabout, ".nr %2s 0\n", reg(icol, CRIGHT));
 		for (text = 0; text < 2; text++) {
 			if (text)
-				fprintf(tabout, ".%2s\n.rm %2s\n", reg(icol, CRIGHT),
+				Bprint(&tabout, ".%2s\n.rm %2s\n", reg(icol, CRIGHT),
 				    reg(icol, CRIGHT));
 			for (ilin = 0; ilin < nlin; ilin++) {
 				if (instead[ilin] || fullbot[ilin]) 
@@ -37,31 +37,31 @@
 					s = table[ilin][icol].col;
 					if ((int)s > 0 && (int)s < 128 && text) {
 						if (doubled[icol] == 0)
-							fprintf(tabout, ".nr %d 0\n.nr %d 0\n",
+							Bprint(&tabout, ".nr %d 0\n.nr %d 0\n",
 							    S1, S2);
 						doubled[icol] = 1;
-						fprintf(tabout, ".if \\n(%c->\\n(%d .nr %d \\n(%c-\n",
+						Bprint(&tabout, ".if \\n(%c->\\n(%d .nr %d \\n(%c-\n",
 						    (int)s, S2, S2, (int)s);
 					}
 				case 'n':
 					if (table[ilin][icol].rcol != 0) {
 						if (doubled[icol] == 0 && text == 0)
-							fprintf(tabout, ".nr %d 0\n.nr %d 0\n",
+							Bprint(&tabout, ".nr %d 0\n.nr %d 0\n",
 							    S1, S2);
 						doubled[icol] = 1;
 						if (real(s = table[ilin][icol].col) && !vspen(s)) {
 							if (tx((int)s) != text) 
 								continue;
-							fprintf(tabout, ".nr %d ", TMP);
+							Bprint(&tabout, ".nr %d ", TMP);
 							wide(s, FN(vforml, icol), SZ(vforml, icol)); 
-							fprintf(tabout, "\n");
-							fprintf(tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n",
+							Bprint(&tabout, "\n");
+							Bprint(&tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n",
 							    S1, TMP, S1, TMP);
 						}
 						if (text == 0 && real(s = table[ilin][icol].rcol) && !vspen(s) && !barent(s)) {
-							fprintf(tabout, ".nr %d \\w%c%s%c\n",
+							Bprint(&tabout, ".nr %d \\w%c%s%c\n",
 							    TMP, F1, s, F1);
-							fprintf(tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n", S2, TMP, S2,
+							Bprint(&tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n", S2, TMP, S2,
 							     TMP);
 						}
 						continue;
@@ -72,53 +72,53 @@
 					if (real(s = table[ilin][icol].col) && !vspen(s)) {
 						if (tx((int)s) != text) 
 							continue;
-						fprintf(tabout, ".nr %d ", TMP);
+						Bprint(&tabout, ".nr %d ", TMP);
 						wide(s, FN(vforml, icol), SZ(vforml, icol)); 
-						fprintf(tabout, "\n");
-						fprintf(tabout, ".if \\n(%2s<\\n(%d .nr %2s \\n(%d\n",
+						Bprint(&tabout, "\n");
+						Bprint(&tabout, ".if \\n(%2s<\\n(%d .nr %2s \\n(%d\n",
 						     reg(icol, CRIGHT), TMP, reg(icol, CRIGHT), TMP);
 					}
 				}
 			}
 		}
 		if (acase[icol]) {
-			fprintf(tabout, ".if \\n(%d>=\\n(%2s .nr %2s \\n(%du+2n\n", 
+			Bprint(&tabout, ".if \\n(%d>=\\n(%2s .nr %2s \\n(%du+2n\n", 
 			     S2, reg(icol, CRIGHT), reg(icol, CRIGHT), S2);
 		}
 		if (doubled[icol]) {
-			fprintf(tabout, ".nr %2s \\n(%d\n", reg(icol, CMID), S1);
-			fprintf(tabout, ".nr %d \\n(%2s+\\n(%d\n", TMP, reg(icol, CMID), S2);
-			fprintf(tabout, ".if \\n(%d>\\n(%2s .nr %2s \\n(%d\n", TMP,
+			Bprint(&tabout, ".nr %2s \\n(%d\n", reg(icol, CMID), S1);
+			Bprint(&tabout, ".nr %d \\n(%2s+\\n(%d\n", TMP, reg(icol, CMID), S2);
+			Bprint(&tabout, ".if \\n(%d>\\n(%2s .nr %2s \\n(%d\n", TMP,
 			    reg(icol, CRIGHT), reg(icol, CRIGHT), TMP);
-			fprintf(tabout, ".if \\n(%d<\\n(%2s .nr %2s +(\\n(%2s-\\n(%d)/2\n",
+			Bprint(&tabout, ".if \\n(%d<\\n(%2s .nr %2s +(\\n(%2s-\\n(%d)/2\n",
 			     TMP, reg(icol, CRIGHT), reg(icol, CMID), reg(icol, CRIGHT), TMP);
 		}
 		if (cll[icol][0]) {
-			fprintf(tabout, ".nr %d %sn\n", TMP, cll[icol]);
-			fprintf(tabout, ".if \\n(%2s<\\n(%d .nr %2s \\n(%d\n",
+			Bprint(&tabout, ".nr %d %sn\n", TMP, cll[icol]);
+			Bprint(&tabout, ".if \\n(%2s<\\n(%d .nr %2s \\n(%d\n",
 			    reg(icol, CRIGHT), TMP, reg(icol, CRIGHT), TMP);
 		}
 		for (ilin = 0; ilin < nlin; ilin++)
-			if ((k = lspan(ilin, icol))) {
+			if (k = lspan(ilin, icol)) {
 				s = table[ilin][icol-k].col;
 				if (!real(s) || barent(s) || vspen(s) ) 
 					continue;
-				fprintf(tabout, ".nr %d ", TMP);
+				Bprint(&tabout, ".nr %d ", TMP);
 				wide(table[ilin][icol-k].col, FN(ilin, icol - k), SZ(ilin, icol - k));
 				for (ik = k; ik >= 0; ik--) {
-					fprintf(tabout, "-\\n(%2s", reg(icol - ik, CRIGHT));
+					Bprint(&tabout, "-\\n(%2s", reg(icol - ik, CRIGHT));
 					if (!expflg && ik > 0) 
-						fprintf(tabout, "-%dn", sep[icol-ik]);
+						Bprint(&tabout, "-%dn", sep[icol-ik]);
 				}
-				fprintf(tabout, "\n");
-				fprintf(tabout, ".if \\n(%d>0 .nr %d \\n(%d/%d\n", TMP,
+				Bprint(&tabout, "\n");
+				Bprint(&tabout, ".if \\n(%d>0 .nr %d \\n(%d/%d\n", TMP,
 				      TMP, TMP, k);
-				fprintf(tabout, ".if \\n(%d<0 .nr %d 0\n", TMP, TMP);
+				Bprint(&tabout, ".if \\n(%d<0 .nr %d 0\n", TMP, TMP);
 				for (ik = 1; ik <= k; ik++) {
 					if (doubled[icol-k+ik])
-						fprintf(tabout, ".nr %2s +\\n(%d/2\n",
+						Bprint(&tabout, ".nr %2s +\\n(%d/2\n",
 						     reg(icol - k + ik, CMID), TMP);
-					fprintf(tabout, ".nr %2s +\\n(%d\n",
+					Bprint(&tabout, ".nr %2s +\\n(%d\n",
 					     reg(icol - k + ik, CRIGHT), TMP);
 				}
 			}
@@ -127,11 +127,11 @@
 		untext();
 				/* if even requested, make all columns widest width */
 	if (evenflg) {
-		fprintf(tabout, ".nr %d 0\n", TMP);
+		Bprint(&tabout, ".nr %d 0\n", TMP);
 		for (icol = 0; icol < ncol; icol++) {
 			if (evenup[icol] == 0) 
 				continue;
-			fprintf(tabout, ".if \\n(%2s>\\n(%d .nr %d \\n(%2s\n",
+			Bprint(&tabout, ".if \\n(%2s>\\n(%d .nr %d \\n(%2s\n",
 			    reg(icol, CRIGHT), TMP, TMP, reg(icol, CRIGHT));
 		}
 		for (icol = 0; icol < ncol; icol++) {
@@ -139,56 +139,56 @@
 				/* if column not evened just retain old interval */
 				continue;
 			if (doubled[icol])
-				fprintf(tabout, ".nr %2s (100*\\n(%2s/\\n(%2s)*\\n(%d/100\n",
+				Bprint(&tabout, ".nr %2s (100*\\n(%2s/\\n(%2s)*\\n(%d/100\n",
 				    reg(icol, CMID), reg(icol, CMID), reg(icol, CRIGHT), TMP);
 			/* that nonsense with the 100's and parens tries
 				   to avoid overflow while proportionally shifting
 				   the middle of the number */
-			fprintf(tabout, ".nr %2s \\n(%d\n", reg(icol, CRIGHT), TMP);
+			Bprint(&tabout, ".nr %2s \\n(%d\n", reg(icol, CRIGHT), TMP);
 		}
 	}
 				/* now adjust for total table width */
 	for (tsep = icol = 0; icol < ncol; icol++)
 		tsep += sep[icol];
 	if (expflg) {
-		fprintf(tabout, ".nr %d 0", TMP);
+		Bprint(&tabout, ".nr %d 0", TMP);
 		for (icol = 0; icol < ncol; icol++)
-			fprintf(tabout, "+\\n(%2s", reg(icol, CRIGHT));
-		fprintf(tabout, "\n");
-		fprintf(tabout, ".nr %d \\n(.l-\\n(%d\n", TMP, TMP);
+			Bprint(&tabout, "+\\n(%2s", reg(icol, CRIGHT));
+		Bprint(&tabout, "\n");
+		Bprint(&tabout, ".nr %d \\n(.l-\\n(%d\n", TMP, TMP);
 		if (boxflg || dboxflg || allflg)
-			/* tsep += 1; */ ;
+			/* tsep += 1; */ {}
 		else
 			tsep -= sep[ncol-1];
-		fprintf(tabout, ".nr %d \\n(%d/%d\n", TMP, TMP,  tsep);
-		fprintf(tabout, ".if \\n(%d<0 .nr %d 0\n", TMP, TMP);
+		Bprint(&tabout, ".nr %d \\n(%d/%d\n", TMP, TMP,  tsep);
+		Bprint(&tabout, ".if \\n(%d<0 .nr %d 0\n", TMP, TMP);
 	} else
-		fprintf(tabout, ".nr %d 1n\n", TMP);
-	fprintf(tabout, ".nr %2s 0\n", reg(-1, CRIGHT));
+		Bprint(&tabout, ".nr %d 1n\n", TMP);
+	Bprint(&tabout, ".nr %2s 0\n", reg(-1, CRIGHT));
 	tsep = (boxflg || allflg || dboxflg || left1flg) ? 2 : 0;
 	if (sep[-1] >= 0) 
 		tsep = sep[-1];
 	for (icol = 0; icol < ncol; icol++) {
-		fprintf(tabout, ".nr %2s \\n(%2s+((%d*\\n(%d)/2)\n", reg(icol, CLEFT),
+		Bprint(&tabout, ".nr %2s \\n(%2s+((%d*\\n(%d)/2)\n", reg(icol, CLEFT),
 		    reg(icol - 1, CRIGHT), tsep, TMP);
-		fprintf(tabout, ".nr %2s +\\n(%2s\n", reg(icol, CRIGHT), reg(icol, CLEFT));
+		Bprint(&tabout, ".nr %2s +\\n(%2s\n", reg(icol, CRIGHT), reg(icol, CLEFT));
 		if (doubled[icol]) {
 			/* the next line is last-ditch effort to avoid zero field width */
-			/*fprintf(tabout, ".if \\n(%2s=0 .nr %2s 1\n",reg(icol,CMID), reg(icol,CMID));*/
-			fprintf(tabout, ".nr %2s +\\n(%2s\n", reg(icol, CMID),
+			/*Bprint(&tabout, ".if \\n(%2s=0 .nr %2s 1\n",reg(icol,CMID), reg(icol,CMID));*/
+			Bprint(&tabout, ".nr %2s +\\n(%2s\n", reg(icol, CMID),
 			    reg(icol, CLEFT));
-			/*  fprintf(tabout, ".if n .if \\n(%s%%24>0 .nr %s +12u\n",reg(icol,CMID), reg(icol,CMID)); */
+			/*  Bprint(&tabout, ".if n .if \\n(%s%%24>0 .nr %s +12u\n",reg(icol,CMID), reg(icol,CMID)); */
 		}
 		tsep = sep[icol] * 2;
 	}
 	if (rightl)
-		fprintf(tabout, ".nr %s (\\n(%s+\\n(%s)/2\n", reg(ncol - 1, CRIGHT),
+		Bprint(&tabout, ".nr %s (\\n(%s+\\n(%s)/2\n", reg(ncol - 1, CRIGHT),
 		      reg(ncol - 1, CLEFT), reg(ncol - 2, CRIGHT));
-	fprintf(tabout, ".nr TW \\n(%2s\n", reg(ncol - 1, CRIGHT));
+	Bprint(&tabout, ".nr TW \\n(%2s\n", reg(ncol - 1, CRIGHT));
 	tsep = sep[ncol-1];
 	if (boxflg || allflg || dboxflg)
-		fprintf(tabout, ".nr TW +((%d*\\n(%d)/2)\n", tsep, TMP);
-	fprintf(tabout,
+		Bprint(&tabout, ".nr TW +((%d*\\n(%d)/2)\n", tsep, TMP);
+	Bprint(&tabout,
 	    ".if t .if (\\n(TW+\\n(.o)>7.65i .tm Table at line %d file %s is too wide - \\n(TW units\n", iline - 1, ifile);
 	return;
 }
@@ -198,19 +198,19 @@
 wide(char *s, char *fn, char *size)
 {
 	if (point(s)) {
-		fprintf(tabout, "\\w%c", F1);
+		Bprint(&tabout, "\\w%c", F1);
 		if (*fn > 0) 
 			putfont(fn);
 		if (*size) 
 			putsize(size);
-		fprintf(tabout, "%s", s);
+		Bprint(&tabout, "%s", s);
 		if (*fn > 0) 
 			putfont("P");
 		if (*size) 
 			putsize("0");
-		fprintf(tabout, "%c", F1);
+		Bprint(&tabout, "%c", F1);
 	} else
-		fprintf(tabout, "\\n(%c-", (int)s);
+		Bprint(&tabout, "\\n(%c-", (int)s);
 }
 
 
diff --git a/src/cmd/tbl/t7.c b/src/cmd/tbl/t7.c
index 0d11f0c..2fa9de5 100644
--- a/src/cmd/tbl/t7.c
+++ b/src/cmd/tbl/t7.c
@@ -10,21 +10,21 @@
 	if (boxflg || allflg || dboxflg) 
 		need();
 	if (ctrflg) {
-		fprintf(tabout, ".nr #I \\n(.i\n");
-		fprintf(tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n");
+		Bprint(&tabout, ".nr #I \\n(.i\n");
+		Bprint(&tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n");
 	}
-	fprintf(tabout, ".fc %c %c\n", F1, F2);
-	fprintf(tabout, ".nr #T 0-1\n");
+	Bprint(&tabout, ".fc %c %c\n", F1, F2);
+	Bprint(&tabout, ".nr #T 0-1\n");
 	deftail();
 	for (i = 0; i < nlin; i++)
 		putline(i, i);
 	if (leftover)
 		yetmore();
-	fprintf(tabout, ".fc\n");
-	fprintf(tabout, ".nr T. 1\n");
-	fprintf(tabout, ".T# 1\n");
+	Bprint(&tabout, ".fc\n");
+	Bprint(&tabout, ".nr T. 1\n");
+	Bprint(&tabout, ".T# 1\n");
 	if (ctrflg)
-		fprintf(tabout, ".in \\n(#Iu\n");
+		Bprint(&tabout, ".in \\n(#Iu\n");
 }
 
 
@@ -33,7 +33,7 @@
 {
 	int	c, ct, vforml, lf;
 
-	fprintf(tabout, ".ta ");
+	Bprint(&tabout, ".ta ");
 	for (c = 0; c < ncol; c++) {
 		vforml = lform;
 		for (lf = prev(lform); lf >= 0 && vspen(table[lf][c].col); lf = prev(lf))
@@ -45,20 +45,20 @@
 		case 'a':
 			if (table[ldata][c].rcol)
 				if (lused[c]) /*Zero field width*/
-					fprintf(tabout, "\\n(%2su ", reg(c, CMID));
+					Bprint(&tabout, "\\n(%2su ", reg(c, CMID));
 		case 'c':
 		case 'l':
 		case 'r':
 			if (realsplit ? rused[c] : (used[c] + lused[c]))
-				fprintf(tabout, "\\n(%2su ", reg(c, CRIGHT));
+				Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
 			continue;
 		case 's':
 			if (lspan(lform, c))
-				fprintf(tabout, "\\n(%2su ", reg(c, CRIGHT));
+				Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
 			continue;
 		}
 	}
-	fprintf(tabout, "\n");
+	Bprint(&tabout, "\n");
 }
 
 
@@ -92,7 +92,7 @@
 		else
 			texlin++;
 	}
-	fprintf(tabout, ".ne %dv+%dp\n", texlin, 2 * horlin);
+	Bprint(&tabout, ".ne %dv+%dp\n", texlin, 2 * horlin);
 }
 
 
@@ -103,48 +103,48 @@
 
 	for (i = 0; i < MAXHEAD; i++)
 		if (linestop[i])
-			fprintf(tabout, ".nr #%c 0-1\n", linestop[i] + 'a' - 1);
-	fprintf(tabout, ".nr #a 0-1\n");
-	fprintf(tabout, ".eo\n");
-	fprintf(tabout, ".de T#\n");
-	fprintf(tabout, ".nr 35 1m\n");
-	fprintf(tabout, ".ds #d .d\n");
-	fprintf(tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n");
-	fprintf(tabout, ".mk ##\n");
-	fprintf(tabout, ".nr ## -1v\n");
-	fprintf(tabout, ".ls 1\n");
+			Bprint(&tabout, ".nr #%c 0-1\n", linestop[i] + 'a' - 1);
+	Bprint(&tabout, ".nr #a 0-1\n");
+	Bprint(&tabout, ".eo\n");
+	Bprint(&tabout, ".de T#\n");
+	Bprint(&tabout, ".nr 35 1m\n");
+	Bprint(&tabout, ".ds #d .d\n");
+	Bprint(&tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n");
+	Bprint(&tabout, ".mk ##\n");
+	Bprint(&tabout, ".nr ## -1v\n");
+	Bprint(&tabout, ".ls 1\n");
 	for (i = 0; i < MAXHEAD; i++)
 		if (linestop[i])
-			fprintf(tabout, ".if \\n(#T>=0 .nr #%c \\n(#T\n",
+			Bprint(&tabout, ".if \\n(#T>=0 .nr #%c \\n(#T\n",
 			     linestop[i] + 'a' - 1);
 	if (boxflg || allflg || dboxflg) /* bottom of table line */
 		if (fullbot[nlin-1] == 0) {
 			if (!pr1403)
-				fprintf(tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n");
-			fprintf(tabout, ".if \\n(T. ");
+				Bprint(&tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n");
+			Bprint(&tabout, ".if \\n(T. ");
 			drawline(nlin, 0, ncol, dboxflg ? '=' : '-', 1, 0);
-			fprintf(tabout, "\n.if \\n(T. .vs\n");
+			Bprint(&tabout, "\n.if \\n(T. .vs\n");
 			/* T. is really an argument to a macro but because of 
 		   eqn we don't dare pass it as an argument and reference by $1 */
 		}
 	for (c = 0; c < ncol; c++) {
 		if ((lf = left(nlin - 1, c, &lwid)) >= 0) {
-			fprintf(tabout, ".if \\n(#%c>=0 .sp -1\n", linestop[lf] + 'a' - 1);
-			fprintf(tabout, ".if \\n(#%c>=0 ", linestop[lf] + 'a' - 1);
+			Bprint(&tabout, ".if \\n(#%c>=0 .sp -1\n", linestop[lf] + 'a' - 1);
+			Bprint(&tabout, ".if \\n(#%c>=0 ", linestop[lf] + 'a' - 1);
 			tohcol(c);
 			drawvert(lf, nlin - 1, c, lwid);
-			fprintf(tabout, "\\h'|\\n(TWu'\n");
+			Bprint(&tabout, "\\h'|\\n(TWu'\n");
 		}
 	}
 	if (boxflg || allflg || dboxflg) /* right hand line */ {
-		fprintf(tabout, ".if \\n(#a>=0 .sp -1\n");
-		fprintf(tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'");
+		Bprint(&tabout, ".if \\n(#a>=0 .sp -1\n");
+		Bprint(&tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'");
 		drawvert (0, nlin - 1, ncol, dboxflg ? 2 : 1);
-		fprintf(tabout, "\n");
+		Bprint(&tabout, "\n");
 	}
-	fprintf(tabout, ".ls\n");
-	fprintf(tabout, "..\n");
-	fprintf(tabout, ".ec\n");
+	Bprint(&tabout, ".ls\n");
+	Bprint(&tabout, "..\n");
+	Bprint(&tabout, ".ec\n");
 }
 
 
diff --git a/src/cmd/tbl/t8.c b/src/cmd/tbl/t8.c
index 39bc9c1..92277e2 100644
--- a/src/cmd/tbl/t8.c
+++ b/src/cmd/tbl/t8.c
@@ -28,19 +28,19 @@
 					if (!vspen(s = table[ip][c].col)) 
 						break;
 				if ((int)s > 0 && (int)s < 128)
-					fprintf(tabout, ".ne \\n(%c|u+\\n(.Vu\n", (int)s);
+					Bprint(&tabout, ".ne \\n(%c|u+\\n(.Vu\n", (int)s);
 				continue;
 			}
 			if (point(s)) 
 				continue;
-			fprintf(tabout, ".ne \\n(%c|u+\\n(.Vu\n", (int)s);
+			Bprint(&tabout, ".ne \\n(%c|u+\\n(.Vu\n", (int)s);
 			watchout = 1;
 		}
 	if (linestop[nl])
-		fprintf(tabout, ".mk #%c\n", linestop[nl] + 'a' - 1);
+		Bprint(&tabout, ".mk #%c\n", linestop[nl] + 'a' - 1);
 	lf = prev(nl);
 	if (instead[nl]) {
-		fprintf(tabout, "%s\n", instead[nl]);
+		Bprint(&tabout, "%s\n", instead[nl]);
 		return;
 	}
 	if (fullbot[nl]) {
@@ -60,8 +60,8 @@
 				vspf = 1;
 	}
 	if (vspf) {
-		fprintf(tabout, ".nr #^ \\n(\\*(#du\n");
-		fprintf(tabout, ".nr #- \\n(#^\n"); /* current line position relative to bottom */
+		Bprint(&tabout, ".nr #^ \\n(\\*(#du\n");
+		Bprint(&tabout, ".nr #- \\n(#^\n"); /* current line position relative to bottom */
 	}
 	vspf = 0;
 	chfont = 0;
@@ -74,11 +74,11 @@
 			continue;
 		lf = prev(nl);
 		if (lf >= 0 && vspen(table[lf][c].col))
-			fprintf(tabout,
+			Bprint(&tabout,
 			   ".if (\\n(%c|+\\n(^%c-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(^%c-\\n(#--1v)\n",
 			    (int)s, 'a' + c, (int)s, 'a' + c);
 		else
-			fprintf(tabout,
+			Bprint(&tabout,
 			    ".if (\\n(%c|+\\n(#^-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(#^-\\n(#--1v)\n",
 			    (int)s, (int)s);
 	}
@@ -87,14 +87,14 @@
 	once = 1;
 	runtabs(i, nl);
 	if (allh(i) && !pr1403) {
-		fprintf(tabout, ".nr %d \\n(.v\n", SVS);
-		fprintf(tabout, ".vs \\n(.vu-\\n(.sp\n");
-		fprintf(tabout, ".nr 35 \\n(.vu\n");
+		Bprint(&tabout, ".nr %d \\n(.v\n", SVS);
+		Bprint(&tabout, ".vs \\n(.vu-\\n(.sp\n");
+		Bprint(&tabout, ".nr 35 \\n(.vu\n");
 	} else
-		fprintf(tabout, ".nr 35 1m\n");
+		Bprint(&tabout, ".nr 35 1m\n");
 	if (chfont)
-		fprintf(tabout, ".nr %2d \\n(.f\n", S1);
-	fprintf(tabout, "\\&");
+		Bprint(&tabout, ".nr %2d \\n(.f\n", S1);
+	Bprint(&tabout, "\\&");
 	vct = 0;
 	for (c = 0; c < ncol; c++) {
 		uphalf = 0;
@@ -115,7 +115,7 @@
 				rct = reg(c, CMID);
 			if (form == 'n' && table[nl][c].rcol && lused[c] == 0) 
 				rct = reg(c, CMID);
-			fprintf(tabout, "\\h'|\\n(%2su'", rct);
+			Bprint(&tabout, "\\h'|\\n(%2su'", rct);
 		}
 		s = table[nl][c].col;
 		fn = font[c][stynum[vforml]];
@@ -133,27 +133,27 @@
 					if (ip >= 0)
 						if (vspen(table[ip][c].col)) {
 							if (exvspen == 0) {
-								fprintf(tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c + 'a');
+								Bprint(&tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c + 'a');
 								if (cmidx)
 /* code folded from here */
-	fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c + 'a');
+	Bprint(&tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c + 'a');
 /* unfolding */
 								vct++;
 								if (pr1403) /* must round to whole lines */
 /* code folded from here */
-	fprintf(tabout, "/1v*1v");
+	Bprint(&tabout, "/1v*1v");
 /* unfolding */
-								fprintf(tabout, "'");
+								Bprint(&tabout, "'");
 								exvspen = 1;
 							}
 						}
-					fprintf(tabout, "%c%c", F1, F2);
+					Bprint(&tabout, "%c%c", F1, F2);
 					if (uphalf) 
-						fprintf(tabout, "\\u");
+						Bprint(&tabout, "\\u");
 					puttext(s, fn, size);
 					if (uphalf) 
-						fprintf(tabout, "\\d");
-					fprintf(tabout, "%c", F1);
+						Bprint(&tabout, "\\d");
+					Bprint(&tabout, "%c", F1);
 				}
 				s = table[nl][c].rcol;
 				form = 1;
@@ -171,7 +171,7 @@
 		case '-':
 		case '=':
 			if (real(table[nl][c].col))
-				fprintf(stderr, "%s: line %d: Data ignored on table line %d\n", ifile, iline - 1, i + 1);
+				fprint(2, "%s: line %d: Data ignored on table line %d\n", ifile, iline - 1, i + 1);
 			makeline(i, c, ct);
 			continue;
 		default:
@@ -184,7 +184,7 @@
 				continue;
 			}
 			if (filler(s)) {
-				fprintf(tabout, "\\l'|\\n(%2su\\&%s'", reg(c, CRIGHT), s + 2);
+				Bprint(&tabout, "\\l'|\\n(%2su\\&%s'", reg(c, CRIGHT), s + 2);
 				continue;
 			}
 			ip = prev(nl);
@@ -192,68 +192,67 @@
 			if (ip >= 0)
 				if (vspen(table[ip][c].col)) {
 					if (exvspen == 0) {
-						fprintf(tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c + 'a');
+						Bprint(&tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c + 'a');
 						if (cmidx)
-							fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c + 'a');
+							Bprint(&tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c + 'a');
 						vct++;
 						if (pr1403) /* round to whole lines */
-							fprintf(tabout, "/1v*1v");
-						fprintf(tabout, "'");
+							Bprint(&tabout, "/1v*1v");
+						Bprint(&tabout, "'");
 					}
 				}
-			fprintf(tabout, "%c", F1);
+			Bprint(&tabout, "%c", F1);
 			if (form != 1)
-				fprintf(tabout, "%c", F2);
+				Bprint(&tabout, "%c", F2);
 			if (vspen(s))
 				vspf = 1;
 			else
 			 {
 				if (uphalf) 
-					fprintf(tabout, "\\u");
+					Bprint(&tabout, "\\u");
 				puttext(s, fn, size);
 				if (uphalf) 
-					fprintf(tabout, "\\d");
+					Bprint(&tabout, "\\d");
 			}
 			if (form != 2)
-				fprintf(tabout, "%c", F2);
-			fprintf(tabout, "%c", F1);
+				Bprint(&tabout, "%c", F2);
+			Bprint(&tabout, "%c", F1);
 		}
 		ip = prev(nl);
-		if (ip >= 0) {
+		if (ip >= 0)
 			if (vspen(table[ip][c].col)) {
 				exvspen = (c + 1 < ncol) && vspen(table[ip][c+1].col) && 
 				    (topat[c] == topat[c+1]) && 
-				    (cmidx == ((flags[c+1] [stynum[nl]] & (CTOP | CDOWN)) == 0))
+				    (cmidx == (flags[c+1] [stynum[nl]] & (CTOP | CDOWN) == 0))
 				     && (left(i, c + 1, &lwid) < 0);
 				if (exvspen == 0) {
-					fprintf(tabout, "\\v'(\\n(\\*(#du-\\n(^%cu", c + 'a');
+					Bprint(&tabout, "\\v'(\\n(\\*(#du-\\n(^%cu", c + 'a');
 					if (cmidx)
-						fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c + 'a');
+						Bprint(&tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c + 'a');
 					vct++;
 					if (pr1403) /* round to whole lines */
-						fprintf(tabout, "/1v*1v");
-					fprintf(tabout, "'");
+						Bprint(&tabout, "/1v*1v");
+					Bprint(&tabout, "'");
 				}
 			}
 			else
 				exvspen = 0;
-		}
 		/* if lines need to be split for gcos here is the place for a backslash */
 		if (vct > 7 && c < ncol) {
-			fprintf(tabout, "\n.sp-1\n\\&");
+			Bprint(&tabout, "\n.sp-1\n\\&");
 			vct = 0;
 		}
 	}
-	fprintf(tabout, "\n");
+	Bprint(&tabout, "\n");
 	if (allh(i) && !pr1403) 
-		fprintf(tabout, ".vs \\n(%du\n", SVS);
+		Bprint(&tabout, ".vs \\n(%du\n", SVS);
 	if (watchout)
 		funnies(i, nl);
 	if (vspf) {
 		for (c = 0; c < ncol; c++)
 			if (vspen(table[nl][c].col) && (nl == 0 || (lf = prev(nl)) < 0 ||
 			    !vspen(table[lf][c].col))) {
-				fprintf(tabout, ".nr ^%c \\n(#^u\n", 'a' + c);
+				Bprint(&tabout, ".nr ^%c \\n(#^u\n", 'a' + c);
 				topat[c] = nl;
 			}
 	}
@@ -266,9 +265,9 @@
 	if (point(s)) {
 		putfont(fn);
 		putsize(size);
-		fprintf(tabout, "%s", s);
+		Bprint(&tabout, "%s", s);
 		if (*fn > 0) 
-			fprintf(tabout, "\\f\\n(%2d", S1);
+			Bprint(&tabout, "\\f\\n(%2d", S1);
 		if (size != 0) 
 			putsize("0");
 	}
@@ -282,8 +281,8 @@
 	int	c, s, pl, lwid, dv, lf, ct;
 	char	*fn, *ss;
 
-	fprintf(tabout, ".mk ##\n");	 /* rmember current vertical position */
-	fprintf(tabout, ".nr %d \\n(##\n", S1);		 /* bottom position */
+	Bprint(&tabout, ".mk ##\n");	 /* rmember current vertical position */
+	Bprint(&tabout, ".nr %d \\n(##\n", S1);		 /* bottom position */
 	for (c = 0; c < ncol; c++) {
 		ss = table[lin][c].col;
 		if (point(ss)) 
@@ -291,62 +290,62 @@
 		if (ss == 0) 
 			continue;
 		s = (int)ss;
-		fprintf(tabout, ".sp |\\n(##u-1v\n");
-		fprintf(tabout, ".nr %d ", SIND);
+		Bprint(&tabout, ".sp |\\n(##u-1v\n");
+		Bprint(&tabout, ".nr %d ", SIND);
 		ct = 0;
 		for (pl = stl; pl >= 0 && !isalpha(ct = ctype(pl, c)); pl = prev(pl))
 			;
 		switch (ct) {
 		case 'n':
 		case 'c':
-			fprintf(tabout, "(\\n(%2su+\\n(%2su-\\n(%c-u)/2u\n", reg(c, CLEFT),
+			Bprint(&tabout, "(\\n(%2su+\\n(%2su-\\n(%c-u)/2u\n", reg(c, CLEFT),
 			     reg(c - 1 + ctspan(lin, c), CRIGHT),
 			     s);
 			break;
 		case 'l':
-			fprintf(tabout, "\\n(%2su\n", reg(c, CLEFT));
+			Bprint(&tabout, "\\n(%2su\n", reg(c, CLEFT));
 			break;
 		case 'a':
-			fprintf(tabout, "\\n(%2su\n", reg(c, CMID));
+			Bprint(&tabout, "\\n(%2su\n", reg(c, CMID));
 			break;
 		case 'r':
-			fprintf(tabout, "\\n(%2su-\\n(%c-u\n", reg(c, CRIGHT), s);
+			Bprint(&tabout, "\\n(%2su-\\n(%c-u\n", reg(c, CRIGHT), s);
 			break;
 		}
-		fprintf(tabout, ".in +\\n(%du\n", SIND);
+		Bprint(&tabout, ".in +\\n(%du\n", SIND);
 		fn = font[c][stynum[stl]];
 		putfont(fn);
 		pl = prev(stl);
 		if (stl > 0 && pl >= 0 && vspen(table[pl][c].col)) {
-			fprintf(tabout, ".sp |\\n(^%cu\n", 'a' + c);
+			Bprint(&tabout, ".sp |\\n(^%cu\n", 'a' + c);
 			if ((flags[c][stynum[stl]] & (CTOP | CDOWN)) == 0) {
-				fprintf(tabout, ".nr %d \\n(#-u-\\n(^%c-\\n(%c|+1v\n",
+				Bprint(&tabout, ".nr %d \\n(#-u-\\n(^%c-\\n(%c|+1v\n",
 				     TMP, 'a' + c, s);
-				fprintf(tabout, ".if \\n(%d>0 .sp \\n(%du/2u", TMP, TMP);
+				Bprint(&tabout, ".if \\n(%d>0 .sp \\n(%du/2u", TMP, TMP);
 				if (pr1403)		 /* round */
-					fprintf(tabout, "/1v*1v");
-				fprintf(tabout, "\n");
+					Bprint(&tabout, "/1v*1v");
+				Bprint(&tabout, "\n");
 			}
 		}
-		fprintf(tabout, ".%c+\n", s);
-		fprintf(tabout, ".in -\\n(%du\n", SIND);
+		Bprint(&tabout, ".%c+\n", s);
+		Bprint(&tabout, ".in -\\n(%du\n", SIND);
 		if (*fn > 0) 
 			putfont("P");
-		fprintf(tabout, ".mk %d\n", S2);
-		fprintf(tabout, ".if \\n(%d>\\n(%d .nr %d \\n(%d\n", S2, S1, S1, S2);
+		Bprint(&tabout, ".mk %d\n", S2);
+		Bprint(&tabout, ".if \\n(%d>\\n(%d .nr %d \\n(%d\n", S2, S1, S1, S2);
 	}
-	fprintf(tabout, ".sp |\\n(%du\n", S1);
+	Bprint(&tabout, ".sp |\\n(%du\n", S1);
 	for (c = dv = 0; c < ncol; c++) {
 		if (stl + 1 < nlin && (lf = left(stl, c, &lwid)) >= 0) {
 			if (dv++ == 0)
-				fprintf(tabout, ".sp -1\n");
+				Bprint(&tabout, ".sp -1\n");
 			tohcol(c);
 			dv++;
 			drawvert(lf, stl, c, lwid);
 		}
 	}
 	if (dv)
-		fprintf(tabout, "\n");
+		Bprint(&tabout, "\n");
 }
 
 
@@ -354,7 +353,7 @@
 putfont(char *fn)
 {
 	if (fn && *fn)
-		fprintf(tabout,  fn[1] ? "\\f(%.2s" : "\\f%.2s",  fn);
+		Bprint(&tabout,  fn[1] ? "\\f(%.2s" : "\\f%.2s",  fn);
 }
 
 
@@ -362,7 +361,7 @@
 putsize(char *s)
 {
 	if (s && *s)
-		fprintf(tabout, "\\s%s", s);
+		Bprint(&tabout, "\\s%s", s);
 }
 
 
diff --git a/src/cmd/tbl/t9.c b/src/cmd/tbl/t9.c
index da96e05..379126d 100644
--- a/src/cmd/tbl/t9.c
+++ b/src/cmd/tbl/t9.c
@@ -30,7 +30,7 @@
 	if (prefix(".TE", dataln))
 		return(0);
 	if (dataln[0] == '.' && !isdigit(dataln[1])) {
-		fprintf(tabout, "%s\n", dataln);
+		Bprint(&tabout, "%s\n", dataln);
 		return(1);
 	}
 	fullbot[0] = 0;
diff --git a/src/cmd/tbl/tc.c b/src/cmd/tbl/tc.c
index f089f4d..841680b 100644
--- a/src/cmd/tbl/tc.c
+++ b/src/cmd/tbl/tc.c
@@ -4,9 +4,9 @@
 void
 choochar(void)
 {
-	/* choose funny characters to delimit fields */
-	int had[128], ilin, icol, k;
-	unsigned char *s;
+				/* choose funny characters to delimit fields */
+	int	had[128], ilin, icol, k;
+	unsigned char	*s;
 
 	for (icol = 0; icol < 128; icol++)
 		had[icol] = 0;
diff --git a/src/cmd/tbl/te.c b/src/cmd/tbl/te.c
index e628299..3df8d44 100644
--- a/src/cmd/tbl/te.c
+++ b/src/cmd/tbl/te.c
@@ -4,9 +4,9 @@
 void
 error(char *s)
 {
-	fprintf(stderr, "\n%s:%d: %s\n", ifile, iline, s);
-	fprintf(stderr, "tbl quits\n");
-	exit(1);
+	fprint(2, "\n%s:%d: %s\n", ifile, iline, s);
+	fprint(2, "tbl quits\n");
+	exits(s);
 }
 
 
@@ -18,14 +18,13 @@
 
 	iline++;
 	ns = s;
-	p = fgetln(tabin, &nbl);
+	p = Brdline(tabin, '\n');
 	while (p == 0) {
 		if (swapin() == 0)
 			return(0);
-		p = fgetln(tabin, &nbl);
+		p = Brdline(tabin, '\n');
 	}
-	if(p != 0 && p[nbl-1] == '\n')
-		nbl--;
+	nbl = Blinelen(tabin)-1;
 	if(nbl >= size)
 		error("input buffer too small");
 	p[nbl] = 0;
@@ -62,11 +61,11 @@
 	if (backp > backup)
 		c = *--backp;
 	else
-		c = fgetc(tabin);
+		c = Bgetc(tabin);
 	if (c == 0) /* EOF */ {
 		if (swapin() == 0)
 			error("unexpected EOF");
-		c = fgetc(tabin);
+		c = Bgetc(tabin);
 	}
 	if (c == '\n')
 		iline++;
diff --git a/src/cmd/tbl/tf.c b/src/cmd/tbl/tf.c
index 320ba96..3791c32 100644
--- a/src/cmd/tbl/tf.c
+++ b/src/cmd/tbl/tf.c
@@ -5,25 +5,25 @@
 savefill(void)
 {
 			/* remembers various things: fill mode, vs, ps in mac 35 (SF) */
-	fprintf(tabout, ".de %d\n", SF);
-	fprintf(tabout, ".ps \\n(.s\n");
-	fprintf(tabout, ".vs \\n(.vu\n");
-	fprintf(tabout, ".in \\n(.iu\n");
-	fprintf(tabout, ".if \\n(.u .fi\n");
-	fprintf(tabout, ".if \\n(.j .ad\n");
-	fprintf(tabout, ".if \\n(.j=0 .na\n");
-	fprintf(tabout, "..\n");
-	fprintf(tabout, ".nf\n");
+	Bprint(&tabout, ".de %d\n", SF);
+	Bprint(&tabout, ".ps \\n(.s\n");
+	Bprint(&tabout, ".vs \\n(.vu\n");
+	Bprint(&tabout, ".in \\n(.iu\n");
+	Bprint(&tabout, ".if \\n(.u .fi\n");
+	Bprint(&tabout, ".if \\n(.j .ad\n");
+	Bprint(&tabout, ".if \\n(.j=0 .na\n");
+	Bprint(&tabout, "..\n");
+	Bprint(&tabout, ".nf\n");
 	/* set obx offset if useful */
-	fprintf(tabout, ".nr #~ 0\n");
-	fprintf(tabout, ".if \\n(.T .if n .nr #~ 0.6n\n");
+	Bprint(&tabout, ".nr #~ 0\n");
+	Bprint(&tabout, ".if \\n(.T .if n .nr #~ 0.6n\n");
 }
 
 
 void
 rstofill(void)
 {
-	fprintf(tabout, ".%d\n", SF);
+	Bprint(&tabout, ".%d\n", SF);
 }
 
 
@@ -34,25 +34,25 @@
 
 	for (i = 0; i < MAXHEAD; i++)
 		if (linestop[i])
-			fprintf(tabout, ".nr #%c 0\n", linestop[i] + 'a' - 1);
+			Bprint(&tabout, ".nr #%c 0\n", linestop[i] + 'a' - 1);
 	for (i = 0; i < texct; i++)
-		fprintf(tabout, ".rm %c+\n", texstr[i]);
-	fprintf(tabout, "%s\n", last);
+		Bprint(&tabout, ".rm %c+\n", texstr[i]);
+	Bprint(&tabout, "%s\n", last);
 }
 
 
 void
 ifdivert(void)
 {
-	fprintf(tabout, ".ds #d .d\n");
-	fprintf(tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n");
+	Bprint(&tabout, ".ds #d .d\n");
+	Bprint(&tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n");
 }
 
 
 void
 saveline(void)
 {
-	fprintf(tabout, ".if \\n+(b.=1 .nr d. \\n(.c-\\n(c.-1\n");
+	Bprint(&tabout, ".if \\n+(b.=1 .nr d. \\n(.c-\\n(c.-1\n");
 	linstart = iline;
 }
 
@@ -60,7 +60,7 @@
 void
 restline(void)
 {
-	fprintf(tabout, ".if \\n-(b.=0 .nr c. \\n(.c-\\n(d.-%d\n", iline - linstart);
+	Bprint(&tabout, ".if \\n-(b.=0 .nr c. \\n(.c-\\n(d.-%d\n", iline - linstart);
 	linstart = 0;
 }
 
@@ -68,7 +68,7 @@
 void
 cleanfc(void)
 {
-	fprintf(tabout, ".fc\n");
+	Bprint(&tabout, ".fc\n");
 }
 
 
diff --git a/src/cmd/tbl/tg.c b/src/cmd/tbl/tg.c
index e12bdc4..6abb149 100644
--- a/src/cmd/tbl/tg.c
+++ b/src/cmd/tbl/tg.c
@@ -12,53 +12,53 @@
 	if (texname == 0) 
 		error("Too many text block diversions");
 	if (textflg == 0) {
-		fprintf(tabout, ".nr %d \\n(.lu\n", SL); /* remember old line length */
+		Bprint(&tabout, ".nr %d \\n(.lu\n", SL); /* remember old line length */
 		textflg = 1;
 	}
-	fprintf(tabout, ".eo\n");
-	fprintf(tabout, ".am %s\n", reg(icol, CRIGHT));
-	fprintf(tabout, ".br\n");
-	fprintf(tabout, ".di %c+\n", texname);
+	Bprint(&tabout, ".eo\n");
+	Bprint(&tabout, ".am %s\n", reg(icol, CRIGHT));
+	Bprint(&tabout, ".br\n");
+	Bprint(&tabout, ".di %c+\n", texname);
 	rstofill();
 	if (fn && *fn) 
-		fprintf(tabout, ".nr %d \\n(.f\n.ft %s\n", S1, fn);
-	fprintf(tabout, ".ft \\n(.f\n"); /* protect font */
+		Bprint(&tabout, ".nr %d \\n(.f\n.ft %s\n", S1, fn);
+	Bprint(&tabout, ".ft \\n(.f\n"); /* protect font */
 	vs = vsize[icol][stynum[ilin]];
 	if ((sz && *sz) || (vs && *vs)) {
-		fprintf(tabout, ".nr %d \\n(.v\n", S9);
+		Bprint(&tabout, ".nr %d \\n(.v\n", S9);
 		if (vs == 0 || *vs == 0) 
 			vs = "\\n(.s+2";
 		if (sz && *sz)
-			fprintf(tabout, ".ps %s\n", sz);
-		fprintf(tabout, ".vs %s\n", vs);
-		fprintf(tabout, ".if \\n(%du>\\n(.vu .sp \\n(%du-\\n(.vu\n", S9, S9);
+			Bprint(&tabout, ".ps %s\n", sz);
+		Bprint(&tabout, ".vs %s\n", vs);
+		Bprint(&tabout, ".if \\n(%du>\\n(.vu .sp \\n(%du-\\n(.vu\n", S9, S9);
 	}
 	if (cll[icol][0])
-		fprintf(tabout, ".ll %sn\n", cll[icol]);
+		Bprint(&tabout, ".ll %sn\n", cll[icol]);
 	else
-		fprintf(tabout, ".ll \\n(%du*%du/%du\n", SL, ctspan(ilin, icol), ncol + 1);
-	fprintf(tabout, ".if \\n(.l<\\n(%2s .ll \\n(%2su\n", reg(icol, CRIGHT),
+		Bprint(&tabout, ".ll \\n(%du*%du/%du\n", SL, ctspan(ilin, icol), ncol + 1);
+	Bprint(&tabout, ".if \\n(.l<\\n(%2s .ll \\n(%2su\n", reg(icol, CRIGHT),
 	     reg(icol, CRIGHT));
 	if (ctype(ilin, icol) == 'a')
-		fprintf(tabout, ".ll -2n\n");
-	fprintf(tabout, ".in 0\n");
+		Bprint(&tabout, ".ll -2n\n");
+	Bprint(&tabout, ".in 0\n");
 	while (gets1(line, sizeof(line))) {
 		if (line[0] == 'T' && line[1] == '}' && line[2] == tab) 
 			break;
 		if (match("T}", line)) 
 			break;
-		fprintf(tabout, "%s\n", line);
+		Bprint(&tabout, "%s\n", line);
 	}
 	if (fn && *fn) 
-		fprintf(tabout, ".ft \\n(%d\n", S1);
+		Bprint(&tabout, ".ft \\n(%d\n", S1);
 	if (sz && *sz) 
-		fprintf(tabout, ".br\n.ps\n.vs\n");
-	fprintf(tabout, ".br\n");
-	fprintf(tabout, ".di\n");
-	fprintf(tabout, ".nr %c| \\n(dn\n", texname);
-	fprintf(tabout, ".nr %c- \\n(dl\n", texname);
-	fprintf(tabout, "..\n");
-	fprintf(tabout, ".ec \\\n");
+		Bprint(&tabout, ".br\n.ps\n.vs\n");
+	Bprint(&tabout, ".br\n");
+	Bprint(&tabout, ".di\n");
+	Bprint(&tabout, ".nr %c| \\n(dn\n", texname);
+	Bprint(&tabout, ".nr %c- \\n(dl\n", texname);
+	Bprint(&tabout, "..\n");
+	Bprint(&tabout, ".ec \\\n");
 	/* copy remainder of line */
 	if (line[2])
 		tcopy (sp, line + 3);
@@ -74,8 +74,8 @@
 untext(void)
 {
 	rstofill();
-	fprintf(tabout, ".nf\n");
-	fprintf(tabout, ".ll \\n(%du\n", SL);
+	Bprint(&tabout, ".nf\n");
+	Bprint(&tabout, ".ll \\n(%du\n", SL);
 }
 
 
diff --git a/src/cmd/tbl/tm.c b/src/cmd/tbl/tm.c
index 7bf49e5..8fa4e49 100644
--- a/src/cmd/tbl/tm.c
+++ b/src/cmd/tbl/tm.c
@@ -9,14 +9,14 @@
 	char	*p, *q, *ba;
 
 	p = str;
-	for (ba = 0; (c = *str); str++)
+	for (ba = 0; c = *str; str++)
 		if (c == '\\' && *(str + 1) == '&')
 			ba = str;
 	str = p;
 	if (ba == 0) {
 		for (dpoint = 0; *str; str++) {
 			if (*str == '.' && !ineqn(str, p) && 
-			    ((str > p && digit(*(str - 1))) || 
+			    (str > p && digit(*(str - 1)) || 
 			    digit(*(str + 1))))
 				dpoint = (int)str;
 		}
@@ -37,7 +37,7 @@
 		exlim = exstore + MAXCHS;
 	}
 	q = exstore;
-	while ((*exstore++ = *str++))
+	while (*exstore++ = *str++)
 		;
 	*p = 0;
 	return(q);
@@ -50,7 +50,7 @@
 				/* true if s is in a eqn within p */
 	int	ineq = 0, c;
 
-	while ((c = *p)) {
+	while (c = *p) {
 		if (s == p)
 			return(ineq);
 		p++;
diff --git a/src/cmd/tbl/ts.c b/src/cmd/tbl/ts.c
index a3c5968..43cc84e 100644
--- a/src/cmd/tbl/ts.c
+++ b/src/cmd/tbl/ts.c
@@ -64,7 +64,7 @@
 void
 tcopy (char *s, char *t)
 {
-	while ((*s++ = *t++))
+	while (*s++ = *t++)
 		;
 }
 
diff --git a/src/cmd/tbl/tt.c b/src/cmd/tbl/tt.c
index e70ab3d..96270b7 100644
--- a/src/cmd/tbl/tt.c
+++ b/src/cmd/tbl/tt.c
@@ -59,9 +59,9 @@
 tohcol(int ic)
 {
 	if (ic == 0)
-		fprintf(tabout, "\\h'|0'");
+		Bprint(&tabout, "\\h'|0'");
 	else
-		fprintf(tabout, "\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
+		Bprint(&tabout, "\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
 		     reg(ic - 1, CRIGHT));
 }
 
@@ -119,7 +119,7 @@
 		return(1);
 	if (vspen(s)) 
 		return(1);
-	if ((t = barent( s)))
+	if (t = barent( s))
 		return(t);
 	return(0);
 }
diff --git a/src/cmd/tbl/tu.c b/src/cmd/tbl/tu.c
index 87e1602..217869e 100644
--- a/src/cmd/tbl/tu.c
+++ b/src/cmd/tbl/tu.c
@@ -28,7 +28,7 @@
 	int	cr, cl;
 
 	if (!pr1403)
-		fprintf(tabout, ".nr %d \\n(.v\n.vs \\n(.vu-\\n(.sp\n", SVS);
+		Bprint(&tabout, ".nr %d \\n(.v\n.vs \\n(.vu-\\n(.sp\n", SVS);
 	cr = 0;
 	while (cr < ncol) {
 		cl = cr;
@@ -40,9 +40,9 @@
 		if (cl < ncol)
 			drawline(i, cl, (cr < ncol ? cr - 1 : cr), lintype, 1, 0);
 	}
-	fprintf(tabout, "\n");
+	Bprint(&tabout, "\n");
 	if (!pr1403)
-		fprintf(tabout, ".vs \\n(%du\n", SVS);
+		Bprint(&tabout, ".vs \\n(%du\n", SVS);
 }
 
 
@@ -69,11 +69,11 @@
 		return;
 	nodata = cr - cl >= ncol || noheight || allh(i);
 	if (!nodata)
-		fprintf(tabout, "\\v'-.5m'");
+		Bprint(&tabout, "\\v'-.5m'");
 	for (ln = oldpos = 0; ln < lcount; ln++) {
 		linpos = 2 * ln - lcount + 1;
 		if (linpos != oldpos)
-			fprintf(tabout, "\\v'%dp'", linpos - oldpos);
+			Bprint(&tabout, "\\v'%dp'", linpos - oldpos);
 		oldpos = linpos;
 		if (shortl == 0) {
 			tohcol(cl);
@@ -90,7 +90,7 @@
 					break;
 				}
 				if (exhl[0])
-					fprintf(tabout, "\\h'%s'", exhl);
+					Bprint(&tabout, "\\h'%s'", exhl);
 			} else if (lcount == 1) {
 				switch (interv(i, cl)) {
 				case TOP: 
@@ -102,7 +102,7 @@
 					break;
 				}
 				if (exhl[0])
-					fprintf(tabout, "\\h'%s'", exhl);
+					Bprint(&tabout, "\\h'%s'", exhl);
 			}
 			if (lcount > 1) {
 				switch (interv(i, cr + 1)) {
@@ -128,31 +128,31 @@
 				}
 			}
 		} else
-			fprintf(tabout, "\\h'|\\n(%2su'", reg(cl, CLEFT));
-		fprintf(tabout, "\\s\\n(%d", LSIZE);
+			Bprint(&tabout, "\\h'|\\n(%2su'", reg(cl, CLEFT));
+		Bprint(&tabout, "\\s\\n(%d", LSIZE);
 		if (linsize)
-			fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE);
+			Bprint(&tabout, "\\v'-\\n(%dp/6u'", LSIZE);
 		if (shortl)
-			fprintf(tabout, "\\l'|\\n(%2su'", reg(cr, CRIGHT));
+			Bprint(&tabout, "\\l'|\\n(%2su'", reg(cr, CRIGHT));
 		else
 		 {
 			lnch = "\\(ul";
 			if (pr1403)
 				lnch = lintype == 2 ? "=" : "\\(ru";
 			if (cr + 1 >= ncol)
-				fprintf(tabout, "\\l'|\\n(TWu%s%s'", exhr, lnch);
+				Bprint(&tabout, "\\l'|\\n(TWu%s%s'", exhr, lnch);
 			else
-				fprintf(tabout, "\\l'(|\\n(%2su+|\\n(%2su)/2u%s%s'", reg(cr, CRIGHT),
+				Bprint(&tabout, "\\l'(|\\n(%2su+|\\n(%2su)/2u%s%s'", reg(cr, CRIGHT),
 				    reg(cr + 1, CLEFT), exhr, lnch);
 		}
 		if (linsize)
-			fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE);
-		fprintf(tabout, "\\s0");
+			Bprint(&tabout, "\\v'\\n(%dp/6u'", LSIZE);
+		Bprint(&tabout, "\\s0");
 	}
 	if (oldpos != 0)
-		fprintf(tabout, "\\v'%dp'", -oldpos);
+		Bprint(&tabout, "\\v'%dp'", -oldpos);
 	if (!nodata)
-		fprintf(tabout, "\\v'+.5m'");
+		Bprint(&tabout, "\\v'+.5m'");
 }
 
 
diff --git a/src/cmd/tbl/tv.c b/src/cmd/tbl/tv.c
index adcef76..19a4b03 100644
--- a/src/cmd/tbl/tv.c
+++ b/src/cmd/tbl/tv.c
@@ -16,7 +16,7 @@
 		epb = ept = 0;
 		pos = 2 * ln - lwid + 1;
 		if (pos != tp) 
-			fprintf(tabout, "\\h'%dp'", pos - tp);
+			Bprint(&tabout, "\\h'%dp'", pos - tp);
 		tp = pos;
 		if (end < nlin) {
 			if (fullbot[end] || (!instead[end] && allh(end)))
@@ -102,33 +102,33 @@
 				break;
 			}
 		if (exb)
-			fprintf(tabout, "\\v'%s'", exb);
+			Bprint(&tabout, "\\v'%s'", exb);
 		if (epb)
-			fprintf(tabout, "\\v'%dp'", epb);
-		fprintf(tabout, "\\s\\n(%d", LSIZE);
+			Bprint(&tabout, "\\v'%dp'", epb);
+		Bprint(&tabout, "\\s\\n(%d", LSIZE);
 		if (linsize)
-			fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE);
-		fprintf(tabout, "\\h'-\\n(#~u'");	 /* adjustment for T450 nroff boxes */
-		fprintf(tabout, "\\L'|\\n(#%cu-%s", linestop[start] + 'a' - 1,
+			Bprint(&tabout, "\\v'-\\n(%dp/6u'", LSIZE);
+		Bprint(&tabout, "\\h'-\\n(#~u'");	 /* adjustment for T450 nroff boxes */
+		Bprint(&tabout, "\\L'|\\n(#%cu-%s", linestop[start] + 'a' - 1,
 		      vm == 'v' ? "1v" : "\\n(35u");
 		if (ext)
-			fprintf(tabout, "-(%s)", ext);
+			Bprint(&tabout, "-(%s)", ext);
 		if (exb)
-			fprintf(tabout, "-(%s)", exb);
+			Bprint(&tabout, "-(%s)", exb);
 		pos = ept - epb;
 		if (pos)
-			fprintf(tabout, "%s%dp", pos >= 0 ? "+" : "", pos);
+			Bprint(&tabout, "%s%dp", pos >= 0 ? "+" : "", pos);
 		/* the string #d is either "nl" or ".d" depending
 	   on diversions; on GCOS not the same */
-		fprintf(tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s",
+		Bprint(&tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s",
 		     linestop[start] + 'a' - 1, vm == 'v' ? "1v" : "\\n(35u");
 		if (ext)
-			fprintf(tabout, "+%s", ext);
+			Bprint(&tabout, "+%s", ext);
 		if (ept)
-			fprintf(tabout, "%s%dp", (-ept) > 0 ? "+" : "", (-ept));
-		fprintf(tabout, "'");
+			Bprint(&tabout, "%s%dp", (-ept) > 0 ? "+" : "", (-ept));
+		Bprint(&tabout, "'");
 		if (linsize)
-			fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE);
+			Bprint(&tabout, "\\v'\\n(%dp/6u'", LSIZE);
 	}
 }
 
@@ -154,7 +154,7 @@
 		c--;
 	if (ct == '-' || ct == '=')
 		return(ct);
-	if ((ct = barent(table[i][c].col)))
+	if (ct = barent(table[i][c].col))
 		return(ct);
 	return(0);
 }
