-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma interface "wxchar.h"
-#endif
-
-#include "wx/defs.h" /* for wxUSE_UNICODE */
-
-/* ---------------------------------------------------------------------------- */
-/* check whether we have wchar_t and which size it is if we do */
-/* ---------------------------------------------------------------------------- */
-
-#if !defined(wxUSE_WCHAR_T)
- #if defined(__WIN16__)
- /* no wchar_t under Win16 regadrless of compiler used */
- #define wxUSE_WCHAR_T 0
- #elif defined(__UNIX__)
- #if defined(HAVE_WCSTR_H) || defined(HAVE_WCHAR_H) || defined(__FreeBSD__) || defined(__DARWIN__)
- #define wxUSE_WCHAR_T 1
- #else
- #define wxUSE_WCHAR_T 0
- #endif
- #elif defined(__GNUWIN32__) && !defined(__MINGW32__)
- #define wxUSE_WCHAR_T 0
- #elif defined(__WATCOMC__)
- #define wxUSE_WCHAR_T 0
- #elif defined(__VISAGECPP__) && (__IBMCPP__ < 400)
- #define wxUSE_WCHAR_T 0
- #else
- /* add additional compiler checks if this fails */
- #define wxUSE_WCHAR_T 1
- #endif
-#endif /* !defined(wxUSE_WCHAR_T) */
-
-/* Unicode support requires wchar_t */
-#if wxUSE_UNICODE && !wxUSE_WCHAR_T
- #error "wchar_t must be available in Unicode build"
-#endif /* Unicode */
-
-/* ---------------------------------------------------------------------------- */
-/* standard headers we need here */
-/* */
-/* NB: don't include any wxWindows headers here because almost of them include */
-/* this one! */
-/* ---------------------------------------------------------------------------- */
-
-/* Required for wxPrintf() etc */
-#include <stdarg.h>
-
-/* Almost all compiler have strdup(), but not quite all: CodeWarrior under Mac */
-/* and VC++ for Windows CE don't provide it */
-#if !(defined(__MWERKS__) && defined(__WXMAC__)) && !defined(__WXWINCE__)
- /* use #define, not inline wrapper, as it is tested with #ifndef below */
- #define wxStrdupA strdup
-#endif
-
-/* non Unix compilers which do have wchar.h (but not tchar.h which is included */
-/* below and which includes wchar.h anyhow). */
-/* Actually MinGW has tchar.h, but it does not include wchar.h */
-#if defined(__MWERKS__) || defined(__VISAGECPP__) || defined(__MINGW32__) || defined(__WATCOMC__)
- #ifndef HAVE_WCHAR_H
- #define HAVE_WCHAR_H
- #endif
-#endif
-
-#if wxUSE_WCHAR_T
- #ifdef HAVE_WCHAR_H
- /* the current (as of Nov 2002) version of cygwin has a bug in its */
- /* wchar.h -- there is no extern "C" around the declarations in it and */
- /* this results in linking errors later; also, at least on some */
- /* Cygwin versions, wchar.h requires sys/types.h */
- #ifdef __CYGWIN__
- #include <sys/types.h>
- extern "C" {
- #endif /* Cygwin */
- #include <wchar.h>
- #ifdef __CYGWIN__
- }
- #endif /* Cygwin */
- #elif defined(HAVE_WCSTR_H)
- /* old compilers have relevant declarations here */
- #include <wcstr.h>
- #elif defined(__FreeBSD__) || defined(__DARWIN__) || defined(__EMX__)
- /* include stdlib.h for wchar_t */
- #include <stdlib.h>
- #endif /* HAVE_WCHAR_H */
-#endif /* wxUSE_WCHAR_T */
-
-/* ---------------------------------------------------------------------------- */
-/* define wxHAVE_TCHAR_SUPPORT for the compilers which support the TCHAR type */
-/* mapped to either char or wchar_t depending on the ASCII/Unicode mode and have */
-/* the function mapping _tfoo() -> foo() or wfoo() */
-/* ---------------------------------------------------------------------------- */
-
-/* VC++ and BC++ starting with 5.2 have TCHAR support */
-#ifdef __VISUALC__
- #define wxHAVE_TCHAR_SUPPORT
-#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x520)
- #define wxHAVE_TCHAR_SUPPORT
- #include <ctype.h>
-#elif defined(__WATCOMC__)
- #define wxHAVE_TCHAR_SUPPORT
-#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 )
- #define wxHAVE_TCHAR_SUPPORT
- #include <stddef.h>
- #include <string.h>
- #include <ctype.h>
-#elif 0 && defined(__VISAGECPP__) && (__IBMCPP__ >= 400)
- /* VZ: the old VisualAge definitions were completely wrong and had no */
- /* chance at all to work in Unicode build anyhow so let's pretend that */
- /* VisualAge does _not_ support TCHAR for the moment (as indicated by */
- /* "0 &&" above) until someone really has time to delve into Unicode */
- /* issues under OS/2 */
-
- /* VisualAge 4.0+ supports TCHAR */
- #define wxHAVE_TCHAR_SUPPORT
-#endif /* compilers with (good) TCHAR support */
-
-#ifdef __MWERKS__
- #define HAVE_WPRINTF
-#endif
-
-#ifdef wxHAVE_TCHAR_SUPPORT
- /* get TCHAR definition if we've got it */
- #include <tchar.h>
-
- /* we surely do have wchar_t if we have TCHAR */
- #ifndef wxUSE_WCHAR_T
- #define wxUSE_WCHAR_T 1
- #endif /* !defined(wxUSE_WCHAR_T) */
-
- /* and we also do have wcslen() */
- #ifndef HAVE_WCSLEN
- #define HAVE_WCSLEN
- #endif
-#endif /* wxHAVE_TCHAR_SUPPORT */
-
-/* ---------------------------------------------------------------------------- */
-/* define wxChar type */
-/* ---------------------------------------------------------------------------- */
-
-/* TODO: define wxCharInt to be equal to either int or wint_t? */
-
-#if !wxUSE_UNICODE
- typedef char wxChar;
- typedef signed char wxSChar;
- typedef unsigned char wxUChar;
-#else /* Unicode */
- /* VZ: note that VC++ defines _T[SU]CHAR simply as wchar_t and not as */
- /* signed/unsigned version of it which (a) makes sense to me (unlike */
- /* char wchar_t is always unsigned) and (b) was how the previous */
- /* definitions worked so keep it like this */
-
- /* GNU libc has __WCHAR_TYPE__ which requires special treatment, see */
- /* comment below */
- #if !defined(__WCHAR_TYPE__) || \
- (!defined(__GNUC__) || wxCHECK_GCC_VERSION(2, 96))
- /* standard case */
- typedef wchar_t wxChar;
- typedef wchar_t wxSChar;
- typedef wchar_t wxUChar;
- #else /* __WCHAR_TYPE__ and gcc < 2.96 */
- /* VS: wxWindows used to define wxChar as __WCHAR_TYPE__ here. However, */
- /* this doesn't work with new GCC 3.x compilers because wchar_t is */
- /* C++'s builtin type in the new standard. OTOH, old compilers (GCC */
- /* 2.x) won't accept new definition of wx{S,U}Char, therefore we */
- /* have to define wxChar conditionally depending on detected */
- /* compiler & compiler version. */
- /* with old definition of wxChar. */
- typedef __WCHAR_TYPE__ wxChar;
- typedef __WCHAR_TYPE__ wxSChar;
- typedef __WCHAR_TYPE__ wxUChar;
- #endif /* __WCHAR_TYPE__ */
-#endif /* ASCII/Unicode */
-
-/* ---------------------------------------------------------------------------- */
-/* define _T() and related macros */
-/* ---------------------------------------------------------------------------- */
-
-/* BSD systems define _T() to be something different in ctype.h, override it */
-#if defined(__FreeBSD__) || defined(__DARWIN__)
- #include <ctype.h>
- #undef _T
-#endif
-
-/* could already be defined by tchar.h (it's quasi standard) */
-#ifndef _T
- #if !wxUSE_UNICODE
- #define _T(x) x
- #else /* Unicode */
- #define _T(x) L ## x
- #endif /* ASCII/Unicode */
-#endif /* !defined(_T) */
-
-/* although global macros with such names are normally bad, we want to have */
-/* another name for _T() which should be used to avoid confusion between _T() */
-/* and _() in wxWindows sources */
-#define wxT(x) _T(x)
-
-/* Unicode-friendly __FILE__, __DATE__ and __TIME__ analogs */
-#ifndef __TFILE__
- #define __XFILE__(x) wxT(x)
- #define __TFILE__ __XFILE__(__FILE__)
-#endif
-
-#ifndef __TDATE__
- #define __XDATE__(x) wxT(x)
- #define __TDATE__ __XDATE__(__DATE__)
-#endif
-
-#ifndef __TTIME__
- #define __XTIME__(x) wxT(x)
- #define __TTIME__ __XTIME__(__TIME__)
-#endif
-
-/* ---------------------------------------------------------------------------- */
-/* define wxFoo() function for each standard foo() function whose signature */
-/* (exceptionally including the return type) includes any mention of char: */
-/* wxFoo() is going to be a Unicode-friendly version of foo(), i.e. will have */
-/* the same signature but with char replaced by wxChar which allows us to use */
-/* it in Unicode build as well */
-/* ---------------------------------------------------------------------------- */
-
-#ifdef wxHAVE_TCHAR_SUPPORT
- #include <ctype.h>
-
- /* ctype.h functions */
- #define wxIsalnum _istalnum
- #define wxIsalpha _istalpha
- #define wxIsctrl _istctrl
- #define wxIsdigit _istdigit
- #define wxIsgraph _istgraph
- #define wxIslower _istlower
- #define wxIsprint _istprint
- #define wxIspunct _istpunct
- #define wxIsspace _istspace
- #define wxIsupper _istupper
- #define wxIsxdigit _istxdigit
- #define wxTolower _totlower
- #define wxToupper _totupper
-
- /* locale.h functons */
- #define wxSetlocale _tsetlocale
-
- /* string.h functions */
- #define wxStrcat _tcscat
- #define wxStrchr _tcschr
- #define wxStrcmp _tcscmp
- #define wxStrcoll _tcscoll
- #define wxStrcpy _tcscpy
- #define wxStrcspn _tcscspn
- #define wxStrdupW _wcsdup /* notice the 'W'! */
- #define wxStrftime _tcsftime
- #define wxStricmp _tcsicmp
- #define wxStrnicmp _tcsnicmp
- #define wxStrlen_ _tcslen /* used in wxStrlen inline function */
- #define wxStrncat _tcsncat
- #define wxStrncmp _tcsncmp
- #define wxStrncpy _tcsncpy
- #define wxStrpbrk _tcspbrk
- #define wxStrrchr _tcsrchr
- #define wxStrspn _tcsspn
- #define wxStrstr _tcsstr
- #define wxStrtod _tcstod
- #define wxStrtol _tcstol
- #define wxStrtoul _tcstoul
- #define wxStrxfrm _tcsxfrm
-
- /* stdio.h functions */
- #define wxFgetc _fgettc
- #define wxFgetchar _fgettchar
- #define wxFgets _fgetts
- #define wxFopen _tfopen
- #define wxFputc _fputtc
- #define wxFputchar _fputtchar
- #define wxFprintf _ftprintf
- #define wxFputs _fputts
- #define wxFreopen _tfreopen
- #define wxFscanf _ftscanf
- #define wxGetc _gettc
- #define wxGetchar _gettchar
- #define wxGets _getts
- #define wxPerror _tperror
- #define wxPrintf _tprintf
- #define wxPutc _puttc
- #define wxPutchar _puttchar
- #define wxPuts _putts
- #define wxScanf _tscanf
- #define wxSprintf _stprintf
- #define wxSscanf _stscanf
- #define wxTmpnam _ttmpnam
- #define wxUngetc _tungetc
- #define wxVfprintf _vftprintf
- #define wxVprintf _vtprintf
- #define wxVsscanf _vstscanf
- #define wxVsprintf _vstprintf
-
- /* special case: not all TCHAR-aware compilers have those */
- #if defined(__VISUALC__) || \
- (defined(__BORLANDC__) && __BORLANDC__ >= 0x540)
- #define wxVsnprintf_ _vsntprintf
- #define wxSnprintf_ _sntprintf
- #endif
-
- /* special case: these functions are missing under Win9x with Unicows so we */
- /* have to implement them ourselves */
- #if wxUSE_UNICODE_MSLU
- #define wxRemove wxMSLU__tremove
- #define wxRename wxMSLU__trename
- #else
- #ifdef __WXWINCE__
- #define wxRemove DeleteFile
- #else
- #define wxRemove _tremove
- #define wxRename _trename
- #endif
- #endif
-
- /* stdlib.h functions */
- #define wxAtoi _ttoi
- #define wxAtol _ttol
- /* #define wxAtof _tttof -- notice that there is no such thing (why?) */
- #define wxGetenv _tgetenv
- #define wxSystem _tsystem
-
- /* time.h functions */
- #define wxAsctime _tasctime
- #define wxCtime _tctime
-#else /* !TCHAR-aware compilers */
- #if wxUSE_UNICODE
- #include <wctype.h>
-
- /* this is probably glibc-specific */
- #if defined(__WCHAR_TYPE__)
- /* ctype.h functions (wctype.h) */
- #define wxIsalnum iswalnum
- #define wxIsalpha iswalpha
- #define wxIsctrl iswcntrl
- #define wxIsdigit iswdigit
- #define wxIsgraph iswgraph
- #define wxIslower iswlower
- #define wxIsprint iswprint
- #define wxIspunct iswpunct
- #define wxIsspace iswspace
- #define wxIsupper iswupper
- #define wxIsxdigit iswxdigit
-
- #if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)
- /* /usr/include/wctype.h incorrectly declares translations */
- /* tables which provokes tons of compile-time warnings -- try */
- /* to correct this */
- #define wxTolower(wc) towctrans((wc), (wctrans_t)__ctype_tolower)
- #define wxToupper(wc) towctrans((wc), (wctrans_t)__ctype_toupper)
- #else /* !glibc 2.0 */
- #define wxTolower towlower
- #define wxToupper towupper
- #endif /* gcc/!gcc */
-
- /* string.h functions (wchar.h) */
- #define wxStrcat wcscat
- #define wxStrchr wcschr
- #define wxStrcmp wcscmp
- #define wxStrcoll wcscoll
- #define wxStrcpy wcscpy
- #define wxStrcspn wcscspn
- #define wxStrlen_ wxWcslen /* wxStrlen_() is used in wxStrlen() */
- #define wxStrncat wcsncat
- #define wxStrncmp wcsncmp
- #define wxStrncpy wcsncpy
- #define wxStrpbrk wcspbrk
- #define wxStrrchr wcsrchr
- #define wxStrspn wcsspn
- #define wxStrstr wcsstr
- #define wxStrtod wcstod
- #define wxStrtol wcstol
- #define wxStrtoul wcstoul
- #define wxStrxfrm wcsxfrm
-
- #define wxFgetc fgetwc
- #define wxFgetchar fgetwchar
- #define wxFgets fgetws
- #define wxFputc fputwc
- #define wxFputchar fputwchar
- #define wxGetc getwc
- #define wxGetchar getwchar
- #define wxGets getws
- #define wxUngetc ungetwc
-
- #ifdef HAVE_FPUTWC
- #define wxPutc wputc
- #define wxPutchar wputchar
- #define wxPuts putws
- #define wxFputs fputws
- #else
- #define wxNEED_FPUTWC
-
- #include <stdio.h>
-
- int wxFputs(const wxChar *ch, FILE *stream);
- int wxPutc(wxChar ch, FILE *stream);
-
- #define wxPuts(ws) wxFputs(ws, stdout)
- #define wxPutchar(wch) wxPutc(wch, stdout)
- #endif
-
- /* we need %s to %ls conversion for printf and scanf etc */
- #define wxNEED_PRINTF_CONVERSION
-
- /* glibc doesn't have wide char equivalents of the other stuff so */
- /* use our own versions */
- #define wxNEED_WX_STDIO_H
- #define wxNEED_WX_STDLIB_H
- #define wxNEED_WX_TIME_H
- #elif defined(__MWERKS__) && ( defined(macintosh) || defined(__MACH__) )
- /* ctype.h functions (wctype.h) */
- #define wxIsalnum iswalnum
- #define wxIsalpha iswalpha
- #define wxIsctrl iswcntrl
- #define wxIsdigit iswdigit
- #define wxIsgraph iswgraph
- #define wxIslower iswlower
- #define wxIsprint iswprint
- #define wxIspunct iswpunct
- #define wxIsspace iswspace
- #define wxIsupper iswupper
- #define wxIsxdigit iswxdigit
- #define wxTolower towlower
- #define wxToupper towupper
-
- /* string.h functions (wchar.h) */
- #define wxStrcat wcscat
- #define wxStrchr wcschr
- #define wxStrcmp wcscmp
- #define wxStrcoll wcscoll
- #define wxStrcpy wcscpy
- #define wxStrcspn wcscspn
- #define wxStrlen_ wxWcslen /* wxStrlen_() is used in wxStrlen() */
- #define wxStrncat wcsncat
- #define wxStrncmp wcsncmp
- #define wxStrncpy wcsncpy
- #define wxStrpbrk wcspbrk
- #define wxStrrchr wcsrchr
- #define wxStrspn wcsspn
- #define wxStrstr wcsstr
- #define wxStrtod wcstod
- #define wxStrtol wcstol
- #define wxStrtoul wcstoul
- #define wxStrxfrm wcsxfrm
-
- #define wxFgetc fgetwc
- #define wxFgetchar fgetwchar
- #define wxFgets fgetws
- #define wxFputc fputwc
- #define wxFputchar fputwchar
- #define wxGetc getwc
- #define wxGetchar getwchar
- #define wxGets getws
- #define wxUngetc ungetwc
-
- #define wxNEED_PRINTF_CONVERSION
-
- #define wxPutc putwc
- #define wxPutchar putwchar
- #define wxFputs fputws
-
- /* stdio.h functions */
-
- #define wxNEED_WX_STDIO_H
-
- /* stdlib.h functions */
- #define wxAtof watof
- #define wxAtoi watoi
- #define wxAtol watol
- #define wxGetenv(a) ((wxChar*)NULL)
- #define wxSystem(a) ((int)NULL)
-
- /* time.h functions */
- #define wxAsctime wasciitime
- #define wxCtime wctime
- /* #define wxStrftime wcsftime */
-
- /*
- #define wxNEED_FPUTWC
-
- #include <stdio.h>
-
- int wxFputs(const wxChar *ch, FILE *stream);
- int wxPutc(wxChar ch, FILE *stream);
-
- #define wxPuts(ws) wxFputs(ws, stdout)
- #define wxPutchar(wch) wxPutc(wch, stdout)
-
- // we need %s to %ls conversion for printf and scanf etc */
- #define wxNEED_PRINTF_CONVERSION
- /* glibc doesn't have wide char equivalents of the other stuff so */
- /* use our own versions */
- #define wxNEED_WX_STDIO_H
- #define wxNEED_WX_STDLIB_H
- */
- #define wxNEED_WX_TIME_H
- #else /* !metrowerks for apple */
- #error "Please define wide character functions for your environment"
- #endif
- #else /* ASCII */
- #include <ctype.h>
- #include <string.h>