]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/wxchar.h
undid previous commit, the person who reported it retracted his claim
[wxWidgets.git] / include / wx / wxchar.h
index 3aaa9ba0b635d74fce565f90f14ede20fb4d7b9e..a3764e8a9991ab31f3756e492d0439b78fb50154 100644 (file)
@@ -12,7 +12,7 @@
 #ifndef _WX_WXCHAR_H_
 #define _WX_WXCHAR_H_
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
     #pragma interface "wxchar.h"
 #endif
 
@@ -53,7 +53,7 @@
         #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  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
@@ -561,6 +553,12 @@ inline size_t wxStrlen(const wxChar *psz) { return psz ? wxStrlen_(psz) : 0; }
     #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
 
 // ----------------------------------------------------------------------------
@@ -576,22 +574,21 @@ 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
@@ -635,13 +632,13 @@ WXDLLEXPORT bool wxOKlibc(); // for internal use
 
     #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 );
@@ -650,7 +647,7 @@ WXDLLEXPORT bool wxOKlibc(); // for internal use
 // 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_