convert to 4-byte UTF-8 and 32-bit Rune

http://codereview.appspot.com/116075
diff --git a/src/cmd/9term/wind.c b/src/cmd/9term/wind.c
index d77b52e..6f04595 100644
--- a/src/cmd/9term/wind.c
+++ b/src/cmd/9term/wind.c
@@ -193,7 +193,7 @@
 	Rune *rp, *bp, *up, *kbdr;
 	uint qh;
 	int nr, nb, c, wid, i, npart, initial, lastb;
-	char *s, *t, part[3];
+	char *s, *t, part[UTFmax];
 	Window *w;
 	Mousestate *mp, m;
 	enum { WKey, WMouse, WMouseread, WCtl, WCwrite, WCread, WWread, NWALT };
diff --git a/src/cmd/acme/regx.c b/src/cmd/acme/regx.c
index 5197e8a..a58437b 100644
--- a/src/cmd/acme/regx.c
+++ b/src/cmd/acme/regx.c
@@ -488,7 +488,7 @@
 			exprp++;	/* eat '-' */
 			if((c2 = nextrec()) == ']')
 				goto Error;
-			classp[n+0] = 0xFFFF;
+			classp[n+0] = Runemax;
 			classp[n+1] = c1;
 			classp[n+2] = c2;
 			n += 3;
@@ -510,7 +510,7 @@
 
 	p = class[classno];
 	while(*p){
-		if(*p == 0xFFFF){
+		if(*p == Runemax){
 			if(p[1]<=c && c<=p[2])
 				return !negate;
 			p += 3;
diff --git a/src/cmd/sam/cmd.c b/src/cmd/sam/cmd.c
index cdf00b9..1251068 100644
--- a/src/cmd/sam/cmd.c
+++ b/src/cmd/sam/cmd.c
@@ -71,7 +71,7 @@
 inputc(void)
 {
 	int n, nbuf;
-	char buf[3];
+	char buf[UTFmax];
 	Rune r;
 
     Again:
diff --git a/src/cmd/sam/regexp.c b/src/cmd/sam/regexp.c
index 3477bae..3234d73 100644
--- a/src/cmd/sam/regexp.c
+++ b/src/cmd/sam/regexp.c
@@ -494,7 +494,7 @@
 			exprp++;	/* eat '-' */
 			if((c2 = nextrec()) == ']')
 				goto Error;
-			classp[n+0] = 0xFFFF;
+			classp[n+0] = Runemax;
 			classp[n+1] = c1;
 			classp[n+2] = c2;
 			n += 3;
@@ -516,7 +516,7 @@
 
 	p = class[classno];
 	while(*p){
-		if(*p == 0xFFFF){
+		if(*p == Runemax){
 			if(p[1]<=c && c<=p[2])
 				return !negate;
 			p += 3;
diff --git a/src/cmd/sed.c b/src/cmd/sed.c
index 5849c83..a78c9c6 100644
--- a/src/cmd/sed.c
+++ b/src/cmd/sed.c
@@ -615,7 +615,7 @@
 	while ((r = *cp++) != '\0') {
 		if(r == '\\') {
 			if (rhs < end)
-				*rhs++ = 0xFFFF;
+				*rhs++ = Runemax;
 			else
 				return 0;
 			r = *cp++;
@@ -1050,7 +1050,7 @@
 			sp = place(sp, loc1, loc2);
 			continue;
 		}
-		if (c == 0xFFFF && (c = *rp++) >= '1' && c < MAXSUB+'0') {
+		if (c == Runemax && (c = *rp++) >= '1' && c < MAXSUB+'0') {
 			n = c-'0';
 			if (subexp[n].s.rsp && subexp[n].e.rep) {
 				sp = place(sp, subexp[n].s.rsp, subexp[n].e.rep);
diff --git a/src/cmd/tr.c b/src/cmd/tr.c
index 39ba747..46e98e1 100644
--- a/src/cmd/tr.c
+++ b/src/cmd/tr.c
@@ -15,7 +15,7 @@
 #define	CLEARBIT(a,c)		((a)[(c)/8] &= ~bits[(c)&07])
 #define	BITSET(a,c)		((a)[(c)/8] & bits[(c)&07])
 
-#define	MAXRUNE	0xFFFF
+#define	MAXRUNE	Runemax
 
 uchar	f[(MAXRUNE+1)/8];
 uchar	t[(MAXRUNE+1)/8];
diff --git a/src/cmd/troff/mbwc.c b/src/cmd/troff/mbwc.c
index e523489..c97b036 100644
--- a/src/cmd/troff/mbwc.c
+++ b/src/cmd/troff/mbwc.c
@@ -152,9 +152,9 @@
 		if(p+d <= pe+3) {
 			*p++ = buf[0];
 			if(d > 1) {
-				*p++ = buf[2];
+				*p++ = buf[1];
 				if(d > 2)
-					*p++ = buf[3];
+					*p++ = buf[2];
 			}
 		}
 		if(c == 0)
diff --git a/src/cmd/unicode.c b/src/cmd/unicode.c
index a044727..aec44b7 100644
--- a/src/cmd/unicode.c
+++ b/src/cmd/unicode.c
@@ -51,13 +51,13 @@
 			return "bad range";
 		}
 		min = strtoul(q, &q, 16);
-		if(min<0 || min>0xFFFF || *q!='-')
+		if(min<0 || min>Runemax || *q!='-')
 			goto err;
 		q++;
 		if(strchr(hex, *q) == 0)
 			goto err;
 		max = strtoul(q, &q, 16);
-		if(max<0 || max>0xFFFF || max<min || *q!=0)
+		if(max<0 || max>Runemax || max<min || *q!=0)
 			goto err;
 		i = 0;
 		do{
@@ -111,7 +111,7 @@
 			return "bad char";
 		}
 		m = strtoul(q, &q, 16);
-		if(m<0 || m>0xFFFF || *q!=0)
+		if(m<0 || m>Runemax || *q!=0)
 			goto err;
 		Bprint(&bout, "%C", m);
 		if(!text)