Piotr Caban : msvcp90: Added ios_base flags manipulators implementation.

Alexandre Julliard julliard at winehq.org
Thu Sep 13 14:39:22 CDT 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Sep 13 14:34:02 2012 +0200

msvcp90: Added ios_base flags manipulators implementation.

---

 dlls/msvcp90/ios.c        |   59 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/msvcp90/msvcp90.spec |    6 ++--
 2 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index 39e9a9f..1816884 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -50,6 +50,11 @@ typedef struct {
     streamsize arg;
 } manip_streamsize;
 
+typedef struct {
+    void (__cdecl *pfunc)(ios_base*, int);
+    int arg;
+} manip_int;
+
 typedef enum {
     INITFL_new   = 0,
     INITFL_open  = 1,
@@ -12877,6 +12882,60 @@ manip_streamsize* __cdecl setw(manip_streamsize *ret, streamsize width)
     return ret;
 }
 
+static void __cdecl resetioflags_func(ios_base *base, int mask)
+{
+    ios_base_setf_mask(base, 0, mask);
+}
+
+/* ?resetiosflags at std@@YA?AU?$_Smanip at H@1 at H@Z */
+manip_int* __cdecl resetiosflags(manip_int *ret, int mask)
+{
+    TRACE("(%p %d)\n", ret, mask);
+
+    ret->pfunc = resetioflags_func;
+    ret->arg = mask;
+    return ret;
+}
+
+static void __cdecl setiosflags_func(ios_base *base, int mask)
+{
+    ios_base_setf_mask(base, FMTFLAG_mask, mask);
+}
+
+/* ?setiosflags at std@@YA?AU?$_Smanip at H@1 at H@Z */
+manip_int* __cdecl setiosflags(manip_int *ret, int mask)
+{
+    TRACE("(%p %d)\n", ret, mask);
+
+    ret->pfunc = setiosflags_func;
+    ret->arg = mask;
+    return ret;
+}
+
+static void __cdecl setbase_func(ios_base *base, int set_base)
+{
+    if(set_base == 10)
+        set_base = FMTFLAG_dec;
+    else if(set_base == 8)
+        set_base = FMTFLAG_oct;
+    else if(set_base == 16)
+        set_base = FMTFLAG_hex;
+    else
+        set_base = 0;
+
+    ios_base_setf_mask(base, set_base, FMTFLAG_basefield);
+}
+
+/* ?setbase at std@@YA?AU?$_Smanip at H@1 at H@Z */
+manip_int* __cdecl setbase(manip_int *ret, int base)
+{
+    TRACE("(%p %d)\n", ret, base);
+
+    ret->pfunc = setbase_func;
+    ret->arg = base;
+    return ret;
+}
+
 static basic_filebuf_char filebuf_char_stdin;
 /* ?cin at std@@3V?$basic_istream at DU?$char_traits at D@std@@@1 at A */
 struct {
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index b70fd27..576541c 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -5173,7 +5173,7 @@
 @ cdecl -arch=win64 ?reserve@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEAAX_K at Z(ptr long) MSVCP_basic_string_wchar_reserve
 @ thiscall -arch=win32 ?reserve@?$basic_string at _WU?$char_traits at _W@std@@V?$allocator at _W@2@@std@@QAEXI at Z(ptr long) MSVCP_basic_string_wchar_reserve
 @ cdecl -arch=win64 ?reserve@?$basic_string at _WU?$char_traits at _W@std@@V?$allocator at _W@2@@std@@QEAAX_K at Z(ptr long) MSVCP_basic_string_wchar_reserve
-@ stub ?resetiosflags at std@@YA?AU?$_Smanip at H@1 at H@Z
+@ cdecl ?resetiosflags at std@@YA?AU?$_Smanip at H@1 at H@Z(ptr long) resetiosflags
 @ thiscall -arch=win32 ?resize@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXI at Z(ptr long) MSVCP_basic_string_char_resize
 @ cdecl -arch=win64 ?resize@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAX_K at Z(ptr long) MSVCP_basic_string_char_resize
 @ thiscall -arch=win32 ?resize@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXID at Z(ptr long long) MSVCP_basic_string_char_resize_ch
@@ -5312,7 +5312,7 @@
 @ cdecl -arch=win64 ?seekpos at strstreambuf@std@@MEAA?AV?$fpos at H@2 at V32@H at Z(ptr ptr ptr long) strstreambuf_seekpos
 @ cdecl ?set_new_handler at std@@YAP6AXXZH at Z(long) set_new_handler_reset
 @ cdecl ?set_new_handler at std@@YAP6AXXZP6AXXZ at Z(ptr) set_new_handler
-@ stub ?setbase at std@@YA?AU?$_Smanip at H@1 at H@Z
+@ cdecl ?setbase at std@@YA?AU?$_Smanip at H@1 at H@Z(ptr long) setbase
 @ thiscall -arch=win32 ?setbuf@?$basic_filebuf at DU?$char_traits at D@std@@@std@@MAEPAV?$basic_streambuf at DU?$char_traits at D@std@@@2 at PADH@Z(ptr ptr long) basic_filebuf_char_setbuf
 @ cdecl -arch=win64 ?setbuf@?$basic_filebuf at DU?$char_traits at D@std@@@std@@MEAAPEAV?$basic_streambuf at DU?$char_traits at D@std@@@2 at PEAD_J@Z(ptr ptr long) basic_filebuf_char_setbuf
 @ thiscall -arch=win32 ?setbuf@?$basic_filebuf at GU?$char_traits at G@std@@@std@@MAEPAV?$basic_streambuf at GU?$char_traits at G@std@@@2 at PAGH@Z(ptr ptr long) basic_filebuf_char_setbuf
@@ -5335,7 +5335,7 @@
 @ cdecl -arch=win64 ?setg@?$basic_streambuf at GU?$char_traits at G@std@@@std@@IEAAXPEAG00 at Z(ptr ptr ptr ptr) basic_streambuf_wchar_setg
 @ thiscall -arch=win32 ?setg@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@IAEXPA_W00 at Z(ptr ptr ptr ptr) basic_streambuf_wchar_setg
 @ cdecl -arch=win64 ?setg@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@IEAAXPEA_W00 at Z(ptr ptr ptr ptr) basic_streambuf_wchar_setg
-@ stub ?setiosflags at std@@YA?AU?$_Smanip at H@1 at H@Z
+@ cdecl ?setiosflags at std@@YA?AU?$_Smanip at H@1 at H@Z(ptr long) setiosflags
 @ thiscall -arch=win32 ?setp@?$basic_streambuf at DU?$char_traits at D@std@@@std@@IAEXPAD00 at Z(ptr ptr ptr ptr) basic_streambuf_char_setp_next
 @ cdecl -arch=win64 ?setp@?$basic_streambuf at DU?$char_traits at D@std@@@std@@IEAAXPEAD00 at Z(ptr ptr ptr ptr) basic_streambuf_char_setp_next
 @ thiscall -arch=win32 ?setp@?$basic_streambuf at DU?$char_traits at D@std@@@std@@IAEXPAD0 at Z(ptr ptr ptr) basic_streambuf_char_setp




More information about the wine-cvs mailing list