[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