msvcp: Don't cast zero.
[wine] / dlls / msvcp100 / ios.c
1 /*
2  * Copyright 2011 Piotr Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "config.h"
20
21 #include <stdarg.h>
22 #include <stdio.h>
23 #include <limits.h>
24 #include <share.h>
25
26 #include "msvcp.h"
27 #include "windef.h"
28 #include "winbase.h"
29 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(msvcp);
31
32 /* ?_Index@ios_base@std@@0HA */
33 int ios_base_Index = 0;
34 /* ?_Sync@ios_base@std@@0_NA */
35 MSVCP_bool ios_base_Sync = FALSE;
36
37 typedef struct {
38     streamoff off;
39     __int64 DECLSPEC_ALIGN(8) pos;
40     int state;
41 } fpos_int;
42
43 static inline const char* debugstr_fpos_int(fpos_int *fpos)
44 {
45     return wine_dbg_sprintf("fpos(%s %s %d)", wine_dbgstr_longlong(fpos->off), wine_dbgstr_longlong(fpos->pos), fpos->state);
46 }
47
48 typedef struct {
49     void (__cdecl *pfunc)(ios_base*, streamsize);
50     streamsize arg;
51 } manip_streamsize;
52
53 typedef struct {
54     void (__cdecl *pfunc)(ios_base*, int);
55     int arg;
56 } manip_int;
57
58 typedef enum {
59     INITFL_new   = 0,
60     INITFL_open  = 1,
61     INITFL_close = 2
62 } basic_filebuf__Initfl;
63
64 typedef struct {
65     basic_streambuf_char base;
66     codecvt_char *cvt;
67     char putback;
68     MSVCP_bool wrotesome;
69     int state;
70     MSVCP_bool close;
71     FILE *file;
72 } basic_filebuf_char;
73
74 typedef struct {
75     basic_streambuf_wchar base;
76     codecvt_wchar *cvt;
77     wchar_t putback;
78     MSVCP_bool wrotesome;
79     int state;
80     MSVCP_bool close;
81     FILE *file;
82 } basic_filebuf_wchar;
83
84 typedef struct {
85     ios_base base;
86     basic_streambuf_char *strbuf;
87     struct _basic_ostream_char *stream;
88     char fillch;
89 } basic_ios_char;
90
91 typedef struct {
92     ios_base base;
93     basic_streambuf_wchar *strbuf;
94     struct _basic_ostream_wchar *stream;
95     wchar_t fillch;
96 } basic_ios_wchar;
97
98 typedef struct _basic_ostream_char {
99     const int *vbtable;
100     /* virtual inheritance
101      * basic_ios_char basic_ios;
102      */
103 } basic_ostream_char;
104
105 typedef struct _basic_ostream_wchar {
106     const int *vbtable;
107     /* virtual inheritance
108      * basic_ios_wchar basic_ios;
109      */
110 } basic_ostream_wchar;
111
112 typedef struct {
113     const int *vbtable;
114     streamsize count;
115     /* virtual inheritance
116      * basic_ios_char basic_ios;
117      */
118 } basic_istream_char;
119
120 typedef struct {
121     const int *vbtable;
122     streamsize count;
123     /* virtual inheritance
124      * basic_ios_wchar basic_ios;
125      */
126 } basic_istream_wchar;
127
128 typedef struct {
129     basic_istream_char base1;
130     basic_ostream_char base2;
131     /* virtual inheritance
132      * basic_ios_char basic_ios;
133      */
134 } basic_iostream_char;
135
136 typedef struct {
137     basic_istream_wchar base1;
138     basic_ostream_wchar base2;
139     /* virtual inheritance
140      * basic_ios_wchar basic_ios;
141      */
142 } basic_iostream_wchar;
143
144 extern const vtable_ptr MSVCP_iosb_vtable;
145
146 /* ??_7ios_base@std@@6B@ */
147 extern const vtable_ptr MSVCP_ios_base_vtable;
148
149 /* ??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@ */
150 extern const vtable_ptr MSVCP_basic_ios_char_vtable;
151
152 /* ??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@ */
153 extern const vtable_ptr MSVCP_basic_ios_wchar_vtable;
154
155 /* ??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@ */
156 extern const vtable_ptr MSVCP_basic_ios_short_vtable;
157
158 /* ??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@ */
159 extern const vtable_ptr MSVCP_basic_streambuf_char_vtable;
160
161 /* ??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@ */
162 extern const vtable_ptr MSVCP_basic_streambuf_wchar_vtable;
163
164 /* ??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@ */
165 extern const vtable_ptr MSVCP_basic_streambuf_short_vtable;
166
167 /* ??_7?$basic_filebuf@DU?$char_traits@D@std@@@std@@6B@ */
168 extern const vtable_ptr MSVCP_basic_filebuf_char_vtable;
169
170 /* ??_7?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@6B@ */
171 extern const vtable_ptr MSVCP_basic_filebuf_wchar_vtable;
172
173 /* ??_7?$basic_filebuf@GU?$char_traits@G@std@@@std@@6B@ */
174 extern const vtable_ptr MSVCP_basic_filebuf_short_vtable;
175
176 /* ??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@ */
177 const int basic_ostream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostream_char), 8)};
178 /* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */
179 extern const vtable_ptr MSVCP_basic_ostream_char_vtable;
180
181 /* ??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@ */
182 const int basic_ostream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostream_wchar), 8)};
183 /* ??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@ */
184 extern const vtable_ptr MSVCP_basic_ostream_wchar_vtable;
185
186 /* ??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@ */
187 const int basic_ostream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostream_wchar), 8)};
188 /* ??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@ */
189 extern const vtable_ptr MSVCP_basic_ostream_short_vtable;
190
191 /* ??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@ */
192 const int basic_istream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istream_char), 8)};
193 /* ??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@ */
194 extern const vtable_ptr MSVCP_basic_istream_char_vtable;
195
196 /* ??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@ */
197 const int basic_istream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istream_wchar), 8)};
198 /* ??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@ */
199 extern const vtable_ptr MSVCP_basic_istream_wchar_vtable;
200
201 /* ??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@ */
202 const int basic_istream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istream_wchar), 8)};
203 /* ??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@ */
204 extern const vtable_ptr MSVCP_basic_istream_short_vtable;
205
206 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */
207 const int basic_iostream_char_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_char), 8)};
208 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */
209 const int basic_iostream_char_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_char), 8)-FIELD_OFFSET(basic_iostream_char, base2)};
210 /* ??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@ */
211 extern const vtable_ptr MSVCP_basic_iostream_char_vtable;
212
213 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */
214 /* ??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ */
215 const int basic_iostream_wchar_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_wchar), 8)};
216 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */
217 /* ??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ */
218 const int basic_iostream_wchar_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_wchar), 8)-FIELD_OFFSET(basic_iostream_wchar, base2)};
219 /* ??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@ */
220 extern const vtable_ptr MSVCP_basic_iostream_wchar_vtable;
221 /* ??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@ */
222 extern const vtable_ptr MSVCP_basic_iostream_short_vtable;
223
224 DEFINE_RTTI_DATA0(iosb, 0, ".?AV?$_Iosb@H@std@@");
225 DEFINE_RTTI_DATA1(ios_base, 0, &iosb_rtti_base_descriptor, ".?AV?$_Iosb@H@std@@");
226 DEFINE_RTTI_DATA2(basic_ios_char, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
227         ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@");
228 DEFINE_RTTI_DATA2(basic_ios_wchar, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
229         ".?AV?$basic_ios@_WU?$char_traits@_W@std@@@std@@");
230 DEFINE_RTTI_DATA2(basic_ios_short, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
231         ".?AV?$basic_ios@GU?$char_traits@G@std@@@std@@");
232 DEFINE_RTTI_DATA0(basic_streambuf_char, 0,
233         ".?AV?$basic_streambuf@DU?$char_traits@D@std@@@std@@");
234 DEFINE_RTTI_DATA0(basic_streambuf_wchar, 0,
235         ".?AV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@");
236 DEFINE_RTTI_DATA0(basic_streambuf_short, 0,
237         ".?AV?$basic_streambuf@GU?$char_traits@G@std@@@std@@");
238 DEFINE_RTTI_DATA1(basic_filebuf_char, 0, &basic_streambuf_char_rtti_base_descriptor,
239         ".?AV?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@");
240 DEFINE_RTTI_DATA1(basic_filebuf_wchar, 0, &basic_streambuf_wchar_rtti_base_descriptor,
241         ".?AV?$basic_filebuf@GU?$char_traits@G@std@@@std@@");
242 DEFINE_RTTI_DATA1(basic_filebuf_short, 0, &basic_streambuf_short_rtti_base_descriptor,
243         ".?AV?$basic_filebuf@DU?$char_traits@D@std@@@std@@");
244 DEFINE_RTTI_DATA3(basic_ostream_char, sizeof(basic_ostream_char), &basic_ios_char_rtti_base_descriptor,
245         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
246         ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@");
247 DEFINE_RTTI_DATA3(basic_ostream_wchar, sizeof(basic_ostream_wchar), &basic_ios_wchar_rtti_base_descriptor,
248         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
249         ".?AV?$basic_ostream@_WU?$char_traits@_W@std@@@std@@");
250 DEFINE_RTTI_DATA3(basic_ostream_short, sizeof(basic_ostream_wchar), &basic_ios_short_rtti_base_descriptor,
251         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
252         ".?AV?$basic_ostream@GU?$char_traits@G@std@@@std@@");
253 DEFINE_RTTI_DATA3(basic_istream_char, sizeof(basic_istream_char), &basic_ios_char_rtti_base_descriptor,
254         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
255         ".?AV?$basic_istream@DU?$char_traits@D@std@@@std@@");
256 DEFINE_RTTI_DATA3(basic_istream_wchar, sizeof(basic_istream_wchar), &basic_ios_wchar_rtti_base_descriptor,
257         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
258         ".?AV?$basic_istream@_WU?$char_traits@_W@std@@@std@@");
259 DEFINE_RTTI_DATA3(basic_istream_short, sizeof(basic_istream_wchar), &basic_ios_short_rtti_base_descriptor,
260         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
261         ".?AV?$basic_istream@GU?$char_traits@G@std@@@std@@");
262 DEFINE_RTTI_DATA8(basic_iostream_char, sizeof(basic_iostream_char),
263         &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
264         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
265         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
266         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
267         ".?AV?$basic_iostream@DU?$char_traits@D@std@@@std@@");
268 DEFINE_RTTI_DATA8(basic_iostream_wchar, sizeof(basic_iostream_wchar),
269         &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
270         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
271         &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
272         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
273         ".?AV?$basic_iostream@_WU?$char_traits@_W@std@@@std@@");
274 DEFINE_RTTI_DATA8(basic_iostream_short, sizeof(basic_iostream_wchar),
275         &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
276         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
277         &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
278         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
279         ".?AV?$basic_iostream@GU?$char_traits@G@std@@@std@@");
280
281 #ifndef __GNUC__
282 void __asm_dummy_vtables(void) {
283 #endif
284     __ASM_VTABLE(iosb,
285             VTABLE_ADD_FUNC(iosb_vector_dtor));
286     __ASM_VTABLE(ios_base,
287             VTABLE_ADD_FUNC(ios_base_vector_dtor));
288     __ASM_VTABLE(basic_ios_char,
289             VTABLE_ADD_FUNC(basic_ios_char_vector_dtor));
290     __ASM_VTABLE(basic_ios_wchar,
291             VTABLE_ADD_FUNC(basic_ios_wchar_vector_dtor));
292     __ASM_VTABLE(basic_ios_short,
293             VTABLE_ADD_FUNC(basic_ios_wchar_vector_dtor));
294     __ASM_VTABLE(basic_streambuf_char,
295             VTABLE_ADD_FUNC(basic_streambuf_char_vector_dtor)
296             VTABLE_ADD_FUNC(basic_streambuf_char__Lock)
297             VTABLE_ADD_FUNC(basic_streambuf_char__Unlock)
298             VTABLE_ADD_FUNC(basic_streambuf_char_overflow)
299             VTABLE_ADD_FUNC(basic_streambuf_char_pbackfail)
300             VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
301             VTABLE_ADD_FUNC(basic_streambuf_char_underflow)
302             VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
303             VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
304             VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
305             VTABLE_ADD_FUNC(basic_streambuf_char_seekoff)
306             VTABLE_ADD_FUNC(basic_streambuf_char_seekpos)
307             VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
308             VTABLE_ADD_FUNC(basic_streambuf_char_sync)
309             VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
310     __ASM_VTABLE(basic_streambuf_wchar,
311             VTABLE_ADD_FUNC(basic_streambuf_wchar_vector_dtor)
312             VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
313             VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
314             VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
315             VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
316             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
317             VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
318             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
319             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
320             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
321             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
322             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
323             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
324             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
325             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
326     __ASM_VTABLE(basic_streambuf_short,
327             VTABLE_ADD_FUNC(basic_streambuf_wchar_vector_dtor)
328             VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
329             VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
330             VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
331             VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
332             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
333             VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
334             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
335             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
336             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
337             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
338             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
339             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
340             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
341             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
342     __ASM_VTABLE(basic_filebuf_char,
343             VTABLE_ADD_FUNC(basic_filebuf_char_vector_dtor)
344             VTABLE_ADD_FUNC(basic_streambuf_char__Lock)
345             VTABLE_ADD_FUNC(basic_streambuf_char__Unlock)
346             VTABLE_ADD_FUNC(basic_filebuf_char_overflow)
347             VTABLE_ADD_FUNC(basic_filebuf_char_pbackfail)
348             VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
349             VTABLE_ADD_FUNC(basic_filebuf_char_underflow)
350             VTABLE_ADD_FUNC(basic_filebuf_char_uflow)
351             VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
352             VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
353             VTABLE_ADD_FUNC(basic_filebuf_char_seekoff)
354             VTABLE_ADD_FUNC(basic_filebuf_char_seekpos)
355             VTABLE_ADD_FUNC(basic_filebuf_char_setbuf)
356             VTABLE_ADD_FUNC(basic_filebuf_char_sync)
357             VTABLE_ADD_FUNC(basic_filebuf_char_imbue));
358     __ASM_VTABLE(basic_filebuf_wchar,
359             VTABLE_ADD_FUNC(basic_filebuf_wchar_vector_dtor)
360             VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
361             VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
362             VTABLE_ADD_FUNC(basic_filebuf_wchar_overflow)
363             VTABLE_ADD_FUNC(basic_filebuf_wchar_pbackfail)
364             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
365             VTABLE_ADD_FUNC(basic_filebuf_wchar_underflow)
366             VTABLE_ADD_FUNC(basic_filebuf_wchar_uflow)
367             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
368             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
369             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekoff)
370             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekpos)
371             VTABLE_ADD_FUNC(basic_filebuf_wchar_setbuf)
372             VTABLE_ADD_FUNC(basic_filebuf_wchar_sync)
373             VTABLE_ADD_FUNC(basic_filebuf_wchar_imbue));
374     __ASM_VTABLE(basic_filebuf_short,
375             VTABLE_ADD_FUNC(basic_filebuf_wchar_vector_dtor)
376             VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
377             VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
378             VTABLE_ADD_FUNC(basic_filebuf_wchar_overflow)
379             VTABLE_ADD_FUNC(basic_filebuf_wchar_pbackfail)
380             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
381             VTABLE_ADD_FUNC(basic_filebuf_wchar_underflow)
382             VTABLE_ADD_FUNC(basic_filebuf_wchar_uflow)
383             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
384             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
385             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekoff)
386             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekpos)
387             VTABLE_ADD_FUNC(basic_filebuf_short_setbuf)
388             VTABLE_ADD_FUNC(basic_filebuf_wchar_sync)
389             VTABLE_ADD_FUNC(basic_filebuf_short_imbue));
390     __ASM_VTABLE(basic_ostream_char,
391             VTABLE_ADD_FUNC(basic_ostream_char_vector_dtor));
392     __ASM_VTABLE(basic_ostream_wchar,
393             VTABLE_ADD_FUNC(basic_ostream_wchar_vector_dtor));
394     __ASM_VTABLE(basic_ostream_short,
395             VTABLE_ADD_FUNC(basic_ostream_wchar_vector_dtor));
396     __ASM_VTABLE(basic_istream_char,
397             VTABLE_ADD_FUNC(basic_istream_char_vector_dtor));
398     __ASM_VTABLE(basic_istream_wchar,
399             VTABLE_ADD_FUNC(basic_istream_wchar_vector_dtor));
400     __ASM_VTABLE(basic_istream_short,
401             VTABLE_ADD_FUNC(basic_istream_wchar_vector_dtor));
402     __ASM_VTABLE(basic_iostream_char,
403             VTABLE_ADD_FUNC(basic_iostream_char_vector_dtor));
404     __ASM_VTABLE(basic_iostream_wchar,
405             VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor));
406     __ASM_VTABLE(basic_iostream_short,
407             VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor));
408 #ifndef __GNUC__
409 }
410 #endif
411
412 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
413 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
414 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp_next, 16)
415 void __thiscall basic_streambuf_char_setp_next(basic_streambuf_char *this, char *first, char *next, char *last)
416 {
417     TRACE("(%p %p %p %p)\n", this, first, next, last);
418
419     this->wbuf = first;
420     this->wpos = next;
421     this->wsize = last-next;
422 }
423
424 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z */
425 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z */
426 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp, 12)
427 void __thiscall basic_streambuf_char_setp(basic_streambuf_char *this, char *first, char *last)
428 {
429     basic_streambuf_char_setp_next(this, first, first, last);
430 }
431
432 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
433 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
434 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setg, 16)
435 void __thiscall basic_streambuf_char_setg(basic_streambuf_char *this, char *first, char *next, char *last)
436 {
437     TRACE("(%p %p %p %p)\n", this, first, next, last);
438
439     this->rbuf = first;
440     this->rpos = next;
441     this->rsize = last-next;
442 }
443
444 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ */
445 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ */
446 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init_empty, 4)
447 void __thiscall basic_streambuf_char__Init_empty(basic_streambuf_char *this)
448 {
449     TRACE("(%p)\n", this);
450
451     this->prbuf = &this->rbuf;
452     this->pwbuf = &this->wbuf;
453     this->prpos = &this->rpos;
454     this->pwpos = &this->wpos;
455     this->prsize = &this->rsize;
456     this->pwsize = &this->wsize;
457
458     basic_streambuf_char_setp(this, NULL, NULL);
459     basic_streambuf_char_setg(this, NULL, NULL, NULL);
460 }
461
462 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@W4_Uninitialized@1@@Z */
463 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
464 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor_uninitialized, 8)
465 basic_streambuf_char* __thiscall basic_streambuf_char_ctor_uninitialized(basic_streambuf_char *this, int uninitialized)
466 {
467     TRACE("(%p %d)\n", this, uninitialized);
468     this->vtable = &MSVCP_basic_streambuf_char_vtable;
469     mutex_ctor(&this->lock);
470     return this;
471 }
472
473 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ */
474 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ */
475 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor, 4)
476 basic_streambuf_char* __thiscall basic_streambuf_char_ctor(basic_streambuf_char *this)
477 {
478     TRACE("(%p)\n", this);
479
480     this->vtable = &MSVCP_basic_streambuf_char_vtable;
481     mutex_ctor(&this->lock);
482     this->loc = MSVCRT_operator_new(sizeof(locale));
483     locale_ctor(this->loc);
484     basic_streambuf_char__Init_empty(this);
485
486     return this;
487 }
488
489 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
490 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
491 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_dtor, 4)
492 void __thiscall basic_streambuf_char_dtor(basic_streambuf_char *this)
493 {
494     TRACE("(%p)\n", this);
495
496     mutex_dtor(&this->lock);
497     locale_dtor(this->loc);
498     MSVCRT_operator_delete(this->loc);
499 }
500
501 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_vector_dtor, 8)
502 basic_streambuf_char* __thiscall basic_streambuf_char_vector_dtor(basic_streambuf_char *this, unsigned int flags)
503 {
504     TRACE("(%p %x)\n", this, flags);
505     if(flags & 2) {
506         /* we have an array, with the number of elements stored before the first object */
507         INT_PTR i, *ptr = (INT_PTR *)this-1;
508
509         for(i=*ptr-1; i>=0; i--)
510             basic_streambuf_char_dtor(this+i);
511         MSVCRT_operator_delete(ptr);
512     } else {
513         basic_streambuf_char_dtor(this);
514         if(flags & 1)
515             MSVCRT_operator_delete(this);
516     }
517
518     return this;
519 }
520
521 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
522 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
523 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnavail, 4)
524 streamsize __thiscall basic_streambuf_char__Gnavail(const basic_streambuf_char *this)
525 {
526     TRACE("(%p)\n", this);
527     return *this->prpos ? *this->prsize : 0;
528 }
529
530 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
531 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
532 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gndec, 4)
533 char* __thiscall basic_streambuf_char__Gndec(basic_streambuf_char *this)
534 {
535     TRACE("(%p)\n", this);
536     (*this->prsize)++;
537     (*this->prpos)--;
538     return *this->prpos;
539 }
540
541 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
542 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
543 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gninc, 4)
544 char* __thiscall basic_streambuf_char__Gninc(basic_streambuf_char *this)
545 {
546     TRACE("(%p)\n", this);
547     (*this->prsize)--;
548     return (*this->prpos)++;
549 }
550
551 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
552 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
553 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnpreinc, 4)
554 char* __thiscall basic_streambuf_char__Gnpreinc(basic_streambuf_char *this)
555 {
556     TRACE("(%p)\n", this);
557     (*this->prsize)--;
558     (*this->prpos)++;
559     return *this->prpos;
560 }
561
562 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z */
563 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z */
564 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init, 28)
565 void __thiscall basic_streambuf_char__Init(basic_streambuf_char *this, char **gf, char **gn, int *gc, char **pf, char **pn, int *pc)
566 {
567     TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
568
569     this->prbuf = gf;
570     this->pwbuf = pf;
571     this->prpos = gn;
572     this->pwpos = pn;
573     this->prsize = gc;
574     this->pwsize = pc;
575 }
576
577 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
578 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
579 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Lock, 4)
580 #define call_basic_streambuf_char__Lock(this) CALL_VTBL_FUNC(this, 4, \
581         void, (basic_streambuf_char*), (this))
582 void __thiscall basic_streambuf_char__Lock(basic_streambuf_char *this)
583 {
584     TRACE("(%p)\n", this);
585     mutex_lock(&this->lock);
586 }
587
588 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
589 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
590 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pnavail, 4)
591 streamsize __thiscall basic_streambuf_char__Pnavail(const basic_streambuf_char *this)
592 {
593     TRACE("(%p)\n", this);
594     return *this->pwpos ? *this->pwsize : 0;
595 }
596
597 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
598 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
599 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pninc, 4)
600 char* __thiscall basic_streambuf_char__Pninc(basic_streambuf_char *this)
601 {
602     TRACE("(%p)\n", this);
603     (*this->pwsize)--;
604     return (*this->pwpos)++;
605 }
606
607 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
608 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
609 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_underflow, 4)
610 #define call_basic_streambuf_char_underflow(this) CALL_VTBL_FUNC(this, 24, \
611         int, (basic_streambuf_char*), (this))
612 int __thiscall basic_streambuf_char_underflow(basic_streambuf_char *this)
613 {
614     TRACE("(%p)\n", this);
615     return EOF;
616 }
617
618 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
619 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
620 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_uflow, 4)
621 #define call_basic_streambuf_char_uflow(this) CALL_VTBL_FUNC(this, 28, \
622         int, (basic_streambuf_char*), (this))
623 int __thiscall basic_streambuf_char_uflow(basic_streambuf_char *this)
624 {
625     int ret;
626
627     TRACE("(%p)\n", this);
628
629     if(call_basic_streambuf_char_underflow(this)==EOF)
630         return EOF;
631
632     ret = (unsigned char)**this->prpos;
633     (*this->prsize)--;
634     (*this->prpos)++;
635     return ret;
636 }
637
638 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADIH@Z */
639 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_K_J@Z */
640 static streamsize basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
641 {
642     streamsize copied, chunk;
643     int c;
644
645     TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
646
647     for(copied=0; copied<count && size;) {
648         chunk = basic_streambuf_char__Gnavail(this);
649         if(chunk > count-copied)
650             chunk = count-copied;
651
652         if(chunk > 0) {
653             memcpy_s(ptr+copied, size, *this->prpos, chunk);
654             *this->prpos += chunk;
655             *this->prsize -= chunk;
656             copied += chunk;
657             size -= chunk;
658         }else if((c = call_basic_streambuf_char_uflow(this)) != EOF) {
659             ptr[copied] = c;
660             copied++;
661             size--;
662         }else {
663             break;
664         }
665     }
666
667     return copied;
668 }
669
670 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
671 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
672 static streamsize basic_streambuf_char__Sgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
673 {
674     TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
675     return basic_streambuf_char__Xsgetn_s(this, ptr, size, count);
676 }
677
678 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
679 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
680 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Unlock, 4)
681 #define call_basic_streambuf_char__Unlock(this) CALL_VTBL_FUNC(this, 8, \
682         void, (basic_streambuf_char*), (this))
683 void __thiscall basic_streambuf_char__Unlock(basic_streambuf_char *this)
684 {
685     TRACE("(%p)\n", this);
686     mutex_unlock(&this->lock);
687 }
688
689 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
690 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
691 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_eback, 4)
692 char* __thiscall basic_streambuf_char_eback(const basic_streambuf_char *this)
693 {
694     TRACE("(%p)\n", this);
695     return *this->prbuf;
696 }
697
698 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
699 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
700 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gptr, 4)
701 char* __thiscall basic_streambuf_char_gptr(const basic_streambuf_char *this)
702 {
703     TRACE("(%p)\n", this);
704     return *this->prpos;
705 }
706
707 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
708 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
709 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_egptr, 4)
710 char* __thiscall basic_streambuf_char_egptr(const basic_streambuf_char *this)
711 {
712     TRACE("(%p)\n", this);
713     return *this->prpos+*this->prsize;
714 }
715
716 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
717 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
718 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_epptr, 4)
719 char* __thiscall basic_streambuf_char_epptr(const basic_streambuf_char *this)
720 {
721     TRACE("(%p)\n", this);
722     return *this->pwpos+*this->pwsize;
723 }
724
725 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
726 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
727 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gbump, 8)
728 void __thiscall basic_streambuf_char_gbump(basic_streambuf_char *this, int off)
729 {
730     TRACE("(%p %d)\n", this, off);
731     *this->prpos += off;
732     *this->prsize -= off;
733 }
734
735 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ */
736 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ */
737 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_getloc, 8)
738 locale* __thiscall basic_streambuf_char_getloc(const basic_streambuf_char *this, locale *ret)
739 {
740     TRACE("(%p)\n", this);
741     return locale_copy_ctor(ret, this->loc);
742 }
743
744 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
745 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
746 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_imbue, 8)
747 #define call_basic_streambuf_char_imbue(this, loc) CALL_VTBL_FUNC(this, 56, \
748         void, (basic_streambuf_char*, const locale*), (this, loc))
749 void __thiscall basic_streambuf_char_imbue(basic_streambuf_char *this, const locale *loc)
750 {
751     TRACE("(%p %p)\n", this, loc);
752 }
753
754 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
755 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
756 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_overflow, 8)
757 #define call_basic_streambuf_char_overflow(this, ch) CALL_VTBL_FUNC(this, 12, \
758         int, (basic_streambuf_char*, int), (this, ch))
759 int __thiscall basic_streambuf_char_overflow(basic_streambuf_char *this, int ch)
760 {
761     TRACE("(%p %d)\n", this, ch);
762     return EOF;
763 }
764
765 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
766 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
767 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbackfail, 8)
768 #define call_basic_streambuf_char_pbackfail(this, ch) CALL_VTBL_FUNC(this, 16, \
769         int, (basic_streambuf_char*, int), (this, ch))
770 int __thiscall basic_streambuf_char_pbackfail(basic_streambuf_char *this, int ch)
771 {
772     TRACE("(%p %d)\n", this, ch);
773     return EOF;
774 }
775
776 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
777 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
778 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbase, 4)
779 char* __thiscall basic_streambuf_char_pbase(const basic_streambuf_char *this)
780 {
781     TRACE("(%p)\n", this);
782     return *this->pwbuf;
783 }
784
785 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
786 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
787 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbump, 8)
788 void __thiscall basic_streambuf_char_pbump(basic_streambuf_char *this, int off)
789 {
790     TRACE("(%p %d)\n", this, off);
791     *this->pwpos += off;
792     *this->pwsize -= off;
793 }
794
795 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
796 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
797 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pptr, 4)
798 char* __thiscall basic_streambuf_char_pptr(const basic_streambuf_char *this)
799 {
800     TRACE("(%p)\n", this);
801     return *this->pwpos;
802 }
803
804 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
805 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
806 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubimbue, 12)
807 locale* __thiscall basic_streambuf_char_pubimbue(basic_streambuf_char *this, locale *ret, const locale *loc)
808 {
809     TRACE("(%p %p)\n", this, loc);
810     memcpy(ret, this->loc, sizeof(locale));
811     call_basic_streambuf_char_imbue(this, loc);
812     locale_copy_ctor(this->loc, loc);
813     return ret;
814 }
815
816 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
817 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
818 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekoff, 24)
819 #define call_basic_streambuf_char_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 40, \
820         fpos_int*, (basic_streambuf_char*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
821 fpos_int* __thiscall basic_streambuf_char_seekoff(basic_streambuf_char *this,
822         fpos_int *ret, streamoff off, int way, int mode)
823 {
824     TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
825     ret->off = -1;
826     ret->pos = 0;
827     ret->state = 0;
828     return ret;
829 }
830
831 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
832 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
833 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff, 24)
834 fpos_int* __thiscall basic_streambuf_char_pubseekoff(basic_streambuf_char *this,
835         fpos_int *ret, streamoff off, int way, int mode)
836 {
837     TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
838     return call_basic_streambuf_char_seekoff(this, ret, off, way, mode);
839 }
840
841 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
842 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
843 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff_old, 24)
844 fpos_int* __thiscall basic_streambuf_char_pubseekoff_old(basic_streambuf_char *this,
845         fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
846 {
847     TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
848     return basic_streambuf_char_pubseekoff(this, ret, off, way, mode);
849 }
850
851 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
852 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
853 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekpos, 36)
854 #define call_basic_streambuf_char_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 44, \
855         fpos_int*, (basic_streambuf_char*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
856 fpos_int* __thiscall basic_streambuf_char_seekpos(basic_streambuf_char *this,
857         fpos_int *ret, fpos_int pos, int mode)
858 {
859     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
860     ret->off = -1;
861     ret->pos = 0;
862     ret->state = 0;
863     return ret;
864 }
865
866 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
867 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
868 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos, 36)
869 fpos_int* __thiscall basic_streambuf_char_pubseekpos(basic_streambuf_char *this,
870         fpos_int *ret, fpos_int pos, int mode)
871 {
872     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
873     return call_basic_streambuf_char_seekpos(this, ret, pos, mode);
874 }
875
876 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
877 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
878 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos_old, 36)
879 fpos_int* __thiscall basic_streambuf_char_pubseekpos_old(basic_streambuf_char *this,
880         fpos_int *ret, fpos_int pos, unsigned int mode)
881 {
882     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
883     return basic_streambuf_char_pubseekpos(this, ret, pos, mode);
884 }
885
886 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PADH@Z */
887 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z */
888 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setbuf, 16)
889 #define call_basic_streambuf_char_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 48, \
890         basic_streambuf_char*, (basic_streambuf_char*, char*, streamsize), (this, buf, count))
891 basic_streambuf_char* __thiscall basic_streambuf_char_setbuf(basic_streambuf_char *this, char *buf, streamsize count)
892 {
893     TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
894     return this;
895 }
896
897 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PADH@Z */
898 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z */
899 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsetbuf, 16)
900 basic_streambuf_char* __thiscall basic_streambuf_char_pubsetbuf(basic_streambuf_char *this, char *buf, streamsize count)
901 {
902     TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
903     return call_basic_streambuf_char_setbuf(this, buf, count);
904 }
905
906 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
907 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
908 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sync, 4)
909 #define call_basic_streambuf_char_sync(this) CALL_VTBL_FUNC(this, 52, \
910         int, (basic_streambuf_char*), (this))
911 int __thiscall basic_streambuf_char_sync(basic_streambuf_char *this)
912 {
913     TRACE("(%p)\n", this);
914     return 0;
915 }
916
917 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
918 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
919 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsync, 4)
920 int __thiscall basic_streambuf_char_pubsync(basic_streambuf_char *this)
921 {
922     TRACE("(%p)\n", this);
923     return call_basic_streambuf_char_sync(this);
924 }
925
926 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
927 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
928 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetn, 16)
929 streamsize __thiscall basic_streambuf_char_sgetn(basic_streambuf_char *this, char *ptr, streamsize count)
930 {
931     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
932     return basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
933 }
934
935 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
936 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ */
937 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_showmanyc, 4)
938 #define call_basic_streambuf_char_showmanyc(this) CALL_VTBL_FUNC(this, 20, \
939         streamsize, (basic_streambuf_char*), (this))
940 streamsize __thiscall basic_streambuf_char_showmanyc(basic_streambuf_char *this)
941 {
942     TRACE("(%p)\n", this);
943     return 0;
944 }
945
946 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
947 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ */
948 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_in_avail, 4)
949 streamsize __thiscall basic_streambuf_char_in_avail(basic_streambuf_char *this)
950 {
951     streamsize ret;
952
953     TRACE("(%p)\n", this);
954
955     ret = basic_streambuf_char__Gnavail(this);
956     return ret ? ret : call_basic_streambuf_char_showmanyc(this);
957 }
958
959 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
960 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
961 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputbackc, 8)
962 int __thiscall basic_streambuf_char_sputbackc(basic_streambuf_char *this, char ch)
963 {
964     TRACE("(%p %d)\n", this, ch);
965     if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
966         (*this->prsize)++;
967         (*this->prpos)--;
968         return (unsigned char)ch;
969     }
970
971     return call_basic_streambuf_char_pbackfail(this, (unsigned char)ch);
972 }
973
974 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
975 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
976 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputc, 8)
977 int __thiscall basic_streambuf_char_sputc(basic_streambuf_char *this, char ch)
978 {
979     TRACE("(%p %d)\n", this, ch);
980     return basic_streambuf_char__Pnavail(this) ?
981         (*basic_streambuf_char__Pninc(this) = ch) :
982         call_basic_streambuf_char_overflow(this, (unsigned char)ch);
983 }
984
985 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
986 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
987 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sungetc, 4)
988 int __thiscall basic_streambuf_char_sungetc(basic_streambuf_char *this)
989 {
990     TRACE("(%p)\n", this);
991     if(*this->prpos && *this->prpos>*this->prbuf) {
992         (*this->prsize)++;
993         (*this->prpos)--;
994         return (unsigned char)**this->prpos;
995     }
996
997     return call_basic_streambuf_char_pbackfail(this, EOF);
998 }
999
1000 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
1001 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
1002 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_stossc, 4)
1003 void __thiscall basic_streambuf_char_stossc(basic_streambuf_char *this)
1004 {
1005     TRACE("(%p)\n", this);
1006     if(basic_streambuf_char__Gnavail(this))
1007         basic_streambuf_char__Gninc(this);
1008     else
1009         call_basic_streambuf_char_uflow(this);
1010 }
1011
1012 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1013 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1014 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sbumpc, 4)
1015 int __thiscall basic_streambuf_char_sbumpc(basic_streambuf_char *this)
1016 {
1017     TRACE("(%p)\n", this);
1018     return basic_streambuf_char__Gnavail(this) ?
1019         (int)(unsigned char)*basic_streambuf_char__Gninc(this) : call_basic_streambuf_char_uflow(this);
1020 }
1021
1022 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1023 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1024 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetc, 4)
1025 int __thiscall basic_streambuf_char_sgetc(basic_streambuf_char *this)
1026 {
1027     TRACE("(%p)\n", this);
1028     return basic_streambuf_char__Gnavail(this) ?
1029         (int)(unsigned char)*basic_streambuf_char_gptr(this) : call_basic_streambuf_char_underflow(this);
1030 }
1031
1032 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1033 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1034 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_snextc, 4)
1035 int __thiscall basic_streambuf_char_snextc(basic_streambuf_char *this)
1036 {
1037     TRACE("(%p)\n", this);
1038
1039     if(basic_streambuf_char__Gnavail(this) > 1)
1040         return (unsigned char)*basic_streambuf_char__Gnpreinc(this);
1041     return basic_streambuf_char_sbumpc(this)==EOF ?
1042         EOF : basic_streambuf_char_sgetc(this);
1043 }
1044
1045 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADH@Z */
1046 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z */
1047 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsgetn, 16)
1048 #define call_basic_streambuf_char_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
1049         streamsize, (basic_streambuf_char*, char*, streamsize), (this, ptr, count))
1050 streamsize __thiscall basic_streambuf_char_xsgetn(basic_streambuf_char *this, char *ptr, streamsize count)
1051 {
1052     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1053     return basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
1054 }
1055
1056 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPBDH@Z */
1057 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z */
1058 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsputn, 16)
1059 #define call_basic_streambuf_char_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 36, \
1060         streamsize, (basic_streambuf_char*, const char*, streamsize), (this, ptr, count))
1061 streamsize __thiscall basic_streambuf_char_xsputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1062 {
1063     streamsize copied, chunk;
1064
1065     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1066
1067     for(copied=0; copied<count;) {
1068         chunk = basic_streambuf_char__Pnavail(this);
1069         if(chunk > count-copied)
1070             chunk = count-copied;
1071
1072         if(chunk > 0) {
1073             memcpy(*this->pwpos, ptr+copied, chunk);
1074             *this->pwpos += chunk;
1075             *this->pwsize -= chunk;
1076             copied += chunk;
1077         }else if(call_basic_streambuf_char_overflow(this, (unsigned char)ptr[copied]) != EOF) {
1078             copied++;
1079         }else {
1080             break;
1081         }
1082     }
1083
1084     return copied;
1085 }
1086
1087 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z */
1088 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z */
1089 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputn, 16)
1090 streamsize __thiscall basic_streambuf_char_sputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1091 {
1092     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1093     return call_basic_streambuf_char_xsputn(this, ptr, count);
1094 }
1095
1096 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1097 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1098 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1099 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1100 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp_next, 16)
1101 void __thiscall basic_streambuf_wchar_setp_next(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1102 {
1103     TRACE("(%p %p %p %p)\n", this, first, next, last);
1104
1105     this->wbuf = first;
1106     this->wpos = next;
1107     this->wsize = last-next;
1108 }
1109
1110 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W0@Z */
1111 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z */
1112 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG0@Z */
1113 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z */
1114 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp, 12)
1115 void __thiscall basic_streambuf_wchar_setp(basic_streambuf_wchar *this, wchar_t *first, wchar_t *last)
1116 {
1117     basic_streambuf_wchar_setp_next(this, first, first, last);
1118 }
1119
1120 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1121 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1122 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1123 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1124 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setg, 16)
1125 void __thiscall basic_streambuf_wchar_setg(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1126 {
1127     TRACE("(%p %p %p %p)\n", this, first, next, last);
1128
1129     this->rbuf = first;
1130     this->rpos = next;
1131     this->rsize = last-next;
1132 }
1133
1134 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXXZ */
1135 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ */
1136 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXXZ */
1137 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ */
1138 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init_empty, 4)
1139 void __thiscall basic_streambuf_wchar__Init_empty(basic_streambuf_wchar *this)
1140 {
1141     TRACE("(%p)\n", this);
1142
1143     this->prbuf = &this->rbuf;
1144     this->pwbuf = &this->wbuf;
1145     this->prpos = &this->rpos;
1146     this->pwpos = &this->wpos;
1147     this->prsize = &this->rsize;
1148     this->pwsize = &this->wsize;
1149
1150     basic_streambuf_wchar_setp(this, NULL, NULL);
1151     basic_streambuf_wchar_setg(this, NULL, NULL, NULL);
1152 }
1153
1154 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1155 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1156 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor_uninitialized, 8)
1157 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1158 {
1159     TRACE("(%p %d)\n", this, uninitialized);
1160     this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1161     mutex_ctor(&this->lock);
1162     return this;
1163 }
1164
1165 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1166 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1167 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor_uninitialized, 8)
1168 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1169 {
1170     TRACE("(%p %d)\n", this, uninitialized);
1171     basic_streambuf_wchar_ctor_uninitialized(this, uninitialized);
1172     this->vtable = &MSVCP_basic_streambuf_short_vtable;
1173     return this;
1174 }
1175
1176 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
1177 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
1178 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor, 4)
1179 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor(basic_streambuf_wchar *this)
1180 {
1181     TRACE("(%p)\n", this);
1182
1183     this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1184     mutex_ctor(&this->lock);
1185     this->loc = MSVCRT_operator_new(sizeof(locale));
1186     locale_ctor(this->loc);
1187     basic_streambuf_wchar__Init_empty(this);
1188
1189     return this;
1190 }
1191
1192 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@XZ */
1193 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ */
1194 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor, 4)
1195 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor(basic_streambuf_wchar *this)
1196 {
1197     TRACE("(%p)\n", this);
1198     basic_streambuf_wchar_ctor(this);
1199     this->vtable = &MSVCP_basic_streambuf_short_vtable;
1200     return this;
1201 }
1202
1203 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
1204 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
1205 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
1206 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
1207 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_dtor, 4)
1208 void __thiscall basic_streambuf_wchar_dtor(basic_streambuf_wchar *this)
1209 {
1210     TRACE("(%p)\n", this);
1211
1212     mutex_dtor(&this->lock);
1213     locale_dtor(this->loc);
1214     MSVCRT_operator_delete(this->loc);
1215 }
1216
1217 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_vector_dtor, 8)
1218 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_vector_dtor(basic_streambuf_wchar *this, unsigned int flags)
1219 {
1220     TRACE("(%p %x)\n", this, flags);
1221     if(flags & 2) {
1222         /* we have an array, with the number of elements stored before the first object */
1223         INT_PTR i, *ptr = (INT_PTR *)this-1;
1224
1225         for(i=*ptr-1; i>=0; i--)
1226             basic_streambuf_wchar_dtor(this+i);
1227         MSVCRT_operator_delete(ptr);
1228     } else {
1229         basic_streambuf_wchar_dtor(this);
1230         if(flags & 1)
1231             MSVCRT_operator_delete(this);
1232     }
1233
1234     return this;
1235 }
1236
1237 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1238 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1239 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1240 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1241 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnavail, 4)
1242 streamsize __thiscall basic_streambuf_wchar__Gnavail(const basic_streambuf_wchar *this)
1243 {
1244     TRACE("(%p)\n", this);
1245     return *this->prpos ? *this->prsize : 0;
1246 }
1247
1248 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1249 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1250 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1251 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1252 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gndec, 4)
1253 wchar_t* __thiscall basic_streambuf_wchar__Gndec(basic_streambuf_wchar *this)
1254 {
1255     TRACE("(%p)\n", this);
1256     (*this->prsize)++;
1257     (*this->prpos)--;
1258     return *this->prpos;
1259 }
1260
1261 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1262 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1263 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1264 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1265 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gninc, 4)
1266 wchar_t* __thiscall basic_streambuf_wchar__Gninc(basic_streambuf_wchar *this)
1267 {
1268     TRACE("(%p)\n", this);
1269     (*this->prsize)--;
1270     return (*this->prpos)++;
1271 }
1272
1273 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1274 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1275 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1276 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1277 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnpreinc, 4)
1278 wchar_t* __thiscall basic_streambuf_wchar__Gnpreinc(basic_streambuf_wchar *this)
1279 {
1280     TRACE("(%p)\n", this);
1281     (*this->prsize)--;
1282     (*this->prpos)++;
1283     return *this->prpos;
1284 }
1285
1286 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPAPA_W0PAH001@Z */
1287 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z */
1288 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAPAG0PAH001@Z */
1289 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z */
1290 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init, 28)
1291 void __thiscall basic_streambuf_wchar__Init(basic_streambuf_wchar *this, wchar_t **gf, wchar_t **gn, int *gc, wchar_t **pf, wchar_t **pn, int *pc)
1292 {
1293     TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
1294
1295     this->prbuf = gf;
1296     this->pwbuf = pf;
1297     this->prpos = gn;
1298     this->pwpos = pn;
1299     this->prsize = gc;
1300     this->pwsize = pc;
1301 }
1302
1303 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1304 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1305 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1306 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1307 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Lock, 4)
1308 void __thiscall basic_streambuf_wchar__Lock(basic_streambuf_wchar *this)
1309 {
1310     TRACE("(%p)\n", this);
1311     mutex_lock(&this->lock);
1312 }
1313
1314 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1315 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1316 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1317 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1318 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pnavail, 4)
1319 streamsize __thiscall basic_streambuf_wchar__Pnavail(const basic_streambuf_wchar *this)
1320 {
1321     TRACE("(%p)\n", this);
1322     return *this->pwpos ? *this->pwsize : 0;
1323 }
1324
1325 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1326 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1327 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1328 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1329 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pninc, 4)
1330 wchar_t* __thiscall basic_streambuf_wchar__Pninc(basic_streambuf_wchar *this)
1331 {
1332     TRACE("(%p)\n", this);
1333     (*this->pwsize)--;
1334     return (*this->pwpos)++;
1335 }
1336
1337 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1338 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1339 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1340 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1341 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_underflow, 4)
1342 #define call_basic_streambuf_wchar_underflow(this) CALL_VTBL_FUNC(this, 24, \
1343         unsigned short, (basic_streambuf_wchar*), (this))
1344 unsigned short __thiscall basic_streambuf_wchar_underflow(basic_streambuf_wchar *this)
1345 {
1346     TRACE("(%p)\n", this);
1347     return WEOF;
1348 }
1349
1350 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1351 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1352 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1353 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1354 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_uflow, 4)
1355 #define call_basic_streambuf_wchar_uflow(this) CALL_VTBL_FUNC(this, 28, \
1356         unsigned short, (basic_streambuf_wchar*), (this))
1357 unsigned short __thiscall basic_streambuf_wchar_uflow(basic_streambuf_wchar *this)
1358 {
1359     int ret;
1360
1361     TRACE("(%p)\n", this);
1362
1363     if(call_basic_streambuf_wchar_underflow(this)==WEOF)
1364         return WEOF;
1365
1366     ret = **this->prpos;
1367     (*this->prsize)--;
1368     (*this->prpos)++;
1369     return ret;
1370 }
1371
1372 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WIH@Z */
1373 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_K_J@Z */
1374 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGIH@Z */
1375 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_K_J@Z */
1376 static streamsize basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1377 {
1378     streamsize copied, chunk;
1379     unsigned short c;
1380
1381     TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
1382
1383     for(copied=0; copied<count && size;) {
1384         chunk = basic_streambuf_wchar__Gnavail(this);
1385         if(chunk > count-copied)
1386             chunk = count-copied;
1387
1388         if(chunk > 0) {
1389             memcpy_s(ptr+copied, size, *this->prpos, chunk*sizeof(wchar_t));
1390             *this->prpos += chunk;
1391             *this->prsize -= chunk;
1392             copied += chunk;
1393             size -= chunk*sizeof(wchar_t);
1394         }else if((c = call_basic_streambuf_wchar_uflow(this)) != WEOF) {
1395             ptr[copied] = c;
1396             copied++;
1397             size--;
1398         }else {
1399             break;
1400         }
1401     }
1402
1403     return copied;
1404 }
1405
1406 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
1407 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
1408 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
1409 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
1410 static streamsize basic_streambuf_wchar__Sgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1411 {
1412     TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
1413     return basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count);
1414 }
1415
1416 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1417 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1418 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1419 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1420 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Unlock, 4)
1421 void __thiscall basic_streambuf_wchar__Unlock(basic_streambuf_wchar *this)
1422 {
1423     TRACE("(%p)\n", this);
1424     mutex_unlock(&this->lock);
1425 }
1426
1427 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1428 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1429 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1430 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1431 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_eback, 4)
1432 wchar_t* __thiscall basic_streambuf_wchar_eback(const basic_streambuf_wchar *this)
1433 {
1434     TRACE("(%p)\n", this);
1435     return *this->prbuf;
1436 }
1437
1438 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1439 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1440 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1441 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1442 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gptr, 4)
1443 wchar_t* __thiscall basic_streambuf_wchar_gptr(const basic_streambuf_wchar *this)
1444 {
1445     TRACE("(%p)\n", this);
1446     return *this->prpos;
1447 }
1448
1449 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1450 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1451 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1452 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1453 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_egptr, 4)
1454 wchar_t* __thiscall basic_streambuf_wchar_egptr(const basic_streambuf_wchar *this)
1455 {
1456     TRACE("(%p)\n", this);
1457     return *this->prpos+*this->prsize;
1458 }
1459
1460 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1461 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1462 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1463 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1464 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_epptr, 4)
1465 wchar_t* __thiscall basic_streambuf_wchar_epptr(const basic_streambuf_wchar *this)
1466 {
1467     TRACE("(%p)\n", this);
1468     return *this->pwpos+*this->pwsize;
1469 }
1470
1471 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1472 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1473 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1474 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1475 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gbump, 8)
1476 void __thiscall basic_streambuf_wchar_gbump(basic_streambuf_wchar *this, int off)
1477 {
1478     TRACE("(%p %d)\n", this, off);
1479     *this->prpos += off;
1480     *this->prsize -= off;
1481 }
1482
1483 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QBE?AVlocale@2@XZ */
1484 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEBA?AVlocale@2@XZ */
1485 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QBE?AVlocale@2@XZ */
1486 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEBA?AVlocale@2@XZ */
1487 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_getloc, 8)
1488 locale* __thiscall basic_streambuf_wchar_getloc(const basic_streambuf_wchar *this, locale *ret)
1489 {
1490     TRACE("(%p)\n", this);
1491     return locale_copy_ctor(ret, this->loc);
1492 }
1493
1494 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z */
1495 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z */
1496 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z */
1497 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z */
1498 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_imbue, 8)
1499 #define call_basic_streambuf_wchar_imbue(this, loc) CALL_VTBL_FUNC(this, 56, \
1500         void, (basic_streambuf_wchar*, const locale*), (this, loc))
1501 void __thiscall basic_streambuf_wchar_imbue(basic_streambuf_wchar *this, const locale *loc)
1502 {
1503     TRACE("(%p %p)\n", this, loc);
1504 }
1505
1506 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1507 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1508 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1509 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1510 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_overflow, 8)
1511 #define call_basic_streambuf_wchar_overflow(this, ch) CALL_VTBL_FUNC(this, 12, \
1512         unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1513 unsigned short __thiscall basic_streambuf_wchar_overflow(basic_streambuf_wchar *this, unsigned short ch)
1514 {
1515     TRACE("(%p %d)\n", this, ch);
1516     return WEOF;
1517 }
1518
1519 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1520 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1521 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1522 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1523 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbackfail, 8)
1524 #define call_basic_streambuf_wchar_pbackfail(this, ch) CALL_VTBL_FUNC(this, 16, \
1525         unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1526 unsigned short __thiscall basic_streambuf_wchar_pbackfail(basic_streambuf_wchar *this, unsigned short ch)
1527 {
1528     TRACE("(%p %d)\n", this, ch);
1529     return WEOF;
1530 }
1531
1532 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1533 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1534 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1535 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1536 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbase, 4)
1537 wchar_t* __thiscall basic_streambuf_wchar_pbase(const basic_streambuf_wchar *this)
1538 {
1539     TRACE("(%p)\n", this);
1540     return *this->pwbuf;
1541 }
1542
1543 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1544 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1545 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1546 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1547 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbump, 8)
1548 void __thiscall basic_streambuf_wchar_pbump(basic_streambuf_wchar *this, int off)
1549 {
1550     TRACE("(%p %d)\n", this, off);
1551     *this->pwpos += off;
1552     *this->pwsize -= off;
1553 }
1554
1555 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1556 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1557 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1558 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1559 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pptr, 4)
1560 wchar_t* __thiscall basic_streambuf_wchar_pptr(const basic_streambuf_wchar *this)
1561 {
1562     TRACE("(%p)\n", this);
1563     return *this->pwpos;
1564 }
1565
1566 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1567 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1568 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1569 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1570 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubimbue, 12)
1571 locale* __thiscall basic_streambuf_wchar_pubimbue(basic_streambuf_wchar *this, locale *ret, const locale *loc)
1572 {
1573     TRACE("(%p %p)\n", this, loc);
1574     memcpy(ret, this->loc, sizeof(locale));
1575     call_basic_streambuf_wchar_imbue(this, loc);
1576     locale_copy_ctor(this->loc, loc);
1577     return ret;
1578 }
1579
1580 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1581 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1582 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1583 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1584 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekoff, 24)
1585 #define call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 40, \
1586         fpos_int*, (basic_streambuf_wchar*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
1587 fpos_int* __thiscall basic_streambuf_wchar_seekoff(basic_streambuf_wchar *this,
1588         fpos_int *ret, streamoff off, int way, int mode)
1589 {
1590     TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
1591     ret->off = -1;
1592     ret->pos = 0;
1593     ret->state = 0;
1594     return ret;
1595 }
1596
1597 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1598 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1599 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1600 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1601 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff, 24)
1602 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff(basic_streambuf_wchar *this,
1603         fpos_int *ret, streamoff off, int way, int mode)
1604 {
1605     TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
1606     return call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode);
1607 }
1608
1609 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1610 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1611 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1612 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1613 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff_old, 24)
1614 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff_old(basic_streambuf_wchar *this,
1615         fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
1616 {
1617     TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
1618     return basic_streambuf_wchar_pubseekoff(this, ret, off, way, mode);
1619 }
1620
1621 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1622 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1623 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1624 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1625 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekpos, 36)
1626 #define call_basic_streambuf_wchar_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 44, \
1627         fpos_int*, (basic_streambuf_wchar*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
1628 fpos_int* __thiscall basic_streambuf_wchar_seekpos(basic_streambuf_wchar *this,
1629         fpos_int *ret, fpos_int pos, int mode)
1630 {
1631     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1632     ret->off = -1;
1633     ret->pos = 0;
1634     ret->state = 0;
1635     return ret;
1636 }
1637
1638 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1639 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1640 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1641 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1642 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos, 36)
1643 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos(basic_streambuf_wchar *this,
1644         fpos_int *ret, fpos_int pos, int mode)
1645 {
1646     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1647     return call_basic_streambuf_wchar_seekpos(this, ret, pos, mode);
1648 }
1649
1650 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1651 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1652 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1653 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1654 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos_old, 36)
1655 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos_old(basic_streambuf_wchar *this,
1656         fpos_int *ret, fpos_int pos, unsigned int mode)
1657 {
1658     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1659     return basic_streambuf_wchar_pubseekpos(this, ret, pos, mode);
1660 }
1661
1662 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEPAV12@PA_WH@Z */
1663 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z */
1664 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEPAV12@PAGH@Z */
1665 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z */
1666 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setbuf, 16)
1667 #define call_basic_streambuf_wchar_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 48, \
1668         basic_streambuf_wchar*, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, buf, count))
1669 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_setbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1670 {
1671     TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
1672     return this;
1673 }
1674
1675 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PA_WH@Z */
1676 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z */
1677 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PAGH@Z */
1678 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z */
1679 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsetbuf, 16)
1680 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_pubsetbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1681 {
1682     TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
1683     return call_basic_streambuf_wchar_setbuf(this, buf, count);
1684 }
1685
1686 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1687 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
1688 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1689 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
1690 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sync, 4)
1691 #define call_basic_streambuf_wchar_sync(this) CALL_VTBL_FUNC(this, 52, \
1692         int, (basic_streambuf_wchar*), (this))
1693 int __thiscall basic_streambuf_wchar_sync(basic_streambuf_wchar *this)
1694 {
1695     TRACE("(%p)\n", this);
1696     return 0;
1697 }
1698
1699 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1700 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
1701 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1702 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ */
1703 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsync, 4)
1704 int __thiscall basic_streambuf_wchar_pubsync(basic_streambuf_wchar *this)
1705 {
1706     TRACE("(%p)\n", this);
1707     return call_basic_streambuf_wchar_sync(this);
1708 }
1709
1710 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
1711 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
1712 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
1713 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
1714 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetn, 16)
1715 streamsize __thiscall basic_streambuf_wchar_sgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1716 {
1717     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1718     return basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1719 }
1720
1721 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1722 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ */
1723 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1724 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ */
1725 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_showmanyc, 4)
1726 #define call_basic_streambuf_wchar_showmanyc(this) CALL_VTBL_FUNC(this, 20, \
1727         streamsize, (basic_streambuf_wchar*), (this))
1728 streamsize __thiscall basic_streambuf_wchar_showmanyc(basic_streambuf_wchar *this)
1729 {
1730     TRACE("(%p)\n", this);
1731     return 0;
1732 }
1733
1734 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1735 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ */
1736 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1737 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ */
1738 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_in_avail, 4)
1739 streamsize __thiscall basic_streambuf_wchar_in_avail(basic_streambuf_wchar *this)
1740 {
1741     streamsize ret;
1742
1743     TRACE("(%p)\n", this);
1744
1745     ret = basic_streambuf_wchar__Gnavail(this);
1746     return ret ? ret : call_basic_streambuf_wchar_showmanyc(this);
1747 }
1748
1749 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1750 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1751 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1752 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
1753 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputbackc, 8)
1754 unsigned short __thiscall basic_streambuf_wchar_sputbackc(basic_streambuf_wchar *this, wchar_t ch)
1755 {
1756     TRACE("(%p %d)\n", this, ch);
1757     if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
1758         (*this->prsize)++;
1759         (*this->prpos)--;
1760         return ch;
1761     }
1762
1763     return call_basic_streambuf_wchar_pbackfail(this, ch);
1764 }
1765
1766 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1767 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1768 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1769 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHG@Z */
1770 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputc, 8)
1771 unsigned short __thiscall basic_streambuf_wchar_sputc(basic_streambuf_wchar *this, wchar_t ch)
1772 {
1773     TRACE("(%p %d)\n", this, ch);
1774     return basic_streambuf_wchar__Pnavail(this) ?
1775         (*basic_streambuf_wchar__Pninc(this) = ch) :
1776         call_basic_streambuf_wchar_overflow(this, ch);
1777 }
1778
1779 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1780 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1781 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1782 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1783 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sungetc, 4)
1784 unsigned short __thiscall basic_streambuf_wchar_sungetc(basic_streambuf_wchar *this)
1785 {
1786     TRACE("(%p)\n", this);
1787     if(*this->prpos && *this->prpos>*this->prbuf) {
1788         (*this->prsize)++;
1789         (*this->prpos)--;
1790         return **this->prpos;
1791     }
1792
1793     return call_basic_streambuf_wchar_pbackfail(this, WEOF);
1794 }
1795
1796 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1797 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1798 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1799 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1800 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_stossc, 4)
1801 void __thiscall basic_streambuf_wchar_stossc(basic_streambuf_wchar *this)
1802 {
1803     TRACE("(%p)\n", this);
1804     if(basic_streambuf_wchar__Gnavail(this))
1805         basic_streambuf_wchar__Gninc(this);
1806     else
1807         call_basic_streambuf_wchar_uflow(this);
1808 }
1809
1810 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1811 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1812 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1813 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1814 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sbumpc, 4)
1815 unsigned short __thiscall basic_streambuf_wchar_sbumpc(basic_streambuf_wchar *this)
1816 {
1817     TRACE("(%p)\n", this);
1818     return basic_streambuf_wchar__Gnavail(this) ?
1819         *basic_streambuf_wchar__Gninc(this) : call_basic_streambuf_wchar_uflow(this);
1820 }
1821
1822 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1823 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1824 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1825 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1826 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetc, 4)
1827 unsigned short __thiscall basic_streambuf_wchar_sgetc(basic_streambuf_wchar *this)
1828 {
1829     TRACE("(%p)\n", this);
1830     return basic_streambuf_wchar__Gnavail(this) ?
1831         *basic_streambuf_wchar_gptr(this) : call_basic_streambuf_wchar_underflow(this);
1832 }
1833
1834 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1835 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1836 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1837 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1838 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_snextc, 4)
1839 unsigned short __thiscall basic_streambuf_wchar_snextc(basic_streambuf_wchar *this)
1840 {
1841     TRACE("(%p)\n", this);
1842
1843     if(basic_streambuf_wchar__Gnavail(this) > 1)
1844         return *basic_streambuf_wchar__Gnpreinc(this);
1845     return basic_streambuf_wchar_sbumpc(this)==WEOF ?
1846         WEOF : basic_streambuf_wchar_sgetc(this);
1847 }
1848
1849 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WH@Z */
1850 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z */
1851 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGH@Z */
1852 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z */
1853 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsgetn, 16)
1854 #define call_basic_streambuf_wchar_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
1855         streamsize, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, ptr, count))
1856 streamsize __thiscall basic_streambuf_wchar_xsgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1857 {
1858     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1859     return basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1860 }
1861
1862 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z */
1863 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z */
1864 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPBGH@Z */
1865 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z */
1866 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsputn, 16)
1867 #define call_basic_streambuf_wchar_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 36, \
1868         streamsize, (basic_streambuf_wchar*, const wchar_t*, streamsize), (this, ptr, count))
1869 streamsize __thiscall basic_streambuf_wchar_xsputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1870 {
1871     streamsize copied, chunk;
1872
1873     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1874
1875     for(copied=0; copied<count;) {
1876         chunk = basic_streambuf_wchar__Pnavail(this);
1877         if(chunk > count-copied)
1878             chunk = count-copied;
1879
1880         if(chunk > 0) {
1881             memcpy(*this->pwpos, ptr+copied, chunk*sizeof(wchar_t));
1882             *this->pwpos += chunk;
1883             *this->pwsize -= chunk;
1884             copied += chunk;
1885         }else if(call_basic_streambuf_wchar_overflow(this, ptr[copied]) != WEOF) {
1886             copied++;
1887         }else {
1888             break;
1889         }
1890     }
1891
1892     return copied;
1893 }
1894
1895 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPB_WH@Z */
1896 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z */
1897 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPBGH@Z */
1898 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z */
1899 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputn, 16)
1900 streamsize __thiscall basic_streambuf_wchar_sputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1901 {
1902     TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1903     return call_basic_streambuf_wchar_xsputn(this, ptr, count);
1904 }
1905
1906 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
1907 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
1908 static int basic_filebuf_char__Init__Stinit = 0;
1909
1910 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
1911 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
1912 static void basic_filebuf_char__Init(basic_filebuf_char *this, FILE *file, basic_filebuf__Initfl which)
1913 {
1914     TRACE("(%p %p %d)\n", this, file, which);
1915
1916     this->cvt = NULL;
1917     this->wrotesome = FALSE;
1918     this->state = basic_filebuf_char__Init__Stinit;
1919     this->close = (which == INITFL_open);
1920     this->file = file;
1921
1922     basic_streambuf_char__Init_empty(&this->base);
1923     if(file)
1924         basic_streambuf_char__Init(&this->base, &file->_base, &file->_ptr,
1925                 &file->_cnt, &file->_base, &file->_ptr, &file->_cnt);
1926 }
1927
1928 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAV?$codecvt@DDH@2@@Z */
1929 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$codecvt@DDH@2@@Z */
1930 static void basic_filebuf_char__Initcvt(basic_filebuf_char *this, codecvt_char *cvt)
1931 {
1932     TRACE("(%p %p)\n", this, cvt);
1933
1934     if(codecvt_base_always_noconv(&cvt->base)) {
1935         this->cvt = NULL;
1936     }else {
1937         basic_streambuf_char__Init_empty(&this->base);
1938         this->cvt = cvt;
1939     }
1940 }
1941
1942 /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAE_NXZ */
1943 /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAA_NXZ */
1944 static MSVCP_bool basic_filebuf_char__Endwrite(basic_filebuf_char *this)
1945 {
1946     TRACE("(%p)\n", this);
1947
1948     if(!this->wrotesome || !this->cvt)
1949         return TRUE;
1950
1951
1952     if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
1953         return FALSE;
1954
1955     while(1) {
1956         /* TODO: check if we need a dynamic buffer here */
1957         char buf[128];
1958         char *next;
1959         int ret;
1960
1961         ret = codecvt_char_unshift(this->cvt, &this->state, buf, buf+sizeof(buf), &next);
1962         switch(ret) {
1963         case CODECVT_ok:
1964             this->wrotesome = FALSE;
1965             /* fall through */
1966         case CODECVT_partial:
1967             if(!fwrite(buf, next-buf, 1, this->file))
1968                 return FALSE;
1969             if(this->wrotesome)
1970                 break;
1971             /* fall through */
1972         case CODECVT_noconv:
1973             if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
1974                 return FALSE;
1975             return TRUE;
1976         default:
1977             return FALSE;
1978         }
1979     }
1980 }
1981
1982 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@XZ */
1983 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@XZ */
1984 static basic_filebuf_char* basic_filebuf_char_close(basic_filebuf_char *this)
1985 {
1986     basic_filebuf_char *ret = this;
1987
1988     TRACE("(%p)\n", this);
1989
1990     if(!this->file)
1991         return NULL;
1992
1993     /* TODO: handle exceptions */
1994     if(!basic_filebuf_char__Endwrite(this))
1995         ret = NULL;
1996     if(fclose(this->file))
1997         ret  = NULL;
1998
1999     basic_filebuf_char__Init(this, NULL, INITFL_close);
2000     return ret;
2001 }
2002
2003 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
2004 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2005 static basic_filebuf_char* basic_filebuf_char_ctor_file(basic_filebuf_char *this, FILE *file)
2006 {
2007     TRACE("(%p %p)\n", this, file);
2008
2009     basic_streambuf_char_ctor(&this->base);
2010     this->base.vtable = &MSVCP_basic_filebuf_char_vtable;
2011
2012     basic_filebuf_char__Init(this, file, INITFL_new);
2013     return this;
2014 }
2015
2016 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
2017 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
2018 static void basic_filebuf_char_dtor(basic_filebuf_char *this)
2019 {
2020     TRACE("(%p)\n", this);
2021
2022     if(this->close)
2023         basic_filebuf_char_close(this);
2024     basic_streambuf_char_dtor(&this->base);
2025 }
2026
2027 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_vector_dtor, 8)
2028 basic_filebuf_char* __thiscall basic_filebuf_char_vector_dtor(basic_filebuf_char *this, unsigned int flags)
2029 {
2030     TRACE("(%p %x)\n", this, flags);
2031     if(flags & 2) {
2032         /* we have an array, with the number of elements stored before the first object */
2033         INT_PTR i, *ptr = (INT_PTR *)this-1;
2034
2035         for(i=*ptr-1; i>=0; i--)
2036             basic_filebuf_char_dtor(this+i);
2037         MSVCRT_operator_delete(ptr);
2038     } else {
2039         basic_filebuf_char_dtor(this);
2040         if(flags & 1)
2041             MSVCRT_operator_delete(this);
2042     }
2043
2044     return this;
2045 }
2046
2047 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QBE_NXZ */
2048 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
2049 static MSVCP_bool basic_filebuf_char_is_open(const basic_filebuf_char *this)
2050 {
2051     TRACE("(%p)\n", this);
2052     return this->file != NULL;
2053 }
2054
2055 /* ?_Fiopen@std@@YAPAU_iobuf@@PB_WHH@Z */
2056 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEB_WHH@Z */
2057 FILE* __cdecl _Fiopen_wchar(const wchar_t *name, int mode, int prot)
2058 {
2059     static const wchar_t rW[] = {'r',0};
2060     static const struct {
2061         int mode;
2062         const wchar_t str[4];
2063         const wchar_t str_bin[4];
2064     } str_mode[] = {
2065         {OPENMODE_out,                            {'w',0},     {'w','b',0}},
2066         {OPENMODE_out|OPENMODE_app,               {'a',0},     {'a','b',0}},
2067         {OPENMODE_app,                            {'a',0},     {'a','b',0}},
2068         {OPENMODE_out|OPENMODE_trunc,             {'w',0},     {'w','b',0}},
2069         {OPENMODE_in,                             {'r',0},     {'r','b',0}},
2070         {OPENMODE_in|OPENMODE_out,                {'r','+',0}, {'r','+','b',0}},
2071         {OPENMODE_in|OPENMODE_out|OPENMODE_trunc, {'w','+',0}, {'w','+','b',0}},
2072         {OPENMODE_in|OPENMODE_out|OPENMODE_app,   {'a','+',0}, {'a','+','b',0}},
2073         {OPENMODE_in|OPENMODE_app,                {'a','+',0}, {'a','+','b',0}}
2074     };
2075
2076     int real_mode = mode & ~(OPENMODE_ate|OPENMODE__Nocreate|OPENMODE__Noreplace|OPENMODE_binary);
2077     int mode_idx;
2078     FILE *f = NULL;
2079
2080     TRACE("(%s %d %d)\n", debugstr_w(name), mode, prot);
2081
2082     for(mode_idx=0; mode_idx<sizeof(str_mode)/sizeof(str_mode[0]); mode_idx++)
2083         if(str_mode[mode_idx].mode == real_mode)
2084             break;
2085     if(mode_idx == sizeof(str_mode)/sizeof(str_mode[0]))
2086         return NULL;
2087
2088     if((mode & OPENMODE__Nocreate) && !(f = _wfopen(name, rW)))
2089         return NULL;
2090     else if(f)
2091         fclose(f);
2092
2093     if((mode & OPENMODE__Noreplace) && (mode & (OPENMODE_out|OPENMODE_app))
2094             && (f = _wfopen(name, rW))) {
2095         fclose(f);
2096         return NULL;
2097     }
2098
2099     f = _wfsopen(name, (mode & OPENMODE_binary) ? str_mode[mode_idx].str_bin
2100             : str_mode[mode_idx].str, prot);
2101     if(!f)
2102         return NULL;
2103
2104     if((mode & OPENMODE_ate) && fseek(f, 0, SEEK_END)) {
2105         fclose(f);
2106         return NULL;
2107     }
2108
2109     return f;
2110 }
2111
2112 /* ?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z */
2113 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEBDHH@Z */
2114 FILE* __cdecl _Fiopen(const char *name, int mode, int prot)
2115 {
2116     wchar_t nameW[FILENAME_MAX];
2117
2118     TRACE("(%s %d %d)\n", name, mode, prot);
2119
2120     if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0)
2121         return NULL;
2122     return _Fiopen_wchar(nameW, mode, prot);
2123 }
2124
2125 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2126 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2127 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_overflow, 8)
2128 int __thiscall basic_filebuf_char_overflow(basic_filebuf_char *this, int c)
2129 {
2130     char buf[8], *dyn_buf;
2131     char ch = c, *to_next;
2132     const char *from_next;
2133     int ret, max_size;
2134
2135
2136     TRACE("(%p %d)\n", this, c);
2137
2138     if(!basic_filebuf_char_is_open(this))
2139         return EOF;
2140     if(c == EOF)
2141         return !c;
2142
2143     if(!this->cvt)
2144         return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2145
2146     from_next = &ch;
2147     do {
2148         ret = codecvt_char_out(this->cvt, &this->state, from_next, &ch+1,
2149                 &from_next, buf, buf+sizeof(buf), &to_next);
2150
2151         switch(ret) {
2152         case CODECVT_partial:
2153             if(to_next == buf)
2154                 break;
2155             /* fall through */
2156         case CODECVT_ok:
2157             if(!fwrite(buf, to_next-buf, 1, this->file))
2158                 return EOF;
2159             if(ret == CODECVT_partial)
2160                 continue;
2161             return c;
2162         case CODECVT_noconv:
2163             return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2164         default:
2165             return EOF;
2166         }
2167
2168         break;
2169     } while(1);
2170
2171     max_size = codecvt_base_max_length(&this->cvt->base);
2172     dyn_buf = malloc(max_size);
2173     if(!dyn_buf)
2174         return EOF;
2175
2176     ret = codecvt_char_out(this->cvt, &this->state, from_next, &ch+1,
2177             &from_next, dyn_buf, dyn_buf+max_size, &to_next);
2178
2179     switch(ret) {
2180     case CODECVT_ok:
2181         ret = fwrite(dyn_buf, to_next-dyn_buf, 1, this->file);
2182         free(dyn_buf);
2183         return ret ? c : EOF;
2184     case CODECVT_partial:
2185         ERR("buffer should be big enough to store all output\n");
2186         /* fall through */
2187     default:
2188         free(dyn_buf);
2189         return EOF;
2190     }
2191 }
2192
2193 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2194 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2195 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_pbackfail, 8)
2196 int __thiscall basic_filebuf_char_pbackfail(basic_filebuf_char *this, int c)
2197 {
2198     TRACE("(%p %d)\n", this, c);
2199
2200     if(!basic_filebuf_char_is_open(this))
2201         return EOF;
2202
2203     if(basic_streambuf_char_gptr(&this->base)>basic_streambuf_char_eback(&this->base)
2204             && (c==EOF || (int)(unsigned char)basic_streambuf_char_gptr(&this->base)[-1]==c)) {
2205         basic_streambuf_char__Gndec(&this->base);
2206         return c==EOF ? !c : c;
2207     }else if(c!=EOF && !this->cvt) {
2208         return ungetc(c, this->file);
2209     }
2210
2211     return EOF;
2212 }
2213
2214 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2215 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2216 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_uflow, 4)
2217 int __thiscall basic_filebuf_char_uflow(basic_filebuf_char *this)
2218 {
2219     char ch, buf[128], *to_next;
2220     const char *buf_next;
2221     int c, i;
2222
2223     TRACE("(%p)\n", this);
2224
2225     if(!basic_filebuf_char_is_open(this))
2226         return EOF;
2227
2228     if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2229         return (unsigned char)*basic_streambuf_char__Gninc(&this->base);
2230
2231     c = fgetc(this->file);
2232     if(!this->cvt || c==EOF)
2233         return c;
2234
2235     buf_next = buf;
2236     for(i=0; i < sizeof(buf)/sizeof(buf[0]); i++) {
2237         buf[i] = c;
2238
2239         switch(codecvt_char_in(this->cvt, &this->state, buf_next,
2240                     buf+i+1, &buf_next, &ch, &ch+1, &to_next)) {
2241         case CODECVT_partial:
2242         case CODECVT_ok:
2243             if(to_next == &ch) {
2244                 c = fgetc(this->file);
2245                 if(c == EOF)
2246                     return EOF;
2247                 continue;
2248             }
2249
2250             for(i--; i>=buf_next-buf; i--)
2251                 ungetc(buf[i], this->file);
2252             return ch;
2253         case CODECVT_noconv:
2254             return (unsigned char)buf[0];
2255         default:
2256             return EOF;
2257         }
2258     }
2259
2260     FIXME("buffer is too small\n");
2261     return EOF;
2262 }
2263
2264 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2265 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2266 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_underflow, 4)
2267 int __thiscall basic_filebuf_char_underflow(basic_filebuf_char *this)
2268 {
2269     int ret;
2270
2271     TRACE("(%p)\n", this);
2272
2273     if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2274         return (unsigned char)*basic_streambuf_char_gptr(&this->base);
2275
2276     ret = call_basic_streambuf_char_uflow(&this->base);
2277     if(ret != EOF)
2278         ret = call_basic_streambuf_char_pbackfail(&this->base, ret);
2279     return ret;
2280 }
2281
2282 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2283 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2284 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekoff, 24)
2285 fpos_int* __thiscall basic_filebuf_char_seekoff(basic_filebuf_char *this,
2286         fpos_int *ret, streamoff off, int way, int mode)
2287 {
2288     fpos_t pos;
2289
2290     TRACE("(%p %p %s %d %d)\n", this, ret, wine_dbgstr_longlong(off), way, mode);
2291
2292     if(!basic_filebuf_char_is_open(this) || !basic_filebuf_char__Endwrite(this)
2293             || fseek(this->file, off, way)) {
2294         ret->off = -1;
2295         ret->pos = 0;
2296         ret->state = 0;
2297         return ret;
2298     }
2299
2300     fgetpos(this->file, &pos);
2301     ret->off = 0;
2302     ret->pos = pos;
2303     ret->state = this->state;
2304     return ret;
2305 }
2306
2307 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2308 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2309 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekpos, 36)
2310 fpos_int* __thiscall basic_filebuf_char_seekpos(basic_filebuf_char *this,
2311         fpos_int *ret, fpos_int pos, int mode)
2312 {
2313     fpos_t fpos;
2314
2315     TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
2316
2317     if(!basic_filebuf_char_is_open(this) || !basic_filebuf_char__Endwrite(this)
2318             || fseek(this->file, (LONG)pos.pos, SEEK_SET)
2319             || (pos.off && fseek(this->file, pos.off, SEEK_CUR))) {
2320         ret->off = -1;
2321         ret->pos = 0;
2322         ret->state = 0;
2323         return ret;
2324     }
2325
2326     fgetpos(this->file, &fpos);
2327     ret->off = 0;
2328     ret->pos = fpos;
2329     ret->state = this->state;
2330     return ret;
2331 }
2332
2333 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PADH@Z */
2334 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAD_J@Z */
2335 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_setbuf, 16)
2336 basic_streambuf_char* __thiscall basic_filebuf_char_setbuf(basic_filebuf_char *this, char *buf, streamsize count)
2337 {
2338     TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
2339
2340     if(!basic_filebuf_char_is_open(this))
2341         return NULL;
2342
2343     if(setvbuf(this->file, buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count))
2344         return NULL;
2345
2346     basic_filebuf_char__Init(this, this->file, INITFL_open);
2347     return &this->base;
2348 }
2349
2350 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2351 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2352 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_sync, 4)
2353 int __thiscall basic_filebuf_char_sync(basic_filebuf_char *this)
2354 {
2355     TRACE("(%p)\n", this);
2356
2357     if(!basic_filebuf_char_is_open(this))
2358         return 0;
2359
2360     if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
2361         return 0;
2362     return fflush(this->file);
2363 }
2364
2365 /* ?imbue@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
2366 /* ?imbue@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
2367 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_imbue, 8)
2368 void __thiscall basic_filebuf_char_imbue(basic_filebuf_char *this, const locale *loc)
2369 {
2370     TRACE("(%p %p)\n", this, loc);
2371     basic_filebuf_char__Initcvt(this, codecvt_char_use_facet(loc));
2372 }
2373
2374 /* ?_Stinit@?1??_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
2375 /* ?_Stinit@?1??_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
2376 static int basic_filebuf_wchar__Init__Stinit = 0;
2377
2378 /* ?_Stinit@?1??_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
2379 /* ?_Stinit@?1??_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
2380 static int basic_filebuf_short__Init__Stinit = 0;
2381
2382 /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
2383 /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
2384 static void basic_filebuf_wchar__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which)
2385 {
2386     TRACE("(%p %p %d)\n", this, file, which);
2387
2388     this->cvt = NULL;
2389     this->wrotesome = FALSE;
2390     this->state = basic_filebuf_wchar__Init__Stinit;
2391     this->close = (which == INITFL_open);
2392     this->file = file;
2393
2394     basic_streambuf_wchar__Init_empty(&this->base);
2395 }
2396
2397 /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
2398 /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
2399 static void basic_filebuf_short__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which)
2400 {
2401     TRACE("(%p %p %d)\n", this, file, which);
2402
2403     this->cvt = NULL;
2404     this->wrotesome = FALSE;
2405     this->state = basic_filebuf_short__Init__Stinit;
2406     this->close = (which == INITFL_open);
2407     this->file = file;
2408
2409     basic_streambuf_wchar__Init_empty(&this->base);
2410 }
2411
2412 /* ?_Initcvt@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$codecvt@_WDH@2@@Z */
2413 /* ?_Initcvt@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$codecvt@_WDH@2@@Z */
2414 /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAV?$codecvt@GDH@2@@Z */
2415 /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$codecvt@GDH@2@@Z */
2416 static void basic_filebuf_wchar__Initcvt(basic_filebuf_wchar *this, codecvt_wchar *cvt)
2417 {
2418     TRACE("(%p %p)\n", this, cvt);
2419
2420     if(codecvt_base_always_noconv(&cvt->base)) {
2421         this->cvt = NULL;
2422     }else {
2423         basic_streambuf_wchar__Init_empty(&this->base);
2424         this->cvt = cvt;
2425     }
2426 }
2427
2428 /* ?_Endwrite@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAE_NXZ */
2429 /* ?_Endwrite@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAA_NXZ */
2430 /* ?_Endwrite@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAE_NXZ */
2431 /* ?_Endwrite@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAA_NXZ */
2432 static MSVCP_bool basic_filebuf_wchar__Endwrite(basic_filebuf_wchar *this)
2433 {
2434     TRACE("(%p)\n", this);
2435
2436     if(!this->wrotesome || !this->cvt)
2437         return TRUE;
2438
2439     if(call_basic_streambuf_wchar_overflow(&this->base, WEOF) == WEOF)
2440         return FALSE;
2441
2442     while(1) {
2443         /* TODO: check if we need a dynamic buffer here */
2444         char buf[128];
2445         char *next;
2446         int ret;
2447
2448         ret = codecvt_wchar_unshift(this->cvt, &this->state, buf, buf+sizeof(buf), &next);
2449         switch(ret) {
2450         case CODECVT_ok:
2451             this->wrotesome = FALSE;
2452             /* fall through */
2453         case CODECVT_partial:
2454             if(!fwrite(buf, next-buf, 1, this->file))
2455                 return FALSE;
2456             if(this->wrotesome)
2457                 break;
2458             /* fall through */
2459         case CODECVT_noconv:
2460             if(call_basic_streambuf_wchar_overflow(&this->base, WEOF) == WEOF)
2461                 return FALSE;
2462             return TRUE;
2463         default:
2464             return FALSE;
2465         }
2466     }
2467 }
2468
2469 /* ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@XZ */
2470 /* ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@XZ */
2471 /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@XZ */
2472 /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@XZ */
2473 static basic_filebuf_wchar* basic_filebuf_wchar_close(basic_filebuf_wchar *this)
2474 {
2475     basic_filebuf_wchar *ret = this;
2476
2477     TRACE("(%p)\n", this);
2478
2479     if(!this->file)
2480         return NULL;
2481
2482     /* TODO: handle exceptions */
2483     if(!basic_filebuf_wchar__Endwrite(this))
2484         ret = NULL;
2485     if(fclose(this->file))
2486         ret  = NULL;
2487
2488     basic_filebuf_wchar__Init(this, NULL, INITFL_close);
2489     return ret;
2490 }
2491
2492 /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */
2493 /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2494 static basic_filebuf_wchar* basic_filebuf_wchar_ctor_file(basic_filebuf_wchar *this, FILE *file)
2495 {
2496     TRACE("(%p %p)\n", this, file);
2497
2498     basic_streambuf_wchar_ctor(&this->base);
2499     this->base.vtable = &MSVCP_basic_filebuf_wchar_vtable;
2500
2501     basic_filebuf_wchar__Init(this, file, INITFL_new);
2502     return this;
2503 }
2504
2505 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */
2506 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2507 static basic_filebuf_wchar* basic_filebuf_short_ctor_file(basic_filebuf_wchar *this, FILE *file)
2508 {
2509     TRACE("(%p %p)\n", this, file);
2510
2511     basic_streambuf_short_ctor(&this->base);
2512     this->base.vtable = &MSVCP_basic_filebuf_short_vtable;
2513
2514     basic_filebuf_short__Init(this, file, INITFL_new);
2515     return this;
2516 }
2517
2518 /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
2519 /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
2520 /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
2521 /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
2522 static void basic_filebuf_wchar_dtor(basic_filebuf_wchar *this)
2523 {
2524     TRACE("(%p)\n", this);
2525
2526     if(this->close)
2527         basic_filebuf_wchar_close(this);
2528     basic_streambuf_wchar_dtor(&this->base);
2529 }
2530
2531 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_vector_dtor, 8)
2532 basic_filebuf_wchar* __thiscall basic_filebuf_wchar_vector_dtor(basic_filebuf_wchar *this, unsigned int flags)
2533 {
2534     TRACE("(%p %x)\n", this, flags);
2535     if(flags & 2) {
2536         /* we have an array, with the number of elements stored before the first object */
2537         INT_PTR i, *ptr = (INT_PTR *)this-1;
2538
2539         for(i=*ptr-1; i>=0; i--)
2540             basic_filebuf_wchar_dtor(this+i);
2541         MSVCRT_operator_delete(ptr);
2542     } else {
2543         basic_filebuf_wchar_dtor(this);
2544         if(flags & 1)
2545             MSVCRT_operator_delete(this);
2546     }
2547
2548     return this;
2549 }
2550
2551 /* ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */
2552 /* ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */
2553 /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QBE_NXZ */
2554 /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEBA_NXZ */
2555 static MSVCP_bool basic_filebuf_wchar_is_open(const basic_filebuf_wchar *this)
2556 {
2557     TRACE("(%p)\n", this);
2558     return this->file != NULL;
2559 }
2560
2561 /* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
2562 /* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
2563 /* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
2564 /* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
2565 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_overflow, 8)
2566 unsigned short __thiscall basic_filebuf_wchar_overflow(basic_filebuf_wchar *this, unsigned short c)
2567 {
2568     char buf[8], *dyn_buf, *to_next;
2569     wchar_t ch = c;
2570     const wchar_t *from_next;
2571     int max_size;
2572     unsigned short ret;
2573
2574
2575     TRACE("(%p %d)\n", this, c);
2576
2577     if(!basic_filebuf_wchar_is_open(this))
2578         return WEOF;
2579     if(c == WEOF)
2580         return !c;
2581
2582     if(!this->cvt)
2583         return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF;
2584
2585     from_next = &ch;
2586     do {
2587         ret = codecvt_wchar_out(this->cvt, &this->state, from_next, &ch+1,
2588                 &from_next, buf, buf+sizeof(buf), &to_next);
2589
2590         switch(ret) {
2591         case CODECVT_partial:
2592             if(to_next == buf)
2593                 break;
2594             /* fall through */
2595         case CODECVT_ok:
2596             if(!fwrite(buf, to_next-buf, 1, this->file))
2597                 return WEOF;
2598             if(ret == CODECVT_partial)
2599                 continue;
2600             return c;
2601         case CODECVT_noconv:
2602             return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF;
2603         default:
2604             return WEOF;
2605         }
2606
2607         break;
2608     } while(1);
2609
2610     max_size = codecvt_base_max_length(&this->cvt->base);
2611     dyn_buf = malloc(max_size);
2612     if(!dyn_buf)
2613         return WEOF;
2614
2615     ret = codecvt_wchar_out(this->cvt, &this->state, from_next, &ch+1,
2616             &from_next, dyn_buf, dyn_buf+max_size, &to_next);
2617
2618     switch(ret) {
2619     case CODECVT_ok:
2620         ret = fwrite(dyn_buf, to_next-dyn_buf, 1, this->file);
2621         free(dyn_buf);
2622         return ret ? c : WEOF;
2623     case CODECVT_partial:
2624         ERR("buffer should be big enough to store all output\n");
2625         /* fall through */
2626     default:
2627         free(dyn_buf);
2628         return WEOF;
2629     }
2630 }
2631
2632 /* ?pbackfail@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
2633 /* ?pbackfail@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
2634 /* ?pbackfail@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
2635 /* ?pbackfail@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
2636 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_pbackfail, 8)
2637 unsigned short __thiscall basic_filebuf_wchar_pbackfail(basic_filebuf_wchar *this, unsigned short c)
2638 {
2639     TRACE("(%p %d)\n", this, c);
2640
2641     if(!basic_filebuf_wchar_is_open(this))
2642         return WEOF;
2643
2644     if(basic_streambuf_wchar_gptr(&this->base)>basic_streambuf_wchar_eback(&this->base)
2645             && (c==WEOF || basic_streambuf_wchar_gptr(&this->base)[-1]==c)) {
2646         basic_streambuf_wchar__Gndec(&this->base);
2647         return c==WEOF ? !c : c;
2648     }else if(c!=WEOF && !this->cvt) {
2649         return ungetwc(c, this->file);
2650     }else if(c!=WEOF && basic_streambuf_wchar_gptr(&this->base)!=&this->putback) {
2651         this->putback = c;
2652         basic_streambuf_wchar_setg(&this->base, &this->putback, &this->putback, &this->putback+1);
2653         return c;
2654     }
2655
2656     return WEOF;
2657 }
2658
2659 /* ?uflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
2660 /* ?uflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
2661 /* ?uflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
2662 /* ?uflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
2663 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_uflow, 4)
2664 unsigned short __thiscall basic_filebuf_wchar_uflow(basic_filebuf_wchar *this)
2665 {
2666     wchar_t ch, *to_next;
2667     char buf[128];
2668     const char *buf_next;
2669     int c, i;
2670
2671     TRACE("(%p)\n", this);
2672
2673     if(!basic_filebuf_wchar_is_open(this))
2674         return WEOF;
2675
2676     if(basic_streambuf_wchar_gptr(&this->base) < basic_streambuf_wchar_egptr(&this->base))
2677         return *basic_streambuf_wchar__Gninc(&this->base);
2678
2679     if(!this->cvt)
2680         return fgetwc(this->file);
2681
2682     buf_next = buf;
2683     for(i=0; i < sizeof(buf)/sizeof(buf[0]); i++) {
2684         if((c = fgetc(this->file)) == EOF)
2685             return WEOF;
2686         buf[i] = c;
2687
2688         switch(codecvt_wchar_in(this->cvt, &this->state, buf_next,
2689                     buf+i+1, &buf_next, &ch, &ch+1, &to_next)) {
2690         case CODECVT_partial:
2691         case CODECVT_ok:
2692             if(to_next == &ch)
2693                 continue;
2694
2695             for(i--; i>=buf_next-buf; i--)
2696                 ungetc(buf[i], this->file);
2697             return ch;
2698         case CODECVT_noconv:
2699             if(i+1 < sizeof(wchar_t))
2700                 continue;
2701
2702             memcpy(&ch, buf, sizeof(wchar_t));
2703             return ch;
2704         default:
2705             return WEOF;
2706         }
2707     }
2708
2709     FIXME("buffer is too small\n");
2710     return WEOF;
2711 }
2712
2713 /* ?underflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
2714 /* ?underflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
2715 /* ?underflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
2716 /* ?underflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
2717 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_underflow, 4)
2718 unsigned short __thiscall basic_filebuf_wchar_underflow(basic_filebuf_wchar *this)
2719 {
2720     unsigned short ret;
2721
2722     TRACE("(%p)\n", this);
2723
2724     if(basic_streambuf_wchar_gptr(&this->base) < basic_streambuf_wchar_egptr(&this->base))
2725         return *basic_streambuf_wchar_gptr(&this->base);
2726
2727     ret = call_basic_streambuf_wchar_uflow(&this->base);
2728     if(ret != WEOF)
2729         ret = call_basic_streambuf_wchar_pbackfail(&this->base, ret);
2730     return ret;
2731 }
2732
2733 /* ?seekoff@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2734 /* ?seekoff@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2735 /* ?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2736 /* ?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2737 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_seekoff, 24)
2738 fpos_int* __thiscall basic_filebuf_wchar_seekoff(basic_filebuf_wchar *this,
2739         fpos_int *ret, streamoff off, int way, int mode)
2740 {
2741     fpos_t pos;
2742
2743     TRACE("(%p %p %s %d %d)\n", this, ret, wine_dbgstr_longlong(off), way, mode);
2744
2745     if(basic_streambuf_wchar_gptr(&this->base) == &this->putback) {
2746         if(way == SEEKDIR_cur)
2747             off -= sizeof(wchar_t);
2748
2749         basic_streambuf_wchar_setg(&this->base, &this->putback, &this->putback+1, &this->putback+1);
2750     }
2751
2752     if(!basic_filebuf_wchar_is_open(this) || !basic_filebuf_wchar__Endwrite(this)
2753             || fseek(this->file, off, way)) {
2754         ret->off = -1;
2755         ret->pos = 0;
2756         ret->state = 0;
2757         return ret;
2758     }
2759
2760     fgetpos(this->file, &pos);
2761     ret->off = 0;
2762     ret->pos = pos;
2763     ret->state = this->state;
2764     return ret;
2765 }
2766
2767 /* ?seekpos@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2768 /* ?seekpos@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2769 /* ?seekpos@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2770 /* ?seekpos@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2771 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_seekpos, 36)
2772 fpos_int* __thiscall basic_filebuf_wchar_seekpos(basic_filebuf_wchar *this,
2773         fpos_int *ret, fpos_int pos, int mode)
2774 {
2775     fpos_t fpos;
2776
2777     TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
2778
2779     if(!basic_filebuf_wchar_is_open(this) || !basic_filebuf_wchar__Endwrite(this)
2780             || fseek(this->file, (LONG)pos.pos, SEEK_SET)
2781             || (pos.off && fseek(this->file, pos.off, SEEK_CUR))) {
2782         ret->off = -1;
2783         ret->pos = 0;
2784         ret->state = 0;
2785         return ret;
2786     }
2787
2788     if(basic_streambuf_wchar_gptr(&this->base) == &this->putback)
2789         basic_streambuf_wchar_setg(&this->base, &this->putback, &this->putback+1, &this->putback+1);
2790
2791     fgetpos(this->file, &fpos);
2792     ret->off = 0;
2793     ret->pos = fpos;
2794     ret->state = this->state;
2795     return ret;
2796 }
2797
2798 /* ?setbuf@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PA_WH@Z */
2799 /* ?setbuf@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEA_W_J@Z */
2800 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_setbuf, 16)
2801 basic_streambuf_wchar* __thiscall basic_filebuf_wchar_setbuf(basic_filebuf_wchar *this, wchar_t *buf, streamsize count)
2802 {
2803     TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
2804
2805     if(!basic_filebuf_wchar_is_open(this))
2806         return NULL;
2807
2808     if(setvbuf(this->file, (char*)buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count*sizeof(wchar_t)))
2809         return NULL;
2810
2811     basic_filebuf_wchar__Init(this, this->file, INITFL_open);
2812     return &this->base;
2813 }
2814
2815 /* ?setbuf@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAGH@Z */
2816 /* ?setbuf@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAG_J@Z */
2817 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_setbuf, 16)
2818 basic_streambuf_wchar* __thiscall basic_filebuf_short_setbuf(basic_filebuf_wchar *this, wchar_t *buf, streamsize count)
2819 {
2820     TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
2821
2822     if(!basic_filebuf_wchar_is_open(this))
2823         return NULL;
2824
2825     if(setvbuf(this->file, (char*)buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count*sizeof(wchar_t)))
2826         return NULL;
2827
2828     basic_filebuf_short__Init(this, this->file, INITFL_open);
2829     return &this->base;
2830 }
2831
2832 /* ?sync@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
2833 /* ?sync@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
2834 /* ?sync@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
2835 /* ?sync@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
2836 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_sync, 4)
2837 int __thiscall basic_filebuf_wchar_sync(basic_filebuf_wchar *this)
2838 {
2839     TRACE("(%p)\n", this);
2840
2841     if(!basic_filebuf_wchar_is_open(this))
2842         return 0;
2843
2844     if(call_basic_streambuf_wchar_overflow(&this->base, WEOF) == WEOF)
2845         return 0;
2846     return fflush(this->file);
2847 }
2848
2849 /* ?imbue@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z */
2850 /* ?imbue@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z */
2851 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_imbue, 8)
2852 void __thiscall basic_filebuf_wchar_imbue(basic_filebuf_wchar *this, const locale *loc)
2853 {
2854     TRACE("(%p %p)\n", this, loc);
2855     basic_filebuf_wchar__Initcvt(this, codecvt_wchar_use_facet(loc));
2856 }
2857
2858 /* ?imbue@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z */
2859 /* ?imbue@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z */
2860 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_imbue, 8)
2861 void __thiscall basic_filebuf_short_imbue(basic_filebuf_wchar *this, const locale *loc)
2862 {
2863     TRACE("(%p %p)\n", this, loc);
2864     basic_filebuf_wchar__Initcvt(this, codecvt_short_use_facet(loc));
2865 }
2866
2867 /* ??0ios_base@std@@IAE@XZ */
2868 /* ??0ios_base@std@@IEAA@XZ */
2869 DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4)
2870 ios_base* __thiscall ios_base_ctor(ios_base *this)
2871 {
2872     TRACE("(%p)\n", this);
2873     this->vtable = &MSVCP_ios_base_vtable;
2874     return this;
2875 }
2876
2877 /* ??0ios_base@std@@QAE@ABV01@@Z */
2878 /* ??0ios_base@std@@QEAA@AEBV01@@Z */
2879 DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8)
2880 ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy)
2881 {
2882     TRACE("(%p %p)\n", this, copy);
2883     *this = *copy;
2884     this->vtable = &MSVCP_ios_base_vtable;
2885     return this;
2886 }
2887
2888 /* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */
2889 /* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */
2890 DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8)
2891 void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event)
2892 {
2893     IOS_BASE_fnarray *cur;
2894
2895     TRACE("(%p %x)\n", this, event);
2896
2897     for(cur=this->calls; cur; cur=cur->next)
2898         cur->event_handler(event, this, cur->index);
2899 }
2900
2901 /* ?_Tidy@ios_base@std@@AAAXXZ */
2902 /* ?_Tidy@ios_base@std@@AEAAXXZ */
2903 void CDECL ios_base_Tidy(ios_base *this)
2904 {
2905     IOS_BASE_iosarray *arr_cur, *arr_next;
2906     IOS_BASE_fnarray *event_cur, *event_next;
2907
2908     TRACE("(%p)\n", this);
2909
2910     ios_base_Callfns(this, EVENT_erase_event);
2911
2912     for(arr_cur=this->arr; arr_cur; arr_cur=arr_next) {
2913         arr_next = arr_cur->next;
2914         MSVCRT_operator_delete(arr_cur);
2915     }
2916     this->arr = NULL;
2917
2918     for(event_cur=this->calls; event_cur; event_cur=event_next) {
2919         event_next = event_cur->next;
2920         MSVCRT_operator_delete(event_cur);
2921     }
2922     this->calls = NULL;
2923 }
2924
2925 /* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */
2926 /* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */
2927 void CDECL ios_base_Ios_base_dtor(ios_base *obj)
2928 {
2929     TRACE("(%p)\n", obj);
2930     if(obj->loc) {
2931         locale_dtor(obj->loc);
2932         MSVCRT_operator_delete(obj->loc);
2933     }
2934     ios_base_Tidy(obj);
2935 }
2936
2937 /* ??1ios_base@std@@UAE@XZ */
2938 /* ??1ios_base@std@@UEAA@XZ */
2939 DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4)
2940 void __thiscall ios_base_dtor(ios_base *this)
2941 {
2942     ios_base_Ios_base_dtor(this);
2943 }
2944
2945 DEFINE_THISCALL_WRAPPER(ios_base_vector_dtor, 8)
2946 ios_base* __thiscall ios_base_vector_dtor(ios_base *this, unsigned int flags)
2947 {
2948     TRACE("(%p %x)\n", this, flags);
2949     if(flags & 2) {
2950         /* we have an array, with the number of elements stored before the first object */
2951         INT_PTR i, *ptr = (INT_PTR *)this-1;
2952
2953         for(i=*ptr-1; i>=0; i--)
2954             ios_base_dtor(this+i);
2955         MSVCRT_operator_delete(ptr);
2956     } else {
2957         ios_base_dtor(this);
2958         if(flags & 1)
2959             MSVCRT_operator_delete(this);
2960     }
2961
2962     return this;
2963 }
2964
2965 DEFINE_THISCALL_WRAPPER(iosb_vector_dtor, 8)
2966 void* __thiscall iosb_vector_dtor(void *this, unsigned int flags)
2967 {
2968     TRACE("(%p %x)\n", this, flags);
2969     if(flags & 2) {
2970         INT_PTR *ptr = (INT_PTR *)this-1;
2971         MSVCRT_operator_delete(ptr);
2972     } else {
2973         if(flags & 1)
2974             MSVCRT_operator_delete(this);
2975     }
2976
2977     return this;
2978 }
2979
2980 /* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */
2981 /* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */
2982 DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8)
2983 IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index)
2984 {
2985     IOS_BASE_iosarray *p;
2986
2987     TRACE("(%p %d)\n", this, index);
2988
2989     for(p=this->arr; p; p=p->next) {
2990         if(p->index == index)
2991             return p;
2992     }
2993
2994     for(p=this->arr; p; p=p->next) {
2995         if(!p->long_val && !p->ptr_val) {
2996             p->index = index;
2997             return p;
2998         }
2999     }
3000
3001     p = MSVCRT_operator_new(sizeof(IOS_BASE_iosarray));
3002     p->next = this->arr;
3003     p->index = index;
3004     p->long_val = 0;
3005     p->ptr_val = NULL;
3006     this->arr = p;
3007     return p;
3008 }
3009
3010 /* ?iword@ios_base@std@@QAEAAJH@Z */
3011 /* ?iword@ios_base@std@@QEAAAEAJH@Z */
3012 DEFINE_THISCALL_WRAPPER(ios_base_iword, 8)
3013 LONG* __thiscall ios_base_iword(ios_base *this, int index)
3014 {
3015     TRACE("(%p %d)\n", this, index);
3016     return &ios_base_Findarr(this, index)->long_val;
3017 }
3018
3019 /* ?pword@ios_base@std@@QAEAAPAXH@Z */
3020 /* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */
3021 DEFINE_THISCALL_WRAPPER(ios_base_pword, 8)
3022 void** __thiscall ios_base_pword(ios_base *this, int index)
3023 {
3024     TRACE("(%p %d)\n", this, index);
3025     return &ios_base_Findarr(this, index)->ptr_val;
3026 }
3027
3028 /* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */
3029 /* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */
3030 DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12)
3031 void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index)
3032 {
3033     IOS_BASE_fnarray *event;
3034
3035     TRACE("(%p %p %d)\n", this, callback, index);
3036
3037     event = MSVCRT_operator_new(sizeof(IOS_BASE_fnarray));
3038     event->next = this->calls;
3039     event->index = index;
3040     event->event_handler = callback;
3041     this->calls = event;
3042 }
3043
3044 /* ?clear@ios_base@std@@QAEXH_N@Z */
3045 /* ?clear@ios_base@std@@QEAAXH_N@Z */
3046 DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12)
3047 void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
3048 {
3049     TRACE("(%p %x %x)\n", this, state, reraise);
3050
3051     this->state = state & IOSTATE_mask;
3052     if(!(this->state & this->except))
3053         return;
3054
3055     if(reraise)
3056         throw_exception(EXCEPTION_RERAISE, NULL);
3057     else if(this->state & this->except & IOSTATE_eofbit)
3058         throw_exception(EXCEPTION_FAILURE, "eofbit is set");
3059     else if(this->state & this->except & IOSTATE_failbit)
3060         throw_exception(EXCEPTION_FAILURE, "failbit is set");
3061     else if(this->state & this->except & IOSTATE_badbit)
3062         throw_exception(EXCEPTION_FAILURE, "badbit is set");
3063     else if(this->state & this->except & IOSTATE__Hardfail)
3064         throw_exception(EXCEPTION_FAILURE, "_Hardfail is set");
3065 }
3066
3067 /* ?clear@ios_base@std@@QAEXH@Z */
3068 /* ?clear@ios_base@std@@QEAAXH@Z */
3069 DEFINE_THISCALL_WRAPPER(ios_base_clear, 8)
3070 void __thiscall ios_base_clear(ios_base *this, IOSB_iostate state)
3071 {
3072     ios_base_clear_reraise(this, state, FALSE);
3073 }
3074
3075 /* ?clear@ios_base@std@@QAEXI@Z */
3076 /* ?clear@ios_base@std@@QEAAXI@Z */
3077 DEFINE_THISCALL_WRAPPER(ios_base_clear_unsigned, 8)
3078 void __thiscall ios_base_clear_unsigned(ios_base *this, unsigned int state)
3079 {
3080     ios_base_clear_reraise(this, (IOSB_iostate)state, FALSE);
3081 }
3082
3083 /* ?exceptions@ios_base@std@@QAEXH@Z */
3084 /* ?exceptions@ios_base@std@@QEAAXH@Z */
3085 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set, 8)
3086 void __thiscall ios_base_exceptions_set(ios_base *this, IOSB_iostate state)
3087 {
3088     TRACE("(%p %x)\n", this, state);
3089     this->except = state & IOSTATE_mask;
3090     ios_base_clear(this, this->state);
3091 }
3092
3093 /* ?exceptions@ios_base@std@@QAEXI@Z */
3094 /* ?exceptions@ios_base@std@@QEAAXI@Z */
3095 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set_unsigned, 8)
3096 void __thiscall ios_base_exceptions_set_unsigned(ios_base *this, unsigned int state)
3097 {
3098     TRACE("(%p %x)\n", this, state);
3099     ios_base_exceptions_set(this, state);
3100 }
3101
3102 /* ?exceptions@ios_base@std@@QBEHXZ */
3103 /* ?exceptions@ios_base@std@@QEBAHXZ */
3104 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_get, 4)
3105 IOSB_iostate __thiscall ios_base_exceptions_get(ios_base *this)
3106 {
3107     TRACE("(%p)\n", this);
3108     return this->except;
3109 }
3110
3111 /* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */
3112 /* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */
3113 DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8)
3114 ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *rhs)
3115 {
3116     TRACE("(%p %p)\n", this, rhs);
3117
3118     if(this != rhs) {
3119         IOS_BASE_iosarray *arr_cur;
3120         IOS_BASE_fnarray *event_cur;
3121
3122         ios_base_Tidy(this);
3123
3124         for(arr_cur=rhs->arr; arr_cur; arr_cur=arr_cur->next) {
3125             if(arr_cur->long_val)
3126                 *ios_base_iword(this, arr_cur->index) = arr_cur->long_val;
3127             if(arr_cur->ptr_val)
3128                 *ios_base_pword(this, arr_cur->index) = arr_cur->ptr_val;
3129         }
3130         this->stdstr = rhs->stdstr;
3131         this->fmtfl = rhs->fmtfl;
3132         this->prec = rhs->prec;
3133         this->wide = rhs->wide;
3134         locale_operator_assign(this->loc, rhs->loc);
3135
3136         for(event_cur=rhs->calls; event_cur; event_cur=event_cur->next)
3137             ios_base_register_callback(this, event_cur->event_handler, event_cur->index);
3138
3139         ios_base_Callfns(this, EVENT_copyfmt_event);
3140         ios_base_exceptions_set(this, rhs->except);
3141     }
3142
3143     return this;
3144 }
3145
3146 /* ??4ios_base@std@@QAEAAV01@ABV01@@Z */
3147 /* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */
3148 DEFINE_THISCALL_WRAPPER(ios_base_assign, 8)
3149 ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right)
3150 {
3151     TRACE("(%p %p)\n", this, right);
3152
3153     if(this != right) {
3154         this->state = right->state;
3155         ios_base_copyfmt(this, right);
3156     }
3157
3158     return this;
3159 }
3160
3161 /* ?fail@ios_base@std@@QBE_NXZ */
3162 /* ?fail@ios_base@std@@QEBA_NXZ */
3163 DEFINE_THISCALL_WRAPPER(ios_base_fail, 4)
3164 MSVCP_bool __thiscall ios_base_fail(const ios_base *this)
3165 {
3166     TRACE("(%p)\n", this);
3167     return (this->state & (IOSTATE_failbit|IOSTATE_badbit)) != 0;
3168 }
3169
3170 /* ??7ios_base@std@@QBE_NXZ */
3171 /* ??7ios_base@std@@QEBA_NXZ */
3172 DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4)
3173 MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this)
3174 {
3175     TRACE("(%p)\n", this);
3176     return ios_base_fail(this);
3177 }
3178
3179 /* ??Bios_base@std@@QBEPAXXZ */
3180 /* ??Bios_base@std@@QEBAPEAXXZ */
3181 DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4)
3182 void* __thiscall ios_base_op_fail(const ios_base *this)
3183 {
3184     TRACE("(%p)\n", this);
3185     return ios_base_fail(this) ? NULL : (void*)this;
3186 }
3187
3188 /* ?_Addstd@ios_base@std@@SAXPAV12@@Z */
3189 /* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */
3190 void CDECL ios_base_Addstd(ios_base *add)
3191 {
3192     FIXME("(%p) stub\n", add);
3193 }
3194
3195 /* ?_Init@ios_base@std@@IAEXXZ */
3196 /* ?_Init@ios_base@std@@IEAAXXZ */
3197 DEFINE_THISCALL_WRAPPER(ios_base__Init, 4)
3198 void __thiscall ios_base__Init(ios_base *this)
3199 {
3200     TRACE("(%p)\n", this);
3201
3202     this->stdstr = 0;
3203     this->state = this->except = IOSTATE_goodbit;
3204     this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec;
3205     this->prec = 6;
3206     this->wide = 0;
3207     this->arr = NULL;
3208     this->calls = NULL;
3209     this->loc = MSVCRT_operator_new(sizeof(locale));
3210     locale_ctor(this->loc);
3211 }
3212
3213 /* ?bad@ios_base@std@@QBE_NXZ */
3214 /* ?bad@ios_base@std@@QEBA_NXZ */
3215 DEFINE_THISCALL_WRAPPER(ios_base_bad, 4)
3216 MSVCP_bool __thiscall ios_base_bad(const ios_base *this)
3217 {
3218     TRACE("(%p)\n", this);
3219     return (this->state & IOSTATE_badbit) != 0;
3220 }
3221
3222 /* ?eof@ios_base@std@@QBE_NXZ */
3223 /* ?eof@ios_base@std@@QEBA_NXZ */
3224 DEFINE_THISCALL_WRAPPER(ios_base_eof, 4)
3225 MSVCP_bool __thiscall ios_base_eof(const ios_base *this)
3226 {
3227     TRACE("(%p)\n", this);
3228     return (this->state & IOSTATE_eofbit) != 0;
3229 }
3230
3231 /* ?flags@ios_base@std@@QAEHH@Z */
3232 /* ?flags@ios_base@std@@QEAAHH@Z */
3233 DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8)
3234 IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags)
3235 {
3236     IOSB_fmtflags ret = this->fmtfl;
3237
3238     TRACE("(%p %x)\n", this, flags);
3239
3240     this->fmtfl = flags & FMTFLAG_mask;
3241     return ret;
3242 }
3243
3244 /* ?flags@ios_base@std@@QBEHXZ */
3245 /* ?flags@ios_base@std@@QEBAHXZ */
3246 DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4)
3247 IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this)
3248 {
3249     TRACE("(%p)\n", this);
3250     return this->fmtfl;
3251 }
3252
3253 /* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */
3254 /* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */
3255 DEFINE_THISCALL_WRAPPER(ios_base_getloc, 8)
3256 locale* __thiscall ios_base_getloc(const ios_base *this, locale *ret)
3257 {
3258     TRACE("(%p)\n", this);
3259     return locale_copy_ctor(ret, this->loc);
3260 }
3261
3262 /* ?good@ios_base@std@@QBE_NXZ */
3263 /* ?good@ios_base@std@@QEBA_NXZ */
3264 DEFINE_THISCALL_WRAPPER(ios_base_good, 4)
3265 MSVCP_bool __thiscall ios_base_good(const ios_base *this)
3266 {
3267     TRACE("(%p)\n", this);
3268     return this->state == IOSTATE_goodbit;
3269 }
3270
3271 /* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */
3272 /* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */
3273 DEFINE_THISCALL_WRAPPER(ios_base_imbue, 12)
3274 locale* __thiscall ios_base_imbue(ios_base *this, locale *ret, const locale *loc)
3275 {
3276     TRACE("(%p %p)\n", this, loc);
3277     *ret = *this->loc;
3278     locale_copy_ctor(this->loc, loc);
3279     return ret;
3280 }
3281
3282 /* ?precision@ios_base@std@@QAEHH@Z */
3283 /* ?precision@ios_base@std@@QEAA_J_J@Z */
3284 DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 12)
3285 streamsize __thiscall ios_base_precision_set(ios_base *this, streamsize precision)
3286 {
3287     streamsize ret = this->prec;
3288
3289     TRACE("(%p %s)\n", this, wine_dbgstr_longlong(precision));
3290
3291     this->prec = precision;
3292     return ret;
3293 }
3294
3295 /* ?precision@ios_base@std@@QBEHXZ */
3296 /* ?precision@ios_base@std@@QEBA_JXZ */
3297 DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4)
3298 streamsize __thiscall ios_base_precision_get(const ios_base *this)
3299 {
3300     TRACE("(%p)\n", this);
3301     return this->prec;
3302 }
3303
3304 /* ?rdstate@ios_base@std@@QBEHXZ */
3305 /* ?rdstate@ios_base@std@@QEBAHXZ */
3306 DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4)
3307 IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this)
3308 {
3309     TRACE("(%p)\n", this);
3310     return this->state;
3311 }
3312
3313 /* ?setf@ios_base@std@@QAEHHH@Z */
3314 /* ?setf@ios_base@std@@QEAAHHH@Z */
3315 DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12)
3316 IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask)
3317 {
3318     IOSB_fmtflags ret = this->fmtfl;
3319
3320     TRACE("(%p %x %x)\n", this, flags, mask);
3321
3322     this->fmtfl = (this->fmtfl & (~mask)) | (flags & mask & FMTFLAG_mask);
3323     return ret;
3324 }
3325
3326 /* ?setf@ios_base@std@@QAEHH@Z */
3327 /* ?setf@ios_base@std@@QEAAHH@Z */
3328 DEFINE_THISCALL_WRAPPER(ios_base_setf, 8)
3329 IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags)
3330 {
3331     return ios_base_setf_mask(this, flags, ~0);
3332 }
3333
3334 /* ?setstate@ios_base@std@@QAEXH_N@Z */
3335 /* ?setstate@ios_base@std@@QEAAXH_N@Z */
3336 DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12)
3337 void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
3338 {
3339     TRACE("(%p %x %x)\n", this, state, reraise);
3340
3341     if(state != IOSTATE_goodbit)
3342         ios_base_clear_reraise(this, this->state | state, reraise);
3343 }
3344
3345 /* ?setstate@ios_base@std@@QAEXH@Z */
3346 /* ?setstate@ios_base@std@@QEAAXH@Z */
3347 DEFINE_THISCALL_WRAPPER(ios_base_setstate, 8)
3348 void __thiscall ios_base_setstate(ios_base *this, IOSB_iostate state)
3349 {
3350     ios_base_setstate_reraise(this, state, FALSE);
3351 }
3352
3353 /* ?setstate@ios_base@std@@QAEXI@Z */
3354 /* ?setstate@ios_base@std@@QEAAXI@Z */
3355 DEFINE_THISCALL_WRAPPER(ios_base_setstate_unsigned, 8)
3356 void __thiscall ios_base_setstate_unsigned(ios_base *this, unsigned int state)
3357 {
3358     ios_base_setstate_reraise(this, (IOSB_iostate)state, FALSE);
3359 }
3360
3361 /* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */
3362 MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync)
3363 {
3364     _Lockit lock;
3365     MSVCP_bool ret;
3366
3367     TRACE("(%x)\n", sync);
3368
3369     _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
3370     ret = ios_base_Sync;
3371     ios_base_Sync = sync;
3372     _Lockit_dtor(&lock);
3373     return ret;
3374 }
3375
3376 /* ?unsetf@ios_base@std@@QAEXH@Z */
3377 /* ?unsetf@ios_base@std@@QEAAXH@Z */
3378 DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8)
3379 void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags)
3380 {
3381     TRACE("(%p %x)\n", this, flags);
3382     this->fmtfl &= ~flags;
3383 }
3384
3385 /* ?width@ios_base@std@@QAEHH@Z */
3386 /* ?width@ios_base@std@@QEAA_J_J@Z */
3387 DEFINE_THISCALL_WRAPPER(ios_base_width_set, 12)
3388 streamsize __thiscall ios_base_width_set(ios_base *this, streamsize width)
3389 {
3390     streamsize ret = this->wide;
3391
3392     TRACE("(%p %s)\n", this, wine_dbgstr_longlong(width));
3393
3394     this->wide = width;
3395     return ret;
3396 }
3397
3398 /* ?width@ios_base@std@@QBEHXZ */
3399 /* ?width@ios_base@std@@QEBA_JXZ */
3400 DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4)
3401 streamsize __thiscall ios_base_width_get(ios_base *this)
3402 {
3403     TRACE("(%p)\n", this);
3404     return this->wide;
3405 }
3406
3407 /* ?xalloc@ios_base@std@@SAHXZ */
3408 int CDECL ios_base_xalloc(void)
3409 {
3410     _Lockit lock;
3411     int ret;
3412
3413     TRACE("\n");
3414
3415     _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
3416     ret = ios_base_Index++;
3417     _Lockit_dtor(&lock);
3418     return ret;
3419 }
3420
3421 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */
3422 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */
3423 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4)
3424 basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this)
3425 {
3426     TRACE("(%p)\n", this);
3427
3428     ios_base_ctor(&this->base);
3429     this->base.vtable = &MSVCP_basic_ios_char_vtable;
3430     return this;
3431 }
3432
3433 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
3434 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
3435 DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12)
3436 void __thiscall basic_ios_char_init(basic_ios_char *this, basic_streambuf_char *streambuf, MSVCP_bool isstd)
3437 {
3438     TRACE("(%p %p %x)\n", this, streambuf, isstd);
3439     ios_base__Init(&this->base);
3440     this->strbuf = streambuf;
3441     this->stream = NULL;
3442     this->fillch = ' ';
3443
3444     if(!streambuf)
3445         ios_base_setstate(&this->base, IOSTATE_badbit);
3446
3447     if(isstd)
3448         FIXME("standard streams not handled yet\n");
3449 }
3450
3451 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
3452 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
3453 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor_streambuf, 8)
3454 basic_ios_char* __thiscall basic_ios_char_ctor_streambuf(basic_ios_char *this, basic_streambuf_char *strbuf)
3455 {
3456     TRACE("(%p %p)\n", this, strbuf);
3457
3458     basic_ios_char_ctor(this);
3459     basic_ios_char_init(this, strbuf, FALSE);
3460     return this;
3461 }
3462
3463 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */
3464 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */
3465 DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4)
3466 void __thiscall basic_ios_char_dtor(basic_ios_char *this)
3467 {
3468     TRACE("(%p)\n", this);
3469     ios_base_dtor(&this->base);
3470 }
3471
3472 DEFINE_THISCALL_WRAPPER(basic_ios_char_vector_dtor, 8)
3473 basic_ios_char* __thiscall basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
3474 {
3475     TRACE("(%p %x)\n", this, flags);
3476     if(flags & 2) {
3477         /* we have an array, with the number of elements stored before the first object */
3478         INT_PTR i, *ptr = (INT_PTR *)this-1;
3479
3480         for(i=*ptr-1; i>=0; i--)
3481             basic_ios_char_dtor(this+i);
3482         MSVCRT_operator_delete(ptr);
3483     } else {
3484         basic_ios_char_dtor(this);
3485         if(flags & 1)
3486             MSVCRT_operator_delete(this);
3487     }
3488
3489     return this;
3490 }
3491
3492 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
3493 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
3494 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12)
3495 void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
3496 {
3497     TRACE("(%p %x %x)\n", this, state, reraise);
3498     ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
3499 }
3500
3501 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
3502 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
3503 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear, 8)
3504 void __thiscall basic_ios_char_clear(basic_ios_char *this, unsigned int state)
3505 {
3506     basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE);
3507 }
3508
3509 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */
3510 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3511 DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8)
3512 basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy)
3513 {
3514     TRACE("(%p %p)\n", this, copy);
3515     if(this == copy)
3516         return this;
3517
3518     this->stream = copy->stream;
3519     this->fillch = copy->fillch;
3520     ios_base_copyfmt(&this->base, &copy->base);
3521     return this;
3522 }
3523
3524 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */
3525 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */
3526 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8)
3527 char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill)
3528 {
3529     char ret = this->fillch;
3530
3531     TRACE("(%p %c)\n", this, fill);
3532
3533     this->fillch = fill;
3534     return ret;
3535 }
3536
3537 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */
3538 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */
3539 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4)
3540 char __thiscall basic_ios_char_fill_get(basic_ios_char *this)
3541 {
3542     TRACE("(%p)\n", this);
3543     return this->fillch;
3544 }
3545
3546 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3547 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3548 DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 12)
3549 locale *__thiscall basic_ios_char_imbue(basic_ios_char *this, locale *ret, const locale *loc)
3550 {
3551     TRACE("(%p %p %p)\n", this, ret, loc);
3552
3553     if(this->strbuf) {
3554         basic_streambuf_char_pubimbue(this->strbuf, ret, loc);
3555         locale_dtor(ret);
3556     }
3557
3558     return ios_base_imbue(&this->base, ret, loc);
3559 }
3560
3561 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */
3562 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */
3563 DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12)
3564 char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def)
3565 {
3566     TRACE("(%p %c %c)\n", this, ch, def);
3567     return ctype_char_narrow_ch(ctype_char_use_facet(this->strbuf->loc), ch, def);
3568 }
3569
3570 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */
3571 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */
3572 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8)
3573 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, basic_streambuf_char *streambuf)
3574 {
3575     basic_streambuf_char *ret = this->strbuf;
3576
3577     TRACE("(%p %p)\n", this, streambuf);
3578
3579     this->strbuf = streambuf;
3580     basic_ios_char_clear(this, IOSTATE_goodbit);
3581     return ret;
3582 }
3583
3584 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
3585 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
3586 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4)
3587 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this)
3588 {
3589     TRACE("(%p)\n", this);
3590     return this->strbuf;
3591 }
3592
3593 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
3594 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
3595 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12)
3596 void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
3597 {
3598     TRACE("(%p %x %x)\n", this, state, reraise);
3599
3600     if(state != IOSTATE_goodbit)
3601         basic_ios_char_clear_reraise(this, this->base.state | state, reraise);
3602 }
3603
3604 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
3605 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
3606 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate, 8)
3607 void __thiscall basic_ios_char_setstate(basic_ios_char *this, unsigned int state)
3608 {
3609     basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE);
3610 }
3611
3612 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */
3613 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */
3614 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8)
3615 basic_ostream_char* __thiscall basic_ios_char_tie_set(basic_ios_char *this, basic_ostream_char *ostream)
3616 {
3617     basic_ostream_char *ret = this->stream;
3618
3619     TRACE("(%p %p)\n", this, ostream);
3620
3621     this->stream = ostream;
3622     return ret;
3623 }
3624
3625 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
3626 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
3627 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4)
3628 basic_ostream_char* __thiscall basic_ios_char_tie_get(const basic_ios_char *this)
3629 {
3630     TRACE("(%p)\n", this);
3631     return this->stream;
3632 }
3633
3634 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */
3635 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */
3636 DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8)
3637 char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
3638 {
3639     TRACE("(%p %c)\n", this, ch);
3640     return ctype_char_widen_ch(ctype_char_use_facet(this->strbuf->loc), ch);
3641 }
3642
3643
3644 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
3645 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
3646 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4)
3647 basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this)
3648 {
3649     TRACE("(%p)\n", this);
3650
3651     ios_base_ctor(&this->base);
3652     this->base.vtable = &MSVCP_basic_ios_wchar_vtable;
3653     return this;
3654 }
3655
3656 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */
3657 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ */
3658 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor, 4)
3659 basic_ios_wchar* __thiscall basic_ios_short_ctor(basic_ios_wchar *this)
3660 {
3661     basic_ios_wchar_ctor(this);
3662     this->base.vtable = &MSVCP_basic_ios_short_vtable;
3663     return this;
3664 }
3665
3666 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
3667 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
3668 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
3669 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
3670 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_init, 12)
3671 void __thiscall basic_ios_wchar_init(basic_ios_wchar *this, basic_streambuf_wchar *streambuf, MSVCP_bool isstd)
3672 {
3673     TRACE("(%p %p %x)\n", this, streambuf, isstd);
3674     ios_base__Init(&this->base);
3675     this->strbuf = streambuf;
3676     this->stream = NULL;
3677     this->fillch = ' ';
3678
3679     if(!streambuf)
3680         ios_base_setstate(&this->base, IOSTATE_badbit);
3681
3682     if(isstd)
3683         FIXME("standard streams not handled yet\n");
3684 }
3685
3686 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
3687 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
3688 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor_streambuf, 8)
3689 basic_ios_wchar* __thiscall basic_ios_wchar_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
3690 {
3691     TRACE("(%p %p)\n", this, strbuf);
3692
3693     basic_ios_wchar_ctor(this);
3694     basic_ios_wchar_init(this, strbuf, FALSE);
3695     return this;
3696 }
3697
3698 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
3699 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
3700 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor_streambuf, 8)
3701 basic_ios_wchar* __thiscall basic_ios_short_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
3702 {
3703     basic_ios_wchar_ctor_streambuf(this, strbuf);
3704     this->base.vtable = &MSVCP_basic_ios_short_vtable;
3705     return this;
3706 }
3707
3708 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
3709 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
3710 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ */
3711 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ */
3712 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_dtor, 4)
3713 void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this)
3714 {
3715     TRACE("(%p)\n", this);
3716     ios_base_dtor(&this->base);
3717 }
3718
3719 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_vector_dtor, 8)
3720 basic_ios_wchar* __thiscall basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags)
3721 {
3722     TRACE("(%p %x)\n", this, flags);
3723     if(flags & 2) {
3724         /* we have an array, with the number of elements stored before the first object */
3725         INT_PTR i, *ptr = (INT_PTR *)this-1;
3726
3727         for(i=*ptr-1; i>=0; i--)
3728             basic_ios_wchar_dtor(this+i);
3729         MSVCRT_operator_delete(ptr);
3730     } else {
3731         basic_ios_wchar_dtor(this);
3732         if(flags & 1)
3733             MSVCRT_operator_delete(this);
3734     }
3735
3736     return this;
3737 }
3738
3739 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
3740 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
3741 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
3742 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
3743 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear_reraise, 12)
3744 void __thiscall basic_ios_wchar_clear_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
3745 {
3746     TRACE("(%p %x %x)\n", this, state, reraise);
3747     ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
3748 }
3749
3750 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
3751 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
3752 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
3753 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
3754 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear, 8)
3755 void __thiscall basic_ios_wchar_clear(basic_ios_wchar *this, unsigned int state)
3756 {
3757     basic_ios_wchar_clear_reraise(this, (IOSB_iostate)state, FALSE);
3758 }
3759
3760 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z */
3761 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3762 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z */
3763 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3764 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_copyfmt, 8)
3765 basic_ios_wchar* __thiscall basic_ios_wchar_copyfmt(basic_ios_wchar *this, basic_ios_wchar *copy)
3766 {
3767     TRACE("(%p %p)\n", this, copy);
3768     if(this == copy)
3769         return this;
3770
3771     this->stream = copy->stream;
3772     this->fillch = copy->fillch;
3773     ios_base_copyfmt(&this->base, &copy->base);
3774     return this;
3775 }
3776
3777 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z */
3778 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z */
3779 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z */
3780 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
3781 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_set, 8)
3782 wchar_t __thiscall basic_ios_wchar_fill_set(basic_ios_wchar *this, wchar_t fill)
3783 {
3784     wchar_t ret = this->fillch;
3785
3786     TRACE("(%p %c)\n", this, fill);
3787
3788     this->fillch = fill;
3789     return ret;
3790 }
3791
3792 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ */
3793 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ */
3794 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ */
3795 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ */
3796 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_get, 4)
3797 wchar_t __thiscall basic_ios_wchar_fill_get(basic_ios_wchar *this)
3798 {
3799     TRACE("(%p)\n", this);
3800     return this->fillch;
3801 }
3802
3803 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3804 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3805 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3806 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3807 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_imbue, 12)
3808 locale *__thiscall basic_ios_wchar_imbue(basic_ios_wchar *this, locale *ret, const locale *loc)
3809 {
3810     TRACE("(%p %p %p)\n", this, ret, loc);
3811
3812     if(this->strbuf) {
3813         basic_streambuf_wchar_pubimbue(this->strbuf, ret, loc);
3814         locale_dtor(ret);
3815     }
3816
3817     return ios_base_imbue(&this->base, ret, loc);
3818 }
3819
3820 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z */
3821 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z */
3822 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z */
3823 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z */
3824 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_narrow, 12)
3825 char __thiscall basic_ios_wchar_narrow(basic_ios_wchar *this, wchar_t ch, char def)
3826 {
3827     TRACE("(%p %c %c)\n", this, ch, def);
3828     return ctype_wchar_narrow_ch(ctype_wchar_use_facet(this->strbuf->loc), ch, def);
3829 }
3830
3831 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
3832 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
3833 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z */
3834 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z */
3835 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_set, 8)
3836 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_set(basic_ios_wchar *this, basic_streambuf_wchar *streambuf)
3837 {
3838     basic_streambuf_wchar *ret = this->strbuf;
3839
3840     TRACE("(%p %p)\n", this, streambuf);
3841
3842     this->strbuf = streambuf;
3843     basic_ios_wchar_clear(this, IOSTATE_goodbit);
3844     return ret;
3845 }
3846
3847 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
3848 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
3849 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
3850 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
3851 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_get, 4)
3852 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_get(const basic_ios_wchar *this)
3853 {
3854     TRACE("(%p)\n", this);
3855     return this->strbuf;
3856 }
3857
3858 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
3859 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
3860 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
3861 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
3862 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate_reraise, 12)
3863 void __thiscall basic_ios_wchar_setstate_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
3864 {
3865     TRACE("(%p %x %x)\n", this, state, reraise);
3866
3867     if(state != IOSTATE_goodbit)
3868         basic_ios_wchar_clear_reraise(this, this->base.state | state, reraise);
3869 }
3870
3871 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
3872 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
3873 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
3874 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
3875 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate, 8)
3876 void __thiscall basic_ios_wchar_setstate(basic_ios_wchar *this, IOSB_iostate state)
3877 {
3878     basic_ios_wchar_setstate_reraise(this, state, FALSE);
3879 }
3880
3881 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
3882 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
3883 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z */
3884 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z */
3885 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_set, 8)
3886 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_set(basic_ios_wchar *this, basic_ostream_wchar *ostream)
3887 {
3888     basic_ostream_wchar *ret = this->stream;
3889
3890     TRACE("(%p %p)\n", this, ostream);
3891
3892     this->stream = ostream;
3893     return ret;
3894 }
3895
3896 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
3897 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
3898 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
3899 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
3900 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_get, 4)
3901 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_get(const basic_ios_wchar *this)
3902 {
3903     TRACE("(%p)\n", this);
3904     return this->stream;
3905 }
3906
3907 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z */
3908 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z */
3909 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z */
3910 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z */
3911 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_widen, 8)
3912 wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch)
3913 {
3914     TRACE("(%p %c)\n", this, ch);
3915     return ctype_wchar_widen_ch(ctype_wchar_use_facet(this->strbuf->loc), ch);
3916 }
3917
3918 /* Caution: basic_ostream uses virtual inheritance.
3919  * All constructors have additional parameter that says if base class should be initialized.
3920  * Base class needs to be accessed using vbtable.
3921  */
3922 static inline basic_ios_char* basic_ostream_char_get_basic_ios(basic_ostream_char *this)
3923 {
3924     return (basic_ios_char*)((char*)this+this->vbtable[1]);
3925 }
3926
3927 static inline basic_ios_char* basic_ostream_char_to_basic_ios(basic_ostream_char *ptr)
3928 {
3929     return (basic_ios_char*)((char*)ptr+basic_ostream_char_vbtable[1]);
3930 }
3931
3932 static inline basic_ostream_char* basic_ostream_char_from_basic_ios(basic_ios_char *ptr)
3933 {
3934     return (basic_ostream_char*)((char*)ptr-basic_ostream_char_vbtable[1]);
3935 }
3936
3937 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
3938 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
3939 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 16)
3940 basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this,
3941         basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
3942 {
3943     basic_ios_char *base;
3944
3945     TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init);
3946
3947     if(virt_init) {
3948         this->vbtable = basic_ostream_char_vbtable;
3949         base = basic_ostream_char_get_basic_ios(this);
3950         basic_ios_char_ctor(base);
3951     }else {
3952         base = basic_ostream_char_get_basic_ios(this);
3953     }
3954
3955     base->base.vtable = &MSVCP_basic_ostream_char_vtable;
3956     basic_ios_char_init(base, strbuf, isstd);
3957     return this;
3958 }
3959
3960 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
3961 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
3962 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor_uninitialized, 16)
3963 basic_ostream_char* __thiscall basic_ostream_char_ctor_uninitialized(basic_ostream_char *this,
3964         int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
3965 {
3966     basic_ios_char *base;
3967
3968     TRACE("(%p %d %x)\n", this, uninitialized, addstd);
3969
3970     if(virt_init) {
3971         this->vbtable = basic_ostream_char_vbtable;
3972         base = basic_ostream_char_get_basic_ios(this);
3973         basic_ios_char_ctor(base);
3974     }else {
3975         base = basic_ostream_char_get_basic_ios(this);
3976     }
3977
3978     base->base.vtable = &MSVCP_basic_ostream_char_vtable;
3979     if(addstd)
3980         ios_base_Addstd(&base->base);
3981     return this;
3982 }
3983
3984 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
3985 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
3986 DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4)
3987 void __thiscall basic_ostream_char_dtor(basic_ios_char *base)
3988 {
3989     basic_ostream_char *this = basic_ostream_char_from_basic_ios(base);
3990
3991     /* don't destroy virtual base here */
3992     TRACE("(%p)\n", this);
3993 }
3994
3995 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
3996 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
3997 DEFINE_THISCALL_WRAPPER(basic_ostream_char_vbase_dtor, 4)
3998 void __thiscall basic_ostream_char_vbase_dtor(basic_ostream_char *this)
3999 {
4000     TRACE("(%p)\n", this);
4001     basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(this));
4002     basic_ios_char_dtor(basic_ostream_char_get_basic_ios(this));
4003 }
4004
4005 DEFINE_THISCALL_WRAPPER(basic_ostream_char_vector_dtor, 8)
4006 basic_ostream_char* __thiscall basic_ostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
4007 {
4008     basic_ostream_char *this = basic_ostream_char_from_basic_ios(base);
4009
4010     TRACE("(%p %x)\n", this, flags);
4011
4012     if(flags & 2) {
4013         /* we have an array, with the number of elements stored before the first object */
4014         INT_PTR i, *ptr = (INT_PTR *)this-1;
4015
4016         for(i=*ptr-1; i>=0; i--)
4017             basic_ostream_char_vbase_dtor(this+i);
4018         MSVCRT_operator_delete(ptr);
4019     } else {
4020         basic_ostream_char_vbase_dtor(this);
4021         if(flags & 1)
4022             MSVCRT_operator_delete(this);
4023     }
4024
4025     return this;
4026 }
4027
4028 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
4029 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
4030 DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4)
4031 basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this)
4032 {
4033     /* this function is not matching C++ specification */
4034     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4035
4036     TRACE("(%p)\n", this);
4037
4038     if(basic_ios_char_rdbuf_get(base) && ios_base_good(&base->base)
4039             && basic_streambuf_char_pubsync(basic_ios_char_rdbuf_get(base))==-1)
4040         basic_ios_char_setstate(base, IOSTATE_badbit);
4041     return this;
4042 }
4043
4044 /* ?flush@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
4045 /* ?flush@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
4046 basic_ostream_char* __cdecl flush_ostream_char(basic_ostream_char *ostream)
4047 {
4048     return basic_ostream_char_flush(ostream);
4049 }
4050
4051 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
4052 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
4053 DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4)
4054 void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this)
4055 {
4056     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4057
4058     TRACE("(%p)\n", this);
4059
4060     if(base->base.fmtfl & FMTFLAG_unitbuf)
4061         basic_ostream_char_flush(this);
4062 }
4063
4064 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
4065 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
4066 DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4)
4067 void __thiscall basic_ostream_char_osfx(basic_ostream_char *this)
4068 {
4069     TRACE("(%p)\n", this);
4070     basic_ostream_char__Osfx(this);
4071 }
4072
4073 static BOOL basic_ostream_char_sentry_create(basic_ostream_char *ostr)
4074 {
4075     basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
4076
4077     if(basic_ios_char_rdbuf_get(base))
4078         call_basic_streambuf_char__Lock(base->strbuf);
4079
4080     if(ios_base_good(&base->base) && base->stream)
4081         basic_ostream_char_flush(base->stream);
4082
4083     return ios_base_good(&base->base);
4084 }
4085
4086 static void basic_ostream_char_sentry_destroy(basic_ostream_char *ostr)
4087 {
4088     basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
4089
4090     if(ios_base_good(&base->base) && !__uncaught_exception())
4091         basic_ostream_char_osfx(ostr);
4092
4093     if(basic_ios_char_rdbuf_get(base))
4094         call_basic_streambuf_char__Unlock(base->strbuf);
4095 }
4096
4097 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */
4098 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */
4099 DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4)
4100 MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this)
4101 {
4102     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4103
4104     TRACE("(%p)\n", this);
4105
4106     if(ios_base_good(&base->base) && base->stream)
4107         basic_ostream_char_flush(base->stream);
4108     return ios_base_good(&base->base);
4109 }
4110
4111 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
4112 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
4113 DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8)
4114 basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch)
4115 {
4116     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4117
4118     TRACE("(%p %c)\n", this, ch);
4119
4120     if(!basic_ostream_char_sentry_create(this)
4121             || basic_streambuf_char_sputc(base->strbuf, ch)==EOF) {
4122         basic_ostream_char_sentry_destroy(this);
4123         basic_ios_char_setstate(base, IOSTATE_badbit);
4124         return this;
4125     }
4126
4127     basic_ostream_char_sentry_destroy(this);
4128     return this;
4129 }
4130
4131 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
4132 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
4133 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 16)
4134 basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way)
4135 {
4136     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4137
4138     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way);
4139
4140     if(!ios_base_fail(&base->base)) {
4141         fpos_int seek;
4142
4143         basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
4144                 &seek, off, way, OPENMODE_out);
4145         if(seek.off==-1 && seek.pos==0 && seek.state==0)
4146             basic_ios_char_setstate(base, IOSTATE_failbit);
4147     }
4148     return this;
4149 }
4150
4151 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4152 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4153 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28)
4154 basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos)
4155 {
4156     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4157
4158     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
4159
4160     if(!ios_base_fail(&base->base)) {
4161         fpos_int seek;
4162
4163         basic_streambuf_char_pubseekpos(basic_ios_char_rdbuf_get(base),
4164                 &seek, pos, OPENMODE_out);
4165         if(seek.off==-1 && seek.pos==0 && seek.state==0)
4166             basic_ios_char_setstate(base, IOSTATE_failbit);
4167     }
4168     return this;
4169 }
4170
4171 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4172 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4173 DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8)
4174 fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret)
4175 {
4176     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4177
4178     TRACE("(%p)\n", this);
4179
4180     if(!ios_base_fail(&base->base)) {
4181         basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
4182                 ret, 0, SEEKDIR_cur, OPENMODE_out);
4183     }else {
4184         ret->off = -1;
4185         ret->pos = 0;
4186         ret->state = 0;
4187     }
4188     return ret;
4189 }
4190
4191 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */
4192 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */
4193 DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 16)
4194 basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count)
4195 {
4196     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4197
4198     TRACE("(%p %s %s)\n", this, debugstr_a(str), wine_dbgstr_longlong(count));
4199
4200     if(!basic_ostream_char_sentry_create(this)
4201             || basic_streambuf_char_sputn(base->strbuf, str, count)!=count) {
4202         basic_ostream_char_sentry_destroy(this);
4203         basic_ios_char_setstate(base, IOSTATE_badbit);
4204         return this;
4205     }
4206
4207     basic_ostream_char_sentry_destroy(this);
4208     return this;
4209 }
4210
4211 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */
4212 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */
4213 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8)
4214 basic_ostream_char* __thiscall basic_ostream_char_print_short(basic_ostream_char *this, short val)
4215 {
4216     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4217     int state = IOSTATE_goodbit;
4218
4219     TRACE("(%p %d)\n", this, val);
4220
4221     if(basic_ostream_char_sentry_create(this)) {
4222         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4223         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4224         ostreambuf_iterator_char dest = {0, strbuf};
4225
4226         num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base),
4227                 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
4228                 ? (LONG)((unsigned short)val) : (LONG)val);
4229     }
4230     basic_ostream_char_sentry_destroy(this);
4231
4232     basic_ios_char_setstate(base, state);
4233     return this;
4234 }
4235
4236 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z */
4237 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z */
4238 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ushort, 8)
4239 basic_ostream_char* __thiscall basic_ostream_char_print_ushort(basic_ostream_char *this, unsigned short val)
4240 {
4241     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4242     int state = IOSTATE_goodbit;
4243
4244     TRACE("(%p %u)\n", this, val);
4245
4246     if(basic_ostream_char_sentry_create(this)) {
4247         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4248         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4249         ostreambuf_iterator_char dest = {0, strbuf};
4250
4251         num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4252     }
4253     basic_ostream_char_sentry_destroy(this);
4254
4255     basic_ios_char_setstate(base, state);
4256     return this;
4257 }
4258
4259 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z */
4260 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z */
4261 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z */
4262 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z */
4263 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int, 8)
4264 basic_ostream_char* __thiscall basic_ostream_char_print_int(basic_ostream_char *this, int val)
4265 {
4266     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4267     int state = IOSTATE_goodbit;
4268
4269     TRACE("(%p %d)\n", this, val);
4270
4271     if(basic_ostream_char_sentry_create(this)) {
4272         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4273         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4274         ostreambuf_iterator_char dest = {0, strbuf};
4275
4276         num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4277     }
4278     basic_ostream_char_sentry_destroy(this);
4279
4280     basic_ios_char_setstate(base, state);
4281     return this;
4282 }
4283
4284 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z */
4285 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z */
4286 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z */
4287 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z */
4288 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint, 8)
4289 basic_ostream_char* __thiscall basic_ostream_char_print_uint(basic_ostream_char *this, unsigned int val)
4290 {
4291     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4292     int state = IOSTATE_goodbit;
4293
4294     TRACE("(%p %u)\n", this, val);
4295
4296     if(basic_ostream_char_sentry_create(this)) {
4297         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4298         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4299         ostreambuf_iterator_char dest = {0, strbuf};
4300
4301         num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4302     }
4303     basic_ostream_char_sentry_destroy(this);
4304
4305     basic_ios_char_setstate(base, state);
4306     return this;
4307 }
4308
4309 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z */
4310 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z */
4311 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_float, 8)
4312 basic_ostream_char* __thiscall basic_ostream_char_print_float(basic_ostream_char *this, float val)
4313 {
4314     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4315     int state = IOSTATE_goodbit;
4316
4317     TRACE("(%p %f)\n", this, val);
4318
4319     if(basic_ostream_char_sentry_create(this)) {
4320         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4321         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4322         ostreambuf_iterator_char dest = {0, strbuf};
4323
4324         num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4325     }
4326     basic_ostream_char_sentry_destroy(this);
4327
4328     basic_ios_char_setstate(base, state);
4329     return this;
4330 }
4331
4332 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z */
4333 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z */
4334 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_double, 12)
4335 basic_ostream_char* __thiscall basic_ostream_char_print_double(basic_ostream_char *this, double val)
4336 {
4337     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4338     int state = IOSTATE_goodbit;
4339
4340     TRACE("(%p %lf)\n", this, val);
4341
4342     if(basic_ostream_char_sentry_create(this)) {
4343         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4344         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4345         ostreambuf_iterator_char dest = {0, strbuf};
4346
4347         num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4348     }
4349     basic_ostream_char_sentry_destroy(this);
4350
4351     basic_ios_char_setstate(base, state);
4352     return this;
4353 }
4354
4355 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z */
4356 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z */
4357 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ldouble, 12)
4358 basic_ostream_char* __thiscall basic_ostream_char_print_ldouble(basic_ostream_char *this, double val)
4359 {
4360     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4361     int state = IOSTATE_goodbit;
4362
4363     TRACE("(%p %lf)\n", this, val);
4364
4365     if(basic_ostream_char_sentry_create(this)) {
4366         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4367         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4368         ostreambuf_iterator_char dest = {0, strbuf};
4369
4370         num_put_char_put_ldouble(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4371     }
4372     basic_ostream_char_sentry_destroy(this);
4373
4374     basic_ios_char_setstate(base, state);
4375     return this;
4376 }
4377
4378 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4379 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4380 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_streambuf, 8)
4381 basic_ostream_char* __thiscall basic_ostream_char_print_streambuf(basic_ostream_char *this, basic_streambuf_char *val)
4382 {
4383     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4384     IOSB_iostate state = IOSTATE_badbit;
4385     int c = '\n';
4386
4387     TRACE("(%p %p)\n", this, val);
4388
4389     if(basic_ostream_char_sentry_create(this)) {
4390         for(c = basic_streambuf_char_sgetc(val); c!=EOF;
4391                 c = basic_streambuf_char_snextc(val)) {
4392             state = IOSTATE_goodbit;
4393
4394             if(basic_streambuf_char_sputc(base->strbuf, c) == EOF) {
4395                 state = IOSTATE_badbit;
4396                 break;
4397             }
4398         }
4399     }else {
4400         state = IOSTATE_badbit;
4401     }
4402     basic_ostream_char_sentry_destroy(this);
4403
4404     ios_base_width_set(&base->base, 0);
4405     basic_ios_char_setstate(base, state);
4406     return this;
4407 }
4408
4409 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z */
4410 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z */
4411 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ptr, 8)
4412 basic_ostream_char* __thiscall basic_ostream_char_print_ptr(basic_ostream_char *this, const void *val)
4413 {
4414     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4415     int state = IOSTATE_goodbit;
4416
4417     TRACE("(%p %p)\n", this, val);
4418
4419     if(basic_ostream_char_sentry_create(this)) {
4420         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4421         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4422         ostreambuf_iterator_char dest = {0, strbuf};
4423
4424         num_put_char_put_ptr(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4425     }
4426     basic_ostream_char_sentry_destroy(this);
4427
4428     basic_ios_char_setstate(base, state);
4429     return this;
4430 }
4431
4432 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z */
4433 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z */
4434 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int64, 12)
4435 basic_ostream_char* __thiscall basic_ostream_char_print_int64(basic_ostream_char *this, __int64 val)
4436 {
4437     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4438     int state = IOSTATE_goodbit;
4439
4440     TRACE("(%p)\n", this);
4441
4442     if(basic_ostream_char_sentry_create(this)) {
4443         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4444         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4445         ostreambuf_iterator_char dest = {0, strbuf};
4446
4447         num_put_char_put_int64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4448     }
4449     basic_ostream_char_sentry_destroy(this);
4450
4451     basic_ios_char_setstate(base, state);
4452     return this;
4453 }
4454
4455 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z */
4456 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z */
4457 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint64, 12)
4458 basic_ostream_char* __thiscall basic_ostream_char_print_uint64(basic_ostream_char *this, unsigned __int64 val)
4459 {
4460     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4461     int state = IOSTATE_goodbit;
4462
4463     TRACE("(%p)\n", this);
4464
4465     if(basic_ostream_char_sentry_create(this)) {
4466         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4467         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4468         ostreambuf_iterator_char dest = {0, strbuf};
4469
4470         num_put_char_put_uint64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4471     }
4472     basic_ostream_char_sentry_destroy(this);
4473
4474     basic_ios_char_setstate(base, state);
4475     return this;
4476 }
4477
4478 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z */
4479 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z */
4480 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_bool, 8)
4481 basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char *this, MSVCP_bool val)
4482 {
4483     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4484     int state = IOSTATE_goodbit;
4485
4486     TRACE("(%p %x)\n", this, val);
4487
4488     if(basic_ostream_char_sentry_create(this)) {
4489         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4490         const num_put *numput = num_put_char_use_facet(strbuf->loc);
4491         ostreambuf_iterator_char dest = {0, strbuf};
4492
4493         num_put_char_put_bool(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4494     }
4495     basic_ostream_char_sentry_destroy(this);
4496
4497     basic_ios_char_setstate(base, state);
4498     return this;
4499 }
4500
4501 /* ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
4502 /* ?endl@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
4503 basic_ostream_char* __cdecl basic_ostream_char_endl(basic_ostream_char *ostr)
4504 {
4505     TRACE("(%p)\n", ostr);
4506
4507     basic_ostream_char_put(ostr, '\n');
4508     basic_ostream_char_flush(ostr);
4509     return ostr;
4510 }
4511
4512 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
4513 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
4514 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func, 8)
4515 basic_ostream_char* __thiscall basic_ostream_char_print_func(basic_ostream_char *this,
4516         basic_ostream_char* (__cdecl *pfunc)(basic_ostream_char*))
4517 {
4518     TRACE("(%p %p)\n", this, pfunc);
4519     pfunc(this);
4520     return this;
4521 }
4522
4523 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */
4524 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */
4525 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_basic_ios, 8)
4526 basic_ostream_char* __thiscall basic_ostream_char_print_func_basic_ios(basic_ostream_char *this,
4527         basic_ios_char* (__cdecl *pfunc)(basic_ios_char*))
4528 {
4529     TRACE("(%p %p)\n", this, pfunc);
4530     pfunc(basic_ostream_char_get_basic_ios(this));
4531     return this;
4532 }
4533
4534 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
4535 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
4536 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_ios_base, 8)
4537 basic_ostream_char* __thiscall basic_ostream_char_print_func_ios_base(
4538         basic_ostream_char *this, ios_base* (__cdecl *pfunc)(ios_base*))
4539 {
4540     TRACE("(%p %p)\n", this, pfunc);
4541     pfunc(&basic_ostream_char_get_basic_ios(this)->base);
4542     return this;
4543 }
4544
4545 /* Caution: basic_ostream uses virtual inheritance. */
4546 static inline basic_ios_wchar* basic_ostream_wchar_get_basic_ios(basic_ostream_wchar *this)
4547 {
4548     return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
4549 }
4550
4551 static inline basic_ios_wchar* basic_ostream_wchar_to_basic_ios(basic_ostream_wchar *ptr)
4552 {
4553     return (basic_ios_wchar*)((char*)ptr+basic_ostream_wchar_vbtable[1]);
4554 }
4555
4556 static inline basic_ostream_wchar* basic_ostream_wchar_from_basic_ios(basic_ios_wchar *ptr)
4557 {
4558     return (basic_ostream_wchar*)((char*)ptr-basic_ostream_wchar_vbtable[1]);
4559 }
4560
4561 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
4562 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
4563 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor, 16)
4564 basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor(basic_ostream_wchar *this,
4565         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
4566 {
4567     basic_ios_wchar *base;
4568
4569     TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init);
4570
4571     if(virt_init) {
4572         this->vbtable = basic_ostream_wchar_vbtable;
4573         base = basic_ostream_wchar_get_basic_ios(this);
4574         basic_ios_wchar_ctor(base);
4575     }else {
4576         base = basic_ostream_wchar_get_basic_ios(this);
4577     }
4578
4579     base->base.vtable = &MSVCP_basic_ostream_wchar_vtable;
4580     basic_ios_wchar_init(base, strbuf, isstd);
4581     return this;
4582 }
4583
4584 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
4585 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
4586 DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor, 16)
4587 basic_ostream_wchar* __thiscall basic_ostream_short_ctor(basic_ostream_wchar *this,
4588         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
4589 {
4590     basic_ostream_wchar_ctor(this, strbuf, isstd, virt_init);
4591     basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable;
4592     return this;
4593 }
4594
4595 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
4596 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
4597 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor_uninitialized, 16)
4598 basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor_uninitialized(basic_ostream_wchar *this,
4599         int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
4600 {
4601     basic_ios_wchar *base;
4602
4603     TRACE("(%p %d %x)\n", this, uninitialized, addstd);
4604
4605     if(virt_init) {
4606         this->vbtable = basic_ostream_wchar_vbtable;
4607         base = basic_ostream_wchar_get_basic_ios(this);
4608         basic_ios_wchar_ctor(base);
4609     }else {
4610         base = basic_ostream_wchar_get_basic_ios(this);
4611     }
4612
4613     base->base.vtable = &MSVCP_basic_ostream_wchar_vtable;
4614     if(addstd)
4615         ios_base_Addstd(&base->base);
4616     return this;
4617 }
4618
4619 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
4620 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
4621 DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor_uninitialized, 16)
4622 basic_ostream_wchar* __thiscall basic_ostream_short_ctor_uninitialized(basic_ostream_wchar *this,
4623         int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
4624 {
4625     basic_ostream_wchar_ctor_uninitialized(this, uninitialized, addstd, virt_init);
4626     basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable;
4627     return this;
4628 }
4629
4630 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
4631 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
4632 /* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UAE@XZ */
4633 /* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
4634 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_dtor, 4)
4635 void __thiscall basic_ostream_wchar_dtor(basic_ios_wchar *base)
4636 {
4637     basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base);
4638
4639     /* don't destroy virtual base here */
4640     TRACE("(%p)\n", this);
4641 }
4642
4643 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4644 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4645 /* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
4646 /* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
4647 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vbase_dtor, 4)
4648 void __thiscall basic_ostream_wchar_vbase_dtor(basic_ostream_wchar *this)
4649 {
4650     TRACE("(%p)\n", this);
4651     basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(this));
4652     basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(this));
4653 }
4654
4655 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vector_dtor, 8)
4656 basic_ostream_wchar* __thiscall basic_ostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
4657 {
4658     basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base);
4659
4660     TRACE("(%p %x)\n", this, flags);
4661
4662     if(flags & 2) {
4663         /* we have an array, with the number of elements stored before the first object */
4664         INT_PTR i, *ptr = (INT_PTR *)this-1;
4665
4666         for(i=*ptr-1; i>=0; i--)
4667             basic_ostream_wchar_vbase_dtor(this+i);
4668         MSVCRT_operator_delete(ptr);
4669     } else {
4670         basic_ostream_wchar_vbase_dtor(this);
4671         if(flags & 1)
4672             MSVCRT_operator_delete(this);
4673     }
4674
4675     return this;
4676 }
4677
4678 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
4679 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
4680 /* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */
4681 /* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */
4682 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_flush, 4)
4683 basic_ostream_wchar* __thiscall basic_ostream_wchar_flush(basic_ostream_wchar *this)
4684 {
4685     /* this function is not matching C++ specification */
4686     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4687
4688     TRACE("(%p)\n", this);
4689
4690     if(basic_ios_wchar_rdbuf_get(base) && ios_base_good(&base->base)
4691             && basic_streambuf_wchar_pubsync(basic_ios_wchar_rdbuf_get(base))==-1)
4692         basic_ios_wchar_setstate(base, IOSTATE_badbit);
4693     return this;
4694 }
4695
4696 /* ?flush@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
4697 /* ?flush@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
4698 /* ?flush@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */
4699 /* ?flush@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
4700 basic_ostream_wchar* __cdecl flush_ostream_wchar(basic_ostream_wchar *ostream)
4701 {
4702     return basic_ostream_wchar_flush(ostream);
4703 }
4704
4705 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4706 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4707 /* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
4708 /* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
4709 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar__Osfx, 4)
4710 void __thiscall basic_ostream_wchar__Osfx(basic_ostream_wchar *this)
4711 {
4712     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4713
4714     TRACE("(%p)\n", this);
4715
4716     if(base->base.fmtfl & FMTFLAG_unitbuf)
4717         basic_ostream_wchar_flush(this);
4718 }
4719
4720 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4721 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4722 /* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
4723 /* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
4724 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_osfx, 4)
4725 void __thiscall basic_ostream_wchar_osfx(basic_ostream_wchar *this)
4726 {
4727     TRACE("(%p)\n", this);
4728     basic_ostream_wchar__Osfx(this);
4729 }
4730
4731 static BOOL basic_ostream_wchar_sentry_create(basic_ostream_wchar *ostr)
4732 {
4733     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
4734
4735     if(basic_ios_wchar_rdbuf_get(base))
4736         basic_streambuf_wchar__Lock(base->strbuf);
4737
4738     if(ios_base_good(&base->base) && base->stream)
4739         basic_ostream_wchar_flush(base->stream);
4740
4741     return ios_base_good(&base->base);
4742 }
4743
4744 static void basic_ostream_wchar_sentry_destroy(basic_ostream_wchar *ostr)
4745 {
4746     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
4747
4748     if(ios_base_good(&base->base) && !__uncaught_exception())
4749         basic_ostream_wchar_osfx(ostr);
4750
4751     if(basic_ios_wchar_rdbuf_get(base))
4752         basic_streambuf_wchar__Unlock(base->strbuf);
4753 }
4754
4755 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ */
4756 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ */
4757 /* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE_NXZ */
4758 /* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ */
4759 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_opfx, 4)
4760 MSVCP_bool __thiscall basic_ostream_wchar_opfx(basic_ostream_wchar *this)
4761 {
4762     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4763
4764     TRACE("(%p)\n", this);
4765
4766     if(ios_base_good(&base->base) && base->stream)
4767         basic_ostream_wchar_flush(base->stream);
4768     return ios_base_good(&base->base);
4769 }
4770
4771 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
4772 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
4773 /* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */
4774 /* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */
4775 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_put, 8)
4776 basic_ostream_wchar* __thiscall basic_ostream_wchar_put(basic_ostream_wchar *this, wchar_t ch)
4777 {
4778     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4779
4780     TRACE("(%p %c)\n", this, ch);
4781
4782     if(!basic_ostream_wchar_sentry_create(this)
4783             || basic_streambuf_wchar_sputc(base->strbuf, ch)==WEOF) {
4784         basic_ostream_wchar_sentry_destroy(this);
4785         basic_ios_wchar_setstate(base, IOSTATE_badbit);
4786         return this;
4787     }
4788
4789     basic_ostream_wchar_sentry_destroy(this);
4790     return this;
4791 }
4792
4793 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */
4794 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */
4795 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */
4796 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */
4797 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp, 16)
4798 basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp(basic_ostream_wchar *this, streamoff off, int way)
4799 {
4800     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4801
4802     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way);
4803
4804     if(!ios_base_fail(&base->base)) {
4805         fpos_int seek;
4806
4807         basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
4808                 &seek, off, way, OPENMODE_out);
4809         if(seek.off==-1 && seek.pos==0 && seek.state==0)
4810             basic_ios_wchar_setstate(base, IOSTATE_failbit);
4811     }
4812     return this;
4813 }
4814
4815 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4816 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4817 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4818 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4819 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp_fpos, 28)
4820 basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp_fpos(basic_ostream_wchar *this, fpos_int pos)
4821 {
4822     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4823
4824     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
4825
4826     if(!ios_base_fail(&base->base)) {
4827         fpos_int seek;
4828
4829         basic_streambuf_wchar_pubseekpos(basic_ios_wchar_rdbuf_get(base),
4830                 &seek, pos, OPENMODE_out);
4831         if(seek.off==-1 && seek.pos==0 && seek.state==0)
4832             basic_ios_wchar_setstate(base, IOSTATE_failbit);
4833     }
4834     return this;
4835 }
4836
4837 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4838 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4839 /* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4840 /* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4841 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_tellp, 8)
4842 fpos_int* __thiscall basic_ostream_wchar_tellp(basic_ostream_wchar *this, fpos_int *ret)
4843 {
4844     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4845
4846     TRACE("(%p)\n", this);
4847
4848     if(!ios_base_fail(&base->base)) {
4849         basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
4850                 ret, 0, SEEKDIR_cur, OPENMODE_out);
4851     }else {
4852         ret->off = -1;
4853         ret->pos = 0;
4854         ret->state = 0;
4855     }
4856     return ret;
4857 }
4858
4859 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_WH@Z */
4860 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z */
4861 /* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@PBGH@Z */
4862 /* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z */
4863 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_write, 16)
4864 basic_ostream_wchar* __thiscall basic_ostream_wchar_write(basic_ostream_wchar *this, const wchar_t *str, streamsize count)
4865 {
4866     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4867
4868     TRACE("(%p %s %s)\n", this, debugstr_w(str), wine_dbgstr_longlong(count));
4869
4870     if(!basic_ostream_wchar_sentry_create(this)
4871             || basic_streambuf_wchar_sputn(base->strbuf, str, count)!=count) {
4872         basic_ostream_wchar_sentry_destroy(this);
4873         basic_ios_wchar_setstate(base, IOSTATE_badbit);
4874         return this;
4875     }
4876
4877     basic_ostream_wchar_sentry_destroy(this);
4878     return this;
4879 }
4880
4881 static basic_ostream_wchar* basic_ostream_print_short(basic_ostream_wchar *this, short val, const num_put *numput)
4882 {
4883     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4884     int state = IOSTATE_goodbit;
4885
4886     TRACE("(%p %d)\n", this, val);
4887
4888     if(basic_ostream_wchar_sentry_create(this)) {
4889         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4890         ostreambuf_iterator_wchar dest = {0, strbuf};
4891
4892         num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base),
4893                 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
4894                 ? (LONG)((unsigned short)val) : (LONG)val);
4895     }
4896     basic_ostream_wchar_sentry_destroy(this);
4897
4898     basic_ios_wchar_setstate(base, state);
4899     return this;
4900 }
4901
4902 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@F@Z */
4903 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z */
4904 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_short, 8)
4905 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_short(basic_ostream_wchar *this, short val)
4906 {
4907     return basic_ostream_print_short(this, val, num_put_wchar_use_facet(
4908                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4909 }
4910
4911 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@F@Z */
4912 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z */
4913 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_short, 8)
4914 basic_ostream_wchar* __thiscall basic_ostream_short_print_short(basic_ostream_wchar *this, short val)
4915 {
4916     return basic_ostream_print_short(this, val, num_put_short_use_facet(
4917                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4918 }
4919
4920 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@G@Z */
4921 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z */
4922 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ushort, 8)
4923 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ushort(basic_ostream_wchar *this, unsigned short val)
4924 {
4925     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4926     int state = IOSTATE_goodbit;
4927
4928     TRACE("(%p %u)\n", this, val);
4929
4930     if(basic_ostream_wchar_sentry_create(this)) {
4931         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4932         const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4933         ostreambuf_iterator_wchar dest = {0, strbuf};
4934
4935         num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4936     }
4937     basic_ostream_wchar_sentry_destroy(this);
4938
4939     basic_ios_wchar_setstate(base, state);
4940     return this;
4941 }
4942
4943 static basic_ostream_wchar* basic_ostream_print_int(basic_ostream_wchar *this, int val, const num_put *numput)
4944 {
4945     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4946     int state = IOSTATE_goodbit;
4947
4948     TRACE("(%p %d)\n", this, val);
4949
4950     if(basic_ostream_wchar_sentry_create(this)) {
4951         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4952         ostreambuf_iterator_wchar dest = {0, strbuf};
4953
4954         num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4955     }
4956     basic_ostream_wchar_sentry_destroy(this);
4957
4958     basic_ios_wchar_setstate(base, state);
4959     return this;
4960 }
4961
4962 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z */
4963 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z */
4964 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@J@Z */
4965 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z */
4966 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int, 8)
4967 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int(basic_ostream_wchar *this, int val)
4968 {
4969     return basic_ostream_print_int(this, val, num_put_wchar_use_facet(
4970                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4971 }
4972
4973 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@H@Z */
4974 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z */
4975 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@J@Z */
4976 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z */
4977 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int, 8)
4978 basic_ostream_wchar* __thiscall basic_ostream_short_print_int(basic_ostream_wchar *this, int val)
4979 {
4980     return basic_ostream_print_int(this, val, num_put_short_use_facet(
4981                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4982 }
4983
4984 static basic_ostream_wchar* basic_ostream_print_uint(basic_ostream_wchar *this, unsigned int val, const num_put *numput)
4985 {
4986     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4987     int state = IOSTATE_goodbit;
4988
4989     TRACE("(%p %u)\n", this, val);
4990
4991     if(basic_ostream_wchar_sentry_create(this)) {
4992         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4993         ostreambuf_iterator_wchar dest = {0, strbuf};
4994
4995         num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4996     }
4997     basic_ostream_wchar_sentry_destroy(this);
4998
4999     basic_ios_wchar_setstate(base, state);
5000     return this;
5001 }
5002
5003 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@I@Z */
5004 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z */
5005 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@K@Z */
5006 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z */
5007 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint, 8)
5008 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint(basic_ostream_wchar *this, unsigned int val)
5009 {
5010     return basic_ostream_print_uint(this, val, num_put_wchar_use_facet(
5011                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5012 }
5013
5014 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@I@Z */
5015 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z */
5016 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@K@Z */
5017 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z */
5018 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint, 8)
5019 basic_ostream_wchar* __thiscall basic_ostream_short_print_uint(basic_ostream_wchar *this, unsigned int val)
5020 {
5021     return basic_ostream_print_uint(this, val, num_put_short_use_facet(
5022                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5023 }
5024
5025 static basic_ostream_wchar* basic_ostream_print_float(basic_ostream_wchar *this, float val, const num_put *numput)
5026 {
5027     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5028     int state = IOSTATE_goodbit;
5029
5030     TRACE("(%p %f)\n", this, val);
5031
5032     if(basic_ostream_wchar_sentry_create(this)) {
5033         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5034         ostreambuf_iterator_wchar dest = {0, strbuf};
5035
5036         num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5037     }
5038     basic_ostream_wchar_sentry_destroy(this);
5039
5040     basic_ios_wchar_setstate(base, state);
5041     return this;
5042 }
5043
5044 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@M@Z */
5045 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z */
5046 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_float, 8)
5047 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_float(basic_ostream_wchar *this, float val)
5048 {
5049     return basic_ostream_print_float(this, val, num_put_wchar_use_facet(
5050                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5051 }
5052
5053 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@M@Z */
5054 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z */
5055 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_float, 8)
5056 basic_ostream_wchar* __thiscall basic_ostream_short_print_float(basic_ostream_wchar *this, float val)
5057 {
5058     return basic_ostream_print_float(this, val, num_put_short_use_facet(
5059                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5060 }
5061
5062 static basic_ostream_wchar* basic_ostream_print_double(basic_ostream_wchar *this, double val, const num_put *numput)
5063 {
5064     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5065     int state = IOSTATE_goodbit;
5066
5067     TRACE("(%p %lf)\n", this, val);
5068
5069     if(basic_ostream_wchar_sentry_create(this)) {
5070         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5071         ostreambuf_iterator_wchar dest = {0, strbuf};
5072
5073         num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5074     }
5075     basic_ostream_wchar_sentry_destroy(this);
5076
5077     basic_ios_wchar_setstate(base, state);
5078     return this;
5079 }
5080
5081 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@N@Z */
5082 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z */
5083 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_double, 12)
5084 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_double(basic_ostream_wchar *this, double val)
5085 {
5086     return basic_ostream_print_double(this, val, num_put_wchar_use_facet(
5087                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5088 }
5089
5090 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@N@Z */
5091 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z */
5092 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_double, 12)
5093 basic_ostream_wchar* __thiscall basic_ostream_short_print_double(basic_ostream_wchar *this, double val)
5094 {
5095     return basic_ostream_print_double(this, val, num_put_short_use_facet(
5096                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5097 }
5098
5099 static basic_ostream_wchar* basic_ostream_print_ldouble(basic_ostream_wchar *this, double val, const num_put *numput)
5100 {
5101     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5102     int state = IOSTATE_goodbit;
5103
5104     TRACE("(%p %lf)\n", this, val);
5105
5106     if(basic_ostream_wchar_sentry_create(this)) {
5107         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5108         ostreambuf_iterator_wchar dest = {0, strbuf};
5109
5110         num_put_wchar_put_ldouble(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5111     }
5112     basic_ostream_wchar_sentry_destroy(this);
5113
5114     basic_ios_wchar_setstate(base, state);
5115     return this;
5116 }
5117
5118 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@O@Z */
5119 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z */
5120 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ldouble, 12)
5121 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ldouble(basic_ostream_wchar *this, double val)
5122 {
5123     return basic_ostream_print_ldouble(this, val, num_put_wchar_use_facet(
5124                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5125 }
5126
5127 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@O@Z */
5128 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z */
5129 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ldouble, 12)
5130 basic_ostream_wchar* __thiscall basic_ostream_short_print_ldouble(basic_ostream_wchar *this, double val)
5131 {
5132     return basic_ostream_print_ldouble(this, val, num_put_short_use_facet(
5133                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5134 }
5135
5136 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
5137 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
5138 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
5139 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
5140 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_streambuf, 8)
5141 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_streambuf(basic_ostream_wchar *this, basic_streambuf_wchar *val)
5142 {
5143     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5144     IOSB_iostate state = IOSTATE_badbit;
5145     unsigned short c = '\n';
5146
5147     TRACE("(%p %p)\n", this, val);
5148
5149     if(basic_ostream_wchar_sentry_create(this)) {
5150         for(c = basic_streambuf_wchar_sgetc(val); c!=WEOF;
5151                 c = basic_streambuf_wchar_snextc(val)) {
5152             state = IOSTATE_goodbit;
5153
5154             if(basic_streambuf_wchar_sputc(base->strbuf, c) == WEOF) {
5155                 state = IOSTATE_badbit;
5156                 break;
5157             }
5158         }
5159     }else {
5160         state = IOSTATE_badbit;
5161     }
5162     basic_ostream_wchar_sentry_destroy(this);
5163
5164     ios_base_width_set(&base->base, 0);
5165     basic_ios_wchar_setstate(base, state);
5166     return this;
5167 }
5168
5169 static basic_ostream_wchar* basic_ostream_print_ptr(basic_ostream_wchar *this, const void *val, const num_put *numput)
5170 {
5171     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5172     int state = IOSTATE_goodbit;
5173
5174     TRACE("(%p %p)\n", this, val);
5175
5176     if(basic_ostream_wchar_sentry_create(this)) {
5177         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5178         ostreambuf_iterator_wchar dest = {0, strbuf};
5179
5180         num_put_wchar_put_ptr(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5181     }
5182     basic_ostream_wchar_sentry_destroy(this);
5183
5184     basic_ios_wchar_setstate(base, state);
5185     return this;
5186 }
5187
5188 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PBX@Z */
5189 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z */
5190 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ptr, 8)
5191 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ptr(basic_ostream_wchar *this, const void *val)
5192 {
5193     return basic_ostream_print_ptr(this, val, num_put_wchar_use_facet(
5194                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5195 }
5196
5197 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z */
5198 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z */
5199 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ptr, 8)
5200 basic_ostream_wchar* __thiscall basic_ostream_short_print_ptr(basic_ostream_wchar *this, const void *val)
5201 {
5202     return basic_ostream_print_ptr(this, val, num_put_short_use_facet(
5203                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5204 }
5205
5206 static basic_ostream_wchar* basic_ostream_print_int64(basic_ostream_wchar *this, __int64 val, const num_put *numput)
5207 {
5208     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5209     int state = IOSTATE_goodbit;
5210
5211     TRACE("(%p)\n", this);
5212
5213     if(basic_ostream_wchar_sentry_create(this)) {
5214         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5215         ostreambuf_iterator_wchar dest = {0, strbuf};
5216
5217         num_put_wchar_put_int64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5218     }
5219     basic_ostream_wchar_sentry_destroy(this);
5220
5221     basic_ios_wchar_setstate(base, state);
5222     return this;
5223 }
5224
5225 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_J@Z */
5226 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z */
5227 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int64, 12)
5228 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int64(basic_ostream_wchar *this, __int64 val)
5229 {
5230     return basic_ostream_print_int64(this, val, num_put_wchar_use_facet(
5231                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5232 }
5233
5234 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_J@Z */
5235 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z */
5236 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int64, 12)
5237 basic_ostream_wchar* __thiscall basic_ostream_short_print_int64(basic_ostream_wchar *this, __int64 val)
5238 {
5239     return basic_ostream_print_int64(this, val, num_put_short_use_facet(
5240                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5241 }
5242
5243 static basic_ostream_wchar* basic_ostream_print_uint64(basic_ostream_wchar *this, unsigned __int64 val, const num_put *numput)
5244 {
5245     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5246     int state = IOSTATE_goodbit;
5247
5248     TRACE("(%p)\n", this);
5249
5250     if(basic_ostream_wchar_sentry_create(this)) {
5251         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5252         ostreambuf_iterator_wchar dest = {0, strbuf};
5253
5254         num_put_wchar_put_uint64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5255     }
5256     basic_ostream_wchar_sentry_destroy(this);
5257
5258     basic_ios_wchar_setstate(base, state);
5259     return this;
5260 }
5261
5262 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_K@Z */
5263 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z */
5264 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint64, 12)
5265 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint64(basic_ostream_wchar *this, unsigned __int64 val)
5266 {
5267     return basic_ostream_print_uint64(this, val, num_put_wchar_use_facet(
5268                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5269 }
5270
5271 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_K@Z */
5272 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z */
5273 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint64, 12)
5274 basic_ostream_wchar* __thiscall basic_ostream_short_print_uint64(basic_ostream_wchar *this, unsigned __int64 val)
5275 {
5276     return basic_ostream_print_uint64(this, val, num_put_short_use_facet(
5277                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5278 }
5279
5280 static basic_ostream_wchar* basic_ostream_print_bool(basic_ostream_wchar *this, MSVCP_bool val, const num_put *numput)
5281 {
5282     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5283     int state = IOSTATE_goodbit;
5284
5285     TRACE("(%p %x)\n", this, val);
5286
5287     if(basic_ostream_wchar_sentry_create(this)) {
5288         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5289         ostreambuf_iterator_wchar dest = {0, strbuf};
5290
5291         num_put_wchar_put_bool(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5292     }
5293     basic_ostream_wchar_sentry_destroy(this);
5294
5295     basic_ios_wchar_setstate(base, state);
5296     return this;
5297 }
5298
5299 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_N@Z */
5300 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z */
5301 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_bool, 8)
5302 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_bool(basic_ostream_wchar *this, MSVCP_bool val)
5303 {
5304     return basic_ostream_print_bool(this, val, num_put_wchar_use_facet(
5305                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5306 }
5307
5308 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_N@Z */
5309 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z */
5310 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_bool, 8)
5311 basic_ostream_wchar* __thiscall basic_ostream_short_print_bool(basic_ostream_wchar *this, MSVCP_bool val)
5312 {
5313     return basic_ostream_print_bool(this, val, num_put_short_use_facet(
5314                 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5315 }
5316
5317 /* ?endl@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
5318 /* ?endl@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
5319 /* ?endl@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */
5320 /* ?endl@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
5321 basic_ostream_wchar* __cdecl basic_ostream_wchar_endl(basic_ostream_wchar *ostr)
5322 {
5323     TRACE("(%p)\n", ostr);
5324
5325     basic_ostream_wchar_put(ostr, '\n');
5326     basic_ostream_wchar_flush(ostr);
5327     return ostr;
5328 }
5329
5330 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
5331 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
5332 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
5333 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
5334 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func, 8)
5335 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func(basic_ostream_wchar *this,
5336         basic_ostream_wchar* (__cdecl *pfunc)(basic_ostream_wchar*))
5337 {
5338     TRACE("(%p %p)\n", this, pfunc);
5339     pfunc(this);
5340     return this;
5341 }
5342
5343 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */
5344 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */
5345 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */
5346 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */
5347 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_basic_ios, 8)
5348 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_basic_ios(basic_ostream_wchar *this,
5349         basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*))
5350 {
5351     TRACE("(%p %p)\n", this, pfunc);
5352     pfunc(basic_ostream_wchar_get_basic_ios(this));
5353     return this;
5354 }
5355
5356 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
5357 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
5358 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
5359 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
5360 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_ios_base, 8)
5361 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_ios_base(
5362         basic_ostream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*))
5363 {
5364     TRACE("(%p %p)\n", this, pfunc);
5365     pfunc(&basic_ostream_wchar_get_basic_ios(this)->base);
5366     return this;
5367 }
5368
5369 /* Caution: basic_istream uses virtual inheritance. */
5370 static inline basic_ios_char* basic_istream_char_get_basic_ios(basic_istream_char *this)
5371 {
5372     return (basic_ios_char*)((char*)this+this->vbtable[1]);
5373 }
5374
5375 static inline basic_ios_char* basic_istream_char_to_basic_ios(basic_istream_char *ptr)
5376 {
5377     return (basic_ios_char*)((char*)ptr+basic_istream_char_vbtable[1]);
5378 }
5379
5380 static inline basic_istream_char* basic_istream_char_from_basic_ios(basic_ios_char *ptr)
5381 {
5382     return (basic_istream_char*)((char*)ptr-basic_istream_char_vbtable[1]);
5383 }
5384
5385 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5386 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5387 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_init, 20)
5388 basic_istream_char* __thiscall basic_istream_char_ctor_init(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
5389 {
5390     basic_ios_char *base;
5391
5392     TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
5393
5394     if(virt_init) {
5395         this->vbtable = basic_istream_char_vbtable;
5396         base = basic_istream_char_get_basic_ios(this);
5397         basic_ios_char_ctor(base);
5398     }else {
5399         base = basic_istream_char_get_basic_ios(this);
5400     }
5401
5402     base->base.vtable = &MSVCP_basic_istream_char_vtable;
5403     this->count = 0;
5404     if(!noinit)
5405         basic_ios_char_init(base, strbuf, isstd);
5406     return this;
5407 }
5408
5409 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
5410 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
5411 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor, 16)
5412 basic_istream_char* __thiscall basic_istream_char_ctor(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
5413 {
5414     return basic_istream_char_ctor_init(this, strbuf, isstd, FALSE, virt_init);
5415 }
5416
5417 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */
5418 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
5419 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_uninitialized, 12)
5420 basic_istream_char* __thiscall basic_istream_char_ctor_uninitialized(basic_istream_char *this, int uninitialized, MSVCP_bool virt_init)
5421 {
5422     basic_ios_char *base;
5423
5424     TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
5425
5426     if(virt_init) {
5427         this->vbtable = basic_istream_char_vbtable;
5428         base = basic_istream_char_get_basic_ios(this);
5429         basic_ios_char_ctor(base);
5430     }else {
5431         base = basic_istream_char_get_basic_ios(this);
5432     }
5433
5434     base->base.vtable = &MSVCP_basic_istream_char_vtable;
5435     ios_base_Addstd(&base->base);
5436     return this;
5437 }
5438
5439 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ */
5440 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
5441 DEFINE_THISCALL_WRAPPER(basic_istream_char_dtor, 4)
5442 void __thiscall basic_istream_char_dtor(basic_ios_char *base)
5443 {
5444     basic_istream_char *this = basic_istream_char_from_basic_ios(base);
5445
5446     /* don't destroy virtual base here */
5447     TRACE("(%p)\n", this);
5448 }
5449
5450 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5451 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5452 DEFINE_THISCALL_WRAPPER(basic_istream_char_vbase_dtor, 4)
5453 void __thiscall basic_istream_char_vbase_dtor(basic_istream_char *this)
5454 {
5455     TRACE("(%p)\n", this);
5456     basic_istream_char_dtor(basic_istream_char_to_basic_ios(this));
5457     basic_ios_char_dtor(basic_istream_char_get_basic_ios(this));
5458 }
5459
5460 DEFINE_THISCALL_WRAPPER(basic_istream_char_vector_dtor, 8)
5461 basic_istream_char* __thiscall basic_istream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
5462 {
5463     basic_istream_char *this = basic_istream_char_from_basic_ios(base);
5464
5465     TRACE("(%p %x)\n", this, flags);
5466
5467     if(flags & 2) {
5468         /* we have an array, with the number of elements stored before the first object */
5469         INT_PTR i, *ptr = (INT_PTR *)this-1;
5470
5471         for(i=*ptr-1; i>=0; i--)
5472             basic_istream_char_vbase_dtor(this+i);
5473         MSVCRT_operator_delete(ptr);
5474     } else {
5475         basic_istream_char_vbase_dtor(this);
5476         if(flags & 1)
5477             MSVCRT_operator_delete(this);
5478     }
5479
5480     return this;
5481 }
5482
5483 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
5484 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
5485 DEFINE_THISCALL_WRAPPER(basic_istream_char__Ipfx, 8)
5486 MSVCP_bool __thiscall basic_istream_char__Ipfx(basic_istream_char *this, MSVCP_bool noskip)
5487 {
5488     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5489
5490     TRACE("(%p %d)\n", this, noskip);
5491
5492     if(ios_base_good(&base->base)) {
5493         if(basic_ios_char_tie_get(base))
5494             basic_ostream_char_flush(basic_ios_char_tie_get(base));
5495
5496         if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
5497             basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5498             const ctype_char *ctype = ctype_char_use_facet(base->strbuf->loc);
5499             int ch;
5500
5501             for(ch = basic_streambuf_char_sgetc(strbuf); ;
5502                     ch = basic_streambuf_char_snextc(strbuf)) {
5503                 if(ch == EOF) {
5504                     basic_ios_char_setstate(base, IOSTATE_eofbit);
5505                     break;
5506                 }
5507
5508                 if(!ctype_char_is_ch(ctype, _SPACE|_BLANK, ch))
5509                     break;
5510             }
5511         }
5512     }
5513
5514     if(!ios_base_good(&base->base)) {
5515         basic_ios_char_setstate(base, IOSTATE_failbit);
5516         return FALSE;
5517     }
5518
5519     return TRUE;
5520 }
5521
5522 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
5523 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
5524 DEFINE_THISCALL_WRAPPER(basic_istream_char_ipfx, 8)
5525 MSVCP_bool __thiscall basic_istream_char_ipfx(basic_istream_char *this, MSVCP_bool noskip)
5526 {
5527     return basic_istream_char__Ipfx(this, noskip);
5528 }
5529
5530 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5531 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5532 DEFINE_THISCALL_WRAPPER(basic_istream_char_isfx, 4)
5533 void __thiscall basic_istream_char_isfx(basic_istream_char *this)
5534 {
5535     TRACE("(%p)\n", this);
5536 }
5537
5538 static BOOL basic_istream_char_sentry_create(basic_istream_char *istr, MSVCP_bool noskip)
5539 {
5540     basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
5541
5542     if(basic_ios_char_rdbuf_get(base))
5543         call_basic_streambuf_char__Lock(base->strbuf);
5544
5545     return basic_istream_char_ipfx(istr, noskip);
5546 }
5547
5548 static void basic_istream_char_sentry_destroy(basic_istream_char *istr)
5549 {
5550     basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
5551
5552     if(basic_ios_char_rdbuf_get(base))
5553         call_basic_streambuf_char__Unlock(base->strbuf);
5554 }
5555
5556 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBEHXZ */
5557 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ */
5558 DEFINE_THISCALL_WRAPPER(basic_istream_char_gcount, 4)
5559 int __thiscall basic_istream_char_gcount(const basic_istream_char *this)
5560 {
5561     TRACE("(%p)\n", this);
5562     return this->count;
5563 }
5564
5565 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5566 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5567 DEFINE_THISCALL_WRAPPER(basic_istream_char_get, 4)
5568 int __thiscall basic_istream_char_get(basic_istream_char *this)
5569 {
5570     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5571     int ret;
5572
5573     TRACE("(%p)\n", this);
5574
5575     this->count = 0;
5576
5577     if(!basic_istream_char_sentry_create(this, TRUE)) {
5578         basic_istream_char_sentry_destroy(this);
5579         return EOF;
5580     }
5581
5582     ret = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(base));
5583     basic_istream_char_sentry_destroy(this);
5584     if(ret == EOF)
5585         basic_ios_char_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
5586     else
5587         this->count++;
5588
5589     return ret;
5590 }
5591
5592 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z */
5593 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z */
5594 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_ch, 8)
5595 basic_istream_char* __thiscall basic_istream_char_get_ch(basic_istream_char *this, char *ch)
5596 {
5597     int ret;
5598
5599     TRACE("(%p %p)\n", this, ch);
5600
5601     ret = basic_istream_char_get(this);
5602     if(ret != EOF)
5603         *ch = (char)ret;
5604     return this;
5605 }
5606
5607 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
5608 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
5609 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str_delim, 20)
5610 basic_istream_char* __thiscall basic_istream_char_get_str_delim(basic_istream_char *this, char *str, streamsize count, char delim)
5611 {
5612     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5613     int ch = delim;
5614
5615     TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
5616
5617     this->count = 0;
5618
5619     if(basic_istream_char_sentry_create(this, TRUE)) {
5620         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5621
5622         for(ch = basic_streambuf_char_sgetc(strbuf); count>1;
5623                 ch = basic_streambuf_char_snextc(strbuf)) {
5624             if(ch==EOF || ch==delim)
5625                 break;
5626
5627             *str++ = ch;
5628             this->count++;
5629             count--;
5630         }
5631     }
5632     basic_istream_char_sentry_destroy(this);
5633
5634     basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
5635             (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
5636     if(count > 0)
5637         *str = 0;
5638     return this;
5639 }
5640
5641 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5642 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5643 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str, 16)
5644 basic_istream_char* __thiscall basic_istream_char_get_str(basic_istream_char *this, char *str, streamsize count)
5645 {
5646     return basic_istream_char_get_str_delim(this, str, count, '\n');
5647 }
5648
5649 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
5650 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
5651 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf_delim, 12)
5652 basic_istream_char* __thiscall basic_istream_char_get_streambuf_delim(basic_istream_char *this, basic_streambuf_char *strbuf, char delim)
5653 {
5654     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5655     int ch = delim;
5656
5657     TRACE("(%p %p %c)\n", this, strbuf, delim);
5658
5659     this->count = 0;
5660
5661     if(basic_istream_char_sentry_create(this, TRUE)) {
5662         basic_streambuf_char *strbuf_read = basic_ios_char_rdbuf_get(base);
5663
5664         for(ch = basic_streambuf_char_sgetc(strbuf_read); ;
5665                 ch = basic_streambuf_char_snextc(strbuf_read)) {
5666             if(ch==EOF || ch==delim)
5667                 break;
5668
5669             if(basic_streambuf_char_sputc(strbuf, ch) == EOF)
5670                 break;
5671             this->count++;
5672         }
5673     }
5674     basic_istream_char_sentry_destroy(this);
5675
5676     basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
5677             (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
5678     return this;
5679 }
5680
5681 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
5682 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
5683 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf, 8)
5684 basic_istream_char* __thiscall basic_istream_char_get_streambuf(basic_istream_char *this, basic_streambuf_char *strbuf)
5685 {
5686     return basic_istream_char_get_streambuf_delim(this, strbuf, '\n');
5687 }
5688
5689 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
5690 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
5691 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline_delim, 20)
5692 basic_istream_char* __thiscall basic_istream_char_getline_delim(basic_istream_char *this, char *str, streamsize count, char delim)
5693 {
5694     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5695     int ch = (unsigned char)delim;
5696
5697     TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
5698
5699     this->count = 0;
5700
5701     if(basic_istream_char_sentry_create(this, TRUE) && count>0) {
5702         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5703
5704         while(count > 1) {
5705             ch = basic_streambuf_char_sbumpc(strbuf);
5706
5707             if(ch==EOF || ch==(unsigned char)delim)
5708                 break;
5709
5710             *str++ = ch;
5711             this->count++;
5712             count--;
5713         }
5714
5715         if(ch == (unsigned char)delim)
5716             this->count++;
5717         else if(ch != EOF) {
5718             ch = basic_streambuf_char_sgetc(strbuf);
5719
5720             if(ch == (unsigned char)delim) {
5721                 basic_streambuf_char__Gninc(strbuf);
5722                 this->count++;
5723             }
5724         }
5725     }
5726     basic_istream_char_sentry_destroy(this);
5727
5728     basic_ios_char_setstate(base, (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
5729             (!this->count || (ch!=(unsigned char)delim && ch!=EOF) ? IOSTATE_failbit : IOSTATE_goodbit));
5730     if(count > 0)
5731         *str = 0;
5732     return this;
5733 }
5734
5735 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5736 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5737 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline, 16)
5738 basic_istream_char* __thiscall basic_istream_char_getline(basic_istream_char *this, char *str, streamsize count)
5739 {
5740     return basic_istream_char_getline_delim(this, str, count, '\n');
5741 }
5742
5743 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@HH@Z */
5744 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
5745 DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 16)
5746 basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim)
5747 {
5748     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5749     int ch = (unsigned char)delim;
5750     unsigned int state;
5751
5752     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim);
5753
5754     this->count = 0;
5755
5756     if(basic_istream_char_sentry_create(this, TRUE)) {
5757         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5758         state = IOSTATE_goodbit;
5759
5760         while(count > 0) {
5761             ch = basic_streambuf_char_sbumpc(strbuf);
5762
5763             if(ch==EOF) {
5764                 state = IOSTATE_eofbit;
5765                 break;
5766             }
5767
5768             if(ch==(unsigned char)delim)
5769                 break;
5770
5771             this->count++;
5772             if(count != INT_MAX)
5773                 count--;
5774         }
5775     }else
5776         state = IOSTATE_failbit;
5777     basic_istream_char_sentry_destroy(this);
5778
5779     basic_ios_char_setstate(base, state);
5780     return this;
5781 }
5782
5783 /* ?ws@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z */
5784 /* ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
5785 basic_istream_char* __cdecl ws_basic_istream_char(basic_istream_char *istream)
5786 {
5787     basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
5788     int ch = '\n';
5789
5790     TRACE("(%p)\n", istream);
5791
5792     if(basic_istream_char_sentry_create(istream, TRUE)) {
5793         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5794         const ctype_char *ctype = ctype_char_use_facet(strbuf->loc);
5795
5796         for(ch = basic_streambuf_char_sgetc(strbuf); ctype_char_is_ch(ctype, _SPACE, ch);
5797                 ch = basic_streambuf_char_snextc(strbuf)) {
5798             if(ch == EOF)
5799                 break;
5800         }
5801     }
5802     basic_istream_char_sentry_destroy(istream);
5803
5804     if(ch == EOF)
5805         basic_ios_char_setstate(base, IOSTATE_eofbit);
5806     return istream;
5807 }
5808
5809 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5810 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5811 DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4)
5812 int __thiscall basic_istream_char_peek(basic_istream_char *this)
5813 {
5814     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5815     int ret = EOF;
5816
5817     TRACE("(%p)\n", this);
5818
5819     this->count = 0;
5820
5821     if(basic_istream_char_sentry_create(this, TRUE))
5822         ret = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
5823     basic_istream_char_sentry_destroy(this);
5824
5825     if (ret == EOF)
5826         basic_ios_char_setstate(base, IOSTATE_eofbit);
5827
5828     return ret;
5829 }
5830
5831 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADIH@Z */
5832 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_K_J@Z */
5833 static basic_istream_char* basic_istream_char__Read_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
5834 {
5835     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5836     IOSB_iostate state = IOSTATE_goodbit;
5837
5838     TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
5839
5840     if(basic_istream_char_sentry_create(this, TRUE)) {
5841         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5842
5843         this->count = basic_streambuf_char__Sgetn_s(strbuf, str, size, count);
5844         if(this->count != count)
5845             state |= IOSTATE_failbit | IOSTATE_eofbit;
5846     }else {
5847         this->count = 0;
5848     }
5849     basic_istream_char_sentry_destroy(this);
5850
5851     basic_ios_char_setstate(base, state);
5852     return this;
5853 }
5854
5855 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5856 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5857 DEFINE_THISCALL_WRAPPER(basic_istream_char_read, 16)
5858 basic_istream_char* __thiscall basic_istream_char_read(basic_istream_char *this, char *str, streamsize count)
5859 {
5860     return basic_istream_char__Read_s(this, str, count, count);
5861 }
5862
5863 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
5864 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
5865 static streamsize basic_istream_char__Readsome_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
5866 {
5867     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5868     IOSB_iostate state = IOSTATE_goodbit;
5869
5870     TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
5871
5872     this->count = 0;
5873
5874     if(basic_istream_char_sentry_create(this, TRUE)) {
5875         streamsize avail = basic_streambuf_char_in_avail(basic_ios_char_rdbuf_get(base));
5876         if(avail > count)
5877             avail = count;
5878
5879         if(avail == -1)
5880             state |= IOSTATE_eofbit;
5881         else if(avail > 0)
5882             basic_istream_char__Read_s(this, str, size, avail);
5883     }else {
5884         state |= IOSTATE_failbit;
5885     }
5886     basic_istream_char_sentry_destroy(this);
5887
5888     basic_ios_char_setstate(base, state);
5889     return this->count;
5890 }
5891
5892 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
5893 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
5894 DEFINE_THISCALL_WRAPPER(basic_istream_char_readsome, 16)
5895 streamsize __thiscall basic_istream_char_readsome(basic_istream_char *this, char *str, streamsize count)
5896 {
5897     return basic_istream_char__Readsome_s(this, str, count, count);
5898 }
5899
5900 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
5901 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
5902 DEFINE_THISCALL_WRAPPER(basic_istream_char_putback, 8)
5903 basic_istream_char* __thiscall basic_istream_char_putback(basic_istream_char *this, char ch)
5904 {
5905     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5906     IOSB_iostate state = IOSTATE_goodbit;
5907
5908     TRACE("(%p %c)\n", this, ch);
5909
5910     this->count = 0;
5911
5912     if(basic_istream_char_sentry_create(this, TRUE)) {
5913         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5914
5915         if(!ios_base_good(&base->base))
5916             state |= IOSTATE_failbit;
5917         else if(!strbuf || basic_streambuf_char_sputbackc(strbuf, ch)==EOF)
5918             state |= IOSTATE_badbit;
5919     }
5920     basic_istream_char_sentry_destroy(this);
5921
5922     basic_ios_char_setstate(base, state);
5923     return this;
5924 }
5925
5926 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
5927 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
5928 DEFINE_THISCALL_WRAPPER(basic_istream_char_unget, 4)
5929 basic_istream_char* __thiscall basic_istream_char_unget(basic_istream_char *this)
5930 {
5931     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5932     IOSB_iostate state = IOSTATE_goodbit;
5933
5934     TRACE("(%p)\n", this);
5935
5936     this->count = 0;
5937
5938     if(basic_istream_char_sentry_create(this, TRUE)) {
5939         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5940
5941         if(!ios_base_good(&base->base))
5942             state |= IOSTATE_failbit;
5943         else if(!strbuf || basic_streambuf_char_sungetc(strbuf)==EOF)
5944             state |= IOSTATE_badbit;
5945     }
5946     basic_istream_char_sentry_destroy(this);
5947
5948     basic_ios_char_setstate(base, state);
5949     return this;
5950 }
5951
5952 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5953 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5954 DEFINE_THISCALL_WRAPPER(basic_istream_char_sync, 4)
5955 int __thiscall basic_istream_char_sync(basic_istream_char *this)
5956 {
5957     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5958     basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5959
5960     TRACE("(%p)\n", this);
5961
5962     if(!strbuf)
5963         return -1;
5964
5965     if(basic_istream_char_sentry_create(this, TRUE)) {
5966         if(basic_streambuf_char_pubsync(strbuf) != -1) {
5967             basic_istream_char_sentry_destroy(this);
5968             return 0;
5969         }
5970     }
5971     basic_istream_char_sentry_destroy(this);
5972
5973     basic_ios_char_setstate(base, IOSTATE_badbit);
5974     return -1;
5975 }
5976
5977 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
5978 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
5979 DEFINE_THISCALL_WRAPPER(basic_istream_char_tellg, 8)
5980 fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int *ret)
5981 {
5982     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5983
5984     TRACE("(%p %p)\n", this, ret);
5985
5986     if(ios_base_fail(&base->base)) {
5987         ret->off = -1;
5988         ret->pos = 0;
5989         ret->state = 0;
5990         return ret;
5991     }
5992
5993     basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
5994             ret, 0, SEEKDIR_cur, OPENMODE_in);
5995
5996     if(ret->off==-1 && ret->pos==0 && ret->state==0)
5997         basic_ios_char_setstate(base, IOSTATE_failbit);
5998
5999     return ret;
6000 }
6001
6002 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
6003 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
6004 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg, 16)
6005 basic_istream_char* __thiscall basic_istream_char_seekg(basic_istream_char *this, streamoff off, int dir)
6006 {
6007     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6008
6009     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir);
6010
6011     if(!ios_base_fail(&base->base)) {
6012         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6013         fpos_int ret;
6014
6015         basic_streambuf_char_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
6016
6017         if(ret.off==-1 && ret.pos==0 && ret.state==0)
6018             basic_ios_char_setstate(base, IOSTATE_failbit);
6019         else
6020             basic_ios_char_clear(base, IOSTATE_goodbit);
6021         return this;
6022     }else
6023         basic_ios_char_clear(base, IOSTATE_goodbit);
6024
6025     return this;
6026 }
6027
6028 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
6029 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
6030 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg_fpos, 28)
6031 basic_istream_char* __thiscall basic_istream_char_seekg_fpos(basic_istream_char *this, fpos_int pos)
6032 {
6033     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6034
6035     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
6036
6037     if(!ios_base_fail(&base->base)) {
6038         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6039         fpos_int ret;
6040
6041         basic_streambuf_char_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
6042
6043         if(ret.off==-1 && ret.pos==0 && ret.state==0)
6044             basic_ios_char_setstate(base, IOSTATE_failbit);
6045         else
6046             basic_ios_char_clear(base, IOSTATE_goodbit);
6047         return this;
6048     }else
6049         basic_ios_char_clear(base, IOSTATE_goodbit);
6050
6051     return this;
6052 }
6053
6054 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z */
6055 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z */
6056 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_short, 8)
6057 basic_istream_char* __thiscall basic_istream_char_read_short(basic_istream_char *this, short *v)
6058 {
6059     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6060     int state = IOSTATE_goodbit;
6061
6062     TRACE("(%p %p)\n", this, v);
6063
6064     if(basic_istream_char_sentry_create(this, FALSE)) {
6065         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6066         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6067         istreambuf_iterator_char first={0}, last={0};
6068         LONG tmp;
6069
6070         first.strbuf = strbuf;
6071         num_get_char_get_long(numget, &last, first, last, &base->base, &state, &tmp);
6072
6073         if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
6074             *v = tmp;
6075         else
6076             state |= IOSTATE_failbit;
6077     }
6078     basic_istream_char_sentry_destroy(this);
6079
6080     basic_ios_char_setstate(base, state);
6081     return this;
6082 }
6083
6084 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z */
6085 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z */
6086 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ushort, 8)
6087 basic_istream_char* __thiscall basic_istream_char_read_ushort(basic_istream_char *this, unsigned short *v)
6088 {
6089     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6090     int state = IOSTATE_goodbit;
6091
6092     TRACE("(%p %p)\n", this, v);
6093
6094     if(basic_istream_char_sentry_create(this, FALSE)) {
6095         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6096         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6097         istreambuf_iterator_char first={0}, last={0};
6098
6099         first.strbuf = strbuf;
6100         num_get_char_get_ushort(numget, &last, first, last, &base->base, &state, v);
6101     }
6102     basic_istream_char_sentry_destroy(this);
6103
6104     basic_ios_char_setstate(base, state);
6105     return this;
6106 }
6107
6108 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z */
6109 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z */
6110 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int, 8)
6111 basic_istream_char* __thiscall basic_istream_char_read_int(basic_istream_char *this, int *v)
6112 {
6113     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6114     int state = IOSTATE_goodbit;
6115
6116     TRACE("(%p %p)\n", this, v);
6117
6118     if(basic_istream_char_sentry_create(this, FALSE)) {
6119         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6120         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6121         istreambuf_iterator_char first={0}, last={0};
6122
6123         first.strbuf = strbuf;
6124         num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
6125     }
6126     basic_istream_char_sentry_destroy(this);
6127
6128     basic_ios_char_setstate(base, state);
6129     return this;
6130 }
6131
6132 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z */
6133 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z */
6134 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint, 8)
6135 basic_istream_char* __thiscall basic_istream_char_read_uint(basic_istream_char *this, unsigned int *v)
6136 {
6137     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6138     int state = IOSTATE_goodbit;
6139
6140     TRACE("(%p %p)\n", this, v);
6141
6142     if(basic_istream_char_sentry_create(this, FALSE)) {
6143         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6144         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6145         istreambuf_iterator_char first={0}, last={0};
6146
6147         first.strbuf = strbuf;
6148         num_get_char_get_uint(numget, &last, first, last, &base->base, &state, v);
6149     }
6150     basic_istream_char_sentry_destroy(this);
6151
6152     basic_ios_char_setstate(base, state);
6153     return this;
6154 }
6155
6156 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z */
6157 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z */
6158 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_long, 8)
6159 basic_istream_char* __thiscall basic_istream_char_read_long(basic_istream_char *this, LONG *v)
6160 {
6161     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6162     int state = IOSTATE_goodbit;
6163
6164     TRACE("(%p %p)\n", this, v);
6165
6166     if(basic_istream_char_sentry_create(this, FALSE)) {
6167         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6168         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6169         istreambuf_iterator_char first={0}, last={0};
6170
6171         first.strbuf = strbuf;
6172         num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
6173     }
6174     basic_istream_char_sentry_destroy(this);
6175
6176     basic_ios_char_setstate(base, state);
6177     return this;
6178 }
6179
6180 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z */
6181 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z */
6182 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ulong, 8)
6183 basic_istream_char* __thiscall basic_istream_char_read_ulong(basic_istream_char *this, ULONG *v)
6184 {
6185     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6186     int state = IOSTATE_goodbit;
6187
6188     TRACE("(%p %p)\n", this, v);
6189
6190     if(basic_istream_char_sentry_create(this, FALSE)) {
6191         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6192         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6193         istreambuf_iterator_char first={0}, last={0};
6194
6195         first.strbuf = strbuf;
6196         num_get_char_get_ulong(numget, &last, first, last, &base->base, &state, v);
6197     }
6198     basic_istream_char_sentry_destroy(this);
6199
6200     basic_ios_char_setstate(base, state);
6201     return this;
6202 }
6203
6204 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z */
6205 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z */
6206 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_float, 8)
6207 basic_istream_char* __thiscall basic_istream_char_read_float(basic_istream_char *this, float *v)
6208 {
6209     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6210     int state = IOSTATE_goodbit;
6211
6212     TRACE("(%p %p)\n", this, v);
6213
6214     if(basic_istream_char_sentry_create(this, FALSE)) {
6215         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6216         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6217         istreambuf_iterator_char first={0}, last={0};
6218
6219         first.strbuf = strbuf;
6220         num_get_char_get_float(numget, &last, first, last, &base->base, &state, v);
6221     }
6222     basic_istream_char_sentry_destroy(this);
6223
6224     basic_ios_char_setstate(base, state);
6225     return this;
6226 }
6227
6228 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z */
6229 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z */
6230 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_double, 8)
6231 basic_istream_char* __thiscall basic_istream_char_read_double(basic_istream_char *this, double *v)
6232 {
6233     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6234     int state = IOSTATE_goodbit;
6235
6236     TRACE("(%p %p)\n", this, v);
6237
6238     if(basic_istream_char_sentry_create(this, FALSE)) {
6239         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6240         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6241         istreambuf_iterator_char first={0}, last={0};
6242
6243         first.strbuf = strbuf;
6244         num_get_char_get_double(numget, &last, first, last, &base->base, &state, v);
6245     }
6246     basic_istream_char_sentry_destroy(this);
6247
6248     basic_ios_char_setstate(base, state);
6249     return this;
6250 }
6251
6252 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z */
6253 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z */
6254 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ldouble, 8)
6255 basic_istream_char* __thiscall basic_istream_char_read_ldouble(basic_istream_char *this, double *v)
6256 {
6257     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6258     int state = IOSTATE_goodbit;
6259
6260     TRACE("(%p %p)\n", this, v);
6261
6262     if(basic_istream_char_sentry_create(this, FALSE)) {
6263         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6264         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6265         istreambuf_iterator_char first={0}, last={0};
6266
6267         first.strbuf = strbuf;
6268         num_get_char_get_ldouble(numget, &last, first, last, &base->base, &state, v);
6269     }
6270     basic_istream_char_sentry_destroy(this);
6271
6272     basic_ios_char_setstate(base, state);
6273     return this;
6274 }
6275
6276 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z */
6277 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
6278 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ptr, 8)
6279 basic_istream_char* __thiscall basic_istream_char_read_ptr(basic_istream_char *this, void **v)
6280 {
6281     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6282     int state = IOSTATE_goodbit;
6283
6284     TRACE("(%p %p)\n", this, v);
6285
6286     if(basic_istream_char_sentry_create(this, FALSE)) {
6287         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6288         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6289         istreambuf_iterator_char first={0}, last={0};
6290
6291         first.strbuf = strbuf;
6292         num_get_char_get_void(numget, &last, first, last, &base->base, &state, v);
6293     }
6294     basic_istream_char_sentry_destroy(this);
6295
6296     basic_ios_char_setstate(base, state);
6297     return this;
6298 }
6299
6300 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z */
6301 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z */
6302 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int64, 8)
6303 basic_istream_char* __thiscall basic_istream_char_read_int64(basic_istream_char *this, __int64 *v)
6304 {
6305     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6306     int state = IOSTATE_goodbit;
6307
6308     TRACE("(%p %p)\n", this, v);
6309
6310     if(basic_istream_char_sentry_create(this, FALSE)) {
6311         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6312         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6313         istreambuf_iterator_char first={0}, last={0};
6314
6315         first.strbuf = strbuf;
6316         num_get_char_get_int64(numget, &last, first, last, &base->base, &state, v);
6317     }
6318     basic_istream_char_sentry_destroy(this);
6319
6320     basic_ios_char_setstate(base, state);
6321     return this;
6322 }
6323
6324 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z */
6325 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z */
6326 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint64, 8)
6327 basic_istream_char* __thiscall basic_istream_char_read_uint64(basic_istream_char *this, unsigned __int64 *v)
6328 {
6329     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6330     int state = IOSTATE_goodbit;
6331
6332     TRACE("(%p %p)\n", this, v);
6333
6334     if(basic_istream_char_sentry_create(this, FALSE)) {
6335         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6336         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6337         istreambuf_iterator_char first={0}, last={0};
6338
6339         first.strbuf = strbuf;
6340         num_get_char_get_uint64(numget, &last, first, last, &base->base, &state, v);
6341     }
6342     basic_istream_char_sentry_destroy(this);
6343
6344     basic_ios_char_setstate(base, state);
6345     return this;
6346 }
6347
6348 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z */
6349 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z */
6350 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_bool, 8)
6351 basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *this, MSVCP_bool *v)
6352 {
6353     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6354     int state = IOSTATE_goodbit;
6355
6356     TRACE("(%p %p)\n", this, v);
6357
6358     if(basic_istream_char_sentry_create(this, FALSE)) {
6359         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6360         const num_get *numget = num_get_char_use_facet(strbuf->loc);
6361         istreambuf_iterator_char first={0}, last={0};
6362
6363         first.strbuf = strbuf;
6364         num_get_char_get_bool(numget, &last, first, last, &base->base, &state, v);
6365     }
6366     basic_istream_char_sentry_destroy(this);
6367
6368     basic_ios_char_setstate(base, state);
6369     return this;
6370 }
6371
6372 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
6373 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
6374 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_streambuf, 8)
6375 basic_istream_char* __thiscall basic_istream_char_read_streambuf(
6376         basic_istream_char *this, basic_streambuf_char *streambuf)
6377 {
6378     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6379     IOSB_iostate state = IOSTATE_failbit;
6380     int c = '\n';
6381
6382     TRACE("(%p %p)\n", this, streambuf);
6383
6384     if(basic_istream_char_sentry_create(this, FALSE)) {
6385         for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base)); c!=EOF;
6386                 c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base))) {
6387             state = IOSTATE_goodbit;
6388             if(basic_streambuf_char_sputc(streambuf, c) == EOF)
6389                 break;
6390         }
6391     }
6392     basic_istream_char_sentry_destroy(this);
6393
6394     basic_ios_char_setstate(base, state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6395     return this;
6396 }
6397
6398 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
6399 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
6400 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func, 8)
6401 basic_istream_char* __thiscall basic_istream_char_read_func(basic_istream_char *this,
6402         basic_istream_char* (__cdecl *pfunc)(basic_istream_char*))
6403 {
6404     TRACE("(%p %p)\n", this, pfunc);
6405     pfunc(this);
6406     return this;
6407 }
6408
6409 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */
6410 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */
6411 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_basic_ios, 8)
6412 basic_istream_char* __thiscall basic_istream_char_read_func_basic_ios(basic_istream_char *this,
6413         basic_ios_char* (__cdecl *pfunc)(basic_ios_char*))
6414 {
6415     TRACE("(%p %p)\n", this, pfunc);
6416     pfunc(basic_istream_char_get_basic_ios(this));
6417     return this;
6418 }
6419
6420 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
6421 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
6422 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_ios_base, 8)
6423 basic_istream_char* __thiscall basic_istream_char_read_func_ios_base(basic_istream_char *this,
6424         ios_base* (__cdecl *pfunc)(ios_base*))
6425 {
6426     TRACE("(%p %p)\n", this, pfunc);
6427     pfunc(&basic_istream_char_get_basic_ios(this)->base);
6428     return this;
6429 }
6430
6431 /* Caution: basic_istream uses virtual inheritance. */
6432 static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this)
6433 {
6434     return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
6435 }
6436
6437 static inline basic_ios_wchar* basic_istream_wchar_to_basic_ios(basic_istream_wchar *ptr)
6438 {
6439     return (basic_ios_wchar*)((char*)ptr+basic_istream_wchar_vbtable[1]);
6440 }
6441
6442 static inline basic_istream_wchar* basic_istream_wchar_from_basic_ios(basic_ios_wchar *ptr)
6443 {
6444     return (basic_istream_wchar*)((char*)ptr-basic_istream_wchar_vbtable[1]);
6445 }
6446
6447 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
6448 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
6449 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_init, 20)
6450 basic_istream_wchar* __thiscall basic_istream_wchar_ctor_init(basic_istream_wchar *this,
6451         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
6452 {
6453     basic_ios_wchar *base;
6454
6455     TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
6456
6457     if(virt_init) {
6458         this->vbtable = basic_istream_wchar_vbtable;
6459         base = basic_istream_wchar_get_basic_ios(this);
6460         basic_ios_wchar_ctor(base);
6461     }else {
6462         base = basic_istream_wchar_get_basic_ios(this);
6463     }
6464
6465     base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
6466     this->count = 0;
6467     if(!noinit)
6468         basic_ios_wchar_init(base, strbuf, isstd);
6469     return this;
6470 }
6471
6472 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
6473 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
6474 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_init, 20)
6475 basic_istream_wchar* __thiscall basic_istream_short_ctor_init(basic_istream_wchar *this,
6476         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
6477 {
6478     basic_istream_wchar_ctor_init(this, strbuf, isstd, noinit, virt_init);
6479     basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable;
6480     return this;
6481 }
6482
6483 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
6484 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
6485 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor, 16)
6486 basic_istream_wchar* __thiscall basic_istream_wchar_ctor(basic_istream_wchar *this,
6487         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
6488 {
6489     return basic_istream_wchar_ctor_init(this, strbuf, isstd, FALSE, virt_init);
6490 }
6491
6492 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
6493 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
6494 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor, 16)
6495 basic_istream_wchar* __thiscall basic_istream_short_ctor(basic_istream_wchar *this,
6496         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
6497 {
6498     return basic_istream_short_ctor_init(this, strbuf, isstd, FALSE, virt_init);
6499 }
6500
6501 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z */
6502 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
6503 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_uninitialized, 12)
6504 basic_istream_wchar* __thiscall basic_istream_wchar_ctor_uninitialized(
6505         basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init)
6506 {
6507     basic_ios_wchar *base;
6508
6509     TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
6510
6511     if(virt_init) {
6512         this->vbtable = basic_istream_wchar_vbtable;
6513         base = basic_istream_wchar_get_basic_ios(this);
6514         basic_ios_wchar_ctor(base);
6515     }else {
6516         base = basic_istream_wchar_get_basic_ios(this);
6517     }
6518
6519     base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
6520     ios_base_Addstd(&base->base);
6521     return this;
6522 }
6523
6524 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */
6525 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
6526 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_uninitialized, 12)
6527 basic_istream_wchar* __thiscall basic_istream_short_ctor_uninitialized(
6528         basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init)
6529 {
6530     basic_istream_wchar_ctor_uninitialized(this, uninitialized, virt_init);
6531     basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable;
6532     return this;
6533 }
6534
6535 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
6536 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
6537 /* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UAE@XZ */
6538 /* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
6539 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_dtor, 4)
6540 void __thiscall basic_istream_wchar_dtor(basic_ios_wchar *base)
6541 {
6542     basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base);
6543
6544     /* don't destroy virtual base here */
6545     TRACE("(%p)\n", this);
6546 }
6547
6548 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
6549 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
6550 /* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */
6551 /* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
6552 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vbase_dtor, 4)
6553 void __thiscall basic_istream_wchar_vbase_dtor(basic_istream_wchar *this)
6554 {
6555     TRACE("(%p)\n", this);
6556     basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(this));
6557     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(this));
6558 }
6559
6560 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vector_dtor, 8)
6561 basic_istream_wchar* __thiscall basic_istream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
6562 {
6563     basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base);
6564
6565     TRACE("(%p %x)\n", this, flags);
6566
6567     if(flags & 2) {
6568         /* we have an array, with the number of elements stored before the first object */
6569         INT_PTR i, *ptr = (INT_PTR *)this-1;
6570
6571         for(i=*ptr-1; i>=0; i--)
6572             basic_istream_wchar_vbase_dtor(this+i);
6573         MSVCRT_operator_delete(ptr);
6574     } else {
6575         basic_istream_wchar_vbase_dtor(this);
6576         if(flags & 1)
6577             MSVCRT_operator_delete(this);
6578     }
6579
6580     return this;
6581 }
6582
6583 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
6584 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
6585 /* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */
6586 /* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */
6587 DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Ipfx, 8)
6588 MSVCP_bool __thiscall basic_istream_wchar__Ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
6589 {
6590     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6591
6592     TRACE("(%p %d)\n", this, noskip);
6593
6594     if(ios_base_good(&base->base)) {
6595         if(basic_ios_wchar_tie_get(base))
6596             basic_ostream_wchar_flush(basic_ios_wchar_tie_get(base));
6597
6598         if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
6599             basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6600             const ctype_wchar *ctype = ctype_wchar_use_facet(base->strbuf->loc);
6601             int ch;
6602
6603             for(ch = basic_streambuf_wchar_sgetc(strbuf); ;
6604                     ch = basic_streambuf_wchar_snextc(strbuf)) {
6605                 if(ch == WEOF) {
6606                     basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6607                     break;
6608                 }
6609
6610                 if(!ctype_wchar_is_ch(ctype, _SPACE|_BLANK, ch))
6611                     break;
6612             }
6613         }
6614     }
6615
6616     if(!ios_base_good(&base->base)) {
6617         basic_ios_wchar_setstate(base, IOSTATE_failbit);
6618         return FALSE;
6619     }
6620     return TRUE;
6621 }
6622
6623 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
6624 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
6625 /* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */
6626 /* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */
6627 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ipfx, 8)
6628 MSVCP_bool __thiscall basic_istream_wchar_ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
6629 {
6630     return basic_istream_wchar__Ipfx(this, noskip);
6631 }
6632
6633 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
6634 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
6635 /* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */
6636 /* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
6637 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_isfx, 4)
6638 void __thiscall basic_istream_wchar_isfx(basic_istream_wchar *this)
6639 {
6640     TRACE("(%p)\n", this);
6641 }
6642
6643 static BOOL basic_istream_wchar_sentry_create(basic_istream_wchar *istr, MSVCP_bool noskip)
6644 {
6645     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
6646
6647     if(basic_ios_wchar_rdbuf_get(base))
6648         basic_streambuf_wchar__Lock(base->strbuf);
6649
6650     return basic_istream_wchar_ipfx(istr, noskip);
6651 }
6652
6653 static void basic_istream_wchar_sentry_destroy(basic_istream_wchar *istr)
6654 {
6655     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
6656
6657     if(basic_ios_wchar_rdbuf_get(base))
6658         basic_streambuf_wchar__Unlock(base->strbuf);
6659 }
6660
6661 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBEHXZ */
6662 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ */
6663 /* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QBEHXZ */
6664 /* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ */
6665 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_gcount, 4)
6666 int __thiscall basic_istream_wchar_gcount(const basic_istream_wchar *this)
6667 {
6668     TRACE("(%p)\n", this);
6669     return this->count;
6670 }
6671
6672 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
6673 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
6674 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */
6675 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */
6676 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get, 4)
6677 unsigned short __thiscall basic_istream_wchar_get(basic_istream_wchar *this)
6678 {
6679     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6680     int ret;
6681
6682     TRACE("(%p)\n", this);
6683
6684     this->count = 0;
6685
6686     if(!basic_istream_wchar_sentry_create(this, TRUE)) {
6687         basic_istream_wchar_sentry_destroy(this);
6688         return WEOF;
6689     }
6690
6691     ret = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(base));
6692     basic_istream_wchar_sentry_destroy(this);
6693     if(ret == WEOF)
6694         basic_ios_wchar_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
6695     else
6696         this->count++;
6697
6698     return ret;
6699 }
6700
6701 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z */
6702 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z */
6703 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAG@Z */
6704 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z */
6705 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_ch, 8)
6706 basic_istream_wchar* __thiscall basic_istream_wchar_get_ch(basic_istream_wchar *this, wchar_t *ch)
6707 {
6708     unsigned short ret;
6709
6710     TRACE("(%p %p)\n", this, ch);
6711
6712     ret = basic_istream_wchar_get(this);
6713     if(ret != WEOF)
6714         *ch = (wchar_t)ret;
6715     return this;
6716 }
6717
6718 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
6719 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
6720 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */
6721 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */
6722 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str_delim, 20)
6723 basic_istream_wchar* __thiscall basic_istream_wchar_get_str_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
6724 {
6725     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6726     unsigned short ch = delim;
6727
6728     TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
6729
6730     this->count = 0;
6731
6732     if(basic_istream_wchar_sentry_create(this, TRUE)) {
6733         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6734
6735         for(ch = basic_streambuf_wchar_sgetc(strbuf); count>1;
6736                 ch = basic_streambuf_wchar_snextc(strbuf)) {
6737             if(ch==WEOF || ch==delim)
6738                 break;
6739
6740             *str++ = ch;
6741             this->count++;
6742             count--;
6743         }
6744     }
6745     basic_istream_wchar_sentry_destroy(this);
6746
6747     basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6748             (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6749     if(count > 0)
6750         *str = 0;
6751     return this;
6752 }
6753
6754 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6755 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6756 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
6757 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
6758 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str, 16)
6759 basic_istream_wchar* __thiscall basic_istream_wchar_get_str(basic_istream_wchar *this, wchar_t *str, streamsize count)
6760 {
6761     return basic_istream_wchar_get_str_delim(this, str, count, '\n');
6762 }
6763
6764 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
6765 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
6766 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */
6767 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */
6768 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf_delim, 12)
6769 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf_delim(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, wchar_t delim)
6770 {
6771     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6772     unsigned short ch = delim;
6773
6774     TRACE("(%p %p %c)\n", this, strbuf, delim);
6775
6776     this->count = 0;
6777
6778     if(basic_istream_wchar_sentry_create(this, TRUE)) {
6779         basic_streambuf_wchar *strbuf_read = basic_ios_wchar_rdbuf_get(base);
6780
6781         for(ch = basic_streambuf_wchar_sgetc(strbuf_read); ;
6782                 ch = basic_streambuf_wchar_snextc(strbuf_read)) {
6783             if(ch==WEOF || ch==delim)
6784                 break;
6785
6786             if(basic_streambuf_wchar_sputc(strbuf, ch) == WEOF)
6787                 break;
6788             this->count++;
6789         }
6790     }
6791     basic_istream_wchar_sentry_destroy(this);
6792
6793     basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6794             (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6795     return this;
6796 }
6797
6798 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
6799 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
6800 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */
6801 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */
6802 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf, 8)
6803 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf(basic_istream_wchar *this, basic_streambuf_wchar *strbuf)
6804 {
6805     return basic_istream_wchar_get_streambuf_delim(this, strbuf, '\n');
6806 }
6807
6808 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
6809 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
6810 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */
6811 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */
6812 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline_delim, 20)
6813 basic_istream_wchar* __thiscall basic_istream_wchar_getline_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
6814 {
6815     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6816     unsigned short ch = delim;
6817
6818     TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
6819
6820     this->count = 0;
6821
6822     if(basic_istream_wchar_sentry_create(this, TRUE) && count>0) {
6823         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6824
6825         while(count > 1) {
6826             ch = basic_streambuf_wchar_sbumpc(strbuf);
6827
6828             if(ch==WEOF || ch==delim)
6829                 break;
6830
6831             *str++ = ch;
6832             this->count++;
6833             count--;
6834         }
6835
6836         if(ch == delim)
6837             this->count++;
6838         else if(ch != WEOF) {
6839             ch = basic_streambuf_wchar_sgetc(strbuf);
6840
6841             if(ch == delim) {
6842                 basic_streambuf_wchar__Gninc(strbuf);
6843                 this->count++;
6844             }
6845         }
6846     }
6847     basic_istream_wchar_sentry_destroy(this);
6848
6849     basic_ios_wchar_setstate(base, (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
6850             (!this->count || (ch!=delim && ch!=WEOF) ? IOSTATE_failbit : IOSTATE_goodbit));
6851     if(count > 0)
6852         *str = 0;
6853     return this;
6854 }
6855
6856 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6857 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6858 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
6859 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
6860 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline, 16)
6861 basic_istream_wchar* __thiscall basic_istream_wchar_getline(basic_istream_wchar *this, wchar_t *str, streamsize count)
6862 {
6863     return basic_istream_wchar_getline_delim(this, str, count, '\n');
6864 }
6865
6866 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@HG@Z */
6867 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z */
6868 /* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@HG@Z */
6869 /* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z */
6870 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ignore, 16)
6871 basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *this, streamsize count, unsigned short delim)
6872 {
6873     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6874     unsigned short ch = delim;
6875     unsigned int state;
6876
6877     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim);
6878
6879     this->count = 0;
6880
6881     if(basic_istream_wchar_sentry_create(this, TRUE)) {
6882         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6883         state = IOSTATE_goodbit;
6884
6885         while(count > 0) {
6886             ch = basic_streambuf_wchar_sbumpc(strbuf);
6887
6888             if(ch==WEOF) {
6889                 state = IOSTATE_eofbit;
6890                 break;
6891             }
6892
6893             if(ch==delim)
6894                 break;
6895
6896             this->count++;
6897             if(count != INT_MAX)
6898                 count--;
6899         }
6900     }else
6901         state = IOSTATE_failbit;
6902     basic_istream_wchar_sentry_destroy(this);
6903
6904     basic_ios_wchar_setstate(base, state);
6905     return this;
6906 }
6907
6908 /* ?ws@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
6909 /* ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
6910 /* ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z */
6911 /* ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
6912 basic_istream_wchar* __cdecl ws_basic_istream_wchar(basic_istream_wchar *istream)
6913 {
6914     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
6915     unsigned short ch = '\n';
6916
6917     TRACE("(%p)\n", istream);
6918
6919     if(basic_istream_wchar_sentry_create(istream, TRUE)) {
6920         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6921         const ctype_wchar *ctype = ctype_wchar_use_facet(strbuf->loc);
6922
6923         for(ch = basic_streambuf_wchar_sgetc(strbuf); ctype_wchar_is_ch(ctype, _SPACE, ch);
6924                 ch = basic_streambuf_wchar_snextc(strbuf)) {
6925             if(ch == WEOF)
6926                 break;
6927         }
6928     }
6929     basic_istream_wchar_sentry_destroy(istream);
6930
6931     if(ch == WEOF)
6932         basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6933     return istream;
6934 }
6935
6936 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
6937 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
6938 /* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */
6939 /* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */
6940 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_peek, 4)
6941 unsigned short __thiscall basic_istream_wchar_peek(basic_istream_wchar *this)
6942 {
6943     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6944     unsigned short ret = WEOF;
6945
6946     TRACE("(%p)\n", this);
6947
6948     this->count = 0;
6949
6950     if(basic_istream_wchar_sentry_create(this, TRUE))
6951         ret = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base));
6952     basic_istream_wchar_sentry_destroy(this);
6953
6954     if (ret == WEOF)
6955         basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6956
6957     return ret;
6958 }
6959
6960 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WIH@Z */
6961 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_K_J@Z */
6962 /* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGIH@Z */
6963 /* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_K_J@Z */
6964 static basic_istream_wchar* basic_istream_wchar__Read_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
6965 {
6966     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6967     IOSB_iostate state = IOSTATE_goodbit;
6968
6969     TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
6970
6971     if(basic_istream_wchar_sentry_create(this, TRUE)) {
6972         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6973
6974         this->count = basic_streambuf_wchar__Sgetn_s(strbuf, str, size, count);
6975         if(this->count != count)
6976             state |= IOSTATE_failbit | IOSTATE_eofbit;
6977     }else {
6978         this->count = 0;
6979     }
6980     basic_istream_wchar_sentry_destroy(this);
6981
6982     basic_ios_wchar_setstate(base, state);
6983     return this;
6984 }
6985
6986 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6987 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6988 /* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
6989 /* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
6990 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read, 16)
6991 basic_istream_wchar* __thiscall basic_istream_wchar_read(basic_istream_wchar *this, wchar_t *str, streamsize count)
6992 {
6993     return basic_istream_wchar__Read_s(this, str, count, count);
6994 }
6995
6996 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
6997 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
6998 /* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
6999 /* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
7000 static streamsize basic_istream_wchar__Readsome_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
7001 {
7002     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7003     IOSB_iostate state = IOSTATE_goodbit;
7004
7005     TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
7006
7007     this->count = 0;
7008
7009     if(basic_istream_wchar_sentry_create(this, TRUE)) {
7010         streamsize avail = basic_streambuf_wchar_in_avail(basic_ios_wchar_rdbuf_get(base));
7011         if(avail > count)
7012             avail = count;
7013
7014         if(avail == -1)
7015             state |= IOSTATE_eofbit;
7016         else if(avail > 0)
7017             basic_istream_wchar__Read_s(this, str, size, avail);
7018     }else {
7019         state |= IOSTATE_failbit;
7020     }
7021     basic_istream_wchar_sentry_destroy(this);
7022
7023     basic_ios_wchar_setstate(base, state);
7024     return this->count;
7025 }
7026
7027 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
7028 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
7029 /* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
7030 /* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
7031 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_readsome, 16)
7032 streamsize __thiscall basic_istream_wchar_readsome(basic_istream_wchar *this, wchar_t *str, streamsize count)
7033 {
7034     return basic_istream_wchar__Readsome_s(this, str, count, count);
7035 }
7036
7037 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
7038 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
7039 /* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */
7040 /* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */
7041 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_putback, 8)
7042 basic_istream_wchar* __thiscall basic_istream_wchar_putback(basic_istream_wchar *this, wchar_t ch)
7043 {
7044     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7045     IOSB_iostate state = IOSTATE_goodbit;
7046
7047     TRACE("(%p %c)\n", this, ch);
7048
7049     this->count = 0;
7050
7051     if(basic_istream_wchar_sentry_create(this, TRUE)) {
7052         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7053
7054         if(!ios_base_good(&base->base))
7055             state |= IOSTATE_failbit;
7056         else if(!strbuf || basic_streambuf_wchar_sputbackc(strbuf, ch)==WEOF)
7057             state |= IOSTATE_badbit;
7058     }
7059     basic_istream_wchar_sentry_destroy(this);
7060
7061     basic_ios_wchar_setstate(base, state);
7062     return this;
7063 }
7064
7065 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
7066 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
7067 /* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */
7068 /* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */
7069 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_unget, 4)
7070 basic_istream_wchar* __thiscall basic_istream_wchar_unget(basic_istream_wchar *this)
7071 {
7072     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7073     IOSB_iostate state = IOSTATE_goodbit;
7074
7075     TRACE("(%p)\n", this);
7076
7077     this->count = 0;
7078
7079     if(basic_istream_wchar_sentry_create(this, TRUE)) {
7080         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7081
7082         if(!ios_base_good(&base->base))
7083             state |= IOSTATE_failbit;
7084         else if(!strbuf || basic_streambuf_wchar_sungetc(strbuf)==WEOF)
7085             state |= IOSTATE_badbit;
7086     }
7087     basic_istream_wchar_sentry_destroy(this);
7088
7089     basic_ios_wchar_setstate(base, state);
7090     return this;
7091 }
7092
7093 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
7094 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
7095 /* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHXZ */
7096 /* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ */
7097 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_sync, 4)
7098 int __thiscall basic_istream_wchar_sync(basic_istream_wchar *this)
7099 {
7100     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7101     basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7102
7103     TRACE("(%p)\n", this);
7104
7105     if(!strbuf)
7106         return -1;
7107
7108     if(basic_istream_wchar_sentry_create(this, TRUE)) {
7109         if(basic_streambuf_wchar_pubsync(strbuf) != -1) {
7110             basic_istream_wchar_sentry_destroy(this);
7111             return 0;
7112         }
7113     }
7114     basic_istream_wchar_sentry_destroy(this);
7115
7116     basic_ios_wchar_setstate(base, IOSTATE_badbit);
7117     return -1;
7118 }
7119
7120 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
7121 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
7122 /* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */
7123 /* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
7124 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_tellg, 8)
7125 fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_int *ret)
7126 {
7127     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7128
7129     TRACE("(%p %p)\n", this, ret);
7130
7131     if(ios_base_fail(&base->base)) {
7132         ret->off = -1;
7133         ret->pos = 0;
7134         ret->state = 0;
7135         return ret;
7136     }
7137
7138     basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
7139             ret, 0, SEEKDIR_cur, OPENMODE_in);
7140     if(ret->off==-1 && ret->pos==0 && ret->state==0)
7141         basic_ios_wchar_setstate(base, IOSTATE_failbit);
7142
7143     return ret;
7144 }
7145
7146 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */
7147 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */
7148 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */
7149 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */
7150 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg, 16)
7151 basic_istream_wchar* __thiscall basic_istream_wchar_seekg(basic_istream_wchar *this, streamoff off, int dir)
7152 {
7153     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7154
7155     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir);
7156
7157     if(!ios_base_fail(&base->base)) {
7158         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7159         fpos_int ret;
7160
7161         basic_streambuf_wchar_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
7162
7163         if(ret.off==-1 && ret.pos==0 && ret.state==0)
7164             basic_ios_wchar_setstate(base, IOSTATE_failbit);
7165         else
7166             basic_ios_wchar_clear(base, IOSTATE_goodbit);
7167         return this;
7168     }else
7169         basic_ios_wchar_clear(base, IOSTATE_goodbit);
7170
7171     return this;
7172 }
7173
7174 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
7175 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
7176 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
7177 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
7178 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg_fpos, 28)
7179 basic_istream_wchar* __thiscall basic_istream_wchar_seekg_fpos(basic_istream_wchar *this, fpos_int pos)
7180 {
7181     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7182
7183     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
7184
7185     if(!ios_base_fail(&base->base)) {
7186         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7187         fpos_int ret;
7188
7189         basic_streambuf_wchar_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
7190
7191         if(ret.off==-1 && ret.pos==0 && ret.state==0)
7192             basic_ios_wchar_setstate(base, IOSTATE_failbit);
7193         else
7194             basic_ios_wchar_clear(base, IOSTATE_goodbit);
7195         return this;
7196     }else
7197         basic_ios_wchar_clear(base, IOSTATE_goodbit);
7198
7199     return this;
7200 }
7201
7202 static basic_istream_wchar* basic_istream_read_short(basic_istream_wchar *this, short *v, const num_get *numget)
7203 {
7204     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7205     int state = IOSTATE_goodbit;
7206
7207     TRACE("(%p %p)\n", this, v);
7208
7209     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7210         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7211         istreambuf_iterator_wchar first={0}, last={0};
7212         LONG tmp;
7213
7214         first.strbuf = strbuf;
7215         num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, &tmp);
7216
7217         if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
7218             *v = tmp;
7219         else
7220             state |= IOSTATE_failbit;
7221     }
7222     basic_istream_wchar_sentry_destroy(this);
7223
7224     basic_ios_wchar_setstate(base, state);
7225     return this;
7226 }
7227
7228 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAF@Z */
7229 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z */
7230 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_short, 8)
7231 basic_istream_wchar* __thiscall basic_istream_wchar_read_short(basic_istream_wchar *this, short *v)
7232 {
7233     return basic_istream_read_short(this, v, num_get_wchar_use_facet(
7234                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7235 }
7236
7237 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAF@Z */
7238 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z */
7239 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_short, 8)
7240 basic_istream_wchar* __thiscall basic_istream_short_read_short(basic_istream_wchar *this, short *v)
7241 {
7242     return basic_istream_read_short(this, v, num_get_short_use_facet(
7243                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7244 }
7245
7246 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAG@Z */
7247 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z */
7248 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ushort, 8)
7249 basic_istream_wchar* __thiscall basic_istream_wchar_read_ushort(basic_istream_wchar *this, unsigned short *v)
7250 {
7251     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7252     int state = IOSTATE_goodbit;
7253
7254     TRACE("(%p %p)\n", this, v);
7255
7256     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7257         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7258         const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7259         istreambuf_iterator_wchar first={0}, last={0};
7260
7261         first.strbuf = strbuf;
7262         num_get_wchar_get_ushort(numget, &last, first, last, &base->base, &state, v);
7263     }
7264     basic_istream_wchar_sentry_destroy(this);
7265
7266     basic_ios_wchar_setstate(base, state);
7267     return this;
7268 }
7269
7270 static basic_istream_wchar* basic_istream_read_int(basic_istream_wchar *this, int *v, const num_get *numget)
7271 {
7272     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7273     int state = IOSTATE_goodbit;
7274
7275     TRACE("(%p %p)\n", this, v);
7276
7277     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7278         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7279         istreambuf_iterator_wchar first={0}, last={0};
7280
7281         first.strbuf = strbuf;
7282         num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
7283     }
7284     basic_istream_wchar_sentry_destroy(this);
7285
7286     basic_ios_wchar_setstate(base, state);
7287     return this;
7288 }
7289
7290 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAH@Z */
7291 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z */
7292 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int, 8)
7293 basic_istream_wchar* __thiscall basic_istream_wchar_read_int(basic_istream_wchar *this, int *v)
7294 {
7295     return basic_istream_read_int(this, v, num_get_wchar_use_facet(
7296                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7297 }
7298
7299 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAH@Z */
7300 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z */
7301 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int, 8)
7302 basic_istream_wchar* __thiscall basic_istream_short_read_int(basic_istream_wchar *this, int *v)
7303 {
7304     return basic_istream_read_int(this, v, num_get_short_use_facet(
7305                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7306 }
7307
7308 static basic_istream_wchar* basic_istream_read_uint(basic_istream_wchar *this, unsigned int *v, const num_get *numget)
7309 {
7310     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7311     int state = IOSTATE_goodbit;
7312
7313     TRACE("(%p %p)\n", this, v);
7314
7315     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7316         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7317         istreambuf_iterator_wchar first={0}, last={0};
7318
7319         first.strbuf = strbuf;
7320         num_get_wchar_get_uint(numget, &last, first, last, &base->base, &state, v);
7321     }
7322     basic_istream_wchar_sentry_destroy(this);
7323
7324     basic_ios_wchar_setstate(base, state);
7325     return this;
7326 }
7327
7328 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAI@Z */
7329 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z */
7330 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint, 8)
7331 basic_istream_wchar* __thiscall basic_istream_wchar_read_uint(basic_istream_wchar *this, unsigned int *v)
7332 {
7333     return basic_istream_read_uint(this, v, num_get_wchar_use_facet(
7334                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7335 }
7336
7337 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAI@Z */
7338 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z */
7339 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint, 8)
7340 basic_istream_wchar* __thiscall basic_istream_short_read_uint(basic_istream_wchar *this, unsigned int *v)
7341 {
7342     return basic_istream_read_uint(this, v, num_get_short_use_facet(
7343                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7344 }
7345
7346 static basic_istream_wchar* basic_istream_read_long(basic_istream_wchar *this, LONG *v, const num_get *numget)
7347 {
7348     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7349     int state = IOSTATE_goodbit;
7350
7351     TRACE("(%p %p)\n", this, v);
7352
7353     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7354         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7355         istreambuf_iterator_wchar first={0}, last={0};
7356
7357         first.strbuf = strbuf;
7358         num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
7359     }
7360     basic_istream_wchar_sentry_destroy(this);
7361
7362     basic_ios_wchar_setstate(base, state);
7363     return this;
7364 }
7365
7366 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */
7367 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */
7368 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_long, 8)
7369 basic_istream_wchar* __thiscall basic_istream_wchar_read_long(basic_istream_wchar *this, LONG *v)
7370 {
7371     return basic_istream_read_long(this, v, num_get_wchar_use_facet(
7372                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7373 }
7374
7375 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */
7376 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */
7377 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_long, 8)
7378 basic_istream_wchar* __thiscall basic_istream_short_read_long(basic_istream_wchar *this, LONG *v)
7379 {
7380     return basic_istream_read_long(this, v, num_get_short_use_facet(
7381                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7382 }
7383
7384 static basic_istream_wchar* basic_istream_read_ulong(basic_istream_wchar *this, ULONG *v, const num_get *numget)
7385 {
7386     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7387     int state = IOSTATE_goodbit;
7388
7389     TRACE("(%p %p)\n", this, v);
7390
7391     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7392         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7393         istreambuf_iterator_wchar first={0}, last={0};
7394
7395         first.strbuf = strbuf;
7396         num_get_wchar_get_ulong(numget, &last, first, last, &base->base, &state, v);
7397     }
7398     basic_istream_wchar_sentry_destroy(this);
7399
7400     basic_ios_wchar_setstate(base, state);
7401     return this;
7402 }
7403
7404 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAK@Z */
7405 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z */
7406 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ulong, 8)
7407 basic_istream_wchar* __thiscall basic_istream_wchar_read_ulong(basic_istream_wchar *this, ULONG *v)
7408 {
7409     return basic_istream_read_ulong(this, v, num_get_wchar_use_facet(
7410                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7411 }
7412
7413 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAK@Z */
7414 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z */
7415 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ulong, 8)
7416 basic_istream_wchar* __thiscall basic_istream_short_read_ulong(basic_istream_wchar *this, ULONG *v)
7417 {
7418     return basic_istream_read_ulong(this, v, num_get_short_use_facet(
7419                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7420 }
7421
7422 static basic_istream_wchar* basic_istream_read_float(basic_istream_wchar *this, float *v, const num_get *numget)
7423 {
7424     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7425     int state = IOSTATE_goodbit;
7426
7427     TRACE("(%p %p)\n", this, v);
7428
7429     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7430         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7431         istreambuf_iterator_wchar first={0}, last={0};
7432
7433         first.strbuf = strbuf;
7434         num_get_wchar_get_float(numget, &last, first, last, &base->base, &state, v);
7435     }
7436     basic_istream_wchar_sentry_destroy(this);
7437
7438     basic_ios_wchar_setstate(base, state);
7439     return this;
7440 }
7441
7442 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAM@Z */
7443 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z */
7444 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_float, 8)
7445 basic_istream_wchar* __thiscall basic_istream_wchar_read_float(basic_istream_wchar *this, float *v)
7446 {
7447     return basic_istream_read_float(this, v, num_get_wchar_use_facet(
7448                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7449 }
7450
7451 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAM@Z */
7452 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z */
7453 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_float, 8)
7454 basic_istream_wchar* __thiscall basic_istream_short_read_float(basic_istream_wchar *this, float *v)
7455 {
7456     return basic_istream_read_float(this, v, num_get_short_use_facet(
7457                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7458 }
7459
7460 static basic_istream_wchar* basic_istream_read_double(basic_istream_wchar *this, double *v, const num_get *numget)
7461 {
7462     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7463     int state = IOSTATE_goodbit;
7464
7465     TRACE("(%p %p)\n", this, v);
7466
7467     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7468         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7469         istreambuf_iterator_wchar first={0}, last={0};
7470
7471         first.strbuf = strbuf;
7472         num_get_wchar_get_double(numget, &last, first, last, &base->base, &state, v);
7473     }
7474     basic_istream_wchar_sentry_destroy(this);
7475
7476     basic_ios_wchar_setstate(base, state);
7477     return this;
7478 }
7479
7480 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAN@Z */
7481 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z */
7482 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_double, 8)
7483 basic_istream_wchar* __thiscall basic_istream_wchar_read_double(basic_istream_wchar *this, double *v)
7484 {
7485     return basic_istream_read_double(this, v, num_get_wchar_use_facet(
7486                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7487 }
7488
7489 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAN@Z */
7490 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z */
7491 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_double, 8)
7492 basic_istream_wchar* __thiscall basic_istream_short_read_double(basic_istream_wchar *this, double *v)
7493 {
7494     return basic_istream_read_double(this, v, num_get_short_use_facet(
7495                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7496 }
7497
7498 static basic_istream_wchar* basic_istream_read_ldouble(basic_istream_wchar *this, double *v, const num_get *numget)
7499 {
7500     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7501     int state = IOSTATE_goodbit;
7502
7503     TRACE("(%p %p)\n", this, v);
7504
7505     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7506         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7507         istreambuf_iterator_wchar first={0}, last={0};
7508
7509         first.strbuf = strbuf;
7510         num_get_wchar_get_ldouble(numget, &last, first, last, &base->base, &state, v);
7511     }
7512     basic_istream_wchar_sentry_destroy(this);
7513
7514     basic_ios_wchar_setstate(base, state);
7515     return this;
7516 }
7517
7518 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAO@Z */
7519 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z */
7520 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ldouble, 8)
7521 basic_istream_wchar* __thiscall basic_istream_wchar_read_ldouble(basic_istream_wchar *this, double *v)
7522 {
7523     return basic_istream_read_ldouble(this, v, num_get_wchar_use_facet(
7524                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7525 }
7526
7527 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAO@Z */
7528 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z */
7529 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ldouble, 8)
7530 basic_istream_wchar* __thiscall basic_istream_short_read_ldouble(basic_istream_wchar *this, double *v)
7531 {
7532     return basic_istream_read_ldouble(this, v, num_get_short_use_facet(
7533                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7534 }
7535
7536 static basic_istream_wchar* basic_istream_read_ptr(basic_istream_wchar *this, void **v, const num_get *numget)
7537 {
7538     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7539     int state = IOSTATE_goodbit;
7540
7541     TRACE("(%p %p)\n", this, v);
7542
7543     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7544         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7545         istreambuf_iterator_wchar first={0}, last={0};
7546
7547         first.strbuf = strbuf;
7548         num_get_wchar_get_void(numget, &last, first, last, &base->base, &state, v);
7549     }
7550     basic_istream_wchar_sentry_destroy(this);
7551
7552     basic_ios_wchar_setstate(base, state);
7553     return this;
7554 }
7555
7556 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAPAX@Z */
7557 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
7558 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ptr, 8)
7559 basic_istream_wchar* __thiscall basic_istream_wchar_read_ptr(basic_istream_wchar *this, void **v)
7560 {
7561     return basic_istream_read_ptr(this, v, num_get_wchar_use_facet(
7562                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7563 }
7564
7565 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAPAX@Z */
7566 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
7567 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ptr, 8)
7568 basic_istream_wchar* __thiscall basic_istream_short_read_ptr(basic_istream_wchar *this, void **v)
7569 {
7570     return basic_istream_read_ptr(this, v, num_get_short_use_facet(
7571                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7572 }
7573
7574 static basic_istream_wchar* basic_istream_read_int64(basic_istream_wchar *this, __int64 *v, const num_get *numget)
7575 {
7576     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7577     int state = IOSTATE_goodbit;
7578
7579     TRACE("(%p %p)\n", this, v);
7580
7581     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7582         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7583         istreambuf_iterator_wchar first={0}, last={0};
7584
7585         first.strbuf = strbuf;
7586         num_get_wchar_get_int64(numget, &last, first, last, &base->base, &state, v);
7587     }
7588     basic_istream_wchar_sentry_destroy(this);
7589
7590     basic_ios_wchar_setstate(base, state);
7591     return this;
7592 }
7593
7594 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_J@Z */
7595 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z */
7596 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int64, 8)
7597 basic_istream_wchar* __thiscall basic_istream_wchar_read_int64(basic_istream_wchar *this, __int64 *v)
7598 {
7599     return basic_istream_read_int64(this, v, num_get_wchar_use_facet(
7600                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7601 }
7602
7603 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_J@Z */
7604 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z */
7605 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int64, 8)
7606 basic_istream_wchar* __thiscall basic_istream_short_read_int64(basic_istream_wchar *this, __int64 *v)
7607 {
7608     return basic_istream_read_int64(this, v, num_get_short_use_facet(
7609                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7610 }
7611
7612 static basic_istream_wchar* basic_istream_read_uint64(basic_istream_wchar *this, unsigned __int64 *v, const num_get *numget)
7613 {
7614     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7615     int state = IOSTATE_goodbit;
7616
7617     TRACE("(%p %p)\n", this, v);
7618
7619     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7620         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7621         istreambuf_iterator_wchar first={0}, last={0};
7622
7623         first.strbuf = strbuf;
7624         num_get_wchar_get_uint64(numget, &last, first, last, &base->base, &state, v);
7625     }
7626     basic_istream_wchar_sentry_destroy(this);
7627
7628     basic_ios_wchar_setstate(base, state);
7629     return this;
7630 }
7631
7632 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_K@Z */
7633 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z */
7634 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint64, 8)
7635 basic_istream_wchar* __thiscall basic_istream_wchar_read_uint64(basic_istream_wchar *this, unsigned __int64 *v)
7636 {
7637     return basic_istream_read_uint64(this, v, num_get_wchar_use_facet(
7638                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7639 }
7640
7641 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_K@Z */
7642 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z */
7643 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint64, 8)
7644 basic_istream_wchar* __thiscall basic_istream_short_read_uint64(basic_istream_wchar *this, unsigned __int64 *v)
7645 {
7646     return basic_istream_read_uint64(this, v, num_get_short_use_facet(
7647                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7648 }
7649
7650 static basic_istream_wchar* basic_istream_read_bool(basic_istream_wchar *this, MSVCP_bool *v, const num_get *numget)
7651 {
7652     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7653     int state = IOSTATE_goodbit;
7654
7655     TRACE("(%p %p)\n", this, v);
7656
7657     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7658         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7659         istreambuf_iterator_wchar first={0}, last={0};
7660
7661         first.strbuf = strbuf;
7662         num_get_wchar_get_bool(numget, &last, first, last, &base->base, &state, v);
7663     }
7664     basic_istream_wchar_sentry_destroy(this);
7665
7666     basic_ios_wchar_setstate(base, state);
7667     return this;
7668 }
7669
7670 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_N@Z */
7671 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z */
7672 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_bool, 8)
7673 basic_istream_wchar* __thiscall basic_istream_wchar_read_bool(basic_istream_wchar *this, MSVCP_bool *v)
7674 {
7675     return basic_istream_read_bool(this, v, num_get_wchar_use_facet(
7676                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7677 }
7678
7679 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_N@Z */
7680 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z */
7681 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_bool, 8)
7682 basic_istream_wchar* __thiscall basic_istream_short_read_bool(basic_istream_wchar *this, MSVCP_bool *v)
7683 {
7684     return basic_istream_read_bool(this, v, num_get_short_use_facet(
7685                 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7686 }
7687
7688 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7689 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7690 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7691 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7692 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_streambuf, 8)
7693 basic_istream_wchar* __thiscall basic_istream_wchar_read_streambuf(
7694         basic_istream_wchar *this, basic_streambuf_wchar *streambuf)
7695 {
7696     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7697     IOSB_iostate state = IOSTATE_failbit;
7698     unsigned short c = '\n';
7699
7700     TRACE("(%p %p)\n", this, streambuf);
7701
7702     if(basic_istream_wchar_sentry_create(this, FALSE)) {
7703         for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base)); c!=WEOF;
7704                 c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base))) {
7705             state = IOSTATE_goodbit;
7706             if(basic_streambuf_wchar_sputc(streambuf, c) == WEOF)
7707                 break;
7708         }
7709     }
7710     basic_istream_wchar_sentry_destroy(this);
7711
7712     basic_ios_wchar_setstate(base, state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7713     return this;
7714 }
7715
7716 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
7717 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
7718 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
7719 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
7720 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func, 8)
7721 basic_istream_wchar* __thiscall basic_istream_wchar_read_func(basic_istream_wchar *this,
7722         basic_istream_wchar* (__cdecl *pfunc)(basic_istream_wchar*))
7723 {
7724     TRACE("(%p %p)\n", this, pfunc);
7725     pfunc(this);
7726     return this;
7727 }
7728
7729 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */
7730 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */
7731 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */
7732 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */
7733 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_basic_ios, 8)
7734 basic_istream_wchar* __thiscall basic_istream_wchar_read_func_basic_ios(basic_istream_wchar *this,
7735         basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*))
7736 {
7737     TRACE("(%p %p)\n", this, pfunc);
7738     pfunc(basic_istream_wchar_get_basic_ios(this));
7739     return this;
7740 }
7741
7742 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
7743 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
7744 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
7745 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
7746 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_ios_base, 8)
7747 basic_istream_wchar* __thiscall basic_istream_wchar_read_func_ios_base(
7748         basic_istream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*))
7749 {
7750     TRACE("(%p %p)\n", this, pfunc);
7751     pfunc(&basic_istream_wchar_get_basic_ios(this)->base);
7752     return this;
7753 }
7754
7755 static inline basic_ios_char* basic_iostream_char_to_basic_ios(basic_iostream_char *ptr)
7756 {
7757     return (basic_ios_char*)((char*)ptr+basic_iostream_char_vbtable1[1]);
7758 }
7759
7760 static inline basic_iostream_char* basic_iostream_char_from_basic_ios(basic_ios_char *ptr)
7761 {
7762     return (basic_iostream_char*)((char*)ptr-basic_iostream_char_vbtable1[1]);
7763 }
7764
7765 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7766 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7767 DEFINE_THISCALL_WRAPPER(basic_iostream_char_ctor, 12)
7768 basic_iostream_char* __thiscall basic_iostream_char_ctor(basic_iostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool virt_init)
7769 {
7770     basic_ios_char *basic_ios;
7771
7772     TRACE("(%p %p %d)\n", this, strbuf, virt_init);
7773
7774     if(virt_init) {
7775         this->base1.vbtable = basic_iostream_char_vbtable1;
7776         this->base2.vbtable = basic_iostream_char_vbtable2;
7777         basic_ios = basic_istream_char_get_basic_ios(&this->base1);
7778         basic_ios_char_ctor(basic_ios);
7779     }else {
7780         basic_ios = basic_istream_char_get_basic_ios(&this->base1);
7781     }
7782
7783     basic_ios->base.vtable = &MSVCP_basic_iostream_char_vtable;
7784
7785     basic_istream_char_ctor(&this->base1, strbuf, FALSE, FALSE);
7786     basic_ostream_char_ctor_uninitialized(&this->base2, 0, FALSE, FALSE);
7787     return this;
7788 }
7789
7790 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
7791 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
7792 DEFINE_THISCALL_WRAPPER(basic_iostream_char_dtor, 4)
7793 void __thiscall basic_iostream_char_dtor(basic_ios_char *base)
7794 {
7795     basic_iostream_char *this = basic_iostream_char_from_basic_ios(base);
7796
7797     TRACE("(%p)\n", this);
7798     basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base2));
7799     basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base1));
7800 }
7801
7802 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7803 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7804 DEFINE_THISCALL_WRAPPER(basic_iostream_char_vbase_dtor, 4)
7805 void __thiscall basic_iostream_char_vbase_dtor(basic_iostream_char *this)
7806 {
7807     TRACE("(%p)\n", this);
7808     basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(this));
7809     basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base1));
7810 }
7811
7812 DEFINE_THISCALL_WRAPPER(basic_iostream_char_vector_dtor, 8)
7813 basic_iostream_char* __thiscall basic_iostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
7814 {
7815     basic_iostream_char *this = basic_iostream_char_from_basic_ios(base);
7816
7817     TRACE("(%p %x)\n", this, flags);
7818
7819     if(flags & 2) {
7820         /* we have an array, with the number of elements stored before the first object */
7821         INT_PTR i, *ptr = (INT_PTR *)this-1;
7822
7823         for(i=*ptr-1; i>=0; i--)
7824             basic_iostream_char_vbase_dtor(this+i);
7825         MSVCRT_operator_delete(ptr);
7826     } else {
7827         basic_iostream_char_vbase_dtor(this);
7828         if(flags & 1)
7829             MSVCRT_operator_delete(this);
7830     }
7831
7832     return this;
7833 }
7834
7835 static inline basic_ios_wchar* basic_iostream_wchar_to_basic_ios(basic_iostream_wchar *ptr)
7836 {
7837     return (basic_ios_wchar*)((char*)ptr+basic_iostream_wchar_vbtable1[1]);
7838 }
7839
7840 static inline basic_iostream_wchar* basic_iostream_wchar_from_basic_ios(basic_ios_wchar *ptr)
7841 {
7842     return (basic_iostream_wchar*)((char*)ptr-basic_iostream_wchar_vbtable1[1]);
7843 }
7844
7845 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7846 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7847 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_ctor, 12)
7848 basic_iostream_wchar* __thiscall basic_iostream_wchar_ctor(basic_iostream_wchar *this,
7849         basic_streambuf_wchar *strbuf, MSVCP_bool virt_init)
7850 {
7851     basic_ios_wchar *basic_ios;
7852
7853     TRACE("(%p %p %d)\n", this, strbuf, virt_init);
7854
7855     if(virt_init) {
7856         this->base1.vbtable = basic_iostream_wchar_vbtable1;
7857         this->base2.vbtable = basic_iostream_wchar_vbtable2;
7858         basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
7859         basic_ios_wchar_ctor(basic_ios);
7860     }else {
7861         basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
7862     }
7863
7864     basic_istream_wchar_ctor(&this->base1, strbuf, FALSE, FALSE);
7865     basic_ostream_wchar_ctor_uninitialized(&this->base2, 0, FALSE, FALSE);
7866
7867     basic_ios->base.vtable = &MSVCP_basic_iostream_wchar_vtable;
7868     return this;
7869 }
7870
7871 /* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7872 /* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7873 DEFINE_THISCALL_WRAPPER(basic_iostream_short_ctor, 12)
7874 basic_iostream_wchar* __thiscall basic_iostream_short_ctor(basic_iostream_wchar *this,
7875         basic_streambuf_wchar *strbuf, MSVCP_bool virt_init)
7876 {
7877     basic_iostream_wchar_ctor(this, strbuf, virt_init);
7878     basic_istream_wchar_get_basic_ios(&this->base1)->base.vtable = &MSVCP_basic_iostream_short_vtable;
7879     return this;
7880 }
7881
7882 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
7883 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
7884 /* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UAE@XZ */
7885 /* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
7886 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_dtor, 4)
7887 void __thiscall basic_iostream_wchar_dtor(basic_ios_wchar *base)
7888 {
7889     basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base);
7890
7891     TRACE("(%p)\n", this);
7892     basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base2));
7893     basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base1));
7894 }
7895
7896 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
7897 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
7898 /* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
7899 /* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
7900 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vbase_dtor, 4)
7901 void __thiscall basic_iostream_wchar_vbase_dtor(basic_iostream_wchar *this)
7902 {
7903     TRACE("(%p)\n", this);
7904     basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(this));
7905     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base1));
7906 }
7907
7908 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vector_dtor, 8)
7909 basic_iostream_wchar* __thiscall basic_iostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
7910 {
7911     basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base);
7912
7913     TRACE("(%p %x)\n", this, flags);
7914
7915     if(flags & 2) {
7916         /* we have an array, with the number of elements stored before the first object */
7917         INT_PTR i, *ptr = (INT_PTR *)this-1;
7918
7919         for(i=*ptr-1; i>=0; i--)
7920             basic_iostream_wchar_vbase_dtor(this+i);
7921         MSVCRT_operator_delete(ptr);
7922     } else {
7923         basic_iostream_wchar_vbase_dtor(this);
7924         if(flags & 1)
7925             MSVCRT_operator_delete(this);
7926     }
7927
7928     return this;
7929 }
7930
7931 static void __cdecl setprecision_func(ios_base *base, streamsize prec)
7932 {
7933     ios_base_precision_set(base, prec);
7934 }
7935
7936 /* ?setprecision@std@@YA?AU?$_Smanip@H@1@H@Z */
7937 /* ?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z */
7938 manip_streamsize* __cdecl setprecision(manip_streamsize *ret, streamsize prec)
7939 {
7940     TRACE("(%p %s)\n", ret, wine_dbgstr_longlong(prec));
7941
7942     ret->pfunc = setprecision_func;
7943     ret->arg = prec;
7944     return ret;
7945 }
7946
7947 static void __cdecl setw_func(ios_base *base, streamsize width)
7948 {
7949     ios_base_width_set(base, width);
7950 }
7951
7952 /* ?setw@std@@YA?AU?$_Smanip@H@1@H@Z */
7953 /* ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z */
7954 manip_streamsize* __cdecl setw(manip_streamsize *ret, streamsize width)
7955 {
7956     TRACE("(%p %s)\n", ret, wine_dbgstr_longlong(width));
7957
7958     ret->pfunc = setw_func;
7959     ret->arg = width;
7960     return ret;
7961 }
7962
7963 static void __cdecl resetioflags_func(ios_base *base, int mask)
7964 {
7965     ios_base_setf_mask(base, 0, mask);
7966 }
7967
7968 /* ?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z */
7969 manip_int* __cdecl resetiosflags(manip_int *ret, int mask)
7970 {
7971     TRACE("(%p %d)\n", ret, mask);
7972
7973     ret->pfunc = resetioflags_func;
7974     ret->arg = mask;
7975     return ret;
7976 }
7977
7978 static void __cdecl setiosflags_func(ios_base *base, int mask)
7979 {
7980     ios_base_setf_mask(base, FMTFLAG_mask, mask);
7981 }
7982
7983 /* ?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z */
7984 manip_int* __cdecl setiosflags(manip_int *ret, int mask)
7985 {
7986     TRACE("(%p %d)\n", ret, mask);
7987
7988     ret->pfunc = setiosflags_func;
7989     ret->arg = mask;
7990     return ret;
7991 }
7992
7993 static void __cdecl setbase_func(ios_base *base, int set_base)
7994 {
7995     if(set_base == 10)
7996         set_base = FMTFLAG_dec;
7997     else if(set_base == 8)
7998         set_base = FMTFLAG_oct;
7999     else if(set_base == 16)
8000         set_base = FMTFLAG_hex;
8001     else
8002         set_base = 0;
8003
8004     ios_base_setf_mask(base, set_base, FMTFLAG_basefield);
8005 }
8006
8007 /* ?setbase@std@@YA?AU?$_Smanip@H@1@H@Z */
8008 manip_int* __cdecl setbase(manip_int *ret, int base)
8009 {
8010     TRACE("(%p %d)\n", ret, base);
8011
8012     ret->pfunc = setbase_func;
8013     ret->arg = base;
8014     return ret;
8015 }
8016
8017 static basic_filebuf_char filebuf_char_stdin;
8018 /* ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A */
8019 struct {
8020     basic_istream_char obj;
8021     basic_ios_char vbase;
8022 } cin = { { 0 } };
8023 /* ?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A */
8024 /* ?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA */
8025 basic_istream_char *_Ptr_cin = &cin.obj;
8026
8027 static basic_filebuf_wchar filebuf_short_stdin;
8028 /* ?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A */
8029 struct {
8030     basic_istream_wchar obj;
8031     basic_ios_wchar vbase;
8032 } ucin = { { 0 } };
8033 /* ?_Ptr_wcin@std@@3PAV?$basic_istream@GU?$char_traits@G@std@@@1@A */
8034 /* ?_Ptr_wcin@std@@3PEAV?$basic_istream@GU?$char_traits@G@std@@@1@EA */
8035 basic_istream_wchar *_Ptr_ucin = &ucin.obj;
8036
8037 static basic_filebuf_wchar filebuf_wchar_stdin;
8038 /* ?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A */
8039 struct {
8040     basic_istream_wchar obj;
8041     basic_ios_wchar vbase;
8042 } wcin = { { 0 } };
8043 /* ?_Ptr_wcin@std@@3PAV?$basic_istream@_WU?$char_traits@_W@std@@@1@A */
8044 /* ?_Ptr_wcin@std@@3PEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@EA */
8045 basic_istream_wchar *_Ptr_wcin = &wcin.obj;
8046
8047 static basic_filebuf_char filebuf_char_stdout;
8048 /* ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8049 struct {
8050     basic_ostream_char obj;
8051     basic_ios_char vbase;
8052 } cout = { { 0 } };
8053 /* ?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8054 /* ?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8055 basic_ostream_char *_Ptr_cout = &cout.obj;
8056
8057 static basic_filebuf_wchar filebuf_short_stdout;
8058 /* ?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8059 struct {
8060     basic_ostream_wchar obj;
8061     basic_ios_wchar vbase;
8062 } ucout = { { 0 } };
8063 /* ?_Ptr_wcout@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8064 /* ?_Ptr_wcout@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
8065 basic_ostream_wchar *_Ptr_ucout = &ucout.obj;
8066
8067 static basic_filebuf_wchar filebuf_wchar_stdout;
8068 /* ?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8069 struct {
8070     basic_ostream_wchar obj;
8071     basic_ios_wchar vbase;
8072 } wcout = { { 0 } };
8073 /* ?_Ptr_wcout@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8074 /* ?_Ptr_wcout@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
8075 basic_ostream_wchar *_Ptr_wcout = &wcout.obj;
8076
8077 static basic_filebuf_char filebuf_char_stderr;
8078 /* ?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8079 struct {
8080     basic_ostream_char obj;
8081     basic_ios_char vbase;
8082 } cerr = { { 0 } };
8083 /* ?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8084 /* ?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8085 basic_ostream_char *_Ptr_cerr = &cerr.obj;
8086
8087 static basic_filebuf_wchar filebuf_short_stderr;
8088 /* ?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8089 struct {
8090     basic_ostream_wchar obj;
8091     basic_ios_wchar vbase;
8092 } ucerr = { { 0 } };
8093 /* ?_Ptr_wcerr@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8094 /* ?_Ptr_wcerr@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
8095 basic_ostream_wchar *_Ptr_ucerr = &ucerr.obj;
8096
8097 static basic_filebuf_wchar filebuf_wchar_stderr;
8098 /* ?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8099 struct {
8100     basic_ostream_wchar obj;
8101     basic_ios_wchar vbase;
8102 } wcerr = { { 0 } };
8103 /* ?_Ptr_wcerr@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8104 /* ?_Ptr_wcerr@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
8105 basic_ostream_wchar *_Ptr_wcerr = &wcerr.obj;
8106
8107 static basic_filebuf_char filebuf_char_log;
8108 /* ?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8109 struct {
8110     basic_ostream_char obj;
8111     basic_ios_char vbase;
8112 } clog = { { 0 } };
8113 /* ?_Ptr_clog@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8114 /* ?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8115 basic_ostream_char *_Ptr_clog = &clog.obj;
8116
8117 static basic_filebuf_wchar filebuf_short_log;
8118 /* ?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8119 struct {
8120     basic_ostream_wchar obj;
8121     basic_ios_wchar vbase;
8122 } uclog = { { 0 } };
8123 /* ?_Ptr_wclog@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8124 /* ?_Ptr_wclog@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
8125 basic_ostream_wchar *_Ptr_uclog = &uclog.obj;
8126
8127 static basic_filebuf_wchar filebuf_wchar_log;
8128 /* ?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8129 struct {
8130     basic_ostream_wchar obj;
8131     basic_ios_wchar vbase;
8132 } wclog = { { 0 } };
8133 /* ?_Ptr_wclog@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8134 /* ?_Ptr_wclog@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
8135 basic_ostream_wchar *_Ptr_wclog = &wclog.obj;
8136
8137 /* ?_Init_cnt@Init@ios_base@std@@0HA */
8138 int ios_base_Init__Init_cnt = -1;
8139
8140 /* ?_Init_cnt_func@Init@ios_base@std@@CAAAHXZ */
8141 /* ?_Init_cnt_func@Init@ios_base@std@@CAAEAHXZ */
8142 int* __cdecl ios_base_Init__Init_cnt_func(void)
8143 {
8144     return &ios_base_Init__Init_cnt;
8145 }
8146
8147 /* ?_Init_ctor@Init@ios_base@std@@CAXPAV123@@Z */
8148 /* ?_Init_ctor@Init@ios_base@std@@CAXPEAV123@@Z */
8149 void __cdecl ios_base_Init__Init_ctor(void *this)
8150 {
8151     TRACE("(%p)\n", this);
8152
8153     if(ios_base_Init__Init_cnt < 0)
8154         ios_base_Init__Init_cnt = 1;
8155     else
8156         ios_base_Init__Init_cnt++;
8157 }
8158
8159 /* ??0Init@ios_base@std@@QAE@XZ */
8160 /* ??0Init@ios_base@std@@QEAA@XZ */
8161 DEFINE_THISCALL_WRAPPER(ios_base_Init_ctor, 4)
8162 void* __thiscall ios_base_Init_ctor(void *this)
8163 {
8164     ios_base_Init__Init_ctor(this);
8165     return this;
8166 }
8167
8168 /* ?_Init_dtor@Init@ios_base@std@@CAXPAV123@@Z */
8169 /* ?_Init_dtor@Init@ios_base@std@@CAXPEAV123@@Z */
8170 void __cdecl ios_base_Init__Init_dtor(void *this)
8171 {
8172     TRACE("(%p)\n", this);
8173
8174     ios_base_Init__Init_cnt--;
8175     if(!ios_base_Init__Init_cnt) {
8176         basic_ostream_char_flush(&cout.obj);
8177         basic_ostream_char_flush(&cerr.obj);
8178         basic_ostream_char_flush(&clog.obj);
8179     }
8180 }
8181
8182 /* ??1Init@ios_base@std@@QAE@XZ */
8183 /* ??1Init@ios_base@std@@QEAA@XZ */
8184 DEFINE_THISCALL_WRAPPER(ios_base_Init_dtor, 4)
8185 void __thiscall ios_base_Init_dtor(void *this)
8186 {
8187     ios_base_Init__Init_dtor(this);
8188 }
8189
8190 /* ??4Init@ios_base@std@@QAEAAV012@ABV012@@Z */
8191 /* ??4Init@ios_base@std@@QEAAAEAV012@AEBV012@@Z */
8192 DEFINE_THISCALL_WRAPPER(ios_base_Init_op_assign, 8)
8193 void* __thiscall ios_base_Init_op_assign(void *this, void *rhs)
8194 {
8195     TRACE("(%p %p)\n", this, rhs);
8196     return this;
8197 }
8198
8199 /* ?_Init_cnt@_Winit@std@@0HA */
8200 int _Winit__Init_cnt = -1;
8201
8202 /* ??0_Winit@std@@QAE@XZ */
8203 /* ??0_Winit@std@@QEAA@XZ */
8204 DEFINE_THISCALL_WRAPPER(_Winit_ctor, 4)
8205 void* __thiscall _Winit_ctor(void *this)
8206 {
8207     TRACE("(%p)\n", this);
8208
8209     if(_Winit__Init_cnt < 0)
8210         _Winit__Init_cnt = 1;
8211     else
8212         _Winit__Init_cnt++;
8213
8214     return this;
8215 }
8216
8217 /* ??1_Winit@std@@QAE@XZ */
8218 /* ??1_Winit@std@@QAE@XZ */
8219 DEFINE_THISCALL_WRAPPER(_Winit_dtor, 4)
8220 void __thiscall _Winit_dtor(void *this)
8221 {
8222     TRACE("(%p)\n", this);
8223
8224     _Winit__Init_cnt--;
8225     if(!_Winit__Init_cnt) {
8226         basic_ostream_wchar_flush(&wcout.obj);
8227         basic_ostream_wchar_flush(&wcerr.obj);
8228         basic_ostream_wchar_flush(&wclog.obj);
8229     }
8230 }
8231
8232 /* ??4_Winit@std@@QAEAAV01@ABV01@@Z */
8233 /* ??4_Winit@std@@QEAAAEAV01@AEBV01@@Z */
8234 DEFINE_THISCALL_WRAPPER(_Winit_op_assign, 8)
8235 void* __thiscall _Winit_op_assign(void *this, void *rhs)
8236 {
8237     TRACE("(%p %p)\n", this, rhs);
8238     return this;
8239 }
8240
8241 void init_io(void *base)
8242 {
8243 #ifdef __x86_64__
8244     init_iosb_rtti(base);
8245     init_ios_base_rtti(base);
8246     init_basic_ios_char_rtti(base);
8247     init_basic_ios_wchar_rtti(base);
8248     init_basic_ios_short_rtti(base);
8249     init_basic_streambuf_char_rtti(base);
8250     init_basic_streambuf_wchar_rtti(base);
8251     init_basic_streambuf_short_rtti(base);
8252     init_basic_filebuf_char_rtti(base);
8253     init_basic_filebuf_wchar_rtti(base);
8254     init_basic_filebuf_short_rtti(base);
8255     init_basic_ostream_char_rtti(base);
8256     init_basic_ostream_wchar_rtti(base);
8257     init_basic_ostream_short_rtti(base);
8258     init_basic_istream_char_rtti(base);
8259     init_basic_istream_wchar_rtti(base);
8260     init_basic_istream_short_rtti(base);
8261     init_basic_iostream_char_rtti(base);
8262     init_basic_iostream_wchar_rtti(base);
8263     init_basic_iostream_short_rtti(base);
8264 #endif
8265
8266     basic_filebuf_char_ctor_file(&filebuf_char_stdin, stdin);
8267     basic_istream_char_ctor(&cin.obj, &filebuf_char_stdin.base, FALSE/*FIXME*/, TRUE);
8268
8269     basic_filebuf_short_ctor_file(&filebuf_short_stdin, stdin);
8270     basic_istream_short_ctor(&ucin.obj, &filebuf_short_stdin.base, FALSE/*FIXME*/, TRUE);
8271
8272     basic_filebuf_wchar_ctor_file(&filebuf_wchar_stdin, stdin);
8273     basic_istream_wchar_ctor(&wcin.obj, &filebuf_wchar_stdin.base, FALSE/*FIXME*/, TRUE);
8274
8275     basic_filebuf_char_ctor_file(&filebuf_char_stdout, stdout);
8276     basic_ostream_char_ctor(&cout.obj, &filebuf_char_stdout.base, FALSE/*FIXME*/, TRUE);
8277
8278     basic_filebuf_short_ctor_file(&filebuf_short_stdout, stdout);
8279     basic_ostream_short_ctor(&ucout.obj, &filebuf_short_stdout.base, FALSE/*FIXME*/, TRUE);
8280
8281     basic_filebuf_wchar_ctor_file(&filebuf_wchar_stdout, stdout);
8282     basic_ostream_wchar_ctor(&wcout.obj, &filebuf_wchar_stdout.base, FALSE/*FIXME*/, TRUE);
8283
8284     basic_filebuf_char_ctor_file(&filebuf_char_stderr, stderr);
8285     basic_ostream_char_ctor(&cerr.obj, &filebuf_char_stderr.base, FALSE/*FIXME*/, TRUE);
8286
8287     basic_filebuf_short_ctor_file(&filebuf_short_stderr, stderr);
8288     basic_ostream_short_ctor(&ucerr.obj, &filebuf_short_stderr.base, FALSE/*FIXME*/, TRUE);
8289
8290     basic_filebuf_wchar_ctor_file(&filebuf_wchar_stderr, stderr);
8291     basic_ostream_wchar_ctor(&wcerr.obj, &filebuf_wchar_stderr.base, FALSE/*FIXME*/, TRUE);
8292
8293     basic_filebuf_char_ctor_file(&filebuf_char_log, stderr);
8294     basic_ostream_char_ctor(&clog.obj, &filebuf_char_log.base, FALSE/*FIXME*/, TRUE);
8295
8296     basic_filebuf_short_ctor_file(&filebuf_short_log, stderr);
8297     basic_ostream_short_ctor(&uclog.obj, &filebuf_short_log.base, FALSE/*FIXME*/, TRUE);
8298
8299     basic_filebuf_wchar_ctor_file(&filebuf_wchar_log, stderr);
8300     basic_ostream_wchar_ctor(&wclog.obj, &filebuf_wchar_log.base, FALSE/*FIXME*/, TRUE);
8301 }
8302
8303 void free_io(void)
8304 {
8305     basic_istream_char_vbase_dtor(&cin.obj);
8306     basic_filebuf_char_dtor(&filebuf_char_stdin);
8307
8308     basic_istream_wchar_vbase_dtor(&ucin.obj);
8309     basic_filebuf_wchar_dtor(&filebuf_short_stdin);
8310
8311     basic_istream_wchar_vbase_dtor(&wcin.obj);
8312     basic_filebuf_wchar_dtor(&filebuf_wchar_stdin);
8313
8314     basic_ostream_char_vbase_dtor(&cout.obj);
8315     basic_filebuf_char_dtor(&filebuf_char_stdout);
8316
8317     basic_ostream_wchar_vbase_dtor(&ucout.obj);
8318     basic_filebuf_wchar_dtor(&filebuf_short_stdout);
8319
8320     basic_ostream_wchar_vbase_dtor(&wcout.obj);
8321     basic_filebuf_wchar_dtor(&filebuf_wchar_stdout);
8322
8323     basic_ostream_char_vbase_dtor(&cerr.obj);
8324     basic_filebuf_char_dtor(&filebuf_char_stderr);
8325
8326     basic_ostream_wchar_vbase_dtor(&ucerr.obj);
8327     basic_filebuf_wchar_dtor(&filebuf_short_stderr);
8328
8329     basic_ostream_wchar_vbase_dtor(&wcerr.obj);
8330     basic_filebuf_wchar_dtor(&filebuf_wchar_stderr);
8331
8332     basic_ostream_char_vbase_dtor(&clog.obj);
8333     basic_filebuf_char_dtor(&filebuf_char_log);
8334
8335     basic_ostream_wchar_vbase_dtor(&uclog.obj);
8336     basic_filebuf_wchar_dtor(&filebuf_short_log);
8337
8338     basic_ostream_wchar_vbase_dtor(&wclog.obj);
8339     basic_filebuf_wchar_dtor(&filebuf_wchar_log);
8340 }