diff options
author | Matthew Hoops | 2009-12-30 16:00:56 +0000 |
---|---|---|
committer | Matthew Hoops | 2009-12-30 16:00:56 +0000 |
commit | 5382aa1ab0ac0b42a33a4b73664e3a8064b4211b (patch) | |
tree | 17ad3256bc97d181433414aac36b8cf224e22e71 /engines/sci/engine/message.cpp | |
parent | fd2d0fc7182e97fedf901b276bc7e48dcdcb4c13 (diff) | |
download | scummvm-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.cpp | 28 |
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) { |