Piotr Caban : msvcp90: Added ctype<wchar_t>::is functions implementation.

Alexandre Julliard julliard at winehq.org
Thu Dec 22 12:35:51 CST 2011


Module: wine
Branch: master
Commit: 1de0fe3a004b342086c58b8c3d92473280a2bc8d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1de0fe3a004b342086c58b8c3d92473280a2bc8d

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Dec 22 18:25:07 2011 +0100

msvcp90: Added ctype<wchar_t>::is functions implementation.

---

 dlls/msvcp90/locale.c     |   38 ++++++++++++++++++++++++++++++--------
 dlls/msvcp90/msvcp90.spec |    4 ++--
 2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index 0ffc25c..a8d04d4 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -2266,15 +2266,34 @@ const wchar_t* __thiscall ctype_wchar_toupper(const ctype_wchar *this,
     return call_ctype_wchar_do_toupper(this, first, last);
 }
 
+/* _Getwctypes */
+const wchar_t* __cdecl _Getwctypes(const wchar_t *first, const wchar_t *last,
+        short *mask, const _Ctypevec *ctype)
+{
+    TRACE("(%p %p %p %p)\n", first, last, mask, ctype);
+    GetStringTypeW(CT_CTYPE1, first, last-first, (WORD*)mask);
+    return last;
+}
+
+/* _Getwctype */
+short __cdecl _Getwctype(wchar_t ch, const _Ctypevec *ctype)
+{
+    short mask = 0;
+    _Getwctypes(&ch, &ch+1, &mask, ctype);
+    return mask;
+}
+
 /* ?do_is@?$ctype at _W@std@@MBE_NF_W at Z */
 /* ?do_is@?$ctype at _W@std@@MEBA_NF_W at Z */
 /* ?do_is@?$ctype at G@std@@MBE_NFG at Z */
 /* ?do_is@?$ctype at G@std@@MEBA_NFG at Z */
 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch, 12)
+#define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
+        MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
 MSVCP_bool __thiscall ctype_wchar_do_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
 {
-    FIXME("(%p %x %d) stub\n", this, mask, ch);
-    return 0;
+    TRACE("(%p %x %d)\n", this, mask, ch);
+    return !(_Getwctype(ch, &this->ctype) & mask);
 }
 
 /* ?do_is@?$ctype at _W@std@@MBEPB_WPB_W0PAF at Z */
@@ -2282,11 +2301,14 @@ MSVCP_bool __thiscall ctype_wchar_do_is_ch(const ctype_wchar *this, short mask,
 /* ?do_is@?$ctype at G@std@@MBEPBGPBG0PAF at Z */
 /* ?do_is@?$ctype at G@std@@MEBAPEBGPEBG0PEAF at Z */
 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is, 16)
+#define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
+        const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
+        (this, first, last, dest))
 const wchar_t* __thiscall ctype_wchar_do_is(const ctype_wchar *this,
         const wchar_t *first, const wchar_t *last, short *dest)
 {
-    FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
-    return NULL;
+    TRACE("(%p %p %p %p)\n", this, first, last, dest);
+    return _Getwctypes(first, last, dest, &this->ctype);
 }
 
 /* ?is@?$ctype at _W@std@@QBE_NF_W at Z */
@@ -2296,8 +2318,8 @@ const wchar_t* __thiscall ctype_wchar_do_is(const ctype_wchar *this,
 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch, 12)
 MSVCP_bool __thiscall ctype_wchar_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
 {
-    FIXME("(%p %x %d) stub\n", this, mask, ch);
-    return 0;
+    TRACE("(%p %x %d)\n", this, mask, ch);
+    return call_ctype_wchar_do_is_ch(this, mask, ch);
 }
 
 /* ?is@?$ctype at _W@std@@QBEPB_WPB_W0PAF at Z */
@@ -2308,8 +2330,8 @@ DEFINE_THISCALL_WRAPPER(ctype_wchar_is, 16)
 const wchar_t* __thiscall ctype_wchar_is(const ctype_wchar *this,
         const wchar_t *first, const wchar_t *last, short *dest)
 {
-    FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
-    return NULL;
+    TRACE("(%p %p %p %p)\n", this, first, last, dest);
+    return call_ctype_wchar_do_is(this, first, last, dest);
 }
 
 /* ?do_scan_is@?$ctype at _W@std@@MBEPB_WFPB_W0 at Z */
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 1555fac..fa7fef7 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -5754,8 +5754,8 @@
 @ cdecl _Getctype()
 @ cdecl _Getcvt()
 @ stub _Getdateorder
-@ stub _Getwctype
-@ stub _Getwctypes
+@ cdecl _Getwctype(long ptr)
+@ cdecl _Getwctypes(ptr ptr ptr ptr)
 @ extern _Hugeval
 @ extern _Inf
 @ stub _LCosh




More information about the wine-cvs mailing list