diff options
author | Max Horn | 2009-04-07 13:21:20 +0000 |
---|---|---|
committer | Max Horn | 2009-04-07 13:21:20 +0000 |
commit | 3f22e4b4018059be3b8b33f981d773813443db97 (patch) | |
tree | 5bdf0957e17a55f2590d184e782c3470c190534a /engines | |
parent | 37bfe22a54a6f4b48ac9e26935e8e2586f1b4a91 (diff) | |
download | scummvm-rg350-3f22e4b4018059be3b8b33f981d773813443db97.tar.gz scummvm-rg350-3f22e4b4018059be3b8b33f981d773813443db97.tar.bz2 scummvm-rg350-3f22e4b4018059be3b8b33f981d773813443db97.zip |
GOB: Gave tons of opcode explicit names. As a result, found potential bugs in parse_v2.cpp (related to OP_LOAD_VAR_UINT8 and OP_LOAD_VAR_UINT16, see FIXME comments in parse.h)
svn-id: r39889
Diffstat (limited to 'engines')
-rw-r--r-- | engines/gob/parse.cpp | 120 | ||||
-rw-r--r-- | engines/gob/parse.h | 59 | ||||
-rw-r--r-- | engines/gob/parse_v1.cpp | 238 | ||||
-rw-r--r-- | engines/gob/parse_v2.cpp | 276 |
4 files changed, 379 insertions, 314 deletions
diff --git a/engines/gob/parse.cpp b/engines/gob/parse.cpp index 3dfcc0bb47..7bcdfb4f79 100644 --- a/engines/gob/parse.cpp +++ b/engines/gob/parse.cpp @@ -82,10 +82,10 @@ void Parse::skipExpr(char stopToken) { int16 dim; num = 0; - while (1) { + while (true) { operation = *_vm->_global->_inter_execPtr++; - if ((operation >= 14) && (operation <= 29)) { + if ((operation >= 14) && (operation <= OP_FUNC)) { switch (operation) { case 14: _vm->_global->_inter_execPtr += 4; @@ -95,26 +95,26 @@ void Parse::skipExpr(char stopToken) { case 17: case 18: - case 20: + case OP_LOAD_IMM_INT16: case 23: case 24: _vm->_global->_inter_execPtr += 2; break; - case 19: + case OP_LOAD_IMM_INT32: _vm->_global->_inter_execPtr += 4; break; - case 21: + case OP_LOAD_IMM_INT8: _vm->_global->_inter_execPtr += 1; break; - case 22: + case OP_LOAD_IMM_STR: _vm->_global->_inter_execPtr += strlen((char *) _vm->_global->_inter_execPtr) + 1; break; - case 25: + case OP_LOAD_VAR_STR: _vm->_global->_inter_execPtr += 2; if (*_vm->_global->_inter_execPtr == 13) { _vm->_global->_inter_execPtr++; @@ -125,10 +125,10 @@ void Parse::skipExpr(char stopToken) { case 15: _vm->_global->_inter_execPtr += 2; - case 16: - case 26: - case 27: - case 28: + case OP_ARRAY_UINT8: + case OP_ARRAY_UINT32: + case OP_ARRAY_UINT16: + case OP_ARRAY_STR: dimCount = _vm->_global->_inter_execPtr[2]; // skip header and dimensions _vm->_global->_inter_execPtr += 3 + dimCount; @@ -136,31 +136,31 @@ void Parse::skipExpr(char stopToken) { for (dim = 0; dim < dimCount; dim++) skipExpr(12); - if ((operation == 28) && (*_vm->_global->_inter_execPtr == 13)) { + if ((operation == OP_ARRAY_STR) && (*_vm->_global->_inter_execPtr == 13)) { _vm->_global->_inter_execPtr++; skipExpr(12); } break; - case 29: + case OP_FUNC: _vm->_global->_inter_execPtr++; skipExpr(10); } continue; - } // if ((operation >= 16) && (operation <= 29)) + } // if ((operation >= OP_ARRAY_UINT8) && (operation <= OP_FUNC)) - if (operation == 9) { + if (operation == OP_BEGIN_EXPR) { num++; continue; } - if ((operation == 11) || ((operation >= 1) && (operation <= 8))) + if ((operation == OP_NOT) || ((operation >= OP_NEG) && (operation <= 8))) continue; - if ((operation >= 30) && (operation <= 37)) + if ((operation >= OP_OR) && (operation <= OP_NEQ)) continue; - if (operation == 10) + if (operation == OP_END_EXPR) num--; if (operation != stopToken) @@ -191,10 +191,10 @@ void Parse::printExpr_internal(char stopToken) { byte func; num = 0; - while (1) { + while (true) { operation = *_vm->_global->_inter_execPtr++; - if ((operation >= 16) && (operation <= 29)) { + if ((operation >= OP_ARRAY_UINT8) && (operation <= OP_FUNC)) { // operands switch (operation) { @@ -206,20 +206,20 @@ void Parse::printExpr_internal(char stopToken) { debugN(5, "var8_%d", _vm->_inter->load16()); break; - case 19: // int32/uint32 immediate + case OP_LOAD_IMM_INT32: // int32/uint32 immediate debugN(5, "%d", READ_LE_UINT32(_vm->_global->_inter_execPtr)); _vm->_global->_inter_execPtr += 4; break; - case 20: // int16 immediate + case OP_LOAD_IMM_INT16: // int16 immediate debugN(5, "%d", _vm->_inter->load16()); break; - case 21: // int8 immediate + case OP_LOAD_IMM_INT8: // int8 immediate debugN(5, "%d", (int8) *_vm->_global->_inter_execPtr++); break; - case 22: // string immediate + case OP_LOAD_IMM_STR: // string immediate debugN(5, "\42%s\42", _vm->_global->_inter_execPtr); _vm->_global->_inter_execPtr += strlen((char *) _vm->_global->_inter_execPtr) + 1; @@ -230,7 +230,7 @@ void Parse::printExpr_internal(char stopToken) { debugN(5, "var_%d", _vm->_inter->load16()); break; - case 25: // string variable load + case OP_LOAD_VAR_STR: // string variable load debugN(5, "(&var_%d)", _vm->_inter->load16()); if (*_vm->_global->_inter_execPtr == 13) { _vm->_global->_inter_execPtr++; @@ -239,12 +239,12 @@ void Parse::printExpr_internal(char stopToken) { } break; - case 16: // uint8 array access - case 26: // uint32 array access - case 27: // uint16 array access - case 28: // string array access + case OP_ARRAY_UINT8: // uint8 array access + case OP_ARRAY_UINT32: // uint32 array access + case OP_ARRAY_UINT16: // uint16 array access + case OP_ARRAY_STR: // string array access debugN(5, "\n"); - if (operation == 28) + if (operation == OP_ARRAY_STR) debugN(5, "(&"); debugN(5, "var_%d[", _vm->_inter->load16()); @@ -258,25 +258,25 @@ void Parse::printExpr_internal(char stopToken) { debugN(5, ","); } debugN(5, "]"); - if (operation == 28) + if (operation == OP_ARRAY_STR) debugN(5, ")"); - if ((operation == 28) && (*_vm->_global->_inter_execPtr == 13)) { + if ((operation == OP_ARRAY_STR) && (*_vm->_global->_inter_execPtr == 13)) { _vm->_global->_inter_execPtr++; debugN(5, "{"); printExpr_internal(12); // this also prints the closing } } break; - case 29: // function + case OP_FUNC: // function func = *_vm->_global->_inter_execPtr++; - if (func == 5) + if (func == FUNC_SQR) debugN(5, "sqr("); - else if (func == 10) + else if (func == FUNC_RAND) debugN(5, "rand("); - else if (func == 7) + else if (func == FUNC_ABS) debugN(5, "abs("); - else if ((func == 0) || (func == 1) || (func == 6)) + else if ((func == FUNC_SQRT1) || (func == FUNC_SQRT2) || (func == FUNC_SQRT3)) debugN(5, "sqrt("); else debugN(5, "id("); @@ -284,23 +284,23 @@ void Parse::printExpr_internal(char stopToken) { break; } continue; - } // if ((operation >= 16) && (operation <= 29)) + } // if ((operation >= OP_ARRAY_UINT8) && (operation <= OP_FUNC)) // operators switch (operation) { - case 9: + case OP_BEGIN_EXPR: debugN(5, "("); break; - case 11: + case OP_NOT: debugN(5, "!"); break; - case 10: + case OP_END_EXPR: debugN(5, ")"); break; - case 1: + case OP_NEG: debugN(5, "-"); break; @@ -332,7 +332,7 @@ void Parse::printExpr_internal(char stopToken) { debugN(5, "&"); break; - case 30: + case OP_OR: debugN(5, "||"); break; @@ -340,27 +340,27 @@ void Parse::printExpr_internal(char stopToken) { debugN(5, "&&"); break; - case 32: + case OP_LESS: debugN(5, "<"); break; - case 33: + case OP_LEQ: debugN(5, "<="); break; - case 34: + case OP_GREATER: debugN(5, ">"); break; - case 35: + case OP_GEQ: debugN(5, ">="); break; - case 36: + case OP_EQ: debugN(5, "=="); break; - case 37: + case OP_NEQ: debugN(5, "!="); break; @@ -381,18 +381,18 @@ void Parse::printExpr_internal(char stopToken) { break; } - if (operation == 9) { + if (operation == OP_BEGIN_EXPR) { num++; continue; } - if ((operation == 11) || ((operation >= 1) && (operation <= 8))) + if ((operation == OP_NOT) || ((operation >= OP_NEG) && (operation <= 8))) continue; - if ((operation >= 30) && (operation <= 37)) + if ((operation >= OP_OR) && (operation <= OP_NEQ)) continue; - if (operation == 10) + if (operation == OP_END_EXPR) num--; if (operation == stopToken) { @@ -416,18 +416,18 @@ void Parse::printVarIndex() { operation = *_vm->_global->_inter_execPtr++; switch (operation) { case 23: - case 25: + case OP_LOAD_VAR_STR: temp = _vm->_inter->load16() * 4; debugN(5, "&var_%d", temp); - if ((operation == 25) && (*_vm->_global->_inter_execPtr == 13)) { + if ((operation == OP_LOAD_VAR_STR) && (*_vm->_global->_inter_execPtr == 13)) { _vm->_global->_inter_execPtr++; debugN(5, "+"); printExpr(12); } break; - case 26: - case 28: + case OP_ARRAY_UINT32: + case OP_ARRAY_STR: debugN(5, "&var_%d[", _vm->_inter->load16()); dimCount = *_vm->_global->_inter_execPtr++; arrDesc = _vm->_global->_inter_execPtr; @@ -440,7 +440,7 @@ void Parse::printVarIndex() { } debugN(5, "]"); - if ((operation == 28) && (*_vm->_global->_inter_execPtr == 13)) { + if ((operation == OP_ARRAY_STR) && (*_vm->_global->_inter_execPtr == 13)) { _vm->_global->_inter_execPtr++; debugN(5, "+"); printExpr(12); @@ -459,9 +459,9 @@ void Parse::printVarIndex() { int Parse::cmpHelper(byte *operPtr, int32 *valPtr) { byte var_C = operPtr[-3]; int cmpTemp; - if (var_C == 20) { + if (var_C == OP_LOAD_IMM_INT16) { cmpTemp = (int)valPtr[-3] - (int)valPtr[-1]; - } else if (var_C == 22) { + } else if (var_C == OP_LOAD_IMM_STR) { if ((char *)decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *)decodePtr(valPtr[-3])); valPtr[-3] = encodePtr((byte *) _vm->_global->_inter_resStr, kResStr); diff --git a/engines/gob/parse.h b/engines/gob/parse.h index 9bd8f6afab..e0696fa0bb 100644 --- a/engines/gob/parse.h +++ b/engines/gob/parse.h @@ -29,13 +29,70 @@ namespace Gob { enum { + OP_NEG = 1, OP_ADD = 2, OP_SUB = 3, OP_BITOR = 4, OP_MUL = 5, OP_DIV = 6, OP_MOD = 7, - OP_BITAND = 8 + OP_BITAND = 8, + OP_BEGIN_EXPR = 9, + OP_END_EXPR = 10, + OP_NOT = 11, + + + OP_ARRAY_UINT8 = 16, + + // FIXME: OP_LOAD_VAR_UINT16 comment says "uint16 variable load" in + // Parse::printExpr_internal, and does that in Parse_v2::parseExpr, + // but reads int8 in Parse_v2::parseValExpr + OP_LOAD_VAR_UINT16 = 17, + // FIXME: OP_LOAD_VAR_UINT8 comment says "uint8 variable load" in + // Parse::printExpr_internal, but reads int8 in Parse_v2::parseValExpr + OP_LOAD_VAR_UINT8 = 18, + OP_LOAD_IMM_INT32 = 19, + OP_LOAD_IMM_INT16 = 20, + OP_LOAD_IMM_INT8 = 21, + OP_LOAD_IMM_STR = 22, + + OP_LOAD_VAR_UINT32 = 23, // ??? + OP_LOAD_VAR_UINT32_AS_UINT16 = 24, // ??? + OP_LOAD_VAR_STR = 25, + + OP_ARRAY_UINT32 = 26, + OP_ARRAY_UINT16 = 27, + OP_ARRAY_STR = 28, + + OP_FUNC = 29, + + OP_OR = 30, // Logical OR + OP_AND = 31, // Logical AND + OP_LESS = 32, + OP_LEQ = 33, + OP_GREATER = 34, + OP_GEQ = 35, + OP_EQ = 36, + OP_NEQ = 37 +}; + +enum { + FUNC_SQRT1 = 0, + FUNC_SQRT2 = 1, + FUNC_SQRT3 = 6, + + FUNC_SQR = 5, + FUNC_ABS = 7, + FUNC_RAND = 10 +}; + +enum { + // FIXME: The following two 'truth values' are stored inside the list + // of "operators". So they somehow coincide with OP_LOAD_VAR_UINT32 + // and OP_LOAD_VAR_UINT32_AS_UINT16. I haven't yet quite understood + // how, resp. what that means. You have been warned. + GOB_TRUE = 24, + GOB_FALSE = 23 }; class Parse { diff --git a/engines/gob/parse_v1.cpp b/engines/gob/parse_v1.cpp index d25b2beb23..5352e9a611 100644 --- a/engines/gob/parse_v1.cpp +++ b/engines/gob/parse_v1.cpp @@ -49,12 +49,12 @@ int16 Parse_v1::parseVarIndex(uint16 *arg_0, uint16 *arg_4) { debugC(5, kDebugParser, "var parse = %d", operation); switch (operation) { case 23: - case 25: + case OP_LOAD_VAR_STR: temp = _vm->_inter->load16() * 4; debugC(5, kDebugParser, "oper = %d", (int16) *_vm->_global->_inter_execPtr); - if ((operation == 25) && (*_vm->_global->_inter_execPtr == 13)) { + if ((operation == OP_LOAD_VAR_STR) && (*_vm->_global->_inter_execPtr == 13)) { _vm->_global->_inter_execPtr++; val = parseValExpr(12); temp += val; @@ -62,8 +62,8 @@ int16 Parse_v1::parseVarIndex(uint16 *arg_0, uint16 *arg_4) { } return temp; - case 26: - case 28: + case OP_ARRAY_UINT32: + case OP_ARRAY_STR: temp = _vm->_inter->load16() * 4; dimCount = *_vm->_global->_inter_execPtr++; arrDesc = _vm->_global->_inter_execPtr; @@ -74,7 +74,7 @@ int16 Parse_v1::parseVarIndex(uint16 *arg_0, uint16 *arg_4) { offset = arrDesc[dim] * offset + temp2; } offset *= 4; - if (operation != 28) + if (operation != OP_ARRAY_STR) return temp + offset; if (*_vm->_global->_inter_execPtr == 13) { @@ -115,21 +115,21 @@ int16 Parse_v1::parseValExpr(byte stopToken) { operPtr = operStack - 1; valPtr = values - 1; - while (1) { + while (true) { stkPos++; operPtr++; valPtr++; operation = *_vm->_global->_inter_execPtr++; - if ((operation >= 19) && (operation <= 29)) { - *operPtr = 20; + if ((operation >= OP_LOAD_IMM_INT32) && (operation <= OP_FUNC)) { + *operPtr = OP_LOAD_IMM_INT16; switch (operation) { - case 19: + case OP_LOAD_IMM_INT32: *valPtr = READ_LE_UINT32(_vm->_global->_inter_execPtr); _vm->_global->_inter_execPtr += 4; break; - case 20: + case OP_LOAD_IMM_INT16: *valPtr = _vm->_inter->load16(); break; @@ -137,15 +137,15 @@ int16 Parse_v1::parseValExpr(byte stopToken) { *valPtr = (uint16) VAR(_vm->_inter->load16()); break; - case 25: + case OP_LOAD_VAR_STR: temp = _vm->_inter->load16() * 4; _vm->_global->_inter_execPtr++; temp += parseValExpr(12); *valPtr = READ_VARO_UINT8(temp); break; - case 26: - case 28: + case OP_ARRAY_UINT32: + case OP_ARRAY_STR: temp = _vm->_inter->load16(); dimCount = *_vm->_global->_inter_execPtr++; arrDesc = _vm->_global->_inter_execPtr; @@ -155,7 +155,7 @@ int16 Parse_v1::parseValExpr(byte stopToken) { temp2 = parseValExpr(12); offset = arrDesc[dim] * offset + temp2; } - if (operation == 26) { + if (operation == OP_ARRAY_UINT32) { *valPtr = (uint16) VAR(temp + offset); } else { _vm->_global->_inter_execPtr++; @@ -165,17 +165,17 @@ int16 Parse_v1::parseValExpr(byte stopToken) { } break; - case 29: + case OP_FUNC: operation = *_vm->_global->_inter_execPtr++; parseExpr(10, 0); - if (operation == 5) { + if (operation == FUNC_SQR) { _vm->_global->_inter_resVal = _vm->_global->_inter_resVal * _vm->_global->_inter_resVal; - } else if (operation == 7) { + } else if (operation == FUNC_ABS) { if (_vm->_global->_inter_resVal < 0) _vm->_global->_inter_resVal = -_vm->_global->_inter_resVal; - } else if (operation == 10) { + } else if (operation == FUNC_RAND) { _vm->_global->_inter_resVal = _vm->_util->getRandom(_vm->_global->_inter_resVal); } @@ -183,15 +183,15 @@ int16 Parse_v1::parseValExpr(byte stopToken) { break; } // switch - if ((stkPos > 0) && (operPtr[-1] == 1)) { + if ((stkPos > 0) && (operPtr[-1] == OP_NEG)) { stkPos--; operPtr--; valPtr--; - operPtr[0] = 20; + operPtr[0] = OP_LOAD_IMM_INT16; valPtr[0] = -valPtr[1]; } - if ((stkPos > 0) && (operPtr[-1] > 4) && (operPtr[-1] < 9)) { + if ((stkPos > 0) && (operPtr[-1] >= OP_MUL) && (operPtr[-1] <= OP_BITAND)) { stkPos -= 2; operPtr -= 2; valPtr -= 2; @@ -213,25 +213,25 @@ int16 Parse_v1::parseValExpr(byte stopToken) { valPtr[0] &= valPtr[2]; break; } - } // if ((stkPos > 0) && (cmdPtr[-1] > 4) && (cmdPtr[-1] < 9)) + } // if ((stkPos > 0) && (cmdPtr[-1] >= OP_MUL) && (cmdPtr[-1] <= OP_BITAND)) continue; } - if ((operation >= 1) && (operation <= 9)) { + if ((operation >= OP_NEG) && (operation <= OP_BEGIN_EXPR)) { *operPtr = operation; continue; } while (stkPos >= 2) { - if (operPtr[-2] == 9) { + if (operPtr[-2] == OP_BEGIN_EXPR) { stkPos--; operPtr--; valPtr--; operPtr[-1] = operPtr[0]; valPtr[-1] = valPtr[0]; - if ((stkPos > 1) && (operPtr[-2] == 1)) { - valPtr[-2] = 20; + if ((stkPos > 1) && (operPtr[-2] == OP_NEG)) { + valPtr[-2] = OP_LOAD_IMM_INT16; valPtr[-2] = -valPtr[-1]; stkPos--; @@ -239,7 +239,7 @@ int16 Parse_v1::parseValExpr(byte stopToken) { valPtr--; } - if ((stkPos > 2) && (operPtr[-2] > 4) && (operPtr[-2] < 9)) { + if ((stkPos > 2) && (operPtr[-2] >= OP_MUL) && (operPtr[-2] <= OP_BITAND)) { stkPos -= 2; operPtr -= 2; valPtr -= 2; @@ -261,16 +261,16 @@ int16 Parse_v1::parseValExpr(byte stopToken) { break; } } - if (operation == 10) + if (operation == OP_END_EXPR) break; - } // operPtr[-2] == 9 + } // operPtr[-2] == OP_BEGIN_EXPR for (brackPos = (stkPos - 2); (brackPos > 0) && - (operStack[brackPos] < 30) && (operStack[brackPos] != 9); + (operStack[brackPos] < OP_OR) && (operStack[brackPos] != OP_BEGIN_EXPR); brackPos--) ; - if ((operStack[brackPos] >= 30) || (operStack[brackPos] == 9)) + if ((operStack[brackPos] >= OP_OR) || (operStack[brackPos] == OP_BEGIN_EXPR)) brackPos++; if ((operPtr[-2] < 2) || (operPtr[-2] > 8)) @@ -304,7 +304,7 @@ int16 Parse_v1::parseValExpr(byte stopToken) { } } - if (operation != 10) { + if (operation != OP_END_EXPR) { if (operation != stopToken) debugC(5, kDebugParser, "stoptoken error: %d != %d", operation, stopToken); @@ -342,51 +342,51 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { operPtr = operStack - 1; valPtr = values - 1; - while (1) { + while (true) { stkPos++; operPtr++; valPtr++; operation = *_vm->_global->_inter_execPtr++; - if ((operation >= 19) && (operation <= 29)) { + if ((operation >= OP_LOAD_IMM_INT32) && (operation <= OP_FUNC)) { switch (operation) { - case 19: - *operPtr = 20; + case OP_LOAD_IMM_INT32: + *operPtr = OP_LOAD_IMM_INT16; *valPtr = READ_LE_UINT32(_vm->_global->_inter_execPtr); _vm->_global->_inter_execPtr += 4; break; - case 20: - *operPtr = 20; + case OP_LOAD_IMM_INT16: + *operPtr = OP_LOAD_IMM_INT16; *valPtr = _vm->_inter->load16(); break; - case 22: - *operPtr = 22; + case OP_LOAD_IMM_STR: + *operPtr = OP_LOAD_IMM_STR; *valPtr = encodePtr(_vm->_global->_inter_execPtr, kExecPtr); _vm->_global->_inter_execPtr += strlen((char *) _vm->_global->_inter_execPtr) + 1; break; case 23: - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = VAR(_vm->_inter->load16()); break; - case 25: - *operPtr = 22; + case OP_LOAD_VAR_STR: + *operPtr = OP_LOAD_IMM_STR; temp = _vm->_inter->load16() * 4; *valPtr = encodePtr(_vm->_inter->_variables->getAddressOff8(temp, 0), kInterVar); if (*_vm->_global->_inter_execPtr == 13) { _vm->_global->_inter_execPtr++; temp += parseValExpr(12); - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = READ_VARO_UINT8(temp); } break; - case 26: - case 28: + case OP_ARRAY_UINT32: + case OP_ARRAY_STR: *operPtr = operation - 6; temp = _vm->_inter->load16(); dimCount = *_vm->_global->_inter_execPtr++; @@ -399,7 +399,7 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { offset = offset * arrDescPtr[dim] + temp2; } - if (operation == 26) { + if (operation == OP_ARRAY_UINT32) { *valPtr = VAR(temp + offset); break; } @@ -409,25 +409,25 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { if (*_vm->_global->_inter_execPtr == 13) { _vm->_global->_inter_execPtr++; temp2 = parseValExpr(12); - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = READ_VARO_UINT8(temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2); } break; - case 29: + case OP_FUNC: operation = *_vm->_global->_inter_execPtr++; parseExpr(10, 0); switch (operation) { - case 5: + case FUNC_SQR: _vm->_global->_inter_resVal = _vm->_global->_inter_resVal * _vm->_global->_inter_resVal; break; - case 0: - case 1: - case 6: + case FUNC_SQRT1: + case FUNC_SQRT2: + case FUNC_SQRT3: curVal = 1; prevVal = 1; @@ -439,33 +439,33 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { _vm->_global->_inter_resVal = curVal; break; - case 10: + case FUNC_RAND: _vm->_global->_inter_resVal = _vm->_util->getRandom(_vm->_global->_inter_resVal); break; - case 7: + case FUNC_ABS: if (_vm->_global->_inter_resVal < 0) _vm->_global->_inter_resVal = -_vm->_global->_inter_resVal; break; } - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = _vm->_global->_inter_resVal; } - if ((stkPos > 0) && ((operPtr[-1] == 1) || (operPtr[-1] == 11))) { + if ((stkPos > 0) && ((operPtr[-1] == OP_NEG) || (operPtr[-1] == OP_NOT))) { stkPos--; operPtr--; valPtr--; - if (*operPtr == 1) { - *operPtr = 20; + if (*operPtr == OP_NEG) { + *operPtr = OP_LOAD_IMM_INT16; valPtr[0] = -valPtr[1]; - } else if (*operPtr == 11) { - if (operPtr[1] == 23) - *operPtr = 24; + } else if (*operPtr == OP_NOT) { + if (operPtr[1] == GOB_FALSE) + *operPtr = GOB_TRUE; else - *operPtr = 23; + *operPtr = GOB_FALSE; } } @@ -474,7 +474,7 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { switch (operPtr[-1]) { case 2: - if (operPtr[-2] == 22) { + if (operPtr[-2] == OP_LOAD_IMM_STR) { if ((char *) decodePtr(valPtr[-2]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(valPtr[-2])); valPtr[-2] = encodePtr((byte *) _vm->_global->_inter_resStr, kResStr); @@ -515,16 +515,16 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { break; } continue; - } // (op >= 19) && (op <= 29) + } // (op >= OP_LOAD_IMM_INT32) && (op <= OP_FUNC) - if ((operation == stopToken) || (operation == 30) || - (operation == 31) || (operation == 10)) { + if ((operation == stopToken) || (operation == OP_OR) || + (operation == OP_AND) || (operation == OP_END_EXPR)) { while (stkPos >= 2) { var_1A = false; - if ((operPtr[-2] == 9) && - ((operation == 10) || (operation == stopToken))) { + if ((operPtr[-2] == OP_BEGIN_EXPR) && + ((operation == OP_END_EXPR) || (operation == stopToken))) { operPtr[-2] = operPtr[-1]; - if ((operPtr[-2] == 20) || (operPtr[-2] == 22)) + if ((operPtr[-2] == OP_LOAD_IMM_INT16) || (operPtr[-2] == OP_LOAD_IMM_STR)) valPtr[-2] = valPtr[-1]; stkPos--; @@ -532,17 +532,17 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { valPtr--; if (stkPos > 1) { - if (operPtr[-2] == 1) { - operPtr[-2] = 20; + if (operPtr[-2] == OP_NEG) { + operPtr[-2] = OP_LOAD_IMM_INT16; valPtr[-2] = -valPtr[-1]; stkPos--; operPtr--; valPtr--; - } else if (operPtr[-2] == 11) { - if (operPtr[-1] == 23) - operPtr[-2] = 24; + } else if (operPtr[-2] == OP_NOT) { + if (operPtr[-1] == GOB_FALSE) + operPtr[-2] = GOB_TRUE; else - operPtr[-2] = 23; + operPtr[-2] = GOB_FALSE; stkPos--; operPtr--; @@ -583,21 +583,21 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { if (operation != stopToken) break; - } // if ((operPtr[-2] == 9) && ...) + } // if ((operPtr[-2] == OP_BEGIN_EXPR) && ...) for (brackStart = (stkPos - 2); (brackStart > 0) && - (operStack[brackStart] < 30) && (operStack[brackStart] != 9); + (operStack[brackStart] < OP_OR) && (operStack[brackStart] != OP_BEGIN_EXPR); brackStart--) ; - if ((operStack[brackStart] >= 30) || (operStack[brackStart] == 9)) + if ((operStack[brackStart] >= OP_OR) || (operStack[brackStart] == OP_BEGIN_EXPR)) brackStart++; switch (operPtr[-2]) { case OP_ADD: - if (operStack[brackStart] == 20) { + if (operStack[brackStart] == OP_LOAD_IMM_INT16) { values[brackStart] += valPtr[-1]; - } else if (operStack[brackStart] == 22) { + } else if (operStack[brackStart] == OP_LOAD_IMM_STR) { if ((char *) decodePtr(values[brackStart]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(values[brackStart])); values[brackStart] = @@ -652,59 +652,63 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { valPtr -= 2; break; - case 30: - if (operPtr[-3] == 23) + case OP_OR: + // (x OR false) == x + // (x OR true) == true + if (operPtr[-3] == GOB_FALSE) operPtr[-3] = operPtr[-1]; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 31: - if (operPtr[-3] == 24) + case OP_AND: + // (x AND false) == false + // (x AND true) == x + if (operPtr[-3] == GOB_TRUE) operPtr[-3] = operPtr[-1]; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 32: - operPtr[-3] = (cmpHelper(operPtr, valPtr) < 0) ? 24 : 23; + case OP_LESS: + operPtr[-3] = (cmpHelper(operPtr, valPtr) < 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 33: - operPtr[-3] = (cmpHelper(operPtr, valPtr) <= 0) ? 24 : 23; + case OP_LEQ: + operPtr[-3] = (cmpHelper(operPtr, valPtr) <= 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 34: - operPtr[-3] = (cmpHelper(operPtr, valPtr) > 0) ? 24 : 23; + case OP_GREATER: + operPtr[-3] = (cmpHelper(operPtr, valPtr) > 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 35: - operPtr[-3] = (cmpHelper(operPtr, valPtr) >= 0) ? 24 : 23; + case OP_GEQ: + operPtr[-3] = (cmpHelper(operPtr, valPtr) >= 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 36: - operPtr[-3] = (cmpHelper(operPtr, valPtr) == 0) ? 24 : 23; + case OP_EQ: + operPtr[-3] = (cmpHelper(operPtr, valPtr) == 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 37: - operPtr[-3] = (cmpHelper(operPtr, valPtr) != 0) ? 24 : 23; + case OP_NEQ: + operPtr[-3] = (cmpHelper(operPtr, valPtr) != 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; @@ -719,17 +723,17 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { break; } // while (stkPos >= 2) - if ((operation == 30) || (operation == 31)) { - if (operPtr[-1] == 20) { + if ((operation == OP_OR) || (operation == OP_AND)) { + if (operPtr[-1] == OP_LOAD_IMM_INT16) { if (valPtr[-1] != 0) - operPtr[-1] = 24; + operPtr[-1] = GOB_TRUE; else - operPtr[-1] = 23; + operPtr[-1] = GOB_FALSE; } - if (((operation == 30) && (operPtr[-1] == 24)) || - ((operation == 31) && (operPtr[-1] == 23))) { - if ((stkPos > 1) && (operPtr[-2] == 9)) { + if (((operation == OP_OR) && (operPtr[-1] == GOB_TRUE)) || + ((operation == OP_AND) && (operPtr[-1] == GOB_FALSE))) { + if ((stkPos > 1) && (operPtr[-2] == OP_BEGIN_EXPR)) { skipExpr(10); operPtr[-2] = operPtr[-1]; stkPos -= 2; @@ -739,11 +743,11 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { skipExpr(stopToken); operation = _vm->_global->_inter_execPtr[-1]; - if ((stkPos > 0) && (operPtr[-1] == 11)) { - if (operPtr[0] == 23) - operPtr[-1] = 24; + if ((stkPos > 0) && (operPtr[-1] == OP_NOT)) { + if (operPtr[0] == GOB_FALSE) + operPtr[-1] = GOB_TRUE; else - operPtr[-1] = 23; + operPtr[-1] = GOB_FALSE; stkPos--; operPtr--; @@ -764,16 +768,16 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { *arg_2 = operStack[0]; switch (operStack[0]) { - case 20: + case OP_LOAD_IMM_INT16: _vm->_global->_inter_resVal = values[0]; break; - case 22: + case OP_LOAD_IMM_STR: if ((char *) decodePtr(values[0]) != _vm->_global->_inter_resStr) strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(values[0])); break; - case 11: + case OP_NOT: if (arg_2 != 0) *arg_2 ^= 1; break; @@ -785,21 +789,21 @@ int16 Parse_v1::parseExpr(byte stopToken, byte *arg_2) { default: _vm->_global->_inter_resVal = 0; if (arg_2 != 0) - *arg_2 = 20; + *arg_2 = OP_LOAD_IMM_INT16; break; } return 0; - } // (operation == stopToken) || (operation == 30) || (operation == 31) || (operation == 10) + } // (operation == stopToken) || (operation == OP_OR) || (operation == OP_AND) || (operation == OP_END_EXPR) - if (operation < 1 || operation > 11) { - if (operation < 32 || operation > 37) + if (operation < OP_NEG || operation > OP_NOT) { + if (operation < OP_LESS || operation > OP_NEQ) continue; if (stkPos > 2) { if (operPtr[-2] == OP_ADD) { - if (operPtr[-3] == 20) { + if (operPtr[-3] == OP_LOAD_IMM_INT16) { valPtr[-3] += valPtr[-1]; - } else if (operPtr[-3] == 22) { + } else if (operPtr[-3] == OP_LOAD_IMM_STR) { if ((char *) decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(valPtr[-3])); valPtr[-3] = encodePtr((byte *) _vm->_global->_inter_resStr, kResStr); diff --git a/engines/gob/parse_v2.cpp b/engines/gob/parse_v2.cpp index 1e06b26b5a..296e135fa1 100644 --- a/engines/gob/parse_v2.cpp +++ b/engines/gob/parse_v2.cpp @@ -112,10 +112,10 @@ int16 Parse_v2::parseVarIndex(uint16 *arg_0, uint16 *arg_4) { debugC(5, kDebugParser, "var parse = %d", operation); switch (operation) { - case 16: - case 26: - case 27: - case 28: + case OP_ARRAY_UINT8: + case OP_ARRAY_UINT32: + case OP_ARRAY_UINT16: + case OP_ARRAY_STR: temp = _vm->_inter->load16(); dimCount = *_vm->_global->_inter_execPtr++; arrDesc = _vm->_global->_inter_execPtr; @@ -125,11 +125,11 @@ int16 Parse_v2::parseVarIndex(uint16 *arg_0, uint16 *arg_4) { temp2 = parseValExpr(12); offset = arrDesc[dim] * offset + temp2; } - if (operation == 16) + if (operation == OP_ARRAY_UINT8) return varPos + temp + offset; - if (operation == 26) + if (operation == OP_ARRAY_UINT32) return varPos + (temp + offset) * 4; - if (operation == 27) + if (operation == OP_ARRAY_UINT16) return varPos + (temp + offset) * 2; temp *= 4; offset *= 4; @@ -147,11 +147,11 @@ int16 Parse_v2::parseVarIndex(uint16 *arg_0, uint16 *arg_4) { case 23: case 24: - case 25: + case OP_LOAD_VAR_STR: temp = _vm->_inter->load16() * 4; debugC(5, kDebugParser, "oper = %d", (int16) *_vm->_global->_inter_execPtr); - if ((operation == 25) && (*_vm->_global->_inter_execPtr == 13)) { + if ((operation == OP_LOAD_VAR_STR) && (*_vm->_global->_inter_execPtr == 13)) { _vm->_global->_inter_execPtr++; val = parseValExpr(12); temp += val; @@ -237,13 +237,13 @@ int16 Parse_v2::parseValExpr(byte stopToken) { operPtr++; valPtr++; - if ((operation >= 16) && (operation <= 29)) { - *operPtr = 20; + if ((operation >= OP_ARRAY_UINT8) && (operation <= OP_FUNC)) { + *operPtr = OP_LOAD_IMM_INT16; switch (operation) { - case 16: - case 26: - case 27: - case 28: + case OP_ARRAY_UINT8: + case OP_ARRAY_UINT32: + case OP_ARRAY_UINT16: + case OP_ARRAY_STR: temp = _vm->_inter->load16(); dimCount = *_vm->_global->_inter_execPtr++; arrDesc = _vm->_global->_inter_execPtr; @@ -253,13 +253,13 @@ int16 Parse_v2::parseValExpr(byte stopToken) { temp2 = parseValExpr(12); offset = arrDesc[dim] * offset + temp2; } - if (operation == 16) + if (operation == OP_ARRAY_UINT8) *valPtr = (int8) READ_VARO_UINT8(varPos + temp + offset); - else if (operation == 26) + else if (operation == OP_ARRAY_UINT32) *valPtr = (uint16) READ_VARO_UINT32(varPos + temp * 4 + offset * 4); - else if (operation == 27) + else if (operation == OP_ARRAY_UINT16) *valPtr = READ_VARO_UINT16(varPos + temp * 2 + offset * 2); - else if (operation == 28) { + else if (operation == OP_ARRAY_STR) { _vm->_global->_inter_execPtr++; temp2 = parseValExpr(12); *valPtr = READ_VARO_UINT8(varPos + temp * 4 + @@ -275,16 +275,16 @@ int16 Parse_v2::parseValExpr(byte stopToken) { *valPtr = (int8) READ_VARO_UINT8(varPos + _vm->_inter->load16()); break; - case 19: + case OP_LOAD_IMM_INT32: *valPtr = (uint16) READ_LE_UINT32(varPos + _vm->_global->_inter_execPtr); _vm->_global->_inter_execPtr += 4; break; - case 20: + case OP_LOAD_IMM_INT16: *valPtr = _vm->_inter->load16(); break; - case 21: + case OP_LOAD_IMM_INT8: *valPtr = (int8) *_vm->_global->_inter_execPtr++; break; @@ -296,24 +296,24 @@ int16 Parse_v2::parseValExpr(byte stopToken) { *valPtr = READ_VARO_UINT16(varPos + _vm->_inter->load16() * 4); break; - case 25: + case OP_LOAD_VAR_STR: temp = _vm->_inter->load16() * 4; _vm->_global->_inter_execPtr++; temp += parseValExpr(12); *valPtr = READ_VARO_UINT8(varPos + temp); break; - case 29: + case OP_FUNC: operation = *_vm->_global->_inter_execPtr++; parseExpr(10, 0); - if (operation == 5) { + if (operation == FUNC_SQR) { _vm->_global->_inter_resVal = _vm->_global->_inter_resVal * _vm->_global->_inter_resVal; - } else if (operation == 7) { + } else if (operation == FUNC_ABS) { if (_vm->_global->_inter_resVal < 0) _vm->_global->_inter_resVal = -_vm->_global->_inter_resVal; - } else if (operation == 10) { + } else if (operation == FUNC_RAND) { _vm->_global->_inter_resVal = _vm->_util->getRandom(_vm->_global->_inter_resVal); } @@ -321,15 +321,15 @@ int16 Parse_v2::parseValExpr(byte stopToken) { break; } // switch - if ((stkPos > 0) && (operPtr[-1] == 1)) { + if ((stkPos > 0) && (operPtr[-1] == OP_NEG)) { stkPos--; operPtr--; valPtr--; - operPtr[0] = 20; + operPtr[0] = OP_LOAD_IMM_INT16; valPtr[0] = -valPtr[1]; } - if ((stkPos > 0) && (operPtr[-1] > 4) && (operPtr[-1] < 9)) { + if ((stkPos > 0) && (operPtr[-1] >= OP_MUL) && (operPtr[-1] <= OP_BITAND)) { stkPos -= 2; operPtr -= 2; valPtr -= 2; @@ -351,26 +351,26 @@ int16 Parse_v2::parseValExpr(byte stopToken) { valPtr[0] &= valPtr[2]; break; } - } // if ((stkPos > 0) && (cmdPtr[-1] > 4) && (cmdPtr[-1] < 9)) + } // if ((stkPos > 0) && (cmdPtr[-1] >= OP_MUL) && (cmdPtr[-1] <= OP_BITAND)) varPos = 0; continue; } - if ((operation >= 1) && (operation <= 9)) { + if ((operation >= OP_NEG) && (operation <= OP_BEGIN_EXPR)) { *operPtr = operation; continue; } while (stkPos >= 2) { - if (operPtr[-2] == 9) { + if (operPtr[-2] == OP_BEGIN_EXPR) { stkPos--; operPtr--; valPtr--; operPtr[-1] = operPtr[0]; valPtr[-1] = valPtr[0]; - if ((stkPos > 1) && (operPtr[-2] == 1)) { - operPtr[-2] = 20; + if ((stkPos > 1) && (operPtr[-2] == OP_NEG)) { + operPtr[-2] = OP_LOAD_IMM_INT16; valPtr[-2] = -valPtr[-1]; stkPos--; @@ -378,7 +378,7 @@ int16 Parse_v2::parseValExpr(byte stopToken) { valPtr--; } - if ((stkPos > 2) && (operPtr[-2] > 4) && (operPtr[-2] < 9)) { + if ((stkPos > 2) && (operPtr[-2] >= OP_MUL) && (operPtr[-2] <= OP_BITAND)) { stkPos -= 2; operPtr -= 2; valPtr -= 2; @@ -400,16 +400,16 @@ int16 Parse_v2::parseValExpr(byte stopToken) { break; } } - if (operation == 10) + if (operation == OP_END_EXPR) break; - } // operPtr[-2] == 9 + } // operPtr[-2] == OP_BEGIN_EXPR for (brackPos = (stkPos - 2); (brackPos > 0) && - (operStack[brackPos] < 30) && (operStack[brackPos] != 9); + (operStack[brackPos] < OP_OR) && (operStack[brackPos] != OP_BEGIN_EXPR); brackPos--) ; - if ((operStack[brackPos] >= 30) || (operStack[brackPos] == 9)) + if ((operStack[brackPos] >= OP_OR) || (operStack[brackPos] == OP_BEGIN_EXPR)) brackPos++; if ((operPtr[-2] < 2) || (operPtr[-2] > 8)) @@ -443,7 +443,7 @@ int16 Parse_v2::parseValExpr(byte stopToken) { } } - if (operation != 10) { + if (operation != OP_END_EXPR) { if (operation != stopToken) { debugC(5, kDebugParser, "stoptoken error: %d != %d", operation, stopToken); @@ -484,7 +484,7 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { operPtr = operStack - 1; valPtr = values - 1; - while (1) { + while (true) { operation = *_vm->_global->_inter_execPtr++; while ((operation == 14) || (operation == 15)) { @@ -530,13 +530,13 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { operPtr++; valPtr++; - if ((operation >= 16) && (operation <= 29)) { + if ((operation >= OP_ARRAY_UINT8) && (operation <= OP_FUNC)) { switch (operation) { - case 16: - case 26: - case 27: - case 28: - *operPtr = (operation == 28) ? 22 : 20; + case OP_ARRAY_UINT8: + case OP_ARRAY_UINT32: + case OP_ARRAY_UINT16: + case OP_ARRAY_STR: + *operPtr = (operation == OP_ARRAY_STR) ? OP_LOAD_IMM_STR : OP_LOAD_IMM_INT16; temp = _vm->_inter->load16(); dimCount = *_vm->_global->_inter_execPtr++; arrDescPtr = _vm->_global->_inter_execPtr; @@ -546,20 +546,20 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { temp2 = parseValExpr(12); offset = offset * arrDescPtr[dim] + temp2; } - if (operation == 16) + if (operation == OP_ARRAY_UINT8) *valPtr = (int8) READ_VARO_UINT8(varPos + temp + offset); - else if (operation == 26) + else if (operation == OP_ARRAY_UINT32) *valPtr = READ_VARO_UINT32(varPos + temp * 4 + offset * 4); - else if (operation == 27) + else if (operation == OP_ARRAY_UINT16) *valPtr = (int16) READ_VARO_UINT16(varPos + temp * 2 + offset * 2); - else if (operation == 28) { + else if (operation == OP_ARRAY_STR) { *valPtr = encodePtr(_vm->_inter->_variables->getAddressOff8( varPos + temp * 4 + offset * _vm->_global->_inter_animDataSize * 4, 0), kInterVar); if (*_vm->_global->_inter_execPtr == 13) { _vm->_global->_inter_execPtr++; temp2 = parseValExpr(12); - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = READ_VARO_UINT8(varPos + temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2); } @@ -567,68 +567,68 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { break; case 17: - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = (int16) READ_VARO_UINT16(varPos + _vm->_inter->load16() * 2); break; case 18: - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = (int8) READ_VARO_UINT8(varPos + _vm->_inter->load16()); break; - case 19: - *operPtr = 20; + case OP_LOAD_IMM_INT32: + *operPtr = OP_LOAD_IMM_INT16; *valPtr = READ_LE_UINT32(varPos + _vm->_global->_inter_execPtr); _vm->_global->_inter_execPtr += 4; break; - case 20: - *operPtr = 20; + case OP_LOAD_IMM_INT16: + *operPtr = OP_LOAD_IMM_INT16; *valPtr = _vm->_inter->load16(); break; - case 21: - *operPtr = 20; + case OP_LOAD_IMM_INT8: + *operPtr = OP_LOAD_IMM_INT16; *valPtr = (int8) *_vm->_global->_inter_execPtr++; break; - case 22: - *operPtr = 22; + case OP_LOAD_IMM_STR: + *operPtr = OP_LOAD_IMM_STR; *valPtr = encodePtr(_vm->_global->_inter_execPtr, kExecPtr); _vm->_global->_inter_execPtr += strlen((char *) _vm->_global->_inter_execPtr) + 1; break; case 23: - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = READ_VARO_UINT32(varPos + _vm->_inter->load16() * 4); break; case 24: - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = (int16) READ_VARO_UINT16(varPos + _vm->_inter->load16() * 4); break; - case 25: - *operPtr = 22; + case OP_LOAD_VAR_STR: + *operPtr = OP_LOAD_IMM_STR; temp = _vm->_inter->load16() * 4; *valPtr = encodePtr(_vm->_inter->_variables->getAddressOff8(varPos + temp, 0), kInterVar); if (*_vm->_global->_inter_execPtr == 13) { _vm->_global->_inter_execPtr++; temp += parseValExpr(12); - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = READ_VARO_UINT8(varPos + temp); } break; - case 29: + case OP_FUNC: operation = *_vm->_global->_inter_execPtr++; parseExpr(10, 0); switch (operation) { - case 0: - case 1: - case 6: + case FUNC_SQRT1: + case FUNC_SQRT2: + case FUNC_SQRT3: curVal = 1; prevVal = 1; @@ -640,37 +640,37 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { _vm->_global->_inter_resVal = curVal; break; - case 5: + case FUNC_SQR: _vm->_global->_inter_resVal = _vm->_global->_inter_resVal * _vm->_global->_inter_resVal; break; - case 7: + case FUNC_ABS: if (_vm->_global->_inter_resVal < 0) _vm->_global->_inter_resVal = -_vm->_global->_inter_resVal; break; - case 10: + case FUNC_RAND: _vm->_global->_inter_resVal = _vm->_util->getRandom(_vm->_global->_inter_resVal); break; } - *operPtr = 20; + *operPtr = OP_LOAD_IMM_INT16; *valPtr = _vm->_global->_inter_resVal; break; } - if ((stkPos > 0) && ((operPtr[-1] == 1) || (operPtr[-1] == 11))) { + if ((stkPos > 0) && ((operPtr[-1] == OP_NEG) || (operPtr[-1] == OP_NOT))) { stkPos--; operPtr--; valPtr--; - if (*operPtr == 1) { - *operPtr = 20; + if (*operPtr == OP_NEG) { + *operPtr = OP_LOAD_IMM_INT16; valPtr[0] = -valPtr[1]; } else - *operPtr = (operPtr[1] == 23) ? 24 : 23; + *operPtr = (operPtr[1] == GOB_FALSE) ? GOB_TRUE : GOB_FALSE; } if (stkPos <= 0) { @@ -679,8 +679,8 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { } switch (operPtr[-1]) { - case 2: - if (operPtr[-2] == 22) { + case OP_ADD: + if (operPtr[-2] == OP_LOAD_IMM_STR) { if ((char *) decodePtr(valPtr[-2]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(valPtr[-2])); valPtr[-2] = encodePtr((byte *) _vm->_global->_inter_resStr, kResStr); @@ -722,16 +722,16 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { } varPos = 0; continue; - } // (op >= 16) && (op <= 29) + } // (op >= OP_ARRAY_UINT8) && (op <= OP_FUNC) - if ((operation == stopToken) || (operation == 30) || - (operation == 31) || (operation == 10)) { + if ((operation == stopToken) || (operation == OP_OR) || + (operation == OP_AND) || (operation == OP_END_EXPR)) { while (stkPos >= 2) { var_1A = false; - if ((operPtr[-2] == 9) && - ((operation == 10) || (operation == stopToken))) { + if ((operPtr[-2] == OP_BEGIN_EXPR) && + ((operation == OP_END_EXPR) || (operation == stopToken))) { operPtr[-2] = operPtr[-1]; - if ((operPtr[-2] == 20) || (operPtr[-2] == 22)) + if ((operPtr[-2] == OP_LOAD_IMM_INT16) || (operPtr[-2] == OP_LOAD_IMM_STR)) valPtr[-2] = valPtr[-1]; stkPos--; @@ -739,14 +739,14 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { valPtr--; if (stkPos > 1) { - if (operPtr[-2] == 1) { - operPtr[-2] = 20; + if (operPtr[-2] == OP_NEG) { + operPtr[-2] = OP_LOAD_IMM_INT16; valPtr[-2] = -valPtr[-1]; stkPos--; operPtr--; valPtr--; - } else if (operPtr[-2] == 11) { - operPtr[-2] = (operPtr[-1] == 23) ? 24 : 23; + } else if (operPtr[-2] == OP_NOT) { + operPtr[-2] = (operPtr[-1] == GOB_FALSE) ? GOB_TRUE : GOB_FALSE; stkPos--; operPtr--; valPtr--; @@ -787,23 +787,23 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { if (operation != stopToken) break; - } // if ((operPtr[-2] == 9) && ...) + } // if ((operPtr[-2] == OP_BEGIN_EXPR) && ...) for (brackStart = (stkPos - 2); (brackStart > 0) && - (operStack[brackStart] < 30) && (operStack[brackStart] != 9); + (operStack[brackStart] < OP_OR) && (operStack[brackStart] != OP_BEGIN_EXPR); brackStart--) ; - if ((operStack[brackStart] >= 30) || (operStack[brackStart] == 9)) + if ((operStack[brackStart] >= OP_OR) || (operStack[brackStart] == OP_BEGIN_EXPR)) brackStart++; int cmpTemp; switch (operPtr[-2]) { case OP_ADD: - if (operStack[brackStart] == 20) { + if (operStack[brackStart] == OP_LOAD_IMM_INT16) { values[brackStart] += valPtr[-1]; - } else if (operStack[brackStart] == 22) { + } else if (operStack[brackStart] == OP_LOAD_IMM_STR) { if ((char *) decodePtr(values[brackStart]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(values[brackStart])); values[brackStart] = @@ -858,61 +858,65 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { valPtr -= 2; break; - case 30: - if (operPtr[-3] == 23) + case OP_OR: + // (x OR false) == x + // (x OR true) == true + if (operPtr[-3] == GOB_FALSE) operPtr[-3] = operPtr[-1]; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 31: - if (operPtr[-3] == 24) + case OP_AND: + // (x AND false) == false + // (x AND true) == x + if (operPtr[-3] == GOB_TRUE) operPtr[-3] = operPtr[-1]; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 32: - operPtr[-3] = (cmpHelper(operPtr, valPtr) < 0) ? 24 : 23; + case OP_LESS: + operPtr[-3] = (cmpHelper(operPtr, valPtr) < 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 33: - operPtr[-3] = (cmpHelper(operPtr, valPtr) <= 0) ? 24 : 23; + case OP_LEQ: + operPtr[-3] = (cmpHelper(operPtr, valPtr) <= 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 34: - operPtr[-3] = (cmpHelper(operPtr, valPtr) > 0) ? 24 : 23; + case OP_GREATER: + operPtr[-3] = (cmpHelper(operPtr, valPtr) > 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 35: - operPtr[-3] = (cmpHelper(operPtr, valPtr) >= 0) ? 24 : 23; + case OP_GEQ: + operPtr[-3] = (cmpHelper(operPtr, valPtr) >= 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 36: - operPtr[-3] = (cmpHelper(operPtr, valPtr) == 0) ? 24 : 23; + case OP_EQ: + operPtr[-3] = (cmpHelper(operPtr, valPtr) == 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; break; - case 37: - if (operPtr[-3] == 20) { + case OP_NEQ: + if (operPtr[-3] == OP_LOAD_IMM_INT16) { cmpTemp = valPtr[-3] - valPtr[-1]; - } else if (operPtr[-3] == 22) { + } else if (operPtr[-3] == OP_LOAD_IMM_STR) { if ((char *) decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(valPtr[-3])); valPtr[-3] = encodePtr((byte *) _vm->_global->_inter_resStr, kResStr); @@ -920,8 +924,8 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { // FIXME: Why scumm_stricmp here and strcmp everywhere else? cmpTemp = scumm_stricmp(_vm->_global->_inter_resStr, (char *) decodePtr(valPtr[-1])); } - operPtr[-3] = (cmpTemp != 0) ? 24 : 23; - //operPtr[-3] = (cmpHelper(operPtr, valPtr) != 0) ? 24 : 23; + operPtr[-3] = (cmpTemp != 0) ? GOB_TRUE : GOB_FALSE; + //operPtr[-3] = (cmpHelper(operPtr, valPtr) != 0) ? GOB_TRUE : GOB_FALSE; stkPos -= 2; operPtr -= 2; valPtr -= 2; @@ -936,17 +940,17 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { break; } // while (stkPos >= 2) - if ((operation == 30) || (operation == 31)) { - if (operPtr[-1] == 20) { + if ((operation == OP_OR) || (operation == OP_AND)) { + if (operPtr[-1] == OP_LOAD_IMM_INT16) { if (valPtr[-1] != 0) - operPtr[-1] = 24; + operPtr[-1] = GOB_TRUE; else - operPtr[-1] = 23; + operPtr[-1] = GOB_FALSE; } - if (((operation == 30) && (operPtr[-1] == 24)) || - ((operation == 31) && (operPtr[-1] == 23))) { - if ((stkPos > 1) && (operPtr[-2] == 9)) { + if (((operation == OP_OR) && (operPtr[-1] == GOB_TRUE)) || + ((operation == OP_AND) && (operPtr[-1] == GOB_FALSE))) { + if ((stkPos > 1) && (operPtr[-2] == OP_BEGIN_EXPR)) { skipExpr(10); operPtr[-2] = operPtr[-1]; stkPos -= 2; @@ -956,11 +960,11 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { skipExpr(stopToken); } operation = _vm->_global->_inter_execPtr[-1]; - if ((stkPos > 0) && (operPtr[-1] == 11)) { - if (operPtr[0] == 23) - operPtr[-1] = 24; + if ((stkPos > 0) && (operPtr[-1] == OP_NOT)) { + if (operPtr[0] == GOB_FALSE) + operPtr[-1] = GOB_TRUE; else - operPtr[-1] = 23; + operPtr[-1] = GOB_FALSE; stkPos--; operPtr--; @@ -981,16 +985,16 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { *arg_2 = operStack[0]; switch (operStack[0]) { - case 11: + case OP_NOT: if (arg_2 != 0) *arg_2 ^= 1; break; - case 20: + case OP_LOAD_IMM_INT16: _vm->_global->_inter_resVal = values[0]; break; - case 22: + case OP_LOAD_IMM_STR: if ((char *) decodePtr(values[0]) != _vm->_global->_inter_resStr) strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(values[0])); break; @@ -1002,21 +1006,21 @@ int16 Parse_v2::parseExpr(byte stopToken, byte *arg_2) { default: _vm->_global->_inter_resVal = 0; if (arg_2 != 0) - *arg_2 = 20; + *arg_2 = OP_LOAD_IMM_INT16; break; } return 0; - } // (operation == stopToken) || (operation == 30) || (operation == 31) || (operation == 10) + } // (operation == stopToken) || (operation == OP_OR) || (operation == OP_AND) || (operation == OP_END_EXPR) - if ((operation < 1) || (operation > 11)) { - if ((operation < 32) || (operation > 37)) + if ((operation < OP_NEG) || (operation > OP_NOT)) { + if ((operation < OP_LESS) || (operation > OP_NEQ)) continue; if (stkPos > 2) { if (operPtr[-2] == OP_ADD) { - if (operPtr[-3] == 20) { + if (operPtr[-3] == OP_LOAD_IMM_INT16) { valPtr[-3] += valPtr[-1]; - } else if (operPtr[-3] == 22) { + } else if (operPtr[-3] == OP_LOAD_IMM_STR) { if ((char *) decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) { strcpy(_vm->_global->_inter_resStr, (char *) decodePtr(valPtr[-3])); valPtr[-3] = encodePtr((byte *) _vm->_global->_inter_resStr, kResStr); |