diff options
author | Neeraj Kumar | 2010-05-24 17:43:55 +0000 |
---|---|---|
committer | Neeraj Kumar | 2010-05-24 17:43:55 +0000 |
commit | cbf491a7b847ba337c0e7d777d917b82b5a5e7b5 (patch) | |
tree | 4b778b1f47372bb14d138ba47fd6feb4925d16c0 | |
parent | babf7ef44c2407cd52000684e3fa08aa63c8b462 (diff) | |
download | scummvm-rg350-cbf491a7b847ba337c0e7d777d917b82b5a5e7b5.tar.gz scummvm-rg350-cbf491a7b847ba337c0e7d777d917b82b5a5e7b5.tar.bz2 scummvm-rg350-cbf491a7b847ba337c0e7d777d917b82b5a5e7b5.zip |
adding (missed) testbed to engines/, reverting TODO
svn-id: r49197
-rw-r--r-- | engines/testbed/.deps/detection.d | 65 | ||||
-rw-r--r-- | engines/testbed/detection.cpp | 96 | ||||
-rw-r--r-- | engines/testbed/module.mk | 16 | ||||
-rw-r--r-- | engines/testbed/testbed.cpp | 83 | ||||
-rw-r--r-- | engines/testbed/testbed.h | 43 |
5 files changed, 303 insertions, 0 deletions
diff --git a/engines/testbed/.deps/detection.d b/engines/testbed/.deps/detection.d new file mode 100644 index 0000000000..cf70bb91d1 --- /dev/null +++ b/engines/testbed/.deps/detection.d @@ -0,0 +1,65 @@ +engines/testbed/detection.o: engines/testbed/detection.cpp \ + engines/testbed/testbed.h common/random.h common/scummsys.h config.h \ + engines/engine.h common/error.h common/str.h gui/debugger.h \ + common/func.h common/ptr.h common/noncopyable.h common/hashmap.h \ + common/util.h common/textconsole.h common/memorypool.h common/array.h \ + common/algorithm.h common/hash-str.h common/config-manager.h \ + common/singleton.h common/fs.h common/archive.h common/list.h \ + common/list_intern.h engines/metaengine.h engines/game.h \ + engines/savestate.h base/plugins.h + +engines/testbed/testbed.h: + +common/random.h: + +common/scummsys.h: + +config.h: + +engines/engine.h: + +common/error.h: + +common/str.h: + +gui/debugger.h: + +common/func.h: + +common/ptr.h: + +common/noncopyable.h: + +common/hashmap.h: + +common/util.h: + +common/textconsole.h: + +common/memorypool.h: + +common/array.h: + +common/algorithm.h: + +common/hash-str.h: + +common/config-manager.h: + +common/singleton.h: + +common/fs.h: + +common/archive.h: + +common/list.h: + +common/list_intern.h: + +engines/metaengine.h: + +engines/game.h: + +engines/savestate.h: + +base/plugins.h: diff --git a/engines/testbed/detection.cpp b/engines/testbed/detection.cpp new file mode 100644 index 0000000000..57a49122aa --- /dev/null +++ b/engines/testbed/detection.cpp @@ -0,0 +1,96 @@ +#include "testbed/testbed.h" + +#include "common/config-manager.h" +#include "common/error.h" +#include "common/fs.h" + +#include "engines/metaengine.h" + +static const PlainGameDescriptor quux_setting[] = { + { "quux", "Quux the Example Module" }, + { "quuxcd", "Quux the Example Module (CD version)" }, + { 0, 0 } +}; + +class QuuxMetaEngine : public MetaEngine { +public: + virtual const char *getName() const { + return "Quux the Example Module"; + } + + virtual const char *getOriginalCopyright() const { + return "Copyright (C) Quux Entertainment Ltd."; + } + + virtual GameList getSupportedGames() const { + GameList games; + const PlainGameDescriptor *g = quux_setting; + while (g->gameid) { + games.push_back(*g); + g++; + } + + return games; + } + + virtual GameDescriptor findGame(const char *gameid) const { + const PlainGameDescriptor *g = quux_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("README", gameName)) { + // You could check the contents of the file now if you need to. + detectedGames.push_back(quux_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 Quux::QuuxEngine(syst); + return Common::kNoError; + } + } + + // Failed to find any game data + return Common::kNoGameDataFoundError; + } +}; + +#if PLUGIN_ENABLED_DYNAMIC(TESTBED) + REGISTER_PLUGIN_DYNAMIC(TESTBED, PLUGIN_TYPE_ENGINE, QuuxMetaEngine); +#else + REGISTER_PLUGIN_STATIC(TESTBED, PLUGIN_TYPE_ENGINE, QuuxMetaEngine); +#endif diff --git a/engines/testbed/module.mk b/engines/testbed/module.mk new file mode 100644 index 0000000000..02d90fb12f --- /dev/null +++ b/engines/testbed/module.mk @@ -0,0 +1,16 @@ +MODULE := engines/testbed + +MODULE_OBJS := \ + detection.o \ + testbed.o + +MODULE_DIRS += \ + engines/testbed + +# This module can be built as a plugin +ifeq ($(ENABLE_TESTBED), DYNAMIC_PLUGIN) +PLUGIN := 1 +endif + +# Include common rules +include $(srcdir)/rules.mk diff --git a/engines/testbed/testbed.cpp b/engines/testbed/testbed.cpp new file mode 100644 index 0000000000..0d0e0c961c --- /dev/null +++ b/engines/testbed/testbed.cpp @@ -0,0 +1,83 @@ +#include "common/scummsys.h" + +#include "common/config-manager.h" +#include "common/debug.h" +#include "common/debug-channels.h" +#include "common/EventRecorder.h" +#include "common/file.h" +#include "common/fs.h" + +#include "engines/util.h" + +#include "testbed/testbed.h" + +namespace Quux { + +QuuxEngine::QuuxEngine(OSystem *syst) + : Engine(syst) { + // Put your engine in a sane state, but do nothing big yet; + // in particular, do not load data from files; rather, if you + // need to do such things, do them from init(). + + // Do not initialize graphics here + + // However this is the place to specify all default directories + const Common::FSNode gameDataDir(ConfMan.get("path")); + SearchMan.addSubDirectoryMatching(gameDataDir, "sound"); + + // Here is the right place to set up the engine specific debug levels + DebugMan.addDebugChannel(kQuuxDebugExample, "example", "this is just an example for a engine specific debug level"); + DebugMan.addDebugChannel(kQuuxDebugExample2, "example2", "also an example"); + + // Don't forget to register your random source + g_eventRec.registerRandomSource(_rnd, "quux"); + + printf("QuuxEngine::QuuxEngine\n"); +} + +QuuxEngine::~QuuxEngine() { + // Dispose your resources here + printf("QuuxEngine::~QuuxEngine\n"); + + // Remove all of our debug levels here + DebugMan.clearAllDebugChannels(); +} + +Common::Error QuuxEngine::run() { + // Initialize graphics using following: + initGraphics(320, 200, false); + + // You could use backend transactions directly as an alternative, + // but it isn't recommended, until you want to handle the error values + // from OSystem::endGFXTransaction yourself. + // This is just an example template: + //_system->beginGFXTransaction(); + // // This setup the graphics mode according to users seetings + // initCommonGFX(false); + // + // // Specify dimensions of game graphics window. + // // In this example: 320x200 + // _system->initSize(320, 200); + //FIXME: You really want to handle + //OSystem::kTransactionSizeChangeFailed here + //_system->endGFXTransaction(); + + // Create debugger console. It requires GFX to be initialized + _console = new Console(this); + + // Additional setup. + printf("QuuxEngine::init\n"); + + // Your main even loop should be (invoked from) here. + printf("QuuxEngine::go: Hello, World!\n"); + + // This test will show up if -d1 and --debugflags=example are specified on the commandline + debugC(1, kQuuxDebugExample, "Example debug call"); + + // This test will show up if --debugflags=example or --debugflags=example2 or both of them and -d3 are specified on the commandline + debugC(3, kQuuxDebugExample | kQuuxDebugExample2, "Example debug call two"); + + return Common::kNoError; +} + +} // End of namespace Quux diff --git a/engines/testbed/testbed.h b/engines/testbed/testbed.h new file mode 100644 index 0000000000..7452153502 --- /dev/null +++ b/engines/testbed/testbed.h @@ -0,0 +1,43 @@ +#ifndef QUUX_H +#define QUUX_H + +#include "common/random.h" +#include "engines/engine.h" +#include "gui/debugger.h" + +namespace Quux { + +class Console; + +// our engine debug levels +enum { + kQuuxDebugExample = 1 << 0, + kQuuxDebugExample2 = 1 << 1 + // next new level must be 1 << 2 (4) + // the current limitation is 32 debug levels (1 << 31 is the last one) +}; + +class QuuxEngine : public Engine { +public: + QuuxEngine(OSystem *syst); + ~QuuxEngine(); + + virtual Common::Error run(); + +private: + Console *_console; + + // We need random numbers + Common::RandomSource _rnd; +}; + +// Example console class +class Console : public GUI::Debugger { +public: + Console(QuuxEngine *vm) {} + virtual ~Console(void) {} +}; + +} // End of namespace Quux + +#endif |