diff --git a/src/frontend/numparam/xpressn.c b/src/frontend/numparam/xpressn.c index e6759c813..d205c288c 100644 --- a/src/frontend/numparam/xpressn.c +++ b/src/frontend/numparam/xpressn.c @@ -934,8 +934,10 @@ fetchoperator(tdico *dico, } else if ((c == '=') && (d == '=')) { iptr++; } else if ((c == '&') && (d == '&')) { + c = 'A'; iptr++; } else if ((c == '|') && (d == '|')) { + c = 'O'; iptr++; } @@ -951,10 +953,10 @@ fetchoperator(tdico *dico, } else if (cpos(c, "=<>#GL") >= 0) { state = S_binop; level = 5; - } else if (c == '&') { + } else if (c == '&' || c == 'A') { state = S_binop; level = 6; - } else if (c == '|') { + } else if (c == '|' || c == 'O') { state = S_binop; level = 7; } else if (c == '!') { @@ -990,12 +992,12 @@ opfunctkey(tdico *dico, { /* & | ~ DIV MOD Defined */ case 1: - c = '&'; + c = 'A'; state = S_binop; level = 6; break; case 2: - c = '|'; + c = 'O'; state = S_binop; level = 7; break; @@ -1063,11 +1065,17 @@ operate(char op, double x, double y) case '^': /* power */ x = pow(fabs(x), y); break; - case '&': /* && */ + case 'A': /* && */ + x = ((x != 0.0) && (y != 0.0)) ? 1.0 : 0.0; + break; + case 'O': /* || */ + x = ((x != 0.0) || (y != 0.0)) ? 1.0 : 0.0; + break; + case '&': if (y < x) x = y; /*=Min*/ break; - case '|': /* || */ + case '|': if (y > x) x = y; /*=Max*/ break;