[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