[Scummvm-cvs-logs] scummvm master -> c69ac88be24feb733c74967d367e469e4d90913b
bluegr
md5 at scummvm.org
Sun Jan 15 20:11:20 CET 2012
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
96aa86a60b SCI: Remove wrong script-to-array copying code in kArray
aff92ea4cd SCI: Zero-terminate strings in SciString::fromString()
cbe7527805 SCI: Use fromString() in kString(Dup) to simplify code
c69ac88be2 SCI: Ignore an invalid export in a script in the demo of RAMA
Commit: 96aa86a60b036041446ff52975472ae23887a85f
https://github.com/scummvm/scummvm/commit/96aa86a60b036041446ff52975472ae23887a85f
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-01-15T10:58:14-08:00
Commit Message:
SCI: Remove wrong script-to-array copying code in kArray
Changed paths:
engines/sci/engine/klists.cpp
diff --git a/engines/sci/engine/klists.cpp b/engines/sci/engine/klists.cpp
index 83e59c9..2a33df2 100644
--- a/engines/sci/engine/klists.cpp
+++ b/engines/sci/engine/klists.cpp
@@ -753,7 +753,6 @@ reg_t kArray(EngineState *s, int argc, reg_t *argv) {
reg_t arrayHandle = argv[1];
SciArray<reg_t> *array1 = s->_segMan->lookupArray(argv[1]);
- //SciArray<reg_t> *array1 = !argv[1].isNull() ? s->_segMan->lookupArray(argv[1]) : s->_segMan->allocateArray(&arrayHandle);
SciArray<reg_t> *array2 = s->_segMan->lookupArray(argv[3]);
uint32 index1 = argv[2].toUint16();
uint32 index2 = argv[4].toUint16();
@@ -790,21 +789,8 @@ reg_t kArray(EngineState *s, int argc, reg_t *argv) {
#endif
return NULL_REG;
}
- SegmentType sourceType = s->_segMan->getSegmentObj(argv[1].segment)->getType();
- if (sourceType == SEG_TYPE_SCRIPT) {
- // A technique used in later SCI2.1 and SCI3 games: the contents of a script
- // are loaded in an array (well, actually a string).
- Script *scr = s->_segMan->getScript(argv[1].segment);
- reg_t stringHandle;
-
- SciString *dupString = s->_segMan->allocateString(&stringHandle);
- dupString->setSize(scr->getBufSize());
- dupString->fromString(Common::String((const char *)scr->getBuf()));
-
- return stringHandle;
- } else if (sourceType != SEG_TYPE_ARRAY && sourceType != SEG_TYPE_SCRIPT) {
- error("kArray(Dup): Request to duplicate a segment which isn't an array or a script");
- }
+ if (s->_segMan->getSegmentObj(argv[1].segment)->getType() != SEG_TYPE_ARRAY)
+ error("kArray(Dup): Request to duplicate a segment which isn't an array");
reg_t arrayHandle;
SciArray<reg_t> *dupArray = s->_segMan->allocateArray(&arrayHandle);
Commit: aff92ea4cd0db8c9beacebe60c9a7c598b1eb01d
https://github.com/scummvm/scummvm/commit/aff92ea4cd0db8c9beacebe60c9a7c598b1eb01d
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-01-15T11:02:02-08:00
Commit Message:
SCI: Zero-terminate strings in SciString::fromString()
Changed paths:
engines/sci/engine/segment.cpp
diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp
index 73d81ba..fcf9774 100644
--- a/engines/sci/engine/segment.cpp
+++ b/engines/sci/engine/segment.cpp
@@ -294,11 +294,12 @@ void SciString::fromString(const Common::String &string) {
if (_type != 3)
error("SciString::fromString(): Array is not a string");
- if (string.size() > _size)
- setSize(string.size());
+ setSize(string.size() + 1);
for (uint32 i = 0; i < string.size(); i++)
_data[i] = string[i];
+
+ _data[string.size()] = 0;
}
SegmentRef StringTable::dereference(reg_t pointer) {
Commit: cbe75278050eea9226be4a3286e101f04a8c87b9
https://github.com/scummvm/scummvm/commit/cbe75278050eea9226be4a3286e101f04a8c87b9
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-01-15T11:05:10-08:00
Commit Message:
SCI: Use fromString() in kString(Dup) to simplify code
Changed paths:
engines/sci/engine/kstring.cpp
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index 0f79c35..03359b4 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -745,30 +745,24 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) {
return make_reg(0, strcmp(string1.c_str(), string2.c_str()));
}
case 8: { // Dup
- const char *rawString = 0;
- uint32 size = 0;
reg_t stringHandle;
- SciString *sciString;
- Common::String commonString;
// We allocate the new string first because if the StringTable needs to
// grow, our rawString pointer will be invalidated
SciString *dupString = s->_segMan->allocateString(&stringHandle);
if (argv[1].segment == s->_segMan->getStringSegmentId()) {
- sciString = s->_segMan->lookupString(argv[1]);
- rawString = sciString->getRawData();
- size = sciString->getSize();
- } else {
- commonString = s->_segMan->getString(argv[1]);
- rawString = commonString.c_str();
- size = commonString.size() + 1;
- }
+ SciString *sciString = s->_segMan->lookupString(argv[1]);
+ const char *rawString = sciString->getRawData();
+ uint32 size = sciString->getSize();
- dupString->setSize(size);
+ dupString->setSize(sciString->getSize());
- for (uint32 i = 0; i < size; i++)
- dupString->setValue(i, rawString[i]);
+ for (uint32 i = 0; i < size; i++)
+ dupString->setValue(i, rawString[i]);
+ } else {
+ dupString->fromString(s->_segMan->getString(argv[1]));
+ }
return stringHandle;
}
Commit: c69ac88be24feb733c74967d367e469e4d90913b
https://github.com/scummvm/scummvm/commit/c69ac88be24feb733c74967d367e469e4d90913b
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-01-15T11:10:18-08:00
Commit Message:
SCI: Ignore an invalid export in a script in the demo of RAMA
Changed paths:
engines/sci/engine/vm.cpp
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index cbe4736..162dce9 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -235,6 +235,9 @@ ExecStack *execute_method(EngineState *s, uint16 script, uint16 pubfunct, StackP
if (g_sci->getGameId() == GID_TORIN && script == 64036) {
// Script 64036 in Torin's Passage is empty and contains an invalid
// (empty) export
+ } else if (g_sci->getGameId() == GID_RAMA && script == 64908) {
+ // Script 64908 in the demo of RAMA contains an invalid (empty)
+ // export
} else
#endif
error("Request for invalid exported function 0x%x of script %d", pubfunct, script);
More information about the Scummvm-git-logs
mailing list