[Scummvm-git-logs] scummvm master -> 9fad2dd13ba40743286c3e4ea8c34d79acd4459e

npjg nathanael.gentrydb8 at gmail.com
Wed Aug 5 15:43:01 UTC 2020


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4c75242ae7 DIRECTOR: Fix typo
5cb525e29e DIRECTOR: Record game data directory
b0c3246574 DIRECTOR: Also convert directory paths
9fad2dd13b DIRECTOR: LINGO: Implement getNthFileNameInFolder


Commit: 4c75242ae70c45267c494b106eb439b9280721a7
    https://github.com/scummvm/scummvm/commit/4c75242ae70c45267c494b106eb439b9280721a7
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00

Commit Message:
DIRECTOR: Fix typo

Changed paths:
    engines/director/util.cpp
    engines/director/util.h


diff --git a/engines/director/util.cpp b/engines/director/util.cpp
index a6837e7ae5..f5c34580f1 100644
--- a/engines/director/util.cpp
+++ b/engines/director/util.cpp
@@ -419,7 +419,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
 		return initialPath;
 }
 
-	Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath) {
+Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath) {
 	const char *exts[] = { ".MMM", ".DIR", ".DXR", 0 };
 	for (int i = 0; exts[i]; ++i) {
 		Common::String newpath = convPath + (strcmp(exts[i], ".MMM") == 0 ?  convertMacFilename(component.c_str()) : component.c_str()) + exts[i];
diff --git a/engines/director/util.h b/engines/director/util.h
index ebca11bf7d..dfd8d06004 100644
--- a/engines/director/util.h
+++ b/engines/director/util.h
@@ -42,7 +42,7 @@ bool testPath(Common::String &path);
 
 Common::String pathMakeRelative(Common::String path, bool recursive = true, bool addexts = true);
 
-	Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath);
+Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath);
 
 Common::String getFileName(Common::String path);
 


Commit: 5cb525e29e49632eea536c67be46d67e244d5fa3
    https://github.com/scummvm/scummvm/commit/5cb525e29e49632eea536c67be46d67e244d5fa3
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00

Commit Message:
DIRECTOR: Record game data directory

Changed paths:
    engines/director/director.cpp
    engines/director/director.h


diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index fc2a2a1b20..c6506a2a16 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -23,7 +23,6 @@
 #include "common/config-manager.h"
 #include "common/debug-channels.h"
 #include "common/error.h"
-#include "common/file.h"
 
 #include "graphics/macgui/macwindowmanager.h"
 
@@ -91,16 +90,16 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
 	_wm = nullptr;
 	_surface = nullptr;
 
-	const Common::FSNode gameDataDir(ConfMan.get("path"));
+	_gameDataDir = Common::FSNode(ConfMan.get("path"));
 
 	// Meet Mediaband could have up to 5 levels of directories
-	SearchMan.addDirectory(gameDataDir.getPath(), gameDataDir, 0, 5);
+	SearchMan.addDirectory(_gameDataDir.getPath(), _gameDataDir, 0, 5);
 
-	SearchMan.addSubDirectoryMatching(gameDataDir, "data");
-	SearchMan.addSubDirectoryMatching(gameDataDir, "install");
-	SearchMan.addSubDirectoryMatching(gameDataDir, "main");		// Meet Mediaband
-	SearchMan.addSubDirectoryMatching(gameDataDir, "l_zone");
-	SearchMan.addSubDirectoryMatching(gameDataDir, "win_data", 0, 2);	// L-ZONE
+	SearchMan.addSubDirectoryMatching(_gameDataDir, "data");
+	SearchMan.addSubDirectoryMatching(_gameDataDir, "install");
+	SearchMan.addSubDirectoryMatching(_gameDataDir, "main");		// Meet Mediaband
+	SearchMan.addSubDirectoryMatching(_gameDataDir, "l_zone");
+	SearchMan.addSubDirectoryMatching(_gameDataDir, "win_data", 0, 2);	// L-ZONE
 
 	_colorDepth = 8;	// 256-color
 	_machineType = 9; // Macintosh IIci
diff --git a/engines/director/director.h b/engines/director/director.h
index 78a8467c87..14fff4d653 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -25,6 +25,7 @@
 
 #include "common/rect.h"
 #include "common/str-array.h"
+#include "common/file.h"
 
 #include "common/hashmap.h"
 #include "engines/engine.h"
@@ -201,6 +202,7 @@ public:
 
 	const Common::HashMap<int, PaletteV4> &getLoadedPalettes() { return _loadedPalettes; }
 
+	const Common::FSNode *getGameDataDir() const { return &_gameDataDir; }
 	const byte *getPalette() const { return _currentPalette; }
 	uint16 getPaletteColorCount() const { return _currentPaletteLength; }
 
@@ -238,6 +240,7 @@ protected:
 
 private:
 	const DirectorGameDescription *_gameDescription;
+	Common::FSNode _gameDataDir;
 
 	DirectorSound *_soundManager;
 	byte *_currentPalette;


Commit: b0c3246574de1b8c0527761001fab35214feb882
    https://github.com/scummvm/scummvm/commit/b0c3246574de1b8c0527761001fab35214feb882
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00

Commit Message:
DIRECTOR: Also convert directory paths

Changed paths:
    engines/director/util.cpp
    engines/director/util.h


diff --git a/engines/director/util.cpp b/engines/director/util.cpp
index f5c34580f1..97726c2661 100644
--- a/engines/director/util.cpp
+++ b/engines/director/util.cpp
@@ -292,7 +292,17 @@ Common::String getPath(Common::String path, Common::String cwd) {
 	return cwd; // The path is not altered
 }
 
-bool testPath(Common::String &path) {
+bool testPath(Common::String &path, bool directory) {
+	if (directory) {
+		// TOOD: This directory-searching branch only works for one level from the
+		// current directory, but it fixes current game loading issues.
+		if (path.contains('/'))
+			return false;
+
+		Common::FSNode d = Common::FSNode(*g_director->getGameDataDir()).getChild(path);
+		return d.exists();
+	}
+
 	Common::File f;
 	if (f.open(path)) {
 		if (f.size())
@@ -302,10 +312,10 @@ bool testPath(Common::String &path) {
 	return false;
 }
 
-Common::String pathMakeRelative(Common::String path, bool recursive, bool addexts) {
+Common::String pathMakeRelative(Common::String path, bool recursive, bool addexts, bool directory) {
 	Common::String initialPath(path);
 
-	if (testPath(initialPath))
+	if (testPath(initialPath, directory))
 		return initialPath;
 
 	if (recursive) // first level
@@ -314,7 +324,6 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
 	debug(2, "pathMakeRelative(): s1 %s -> %s", path.c_str(), initialPath.c_str());
 
 	initialPath = Common::normalizePath(g_director->getCurrentPath() + initialPath, '/');
-	Common::File f;
 	Common::String convPath = initialPath;
 
 	debug(2, "pathMakeRelative(): s2 %s", convPath.c_str());
@@ -322,18 +331,19 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
 	// Strip the leading whitespace from the path
 	initialPath.trim();
 
-	if (testPath(initialPath))
+	if (testPath(initialPath, directory))
 		return initialPath;
 
 	// Now try to search the file
 	bool opened = false;
+
 	while (convPath.contains('/')) {
 		int pos = convPath.find('/');
 		convPath = Common::String(&convPath.c_str()[pos + 1]);
 
 		debug(2, "pathMakeRelative(): s3 try %s", convPath.c_str());
 
-		if (!f.open(convPath))
+		if (!testPath(convPath, directory))
 			continue;
 
 		debug(2, "pathMakeRelative(): s3 converted %s -> %s", path.c_str(), convPath.c_str());
@@ -349,7 +359,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
 
 		debug(2, "pathMakeRelative(): s4 %s", convPath.c_str());
 
-		if (testPath(initialPath))
+		if (testPath(initialPath, directory))
 			return initialPath;
 
 		// Now try to search the file
@@ -359,7 +369,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
 
 			debug(2, "pathMakeRelative(): s5 try %s", convPath.c_str());
 
-			if (!f.open(convPath))
+			if (!testPath(convPath, directory))
 				continue;
 
 			debug(2, "pathMakeRelative(): s5 converted %s -> %s", path.c_str(), convPath.c_str());
@@ -370,9 +380,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
 		}
 	}
 
-	f.close();
-
-	if (!opened && recursive) {
+	if (!opened && recursive && !directory) {
 		// Hmmm. We couldn't find the path as is.
 		// Let's try to translate file path into 8.3 format
 		Common::String addedexts;
diff --git a/engines/director/util.h b/engines/director/util.h
index dfd8d06004..e12c67bee8 100644
--- a/engines/director/util.h
+++ b/engines/director/util.h
@@ -38,9 +38,9 @@ Common::String convertPath(Common::String &path);
 
 Common::String getPath(Common::String path, Common::String cwd);
 
-bool testPath(Common::String &path);
+bool testPath(Common::String &path, bool directory = false);
 
-Common::String pathMakeRelative(Common::String path, bool recursive = true, bool addexts = true);
+Common::String pathMakeRelative(Common::String path, bool recursive = true, bool addexts = true, bool directory = false);
 
 Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath);
 


Commit: 9fad2dd13ba40743286c3e4ea8c34d79acd4459e
    https://github.com/scummvm/scummvm/commit/9fad2dd13ba40743286c3e4ea8c34d79acd4459e
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00

Commit Message:
DIRECTOR: LINGO: Implement getNthFileNameInFolder

Some games clumsily use this function for detecting the CD-ROM drive letter.
This is its only known use case thus far.

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index fe918b95f2..2dfb002fc6 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1065,11 +1065,22 @@ void LB::b_closeXlib(int nargs) {
 }
 
 void LB::b_getNthFileNameInFolder(int nargs) {
-	g_lingo->printSTUBWithArglist("b_getNthFileNameInFolder", nargs);
+	ARGNUMCHECK(2);
 
-	g_lingo->dropStack(nargs);
+	int fileNum = g_lingo->pop().asInt() - 1;
+	Common::String path = pathMakeRelative(g_lingo->pop().asString(), true, false, true);
+	Common::FSNode d = Common::FSNode(*g_director->getGameDataDir()).getChild(path);
 
-	g_lingo->push(Datum(0));
+	Datum r;
+	if (d.exists()) {
+		Common::FSList f;
+		d.getChildren(f, Common::FSNode::kListAll);
+
+		if ((uint)fileNum < f.size())
+			r = Datum(f.operator[](fileNum).getName());
+	}
+
+	g_lingo->push(r);
 }
 
 void LB::b_open(int nargs) {




More information about the Scummvm-git-logs mailing list