aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/director/lingo/lingo-builtins.cpp15
-rw-r--r--engines/director/lingo/lingo.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 48de072254..696aca1cfa 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -35,6 +35,7 @@ static struct BuiltinProto {
{ "exp", Lingo::b_exp, 1},
{ "float", Lingo::b_float, 1},
{ "integer",Lingo::b_integer, 1},
+ { "length", Lingo::b_length, 1},
{ "log", Lingo::b_log, 1},
{ "pi", Lingo::b_pi, 0},
{ "power", Lingo::b_power, 2},
@@ -97,6 +98,20 @@ void Lingo::b_integer() {
g_lingo->push(d);
}
+void Lingo::b_length() {
+ Datum d = g_lingo->pop();
+
+ if (d.type != STRING)
+ error("Incorrect type for 'length' function: %d", d.type);
+
+ int len = strlen(d.u.s->c_str());
+ delete d.u.s;
+
+ d.u.i = len;
+ d.type = INT;
+ g_lingo->push(d);
+}
+
void Lingo::b_log() {
Datum d = g_lingo->pop();
d.toFloat();
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 8cb454f3aa..eca9b4107c 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -220,6 +220,7 @@ public:
static void b_exp();
static void b_float();
static void b_integer();
+ static void b_length();
static void b_log();
static void b_pi();
static void b_power();