diff --git a/src/cmd/htmlroff/t11.c b/src/cmd/htmlroff/t11.c
new file mode 100644
index 0000000..53d68aa
--- /dev/null
+++ b/src/cmd/htmlroff/t11.c
@@ -0,0 +1,107 @@
+#include "a.h"
+
+/*
+ * 11. Local Horizontal and Vertical Motions, and the Width Function.
+ */
+
+int
+e_0(void)
+{
+	/* digit-width space */
+	return ' ';
+}
+
+int
+dv(int d)
+{
+	Rune sub[6];
+
+	d += getnr(L(".dv"));
+	nr(L(".dv"), d);
+
+	runestrcpy(sub, L("<sub>"));
+	sub[0] = Ult;
+	sub[4] = Ugt;
+	if(d < 0){
+		sub[3] = 'p';
+		ihtml(L(".dv"), sub);
+	}else if(d > 0)
+		ihtml(L(".dv"), sub);
+	else
+		ihtml(L(".dv"), nil);
+	return 0;
+}
+
+int
+e_v(void)
+{
+	dv(eval(getqarg()));
+	return 0;
+}
+
+int
+e_u(void)
+{
+	dv(eval(L("-0.5m")));
+	return 0;
+}
+
+int
+e_d(void)
+{
+	dv(eval(L("0.5m")));
+	return 0;
+}
+
+int
+e_r(void)
+{
+	dv(eval(L("-1m")));
+	return 0;
+}
+
+int
+e_h(void)
+{
+	getqarg();
+	return 0;
+}
+
+int
+e_w(void)
+{
+	Rune *a;
+	Rune buf[40];
+	
+	a = getqarg();
+	runesnprint(buf, sizeof buf, "%ld", runestrlen(a));
+	pushinputstring(buf);
+	nr(L("st"), 0);
+	nr(L("sb"), 0);
+	nr(L("ct"), 0);
+	return 0;
+}
+
+int
+e_k(void)
+{
+	getname();
+	warn("%Ck not available", backslash);
+	return 0;
+}
+
+void
+t11init(void)
+{
+	addesc('|', e_nop, 0);
+	addesc('^', e_nop, 0);
+	addesc('v', e_v, 0);
+	addesc('h', e_h, 0);
+	addesc('w', e_w, 0);
+	addesc('0', e_0, 0);
+	addesc('u', e_u, 0);
+	addesc('d', e_d, 0);
+	addesc('r', e_r, 0);
+	addesc('k', e_k, 0);
+}
+
