commit 1076c720dff8ea5f05dfc8f5c7c1cd192330eb63 from: rsc date: Wed Dec 14 19:58:32 2005 UTC add .ei for else-if commit - baa6e34b72e5d978fb0da4266c4527e7e582e675 commit + 1076c720dff8ea5f05dfc8f5c7c1cd192330eb63 blob - 922a3a80837ef4e99c931af128227c5463ce981e blob + d04fd0377e7b6660df94758f8371e872812f78b8 --- src/cmd/troff/fns.h +++ src/cmd/troff/fns.h @@ -172,6 +172,7 @@ void casefl(void); 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 @@ -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 */ @@ -610,7 +610,17 @@ void envcopy(Env *e1, Env *e2) /* copy env e2 to e1 */ { *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) { @@ -621,7 +631,6 @@ void caseel(void) caseif1(2); } - void caseie(void) { if (ifx >= NIF) { @@ -629,11 +638,11 @@ void caseie(void) ifx = 0; edone(040); } + iflist[ifx] = 1; caseif1(1); ifx++; } - void caseif(void) { caseif1(0); @@ -645,7 +654,7 @@ void caseif1(int x) int notflag, true; Tchar i; - if (x == 2) { + if (x == 2) { /* .el */ notflag = 0; true = iflist[ifx]; goto i1; @@ -691,8 +700,10 @@ void caseif1(int x) } 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 @@ -70,6 +70,7 @@ Contab contab[NM] = { 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),