From 928b4a6df6cc24c57ce899c431a5d98da4325af8 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 30 Jan 2010 01:45:59 +0000 Subject: Added support for String types to kFormat (seems to work but needs testing...) svn-id: r47694 --- engines/sci/engine/kernel32.cpp | 10 +--------- engines/sci/engine/kstring.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 9 deletions(-) (limited to 'engines') diff --git a/engines/sci/engine/kernel32.cpp b/engines/sci/engine/kernel32.cpp index 6a112af0a3..1a63eceba9 100644 --- a/engines/sci/engine/kernel32.cpp +++ b/engines/sci/engine/kernel32.cpp @@ -617,15 +617,7 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) { warning("kString(Printf)"); break; case 12: // Printf Buf - if (argc == 3) - return kFormat(s, argc - 1, argv + 1); - else - // TODO - // For some reason, argc > 3 crashes, e.g. in Torin full (there's a format - // string %s%s, but the string passed for the first %s is invalid). Perhaps - // a list is passed in this case? - warning("kString(PrintBuf) - parameter count %d not supported", argc); - break; + return kFormat(s, argc - 1, argv + 1); case 13: { // atoi Common::String string = s->_segMan->getString(argv[1]); return make_reg(0, (uint16)atoi(string.c_str())); diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp index 769964e914..89d1d0da56 100644 --- a/engines/sci/engine/kstring.cpp +++ b/engines/sci/engine/kstring.cpp @@ -28,6 +28,7 @@ #include "sci/resource.h" #include "sci/engine/state.h" #include "sci/engine/message.h" +#include "sci/engine/selector.h" #include "sci/engine/kernel.h" namespace Sci { @@ -270,6 +271,11 @@ reg_t kFormat(EngineState *s, int argc, reg_t *argv) { switch (xfer) { case 's': { /* Copy string */ reg_t reg = argv[startarg + paramindex]; + if (s->_segMan->isObject(reg)) { + Selector slc = s->_kernel->findSelector("data"); // TODO: place in selector table + reg = read_selector(s->_segMan, reg, slc); + } + Common::String tempsource = (reg == NULL_REG) ? "" : kernel_lookup_text(s, reg, arguments[paramindex + 1]); int slen = strlen(tempsource.c_str()); -- cgit v1.2.3