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

cyx at users.sourceforge.net cyx at users.sourceforge.net
Sun Nov 4 04:04:37 CET 2007


Revision: 29400
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29400&view=rev
Author:   cyx
Date:     2007-11-03 20:04:37 -0700 (Sat, 03 Nov 2007)

Log Message:
-----------
switched igor detection code to AdvancedDetector

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

Modified: scummvm/trunk/engines/igor/detection.cpp
===================================================================
--- scummvm/trunk/engines/igor/detection.cpp	2007-11-04 03:02:32 UTC (rev 29399)
+++ scummvm/trunk/engines/igor/detection.cpp	2007-11-04 03:04:37 UTC (rev 29400)
@@ -25,88 +25,67 @@
 
 #include "base/plugins.h"
 
+#include "common/advancedDetector.h"
 #include "common/config-manager.h"
-#include "common/file.h"
-#include "common/fs.h"
 
 #include "igor/igor.h"
 
-struct GameDetectVersion {
-	uint32 borlandOverlaySize;
+struct IgorGameDescription {
+	Common::ADGameDescription desc;
 	int gameVersion;
-	Common::Language language;
-	const char *descriptionSuffix;
 };
 
-static const GameDetectVersion igorDetectVersionsTable[] = {
-	{ 4086790, Igor::kIdEngDemo100, Common::EN_ANY, " 1.00s" },
-	{ 4094103, Igor::kIdEngDemo110, Common::EN_ANY, " 1.10s" }
+static const IgorGameDescription igorGameDescriptions[] = {
+	{
+		{
+			"igor",
+			"Demo 1.00s",
+			AD_ENTRY1s("IGOR.DAT", 0, 4086790),
+			Common::EN_ANY,
+			Common::kPlatformPC,
+			Common::ADGF_DEMO
+		},
+		Igor::kIdEngDemo100
+	},
+	{
+		{
+			"igor",
+			"Demo 1.10s",
+			AD_ENTRY1s("IGOR.DAT", 0, 4094103),
+			Common::EN_ANY,
+			Common::kPlatformPC,
+			Common::ADGF_DEMO
+		},
+		Igor::kIdEngDemo110
+	},
+	{ AD_TABLE_END_MARKER, 0 }
 };
 
-static const char *igorDetectFileName = "IGOR.DAT";
+static const PlainGameDescriptor igorGameDescriptors[] = {
+	{ "igor", "Igor: Objective Uikokahonia" },
+	{ 0, 0 }
+};
 
-static const PlainGameDescriptor igorGameDescriptor = {
-	"igor", "Igor: Objective Uikokahonia"
+static const Common::ADParams igorDetectionParams = {
+	(const byte *)igorGameDescriptions,
+	sizeof(IgorGameDescription),
+	0, // no md5
+	igorGameDescriptors,
+	0,
+	"igor",
+	0,
+	0,
+	Common::kADFlagAugmentPreferredTarget
 };
 
-GameList Engine_IGOR_gameIDList() {
-	GameList games;
-	games.push_back(igorGameDescriptor);
-	return games;
-}
-
-GameDescriptor Engine_IGOR_findGameID(const char *gameid) {
-	if (scumm_stricmp(igorGameDescriptor.gameid, gameid) == 0) {
-		return igorGameDescriptor;
+static bool Engine_IGOR_createInstance(OSystem *syst, Engine **engine, Common::EncapsulatedADGameDesc encapsulatedDesc) {
+	const IgorGameDescription *gd = (const IgorGameDescription *)(encapsulatedDesc.realDesc);
+	if (gd) {
+		*engine = new Igor::IgorEngine(syst, gd->gameVersion);
 	}
-	return GameDescriptor();
+	return gd != 0;
 }
 
-static const GameDetectVersion *Engine_IGOR_findGameVersion(const FSList &fslist) {
-	for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
-		if (file->isDirectory() || !file->getName().equalsIgnoreCase(igorDetectFileName)) {
-			continue;
-		}
-		Common::File f;
-		if (f.open(*file)) {
-			const uint32 fileSize = f.size();
-			if (f.readUint32BE() == MKID_BE('FBOV')) {
-				for (int i = 0; i < ARRAYSIZE(igorDetectVersionsTable); ++i) {
-					if (igorDetectVersionsTable[i].borlandOverlaySize == fileSize) {
-						return &igorDetectVersionsTable[i];
-					}
-				}
-			}
-		}
-	}
-	return 0;
-}
+ADVANCED_DETECTOR_DEFINE_PLUGIN(IGOR, Engine_IGOR_createInstance, igorDetectionParams);
 
-GameList Engine_IGOR_detectGames(const FSList &fslist) {
-	GameList detectedGames;
-	const GameDetectVersion *gdv = Engine_IGOR_findGameVersion(fslist);
-	if (gdv) {
-		GameDescriptor gd(igorGameDescriptor.gameid, igorGameDescriptor.description, gdv->language, Common::kPlatformPC);
-		gd.description() += gdv->descriptionSuffix;
-		gd.updateDesc("Demo");
-		detectedGames.push_back(gd);
-	}
-	return detectedGames;
-}
-
-PluginError Engine_IGOR_create(OSystem *system, Engine **engine) {
-	FSList fslist;
-	FilesystemNode dir(ConfMan.get("path"));
-	if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
-		return kInvalidPathError;
-	}
-	const GameDetectVersion *gdv = Engine_IGOR_findGameVersion(fslist);
-	if (!gdv) {
-		return kNoGameDataFoundError;
-	}
-	assert(engine);
-	*engine = new Igor::IgorEngine(system, gdv->gameVersion);
-	return kNoError;
-}
-
 REGISTER_PLUGIN(IGOR, "Igor: Objective Uikokahonia", "Igor: Objective Uikokahonia (C) Pendulo Studios");


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