aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2010-06-15 10:59:23 +0000
committerEugene Sandulenko2010-06-15 10:59:23 +0000
commit44a39ffbc66dbc9f019f041a47aaf9ba5a24d19f (patch)
treef86f55e3d62f5c0ebc309ba69f9fab30214acb5f /engines
parent0b83afce03572eb513dd2802a8ad4c0377600f84 (diff)
downloadscummvm-rg350-44a39ffbc66dbc9f019f041a47aaf9ba5a24d19f.tar.gz
scummvm-rg350-44a39ffbc66dbc9f019f041a47aaf9ba5a24d19f.tar.bz2
scummvm-rg350-44a39ffbc66dbc9f019f041a47aaf9ba5a24d19f.zip
AdvancedDetector: Add new parameter directoryGlobs.
Without this parameter mass detection gave tons of false alarms. Use globbing for narrowing down the depth search. svn-id: r49788
Diffstat (limited to 'engines')
-rw-r--r--engines/advancedDetector.cpp19
-rw-r--r--engines/advancedDetector.h10
-rw-r--r--engines/agi/detection.cpp4
-rw-r--r--engines/agos/detection.cpp4
-rw-r--r--engines/cine/detection.cpp4
-rw-r--r--engines/cruise/detection.cpp4
-rw-r--r--engines/draci/detection.cpp4
-rw-r--r--engines/drascula/detection.cpp4
-rw-r--r--engines/gob/detection.cpp4
-rw-r--r--engines/groovie/detection.cpp4
-rw-r--r--engines/kyra/detection.cpp4
-rw-r--r--engines/lure/detection.cpp4
-rw-r--r--engines/m4/detection.cpp4
-rw-r--r--engines/made/detection.cpp4
-rw-r--r--engines/mohawk/detection.cpp4
-rw-r--r--engines/parallaction/detection.cpp4
-rw-r--r--engines/saga/detection.cpp4
-rw-r--r--engines/sci/detection.cpp4
-rw-r--r--engines/teenagent/detection.cpp3
-rw-r--r--engines/tinsel/detection.cpp4
-rw-r--r--engines/touche/detection.cpp4
-rw-r--r--engines/tucker/detection.cpp3
22 files changed, 83 insertions, 24 deletions
diff --git a/engines/advancedDetector.cpp b/engines/advancedDetector.cpp
index ee0c5c7c62..974970ff0f 100644
--- a/engines/advancedDetector.cpp
+++ b/engines/advancedDetector.cpp
@@ -341,7 +341,7 @@ static void reportUnknown(const Common::FSNode &path, const SizeMD5Map &filesSiz
static ADGameDescList detectGameFilebased(const FileMap &allFiles, const ADParams &params);
-static void composeFileHashMap(const Common::FSList &fslist, FileMap &allFiles, int depth) {
+static void composeFileHashMap(const Common::FSList &fslist, FileMap &allFiles, int depth, const char **directoryGlobs) {
if (depth <= 0)
return;
@@ -354,10 +354,23 @@ static void composeFileHashMap(const Common::FSList &fslist, FileMap &allFiles,
if (file->isDirectory()) {
Common::FSList files;
+ if (!directoryGlobs)
+ continue;
+
+ bool matched = false;
+ for (const char *glob = *directoryGlobs; *glob; glob++)
+ if (file->getName().matchString(glob, true)) {
+ matched = true;
+ break;
+ }
+
+ if (!matched)
+ continue;
+
if (!file->getChildren(files, Common::FSNode::kListAll))
continue;
- composeFileHashMap(files, allFiles, depth - 1);
+ composeFileHashMap(files, allFiles, depth - 1, directoryGlobs);
}
Common::String tstr = file->getName();
@@ -385,7 +398,7 @@ static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams &p
// First we compose a hashmap of all files in fslist.
// Includes nifty stuff like removing trailing dots and ignoring case.
- composeFileHashMap(fslist, allFiles, (params.depth == 0 ? 1 : params.depth));
+ composeFileHashMap(fslist, allFiles, (params.depth == 0 ? 1 : params.depth), params.directoryGlobs);
// Check which files are included in some ADGameDescription *and* present
// in fslist. Compute MD5s and file sizes for these files.
diff --git a/engines/advancedDetector.h b/engines/advancedDetector.h
index a48dd0c1d2..de4fc3bbf8 100644
--- a/engines/advancedDetector.h
+++ b/engines/advancedDetector.h
@@ -192,11 +192,19 @@ struct ADParams {
uint32 guioptions;
/**
- *
* Maximum depth of directories to look up
* If set to 0, the depth is 1 level
*/
uint32 depth;
+
+ /**
+ * Case-insensitive list of directory globs which could be used for
+ * going deeper int directory structure.
+ * @see String::matchString() method for format description.
+ *
+ * @note Last item must be 0
+ */
+ const char **directoryGlobs;
};
diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp
index aa4d368fca..d1bed5d716 100644
--- a/engines/agi/detection.cpp
+++ b/engines/agi/detection.cpp
@@ -147,7 +147,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOSPEECH,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
using namespace Agi;
diff --git a/engines/agos/detection.cpp b/engines/agos/detection.cpp
index 9a23dde426..cec2db2c10 100644
--- a/engines/agos/detection.cpp
+++ b/engines/agos/detection.cpp
@@ -104,7 +104,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOLAUNCHLOAD,
// Maximum directory depth
- 2
+ 2,
+ // List of directory globs
+ 0
};
using namespace AGOS;
diff --git a/engines/cine/detection.cpp b/engines/cine/detection.cpp
index bcc4951140..b92ad8a0a2 100644
--- a/engines/cine/detection.cpp
+++ b/engines/cine/detection.cpp
@@ -82,7 +82,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOSPEECH | Common::GUIO_NOMIDI,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class CineMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp
index 9088b8261e..e43fadf598 100644
--- a/engines/cruise/detection.cpp
+++ b/engines/cruise/detection.cpp
@@ -239,7 +239,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOSPEECH | Common::GUIO_NOMIDI,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class CruiseMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/draci/detection.cpp b/engines/draci/detection.cpp
index 39834ab5fa..e1025e698a 100644
--- a/engines/draci/detection.cpp
+++ b/engines/draci/detection.cpp
@@ -96,7 +96,9 @@ const ADParams detectionParams = {
// Global GUI options
Common::GUIO_NONE,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class DraciMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/drascula/detection.cpp b/engines/drascula/detection.cpp
index a0781e0bff..c10222cadd 100644
--- a/engines/drascula/detection.cpp
+++ b/engines/drascula/detection.cpp
@@ -266,7 +266,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOMIDI,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class DrasculaMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/gob/detection.cpp b/engines/gob/detection.cpp
index 3d83f12e39..a1eb8055aa 100644
--- a/engines/gob/detection.cpp
+++ b/engines/gob/detection.cpp
@@ -109,7 +109,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOLAUNCHLOAD,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class GobMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/groovie/detection.cpp b/engines/groovie/detection.cpp
index 1f7156b2fc..b30c2361d2 100644
--- a/engines/groovie/detection.cpp
+++ b/engines/groovie/detection.cpp
@@ -178,7 +178,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOSUBTITLES | Common::GUIO_NOSFX,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp
index 4ed314934d..f3e6c7c8cc 100644
--- a/engines/kyra/detection.cpp
+++ b/engines/kyra/detection.cpp
@@ -63,7 +63,9 @@ const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NONE,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class KyraMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
index d8c7b483f8..dd2a702e2a 100644
--- a/engines/lure/detection.cpp
+++ b/engines/lure/detection.cpp
@@ -198,7 +198,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOSPEECH,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class LureMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/m4/detection.cpp b/engines/m4/detection.cpp
index 80a899f1ac..4b204996f3 100644
--- a/engines/m4/detection.cpp
+++ b/engines/m4/detection.cpp
@@ -402,7 +402,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOMIDI,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class M4MetaEngine : public AdvancedMetaEngine {
diff --git a/engines/made/detection.cpp b/engines/made/detection.cpp
index 081bb98006..dd2becd3b8 100644
--- a/engines/made/detection.cpp
+++ b/engines/made/detection.cpp
@@ -495,7 +495,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NONE,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class MadeMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/mohawk/detection.cpp b/engines/mohawk/detection.cpp
index a01f4a8759..9c3154a8bd 100644
--- a/engines/mohawk/detection.cpp
+++ b/engines/mohawk/detection.cpp
@@ -143,7 +143,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game)
Common::GUIO_NONE,
// Maximum directory depth
- 2
+ 2,
+ // List of directory globs
+ 0
};
class MohawkMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/parallaction/detection.cpp b/engines/parallaction/detection.cpp
index 2ecaf1c2d6..e00a087923 100644
--- a/engines/parallaction/detection.cpp
+++ b/engines/parallaction/detection.cpp
@@ -242,7 +242,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NOLAUNCHLOAD,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class ParallactionMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp
index b57b056806..7913291527 100644
--- a/engines/saga/detection.cpp
+++ b/engines/saga/detection.cpp
@@ -124,7 +124,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NONE,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class SagaMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp
index b402f7cc0b..7163c879b1 100644
--- a/engines/sci/detection.cpp
+++ b/engines/sci/detection.cpp
@@ -312,7 +312,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NONE,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class SciMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/teenagent/detection.cpp b/engines/teenagent/detection.cpp
index 4c61e20b7a..a2dab9658d 100644
--- a/engines/teenagent/detection.cpp
+++ b/engines/teenagent/detection.cpp
@@ -92,7 +92,8 @@ static const ADParams detectionParams = {
0,
0,
Common::GUIO_NONE,
- 1
+ 1,
+ 0
};
#define MAX_SAVES 20
diff --git a/engines/tinsel/detection.cpp b/engines/tinsel/detection.cpp
index c46a93fb38..d6bdad6032 100644
--- a/engines/tinsel/detection.cpp
+++ b/engines/tinsel/detection.cpp
@@ -97,7 +97,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NONE,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class TinselMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/touche/detection.cpp b/engines/touche/detection.cpp
index 72f87a2f3f..f336c2e008 100644
--- a/engines/touche/detection.cpp
+++ b/engines/touche/detection.cpp
@@ -136,7 +136,9 @@ static const ADParams detectionParams = {
// Additional GUI options (for every game}
Common::GUIO_NONE,
// Maximum directory depth
- 1
+ 1,
+ // List of directory globs
+ 0
};
class ToucheMetaEngine : public AdvancedMetaEngine {
diff --git a/engines/tucker/detection.cpp b/engines/tucker/detection.cpp
index 7f88a8ff2f..0a9dec9b46 100644
--- a/engines/tucker/detection.cpp
+++ b/engines/tucker/detection.cpp
@@ -115,7 +115,8 @@ static const ADParams detectionParams = {
0,
0,
Common::GUIO_NONE,
- 1
+ 1,
+ 0
};
static const ADGameDescription tuckerDemoGameDescription = {