TOKEN exprbuf[128]; // Expression buffer
SYM * symbolPtr[1000000]; // Symbol pointers table
static long unused; // For supressing 'write' warnings
+char buffer[256]; // Scratch buffer for messages
// Directive handler table
// dc.b 'string' [,] ...
if (siz == SIZB && *tok == STRING && (tok[2] == ',' || tok[2] == EOL))
{
-// i = strlen((const char*)tok[1]);
i = strlen(string[tok[1]]);
if ((challoc - ch_size) < i)
return error("non-absolute byte value");
if (eval + 0x100 >= 0x200)
- return error(range_error);
+ {
+ sprintf(buffer, "%s (value = $%X)", range_error, eval);
+// return error(range_error);
+ return error(buffer);
+ }
D_byte(eval);
}
//printf("evexpr(): +\n");
--sval; // Pop value
--sattr; // Pop attrib
+//printf("--> N+N: %i + %i = ", *sval, sval[1]);
*sval += sval[1]; // Compute value
+//printf("%i\n", *sval);
if (!(*sattr & TDB))
*sattr = sattr[1];
//printf("evexpr(): -\n");
--sval; // Pop value
--sattr; // Pop attrib
+//printf("--> N-N: %i - %i = ", *sval, sval[1]);
*sval -= sval[1]; // Compute value
+//printf("%i\n", *sval);
attr = (WORD)(*sattr & TDB);
#if 0
case '*':
--sval;
--sattr; // Pop attrib
+//printf("--> NxN: %i x %i = ", *sval, sval[1]);
*sval *= sval[1];
+//printf("%i\n", *sval);
break;
case '/':
--sval;
if (sval[1] == 0)
return error("divide by zero");
- *sval /= sval[1];
+//printf("--> N/N: %i / %i = ", sval[0], sval[1]);
+ // Compiler is picky here: Without casting these, it discards
+ // the sign if dividing a negative # by a positive one,
+ // creating a bad result. :-/
+ // Probably a side effect of using VALUE intead of ints.
+ *sval = (int)sval[0] / (int)sval[1];
+//printf("%i\n", *sval);
break;
case '%':
--sval;
#define MAJOR 1 // Major version number
#define MINOR 3 // Minor version number
-#define PATCH 4 // Patch release number
+#define PATCH 5 // Patch release number
#endif // __VERSION_H__