commit - baa6e34b72e5d978fb0da4266c4527e7e582e675
commit + 1076c720dff8ea5f05dfc8f5c7c1cd192330eb63
blob - 922a3a80837ef4e99c931af128227c5463ce981e
blob + d04fd0377e7b6660df94758f8371e872812f78b8
--- src/cmd/troff/fns.h
+++ src/cmd/troff/fns.h
void caseev(void);
void envcopy(Env *e1, Env *e2);
void caseel(void);
+void caseei(void);
void caseie(void);
void casexif(void);
void caseif(void);
blob - 2c7d3287ba98116598ddf6f26f0243c37196c6b1
blob + 72f9bbb6ad4813b7c58cce93f80b2502178929fb
--- src/cmd/troff/n5.c
+++ src/cmd/troff/n5.c
#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 */
{
*e1 = *e2; /* rumor hath that this fails on some machines */
}
+
+void caseei(void)
+{
+ if (--ifx < 0) {
+ ifx = 0;
+ iflist[0] = 0;
+ }
+ caseif1(1);
+ ifx++;
+}
void caseel(void)
{
caseif1(2);
}
-
void caseie(void)
{
if (ifx >= NIF) {
ifx = 0;
edone(040);
}
+ iflist[ifx] = 1;
caseif1(1);
ifx++;
}
-
void caseif(void)
{
caseif1(0);
int notflag, true;
Tchar i;
- if (x == 2) {
+ if (x == 2) { /* .el */
notflag = 0;
true = iflist[ifx];
goto i1;
}
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())) == ' ')
blob - a80cec6437edd23dfd4e7ec144b8a0d061e126b7
blob + 27a0ff3dd64e33178a3915b348d738bab915c28c
--- src/cmd/troff/ni.c
+++ src/cmd/troff/ni.c
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),