diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/lingo/lingo-builtins.cpp | 15 | ||||
-rw-r--r-- | engines/director/lingo/lingo.h | 1 |
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(); |