[Scummvm-cvs-logs] scummvm master -> 855b5320b3249e138eeb07a2414ce2ecb862387a

bluegr md5 at scummvm.org
Sat Dec 17 18:32:09 CET 2011


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0731bcb5ac DREAMWEB: Implement removeSaveState()
af1c8d774d DREAMWEB: Fix two off-by-one errors in saveGame(), rewrite scanForNames() to use listSavefiles() and use Common::strlcop
855b5320b3 DREAMWEB: Use ScummVM's save/load dialogs by default


Commit: 0731bcb5acb9a591eac843904e725de98b19fa73
    https://github.com/scummvm/scummvm/commit/0731bcb5acb9a591eac843904e725de98b19fa73
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-17T09:28:04-08:00

Commit Message:
DREAMWEB: Implement removeSaveState()

Changed paths:
    engines/dreamweb/detection.cpp



diff --git a/engines/dreamweb/detection.cpp b/engines/dreamweb/detection.cpp
index ba7152b..db2155f 100644
--- a/engines/dreamweb/detection.cpp
+++ b/engines/dreamweb/detection.cpp
@@ -116,6 +116,8 @@ SaveStateList DreamWebMetaEngine::listSaves(const char *target) const {
 int DreamWebMetaEngine::getMaximumSaveSlot() const { return 99; }
 
 void DreamWebMetaEngine::removeSaveState(const char *target, int slot) const {
+	Common::String fileName = Common::String::format("DREAMWEB.D%02d", slot);
+	g_system->getSavefileManager()->removeSavefile(fileName);
 }
 
 #if PLUGIN_ENABLED_DYNAMIC(DREAMWEB)


Commit: af1c8d774d4d15b848876c915165cf4b2632ebae
    https://github.com/scummvm/scummvm/commit/af1c8d774d4d15b848876c915165cf4b2632ebae
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-17T09:30:06-08:00

Commit Message:
DREAMWEB: Fix two off-by-one errors in saveGame(), rewrite scanForNames() to use listSavefiles() and use Common::strlcopy instead of strncpy

Changed paths:
    engines/dreamweb/saveload.cpp



diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp
index 2945874..574036c 100644
--- a/engines/dreamweb/saveload.cpp
+++ b/engines/dreamweb/saveload.cpp
@@ -191,16 +191,16 @@ void DreamGenContext::saveGame() {
 		}
 
 		char descbuf[17] = { 2, 0 };
-		strncpy((char*)descbuf+1, game_description.c_str(), 16);
+		Common::strlcpy((char*)descbuf+1, game_description.c_str(), 16);
 		unsigned int desclen = game_description.size();
 		if (desclen > 15)
 			desclen = 15;
 		// zero terminate, and pad with ones
 		descbuf[++desclen] = 0;
-		while (desclen < 17)
+		while (desclen < 16)
 			descbuf[++desclen] = 1;
 		if (savegameId < 7)
-			memcpy(&_saveNames[17*savegameId], descbuf, 17);
+			Common::strlcpy(&_saveNames[17 * savegameId + 1], descbuf, 16);	// the first character is unused
 
 		savePosition(savegameId, descbuf);
 
@@ -464,42 +464,39 @@ void DreamGenContext::loadPosition(unsigned int slot) {
 
 // Count number of save files, and load their descriptions into _saveNames
 unsigned int DreamGenContext::scanForNames() {
-	unsigned int count = 0;
-
-	FileHeader header;
-
-	// TODO: Change this to use SaveFileManager::listSavefiles()
+	// Initialize the first 7 slots (like the original code expects)
 	for (unsigned int slot = 0; slot < 7; ++slot) {
-		_saveNames[17*slot+0] = 2;
-		_saveNames[17*slot+1] = 0;
+		_saveNames[17 * slot + 0] = 2;
+		_saveNames[17 * slot + 1] = 0;
 		for (int i = 2; i < 17; ++i)
-			_saveNames[17*slot+i] = 1;
-
-		// Try opening savegame with the given slot id
-		Common::String filename = engine->getSavegameFilename(slot);
-		Common::InSaveFile *inSaveFile = engine->getSaveFileManager()->openForLoading(filename);
-		if (!inSaveFile)
-			continue;
-
-		++count;
-
-		inSaveFile->read((uint8 *)&header, sizeof(FileHeader));
-
-		if (header.len(0) != 17) {
-			::warning("Error loading save: description buffer isn't 17 bytes");
-			delete inSaveFile;
-			continue;
-		}
-
-		// NB: Only possible if slot < 7
-		inSaveFile->read(&_saveNames[17*slot], 17);
+			_saveNames[17 * slot + i] = 1;	// initialize with 1's
+	}
 
-		delete inSaveFile;
+	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+	Common::StringArray files = saveFileMan->listSavefiles("DREAMWEB.D??");
+	Common::sort(files.begin(), files.end());
+
+	SaveStateList saveList;
+	for (uint i = 0; i < files.size(); ++i) {
+		const Common::String &file = files[i];
+		Common::InSaveFile *stream = saveFileMan->openForLoading(file);
+		if (!stream)
+			error("cannot open save file %s", file.c_str());
+		char name[17] = {};
+		stream->seek(0x61);
+		stream->read(name, sizeof(name) - 1);
+		delete stream;
+
+		int slotNum = atoi(file.c_str() + file.size() - 2);
+		SaveStateDescriptor sd(slotNum, name);
+		saveList.push_back(sd);
+		if (slotNum < 7)
+			Common::strlcpy(&_saveNames[17 * slotNum + 1], name, 16);	// the first character is unused
 	}
 
-	al = (uint8)count;
+	al = saveList.size() <= 7 ? (uint8)saveList.size() : 7;
 
-	return count;
+	return saveList.size();
 }
 
 void DreamGenContext::loadOld() {


Commit: 855b5320b3249e138eeb07a2414ce2ecb862387a
    https://github.com/scummvm/scummvm/commit/855b5320b3249e138eeb07a2414ce2ecb862387a
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-17T09:30:48-08:00

Commit Message:
DREAMWEB: Use ScummVM's save/load dialogs by default

Changed paths:
    engines/dreamweb/dreamweb.cpp



diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index 082b7d8..0af3f00 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -209,7 +209,7 @@ Common::Error DreamWebEngine::run() {
 	syncSoundSettings();
 	_console = new DreamWebConsole(this);
 
-	ConfMan.registerDefault("dreamweb_originalsaveload", "true");
+	ConfMan.registerDefault("dreamweb_originalsaveload", "false");
 
 	_timer->installTimerProc(vSyncInterrupt, 1000000 / 70, this, "dreamwebVSync");
 	_context.__start();






More information about the Scummvm-git-logs mailing list