X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/808ef6d2e841248fdc002f26fcd5aaf2b1e2e0db..1cbee0b42c9755a98104e3b1d8fd1133483ea54f:/include/wx/wxchar.h diff --git a/include/wx/wxchar.h b/include/wx/wxchar.h index 67092b9bf4..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 @@ -303,6 +301,8 @@ typedef _TUCHAR wxUChar; # if wxUSE_WCHAR_T # ifdef HAVE_WCHAR_H // include wchar.h to get wcslen() declaration used by wx/buffer.h + // stddef.h is needed for Cygwin +# include # include # elif defined(HAVE_WCSTR_H) // old compilers have wcslen() here @@ -322,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 @@ -372,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 @@ -482,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 @@ -513,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 @@ -606,7 +649,9 @@ WXDLLEXPORT int wxToupper(wxChar ch); #ifdef wxNEED_WX_STRING_H WXDLLEXPORT wxChar * wxStrcat(wxChar *dest, const wxChar *src); -WXDLLEXPORT wxChar * wxStrchr(const wxChar *s, wxChar c); +WXDLLEXPORT const wxChar * wxStrchr(const wxChar *s, wxChar c); +WXDLLEXPORT wxChar * wxStrchr(wxChar *s, wxChar c) + { return (wxChar *)wxStrchr((const wxChar *)s, c); } WXDLLEXPORT int wxStrcmp(const wxChar *s1, const wxChar *s2); WXDLLEXPORT int wxStrcoll(const wxChar *s1, const wxChar *s2); WXDLLEXPORT wxChar * wxStrcpy(wxChar *dest, const wxChar *src); @@ -615,10 +660,16 @@ WXDLLEXPORT size_t wxStrlen(const wxChar *s); WXDLLEXPORT wxChar * wxStrncat(wxChar *dest, const wxChar *src, size_t n); WXDLLEXPORT int wxStrncmp(const wxChar *s1, const wxChar *s2, size_t n); WXDLLEXPORT wxChar * wxStrncpy(wxChar *dest, const wxChar *src, size_t n); -WXDLLEXPORT wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept); -WXDLLEXPORT wxChar * wxStrrchr(const wxChar *s, wxChar c); +WXDLLEXPORT const wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept); +WXDLLEXPORT wxChar * wxStrpbrk(wxChar *s, const wxChar *accept) + { return (wxChar *)wxStrpbrk((const wxChar *)s, accept); } +WXDLLEXPORT const wxChar * wxStrrchr(const wxChar *s, wxChar c); +WXDLLEXPORT wxChar * wxStrrchr(wxChar *s, wxChar c) + { return (wxChar *)wxStrrchr((const wxChar *)s, c); } WXDLLEXPORT size_t wxStrspn(const wxChar *s, const wxChar *accept); -WXDLLEXPORT wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle); +WXDLLEXPORT const wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle); +WXDLLEXPORT wxChar *wxStrstr(wxChar *haystack, const wxChar *needle) + { return (wxChar *)wxStrstr((const wxChar *)haystack, needle); } WXDLLEXPORT double wxStrtod(const wxChar *nptr, wxChar **endptr); WXDLLEXPORT long int wxStrtol(const wxChar *nptr, wxChar **endptr, int base); WXDLLEXPORT unsigned long int wxStrtoul(const wxChar *nptr, wxChar **endptr, int base); @@ -632,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, ...); -WXDLLEXPORT int wxVprintf(const wxChar *fmt, va_list argptr); -WXDLLEXPORT int wxFprintf(FILE *stream, const wxChar *fmt, ...); -WXDLLEXPORT int wxVfprintf(FILE *stream, const wxChar *fmt, va_list argptr); -WXDLLEXPORT int wxSprintf(wxChar *buf, const wxChar *fmt, ...); -WXDLLEXPORT int wxVsprintf(wxChar *buf, const wxChar *fmt, va_list argptr); -WXDLLEXPORT int wxSscanf(const wxChar *buf, const wxChar *fmt, ...); -WXDLLEXPORT int wxVsscanf(const wxChar *buf, const wxChar *fmt, va_list argptr); #endif #ifndef wxAtof