X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f37736559d77e19cd78e57fac553b5b7b8b8c993..72594e90b2da8c167ba63b89b2c168c57a19cab4:/include/wx/wxchar.h diff --git a/include/wx/wxchar.h b/include/wx/wxchar.h index 91103040c6..55cf190209 100644 --- a/include/wx/wxchar.h +++ b/include/wx/wxchar.h @@ -18,9 +18,14 @@ // only do SBCS or _UNICODE #if defined (_MBCS ) -# error "MBCS is not supported by wxChar" +// It may be OK anyway. +// # error "MBCS is not supported by wxChar" #endif +// ---------------------------------------------------------------------------- +// first deal with Unicode setting +// ---------------------------------------------------------------------------- + // set wxUSE_UNICODE to 1 if UNICODE or _UNICODE is defined #if defined(_UNICODE) || defined(UNICODE) # undef wxUSE_UNICODE @@ -29,7 +34,7 @@ # ifndef wxUSE_UNICODE # define wxUSE_UNICODE 0 # endif -#endif +#endif // Unicode // and vice versa: define UNICODE and _UNICODE if wxUSE_UNICODE is 1... #if wxUSE_UNICODE @@ -39,7 +44,13 @@ # ifndef UNICODE # define UNICODE # endif -#endif +#endif // Unicode + +// Unicode support requires wchar_t +#if wxUSE_UNICODE +# undef wxUSE_WCHAR_T +# define wxUSE_WCHAR_T 1 +#endif // Unicode // ---------------------------------------------------------------------------- // define wxHAVE_TCHAR_FUNCTIONS for the compilers which support the @@ -52,6 +63,11 @@ #define wxHAVE_TCHAR_FUNCTIONS #elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x520) #define wxHAVE_TCHAR_FUNCTIONS + #elif defined(__GNUWIN32__) && wxCHECK_W32API_VERSION( 1, 0 ) + #define wxHAVE_TCHAR_FUNCTIONS + #include + #include + #include #endif #elif defined(__VISAGECPP__) && (__IBMCPP__ >= 400) // VisualAge 4.0+ supports TCHAR @@ -97,9 +113,7 @@ // time.h functions -- none defined in tchar.h #define wxAsctime asctime #define wxCtime ctime - - -#endif +#endif // compilers with (good) TCHAR support #ifdef wxHAVE_TCHAR_FUNCTIONS # define HAVE_WCSLEN 1 @@ -107,6 +121,12 @@ # include # if wxUSE_UNICODE // temporary - preserve binary compatibility +#if defined(__GNUWIN32__) + #define _TCHAR TCHAR + #define _TSCHAR TCHAR + #define _TUCHAR TCHAR +#endif + typedef _TCHAR wxChar; typedef _TSCHAR wxSChar; typedef _TUCHAR wxUChar; @@ -115,9 +135,11 @@ typedef _TUCHAR wxUChar; # define wxSChar signed char # define wxUChar unsigned char # endif - // wchar_t is available -# undef wxUSE_WCHAR_T -# define wxUSE_WCHAR_T 1 + + // wchar_t is available + #ifndef wxUSE_WCHAR_T + #define wxUSE_WCHAR_T 1 + #endif // !defined(wxUSE_WCHAR_T) // ctype.h functions #ifndef wxNO_TCHAR_CTYPE @@ -154,6 +176,7 @@ typedef _TUCHAR wxUChar; # define wxStrcspn _tcscspn # define wxStrftime _tcsftime # define wxStricmp _tcsicmp +# define wxStrnicmp _tcsnicmp # define wxStrlen_ _tcslen // used in wxStrlen inline function # define wxStrncat _tcsncat # define wxStrncmp _tcsncmp @@ -238,14 +261,11 @@ typedef _TUCHAR wxUChar; #else // !TCHAR-aware compilers // check whether we should include wchar.h or equivalent -# if wxUSE_UNICODE -# undef wxUSE_WCHAR_T -# define wxUSE_WCHAR_T 1 // wchar_t *must* be available in Unicode mode -# elif !defined(wxUSE_WCHAR_T) +# if !defined(wxUSE_WCHAR_T) # if defined(__VISUALC__) && (__VISUALC__ < 900) # define wxUSE_WCHAR_T 0 // wchar_t is not available for MSVC++ 1.5 # elif defined(__UNIX__) -# if defined(HAVE_WCSTR_H) || defined(HAVE_WCHAR_H) || defined(__FreeBSD__) +# if defined(HAVE_WCSTR_H) || defined(HAVE_WCHAR_H) || defined(__FreeBSD__) || (defined(__DARWIN__)) # define wxUSE_WCHAR_T 1 # else # define wxUSE_WCHAR_T 0 @@ -262,17 +282,17 @@ typedef _TUCHAR wxUChar; // add additional compiler checks if this fails # define wxUSE_WCHAR_T 1 # endif -# endif//wxUSE_UNICODE +# endif // !defined(wxUSE_WCHAR_T) # if wxUSE_WCHAR_T # ifdef HAVE_WCSTR_H # include # else -# ifndef __FreeBSD__ -# include -# else +# if defined(__FreeBSD__) || defined(__DARWIN__) # include # define wxNEED_WCSLEN +# else +# include # endif # endif # endif @@ -358,7 +378,7 @@ typedef unsigned __WCHAR_TYPE__ wxUChar; # define wxUChar unsigned char # endif -# ifdef __FreeBSD__ +# if defined(__FreeBSD__) || defined(__DARWIN__) # undef _T # endif @@ -503,11 +523,11 @@ typedef unsigned __WCHAR_TYPE__ wxUChar; #endif // checks whether the passed in pointer is NULL and if the string is empty -WXDLLEXPORT inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; } +inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; } #ifndef wxNEED_WX_STRING_H // safe version of strlen() (returns 0 if passed NULL pointer) -WXDLLEXPORT inline size_t wxStrlen(const wxChar *psz) +inline size_t wxStrlen(const wxChar *psz) { return psz ? wxStrlen_(psz) : 0; } #endif @@ -547,6 +567,10 @@ WXDLLEXPORT wxChar * wxStrdup(const wxChar *psz); WXDLLEXPORT int wxStricmp(const wxChar *psz1, const wxChar *psz2); #endif +#ifndef wxStrnicmp +WXDLLEXPORT int wxStrnicmp(const wxChar *psz1, const wxChar *psz2, size_t len); +#endif + #ifndef wxStrtok WXDLLEXPORT wxChar * wxStrtok(wxChar *psz, const wxChar *delim, wxChar **save_ptr); #endif @@ -602,6 +626,8 @@ WXDLLEXPORT size_t wxStrxfrm(wxChar *dest, const wxChar *src, size_t n); # include 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, ...); @@ -627,6 +653,17 @@ WXDLLEXPORT int wxSystem(const wxChar *psz); WXDLLEXPORT size_t wxStrftime(wxChar *s, size_t max, const wxChar *fmt, const struct tm *tm); #endif +// under VC++ 6.0 isspace() returns 1 for 8 bit chars which completely breaks +// the file parsing - this may be true for 5.0 as well, update #ifdef then +#if defined(__VISUALC__) && (__VISUALC__ >= 1200) && !wxUSE_UNICODE + #undef wxIsspace + #define wxIsspace(c) ((((unsigned)c) < 128) && isspace(c)) +#endif // VC++ + +// ---------------------------------------------------------------------------- +// common macros which are always defined +// ---------------------------------------------------------------------------- + // although global macros with such names are really bad, we want to have // another name for _T() which should be used to avoid confusion between _T() // and _() in wxWindows sources