aboutsummaryrefslogtreecommitdiff
path: root/engines/testbed/detection.cpp
diff options
context:
space:
mode:
authorNeeraj Kumar2010-07-10 19:24:12 +0000
committerNeeraj Kumar2010-07-10 19:24:12 +0000
commit424c13e9f479a55a57213da9bf1b21621ce715b8 (patch)
tree61a8f4e5b146dea3c579ca30cc5df7541632323d /engines/testbed/detection.cpp
parentd3c42b71ba2b12e3dd7877ec1e28fcaedc5f6a6c (diff)
downloadscummvm-rg350-424c13e9f479a55a57213da9bf1b21621ce715b8.tar.gz
scummvm-rg350-424c13e9f479a55a57213da9bf1b21621ce715b8.tar.bz2
scummvm-rg350-424c13e9f479a55a57213da9bf1b21621ce715b8.zip
switched testbed detection code to advance detector, doesn't bails out when game data not found
svn-id: r50789
Diffstat (limited to 'engines/testbed/detection.cpp')
-rw-r--r--engines/testbed/detection.cpp127
1 files changed, 49 insertions, 78 deletions
diff --git a/engines/testbed/detection.cpp b/engines/testbed/detection.cpp
index b111d2c9ca..b0e3c4693b 100644
--- a/engines/testbed/detection.cpp
+++ b/engines/testbed/detection.cpp
@@ -8,110 +8,81 @@
* 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.
*
* $URL$
* $Id$
+ *
*/
-#include "testbed/testbed.h"
-
#include "common/config-manager.h"
-#include "common/error.h"
+#include "engines/advancedDetector.h"
+#include "common/system.h"
#include "common/fs.h"
-
-#include "engines/metaengine.h"
-
+
+#include "base/plugins.h"
+
+#include "testbed/testbed.h"
+
static const PlainGameDescriptor testbed_setting[] = {
- { "testbed", "TestBed: The backend testing framework" },
+ { "testbed", "Testbed: The backend testing framework" },
{ 0, 0 }
};
-
-class TestbedMetaEngine : public MetaEngine {
+
+static const ADGameDescription testbedDescriptions[] = {
+ {
+ "testbed",
+ "",
+ AD_ENTRY1(NULL, 0), // No data files required
+ Common::EN_ANY,
+ Common::kPlatformLinux,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ AD_TABLE_END_MARKER
+};
+
+static const ADParams detectionParams = {
+ (const byte *)testbedDescriptions,
+ sizeof(ADGameDescription),
+ 512,
+ testbed_setting,
+ 0,
+ "testbed",
+ 0,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+};
+
+class TestbedMetaEngine : public AdvancedMetaEngine {
public:
+ TestbedMetaEngine() : AdvancedMetaEngine(detectionParams) {
+ }
+
virtual const char *getName() const {
return "TestBed: The backend testing framework";
}
-
+
virtual const char *getOriginalCopyright() const {
return "Copyright (C) ScummVM";
}
-
- virtual GameList getSupportedGames() const {
- GameList games;
- const PlainGameDescriptor *g = testbed_setting;
- while (g->gameid) {
- games.push_back(*g);
- g++;
- }
-
- return games;
- }
-
- virtual GameDescriptor findGame(const char *gameid) const {
- const PlainGameDescriptor *g = testbed_setting;
- while (g->gameid) {
- if (0 == scumm_stricmp(gameid, g->gameid))
- break;
- g++;
- }
- return GameDescriptor(g->gameid, g->description);
- }
-
- virtual GameList detectGames(const Common::FSList &fslist) const {
- GameList detectedGames;
-
- // Iterate over all files in the given directory
- for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- if (!file->isDirectory()) {
- const char *gameName = file->getName().c_str();
-
- if (0 == scumm_stricmp("TESTBED", gameName)) {
- // You could check the contents of the file now if you need to.
- detectedGames.push_back(testbed_setting[0]);
- break;
- }
- }
- }
- return detectedGames;
- }
-
- virtual Common::Error createInstance(OSystem *syst, Engine **engine) const {
- assert(syst);
- assert(engine);
-
- // Scan the target directory for files (error out if it does not exist)
- Common::FSList fslist;
- Common::FSNode dir(ConfMan.get("path"));
- if (!dir.getChildren(fslist, Common::FSNode::kListAll)) {
- return Common::kInvalidPathError;
- }
-
- // Invoke the detector
- Common::String gameid = ConfMan.get("gameid");
- GameList detectedGames = detectGames(fslist);
-
- for (uint i = 0; i < detectedGames.size(); i++) {
- if (detectedGames[i].gameid() == gameid) {
- // At this point you may want to perform additional sanity checks.
- *engine = new Testbed::TestbedEngine(syst);
- return Common::kNoError;
- }
- }
-
- // Failed to find any game data
- return Common::kNoGameDataFoundError;
+
+ virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
+ // Instantiate Engine even if the game data is not found.
+ *engine = new Testbed::TestbedEngine(syst);
+ return true;
}
+
};
-
+
#if PLUGIN_ENABLED_DYNAMIC(TESTBED)
REGISTER_PLUGIN_DYNAMIC(TESTBED, PLUGIN_TYPE_ENGINE, TestbedMetaEngine);
#else