[Scummvm-cvs-logs] scummvm master -> 83a3cb7db1f88560745c85a3aba4b023ed69d785

sev- sev at scummvm.org
Mon Aug 8 20:54:28 CEST 2016


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

Summary:
d07460963d DIRECTOR: Lingo: Fix toString() function
a253d1f50e DIRECTOR: Fix crash during test execution
83a3cb7db1 DIRECTOR: Lingo: Made 'go to' and 'play' commands work with expressions


Commit: d07460963d091f78c677e31eeaa3760e7a801016
    https://github.com/scummvm/scummvm/commit/d07460963d091f78c677e31eeaa3760e7a801016
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-08T20:37:26+02:00

Commit Message:
DIRECTOR: Lingo: Fix toString() function

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



diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 05478bb..7076ac2 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -273,10 +273,10 @@ Common::String *Datum::toString() {
 	Common::String *s = new Common::String;
 	switch (type) {
 	case INT:
-		s->format("%d", u.i);
+		*s = Common::String::format("%d", u.i);
 		break;
 	case FLOAT:
-		s->format(g_lingo->_floatPrecisionFormat.c_str(), u.f);
+		*s = Common::String::format(g_lingo->_floatPrecisionFormat.c_str(), u.f);
 		break;
 	case STRING:
 		delete s;


Commit: a253d1f50e7ea624c5d8f53119506f5fd7e47baa
    https://github.com/scummvm/scummvm/commit/a253d1f50e7ea624c5d8f53119506f5fd7e47baa
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-08T20:52:43+02:00

Commit Message:
DIRECTOR: Fix crash during test execution

Changed paths:
    engines/director/score.cpp



diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index bcf65d8..6587270 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -429,6 +429,11 @@ void Score::loadScriptText(Common::SeekableSubReadStreamEndian &stream) {
 }
 
 void Score::setStartToLabel(Common::String label) {
+	if (!_labels) {
+		warning("setStartToLabel: No labels set");
+		return;
+	}
+
 	Common::SortedArray<Label *>::iterator i;
 
 	for (i = _labels->begin(); i != _labels->end(); ++i) {


Commit: 83a3cb7db1f88560745c85a3aba4b023ed69d785
    https://github.com/scummvm/scummvm/commit/83a3cb7db1f88560745c85a3aba4b023ed69d785
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-08T20:53:30+02:00

Commit Message:
DIRECTOR: Lingo: Made 'go to' and 'play' commands work with expressions

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-funcs.cpp
    engines/director/lingo/lingo.h



diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 21cfef7..0c1b5d6 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -677,18 +677,13 @@ void Lingo::c_goto() {
 	Datum mode = g_lingo->pop();
 	Datum frame, movie;
 
-	if (mode.u.i == 1 || mode.u.i == 3)
-		frame = g_lingo->pop();
-
 	if (mode.u.i == 2 || mode.u.i == 3)
 		movie = g_lingo->pop();
 
-	frame.toString();
-	movie.toString();
-
-	warning("c_goto(%s, %s)", frame.u.s->c_str(), movie.u.s->c_str());
+	if (mode.u.i == 1 || mode.u.i == 3)
+		frame = g_lingo->pop();
 
-	//g_lingo->func_goto(frame, movie);
+	g_lingo->func_goto(frame, movie);
 }
 
 void Lingo::c_gotoloop() {
@@ -704,13 +699,28 @@ void Lingo::c_gotoprevious() {
 }
 
 void Lingo::c_play() {
-	Common::String frame((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
-	g_lingo->_pc += g_lingo->calcStringAlignment(frame.c_str());
+	Datum mode = g_lingo->pop();
+	Datum frame, movie;
 
-	Common::String movie((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
-	g_lingo->_pc += g_lingo->calcStringAlignment(movie.c_str());
+	if (mode.u.i == 2 || mode.u.i == 3)
+		movie = g_lingo->pop();
+
+	if (mode.u.i == 1 || mode.u.i == 3)
+		frame = g_lingo->pop();
+
+	if (frame.type == VOID) {
+		frame.u.s = new Common::String("<void>");
+		frame.type = STRING;
+	}
+	frame.toString();
+
+	if (movie.type == VOID) {
+		movie.u.s = new Common::String("<void>");
+		movie.type = STRING;
+	}
+	movie.toString();
 
-	warning("STUB: c_play(%s, %s)", frame.c_str(), movie.c_str());
+	warning("STUB: c_play(%s, %s)", frame.u.s->c_str(), movie.u.s->c_str());
 }
 
 void Lingo::c_playdone() {
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 08b3d45..da2cd5f 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -189,25 +189,35 @@ void Lingo::func_mciwait(Common::String &s) {
 	warning("STUB: MCI wait file: %s", s.c_str());
 }
 
-void Lingo::func_goto(Common::String &frame, Common::String &movie) {
-	if (!_vm->_movies || !_vm->_movies->contains(movie)) {
-		warning("Movie %s does not exist", movie.c_str());
-		return;
+void Lingo::func_goto(Datum &frame, Datum &movie) {
+	if (movie.type != VOID) {
+		movie.toString();
+
+		if (!_vm->_movies || !_vm->_movies->contains(*movie.u.s)) {
+			warning("Movie %s does not exist", movie.u.s->c_str());
+			return;
+		}
+
+		_vm->_currentScore = _vm->_movies->getVal(*movie.u.s);
+		_vm->_currentScore->loadArchive();
 	}
 
-	_vm->_currentScore = _vm->_movies->getVal(movie);
-	_vm->_currentScore->loadArchive();
+	if (!_vm->_currentScore) {
+		warning("func_goto: No score is loaded");
+		return;
+	}
 
-	if (frame.empty())
+	if (frame.type == VOID)
 		return;
 
-	for (uint16 i = 0; i < frame.size(); i++) {
-		if (!Common::isDigit(frame[i])) {
-			_vm->_currentScore->setStartToLabel(frame);
-			return;
-		}
+	if (frame.type == STRING) {
+		_vm->_currentScore->setStartToLabel(*frame.u.s);
+		return;
 	}
-	_vm->_currentScore->setCurrentFrame(strtol(frame.c_str(), 0, 10));
+
+	frame.toInt();
+
+	_vm->_currentScore->setCurrentFrame(frame.u.i);
 }
 
 void Lingo::func_gotoloop() {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 862917b..8de3a5f 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -301,7 +301,7 @@ public:
 
 	void func_mci(Common::String &s);
 	void func_mciwait(Common::String &s);
-	void func_goto(Common::String &frame, Common::String &movie);
+	void func_goto(Datum &frame, Datum &movie);
 	void func_gotoloop();
 	void func_gotonext();
 	void func_gotoprevious();






More information about the Scummvm-git-logs mailing list