[Scummvm-git-logs] scummvm master -> 4574bad027c5f5820af741ee993008daf4597673
sev-
noreply at scummvm.org
Fri Feb 17 22:29:44 UTC 2023
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:
4574bad027 DIRECTOR: LINGO: Wrap mci parameters into quotes in preprocessor
Commit: 4574bad027c5f5820af741ee993008daf4597673
https://github.com/scummvm/scummvm/commit/4574bad027c5f5820af741ee993008daf4597673
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-02-17T23:29:15+01:00
Commit Message:
DIRECTOR: LINGO: Wrap mci parameters into quotes in preprocessor
Microsoft MultiMedia Movie format uses 'mci' without quotes, in a form
mci open demo.wav alias wave wait
We detect that and parse all arguments in quotes, watching against
existing quotes which are used in true Director movies
Changed paths:
engines/director/lingo/lingo-preprocessor.cpp
engines/director/lingo/tests/mci.lingo
diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index b11be73f2d8..7e9e48aa946 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -172,7 +172,8 @@ Common::U32String LingoCompiler::codePreprocessor(const Common::U32String &code,
int linenumber = 1;
bool defFound = false;
- const Common::U32String macro("macro"), factory("factory"), on("on"), global("global"), property("property");
+ const Common::U32String macro("macro"), factory("factory"), on("on"), global("global"), property("property"),
+ mci("mci");
while (*s) {
line.clear();
@@ -213,6 +214,26 @@ Common::U32String LingoCompiler::codePreprocessor(const Common::U32String &code,
}
}
+ // In MultiMedia Movie format, .MMM files used by Microsoft
+ // 'mci' keyword is followed by the unquoted commands, e.g.
+ // mci close all
+ // mci play wave to 15228 hold
+ //
+ // Since Director requires them in a single thing, we add
+ // quotes around
+ const Common::u32char_type_t *contLine;
+ tok = nexttok(line.c_str(), &contLine);
+
+ if (tok.equals(mci) && *contLine != 0 && !Common::U32String(contLine).contains('\"')) {
+ // Scan first non-whitespace
+ while (*contLine && (*contLine == ' ' || *contLine == '\t' || *contLine == CONTINUATION)) // If we see a whitespace
+ contLine++;
+
+ res1 = Common::U32String::format("%S \"%S\"", tok.c_str(), contLine);
+
+ debugC(2, kDebugParse | kDebugPreprocess, "wrapped mci command into quotes");
+ }
+
res1 = patchLingoCode(res1, archive, type, id, linenumber);
res += res1;
diff --git a/engines/director/lingo/tests/mci.lingo b/engines/director/lingo/tests/mci.lingo
index 39f7721e5c9..7b6612dcc7a 100644
--- a/engines/director/lingo/tests/mci.lingo
+++ b/engines/director/lingo/tests/mci.lingo
@@ -11,3 +11,7 @@ sound stop 1
playAccel "globe.mma", repeat, 5, noFlush, clickStop
playAccel "globe.mma", tempo, 100, repeat, 10, noFlush, clickStop
playAccel "globe.mma", tempo, 10, repeat, 4, noFlush, clickStop
+
+mci
+mci close all
+mci play wave to 15228 hold
More information about the Scummvm-git-logs
mailing list