aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2007-04-27 20:32:09 +0000
committerMax Horn2007-04-27 20:32:09 +0000
commit960f7cd75a5c70d2d694e20c158fabb3df714f36 (patch)
treece517d49424d3a23bd7b181333b23068ca26ae14
parent0d07a51acf775b638b1112e707cc615041a2e938 (diff)
downloadscummvm-rg350-960f7cd75a5c70d2d694e20c158fabb3df714f36.tar.gz
scummvm-rg350-960f7cd75a5c70d2d694e20c158fabb3df714f36.tar.bz2
scummvm-rg350-960f7cd75a5c70d2d694e20c158fabb3df714f36.zip
Moved lure detection code into a new detection.cpp file
svn-id: r26625
-rw-r--r--engines/lure/detection.cpp226
-rw-r--r--engines/lure/lure.cpp200
-rw-r--r--engines/lure/module.mk1
3 files changed, 227 insertions, 200 deletions
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
new file mode 100644
index 0000000000..211874690d
--- /dev/null
+++ b/engines/lure/detection.cpp
@@ -0,0 +1,226 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2005-2006 The ScummVM project
+ *
+ * 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+
+#include "base/plugins.h"
+
+#include "common/endian.h"
+#include "common/file.h"
+#include "common/fs.h"
+#include "common/md5.h"
+
+#include "lure/luredefs.h"
+#include "lure/lure.h"
+
+namespace Lure {
+
+enum {
+ // We only compute MD5 of the first kilobyte of our data files.
+ kMD5FileSizeLimit = 1024
+};
+
+struct GameSettings {
+ const char *gameid;
+ const char *description;
+ byte id;
+ uint32 features;
+ Common::Language language;
+ const char *md5sum;
+ const char *checkFile;
+};
+
+//
+static const GameSettings lure_games[] = {
+ { "lure", "Lure of the Temptress", GI_LURE, GF_FLOPPY, Common::EN_ANY,
+ "b2a8aa6d7865813a17a3c636e063572e", "disk1.vga" },
+/*
+ { "lure", "Lure of the Temptress", GI_LURE, GF_FLOPPY, Common::DE_DEU,
+ "7aa19e444dab1ac7194d9f7a40ffe54a", "disk1.vga" },
+ { "lure", "Lure of the Temptress", GI_LURE, GF_FLOPPY, Common::FR_FRA,
+ "1c94475c1bb7e0e88c1757d3b5377e94", "disk1.vga" },
+*/
+ { 0, 0, 0, 0, Common::UNK_LANG, 0, 0 }
+};
+
+// Keep list of different supported games
+
+static const PlainGameDescriptor lure_list[] = {
+ { "lure", "Lure of the Temptress" },
+ { 0, 0 }
+};
+
+} // End of namespace Lure
+
+using namespace Lure;
+
+GameList Engine_LURE_gameIDList() {
+ GameList games;
+ const PlainGameDescriptor *g = lure_list;
+
+ while (g->gameid) {
+ games.push_back(*g);
+ g++;
+ }
+ return games;
+}
+
+GameDescriptor Engine_LURE_findGameID(const char *gameid) {
+ const PlainGameDescriptor *g = lure_list;
+ while (g->gameid) {
+ if (0 == scumm_stricmp(gameid, g->gameid))
+ break;
+ g++;
+ }
+ return GameDescriptor(g->gameid, g->description);
+}
+
+GameList Engine_LURE_detectGames(const FSList &fslist) {
+ GameList detectedGames;
+ const GameSettings *g;
+ FSList::const_iterator file;
+
+ // Iterate over all files in the given directory
+ bool isFound = false;
+ for (file = fslist.begin(); file != fslist.end(); file++) {
+ if (file->isDirectory())
+ continue;
+
+ for (g = lure_games; g->gameid; g++) {
+ if (scumm_stricmp(file->name().c_str(), g->checkFile) == 0)
+ isFound = true;
+ }
+ if (isFound)
+ break;
+ }
+
+ if (file == fslist.end())
+ return detectedGames;
+
+ char md5str[32 + 1];
+
+ if (Common::md5_file_string(*file, md5str, kMD5FileSizeLimit)) {
+ for (g = lure_games; g->gameid; g++) {
+ if (strcmp(g->md5sum, (char *)md5str) == 0) {
+ GameDescriptor dg(g->gameid, g->description, g->language);
+ dg.updateDesc((g->features & GF_FLOPPY) ? "Floppy" : 0);
+ detectedGames.push_back(dg);
+ }
+ }
+ if (detectedGames.empty()) {
+ printf("Your game version appears to be unknown. Please, report the following\n");
+ printf("data to the ScummVM team along with name of the game you tried to add\n");
+ printf("and its version/language/etc.:\n");
+
+ printf(" LURE MD5 '%s'\n\n", md5str);
+
+ const PlainGameDescriptor *g1 = lure_list;
+ while (g1->gameid) {
+ detectedGames.push_back(*g1);
+ g1++;
+ }
+ }
+ }
+ return detectedGames;
+}
+
+PluginError Engine_LURE_create(OSystem *syst, Engine **engine) {
+ assert(engine);
+ *engine = new LureEngine(syst);
+ return kNoError;
+}
+
+REGISTER_PLUGIN(LURE, "Lure of the Temptress Engine", "Lure of the Temptress (C) Revolution");
+
+namespace Lure {
+
+void LureEngine::detectGame() {
+ // Make sure all the needed files are present
+
+ if (!Common::File::exists(SUPPORT_FILENAME))
+ error("Missing %s - this is a custom file containing resources from the\n"
+ "Lure of the Temptress executable. See the documentation for creating it.",
+ SUPPORT_FILENAME);
+
+ for (uint8 fileNum = 1; fileNum <= 4; ++fileNum)
+ {
+ char sFilename[10];
+ sprintf(sFilename, "disk%d.vga", fileNum);
+
+ if (!Common::File::exists(sFilename))
+ error("Missing disk%d.vga", fileNum);
+ }
+
+ // Check the version of the lure.dat file
+ Common::File f;
+ if (!f.open(SUPPORT_FILENAME)) {
+ error("Error opening %s for validation", SUPPORT_FILENAME);
+ } else {
+ f.seek(0xbf * 8);
+ VersionStructure version;
+ f.read(&version, sizeof(VersionStructure));
+ f.close();
+
+ if (READ_LE_UINT16(&version.id) != 0xffff)
+ error("Error validating %s - file is invalid or out of date", SUPPORT_FILENAME);
+ else if ((version.vMajor != LURE_DAT_MAJOR) || (version.vMinor != LURE_DAT_MINOR))
+ error("Incorrect version of %s file - expected %d.%d but got %d.%d",
+ SUPPORT_FILENAME, LURE_DAT_MAJOR, LURE_DAT_MINOR,
+ version.vMajor, version.vMinor);
+ }
+
+ // Do an md5 check
+
+ char md5str[32 + 1];
+ const GameSettings *g;
+ bool found = false;
+
+ *md5str = 0;
+
+ for (g = lure_games; g->gameid; g++) {
+ if (!Common::File::exists(g->checkFile))
+ continue;
+
+ if (!Common::md5_file_string(g->checkFile, md5str, kMD5FileSizeLimit))
+ continue;
+
+ if (strcmp(g->md5sum, (char *)md5str) == 0) {
+ _features = g->features;
+ _game = g->id;
+ _language = g->language;
+
+ if (g->description)
+ g_system->setWindowCaption(g->description);
+
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ debug("Unknown MD5 (%s)! Please report the details (language, platform, etc.) of this game to the ScummVM team", md5str);
+ _features = GF_LNGUNK || GF_FLOPPY;
+ _game = GI_LURE;
+ }
+}
+
+} // End of namespace Lure
diff --git a/engines/lure/lure.cpp b/engines/lure/lure.cpp
index de95aecb8a..f28dc00954 100644
--- a/engines/lure/lure.cpp
+++ b/engines/lure/lure.cpp
@@ -22,20 +22,9 @@
#include "common/stdafx.h"
-#include "base/plugins.h"
-
#include "common/config-manager.h"
-#include "common/endian.h"
-#include "common/file.h"
-#include "common/fs.h"
#include "common/system.h"
-#include "common/md5.h"
#include "common/savefile.h"
-#include "common/stream.h"
-
-#include "sound/mixer.h"
-#include "sound/mididrv.h"
-#include "sound/audiostream.h"
#include "lure/luredefs.h"
#include "lure/surface.h"
@@ -45,125 +34,6 @@
namespace Lure {
-enum {
- // We only compute MD5 of the first kilobyte of our data files.
- kMD5FileSizeLimit = 1024
-};
-
-struct GameSettings {
- const char *gameid;
- const char *description;
- byte id;
- uint32 features;
- Common::Language language;
- const char *md5sum;
- const char *checkFile;
-};
-
-//
-static const GameSettings lure_games[] = {
- { "lure", "Lure of the Temptress", GI_LURE, GF_FLOPPY, Common::EN_ANY,
- "b2a8aa6d7865813a17a3c636e063572e", "disk1.vga" },
-/*
- { "lure", "Lure of the Temptress", GI_LURE, GF_FLOPPY, Common::DE_DEU,
- "7aa19e444dab1ac7194d9f7a40ffe54a", "disk1.vga" },
- { "lure", "Lure of the Temptress", GI_LURE, GF_FLOPPY, Common::FR_FRA,
- "1c94475c1bb7e0e88c1757d3b5377e94", "disk1.vga" },
-*/
- { 0, 0, 0, 0, Common::UNK_LANG, 0, 0 }
-};
-
-// Keep list of different supported games
-
-static const PlainGameDescriptor lure_list[] = {
- { "lure", "Lure of the Temptress" },
- { 0, 0 }
-};
-
-} // End of namespace Lure
-
-using namespace Lure;
-
-GameList Engine_LURE_gameIDList() {
- GameList games;
- const PlainGameDescriptor *g = lure_list;
-
- while (g->gameid) {
- games.push_back(*g);
- g++;
- }
- return games;
-}
-
-GameDescriptor Engine_LURE_findGameID(const char *gameid) {
- const PlainGameDescriptor *g = lure_list;
- while (g->gameid) {
- if (0 == scumm_stricmp(gameid, g->gameid))
- break;
- g++;
- }
- return GameDescriptor(g->gameid, g->description);
-}
-
-GameList Engine_LURE_detectGames(const FSList &fslist) {
- GameList detectedGames;
- const GameSettings *g;
- FSList::const_iterator file;
-
- // Iterate over all files in the given directory
- bool isFound = false;
- for (file = fslist.begin(); file != fslist.end(); file++) {
- if (file->isDirectory())
- continue;
-
- for (g = lure_games; g->gameid; g++) {
- if (scumm_stricmp(file->name().c_str(), g->checkFile) == 0)
- isFound = true;
- }
- if (isFound)
- break;
- }
-
- if (file == fslist.end())
- return detectedGames;
-
- char md5str[32 + 1];
-
- if (Common::md5_file_string(*file, md5str, kMD5FileSizeLimit)) {
- for (g = lure_games; g->gameid; g++) {
- if (strcmp(g->md5sum, (char *)md5str) == 0) {
- GameDescriptor dg(g->gameid, g->description, g->language);
- dg.updateDesc((g->features & GF_FLOPPY) ? "Floppy" : 0);
- detectedGames.push_back(dg);
- }
- }
- if (detectedGames.empty()) {
- printf("Your game version appears to be unknown. Please, report the following\n");
- printf("data to the ScummVM team along with name of the game you tried to add\n");
- printf("and its version/language/etc.:\n");
-
- printf(" LURE MD5 '%s'\n\n", md5str);
-
- const PlainGameDescriptor *g1 = lure_list;
- while (g1->gameid) {
- detectedGames.push_back(*g1);
- g1++;
- }
- }
- }
- return detectedGames;
-}
-
-PluginError Engine_LURE_create(OSystem *syst, Engine **engine) {
- assert(engine);
- *engine = new LureEngine(syst);
- return kNoError;
-}
-
-REGISTER_PLUGIN(LURE, "Lure of the Temptress Engine", "Lure of the Temptress (C) Revolution");
-
-namespace Lure {
-
static LureEngine *int_engine = NULL;
LureEngine::LureEngine(OSystem *system): Engine(system) {
@@ -186,76 +56,6 @@ LureEngine::LureEngine(OSystem *system): Engine(system) {
_game = 0;
}
-void LureEngine::detectGame() {
- // Make sure all the needed files are present
-
- if (!Common::File::exists(SUPPORT_FILENAME))
- error("Missing %s - this is a custom file containing resources from the\n"
- "Lure of the Temptress executable. See the documentation for creating it.",
- SUPPORT_FILENAME);
-
- for (uint8 fileNum = 1; fileNum <= 4; ++fileNum)
- {
- char sFilename[10];
- sprintf(sFilename, "disk%d.vga", fileNum);
-
- if (!Common::File::exists(sFilename))
- error("Missing disk%d.vga", fileNum);
- }
-
- // Check the version of the lure.dat file
- Common::File f;
- if (!f.open(SUPPORT_FILENAME)) {
- error("Error opening %s for validation", SUPPORT_FILENAME);
- } else {
- f.seek(0xbf * 8);
- VersionStructure version;
- f.read(&version, sizeof(VersionStructure));
- f.close();
-
- if (READ_LE_UINT16(&version.id) != 0xffff)
- error("Error validating %s - file is invalid or out of date", SUPPORT_FILENAME);
- else if ((version.vMajor != LURE_DAT_MAJOR) || (version.vMinor != LURE_DAT_MINOR))
- error("Incorrect version of %s file - expected %d.%d but got %d.%d",
- SUPPORT_FILENAME, LURE_DAT_MAJOR, LURE_DAT_MINOR,
- version.vMajor, version.vMinor);
- }
-
- // Do an md5 check
-
- char md5str[32 + 1];
- const GameSettings *g;
- bool found = false;
-
- *md5str = 0;
-
- for (g = lure_games; g->gameid; g++) {
- if (!Common::File::exists(g->checkFile))
- continue;
-
- if (!Common::md5_file_string(g->checkFile, md5str, kMD5FileSizeLimit))
- continue;
-
- if (strcmp(g->md5sum, (char *)md5str) == 0) {
- _features = g->features;
- _game = g->id;
- _language = g->language;
-
- if (g->description)
- g_system->setWindowCaption(g->description);
-
- found = true;
- break;
- }
- }
-
- if (!found) {
- debug("Unknown MD5 (%s)! Please report the details (language, platform, etc.) of this game to the ScummVM team", md5str);
- _features = GF_LNGUNK || GF_FLOPPY;
- _game = GI_LURE;
- }
-}
-
int LureEngine::init() {
_system->beginGFXTransaction();
initCommonGFX(false);
diff --git a/engines/lure/module.mk b/engines/lure/module.mk
index 546721573d..a54eddd4cd 100644
--- a/engines/lure/module.mk
+++ b/engines/lure/module.mk
@@ -4,6 +4,7 @@ MODULE_OBJS := \
animseq.o \
debugger.o \
decode.o \
+ detection.o \
disk.o \
events.o \
game.o \