[Scummvm-git-logs] scummvm master -> c8dca575557d836c50b17fe6b5cf6e9f6c0a6a27

sev- sev at scummvm.org
Fri Oct 21 10:33:00 CEST 2016


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

Summary:
c8dca57555 PRINCE: Refactored detection code into widely accepted schema


Commit: c8dca575557d836c50b17fe6b5cf6e9f6c0a6a27
    https://github.com/scummvm/scummvm/commit/c8dca575557d836c50b17fe6b5cf6e9f6c0a6a27
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-10-21T10:32:48+02:00

Commit Message:
PRINCE: Refactored detection code into widely accepted schema

Changed paths:
  R engines/prince/detection.h
    engines/prince/detection.cpp
    engines/prince/prince.cpp
    engines/prince/prince.h
    engines/prince/saveload.cpp



diff --git a/engines/prince/detection.cpp b/engines/prince/detection.cpp
index a081e68..8e7fbd7 100644
--- a/engines/prince/detection.cpp
+++ b/engines/prince/detection.cpp
@@ -20,7 +20,7 @@
  *
  */
 
-#include "prince/detection.h"
+#include "prince/prince.h"
 
 namespace Prince {
 
@@ -40,14 +40,116 @@ Common::Language PrinceEngine::getLanguage() const {
 	return _gameDescription->desc.language;
 }
 
-bool PrinceMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
-	using namespace Prince;
-	const PrinceGameDescription *gd = (const PrinceGameDescription *)desc;
-	if (gd) {
-		*engine = new PrinceEngine(syst, gd);
+} // End of namespace Prince
+
+static const PlainGameDescriptor princeGames[] = {
+	{"prince", "Prince Game"},
+	{0, 0}
+};
+
+namespace Prince {
+static const PrinceGameDescription gameDescriptions[] = {
+	{
+		{
+			"prince",
+			"Galador",
+			AD_ENTRY1s("databank.ptc", "5fa03833177331214ec1354761b1d2ee", 3565031),
+			Common::DE_DEU,
+			Common::kPlatformWindows,
+			ADGF_TESTING,
+			GUIO1(GUIO_NONE)
+		},
+		kPrinceDataDE
+	},
+	{
+		{
+			"prince",
+			"Ksiaze i Tchorz",
+			AD_ENTRY1s("databank.ptc", "48ec9806bda9d152acbea8ce31c93c49", 3435298),
+			Common::PL_POL,
+			Common::kPlatformWindows,
+			ADGF_TESTING,
+			GUIO1(GUIO_NONE)
+		},
+		kPrinceDataPL
+	},
+	{
+		{
+			"prince",
+			"Galador",
+			AD_ENTRY1s("talktxt.dat", "02bb2372f19aca3c65896ed81b2cefb3", 125702),
+			Common::RU_RUS,
+			Common::kPlatformWindows,
+			ADGF_TESTING,
+			GUIO1(GUIO_NONE)
+		},
+		kPrinceDataDE
+	},
+	{
+		{
+			"prince",
+			"The Prince and the Coward",
+			{
+				{"databank.ptc", 0, "5fa03833177331214ec1354761b1d2ee", 3565031},
+				{"prince_translation.dat", 0, 0, -1},
+				AD_LISTEND
+			},
+			Common::EN_ANY,
+			Common::kPlatformWindows,
+			ADGF_TESTING | GF_TRANSLATED,
+			GUIO1(GUIO_NONE)
+		},
+		kPrinceDataDE
+	},
+	{
+		{
+			"prince",
+			"The Prince and the Coward",
+			{
+				{"databank.ptc", 0, "48ec9806bda9d152acbea8ce31c93c49", 3435298},
+				{"prince_translation.dat", 0, 0, -1},
+				AD_LISTEND
+			},
+			Common::EN_ANY,
+			Common::kPlatformWindows,
+			ADGF_TESTING | GF_TRANSLATED,
+			GUIO1(GUIO_NONE)
+		},
+		kPrinceDataPL
+	},
+	{ AD_TABLE_END_MARKER, kPrinceDataUNK }
+};
+
+} // End of namespace Prince
+
+const static char *directoryGlobs[] = {
+	"all",
+	0
+};
+
+class PrinceMetaEngine : public AdvancedMetaEngine {
+public:
+	PrinceMetaEngine() : AdvancedMetaEngine(Prince::gameDescriptions, sizeof(Prince::PrinceGameDescription), princeGames) {
+		_singleId = "prince";
+		_maxScanDepth = 2;
+		_directoryGlobs = directoryGlobs;
 	}
-	return gd != 0;
-}
+
+	virtual const char *getName() const {
+		return "Prince Engine";
+	}
+
+	virtual const char *getOriginalCopyright() const {
+		return "The Prince and the Coward (C) 1996-97 Metropolis";
+	}
+
+	virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
+	virtual bool hasFeature(MetaEngineFeature f) const;
+	virtual int getMaximumSaveSlot() const { return 99; }
+	virtual SaveStateList listSaves(const char *target) const;
+	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
+	virtual void removeSaveState(const char *target, int slot) const;
+};
 
 bool PrinceMetaEngine::hasFeature(MetaEngineFeature f) const {
 	return
@@ -67,10 +169,101 @@ bool Prince::PrinceEngine::hasFeature(EngineFeature f) const {
 		(f == kSupportsRTL);
 }
 
-} // End of namespace Prince
+SaveStateList PrinceMetaEngine::listSaves(const char *target) const {
+	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+	Common::StringArray filenames;
+	Common::String pattern = target;
+	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++) {
+		// Obtain the last 3 digits of the filename, since they correspond to the save slot
+		int slotNum = atoi(filename->c_str() + filename->size() - 3);
+
+		if (slotNum >= 0 && slotNum <= 99) {
+
+			Common::InSaveFile *file = saveFileMan->openForLoading(*filename);
+			if (file) {
+				Prince::SavegameHeader header;
+
+				// Check to see if it's a ScummVM savegame or not
+				char buffer[kSavegameStrSize + 1];
+				file->read(buffer, kSavegameStrSize + 1);
+
+				if (!strncmp(buffer, kSavegameStr, kSavegameStrSize + 1)) {
+					// Valid savegame
+					if (Prince::PrinceEngine::readSavegameHeader(file, header)) {
+						saveList.push_back(SaveStateDescriptor(slotNum, header.saveName));
+						if (header.thumbnail) {
+							header.thumbnail->free();
+							delete header.thumbnail;
+						}
+					}
+				} else {
+					// Must be an original format savegame
+					saveList.push_back(SaveStateDescriptor(slotNum, "Unknown"));
+				}
+
+				delete file;
+			}
+		}
+	}
+
+	return saveList;
+}
+
+SaveStateDescriptor PrinceMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
+	Common::String fileName = Common::String::format("%s.%03d", target, slot);
+	Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(fileName);
+
+	if (f) {
+		Prince::SavegameHeader header;
+
+		// Check to see if it's a ScummVM savegame or not
+		char buffer[kSavegameStrSize + 1];
+		f->read(buffer, kSavegameStrSize + 1);
+
+		bool hasHeader = !strncmp(buffer, kSavegameStr, kSavegameStrSize + 1) &&
+			Prince::PrinceEngine::readSavegameHeader(f, header);
+		delete f;
+
+		if (!hasHeader) {
+			// Original savegame perhaps?
+			SaveStateDescriptor desc(slot, "Unknown");
+			return desc;
+		} else {
+			// Create the return descriptor
+			SaveStateDescriptor desc(slot, header.saveName);
+			desc.setThumbnail(header.thumbnail);
+			desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
+			desc.setSaveTime(header.saveHour, header.saveMinutes);
+
+			return desc;
+		}
+	}
+
+	return SaveStateDescriptor();
+}
+
+void PrinceMetaEngine::removeSaveState(const char *target, int slot) const {
+	Common::String fileName = Common::String::format("%s.%03d", target, slot);
+	g_system->getSavefileManager()->removeSavefile(fileName);
+}
+
+bool PrinceMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
+	using namespace Prince;
+	const PrinceGameDescription *gd = (const PrinceGameDescription *)desc;
+	if (gd) {
+		*engine = new PrinceEngine(syst, gd);
+	}
+	return gd != 0;
+}
 
 #if PLUGIN_ENABLED_DYNAMIC(PRINCE)
-REGISTER_PLUGIN_DYNAMIC(PRINCE, PLUGIN_TYPE_ENGINE, Prince::PrinceMetaEngine);
+REGISTER_PLUGIN_DYNAMIC(PRINCE, PLUGIN_TYPE_ENGINE, PrinceMetaEngine);
 #else
-REGISTER_PLUGIN_STATIC(PRINCE, PLUGIN_TYPE_ENGINE, Prince::PrinceMetaEngine);
+REGISTER_PLUGIN_STATIC(PRINCE, PLUGIN_TYPE_ENGINE, PrinceMetaEngine);
 #endif
diff --git a/engines/prince/detection.h b/engines/prince/detection.h
deleted file mode 100644
index b3d6153..0000000
--- a/engines/prince/detection.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef PRINCE_DETECTION_H
-#define PRINCE_DETECTION_H
-
-#include "prince/prince.h"
-#include "engines/advancedDetector.h"
-
-namespace Prince {
-
-enum PrinceGameType {
-	kPrinceDataUNK,
-	kPrinceDataDE,
-	kPrinceDataPL
-};
-
-struct PrinceGameDescription {
-	ADGameDescription desc;
-	PrinceGameType gameType;
-};
-
-static const PlainGameDescriptor princeGames[] = {
-	{"prince", "Prince Game"},
-	{0, 0}
-};
-
-static const PrinceGameDescription gameDescriptions[] = {
-	{
-		{
-			"prince",
-			"Galador",
-			AD_ENTRY1s("databank.ptc", "5fa03833177331214ec1354761b1d2ee", 3565031),
-			Common::DE_DEU,
-			Common::kPlatformWindows,
-			ADGF_TESTING,
-			GUIO1(GUIO_NONE)
-		},
-		kPrinceDataDE
-	},
-	{
-		{
-			"prince",
-			"Ksiaze i Tchorz",
-			AD_ENTRY1s("databank.ptc", "48ec9806bda9d152acbea8ce31c93c49", 3435298),
-			Common::PL_POL,
-			Common::kPlatformWindows,
-			ADGF_TESTING,
-			GUIO1(GUIO_NONE)
-		},
-		kPrinceDataPL
-	},
-	{
-		{
-			"prince",
-			"Galador",
-			AD_ENTRY1s("talktxt.dat", "02bb2372f19aca3c65896ed81b2cefb3", 125702),
-			Common::RU_RUS,
-			Common::kPlatformWindows,
-			ADGF_TESTING,
-			GUIO1(GUIO_NONE)
-		},
-		kPrinceDataDE
-	},
-	{
-		{
-			"prince",
-			"The Prince and the Coward",
-			{
-				{"databank.ptc", 0, "5fa03833177331214ec1354761b1d2ee", 3565031},
-				{"prince_translation.dat", 0, 0, -1},
-				AD_LISTEND
-			},
-			Common::EN_ANY,
-			Common::kPlatformWindows,
-			ADGF_TESTING | GF_TRANSLATED,
-			GUIO1(GUIO_NONE)
-		},
-		kPrinceDataDE
-	},
-	{
-		{
-			"prince",
-			"The Prince and the Coward",
-			{
-				{"databank.ptc", 0, "48ec9806bda9d152acbea8ce31c93c49", 3435298},
-				{"prince_translation.dat", 0, 0, -1},
-				AD_LISTEND
-			},
-			Common::EN_ANY,
-			Common::kPlatformWindows,
-			ADGF_TESTING | GF_TRANSLATED,
-			GUIO1(GUIO_NONE)
-		},
-		kPrinceDataPL
-	},
-	{ AD_TABLE_END_MARKER, kPrinceDataUNK }
-};
-
-const static char *directoryGlobs[] = {
-	"all",
-	0
-};
-
-class PrinceMetaEngine : public AdvancedMetaEngine {
-public:
-	PrinceMetaEngine() : AdvancedMetaEngine(Prince::gameDescriptions, sizeof(Prince::PrinceGameDescription), princeGames) {
-		_singleId = "prince";
-		_maxScanDepth = 2;
-		_directoryGlobs = directoryGlobs;
-	}
-
-	virtual const char *getName() const {
-		return "Prince Engine";
-	}
-
-	virtual const char *getOriginalCopyright() const {
-		return "The Prince and the Coward (C) 1996-97 Metropolis";
-	}
-
-	virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
-	virtual bool hasFeature(MetaEngineFeature f) const;
-	virtual int getMaximumSaveSlot() const;
-	virtual SaveStateList listSaves(const char *target) const;
-	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
-	virtual void removeSaveState(const char *target, int slot) const;
-};
-
-} // End of namespace Prince
-
-#endif
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp
index 903f609..0164289 100644
--- a/engines/prince/prince.cpp
+++ b/engines/prince/prince.cpp
@@ -38,7 +38,6 @@
 #include "graphics/pixelformat.h"
 
 #include "engines/util.h"
-#include "engines/advancedDetector.h"
 
 #include "audio/audiostream.h"
 #include "audio/decoders/wave.h"
@@ -62,7 +61,6 @@
 #include "prince/animation.h"
 #include "prince/option_text.h"
 #include "prince/curve_values.h"
-#include "prince/detection.h"
 
 namespace Prince {
 
diff --git a/engines/prince/prince.h b/engines/prince/prince.h
index ee952ec..32e37e0 100644
--- a/engines/prince/prince.h
+++ b/engines/prince/prince.h
@@ -38,6 +38,7 @@
 
 #include "gui/debugger.h"
 
+#include "engines/advancedDetector.h"
 #include "engines/engine.h"
 #include "engines/util.h"
 
@@ -51,7 +52,17 @@
 
 namespace Prince {
 
-struct PrinceGameDescription;
+enum PrinceGameType {
+	kPrinceDataUNK,
+	kPrinceDataDE,
+	kPrinceDataPL
+};
+
+struct PrinceGameDescription {
+	ADGameDescription desc;
+	PrinceGameType gameType;
+};
+
 struct SavegameHeader;
 
 class PrinceEngine;
@@ -74,6 +85,17 @@ enum {
 	GF_TRANSLATED = 1 << 0
 };
 
+struct SavegameHeader {
+	uint8 version;
+	Common::String saveName;
+	Graphics::Surface *thumbnail;
+	int saveYear, saveMonth, saveDay;
+	int saveHour, saveMinutes;
+};
+
+#define kSavegameStrSize 14
+#define kSavegameStr "SCUMMVM_PRINCE"
+
 struct Text {
 	const char *_str;
 	uint16 _x, _y;
diff --git a/engines/prince/saveload.cpp b/engines/prince/saveload.cpp
index d0498f1..14f6078 100644
--- a/engines/prince/saveload.cpp
+++ b/engines/prince/saveload.cpp
@@ -22,7 +22,6 @@
 
 #include "prince/prince.h"
 #include "prince/graphics.h"
-#include "prince/detection.h"
 #include "prince/flags.h"
 #include "prince/script.h"
 #include "prince/hero.h"
@@ -41,103 +40,10 @@ namespace Prince {
 
 #define kBadSVG 99
 #define kSavegameVersion 1
-#define kSavegameStrSize 14
-#define kSavegameStr "SCUMMVM_PRINCE"
 
 class InterpreterFlags;
 class Interpreter;
 
-struct SavegameHeader {
-	uint8 version;
-	Common::String saveName;
-	Graphics::Surface *thumbnail;
-	int saveYear, saveMonth, saveDay;
-	int saveHour, saveMinutes;
-};
-
-int PrinceMetaEngine::getMaximumSaveSlot() const {
-	return 99;
-}
-
-SaveStateList PrinceMetaEngine::listSaves(const char *target) const {
-	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
-	Common::StringArray filenames;
-	Common::String pattern = target;
-	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++) {
-		// Obtain the last 3 digits of the filename, since they correspond to the save slot
-		int slotNum = atoi(filename->c_str() + filename->size() - 3);
-
-		if (slotNum >= 0 && slotNum <= 99) {
-
-			Common::InSaveFile *file = saveFileMan->openForLoading(*filename);
-			if (file) {
-				Prince::SavegameHeader header;
-
-				// Check to see if it's a ScummVM savegame or not
-				char buffer[kSavegameStrSize + 1];
-				file->read(buffer, kSavegameStrSize + 1);
-
-				if (!strncmp(buffer, kSavegameStr, kSavegameStrSize + 1)) {
-					// Valid savegame
-					if (Prince::PrinceEngine::readSavegameHeader(file, header)) {
-						saveList.push_back(SaveStateDescriptor(slotNum, header.saveName));
-						if (header.thumbnail) {
-							header.thumbnail->free();
-							delete header.thumbnail;
-						}
-					}
-				} else {
-					// Must be an original format savegame
-					saveList.push_back(SaveStateDescriptor(slotNum, "Unknown"));
-				}
-
-				delete file;
-			}
-		}
-	}
-
-	return saveList;
-}
-
-SaveStateDescriptor PrinceMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
-	Common::String fileName = Common::String::format("%s.%03d", target, slot);
-	Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(fileName);
-
-	if (f) {
-		Prince::SavegameHeader header;
-
-		// Check to see if it's a ScummVM savegame or not
-		char buffer[kSavegameStrSize + 1];
-		f->read(buffer, kSavegameStrSize + 1);
-
-		bool hasHeader = !strncmp(buffer, kSavegameStr, kSavegameStrSize + 1) &&
-			Prince::PrinceEngine::readSavegameHeader(f, header);
-		delete f;
-
-		if (!hasHeader) {
-			// Original savegame perhaps?
-			SaveStateDescriptor desc(slot, "Unknown");
-			return desc;
-		} else {
-			// Create the return descriptor
-			SaveStateDescriptor desc(slot, header.saveName);
-			desc.setThumbnail(header.thumbnail);
-			desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
-			desc.setSaveTime(header.saveHour, header.saveMinutes);
-
-			return desc;
-		}
-	}
-
-	return SaveStateDescriptor();
-}
-
 bool PrinceEngine::readSavegameHeader(Common::InSaveFile *in, SavegameHeader &header) {
 	header.thumbnail = nullptr;
 
@@ -167,11 +73,6 @@ bool PrinceEngine::readSavegameHeader(Common::InSaveFile *in, SavegameHeader &he
 	return true;
 }
 
-void PrinceMetaEngine::removeSaveState(const char *target, int slot) const {
-	Common::String fileName = Common::String::format("%s.%03d", target, slot);
-	g_system->getSavefileManager()->removeSavefile(fileName);
-}
-
 bool PrinceEngine::canSaveGameStateCurrently() {
 	if (_mouseFlag && _mouseFlag != 3) {
 		if (_mainHero->_visible) {





More information about the Scummvm-git-logs mailing list