aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorLars Skovlund2010-06-15 08:21:39 +0000
committerLars Skovlund2010-06-15 08:21:39 +0000
commit9a1db3f77092f13829604701b419ffc38577388b (patch)
tree60f82652142d9945445cc2343037eb07f409487a /engines
parent0dab9e0e1f39b856a0b996dfa2c3103fe0dbfe2f (diff)
downloadscummvm-rg350-9a1db3f77092f13829604701b419ffc38577388b.tar.gz
scummvm-rg350-9a1db3f77092f13829604701b419ffc38577388b.tar.bz2
scummvm-rg350-9a1db3f77092f13829604701b419ffc38577388b.zip
Add support for SCI32 segment types to seg_table and vr debug commands
svn-id: r49686
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/console.cpp58
-rw-r--r--engines/sci/engine/segment.cpp2
-rw-r--r--engines/sci/engine/segment.h1
3 files changed, 47 insertions, 14 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 6c022bb631..a3e33b13c8 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -1095,6 +1095,14 @@ bool Console::cmdSaveGame(int argc, const char **argv) {
delete out;
}
+ out->finalize();
+ if (out->err()) {
+ delete out;
+ warning("Writing the savegame failed.");
+ } else {
+ delete out;
+ }
+
return true;
}
@@ -1420,6 +1428,16 @@ bool Console::cmdPrintSegmentTable(int argc, const char **argv) {
DebugPrintf("F string fragments");
break;
+#ifdef ENABLE_SCI32
+ case SEG_TYPE_ARRAY:
+ DebugPrintf("A SCI32 arrays (%d)", (*(ArrayTable *)mobj).entries_used);
+ break;
+
+ case SEG_TYPE_STRING:
+ DebugPrintf("T SCI32 strings (%d)", (*(StringTable *)mobj).entries_used);
+ break;
+#endif
+
default:
DebugPrintf("I Invalid (type = %x)", mobj->getType());
break;
@@ -2180,26 +2198,40 @@ bool Console::cmdViewReference(int argc, const char **argv) {
printObject(reg);
break;
case KSIG_REF: {
- int size;
- const SegmentRef block = _engine->_gamestate->_segMan->dereference(reg);
- size = block.maxSize;
+ switch (_engine->_gamestate->_segMan->getSegmentType(reg.segment)) {
+ case SEG_TYPE_STRING: {
+ const SciString *str = _engine->_gamestate->_segMan->lookupString(reg);
+ Common::hexdump((const byte *) str->getRawData(), str->getSize(), 16, 0);
+ break;
+ }
+ case SEG_TYPE_ARRAY: {
+ const SciArray<reg_t> *array = _engine->_gamestate->_segMan->lookupArray(reg);
+ Common::hexdump((const byte *) array->getRawData(), array->getSize(), 16, 0);
+ break;
+ }
+ default: {
+ int size;
+ const SegmentRef block = _engine->_gamestate->_segMan->dereference(reg);
+ size = block.maxSize;
- DebugPrintf("raw data\n");
+ DebugPrintf("raw data\n");
- if (reg_end.segment != 0 && size < reg_end.offset - reg.offset) {
- DebugPrintf("Block end out of bounds (size %d). Resetting.\n", size);
- reg_end = NULL_REG;
- }
+ if (reg_end.segment != 0 && size < reg_end.offset - reg.offset) {
+ DebugPrintf("Block end out of bounds (size %d). Resetting.\n", size);
+ reg_end = NULL_REG;
+ }
- if (reg_end.segment != 0 && (size >= reg_end.offset - reg.offset))
- size = reg_end.offset - reg.offset;
+ if (reg_end.segment != 0 && (size >= reg_end.offset - reg.offset))
+ size = reg_end.offset - reg.offset;
- if (reg_end.segment != 0)
- DebugPrintf("Block size less than or equal to %d\n", size);
+ if (reg_end.segment != 0)
+ DebugPrintf("Block size less than or equal to %d\n", size);
- Common::hexdump(block.raw, size, 16, 0);
+ Common::hexdump(block.raw, size, 16, 0);
+ }
}
break;
+ }
case KSIG_ARITHMETIC:
DebugPrintf("arithmetic value\n %d (%04x)\n", (int16) reg.offset, reg.offset);
break;
diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp
index 879cbc22ee..a6154e7512 100644
--- a/engines/sci/engine/segment.cpp
+++ b/engines/sci/engine/segment.cpp
@@ -435,7 +435,7 @@ bool Script::isValidOffset(uint16 offset) const {
SegmentRef Script::dereference(reg_t pointer) {
if (pointer.offset > _bufSize) {
- warning("Script::dereference(): Attempt to dereference invalid pointer %04x:%04x into script segment (script size=%d)",
+ error("Script::dereference(): Attempt to dereference invalid pointer %04x:%04x into script segment (script size=%d)",
PRINT_REG(pointer), (uint)_bufSize);
return SegmentRef();
}
diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h
index 02d4809b70..61f1c7b3c9 100644
--- a/engines/sci/engine/segment.h
+++ b/engines/sci/engine/segment.h
@@ -802,6 +802,7 @@ public:
byte getType() const { return _type; }
uint32 getSize() const { return _size; }
T *getRawData() { return _data; }
+ const T *getRawData()const { return _data; }
protected:
int8 _type;