]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/wxchar.h
Applied patch which allows you to detach a stream
[wxWidgets.git] / include / wx / wxchar.h
index ad650d57e8b68229b145a8fa5a461f50b8fcbb60..7c70a8b4d32280ff30974c1fc9c29dcc3b4b6633 100644 (file)
     #if !wxUSE_UNICODE
         #define _T(x) x
     #else /* Unicode */
     #if !wxUSE_UNICODE
         #define _T(x) x
     #else /* Unicode */
-        #define _T(x) L ## x
+        /* use wxCONCAT_HELPER so that x could be expanded if it's a macro */
+        #define _T(x) wxCONCAT_HELPER(L, x)
     #endif /* ASCII/Unicode */
 #endif /* !defined(_T) */
 
     #endif /* ASCII/Unicode */
 #endif /* !defined(_T) */
 
 /* and _() in wxWidgets sources */
 #define wxT(x)       _T(x)
 
 /* and _() in wxWidgets sources */
 #define wxT(x)       _T(x)
 
+/* a helper macro allowing to make another macro Unicode-friendly, see below */
+#define wxAPPLY_T(x) _T(x)
+
 /* Unicode-friendly __FILE__, __DATE__ and __TIME__ analogs */
 #ifndef __TFILE__
 /* Unicode-friendly __FILE__, __DATE__ and __TIME__ analogs */
 #ifndef __TFILE__
-    #define __XFILE__(x) wxT(x)
-    #define __TFILE__ __XFILE__(__FILE__)
+    #define __TFILE__ wxAPPLY_T(__FILE__)
 #endif
 
 #ifndef __TDATE__
 #endif
 
 #ifndef __TDATE__
-    #define __XDATE__(x) wxT(x)
-    #define __TDATE__ __XDATE__(__DATE__)
+    #define __TDATE__ wxAPPLY_T(__DATE__)
 #endif
 
 #ifndef __TTIME__
 #endif
 
 #ifndef __TTIME__
-    #define __XTIME__(x) wxT(x)
-    #define __TTIME__ __XTIME__(__TIME__)
+    #define __TTIME__ wxAPPLY_T(__TIME__)
 #endif
 
 /*
 #endif
 
 /*
     /* special case: not all TCHAR-aware compilers have those */
     #if defined(__VISUALC__) || \
             (defined(__BORLANDC__) && __BORLANDC__ >= 0x540)
     /* special case: not all TCHAR-aware compilers have those */
     #if defined(__VISUALC__) || \
             (defined(__BORLANDC__) && __BORLANDC__ >= 0x540)
-        #define wxVsnprintf_    _vsntprintf
-        #define wxSnprintf_     _sntprintf
+        /*
+           we can only use the system _vsntprintf() if we don't require the
+           Unix98 positional parameters support as it doesn't have it
+         */
+        #if !wxUSE_PRINTF_POS_PARAMS
+            #define wxVsnprintf_    _vsntprintf
+            #define wxSnprintf_     _sntprintf
+        #endif
     #endif
 
     /* special case: these functions are missing under Win9x with Unicows so we */
     #endif
 
     /* special case: these functions are missing under Win9x with Unicows so we */
@@ -866,7 +873,7 @@ WXDLLIMPEXP_BASE 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
  */
    We define function with a trailing underscore here because the real one is a
    wrapper around it as explained below
  */
-#ifndef wxVsnprintf_
+#if !defined( wxVsnprintf_ ) && !wxUSE_PRINTF_POS_PARAMS
     #if wxUSE_UNICODE
         #ifdef wxHAVE_MWERKS_UNICODE
             #define HAVE_WCSRTOMBS 1
     #if wxUSE_UNICODE
         #ifdef wxHAVE_MWERKS_UNICODE
             #define HAVE_WCSRTOMBS 1
@@ -879,18 +886,42 @@ WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */
         #if defined(HAVE__VSNWPRINTF)
             #define wxVsnprintf_    _vsnwprintf
         /* MinGW?MSVCRT has the wrong vswprintf */
         #if defined(HAVE__VSNWPRINTF)
             #define wxVsnprintf_    _vsnwprintf
         /* MinGW?MSVCRT has the wrong vswprintf */
-        #elif defined(HAVE_VSWPRINTF) && !defined(__MINGW32__)
+        /* Mac OS X has a somehow buggy vswprintf */
+        #elif defined(HAVE_VSWPRINTF) && !defined(__MINGW32__) && !defined(__DARWIN__)
             #define wxVsnprintf_    vswprintf
         #endif
     #else /* ASCII */
         /* all versions of CodeWarrior supported by wxWidgets apparently have */
         /* both snprintf() and vsnprintf() */
             #define wxVsnprintf_    vswprintf
         #endif
     #else /* ASCII */
         /* all versions of CodeWarrior supported by wxWidgets apparently have */
         /* both snprintf() and vsnprintf() */
-        #if defined(HAVE_SNPRINTF) || defined(__MWERKS__) || defined(__WATCOMC__)
+        #if defined(HAVE_SNPRINTF) \
+            || defined(__MWERKS__) || defined(__WATCOMC__)
             #ifndef HAVE_BROKEN_SNPRINTF_DECL
                 #define wxSnprintf_     snprintf
             #endif
         #endif
             #ifndef HAVE_BROKEN_SNPRINTF_DECL
                 #define wxSnprintf_     snprintf
             #endif
         #endif
-        #if defined(HAVE_VSNPRINTF) || defined(__MWERKS__) || defined(__WATCOMC__)
+        #if defined(HAVE_VSNPRINTF) \
+            || defined(__MWERKS__) || defined(__WATCOMC__)
+            #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 && !wxUSE_PRINTF_POS_PARAMS */
+
+#if !defined( wxVsnprintf_ ) && wxUSE_PRINTF_POS_PARAMS
+    /*
+        The systems where vsnprintf() supports positionals should define
+        the HAVE_UNIX98_PRINTF symbol.
+
+        On systems which don't (e.g. Windows) we are forced to use
+        our wxVsnprintf() implementation.
+    */
+    #if defined(HAVE_UNIX98_PRINTF)
+        #if wxUSE_UNICODE
+            #define wxVsnprintf_        vswprintf
+        #else /* ASCII */
             #if defined __cplusplus && defined HAVE_BROKEN_VSNPRINTF_DECL
                 #define wxVsnprintf_    wx_fixed_vsnprintf
             #else
             #if defined __cplusplus && defined HAVE_BROKEN_VSNPRINTF_DECL
                 #define wxVsnprintf_    wx_fixed_vsnprintf
             #else
@@ -898,7 +929,7 @@ WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */
             #endif
         #endif
     #endif
             #endif
         #endif
     #endif
-#endif /* wxVsnprintf_ not defined yet */
+#endif  // !defined( wxVsnprintf_ ) && wxUSE_PRINTF_POS_PARAMS
 
 #ifndef wxSnprintf_
     /* no [v]snprintf(), cook our own */
 
 #ifndef wxSnprintf_
     /* no [v]snprintf(), cook our own */