while(*p){
switch(*p++) {
case '+':
x += eval0(&p, scale, 0);
continue;
case '-':
x -= eval0(&p, scale, 0);
continue;
case '*':
x *= eval0(&p, scale, 0);
continue;
case '/':
y = eval0(&p, scale, 0);
if (y == 0) {
fprint(2, "%L: divide by zero %S\n", p);
y = 1;
}
x /= y;
continue;
case '%':
y = eval0(&p, scale, 0);
if (!y) {
fprint(2, "%L: modulo by zero %S\n", p);
y = 1;
}
x %= y;
continue;
case '<':
if (*p == '=') {
p++;
x = x <= eval0(&p, scale, 0);
continue;
}
x = x < eval0(&p, scale, 0);
continue;
case '>':
if (*p == '=') {
p++;
x = x >= eval0(&p, scale, 0);
continue;
}
x = x > eval0(&p, scale, 0);
continue;
case '=':
if (*p == '=')
p++;
x = x == eval0(&p, scale, 0);
continue;
case '&':
x &= eval0(&p, scale, 0);
continue;
case ':':
x |= eval0(&p, scale, 0);
continue;
}
}
*pline = p;
return x;
}