]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
added CanConvert()
[wxWidgets.git] / include / wx / defs.h
index ccb51d2755b90954097902d86b823d9385bc4a63..1309723ae5167259dd881f31069b66d09754e200 100644 (file)
@@ -581,13 +581,15 @@ typedef int wxWindowID;
 // size of statically declared array
 #define WXSIZEOF(array)   (sizeof(array)/sizeof(array[0]))
 
+// helper macros to concatenate two tokens together
+#define wxCONCAT_HELPER(text, line) text ## line
+#define wxCONCAT(text, line)        wxCONCAT_HELPER(text, line)
+
 // helper macros to be able to define unique/anonymous objects: this works by
 // appending the current line number to the given identifier to reduce the
 // probability of the conflict (it may still happen if this is used in the
 // headers, hence you should avoid doing it or provide unique prefixes then)
-#define wxCONCAT(text, line)        text ## line
-#define wxCONCAT_LINE2(text, line)  wxCONCAT(text, line)
-#define wxCONCAT_LINE(text)         wxCONCAT_LINE2(text, __LINE__)
+#define wxCONCAT_LINE(text)         wxCONCAT(text, __LINE__)
 #define wxMAKE_UNIQUE_NAME(text)    wxCONCAT_LINE(text)
 
 // symbolic constant used by all Find()-like functions returning positive
@@ -617,6 +619,10 @@ typedef int wxWindowID;
     #define except(x) catch(...)
 #endif // Metrowerks
 
+#if defined(__WATCOMC__)
+    typedef short mode_t;
+#endif
+
 // where should i put this? we need to make sure of this as it breaks
 // the <iostream> code.
 #if !wxUSE_IOSTREAMH && defined(__WXDEBUG__)
@@ -689,70 +695,215 @@ enum
     #endif // Win16/!Win16
 #endif // wxUSE_COMPATIBLE_COORD_TYPES/!wxUSE_COMPATIBLE_COORD_TYPES
 
-// fixed length types
 
-#define wxInt8    char    signed
-#define wxUint8   char  unsigned
+// ----------------------------------------------------------------------------
+// define fixed length types
+// ----------------------------------------------------------------------------
+
+// chars are always one byte (by definition), shorts are always two (in
+// practice)
+
+// 8bit
+#ifndef SIZEOF_CHAR
+    #define SIZEOF_CHAR 1
+#endif
+typedef signed char wxInt8;
+typedef unsigned char wxUint8;
+typedef wxUint8 wxByte;
+
+
+// 16bit
+#ifdef SIZEOF_SHORT
+    #if SIZEOF_SHORT != 2
+        #error "wxWindows assumes sizeof(short) == 2, please fix the code"
+    #endif
+#else
+    #define SIZEOF_SHORT 2
+#endif
+
+typedef signed short wxInt16;
+typedef unsigned short wxUint16;
+
+typedef wxUint16 wxWord;
+
+/*
+  things are getting more interesting with ints, longs and pointers
+
+  there are several different standard data models described by this table:
+
+  +-----------+----------------------------+
+  |type\model | LP64 ILP64 LLP64 ILP32 LP32|
+  +-----------+----------------------------+
+  |char       |  8     8     8     8     8 |
+  |short      | 16    16    16    16    16 |
+  |int        | 32    64    32    32    16 |
+  |long       | 64    64    32    32    32 |
+  |long long  |             64             |
+  |void *     | 64    64    64    32    32 |
+  +-----------+----------------------------+
+
+  Win16 used LP32 (but we don't support it any longer), Win32 obviously used
+  ILP32 and Win64 uses LLP64 (a.k.a. P64)
+
+  Under Unix LP64 is the most widely used (the only I've ever seen, in fact)
+ */
 
+// 32bit
 #ifdef __WINDOWS__
-    #if defined(__WIN16__)
-        #define wxInt16    int    signed
-        #define wxUint16   int  unsigned
-        #define wxInt32   long    signed
-        #define wxUint32  long  unsigned
-    #elif defined(__WIN32__)
-        #define wxInt16  short    signed
-        #define wxUint16 short  unsigned
-        #define wxInt32    int    signed
-        #define wxUint32   int  unsigned
+    #if defined(__WIN64__)
+        // you may remove this #error and try to compile the library, please
+        // report the results to wx-dev@lists.wxwindows.org if you do!
+        #error "wxWindows hasn't been tested under Win64, continue at your own risk"
+
+        // the same definitions as for Win32 _should_ work here as only
+        // sizeof(void *) changes, but it must be tested first
+    #endif // __WIN64__
+
+    // Win64 uses LLP64 model and so ints and longs have the same size as in
+    // Win32
+    #if defined(__WIN32__)
+        typedef int wxInt32;
+        typedef unsigned int wxUint32;
+
+        // conside that if SIZEOF_INT is defined, all the other ones are too
+        #ifndef SIZEOF_INT
+            #define SIZEOF_INT 4
+            #define SIZEOF_LONG 4
+            #define SIZEOF_WCHAR_T 2
+
+            #define wxSIZE_T_IS_UINT
+            #undef wxSIZE_T_IS_ULONG
+
+            #ifdef __WIN64__
+                #define SIZEOF_INT_P 8
+            #else // Win32
+                #define SIZEOF_INT_P 4
+            #endif // Win64/32
+        #endif // !defined(SIZEOF_INT)
     #else
-        // Win64 will have different type sizes
-        #error "Please define a 32 bit type"
+        #error "Unsupported Windows version"
     #endif
 #else // !Windows
-    // SIZEOF_XXX are defined by configure
-    #if defined(SIZEOF_INT) && (SIZEOF_INT == 4)
-        #define wxInt16  short    signed
-        #define wxUint16 short  unsigned
-        #define wxInt32    int    signed
-        #define wxUint32   int  unsigned
-    #elif defined(SIZEOF_INT) && (SIZEOF_INT == 2)
-        #define wxInt16    int    signed
-        #define wxUint16   int  unsigned
-        #define wxInt32   long    signed
-        #define wxUint32  long  unsigned
-    #else
-        // assume sizeof(int) == 4 - what else can we do
+    // SIZEOF_XXX are normally defined by configure
+    #ifdef SIZEOF_INT
+        #if SIZEOF_INT == 8
+            // must be ILP64 data model, there is normally a special 32 bit
+            // type in it but we don't know what it is...
+            #error "No 32bit int type on this platform"
+        #elif SIZEOF_INT == 4
+            typedef int wxInt32;
+            typedef unsigned int wxUint32;
+        #elif SIZEOF_INT == 2
+            // must be LP32
+            #if SIZEOF_LONG != 4
+                #error "No 32bit int type on this platform"
+            #endif
+
+            typedef long wxInt32;
+            typedef unsigned long wxUint32;
+        #elif
+            // wxWindows is not ready for 128bit systems yet...
+            #error "Unknown sizeof(int) value, what are you compiling for?"
+        #endif
+    #else // !defined(SIZEOF_INT)
+        // assume sizeof(int) == 4 -- what else can we do?
         wxCOMPILE_TIME_ASSERT( sizeof(int) == 4, IntMustBeExactly4Bytes);
 
-        #define wxInt16  short    signed
-        #define wxUint16 short  unsigned
-        #define wxInt32    int    signed
-        #define wxUint32   int  unsigned
+        #define SIZEOF_INT 4
+
+        typedef int wxInt32;
+        typedef unsigned int wxUint32;
+
+        #if wxUSE_WCHAR_T && !defined(SIZEOF_WCHAR_T)
+            // also assume that sizeof(wchar_t) == 2 (under Unix the most
+            // common case is 4 but there configure would have defined
+            // SIZEOF_WCHAR_T for us)
+            // the most common case
+            wxCOMPILE_TIME_ASSERT( sizeof(wchar_t) == 2,
+                                    Wchar_tMustBeExactly2Bytes);
+
+            #define SIZEOF_WCHAR_T 2
+        #endif // wxUSE_WCHAR_T
     #endif
 #endif // Win/!Win
 
+typedef wxUint32 wxDword;
+
+
+// 64 bit
+
+// NB: we #define and not typedef wxLongLong_t because we want to be able to
+//     use 'unsigned wxLongLong_t' as well and because we use "#ifdef
+//     wxLongLong_t" in wx/longlong.h
+
+// to avoid compilation problems on 64bit machines with ambiguous method calls
+// we will need to define this
+#undef wxLongLongIsLong
+
+// first check for generic cases which are long on 64bit machine and "long
+// long", then check for specific compilers
 #if defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
-#define wxInt64   long    signed
-#define wxUint64  long  unsigned
-#elif defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8)
-#define wxInt64   long long    signed
-#define wxUint64  long long  unsigned
-#else   // FIXME: what else can we do here aside from implementing wxULongLong
-#define wxInt64   wxLongLong
-#define wxUint64  wxULongLong
+    #define wxLongLong_t long
+    #define wxLongLongSuffix l
+    #define wxLongLongFmtSpec _T("l")
+    #define wxLongLongIsLong
+#elif (defined(__VISUALC__) && defined(__WIN32__)) || defined( __VMS__ ) 
+    #define wxLongLong_t __int64
+    #define wxLongLongSuffix i64
+    #define wxLongLongFmtSpec _T("I64")
+#elif defined(__BORLANDC__) && defined(__WIN32__) && (__BORLANDC__ >= 0x520)
+    #define wxLongLong_t __int64
+    #define wxLongLongSuffix i64
+    #define wxLongLongFmtSpec _T("Ld")
+#elif (defined(__WATCOMC__) && defined(__WIN32__))
+      #define wxLongLong_t __int64
+      #define wxLongLongSuffix i64
+      #define wxLongLongFmtSpec _T("Ld")
+#elif defined(__DIGITALMARS__) 
+      #define wxLongLong_t __int64
+      #define wxLongLongSuffix LL
+      #define wxLongLongFmtSpec _T("ll")
+#elif (defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG >= 8)  || \
+        defined(__MINGW32__) || \
+        defined(__GNUC__) || \
+        defined(__CYGWIN__) || \
+        defined(__WXMICROWIN__) || \
+        (defined(__DJGPP__) && __DJGPP__ >= 2)
+    #define wxLongLong_t long long
+    #define wxLongLongSuffix ll
+    #define wxLongLongFmtSpec _T("ll")
+#elif defined(__MWERKS__)
+    #if __option(longlong)
+        #define wxLongLong_t long long
+        #define wxLongLongSuffix ll
+        #define wxLongLongFmtSpec _T("ll")
+    #else
+        #error "The 64 bit integer support in CodeWarrior has been disabled."
+        #error "See the documentation on the 'longlong' pragma."
+    #endif
+#elif defined(__VISAGECPP__) && __IBMCPP__ >= 400
+    #define wxLongLong_t long long
+#endif
+
+
+#ifdef wxLongLong_t
+    // these macros allow to definea 64 bit constants in a portable way
+    #define wxLL(x) wxCONCAT(x, wxLongLongSuffix)
+    #define wxULL(x) wxCONCAT(x, wxCONCAT(u, wxLongLongSuffix))
+
+    typedef wxLongLong_t wxInt64;
+    typedef unsigned wxLongLong_t wxUint64;
 #endif
 
-#define  wxByte   wxUint8
-#define  wxWord   wxUint16
 
 // base floating point types
-// wxFloat32 : 32 bit IEEE float ( 1 sign , 8 exponent bits , 23 fraction bits
-// wxFloat64 : 64 bit IEEE float ( 1 sign , 11 exponent bits , 52 fraction bits
-// wxDouble : native fastest representation that has at least wxFloat64
-//            precision, so use the IEEE types for storage , and this for calculations
+// wxFloat32: 32 bit IEEE float ( 1 sign, 8 exponent bits, 23 fraction bits
+// wxFloat64: 64 bit IEEE float ( 1 sign, 11 exponent bits, 52 fraction bits
+// wxDouble: native fastest representation that has at least wxFloat64
+//           precision, so use the IEEE types for storage, and this for
+//           calculations
 
-typedef float wxFloat32 ;
+typedef float wxFloat32;
 #if (defined( __WXMAC__ ) || defined(__WXCOCOA__))  && defined (__MWERKS__)
     typedef short double wxFloat64;
 #else
@@ -762,7 +913,7 @@ typedef float wxFloat32 ;
 #if defined( __WXMAC__ )  && !defined( __POWERPC__ )
     typedef long double wxDouble;
 #else
-    typedef double wxDouble ;
+    typedef double wxDouble;
 #endif
 
 // ----------------------------------------------------------------------------
@@ -787,13 +938,13 @@ typedef float wxFloat32 ;
 // assembler versions for these
 #ifdef __POWERPC__
     inline wxUint16 wxUINT16_SWAP_ALWAYS( wxUint16 i )
-        {return (__lhbrx( &i , 0 ) ) ;}
+        {return (__lhbrx( &i , 0 ) );}
     inline wxInt16 wxINT16_SWAP_ALWAYS( wxInt16 i )
-        {return (__lhbrx( &i , 0 ) ) ;}
+        {return (__lhbrx( &i , 0 ) );}
     inline wxUint32 wxUINT32_SWAP_ALWAYS( wxUint32 i )
-        {return (__lwbrx( &i , 0 ) ) ;}
+        {return (__lwbrx( &i , 0 ) );}
     inline wxInt32 wxINT32_SWAP_ALWAYS( wxInt32 i )
-        {return (__lwbrx( &i , 0 ) ) ;}
+        {return (__lwbrx( &i , 0 ) );}
 #else
     #pragma parameter __D0 wxUINT16_SWAP_ALWAYS(__D0)
     pascal wxUint16 wxUINT16_SWAP_ALWAYS(wxUint16 value)
@@ -839,98 +990,74 @@ typedef float wxFloat32 ;
 #endif
 // machine specific byte swapping
 
-#if defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
-#define wxUINT64_SWAP_ALWAYS(val) \
-   ((wxUint64) ( \
-    (((wxUint64) (val) & (wxUint64) 0x00000000000000ffUL) << 56) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000000000ff00UL) << 40) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000UL) << 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00000000ff000000UL) <<  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000ff00000000UL) >>  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000UL) >> 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00ff000000000000UL) >> 40) | \
-    (((wxUint64) (val) & (wxUint64) 0xff00000000000000UL) >> 56)))
-
-#define wxINT64_SWAP_ALWAYS(val) \
-   ((wxInt64) ( \
-    (((wxUint64) (val) & (wxUint64) 0x00000000000000ffUL) << 56) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000000000ff00UL) << 40) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000UL) << 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00000000ff000000UL) <<  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000ff00000000UL) >>  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000UL) >> 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00ff000000000000UL) >> 40) | \
-    (((wxUint64) (val) & (wxUint64) 0xff00000000000000UL) >> 56)))
-
-#elif defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8)
-#define wxUINT64_SWAP_ALWAYS(val) \
-   ((wxUint64) ( \
-    (((wxUint64) (val) & (wxUint64) 0x00000000000000ffULL) << 56) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000000000ff00ULL) << 40) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000ULL) << 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00000000ff000000ULL) <<  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000ff00000000ULL) >>  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000ULL) >> 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00ff000000000000ULL) >> 40) | \
-    (((wxUint64) (val) & (wxUint64) 0xff00000000000000ULL) >> 56)))
-
-#define wxINT64_SWAP_ALWAYS(val) \
-   ((wxInt64) ( \
-    (((wxUint64) (val) & (wxUint64) 0x00000000000000ffULL) << 56) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000000000ff00ULL) << 40) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000ULL) << 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00000000ff000000ULL) <<  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x000000ff00000000ULL) >>  8) | \
-    (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000ULL) >> 24) | \
-    (((wxUint64) (val) & (wxUint64) 0x00ff000000000000ULL) >> 40) | \
-    (((wxUint64) (val) & (wxUint64) 0xff00000000000000ULL) >> 56)))
-
-#else
-#define wxUINT64_SWAP_ALWAYS(val) \
-   ((wxUint64) ( \
-    ((wxULongLong(val) & wxULongLong(0L, 0x000000ffU)) << 56) | \
-    ((wxULongLong(val) & wxULongLong(0L, 0x0000ff00U)) << 40) | \
-    ((wxULongLong(val) & wxULongLong(0L, 0x00ff0000U)) << 24) | \
-    ((wxULongLong(val) & wxULongLong(0L, 0xff000000U)) <<  8) | \
-    ((wxULongLong(val) & wxULongLong(0x000000ffL, 0U)) >>  8) | \
-    ((wxULongLong(val) & wxULongLong(0x0000ff00L, 0U)) >> 24) | \
-    ((wxULongLong(val) & wxULongLong(0x00ff0000L, 0U)) >> 40) | \
-    ((wxULongLong(val) & wxULongLong(0xff000000L, 0U)) >> 56)))
-
-#define wxINT64_SWAP_ALWAYS(val) \
-   ((wxInt64) ( \
-    ((wxLongLong(val) & wxLongLong(0L, 0x000000ffU)) << 56) | \
-    ((wxLongLong(val) & wxLongLong(0L, 0x0000ff00U)) << 40) | \
-    ((wxLongLong(val) & wxLongLong(0L, 0x00ff0000U)) << 24) | \
-    ((wxLongLong(val) & wxLongLong(0L, 0xff000000U)) <<  8) | \
-    ((wxLongLong(val) & wxLongLong(0x000000ffL, 0U)) >>  8) | \
-    ((wxLongLong(val) & wxLongLong(0x0000ff00L, 0U)) >> 24) | \
-    ((wxLongLong(val) & wxLongLong(0x00ff0000L, 0U)) >> 40) | \
-    ((wxLongLong(val) & wxLongLong(0xff000000L, 0U)) >> 56)))
-#endif
+#ifdef wxLongLong_t
+    #define wxUINT64_SWAP_ALWAYS(val) \
+       ((wxUint64) ( \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x00000000000000ff)) << 56) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x000000000000ff00)) << 40) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x0000000000ff0000)) << 24) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x00000000ff000000)) <<  8) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x000000ff00000000)) >>  8) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x0000ff0000000000)) >> 24) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x00ff000000000000)) >> 40) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0xff00000000000000)) >> 56)))
+
+    #define wxINT64_SWAP_ALWAYS(val) \
+       ((wxInt64) ( \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x00000000000000ff)) << 56) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x000000000000ff00)) << 40) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x0000000000ff0000)) << 24) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x00000000ff000000)) <<  8) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x000000ff00000000)) >>  8) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x0000ff0000000000)) >> 24) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0x00ff000000000000)) >> 40) | \
+        (((wxUint64) (val) & (wxUint64) wxULL(0xff00000000000000)) >> 56)))
+#else // !wxLongLong_t
+    #define wxUINT64_SWAP_ALWAYS(val) \
+       ((wxUint64) ( \
+        ((wxULongLong(val) & wxULongLong(0L, 0x000000ffU)) << 56) | \
+        ((wxULongLong(val) & wxULongLong(0L, 0x0000ff00U)) << 40) | \
+        ((wxULongLong(val) & wxULongLong(0L, 0x00ff0000U)) << 24) | \
+        ((wxULongLong(val) & wxULongLong(0L, 0xff000000U)) <<  8) | \
+        ((wxULongLong(val) & wxULongLong(0x000000ffL, 0U)) >>  8) | \
+        ((wxULongLong(val) & wxULongLong(0x0000ff00L, 0U)) >> 24) | \
+        ((wxULongLong(val) & wxULongLong(0x00ff0000L, 0U)) >> 40) | \
+        ((wxULongLong(val) & wxULongLong(0xff000000L, 0U)) >> 56)))
+
+    #define wxINT64_SWAP_ALWAYS(val) \
+       ((wxInt64) ( \
+        ((wxLongLong(val) & wxLongLong(0L, 0x000000ffU)) << 56) | \
+        ((wxLongLong(val) & wxLongLong(0L, 0x0000ff00U)) << 40) | \
+        ((wxLongLong(val) & wxLongLong(0L, 0x00ff0000U)) << 24) | \
+        ((wxLongLong(val) & wxLongLong(0L, 0xff000000U)) <<  8) | \
+        ((wxLongLong(val) & wxLongLong(0x000000ffL, 0U)) >>  8) | \
+        ((wxLongLong(val) & wxLongLong(0x0000ff00L, 0U)) >> 24) | \
+        ((wxLongLong(val) & wxLongLong(0x00ff0000L, 0U)) >> 40) | \
+        ((wxLongLong(val) & wxLongLong(0xff000000L, 0U)) >> 56)))
+#endif // wxLongLong_t/!wxLongLong_t
 
 #ifdef WORDS_BIGENDIAN
-  #define wxUINT16_SWAP_ON_BE(val)  wxUINT16_SWAP_ALWAYS(val)
-  #define wxINT16_SWAP_ON_BE(val)   wxINT16_SWAP_ALWAYS(val)
-  #define wxUINT16_SWAP_ON_LE(val)  (val)
-  #define wxINT16_SWAP_ON_LE(val)   (val)
-  #define wxUINT32_SWAP_ON_BE(val)  wxUINT32_SWAP_ALWAYS(val)
-  #define wxINT32_SWAP_ON_BE(val)   wxINT32_SWAP_ALWAYS(val)
-  #define wxUINT32_SWAP_ON_LE(val)  (val)
-  #define wxINT32_SWAP_ON_LE(val)   (val)
-  #define wxUINT64_SWAP_ON_BE(val)  wxUINT64_SWAP_ALWAYS(val)
-  #define wxUINT64_SWAP_ON_LE(val)  (val)
+    #define wxUINT16_SWAP_ON_BE(val)  wxUINT16_SWAP_ALWAYS(val)
+    #define wxINT16_SWAP_ON_BE(val)   wxINT16_SWAP_ALWAYS(val)
+    #define wxUINT16_SWAP_ON_LE(val)  (val)
+    #define wxINT16_SWAP_ON_LE(val)   (val)
+    #define wxUINT32_SWAP_ON_BE(val)  wxUINT32_SWAP_ALWAYS(val)
+    #define wxINT32_SWAP_ON_BE(val)   wxINT32_SWAP_ALWAYS(val)
+    #define wxUINT32_SWAP_ON_LE(val)  (val)
+    #define wxINT32_SWAP_ON_LE(val)   (val)
+    #define wxUINT64_SWAP_ON_BE(val)  wxUINT64_SWAP_ALWAYS(val)
+    #define wxUINT64_SWAP_ON_LE(val)  (val)
 #else
-  #define wxUINT16_SWAP_ON_LE(val)  wxUINT16_SWAP_ALWAYS(val)
-  #define wxINT16_SWAP_ON_LE(val)   wxINT16_SWAP_ALWAYS(val)
-  #define wxUINT16_SWAP_ON_BE(val)  (val)
-  #define wxINT16_SWAP_ON_BE(val)   (val)
-  #define wxUINT32_SWAP_ON_LE(val)  wxUINT32_SWAP_ALWAYS(val)
-  #define wxINT32_SWAP_ON_LE(val)   wxINT32_SWAP_ALWAYS(val)
-  #define wxUINT32_SWAP_ON_BE(val)  (val)
-  #define wxINT32_SWAP_ON_BE(val)   (val)
-  #define wxUINT64_SWAP_ON_LE(val)  wxUINT64_SWAP_ALWAYS(val)
-  #define wxUINT64_SWAP_ON_BE(val)  (val)
+    #define wxUINT16_SWAP_ON_LE(val)  wxUINT16_SWAP_ALWAYS(val)
+    #define wxINT16_SWAP_ON_LE(val)   wxINT16_SWAP_ALWAYS(val)
+    #define wxUINT16_SWAP_ON_BE(val)  (val)
+    #define wxINT16_SWAP_ON_BE(val)   (val)
+    #define wxUINT32_SWAP_ON_LE(val)  wxUINT32_SWAP_ALWAYS(val)
+    #define wxINT32_SWAP_ON_LE(val)   wxINT32_SWAP_ALWAYS(val)
+    #define wxUINT32_SWAP_ON_BE(val)  (val)
+    #define wxINT32_SWAP_ON_BE(val)   (val)
+    #define wxUINT64_SWAP_ON_LE(val)  wxUINT64_SWAP_ALWAYS(val)
+    #define wxUINT64_SWAP_ON_BE(val)  (val)
 #endif
 
 // Macros to convert from unsigned long to void pointer.
@@ -1096,9 +1223,15 @@ enum wxBorder
 // mouse is clicked outside of it or if it loses focus in any other way
 #define wxPOPUP_WINDOW          0x00020000
 
+// force a full repaint when the window is resized (instead of repainting just
+// the invalidated area)
+#define wxFULL_REPAINT_ON_RESIZE 0x00010000
+
+// obsolete: now this is the default behaviour
+//
 // don't invalidate the whole window (resulting in a PAINT event) when the
 // window is resized (currently, makes sense for wxMSW only)
-#define wxNO_FULL_REPAINT_ON_RESIZE 0x00010000
+#define wxNO_FULL_REPAINT_ON_RESIZE 0
 
 /*
  * Extra window style flags (use wxWS_EX prefix to make it clear that they
@@ -1266,15 +1399,6 @@ enum wxBorder
 #define wxRB_GROUP          0x0004
 #define wxRB_SINGLE         0x0008
 
-/*
- * wxGauge flags
- */
-#define wxGA_HORIZONTAL      wxHORIZONTAL
-#define wxGA_VERTICAL        wxVERTICAL
-#define wxGA_PROGRESSBAR     0x0010
-// Windows only
-#define wxGA_SMOOTH          0x0020
-
 /*
  * wxSlider flags
  */
@@ -1446,6 +1570,7 @@ enum
     wxID_HELP_PROCEDURES,
     wxID_HELP_CONTEXT,
     wxID_CLOSE_ALL,
+    wxID_PREFERENCES ,
 
     wxID_CUT = 5030,
     wxID_COPY,
@@ -1813,7 +1938,8 @@ enum wxKeyCode
 
     WXK_WINDOWS_LEFT,
     WXK_WINDOWS_RIGHT,
-    WXK_WINDOWS_MENU
+    WXK_WINDOWS_MENU ,
+    WXK_COMMAND
 };
 
 #if wxUSE_HOTKEY
@@ -1995,26 +2121,26 @@ enum wxUpdateUI
 
 typedef unsigned char WXCOLORREF[6];
 typedef void*       WXHBITMAP;
-typedef void*       WXHMETAFILE ;
-typedef void*       WXHICON ;
-typedef void*       WXHCURSOR ;
-typedef void*       WXHRGN ;
-typedef void*       WXRECTPTR ;
-typedef void*       WXPOINTPTR ;
-typedef void*       WXHWND ;
-typedef void*       WXEVENTREF ;
-typedef void*          WXEVENTHANDLERREF ;
-typedef void*       WXEVENTHANDLERCALLREF ;
-typedef void*       WXAPPLEEVENTREF ;
-typedef void*       WXHDC ;
-typedef void*       WXHMENU ;
+typedef void*       WXHMETAFILE;
+typedef void*       WXHICON;
+typedef void*       WXHCURSOR;
+typedef void*       WXHRGN;
+typedef void*       WXRECTPTR;
+typedef void*       WXPOINTPTR;
+typedef void*       WXHWND;
+typedef void*       WXEVENTREF;
+typedef void*       WXEVENTHANDLERREF;
+typedef void*       WXEVENTHANDLERCALLREF;
+typedef void*       WXAPPLEEVENTREF;
+typedef void*       WXHDC;
+typedef void*       WXHMENU;
 typedef unsigned int    WXUINT;
 typedef unsigned long   WXDWORD;
 typedef unsigned short  WXWORD;
 
-typedef void*       WXWidget ;
-typedef void*       WXWindow ;
-typedef void*       WXDisplay ;
+typedef void*       WXWidget;
+typedef void*       WXWindow;
+typedef void*       WXDisplay;
 /*
 typedef WindowPtr       WXHWND;
 typedef Handle          WXHANDLE;
@@ -2050,7 +2176,7 @@ typedef ControlHandle   WXWidget;
 #ifdef __WXCOCOA__
 
 // NOTE: This ought to work with other compilers too, but I'm being cautious
-#if defined(__GNUC__) && defined(__APPLE__)
+#if (defined(__GNUC__) && defined(__APPLE__)) || defined(__MWERKS__)
 /* It's desirable to have type safety for Objective-C(++) code as it does
 at least catch typos of method names among other things.  However, it
 is not possible to declare an Objective-C class from plain old C or C++
@@ -2070,7 +2196,7 @@ typedef klass *WX_##klass
 typedef struct klass *WX_##klass
 #endif // defined(__OBJC__)
 
-#else // not GNU
+#else // not Apple's GNU or CodeWarrior
 #warning "Objective-C types will not be checked by the compiler."
 // NOTE: typedef struct objc_object *id;
 // IOW, we're declaring these using the id type without using that name,
@@ -2080,7 +2206,7 @@ typedef struct klass *WX_##klass
 #define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
 typedef struct objc_object *WX_##klass
 
-#endif // defined(__GNUC__) && defined(__APPLE__)
+#endif // (defined(__GNUC__) && defined(__APPLE__)) || defined(__MWERKS__)
 
 DECLARE_WXCOCOA_OBJC_CLASS(NSApplication);
 DECLARE_WXCOCOA_OBJC_CLASS(NSBitmapImageRep);
@@ -2093,8 +2219,11 @@ DECLARE_WXCOCOA_OBJC_CLASS(NSImage);
 DECLARE_WXCOCOA_OBJC_CLASS(NSLayoutManager);
 DECLARE_WXCOCOA_OBJC_CLASS(NSMenu);
 DECLARE_WXCOCOA_OBJC_CLASS(NSMenuItem);
+DECLARE_WXCOCOA_OBJC_CLASS(NSMutableArray);
+DECLARE_WXCOCOA_OBJC_CLASS(NSNotification);
 DECLARE_WXCOCOA_OBJC_CLASS(NSPanel);
 DECLARE_WXCOCOA_OBJC_CLASS(NSScrollView);
+DECLARE_WXCOCOA_OBJC_CLASS(NSTableColumn);
 DECLARE_WXCOCOA_OBJC_CLASS(NSTableView);
 DECLARE_WXCOCOA_OBJC_CLASS(NSTextContainer);
 DECLARE_WXCOCOA_OBJC_CLASS(NSTextField);
@@ -2169,7 +2298,7 @@ typedef int             (__stdcall *WXFARPROC)();
 #endif // __WXMSW__
 
 
-#if defined(__WXPM__)
+#if defined(__WXPM__) || defined(__EMX__)
 #ifdef __EMX__
 /* Need a well-known type for WXFARPROC
    below. MPARAM is typedef'ed too late. */
@@ -2202,7 +2331,9 @@ typedef unsigned long   HIMAGELIST;
 typedef unsigned long   HGLOBAL;
 typedef unsigned long   DWORD;
 typedef unsigned short  WORD;
+#endif // WXPM || EMX
 
+#if defined (__WXPM__)
 // WIN32 graphics types for OS/2 GPI
 
 // RGB under OS2 is more like a PALETTEENTRY struct under Windows so we need a real RGB def