aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/message.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2009-12-30 16:00:56 +0000
committerMatthew Hoops2009-12-30 16:00:56 +0000
commit5382aa1ab0ac0b42a33a4b73664e3a8064b4211b (patch)
tree17ad3256bc97d181433414aac36b8cf224e22e71 /engines/sci/engine/message.cpp
parentfd2d0fc7182e97fedf901b276bc7e48dcdcb4c13 (diff)
downloadscummvm-rg350-5382aa1ab0ac0b42a33a4b73664e3a8064b4211b.tar.gz
scummvm-rg350-5382aa1ab0ac0b42a33a4b73664e3a8064b4211b.tar.bz2
scummvm-rg350-5382aa1ab0ac0b42a33a4b73664e3a8064b4211b.zip
SCI32:
- Set signature for Array/String - Add the kernel table differences for the GK2 demo - Implement kMessage changes in SCI32 - Use an empty string as the default path for all games now (and modify kValidPath to accept that only as valid) - Add dereferencing for Arrays svn-id: r46756
Diffstat (limited to 'engines/sci/engine/message.cpp')
-rw-r--r--engines/sci/engine/message.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/engines/sci/engine/message.cpp b/engines/sci/engine/message.cpp
index 39c2eb326b..c55ac0b84f 100644
--- a/engines/sci/engine/message.cpp
+++ b/engines/sci/engine/message.cpp
@@ -363,17 +363,29 @@ Common::String MessageState::processString(const char *s) {
}
void MessageState::outputString(reg_t buf, const Common::String &str) {
- SegmentRef buffer_r = _segMan->dereference(buf);
-
- if ((unsigned)buffer_r.maxSize >= str.size() + 1) {
- _segMan->strcpy(buf, str.c_str());
+#ifdef ENABLE_SCI32
+ if (getSciVersion() >= SCI_VERSION_2) {
+ SciString *sciString = _segMan->lookupString(buf);
+ sciString->setSize(str.size() + 1);
+ for (uint32 i = 0; i < str.size(); i++)
+ sciString->setValue(i, str.c_str()[i]);
+ sciString->setValue(str.size(), 0);
} else {
- warning("Message: buffer %04x:%04x invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(buf), str.size() + 1, str.c_str());
+#endif
+ SegmentRef buffer_r = _segMan->dereference(buf);
+
+ if ((unsigned)buffer_r.maxSize >= str.size() + 1) {
+ _segMan->strcpy(buf, str.c_str());
+ } else {
+ warning("Message: buffer %04x:%04x invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(buf), str.size() + 1, str.c_str());
- // Set buffer to empty string if possible
- if (buffer_r.maxSize > 0)
- _segMan->strcpy(buf, "");
+ // Set buffer to empty string if possible
+ if (buffer_r.maxSize > 0)
+ _segMan->strcpy(buf, "");
+ }
+#ifdef ENABLE_SCI32
}
+#endif
}
void MessageState::lastQuery(int &module, MessageTuple &tuple) {