winmm: Make WINMM_DRVMessage() static.
[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
23 #include "msvcp90.h"
24 #include "windef.h"
25 #include "winbase.h"
26 #include "wine/debug.h"
27 WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
28
29 typedef enum {
30     IOSTATE_goodbit   = 0x00,
31     IOSTATE_eofbit    = 0x01,
32     IOSTATE_failbit   = 0x02,
33     IOSTATE_badbit    = 0x04,
34     IOSTATE__Hardfail = 0x10
35 } IOSB_iostate;
36
37 typedef enum {
38     FMTFLAG_skipws      = 0x0001,
39     FMTFLAG_unitbuf     = 0x0002,
40     FMTFLAG_uppercase   = 0x0004,
41     FMTFLAG_showbase    = 0x0008,
42     FMTFLAG_showpoint   = 0x0010,
43     FMTFLAG_showpos     = 0x0020,
44     FMTFLAG_left        = 0x0040,
45     FMTFLAG_right       = 0x0080,
46     FMTFLAG_internal    = 0x0100,
47     FMTFLAG_dec         = 0x0200,
48     FMTFLAG_oct         = 0x0400,
49     FMTFLAG_hex         = 0x0800,
50     FMTFLAG_scientific  = 0x1000,
51     FMTFLAG_fixed       = 0x2000,
52     FMTFLAG_hexfloat    = 0x3000,
53     FMTFLAG_boolalpha   = 0x4000,
54     FMTFLAG_stdio       = 0x8000,
55     FMTFLAG_adjustfield = FMTFLAG_left|FMTFLAG_right|FMTFLAG_internal,
56     FMTFLAG_basefield   = FMTFLAG_dec|FMTFLAG_oct|FMTFLAG_hex,
57     FMTFLAG_floadfield  = FMTFLAG_scientific|FMTFLAG_fixed
58 } IOSB_fmtflags;
59
60 typedef struct _iosarray {
61     struct _iosarray *next;
62     int index;
63     int long_val;
64     void *ptr_val;
65 } IOS_BASE_iosarray;
66
67 typedef enum {
68     EVENT_erase_event,
69     EVENT_imbue_event,
70     EVENT_copyfmt_event
71 } IOS_BASE_event;
72
73 struct _ios_base;
74 typedef void (CDECL *IOS_BASE_event_callback)(IOS_BASE_event, struct _ios_base*, int);
75 typedef struct _fnarray {
76     struct _fnarray *next;
77     int index;
78     IOS_BASE_event_callback event_handler;
79 } IOS_BASE_fnarray;
80
81 /* ?_Index@ios_base@std@@0HA */
82 int ios_base_Index = 0;
83 /* ?_Sync@ios_base@std@@0_NA */
84 MSVCP_bool ios_base_Sync = FALSE;
85
86 typedef struct _ios_base {
87     const vtable_ptr *vtable;
88     MSVCP_size_t stdstr;
89     IOSB_iostate state;
90     IOSB_iostate except;
91     IOSB_fmtflags fmtfl;
92     MSVCP_size_t prec;
93     MSVCP_size_t wide;
94     IOS_BASE_iosarray *arr;
95     IOS_BASE_fnarray *calls;
96     locale *loc;
97 } ios_base;
98
99 typedef struct {
100     ios_base child;
101     /*basic_streambuf_char*/void *strbuf;
102     /*basic_ostream_char*/void *stream;
103     char fillch;
104 } basic_ios_char;
105
106 /* ??_7ios_base@std@@6B@ */
107 extern const vtable_ptr MSVCP_ios_base_vtable;
108
109 /* ??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@ */
110 extern const vtable_ptr MSVCP_basic_ios_char_vtable;
111
112 static const type_info ios_base_type_info = {
113     &MSVCP_ios_base_vtable,
114     NULL,
115     ".?AVios_base@std@@"
116 };
117
118 static const rtti_base_descriptor ios_base_rtti_base_descriptor = {
119     &ios_base_type_info,
120     1,
121     { 0, -1, 0 },
122     64
123 };
124
125 static const type_info iosb_type_info = {
126     &MSVCP_ios_base_vtable,
127     NULL,
128     ".?AV?$_Iosb@H@std@@"
129 };
130
131 static const rtti_base_descriptor iosb_rtti_base_descriptor = {
132     &iosb_type_info,
133     0,
134     { 4, -1, 0 },
135     64
136 };
137
138 static const rtti_base_array ios_base_rtti_base_array = {
139     {
140         &ios_base_rtti_base_descriptor,
141         &iosb_rtti_base_descriptor,
142         NULL
143     }
144 };
145
146 static const rtti_object_hierarchy ios_base_type_hierarchy = {
147     0,
148     0,
149     2,
150     &ios_base_rtti_base_array
151 };
152
153 const rtti_object_locator ios_base_rtti = {
154     0,
155     0,
156     0,
157     &ios_base_type_info,
158     &ios_base_type_hierarchy
159 };
160
161 static const type_info basic_ios_char_type_info = {
162     &MSVCP_basic_ios_char_vtable,
163     NULL,
164     ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@"
165 };
166
167 static const rtti_base_descriptor basic_ios_char_rtti_base_descriptor = {
168     &basic_ios_char_type_info,
169     2,
170     { 0, -1, 0 },
171     64
172 };
173
174 static const rtti_base_array basic_ios_char_rtti_base_array = {
175     {
176         &basic_ios_char_rtti_base_descriptor,
177         &ios_base_rtti_base_descriptor,
178         &iosb_rtti_base_descriptor
179     }
180 };
181
182 static const rtti_object_hierarchy basic_ios_char_hierarchy = {
183     0,
184     0,
185     3,
186     &basic_ios_char_rtti_base_array
187 };
188
189 const rtti_object_locator basic_ios_char_rtti = {
190     0,
191     0,
192     0,
193     &basic_ios_char_type_info,
194     &basic_ios_char_hierarchy
195 };
196
197 #ifndef __GNUC__
198 void __asm_dummy_vtables(void) {
199 #endif
200     __ASM_VTABLE(ios_base, "");
201     __ASM_VTABLE(basic_ios_char, "");
202 #ifndef __GNUC__
203 }
204 #endif
205
206 /* ??0ios_base@std@@IAE@XZ */
207 /* ??0ios_base@std@@IEAA@XZ */
208 DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4)
209 ios_base* __thiscall ios_base_ctor(ios_base *this)
210 {
211     FIXME("(%p) stub\n", this);
212
213     this->vtable = &MSVCP_ios_base_vtable;
214     return NULL;
215 }
216
217 /* ??0ios_base@std@@QAE@ABV01@@Z */
218 /* ??0ios_base@std@@QEAA@AEBV01@@Z */
219 DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8)
220 ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy)
221 {
222     FIXME("(%p %p) stub\n", this, copy);
223     return NULL;
224 }
225
226 /* ??1ios_base@std@@UAE@XZ */
227 /* ??1ios_base@std@@UEAA@XZ */
228 DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4)
229 void __thiscall ios_base_dtor(ios_base *this)
230 {
231     FIXME("(%p) stub\n", this);
232 }
233
234 DEFINE_THISCALL_WRAPPER(MSVCP_ios_base_vector_dtor, 8)
235 ios_base* __thiscall MSVCP_ios_base_vector_dtor(ios_base *this, unsigned int flags)
236 {
237     TRACE("(%p %x) stub\n", this, flags);
238     if(flags & 2) {
239         /* we have an array, with the number of elements stored before the first object */
240         int i, *ptr = (int *)this-1;
241
242         for(i=*ptr-1; i>=0; i--)
243             ios_base_dtor(this+i);
244         MSVCRT_operator_delete(ptr);
245     } else {
246         ios_base_dtor(this);
247         if(flags & 1)
248             MSVCRT_operator_delete(this);
249     }
250
251     return this;
252 }
253
254 /* ??4ios_base@std@@QAEAAV01@ABV01@@Z */
255 /* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */
256 DEFINE_THISCALL_WRAPPER(ios_base_assign, 8)
257 ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right)
258 {
259     FIXME("(%p %p) stub\n", this, right);
260     return NULL;
261 }
262
263 /* ??7ios_base@std@@QBE_NXZ */
264 /* ??7ios_base@std@@QEBA_NXZ */
265 DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4)
266 MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this)
267 {
268     FIXME("(%p) stub\n", this);
269     return FALSE;
270 }
271
272 /* ??Bios_base@std@@QBEPAXXZ */
273 /* ??Bios_base@std@@QEBAPEAXXZ */
274 DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4)
275 void* __thiscall ios_base_op_fail(const ios_base *this)
276 {
277     FIXME("(%p) stub\n", this);
278     return NULL;
279 }
280
281 /* ?_Addstd@ios_base@std@@SAXPAV12@@Z */
282 /* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */
283 void CDECL ios_base_Addstd(ios_base *add)
284 {
285     FIXME("(%p) stub\n", add);
286 }
287
288 /* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */
289 /* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */
290 DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8)
291 void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event)
292 {
293     FIXME("(%p %x) stub\n", this, event);
294 }
295
296 /* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */
297 /* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */
298 DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8)
299 IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index)
300 {
301     FIXME("(%p %d) stub\n", this, index);
302     return NULL;
303 }
304
305 /* ?_Index_func@ios_base@std@@CAAAHXZ */
306 /* ?_Index_func@ios_base@std@@CAAEAHXZ */
307 int* CDECL ios_base_Index_func(void)
308 {
309     TRACE("\n");
310     return &ios_base_Index;
311 }
312
313 /* ?_Init@ios_base@std@@IAEXXZ */
314 /* ?_Init@ios_base@std@@IEAAXXZ */
315 DEFINE_THISCALL_WRAPPER(ios_base_Init, 4)
316 void __thiscall ios_base_Init(ios_base *this)
317 {
318     FIXME("(%p) stub\n", this);
319 }
320
321 /* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */
322 /* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */
323 void CDECL ios_base_Ios_base_dtor(ios_base *obj)
324 {
325     FIXME("(%p) stub\n", obj);
326 }
327
328 /* ?_Sync_func@ios_base@std@@CAAA_NXZ */
329 /* ?_Sync_func@ios_base@std@@CAAEA_NXZ */
330 MSVCP_bool* CDECL ios_base_Sync_func(void)
331 {
332     TRACE("\n");
333     return &ios_base_Sync;
334 }
335
336 /* ?_Tidy@ios_base@std@@AAAXXZ */
337 /* ?_Tidy@ios_base@std@@AEAAXXZ */
338 void CDECL ios_base_Tidy(ios_base *this)
339 {
340     FIXME("(%p) stub\n", this);
341 }
342
343 /* ?bad@ios_base@std@@QBE_NXZ */
344 /* ?bad@ios_base@std@@QEBA_NXZ */
345 DEFINE_THISCALL_WRAPPER(ios_base_bad, 4)
346 MSVCP_bool __thiscall ios_base_bad(const ios_base *this)
347 {
348     FIXME("(%p) stub\n", this);
349     return FALSE;
350 }
351
352 /* ?clear@ios_base@std@@QAEXH_N@Z */
353 /* ?clear@ios_base@std@@QEAAXH_N@Z */
354 DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12)
355 void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
356 {
357     FIXME("(%p %x %x) stub\n", this, state, reraise);
358 }
359
360 /* ?clear@ios_base@std@@QAEXH@Z */
361 /* ?clear@ios_base@std@@QEAAXH@Z */
362 DEFINE_THISCALL_WRAPPER(ios_base_clear, 8)
363 void __thiscall ios_base_clear(ios_base *this, IOSB_iostate state)
364 {
365     return ios_base_clear_reraise(this, state, FALSE);
366 }
367
368 /* ?clear@ios_base@std@@QAEXI@Z */
369 /* ?clear@ios_base@std@@QEAAXI@Z */
370 DEFINE_THISCALL_WRAPPER(ios_base_clear_unsigned, 8)
371 void __thiscall ios_base_clear_unsigned(ios_base *this, unsigned int state)
372 {
373     return ios_base_clear_reraise(this, (IOSB_iostate)state, FALSE);
374 }
375
376 /* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */
377 /* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */
378 DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8)
379 ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *obj)
380 {
381     FIXME("(%p %p) stub\n", this, obj);
382     return NULL;
383 }
384
385 /* ?eof@ios_base@std@@QBE_NXZ */
386 /* ?eof@ios_base@std@@QEBA_NXZ */
387 DEFINE_THISCALL_WRAPPER(ios_base_eof, 4)
388 MSVCP_bool __thiscall ios_base_eof(const ios_base *this)
389 {
390     FIXME("(%p) stub\n", this);
391     return FALSE;
392 }
393
394 /* ?exceptions@ios_base@std@@QAEXH@Z */
395 /* ?exceptions@ios_base@std@@QEAAXH@Z */
396 DEFINE_THISCALL_WRAPPER(ios_base_exception_set, 8)
397 void __thiscall ios_base_exception_set(ios_base *this, IOSB_iostate state)
398 {
399     FIXME("(%p %x) stub\n", this, state);
400 }
401
402 /* ?exceptions@ios_base@std@@QAEXI@Z */
403 /* ?exceptions@ios_base@std@@QEAAXI@Z */
404 DEFINE_THISCALL_WRAPPER(ios_base_exception_set_unsigned, 8)
405 void __thiscall ios_base_exception_set_unsigned(ios_base *this, unsigned int state)
406 {
407     FIXME("(%p %x) stub\n", this, state);
408 }
409
410 /* ?exceptions@ios_base@std@@QBEHXZ */
411 /* ?exceptions@ios_base@std@@QEBAHXZ */
412 DEFINE_THISCALL_WRAPPER(ios_base_exception_get, 4)
413 IOSB_iostate __thiscall ios_base_exception_get(ios_base *this)
414 {
415     FIXME("(%p) stub\n", this);
416     return 0;
417 }
418
419 /* ?fail@ios_base@std@@QBE_NXZ */
420 /* ?fail@ios_base@std@@QEBA_NXZ */
421 DEFINE_THISCALL_WRAPPER(ios_base_fail, 4)
422 MSVCP_bool __thiscall ios_base_fail(ios_base *this)
423 {
424     FIXME("(%p) stub\n", this);
425     return 0;
426 }
427
428 /* ?flags@ios_base@std@@QAEHH@Z */
429 /* ?flags@ios_base@std@@QEAAHH@Z */
430 DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8)
431 IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags)
432 {
433     FIXME("(%p %x) stub\n", this, flags);
434     return 0;
435 }
436
437 /* ?flags@ios_base@std@@QBEHXZ */
438 /* ?flags@ios_base@std@@QEBAHXZ */
439 DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4)
440 IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this)
441 {
442     FIXME("(%p) stub\n", this);
443     return 0;
444 }
445
446 /* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */
447 /* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */
448 DEFINE_THISCALL_WRAPPER(ios_base_getloc, 4)
449 locale __thiscall ios_base_getloc(const ios_base *this)
450 {
451     locale ret = { NULL };
452     FIXME("(%p) stub\n", this);
453     return ret;
454 }
455
456 /* ?good@ios_base@std@@QBE_NXZ */
457 /* ?good@ios_base@std@@QEBA_NXZ */
458 DEFINE_THISCALL_WRAPPER(ios_base_good, 4)
459 MSVCP_bool __thiscall ios_base_good(const ios_base *this)
460 {
461     FIXME("(%p) stub\n", this);
462     return FALSE;
463 }
464
465 /* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */
466 /* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */
467 DEFINE_THISCALL_WRAPPER(ios_base_imbue, 8)
468 locale __thiscall ios_base_imbue(ios_base *this, const locale *loc)
469 {
470     locale ret = { NULL };
471     FIXME("(%p %p) stub\n", this, loc);
472     return ret;
473 }
474
475 /* ?iword@ios_base@std@@QAEAAJH@Z */
476 /* ?iword@ios_base@std@@QEAAAEAJH@Z */
477 DEFINE_THISCALL_WRAPPER(ios_base_iword, 8)
478 MSVCP_long* __thiscall ios_base_iword(ios_base *this, int index)
479 {
480     FIXME("(%p %d) stub\n", this, index);
481     return NULL;
482 }
483
484 /* ?precision@ios_base@std@@QAEHH@Z */
485 /* ?precision@ios_base@std@@QEAA_J_J@Z */
486 DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 8)
487 MSVCP_size_t __thiscall ios_base_precision_set(ios_base *this, MSVCP_size_t precision)
488 {
489     FIXME("(%p %lu) stub\n", this, precision);
490     return 0;
491 }
492
493 /* ?precision@ios_base@std@@QBEHXZ */
494 /* ?precision@ios_base@std@@QEBA_JXZ */
495 DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4)
496 MSVCP_size_t __thiscall ios_base_precision_get(const ios_base *this)
497 {
498     FIXME("(%p) stub\n", this);
499     return 0;
500 }
501
502 /* ?pword@ios_base@std@@QAEAAPAXH@Z */
503 /* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */
504 DEFINE_THISCALL_WRAPPER(ios_base_pword, 8)
505 void** __thiscall ios_base_pword(ios_base *this, int index)
506 {
507     FIXME("(%p %d) stub\n", this, index);
508     return NULL;
509 }
510
511 /* ?rdstate@ios_base@std@@QBEHXZ */
512 /* ?rdstate@ios_base@std@@QEBAHXZ */
513 DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4)
514 IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this)
515 {
516     FIXME("(%p) stub\n", this);
517     return 0;
518 }
519
520 /* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */
521 /* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */
522 DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12)
523 void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index)
524 {
525     FIXME("(%p %p %d) stub\n", this, callback, index);
526 }
527
528 /* ?setf@ios_base@std@@QAEHHH@Z */
529 /* ?setf@ios_base@std@@QEAAHHH@Z */
530 DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12)
531 IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask)
532 {
533     FIXME("(%p %x %x) stub\n", this, flags, mask);
534     return 0;
535 }
536
537 /* ?setf@ios_base@std@@QAEHH@Z */
538 /* ?setf@ios_base@std@@QEAAHH@Z */
539 DEFINE_THISCALL_WRAPPER(ios_base_setf, 8)
540 IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags)
541 {
542     return ios_base_setf_mask(this, flags, ~0);
543 }
544
545 /* ?setstate@ios_base@std@@QAEXH_N@Z */
546 /* ?setstate@ios_base@std@@QEAAXH_N@Z */
547 DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12)
548 void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
549 {
550     FIXME("(%p %x %x) stub\n", this, state, reraise);
551 }
552
553 /* ?setstate@ios_base@std@@QAEXH@Z */
554 /* ?setstate@ios_base@std@@QEAAXH@Z */
555 DEFINE_THISCALL_WRAPPER(ios_base_setstate, 8)
556 void __thiscall ios_base_setstate(ios_base *this, IOSB_iostate state)
557 {
558     ios_base_setstate_reraise(this, state, FALSE);
559 }
560
561 /* ?setstate@ios_base@std@@QAEXI@Z */
562 /* ?setstate@ios_base@std@@QEAAXI@Z */
563 DEFINE_THISCALL_WRAPPER(ios_base_setstate_unsigned, 8)
564 void __thiscall ios_base_setstate_unsigned(ios_base *this, unsigned int state)
565 {
566     ios_base_setstate_reraise(this, (IOSB_iostate)state, FALSE);
567 }
568
569 /* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */
570 MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync)
571 {
572     FIXME("(%x) stub\n", sync);
573     return FALSE;
574 }
575
576 /* ?unsetf@ios_base@std@@QAEXH@Z */
577 /* ?unsetf@ios_base@std@@QEAAXH@Z */
578 DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8)
579 void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags)
580 {
581     FIXME("(%p %x) stub\n", this, flags);
582 }
583
584 /* ?width@ios_base@std@@QAEHH@Z */
585 /* ?width@ios_base@std@@QEAA_J_J@Z */
586 DEFINE_THISCALL_WRAPPER(ios_base_width_set, 8)
587 MSVCP_size_t __thiscall ios_base_width_set(ios_base *this, MSVCP_size_t width)
588 {
589     FIXME("(%p %lu) stub\n", this, width);
590     return 0;
591 }
592
593 /* ?width@ios_base@std@@QBEHXZ */
594 /* ?width@ios_base@std@@QEBA_JXZ */
595 DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4)
596 MSVCP_size_t __thiscall ios_base_width_get(ios_base *this)
597 {
598     FIXME("(%p) stub\n", this);
599     return 0;
600 }
601
602 /* ?xalloc@ios_base@std@@SAHXZ */
603 int CDECL ios_base_xalloc(void)
604 {
605     FIXME("stub\n");
606     return 0;
607 }
608
609 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */
610 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */
611 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4)
612 basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this)
613 {
614     FIXME("(%p) stub\n", this);
615     return NULL;
616 }
617
618 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
619 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
620 DEFINE_THISCALL_WRAPPER(basic_ios_char_copy_ctor, 8)
621 basic_ios_char* __thiscall basic_ios_char_copy_ctor(basic_ios_char *this, const basic_ios_char *copy)
622 {
623     FIXME("(%p %p) stub\n", this, copy);
624     return NULL;
625 }
626
627 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */
628 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */
629 DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4)
630 void __thiscall basic_ios_char_dtor(basic_ios_char *this)
631 {
632     FIXME("(%p) stub\n", this);
633 }
634
635 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_char_vector_dtor, 8)
636 basic_ios_char* __thiscall MSVCP_basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
637 {
638     TRACE("(%p %x) stub\n", this, flags);
639     if(flags & 2) {
640         /* we have an array, with the number of elements stored before the first object */
641         int i, *ptr = (int *)this-1;
642
643         for(i=*ptr-1; i>=0; i--)
644             basic_ios_char_dtor(this+i);
645         MSVCRT_operator_delete(ptr);
646     } else {
647         basic_ios_char_dtor(this);
648         if(flags & 1)
649             MSVCRT_operator_delete(this);
650     }
651
652     return this;
653 }
654
655 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
656 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
657 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12)
658 void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
659 {
660     FIXME("(%p %x %x) stub\n", this, state, reraise);
661 }
662
663 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
664 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
665 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear, 8)
666 void __thiscall basic_ios_char_clear(basic_ios_char *this, unsigned int state)
667 {
668     basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE);
669 }
670
671 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */
672 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */
673 DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8)
674 basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy)
675 {
676     FIXME("(%p %p) stub\n", this, copy);
677     return NULL;
678 }
679
680 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */
681 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */
682 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8)
683 char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill)
684 {
685     FIXME("(%p %c) stub\n", this, fill);
686     return 0;
687 }
688
689 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */
690 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */
691 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4)
692 char __thiscall basic_ios_char_fill_get(basic_ios_char *this)
693 {
694     FIXME("(%p) stub\n", this);
695     return 0;
696 }
697
698 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
699 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
700 DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 4)
701 locale __thiscall basic_ios_char_imbue(basic_ios_char *this)
702 {
703     locale ret = { NULL };
704     FIXME("(%p) stub\n", this);
705     return ret;
706 }
707
708 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
709 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
710 DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12)
711 void __thiscall basic_ios_char_init(basic_ios_char *this, /*basic_streambuf_char*/void *streambuf, MSVCP_bool isstd)
712 {
713     FIXME("(%p %p %x) stub\n", this, streambuf, isstd);
714 }
715
716 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */
717 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */
718 DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12)
719 char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def)
720 {
721     FIXME("(%p %c %c) stub\n", this, ch, def);
722     return def;
723 }
724
725 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */
726 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */
727 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8)
728 /*basic_streambuf_char*/void* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, /*basic_streambuf_char*/void *streambuf)
729 {
730     FIXME("(%p %p) stub\n", this, streambuf);
731     return NULL;
732 }
733
734 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
735 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
736 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4)
737 /*basic_streambuf_char*/void* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this)
738 {
739     FIXME("(%p) stub\n", this);
740     return NULL;
741 }
742
743 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
744 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
745 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12)
746 void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
747 {
748     FIXME("(%p %x %x) stub\n", this, state, reraise);
749 }
750
751 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
752 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
753 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate, 8)
754 void __thiscall basic_ios_char_setstate(basic_ios_char *this, unsigned int state)
755 {
756     basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE);
757 }
758
759 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */
760 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */
761 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8)
762 /*basic_ostream_char*/void* __thiscall basic_ios_char_tie_set(basic_ios_char *this, /*basic_ostream_char*/void *ostream)
763 {
764     FIXME("(%p %p) stub\n", this, ostream);
765     return NULL;
766 }
767
768 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
769 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
770 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4)
771 /*basic_ostream_char*/void* __thiscall basic_ios_char_tie_get(const basic_ios_char *this)
772 {
773     FIXME("(%p)\n", this);
774     return NULL;
775 }
776
777 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */
778 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */
779 DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8)
780 char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
781 {
782     FIXME("(%p %c)\n", this, ch);
783     return 0;
784 }