Let's try this.  It's BUGGERED.
diff --git a/src/cmd/tbl/t1.c b/src/cmd/tbl/t1.c
new file mode 100644
index 0000000..1e6cbf1
--- /dev/null
+++ b/src/cmd/tbl/t1.c
@@ -0,0 +1,95 @@
+/* t1.c: main control and input switching */
+#
+# include "t.h"
+
+# define MACROS "/usr/lib/tmac.s"
+# define PYMACS "/usr/lib/tmac.m"
+
+
+# define ever (;;)
+
+void
+main(int argc, char *argv[])
+{
+	exits(tbl(argc, argv)? "error" : 0);
+}
+
+
+int
+tbl(int argc, char *argv[])
+{
+	char	line[5120];
+	/*int x;*/
+	/*x=malloc((char *)0);	uncomment when allocation breaks*/
+	Binit(&tabout, 1, OWRITE);
+	setinp(argc, argv);
+	while (gets1(line, sizeof(line))) {
+		Bprint(&tabout, "%s\n", line);
+		if (prefix(".TS", line))
+			tableput();
+	}
+	Bterm(tabin);
+	return(0);
+}
+
+
+int	sargc;
+char	**sargv;
+
+void
+setinp(int argc, char **argv)
+{
+	sargc = argc;
+	sargv = argv;
+	sargc--; 
+	sargv++;
+	if (sargc > 0)
+		swapin();
+	else {
+		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
+		Binit(tabin, 0, OREAD);
+	}
+}
+
+
+int
+swapin(void)
+{
+	char	*name;
+	while (sargc > 0 && **sargv == '-') {
+		if (match("-ms", *sargv)) {
+			*sargv = MACROS;
+			break;
+		}
+		if (match("-mm", *sargv)) {
+			*sargv = PYMACS;
+			break;
+		}
+		if (match("-TX", *sargv))
+			pr1403 = 1;
+		if (match("-", *sargv))
+			break;
+		sargc--; 
+		sargv++;
+	}
+	if (sargc <= 0) 
+		return(0);
+	/* file closing is done by GCOS troff preprocessor */
+	if(tabin)
+		Bterm(tabin);
+	ifile = *sargv;
+	name = ifile;
+	if (match(ifile, "-")) {
+		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
+		Binit(tabin, 0, OREAD);
+	} else
+		tabin = Bopen(ifile, OREAD);
+	iline = 1;
+	Bprint(&tabout, ".ds f. %s\n", ifile);
+	Bprint(&tabout, ".lf %d %s\n", iline, name);
+	if (tabin == 0)
+		error("Can't open file");
+	sargc--;
+	sargv++;
+	return(1);
+}