* Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee
* Created: 1998/06/12
* RCS-ID: $Id$
- * Copyright: (c) 1998-2002 wxWidgets dev team
+ * Copyright: (c) 1998-2002 Joel Farley, Ove Kåven, Robert Roebling, Ron Lee
* Licence: wxWindows licence
*/
#ifndef _WX_WXCHAR_H_
#define _WX_WXCHAR_H_
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma interface "wxchar.h"
-#endif
-
#include "wx/defs.h" /* for wxUSE_UNICODE */
+#if defined(HAVE_STRTOK_R) && defined(__DARWIN__) && defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS
+ char *strtok_r(char *, const char *, char **);
+#endif
+
/* check whether we have wchar_t and which size it is if we do */
#if !defined(wxUSE_WCHAR_T)
#if defined(__UNIX__)
/* Cygwin versions, wchar.h requires sys/types.h */
#ifdef __CYGWIN__
#include <sys/types.h>
- extern "C" {
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
#endif /* Cygwin */
- #include <wchar.h>
- #ifdef __CYGWIN__
+
+ #include <wchar.h>
+
+ #if defined(__CYGWIN__) && defined(__cplusplus)
}
- #endif /* Cygwin */
+ #endif /* Cygwin and C++ */
+
#elif defined(HAVE_WCSTR_H)
/* old compilers have relevant declarations here */
#include <wcstr.h>
#define wxHAVE_TCHAR_SUPPORT
#elif defined(__DMC__)
#define wxHAVE_TCHAR_SUPPORT
-#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 ) && !defined(__WXPALMOS__)
+#elif defined(__WXPALMOS__)
+ #include <stddef.h>
+#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 )
#define wxHAVE_TCHAR_SUPPORT
#include <stddef.h>
#include <string.h>
#define wxFgetc _fgettc
#define wxFgetchar _fgettchar
#define wxFgets _fgetts
- #define wxFopen _tfopen
+ #if wxUSE_UNICODE_MSLU
+ #define wxFopen wxMSLU__tfopen
+ #else
+ #define wxFopen _tfopen
+ #endif
#define wxFputc _fputtc
#define wxFputchar _fputtchar
#define wxFprintf _ftprintf
#define wxRename wxMSLU__trename
#else
#ifdef __WXWINCE__
- #define wxRemove DeleteFile
+ /* carefully: wxRemove() must return 0 on success while DeleteFile()
+ returns 0 on error, so don't just define one as the other */
+ int wxRemove(const wxChar *path);
#else
#define wxRemove _tremove
#define wxRename _trename
#define wxAtoi _ttoi
#define wxAtol _ttol
/* #define wxAtof _tttof -- notice that there is no such thing (why?) */
- #define wxGetenv _tgetenv
+ /* there are no env vars at all under CE, so no _tgetenv neither */
+ #ifdef __WXWINCE__
+ /* can't define as inline function as this is a C file... */
+ #define wxGetenv(name) ((wxChar *)NULL)
+ #else
+ #define wxGetenv _tgetenv
+ #endif
#define wxSystem _tsystem
/* time.h functions */
#define wxAsctime _tasctime
#define wxCtime _tctime
+
+ #define wxMbstowcs mbstowcs
+ #define wxWcstombs wcstombs
#else /* !TCHAR-aware compilers */
#if !defined(__MWERKS__) && defined(__DARWIN__) && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 )
/* even though they are defined and "implemented", they are bad and just
stubs so we need our own - we need these even in ANSI builds!! */
- #define mbstowcs wxInternalMbstowcs
- #define wcstombs wxInternalWcstombs
-
- WXDLLIMPEXP_BASE size_t wxInternalMbstowcs (wchar_t *, const char *, size_t);
- WXDLLIMPEXP_BASE size_t wxInternalWcstombs (char *, const wchar_t *, size_t);
+ WXDLLIMPEXP_BASE size_t wxMbstowcs (wchar_t *, const char *, size_t);
+ WXDLLIMPEXP_BASE size_t wxWcstombs (char *, const wchar_t *, size_t);
+ #else
+ #define wxMbstowcs mbstowcs
+ #define wxWcstombs wcstombs
#endif
/* No UNICODE in the c library except wchar_t typedef on mac OSX 10.2 and less - roll our own */
/* printf() family saga */
/*
- For some systems vsnprintf() exists in the system libraries but not in the
+ For some systems [v]snprintf() exists in the system libraries but not in the
headers, so we need to declare it ourselves to be able to use it.
*/
#if defined(HAVE_VSNPRINTF) && !defined(HAVE_VSNPRINTF_DECL)
+#ifdef __cplusplus
extern "C"
+#else
+ extern
+#endif
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
#endif /* !HAVE_VSNPRINTF_DECL */
+#if defined(HAVE_SNPRINTF) && !defined(HAVE_SNPRINTF_DECL)
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+ int snprintf(char *str, size_t size, const char *format, ...);
+#endif /* !HAVE_SNPRINTF_DECL */
+
+/* Wrapper for vsnprintf if it's 3rd parameter is non-const. Note: the
+ * same isn't done for snprintf below, the builtin wxSnprintf_ is used
+ * instead since it's already a simple wrapper */
+#if defined __cplusplus && defined HAVE_BROKEN_VSNPRINTF_DECL
+ inline int wx_fixed_vsnprintf(char *str, size_t size, const char *format, va_list ap)
+ {
+ return vsnprintf(str, size, (char*)format, ap);
+ }
+#endif
+
/*
First of all, we always want to define safe snprintf() function to be used
instead of sprintf(). Some compilers already have it (or rather vsnprintf()
#endif
#else /* ASCII */
/* all versions of CodeWarrior supported by wxWidgets apparently have */
- /* vsnprintf() */
+ /* both snprintf() and vsnprintf() */
+ #if defined(HAVE_SNPRINTF) || defined(__MWERKS__) || defined(__WATCOMC__)
+ #ifndef HAVE_BROKEN_SNPRINTF_DECL
+ #define wxSnprintf_ snprintf
+ #endif
+ #endif
#if defined(HAVE_VSNPRINTF) || defined(__MWERKS__) || defined(__WATCOMC__)
- /* assume we have snprintf() too if we have vsnprintf() */
- #define wxVsnprintf_ vsnprintf
- #define wxSnprintf_ snprintf
+ #if defined __cplusplus && defined HAVE_BROKEN_VSNPRINTF_DECL
+ #define wxVsnprintf_ wx_fixed_vsnprintf
+ #else
+ #define wxVsnprintf_ vsnprintf
+ #endif
#endif
#endif
#endif /* wxVsnprintf_ not defined yet */
#define wxWX2WC wxMB2WC
#endif
-//
-// RN: The following are not normal versions of memcpy et al., rather
-// these are either char or widechar versions depending on
-// if unicode is used or not.
-//
+/*
+ RN: The following are not normal versions of memcpy et al., rather
+ these are either char or widechar versions depending on
+ if unicode is used or not.
+*/
#ifdef __cplusplus
return szRet;
}
- #else //!wxUSE_UNICODE
+ #else /* !wxUSE_UNICODE */
# define wxTmemchr memchr
# define wxTmemcmp memcmp
# define wxTmemcpy memcpy
# define wxTmemmove memmove
# define wxTmemset memset
- #endif
+ #endif /* wxUSE_UNICODE/!wxUSE_UNICODE */
#endif /*__cplusplus*/