aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/parse_v1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gob/parse_v1.cpp')
-rw-r--r--engines/gob/parse_v1.cpp238
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);