aboutsummaryrefslogtreecommitdiff
path: root/engines/director/lingo/lingo-code.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/director/lingo/lingo-code.cpp')
-rw-r--r--engines/director/lingo/lingo-code.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 11804c2dc1..85da696a40 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -247,14 +247,36 @@ void Lingo::c_le() {
g_lingo->push(d1);
}
+void Lingo::c_whilecode(void) {
+ Datum d;
+ int savepc = g_lingo->_pc;
+
+ int body = READ_LE_UINT32(&(*g_lingo->_currentScript)[savepc]);
+ int end = READ_LE_UINT32(&(*g_lingo->_currentScript)[savepc + 1]);
+
+ g_lingo->execute(savepc + 2); /* condition */
+ d = g_lingo->pop();
+
+ while (d.val) {
+ g_lingo->execute(body); /* body */
+ if (0 /* returning */)
+ break;
+
+ g_lingo->execute(savepc + 2); /* condition */
+ d = g_lingo->pop();
+ }
+
+ //if (!returning)
+ g_lingo->_pc = end; /* next stmt */
+}
void Lingo::c_ifcode() {
Datum d;
int savepc = g_lingo->_pc; /* then part */
- int then = READ_LE_UINT32(&(*g_lingo->_currentScript)[savepc]);
+ int then = READ_LE_UINT32(&(*g_lingo->_currentScript)[savepc]);
int elsep = READ_LE_UINT32(&(*g_lingo->_currentScript)[savepc + 1]);
- int end = READ_LE_UINT32(&(*g_lingo->_currentScript)[savepc + 2]);
+ int end = READ_LE_UINT32(&(*g_lingo->_currentScript)[savepc + 2]);
warning("cond: %d end: %d then: %d elesp: %d", savepc + 3, end, then, elsep);