SaveStateList FullpipeMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern("fullpipe.s##"); filenames = saveFileMan->listSavefiles(pattern); sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) SaveStateList saveList; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { // Obtain the last 2 digits of the filename, since they correspond to the save slot int slotNum = atoi(file->c_str() + file->size() - 2); if (slotNum >= 0 && slotNum <= getMaximumSaveSlot()) { Common::InSaveFile *in = saveFileMan->openForLoading(*file); if (in) { Fullpipe::FullpipeSavegameHeader header; Fullpipe::readSavegameHeader(in, header); saveList.push_back(SaveStateDescriptor(slotNum, header.saveName)); delete header.thumbnail; delete in; } } } return saveList; }
SaveStateList DrasculaMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern = target; pattern += ".###"; filenames = saveFileMan->listSavefiles(pattern); SaveStateList saveList; int slotNum = 0; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { // Obtain the last 3 digits of the filename, since they correspond to the save slot slotNum = atoi(file->c_str() + file->size() - 3); if (slotNum >= 0 && slotNum <= getMaximumSaveSlot()) { Common::InSaveFile *in = saveFileMan->openForLoading(*file); if (in) { SaveStateDescriptor desc = loadMetaData(in, slotNum, false); if (desc.getSaveSlot() != slotNum) { // invalid delete in; continue; } saveList.push_back(desc); delete in; } } } // Sort saves based on slot number. Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator()); return saveList; }
SaveStateList FullpipeMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern("fullpipe.s##"); filenames = saveFileMan->listSavefiles(pattern); SaveStateList saveList; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { // Obtain the last 2 digits of the filename, since they correspond to the save slot int slotNum = atoi(file->c_str() + file->size() - 2); if (slotNum >= 0 && slotNum <= getMaximumSaveSlot()) { Common::ScopedPtr<Common::InSaveFile> in(saveFileMan->openForLoading(*file)); if (in) { Fullpipe::FullpipeSavegameHeader header; Fullpipe::readSavegameHeader(in.get(), header); SaveStateDescriptor desc; parseSavegameHeader(header, desc); desc.setSaveSlot(slotNum); saveList.push_back(desc); } } } // Sort saves based on slot number. Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator()); return saveList; }
SaveStateList GnapMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String saveDesc; Common::String pattern = Common::String::format("%s.0##", target); Gnap::GnapSavegameHeader header; filenames = saveFileMan->listSavefiles(pattern); SaveStateList saveList; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { const char *ext = strrchr(file->c_str(), '.'); int slot = ext ? atoi(ext + 1) : -1; if (slot >= 0 && slot < getMaximumSaveSlot()) { Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(*file); if (in) { Gnap::GnapEngine::readSavegameHeader(in, header); saveList.push_back(SaveStateDescriptor(slot, header._saveName)); if (header._thumbnail) { header._thumbnail->free(); delete header._thumbnail; } delete in; } } } // Sort saves based on slot number. Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator()); return saveList; }
SaveStateList listSaves(const char *target) const { SaveStateList saves; Wintermute::BasePersistenceManager pm(target, true); for (int i = 0; i < getMaximumSaveSlot(); i++) { if (pm.getSaveExists(i)) { SaveStateDescriptor desc; pm.getSaveStateDesc(i, desc); saves.push_back(desc); } } return saves; }
SaveStateList AvalancheMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern = target; pattern.toUppercase(); pattern += ".???"; filenames = saveFileMan->listSavefiles(pattern); sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) SaveStateList saveList; for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end(); ++filename) { const Common::String &fname = *filename; int slotNum = atoi(fname.c_str() + fname.size() - 3); if (slotNum >= 0 && slotNum <= getMaximumSaveSlot()) { Common::InSaveFile *file = saveFileMan->openForLoading(fname); if (file) { // Check for our signature. uint32 signature = file->readUint32LE(); if (signature != MKTAG('A', 'V', 'A', 'L')) { warning("Savegame of incompatible type!"); delete file; continue; } // Check version. byte saveVersion = file->readByte(); if (saveVersion != kSavegameVersion) { warning("Savegame of incompatible version!"); delete file; continue; } // Read name. uint32 nameSize = file->readUint32LE(); if (nameSize >= 255) { delete file; continue; } char *name = new char[nameSize + 1]; file->read(name, nameSize); name[nameSize] = 0; saveList.push_back(SaveStateDescriptor(slotNum, name)); delete[] name; delete file; } } } return saveList; }
SaveStateList MacVentureMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern = target; pattern += ".###"; filenames = saveFileMan->listSavefiles(pattern); SaveStateList saveList; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { int slotNum = atoi(file->c_str() + file->size() - 3); SaveStateDescriptor desc; // Do not allow save slot 0 (used for auto-saving) to be deleted or // overwritten. desc.setDeletableFlag(slotNum != 0); desc.setWriteProtectedFlag(slotNum == 0); if (slotNum >= 0 && slotNum <= getMaximumSaveSlot()) { Common::InSaveFile *in = saveFileMan->openForLoading(*file); if (in) { desc = loadMetaData(in, slotNum); if (desc.getSaveSlot() != slotNum) { // invalid delete in; continue; } saveList.push_back(desc); delete in; } } } // Sort saves based on slot number. Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator()); return saveList; }