diff options
author | Sven Hesse | 2012-07-07 19:14:06 +0200 |
---|---|---|
committer | Sven Hesse | 2012-07-30 01:44:45 +0200 |
commit | 10b9be285149dd21bc38710c1a685800fab75e01 (patch) | |
tree | 0ce1913d5384242c4b98ec8397d86b776761a9f1 | |
parent | 5b02192477cbdc9e8251bd48cac764d6fa61d024 (diff) | |
download | scummvm-rg350-10b9be285149dd21bc38710c1a685800fab75e01.tar.gz scummvm-rg350-10b9be285149dd21bc38710c1a685800fab75e01.tar.bz2 scummvm-rg350-10b9be285149dd21bc38710c1a685800fab75e01.zip |
GOB: Add Util::toCP850Lower() / toCP850Upper()
-rw-r--r-- | engines/gob/util.cpp | 66 | ||||
-rw-r--r-- | engines/gob/util.h | 5 |
2 files changed, 71 insertions, 0 deletions
diff --git a/engines/gob/util.cpp b/engines/gob/util.cpp index e1c16c3257..5ac4ef024e 100644 --- a/engines/gob/util.cpp +++ b/engines/gob/util.cpp @@ -247,6 +247,72 @@ int16 Util::translateKey(const Common::KeyState &key) { return 0; } +static const uint8 kLowerToUpper[][2] = { + {0x81, 0x9A}, + {0x82, 0x90}, + {0x83, 0xB6}, + {0x84, 0x8E}, + {0x85, 0xB7}, + {0x86, 0x8F}, + {0x87, 0x80}, + {0x88, 0xD2}, + {0x89, 0xD3}, + {0x8A, 0xD4}, + {0x8B, 0xD8}, + {0x8C, 0xD7}, + {0x8D, 0xDE}, + {0x91, 0x92}, + {0x93, 0xE2}, + {0x94, 0x99}, + {0x95, 0xE3}, + {0x96, 0xEA}, + {0x97, 0xEB}, + {0x95, 0xE3}, + {0x96, 0xEA}, + {0x97, 0xEB}, + {0x9B, 0x9D}, + {0xA0, 0xB5}, + {0xA1, 0xD6}, + {0xA2, 0xE0}, + {0xA3, 0xE9}, + {0xA4, 0xA5}, + {0xC6, 0xC7}, + {0xD0, 0xD1}, + {0xE4, 0xE5}, + {0xE7, 0xE8}, + {0xEC, 0xED} +}; + +char Util::toCP850Lower(char cp850) { + const uint8 cp = (unsigned char)cp850; + if (cp <= 32) + return cp850; + + if (cp <= 127) + return tolower(cp850); + + for (uint i = 0; i < ARRAYSIZE(kLowerToUpper); i++) + if (cp == kLowerToUpper[i][1]) + return (char)kLowerToUpper[i][0]; + + return cp850; +} + +char Util::toCP850Upper(char cp850) { + const uint8 cp = (unsigned char)cp850; + if (cp <= 32) + return cp850; + + if (cp <= 127) + return toupper(cp850); + + for (uint i = 0; i < ARRAYSIZE(kLowerToUpper); i++) + if (cp == kLowerToUpper[i][0]) + return (char)kLowerToUpper[i][1]; + + return cp850; +} + int16 Util::getKey() { Common::KeyState key; diff --git a/engines/gob/util.h b/engines/gob/util.h index 2e568ad169..a4984c6207 100644 --- a/engines/gob/util.h +++ b/engines/gob/util.h @@ -143,6 +143,11 @@ public: /** Read a constant-length string out of a stream. */ static Common::String readString(Common::SeekableReadStream &stream, int n); + /** Convert a character in CP850 encoding to the equivalent lower case character. */ + static char toCP850Lower(char cp850); + /** Convert a character in CP850 encoding to the equivalent upper case character. */ + static char toCP850Upper(char cp850); + Util(GobEngine *vm); protected: |