return 3;
case '+': case '-':
return 2;
- case '=':
+ case '=': case '@': case '>': case '<':
return 1;
}
return 0;
case '|': case '&': case '^':
return true;
// right to left
- case '=': case '!':
+ case '=': case '!': case '@': case '>': case '<':
return false;
}
return false;
static unsigned int op_arg_count(const TCHAR c)
{
switch(c) {
- case '*': case '/': case '%': case '+': case '-': case '=':
+ case '*': case '/': case '%': case '+': case '-': case '=': case '@': case '<': case '>':
case '|': case '&': case '^':
return 2;
case '!':
return 0;
}
-#define is_operator(c) (c == '+' || c == '-' || c == '/' || c == '*' || c == '!' || c == '%' || c == '=' || c == '|' || c == '&' || c == '^')
+#define is_operator(c) (c == '+' || c == '-' || c == '/' || c == '*' || c == '!' || c == '%' || c == '=' || c == '|' || c == '&' || c == '^' || c == '@' || c == '>' || c == '<')
#define is_function(c) (c >= 'A' && c <= 'Z')
#define is_ident(c) ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z'))
return (int)v1 & (int)v2;
case '^':
return (int)v1 ^ (int)v2;
+ case '@':
+ return (int)v1 == (int)v2;
+ case '>':
+ return (int)v1 > (int)v2;
+ case '<':
+ return (int)v1 < (int)v2;
}
return 0;
}
in[3] = ' ';
in[4] = ' ';
}
+ if (*in == '=' && *(in + 1) == '=') {
+ *in = '@';
+ *(in + 1) = ' ';
+ }
if (_istdigit (*in)) {
if (ident >= MAX_VALUES)
return false;
static bool isoperator(TCHAR **cp)
{
TCHAR c = **cp;
- return c == '+' || c == '-' || c == '/' || c == '*' || c == '(' || c == ')' || c == '|' || c == '&' || c == '^';
+ return c == '+' || c == '-' || c == '/' || c == '*' || c == '(' || c == ')' || c == '|' || c == '&' || c == '^' || c == '=' || c == '>' || c == '<';
}
static void ignore_ws (TCHAR **c)
p = form;
for (;;) {
uae_u32 v;
- if (!checkvaltype2 (cp, &v, def))
+ if (!checkvaltype2 (cp, &v, def)) {
+ if (isoperator(cp) || gotop) {
+ for (;;) {
+ *p = readchar(cp);
+ if (*p == 0) {
+ goto docalc;
+ }
+ p++;
+ }
+ }
return 0;
+ }
*val = v;
// stupid but works!
_stprintf(p, _T("%u"), v);
}
return 1;
}
+docalc:
if (calc (form, &out)) {
*val = (uae_u32)out;
if (size && *size == 0) {