tcc_preprocess: add gcc-style include-depth flags
[tinycc/k1w1.git] / win32 / include / wchar.h
blob4ad2ab9bf89423e36d5b0ec45608fab1f7304db8
1 /*
2 * wchar.h
4 * Defines of all functions for supporting wide characters. Actually it
5 * just includes all those headers, which is not a good thing to do from a
6 * processing time point of view, but it does mean that everything will be
7 * in sync.
9 * This file is part of the Mingw32 package.
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 * $Revision: 1.2 $
22 * $Author: bellard $
23 * $Date: 2005/04/17 13:14:29 $
27 #ifndef _WCHAR_H_
28 #define _WCHAR_H_
30 /* All the headers include this file. */
31 #include <_mingw.h>
33 #include <ctype.h>
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <string.h>
37 #include <time.h>
38 #include <sys/types.h>
40 #define __need_size_t
41 #define __need_wint_t
42 #define __need_wchar_t
43 #ifndef RC_INVOKED
44 #include <stddef.h>
45 #endif /* Not RC_INVOKED */
47 #define WCHAR_MIN 0
48 #define WCHAR_MAX ((wchar_t)-1)
50 #ifndef RC_INVOKED
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
56 #ifndef __STRICT_ANSI__
58 #ifndef _FSIZE_T_DEFINED
59 typedef unsigned long _fsize_t;
60 #define _FSIZE_T_DEFINED
61 #endif
63 #ifndef _WFINDDATA_T_DEFINED
64 struct _wfinddata_t {
65 unsigned attrib;
66 time_t time_create; /* -1 for FAT file systems */
67 time_t time_access; /* -1 for FAT file systems */
68 time_t time_write;
69 _fsize_t size;
70 wchar_t name[FILENAME_MAX]; /* may include spaces. */
72 struct _wfinddatai64_t {
73 unsigned attrib;
74 time_t time_create;
75 time_t time_access;
76 time_t time_write;
77 __int64 size;
78 wchar_t name[FILENAME_MAX];
80 #define _WFINDDATA_T_DEFINED
81 #endif
83 /* Wide character versions. Also defined in io.h. */
84 /* CHECK: I believe these only exist in MSVCRT, and not in CRTDLL. Also
85 applies to other wide character versions? */
86 #if !defined (_WIO_DEFINED)
87 #if defined (__MSVCRT__)
88 int _waccess (const wchar_t*, int);
89 int _wchmod (const wchar_t*, int);
90 int _wcreat (const wchar_t*, int);
91 long _wfindfirst (wchar_t*, struct _wfinddata_t *);
92 int _wfindnext (long, struct _wfinddata_t *);
93 int _wunlink (const wchar_t*);
94 int _wopen (const wchar_t*, int, ...);
95 int _wsopen (const wchar_t*, int, int, ...);
96 wchar_t* _wmktemp (wchar_t*);
97 long _wfindfirsti64 (const wchar_t*, struct _wfinddatai64_t*);
98 int _wfindnexti64 (long, struct _wfinddatai64_t*);
99 #endif /* defined (__MSVCRT__) */
100 #define _WIO_DEFINED
101 #endif /* _WIO_DEFINED */
103 #ifndef _WSTDIO_DEFINED
104 /* also in stdio.h - keep in sync */
105 int fwprintf (FILE*, const wchar_t*, ...);
106 int wprintf (const wchar_t*, ...);
107 int swprintf (wchar_t*, const wchar_t*, ...);
108 int _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
109 int vfwprintf (FILE*, const wchar_t*, va_list);
110 int vwprintf (const wchar_t*, va_list);
111 int vswprintf (wchar_t*, const wchar_t*, va_list);
112 int _vsnwprintf (wchar_t*, size_t, const wchar_t*, va_list);
113 int fwscanf (FILE*, const wchar_t*, ...);
114 int wscanf (const wchar_t*, ...);
115 int swscanf (const wchar_t*, const wchar_t*, ...);
116 wint_t fgetwc (FILE*);
117 wint_t fputwc (wchar_t, FILE*);
118 wint_t ungetwc (wchar_t, FILE*);
120 #ifndef __NO_ISOCEXT /* externs in libmingwex.a */
121 int snwprintf(wchar_t* s, size_t n, const wchar_t* format, ...);
122 extern inline int vsnwprintf (wchar_t* s, size_t n, const wchar_t* format,
123 va_list arg)
124 { return _vsnwprintf ( s, n, format, arg); }
125 #endif
127 #ifdef __MSVCRT__
128 wchar_t* fgetws (wchar_t*, int, FILE*);
129 int fputws (const wchar_t*, FILE*);
130 wint_t getwc (FILE*);
131 wint_t getwchar (void);
132 wchar_t* _getws (wchar_t*);
133 wint_t putwc (wint_t, FILE*);
134 int _putws (const wchar_t*);
135 wint_t putwchar (wint_t);
137 FILE* _wfopen (const wchar_t*, const wchar_t*);
138 FILE* _wfreopen (const wchar_t*, const wchar_t*, FILE*);
139 FILE* _wfsopen (const wchar_t*, const wchar_t*, int);
140 wchar_t* _wtmpnam (wchar_t*);
141 wchar_t* _wtempnam (const wchar_t*, const wchar_t*);
142 int _wrename (const wchar_t*, const wchar_t*);
143 int _wremove (const wchar_t*)
145 FILE* _wpopen (const wchar_t*, const wchar_t*)
146 void _wperror (const wchar_t*);
147 #endif /* __MSVCRT__ */
148 #define _WSTDIO_DEFINED
149 #endif /* _WSTDIO_DEFINED */
151 #ifndef _WDIRECT_DEFINED
152 /* Also in direct.h */
153 #ifdef __MSVCRT__
154 int _wchdir (const wchar_t*);
155 wchar_t* _wgetcwd (wchar_t*, int);
156 wchar_t* _wgetdcwd (int, wchar_t*, int);
157 int _wmkdir (const wchar_t*);
158 int _wrmdir (const wchar_t*);
159 #endif /* __MSVCRT__ */
160 #define _WDIRECT_DEFINED
161 #endif /* _WDIRECT_DEFINED */
163 #ifndef _STAT_DEFINED
165 * The structure manipulated and returned by stat and fstat.
167 * NOTE: If called on a directory the values in the time fields are not only
168 * invalid, they will cause localtime et. al. to return NULL. And calling
169 * asctime with a NULL pointer causes an Invalid Page Fault. So watch it!
171 struct _stat
173 _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
174 _ino_t st_ino; /* Always zero ? */
175 _mode_t st_mode; /* See above constants */
176 short st_nlink; /* Number of links. */
177 short st_uid; /* User: Maybe significant on NT ? */
178 short st_gid; /* Group: Ditto */
179 _dev_t st_rdev; /* Seems useless (not even filled in) */
180 _off_t st_size; /* File size in bytes */
181 time_t st_atime; /* Accessed date (always 00:00 hrs local
182 * on FAT) */
183 time_t st_mtime; /* Modified time */
184 time_t st_ctime; /* Creation time */
187 struct stat
189 _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
190 _ino_t st_ino; /* Always zero ? */
191 _mode_t st_mode; /* See above constants */
192 short st_nlink; /* Number of links. */
193 short st_uid; /* User: Maybe significant on NT ? */
194 short st_gid; /* Group: Ditto */
195 _dev_t st_rdev; /* Seems useless (not even filled in) */
196 _off_t st_size; /* File size in bytes */
197 time_t st_atime; /* Accessed date (always 00:00 hrs local
198 * on FAT) */
199 time_t st_mtime; /* Modified time */
200 time_t st_ctime; /* Creation time */
202 #if defined (__MSVCRT__)
203 struct _stati64 {
204 _dev_t st_dev;
205 _ino_t st_ino;
206 unsigned short st_mode;
207 short st_nlink;
208 short st_uid;
209 short st_gid;
210 _dev_t st_rdev;
211 __int64 st_size;
212 time_t st_atime;
213 time_t st_mtime;
214 time_t st_ctime;
216 #endif /* __MSVCRT__ */
217 #define _STAT_DEFINED
218 #endif /* _STAT_DEFINED */
220 #if !defined ( _WSTAT_DEFINED)
221 /* also declared in sys/stat.h */
222 #if defined __MSVCRT__
223 int _wstat (const wchar_t*, struct _stat*);
224 int _wstati64 (const wchar_t*, struct _stati64*);
225 #endif /* __MSVCRT__ */
226 #define _WSTAT_DEFINED
227 #endif /* ! _WSTAT_DEFIND */
229 #ifndef _WTIME_DEFINED
230 #ifdef __MSVCRT__
231 /* wide function prototypes, also declared in time.h */
232 wchar_t* _wasctime (const struct tm*);
233 wchar_t* _wctime (const time_t*);
234 wchar_t* _wstrdate (wchar_t*);
235 wchar_t* _wstrtime (wchar_t*);
236 #endif /* __MSVCRT__ */
237 size_t wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
238 #define _WTIME_DEFINED
239 #endif /* _WTIME_DEFINED */
241 #ifndef _WLOCALE_DEFINED /* also declared in locale.h */
242 wchar_t* _wsetlocale (int, const wchar_t*);
243 #define _WLOCALE_DEFINED
244 #endif
246 #ifndef _WSTDLIB_DEFINED /* also declared in stdlib.h */
247 long wcstol (const wchar_t*, wchar_t**, int);
248 unsigned long wcstoul (const wchar_t*, wchar_t**, int);
249 double wcstod (const wchar_t*, wchar_t**);
250 #if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
251 extern __inline__ float wcstof( const wchar_t *nptr, wchar_t **endptr)
252 { return (wcstod(nptr, endptr)); }
253 #endif /* __NO_ISOCEXT */
254 #define _WSTDLIB_DEFINED
255 #endif
258 #ifndef _NO_OLDNAMES
260 /* Wide character versions. Also declared in io.h. */
261 /* CHECK: Are these in the oldnames??? NO! */
262 #if (0)
263 int waccess (const wchar_t *, int);
264 int wchmod (const wchar_t *, int);
265 int wcreat (const wchar_t *, int);
266 long wfindfirst (wchar_t *, struct _wfinddata_t *);
267 int wfindnext (long, struct _wfinddata_t *);
268 int wunlink (const wchar_t *);
269 int wrename (const wchar_t *, const wchar_t *);
270 int wremove (const wchar_t *);
271 int wopen (const wchar_t *, int, ...);
272 int wsopen (const wchar_t *, int, int, ...);
273 wchar_t* wmktemp (wchar_t *);
274 #endif
275 #endif /* _NO_OLDNAMES */
277 #endif /* not __STRICT_ANSI__ */
279 /* These are resolved by -lmsvcp60 */
280 /* If you don't have msvcp60.dll in your windows system directory, you can
281 easily obtain it with a search from your favorite search engine. */
282 typedef int mbstate_t;
283 typedef wchar_t _Wint_t;
285 wint_t btowc(int);
286 size_t mbrlen(const char *, size_t, mbstate_t *);
287 size_t mbrtowc(wchar_t *, const char *, size_t, mbstate_t *);
288 size_t mbsrtowcs(wchar_t *, const char **, size_t, mbstate_t *);
290 size_t wcrtomb(char *, wchar_t, mbstate_t *);
291 size_t wcsrtombs(char *, const wchar_t **, size_t, mbstate_t *);
292 int wctob(wint_t);
294 #ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
295 extern inline int fwide(FILE* stream, int mode) {return -1;} /* limited to byte orientation */
296 extern inline int mbsinit(const mbstate_t* ps) {return 1;}
297 wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
298 wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
299 int wmemcmp(const wchar_t* s1, const wchar_t * s2, size_t n);
300 wchar_t* wmemcpy(wchar_t* __restrict__ s1, const wchar_t* __restrict__ s2,
301 size_t n);
302 wchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
303 long long wcstoll(const wchar_t* __restrict__ nptr,
304 wchar_t** __restrict__ endptr, int base);
305 unsigned long long wcstoull(const wchar_t* __restrict__ nptr,
306 wchar_t ** __restrict__ endptr, int base);
308 #endif /* __NO_ISOCEXT */
311 #ifdef __cplusplus
312 } /* end of extern "C" */
313 #endif
315 #endif /* Not RC_INVOKED */
317 #endif /* not _WCHAR_H_ */