From 9c6165554fe8b573a275ec184340263fe30ed6c6 Mon Sep 17 00:00:00 2001 From: djsrv Date: Tue, 8 Jun 2021 14:41:41 -0400 Subject: [PATCH] DIRECTOR: LINGO: Add LC::readChunkRef --- engines/director/lingo/lingo-code.cpp | 28 ++++++++++++++------------- engines/director/lingo/lingo-code.h | 1 + 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp index dcb519b7dcd..6afdb741433 100644 --- a/engines/director/lingo/lingo-code.cpp +++ b/engines/director/lingo/lingo-code.cpp @@ -954,9 +954,7 @@ Datum LC::chunkRef(ChunkType type, int startChunk, int endChunk, const Datum &sr return res; } -void LC::c_of() { - // put char 5 of word 1 of line 2 into field "thing" - Datum src = g_lingo->pop(); +Datum LC::readChunkRef(const Datum &src) { Datum lastLine = g_lingo->pop(); Datum firstLine = g_lingo->pop(); Datum lastItem = g_lingo->pop(); @@ -966,18 +964,22 @@ void LC::c_of() { Datum lastChar = g_lingo->pop(); Datum firstChar = g_lingo->pop(); - Datum res = src; - if (firstChar.asInt() > 0) - res = LC::chunkRef(kChunkChar, firstChar.asInt(), lastChar.asInt(), src); - else if (firstWord.asInt() > 0) - res = LC::chunkRef(kChunkWord, firstWord.asInt(), lastWord.asInt(), src); - else if (firstItem.asInt() > 0) - res = LC::chunkRef(kChunkItem, firstItem.asInt(), lastItem.asInt(), src); - else if (lastLine.asInt() > 0) - res = LC::chunkRef(kChunkLine, firstLine.asInt(), lastLine.asInt(), src); + return LC::chunkRef(kChunkChar, firstChar.asInt(), lastChar.asInt(), src); + if (firstWord.asInt() > 0) + return LC::chunkRef(kChunkWord, firstWord.asInt(), lastWord.asInt(), src); + if (firstItem.asInt() > 0) + return LC::chunkRef(kChunkItem, firstItem.asInt(), lastItem.asInt(), src); + if (lastLine.asInt() > 0) + return LC::chunkRef(kChunkLine, firstLine.asInt(), lastLine.asInt(), src); - g_lingo->push(res); + return src; +} + +void LC::c_of() { + Datum src = g_lingo->pop(); + Datum ref = readChunkRef(src); + g_lingo->push(ref.eval()); } void LC::c_charOf() { diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h index c07a9a75d42..8da24fea9bf 100644 --- a/engines/director/lingo/lingo-code.h +++ b/engines/director/lingo/lingo-code.h @@ -57,6 +57,7 @@ void c_starts(); void c_intersects(); void c_within(); Datum chunkRef(ChunkType type, int startChunk, int endChunk, const Datum &src); +Datum readChunkRef(const Datum &src); void c_of(); void c_charOf(); void c_charToOf();