]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
second part of Markus' BC++ fix
[wxWidgets.git] / include / wx / defs.h
index 5e225385ecf2e1f9b719d5cc04250477bee8b6ca..352820024a928202057088f1af673df4e6b63587 100644 (file)
 // compiler and OS identification
 // ----------------------------------------------------------------------------
 
-// OS
-#if defined(__unix) || defined(__unix__) || defined(____SVR4____) || \
-    defined(__LINUX__) || defined(__sgi ) || \
+// OS: first test for generic Unix defines, then for particular flavours and
+//     finally for Unix-like systems
+#if defined(__UNIX__) || defined(__unix) || defined(__unix__) || \
+    defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \
     defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \
-    defined(__EMX__)
+    defined(__EMX__) || defined(__VMS) || defined(__BEOS__)
 
     #define __UNIX_LIKE__
 
         #endif
     #endif // Sun
 
-    #if defined(__hpux) && !defined(__HPUX__)
-        #define __HPUX__
-    #endif // HP-UX
+    #ifdef __EMX__
+        #define OS2EMX_PLAIN_CHAR
+    #endif
 
-#elif defined(applec) || defined(THINK_C) || ( defined( __MWERKS__ ) && !defined(__INTEL__) )
+    #if defined(__APPLE__)
+       // MacOS X
+        #ifndef __WXMAC__
+            #define __WXMAC__
+        #endif
+        #ifndef __WXMAC_X__
+            #define __WXMAC_X__
+        #endif
+    
+        #define PM_USE_SESSION_APIS 0
+        #include <Carbon/Carbon.h>
+    #endif
+#elif defined(applec) || defined(THINK_C) || (defined(__MWERKS__) && !defined(__INTEL__))
         // MacOS
+#elif defined(__WXMAC__) && defined(__APPLE__)
+       // MacOS X
+    #define __UNIX_LIKE__
+
+    #ifndef __WXMAC__
+        #define __WXMAC__
+    #endif
+    #ifndef __WXMAC_X__
+        #define __WXMAC_X__
+    #endif
+    
+    #define PM_USE_SESSION_APIS 0
+    #include <Carbon/Carbon.h>
 #elif defined(__OS2__)
     #if defined(__IBMCPP__)
         #define __VISAGEAVER__ __IBMCPP__
     #endif
 
     // Place other OS/2 compiler environment defines here
-    #define LINKAGEMODE _Optlink
+    #if defined(__VISAGECPP__)
+        // VisualAge is the only thing that understands _Optlink
+        #define LINKAGEMODE _Optlink
+    #endif
 #else   // Windows
     #ifndef __WINDOWS__
         #define __WINDOWS__
 
 // suppress some Visual C++ warnings
 #ifdef __VISUALC__
+#   pragma warning(disable:4201)    // nonstandard extension used: nameless struct/union
 #   pragma warning(disable:4244)    // conversion from double to float
 #   pragma warning(disable:4100)    // unreferenced formal parameter
 #   pragma warning(disable:4511)    // copy ctor couldn't be generated
 #   pragma warning(disable:4512)    // operator=() couldn't be generated
-#ifndef WIN32
+#   pragma warning(disable:4699)    // using precompiled header
 #   pragma warning(disable:4134)    // conversion between pointers to members of same class
+#   pragma warning(disable:4710)    // function not inlined
+#ifndef WIN32
 #   pragma warning(disable:4135)    // conversion between different integral types
 #   pragma warning(disable:4769)    // assignment of near pointer to long integer
+// This one is really annoying, since it occurs for each cast to (HANDLE)...
+#   pragma warning(disable:4305)    // truncation of long to near ptr
 #endif
 #endif // __VISUALC__
 
 #   pragma suppress 571             // Virtual function hiding
 #endif // __SALFORDC__
 
-#ifdef __VISUALC__
-#ifndef WIN32
-// VC1.5 does not have LPTSTR type
-#define LPTSTR LPSTR
-#define LPCTSTR LPCSTR
-#endif
-#endif
+#if defined(__VISUALC__) && !defined(WIN32)
+    // VC1.5 does not have LPTSTR type
+    #define LPTSTR LPSTR
+    #define LPCTSTR LPCSTR
+#endif // VC++ 1.5
 
 // Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files,
-// so define it ourselves
+// so define it ourselves (newer versions do it for all files, though, and
+// don't allow it to be redefined)
 #ifdef __DECCXX
-    #define __cplusplus
+    #if !defined(__VMS) && !defined(__cplusplus)
+        #define __cplusplus
+    #endif
 #endif // __DECCXX
 
 // Resolves linking problems under HP-UX
     #define va_list __gnuc_va_list
 #endif // HP-UX
 
+// Cygwin / Mingw32 with gcc >= 2.95 use new windows headers which
+// are more ms-like (header author is Anders Norlander, hence the name)
+#if (defined(__MINGW32__) || defined(__CYGWIN__)) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))
+    #ifndef wxUSE_NORLANDER_HEADERS
+        #define wxUSE_NORLANDER_HEADERS 1
+    #endif
+#else
+    #ifndef wxUSE_NORLANDER_HEADERS
+        #define wxUSE_NORLANDER_HEADERS 0
+    #endif
+#endif
+
+// "old" GNUWIN32 is the one without Norlander's headers: it lacks the
+// standard Win32 headers and we define the used stuff ourselves for it
+// in wx/msw/gnuwin32/extra.h
+#if defined(__GNUC__) && !wxUSE_NORLANDER_HEADERS
+    #define __GNUWIN32_OLD__
+#endif
+
 //////////////////////////////////////////////////////////////////////////////////
 // Currently Only MS-Windows/NT, XView and Motif are supported
 //
 #endif
 
 #ifdef __WXMSW__
-// wxWindows checks for WIN32, not __WIN32__
-#if ((defined(WIN32) || defined(__NT__)) && !defined(__WIN32__) && !defined(__WXSTUBS__))
-#define __WIN32__
+
+#if defined(_WIN32) || defined(WIN32) || defined(__NT__)
+    #ifndef __WIN32__
+        #define __WIN32__
+    #endif
 #endif
 
 #ifdef __WXWINE__
 // Make sure the environment is set correctly
 #if defined(__WXMSW__) && defined(__X__)
     #error "Target can't be both X and Windows"
-#elif !defined(__WXMOTIF__) && !defined(__WXMSW__) && !defined(__WXGTK__) && !defined(__WXPM__) && \
-      !defined(__WXMAC__) && !defined(__X__) && !defined(__WXQT__) && !defined(__WXSTUBS__)
+#elif !defined(__WXMOTIF__) && !defined(__WXMSW__) && !defined(__WXGTK__) && \
+      !defined(__WXPM__) && !defined(__WXMAC__) && !defined(__X__) && \
+      !defined(__WXQT__) && !defined(__WXSTUBS__) && wxUSE_GUI
     #error "No Target! Use -D[__WXMOTIF__|__WXGTK__|__WXMSW__|__WXMAC__|__WXQT__|__WXPM__|__WXSTUBS__]"
 #endif
 
 #include "wx/setup.h"
 
 // just in case they were defined in setup.h
+#ifdef PACKAGE
 #undef PACKAGE
+#endif
+
+#ifdef VERSION
 #undef VERSION
+#endif
+
+// this has to be done after including setup.h which might
+// define __HPUX__ 1 itself
+#if defined(__hpux) && !defined(__HPUX__)
+    #define __HPUX__
+#endif // HP-UX
 
-// if we're on a Unixsystem but didn't use configure (so that setup.h didn't
+// if we're on a Unix system but didn't use configure (so that setup.h didn't
 // define __UNIX__), do define __UNIX__ now
 #if !defined(__UNIX__) && defined(__UNIX_LIKE__)
     #define __UNIX__
 
 #include "wx/version.h"
 
+// ----------------------------------------------------------------------------
+// compatibility defines
+// ----------------------------------------------------------------------------
+
+// possibility to build non GUI apps is new, so don't burden ourselves with
+// compatibility code
+#if !wxUSE_GUI
+    #undef WXWIN_COMPATIBILITY_2
+    #define WXWIN_COMPATIBILITY_2 0
+#endif // !GUI
+
 // ============================================================================
 // non portable C++ features
 // ============================================================================
 // check for native bool type and TRUE/FALSE constants
 // ----------------------------------------------------------------------------
 
-#if defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXQT__) || defined(__WXPM__) || defined(__WXSTUBS__)
-    // Bool is now obsolete, use bool instead
-    // typedef int Bool;
+// define boolean constants if not done yet
+#ifndef TRUE
+    #define TRUE  1
+#endif
 
-    #ifndef TRUE
-        #define TRUE  1
-        #define FALSE 0
-        #define Bool_DEFINED
-    #endif
-#elif defined(__WXMSW__)
-    #ifndef TRUE
-        #define TRUE  1
-        #define FALSE 0
-    #endif
-#endif // TRUE/FALSE
+#ifndef FALSE
+    #define FALSE 0
+#endif
 
 // Add more tests here for Windows compilers that already define bool
 // (under Unix, configure tests for this)
 #ifndef HAVE_BOOL
     #if defined( __MWERKS__ )
-        #if (__MWERKS__ >= 0x1000) && !__option(bool)
+        #if (__MWERKS__ >= 0x1000) && __option(bool)
             #define HAVE_BOOL
         #endif
     #elif defined(__VISUALC__) && (__VISUALC__ == 1020)
         // Cygwin supports bool
         #define HAVE_BOOL
     #elif defined(__VISAGECPP__)
-        typedef unsigned long bool;
+        #if __IBMCPP__ < 400
+            typedef unsigned long bool;
+        #endif
         #define HAVE_BOOL
     #endif // compilers
 #endif // HAVE_BOOL
     // NB: of course, this doesn't replace the standard type, because, for
     //     example, overloading based on bool/int parameter doesn't work and
     //     so should be avoided in portable programs
-    typedef unsigned int bool;
+#ifndef VMS
+typedef unsigned int bool;
+#endif
 #endif // bool
 
 typedef short int WXTYPE;
@@ -285,56 +361,114 @@ typedef int wxWindowID;
     #define WXUNUSED(identifier) identifier
 #endif
 
-/*
- * Making or using wxWindows as a Windows DLL
- */
+// some arguments are only used in debug mode, but unused in release one
+#ifdef __WXDEBUG__
+    #define WXUNUSED_UNLESS_DEBUG(param)  param
+#else
+    #define WXUNUSED_UNLESS_DEBUG(param)  WXUNUSED(param)
+#endif
 
-#if defined(__WXMSW__)
+// ----------------------------------------------------------------------------
+// portable calling conventions macros
+// ----------------------------------------------------------------------------
+
+// stdcall is used for all functions called by Windows under Windows
+#ifdef __WINDOWS__
+    #if defined(__GNUWIN32__)
+        #define wxSTDCALL __attribute__((stdcall))
+    #else
+        // both VC++ and Borland understand this
+        #define wxSTDCALL _stdcall
+    #endif
+
+#else // Win
+    // no such stupidness under Unix
+    #define wxSTDCALL
+#endif // platform
+
+// wxCALLBACK should be used for the functions which are called back by
+// Windows (such as compare function for wxListCtrl)
+#if defined(__WIN32__)
+    #define wxCALLBACK wxSTDCALL
+#else
+    // no stdcall under Unix nor Win16
+    #define wxCALLBACK
+#endif // platform
 
-// _declspec works in BC++ 5 and later, as well as VC++
-#if defined(__VISUALC__) || defined(__BORLANDC__)
+// callling convention for the qsort(3) callback
+
+#if defined(__VISUALC__)
+  #define   wxCMPFUNC_CONV    _cdecl
+#elif defined(__VISAGECPP__)
+  #define   wxCMPFUNC_CONV    _Optlink
+#else   // !Visual C++
+  #define   wxCMPFUNC_CONV
+#endif  // compiler
+
+// compatibility :-(
+#define CMPFUNC_CONV wxCMPFUNC_CONV
+
+// ----------------------------------------------------------------------------
+// Making or using wxWindows as a Windows DLL
+// ----------------------------------------------------------------------------
+
+#if defined(__WXMSW__)
 
+// __declspec works in BC++ 5 and later, as well as VC++ and gcc
+#if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__)
 #  ifdef WXMAKINGDLL
-#    define WXDLLEXPORT _declspec( dllexport )
-#    define WXDLLEXPORT_DATA(type) _declspec( dllexport ) type
+#    define WXDLLEXPORT __declspec( dllexport )
+#    define WXDLLEXPORT_DATA(type) __declspec( dllexport ) type
 #    define WXDLLEXPORT_CTORFN
 #  elif defined(WXUSINGDLL)
-#    define WXDLLEXPORT _declspec( dllimport )
-#    define WXDLLEXPORT_DATA(type) _declspec( dllimport ) type
+#    define WXDLLEXPORT __declspec( dllimport )
+#    define WXDLLEXPORT_DATA(type) __declspec( dllimport ) type
 #    define WXDLLEXPORT_CTORFN
 #  else
 #    define WXDLLEXPORT
 #    define WXDLLEXPORT_DATA(type) type
 #    define WXDLLEXPORT_CTORFN
 #  endif
+#else
+#    define WXDLLEXPORT
+#    define WXDLLEXPORT_DATA(type) type
+#    define WXDLLEXPORT_CTORFN
+#endif
 
 #elif defined(__WXPM__)
 
-#  ifdef WXMAKINGDLL
-#    define WXDLLEXPORT _Export
-#    define WXDLLEXPORT_DATA(type) _Export type
-#    define WXDLLEXPORT_CTORFN
-#  elif defined(WXUSINGDLL)
-#    define WXDLLEXPORT _Export
-#    define WXDLLEXPORT_DATA(type) _Export type
-#    define WXDLLEXPORT_CTORFN
+#  if (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )))
+
+#    ifdef WXMAKINGDLL
+#      define WXDLLEXPORT _Export
+#      define WXDLLEXPORT_DATA(type) _Export type
+#      define WXDLLEXPORT_CTORFN
+#    elif defined(WXUSINGDLL)
+#      define WXDLLEXPORT _Export
+#      define WXDLLEXPORT_DATA(type) _Export type
+#      define WXDLLEXPORT_CTORFN
+#    else
+#      define WXDLLEXPORT
+#      define WXDLLEXPORT_DATA(type) type
+#      define WXDLLEXPORT_CTORFN
+#    endif
+
 #  else
+
 #    define WXDLLEXPORT
 #    define WXDLLEXPORT_DATA(type) type
 #    define WXDLLEXPORT_CTORFN
+
 #  endif
 
-#else
+#else  // !(MSW or OS2)
+
 #  define WXDLLEXPORT
 #  define WXDLLEXPORT_DATA(type) type
 #  define WXDLLEXPORT_CTORFN
+
 #endif
 
-#else // !Windows
-#  define WXDLLEXPORT
-#  define WXDLLEXPORT_DATA(type) type
-#  define WXDLLEXPORT_CTORFN
-#endif // Win/!Win
 
 // For ostream, istream ofstream
 #if defined(__BORLANDC__) && defined( _RTLDLL )
@@ -351,8 +485,12 @@ class WXDLLEXPORT wxEvent;
 #define wxNOT_FOUND       (-1)
 
 // ----------------------------------------------------------------------------
-/** @name Very common macros */
+// Very common macros
 // ----------------------------------------------------------------------------
+
+// everybody gets the assert and other debug macros
+#include "wx/debug.h"
+
 //@{
 /// delete pointer if it is not NULL and NULL it afterwards
 // (checking that it's !NULL before passing it to delete is just a
@@ -384,10 +522,6 @@ class WXDLLEXPORT wxEvent;
 /// size of statically declared array
 #define WXSIZEOF(array)   (sizeof(array)/sizeof(array[0]))
 
-// Use of these suppresses some compiler warnings
-WXDLLEXPORT_DATA(extern const bool) wxTrue;
-WXDLLEXPORT_DATA(extern const bool) wxFalse;
-
 // ----------------------------------------------------------------------------
 // compiler specific settings
 // ----------------------------------------------------------------------------
@@ -414,9 +548,13 @@ WXDLLEXPORT_DATA(extern const bool) wxFalse;
 // where should i put this? we need to make sure of this as it breaks
 // the <iostream> code.
 #if !wxUSE_IOSTREAMH && defined(__WXDEBUG__)
-#ifndef __MWERKS__
-#undef __WXDEBUG__
-#endif
+#  ifndef __MWERKS__
+// #undef __WXDEBUG__
+#    ifdef wxUSE_DEBUG_NEW_ALWAYS
+#    undef wxUSE_DEBUG_NEW_ALWAYS
+#    define wxUSE_DEBUG_NEW_ALWAYS 0
+#    endif
+#  endif
 #endif
 
 // Callback function type definition
@@ -429,36 +567,55 @@ typedef void (*wxFunction) (wxObject&, wxEvent&);
 // Not all platforms are currently available or supported
 enum
 {
-  wxUNKNOWN_PLATFORM,
-  wxCURSES,                 // Text-only CURSES
-  wxXVIEW_X,                // Sun's XView OpenLOOK toolkit
-  wxMOTIF_X,                // OSF Motif 1.x.x
-  wxCOSE_X,                 // OSF Common Desktop Environment
-  wxNEXTSTEP,               // NeXTStep
-  wxMACINTOSH,              // Apple System 7
-  wxGTK,                    // GTK on X
-  wxGTK_WIN32,              // GTK on Win32
-  wxGTK_OS2,                // GTK on OS/2
-  wxGTK_BEOS,               // GTK on BeOS
-  wxQT,                     // Qt
-  wxGEOS,                   // GEOS
-  wxOS2_PM,                 // OS/2 Workplace
-  wxWINDOWS,                // Windows or WfW
-  wxPENWINDOWS,             // Windows for Pen Computing
-  wxWINDOWS_NT,             // Windows NT
-  wxWIN32S,                 // Windows 32S API
-  wxWIN95,                  // Windows 95
-  wxWIN386,                 // Watcom 32-bit supervisor modus
-  wxMGL_UNIX,               // MGL with direct hardware access
-  wxMGL_X,                  // MGL on X
-  wxMGL_WIN32,              // MGL on Win32
-  wxMGL_OS2                 // MGL on OS/2
+    wxUNKNOWN_PLATFORM,
+    wxCURSES,                 // Text-only CURSES
+    wxXVIEW_X,                // Sun's XView OpenLOOK toolkit
+    wxMOTIF_X,                // OSF Motif 1.x.x
+    wxCOSE_X,                 // OSF Common Desktop Environment
+    wxNEXTSTEP,               // NeXTStep
+    wxMACINTOSH,              // Apple System 7 and 8
+    wxBEOS,                   // BeOS
+    wxGTK,                    // GTK on X
+    wxGTK_WIN32,              // GTK on Win32
+    wxGTK_OS2,                // GTK on OS/2
+    wxGTK_BEOS,               // GTK on BeOS
+    wxQT,                     // Qt
+    wxGEOS,                   // GEOS
+    wxOS2_PM,                 // OS/2 Workplace
+    wxWINDOWS,                // Windows or WfW
+    wxPENWINDOWS,             // Windows for Pen Computing
+    wxWINDOWS_NT,             // Windows NT
+    wxWIN32S,                 // Windows 32S API
+    wxWIN95,                  // Windows 95
+    wxWIN386,                 // Watcom 32-bit supervisor modus
+    wxMGL_UNIX,               // MGL with direct hardware access
+    wxMGL_X,                  // MGL on X
+    wxMGL_WIN32,              // MGL on Win32
+    wxMGL_OS2,                // MGL on OS/2
+    wxWINDOWS_OS2,            // Native OS/2 PM
+    wxUNIX                    // wxBase under Unix
 };
 
 // ----------------------------------------------------------------------------
-// machine specific settings
+// standard wxWindows types
 // ----------------------------------------------------------------------------
 
+// the type for screen and DC coordinates
+
+#if wxUSE_COMPATIBLE_COORD_TYPES
+    // to ensure compatibility with 2.0, we must use long
+    #define wxCoord long
+#else  // !wxUSE_COMPATIBLE_COORD_TYPES
+    #ifdef __WIN16__
+        // under Win16, int is too small, so use long to allow for bigger
+        // virtual canvases
+        typedef long wxCoord;
+    #else // !Win16
+        // other platforms we support have at least 32bit int - quite enough
+        typedef int wxCoord;
+    #endif // Win16/!Win16
+#endif // wxUSE_COMPATIBLE_COORD_TYPES/!wxUSE_COMPATIBLE_COORD_TYPES
+
 // fixed length types
 
 #define wxInt8    char    signed
@@ -510,6 +667,29 @@ enum
 #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
+
+typedef float wxFloat32 ;
+#if defined( __WXMAC__ )  && defined (__MWERKS__)
+    typedef short double wxFloat64;
+#else
+    typedef double wxFloat64;
+#endif
+
+#if defined( __WXMAC__ )  && !defined( __POWERPC__ )
+    typedef long double wxDouble;
+#else
+    typedef double wxDouble ;
+#endif
+
+// ----------------------------------------------------------------------------
+// byte ordering related definition and macros
+// ----------------------------------------------------------------------------
+
 // byte sex
 
 #define  wxBIG_ENDIAN     4321
@@ -524,6 +704,36 @@ enum
 
 // byte swapping
 
+#if defined (__MWERKS__) && ( (__MWERKS__ < 0x0900) || macintosh )
+// assembler versions for these
+#ifdef __POWERPC__
+    inline wxUint16 wxUINT16_SWAP_ALWAYS( wxUint16 i )
+        {return (__lhbrx( &i , 0 ) ) ;}
+    inline wxInt16 wxINT16_SWAP_ALWAYS( wxInt16 i )
+        {return (__lhbrx( &i , 0 ) ) ;}
+    inline wxUint32 wxUINT32_SWAP_ALWAYS( wxUint32 i )
+        {return (__lwbrx( &i , 0 ) ) ;}
+    inline wxInt32 wxINT32_SWAP_ALWAYS( wxInt32 i )
+        {return (__lwbrx( &i , 0 ) ) ;}
+#else
+    #pragma parameter __D0 wxUINT16_SWAP_ALWAYS(__D0)
+    pascal wxUint16 wxUINT16_SWAP_ALWAYS(wxUint16 value)
+        = { 0xE158 };
+
+    #pragma parameter __D0 wxINT16_SWAP_ALWAYS(__D0)
+    pascal wxInt16 wxINT16_SWAP_ALWAYS(wxInt16 value)
+        = { 0xE158 };
+
+    #pragma parameter __D0 wxUINT32_SWAP_ALWAYS (__D0)
+    pascal wxUint32 wxUINT32_SWAP_ALWAYS(wxUint32 value)
+        = { 0xE158, 0x4840, 0xE158 };
+
+    #pragma parameter __D0 wxINT32_SWAP_ALWAYS (__D0)
+    pascal wxInt32 wxINT32_SWAP_ALWAYS(wxInt32 value)
+        = { 0xE158, 0x4840, 0xE158 };
+
+#endif
+#else // !MWERKS
 #define wxUINT16_SWAP_ALWAYS(val) \
    ((wxUint16) ( \
     (((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \
@@ -547,7 +757,7 @@ enum
     (((wxUint32) (val) & (wxUint32) 0x0000ff00U) <<  8) | \
     (((wxUint32) (val) & (wxUint32) 0x00ff0000U) >>  8) | \
     (((wxUint32) (val) & (wxUint32) 0xff000000U) >> 24)))
-
+#endif
 // machine specific byte swapping
 
 #ifdef WORDS_BIGENDIAN
@@ -570,6 +780,74 @@ enum
   #define wxINT32_SWAP_ON_BE(val)   (val)
 #endif
 
+// ----------------------------------------------------------------------------
+// Geometric flags
+// ----------------------------------------------------------------------------
+
+enum wxGeometryCentre
+{
+    wxCENTRE                  = 0x0001,
+    wxCENTER                  = wxCENTRE
+};
+
+// centering into frame rather than screen (obsolete)
+#define wxCENTER_FRAME          0x0000
+// centre on screen rather than parent
+#define wxCENTRE_ON_SCREEN      0x0002
+#define wxCENTER_ON_SCREEN      wxCENTRE_ON_SCREEN
+
+enum wxOrientation
+{
+    wxHORIZONTAL              = 0x0004,
+    wxVERTICAL                = 0x0008,
+
+    wxBOTH                    = (wxVERTICAL | wxHORIZONTAL)
+};
+
+enum wxDirection
+{
+    wxLEFT                    = 0x0010,
+    wxRIGHT                   = 0x0020,
+    wxUP                      = 0x0040,
+    wxDOWN                    = 0x0080,
+
+    wxTOP                     = wxUP,
+    wxBOTTOM                  = wxDOWN,
+
+    wxNORTH                   = wxUP,
+    wxSOUTH                   = wxDOWN,
+    wxWEST                    = wxLEFT,
+    wxEAST                    = wxRIGHT,
+
+    wxALL                     = (wxUP | wxDOWN | wxRIGHT | wxLEFT)
+};
+
+enum wxAlignment
+{
+    wxALIGN_NOT               = 0x0000,
+    wxALIGN_CENTER_HORIZONTAL = 0x0100,
+    wxALIGN_CENTRE_HORIZONTAL = wxALIGN_CENTER_HORIZONTAL,
+    wxALIGN_LEFT              = wxALIGN_NOT,
+    wxALIGN_TOP               = wxALIGN_NOT,
+    wxALIGN_RIGHT             = 0x0200,
+    wxALIGN_BOTTOM            = 0x0400,
+    wxALIGN_CENTER_VERTICAL   = 0x0800,
+    wxALIGN_CENTRE_VERTICAL   = wxALIGN_CENTER_VERTICAL,
+
+    wxALIGN_CENTER            = (wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL),
+    wxALIGN_CENTRE            = wxALIGN_CENTER
+};
+
+enum wxStretch
+{
+    wxSTRETCH_NOT             = 0x0000,
+    wxSHRINK                  = 0x1000,
+    wxGROW                    = 0x2000,
+    wxEXPAND                  = wxGROW,
+    wxSHAPED                  = 0x4000,
+    wxADJUST_MINSIZE          = 0x8000
+};
+
 // ----------------------------------------------------------------------------
 // Window style flags
 // ----------------------------------------------------------------------------
@@ -604,20 +882,23 @@ enum
 #define wxTRANSPARENT_WINDOW    0x00100000
 #define wxNO_BORDER             0x00200000
 
+// Override CTL3D etc. control colour processing to allow own background
+// colour.
+// OBSOLETE - use wxNO_3D instead
 #define wxUSER_COLOURS          0x00800000
-                                 // Override CTL3D etc. control colour processing to
-                                 // allow own background colour
-                                 // OBSOLETE - use wxNO_3D instead
+// Override CTL3D or native 3D styles for children
 #define wxNO_3D                 0x00800000
-                                 // Override CTL3D or native 3D styles for children
+
+// Clip children when painting, which reduces flicker in e.g. frames and
+// splitter windows, but can't be used in a panel where a static box must be
+// 'transparent' (panel paints the background for it)
 #define wxCLIP_CHILDREN         0x00400000
-                                 // Clip children when painting, which reduces flicker in
-                                 // e.g. frames and splitter windows, but can't be used in
-                                 // a panel where a static box must be 'transparent' (panel
-                                 // paints the background for it)
+// Note we're reusing the wxCAPTION style because we won't need captions
+// for subwindows/controls
+#define wxCLIP_SIBLINGS         0x20000000
 
-// Add this style to a panel to get tab traversal working
-// outside of dialogs.
+// Add this style to a panel to get tab traversal working outside of dialogs
+// (on by default for wxPanel, wxDialog, wxScrolledWindow)
 #define wxTAB_TRAVERSAL         0x00080000
 
 // Add this style if the control wants to get all keyboard messages (under
@@ -631,6 +912,17 @@ enum
 // 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
+
+/*
+ * Extra window style flags (use wxWS_EX prefix to make it clear that they
+ * should be passed to wxWindow::SetExtraStyle(), not SetWindowStyle())
+ */
+
+// by default, TransferDataTo/FromWindow() only work on direct children of the
+// window (compatible behaviour), set this flag to make them recursively
+// descend into all subwindows
+#define wxWS_EX_VALIDATE_RECURSIVELY    0x00000001
+
 /*
  * wxFrame/wxDialog style flags
  */
@@ -638,33 +930,55 @@ enum
 #define wxICONIZE               0x4000
 #define wxMINIMIZE              wxICONIZE
 #define wxMAXIMIZE              0x2000
-#define wxTHICK_FRAME           0x1000
+// free value: 0x1000
 #define wxSYSTEM_MENU           0x0800
 #define wxMINIMIZE_BOX          0x0400
 #define wxMAXIMIZE_BOX          0x0200
 #define wxTINY_CAPTION_HORIZ    0x0100
 #define wxTINY_CAPTION_VERT     0x0080
-#define wxRESIZE_BOX            wxMAXIMIZE_BOX
 #define wxRESIZE_BORDER         0x0040
+
+#define wxDIALOG_NO_PARENT      0x0001  // Don't make owned by apps top window
+#define wxFRAME_NO_TASKBAR      0x0002  // No taskbar button (MSW only)
+#define wxFRAME_TOOL_WINDOW     0x0004  // No taskbar button, no system menu
+
+// deprecated versions defined for compatibility reasons
+#define wxRESIZE_BOX            wxMAXIMIZE_BOX
+#define wxTHICK_FRAME           wxRESIZE_BORDER
+
+// obsolete styles, unused any more
 #define wxDIALOG_MODAL          0x0020
 #define wxDIALOG_MODELESS       0x0000
-// Add for normal Windows frame behaviour
-#define wxFRAME_FLOAT_ON_PARENT 0x0020
 
+// deprecated flag, don't use any more, defined for compatibility only
+#define wxFRAME_FLOAT_ON_PARENT 0
+
+// Context-sensitive help
+#define wxFRAME_EX_CONTEXTHELP  0x00000004
+#define wxDIALOG_EX_CONTEXTHELP 0x00000004
+
+/*
+ * MDI parent frame style flags
+ * Can overlap with some of the above.
+ */
+
+#define wxFRAME_NO_WINDOW_MENU  0x0100
 
 #if WXWIN_COMPATIBILITY
 #define wxDEFAULT_FRAME wxDEFAULT_FRAME_STYLE
 #endif
 
 #define wxDEFAULT_FRAME_STYLE \
-  (wxSYSTEM_MENU | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxTHICK_FRAME | wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN)
+  (wxSYSTEM_MENU | wxRESIZE_BORDER | \
+   wxMINIMIZE_BOX | wxMAXIMIZE_BOX | \
+   wxCAPTION | wxCLIP_CHILDREN)
 
 #ifdef __WXMSW__
-#   define wxDEFAULT_DIALOG_STYLE  (wxSYSTEM_MENU|wxCAPTION|wxTHICK_FRAME)
+#   define wxDEFAULT_DIALOG_STYLE  (wxSYSTEM_MENU | wxCAPTION)
 #else
-// Under Unix, the dialogs don't have a system menu. Specifying
-// wxSYSTEM_MENU here, will make a close button appear.
-#   define wxDEFAULT_DIALOG_STYLE  (wxCAPTION)
+//  Under Unix, the dialogs don't have a system menu. Specifying wxSYSTEM_MENU
+//  here will make a close button appear.
+#   define wxDEFAULT_DIALOG_STYLE  wxCAPTION
 #endif
 
 /*
@@ -684,13 +998,13 @@ enum
 /*
  * wxToolBar style flags
  */
-#define wxTB_3DBUTTONS          0x8000
-#define wxTB_HORIZONTAL         0x0002
-#define wxTB_VERTICAL           0x0004
+#define wxTB_HORIZONTAL         wxHORIZONTAL
+#define wxTB_VERTICAL           wxVERTICAL
+#define wxTB_3DBUTTONS          0x0010
 // Flatbar/Coolbar under Win98/ GTK 1.2
-#define wxTB_FLAT               0x0008
+#define wxTB_FLAT               0x0020
 // use native docking under GTK
-#define wxTB_DOCKABLE           0x0010
+#define wxTB_DOCKABLE           0x0040
 
 /*
  * wxMenuBar style flags
@@ -707,13 +1021,7 @@ enum
  * Apply to all panel items
  */
 #define wxCOLOURED          0x0800
-// Alignment for panel item labels: replaces characters with zeros
-// when creating label, so spaces can be included in string for alignment.
 #define wxFIXED_LENGTH      0x0400
-#define wxALIGN_LEFT        0x0000
-#define wxALIGN_CENTER      0x0100
-#define wxALIGN_CENTRE      0x0100
-#define wxALIGN_RIGHT       0x0200
 
 /*
  * Styles for wxListBox
@@ -731,16 +1039,21 @@ enum
 /*
  * wxTextCtrl style flags
  */
-#define wxPROCESS_ENTER     0x0004
-#define wxPASSWORD          0x0008
-#define wxTE_PROCESS_ENTER  wxPROCESS_ENTER
-#define wxTE_PASSWORD       wxPASSWORD
+// the flag bits 0x0001, 2, 4 and 8 are free but should be used only for the
+// things which don't make sense for a text control used by wxTextEntryDialog
+// because they would otherwise conflict with wxOK, wxCANCEL, wxCENTRE
 #define wxTE_READONLY       0x0010
 #define wxTE_MULTILINE      0x0020
 #define wxTE_PROCESS_TAB    0x0040
 // this style means to use RICHEDIT control and does something only under wxMSW
 // and Win32 and is silently ignored under all other platforms
 #define wxTE_RICH           0x0080
+#define wxTE_NO_VSCROLL     0x0100
+#define wxTE_AUTO_SCROLL    0x0200
+#define wxPROCESS_ENTER     0x0400
+#define wxPASSWORD          0x0800
+#define wxTE_PROCESS_ENTER  wxPROCESS_ENTER
+#define wxTE_PASSWORD       wxPASSWORD
 
 /*
  * wxComboBox style flags
@@ -768,20 +1081,20 @@ enum
 /*
  * wxGauge flags
  */
-#define wxGA_PROGRESSBAR     0x0004
 #define wxGA_HORIZONTAL      wxHORIZONTAL
 #define wxGA_VERTICAL        wxVERTICAL
+#define wxGA_PROGRESSBAR     0x0010
 // Windows only
-#define wxGA_SMOOTH          0x0008
+#define wxGA_SMOOTH          0x0020
 
 /*
  * wxSlider flags
  */
-#define wxSL_HORIZONTAL      wxHORIZONTAL
-#define wxSL_VERTICAL        wxVERTICAL
+#define wxSL_HORIZONTAL      wxHORIZONTAL // 4
+#define wxSL_VERTICAL        wxVERTICAL   // 8
 // The next one is obsolete - use scroll events instead
 #define wxSL_NOTIFY_DRAG     0x0000
-#define wxSL_AUTOTICKS       0x0008
+#define wxSL_AUTOTICKS       0x0010
 // #define wxSL_MANUALTICKS     0x0010
 #define wxSL_LABELS          0x0020
 #define wxSL_LEFT            0x0040
@@ -802,6 +1115,10 @@ enum
  */
 #define wxBU_AUTODRAW        0x0004
 #define wxBU_NOAUTODRAW      0x0000
+#define wxBU_LEFT            0x0040
+#define wxBU_TOP             0x0080
+#define wxBU_RIGHT           0x0100
+#define wxBU_BOTTOM          0x0200
 
 /*
  * wxTreeCtrl flags
@@ -814,10 +1131,13 @@ enum
 #define wxTR_MULTIPLE        0x0020
 #define wxTR_EXTENDED        0x0040
 #define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080
+#define wxTR_NO_LINES        0x0100
 
 /*
  * wxListCtrl flags
  */
+#define wxLC_VRULES          0x0001
+#define wxLC_HRULES          0x0002
 #define wxLC_ICON            0x0004
 #define wxLC_SMALL_ICON      0x0008
 #define wxLC_LIST            0x0010
@@ -844,45 +1164,54 @@ enum
 // #define wxLC_SHOW_SEL_ALWAYS
 
 /*
- * wxSpinButton flags
+ * wxSpinButton flags.
+ * Note that a wxSpinCtrl is sometimes defined as
+ * a wxTextCtrl, and so the flags must be different
+ * from wxTextCtrl's.
  */
-#define wxSP_VERTICAL       0x0004
-#define wxSP_HORIZONTAL     0x0008
-#define wxSP_ARROW_KEYS     0x0010
-#define wxSP_WRAP           0x0020
+#define wxSP_HORIZONTAL       wxHORIZONTAL // 4
+#define wxSP_VERTICAL         wxVERTICAL   // 8
+#define wxSP_ARROW_KEYS       0x1000
+#define wxSP_WRAP             0x2000
 
 /*
  * wxSplitterWindow flags
  */
-#define wxSP_NOBORDER       0x0000
-#define wxSP_3D             0x0004
-#define wxSP_BORDER         0x0008
-#define wxSP_PERMIT_UNSPLIT 0x0010
-#define wxSP_LIVE_UPDATE    0x0020
-
-/*
- * wxFrame extra flags
- */
-// No title on taskbar
-#define wxFRAME_TOOL_WINDOW 0x0004
+#define wxSP_NOBORDER         0x0000
+#define wxSP_NOSASH           0x0010
+#define wxSP_BORDER           0x0020
+#define wxSP_PERMIT_UNSPLIT   0x0040
+#define wxSP_LIVE_UPDATE      0x0080
+#define wxSP_3DSASH           0x0100
+#define wxSP_3DBORDER         0x0200
+#define wxSP_FULLSASH         0x0400
+#define wxSP_3D               (wxSP_3DBORDER | wxSP_3DSASH)
 
 /*
  * wxTabCtrl flags
  */
 #define wxTC_MULTILINE        0x0000
-#define wxTC_RIGHTJUSTIFY     0x0004
-#define wxTC_FIXEDWIDTH       0x0008
-#define wxTC_OWNERDRAW        0x0010
+#define wxTC_RIGHTJUSTIFY     0x0010
+#define wxTC_FIXEDWIDTH       0x0020
+#define wxTC_OWNERDRAW        0x0040
 
 /*
  * wxNotebook flags
  */
-#define wxNB_FIXEDWIDTH       0x0008
+#define wxNB_FIXEDWIDTH       0x0010
+#define wxNB_LEFT             0x0020
+#define wxNB_RIGHT            0x0040
+#define wxNB_BOTTOM           0x0080
 
 /*
  * wxStatusBar95 flags
  */
-#define wxST_SIZEGRIP         0x0002
+#define wxST_SIZEGRIP         0x0010
+
+/*
+ * wxStaticText flags
+ */
+#define wxST_NO_AUTORESIZE    0x0001
 
 /*
  * wxStaticLine flags
@@ -898,7 +1227,10 @@ enum
 #define wxPD_AUTO_HIDE          0x0004
 #define wxPD_ELAPSED_TIME       0x0008
 #define wxPD_ESTIMATED_TIME     0x0010
-#define wxPD_REMAINING_TIME     0x0020
+// wxGA_SMOOTH = 0x0020 may also be used with wxProgressDialog
+// NO!!! This is wxDIALOG_MODAL and will cause the progress dialog to
+// be modal. No progress will then be made at all.
+#define wxPD_REMAINING_TIME     0x0040
 
 /*
  * wxHtmlWindow flags
@@ -906,44 +1238,55 @@ enum
 #define wxHW_SCROLLBAR_NEVER    0x0002
 #define wxHW_SCROLLBAR_AUTO     0x0004
 
+/*
+ * wxCalendarCtrl flags
+ */
+#define wxCAL_SUNDAY_FIRST      0x0000
+#define wxCAL_MONDAY_FIRST      0x0001
+#define wxCAL_SHOW_HOLIDAYS     0x0002
+#define wxCAL_NO_YEAR_CHANGE    0x0004
+#define wxCAL_NO_MONTH_CHANGE   0x000c // no month change => no year change
+
 /*
  * extended dialog specifiers. these values are stored in a different
  * flag and thus do not overlap with other style flags. note that these
  * values do not correspond to the return values of the dialogs (for
  * those values, look at the wxID_XXX defines).
  */
-#define wxOK                    0x00000001
-#define wxYES_NO                0x00000002
-#define wxCANCEL                0x00000004
-#define wxYES                   0x00000008
-#define wxNO                    0x00000010
-#define wxNO_DEFAULT            0x00000020
+
+// wxCENTRE already defined as  0x00000001
+#define wxOK                    0x00000004
+#define wxYES_NO                0x00000008
+#define wxCANCEL                0x00000010
+#define wxYES                   0x00000020
+#define wxNO                    0x00000040
+#define wxNO_DEFAULT            0x00000080
 #define wxYES_DEFAULT           0x00000000  // has no effect
 
-#define wxICON_EXCLAMATION      0x00000040
-#define wxICON_HAND             0x00000080
+#define wxICON_EXCLAMATION      0x00000100
+#define wxICON_HAND             0x00000200
 #define wxICON_WARNING          wxICON_EXCLAMATION
 #define wxICON_ERROR            wxICON_HAND
-#define wxICON_QUESTION         0x00000100
-#define wxICON_INFORMATION      0x00000200
+#define wxICON_QUESTION         0x00000400
+#define wxICON_INFORMATION      0x00000800
 #define wxICON_STOP             wxICON_HAND
 #define wxICON_ASTERISK         wxICON_INFORMATION
-#define wxICON_MASK             (0x00000040|0x00000080|0x00000100|0x00000200)
-
-#define wxCENTRE                0x00000400
-#define wxCENTER                wxCENTRE
+#define wxICON_MASK             (0x00000100|0x00000200|0x00000400|0x00000800)
 
-#define  wxFORWARD              0x00000800
-#define  wxBACKWARD             0x00001000
-#define  wxRESET                0x00002000
-#define  wxHELP                 0x00004000
-#define  wxMORE                 0x00008000
-#define  wxSETUP                0x00010000
+#define  wxFORWARD              0x00001000
+#define  wxBACKWARD             0x00002000
+#define  wxRESET                0x00004000
+#define  wxHELP                 0x00008000
+#define  wxMORE                 0x00010000
+#define  wxSETUP                0x00020000
 
 // ----------------------------------------------------------------------------
 // standard IDs
 // ----------------------------------------------------------------------------
 
+// id for a separator line in the menu (invalid for normal item)
+#define wxID_SEPARATOR (-1)
+
 // Standard menu IDs
 #define wxID_LOWEST             4999
 
@@ -997,36 +1340,17 @@ enum
 #define wxID_MORE               5109
 #define wxID_SETUP              5110
 #define wxID_RESET              5111
-
+#define wxID_CONTEXT_HELP       5112
+#define wxID_YESTOALL           5113
+#define wxID_NOTOALL            5114
+#define wxID_ABORT              5115
+#define wxID_RETRY              5116
+#define wxID_IGNORE             5117
+
+// IDs used by generic file dialog (11 consecutive starting from this value)
+#define wxID_FILEDLGG           5900
 #define wxID_HIGHEST            5999
 
-// ----------------------------------------------------------------------------
-// Orientations and directions
-// ----------------------------------------------------------------------------
-
-enum wxOrientation
-{
-    wxHORIZONTAL              = 0x0001,
-    wxVERTICAL                = 0x0002,
-    wxBOTH                    = (wxVERTICAL | wxHORIZONTAL)
-};
-
-enum wxDirection
-{
-    wxLEFT                    = 0x0010,
-    wxRIGHT                   = 0x0020,
-    wxUP                      = 0x0040,
-    wxDOWN                    = 0x0080
-};
-
-// wxCENTRE                   = 0x0400 (defined above)
-
-// centering into frame rather than screen (obsolete)
-#define wxCENTER_FRAME          0x0000
-// centre on screen rather than parent
-#define wxCENTRE_ON_SCREEN      0x0004
-#define wxCENTER_ON_SCREEN      wxCENTRE_ON_SCREEN
-
 // ----------------------------------------------------------------------------
 // Possible SetSize flags
 // ----------------------------------------------------------------------------
@@ -1082,6 +1406,8 @@ enum {
 
 // Brush & Pen Stippling. Note that a stippled pen cannot be dashed!!
 // Note also that stippling a Pen IS meaningfull, because a Line is
+  wxSTIPPLE_MASK_OPAQUE, //mask is used for blitting monochrome using text fore and back ground colors
+  wxSTIPPLE_MASK,        //mask is used for masking areas in the stipple bitmap (TO DO)
 // drawn with a Pen, and without any Brush -- and it can be stippled.
   wxSTIPPLE =          110,
   wxBDIAGONAL_HATCH,
@@ -1105,24 +1431,22 @@ enum {
 // Logical ops
 typedef enum
 {
-  wxCLEAR,      // 0
-  wxXOR,        // src XOR dst
-  wxINVERT,     // NOT dst
-  wxOR_REVERSE, // src OR (NOT dst)
-  wxAND_REVERSE,// src AND (NOT dst)
-  wxCOPY,       // src
-  wxAND,        // src AND dst
-  wxAND_INVERT, // (NOT src) AND dst
-  wxNO_OP,      // dst
-  wxNOR,        // (NOT src) AND (NOT dst)
-  wxEQUIV,      // (NOT src) XOR dst
-  wxSRC_INVERT, // (NOT src)
-  wxOR_INVERT,  // (NOT src) OR dst
-  wxNAND,       // (NOT src) OR (NOT dst)
-  wxOR,         // src OR dst
-  wxSET,        // 1
-  wxSRC_OR,     // source _bitmap_ OR destination
-  wxSRC_AND     // source _bitmap_ AND destination
+  wxCLEAR,        wxROP_BLACK = wxCLEAR,             wxBLIT_BLACKNESS = wxCLEAR,        // 0
+  wxXOR,          wxROP_XORPEN = wxXOR,              wxBLIT_SRCINVERT = wxXOR,          // src XOR dst
+  wxINVERT,       wxROP_NOT = wxINVERT,              wxBLIT_DSTINVERT = wxINVERT,       // NOT dst
+  wxOR_REVERSE,   wxROP_MERGEPENNOT = wxOR_REVERSE,  wxBLIT_00DD0228 = wxOR_REVERSE,    // src OR (NOT dst)
+  wxAND_REVERSE,  wxROP_MASKPENNOT = wxAND_REVERSE,  wxBLIT_SRCERASE = wxAND_REVERSE,   // src AND (NOT dst)
+  wxCOPY,         wxROP_COPYPEN = wxCOPY,            wxBLIT_SRCCOPY = wxCOPY,           // src
+  wxAND,          wxROP_MASKPEN = wxAND,             wxBLIT_SRCAND = wxAND,             // src AND dst
+  wxAND_INVERT,   wxROP_MASKNOTPEN = wxAND_INVERT,   wxBLIT_00220326 = wxAND_INVERT,    // (NOT src) AND dst
+  wxNO_OP,        wxROP_NOP = wxNO_OP,               wxBLIT_00AA0029 = wxNO_OP,         // dst
+  wxNOR,          wxROP_NOTMERGEPEN = wxNOR,         wxBLIT_NOTSRCERASE = wxNOR,        // (NOT src) AND (NOT dst)
+  wxEQUIV,        wxROP_NOTXORPEN = wxEQUIV,         wxBLIT_00990066 = wxEQUIV,         // (NOT src) XOR dst
+  wxSRC_INVERT,   wxROP_NOTCOPYPEN = wxSRC_INVERT,   wxBLIT_NOTSCRCOPY = wxSRC_INVERT,  // (NOT src)
+  wxOR_INVERT,    wxROP_MERGENOTPEN = wxOR_INVERT,   wxBLIT_MERGEPAINT = wxOR_INVERT,   // (NOT src) OR dst
+  wxNAND,         wxROP_NOTMASKPEN = wxNAND,         wxBLIT_007700E6 = wxNAND,          // (NOT src) OR (NOT dst)
+  wxOR,           wxROP_MERGEPEN = wxOR,             wxBLIT_SRCPAINT = wxOR,            // src OR dst
+  wxSET,          wxROP_WHITE = wxSET,               wxBLIT_WHITENESS = wxSET           // 1
 } form_ops_t;
 
 /* Flood styles */
@@ -1139,28 +1463,29 @@ typedef enum
 #define    wxTOOL_LEFT       3
 #define    wxTOOL_RIGHT       4
 
-
+// the values of the format constants should be the same as correspondign
+// CF_XXX constants in Windows API
 enum wxDataFormatId
 {
-  wxDF_INVALID =          0,
-  wxDF_TEXT =             1,  /* CF_TEXT */
-  wxDF_BITMAP =           2,  /* CF_BITMAP */
-  wxDF_METAFILE =         3,  /* CF_METAFILEPICT */
-  wxDF_SYLK =             4,
-  wxDF_DIF =              5,
-  wxDF_TIFF =             6,
-  wxDF_OEMTEXT =          7,  /* CF_OEMTEXT */
-  wxDF_DIB =              8,  /* CF_DIB */
-  wxDF_PALETTE =          9,
-  wxDF_PENDATA =          10,
-  wxDF_RIFF =             11,
-  wxDF_WAVE =             12,
-  wxDF_UNICODETEXT =      13,
-  wxDF_ENHMETAFILE =      14,
-  wxDF_FILENAME =         15, /* CF_HDROP */
-  wxDF_LOCALE =           16,
-  wxDF_PRIVATE =          20,
-  wxDF_MAX
+    wxDF_INVALID =          0,
+    wxDF_TEXT =             1,  /* CF_TEXT */
+    wxDF_BITMAP =           2,  /* CF_BITMAP */
+    wxDF_METAFILE =         3,  /* CF_METAFILEPICT */
+    wxDF_SYLK =             4,
+    wxDF_DIF =              5,
+    wxDF_TIFF =             6,
+    wxDF_OEMTEXT =          7,  /* CF_OEMTEXT */
+    wxDF_DIB =              8,  /* CF_DIB */
+    wxDF_PALETTE =          9,
+    wxDF_PENDATA =          10,
+    wxDF_RIFF =             11,
+    wxDF_WAVE =             12,
+    wxDF_UNICODETEXT =      13,
+    wxDF_ENHMETAFILE =      14,
+    wxDF_FILENAME =         15, /* CF_HDROP */
+    wxDF_LOCALE =           16,
+    wxDF_PRIVATE =          20,
+    wxDF_MAX
 };
 
 /* Virtual keycodes */
@@ -1398,13 +1723,83 @@ typedef enum {
     wxPRINT_MODE_PRINTER = 3    // Send to printer
 } wxPrintMode;
 
+// ----------------------------------------------------------------------------
+// miscellaneous
+// ----------------------------------------------------------------------------
+
+// define this macro if font handling is done using the X font names
+#if defined(__WXGTK__) || defined(__X__)
+    #define _WX_X_FONTLIKE
+#endif
+
+// macro to specify "All Files" on different platforms
+#if defined(__WXMSW__)
+#   define wxALL_FILES_PATTERN   "*.*"
+#   define wxALL_FILES           gettext_noop("All files (*.*)|*.*")
+#else
+#   define wxALL_FILES_PATTERN   "*"
+#   define wxALL_FILES           gettext_noop("All files (*)|*")
+#endif
+
 // ---------------------------------------------------------------------------
 // macros that enable wxWindows apps to be compiled in absence of the
 // sytem headers, although some platform specific types are used in the
 // platform specific (implementation) parts of the headers
 // ---------------------------------------------------------------------------
 
+#ifdef __WXMAC__
+
+typedef WindowPtr       WXHWND;
+typedef Handle          WXHANDLE;
+typedef CIconHandle     WXHICON;
+//typedef unsigned long   WXHFONT;
+typedef MenuHandle      WXHMENU;
+//typedef unsigned long   WXHPEN;
+//typedef unsigned long   WXHBRUSH;
+//typedef unsigned long   WXHPALETTE;
+typedef CursHandle      WXHCURSOR;
+typedef RgnHandle       WXHRGN;
+//typedef unsigned long   WXHACCEL;
+//typedef unsigned long   WXHINSTANCE;
+typedef GWorldPtr       WXHBITMAP;
+//typedef unsigned long   WXHIMAGELIST;
+//typedef unsigned long   WXHGLOBAL;
+typedef GrafPtr         WXHDC;
+typedef unsigned int    WXUINT;
+typedef unsigned long   WXDWORD;
+typedef unsigned short  WXWORD;
+//typedef unsigned int    WXWPARAM;
+//typedef long            WXLPARAM;
+typedef RGBColor        WXCOLORREF;
+//typedef void *          WXRGNDATA;
+//typedef void *          WXMSG;
+//typedef unsigned long   WXHCONV;
+//typedef unsigned long   WXHKEY;
+//typedef void *          WXDRAWITEMSTRUCT;
+//typedef void *          WXMEASUREITEMSTRUCT;
+//typedef void *          WXLPCREATESTRUCT;
+typedef int (*WXFARPROC)();
+
+typedef WindowPtr       WXWindow;
+typedef ControlHandle   WXWidget;
+
+#endif
+
 #if defined(__WXMSW__) || defined(__WXPM__)
+
+// the keywords needed for WinMain() declaration
+#ifdef __WIN16__
+#  ifdef __VISUALC__
+#    define WXFAR __far
+#  else
+#    define WXFAR _far
+#  endif
+#else  // Win32
+#  ifndef WXFAR
+#    define WXFAR
+#  endif
+#endif // Win16/32
+
 // Stand-ins for Windows types or OS/2, to avoid #including all of windows.h or os2.h
 typedef unsigned long   WXHWND;
 typedef unsigned long   WXHANDLE;
@@ -1417,7 +1812,7 @@ typedef unsigned long   WXHPALETTE;
 typedef unsigned long   WXHCURSOR;
 typedef unsigned long   WXHRGN;
 typedef unsigned long   WXHACCEL;
-typedef unsigned long   WXHINSTANCE;
+typedef void WXFAR  *   WXHINSTANCE;
 typedef unsigned long   WXHBITMAP;
 typedef unsigned long   WXHIMAGELIST;
 typedef unsigned long   WXHGLOBAL;
@@ -1425,8 +1820,17 @@ typedef unsigned long   WXHDC;
 typedef unsigned int    WXUINT;
 typedef unsigned long   WXDWORD;
 typedef unsigned short  WXWORD;
+#ifdef __WXMSW__
 typedef unsigned int    WXWPARAM;
 typedef long            WXLPARAM;
+#else
+#  define WXWPARAM      MPARAM
+#  define WXLPARAM      MPARAM
+#  define RECT          RECTL
+#  define LOGFONT       FATTRS
+#  define LOWORD        SHORT1FROMMP
+#  define HIWORD        SHORT2FROMMP
+#endif // __WXMSW__
 typedef unsigned long   WXCOLORREF;
 typedef void *          WXRGNDATA;
 typedef void *          WXMSG;
@@ -1442,7 +1846,7 @@ typedef void *          WXLPCREATESTRUCT;
 typedef unsigned long   WXMPARAM;
 typedef unsigned long   WXMSGID;
 typedef void*           WXRESULT;
-typedef int             (*WXFARPROC)();
+//typedef int             (*WXFARPROC)();
 // some windows handles not defined by PM
 typedef unsigned long   HANDLE;
 typedef unsigned long   HICON;
@@ -1457,18 +1861,61 @@ typedef unsigned long   HIMAGELIST;
 typedef unsigned long   HGLOBAL;
 typedef unsigned long   DWORD;
 typedef unsigned short  WORD;
-#endif
+
+// 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
+#define OS2RGB(r,g,b) ((DWORD ((BYTE) (b) | ((WORD) (g) << 8)) | (((DWORD)(BYTE)(r)) << 16)))
+
+typedef unsigned long COLORREF;
+#define GetBValue(rgb) ((BYTE)((rgb) >> 16))
+#define GetGValue(rgb) ((BYTE)(((WORD)(rgb)) >> 8))
+#define GetRValue(rgb) ((BYTE)(rgb))
+#define PALETTEINDEX(i) ((COLORREF)(0x01000000 | (DWORD)(WORD)(i)))
+#define PALETTERGB(r,g,b) (0x02000000 | OS2RGB(r,g,b))
+// OS2's RGB/RGB2 is backwards from this
+typedef struct tagPALETTEENTRY
+{
+    char bRed;
+    char bGreen;
+    char bBlue;
+    char bFlags;
+} PALETTEENTRY;
+typedef struct tagLOGPALETTE
+{
+    WORD palVersion;
+    WORD palNumentries;
+    WORD PALETTEENTRY[1];
+} LOGPALETTE;
+#endif //__WXPM__
 
 #if defined(__GNUWIN32__) || defined(__WXWINE__)
     typedef int (*WXFARPROC)();
 #elif defined(__WIN32__)
     typedef int (__stdcall *WXFARPROC)();
+#elif defined(__WXPM__)
+#  if defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )
+    // VA 3.0 for some reason needs base data types when typedefing a proc proto???
+    typedef void* (_System *WXFARPROC)(unsigned long, unsigned long, void*, void*);
+#  else
+    typedef WXRESULT (_System *WXFARPROC)(WXHWND, WXMSGID, WXWPARAM, WXLPARAM);
+#  endif
 #else
     typedef int (*WXFARPROC)();
 #endif
 
 typedef WXHWND WXWidget;
-#endif // MSW
+
+#if defined(__BORLANDC__) && !defined(__WIN32__)
+#  ifndef LPTSTR
+#    define LPTSTR LPSTR
+#  endif
+#  ifndef LPCTSTR
+#    define LPCTSTR LPSTR
+#  endif
+#endif
+
+#endif // MSW or OS2
 
 #ifdef __WXMOTIF__
 /* Stand-ins for X/Xt/Motif types */
@@ -1494,6 +1941,8 @@ typedef unsigned long   Atom;  /* this might fail on a few architectures */
 
 #ifdef __WXGTK__
 /* Stand-ins for GLIB types */
+typedef char           gchar;
+typedef signed char    gint8;
 typedef int            gint;
 typedef unsigned       guint;
 typedef unsigned long  gulong;
@@ -1506,12 +1955,22 @@ typedef struct _GdkColor        GdkColor;
 typedef struct _GdkColormap     GdkColormap;
 typedef struct _GdkFont         GdkFont;
 typedef struct _GdkGC           GdkGC;
-typedef struct _GdkWindow       GdkWindow;
-typedef struct _GdkWindow       GdkBitmap;
-typedef struct _GdkWindow       GdkPixmap;
+#ifdef __WXGTK20__
+    typedef struct _GdkDrawable     GdkWindow;
+    typedef struct _GdkDrawable     GdkBitmap;
+    typedef struct _GdkDrawable     GdkPixmap;
+#else
+    typedef struct _GdkWindow       GdkWindow;
+    typedef struct _GdkWindow       GdkBitmap;
+    typedef struct _GdkWindow       GdkPixmap;
+#endif
 typedef struct _GdkCursor       GdkCursor;
 typedef struct _GdkRegion       GdkRegion;
 typedef struct _GdkDragContext  GdkDragContext;
+#ifdef HAVE_XIM
+typedef struct _GdkIC           GdkIC;
+typedef struct _GdkICAttr       GdkICAttr;
+#endif
 
 /* Stand-ins for GTK types */
 typedef struct _GtkWidget         GtkWidget;
@@ -1523,10 +1982,22 @@ typedef struct _GtkTooltips       GtkTooltips;
 typedef struct _GtkNotebook       GtkNotebook;
 typedef struct _GtkNotebookPage   GtkNotebookPage;
 typedef struct _GtkAccelGroup     GtkAccelGroup;
-typedef        struct _GtkItemFactory    GtkItemFactory;
-typedef        struct _GtkSelectionData  GtkSelectionData;
+typedef struct _GtkItemFactory    GtkItemFactory;
+typedef struct _GtkSelectionData  GtkSelectionData;
 
 typedef GtkWidget *WXWidget;
+
+#ifndef __WXGTK20__
+#define GTK_OBJECT_GET_CLASS(object) (GTK_OBJECT(object)->klass)
+#define GTK_CLASS_TYPE(klass) ((klass)->type)
+#endif
+
+#ifdef __WXGTK20__
+/* Stand-ins for Pango types */
+typedef struct _PangoContext         PangoContext;
+typedef struct _PangoLayout          PangoLayout;
+typedef struct _PangoFontDescription PangoFontDescription;
+#endif
 #endif // GTK
 
 // This is required because of clashing macros in windows.h, which may be