[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