aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/string.cpp
diff options
context:
space:
mode:
authorTravis Howell2006-09-01 12:04:40 +0000
committerTravis Howell2006-09-01 12:04:40 +0000
commit7ca75815aaa7a86327a06006171dfd64584eabac (patch)
treea03386e1b765e5065b7710bd6891e01058c773bf /engines/scumm/string.cpp
parent1da493ac006fa77d02700765ade698eb5281fe59 (diff)
downloadscummvm-rg350-7ca75815aaa7a86327a06006171dfd64584eabac.tar.gz
scummvm-rg350-7ca75815aaa7a86327a06006171dfd64584eabac.tar.bz2
scummvm-rg350-7ca75815aaa7a86327a06006171dfd64584eabac.zip
Add HE72+ specific version of convertMessageToString(), to reduce filtering and since special codes aren't used.
svn-id: r23814
Diffstat (limited to 'engines/scumm/string.cpp')
-rw-r--r--engines/scumm/string.cpp53
1 files changed, 43 insertions, 10 deletions
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 19b51b6147..1a00a7b03d 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -792,13 +792,11 @@ void ScummEngine::drawString(int a, const byte *msg) {
_string[a].xpos = _charset->_str.right + 8; // Indy3: Fixes Grail Diary text positioning
}
-int ScummEngine::convertMessageToString(const byte *msg, byte *dst, int dstSize) {
+int ScummEngine_v72he::convertMessageToString(const byte *msg, byte *dst, int dstSize) {
uint num = 0;
- uint32 val;
byte chr;
const byte *src;
byte *end;
- byte transBuf[384];
assert(dst);
end = dst + dstSize;
@@ -808,13 +806,7 @@ int ScummEngine::convertMessageToString(const byte *msg, byte *dst, int dstSize)
return 0;
}
- if (_game.version >= 7) {
- translateText(msg, transBuf);
- src = transBuf;
- } else {
- src = msg;
- }
-
+ src = msg;
num = 0;
while (1) {
@@ -834,6 +826,47 @@ int ScummEngine::convertMessageToString(const byte *msg, byte *dst, int dstSize)
if (chr == 0)
break;
+
+ *dst++ = chr;
+
+ // Check for a buffer overflow
+ if (dst >= end)
+ error("convertMessageToString: buffer overflow!");
+ }
+ *dst = 0;
+
+ return dstSize - (end - dst);
+}
+
+int ScummEngine::convertMessageToString(const byte *msg, byte *dst, int dstSize) {
+ uint num = 0;
+ uint32 val;
+ byte chr;
+ const byte *src;
+ byte *end;
+ byte transBuf[384];
+
+ assert(dst);
+ end = dst + dstSize;
+
+ if (msg == NULL) {
+ debug(0, "Bad message in convertMessageToString, ignoring");
+ return 0;
+ }
+
+ if (_game.version >= 7) {
+ translateText(msg, transBuf);
+ src = transBuf;
+ } else {
+ src = msg;
+ }
+
+ num = 0;
+
+ while (1) {
+ chr = src[num++];
+ if (chr == 0)
+ break;
if (chr == 0xFF) {
chr = src[num++];