X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/17234b26448daee577d6c536cbe23a1301f3d959..1cbee0b42c9755a98104e3b1d8fd1133483ea54f:/include/wx/wxchar.h diff --git a/include/wx/wxchar.h b/include/wx/wxchar.h index 68d1a6a1ba..2a332e3901 100644 --- a/include/wx/wxchar.h +++ b/include/wx/wxchar.h @@ -57,24 +57,22 @@ // wide-character functions // ---------------------------------------------------------------------------- -#ifdef __WIN32__ - // VC++ and BC++ starting with 5.2 have TCHAR support - #ifdef __VISUALC__ - #define wxHAVE_TCHAR_FUNCTIONS - #elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x520) - #define wxHAVE_TCHAR_FUNCTIONS - #elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 ) - #define wxHAVE_TCHAR_FUNCTIONS - #include - #include - #include - #elif defined(__CYGWIN__) - #ifndef HAVE_WCSLEN - #define HAVE_WCSLEN - #endif // !HAVE_WCSLEN - #include - #include - #endif +// VC++ and BC++ starting with 5.2 have TCHAR support +#ifdef __VISUALC__ + #define wxHAVE_TCHAR_FUNCTIONS +#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x520) + #define wxHAVE_TCHAR_FUNCTIONS +#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 ) + #define wxHAVE_TCHAR_FUNCTIONS + #include + #include + #include +#elif defined(__CYGWIN__) + #ifndef HAVE_WCSLEN + #define HAVE_WCSLEN + #endif // !HAVE_WCSLEN + #include + #include #elif defined(__VISAGECPP__) && (__IBMCPP__ >= 400) // VisualAge 4.0+ supports TCHAR #define wxHAVE_TCHAR_FUNCTIONS @@ -324,9 +322,27 @@ typedef _TUCHAR wxUChar; // this is probably glibc-specific # if defined(__WCHAR_TYPE__) -typedef __WCHAR_TYPE__ wxChar; -typedef signed __WCHAR_TYPE__ wxSChar; -typedef unsigned __WCHAR_TYPE__ wxUChar; +// 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. +// The most complicated case is the infamous so-called "gcc-2.96" which does not +// accept new definition of wxSChar but doesn't work with old definition of wxChar. +#if defined(__GNUC__) && (__GNUC__ >= 3) + // modern C++ compiler + typedef wchar_t wxChar; + typedef signed wchar_t wxSChar; + typedef unsigned wchar_t wxUChar; +#else + #if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 96) + typedef wchar_t wxChar; + #else + typedef __WCHAR_TYPE__ wxChar; + #endif + typedef signed __WCHAR_TYPE__ wxSChar; + typedef unsigned __WCHAR_TYPE__ wxUChar; +#endif # define _T(x) L##x @@ -374,6 +390,29 @@ typedef unsigned __WCHAR_TYPE__ wxUChar; # define wxStrtoul wcstoul # define wxStrxfrm wcsxfrm +# define wxFgetc fgetwc +# define wxFgetchar fgetwchar +# define wxFgets fgetws +# define wxFputc fputwc +# define wxFputchar fputwchar +# define wxFprintf fwprintf +# define wxFscanf fwscanf +# define wxGetc getwc +# define wxGetchar getwchar +# define wxGets getws +# define wxPrintf wprintf +# define wxPutc wputc +# define wxPutchar wputchar +# define wxPuts putws +# define wxScanf wscanf +# define wxSnprintf swprintf +# define wxSscanf swscanf +# define wxUngetc ungetwc +# define wxVfprint vfwprintf +# define wxVprintf vwprintf +# define wxVsscanf vswscanf +# define wxVsnprintf vswprintf + // glibc doesn't have wc equivalents of the other stuff # define wxNEED_WX_STDIO_H # define wxNEED_WX_STDLIB_H @@ -484,29 +523,30 @@ typedef unsigned __WCHAR_TYPE__ wxUChar; # endif # ifdef wxNEED_WX_STDIO_H +# define wxFopen fopen +# define wxFreopen freopen +# define wxPerror perror +# define wxRemove remove +# define wxRename rename +# define wxTmpnam tmpnam + # define wxFgetc fgetc # define wxFgetchar fgetchar # define wxFgets fgets -# define wxFopen fopen # define wxFputc fputc # define wxFputchar fputchar # define wxFprintf fprintf -# define wxFreopen freopen # define wxFscanf fscanf # define wxGetc getc # define wxGetchar getchar # define wxGets gets -# define wxPerror perror # define wxPrintf printf # define wxPutc putc # define wxPutchar putchar # define wxPuts puts -# define wxRemove remove -# define wxRename rename # define wxScanf scanf # define wxSprintf sprintf # define wxSscanf sscanf -# define wxTmpnam tmpnam # define wxUngetc ungetc # define wxVfprint vfprintf # define wxVprintf vprintf @@ -515,6 +555,7 @@ typedef unsigned __WCHAR_TYPE__ wxUChar; # undef wxNEED_WX_STDIO_H # endif + # ifdef wxNEED_WX_STDLIB_H # define wxAtof atof # define wxAtoi atoi @@ -642,14 +683,6 @@ WXDLLEXPORT FILE * wxFopen(const wxChar *path, const wxChar *mode); WXDLLEXPORT FILE * wxFreopen(const wxChar *path, const wxChar *mode, FILE *stream); WXDLLEXPORT int wxRemove(const wxChar *path); WXDLLEXPORT int wxRename(const wxChar *oldpath, const wxChar *newpath); -WXDLLEXPORT int wxPrintf(const wxChar *fmt, ...) ATTRIBUTE_PRINTF_1; -WXDLLEXPORT int wxVprintf(const wxChar *fmt, va_list argptr); -WXDLLEXPORT int wxFprintf(FILE *stream, const wxChar *fmt, ...) ATTRIBUTE_PRINTF_2; -WXDLLEXPORT int wxVfprintf(FILE *stream, const wxChar *fmt, va_list argptr); -WXDLLEXPORT int wxSprintf(wxChar *buf, const wxChar *fmt, ...) ATTRIBUTE_PRINTF_2; -WXDLLEXPORT int wxVsprintf(wxChar *buf, const wxChar *fmt, va_list argptr); -WXDLLEXPORT int wxSscanf(const wxChar *buf, const wxChar *fmt, ...) ATTRIBUTE_PRINTF_2; -WXDLLEXPORT int wxVsscanf(const wxChar *buf, const wxChar *fmt, va_list argptr); #endif #ifndef wxAtof