diff options
author | Travis Howell | 2007-12-28 00:08:23 +0000 |
---|---|---|
committer | Travis Howell | 2007-12-28 00:08:23 +0000 |
commit | 9b0db4be37d023798dc321eec417f863a4774901 (patch) | |
tree | 4afd8298a969f398c1955c97bced0fa8e3017367 /engines/scumm/he/script_v70he.cpp | |
parent | b90740d2037726becc3c4398443d47d55b5f4d8f (diff) | |
download | scummvm-rg350-9b0db4be37d023798dc321eec417f863a4774901.tar.gz scummvm-rg350-9b0db4be37d023798dc321eec417f863a4774901.tar.bz2 scummvm-rg350-9b0db4be37d023798dc321eec417f863a4774901.zip |
Move more HE code to HE71, to reduce code size, when using DISABLE_HE option.
svn-id: r30021
Diffstat (limited to 'engines/scumm/he/script_v70he.cpp')
-rw-r--r-- | engines/scumm/he/script_v70he.cpp | 241 |
1 files changed, 8 insertions, 233 deletions
diff --git a/engines/scumm/he/script_v70he.cpp b/engines/scumm/he/script_v70he.cpp index 4f3c95f5a6..3f22c16648 100644 --- a/engines/scumm/he/script_v70he.cpp +++ b/engines/scumm/he/script_v70he.cpp @@ -340,20 +340,20 @@ void ScummEngine_v70he::setupOpcodes() { OPCODE(o60_redimArray), OPCODE(o60_readFilePos), /* EC */ - OPCODE(o70_copyString), - OPCODE(o70_getStringWidth), + OPCODE(o6_invalid), + OPCODE(o6_invalid), OPCODE(o70_getStringLen), - OPCODE(o70_appendString), + OPCODE(o6_invalid), /* F0 */ - OPCODE(o70_concatString), - OPCODE(o70_compareString), + OPCODE(o6_invalid), + OPCODE(o6_invalid), OPCODE(o70_isResourceLoaded), OPCODE(o70_readINI), /* F4 */ OPCODE(o70_writeINI), - OPCODE(o70_getStringLenForWidth), - OPCODE(o70_getCharIndexInString), - OPCODE(o70_findBox), + OPCODE(o6_invalid), + OPCODE(o6_invalid), + OPCODE(o6_invalid), /* F8 */ OPCODE(o6_invalid), OPCODE(o70_createDirectory), @@ -378,64 +378,6 @@ const char *ScummEngine_v70he::getOpcodeDesc(byte i) { return _opcodesv70he[i].desc; } -int ScummEngine_v70he::getStringCharWidth(byte chr) { - int charset = _string[0]._default.charset; - - byte *ptr = getResourceAddress(rtCharset, charset); - assert(ptr); - ptr += 29; - - int spacing = 0; - - int offs = READ_LE_UINT32(ptr + chr * 4 + 4); - if (offs) { - spacing = ptr[offs] + (signed char)ptr[offs + 2]; - } - - return spacing; -} - -int ScummEngine_v70he::setupStringArray(int size) { - writeVar(0, 0); - defineArray(0, kStringArray, 0, size + 1); - writeArray(0, 0, 0, 0); - return readVar(0); -} - -void ScummEngine_v70he::appendSubstring(int dst, int src, int srcOffs, int len) { - int dstOffs, value; - int i = 0; - - if (len == -1) { - len = resStrLen(getStringAddress(src)); - srcOffs = 0; - } - - dstOffs = resStrLen(getStringAddress(dst)); - - len -= srcOffs; - len++; - - while (i < len) { - writeVar(0, src); - value = readArray(0, 0, srcOffs + i); - writeVar(0, dst); - writeArray(0, 0, dstOffs + i, value); - i++; - } - - writeArray(0, 0, dstOffs + i, 0); -} - -void ScummEngine_v70he::adjustRect(Common::Rect &rect) { - // Scripts can set all rect positions to -1 - if (rect.right != -1) - rect.right += 1; - - if (rect.bottom != -1) - rect.bottom += 1; -} - void ScummEngine_v70he::o70_startSound() { int var, value; @@ -728,43 +670,6 @@ void ScummEngine_v70he::o70_systemOps() { } } -void ScummEngine_v70he::o70_copyString() { - int dst, size; - int src = pop(); - - size = resStrLen(getStringAddress(src)) + 1; - dst = setupStringArray(size); - - appendSubstring(dst, src, -1, -1); - - push(dst); -} - -void ScummEngine_v70he::o70_getStringWidth() { - int array, pos, len; - int chr, width = 0; - - len = pop(); - pos = pop(); - array = pop(); - - if (len == -1) { - pos = 0; - len = resStrLen(getStringAddress(array)); - } - - writeVar(0, array); - while (pos <= len) { - chr = readArray(0, 0, pos); - if (chr == 0) - break; - width += getStringCharWidth(chr); - pos++; - } - - push(width); -} - void ScummEngine_v70he::o70_getStringLen() { int id, len; byte *addr; @@ -779,65 +684,6 @@ void ScummEngine_v70he::o70_getStringLen() { push(len); } -void ScummEngine_v70he::o70_appendString() { - int dst, size; - - int len = pop(); - int srcOffs = pop(); - int src = pop(); - - size = len - srcOffs + 2; - dst = setupStringArray(size); - - appendSubstring(dst, src, srcOffs, len); - - push(dst); -} - -void ScummEngine_v70he::o70_concatString() { - int dst, size; - - int src2 = pop(); - int src1 = pop(); - - size = resStrLen(getStringAddress(src1)); - size += resStrLen(getStringAddress(src2)) + 1; - dst = setupStringArray(size); - - appendSubstring(dst, src1, 0, -1); - appendSubstring(dst, src2, 0, -1); - - push(dst); -} - -void ScummEngine_v70he::o70_compareString() { - int result; - - int array1 = pop(); - int array2 = pop(); - - byte *string1 = getStringAddress(array1); - if (!string1) - error("o70_compareString: Reference to zeroed array pointer (%d)", array1); - - byte *string2 = getStringAddress(array2); - if (!string2) - error("o70_compareString: Reference to zeroed array pointer (%d)", array2); - - while (*string1 == *string2) { - if (*string2 == 0) { - push(0); - return; - } - - string1++; - string2++; - } - - result = (*string1 > *string2) ? -1 : 1; - push(result); -} - void ScummEngine_v70he::o70_isResourceLoaded() { // Reports percentage of resource loaded by queue int type; @@ -934,77 +780,6 @@ void ScummEngine_v70he::o70_writeINI() { } } -void ScummEngine_v70he::o70_getStringLenForWidth() { - int chr, max; - int array, len, pos, width = 0; - - max = pop(); - pos = pop(); - array = pop(); - - len = resStrLen(getStringAddress(array)); - - writeVar(0, array); - while (pos <= len) { - chr = readArray(0, 0, pos); - width += getStringCharWidth(chr); - if (width >= max) { - push(pos); - return; - } - pos++; - } - - push(len); -} - -void ScummEngine_v70he::o70_getCharIndexInString() { - int array, end, len, pos, value; - - value = pop(); - end = pop(); - pos = pop(); - array = pop(); - - if (end >= 0) { - len = resStrLen(getStringAddress(array)); - if (len < end) - end = len; - } else { - end = 0; - } - - if (pos < 0) - pos = 0; - - writeVar(0, array); - if (end > pos) { - while (end >= pos) { - if (readArray(0, 0, pos) == value) { - push(pos); - return; - } - pos++; - } - } else { - while (end <= pos) { - if (readArray(0, 0, pos) == value) { - push(pos); - return; - } - pos--; - } - } - - push(-1); -} - -void ScummEngine_v70he::o70_findBox() { - int y = pop(); - int x = pop(); - push(getSpecialBox(x, y)); -} - void ScummEngine_v70he::o70_createDirectory() { int len; byte directoryName[100]; |