aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/segment.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2009-12-21 14:32:54 +0000
committerMatthew Hoops2009-12-21 14:32:54 +0000
commitef79d7f017610e15df5ea6b4c6d6a3b218d4d39f (patch)
tree72c129cb6b65f4286166d265edc88537ad9fb8cf /engines/sci/engine/segment.cpp
parent2a3cbcbc57bbb960e678b40692cffce69c88149b (diff)
downloadscummvm-rg350-ef79d7f017610e15df5ea6b4c6d6a3b218d4d39f.tar.gz
scummvm-rg350-ef79d7f017610e15df5ea6b4c6d6a3b218d4d39f.tar.bz2
scummvm-rg350-ef79d7f017610e15df5ea6b4c6d6a3b218d4d39f.zip
SCI32:
- Fully implement kArray and kIsHiRes and mostly implement kString (printf and atoi subfunctions still missing). - Add a dummy SciGui class for SCI32 to bypass the views. Gabriel Knight 1 will now play the Sierra logo music and the main menu music. - Some other minor SCI32 changes. svn-id: r46462
Diffstat (limited to 'engines/sci/engine/segment.cpp')
-rw-r--r--engines/sci/engine/segment.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp
index fee8a9f4a7..e8b47727ba 100644
--- a/engines/sci/engine/segment.cpp
+++ b/engines/sci/engine/segment.cpp
@@ -66,6 +66,14 @@ SegmentObj *SegmentObj::createSegmentObj(SegmentType type) {
case SEG_TYPE_DYNMEM:
mem = new DynMem();
break;
+#ifdef ENABLE_SCI32
+ case SEG_TYPE_ARRAY:
+ mem = new ArrayTable();
+ break;
+ case SEG_TYPE_STRING:
+ mem = new StringTable();
+ break;
+#endif
default:
error("Unknown SegmentObj type %d", type);
break;
@@ -478,5 +486,38 @@ void DynMem::listAllDeallocatable(SegmentId segId, void *param, NoteCallback not
(*note)(param, make_reg(segId, 0));
}
+#ifdef ENABLE_SCI32
+
+Common::String SciString::toString() {
+ if (_type != 3)
+ error("SciString::toString(): Array is not a string");
+
+ Common::String string;
+ for (uint32 i = 0; i < _size && _data[i] != 0; i++)
+ string += _data[i];
+
+ return string;
+}
+
+void SciString::fromString(Common::String string) {
+ if (_type != 3)
+ error("SciString::fromString(): Array is not a string");
+
+ if (string.size() > _size)
+ setSize(string.size());
+
+ for (uint32 i = 0; i < string.size(); i++)
+ _data[i] = string[i];
+}
+
+SegmentRef StringTable::dereference(reg_t pointer) {
+ SegmentRef ret;
+ ret.isRaw = false;
+ ret.maxSize = _table[pointer.offset].getSize();
+ ret.raw = (byte*)_table[pointer.offset].getRawData();
+ return ret;
+}
+
+#endif
} // End of namespace Sci