Added support for String types to kFormat (seems to work but needs testing...)
svn-id: r47694
This commit is contained in:
parent
42ec4e3780
commit
928b4a6df6
2 changed files with 7 additions and 9 deletions
|
@ -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()));
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue