[Scummvm-git-logs] scummvm master -> 2d395d24dbb5a642f726e1d6d95db780bc6ad7d6

rvanlaar roland at rolandvanlaar.nl
Thu Oct 21 21:13:21 UTC 2021


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

Summary:
2d395d24db DIRECTOR: LINGO: Implement closeXlib with no arg


Commit: 2d395d24dbb5a642f726e1d6d95db780bc6ad7d6
    https://github.com/scummvm/scummvm/commit/2d395d24dbb5a642f726e1d6d95db780bc6ad7d6
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2021-10-21T23:11:31+02:00

Commit Message:
DIRECTOR: LINGO: Implement closeXlib with no arg

closeXlib without argument closes all open Xlibs.
>From Lingo Dictionary Version 4 page 46:

    This statement closes all open X library files:
        closeXlib

Includes lingo tests

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-object.cpp
    engines/director/lingo/lingo.h
    engines/director/lingo/tests/XObjects.lingo


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 8f6fd10e90..040fbc0fe5 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1059,6 +1059,11 @@ void LB::b_closeResFile(int nargs) {
 }
 
 void LB::b_closeXlib(int nargs) {
+	if (nargs ==0) { // Close all Xlibs
+		g_lingo->closeOpenXLibs();
+		return;
+	}
+
 	Datum d = g_lingo->pop();
 	Common::String xlibName = d.asString();
 	g_lingo->closeXLib(xlibName);
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index c087935d8a..17d17e4c6b 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -203,6 +203,12 @@ void Lingo::closeXLib(Common::String name) {
 	}
 }
 
+void Lingo::closeOpenXLibs() {
+	for (OpenXLibsHash::iterator it = _openXLibs.begin(); it != _openXLibs.end(); ++it) {
+		closeXLib(it->_key);
+	}
+}
+
 void Lingo::reloadOpenXLibs() {
 	OpenXLibsHash openXLibsCopy = _openXLibs;
 	for (OpenXLibsHash::iterator it = openXLibsCopy.begin(); it != openXLibsCopy.end(); ++it) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index e5f0369f5a..353fa9c746 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -306,6 +306,7 @@ public:
 	Common::String normalizeXLibName(Common::String name);
 	void openXLib(Common::String name, ObjectType type);
 	void closeXLib(Common::String name);
+	void closeOpenXLibs();
 	void reloadOpenXLibs();
 
 	void runTests();
diff --git a/engines/director/lingo/tests/XObjects.lingo b/engines/director/lingo/tests/XObjects.lingo
index c8729fd39a..a4f69f527f 100644
--- a/engines/director/lingo/tests/XObjects.lingo
+++ b/engines/director/lingo/tests/XObjects.lingo
@@ -11,4 +11,13 @@ fixpal(mPatchIt)
 
 openXLib("winXOBJ")
 set winxobj = RearWindow(mNew, "M")
-scummVMAssert(winxobj(mGetMemoryNeeded) = 0)
\ No newline at end of file
+scummVMAssert(winxobj(mGetMemoryNeeded) = 0)
+
+-- test closing XObject
+scummVMAssert(objectp(FlushXObj) = 1)
+closeXlib "FlushXObj"
+scummVMAssert(objectp(FlushXObj) = 0)
+
+scummVMAssert(objectp(RearWindow) = 1)
+closeXlib()
+scummVMAssert(objectp(RearWindow) = 0)




More information about the Scummvm-git-logs mailing list