From cd5a76b182dad336b007746d8cf744154b1a8966 Mon Sep 17 00:00:00 2001 From: Akihiro Sagawa Date: Mon, 16 Mar 2015 21:48:48 +0900 Subject: [PATCH] msvcrt: Add _mbctokata implementation. --- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 12 ++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/tests/string.c | 30 ++++++++++++++++++++++++++++++ 10 files changed, 50 insertions(+), 8 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 7ca7f8c18ec..b7d4945dfd4 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1084,7 +1084,7 @@ @ stub _mbclen_l @ cdecl _mbctohira(long) @ stub _mbctohira_l -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) @ stub _mbctokata_l @ cdecl _mbctolower(long) @ stub _mbctolower_l diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index d4459a61c0c..c7222b9171a 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1442,7 +1442,7 @@ @ stub _mbclen_l @ cdecl _mbctohira(long) @ stub _mbctohira_l -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) @ stub _mbctokata_l @ cdecl _mbctolower(long) @ stub _mbctolower_l diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 03fff1a1436..c7df42fdcfb 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1450,7 +1450,7 @@ @ stub _mbclen_l @ cdecl _mbctohira(long) @ stub _mbctohira_l -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) @ stub _mbctokata_l @ cdecl _mbctolower(long) @ stub _mbctolower_l diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index 9881ecacc12..c494ce0bbc7 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -424,7 +424,7 @@ @ cdecl _mbcjmstojis(long) @ cdecl _mbclen(ptr) @ cdecl _mbctohira(long) -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) @ cdecl _mbctolower(long) @ cdecl _mbctombb(long) @ cdecl _mbctoupper(long) diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 6e1d30961b6..f8a52f1c9f8 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -419,7 +419,7 @@ @ cdecl _mbcjmstojis(long) @ cdecl _mbclen(ptr) @ cdecl _mbctohira(long) -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) @ cdecl _mbctolower(long) @ cdecl _mbctombb(long) @ cdecl _mbctoupper(long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 5709319f59c..8b40e2e3046 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -757,7 +757,7 @@ @ stub _mbclen_l @ cdecl _mbctohira(long) @ stub _mbctohira_l -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) @ stub _mbctokata_l @ cdecl _mbctolower(long) @ stub _mbctolower_l diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 167e0f90957..5c65b2f3f6f 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -734,7 +734,7 @@ @ stub _mbclen_l @ cdecl _mbctohira(long) @ stub _mbctohira_l -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) @ stub _mbctokata_l @ cdecl _mbctolower(long) @ stub _mbctolower_l diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index b76157f6be9..044c2bd8c0f 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2288,3 +2288,15 @@ unsigned int CDECL _mbctohira(unsigned int c) return (c - 0x8340 - (c >= 0x837f ? 1 : 0)) + 0x829f; return c; } + +/********************************************************************* + * _mbctokata (MSVCRT.@) + * + * Converts a sjis hiragana character to katakana. + */ +unsigned int CDECL _mbctokata(unsigned int c) +{ + if(_ismbchira(c)) + return (c - 0x829f) + 0x8340 + (c >= 0x82de ? 1 : 0); + return c; +} diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index ea7dd906cc4..1f2a8ce65a9 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -700,7 +700,7 @@ # stub _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) # stub _mbctohira_l(long ptr) -@ stub _mbctokata(long) +@ cdecl _mbctokata(long) # stub _mbctokata_l(long ptr) @ cdecl _mbctolower(long) # stub _mbctolower_l(long ptr) diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index 4e48cd2dc4a..cf609f74851 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -1172,6 +1172,35 @@ static void test_mbctohira(void) _setmbcp(prev_cp); } +static void test_mbctokata(void) +{ + static const unsigned int mbckata_932[][2] = { + {0x8152, 0x8152}, {0x8153, 0x8153}, {0x8154, 0x8154}, {0x8155, 0x8155}, + {0x833f, 0x833f}, {0x829f, 0x8340}, {0x82dd, 0x837e}, {0x837f, 0x837f}, + {0x82de, 0x8380}, {0x8394, 0x8394}, {0x8397, 0x8397}, + {0xa5, 0xa5}, {0xb0, 0xb0}, {0xdd, 0xdd} }; + unsigned int i; + unsigned int prev_cp = _getmbcp(); + + _setmbcp(_MB_CP_SBCS); + for (i = 0; i < sizeof(mbckata_932)/sizeof(mbckata_932[0]); i++) + { + int ret, exp = mbckata_932[i][0]; + ret = _mbctokata(mbckata_932[i][0]); + ok(ret == exp, "Expected 0x%x, got 0x%x\n", exp, ret); + } + + _setmbcp(932); + for (i = 0; i < sizeof(mbckata_932)/sizeof(mbckata_932[0]); i++) + { + unsigned int ret, exp; + ret = _mbctokata(mbckata_932[i][0]); + exp = mbckata_932[i][1]; + ok(ret == exp, "Expected 0x%x, got 0x%x\n", exp, ret); + } + _setmbcp(prev_cp); +} + static void test_mbbtombc(void) { static const unsigned int mbbmbc[][2] = { @@ -2919,6 +2948,7 @@ START_TEST(string) test_mbcjisjms(); test_mbcjmsjis(); test_mbctohira(); + test_mbctokata(); test_mbbtombc(); test_mbctombb(); test_ismbckata();