[Scummvm-cvs-logs] scummvm master -> a13aa2620744b9bd6f82dd978e6788ee197b7605
sev-
sev at scummvm.org
Thu Aug 11 19:50:28 CEST 2016
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
22b6fec5f3 DIRECTOR: Lingo: Initial code for factory creation
a13aa26207 DIRECTOR: Lingo: Code for calling out factory methods
Commit: 22b6fec5f3e88d85bbcfa03abf0a5e502ac769f5
https://github.com/scummvm/scummvm/commit/22b6fec5f3e88d85bbcfa03abf0a5e502ac769f5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-11T19:50:25+02:00
Commit Message:
DIRECTOR: Lingo: Initial code for factory creation
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 573a005..3c888c1 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -621,4 +621,20 @@ void Lingo::b_false(int nargs) {
g_lingo->push(d);
}
+void Lingo::b_factory(int nargs) {
+ // This is intentionally empty
+}
+
+void Lingo::factoryCall(Common::String &name, int nargs) {
+ Common::String s("factoryCall: ");
+
+ s += name;
+
+ convertVOIDtoString(0, nargs);
+
+ printStubWithArglist(s.c_str(), nargs);
+
+ dropStack(nargs);
+}
+
} // End of namespace Director
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 125365a..fe2b82e 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -755,7 +755,10 @@ void Lingo::c_call() {
}
if (sym->type == BLTIN) {
- (*sym->u.bltin)(nargs);
+ if (sym->u.bltin == b_factory)
+ g_lingo->factoryCall(name, nargs);
+ else
+ (*sym->u.bltin)(nargs);
return;
}
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 4284fa7..bf96802 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -270,6 +270,18 @@ void Lingo::processIf(int elselabel, int endlabel) {
void Lingo::codeFactory(Common::String &name) {
_currentFactory = name;
+
+ Symbol *sym = new Symbol;
+
+ sym->name = (char *)calloc(name.size() + 1, 1);
+ Common::strlcpy(sym->name, name.c_str(), name.size());
+ sym->type = BLTIN;
+ sym->nargs = -1;
+ sym->maxArgs = 0;
+ sym->parens = true;
+ sym->u.bltin = g_lingo->b_factory;
+
+ _handlers[name] = sym;
}
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 35bdea9..a51988c 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -325,6 +325,9 @@ public:
static void b_false(int nargs);
static void b_true(int nargs);
+ static void b_factory(int nargs);
+ void factoryCall(Common::String &name, int nargs);
+
void func_mci(Common::String &s);
void func_mciwait(Common::String &s);
void func_goto(Datum &frame, Datum &movie);
Commit: a13aa2620744b9bd6f82dd978e6788ee197b7605
https://github.com/scummvm/scummvm/commit/a13aa2620744b9bd6f82dd978e6788ee197b7605
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-11T19:50:25+02:00
Commit Message:
DIRECTOR: Lingo: Code for calling out factory methods
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 3c888c1..f20d1bf 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -634,7 +634,11 @@ void Lingo::factoryCall(Common::String &name, int nargs) {
printStubWithArglist(s.c_str(), nargs);
- dropStack(nargs);
+ Datum method = _stack[_stack.size() - nargs + 0];
+
+ s = name + "-" + *method.u.s;
+
+ call(s, nargs);
}
} // End of namespace Director
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index fe2b82e..0d4afca 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -718,6 +718,11 @@ void Lingo::c_call() {
g_lingo->_pc += g_lingo->calcStringAlignment(name.c_str());
int nargs = READ_UINT32(&(*g_lingo->_currentScript)[g_lingo->_pc++]);
+
+ g_lingo->call(name, nargs);
+}
+
+void Lingo::call(Common::String &name, int nargs) {
bool drop = false;
Symbol *sym;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index a51988c..90adcbb 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -240,6 +240,9 @@ public:
static void c_ge();
static void c_le();
static void c_call();
+
+ void call(Common::String &name, int nargs);
+
static void c_procret();
static void c_mci();
More information about the Scummvm-git-logs
mailing list