diff options
Diffstat (limited to 'engines/groovie/detection.cpp')
| -rw-r--r-- | engines/groovie/detection.cpp | 74 | 
1 files changed, 19 insertions, 55 deletions
diff --git a/engines/groovie/detection.cpp b/engines/groovie/detection.cpp index fef63c3c74..e29a387e46 100644 --- a/engines/groovie/detection.cpp +++ b/engines/groovie/detection.cpp @@ -26,6 +26,7 @@  #include "common/savefile.h"  #include "groovie/groovie.h" +#include "groovie/saveload.h"  namespace Groovie { @@ -200,6 +201,7 @@ public:  	SaveStateList listSaves(const char *target) const;  	int getMaximumSaveSlot() const;  	void removeSaveState(const char *target, int slot) const; +	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;  };  bool GroovieMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *gd) const { @@ -213,76 +215,38 @@ bool GroovieMetaEngine::hasFeature(MetaEngineFeature f) const {  	return  		(f == kSupportsListSaves) ||  		(f == kSupportsLoadingDuringStartup) || -		(f == kSupportsDeleteSave); -		//(f == kSavesSupportCreationDate) +		(f == kSupportsDeleteSave) || +		(f == kSavesSupportMetaInfo);  }  SaveStateList GroovieMetaEngine::listSaves(const char *target) const { -	Common::SaveFileManager *sfm = g_system->getSavefileManager(); -	SaveStateList list; - -	// Get the list of savefiles -	Common::String pattern = Common::String(target) + ".00?"; -	Common::StringList savefiles = sfm->listSavefiles(pattern.c_str()); - -	// Sort the list of filenames -	sort(savefiles.begin(), savefiles.end()); - -	// Fill the information for the existing savegames -	Common::StringList::iterator it = savefiles.begin(); -	while (it != savefiles.end()) { -		int slot = it->lastChar() - '0'; -		if (slot >= 0 && slot <= 9) { -			Common::InSaveFile *file = sfm->openForLoading(it->c_str()); - -			// Read the savegame description -			Common::String description; -			unsigned char c = 1; -			for (int i = 0; (c != 0) && (i < 15); i++) { -				c = file->readByte(); -				switch (c) { -				case 0: -					break; -				case 16: // @ -					c = ' '; -					break; -				case 244: // $ -					c = 0; -					break; -				default: -					c += 0x30; -				} -				if (c != 0) { -					description += c; -				} -			} -			delete file; - -			list.push_back(SaveStateDescriptor(slot, description)); -		} -		it++; -	} - -	return list; +	return SaveLoad::listValidSaves(target);  }  int GroovieMetaEngine::getMaximumSaveSlot() const { -	return 9; +	return SaveLoad::getMaximumSlot();  }  void GroovieMetaEngine::removeSaveState(const char *target, int slot) const { -	if (slot < 0 || slot > 9) { +	if (!SaveLoad::isSlotValid(slot)) {  		// Invalid slot, do nothing  		return;  	} -	char extension[6]; -	snprintf(extension, sizeof(extension), ".00%01d", slot); +	Common::String filename = SaveLoad::getSlotSaveName(target, slot); +	g_system->getSavefileManager()->removeSavefile(filename.c_str()); +} -	Common::String filename = target; -	filename += extension; +SaveStateDescriptor GroovieMetaEngine::querySaveMetaInfos(const char *target, int slot) const { +	SaveStateDescriptor desc; -	g_system->getSavefileManager()->removeSavefile(filename.c_str()); +	Common::InSaveFile *savefile = SaveLoad::openForLoading(target, slot, &desc); +	if (savefile) { +		// Loaded correctly +		delete savefile; +	} + +	return desc;  }  } // End of namespace Groovie  | 
