Module: wine Branch: master Commit: 905752e0f4363acff031a2d503bc6def8b033683 URL: http://source.winehq.org/git/wine.git/?a=commit;h=905752e0f4363acff031a2d503... Author: Piotr Caban <piotr(a)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(a)std@@YA?AU?$_Smanip(a)H@1(a)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(a)std@@YA?AU?$_Smanip(a)H@1(a)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(a)std@@YA?AU?$_Smanip(a)H@1(a)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(a)std@@3V?$basic_istream(a)DU?$char_traits(a)D@std@@@1(a)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(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEAAX_K(a)Z(ptr long) MSVCP_basic_string_wchar_reserve @ thiscall -arch=win32 ?reserve@?$basic_string(a)_WU?$char_traits(a)_W@std@@V?$allocator(a)_W@2@@std@@QAEXI(a)Z(ptr long) MSVCP_basic_string_wchar_reserve @ cdecl -arch=win64 ?reserve@?$basic_string(a)_WU?$char_traits(a)_W@std@@V?$allocator(a)_W@2@@std@@QEAAX_K(a)Z(ptr long) MSVCP_basic_string_wchar_reserve -@ stub ?resetiosflags(a)std@@YA?AU?$_Smanip(a)H@1(a)H@Z +@ cdecl ?resetiosflags(a)std@@YA?AU?$_Smanip(a)H@1(a)H@Z(ptr long) resetiosflags @ thiscall -arch=win32 ?resize@?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QAEXI(a)Z(ptr long) MSVCP_basic_string_char_resize @ cdecl -arch=win64 ?resize@?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QEAAX_K(a)Z(ptr long) MSVCP_basic_string_char_resize @ thiscall -arch=win32 ?resize@?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QAEXID(a)Z(ptr long long) MSVCP_basic_string_char_resize_ch @@ -5312,7 +5312,7 @@ @ cdecl -arch=win64 ?seekpos(a)strstreambuf@std@@MEAA?AV?$fpos(a)H@2(a)V32@H(a)Z(ptr ptr ptr long) strstreambuf_seekpos @ cdecl ?set_new_handler(a)std@@YAP6AXXZH(a)Z(long) set_new_handler_reset @ cdecl ?set_new_handler(a)std@@YAP6AXXZP6AXXZ(a)Z(ptr) set_new_handler -@ stub ?setbase(a)std@@YA?AU?$_Smanip(a)H@1(a)H@Z +@ cdecl ?setbase(a)std@@YA?AU?$_Smanip(a)H@1(a)H@Z(ptr long) setbase @ thiscall -arch=win32 ?setbuf@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@MAEPAV?$basic_streambuf(a)DU?$char_traits(a)D@std@@@2(a)PADH@Z(ptr ptr long) basic_filebuf_char_setbuf @ cdecl -arch=win64 ?setbuf@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@MEAAPEAV?$basic_streambuf(a)DU?$char_traits(a)D@std@@@2(a)PEAD_J@Z(ptr ptr long) basic_filebuf_char_setbuf @ thiscall -arch=win32 ?setbuf@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@MAEPAV?$basic_streambuf(a)GU?$char_traits(a)G@std@@@2(a)PAGH@Z(ptr ptr long) basic_filebuf_char_setbuf @@ -5335,7 +5335,7 @@ @ cdecl -arch=win64 ?setg@?$basic_streambuf(a)GU?$char_traits(a)G@std@@@std@@IEAAXPEAG00(a)Z(ptr ptr ptr ptr) basic_streambuf_wchar_setg @ thiscall -arch=win32 ?setg@?$basic_streambuf(a)_WU?$char_traits(a)_W@std@@@std@@IAEXPA_W00(a)Z(ptr ptr ptr ptr) basic_streambuf_wchar_setg @ cdecl -arch=win64 ?setg@?$basic_streambuf(a)_WU?$char_traits(a)_W@std@@@std@@IEAAXPEA_W00(a)Z(ptr ptr ptr ptr) basic_streambuf_wchar_setg -@ stub ?setiosflags(a)std@@YA?AU?$_Smanip(a)H@1(a)H@Z +@ cdecl ?setiosflags(a)std@@YA?AU?$_Smanip(a)H@1(a)H@Z(ptr long) setiosflags @ thiscall -arch=win32 ?setp@?$basic_streambuf(a)DU?$char_traits(a)D@std@@@std@@IAEXPAD00(a)Z(ptr ptr ptr ptr) basic_streambuf_char_setp_next @ cdecl -arch=win64 ?setp@?$basic_streambuf(a)DU?$char_traits(a)D@std@@@std@@IEAAXPEAD00(a)Z(ptr ptr ptr ptr) basic_streambuf_char_setp_next @ thiscall -arch=win32 ?setp@?$basic_streambuf(a)DU?$char_traits(a)D@std@@@std@@IAEXPAD0(a)Z(ptr ptr ptr) basic_streambuf_char_setp