]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/wxchar.h
corrected code to really skip stack frames in the beginning and to number the remaini...
[wxWidgets.git] / include / wx / wxchar.h
index fdfb0da05f1d19ab6bbb4d56f89ed91fdb33c9d6..6d560af9561d133d719262a93d3ca89146ee1341 100644 (file)
@@ -5,7 +5,7 @@
  * 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 */
@@ -755,14 +777,37 @@ WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */
 /* 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()
@@ -790,11 +835,18 @@ WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */
         #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 */
@@ -1095,11 +1147,11 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
     #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
 
@@ -1154,13 +1206,13 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
             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*/