aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
authorMax Horn2007-09-18 20:02:04 +0000
committerMax Horn2007-09-18 20:02:04 +0000
commitc3d3aebe87d16d4fc3b7ac8581b99fb97241c9ac (patch)
tree17b2ba9f45743d2cf8f8e5faa6c9511e213f15f3 /engines/scumm
parent5c08cb1bcf84828cc93114fadbc89dd6f9909d06 (diff)
parent1dc13a641dd82825334e81bb3eb3b4ebd69d2552 (diff)
downloadscummvm-rg350-c3d3aebe87d16d4fc3b7ac8581b99fb97241c9ac.tar.gz
scummvm-rg350-c3d3aebe87d16d4fc3b7ac8581b99fb97241c9ac.tar.bz2
scummvm-rg350-c3d3aebe87d16d4fc3b7ac8581b99fb97241c9ac.zip
Patch #1768757: Merge fsnode-gsoc into trunk (MAJOR change, will break compilation on some ports)
svn-id: r28944
Diffstat (limited to 'engines/scumm')
-rw-r--r--engines/scumm/detection.cpp10
-rw-r--r--engines/scumm/dialogs.cpp12
-rw-r--r--engines/scumm/saveload.cpp22
3 files changed, 31 insertions, 13 deletions
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index 25c0a7318d..90c6e40aa7 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -190,7 +190,7 @@ static bool testGame(const GameSettings *g, const DescMap &fileMD5Map, const Com
// the first match is used.
static bool searchFSNode(const FSList &fslist, const Common::String &name, FilesystemNode &result) {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- if (!scumm_stricmp(file->name().c_str(), name.c_str())) {
+ if (!scumm_stricmp(file->getName().c_str(), name.c_str())) {
result = *file;
return true;
}
@@ -216,7 +216,7 @@ static Common::Language detectLanguage(const FSList &fslist, byte id) {
FSList tmpList;
if (searchFSNode(fslist, "RESOURCE", resDir)
&& resDir.isDirectory()
- && resDir.listDir(tmpList, FilesystemNode::kListFilesOnly)
+ && resDir.getChildren(tmpList, FilesystemNode::kListFilesOnly)
&& searchFSNode(tmpList, filename, langFile)) {
tmp.open(langFile);
}
@@ -320,7 +320,7 @@ static void detectGames(const FSList &fslist, Common::List<DetectorResult> &resu
DetectorDesc d;
d.node = *file;
d.md5Entry = 0;
- fileMD5Map[file->name()] = d;
+ fileMD5Map[file->getName()] = d;
}
}
@@ -447,7 +447,7 @@ static bool testGame(const GameSettings *g, const DescMap &fileMD5Map, const Com
Common::File tmp;
if (!tmp.open(d.node)) {
- warning("SCUMM detectGames: failed to open '%s' for read access", d.node.path().c_str());
+ warning("SCUMM detectGames: failed to open '%s' for read access", d.node.getPath().c_str());
return false;
}
@@ -751,7 +751,7 @@ PluginError Engine_SCUMM_create(OSystem *syst, Engine **engine) {
// Fetch the list of files in the current directory
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
return kInvalidPathError;
}
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 58fd740b17..1666578c4c 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -421,10 +421,10 @@ void SaveLoadChooser::updateInfos() {
#pragma mark -
Common::StringList generateSavegameList(ScummEngine *scumm, bool saveMode) {
- // Get savegame names
- Common::StringList l;
+ // Get savegame descriptions
+ Common::StringList descriptions;
char name[32];
- uint i = saveMode ? 1 : 0;
+ uint i = saveMode ? 1 : 0; //the autosave is on slot #0
bool avail_saves[81];
scumm->listSavegames(avail_saves, ARRAYSIZE(avail_saves));
@@ -433,10 +433,10 @@ Common::StringList generateSavegameList(ScummEngine *scumm, bool saveMode) {
scumm->getSavegameName(i, name);
else
name[0] = 0;
- l.push_back(name);
+ descriptions.push_back(name);
}
-
- return l;
+
+ return descriptions;
}
MainMenuDialog::MainMenuDialog(ScummEngine *scumm)
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 4e8d670403..0e485e226a 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -384,10 +384,28 @@ void ScummEngine::makeSavegameName(char *out, int slot, bool temporary) {
}
void ScummEngine::listSavegames(bool *marks, int num) {
+ assert(marks);
+
char prefix[256];
+ char slot[2];
+ int slotNum;
+ Common::StringList filenames;
+
makeSavegameName(prefix, 99, false);
- prefix[strlen(prefix)-2] = 0;
- _saveFileMan->listSavefiles(prefix, marks, num);
+ prefix[strlen(prefix)-2] = '*';
+ prefix[strlen(prefix)-1] = 0;
+ memset(marks, false, num * sizeof(bool)); //assume no savegames for this title
+ filenames = _saveFileMan->listSavefiles(prefix);
+
+ for(Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); file++){
+ //Obtain the last 2 digits of the filename, since they correspond to the save slot
+ slot[0] = file->c_str()[file->size()-2];
+ slot[1] = file->c_str()[file->size()-1];
+
+ slotNum = atoi(slot);
+ if(slotNum >= 0 && slotNum < num)
+ marks[slotNum] = true; //mark this slot as valid
+ }
}
bool ScummEngine::getSavegameName(int slot, char *desc) {