diff options
Diffstat (limited to 'engines/gob/parse_v1.cpp')
-rw-r--r-- | engines/gob/parse_v1.cpp | 238 |
1 files changed, 121 insertions, 117 deletions
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); |