X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f9b170bd18b4421b53296bea80f24dce1db3e359..6c70a9b5948d72877e2b96c3ba381e834dea26b1:/include/wx/wxchar.h diff --git a/include/wx/wxchar.h b/include/wx/wxchar.h index 23a1c0a52a..2693bdbf06 100644 --- a/include/wx/wxchar.h +++ b/include/wx/wxchar.h @@ -52,29 +52,30 @@ # define wxUSE_WCHAR_T 1 #endif // Unicode +// Required for wxPrintf() etc +#include + // ---------------------------------------------------------------------------- // define wxHAVE_TCHAR_FUNCTIONS for the compilers which support the // 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 @@ -119,7 +120,7 @@ // time.h functions -- none defined in tchar.h #define wxAsctime asctime #define wxCtime ctime -#elif defined(__MWERKS__) +#elif defined(__MWERKS__) || defined(__VISAGECPP__) // for wcslen #if wxUSE_WCHAR_T #include @@ -303,6 +304,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 +325,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 +393,24 @@ 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 wxGetc getwc +# define wxGetchar getwchar +# define wxGets getws +# define wxPutc wputc +# define wxPutchar wputchar +# define wxPuts putws +# define wxUngetc ungetwc + +// we need %s to %ls conversion for printf and scanf etc +# define wxNEED_PRINTF_CONVERSION +# define wxHAS_VSNPRINTF +# define wxHAS_SNPRINTF + // glibc doesn't have wc equivalents of the other stuff # define wxNEED_WX_STDIO_H # define wxNEED_WX_STDLIB_H @@ -482,29 +521,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 +553,7 @@ typedef unsigned __WCHAR_TYPE__ wxUChar; # undef wxNEED_WX_STDIO_H # endif + # ifdef wxNEED_WX_STDLIB_H # define wxAtof atof # define wxAtoi atoi @@ -566,6 +607,37 @@ WXDLLEXPORT size_t wxWC2MB(char *buf, const wchar_t *psz, size_t n); WXDLLEXPORT bool wxOKlibc(); // for internal use +// We need conversion from %s to %ls in Unicode mode under Unix +#ifdef wxNEED_PRINTF_CONVERSION +int wxScanf( const wxChar *format, ... ) ATTRIBUTE_PRINTF_2; +int wxSscanf( const wxChar *str, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3; +int wxFscanf( FILE *stream, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3; +int wxVsscanf( const wxChar *str, const wxChar *format, va_list ap ); +int wxPrintf( const wxChar *format, ... ) ATTRIBUTE_PRINTF_2; +int wxSnprintf( wxChar *str, size_t size, const wxChar *format, ... ) ATTRIBUTE_PRINTF_4; +int wxSprintf( wxChar *str, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3; +int wxFprintf( FILE *stream, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3; +int wxVfprint( const wxChar *format, va_list ap ); +int wxVprintf( const wxChar *format, va_list ap ); +int wxVsnprintf( wxChar *str, size_t size, const wxChar *format, va_list ap ); +int wxVsprintf( wxChar *str, const wxChar *format, va_list ap ); +#endif + +#if !defined(wxSnprintf) && !defined(wxHAS_SNPRINTF) +// wxSnprintf() is like snprintf() if it's available and sprintf() (always +// available, but dangerous!) if not. +WXDLLEXPORT int wxSnprintf(wxChar *buf, size_t len, + const wxChar *format, + ...) ATTRIBUTE_PRINTF_3; +#endif + +#if !defined(wxVsnprintf) && !defined(wxHAS_VSNPRINTF) +// and wxVsnprintf() is like vsnprintf() or vsprintf() +WXDLLEXPORT int wxVsnprintf(wxChar *buf, size_t len, + const wxChar *format, + va_list argptr); +#endif + // if libc versions are not available, use replacements defined in wxchar.cpp #ifndef wxStrdup WXDLLEXPORT wxChar * wxStrdup(const wxChar *psz); @@ -606,7 +678,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 +689,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 +712,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