aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
authorBLooperZ2020-01-01 19:51:26 +0200
committerFilippos Karapetis2020-01-01 20:28:56 +0200
commitb7275be05171e6e56f41d0b3f81198e8926d0ada (patch)
treeb2df806b8e792fb61f7682876cc1df721ed756a0 /engines/scumm
parent0c3ffa633076718552cfeecea55d7026a840eccf (diff)
downloadscummvm-rg350-b7275be05171e6e56f41d0b3f81198e8926d0ada.tar.gz
scummvm-rg350-b7275be05171e6e56f41d0b3f81198e8926d0ada.tar.bz2
scummvm-rg350-b7275be05171e6e56f41d0b3f81198e8926d0ada.zip
SCUMM: use reliable types in fake bidi
Diffstat (limited to 'engines/scumm')
-rw-r--r--engines/scumm/scumm.h2
-rw-r--r--engines/scumm/string.cpp52
2 files changed, 27 insertions, 27 deletions
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 594e4ce352..958b6d8d46 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -1214,7 +1214,7 @@ protected:
virtual void CHARSET_1();
bool newLine();
void drawString(int a, const byte *msg);
- void fakeBidiString(char *ltext, bool ignoreVerb);
+ void fakeBidiString(byte *ltext, bool ignoreVerb);
void debugMessage(const byte *msg);
void showMessageDialog(const byte *msg);
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 39ee5b4700..0a767e1aa9 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -154,7 +154,7 @@ void ScummEngine_v6::drawBlastTexts() {
_charset->setCurID(_blastTextQueue[i].charset);
if (_game.version >= 7 && _language == Common::HE_ISR) {
- fakeBidiString((char *)buf, false);
+ fakeBidiString(buf, false);
}
do {
@@ -463,35 +463,35 @@ bool ScummEngine::newLine() {
return true;
}
-void ScummEngine::fakeBidiString(char *ltext, bool ignoreVerb) {
+void ScummEngine::fakeBidiString(byte *ltext, bool ignoreVerb) {
// Provides custom made BiDi mechanism.
// Reverses texts on each line marked by control characters (considering different control characters used in verbs panel)
// While preserving original order of numbers (also negative numbers and comma separated)
- int ll = 0;
- if (_game.id == GID_INDY4 && ltext[ll] == 127) {
+ int32 ll = 0;
+ if (_game.id == GID_INDY4 && ltext[ll] == 0x7F) {
ll++;
}
- while (ltext[ll] == -1) {
+ while (ltext[ll] == 0xFF) {
ll += 4;
}
- int ipos = 0;
- int start = 0;
- char *text = ltext + ll;
- char *current = text;
+ int32 ipos = 0;
+ int32 start = 0;
+ byte *text = ltext + ll;
+ byte *current = text;
- int bufferSize = 384;
- char * const buff = (char *)calloc(sizeof(char), bufferSize);
+ int32 bufferSize = 384;
+ byte * const buff = (byte *)calloc(sizeof(byte), bufferSize);
assert(buff);
- char * const stack = (char *)calloc(sizeof(char), bufferSize);
+ byte * const stack = (byte *)calloc(sizeof(byte), bufferSize);
assert(stack);
while (1) {
- if (*current == 13 || *current == 0 || *current == -1 || *current == -2) {
+ if (*current == 0x0D || *current == 0 || *current == 0xFF || *current == 0xFE) {
// ignore the line break for verbs texts
if (ignoreVerb && (*(current + 1) == 8)) {
*(current + 1) = *current;
- *current = 8;
+ *current = 0x08;
ipos += 2;
current += 2;
continue;
@@ -501,14 +501,14 @@ void ScummEngine::fakeBidiString(char *ltext, bool ignoreVerb) {
memset(stack, 0, bufferSize);
// Reverse string on current line (between start and ipos).
- int sthead = 0;
- char last = '\0';
+ int32 sthead = 0;
+ byte last = 0;
for (int j = 0; j < ipos; j++) {
- char *curr = text + start + ipos - j - 1;
+ byte *curr = text + start + ipos - j - 1;
// Special cases to preserve original ordering (numbers).
if (Common::isDigit(*curr) ||
- (*curr == ',' && j + 1 < ipos && Common::isDigit(*(curr - 1)) && Common::isDigit(last)) ||
- (*curr == '-' && (j + 1 == ipos || Common::isSpace(*(curr - 1))) && Common::isDigit(last))) {
+ (*curr == (byte)',' && j + 1 < ipos && Common::isDigit(*(curr - 1)) && Common::isDigit(last)) ||
+ (*curr == (byte)'-' && (j + 1 == ipos || Common::isSpace(*(curr - 1))) && Common::isDigit(last))) {
++sthead;
stack[sthead] = *curr;
} else {
@@ -527,9 +527,9 @@ void ScummEngine::fakeBidiString(char *ltext, bool ignoreVerb) {
memcpy(text + start, buff, ipos);
start += ipos + 1;
ipos = -1;
- if (*current == -1 || *current == -2) {
+ if (*current == 0xFF || *current == 0xFE) {
current++;
- if (*current == 3 || *current == 2) {
+ if (*current == 0x03 || *current == 0x02) {
break;
}
if (*current == 0x0A || *current == 0x0C) {
@@ -549,9 +549,9 @@ void ScummEngine::fakeBidiString(char *ltext, bool ignoreVerb) {
}
break;
}
- if (!ignoreVerb && _game.id == GID_INDY4 && ltext[0] == 127) {
- ltext[start + ipos + ll] = '\x80';
- ltext[start + ipos + ll + 1] = '\0';
+ if (!ignoreVerb && _game.id == GID_INDY4 && ltext[0] == 0x7F) {
+ ltext[start + ipos + ll] = 0x80;
+ ltext[start + ipos + ll + 1] = 0;
}
free(buff);
@@ -711,7 +711,7 @@ void ScummEngine::CHARSET_1() {
int c = 0;
if (_game.version >= 4 && _game.version < 7 && _language == Common::HE_ISR) {
- fakeBidiString((char *)_charsetBuffer + _charsetBufPos, true);
+ fakeBidiString(_charsetBuffer + _charsetBufPos, true);
}
while (handleNextCharsetCode(a, &c)) {
@@ -984,7 +984,7 @@ void ScummEngine::drawString(int a, const byte *msg) {
convertMessageToString(msg, buf, sizeof(buf));
if (_game.version >= 4 && _game.version < 7 && _language == Common::HE_ISR) {
- fakeBidiString((char *)buf, false);
+ fakeBidiString(buf, false);
}
_charset->_top = _string[a].ypos + _screenTop;