add .ei for else-if
diff --git a/src/cmd/troff/fns.h b/src/cmd/troff/fns.h
index 922a3a8..d04fd03 100644
--- a/src/cmd/troff/fns.h
+++ b/src/cmd/troff/fns.h
@@ -172,6 +172,7 @@
 void	caseev(void);
 void	envcopy(Env *e1, Env *e2);
 void	caseel(void);
+void caseei(void);
 void	caseie(void);
 void	casexif(void);
 void	caseif(void);
diff --git a/src/cmd/troff/n5.c b/src/cmd/troff/n5.c
index 2c7d328..72f9bbb 100644
--- a/src/cmd/troff/n5.c
+++ b/src/cmd/troff/n5.c
@@ -8,7 +8,7 @@
 #include "fns.h"
 #include "ext.h"
 
-int	iflist[NIF];
+int	iflist[NIF];	/* whether 'else' is true */
 int	ifx;
 int	ifnum = 0;	/* trying numeric expression for .if or .ie condition */
 
@@ -612,6 +612,16 @@
 }
 
 
+void caseei(void)
+{
+	if (--ifx < 0) {
+		ifx = 0;
+		iflist[0] = 0;
+	}
+	caseif1(1);
+	ifx++;
+}
+
 void caseel(void)
 {
 	if (--ifx < 0) {
@@ -621,7 +631,6 @@
 	caseif1(2);
 }
 
-
 void caseie(void)
 {
 	if (ifx >= NIF) {
@@ -629,11 +638,11 @@
 		ifx = 0;
 		edone(040);
 	}
+	iflist[ifx] = 1;
 	caseif1(1);
 	ifx++;
 }
 
-
 void caseif(void)
 {
 	caseif1(0);
@@ -645,7 +654,7 @@
 	int notflag, true;
 	Tchar i;
 
-	if (x == 2) {
+	if (x == 2) {	/* .el */
 		notflag = 0;
 		true = iflist[ifx];
 		goto i1;
@@ -691,8 +700,10 @@
 	}
 i1:
 	true ^= notflag;
-	if (x == 1)
-		iflist[ifx] = !true;
+	if (x == 1) {	/* .ie or .ei */
+		true = true && iflist[ifx];
+		iflist[ifx] = iflist[ifx] && !true;
+	}
 	if (true) {
 i2:
 		while ((cbits(i = getch())) == ' ')
diff --git a/src/cmd/troff/ni.c b/src/cmd/troff/ni.c
index a80cec6..27a0ff3 100644
--- a/src/cmd/troff/ni.c
+++ b/src/cmd/troff/ni.c
@@ -70,6 +70,7 @@
 	C(PAIR('n', 'r'), casenr),
 	C(PAIR('i', 'f'), caseif),
 	C(PAIR('i', 'e'), caseie),
+	C(PAIR('e', 'i'), caseei),
 	C(PAIR('e', 'l'), caseel),
 	C(PAIR('p', 'o'), casepo),
 	C(PAIR('t', 'l'), casetl),