#ifndef _WX_WXCHAR_H_
#define _WX_WXCHAR_H_
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "wxchar.h"
#endif
#else
#define wxUSE_WCHAR_T 0
#endif
- #elif defined(__GNUWIN32__) && !defined(__MINGW32__) // Cygwin (not Mingw32) doesn't have wcslen.h, needed in buffer.h
+ #elif defined(__GNUWIN32__) && !defined(__MINGW32__)
#define wxUSE_WCHAR_T 0
#elif defined(__WATCOMC__)
#define wxUSE_WCHAR_T 0
// Required for wxPrintf() etc
#include <stdarg.h>
-#if defined(__CYGWIN__)
- #ifndef HAVE_WCSLEN
- #define HAVE_WCSLEN
- #endif // !HAVE_WCSLEN
- #include <stddef.h>
-#endif
-
// non Unix compilers which do have wchar.h (but not tchar.h which is included
// below and which includes wchar.h anyhow)
#if defined(__MWERKS__) || defined(__VISAGECPP__)
#if wxUSE_WCHAR_T
#ifdef HAVE_WCHAR_H
- // include wchar.h to get wcslen() declaration used by wx/buffer.h
#include <wchar.h>
#elif defined(HAVE_WCSTR_H)
- // old compilers have wcslen() here
+ // old compilers have relevant declarations here
#include <wcstr.h>
#elif defined(__FreeBSD__) || defined(__DARWIN__) || defined(__EMX__)
- // include stdlib.h for wchar_t, wcslen is provided in wxchar.cpp
+ // include stdlib.h for wchar_t
#include <stdlib.h>
- size_t WXDLLEXPORT wcslen(const wchar_t *s);
#endif // HAVE_WCHAR_H
#endif // wxUSE_WCHAR_T
// ----------------------------------------------------------------------------
#ifdef wxHAVE_TCHAR_SUPPORT
+ #include <ctype.h>
+
// ctype.h functions
#define wxIsalnum _istalnum
#define wxIsalpha _istalpha
#define wxVsscanf _vstscanf
#define wxVsprintf _vstprintf
+ // special case: not all TCHAR-aware compilers have those
+ #if defined(__VISUALC__) || \
+ (defined(__BORLANDC__) && __BORLANDC__ >= 0x540)
+ #define wxVsnprintf_ _vsntprintf
+ #define wxSnprintf_ _sntprintf
+ #endif
+
// special case: these functions are missing under Win9x with Unicows so we
// have to implement them ourselves
#if wxUSE_UNICODE_MSLU
#define wxStrcoll wcscoll
#define wxStrcpy wcscpy
#define wxStrcspn wcscspn
- #define wxStrlen_ wcslen // used in wxStrlen inline function
+ #define wxStrlen_ wxWcslen // wxStrlen_() is used in wxStrlen()
#define wxStrncat wcsncat
#define wxStrncmp wcsncmp
#define wxStrncpy wcsncpy
#define wxStrspn wcsspn
#define wxStrstr wcsstr
#define wxStrtod wcstod
- #define wxStrtok wcstok
#define wxStrtol wcstol
#define wxStrtoul wcstoul
#define wxStrxfrm wcsxfrm
#define wxPuts putws
#define wxFputs fputws
#else
+ #define wxNEED_FPUTWC
+
#include <stdio.h>
int wxFputs(const wxChar *ch, FILE *stream);
#define wxStrtod strtod
#ifdef HAVE_STRTOK_R
#define wxStrtok(str, sep, last) strtok_r(str, sep, last)
- #else
- #define wxStrtok(str, sep, last) strtok(str, sep)
#endif
#define wxStrtol strtol
#define wxStrtoul strtoul
#endif
#endif // !defined(wxStricmp)
-// checks whether the passed in pointer is NULL and if the string is empty
-inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; }
-
-// safe version of strlen() (returns 0 if passed NULL pointer)
-inline size_t wxStrlen(const wxChar *psz) { return psz ? wxStrlen_(psz) : 0; }
-
// define wxWcslen() which should be always available if wxUSE_WCHAR_T == 1 (as
-// it's used in wx/buffer.h)
+// it's used in wx/buffer.h -- and also might be used just below by wxStrlen()
+// when wxStrlen_() is #define'd as wxWcslen so do it before defining wxStrlen)
#if wxUSE_WCHAR_T
#ifdef HAVE_WCSLEN
#define wxWcslen wcslen
#endif
#endif // wxUSE_WCHAR_T
+// checks whether the passed in pointer is NULL and if the string is empty
+inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; }
+
+// safe version of strlen() (returns 0 if passed NULL pointer)
+inline size_t wxStrlen(const wxChar *psz) { return psz ? wxStrlen_(psz) : 0; }
+
WXDLLEXPORT bool wxOKlibc(); // for internal use
// ----------------------------------------------------------------------------
We define function with a trailing underscore here because the real one is a
wrapper around it as explained below
*/
-#ifdef wxHAVE_TCHAR_SUPPORT
- #define wxVsnprintf_ _vsntprintf
- #define wxSnprintf_ _sntprintf
-#else // !TCHAR
+#ifndef wxVsnprintf_
#if wxUSE_UNICODE
#if defined(HAVE_VSWPRINTF)
#define wxVsnprintf_ vswprintf
#endif
#else // ASCII
- #if (defined(HAVE_VSNPRINTF) || defined(__WXMAC__))
+ // all versions of CodeWarrior supported by wxWindows apparently have
+ // vsnprintf()
+ #if defined(HAVE_VSNPRINTF) || defined(__MWERKS__)
// assume we have snprintf() too if we have vsnprintf()
#define wxVsnprintf_ vsnprintf
#define wxSnprintf_ snprintf
#endif
#endif
-#endif // TCHAR/!TCHAR
+#endif // wxVsnprintf_ not defined yet
#ifndef wxVsnprintf_
// no [v]snprintf(), cook our own
#include <stdio.h> // for FILE
- 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 wxScanf( const wxChar *format, ... ) ATTRIBUTE_PRINTF_1;
+ int wxSscanf( const wxChar *str, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2;
+ int wxFscanf( FILE *stream, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2;
int wxVsscanf( const wxChar *str, const wxChar *format, va_list ap );
- int wxPrintf( const wxChar *format, ... ) ATTRIBUTE_PRINTF_2;
- int wxSprintf( wxChar *str, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3;
- int wxFprintf( FILE *stream, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3;
+ int wxPrintf( const wxChar *format, ... ) ATTRIBUTE_PRINTF_1;
+ int wxSprintf( wxChar *str, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2;
+ int wxFprintf( FILE *stream, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2;
int wxVfprintf( FILE *stream, const wxChar *format, va_list ap );
int wxVprintf( const wxChar *format, va_list ap );
int wxVsprintf( wxChar *str, const wxChar *format, va_list ap );
// these 2 can be simply mapped to the versions with underscore at the end
// if we don't have to do the conversion
#ifdef wxNEED_PRINTF_CONVERSION
- int wxSnprintf( wxChar *str, size_t size, const wxChar *format, ... ) ATTRIBUTE_PRINTF_4;
+ int wxSnprintf( wxChar *str, size_t size, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3;
int wxVsnprintf( wxChar *str, size_t size, const wxChar *format, va_list ap );
#else
#define wxSnprintf wxSnprintf_