Properly implemented the AD fallback callback

svn-id: r25576
This commit is contained in:
Max Horn 2007-02-14 00:21:53 +00:00
parent 59b1526e5a
commit 75ae7cdb73
2 changed files with 18 additions and 12 deletions

View file

@ -33,8 +33,6 @@
namespace Common {
typedef Array<const ADGameDescription*> ADGameDescList;
namespace AdvancedDetector {
/**
@ -344,9 +342,10 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
ADGameDescList matched;
int maxFilesMatched = 0;
const ADGameDescription *g;
for (i = 0; i < gameDescriptions.size(); i++) {
const ADGameDescription *g = gameDescriptions[i];
g = gameDescriptions[i];
fileMissing = false;
// Do not even bother to look at entries which do not have matching
@ -511,24 +510,25 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
if (matchEntry) { // We got a match
for (i = 0; i < gameDescriptions.size(); i++) {
if (gameDescriptions[i]->filesDescriptions[0].fileName == 0) {
if (!scumm_stricmp(gameDescriptions[i]->gameid, *matchEntry)) {
g = gameDescriptions[i];
if (g->filesDescriptions[0].fileName == 0) {
if (!scumm_stricmp(g->gameid, *matchEntry)) {
// FIXME: This warning, if ever seen by somebody, is
// extremly cryptic!
warning("But it looks like unknown variant of %s", *matchEntry);
matched.push_back(gameDescriptions[i]);
matched.push_back(g);
}
}
}
}
}
/*
// If we still haven't got a match, try to use the fallback callback :-)
if (matched.empty() && params.fallbackDetectFunc != 0) {
matched = (*params.fallbackDetectFunc)(fslist);
}
*/
return matched;
}

View file

@ -60,6 +60,11 @@ struct ADGameDescription {
uint32 flags;
};
/**
* A list of pointers to ADGameDescription structs (or subclasses thereof).
*/
typedef Array<const ADGameDescription*> ADGameDescList;
/**
* End marker for a table of ADGameDescription structs. Use this to
* terminate a list to be passed to the AdvancedDetector API.
@ -144,15 +149,16 @@ struct ADParams {
/**
* A callback pointing to an (optional) generic fallback detect
* function. If present, this gets called if both the regular
* function. If present, this callback is invoked if both the regular
* MD5 based detection as well as the file based fallback failed
* to detect anything. It is supposed
* to detect anything.
*
* @note The fslist parameter may be 0 -- in that case, it is assumed
* that the callback searchs the current directory.
*
* @todo
*/
//GameList (*fallbackDetectFunc)(const FSList *fslist);
uint dummy;
ADGameDescList (*fallbackDetectFunc)(const FSList *fslist);
/**
* A bitmask of flags which can be used to configure the behavior