[Scummvm-cvs-logs] CVS: scummvm/gob draw.cpp,1.22,1.23 draw.h,1.11,1.12 gob.cpp,1.36,1.37 inter.h,1.11,1.12 inter_v1.cpp,1.12,1.13 inter_v2.cpp,1.5,1.6 module.mk,1.7,1.8 parse.cpp,1.21,1.22 parse.h,1.7,1.8
Sven Hesse
drmccoy at users.sourceforge.net
Thu Feb 2 13:13:15 CET 2006
Update of /cvsroot/scummvm/scummvm/gob
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19733
Modified Files:
draw.cpp draw.h gob.cpp inter.h inter_v1.cpp inter_v2.cpp
module.mk parse.cpp parse.h
Log Message:
Added/Changed o2_evaluateStore(), o2_palLoad(), o2_setRenderFlags(), o2_loadTot(), parseVarIndex(), parseValExpr() and parseExpr() for Gob2
Index: draw.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/draw.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- draw.cpp 29 Jan 2006 02:27:10 -0000 1.22
+++ draw.cpp 2 Feb 2006 21:11:59 -0000 1.23
@@ -693,81 +693,6 @@
_cursorY = newY;
}
-void Draw::interPalLoad(void) {
- int16 i;
- int16 ind1;
- int16 ind2;
- byte cmd;
- char *palPtr;
-
- cmd = *_vm->_global->_inter_execPtr++;
- _applyPal = 0;
- if (cmd & 0x80)
- cmd &= 0x7f;
- else
- _applyPal = 1;
-
- if (cmd == 49) {
- warning("inter_palLoad: cmd == 49 is not supported");
- //var_B = 1;
- for (i = 0; i < 18; i++, _vm->_global->_inter_execPtr++) {
- if (i < 2) {
- if (_applyPal == 0)
- continue;
-
- _unusedPalette1[i] = *_vm->_global->_inter_execPtr;
- continue;
- }
- //if (*inter_execPtr != 0)
- // var_B = 0;
-
- ind1 = *_vm->_global->_inter_execPtr >> 4;
- ind2 = (*_vm->_global->_inter_execPtr & 0xf);
-
- _unusedPalette1[i] =
- ((_palLoadData1[ind1] + _palLoadData2[ind2]) << 8) +
- (_palLoadData2[ind1] + _palLoadData1[ind2]);
- }
-
- _vm->_global->_pPaletteDesc->unused1 = _unusedPalette1;
- }
-
- switch (cmd) {
- case 52:
- for (i = 0; i < 16; i++, _vm->_global->_inter_execPtr += 3) {
- _vgaSmallPalette[i].red = _vm->_global->_inter_execPtr[0];
- _vgaSmallPalette[i].green = _vm->_global->_inter_execPtr[1];
- _vgaSmallPalette[i].blue = _vm->_global->_inter_execPtr[2];
- }
- break;
-
- case 50:
- for (i = 0; i < 16; i++, _vm->_global->_inter_execPtr++)
- _unusedPalette2[i] = *_vm->_global->_inter_execPtr;
- break;
-
- case 53:
- palPtr = _vm->_game->loadTotResource(_vm->_inter->load16());
- memcpy((char *)_vgaPalette, palPtr, 768);
- break;
-
- case 54:
- memset((char *)_vgaPalette, 0, 768);
- break;
- }
- if (!_applyPal) {
- _vm->_global->_pPaletteDesc->unused2 = _unusedPalette2;
- _vm->_global->_pPaletteDesc->unused1 = _unusedPalette1;
-
- if (_vm->_global->_videoMode != 0x13)
- _vm->_global->_pPaletteDesc->vgaPal = (Video::Color *)_vgaSmallPalette;
- else
- _vm->_global->_pPaletteDesc->vgaPal = (Video::Color *)_vgaPalette;
-
- _vm->_palanim->fade((Video::PalDesc *) _vm->_global->_pPaletteDesc, 0, 0);
- }
-}
-
void Draw::printText(void) {
int16 savedFlags;
int16 ldestSpriteX;
Index: draw.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/draw.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- draw.h 29 Jan 2006 02:27:10 -0000 1.11
+++ draw.h 2 Feb 2006 21:12:00 -0000 1.12
@@ -111,7 +111,6 @@
void spriteOperation(int16 operation);
void animateCursor(int16 cursor);
- void interPalLoad(void);
void printText(void);
Draw(GobEngine *vm);
Index: gob.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/gob.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- gob.cpp 21 Jan 2006 13:01:18 -0000 1.36
+++ gob.cpp 2 Feb 2006 21:12:00 -0000 1.37
@@ -298,14 +298,17 @@
_mult = new Mult(this);
_pack = new Pack();
_palanim = new PalAnim(this);
- _parse = new Parse(this);
_scenery = new Scenery(this);
_gtimer = new GTimer();
_util = new Util(this);
- if (_features & Gob::GF_GOB1)
+ if (_features & Gob::GF_GOB1) {
_inter = new Inter_v1(this);
- else if (_features & Gob::GF_GOB2)
+ _parse = new Parse_v1(this);
+ }
+ else if (_features & Gob::GF_GOB2) {
_inter = new Inter_v2(this);
+ _parse = new Parse_v2(this);
+ }
else
error("GobEngine::init(): Unknown version of game engine");
if ((_features & Gob::GF_MAC) || (_features & Gob::GF_GOB1))
Index: inter.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/inter.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- inter.h 18 Jan 2006 17:39:34 -0000 1.11
+++ inter.h 2 Feb 2006 21:12:00 -0000 1.12
@@ -300,6 +300,11 @@
void o2_drawStub(void) { warning("Gob2 stub"); }
void o2_stub0x80(void);
+ void o2_stub0x23(void);
+ bool o2_evaluateStore(char &cmdCount, int16 &counter, int16 &retFlag);
+ bool o2_palLoad(char &cmdCount, int16 &counter, int16 &retFlag);
+ void o2_setRenderFlags(void);
+ bool o2_loadTot(char &cmdCount, int16 &counter, int16 &retFlag);
};
} // End of namespace Gob
Index: inter_v1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/inter_v1.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- inter_v1.cpp 29 Jan 2006 19:41:43 -0000 1.12
+++ inter_v1.cpp 2 Feb 2006 21:12:00 -0000 1.13
@@ -32,6 +32,7 @@
#include "gob/cdrom.h"
#include "gob/music.h"
#include "gob/map.h"
+#include "gob/palanim.h"
namespace Gob {
@@ -1722,7 +1723,78 @@
}
bool Inter_v1::o1_palLoad(char &cmdCount, int16 &counter, int16 &retFlag) {
- _vm->_draw->interPalLoad();
+ int16 i;
+ int16 ind1;
+ int16 ind2;
+ byte cmd;
+ char *palPtr;
+
+ cmd = *_vm->_global->_inter_execPtr++;
+ _vm->_draw->_applyPal = 0;
+ if (cmd & 0x80)
+ cmd &= 0x7f;
+ else
+ _vm->_draw->_applyPal = 1;
+
+ if (cmd == 49) {
+ warning("o1_palLoad: cmd == 49 is not supported");
+ //var_B = 1;
+ for (i = 0; i < 18; i++, _vm->_global->_inter_execPtr++) {
+ if (i < 2) {
+ if (_vm->_draw->_applyPal == 0)
+ continue;
+
+ _vm->_draw->_unusedPalette1[i] = *_vm->_global->_inter_execPtr;
+ continue;
+ }
+ //if (*inter_execPtr != 0)
+ // var_B = 0;
+
+ ind1 = *_vm->_global->_inter_execPtr >> 4;
+ ind2 = (*_vm->_global->_inter_execPtr & 0xf);
+
+ _vm->_draw->_unusedPalette1[i] =
+ ((_vm->_draw->_palLoadData1[ind1] + _vm->_draw->_palLoadData2[ind2]) << 8) +
+ (_vm->_draw->_palLoadData2[ind1] + _vm->_draw->_palLoadData1[ind2]);
+ }
+
+ _vm->_global->_pPaletteDesc->unused1 = _vm->_draw->_unusedPalette1;
+ }
+
+ switch (cmd) {
+ case 52:
+ for (i = 0; i < 16; i++, _vm->_global->_inter_execPtr += 3) {
+ _vm->_draw->_vgaSmallPalette[i].red = _vm->_global->_inter_execPtr[0];
+ _vm->_draw->_vgaSmallPalette[i].green = _vm->_global->_inter_execPtr[1];
+ _vm->_draw->_vgaSmallPalette[i].blue = _vm->_global->_inter_execPtr[2];
+ }
+ break;
+
+ case 50:
+ for (i = 0; i < 16; i++, _vm->_global->_inter_execPtr++)
+ _vm->_draw->_unusedPalette2[i] = *_vm->_global->_inter_execPtr;
+ break;
+
+ case 53:
+ palPtr = _vm->_game->loadTotResource(_vm->_inter->load16());
+ memcpy((char *)_vm->_draw->_vgaPalette, palPtr, 768);
+ break;
+
+ case 54:
+ memset((char *)_vm->_draw->_vgaPalette, 0, 768);
+ break;
+ }
+ if (!_vm->_draw->_applyPal) {
+ _vm->_global->_pPaletteDesc->unused2 = _vm->_draw->_unusedPalette2;
+ _vm->_global->_pPaletteDesc->unused1 = _vm->_draw->_unusedPalette1;
+
+ if (_vm->_global->_videoMode != 0x13)
+ _vm->_global->_pPaletteDesc->vgaPal = (Video::Color *)_vm->_draw->_vgaSmallPalette;
+ else
+ _vm->_global->_pPaletteDesc->vgaPal = (Video::Color *)_vm->_draw->_vgaPalette;
+
+ _vm->_palanim->fade((Video::PalDesc *) _vm->_global->_pPaletteDesc, 0, 0);
+ }
return false;
}
Index: inter_v2.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/inter_v2.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- inter_v2.cpp 18 Jan 2006 17:39:34 -0000 1.5
+++ inter_v2.cpp 2 Feb 2006 21:12:00 -0000 1.6
@@ -30,6 +30,7 @@
#include "gob/mult.h"
#include "gob/goblin.h"
#include "gob/cdrom.h"
+#include "gob/palanim.h"
namespace Gob {
@@ -128,7 +129,7 @@
/* 08 */
OPCODE(o1_initCursorAnim),
OPCODE(o1_clearCursorAnim),
- OPCODE(o1_setRenderFlags),
+ OPCODE(o2_setRenderFlags),
{NULL, ""},
/* 0C */
{NULL, ""},
@@ -159,7 +160,7 @@
OPCODE(o2_drawStub),
OPCODE(o2_drawStub),
OPCODE(o2_drawStub),
- OPCODE(o2_drawStub),
+ OPCODE(o2_stub0x23),
/* 24 */
OPCODE(o2_drawStub),
OPCODE(o2_drawStub),
@@ -450,7 +451,7 @@
OPCODE(o1_whileDo),
/* 08 */
OPCODE(o1_callBool),
- OPCODE(o1_evaluateStore),
+ OPCODE(o2_evaluateStore),
OPCODE(o1_loadSpriteToPos),
{NULL, ""},
/* 0C */
@@ -461,8 +462,8 @@
/* 10 */
{NULL, ""},
OPCODE(o1_printText),
- OPCODE(o1_loadTot),
- OPCODE(o1_palLoad),
+ OPCODE(o2_loadTot),
+ OPCODE(o2_palLoad),
/* 14 */
OPCODE(o1_keyFunc),
OPCODE(o1_capturePush),
@@ -712,4 +713,284 @@
warning("STUB: Gob2 drawOperation 0x80 (%d %d)", expr1, expr2);
}
+void Inter_v2::o2_stub0x23(void) {
+ byte result;
+ char str[40];
+
+ result = evalExpr(NULL);
+ strcpy(str, _vm->_global->_inter_resStr);
+
+ warning("STUB: Gob2 drawOperation 0x23 (%d, \"%s\")", result, str);
+}
+
+bool Inter_v2::o2_evaluateStore(char &cmdCount, int16 &counter, int16 &retFlag) {
+ char *savedPos;
+ int16 varOff;
+ int16 token;
+ int16 result;
+ byte loopCount;
+
+ savedPos = _vm->_global->_inter_execPtr;
+ varOff = _vm->_parse->parseVarIndex();
+
+ if (*_vm->_global->_inter_execPtr == 99) {
+ _vm->_global->_inter_execPtr++;
+ loopCount = *_vm->_global->_inter_execPtr++;
+ }
+ else
+ loopCount = 1;
+
+ for (int i = 0; i < loopCount; i++) {
+ token = evalExpr(&result);
+ switch (savedPos[0]) {
+ case 16:
+ case 18:
+ *(_vm->_global->_inter_variables + varOff + i) = _vm->_global->_inter_resVal;
+ break;
+
+ case 17:
+ case 27:
+ *(uint16*)(_vm->_global->_inter_variables + varOff + i * 2) = _vm->_global->_inter_resVal;
+ break;
+
+ case 23:
+ case 26:
+ WRITE_VAR_OFFSET(varOff + i * 4, _vm->_global->_inter_resVal);
+ break;
+
+ case 24:
+ *(uint16*)(_vm->_global->_inter_variables + varOff + i * 4) = _vm->_global->_inter_resVal;
+ break;
+
+ case 25:
+ case 28:
+ if (token == 20)
+ *(_vm->_global->_inter_variables + varOff) = result;
+ else
+ strcpy(_vm->_global->_inter_variables + varOff, _vm->_global->_inter_resStr);
+ break;
+ }
+ }
+
+ return false;
+}
+
+bool Inter_v2::o2_palLoad(char &cmdCount, int16 &counter, int16 &retFlag) {
+ int16 i;
+ int16 ind1;
+ int16 ind2;
+ byte cmd;
+ char *palPtr;
+
+ cmd = *_vm->_global->_inter_execPtr++;
+
+ switch(cmd & 0x7f) {
+ case 48:
+ if ((_vm->_global->_videoMode < 0x32) || (_vm->_global->_videoMode > 0x63)) {
+ _vm->_global->_inter_execPtr += 48;
+ return false;
+ }
+ break;
+
+ case 49:
+ if ((_vm->_global->_videoMode != 5) && (_vm->_global->_videoMode != 7)) {
+ _vm->_global->_inter_execPtr += 18;
+ return false;
+ }
+ break;
+
+ case 50:
+ if (_vm->_global->_videoMode != 0x0D) { // || (word_2D479 == 256) {
+ _vm->_global->_inter_execPtr += 16;
+ return false;
+ }
+ break;
+
+ case 51:
+ if (_vm->_global->_videoMode < 0x64) {
+ _vm->_global->_inter_execPtr += 2;
+ return false;
+ }
+ break;
+
+ case 52:
+ if (_vm->_global->_videoMode != 0x0D) { // || (word_2D479 == 256) {
+ _vm->_global->_inter_execPtr += 48;
+ return false;
+ }
+ break;
+
+ case 53:
+ if (_vm->_global->_videoMode < 0x13) {
+ _vm->_global->_inter_execPtr += 2;
+ return false;
+ }
+ break;
+
+ case 54:
+ if (_vm->_global->_videoMode < 0x13) {
+ return false;
+ }
+ break;
+
+ case 61:
+ if (_vm->_global->_videoMode < 0x13) {
+ *_vm->_global->_inter_execPtr += 4;
+ return false;
+ }
+ break;
+ }
+
+ if ((cmd & 0x7f) == 0x30) {
+ _vm->_global->_inter_execPtr += 48;
+ return false;
+ }
+
+ _vm->_draw->_applyPal = 0;
+ if (cmd & 0x80)
+ cmd &= 0x7f;
+ else
+ _vm->_draw->_applyPal = 1;
+
+ if (cmd == 49) {
+ int dl;
+ for (i = 2; i < 18; i++) {
+ dl = 1;
+ if(_vm->_global->_inter_execPtr[i] != 0)
+ dl = 0;
+ }
+ if (dl != 0) {
+ warning("GOB2 Stub! sub_27413");
+/* sub_27413(_draw_frontSurface);
+ byte_2E521 = 0;
+ _vm->_global->_inter_execPtr += 18;
+ break;*/
+ }
+// byte_2E521 = 1;
+
+ for (i = 0; i < 18; i++, _vm->_global->_inter_execPtr++) {
+ if (i < 2) {
+ if (_vm->_draw->_applyPal == 0)
+ continue;
+
+ _vm->_draw->_unusedPalette1[i] = *_vm->_global->_inter_execPtr;
+ continue;
+ }
+
+ ind1 = *_vm->_global->_inter_execPtr >> 4;
+ ind2 = (*_vm->_global->_inter_execPtr & 0xf);
+
+ _vm->_draw->_unusedPalette1[i] =
+ ((_vm->_draw->_palLoadData1[ind1] + _vm->_draw->_palLoadData2[ind2]) << 8) +
+ (_vm->_draw->_palLoadData2[ind1] + _vm->_draw->_palLoadData1[ind2]);
+ }
+
+ _vm->_global->_pPaletteDesc->unused1 = _vm->_draw->_unusedPalette1;
+ _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);
+ return false;
+ }
+
+ switch (cmd) {
+ case 50:
+ for (i = 0; i < 16; i++, _vm->_global->_inter_execPtr++)
+ _vm->_draw->_unusedPalette2[i] = *_vm->_global->_inter_execPtr;
+ break;
+
+ case 52:
+ for (i = 0; i < 16; i++, _vm->_global->_inter_execPtr += 3) {
+ _vm->_draw->_vgaSmallPalette[i].red = _vm->_global->_inter_execPtr[0];
+ _vm->_draw->_vgaSmallPalette[i].green = _vm->_global->_inter_execPtr[1];
+ _vm->_draw->_vgaSmallPalette[i].blue = _vm->_global->_inter_execPtr[2];
+ }
+ _vm->_global->_inter_execPtr += 48;
+ if (_vm->_global->_videoMode >= 0x13)
+ return false;
+ break;
+
+ case 53:
+ palPtr = _vm->_game->loadTotResource(_vm->_inter->load16());
+ memcpy((char *)_vm->_draw->_vgaPalette, palPtr, 768);
+ break;
+
+ case 54:
+ memset((char *)_vm->_draw->_vgaPalette, 0, 768);
+ break;
+
+ case 61:
+ ind1 = *_vm->_global->_inter_execPtr++;
+ ind2 = (*_vm->_global->_inter_execPtr++ - ind1 + 1) * 3;
+ palPtr = _vm->_game->loadTotResource(_vm->_inter->load16());
+ memcpy((char *)_vm->_draw->_vgaPalette + ind1 * 3, palPtr + ind1 * 3, ind2);
+ if (_vm->_draw->_applyPal) {
+ _vm->_draw->_applyPal = 0;
+ _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);
+ return false;
+ }
+ break;
+ }
+
+ if (!_vm->_draw->_applyPal) {
+ _vm->_global->_pPaletteDesc->unused2 = _vm->_draw->_unusedPalette2;
+ _vm->_global->_pPaletteDesc->unused1 = _vm->_draw->_unusedPalette1;
+ if (_vm->_global->_videoMode < 0x13) {
+ _vm->_global->_pPaletteDesc->vgaPal = (Video::Color *)_vm->_draw->_vgaSmallPalette;
+ _vm->_palanim->fade((Video::PalDesc *) _vm->_global->_pPaletteDesc, 0, 0);
+ return false;
+ }
+ if ((_vm->_global->_videoMode < 0x32) || (_vm->_global->_videoMode >= 0x64)) {
+ _vm->_global->_pPaletteDesc->vgaPal = (Video::Color *)_vm->_draw->_vgaPalette;
+ _vm->_palanim->fade((Video::PalDesc *) _vm->_global->_pPaletteDesc, 0, 0);
+ return false;
+ }
+ _vm->_global->_pPaletteDesc->vgaPal = (Video::Color *)_vm->_draw->_vgaSmallPalette;
+ _vm->_palanim->fade((Video::PalDesc *) _vm->_global->_pPaletteDesc, 0, 0);
+ }
+
+ return false;
+}
+
+void Inter_v2::o2_setRenderFlags(void) {
+ int16 expr;
+
+ expr = _vm->_parse->parseValExpr();
+
+ if (expr & 0x8000) {
+ if (expr & 0x4000)
+ _vm->_draw->_renderFlags = _vm->_parse->parseValExpr();
+ else
+ _vm->_draw->_renderFlags &= expr & 0x3fff;
+ }
+ else
+ _vm->_draw->_renderFlags |= expr & 0x3fff;
+}
+
+bool Inter_v2::o2_loadTot(char &cmdCount, int16 &counter, int16 &retFlag) {
+ char buf[20];
+ int8 size;
+ int16 i;
+
+ if ((*_vm->_global->_inter_execPtr & 0x80) != 0) {
+ _vm->_global->_inter_execPtr++;
+ evalExpr(0);
+ strcpy(buf, _vm->_global->_inter_resStr);
+ } else {
+ size = *_vm->_global->_inter_execPtr++;
+ for (i = 0; i < size; i++)
+ buf[i] = *_vm->_global->_inter_execPtr++;
+
+ buf[size] = 0;
+ }
+
+ if (strcmp(buf, "INSTALL") == 0) {
+ warning("GOB2 Stub! word_2E515 = _inter_variables[0E8h]");
+ }
+
+ strcat(buf, ".tot");
+ if (_terminate != 2)
+ _terminate = true;
+ strcpy(_vm->_game->_totToLoad, buf);
+
+ return false;
+}
+
} // End of namespace Gob
Index: module.mk
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/module.mk,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- module.mk 7 Jan 2006 22:28:54 -0000 1.7
+++ module.mk 2 Feb 2006 21:12:00 -0000 1.8
@@ -20,6 +20,8 @@
gob/pack.o \
gob/palanim.o \
gob/parse.o \
+ gob/parse_v1.o \
+ gob/parse_v2.o \
gob/scenery.o \
gob/sound.o \
gob/timer.o \
Index: parse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/parse.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- parse.cpp 29 Jan 2006 02:56:23 -0000 1.21
+++ parse.cpp 2 Feb 2006 21:12:00 -0000 1.22
@@ -70,576 +70,6 @@
return ptr + (n & 0x0FFFFFFF);
}
-int16 Parse::parseExpr(char stopToken, byte *arg_2) {
- int32 values[20];
- byte operStack[20];
- int32 prevPrevVal;
- int32 prevVal;
- int32 curVal;
- int32 *valPtr;
- char *operPtr;
- byte *arrDescPtr;
- char var_C;
- byte operation;
- int16 dimCount;
- int16 temp;
- int16 temp2;
- uint16 offset;
- int16 dim;
- char var_1A;
- int16 stkPos;
- int16 brackStart;
-
- stkPos = -1;
- operPtr = (char *)(operStack - 1);
- valPtr = values - 1;
-
- while (1) {
- stkPos++;
- operPtr++;
- valPtr++;
- operation = *_vm->_global->_inter_execPtr++;
- if (operation >= 19 && operation <= 29) {
- switch (operation) {
- case 19:
- *operPtr = 20;
- *valPtr = READ_LE_UINT32(_vm->_global->_inter_execPtr);
- _vm->_global->_inter_execPtr += 4;
- break;
-
- case 20:
- *operPtr = 20;
- *valPtr = _vm->_inter->load16();
- break;
-
- case 22:
- *operPtr = 22;
- *valPtr = encodePtr(_vm->_global->_inter_execPtr, kExecPtr);
- _vm->_global->_inter_execPtr += strlen(_vm->_global->_inter_execPtr) + 1;
- break;
-
- case 23:
- *operPtr = 20;
- *valPtr = VAR(_vm->_inter->load16());
- break;
-
- case 25:
- *operPtr = 22;
- temp = _vm->_inter->load16() * 4;
- *valPtr = encodePtr(_vm->_global->_inter_variables + temp, kInterVar);
- if (*_vm->_global->_inter_execPtr == 13) {
- _vm->_global->_inter_execPtr++;
- temp += parseValExpr(12);
- *operPtr = 20;
- *valPtr = (uint8)*(_vm->_global->_inter_variables + temp);
- }
- break;
-
- case 26:
- case 28:
- *operPtr = operation - 6;
- temp = _vm->_inter->load16();
- dimCount = *_vm->_global->_inter_execPtr++;
- arrDescPtr = (byte *)_vm->_global->_inter_execPtr;
- _vm->_global->_inter_execPtr += dimCount;
- offset = 0;
- dim = 0;
- for (dim = 0; dim < dimCount; dim++) {
- temp2 = parseValExpr(12);
- offset = offset * arrDescPtr[dim] + temp2;
- }
-
- if (operation == 26) {
- *valPtr = VAR(temp + offset);
- break;
- }
- *valPtr = encodePtr(_vm->_global->_inter_variables + temp * 4 + offset * _vm->_global->_inter_animDataSize * 4, kInterVar);
- if (*_vm->_global->_inter_execPtr == 13) {
- _vm->_global->_inter_execPtr++;
- temp2 = parseValExpr(12);
- *operPtr = 20;
- *valPtr = (uint8)*(_vm->_global->_inter_variables + temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2);
- }
- break;
-
- case 29:
- operation = *_vm->_global->_inter_execPtr++;
- parseExpr(10, 0);
-
- switch (operation) {
- case 5:
- _vm->_global->_inter_resVal = _vm->_global->_inter_resVal * _vm->_global->_inter_resVal;
- break;
-
- case 0:
- case 1:
- case 6:
- curVal = 1;
- prevVal = 1;
-
- do {
- prevPrevVal = prevVal;
- prevVal = curVal;
- curVal = (curVal + _vm->_global->_inter_resVal / curVal) / 2;
- } while (curVal != prevVal && curVal != prevPrevVal);
- _vm->_global->_inter_resVal = curVal;
- break;
-
- case 10:
- _vm->_global->_inter_resVal = _vm->_util->getRandom(_vm->_global->_inter_resVal);
- break;
-
- case 7:
- if (_vm->_global->_inter_resVal < 0)
- _vm->_global->_inter_resVal = -_vm->_global->_inter_resVal;
- break;
- }
- *operPtr = 20;
- *valPtr = _vm->_global->_inter_resVal;
- }
-
- if (stkPos > 0 && (operPtr[-1] == 1 || operPtr[-1] == 11)) {
- stkPos--;
- operPtr--;
- valPtr--;
-
- if (*operPtr == 1) {
- *operPtr = 20;
- valPtr[0] = -valPtr[1];
- } else if (*operPtr == 11) {
- if (operPtr[1] == 23)
- *operPtr = 24;
- else
- *operPtr = 23;
- }
- }
-
- if (stkPos <= 0)
- continue;
-
- switch (operPtr[-1]) {
- case 2:
- if (operPtr[-2] == 22) {
- if (decodePtr(valPtr[-2]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-2]));
- valPtr[-2] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- strcat(_vm->_global->_inter_resStr, decodePtr(valPtr[0]));
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- }
- break;
-
- case 5:
- valPtr[-2] *= valPtr[0];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 6:
- valPtr[-2] /= valPtr[0];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 7:
- valPtr[-2] %= valPtr[0];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 8:
- valPtr[-2] &= valPtr[0];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
- }
- continue;
- } // op>= 19 && op <= 29
-
- if (operation == stopToken || operation == 30 || operation == 31 || operation == 10) {
- while (stkPos >= 2) {
- var_1A = 0;
- if (operPtr[-2] == 9 && (operation == 10 || operation == stopToken)) {
- operPtr[-2] = operPtr[-1];
- if (operPtr[-2] == 20 || operPtr[-2] == 22)
- valPtr[-2] = valPtr[-1];
-
- stkPos--;
- operPtr--;
- valPtr--;
-
- if (stkPos > 1) {
- if (operPtr[-2] == 1) {
- operPtr[-2] = 20;
- valPtr[-2] = -valPtr[-1];
- stkPos--;
- operPtr--;
- valPtr--;
- } else if (operPtr[-2] == 11) {
- if (operPtr[-1] == 23)
- operPtr[-2] = 24;
- else
- operPtr[-2] = 23;
-
- stkPos--;
- operPtr--;
- valPtr--;
- }
- } // stkPos > 1
-
- if (stkPos > 2) {
- switch (operPtr[-2]) {
- case 5:
- valPtr[-3] *= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
- case 6:
- valPtr[-3] /= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 7:
- valPtr[-3] %= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 8:
- valPtr[-3] &= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
- } // switch
- } // stkPos > 2
-
- if (operation != stopToken)
- break;
- } // if (operPtr[-2] == 9 && ...)
-
- for (brackStart = stkPos - 2; brackStart > 0 &&
- operStack[brackStart] < 30 &&
- operStack[brackStart] != 9; brackStart--);
-
- if (operStack[brackStart] >= 30 || operStack[brackStart] == 9)
- brackStart++;
-
- switch (operPtr[-2]) {
- case 2:
- if (operStack[brackStart] == 20) {
- values[brackStart] += valPtr[-1];
- } else if (operStack[brackStart] == 22) {
- if (decodePtr(values[brackStart]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(values[brackStart]));
- values[brackStart] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- strcat(_vm->_global->_inter_resStr, decodePtr(valPtr[-1]));
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- continue;
-
- case 3:
- values[brackStart] -= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- continue;
-
- case 4:
- values[brackStart] |= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- continue;
-
- case 5:
- valPtr[-3] *= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 6:
- valPtr[-3] /= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 7:
- valPtr[-3] %= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 8:
- valPtr[-3] &= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 30:
- if (operPtr[-3] == 23)
- operPtr[-3] = operPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 31:
- if (operPtr[-3] == 24)
- operPtr[-3] = operPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 32:
- var_C = operPtr[-3];
- operPtr[-3] = 23;
- if (var_C == 20) {
- if (valPtr[-3] < valPtr[-1])
- operPtr[-3] = 24;
- } else if (var_C == 22) {
- if (decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-3]));
- valPtr[-3] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- if (strcmp(_vm->_global->_inter_resStr, decodePtr(valPtr[-1])) < 0)
- operPtr[-3] = 24;
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 33:
- var_C = operPtr[-3];
- operPtr[-3] = 23;
- if (var_C == 20) {
- if (valPtr[-3] <= valPtr[-1])
- operPtr[-3] = 24;
- } else if (var_C == 22) {
- if (decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-3]));
- valPtr[-3] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- if (strcmp(_vm->_global->_inter_resStr, decodePtr(valPtr[-1])) <= 0)
- operPtr[-3] = 24;
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 34:
- var_C = operPtr[-3];
- operPtr[-3] = 23;
- if (var_C == 20) {
- if (valPtr[-3] > valPtr[-1])
- operPtr[-3] = 24;
- } else if (var_C == 22) {
- if (decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-3]));
- valPtr[-3] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- if (strcmp(_vm->_global->_inter_resStr, decodePtr(valPtr[-1])) > 0)
- operPtr[-3] = 24;
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 35:
- var_C = operPtr[-3];
- operPtr[-3] = 23;
- if (var_C == 20) {
- if (valPtr[-3] >= valPtr[-1])
- operPtr[-3] = 24;
- } else if (var_C == 22) {
- if (decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-3]));
- valPtr[-3] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- if (strcmp(_vm->_global->_inter_resStr, decodePtr(valPtr[-1])) >= 0)
- operPtr[-3] = 24;
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 36:
- var_C = operPtr[-3];
- operPtr[-3] = 23;
- if (var_C == 20) {
- if (valPtr[-3] == valPtr[-1])
- operPtr[-3] = 24;
- } else if (var_C == 22) {
- if (decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-3]));
- valPtr[-3] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- if (strcmp(_vm->_global->_inter_resStr, decodePtr(valPtr[-1])) == 0)
- operPtr[-3] = 24;
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- case 37:
- var_C = operPtr[-3];
- operPtr[-3] = 23;
- if (var_C == 20) {
- if (valPtr[-3] != valPtr[-1])
- operPtr[-3] = 24;
- } else if (var_C == 22) {
- if (decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-3]));
- valPtr[-3] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- if (strcmp(_vm->_global->_inter_resStr, decodePtr(valPtr[-1])) != 0)
- operPtr[-3] = 24;
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- break;
-
- default:
- var_1A = 1;
- break;
- } // switch
-
- if (var_1A != 0)
- break;
- } // while (stkPos >= 2)
-
- if (operation == 30 || operation == 31) {
- if (operPtr[-1] == 20) {
- if (valPtr[-1] != 0)
- operPtr[-1] = 24;
- else
- operPtr[-1] = 23;
- }
-
- if ((operation == 30 && operPtr[-1] == 24) ||
- (operation == 31 && operPtr[-1] == 23)) {
- if (stkPos > 1 && operPtr[-2] == 9) {
- skipExpr(10);
- operPtr[-2] = operPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- } else {
- skipExpr(stopToken);
- }
- operation = _vm->_global->_inter_execPtr[-1];
- if (stkPos > 0 && operPtr[-1] == 11) {
- if (operPtr[0] == 23)
- operPtr[-1] = 24;
- else
- operPtr[-1] = 23;
-
- stkPos--;
- operPtr--;
- valPtr--;
- }
- } else
- operPtr[0] = operation;
- } else {
- stkPos--;
- operPtr--;
- valPtr--;
- }
-
- if (operation != stopToken)
- continue;
-
- if (arg_2 != 0)
- *arg_2 = operStack[0];
-
- switch (operStack[0]) {
- case 20:
- _vm->_global->_inter_resVal = values[0];
- break;
-
- case 22:
- if (decodePtr(values[0]) != _vm->_global->_inter_resStr)
- strcpy(_vm->_global->_inter_resStr, decodePtr(values[0]));
- break;
-
- case 11:
- if (arg_2 != 0)
- *arg_2 ^= 1;
- break;
-
- case 23:
- case 24:
- break;
-
- default:
- _vm->_global->_inter_resVal = 0;
- if (arg_2 != 0)
- *arg_2 = 20;
- break;
- }
- return 0;
- } // operation == stopToken || operation == 30 || operation == 31 || operation == 10
-
- if (operation < 1 || operation > 11) {
- if (operation < 32 || operation > 37)
- continue;
-
- if (stkPos > 2) {
- if (operPtr[-2] == 2) {
- if (operPtr[-3] == 20) {
- valPtr[-3] += valPtr[-1];
- } else if (operPtr[-3] == 22) {
- if (decodePtr(valPtr[-3]) != _vm->_global->_inter_resStr) {
- strcpy(_vm->_global->_inter_resStr, decodePtr(valPtr[-3]));
- valPtr[-3] = encodePtr(_vm->_global->_inter_resStr, kResStr);
- }
- strcat(_vm->_global->_inter_resStr, decodePtr(valPtr[-1]));
- }
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
-
- } else if (operPtr[-2] == 3) {
- valPtr[-3] -= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- } else if (operPtr[-2] == 4) {
- valPtr[-3] |= valPtr[-1];
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- }
- }
- }
- *operPtr = operation;
- }
-}
-
void Parse::skipExpr(char stopToken) {
int16 dimCount;
char operation;
@@ -715,285 +145,6 @@
}
}
-int16 Parse::parseValExpr(unsigned stopToken) {
- int16 values[20];
- byte operStack[20];
- int16 *valPtr;
- byte *operPtr;
- byte *arrDesc;
- unsigned operation;
- int16 temp2;
- int16 dim;
- int16 dimCount;
- int16 temp;
- int16 offset;
- int16 stkPos;
- int16 brackPos;
- static int16 flag = 0;
- int16 oldflag;
-
- oldflag = flag;
- if (flag == 0) {
- flag = 1;
- printExpr(stopToken);
- }
-
- stkPos = -1;
- operPtr = operStack - 1;
- valPtr = values - 1;
-
- while (1) {
- stkPos++;
- operPtr++;
- valPtr++;
-
- operation = *_vm->_global->_inter_execPtr++;
- if (operation >= 19 && operation <= 29) {
- *operPtr = 20;
- switch (operation) {
- case 19:
- *valPtr = READ_LE_UINT32(_vm->_global->_inter_execPtr);
- _vm->_global->_inter_execPtr += 4;
- break;
-
- case 20:
- *valPtr = _vm->_inter->load16();
- break;
-
- case 23:
- *valPtr = (uint16)VAR(_vm->_inter->load16());
- break;
-
- case 25:
- temp = _vm->_inter->load16() * 4;
- _vm->_global->_inter_execPtr++;
- temp += parseValExpr(12);
- *valPtr = (uint8)*(_vm->_global->_inter_variables + temp);
- break;
-
- case 26:
- case 28:
- temp = _vm->_inter->load16();
- dimCount = *_vm->_global->_inter_execPtr++;
- arrDesc = (byte*)_vm->_global->_inter_execPtr;
- _vm->_global->_inter_execPtr += dimCount;
- offset = 0;
- for (dim = 0; dim < dimCount; dim++) {
- temp2 = parseValExpr(12);
- offset = arrDesc[dim] * offset + temp2;
- }
- if (operation == 26) {
- *valPtr = (uint16)VAR(temp + offset);
- } else {
- _vm->_global->_inter_execPtr++;
- temp2 = parseValExpr(12);
- *valPtr = (uint8)*(_vm->_global->_inter_variables + temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2);
- }
- break;
-
- case 29:
- operation = *_vm->_global->_inter_execPtr++;
- parseExpr(10, 0);
-
- if (operation == 5) {
- _vm->_global->_inter_resVal = _vm->_global->_inter_resVal * _vm->_global->_inter_resVal;
- } else if (operation == 7) {
- if (_vm->_global->_inter_resVal < 0)
- _vm->_global->_inter_resVal = -_vm->_global->_inter_resVal;
- } else if (operation == 10) {
- _vm->_global->_inter_resVal = _vm->_util->getRandom(_vm->_global->_inter_resVal);
- }
- *valPtr = _vm->_global->_inter_resVal;
- break;
-
- } // switch
- if (stkPos > 0 && operPtr[-1] == 1) {
- stkPos--;
- operPtr--;
- valPtr--;
- operPtr[0] = 20;
- valPtr[0] = -valPtr[1];
- }
-
- if (stkPos > 0 && operPtr[-1] > 4 && operPtr[-1] < 9) {
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
-
- switch (operPtr[1]) {
- case 5:
- valPtr[0] *= valPtr[2];
- break;
-
- case 6:
- valPtr[0] /= valPtr[2];
- break;
-
- case 7:
- valPtr[0] %= valPtr[2];
- break;
-
- case 8:
- valPtr[0] &= valPtr[2];
- break;
- }
- } // if (stkPos > 0 && cmdPtr[-1] > 4 && cmdPtr[-1] < 9)
- continue;
- }
-
- if (operation >= 1 && operation <= 9) {
- *operPtr = operation;
- continue;
- }
-
- while (stkPos >= 2) {
- if (operPtr[-2] == 9) {
- stkPos--;
- operPtr--;
- valPtr--;
-
- operPtr[-1] = operPtr[0];
- valPtr[-1] = valPtr[0];
- if (stkPos > 1 && operPtr[-2] == 1) {
- valPtr[-2] = 20;
- valPtr[-2] = -valPtr[-1];
-
- stkPos--;
- operPtr--;
- valPtr--;
- }
-
- if (stkPos > 2 && operPtr[-2] > 4
- && operPtr[-2] < 9) {
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- switch (operPtr[0]) {
- case 5:
- operPtr[-1] *= operPtr[1];
- break;
-
- case 6:
- operPtr[-1] /= operPtr[1];
- break;
-
- case 7:
- operPtr[-1] %= operPtr[1];
- break;
-
- case 8:
- operPtr[-1] &= operPtr[1];
- break;
- }
- }
- if (operation == 10)
- break;
- } // operPtr[-2] == 9
-
- for (brackPos = stkPos - 2; brackPos > 0 &&
- operStack[brackPos] < 30
- && operStack[brackPos] != 9; brackPos--);
-
- if (operStack[brackPos] >= 30
- || operStack[brackPos] == 9)
- brackPos++;
-
- if (operPtr[-2] < 2 || operPtr[-2] > 8)
- break;
-
- stkPos -= 2;
- operPtr -= 2;
- valPtr -= 2;
- switch (operPtr[0]) {
- case 2:
- values[brackPos] += valPtr[1];
- continue;
- case 3:
- values[brackPos] -= valPtr[1];
- continue;
- case 4:
- values[brackPos] |= valPtr[1];
- continue;
- case 5:
- valPtr[-1] *= valPtr[1];
- continue;
- case 6:
- valPtr[-1] /= valPtr[1];
- continue;
- case 7:
- valPtr[-1] %= valPtr[1];
- continue;
- case 8:
- valPtr[-1] &= valPtr[1];
- continue;
- }
- }
-
- if (operation != 10) {
- if (operation != stopToken) {
- debug(5, "stoptoken error: %d != %d", operation, stopToken);
- }
- flag = oldflag;
- return values[0];
- }
-
- stkPos--;
- operPtr--;
- valPtr--;
- }
-}
-
-int16 Parse::parseVarIndex() {
- int16 temp2;
- char *arrDesc;
- int16 dim;
- int16 dimCount;
- int16 operation;
- int16 temp;
- int16 offset;
- int16 val;
-
- operation = *_vm->_global->_inter_execPtr++;
- debug(5, "var parse = %d", operation);
- switch (operation) {
- case 23:
- case 25:
- temp = _vm->_inter->load16() * 4;
- debug(5, "oper = %d", (int16)*_vm->_global->_inter_execPtr);
- if (operation == 25 && *_vm->_global->_inter_execPtr == 13) {
- _vm->_global->_inter_execPtr++;
- val = parseValExpr(12);
- temp += val;
- debug(5, "parse subscript = %d", val);
- }
- return temp;
-
- case 26:
- case 28:
- temp = _vm->_inter->load16() * 4;
- dimCount = *_vm->_global->_inter_execPtr++;
- arrDesc = _vm->_global->_inter_execPtr;
- _vm->_global->_inter_execPtr += dimCount;
- offset = 0;
- for (dim = 0; dim < dimCount; dim++) {
- temp2 = parseValExpr(12);
- offset = arrDesc[dim] * offset + temp2;
- }
- offset *= 4;
- if (operation != 28)
- return temp + offset;
-
- if (*_vm->_global->_inter_execPtr == 13) {
- _vm->_global->_inter_execPtr++;
- temp += parseValExpr(12);
- }
- return offset * _vm->_global->_inter_animDataSize + temp;
-
- default:
- return 0;
- }
-}
-
void Parse::printExpr(char stopToken) {
int16 dimCount;
char operation;
Index: parse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gob/parse.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- parse.h 29 Jan 2006 02:20:45 -0000 1.7
+++ parse.h 2 Feb 2006 21:12:00 -0000 1.8
@@ -26,14 +26,15 @@
class Parse {
public:
- int16 parseExpr(char stopToken, byte *resultPtr);
void skipExpr(char stopToken);
- int16 parseValExpr(unsigned stopToken=99);
- int16 parseVarIndex(void);
void printExpr(char stopToken);
void printVarIndex(void);
+ virtual int16 parseVarIndex(void) = 0;
+ virtual int16 parseValExpr(unsigned stopToken=99) = 0;
+ virtual int16 parseExpr(char stopToken, byte *resultPtr) = 0;
Parse(GobEngine *vm);
+ virtual ~Parse() {};
protected:
enum PointerType {
@@ -48,6 +49,26 @@
char *decodePtr(int32 n);
};
+class Parse_v1 : public Parse {
+public:
+ Parse_v1(GobEngine *vm);
+ virtual ~Parse_v1() {};
+
+ virtual int16 parseVarIndex(void);
+ virtual int16 parseValExpr(unsigned stopToken=99);
+ virtual int16 parseExpr(char stopToken, byte *resultPtr);
+};
+
+class Parse_v2 : public Parse_v1 {
+public:
+ Parse_v2(GobEngine *vm);
+ virtual ~Parse_v2() {};
+
+ virtual int16 parseVarIndex(void);
+ virtual int16 parseValExpr(unsigned stopToken=99);
+ virtual int16 parseExpr(char stopToken, byte *resultPtr);
+};
+
} // End of namespace Gob
#endif
More information about the Scummvm-git-logs
mailing list