diff options
Diffstat (limited to 'engines/sci/engine/kernel32.cpp')
-rw-r--r-- | engines/sci/engine/kernel32.cpp | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/engines/sci/engine/kernel32.cpp b/engines/sci/engine/kernel32.cpp index b132543206..465e0e92df 100644 --- a/engines/sci/engine/kernel32.cpp +++ b/engines/sci/engine/kernel32.cpp @@ -501,7 +501,7 @@ reg_t kArray(EngineState *s, int argc, reg_t *argv) { if (!s->_segMan->isHeapObject(argv[1])) return argv[1]; - return readSelector(s->_segMan, argv[1], SELECTOR(data)); + return GET_SEL32(s->_segMan, argv[1], SELECTOR(data)); default: error("Unknown kArray subop %d", argv[0].toUint16()); } @@ -575,16 +575,16 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) { uint32 count = argv[5].toSint16() == -1 ? string2.size() - index2 + 1 : argv[5].toUint16(); // We have a special case here for argv[1] being a system string - if (argv[1].segment == s->_segMan->getSysStringsSegment()) { + if (argv[1].segment == s->sys_strings_segment) { // Resize if necessary - const uint16 sysStringId = argv[1].toUint16(); - if ((uint32)s->_segMan->sysStrings->_strings[sysStringId]._maxSize < index1 + count) { - free(s->_segMan->sysStrings->_strings[sysStringId]._value); - s->_segMan->sysStrings->_strings[sysStringId]._maxSize = index1 + count; - s->_segMan->sysStrings->_strings[sysStringId]._value = (char *)calloc(index1 + count, sizeof(char)); + if ((uint32)s->sys_strings->_strings[argv[1].toUint16()]._maxSize < index1 + count) { + delete[] s->sys_strings->_strings[argv[1].toUint16()]._value; + s->sys_strings->_strings[argv[1].toUint16()]._maxSize = index1 + count; + s->sys_strings->_strings[argv[1].toUint16()]._value = new char[index1 + count]; + memset(s->sys_strings->_strings[argv[1].toUint16()]._value, 0, index1 + count); } - strncpy(s->_segMan->sysStrings->_strings[sysStringId]._value + index1, string2.c_str() + index2, count); + strncpy(s->sys_strings->_strings[argv[1].toUint16()]._value + index1, string2.c_str() + index2, count); } else { SciString *string1 = s->_segMan->lookupString(argv[1]); @@ -624,7 +624,7 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) { if (!s->_segMan->isHeapObject(argv[1])) return argv[1]; - return readSelector(s->_segMan, argv[1], SELECTOR(data)); + return GET_SEL32(s->_segMan, argv[1], SELECTOR(data)); case 10: // Stringlen return make_reg(0, s->_segMan->strlen(argv[1])); case 11: { // Printf @@ -689,12 +689,12 @@ reg_t kDeleteScreenItem(EngineState *s, int argc, reg_t *argv) { /* reg_t viewObj = argv[0]; - uint16 viewId = readSelectorValue(s->_segMan, viewObj, SELECTOR(view)); - int16 loopNo = readSelectorValue(s->_segMan, viewObj, SELECTOR(loop)); - int16 celNo = readSelectorValue(s->_segMan, viewObj, SELECTOR(cel)); + uint16 viewId = GET_SEL32V(s->_segMan, viewObj, SELECTOR(view)); + int16 loopNo = GET_SEL32V(s->_segMan, viewObj, SELECTOR(loop)); + int16 celNo = GET_SEL32V(s->_segMan, viewObj, SELECTOR(cel)); //int16 leftPos = 0; //int16 topPos = 0; - int16 priority = readSelectorValue(s->_segMan, viewObj, SELECTOR(priority)); + int16 priority = GET_SEL32V(s->_segMan, viewObj, SELECTOR(priority)); //int16 control = 0; */ @@ -761,10 +761,10 @@ reg_t kOnMe(EngineState *s, int argc, reg_t *argv) { Common::Rect nsRect; // Get the bounding rectangle of the object - nsRect.left = readSelectorValue(s->_segMan, targetObject, SELECTOR(nsLeft)); - nsRect.top = readSelectorValue(s->_segMan, targetObject, SELECTOR(nsTop)); - nsRect.right = readSelectorValue(s->_segMan, targetObject, SELECTOR(nsRight)); - nsRect.bottom = readSelectorValue(s->_segMan, targetObject, SELECTOR(nsBottom)); + nsRect.left = GET_SEL32V(s->_segMan, targetObject, SELECTOR(nsLeft)); + nsRect.top = GET_SEL32V(s->_segMan, targetObject, SELECTOR(nsTop)); + nsRect.right = GET_SEL32V(s->_segMan, targetObject, SELECTOR(nsRight)); + nsRect.bottom = GET_SEL32V(s->_segMan, targetObject, SELECTOR(nsBottom)); //warning("kOnMe: (%d, %d) on object %04x:%04x, parameter %d", argv[0].toUint16(), argv[1].toUint16(), PRINT_REG(argv[2]), argv[3].toUint16()); @@ -779,7 +779,7 @@ reg_t kInPolygon(EngineState *s, int argc, reg_t *argv) { reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv) { // TODO: argument 0 is usually 0, and arguments 1 and 2 are usually 1 reg_t object = argv[3]; - Common::String text = s->_segMan->getString(readSelector(s->_segMan, object, SELECTOR(text))); + Common::String text = s->_segMan->getString(GET_SEL32(s->_segMan, object, SELECTOR(text))); debug("kCreateTextBitmap: %s", text.c_str()); return NULL_REG; |