#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 <stddef.h>
+ #include <string.h>
+ #include <ctype.h>
#endif
#elif defined(__VISAGECPP__) && (__IBMCPP__ >= 400)
// VisualAge 4.0+ supports TCHAR
# include <tchar.h>
# 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;
# 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
# 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
# ifdef HAVE_WCSTR_H
# include <wcstr.h>
# else
-# ifndef __FreeBSD__
-# include <wchar.h>
-# else
+# if defined(__FreeBSD__) || defined(__DARWIN__)
# include <stdlib.h>
# define wxNEED_WCSLEN
+# else
+# include <wchar.h>
# endif
# endif
# endif
# define wxUChar unsigned char
# endif
-# ifdef __FreeBSD__
+# if defined(__FreeBSD__) || defined(__DARWIN__)
# undef _T
# endif
#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
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
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
// ----------------------------------------------------------------------------