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