aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/he/script_v70he.cpp
diff options
context:
space:
mode:
authorTravis Howell2007-12-28 00:08:23 +0000
committerTravis Howell2007-12-28 00:08:23 +0000
commit9b0db4be37d023798dc321eec417f863a4774901 (patch)
tree4afd8298a969f398c1955c97bced0fa8e3017367 /engines/scumm/he/script_v70he.cpp
parentb90740d2037726becc3c4398443d47d55b5f4d8f (diff)
downloadscummvm-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.cpp241
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];