const byte *SimonEngine::getStringPtrByID(uint stringId) { const byte *string_ptr; byte *dst; _freeStringSlot ^= 1; if (stringId < 0x8000) { string_ptr = _stringTabPtr[stringId]; } else { string_ptr = getLocalStringByID(stringId); } dst = _stringReturnBuffer[_freeStringSlot]; strcpy((char *)dst, (const char *)string_ptr); return dst; }
const byte *AGOSEngine::getStringPtrByID(uint16 stringId, bool upperCase) { const byte *stringPtr; byte *dst; _freeStringSlot ^= 1; dst = _stringReturnBuffer[_freeStringSlot]; if (getGameType() == GType_ELVIRA1 && getPlatform() == Common::kPlatformAtariST) { byte *ptr = _stringTabPtr[stringId]; _textCount = 0; _awaitTwoByteToken = 0; uncompressText(ptr); _textBuffer[_textCount] = 0; Common::strlcpy((char *)dst, (const char *)_textBuffer, 180); } else { if (stringId < 0x8000) { stringPtr = _stringTabPtr[stringId]; } else { stringPtr = getLocalStringByID(stringId); } Common::strlcpy((char *)dst, (const char *)stringPtr, 180); } // WORKAROUND bug #1538873: The French version of Simon 1 and the // Polish version of Simon 2 used excess spaces, at the end of many // messages, so we strip off those excess spaces. if ((getGameType() == GType_SIMON1 && _language == Common::FR_FRA) || (getGameType() == GType_SIMON2 && _language == Common::PL_POL)) { uint16 len = strlen((const char *)dst) - 1; while (len && dst[len] == 32) { dst[len] = 0; len--; } } if (upperCase && *dst) { if (Common::isLower(*dst)) *dst = toupper(*dst); } return dst; }