msvcp90: Added partial basic_ios<wchar> implementation.
[wine] / dlls / msvcp90 / 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
24 #include "msvcp90.h"
25 #include "windef.h"
26 #include "winbase.h"
27 #include "wine/debug.h"
28 WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
29
30 typedef enum {
31     IOSTATE_goodbit   = 0x00,
32     IOSTATE_eofbit    = 0x01,
33     IOSTATE_failbit   = 0x02,
34     IOSTATE_badbit    = 0x04,
35     IOSTATE__Hardfail = 0x10,
36     IOSTATE_mask      = 0x17
37 } IOSB_iostate;
38
39 typedef enum {
40     FMTFLAG_skipws      = 0x0001,
41     FMTFLAG_unitbuf     = 0x0002,
42     FMTFLAG_uppercase   = 0x0004,
43     FMTFLAG_showbase    = 0x0008,
44     FMTFLAG_showpoint   = 0x0010,
45     FMTFLAG_showpos     = 0x0020,
46     FMTFLAG_left        = 0x0040,
47     FMTFLAG_right       = 0x0080,
48     FMTFLAG_internal    = 0x0100,
49     FMTFLAG_dec         = 0x0200,
50     FMTFLAG_oct         = 0x0400,
51     FMTFLAG_hex         = 0x0800,
52     FMTFLAG_scientific  = 0x1000,
53     FMTFLAG_fixed       = 0x2000,
54     FMTFLAG_hexfloat    = 0x3000,
55     FMTFLAG_boolalpha   = 0x4000,
56     FMTFLAG_stdio       = 0x8000,
57     FMTFLAG_adjustfield = FMTFLAG_left|FMTFLAG_right|FMTFLAG_internal,
58     FMTFLAG_basefield   = FMTFLAG_dec|FMTFLAG_oct|FMTFLAG_hex,
59     FMTFLAG_floadfield  = FMTFLAG_scientific|FMTFLAG_fixed,
60     FMTFLAG_mask        = 0xffff
61 } IOSB_fmtflags;
62
63 typedef struct _iosarray {
64     struct _iosarray *next;
65     int index;
66     int long_val;
67     void *ptr_val;
68 } IOS_BASE_iosarray;
69
70 typedef enum {
71     EVENT_erase_event,
72     EVENT_imbue_event,
73     EVENT_copyfmt_event
74 } IOS_BASE_event;
75
76 struct _ios_base;
77 typedef void (CDECL *IOS_BASE_event_callback)(IOS_BASE_event, struct _ios_base*, int);
78 typedef struct _fnarray {
79     struct _fnarray *next;
80     int index;
81     IOS_BASE_event_callback event_handler;
82 } IOS_BASE_fnarray;
83
84 /* ?_Index@ios_base@std@@0HA */
85 int ios_base_Index = 0;
86 /* ?_Sync@ios_base@std@@0_NA */
87 MSVCP_bool ios_base_Sync = FALSE;
88
89 typedef struct _ios_base {
90     const vtable_ptr *vtable;
91     MSVCP_size_t stdstr;
92     IOSB_iostate state;
93     IOSB_iostate except;
94     IOSB_fmtflags fmtfl;
95     MSVCP_size_t prec;
96     MSVCP_size_t wide;
97     IOS_BASE_iosarray *arr;
98     IOS_BASE_fnarray *calls;
99     locale *loc;
100 } ios_base;
101
102 typedef struct {
103     streamoff off;
104     __int64 DECLSPEC_ALIGN(8) pos;
105     int state;
106 } fpos_int;
107
108 static inline const char* debugstr_fpos_int(fpos_int *fpos)
109 {
110     return wine_dbg_sprintf("fpos(%lu %s %d)", fpos->off, wine_dbgstr_longlong(fpos->pos), fpos->state);
111 }
112
113 typedef struct {
114     const vtable_ptr *vtable;
115     mutex lock;
116     char *rbuf;
117     char *wbuf;
118     char **prbuf;
119     char **pwbuf;
120     char *rpos;
121     char *wpos;
122     char **prpos;
123     char **pwpos;
124     int rsize;
125     int wsize;
126     int *prsize;
127     int *pwsize;
128     locale *loc;
129 } basic_streambuf_char;
130
131 typedef struct {
132     const vtable_ptr *vtable;
133     mutex lock;
134     wchar_t *rbuf;
135     wchar_t *wbuf;
136     wchar_t **prbuf;
137     wchar_t **pwbuf;
138     wchar_t *rpos;
139     wchar_t *wpos;
140     wchar_t **prpos;
141     wchar_t **pwpos;
142     int rsize;
143     int wsize;
144     int *prsize;
145     int *pwsize;
146     locale *loc;
147 } basic_streambuf_wchar;
148
149 typedef struct {
150     ios_base base;
151     basic_streambuf_char *strbuf;
152     struct _basic_ostream_char *stream;
153     char fillch;
154 } basic_ios_char;
155
156 typedef struct {
157     ios_base base;
158     basic_streambuf_wchar *strbuf;
159     struct _basic_ostream_wchar *stream;
160     wchar_t fillch;
161 } basic_ios_wchar;
162
163 typedef struct _basic_ostream_char {
164     const int *vbtable;
165     basic_ios_char base;
166 } basic_ostream_char;
167
168 typedef struct _basic_ostream_wchar {
169     const int *vbtable;
170     basic_ios_char base;
171 } basic_ostream_wchar;
172
173 extern const vtable_ptr MSVCP_iosb_vtable;
174
175 /* ??_7ios_base@std@@6B@ */
176 extern const vtable_ptr MSVCP_ios_base_vtable;
177
178 /* ??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@ */
179 extern const vtable_ptr MSVCP_basic_ios_char_vtable;
180
181 /* ??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@ */
182 extern const vtable_ptr MSVCP_basic_ios_wchar_vtable;
183
184 /* ??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@ */
185 extern const vtable_ptr MSVCP_basic_streambuf_char_vtable;
186
187 /* ??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@ */
188 extern const vtable_ptr MSVCP_basic_streambuf_wchar_vtable;
189
190 /* ??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@ */
191 extern const vtable_ptr MSVCP_basic_streambuf_short_vtable;
192
193 /* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */
194 extern const vtable_ptr MSVCP_basic_ostream_char_vtable;
195
196 DEFINE_RTTI_DATA(iosb, 0, 0, NULL, NULL, NULL, ".?AV?$_Iosb@H@std@@");
197 DEFINE_RTTI_DATA(ios_base, 0, 1, &iosb_rtti_base_descriptor, NULL, NULL, ".?AV?$_Iosb@H@std@@");
198 DEFINE_RTTI_DATA(basic_ios_char, 0, 2, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
199         NULL, ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@");
200 DEFINE_RTTI_DATA(basic_ios_wchar, 0, 2, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
201         NULL, ".?AV?$basic_ios@_WU?$char_traits@_W@std@@@std@@");
202 DEFINE_RTTI_DATA(basic_streambuf_char, 0, 0, NULL, NULL, NULL,
203         ".?AV?$basic_streambuf@DU?$char_traits@D@std@@@std@@");
204 DEFINE_RTTI_DATA(basic_streambuf_wchar, 0, 0, NULL, NULL, NULL,
205         ".?AV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@");
206 DEFINE_RTTI_DATA(basic_streambuf_short, 0, 0, NULL, NULL, NULL,
207         ".?AV?$basic_streambuf@GU?$char_traits@G@std@@@std@@");
208 DEFINE_RTTI_DATA(basic_ostream_char, 4, 3, &basic_ios_char_rtti_base_descriptor, &ios_base_rtti_base_descriptor,
209         &iosb_rtti_base_descriptor, ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@");
210
211 #ifndef __GNUC__
212 void __asm_dummy_vtables(void) {
213 #endif
214     __ASM_VTABLE(iosb, "");
215     __ASM_VTABLE(ios_base, "");
216     __ASM_VTABLE(basic_ios_char, "");
217     __ASM_VTABLE(basic_ios_wchar, "");
218     __ASM_VTABLE(basic_streambuf_char,
219             VTABLE_ADD_FUNC(basic_streambuf_char_overflow)
220             VTABLE_ADD_FUNC(basic_streambuf_char_pbackfail)
221             VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
222             VTABLE_ADD_FUNC(basic_streambuf_char_underflow)
223             VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
224             VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
225             VTABLE_ADD_FUNC(basic_streambuf_char__Xsgetn_s)
226             VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
227             VTABLE_ADD_FUNC(basic_streambuf_char_seekoff)
228             VTABLE_ADD_FUNC(basic_streambuf_char_seekpos)
229             VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
230             VTABLE_ADD_FUNC(basic_streambuf_char_sync)
231             VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
232     __ASM_VTABLE(basic_streambuf_wchar,
233             VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
234             VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
235             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
236             VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
237             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
238             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
239             VTABLE_ADD_FUNC(basic_streambuf_wchar__Xsgetn_s)
240             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
241             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
242             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
243             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
244             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
245             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
246     __ASM_VTABLE(basic_streambuf_short,
247             VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
248             VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
249             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
250             VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
251             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
252             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
253             VTABLE_ADD_FUNC(basic_streambuf_wchar__Xsgetn_s)
254             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
255             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
256             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
257             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
258             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
259             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
260     __ASM_VTABLE(basic_ostream_char, "");
261 #ifndef __GNUC__
262 }
263 #endif
264
265 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
266 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
267 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp_next, 16)
268 void __thiscall basic_streambuf_char_setp_next(basic_streambuf_char *this, char *first, char *next, char *last)
269 {
270     TRACE("(%p %p %p %p)\n", this, first, next, last);
271
272     this->wbuf = first;
273     this->wpos = next;
274     this->wsize = last-next;
275 }
276
277 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z */
278 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z */
279 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp, 12)
280 void __thiscall basic_streambuf_char_setp(basic_streambuf_char *this, char *first, char *last)
281 {
282     basic_streambuf_char_setp_next(this, first, first, last);
283 }
284
285 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
286 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
287 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setg, 16)
288 void __thiscall basic_streambuf_char_setg(basic_streambuf_char *this, char *first, char *next, char *last)
289 {
290     TRACE("(%p %p %p %p)\n", this, first, next, last);
291
292     this->rbuf = first;
293     this->rpos = next;
294     this->rsize = last-next;
295 }
296
297 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ */
298 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ */
299 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init_empty, 4)
300 void __thiscall basic_streambuf_char__Init_empty(basic_streambuf_char *this)
301 {
302     TRACE("(%p)\n", this);
303
304     this->prbuf = &this->rbuf;
305     this->pwbuf = &this->wbuf;
306     this->prpos = &this->rpos;
307     this->pwpos = &this->wpos;
308     this->prsize = &this->rsize;
309     this->pwsize = &this->wsize;
310
311     basic_streambuf_char_setp(this, NULL, NULL);
312     basic_streambuf_char_setg(this, NULL, NULL, NULL);
313 }
314
315 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@W4_Uninitialized@1@@Z */
316 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
317 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor_uninitialized, 8)
318 basic_streambuf_char* __thiscall basic_streambuf_char_ctor_uninitialized(basic_streambuf_char *this, int uninitialized)
319 {
320     TRACE("(%p %d)\n", this, uninitialized);
321     this->vtable = &MSVCP_basic_streambuf_char_vtable;
322     mutex_ctor(&this->lock);
323     return this;
324 }
325
326 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ */
327 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ */
328 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor, 4)
329 basic_streambuf_char* __thiscall basic_streambuf_char_ctor(basic_streambuf_char *this)
330 {
331     TRACE("(%p)\n", this);
332
333     this->vtable = &MSVCP_basic_streambuf_char_vtable;
334     mutex_ctor(&this->lock);
335     this->loc = MSVCRT_operator_new(sizeof(locale));
336     locale_ctor(this->loc);
337     basic_streambuf_char__Init_empty(this);
338
339     return this;
340 }
341
342 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
343 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
344 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_dtor, 4)
345 void __thiscall basic_streambuf_char_dtor(basic_streambuf_char *this)
346 {
347     TRACE("(%p)\n", this);
348
349     mutex_dtor(&this->lock);
350     locale_dtor(this->loc);
351     MSVCRT_operator_delete(this->loc);
352 }
353
354 DEFINE_THISCALL_WRAPPER(MSVCP_basic_streambuf_char_vector_dtor, 8)
355 basic_streambuf_char* __thiscall MSVCP_basic_streambuf_char_vector_dtor(basic_streambuf_char *this, unsigned int flags)
356 {
357     TRACE("(%p %x)\n", this, flags);
358     if(flags & 2) {
359         /* we have an array, with the number of elements stored before the first object */
360         int i, *ptr = (int *)this-1;
361
362         for(i=*ptr-1; i>=0; i--)
363             basic_streambuf_char_dtor(this+i);
364         MSVCRT_operator_delete(ptr);
365     } else {
366         basic_streambuf_char_dtor(this);
367         if(flags & 1)
368             MSVCRT_operator_delete(this);
369     }
370
371     return this;
372 }
373
374 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
375 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
376 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnavail, 4)
377 streamsize __thiscall basic_streambuf_char__Gnavail(const basic_streambuf_char *this)
378 {
379     TRACE("(%p)\n", this);
380     return *this->prpos ? *this->prsize : 0;
381 }
382
383 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
384 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
385 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gndec, 4)
386 char* __thiscall basic_streambuf_char__Gndec(basic_streambuf_char *this)
387 {
388     TRACE("(%p)\n", this);
389     (*this->prsize)++;
390     (*this->prpos)--;
391     return *this->prpos;
392 }
393
394 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
395 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
396 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gninc, 4)
397 char* __thiscall basic_streambuf_char__Gninc(basic_streambuf_char *this)
398 {
399     TRACE("(%p)\n", this);
400     (*this->prsize)--;
401     return (*this->prpos)++;
402 }
403
404 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
405 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
406 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnpreinc, 4)
407 char* __thiscall basic_streambuf_char__Gnpreinc(basic_streambuf_char *this)
408 {
409     TRACE("(%p)\n", this);
410     (*this->prsize)--;
411     (*this->prpos)++;
412     return *this->prpos;
413 }
414
415 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z */
416 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z */
417 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init, 28)
418 void __thiscall basic_streambuf_char__Init(basic_streambuf_char *this, char **gf, char **gn, int *gc, char **pf, char **pn, int *pc)
419 {
420     TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
421
422     this->prbuf = gf;
423     this->pwbuf = pf;
424     this->prpos = gn;
425     this->pwpos = pn;
426     this->prsize = gc;
427     this->pwsize = pc;
428 }
429
430 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
431 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
432 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Lock, 4)
433 void __thiscall basic_streambuf_char__Lock(basic_streambuf_char *this)
434 {
435     TRACE("(%p)\n", this);
436     mutex_lock(&this->lock);
437 }
438
439 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
440 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
441 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pnavail, 4)
442 streamsize __thiscall basic_streambuf_char__Pnavail(const basic_streambuf_char *this)
443 {
444     TRACE("(%p)\n", this);
445     return *this->pwpos ? *this->pwsize : 0;
446 }
447
448 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
449 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
450 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pninc, 4)
451 char* __thiscall basic_streambuf_char__Pninc(basic_streambuf_char *this)
452 {
453     TRACE("(%p)\n", this);
454     (*this->pwsize)--;
455     return (*this->pwpos)++;
456 }
457
458 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
459 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
460 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_underflow, 4)
461 #define call_basic_streambuf_char_underflow(this) CALL_VTBL_FUNC(this, 16, \
462         int, (basic_streambuf_char*), (this))
463 int __thiscall basic_streambuf_char_underflow(basic_streambuf_char *this)
464 {
465     TRACE("(%p)\n", this);
466     return EOF;
467 }
468
469 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
470 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
471 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_uflow, 4)
472 #define call_basic_streambuf_char_uflow(this) CALL_VTBL_FUNC(this, 20, \
473         int, (basic_streambuf_char*), (this))
474 int __thiscall basic_streambuf_char_uflow(basic_streambuf_char *this)
475 {
476     int ret;
477
478     TRACE("(%p)\n", this);
479
480     if(call_basic_streambuf_char_underflow(this)==EOF)
481         return EOF;
482
483     ret = **this->prpos;
484     (*this->prsize)--;
485     (*this->prpos)++;
486     return ret;
487 }
488
489 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADIH@Z */
490 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_K_J@Z */
491 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Xsgetn_s, 16)
492 #define call_basic_streambuf_char__Xsgetn_s(this, ptr, size, count) CALL_VTBL_FUNC(this, 28, \
493         streamsize, (basic_streambuf_char*, char*, MSVCP_size_t, streamsize), (this, ptr, size, count))
494 streamsize __thiscall basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
495 {
496     streamsize copied, chunk;
497
498     TRACE("(%p %p %lu %lu)\n", this, ptr, size, count);
499
500     for(copied=0; copied<count && size;) {
501         chunk = basic_streambuf_char__Gnavail(this);
502         if(chunk > count-copied)
503             chunk = count-copied;
504
505         if(chunk) {
506             memcpy_s(ptr+copied, size, *this->prpos, chunk);
507             *this->prpos += chunk;
508             *this->prsize -= chunk;
509             copied += chunk;
510             size -= chunk;
511         }else if((ptr[copied] = call_basic_streambuf_char_uflow(this)) != EOF) {
512             copied++;
513             size--;
514         }else {
515             break;
516         }
517     }
518
519     return copied;
520 }
521
522 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
523 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
524 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Sgetn_s, 16)
525 streamsize __thiscall basic_streambuf_char__Sgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
526 {
527     TRACE("(%p %p %lu %lu)\n", this, ptr, size, count);
528     return call_basic_streambuf_char__Xsgetn_s(this, ptr, size, count);
529 }
530
531 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
532 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
533 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Unlock, 4)
534 void __thiscall basic_streambuf_char__Unlock(basic_streambuf_char *this)
535 {
536     TRACE("(%p)\n", this);
537     mutex_unlock(&this->lock);
538 }
539
540 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
541 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
542 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_eback, 4)
543 char* __thiscall basic_streambuf_char_eback(const basic_streambuf_char *this)
544 {
545     TRACE("(%p)\n", this);
546     return *this->prbuf;
547 }
548
549 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
550 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
551 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gptr, 4)
552 char* __thiscall basic_streambuf_char_gptr(const basic_streambuf_char *this)
553 {
554     TRACE("(%p)\n", this);
555     return *this->prpos;
556 }
557
558 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
559 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
560 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_egptr, 4)
561 char* __thiscall basic_streambuf_char_egptr(const basic_streambuf_char *this)
562 {
563     TRACE("(%p)\n", this);
564     return *this->prpos+*this->prsize;
565 }
566
567 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
568 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
569 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_epptr, 4)
570 char* __thiscall basic_streambuf_char_epptr(const basic_streambuf_char *this)
571 {
572     TRACE("(%p)\n", this);
573     return *this->pwpos+*this->pwsize;
574 }
575
576 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
577 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
578 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gbump, 8)
579 void __thiscall basic_streambuf_char_gbump(basic_streambuf_char *this, int off)
580 {
581     TRACE("(%p %d)\n", this, off);
582     *this->prpos += off;
583     *this->prsize -= off;
584 }
585
586 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ */
587 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ */
588 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_getloc, 8)
589 locale* __thiscall basic_streambuf_char_getloc(const basic_streambuf_char *this, locale *ret)
590 {
591     TRACE("(%p)\n", this);
592     return locale_copy_ctor(ret, this->loc);
593 }
594
595 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
596 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
597 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_imbue, 8)
598 #define call_basic_streambuf_char_imbue(this, loc) CALL_VTBL_FUNC(this, 52, \
599         void, (basic_streambuf_char*, const locale*), (this, loc))
600 void __thiscall basic_streambuf_char_imbue(basic_streambuf_char *this, const locale *loc)
601 {
602     TRACE("(%p %p)\n", this, loc);
603 }
604
605 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
606 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
607 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_overflow, 8)
608 #define call_basic_streambuf_char_overflow(this, ch) CALL_VTBL_FUNC(this, 4, \
609         int, (basic_streambuf_char*, int), (this, ch))
610 int __thiscall basic_streambuf_char_overflow(basic_streambuf_char *this, int ch)
611 {
612     TRACE("(%p %d)\n", this, ch);
613     return EOF;
614 }
615
616 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
617 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
618 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbackfail, 8)
619 #define call_basic_streambuf_char_pbackfail(this, ch) CALL_VTBL_FUNC(this, 8, \
620         int, (basic_streambuf_char*, int), (this, ch))
621 int __thiscall basic_streambuf_char_pbackfail(basic_streambuf_char *this, int ch)
622 {
623     TRACE("(%p %d)\n", this, ch);
624     return EOF;
625 }
626
627 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
628 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
629 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbase, 4)
630 char* __thiscall basic_streambuf_char_pbase(const basic_streambuf_char *this)
631 {
632     TRACE("(%p)\n", this);
633     return *this->pwbuf;
634 }
635
636 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
637 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
638 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbump, 8)
639 void __thiscall basic_streambuf_char_pbump(basic_streambuf_char *this, int off)
640 {
641     TRACE("(%p %d)\n", this, off);
642     *this->pwpos += off;
643     *this->pwsize -= off;
644 }
645
646 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
647 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
648 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pptr, 4)
649 char* __thiscall basic_streambuf_char_pptr(const basic_streambuf_char *this)
650 {
651     TRACE("(%p)\n", this);
652     return *this->pwpos;
653 }
654
655 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
656 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
657 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubimbue, 12)
658 locale* __thiscall basic_streambuf_char_pubimbue(basic_streambuf_char *this, locale *ret, const locale *loc)
659 {
660     TRACE("(%p %p)\n", this, loc);
661     memcpy(ret, this->loc, sizeof(locale));
662     call_basic_streambuf_char_imbue(this, loc);
663     locale_copy_ctor(this->loc, loc);
664     return ret;
665 }
666
667 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
668 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
669 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekoff, 20)
670 #define call_basic_streambuf_char_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 36, \
671         fpos_int*, (basic_streambuf_char*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
672 fpos_int* __thiscall basic_streambuf_char_seekoff(basic_streambuf_char *this,
673         fpos_int *ret, streamoff off, int way, int mode)
674 {
675     TRACE("(%p %lu %d %d)\n", this, off, way, mode);
676     ret->off = 0;
677     ret->pos = -1;
678     ret->state = 0;
679     return ret;
680 }
681
682 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
683 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
684 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff, 20)
685 fpos_int* __thiscall basic_streambuf_char_pubseekoff(basic_streambuf_char *this,
686         fpos_int *ret, streamoff off, int way, int mode)
687 {
688     TRACE("(%p %lu %d %d)\n", this, off, way, mode);
689     return call_basic_streambuf_char_seekoff(this, ret, off, way, mode);
690 }
691
692 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
693 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
694 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff_old, 20)
695 fpos_int* __thiscall basic_streambuf_char_pubseekoff_old(basic_streambuf_char *this,
696         fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
697 {
698     TRACE("(%p %lu %d %d)\n", this, off, way, mode);
699     return basic_streambuf_char_pubseekoff(this, ret, off, way, mode);
700 }
701
702 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
703 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
704 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekpos, 36)
705 #define call_basic_streambuf_char_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 40, \
706         fpos_int*, (basic_streambuf_char*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
707 fpos_int* __thiscall basic_streambuf_char_seekpos(basic_streambuf_char *this,
708         fpos_int *ret, fpos_int pos, int mode)
709 {
710     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
711     ret->off = 0;
712     ret->pos = -1;
713     ret->state = 0;
714     return ret;
715 }
716
717 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
718 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
719 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos, 36)
720 fpos_int* __thiscall basic_streambuf_char_pubseekpos(basic_streambuf_char *this,
721         fpos_int *ret, fpos_int pos, int mode)
722 {
723     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
724     return call_basic_streambuf_char_seekpos(this, ret, pos, mode);
725 }
726
727 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
728 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
729 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos_old, 36)
730 fpos_int* __thiscall basic_streambuf_char_pubseekpos_old(basic_streambuf_char *this,
731         fpos_int *ret, fpos_int pos, unsigned int mode)
732 {
733     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
734     return basic_streambuf_char_pubseekpos(this, ret, pos, mode);
735 }
736
737 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PADH@Z */
738 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z */
739 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setbuf, 12)
740 #define call_basic_streambuf_char_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 44, \
741         basic_streambuf_char*, (basic_streambuf_char*, char*, streamsize), (this, buf, count))
742 basic_streambuf_char* __thiscall basic_streambuf_char_setbuf(basic_streambuf_char *this, char *buf, streamsize count)
743 {
744     TRACE("(%p %p %lu)\n", this, buf, count);
745     return this;
746 }
747
748 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PADH@Z */
749 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z */
750 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsetbuf, 12)
751 basic_streambuf_char* __thiscall basic_streambuf_char_pubsetbuf(basic_streambuf_char *this, char *buf, streamsize count)
752 {
753     TRACE("(%p %p %lu)\n", this, buf, count);
754     return call_basic_streambuf_char_setbuf(this, buf, count);
755 }
756
757 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
758 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
759 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sync, 4)
760 #define call_basic_streambuf_char_sync(this) CALL_VTBL_FUNC(this, 48, \
761         int, (basic_streambuf_char*), (this))
762 int __thiscall basic_streambuf_char_sync(basic_streambuf_char *this)
763 {
764     TRACE("(%p)\n", this);
765     return 0;
766 }
767
768 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
769 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
770 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsync, 4)
771 int __thiscall basic_streambuf_char_pubsync(basic_streambuf_char *this)
772 {
773     TRACE("(%p)\n", this);
774     return call_basic_streambuf_char_sync(this);
775 }
776
777 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
778 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
779 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetn, 12)
780 streamsize __thiscall basic_streambuf_char_sgetn(basic_streambuf_char *this, char *ptr, streamsize count)
781 {
782     TRACE("(%p %p %lu)\n", this, ptr, count);
783     return call_basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
784 }
785
786 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
787 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ */
788 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_showmanyc, 4)
789 #define call_basic_streambuf_char_showmanyc(this) CALL_VTBL_FUNC(this, 12, \
790         streamsize, (basic_streambuf_char*), (this))
791 streamsize __thiscall basic_streambuf_char_showmanyc(basic_streambuf_char *this)
792 {
793     TRACE("(%p)\n", this);
794     return 0;
795 }
796
797 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
798 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ */
799 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_in_avail, 4)
800 streamsize __thiscall basic_streambuf_char_in_avail(basic_streambuf_char *this)
801 {
802     streamsize ret;
803
804     TRACE("(%p)\n", this);
805
806     ret = basic_streambuf_char__Gnavail(this);
807     return ret ? ret : call_basic_streambuf_char_showmanyc(this);
808 }
809
810 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
811 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
812 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputbackc, 8)
813 int __thiscall basic_streambuf_char_sputbackc(basic_streambuf_char *this, char ch)
814 {
815     TRACE("(%p %d)\n", this, ch);
816     if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
817         (*this->prsize)++;
818         (*this->prpos)--;
819         return ch;
820     }
821
822     return call_basic_streambuf_char_pbackfail(this, ch);
823 }
824
825 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
826 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
827 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputc, 8)
828 int __thiscall basic_streambuf_char_sputc(basic_streambuf_char *this, char ch)
829 {
830     TRACE("(%p %d)\n", this, ch);
831     return basic_streambuf_char__Pnavail(this) ?
832         (*basic_streambuf_char__Pninc(this) = ch) :
833         call_basic_streambuf_char_overflow(this, ch);
834 }
835
836 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
837 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
838 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sungetc, 4)
839 int __thiscall basic_streambuf_char_sungetc(basic_streambuf_char *this)
840 {
841     TRACE("(%p)\n", this);
842     if(*this->prpos && *this->prpos>*this->prbuf) {
843         (*this->prsize)++;
844         (*this->prpos)--;
845         return **this->prpos;
846     }
847
848     return call_basic_streambuf_char_pbackfail(this, EOF);
849 }
850
851 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
852 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
853 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_stossc, 4)
854 void __thiscall basic_streambuf_char_stossc(basic_streambuf_char *this)
855 {
856     TRACE("(%p)\n", this);
857     if(basic_streambuf_char__Gnavail(this))
858         basic_streambuf_char__Gninc(this);
859     else
860         call_basic_streambuf_char_uflow(this);
861 }
862
863 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
864 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
865 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sbumpc, 4)
866 int __thiscall basic_streambuf_char_sbumpc(basic_streambuf_char *this)
867 {
868     TRACE("(%p)\n", this);
869     return basic_streambuf_char__Gnavail(this) ?
870         *basic_streambuf_char__Gninc(this) : call_basic_streambuf_char_uflow(this);
871 }
872
873 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
874 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
875 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetc, 4)
876 int __thiscall basic_streambuf_char_sgetc(basic_streambuf_char *this)
877 {
878     TRACE("(%p)\n", this);
879     return basic_streambuf_char__Gnavail(this) ?
880         *basic_streambuf_char_gptr(this) : call_basic_streambuf_char_underflow(this);
881 }
882
883 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
884 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
885 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_snextc, 4)
886 int __thiscall basic_streambuf_char_snextc(basic_streambuf_char *this)
887 {
888     TRACE("(%p)\n", this);
889
890     if(basic_streambuf_char__Gnavail(this) > 1)
891         return *basic_streambuf_char__Gnpreinc(this);
892     return basic_streambuf_char_sbumpc(this)==EOF ?
893         EOF : basic_streambuf_char_sgetc(this);
894 }
895
896 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADH@Z */
897 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z */
898 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsgetn, 12)
899 #define call_basic_streambuf_char_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 24, \
900         streamsize, (basic_streambuf_char*, char*, streamsize), (this, ptr, count))
901 streamsize __thiscall basic_streambuf_char_xsgetn(basic_streambuf_char *this, char *ptr, streamsize count)
902 {
903     TRACE("(%p %p %lu)\n", this, ptr, count);
904     return call_basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
905 }
906
907 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPBDH@Z */
908 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z */
909 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsputn, 12)
910 #define call_basic_streambuf_char_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
911         streamsize, (basic_streambuf_char*, const char*, streamsize), (this, ptr, count))
912 streamsize __thiscall basic_streambuf_char_xsputn(basic_streambuf_char *this, const char *ptr, streamsize count)
913 {
914     streamsize copied, chunk;
915
916     TRACE("(%p %p %lu)\n", this, ptr, count);
917
918     for(copied=0; copied<count;) {
919         chunk = basic_streambuf_char__Pnavail(this);
920         if(chunk > count-copied)
921             chunk = count-copied;
922
923         if(chunk) {
924             memcpy(*this->pwpos, ptr+copied, chunk);
925             *this->pwpos += chunk;
926             *this->pwsize -= chunk;
927             copied += chunk;
928         }else if(call_basic_streambuf_char_overflow(this, ptr[copied]) != EOF) {
929             copied++;
930         }else {
931             break;
932         }
933     }
934
935     return copied;
936 }
937
938 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z */
939 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z */
940 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputn, 12)
941 streamsize __thiscall basic_streambuf_char_sputn(basic_streambuf_char *this, const char *ptr, streamsize count)
942 {
943     TRACE("(%p %p %lu)\n", this, ptr, count);
944     return call_basic_streambuf_char_xsputn(this, ptr, count);
945 }
946
947 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
948 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
949 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
950 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
951 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp_next, 16)
952 void __thiscall basic_streambuf_wchar_setp_next(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
953 {
954     TRACE("(%p %p %p %p)\n", this, first, next, last);
955
956     this->wbuf = first;
957     this->wpos = next;
958     this->wsize = last-next;
959 }
960
961 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W0@Z */
962 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z */
963 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG0@Z */
964 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z */
965 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp, 12)
966 void __thiscall basic_streambuf_wchar_setp(basic_streambuf_wchar *this, wchar_t *first, wchar_t *last)
967 {
968     basic_streambuf_wchar_setp_next(this, first, first, last);
969 }
970
971 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
972 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
973 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
974 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
975 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setg, 16)
976 void __thiscall basic_streambuf_wchar_setg(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
977 {
978     TRACE("(%p %p %p %p)\n", this, first, next, last);
979
980     this->rbuf = first;
981     this->rpos = next;
982     this->rsize = last-next;
983 }
984
985 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXXZ */
986 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ */
987 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXXZ */
988 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ */
989 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init_empty, 4)
990 void __thiscall basic_streambuf_wchar__Init_empty(basic_streambuf_wchar *this)
991 {
992     TRACE("(%p)\n", this);
993
994     this->prbuf = &this->rbuf;
995     this->pwbuf = &this->wbuf;
996     this->prpos = &this->rpos;
997     this->pwpos = &this->wpos;
998     this->prsize = &this->rsize;
999     this->pwsize = &this->wsize;
1000
1001     basic_streambuf_wchar_setp(this, NULL, NULL);
1002     basic_streambuf_wchar_setg(this, NULL, NULL, NULL);
1003 }
1004
1005 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1006 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1007 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor_uninitialized, 8)
1008 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1009 {
1010     TRACE("(%p %d)\n", this, uninitialized);
1011     this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1012     mutex_ctor(&this->lock);
1013     return this;
1014 }
1015
1016 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1017 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1018 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor_uninitialized, 8)
1019 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1020 {
1021     TRACE("(%p %d)\n", this, uninitialized);
1022     basic_streambuf_wchar_ctor_uninitialized(this, uninitialized);
1023     this->vtable = &MSVCP_basic_streambuf_short_vtable;
1024     return this;
1025 }
1026
1027 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
1028 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
1029 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor, 4)
1030 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor(basic_streambuf_wchar *this)
1031 {
1032     TRACE("(%p)\n", this);
1033
1034     this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1035     mutex_ctor(&this->lock);
1036     this->loc = MSVCRT_operator_new(sizeof(locale));
1037     locale_ctor(this->loc);
1038     basic_streambuf_wchar__Init_empty(this);
1039
1040     return this;
1041 }
1042
1043 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@XZ */
1044 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ */
1045 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor, 4)
1046 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor(basic_streambuf_wchar *this)
1047 {
1048     TRACE("(%p)\n", this);
1049     basic_streambuf_wchar_ctor(this);
1050     this->vtable = &MSVCP_basic_streambuf_short_vtable;
1051     return this;
1052 }
1053
1054 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
1055 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
1056 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
1057 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
1058 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_dtor, 4)
1059 void __thiscall basic_streambuf_wchar_dtor(basic_streambuf_wchar *this)
1060 {
1061     TRACE("(%p)\n", this);
1062
1063     mutex_dtor(&this->lock);
1064     locale_dtor(this->loc);
1065     MSVCRT_operator_delete(this->loc);
1066 }
1067
1068 DEFINE_THISCALL_WRAPPER(MSVCP_basic_streambuf_wchar_vector_dtor, 8)
1069 basic_streambuf_wchar* __thiscall MSVCP_basic_streambuf_wchar_vector_dtor(basic_streambuf_wchar *this, unsigned int flags)
1070 {
1071     TRACE("(%p %x)\n", this, flags);
1072     if(flags & 2) {
1073         /* we have an array, with the number of elements stored before the first object */
1074         int i, *ptr = (int *)this-1;
1075
1076         for(i=*ptr-1; i>=0; i--)
1077             basic_streambuf_wchar_dtor(this+i);
1078         MSVCRT_operator_delete(ptr);
1079     } else {
1080         basic_streambuf_wchar_dtor(this);
1081         if(flags & 1)
1082             MSVCRT_operator_delete(this);
1083     }
1084
1085     return this;
1086 }
1087
1088 DEFINE_THISCALL_WRAPPER(MSVCP_basic_streambuf_short_vector_dtor, 8)
1089 basic_streambuf_wchar* __thiscall MSVCP_basic_streambuf_short_vector_dtor(basic_streambuf_wchar *this, unsigned int flags)
1090 {
1091     TRACE("(%p %x)\n", this, flags);
1092     return MSVCP_basic_streambuf_wchar_vector_dtor(this, flags);
1093 }
1094
1095 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1096 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1097 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1098 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1099 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnavail, 4)
1100 streamsize __thiscall basic_streambuf_wchar__Gnavail(const basic_streambuf_wchar *this)
1101 {
1102     TRACE("(%p)\n", this);
1103     return *this->prpos ? *this->prsize : 0;
1104 }
1105
1106 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1107 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1108 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1109 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1110 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gndec, 4)
1111 wchar_t* __thiscall basic_streambuf_wchar__Gndec(basic_streambuf_wchar *this)
1112 {
1113     TRACE("(%p)\n", this);
1114     (*this->prsize)++;
1115     (*this->prpos)--;
1116     return *this->prpos;
1117 }
1118
1119 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1120 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1121 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1122 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1123 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gninc, 4)
1124 wchar_t* __thiscall basic_streambuf_wchar__Gninc(basic_streambuf_wchar *this)
1125 {
1126     TRACE("(%p)\n", this);
1127     (*this->prsize)--;
1128     return (*this->prpos)++;
1129 }
1130
1131 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1132 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1133 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1134 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1135 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnpreinc, 4)
1136 wchar_t* __thiscall basic_streambuf_wchar__Gnpreinc(basic_streambuf_wchar *this)
1137 {
1138     TRACE("(%p)\n", this);
1139     (*this->prsize)--;
1140     (*this->prpos)++;
1141     return *this->prpos;
1142 }
1143
1144 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPAPA_W0PAH001@Z */
1145 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z */
1146 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAPAG0PAH001@Z */
1147 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z */
1148 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init, 28)
1149 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)
1150 {
1151     TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
1152
1153     this->prbuf = gf;
1154     this->pwbuf = pf;
1155     this->prpos = gn;
1156     this->pwpos = pn;
1157     this->prsize = gc;
1158     this->pwsize = pc;
1159 }
1160
1161 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1162 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1163 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1164 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1165 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Lock, 4)
1166 void __thiscall basic_streambuf_wchar__Lock(basic_streambuf_wchar *this)
1167 {
1168     TRACE("(%p)\n", this);
1169     mutex_lock(&this->lock);
1170 }
1171
1172 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1173 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1174 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1175 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1176 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pnavail, 4)
1177 streamsize __thiscall basic_streambuf_wchar__Pnavail(const basic_streambuf_wchar *this)
1178 {
1179     TRACE("(%p)\n", this);
1180     return *this->pwpos ? *this->pwsize : 0;
1181 }
1182
1183 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1184 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1185 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1186 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1187 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pninc, 4)
1188 wchar_t* __thiscall basic_streambuf_wchar__Pninc(basic_streambuf_wchar *this)
1189 {
1190     TRACE("(%p)\n", this);
1191     (*this->pwsize)--;
1192     return (*this->pwpos)++;
1193 }
1194
1195 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1196 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1197 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1198 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1199 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_underflow, 4)
1200 #define call_basic_streambuf_wchar_underflow(this) CALL_VTBL_FUNC(this, 16, \
1201         unsigned short, (basic_streambuf_wchar*), (this))
1202 unsigned short __thiscall basic_streambuf_wchar_underflow(basic_streambuf_wchar *this)
1203 {
1204     TRACE("(%p)\n", this);
1205     return WEOF;
1206 }
1207
1208 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1209 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1210 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1211 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1212 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_uflow, 4)
1213 #define call_basic_streambuf_wchar_uflow(this) CALL_VTBL_FUNC(this, 20, \
1214         unsigned short, (basic_streambuf_wchar*), (this))
1215 unsigned short __thiscall basic_streambuf_wchar_uflow(basic_streambuf_wchar *this)
1216 {
1217     int ret;
1218
1219     TRACE("(%p)\n", this);
1220
1221     if(call_basic_streambuf_wchar_underflow(this)==WEOF)
1222         return WEOF;
1223
1224     ret = **this->prpos;
1225     (*this->prsize)--;
1226     (*this->prpos)++;
1227     return ret;
1228 }
1229
1230 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WIH@Z */
1231 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_K_J@Z */
1232 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGIH@Z */
1233 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_K_J@Z */
1234 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Xsgetn_s, 16)
1235 #define call_basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count) CALL_VTBL_FUNC(this, 28, \
1236         streamsize, (basic_streambuf_wchar*, wchar_t*, MSVCP_size_t, streamsize), (this, ptr, size, count))
1237 streamsize __thiscall basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1238 {
1239     streamsize copied, chunk;
1240
1241     TRACE("(%p %p %lu %lu)\n", this, ptr, size, count);
1242
1243     for(copied=0; copied<count && size;) {
1244         chunk = basic_streambuf_wchar__Gnavail(this);
1245         if(chunk > count-copied)
1246             chunk = count-copied;
1247
1248         if(chunk) {
1249             memcpy_s(ptr+copied, size, *this->prpos, chunk);
1250             *this->prpos += chunk;
1251             *this->prsize -= chunk;
1252             copied += chunk;
1253             size -= chunk;
1254         }else if((ptr[copied] = call_basic_streambuf_wchar_uflow(this)) != WEOF) {
1255             copied++;
1256             size--;
1257         }else {
1258             break;
1259         }
1260     }
1261
1262     return copied;
1263 }
1264
1265 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
1266 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
1267 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
1268 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
1269 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Sgetn_s, 16)
1270 streamsize __thiscall basic_streambuf_wchar__Sgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1271 {
1272     TRACE("(%p %p %lu %lu)\n", this, ptr, size, count);
1273     return call_basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count);
1274 }
1275
1276 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1277 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1278 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1279 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1280 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Unlock, 4)
1281 void __thiscall basic_streambuf_wchar__Unlock(basic_streambuf_wchar *this)
1282 {
1283     TRACE("(%p)\n", this);
1284     mutex_unlock(&this->lock);
1285 }
1286
1287 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1288 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1289 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1290 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1291 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_eback, 4)
1292 wchar_t* __thiscall basic_streambuf_wchar_eback(const basic_streambuf_wchar *this)
1293 {
1294     TRACE("(%p)\n", this);
1295     return *this->prbuf;
1296 }
1297
1298 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1299 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1300 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1301 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1302 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gptr, 4)
1303 wchar_t* __thiscall basic_streambuf_wchar_gptr(const basic_streambuf_wchar *this)
1304 {
1305     TRACE("(%p)\n", this);
1306     return *this->prpos;
1307 }
1308
1309 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1310 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1311 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1312 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1313 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_egptr, 4)
1314 wchar_t* __thiscall basic_streambuf_wchar_egptr(const basic_streambuf_wchar *this)
1315 {
1316     TRACE("(%p)\n", this);
1317     return *this->prpos+*this->prsize;
1318 }
1319
1320 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1321 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1322 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1323 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1324 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_epptr, 4)
1325 wchar_t* __thiscall basic_streambuf_wchar_epptr(const basic_streambuf_wchar *this)
1326 {
1327     TRACE("(%p)\n", this);
1328     return *this->pwpos+*this->pwsize;
1329 }
1330
1331 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1332 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1333 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1334 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1335 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gbump, 8)
1336 void __thiscall basic_streambuf_wchar_gbump(basic_streambuf_wchar *this, int off)
1337 {
1338     TRACE("(%p %d)\n", this, off);
1339     *this->prpos += off;
1340     *this->prsize -= off;
1341 }
1342
1343 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QBE?AVlocale@2@XZ */
1344 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEBA?AVlocale@2@XZ */
1345 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QBE?AVlocale@2@XZ */
1346 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEBA?AVlocale@2@XZ */
1347 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_getloc, 8)
1348 locale* __thiscall basic_streambuf_wchar_getloc(const basic_streambuf_wchar *this, locale *ret)
1349 {
1350     TRACE("(%p)\n", this);
1351     return locale_copy_ctor(ret, this->loc);
1352 }
1353
1354 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z */
1355 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z */
1356 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z */
1357 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z */
1358 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_imbue, 8)
1359 #define call_basic_streambuf_wchar_imbue(this, loc) CALL_VTBL_FUNC(this, 52, \
1360         void, (basic_streambuf_wchar*, const locale*), (this, loc))
1361 void __thiscall basic_streambuf_wchar_imbue(basic_streambuf_wchar *this, const locale *loc)
1362 {
1363     TRACE("(%p %p)\n", this, loc);
1364 }
1365
1366 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1367 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1368 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1369 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1370 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_overflow, 8)
1371 #define call_basic_streambuf_wchar_overflow(this, ch) CALL_VTBL_FUNC(this, 4, \
1372         unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1373 unsigned short __thiscall basic_streambuf_wchar_overflow(basic_streambuf_wchar *this, unsigned short ch)
1374 {
1375     TRACE("(%p %d)\n", this, ch);
1376     return WEOF;
1377 }
1378
1379 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1380 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1381 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1382 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1383 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbackfail, 8)
1384 #define call_basic_streambuf_wchar_pbackfail(this, ch) CALL_VTBL_FUNC(this, 8, \
1385         unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1386 unsigned short __thiscall basic_streambuf_wchar_pbackfail(basic_streambuf_wchar *this, unsigned short ch)
1387 {
1388     TRACE("(%p %d)\n", this, ch);
1389     return WEOF;
1390 }
1391
1392 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1393 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1394 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1395 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1396 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbase, 4)
1397 wchar_t* __thiscall basic_streambuf_wchar_pbase(const basic_streambuf_wchar *this)
1398 {
1399     TRACE("(%p)\n", this);
1400     return *this->pwbuf;
1401 }
1402
1403 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1404 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1405 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1406 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1407 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbump, 8)
1408 void __thiscall basic_streambuf_wchar_pbump(basic_streambuf_wchar *this, int off)
1409 {
1410     TRACE("(%p %d)\n", this, off);
1411     *this->pwpos += off;
1412     *this->pwsize -= off;
1413 }
1414
1415 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1416 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1417 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1418 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1419 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pptr, 4)
1420 wchar_t* __thiscall basic_streambuf_wchar_pptr(const basic_streambuf_wchar *this)
1421 {
1422     TRACE("(%p)\n", this);
1423     return *this->pwpos;
1424 }
1425
1426 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1427 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1428 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1429 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1430 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubimbue, 12)
1431 locale* __thiscall basic_streambuf_wchar_pubimbue(basic_streambuf_wchar *this, locale *ret, const locale *loc)
1432 {
1433     TRACE("(%p %p)\n", this, loc);
1434     memcpy(ret, this->loc, sizeof(locale));
1435     call_basic_streambuf_wchar_imbue(this, loc);
1436     locale_copy_ctor(this->loc, loc);
1437     return ret;
1438 }
1439
1440 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1441 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1442 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1443 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1444 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekoff, 20)
1445 #define call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 36, \
1446         fpos_int*, (basic_streambuf_wchar*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
1447 fpos_int* __thiscall basic_streambuf_wchar_seekoff(basic_streambuf_wchar *this,
1448         fpos_int *ret, streamoff off, int way, int mode)
1449 {
1450     TRACE("(%p %lu %d %d)\n", this, off, way, mode);
1451     ret->off = 0;
1452     ret->pos = -1;
1453     ret->state = 0;
1454     return ret;
1455 }
1456
1457 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1458 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1459 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1460 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1461 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff, 20)
1462 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff(basic_streambuf_wchar *this,
1463         fpos_int *ret, streamoff off, int way, int mode)
1464 {
1465     TRACE("(%p %lu %d %d)\n", this, off, way, mode);
1466     return call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode);
1467 }
1468
1469 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1470 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1471 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1472 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1473 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff_old, 20)
1474 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff_old(basic_streambuf_wchar *this,
1475         fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
1476 {
1477     TRACE("(%p %lu %d %d)\n", this, off, way, mode);
1478     return basic_streambuf_wchar_pubseekoff(this, ret, off, way, mode);
1479 }
1480
1481 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1482 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1483 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1484 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1485 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekpos, 36)
1486 #define call_basic_streambuf_wchar_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 40, \
1487         fpos_int*, (basic_streambuf_wchar*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
1488 fpos_int* __thiscall basic_streambuf_wchar_seekpos(basic_streambuf_wchar *this,
1489         fpos_int *ret, fpos_int pos, int mode)
1490 {
1491     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1492     ret->off = 0;
1493     ret->pos = -1;
1494     ret->state = 0;
1495     return ret;
1496 }
1497
1498 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1499 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1500 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1501 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1502 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos, 36)
1503 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos(basic_streambuf_wchar *this,
1504         fpos_int *ret, fpos_int pos, int mode)
1505 {
1506     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1507     return call_basic_streambuf_wchar_seekpos(this, ret, pos, mode);
1508 }
1509
1510 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1511 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1512 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1513 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1514 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos_old, 36)
1515 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos_old(basic_streambuf_wchar *this,
1516         fpos_int *ret, fpos_int pos, unsigned int mode)
1517 {
1518     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1519     return basic_streambuf_wchar_pubseekpos(this, ret, pos, mode);
1520 }
1521
1522 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEPAV12@PA_WH@Z */
1523 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z */
1524 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEPAV12@PAGH@Z */
1525 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z */
1526 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setbuf, 12)
1527 #define call_basic_streambuf_wchar_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 44, \
1528         basic_streambuf_wchar*, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, buf, count))
1529 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_setbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1530 {
1531     TRACE("(%p %p %lu)\n", this, buf, count);
1532     return this;
1533 }
1534
1535 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PA_WH@Z */
1536 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z */
1537 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PAGH@Z */
1538 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z */
1539 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsetbuf, 12)
1540 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_pubsetbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1541 {
1542     TRACE("(%p %p %lu)\n", this, buf, count);
1543     return call_basic_streambuf_wchar_setbuf(this, buf, count);
1544 }
1545
1546 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1547 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
1548 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1549 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
1550 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sync, 4)
1551 #define call_basic_streambuf_wchar_sync(this) CALL_VTBL_FUNC(this, 48, \
1552         int, (basic_streambuf_wchar*), (this))
1553 int __thiscall basic_streambuf_wchar_sync(basic_streambuf_wchar *this)
1554 {
1555     TRACE("(%p)\n", this);
1556     return 0;
1557 }
1558
1559 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1560 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
1561 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1562 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ */
1563 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsync, 4)
1564 int __thiscall basic_streambuf_wchar_pubsync(basic_streambuf_wchar *this)
1565 {
1566     TRACE("(%p)\n", this);
1567     return call_basic_streambuf_wchar_sync(this);
1568 }
1569
1570 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
1571 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
1572 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
1573 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
1574 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetn, 12)
1575 streamsize __thiscall basic_streambuf_wchar_sgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1576 {
1577     TRACE("(%p %p %lu)\n", this, ptr, count);
1578     return call_basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1579 }
1580
1581 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1582 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ */
1583 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1584 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ */
1585 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_showmanyc, 4)
1586 #define call_basic_streambuf_wchar_showmanyc(this) CALL_VTBL_FUNC(this, 12, \
1587         streamsize, (basic_streambuf_wchar*), (this))
1588 streamsize __thiscall basic_streambuf_wchar_showmanyc(basic_streambuf_wchar *this)
1589 {
1590     TRACE("(%p)\n", this);
1591     return 0;
1592 }
1593
1594 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1595 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ */
1596 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1597 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ */
1598 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_in_avail, 4)
1599 streamsize __thiscall basic_streambuf_wchar_in_avail(basic_streambuf_wchar *this)
1600 {
1601     streamsize ret;
1602
1603     TRACE("(%p)\n", this);
1604
1605     ret = basic_streambuf_wchar__Gnavail(this);
1606     return ret ? ret : call_basic_streambuf_wchar_showmanyc(this);
1607 }
1608
1609 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1610 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1611 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1612 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
1613 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputbackc, 8)
1614 unsigned short __thiscall basic_streambuf_wchar_sputbackc(basic_streambuf_wchar *this, wchar_t ch)
1615 {
1616     TRACE("(%p %d)\n", this, ch);
1617     if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
1618         (*this->prsize)++;
1619         (*this->prpos)--;
1620         return ch;
1621     }
1622
1623     return call_basic_streambuf_wchar_pbackfail(this, ch);
1624 }
1625
1626 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1627 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1628 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1629 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHG@Z */
1630 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputc, 8)
1631 unsigned short __thiscall basic_streambuf_wchar_sputc(basic_streambuf_wchar *this, wchar_t ch)
1632 {
1633     TRACE("(%p %d)\n", this, ch);
1634     return basic_streambuf_wchar__Pnavail(this) ?
1635         (*basic_streambuf_wchar__Pninc(this) = ch) :
1636         call_basic_streambuf_wchar_overflow(this, ch);
1637 }
1638
1639 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1640 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1641 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1642 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1643 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sungetc, 4)
1644 unsigned short __thiscall basic_streambuf_wchar_sungetc(basic_streambuf_wchar *this)
1645 {
1646     TRACE("(%p)\n", this);
1647     if(*this->prpos && *this->prpos>*this->prbuf) {
1648         (*this->prsize)++;
1649         (*this->prpos)--;
1650         return **this->prpos;
1651     }
1652
1653     return call_basic_streambuf_wchar_pbackfail(this, WEOF);
1654 }
1655
1656 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1657 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1658 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1659 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1660 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_stossc, 4)
1661 void __thiscall basic_streambuf_wchar_stossc(basic_streambuf_wchar *this)
1662 {
1663     TRACE("(%p)\n", this);
1664     if(basic_streambuf_wchar__Gnavail(this))
1665         basic_streambuf_wchar__Gninc(this);
1666     else
1667         call_basic_streambuf_wchar_uflow(this);
1668 }
1669
1670 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1671 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1672 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1673 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1674 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sbumpc, 4)
1675 unsigned short __thiscall basic_streambuf_wchar_sbumpc(basic_streambuf_wchar *this)
1676 {
1677     TRACE("(%p)\n", this);
1678     return basic_streambuf_wchar__Gnavail(this) ?
1679         *basic_streambuf_wchar__Gninc(this) : call_basic_streambuf_wchar_uflow(this);
1680 }
1681
1682 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1683 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1684 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1685 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1686 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetc, 4)
1687 unsigned short __thiscall basic_streambuf_wchar_sgetc(basic_streambuf_wchar *this)
1688 {
1689     TRACE("(%p)\n", this);
1690     return basic_streambuf_wchar__Gnavail(this) ?
1691         *basic_streambuf_wchar_gptr(this) : call_basic_streambuf_wchar_underflow(this);
1692 }
1693
1694 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1695 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1696 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1697 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1698 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_snextc, 4)
1699 unsigned short __thiscall basic_streambuf_wchar_snextc(basic_streambuf_wchar *this)
1700 {
1701     TRACE("(%p)\n", this);
1702
1703     if(basic_streambuf_wchar__Gnavail(this) > 1)
1704         return *basic_streambuf_wchar__Gnpreinc(this);
1705     return basic_streambuf_wchar_sbumpc(this)==WEOF ?
1706         WEOF : basic_streambuf_wchar_sgetc(this);
1707 }
1708
1709 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WH@Z */
1710 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z */
1711 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGH@Z */
1712 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z */
1713 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsgetn, 12)
1714 #define call_basic_streambuf_wchar_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 24, \
1715         streamsize, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, ptr, count))
1716 streamsize __thiscall basic_streambuf_wchar_xsgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1717 {
1718     TRACE("(%p %p %lu)\n", this, ptr, count);
1719     return call_basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1720 }
1721
1722 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z */
1723 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z */
1724 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPBGH@Z */
1725 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z */
1726 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsputn, 12)
1727 #define call_basic_streambuf_wchar_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
1728         streamsize, (basic_streambuf_wchar*, const wchar_t*, streamsize), (this, ptr, count))
1729 streamsize __thiscall basic_streambuf_wchar_xsputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1730 {
1731     streamsize copied, chunk;
1732
1733     TRACE("(%p %p %lu)\n", this, ptr, count);
1734
1735     for(copied=0; copied<count;) {
1736         chunk = basic_streambuf_wchar__Pnavail(this);
1737         if(chunk > count-copied)
1738             chunk = count-copied;
1739
1740         if(chunk) {
1741             memcpy(*this->pwpos, ptr+copied, chunk);
1742             *this->pwpos += chunk;
1743             *this->pwsize -= chunk;
1744             copied += chunk;
1745         }else if(call_basic_streambuf_wchar_overflow(this, ptr[copied]) != WEOF) {
1746             copied++;
1747         }else {
1748             break;
1749         }
1750     }
1751
1752     return copied;
1753 }
1754
1755 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPB_WH@Z */
1756 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z */
1757 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPBGH@Z */
1758 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z */
1759 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputn, 12)
1760 streamsize __thiscall basic_streambuf_wchar_sputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1761 {
1762     TRACE("(%p %p %lu)\n", this, ptr, count);
1763     return call_basic_streambuf_wchar_xsputn(this, ptr, count);
1764 }
1765
1766 /* ??0ios_base@std@@IAE@XZ */
1767 /* ??0ios_base@std@@IEAA@XZ */
1768 DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4)
1769 ios_base* __thiscall ios_base_ctor(ios_base *this)
1770 {
1771     TRACE("(%p)\n", this);
1772     this->vtable = &MSVCP_ios_base_vtable;
1773     return this;
1774 }
1775
1776 /* ??0ios_base@std@@QAE@ABV01@@Z */
1777 /* ??0ios_base@std@@QEAA@AEBV01@@Z */
1778 DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8)
1779 ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy)
1780 {
1781     TRACE("(%p %p)\n", this, copy);
1782     *this = *copy;
1783     this->vtable = &MSVCP_ios_base_vtable;
1784     return this;
1785 }
1786
1787 /* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */
1788 /* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */
1789 DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8)
1790 void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event)
1791 {
1792     IOS_BASE_fnarray *cur;
1793
1794     TRACE("(%p %x)\n", this, event);
1795
1796     for(cur=this->calls; cur; cur=cur->next)
1797         cur->event_handler(event, this, cur->index);
1798 }
1799
1800 /* ?_Tidy@ios_base@std@@AAAXXZ */
1801 /* ?_Tidy@ios_base@std@@AEAAXXZ */
1802 void CDECL ios_base_Tidy(ios_base *this)
1803 {
1804     IOS_BASE_iosarray *arr_cur, *arr_next;
1805     IOS_BASE_fnarray *event_cur, *event_next;
1806
1807     TRACE("(%p)\n", this);
1808
1809     ios_base_Callfns(this, EVENT_erase_event);
1810
1811     for(arr_cur=this->arr; arr_cur; arr_cur=arr_next) {
1812         arr_next = arr_cur->next;
1813         MSVCRT_operator_delete(arr_cur);
1814     }
1815     this->arr = NULL;
1816
1817     for(event_cur=this->calls; event_cur; event_cur=event_next) {
1818         event_next = event_cur->next;
1819         MSVCRT_operator_delete(event_cur);
1820     }
1821     this->calls = NULL;
1822 }
1823
1824 /* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */
1825 /* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */
1826 void CDECL ios_base_Ios_base_dtor(ios_base *obj)
1827 {
1828     TRACE("(%p)\n", obj);
1829     if(obj->loc) {
1830         locale_dtor(obj->loc);
1831         MSVCRT_operator_delete(obj->loc);
1832     }
1833     ios_base_Tidy(obj);
1834 }
1835
1836 /* ??1ios_base@std@@UAE@XZ */
1837 /* ??1ios_base@std@@UEAA@XZ */
1838 DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4)
1839 void __thiscall ios_base_dtor(ios_base *this)
1840 {
1841     ios_base_Ios_base_dtor(this);
1842 }
1843
1844 DEFINE_THISCALL_WRAPPER(MSVCP_ios_base_vector_dtor, 8)
1845 ios_base* __thiscall MSVCP_ios_base_vector_dtor(ios_base *this, unsigned int flags)
1846 {
1847     TRACE("(%p %x)\n", this, flags);
1848     if(flags & 2) {
1849         /* we have an array, with the number of elements stored before the first object */
1850         int i, *ptr = (int *)this-1;
1851
1852         for(i=*ptr-1; i>=0; i--)
1853             ios_base_dtor(this+i);
1854         MSVCRT_operator_delete(ptr);
1855     } else {
1856         ios_base_dtor(this);
1857         if(flags & 1)
1858             MSVCRT_operator_delete(this);
1859     }
1860
1861     return this;
1862 }
1863
1864 DEFINE_THISCALL_WRAPPER(MSVCP_iosb_vector_dtor, 8)
1865 void* __thiscall MSVCP_iosb_vector_dtor(void *this, unsigned int flags)
1866 {
1867     TRACE("(%p %x)\n", this, flags);
1868     if(flags & 2) {
1869         int *ptr = (int *)this-1;
1870         MSVCRT_operator_delete(ptr);
1871     } else {
1872         if(flags & 1)
1873             MSVCRT_operator_delete(this);
1874     }
1875
1876     return this;
1877 }
1878
1879 /* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */
1880 /* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */
1881 DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8)
1882 IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index)
1883 {
1884     IOS_BASE_iosarray *p;
1885
1886     TRACE("(%p %d)\n", this, index);
1887
1888     for(p=this->arr; p; p=p->next) {
1889         if(p->index == index)
1890             return p;
1891     }
1892
1893     for(p=this->arr; p; p=p->next) {
1894         if(!p->long_val && !p->ptr_val) {
1895             p->index = index;
1896             return p;
1897         }
1898     }
1899
1900     p = MSVCRT_operator_new(sizeof(IOS_BASE_iosarray));
1901     p->next = this->arr;
1902     p->index = index;
1903     p->long_val = 0;
1904     p->ptr_val = NULL;
1905     this->arr = p;
1906     return p;
1907 }
1908
1909 /* ?iword@ios_base@std@@QAEAAJH@Z */
1910 /* ?iword@ios_base@std@@QEAAAEAJH@Z */
1911 DEFINE_THISCALL_WRAPPER(ios_base_iword, 8)
1912 LONG* __thiscall ios_base_iword(ios_base *this, int index)
1913 {
1914     TRACE("(%p %d)\n", this, index);
1915     return &ios_base_Findarr(this, index)->long_val;
1916 }
1917
1918 /* ?pword@ios_base@std@@QAEAAPAXH@Z */
1919 /* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */
1920 DEFINE_THISCALL_WRAPPER(ios_base_pword, 8)
1921 void** __thiscall ios_base_pword(ios_base *this, int index)
1922 {
1923     TRACE("(%p %d)\n", this, index);
1924     return &ios_base_Findarr(this, index)->ptr_val;
1925 }
1926
1927 /* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */
1928 /* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */
1929 DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12)
1930 void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index)
1931 {
1932     IOS_BASE_fnarray *event;
1933
1934     TRACE("(%p %p %d)\n", this, callback, index);
1935
1936     event = MSVCRT_operator_new(sizeof(IOS_BASE_fnarray));
1937     event->next = this->calls;
1938     event->index = index;
1939     event->event_handler = callback;
1940     this->calls = event;
1941 }
1942
1943 /* ?clear@ios_base@std@@QAEXH_N@Z */
1944 /* ?clear@ios_base@std@@QEAAXH_N@Z */
1945 DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12)
1946 void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
1947 {
1948     TRACE("(%p %x %x)\n", this, state, reraise);
1949
1950     this->state = state & IOSTATE_mask;
1951     if(!(this->state & this->except))
1952         return;
1953
1954     if(reraise)
1955         throw_exception(EXCEPTION_RERAISE, NULL);
1956     else if(this->state & this->except & IOSTATE_eofbit)
1957         throw_exception(EXCEPTION_FAILURE, "eofbit is set");
1958     else if(this->state & this->except & IOSTATE_failbit)
1959         throw_exception(EXCEPTION_FAILURE, "failbit is set");
1960     else if(this->state & this->except & IOSTATE_badbit)
1961         throw_exception(EXCEPTION_FAILURE, "badbit is set");
1962     else if(this->state & this->except & IOSTATE__Hardfail)
1963         throw_exception(EXCEPTION_FAILURE, "_Hardfail is set");
1964 }
1965
1966 /* ?clear@ios_base@std@@QAEXH@Z */
1967 /* ?clear@ios_base@std@@QEAAXH@Z */
1968 DEFINE_THISCALL_WRAPPER(ios_base_clear, 8)
1969 void __thiscall ios_base_clear(ios_base *this, IOSB_iostate state)
1970 {
1971     ios_base_clear_reraise(this, state, FALSE);
1972 }
1973
1974 /* ?clear@ios_base@std@@QAEXI@Z */
1975 /* ?clear@ios_base@std@@QEAAXI@Z */
1976 DEFINE_THISCALL_WRAPPER(ios_base_clear_unsigned, 8)
1977 void __thiscall ios_base_clear_unsigned(ios_base *this, unsigned int state)
1978 {
1979     ios_base_clear_reraise(this, (IOSB_iostate)state, FALSE);
1980 }
1981
1982 /* ?exceptions@ios_base@std@@QAEXH@Z */
1983 /* ?exceptions@ios_base@std@@QEAAXH@Z */
1984 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set, 8)
1985 void __thiscall ios_base_exceptions_set(ios_base *this, IOSB_iostate state)
1986 {
1987     TRACE("(%p %x)\n", this, state);
1988     this->except = state & IOSTATE_mask;
1989     ios_base_clear(this, this->state);
1990 }
1991
1992 /* ?exceptions@ios_base@std@@QAEXI@Z */
1993 /* ?exceptions@ios_base@std@@QEAAXI@Z */
1994 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set_unsigned, 8)
1995 void __thiscall ios_base_exceptions_set_unsigned(ios_base *this, unsigned int state)
1996 {
1997     TRACE("(%p %x)\n", this, state);
1998     ios_base_exceptions_set(this, state);
1999 }
2000
2001 /* ?exceptions@ios_base@std@@QBEHXZ */
2002 /* ?exceptions@ios_base@std@@QEBAHXZ */
2003 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_get, 4)
2004 IOSB_iostate __thiscall ios_base_exceptions_get(ios_base *this)
2005 {
2006     TRACE("(%p)\n", this);
2007     return this->except;
2008 }
2009
2010 /* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */
2011 /* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */
2012 DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8)
2013 ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *rhs)
2014 {
2015     TRACE("(%p %p)\n", this, rhs);
2016
2017     if(this != rhs) {
2018         IOS_BASE_iosarray *arr_cur;
2019         IOS_BASE_fnarray *event_cur;
2020
2021         ios_base_Tidy(this);
2022
2023         for(arr_cur=rhs->arr; arr_cur; arr_cur=arr_cur->next) {
2024             if(arr_cur->long_val)
2025                 *ios_base_iword(this, arr_cur->index) = arr_cur->long_val;
2026             if(arr_cur->ptr_val)
2027                 *ios_base_pword(this, arr_cur->index) = arr_cur->ptr_val;
2028         }
2029         this->stdstr = rhs->stdstr;
2030         this->fmtfl = rhs->fmtfl;
2031         this->prec = rhs->prec;
2032         this->wide = rhs->wide;
2033         locale_operator_assign(this->loc, rhs->loc);
2034
2035         for(event_cur=rhs->calls; event_cur; event_cur=event_cur->next)
2036             ios_base_register_callback(this, event_cur->event_handler, event_cur->index);
2037
2038         ios_base_Callfns(this, EVENT_copyfmt_event);
2039         ios_base_exceptions_set(this, rhs->except);
2040     }
2041
2042     return this;
2043 }
2044
2045 /* ??4ios_base@std@@QAEAAV01@ABV01@@Z */
2046 /* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */
2047 DEFINE_THISCALL_WRAPPER(ios_base_assign, 8)
2048 ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right)
2049 {
2050     TRACE("(%p %p)\n", this, right);
2051
2052     if(this != right) {
2053         this->state = right->state;
2054         ios_base_copyfmt(this, right);
2055     }
2056
2057     return this;
2058 }
2059
2060 /* ?fail@ios_base@std@@QBE_NXZ */
2061 /* ?fail@ios_base@std@@QEBA_NXZ */
2062 DEFINE_THISCALL_WRAPPER(ios_base_fail, 4)
2063 MSVCP_bool __thiscall ios_base_fail(const ios_base *this)
2064 {
2065     TRACE("(%p)\n", this);
2066     return (this->state & (IOSTATE_failbit|IOSTATE_badbit)) != 0;
2067 }
2068
2069 /* ??7ios_base@std@@QBE_NXZ */
2070 /* ??7ios_base@std@@QEBA_NXZ */
2071 DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4)
2072 MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this)
2073 {
2074     TRACE("(%p)\n", this);
2075     return ios_base_fail(this);
2076 }
2077
2078 /* ??Bios_base@std@@QBEPAXXZ */
2079 /* ??Bios_base@std@@QEBAPEAXXZ */
2080 DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4)
2081 void* __thiscall ios_base_op_fail(const ios_base *this)
2082 {
2083     TRACE("(%p)\n", this);
2084     return ios_base_fail(this) ? NULL : (void*)this;
2085 }
2086
2087 /* ?_Addstd@ios_base@std@@SAXPAV12@@Z */
2088 /* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */
2089 void CDECL ios_base_Addstd(ios_base *add)
2090 {
2091     FIXME("(%p) stub\n", add);
2092 }
2093
2094 /* ?_Index_func@ios_base@std@@CAAAHXZ */
2095 /* ?_Index_func@ios_base@std@@CAAEAHXZ */
2096 int* CDECL ios_base_Index_func(void)
2097 {
2098     TRACE("\n");
2099     return &ios_base_Index;
2100 }
2101
2102 /* ?_Init@ios_base@std@@IAEXXZ */
2103 /* ?_Init@ios_base@std@@IEAAXXZ */
2104 DEFINE_THISCALL_WRAPPER(ios_base_Init, 4)
2105 void __thiscall ios_base_Init(ios_base *this)
2106 {
2107     TRACE("(%p)\n", this);
2108
2109     this->stdstr = 0;
2110     this->state = this->except = IOSTATE_goodbit;
2111     this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec;
2112     this->prec = 6;
2113     this->wide = ' ';
2114     this->arr = NULL;
2115     this->calls = NULL;
2116     this->loc = MSVCRT_operator_new(sizeof(locale));
2117     locale_ctor(this->loc);
2118 }
2119
2120 /* ?_Sync_func@ios_base@std@@CAAA_NXZ */
2121 /* ?_Sync_func@ios_base@std@@CAAEA_NXZ */
2122 MSVCP_bool* CDECL ios_base_Sync_func(void)
2123 {
2124     TRACE("\n");
2125     return &ios_base_Sync;
2126 }
2127
2128 /* ?bad@ios_base@std@@QBE_NXZ */
2129 /* ?bad@ios_base@std@@QEBA_NXZ */
2130 DEFINE_THISCALL_WRAPPER(ios_base_bad, 4)
2131 MSVCP_bool __thiscall ios_base_bad(const ios_base *this)
2132 {
2133     TRACE("(%p)\n", this);
2134     return (this->state & IOSTATE_badbit) != 0;
2135 }
2136
2137 /* ?eof@ios_base@std@@QBE_NXZ */
2138 /* ?eof@ios_base@std@@QEBA_NXZ */
2139 DEFINE_THISCALL_WRAPPER(ios_base_eof, 4)
2140 MSVCP_bool __thiscall ios_base_eof(const ios_base *this)
2141 {
2142     TRACE("(%p)\n", this);
2143     return (this->state & IOSTATE_eofbit) != 0;
2144 }
2145
2146 /* ?flags@ios_base@std@@QAEHH@Z */
2147 /* ?flags@ios_base@std@@QEAAHH@Z */
2148 DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8)
2149 IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags)
2150 {
2151     IOSB_fmtflags ret = this->fmtfl;
2152
2153     TRACE("(%p %x)\n", this, flags);
2154
2155     this->fmtfl = flags & FMTFLAG_mask;
2156     return ret;
2157 }
2158
2159 /* ?flags@ios_base@std@@QBEHXZ */
2160 /* ?flags@ios_base@std@@QEBAHXZ */
2161 DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4)
2162 IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this)
2163 {
2164     TRACE("(%p)\n", this);
2165     return this->fmtfl;
2166 }
2167
2168 /* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */
2169 /* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */
2170 DEFINE_THISCALL_WRAPPER(ios_base_getloc, 8)
2171 locale* __thiscall ios_base_getloc(const ios_base *this, locale *ret)
2172 {
2173     TRACE("(%p)\n", this);
2174     return locale_copy_ctor(ret, this->loc);
2175 }
2176
2177 /* ?good@ios_base@std@@QBE_NXZ */
2178 /* ?good@ios_base@std@@QEBA_NXZ */
2179 DEFINE_THISCALL_WRAPPER(ios_base_good, 4)
2180 MSVCP_bool __thiscall ios_base_good(const ios_base *this)
2181 {
2182     TRACE("(%p)\n", this);
2183     return this->state == IOSTATE_goodbit;
2184 }
2185
2186 /* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */
2187 /* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */
2188 DEFINE_THISCALL_WRAPPER(ios_base_imbue, 12)
2189 locale* __thiscall ios_base_imbue(ios_base *this, locale *ret, const locale *loc)
2190 {
2191     TRACE("(%p %p)\n", this, loc);
2192     *ret = *this->loc;
2193     locale_copy_ctor(this->loc, loc);
2194     return ret;
2195 }
2196
2197 /* ?precision@ios_base@std@@QAEHH@Z */
2198 /* ?precision@ios_base@std@@QEAA_J_J@Z */
2199 DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 8)
2200 MSVCP_size_t __thiscall ios_base_precision_set(ios_base *this, MSVCP_size_t precision)
2201 {
2202     MSVCP_size_t ret = this->prec;
2203
2204     TRACE("(%p %lu)\n", this, precision);
2205
2206     this->prec = precision;
2207     return ret;
2208 }
2209
2210 /* ?precision@ios_base@std@@QBEHXZ */
2211 /* ?precision@ios_base@std@@QEBA_JXZ */
2212 DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4)
2213 MSVCP_size_t __thiscall ios_base_precision_get(const ios_base *this)
2214 {
2215     TRACE("(%p)\n", this);
2216     return this->prec;
2217 }
2218
2219 /* ?rdstate@ios_base@std@@QBEHXZ */
2220 /* ?rdstate@ios_base@std@@QEBAHXZ */
2221 DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4)
2222 IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this)
2223 {
2224     TRACE("(%p)\n", this);
2225     return this->state;
2226 }
2227
2228 /* ?setf@ios_base@std@@QAEHHH@Z */
2229 /* ?setf@ios_base@std@@QEAAHHH@Z */
2230 DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12)
2231 IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask)
2232 {
2233     IOSB_fmtflags ret = this->fmtfl;
2234
2235     TRACE("(%p %x %x)\n", this, flags, mask);
2236
2237     this->fmtfl = (this->fmtfl & (~mask)) | (flags & mask & FMTFLAG_mask);
2238     return ret;
2239 }
2240
2241 /* ?setf@ios_base@std@@QAEHH@Z */
2242 /* ?setf@ios_base@std@@QEAAHH@Z */
2243 DEFINE_THISCALL_WRAPPER(ios_base_setf, 8)
2244 IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags)
2245 {
2246     return ios_base_setf_mask(this, flags, ~0);
2247 }
2248
2249 /* ?setstate@ios_base@std@@QAEXH_N@Z */
2250 /* ?setstate@ios_base@std@@QEAAXH_N@Z */
2251 DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12)
2252 void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
2253 {
2254     TRACE("(%p %x %x)\n", this, state, reraise);
2255
2256     if(state != IOSTATE_goodbit)
2257         ios_base_clear_reraise(this, this->state | state, reraise);
2258 }
2259
2260 /* ?setstate@ios_base@std@@QAEXH@Z */
2261 /* ?setstate@ios_base@std@@QEAAXH@Z */
2262 DEFINE_THISCALL_WRAPPER(ios_base_setstate, 8)
2263 void __thiscall ios_base_setstate(ios_base *this, IOSB_iostate state)
2264 {
2265     ios_base_setstate_reraise(this, state, FALSE);
2266 }
2267
2268 /* ?setstate@ios_base@std@@QAEXI@Z */
2269 /* ?setstate@ios_base@std@@QEAAXI@Z */
2270 DEFINE_THISCALL_WRAPPER(ios_base_setstate_unsigned, 8)
2271 void __thiscall ios_base_setstate_unsigned(ios_base *this, unsigned int state)
2272 {
2273     ios_base_setstate_reraise(this, (IOSB_iostate)state, FALSE);
2274 }
2275
2276 /* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */
2277 MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync)
2278 {
2279     _Lockit lock;
2280     MSVCP_bool ret;
2281
2282     TRACE("(%x)\n", sync);
2283
2284     _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
2285     ret = ios_base_Sync;
2286     ios_base_Sync = sync;
2287     _Lockit_dtor(&lock);
2288     return ret;
2289 }
2290
2291 /* ?unsetf@ios_base@std@@QAEXH@Z */
2292 /* ?unsetf@ios_base@std@@QEAAXH@Z */
2293 DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8)
2294 void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags)
2295 {
2296     TRACE("(%p %x)\n", this, flags);
2297     this->fmtfl &= ~flags;
2298 }
2299
2300 /* ?width@ios_base@std@@QAEHH@Z */
2301 /* ?width@ios_base@std@@QEAA_J_J@Z */
2302 DEFINE_THISCALL_WRAPPER(ios_base_width_set, 8)
2303 MSVCP_size_t __thiscall ios_base_width_set(ios_base *this, MSVCP_size_t width)
2304 {
2305     MSVCP_size_t ret = this->wide;
2306
2307     TRACE("(%p %lu)\n", this, width);
2308
2309     this->wide = width;
2310     return ret;
2311 }
2312
2313 /* ?width@ios_base@std@@QBEHXZ */
2314 /* ?width@ios_base@std@@QEBA_JXZ */
2315 DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4)
2316 MSVCP_size_t __thiscall ios_base_width_get(ios_base *this)
2317 {
2318     TRACE("(%p)\n", this);
2319     return this->wide;
2320 }
2321
2322 /* ?xalloc@ios_base@std@@SAHXZ */
2323 int CDECL ios_base_xalloc(void)
2324 {
2325     _Lockit lock;
2326     int ret;
2327
2328     TRACE("\n");
2329
2330     _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
2331     ret = ios_base_Index++;
2332     _Lockit_dtor(&lock);
2333     return ret;
2334 }
2335
2336 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */
2337 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */
2338 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4)
2339 basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this)
2340 {
2341     TRACE("(%p)\n", this);
2342
2343     ios_base_ctor(&this->base);
2344     this->base.vtable = &MSVCP_basic_ios_char_vtable;
2345     return this;
2346 }
2347
2348 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
2349 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
2350 DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12)
2351 void __thiscall basic_ios_char_init(basic_ios_char *this, basic_streambuf_char *streambuf, MSVCP_bool isstd)
2352 {
2353     TRACE("(%p %p %x)\n", this, streambuf, isstd);
2354     ios_base_Init(&this->base);
2355     this->strbuf = streambuf;
2356     this->stream = NULL;
2357     this->fillch = ' ';
2358
2359     if(!streambuf)
2360         ios_base_setstate(&this->base, IOSTATE_badbit);
2361
2362     if(isstd)
2363         FIXME("standard streams not handled yet\n");
2364 }
2365
2366 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
2367 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
2368 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor_streambuf, 8)
2369 basic_ios_char* __thiscall basic_ios_char_ctor_streambuf(basic_ios_char *this, basic_streambuf_char *strbuf)
2370 {
2371     TRACE("(%p %p)\n", this, strbuf);
2372
2373     basic_ios_char_ctor(this);
2374     basic_ios_char_init(this, strbuf, FALSE);
2375     return this;
2376 }
2377
2378 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */
2379 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */
2380 DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4)
2381 void __thiscall basic_ios_char_dtor(basic_ios_char *this)
2382 {
2383     TRACE("(%p)\n", this);
2384     ios_base_dtor(&this->base);
2385 }
2386
2387 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_char_vector_dtor, 8)
2388 basic_ios_char* __thiscall MSVCP_basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
2389 {
2390     TRACE("(%p %x) stub\n", this, flags);
2391     if(flags & 2) {
2392         /* we have an array, with the number of elements stored before the first object */
2393         int i, *ptr = (int *)this-1;
2394
2395         for(i=*ptr-1; i>=0; i--)
2396             basic_ios_char_dtor(this+i);
2397         MSVCRT_operator_delete(ptr);
2398     } else {
2399         basic_ios_char_dtor(this);
2400         if(flags & 1)
2401             MSVCRT_operator_delete(this);
2402     }
2403
2404     return this;
2405 }
2406
2407 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
2408 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
2409 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12)
2410 void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
2411 {
2412     TRACE("(%p %x %x)\n", this, state, reraise);
2413     ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
2414 }
2415
2416 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
2417 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
2418 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear, 8)
2419 void __thiscall basic_ios_char_clear(basic_ios_char *this, unsigned int state)
2420 {
2421     basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE);
2422 }
2423
2424 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */
2425 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */
2426 DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8)
2427 basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy)
2428 {
2429     TRACE("(%p %p)\n", this, copy);
2430     if(this == copy)
2431         return this;
2432
2433     this->stream = copy->stream;
2434     this->fillch = copy->fillch;
2435     ios_base_copyfmt(&this->base, &copy->base);
2436     return this;
2437 }
2438
2439 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */
2440 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */
2441 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8)
2442 char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill)
2443 {
2444     char ret = this->fillch;
2445
2446     TRACE("(%p %c)\n", this, fill);
2447
2448     this->fillch = fill;
2449     return ret;
2450 }
2451
2452 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */
2453 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */
2454 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4)
2455 char __thiscall basic_ios_char_fill_get(basic_ios_char *this)
2456 {
2457     TRACE("(%p)\n", this);
2458     return this->fillch;
2459 }
2460
2461 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
2462 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
2463 DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 12)
2464 locale *__thiscall basic_ios_char_imbue(basic_ios_char *this, locale *ret, const locale *loc)
2465 {
2466     TRACE("(%p %p %p)\n", this, ret, loc);
2467
2468     if(this->strbuf)
2469         return basic_streambuf_char_pubimbue(this->strbuf, ret, loc);
2470
2471     locale_copy_ctor(ret, loc);
2472     return ret;
2473 }
2474
2475 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */
2476 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */
2477 DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12)
2478 char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def)
2479 {
2480     FIXME("(%p %c %c) stub\n", this, ch, def);
2481     return def;
2482 }
2483
2484 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */
2485 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */
2486 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8)
2487 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, basic_streambuf_char *streambuf)
2488 {
2489     basic_streambuf_char *ret = this->strbuf;
2490
2491     TRACE("(%p %p)\n", this, streambuf);
2492
2493     this->strbuf = streambuf;
2494     basic_ios_char_clear(this, IOSTATE_goodbit);
2495     return ret;
2496 }
2497
2498 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
2499 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
2500 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4)
2501 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this)
2502 {
2503     TRACE("(%p)\n", this);
2504     return this->strbuf;
2505 }
2506
2507 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
2508 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
2509 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12)
2510 void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
2511 {
2512     TRACE("(%p %x %x)\n", this, state, reraise);
2513
2514     if(state != IOSTATE_goodbit)
2515         basic_ios_char_clear_reraise(this, this->base.state | state, reraise);
2516 }
2517
2518 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
2519 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
2520 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate, 8)
2521 void __thiscall basic_ios_char_setstate(basic_ios_char *this, unsigned int state)
2522 {
2523     basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE);
2524 }
2525
2526 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */
2527 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */
2528 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8)
2529 basic_ostream_char* __thiscall basic_ios_char_tie_set(basic_ios_char *this, basic_ostream_char *ostream)
2530 {
2531     basic_ostream_char *ret = this->stream;
2532
2533     TRACE("(%p %p)\n", this, ostream);
2534
2535     this->stream = ostream;
2536     return ret;
2537 }
2538
2539 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
2540 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
2541 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4)
2542 basic_ostream_char* __thiscall basic_ios_char_tie_get(const basic_ios_char *this)
2543 {
2544     TRACE("(%p)\n", this);
2545     return this->stream;
2546 }
2547
2548 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */
2549 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */
2550 DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8)
2551 char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
2552 {
2553     FIXME("(%p %c) stub\n", this, ch);
2554     return 0;
2555 }
2556
2557
2558 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
2559 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
2560 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4)
2561 basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this)
2562 {
2563         TRACE("(%p)\n", this);
2564
2565         ios_base_ctor(&this->base);
2566         this->base.vtable = &MSVCP_basic_ios_wchar_vtable;
2567         return this;
2568 }
2569
2570 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
2571 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
2572 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_init, 12)
2573 void __thiscall basic_ios_wchar_init(basic_ios_wchar *this, basic_streambuf_wchar *streambuf, MSVCP_bool isstd)
2574 {
2575     TRACE("(%p %p %x)\n", this, streambuf, isstd);
2576     ios_base_Init(&this->base);
2577     this->strbuf = streambuf;
2578     this->stream = NULL;
2579     this->fillch = ' ';
2580
2581     if(!streambuf)
2582         ios_base_setstate(&this->base, IOSTATE_badbit);
2583
2584     if(isstd)
2585         FIXME("standard streams not handled yet\n");
2586 }
2587
2588 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
2589 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
2590 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor_streambuf, 8)
2591 basic_ios_wchar* __thiscall basic_ios_wchar_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
2592 {
2593     TRACE("(%p %p)\n", this, strbuf);
2594
2595     basic_ios_wchar_ctor(this);
2596     basic_ios_wchar_init(this, strbuf, FALSE);
2597     return this;
2598 }
2599
2600 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
2601 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
2602 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_dtor, 4)
2603 void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this)
2604 {
2605     TRACE("(%p)\n", this);
2606     ios_base_dtor(&this->base);
2607 }
2608
2609 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_wchar_vector_dtor, 8)
2610 basic_ios_wchar* __thiscall MSVCP_basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags)
2611 {
2612     TRACE("(%p %x) stub\n", this, flags);
2613     if(flags & 2) {
2614         /* we have an array, with the number of elements stored before the first object */
2615         int i, *ptr = (int *)this-1;
2616
2617         for(i=*ptr-1; i>=0; i--)
2618             basic_ios_wchar_dtor(this+i);
2619         MSVCRT_operator_delete(ptr);
2620     } else {
2621         basic_ios_wchar_dtor(this);
2622         if(flags & 1)
2623             MSVCRT_operator_delete(this);
2624     }
2625
2626     return this;
2627 }
2628
2629 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
2630 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
2631 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear_reraise, 12)
2632 void __thiscall basic_ios_wchar_clear_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
2633 {
2634     TRACE("(%p %x %x)\n", this, state, reraise);
2635     ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
2636 }
2637
2638 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
2639 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
2640 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear, 8)
2641 void __thiscall basic_ios_wchar_clear(basic_ios_wchar *this, unsigned int state)
2642 {
2643     basic_ios_wchar_clear_reraise(this, (IOSB_iostate)state, FALSE);
2644 }
2645
2646 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z */
2647 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z */
2648 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_copyfmt, 8)
2649 basic_ios_wchar* __thiscall basic_ios_wchar_copyfmt(basic_ios_wchar *this, basic_ios_wchar *copy)
2650 {
2651     TRACE("(%p %p)\n", this, copy);
2652     if(this == copy)
2653         return this;
2654
2655     this->stream = copy->stream;
2656     this->fillch = copy->fillch;
2657     ios_base_copyfmt(&this->base, &copy->base);
2658     return this;
2659 }
2660
2661 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z */
2662 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z */
2663 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_set, 8)
2664 wchar_t __thiscall basic_ios_wchar_fill_set(basic_ios_wchar *this, wchar_t fill)
2665 {
2666     wchar_t ret = this->fillch;
2667
2668     TRACE("(%p %c)\n", this, fill);
2669
2670     this->fillch = fill;
2671     return ret;
2672 }
2673
2674 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ */
2675 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ */
2676 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_get, 4)
2677 wchar_t __thiscall basic_ios_wchar_fill_get(basic_ios_wchar *this)
2678 {
2679     TRACE("(%p)\n", this);
2680     return this->fillch;
2681 }
2682
2683 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
2684 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
2685 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_imbue, 12)
2686 locale *__thiscall basic_ios_wchar_imbue(basic_ios_wchar *this, locale *ret, const locale *loc)
2687 {
2688     TRACE("(%p %p %p)\n", this, ret, loc);
2689
2690     if(this->strbuf)
2691         return basic_streambuf_wchar_pubimbue(this->strbuf, ret, loc);
2692
2693     locale_copy_ctor(ret, loc);
2694     return ret;
2695 }
2696
2697 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z */
2698 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z */
2699 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_narrow, 12)
2700 char __thiscall basic_ios_wchar_narrow(basic_ios_wchar *this, wchar_t ch, char def)
2701 {
2702     FIXME("(%p %c %c) stub\n", this, ch, def);
2703     return def;
2704 }
2705
2706 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
2707 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
2708 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_set, 8)
2709 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_set(basic_ios_wchar *this, basic_streambuf_wchar *streambuf)
2710 {
2711     basic_streambuf_wchar *ret = this->strbuf;
2712
2713     TRACE("(%p %p)\n", this, streambuf);
2714
2715     this->strbuf = streambuf;
2716     basic_ios_wchar_clear(this, IOSTATE_goodbit);
2717     return ret;
2718 }
2719
2720 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
2721 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
2722 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_get, 4)
2723 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_get(const basic_ios_wchar *this)
2724 {
2725     TRACE("(%p)\n", this);
2726     return this->strbuf;
2727 }
2728
2729 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
2730 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
2731 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate_reraise, 12)
2732 void __thiscall basic_ios_wchar_setstate_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
2733 {
2734     TRACE("(%p %x %x)\n", this, state, reraise);
2735
2736     if(state != IOSTATE_goodbit)
2737         basic_ios_wchar_clear_reraise(this, this->base.state | state, reraise);
2738 }
2739
2740 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
2741 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
2742 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate, 8)
2743 void __thiscall basic_ios_wchar_setstate(basic_ios_wchar *this, IOSB_iostate state)
2744 {
2745     basic_ios_wchar_setstate_reraise(this, state, FALSE);
2746 }
2747
2748 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
2749 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
2750 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_set, 8)
2751 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_set(basic_ios_wchar *this, basic_ostream_wchar *ostream)
2752 {
2753     basic_ostream_wchar *ret = this->stream;
2754
2755     TRACE("(%p %p)\n", this, ostream);
2756
2757     this->stream = ostream;
2758     return ret;
2759 }
2760
2761 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
2762 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
2763 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_get, 4)
2764 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_get(const basic_ios_wchar *this)
2765 {
2766     TRACE("(%p)\n", this);
2767     return this->stream;
2768 }
2769
2770 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z */
2771 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z */
2772 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_widen, 8)
2773 wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch)
2774 {
2775     FIXME("(%p %c)\n", this, ch);
2776     return 0;
2777 }
2778
2779 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
2780 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
2781 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 12)
2782 basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd)
2783 {
2784     FIXME("(%p %p %d) stub\n", this, strbuf, isstd);
2785     return NULL;
2786 }
2787
2788 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
2789 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
2790 DEFINE_THISCALL_WRAPPER(basic_ostream_char_uninitialized, 12)
2791 basic_ostream_char* __thiscall basic_ostream_char_uninitialized(basic_ostream_char *this, int uninitialized, MSVCP_bool addstd)
2792 {
2793     FIXME("(%p %d %x) stub\n", this, uninitialized, addstd);
2794     return NULL;
2795 }
2796
2797 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
2798 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
2799 DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4)
2800 void __thiscall basic_ostream_char_dtor(basic_ostream_char *this)
2801 {
2802     FIXME("(%p) stub\n", this);
2803 }
2804
2805 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ostream_char_vector_dtor, 8)
2806 basic_ostream_char* __thiscall MSVCP_basic_ostream_char_vector_dtor(basic_ostream_char *this, unsigned int flags)
2807 {
2808     TRACE("(%p %x) stub\n", this, flags);
2809     if(flags & 2) {
2810         /* we have an array, with the number of elements stored before the first object */
2811         int i, *ptr = (int *)this-1;
2812
2813         for(i=*ptr-1; i>=0; i--)
2814             basic_ostream_char_dtor(this+i);
2815         MSVCRT_operator_delete(ptr);
2816     } else {
2817         basic_ostream_char_dtor(this);
2818         if(flags & 1)
2819             MSVCRT_operator_delete(this);
2820     }
2821
2822     return this;
2823 }
2824
2825 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */
2826 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */
2827 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8)
2828 basic_ostream_char* __thiscall basic_ostream_char_print_short(basic_ostream_char *this, short val)
2829 {
2830     FIXME("(%p %d) stub\n", this, val);
2831     return NULL;
2832 }
2833
2834 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z */
2835 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z */
2836 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ushort, 8)
2837 basic_ostream_char* __thiscall basic_ostream_char_print_ushort(basic_ostream_char *this, unsigned short val)
2838 {
2839     FIXME("(%p %d) stub\n", this, val);
2840     return NULL;
2841 }
2842
2843 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z */
2844 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z */
2845 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int, 8)
2846 basic_ostream_char* __thiscall basic_ostream_char_print_int(basic_ostream_char *this, int val)
2847 {
2848     FIXME("(%p %d) stub\n", this, val);
2849     return NULL;
2850 }
2851
2852 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z */
2853 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z */
2854 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint, 8)
2855 basic_ostream_char* __thiscall basic_ostream_char_print_uint(basic_ostream_char *this, unsigned int val)
2856 {
2857     FIXME("(%p %d) stub\n", this, val);
2858     return NULL;
2859 }
2860
2861 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z */
2862 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z */
2863 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_long, 8)
2864 basic_ostream_char* __thiscall basic_ostream_char_print_long(basic_ostream_char *this, LONG val)
2865 {
2866     FIXME("(%p %d) stub\n", this, val);
2867     return NULL;
2868 }
2869
2870 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z */
2871 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z */
2872 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ulong, 8)
2873 basic_ostream_char* __thiscall basic_ostream_char_print_ulong(basic_ostream_char *this, ULONG val)
2874 {
2875     FIXME("(%p %d) stub\n", this, val);
2876     return NULL;
2877 }
2878
2879 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z */
2880 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z */
2881 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_float, 8)
2882 basic_ostream_char* __thiscall basic_ostream_char_print_float(basic_ostream_char *this, float val)
2883 {
2884     FIXME("(%p %f) stub\n", this, val);
2885     return NULL;
2886 }
2887
2888 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z */
2889 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z */
2890 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_double, 12)
2891 basic_ostream_char* __thiscall basic_ostream_char_print_double(basic_ostream_char *this, double val)
2892 {
2893     FIXME("(%p %lf) stub\n", this, val);
2894     return NULL;
2895 }
2896
2897 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
2898 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
2899 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_streambuf, 8)
2900 basic_ostream_char* __thiscall basic_ostream_char_print_streambuf(basic_ostream_char *this, basic_streambuf_char *val)
2901 {
2902     FIXME("(%p %p) stub\n", this, val);
2903     return NULL;
2904 }
2905
2906 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z */
2907 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z */
2908 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ptr, 8)
2909 basic_ostream_char* __thiscall basic_ostream_char_print_ptr(basic_ostream_char *this, const void *val)
2910 {
2911     FIXME("(%p %p) stub\n", this, val);
2912     return NULL;
2913 }
2914
2915 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z */
2916 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z */
2917 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int64, 12)
2918 basic_ostream_char* __thiscall basic_ostream_char_print_int64(basic_ostream_char *this, __int64 val)
2919 {
2920     FIXME("(%p) stub\n", this);
2921     return NULL;
2922 }
2923
2924 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z */
2925 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z */
2926 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint64, 12)
2927 basic_ostream_char* __thiscall basic_ostream_char_print_uint64(basic_ostream_char *this, unsigned __int64 val)
2928 {
2929     FIXME("(%p) stub\n", this);
2930     return NULL;
2931 }
2932
2933 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z */
2934 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z */
2935 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_bool, 8)
2936 basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char *this, MSVCP_bool val)
2937 {
2938     FIXME("(%p %x) stub\n", this, val);
2939     return NULL;
2940 }
2941
2942 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
2943 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
2944 DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4)
2945 void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this)
2946 {
2947     FIXME("(%p) stub\n", this);
2948 }
2949
2950 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
2951 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
2952 DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4)
2953 basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this)
2954 {
2955     FIXME("(%p) stub\n", this);
2956     return NULL;
2957 }
2958
2959 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */
2960 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */
2961 DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4)
2962 MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this)
2963 {
2964     FIXME("(%p) stub\n", this);
2965     return 0;
2966 }
2967
2968 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
2969 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
2970 DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4)
2971 void __thiscall basic_ostream_char_osfx(basic_ostream_char *this)
2972 {
2973     FIXME("(%p) stub\n", this);
2974 }
2975
2976 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
2977 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
2978 DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8)
2979 basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch)
2980 {
2981     FIXME("(%p %c) stub\n", this, ch);
2982     return NULL;
2983 }
2984
2985 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
2986 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
2987 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 12)
2988 basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way)
2989 {
2990     FIXME("(%p %lu %d) stub\n", this, off, way);
2991     return NULL;
2992 }
2993
2994 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
2995 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
2996 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28)
2997 basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos)
2998 {
2999     FIXME("(%p %s) stub\n", this, debugstr_fpos_int(&pos));
3000     return NULL;
3001 }
3002
3003 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
3004 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
3005 DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8)
3006 fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret)
3007 {
3008     FIXME("(%p) stub\n", this);
3009     return ret;
3010 }
3011
3012 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */
3013 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */
3014 DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 12)
3015 basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count)
3016 {
3017     FIXME("(%p %s %lu) stub\n", this, debugstr_a(str), count);
3018     return NULL;
3019 }