Added support for String types to kFormat (seems to work but needs testing...)

svn-id: r47694
This commit is contained in:
Filippos Karapetis 2010-01-30 01:45:59 +00:00
parent 42ec4e3780
commit 928b4a6df6
2 changed files with 7 additions and 9 deletions

View file

@ -617,15 +617,7 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) {
warning("kString(Printf)"); warning("kString(Printf)");
break; break;
case 12: // Printf Buf case 12: // Printf Buf
if (argc == 3) return kFormat(s, argc - 1, argv + 1);
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;
case 13: { // atoi case 13: { // atoi
Common::String string = s->_segMan->getString(argv[1]); Common::String string = s->_segMan->getString(argv[1]);
return make_reg(0, (uint16)atoi(string.c_str())); return make_reg(0, (uint16)atoi(string.c_str()));

View file

@ -28,6 +28,7 @@
#include "sci/resource.h" #include "sci/resource.h"
#include "sci/engine/state.h" #include "sci/engine/state.h"
#include "sci/engine/message.h" #include "sci/engine/message.h"
#include "sci/engine/selector.h"
#include "sci/engine/kernel.h" #include "sci/engine/kernel.h"
namespace Sci { namespace Sci {
@ -270,6 +271,11 @@ reg_t kFormat(EngineState *s, int argc, reg_t *argv) {
switch (xfer) { switch (xfer) {
case 's': { /* Copy string */ case 's': { /* Copy string */
reg_t reg = argv[startarg + paramindex]; 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, Common::String tempsource = (reg == NULL_REG) ? "" : kernel_lookup_text(s, reg,
arguments[paramindex + 1]); arguments[paramindex + 1]);
int slen = strlen(tempsource.c_str()); int slen = strlen(tempsource.c_str());