add .ei for else-if

This commit is contained in:
rsc 2005-12-14 19:58:32 +00:00
parent baa6e34b72
commit 1076c720df
3 changed files with 19 additions and 6 deletions

View file

@ -172,6 +172,7 @@ void casefl(void);
void caseev(void); void caseev(void);
void envcopy(Env *e1, Env *e2); void envcopy(Env *e1, Env *e2);
void caseel(void); void caseel(void);
void caseei(void);
void caseie(void); void caseie(void);
void casexif(void); void casexif(void);
void caseif(void); void caseif(void);

View file

@ -8,7 +8,7 @@
#include "fns.h" #include "fns.h"
#include "ext.h" #include "ext.h"
int iflist[NIF]; int iflist[NIF]; /* whether 'else' is true */
int ifx; int ifx;
int ifnum = 0; /* trying numeric expression for .if or .ie condition */ int ifnum = 0; /* trying numeric expression for .if or .ie condition */
@ -612,6 +612,16 @@ void envcopy(Env *e1, Env *e2) /* copy env e2 to e1 */
} }
void caseei(void)
{
if (--ifx < 0) {
ifx = 0;
iflist[0] = 0;
}
caseif1(1);
ifx++;
}
void caseel(void) void caseel(void)
{ {
if (--ifx < 0) { if (--ifx < 0) {
@ -621,7 +631,6 @@ void caseel(void)
caseif1(2); caseif1(2);
} }
void caseie(void) void caseie(void)
{ {
if (ifx >= NIF) { if (ifx >= NIF) {
@ -629,11 +638,11 @@ void caseie(void)
ifx = 0; ifx = 0;
edone(040); edone(040);
} }
iflist[ifx] = 1;
caseif1(1); caseif1(1);
ifx++; ifx++;
} }
void caseif(void) void caseif(void)
{ {
caseif1(0); caseif1(0);
@ -645,7 +654,7 @@ void caseif1(int x)
int notflag, true; int notflag, true;
Tchar i; Tchar i;
if (x == 2) { if (x == 2) { /* .el */
notflag = 0; notflag = 0;
true = iflist[ifx]; true = iflist[ifx];
goto i1; goto i1;
@ -691,8 +700,10 @@ void caseif1(int x)
} }
i1: i1:
true ^= notflag; true ^= notflag;
if (x == 1) if (x == 1) { /* .ie or .ei */
iflist[ifx] = !true; true = true && iflist[ifx];
iflist[ifx] = iflist[ifx] && !true;
}
if (true) { if (true) {
i2: i2:
while ((cbits(i = getch())) == ' ') while ((cbits(i = getch())) == ' ')

View file

@ -70,6 +70,7 @@ Contab contab[NM] = {
C(PAIR('n', 'r'), casenr), C(PAIR('n', 'r'), casenr),
C(PAIR('i', 'f'), caseif), C(PAIR('i', 'f'), caseif),
C(PAIR('i', 'e'), caseie), C(PAIR('i', 'e'), caseie),
C(PAIR('e', 'i'), caseei),
C(PAIR('e', 'l'), caseel), C(PAIR('e', 'l'), caseel),
C(PAIR('p', 'o'), casepo), C(PAIR('p', 'o'), casepo),
C(PAIR('t', 'l'), casetl), C(PAIR('t', 'l'), casetl),