[Scummvm-cvs-logs] SF.net SVN: scummvm:[35026] scummvm/trunk/engines/sky/detection.cpp

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Wed Nov 12 22:08:51 CET 2008


Revision: 35026
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35026&view=rev
Author:   thebluegr
Date:     2008-11-12 21:08:50 +0000 (Wed, 12 Nov 2008)

Log Message:
-----------
Deleting save states via the launcher and the GMM is now supported in the sky engine

Modified Paths:
--------------
    scummvm/trunk/engines/sky/detection.cpp

Modified: scummvm/trunk/engines/sky/detection.cpp
===================================================================
--- scummvm/trunk/engines/sky/detection.cpp	2008-11-12 20:54:06 UTC (rev 35025)
+++ scummvm/trunk/engines/sky/detection.cpp	2008-11-12 21:08:50 UTC (rev 35026)
@@ -75,6 +75,7 @@
 
 	virtual SaveStateList listSaves(const char *target) const;
 	virtual int getMaximumSaveSlot() const;
+	virtual void removeSaveState(const char *target, int slot) const;
 };
 
 const char *SkyMetaEngine::getName() const {
@@ -88,7 +89,8 @@
 bool SkyMetaEngine::hasFeature(MetaEngineFeature f) const {
 	return
 		(f == kSupportsListSaves) ||
-		(f == kSupportsLoadingDuringStartup);
+		(f == kSupportsLoadingDuringStartup) ||
+		(f == kSupportsDeleteSave);
 }
 
 bool Sky::SkyEngine::hasFeature(EngineFeature f) const {
@@ -220,6 +222,53 @@
 
 int SkyMetaEngine::getMaximumSaveSlot() const { return MAX_SAVE_GAMES; }
 
+void SkyMetaEngine::removeSaveState(const char *target, int slot) const {
+	if (slot == 0)	// do not delete the auto save
+		return;
+
+	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+	char fName[20];
+	sprintf(fName,"SKY-VM.%03d", slot - 1);
+	g_system->getSavefileManager()->removeSavefile(fName);
+
+	// Load current save game descriptions
+	Common::StringList savenames;
+	savenames.resize(MAX_SAVE_GAMES+1);
+	Common::InSaveFile *inf;
+	inf = saveFileMan->openForLoading("SKY-VM.SAV");
+	if (inf != NULL) {
+		char *tmpBuf =  new char[MAX_SAVE_GAMES * MAX_TEXT_LEN];
+		char *tmpPtr = tmpBuf;
+		inf->read(tmpBuf, MAX_SAVE_GAMES * MAX_TEXT_LEN);
+		for (int i = 0; i < MAX_SAVE_GAMES; ++i) {
+			savenames[i] = tmpPtr;
+			tmpPtr += savenames[i].size() + 1;
+		}
+		delete inf;
+		delete[] tmpBuf;
+	}
+
+	// Update the save game description at the given slot
+	savenames[slot - 1] = "";
+
+	// Save the updated descriptions
+	Common::OutSaveFile *outf;
+
+	outf = saveFileMan->openForSaving("SKY-VM.SAV");
+	bool ioFailed = true;
+	if (outf) {
+		for (uint16 cnt = 0; cnt < MAX_SAVE_GAMES; cnt++) {
+			outf->write(savenames[cnt].c_str(), savenames[cnt].size() + 1);
+		}
+		outf->finalize();
+		if (!outf->ioFailed())
+			ioFailed = false;
+		delete outf;
+	}
+	if (ioFailed)
+		warning("Unable to store Savegame names to file SKY-VM.SAV. (%s)", saveFileMan->popErrorDesc().c_str());
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(SKY)
 	REGISTER_PLUGIN_DYNAMIC(SKY, PLUGIN_TYPE_ENGINE, SkyMetaEngine);
 #else


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list