From 0cbff1201aa47e2b73ec90a97886f18e88270ea6 Mon Sep 17 00:00:00 2001
From: Julian Smart <julian@anthemion.co.uk>
Date: Wed, 11 Jul 2001 10:07:06 +0000
Subject: [PATCH] Added wxUSE_DC_CACHEING and associated code to wxMSW Added
 EnableCache, CacheEnabled to wxDCBase Added mask source args to DoBlit, Blit
 Added cache testing code to dragimag sample Added wxSystemOptions,
 regenerated makefiles

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10962 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 configure.in                    |   7 +
 contrib/samples/plot/PlotVC.dsp |   2 +-
 distrib/msw/tmake/filelist.txt  |   2 +
 docs/latex/wx/category.tex      |   3 +-
 docs/latex/wx/classes.tex       |   1 +
 docs/latex/wx/dc.tex            |  70 +++-
 docs/latex/wx/sysopt.tex        |  89 +++++
 include/wx/dc.h                 |  23 +-
 include/wx/dynarray.h           |   2 +-
 include/wx/gtk/dcclient.h       |   2 +-
 include/wx/gtk1/dcclient.h      |   2 +-
 include/wx/mac/dc.h             |   2 +-
 include/wx/mac/setup.h          |   6 +
 include/wx/mgl/dc.h             |   2 +-
 include/wx/motif/dcclient.h     |   2 +-
 include/wx/msw/dc.h             |  38 +-
 include/wx/msw/dcprint.h        |   2 +-
 include/wx/msw/settings.h       |   9 -
 include/wx/msw/setup0.h         |   6 +
 include/wx/os2/dc.h             |   2 +
 include/wx/os2/dcprint.h        |   2 +
 include/wx/sysopt.h             |  44 +++
 include/wx/univ/setup.h         |   4 +
 samples/dragimag/dragimag.cpp   |  23 +-
 samples/dragimag/dragimag.h     |   1 +
 src/common/dcbase.cpp           |   2 +
 src/common/sysopt.cpp           | 133 +++++++
 src/gtk/dcclient.cpp            |   9 +-
 src/gtk/files.lst               |  21 +-
 src/gtk1/dcclient.cpp           |   9 +-
 src/gtk1/files.lst              |  21 +-
 src/jpeg/JpegVC.dsp             |   8 +-
 src/mac/carbon/dc.cpp           |   9 +-
 src/mac/dc.cpp                  |   9 +-
 src/mgl/dc.cpp                  |  14 +-
 src/motif/dcclient.cpp          |   9 +-
 src/motif/files.lst             |  17 +-
 src/msw/dc.cpp                  | 194 ++++++++++-
 src/msw/dcprint.cpp             |   3 +-
 src/msw/files.lst               |  17 +-
 src/msw/makebase.vc             |   5 +-
 src/msw/makefile.b32            |  11 +-
 src/msw/makefile.bcc            |  11 +-
 src/msw/makefile.dos            |  20 +-
 src/msw/makefile.g95            |   5 +-
 src/msw/makefile.sc             |   5 +-
 src/msw/makefile.vc             | 590 ++++++++++++++++----------------
 src/msw/makefile.wat            |  15 +-
 src/msw/settings.cpp            |  51 +--
 src/os2/dcprint.cpp             |   2 +
 src/os2/files.lst               |  49 ++-
 src/png/PngVC.dsp               |   4 +-
 src/tiff/TiffVC.dsp             |   8 +-
 src/univ/files.lst              |   8 +-
 src/wxvc.dsp                    |   8 +-
 src/wxvc_dll.dsp                |   4 +
 src/wxvc_universal.dsp          |   4 +
 src/zlib/ZlibVC.dsp             |   8 +-
 58 files changed, 1149 insertions(+), 480 deletions(-)
 create mode 100644 docs/latex/wx/sysopt.tex
 create mode 100644 include/wx/sysopt.h
 create mode 100644 src/common/sysopt.cpp

diff --git a/configure.in b/configure.in
index b211a741c8..97948332e6 100644
--- a/configure.in
+++ b/configure.in
@@ -690,6 +690,7 @@ if test $DEBUG_CONFIGURE = 1; then
   DEFAULT_wxUSE_WXTREE=no
   DEFAULT_wxUSE_METAFILE=no
   DEFAULT_wxUSE_MIMETYPE=no
+  DEFAULT_wxUSE_SYSTEM_OPTIONS=yes
 
   DEFAULT_wxUSE_COMMONDLGS=no
   DEFAULT_wxUSE_CHOICEDLG=no
@@ -843,6 +844,7 @@ else
   DEFAULT_wxUSE_WXTREE=yes
   DEFAULT_wxUSE_METAFILE=yes
   DEFAULT_wxUSE_MIMETYPE=yes
+  DEFAULT_wxUSE_SYSTEM_OPTIONS=yes
 
   DEFAULT_wxUSE_COMMONDLGS=yes
   DEFAULT_wxUSE_CHOICEDLG=yes
@@ -1048,6 +1050,7 @@ WX_ARG_ENABLE(catch_segvs,   [  --enable-catch_segvs    catch signals and pass t
 WX_ARG_ENABLE(snglinst,      [  --enable-snglinst       use wxSingleInstanceChecker class], wxUSE_SNGLINST_CHECKER)
 
 WX_ARG_ENABLE(mimetype,    [  --enable-mimetypes      use wxMimeTypesManager], wxUSE_MIMETYPE)
+WX_ARG_ENABLE(system_options,    [  --enable-sysoptions      use wxSystemOptions], wxUSE_SYSTEM_OPTIONS)
 
 dnl ---------------------------------------------------------------------------
 dnl "big" options (i.e. those which change a lot of things throughout the library)
@@ -4251,6 +4254,10 @@ if test "$wxUSE_MIMETYPE" = "yes"; then
     AC_DEFINE(wxUSE_MIMETYPE)
 fi
 
+if test "$wxUSE_SYSTEM_OPTIONS" = "yes"; then
+    AC_DEFINE(wxUSE_SYSTEM_OPTIONS)
+fi
+
 if test "$wxUSE_MINIFRAME" = "yes"; then
     AC_DEFINE(wxUSE_MINIFRAME)
     SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS minifram"
diff --git a/contrib/samples/plot/PlotVC.dsp b/contrib/samples/plot/PlotVC.dsp
index 6b598fc0c0..7df87a60be 100644
--- a/contrib/samples/plot/PlotVC.dsp
+++ b/contrib/samples/plot/PlotVC.dsp
@@ -169,7 +169,7 @@ SOURCE=.\plot.cpp
 
 SOURCE=.\plot.rc
 # ADD BASE RSC /l 0x809
-# ADD RSC /l 0x809 /i "..\..\include"
+# ADD RSC /l 0x809 /i "..\..\..\include"
 # End Source File
 # End Target
 # End Project
diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt
index 7679fa0555..645fede07e 100644
--- a/distrib/msw/tmake/filelist.txt
+++ b/distrib/msw/tmake/filelist.txt
@@ -197,6 +197,7 @@ socket.cpp	Common	Socket,Base
 stream.cpp	Common	Base
 strconv.cpp	Common	Base
 string.cpp	Common	Base
+sysopt.cpp	Common	Base
 tbarbase.cpp	Common
 textcmn.cpp	Common
 textfile.cpp	Common	Base
@@ -765,6 +766,7 @@ statusbr.h	WXH
 strconv.h	WXH	Base
 stream.h	WXH	Base
 string.h	WXH	Base
+sysopt.h	WXH	Base
 tab.h	WXH
 tabctrl.h	WXH
 taskbar.h	WXH
diff --git a/docs/latex/wx/category.tex b/docs/latex/wx/category.tex
index 7e04c61f86..afe09140fa 100644
--- a/docs/latex/wx/category.tex
+++ b/docs/latex/wx/category.tex
@@ -543,7 +543,8 @@ using any of them in the new programs:
 \twocolitem{\helpref{wxTimer}{wxtimer}}{Timer class}
 \twocolitem{\helpref{wxStopWatch}{wxstopwatch}}{Stop watch class}
 \twocolitem{\helpref{wxMimeTypesManager}{wxmimetypesmanager}}{MIME-types manager class}
-\twocolitem{\helpref{wxSystemSettings}{wxsystemsettings}}{System settings class}
+\twocolitem{\helpref{wxSystemSettings}{wxsystemsettings}}{System settings class for obtaining various global parameters}
+\twocolitem{\helpref{wxSystemOptions}{wxsystemoptions}}{System options class for run-time configuration}
 \twocolitem{\helpref{wxAcceleratorTable}{wxacceleratortable}}{Accelerator table}
 \twocolitem{\helpref{wxAutomationObject}{wxautomationobject}}{OLE automation class}
 \twocolitem{\helpref{wxFontMapper}{wxfontmapper}}{Font mapping, finding suitable font for given encoding}
diff --git a/docs/latex/wx/classes.tex b/docs/latex/wx/classes.tex
index 719ae7878c..4afa7b724e 100644
--- a/docs/latex/wx/classes.tex
+++ b/docs/latex/wx/classes.tex
@@ -283,6 +283,7 @@
 \input propslv.tex
 \input tokenizr.tex
 \input sysclevt.tex
+\input sysopt.tex
 \input settings.tex
 \input tab.tex
 \input tabctrl.tex
diff --git a/docs/latex/wx/dc.tex b/docs/latex/wx/dc.tex
index d77950b563..d8e91ef275 100644
--- a/docs/latex/wx/dc.tex
+++ b/docs/latex/wx/dc.tex
@@ -61,11 +61,11 @@ released for each drawing operation.
 
 \func{bool}{Blit}{\param{wxCoord}{ xdest}, \param{wxCoord}{ ydest}, \param{wxCoord}{ width}, \param{wxCoord}{ height},
   \param{wxDC* }{source}, \param{wxCoord}{ xsrc}, \param{wxCoord}{ ysrc}, \param{int}{ logicalFunc = wxCOPY},
-  \param{bool }{useMask = FALSE}}
+  \param{bool }{useMask = FALSE}, \param{wxCoord}{ xsrcMask = -1}, \param{wxCoord}{ ysrcMask = -1}}
 
 Copy from a source DC to this DC, specifying the destination
-coordinates, size of area to copy, source DC, source coordinates, and
-logical function.
+coordinates, size of area to copy, source DC, source coordinates,
+logical function, whether to use a bitmap mask, and mask source position.
 
 \wxheading{Parameters}
 
@@ -86,7 +86,7 @@ logical function.
 \docparam{logicalFunc}{Logical function to use: see \helpref{wxDC::SetLogicalFunction}{wxdcsetlogicalfunction}.}
 
 \docparam{useMask}{If TRUE, Blit does a transparent blit using the mask that is associated with the bitmap
-selected into the source device context. The Windows implementation does the following:
+selected into the source device context. The Windows implementation does the following if MaskBlt cannot be used:
 
 \begin{enumerate}
 \item Creates a temporary bitmap and copies the destination area into it.
@@ -103,8 +103,21 @@ and the background colour set to WHITE.
 
 This sequence of operations ensures that the source's transparent area need not be black,
 and logical functions are supported.
+
+{\bf Note:} on Windows, blitting with masks can be speeded up considerably by using 
+\helpref{DC cacheing}{wxdcenablecache}. You can also influence whether MaskBlt
+or the explicit mask blitting code above is used, by using \helpref{wxSystemOptions}{wxsystemoptions} and
+setting the {\bf no-maskblt} option to 1.
+
 }
 
+\docparam{xsrcMask}{Source x position on the mask. If both xsrcMask and ysrcMask are -1, xsrc and ysrc
+will be assumed for the mask source position. Currently only implemented on Windows.}
+
+\docparam{ysrcMask}{Source y position on the mask. If both xsrcMask and ysrcMask are -1, xsrc and ysrc
+will be assumed for the mask source position. Currently only implemented on Windows.}
+
+
 \wxheading{Remarks}
 
 There is partial support for Blit in wxPostScriptDC, under X.
@@ -115,6 +128,22 @@ See \helpref{wxMemoryDC}{wxmemorydc} for typical usage.
 
 \helpref{wxMemoryDC}{wxmemorydc}, \helpref{wxBitmap}{wxbitmap}, \helpref{wxMask}{wxmask}
 
+\membersection{wxDC::CacheEnabled}\label{wxdccacheenabled}
+
+\func{static bool}{CacheEnabled}{\void}
+
+On supported platforms (currently only Windows), returns TRUE
+if the DC cache is enabled. The DC cache
+can speed up the \helpref{Blit}{wxdcblit} operation when
+drawing a large number of masked bitmaps.
+
+If using the cache functions in your code, please test for the
+wxUSE\_DC\_CACHEING preprocessor symbol for portability.
+
+\wxheading{See also}
+
+\helpref{wxDC::EnableCache}{wxdcenablecache}, \helpref{wxDC::ClearCache}
+
 \membersection{wxDC::CalcBoundingBox}\label{wxdccalcboundingbox}
 
 \func{void}{CalcBoundingBox}{\param{wxCoord }{x}, \param{wxCoord }{y}}
@@ -133,6 +162,24 @@ Adds the specified point to the bounding box which can be retrieved with
 
 Clears the device context using the current background brush.
 
+\membersection{wxDC::ClearCache}\label{wxdcclearcache}
+
+\func{static void}{ClearCache}{\void}
+
+On supported platforms (currently only Windows), clears
+the contents of the DC cache (one bitmap and two Windows device contexts). The DC cache
+can speed up the \helpref{Blit}{wxdcblit} operation when
+drawing a large number of masked bitmaps. You should
+call ClearCache at the end of length DC operations if you wish to only use
+the cache transiently; you should also call it as your application exits.
+
+If using the cache functions in your code, please test for the
+wxUSE\_DC\_CACHEING preprocessor symbol for portability.
+
+\wxheading{See also}
+
+\helpref{wxDC::EnableCache}{wxdcenablecache}, \helpref{wxDC::CacheEnabled}
+
 \membersection{wxDC::CrossHair}\label{wxdccrosshair}
 
 \func{void}{CrossHair}{\param{wxCoord}{ x}, \param{wxCoord}{ y}}
@@ -370,6 +417,21 @@ text more precisely.
 but it is ignored by wxMSW. Thus, you should avoid using logical functions
 with this function in portable programs.
 
+\membersection{wxDC::EnableCache}\label{wxdcenablecache}
+
+\func{static void}{EnableCache}{\param{bool}{ enableCache}}
+
+On supported platforms (currently only Windows), enables the DC cache
+which can speed up the \helpref{Blit}{wxdcblit} operation when
+drawing a large number of masked bitmaps.
+
+If using the cache functions in your code, please test for the
+wxUSE\_DC\_CACHEING preprocessor symbol for portability.
+
+\wxheading{See also}
+
+\helpref{wxDC::CacheEnabled}{wxdccacheenabled}, \helpref{wxDC::ClearCache}
+
 \membersection{wxDC::EndDoc}\label{wxdcenddoc}
 
 \func{void}{EndDoc}{\void}
diff --git a/docs/latex/wx/sysopt.tex b/docs/latex/wx/sysopt.tex
new file mode 100644
index 0000000000..b04265f49f
--- /dev/null
+++ b/docs/latex/wx/sysopt.tex
@@ -0,0 +1,89 @@
+\section{\class{wxSystemOptions}}\label{wxsystemoptions}
+
+wxSystemOptions stores option/value pairs that wxWindows itself or
+applications can use to alter behaviour at run-time. It can be
+used to optimize behaviour that doesn't deserve a distinct API,
+but is still important to be able to configure.
+
+These options are currently recognised by wxWindows:
+
+\twocolwidtha{7cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{{\bf Option}}{{\bf Value}}
+\twocolitem{no-maskblt}{1 to never use WIN32's MaskBlt function, 0 to allow it to be used where possible. Default: 0.
+
+In some circumstances the MaskBlt function can be slower than using the fallback code, especially if using
+DC cacheing. By default, MaskBlt will be used where it is implemented by the operating system and driver.
+}
+\end{twocollist}
+
+The compile-time option to include or exclude this functionality
+is wxUSE\_SYSTEM\_OPTIONS.
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+\wxheading{Include files}
+
+<wx/sysopt.h>
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSystemOptions::wxSystemOptions}
+
+\func{}{wxSystemOptions}{\void}
+
+Default constructor. You don't need to create an instance of wxSystemOptions
+since all of its functions are static.
+
+\membersection{wxSystemOptions::GetOption}\label{wxsystemoptionsgetoption}
+
+\constfunc{wxString}{GetOption}{\param{const wxString\&}{ name}}
+
+Gets an option. The function is case-insensitive to {\it name}.
+
+\wxheading{See also}
+
+\helpref{wxSystemOptions::SetOption}{wxsystemoptionssetoption},\rtfsp
+\helpref{wxSystemOptions::GetOptionInt}{wxsystemoptionsgetoptionint},\rtfsp
+\helpref{wxSystemOptions::HasOption}{wxsystemoptionshasoption}
+
+\membersection{wxSystemOptions::GetOptionInt}\label{wxsystemoptionsgetoptionint}
+
+\constfunc{int}{GetOptionInt}{\param{const wxString\&}{ name}}
+
+Gets an option as an integer. The function is case-insensitive to {\it name}.
+
+\wxheading{See also}
+
+\helpref{wxSystemOptions::SetOption}{wxsystemoptionssetoption},\rtfsp
+\helpref{wxSystemOptions::GetOption}{wxsystemoptionsgetoption},\rtfsp
+\helpref{wxSystemOptions::HasOption}{wxsystemoptionshasoption}
+
+\membersection{wxSystemOptions::HasOption}\label{wxsystemoptionshasoption}
+
+\constfunc{bool}{HasOption}{\param{const wxString\&}{ name}}
+
+Returns TRUE if the given option is present. The function is case-insensitive to {\it name}.
+
+\wxheading{See also}
+
+\helpref{wxSystemOptions::SetOption}{wxsystemoptionssetoption},\rtfsp
+\helpref{wxSystemOptions::GetOption}{wxsystemoptionsgetoption},\rtfsp
+\helpref{wxSystemOptions::GetOptionInt}{wxsystemoptionsgetoptionint}
+
+\membersection{wxSystemOptions::SetOption}\label{wxsystemoptionssetoption}
+
+\func{void}{SetOption}{\param{const wxString\&}{ name}, \param{const wxString\&}{ value}}
+
+\func{void}{SetOption}{\param{const wxString\&}{ name}, \param{int}{ value}}
+
+Sets an option. The function is case-insensitive to {\it name}.
+
+\wxheading{See also}
+
+\helpref{wxSystemOptions::GetOption}{wxsystemoptionsgetoption},\rtfsp
+\helpref{wxSystemOptions::GetOptionInt}{wxsystemoptionsgetoptionint},\rtfsp
+\helpref{wxSystemOptions::HasOption}{wxsystemoptionshasoption}
+
diff --git a/include/wx/dc.h b/include/wx/dc.h
index b856ef7f83..8dc21ff6f0 100644
--- a/include/wx/dc.h
+++ b/include/wx/dc.h
@@ -274,17 +274,17 @@ public:
 
     bool Blit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
               wxDC *source, wxCoord xsrc, wxCoord ysrc,
-              int rop = wxCOPY, bool useMask = FALSE)
+              int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1)
     {
         return DoBlit(xdest, ydest, width, height,
-                      source, xsrc, ysrc, rop, useMask);
+                      source, xsrc, ysrc, rop, useMask, xsrcMask, ysrcMask);
     }
     bool Blit(const wxPoint& destPt, const wxSize& sz,
               wxDC *source, const wxPoint& srcPt,
-              int rop = wxCOPY, bool useMask = FALSE)
+              int rop = wxCOPY, bool useMask = FALSE, const wxPoint& srcPtMask = wxPoint(-1, -1))
     {
         return DoBlit(destPt.x, destPt.y, sz.x, sz.y,
-                      source, srcPt.x, srcPt.y, rop, useMask);
+                      source, srcPt.x, srcPt.y, rop, useMask, srcPtMask.x, srcPtMask.y);
     }
 
 #if wxUSE_SPLINES
@@ -486,6 +486,16 @@ public:
     virtual void SetOptimization(bool WXUNUSED(opt)) { }
     virtual bool GetOptimization() { return FALSE; }
 
+    // Some platforms have a DC cache, which should be cleared
+    // at appropriate points such as after a series of DC operations.
+    // Put ClearCache in the wxDC implementation class, since it has to be
+    // static.
+    // static void ClearCache() ;
+#if wxUSE_DC_CACHEING
+    static void EnableCache(bool cacheing) { sm_cacheing = cacheing; }
+    static bool CacheEnabled() { return sm_cacheing ; }
+#endif
+
     // bounding box
     // ------------
 
@@ -624,7 +634,7 @@ protected:
     virtual bool DoBlit(wxCoord xdest, wxCoord ydest,
                         wxCoord width, wxCoord height,
                         wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                        int rop = wxCOPY, bool useMask = FALSE) = 0;
+                        int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1) = 0;
 
     virtual void DoGetSize(int *width, int *height) const = 0;
     virtual void DoGetSizeMM(int* width, int* height) const = 0;
@@ -688,6 +698,9 @@ protected:
     bool m_clipping:1;
     bool m_isInteractive:1;
     bool m_isBBoxValid:1;
+#if wxUSE_DC_CACHEING
+    static bool sm_cacheing;
+#endif
 
     // coordinate system variables
 
diff --git a/include/wx/dynarray.h b/include/wx/dynarray.h
index f7782817b5..7e064dfc0b 100644
--- a/include/wx/dynarray.h
+++ b/include/wx/dynarray.h
@@ -458,7 +458,7 @@ WX_DEFINE_EXPORTED_ARRAY(void *, wxArrayPtrVoid);
 //@}
 
 // -----------------------------------------------------------------------------
-// convinience macros
+// convenience macros
 // -----------------------------------------------------------------------------
 
 // append all element of one array to another one
diff --git a/include/wx/gtk/dcclient.h b/include/wx/gtk/dcclient.h
index e23af8e1cd..77331532da 100644
--- a/include/wx/gtk/dcclient.h
+++ b/include/wx/gtk/dcclient.h
@@ -69,7 +69,7 @@ protected:
 
     virtual bool DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
                          wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                         int logical_func = wxCOPY, bool useMask = FALSE );
+                         int logical_func = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1 );
 
     virtual void DoDrawText( const wxString &text, wxCoord x, wxCoord y );
     virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
diff --git a/include/wx/gtk1/dcclient.h b/include/wx/gtk1/dcclient.h
index e23af8e1cd..77331532da 100644
--- a/include/wx/gtk1/dcclient.h
+++ b/include/wx/gtk1/dcclient.h
@@ -69,7 +69,7 @@ protected:
 
     virtual bool DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
                          wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                         int logical_func = wxCOPY, bool useMask = FALSE );
+                         int logical_func = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1 );
 
     virtual void DoDrawText( const wxString &text, wxCoord x, wxCoord y );
     virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
diff --git a/include/wx/mac/dc.h b/include/wx/mac/dc.h
index b98087e5d7..fe4ebd4b7d 100644
--- a/include/wx/mac/dc.h
+++ b/include/wx/mac/dc.h
@@ -213,7 +213,7 @@ protected:
 
     virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
                         wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                        int rop = wxCOPY, bool useMask = FALSE);
+                        int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
 
     // this is gnarly - we can't even call this function DoSetClippingRegion()
     // because of virtual function hiding
diff --git a/include/wx/mac/setup.h b/include/wx/mac/setup.h
index 3cc43b9926..a9ca4ee1bc 100644
--- a/include/wx/mac/setup.h
+++ b/include/wx/mac/setup.h
@@ -365,6 +365,9 @@
 // wxMimeTypesManager class
 #define wxUSE_MIMETYPE 1
 
+// wxSystemOptions class
+#define wxUSE_SYSTEM_OPTIONS 1
+
 // ----------------------------------------------------------------------------
 // Individual GUI controls
 // ----------------------------------------------------------------------------
@@ -542,6 +545,9 @@
 // wxValidator class and related methods
 #define wxUSE_VALIDATORS    1
 
+// wxDC cacheing implementation
+#define wxUSE_DC_CACHEING 0
+
 // ----------------------------------------------------------------------------
 // common dialogs
 // ----------------------------------------------------------------------------
diff --git a/include/wx/mgl/dc.h b/include/wx/mgl/dc.h
index 578d46619e..5d4b1c1be1 100644
--- a/include/wx/mgl/dc.h
+++ b/include/wx/mgl/dc.h
@@ -198,7 +198,7 @@ protected:
 
     virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
                         wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                        int rop = wxCOPY, bool useMask = FALSE);
+                        int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
 
     // this is gnarly - we can't even call this function DoSetClippingRegion()
     // because of virtual function hiding
diff --git a/include/wx/motif/dcclient.h b/include/wx/motif/dcclient.h
index 40fdbbfa56..4ead5fd1c1 100644
--- a/include/wx/motif/dcclient.h
+++ b/include/wx/motif/dcclient.h
@@ -117,7 +117,7 @@ protected:
 
     virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
             wxDC *source, wxCoord xsrc, wxCoord ysrc,
-            int rop = wxCOPY, bool useMask = FALSE);
+            int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
 
     virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
     virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
diff --git a/include/wx/msw/dc.h b/include/wx/msw/dc.h
index 9acfd0cad0..50e310c902 100644
--- a/include/wx/msw/dc.h
+++ b/include/wx/msw/dc.h
@@ -71,6 +71,28 @@
 
 #define     wx_round(a)    (int)((a)+.5)
 
+#if wxUSE_DC_CACHEING
+/*
+ * Cached blitting, maintaining a cache
+ * of bitmaps required for transparent blitting
+ * instead of constant creation/deletion
+ */
+
+class wxDCCacheEntry: public wxObject
+{
+public:
+    wxDCCacheEntry(WXHBITMAP hBitmap, int w, int h, int depth);
+    wxDCCacheEntry(WXHDC hDC, int depth);
+    ~wxDCCacheEntry();
+
+    WXHBITMAP   m_bitmap;
+    WXHDC       m_dc;
+    int         m_width;
+    int         m_height;
+    int         m_depth;
+};
+#endif
+
 class WXDLLEXPORT wxDC : public wxDCBase
 {
 public:
@@ -141,6 +163,15 @@ public:
     // update the internal clip box variables
     void UpdateClipBox();
 
+#if wxUSE_DC_CACHEING
+    static wxDCCacheEntry* FindBitmapInCache(WXHDC hDC, int w, int h);
+    static wxDCCacheEntry* FindDCInCache(wxDCCacheEntry* notThis, WXHDC hDC);
+
+    static void AddToBitmapCache(wxDCCacheEntry* entry);
+    static void AddToDCCache(wxDCCacheEntry* entry);
+    static void ClearCache();
+#endif
+
 protected:
     virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
                              int style = wxFLOOD_SURFACE);
@@ -176,7 +207,7 @@ protected:
 
     virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
                         wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                        int rop = wxCOPY, bool useMask = FALSE);
+                        int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
 
     // this is gnarly - we can't even call this function DoSetClippingRegion()
     // because of virtual function hiding
@@ -226,6 +257,11 @@ protected:
     WXHFONT           m_oldFont;
     WXHPALETTE        m_oldPalette;
 
+#if wxUSE_DC_CACHEING
+    static wxList     sm_bitmapCache;
+    static wxList     sm_dcCache;
+#endif
+
     DECLARE_DYNAMIC_CLASS(wxDC)
 };
 
diff --git a/include/wx/msw/dcprint.h b/include/wx/msw/dcprint.h
index d9531b3f7d..245a6a49be 100644
--- a/include/wx/msw/dcprint.h
+++ b/include/wx/msw/dcprint.h
@@ -44,7 +44,7 @@ protected:
     virtual bool DoBlit(wxCoord xdest, wxCoord ydest,
                         wxCoord width, wxCoord height,
                         wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                        int rop = wxCOPY, bool useMask = FALSE);
+                        int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
 
     // init the dc
     void Init();
diff --git a/include/wx/msw/settings.h b/include/wx/msw/settings.h
index a940901740..6402bc29e5 100644
--- a/include/wx/msw/settings.h
+++ b/include/wx/msw/settings.h
@@ -33,15 +33,6 @@ public:
     // Get a system metric, e.g. scrollbar size
     static int GetSystemMetric(int index);
 
-    // User-customizable hints to wxWindows or associated libraries
-    // These could also be used to influence GetSystem... calls, indeed
-    // to implement SetSystemColour/Font/Metric
-
-    static void SetOption(const wxString& name, const wxString& value);
-    static void SetOption(const wxString& name, int value);
-    static wxString GetOption(const wxString& name) ;
-    static int GetOptionInt(const wxString& name) ;
-    static bool HasOption(const wxString& name) ;
 };
 
 #endif
diff --git a/include/wx/msw/setup0.h b/include/wx/msw/setup0.h
index 3515b96c27..d398e60385 100644
--- a/include/wx/msw/setup0.h
+++ b/include/wx/msw/setup0.h
@@ -383,6 +383,9 @@
 // wxMimeTypesManager class
 #define wxUSE_MIMETYPE 1
 
+// wxSystemOptions class
+#define wxUSE_SYSTEM_OPTIONS 1
+
 // ----------------------------------------------------------------------------
 // Individual GUI controls
 // ----------------------------------------------------------------------------
@@ -560,6 +563,9 @@
 // wxValidator class and related methods
 #define wxUSE_VALIDATORS 1
 
+// wxDC cacheing implementation
+#define wxUSE_DC_CACHEING 1
+
 // ----------------------------------------------------------------------------
 // common dialogs
 // ----------------------------------------------------------------------------
diff --git a/include/wx/os2/dc.h b/include/wx/os2/dc.h
index 85d37c6593..26c20594f7 100644
--- a/include/wx/os2/dc.h
+++ b/include/wx/os2/dc.h
@@ -250,6 +250,8 @@ protected:
                         ,wxCoord vYsrc
                         ,int     nRop = wxCOPY
                         ,bool    bUseMask = FALSE
+                        ,wxCoord xsrcMask = -1
+                        ,wxCoord ysrcMask = -1
                        );
 
     virtual void DoSetClippingRegionAsRegion(const wxRegion& rRegion);
diff --git a/include/wx/os2/dcprint.h b/include/wx/os2/dcprint.h
index d924f0550a..fef20ef347 100644
--- a/include/wx/os2/dcprint.h
+++ b/include/wx/os2/dcprint.h
@@ -52,6 +52,8 @@ protected:
                         ,wxCoord vYsrc
                         ,int     nRop = wxCOPY
                         ,bool    bUseMask = FALSE
+                        ,wxCoord xsrcMask = -1
+                        ,wxCoord ysrcMask = -1
                        );
 
     // init the dc
diff --git a/include/wx/sysopt.h b/include/wx/sysopt.h
new file mode 100644
index 0000000000..efc394e9c6
--- /dev/null
+++ b/include/wx/sysopt.h
@@ -0,0 +1,44 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        sysopt.h
+// Purpose:     wxSystemOptions
+// Author:      Julian Smart
+// Modified by:
+// Created:     2001-07-10
+// RCS-ID:      $Id$
+// Copyright:   (c) Julian Smart
+// Licence:   	wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_SYSOPT_H_
+#define _WX_SYSOPT_H_
+
+#include "wx/object.h"
+
+#if wxUSE_SYSTEM_OPTIONS
+
+// ----------------------------------------------------------------------------
+// Enables an application to influence the wxWindows implementation
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxSystemOptions : public wxObject
+{
+public:
+    wxSystemOptions() { }
+
+    // User-customizable hints to wxWindows or associated libraries
+    // These could also be used to influence GetSystem... calls, indeed
+    // to implement SetSystemColour/Font/Metric
+
+    static void SetOption(const wxString& name, const wxString& value);
+    static void SetOption(const wxString& name, int value);
+    static wxString GetOption(const wxString& name) ;
+    static int GetOptionInt(const wxString& name) ;
+    static bool HasOption(const wxString& name) ;
+};
+
+#endif
+
+
+#endif
+    // _WX_SYSOPT_H_
+
diff --git a/include/wx/univ/setup.h b/include/wx/univ/setup.h
index 462c01354e..85a6470a80 100644
--- a/include/wx/univ/setup.h
+++ b/include/wx/univ/setup.h
@@ -71,6 +71,7 @@
 #define wxUSE_FONTMAP 0
 #define wxUSE_MIMETYPE 0
 #define wxUSE_IMAGE        1
+#define wxUSE_SYSTEM_OPTIONS 1
 
 #define wxUSE_CONTROLS     1
 #define wxUSE_POPUPWIN     1
@@ -107,6 +108,7 @@
 #define wxUSE_GRID         0
 #define wxUSE_NEW_GRID     0
 #define wxUSE_VALIDATORS 0
+#define wxUSE_DC_CACHEING 0
 #define wxUSE_ACCEL 1
 #define wxUSE_GENERIC_DIALOGS_IN_MSW 0
 #define wxUSE_COMMON_DIALOGS 0
@@ -221,6 +223,7 @@
 #define wxUSE_FONTMAP 0
 #define wxUSE_MIMETYPE 0
 #define wxUSE_IMAGE        1
+#define wxUSE_SYSTEM_OPTIONS 1
 
 #define wxUSE_CONTROLS     1
 #define wxUSE_POPUPWIN     1
@@ -257,6 +260,7 @@
 #define wxUSE_GRID         0
 #define wxUSE_NEW_GRID     0
 #define wxUSE_VALIDATORS 0
+#define wxUSE_DC_CACHEING 1
 #define wxUSE_ACCEL 1
 #define wxUSE_GENERIC_DIALOGS_IN_MSW 0
 #define wxUSE_COMMON_DIALOGS 0
diff --git a/samples/dragimag/dragimag.cpp b/samples/dragimag/dragimag.cpp
index 7be138f0c1..43a115629f 100644
--- a/samples/dragimag/dragimag.cpp
+++ b/samples/dragimag/dragimag.cpp
@@ -83,7 +83,6 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
     PrepareDC( dc );
 
     DrawShapes(dc);
-
 }
 
 void MyCanvas::OnEraseBackground(wxEraseEvent& event)
@@ -102,6 +101,9 @@ void MyCanvas::OnEraseBackground(wxEraseEvent& event)
             wxClientDC dc(this);
             wxGetApp().TileBitmap(rect, dc, wxGetApp().GetBackgroundBitmap());
         }
+#if wxUSE_DC_CACHEING
+        wxDC::ClearCache();
+#endif
     }
     else
         event.Skip(); // The official way of doing it
@@ -279,6 +281,9 @@ void MyCanvas::DrawShapes(wxDC& dc)
           shape->Draw(dc);
         node = node->Next();
     }
+#if wxUSE_DC_CACHEING
+    wxDC::ClearCache();
+#endif
 }
 
 void MyCanvas::EraseShape(DragShape* shape, wxDC& dc)
@@ -320,7 +325,6 @@ DragShape* MyCanvas::FindShape(const wxPoint& pt) const
 }
 
 // MyFrame
-
 IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
 
 BEGIN_EVENT_TABLE(MyFrame,wxFrame)
@@ -381,13 +385,18 @@ bool MyApp::OnInit()
     wxImage::AddHandler( new wxPNGHandler );
 #endif
 
+    // The DC cache is an efficiency measure to be used
+    // when a lot of masked blitting is done
+#if wxUSE_DC_CACHEING
+    wxDC::EnableCache(TRUE);
+#endif
+
     wxImage image;
     if (image.LoadFile("backgrnd.png", wxBITMAP_TYPE_PNG))
     {
         m_background = image.ConvertToBitmap();
     }
 
-
     MyFrame *frame = new MyFrame();
 
     wxString rootName("shape0");
@@ -434,6 +443,14 @@ bool MyApp::OnInit()
     return TRUE;
 }
 
+int MyApp::OnExit()
+{
+#if wxUSE_DC_CACHEING
+    wxDC::ClearCache();
+#endif
+    return 0;
+}
+
 bool MyApp::TileBitmap(const wxRect& rect, wxDC& dc, wxBitmap& bitmap)
 {
     int w = bitmap.GetWidth();
diff --git a/samples/dragimag/dragimag.h b/samples/dragimag/dragimag.h
index bba436184e..61958342f2 100644
--- a/samples/dragimag/dragimag.h
+++ b/samples/dragimag/dragimag.h
@@ -46,6 +46,7 @@ class MyApp: public wxApp
 public:
     MyApp();
     virtual bool OnInit();
+    virtual int OnExit();
 
 //// Operations
 
diff --git a/src/common/dcbase.cpp b/src/common/dcbase.cpp
index a0214a5cff..ae54f14f91 100644
--- a/src/common/dcbase.cpp
+++ b/src/common/dcbase.cpp
@@ -32,6 +32,8 @@
 
 #include <math.h>
 
+bool wxDCBase::sm_cacheing = FALSE;
+
 // ============================================================================
 // implementation
 // ============================================================================
diff --git a/src/common/sysopt.cpp b/src/common/sysopt.cpp
new file mode 100644
index 0000000000..c8d4539f37
--- /dev/null
+++ b/src/common/sysopt.cpp
@@ -0,0 +1,133 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        common/sysopt.cpp
+// Purpose:     wxSystemOptions
+// Author:      Julian Smart
+// Modified by:
+// Created:     2001-07-10
+// RCS-ID:      $Id$
+// Copyright:   (c) Julian Smart
+// Licence:   	wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ---------------------------------------------------------------------------
+// headers
+// ---------------------------------------------------------------------------
+
+#ifdef __GNUG__
+    #pragma implementation "sysopt.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#if defined(__BORLANDC__)
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/list.h"
+#endif
+
+#if wxUSE_SYSTEM_OPTIONS
+
+#include "wx/string.h"
+#include "wx/sysopt.h"
+#include "wx/module.h"
+
+// ----------------------------------------------------------------------------
+// private classes
+// ----------------------------------------------------------------------------
+
+// the module which is used to clean up wxSystemOptions data (this is a
+// singleton class so it can't be done in the dtor)
+class wxSystemOptionsModule : public wxModule
+{
+    friend class wxSystemOptions;
+public:
+    virtual bool OnInit();
+    virtual void OnExit();
+
+private:
+    DECLARE_DYNAMIC_CLASS(wxSystemOptionsModule)
+
+    static wxArrayString   sm_optionNames;
+    static wxArrayString   sm_optionValues;
+};
+
+// ===========================================================================
+// implementation
+// ===========================================================================
+
+// ----------------------------------------------------------------------------
+// wxSystemOptionsModule
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxSystemOptionsModule, wxModule)
+
+wxArrayString wxSystemOptionsModule::sm_optionNames;
+wxArrayString wxSystemOptionsModule::sm_optionValues;
+
+bool wxSystemOptionsModule::OnInit()
+{
+    return TRUE;
+}
+
+void wxSystemOptionsModule::OnExit()
+{
+    sm_optionNames.Clear();
+    sm_optionValues.Clear();
+}
+
+// ----------------------------------------------------------------------------
+// wxSystemOptions
+// ----------------------------------------------------------------------------
+
+// Option functions (arbitrary name/value mapping)
+void wxSystemOptions::SetOption(const wxString& name, const wxString& value)
+{
+    int idx = wxSystemOptionsModule::sm_optionNames.Index(name, FALSE);
+    if (idx == wxNOT_FOUND)
+    {
+        wxSystemOptionsModule::sm_optionNames.Add(name);
+        wxSystemOptionsModule::sm_optionValues.Add(value);
+    }
+    else
+    {
+        wxSystemOptionsModule::sm_optionNames[idx] = name;
+        wxSystemOptionsModule::sm_optionValues[idx] = value;
+    }
+}
+
+void wxSystemOptions::SetOption(const wxString& name, int value)
+{
+    wxString valStr;
+    valStr.Printf(wxT("%d"), value);
+    SetOption(name, valStr);
+}
+
+wxString wxSystemOptions::GetOption(const wxString& name)
+{
+    int idx = wxSystemOptionsModule::sm_optionNames.Index(name, FALSE);
+    if (idx == wxNOT_FOUND)
+        return wxEmptyString;
+    else
+        return wxSystemOptionsModule::sm_optionValues[idx];
+}
+
+int wxSystemOptions::GetOptionInt(const wxString& name)
+{
+    return wxAtoi(GetOption(name));
+}
+
+bool wxSystemOptions::HasOption(const wxString& name)
+{
+    return (wxSystemOptionsModule::sm_optionNames.Index(name, FALSE) != wxNOT_FOUND);
+}
+
+#endif
+    // wxUSE_SYSTEM_OPTIONS
+
diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp
index 8a507fb23a..f318b34c92 100644
--- a/src/gtk/dcclient.cpp
+++ b/src/gtk/dcclient.cpp
@@ -1090,7 +1090,8 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
                          wxDC *source,
                          wxCoord xsrc, wxCoord ysrc,
                          int logical_func,
-                         bool useMask )
+                         bool useMask,
+                         wxCoord xsrcMask, wxCoord ysrcMask )
 {
    /* this is the nth try to get this utterly useless function to
       work. it now completely ignores the scaling or translation
@@ -1115,6 +1116,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
     bool use_bitmap_method = FALSE;
     bool is_mono = FALSE;
 
+    /* TODO: use the mask origin when drawing transparently */
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+
     if (srcDC->m_isMemDC)
     {
         if (!memDC->m_selected.Ok()) return FALSE;
diff --git a/src/gtk/files.lst b/src/gtk/files.lst
index 537b5badb1..1238199a31 100644
--- a/src/gtk/files.lst
+++ b/src/gtk/files.lst
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 20:23, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE GTK.T!
 ALL_SOURCES = \
 		generic/accel.cpp \
@@ -138,6 +138,7 @@ ALL_SOURCES = \
 		common/strconv.cpp \
 		common/stream.cpp \
 		common/string.cpp \
+		common/sysopt.cpp \
 		common/tbarbase.cpp \
 		common/textcmn.cpp \
 		common/textfile.cpp \
@@ -180,6 +181,7 @@ ALL_SOURCES = \
 		gtk/dcscreen.cpp \
 		gtk/dialog.cpp \
 		gtk/dnd.cpp \
+		gtk/evtloop.cpp \
 		gtk/font.cpp \
 		gtk/fontdlg.cpp \
 		gtk/frame.cpp \
@@ -341,7 +343,6 @@ ALL_HEADERS = \
 		helpchm.h \
 		helphtml.h \
 		helpwin.h \
-		helpxlp.h \
 		icon.h \
 		imagbmp.h \
 		image.h \
@@ -388,6 +389,7 @@ ALL_HEADERS = \
 		panel.h \
 		paper.h \
 		pen.h \
+		popupwin.h \
 		print.h \
 		printdlg.h \
 		prntbase.h \
@@ -417,6 +419,7 @@ ALL_HEADERS = \
 		spinctrl.h \
 		splash.h \
 		splitter.h \
+		stack.h \
 		statbmp.h \
 		statbox.h \
 		statline.h \
@@ -425,6 +428,7 @@ ALL_HEADERS = \
 		strconv.h \
 		stream.h \
 		string.h \
+		sysopt.h \
 		tab.h \
 		tabctrl.h \
 		taskbar.h \
@@ -452,6 +456,7 @@ ALL_HEADERS = \
 		validate.h \
 		valtext.h \
 		variant.h \
+		vector.h \
 		version.h \
 		wave.h \
 		wfstream.h \
@@ -507,6 +512,7 @@ ALL_HEADERS = \
 		gtk/minifram.h \
 		gtk/notebook.h \
 		gtk/pen.h \
+		gtk/popupwin.h \
 		gtk/radiobox.h \
 		gtk/radiobut.h \
 		gtk/region.h \
@@ -546,7 +552,6 @@ ALL_HEADERS = \
 		generic/helpext.h \
 		generic/helphtml.h \
 		generic/helpwxht.h \
-		generic/helpxlp.h \
 		generic/imaglist.h \
 		generic/laywin.h \
 		generic/listctrl.h \
@@ -681,6 +686,7 @@ COMMONOBJS = \
 		strconv.o \
 		stream.o \
 		string.o \
+		sysopt.o \
 		tbarbase.o \
 		textcmn.o \
 		textfile.o \
@@ -796,6 +802,7 @@ COMMONDEPS = \
 		strconv.d \
 		stream.d \
 		string.d \
+		sysopt.d \
 		tbarbase.d \
 		textcmn.d \
 		textfile.d \
@@ -936,6 +943,7 @@ GUIOBJS = \
 		dcscreen.o \
 		dialog.o \
 		dnd.o \
+		evtloop.o \
 		font.o \
 		fontdlg.o \
 		frame.o \
@@ -997,6 +1005,7 @@ GUIDEPS = \
 		dcscreen.d \
 		dialog.d \
 		dnd.d \
+		evtloop.d \
 		font.d \
 		fontdlg.d \
 		frame.d \
@@ -1043,6 +1052,7 @@ GUI_LOWLEVEL_OBJS = \
 		choice.o \
 		clipbrd.o \
 		colour.o \
+		combobox.o \
 		cursor.o \
 		data.o \
 		dataobj.o \
@@ -1052,6 +1062,7 @@ GUI_LOWLEVEL_OBJS = \
 		dcscreen.o \
 		dialog.o \
 		dnd.o \
+		evtloop.o \
 		font.o \
 		frame.o \
 		gdiobj.o \
@@ -1059,7 +1070,6 @@ GUI_LOWLEVEL_OBJS = \
 		icon.o \
 		main.o \
 		pen.o \
-		popupwin.o \
 		region.o \
 		settings.o \
 		timer.o \
@@ -1075,6 +1085,7 @@ GUI_LOWLEVEL_DEPS = \
 		choice.d \
 		clipbrd.d \
 		colour.d \
+		combobox.d \
 		cursor.d \
 		data.d \
 		dataobj.d \
@@ -1084,6 +1095,7 @@ GUI_LOWLEVEL_DEPS = \
 		dcscreen.d \
 		dialog.d \
 		dnd.d \
+		evtloop.d \
 		font.d \
 		frame.d \
 		gdiobj.d \
@@ -1091,7 +1103,6 @@ GUI_LOWLEVEL_DEPS = \
 		icon.d \
 		main.d \
 		pen.d \
-		popupwin.d \
 		region.d \
 		settings.d \
 		timer.d \
diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp
index 8a507fb23a..f318b34c92 100644
--- a/src/gtk1/dcclient.cpp
+++ b/src/gtk1/dcclient.cpp
@@ -1090,7 +1090,8 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
                          wxDC *source,
                          wxCoord xsrc, wxCoord ysrc,
                          int logical_func,
-                         bool useMask )
+                         bool useMask,
+                         wxCoord xsrcMask, wxCoord ysrcMask )
 {
    /* this is the nth try to get this utterly useless function to
       work. it now completely ignores the scaling or translation
@@ -1115,6 +1116,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
     bool use_bitmap_method = FALSE;
     bool is_mono = FALSE;
 
+    /* TODO: use the mask origin when drawing transparently */
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+
     if (srcDC->m_isMemDC)
     {
         if (!memDC->m_selected.Ok()) return FALSE;
diff --git a/src/gtk1/files.lst b/src/gtk1/files.lst
index 537b5badb1..1238199a31 100644
--- a/src/gtk1/files.lst
+++ b/src/gtk1/files.lst
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 20:23, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE GTK.T!
 ALL_SOURCES = \
 		generic/accel.cpp \
@@ -138,6 +138,7 @@ ALL_SOURCES = \
 		common/strconv.cpp \
 		common/stream.cpp \
 		common/string.cpp \
+		common/sysopt.cpp \
 		common/tbarbase.cpp \
 		common/textcmn.cpp \
 		common/textfile.cpp \
@@ -180,6 +181,7 @@ ALL_SOURCES = \
 		gtk/dcscreen.cpp \
 		gtk/dialog.cpp \
 		gtk/dnd.cpp \
+		gtk/evtloop.cpp \
 		gtk/font.cpp \
 		gtk/fontdlg.cpp \
 		gtk/frame.cpp \
@@ -341,7 +343,6 @@ ALL_HEADERS = \
 		helpchm.h \
 		helphtml.h \
 		helpwin.h \
-		helpxlp.h \
 		icon.h \
 		imagbmp.h \
 		image.h \
@@ -388,6 +389,7 @@ ALL_HEADERS = \
 		panel.h \
 		paper.h \
 		pen.h \
+		popupwin.h \
 		print.h \
 		printdlg.h \
 		prntbase.h \
@@ -417,6 +419,7 @@ ALL_HEADERS = \
 		spinctrl.h \
 		splash.h \
 		splitter.h \
+		stack.h \
 		statbmp.h \
 		statbox.h \
 		statline.h \
@@ -425,6 +428,7 @@ ALL_HEADERS = \
 		strconv.h \
 		stream.h \
 		string.h \
+		sysopt.h \
 		tab.h \
 		tabctrl.h \
 		taskbar.h \
@@ -452,6 +456,7 @@ ALL_HEADERS = \
 		validate.h \
 		valtext.h \
 		variant.h \
+		vector.h \
 		version.h \
 		wave.h \
 		wfstream.h \
@@ -507,6 +512,7 @@ ALL_HEADERS = \
 		gtk/minifram.h \
 		gtk/notebook.h \
 		gtk/pen.h \
+		gtk/popupwin.h \
 		gtk/radiobox.h \
 		gtk/radiobut.h \
 		gtk/region.h \
@@ -546,7 +552,6 @@ ALL_HEADERS = \
 		generic/helpext.h \
 		generic/helphtml.h \
 		generic/helpwxht.h \
-		generic/helpxlp.h \
 		generic/imaglist.h \
 		generic/laywin.h \
 		generic/listctrl.h \
@@ -681,6 +686,7 @@ COMMONOBJS = \
 		strconv.o \
 		stream.o \
 		string.o \
+		sysopt.o \
 		tbarbase.o \
 		textcmn.o \
 		textfile.o \
@@ -796,6 +802,7 @@ COMMONDEPS = \
 		strconv.d \
 		stream.d \
 		string.d \
+		sysopt.d \
 		tbarbase.d \
 		textcmn.d \
 		textfile.d \
@@ -936,6 +943,7 @@ GUIOBJS = \
 		dcscreen.o \
 		dialog.o \
 		dnd.o \
+		evtloop.o \
 		font.o \
 		fontdlg.o \
 		frame.o \
@@ -997,6 +1005,7 @@ GUIDEPS = \
 		dcscreen.d \
 		dialog.d \
 		dnd.d \
+		evtloop.d \
 		font.d \
 		fontdlg.d \
 		frame.d \
@@ -1043,6 +1052,7 @@ GUI_LOWLEVEL_OBJS = \
 		choice.o \
 		clipbrd.o \
 		colour.o \
+		combobox.o \
 		cursor.o \
 		data.o \
 		dataobj.o \
@@ -1052,6 +1062,7 @@ GUI_LOWLEVEL_OBJS = \
 		dcscreen.o \
 		dialog.o \
 		dnd.o \
+		evtloop.o \
 		font.o \
 		frame.o \
 		gdiobj.o \
@@ -1059,7 +1070,6 @@ GUI_LOWLEVEL_OBJS = \
 		icon.o \
 		main.o \
 		pen.o \
-		popupwin.o \
 		region.o \
 		settings.o \
 		timer.o \
@@ -1075,6 +1085,7 @@ GUI_LOWLEVEL_DEPS = \
 		choice.d \
 		clipbrd.d \
 		colour.d \
+		combobox.d \
 		cursor.d \
 		data.d \
 		dataobj.d \
@@ -1084,6 +1095,7 @@ GUI_LOWLEVEL_DEPS = \
 		dcscreen.d \
 		dialog.d \
 		dnd.d \
+		evtloop.d \
 		font.d \
 		frame.d \
 		gdiobj.d \
@@ -1091,7 +1103,6 @@ GUI_LOWLEVEL_DEPS = \
 		icon.d \
 		main.d \
 		pen.d \
-		popupwin.d \
 		region.d \
 		settings.d \
 		timer.d \
diff --git a/src/jpeg/JpegVC.dsp b/src/jpeg/JpegVC.dsp
index 9a9fbdc6fe..10e0a45259 100644
--- a/src/jpeg/JpegVC.dsp
+++ b/src/jpeg/JpegVC.dsp
@@ -8,12 +8,12 @@ CFG=jpeg - Win32 Debug
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,
 !MESSAGE use the Export Makefile command and run
 !MESSAGE 
-!MESSAGE NMAKE /f "jpeg.mak".
+!MESSAGE NMAKE /f "JpegVC.mak".
 !MESSAGE 
 !MESSAGE You can specify a configuration when running NMAKE
 !MESSAGE by defining the macro CFG on the command line. For example:
 !MESSAGE 
-!MESSAGE NMAKE /f "jpeg.mak" CFG="jpeg - Win32 Debug"
+!MESSAGE NMAKE /f "JpegVC.mak" CFG="jpeg - Win32 Debug"
 !MESSAGE 
 !MESSAGE Possible choices for configuration are:
 !MESSAGE 
@@ -23,8 +23,8 @@ CFG=jpeg - Win32 Debug
 
 # Begin Project
 # PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
+# PROP Scc_ProjName "JpegVC"
+# PROP Scc_LocalPath "."
 CPP=cl.exe
 RSC=rc.exe
 
diff --git a/src/mac/carbon/dc.cpp b/src/mac/carbon/dc.cpp
index acad87440d..f66cf27357 100644
--- a/src/mac/carbon/dc.cpp
+++ b/src/mac/carbon/dc.cpp
@@ -944,12 +944,19 @@ bool  wxDC::CanDrawBitmap(void) const
 
 
 bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
-                        wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask )
+                        wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask,
+                        wxCoord xsrcMask,  wxCoord ysrcMask )
 {
     wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit Illegal dc"));
     wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit  Illegal source DC"));
     wxMacPortSetter helper(this) ;
 
+    /* TODO: use the mask origin when drawing transparently */
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+
 	CGrafPtr			sourcePort = (CGrafPtr) source->m_macPort ;
 	PixMapHandle	bmappixels =  GetGWorldPixMap( sourcePort ) ; 
 	RGBColor	white = { 0xFFFF, 0xFFFF,0xFFFF} ;
diff --git a/src/mac/dc.cpp b/src/mac/dc.cpp
index acad87440d..f66cf27357 100644
--- a/src/mac/dc.cpp
+++ b/src/mac/dc.cpp
@@ -944,12 +944,19 @@ bool  wxDC::CanDrawBitmap(void) const
 
 
 bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
-                        wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask )
+                        wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask,
+                        wxCoord xsrcMask,  wxCoord ysrcMask )
 {
     wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit Illegal dc"));
     wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit  Illegal source DC"));
     wxMacPortSetter helper(this) ;
 
+    /* TODO: use the mask origin when drawing transparently */
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+
 	CGrafPtr			sourcePort = (CGrafPtr) source->m_macPort ;
 	PixMapHandle	bmappixels =  GetGWorldPixMap( sourcePort ) ; 
 	RGBColor	white = { 0xFFFF, 0xFFFF,0xFFFF} ;
diff --git a/src/mgl/dc.cpp b/src/mgl/dc.cpp
index ecaa40dc6a..e33904e99a 100644
--- a/src/mgl/dc.cpp
+++ b/src/mgl/dc.cpp
@@ -1387,7 +1387,8 @@ wxSize wxDC::GetPPI() const
 bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
                   wxCoord width, wxCoord height,
                   wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                  int rop, bool useMask)
+                  int rop, bool useMask,
+                  wxCoord xsrcMask, wxCoord ysrcMask)
 {
     wxCHECK_MSG( Ok(), FALSE, wxT("invalid dc") );
     wxCHECK_MSG( source, FALSE, wxT("invalid source dc") );
@@ -1396,6 +1397,17 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
     xsrc = source->LogicalToDeviceX(xsrc);
     ysrc = source->LogicalToDeviceY(ysrc);
 
+    /* TODO: use the mask origin when drawing transparently */
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+    else
+    {
+        xsrcMask = source->LogicalToDeviceX(xsrcMask);
+        ysrcMask = source->LogicalToDeviceY(ysrcMask);
+    }
+
     CalcBoundingBox(xdest, ydest);
     CalcBoundingBox(xdest + width, ydest + height);
 
diff --git a/src/motif/dcclient.cpp b/src/motif/dcclient.cpp
index 2af3787acc..f442f9ebca 100644
--- a/src/motif/dcclient.cpp
+++ b/src/motif/dcclient.cpp
@@ -871,7 +871,8 @@ void wxWindowDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y)
 
 // TODO: use scaled Blit e.g. as per John Price's implementation in Contrib/Utilities
 bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
-                         wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop, bool useMask )
+                         wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop, bool useMask,
+                         wxCoord xsrcMask, wxCoord ysrcMask )
 {
     wxCHECK_MSG( Ok(), FALSE, "invalid dc" );
 
@@ -894,6 +895,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
     double scaleX, scaleY;
     GetUserScale(& scaleX, & scaleY);
 
+    /* TODO: use the mask origin when drawing transparently */
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+
     // Sorry, can't scale masks just yet
     if (!useMask && (scaleX != 1.0 || scaleY != 1.0) && sourceDC->IsKindOf(CLASSINFO(wxMemoryDC)))
     {
diff --git a/src/motif/files.lst b/src/motif/files.lst
index 63dd6e5e98..48ec6741ea 100644
--- a/src/motif/files.lst
+++ b/src/motif/files.lst
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:33, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE MOTIF.T!
 ALL_SOURCES = \
 		generic/busyinfo.cpp \
@@ -17,7 +17,6 @@ ALL_SOURCES = \
 		generic/helpext.cpp \
 		generic/helphtml.cpp \
 		generic/helpwxht.cpp \
-		generic/helpxlp.cpp \
 		generic/imaglist.cpp \
 		generic/laywin.cpp \
 		generic/listctrl.cpp \
@@ -122,7 +121,6 @@ ALL_SOURCES = \
 		common/object.cpp \
 		common/objstrm.cpp \
 		common/paper.cpp \
-		common/popupcmn.cpp \
 		common/prntbase.cpp \
 		common/process.cpp \
 		common/protocol.cpp \
@@ -139,6 +137,7 @@ ALL_SOURCES = \
 		common/strconv.cpp \
 		common/stream.cpp \
 		common/string.cpp \
+		common/sysopt.cpp \
 		common/tbarbase.cpp \
 		common/textcmn.cpp \
 		common/textfile.cpp \
@@ -336,7 +335,6 @@ ALL_HEADERS = \
 		helpchm.h \
 		helphtml.h \
 		helpwin.h \
-		helpxlp.h \
 		icon.h \
 		imagbmp.h \
 		image.h \
@@ -383,6 +381,7 @@ ALL_HEADERS = \
 		panel.h \
 		paper.h \
 		pen.h \
+		popupwin.h \
 		print.h \
 		printdlg.h \
 		prntbase.h \
@@ -412,6 +411,7 @@ ALL_HEADERS = \
 		spinctrl.h \
 		splash.h \
 		splitter.h \
+		stack.h \
 		statbmp.h \
 		statbox.h \
 		statline.h \
@@ -420,6 +420,7 @@ ALL_HEADERS = \
 		strconv.h \
 		stream.h \
 		string.h \
+		sysopt.h \
 		tab.h \
 		tabctrl.h \
 		taskbar.h \
@@ -447,6 +448,7 @@ ALL_HEADERS = \
 		validate.h \
 		valtext.h \
 		variant.h \
+		vector.h \
 		version.h \
 		wave.h \
 		wfstream.h \
@@ -540,7 +542,6 @@ ALL_HEADERS = \
 		generic/helpext.h \
 		generic/helphtml.h \
 		generic/helpwxht.h \
-		generic/helpxlp.h \
 		generic/imaglist.h \
 		generic/laywin.h \
 		generic/listctrl.h \
@@ -659,7 +660,6 @@ COMMONOBJS = \
 		object.o \
 		objstrm.o \
 		paper.o \
-		popupcmn.o \
 		prntbase.o \
 		process.o \
 		protocol.o \
@@ -676,6 +676,7 @@ COMMONOBJS = \
 		strconv.o \
 		stream.o \
 		string.o \
+		sysopt.o \
 		tbarbase.o \
 		textcmn.o \
 		textfile.o \
@@ -775,7 +776,6 @@ COMMONDEPS = \
 		object.d \
 		objstrm.d \
 		paper.d \
-		popupcmn.d \
 		prntbase.d \
 		process.d \
 		protocol.d \
@@ -792,6 +792,7 @@ COMMONDEPS = \
 		strconv.d \
 		stream.d \
 		string.d \
+		sysopt.d \
 		tbarbase.d \
 		textcmn.d \
 		textfile.d \
@@ -831,7 +832,6 @@ GENERICOBJS = \
 		helpext.o \
 		helphtml.o \
 		helpwxht.o \
-		helpxlp.o \
 		imaglist.o \
 		laywin.o \
 		listctrl.o \
@@ -879,7 +879,6 @@ GENERICDEPS = \
 		helpext.d \
 		helphtml.d \
 		helpwxht.d \
-		helpxlp.d \
 		imaglist.d \
 		laywin.d \
 		listctrl.d \
diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp
index 1ed889f3f1..cae9668ac8 100644
--- a/src/msw/dc.cpp
+++ b/src/msw/dc.cpp
@@ -40,7 +40,7 @@
     #include "wx/icon.h"
 #endif
 
-#include "wx/settings.h"
+#include "wx/sysopt.h"
 #include "wx/dcprint.h"
 
 #include <string.h>
@@ -884,7 +884,9 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask
         // than the wxWindows fall-back implementation. So we need
         // to be able to switch this on and off at runtime.
         bool ok = FALSE;
-        if (wxSystemSettings::GetOptionInt(wxT("no-maskblt")) == 0)
+#if wxUSE_SYSTEM_OPTIONS
+        if (wxSystemOptions::GetOptionInt(wxT("no-maskblt")) == 0)
+#endif
         {
             HDC hdcMem = ::CreateCompatibleDC(GetHdc());
             ::SelectObject(hdcMem, GetHbitmapOf(bmp));
@@ -1609,7 +1611,8 @@ wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const
 bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
                   wxCoord width, wxCoord height,
                   wxDC *source, wxCoord xsrc, wxCoord ysrc,
-                  int rop, bool useMask)
+                  int rop, bool useMask,
+                  wxCoord xsrcMask, wxCoord ysrcMask)
 {
 #ifdef __WXMICROWIN__
     if (!GetHDC()) return FALSE;
@@ -1629,6 +1632,11 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
         }
     }
 
+    if (xsrcMask == -1 && ysrcMask == -1)
+    {
+        xsrcMask = xsrc; ysrcMask = ysrc;
+    }
+
     COLORREF old_textground = ::GetTextColor(GetHdc());
     COLORREF old_background = ::GetBkColor(GetHdc());
     if (m_textForegroundColour.Ok())
@@ -1677,11 +1685,13 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
         // On some systems, MaskBlt succeeds yet is much much slower
         // than the wxWindows fall-back implementation. So we need
         // to be able to switch this on and off at runtime.
-        if (wxSystemSettings::GetOptionInt(wxT("no-maskblt")) == 0)
+#if wxUSE_SYSTEM_OPTIONS
+        if (wxSystemOptions::GetOptionInt(wxT("no-maskblt")) == 0)
+#endif
         {
            success = ::MaskBlt(GetHdc(), xdest, ydest, width, height,
                             GetHdcOf(*source), xsrc, ysrc,
-                            (HBITMAP)mask->GetMaskBitmap(), xsrc, ysrc,
+                            (HBITMAP)mask->GetMaskBitmap(), xsrcMask, ysrcMask,
                             MAKEROP4(dwRop, DSTCOPY)) != 0;
         }
 
@@ -1689,13 +1699,35 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
 #endif // Win32
         {
             // Blit bitmap with mask
+            HDC dc_mask ;
+            HDC  dc_buffer ;
+            HBITMAP buffer_bmap ;
 
-            // create a temp buffer bitmap and DCs to access it and the mask
-            HDC dc_mask = ::CreateCompatibleDC(GetHdcOf(*source));
-            HDC dc_buffer = ::CreateCompatibleDC(GetHdc());
-            HBITMAP buffer_bmap = ::CreateCompatibleBitmap(GetHdc(), width, height);
-            ::SelectObject(dc_mask, (HBITMAP) mask->GetMaskBitmap());
-            ::SelectObject(dc_buffer, buffer_bmap);
+#if wxUSE_DC_CACHEING
+            if (CacheEnabled())
+            {
+                // create a temp buffer bitmap and DCs to access it and the mask
+                wxDCCacheEntry* dcCacheEntry1 = FindDCInCache(NULL, source->GetHDC());
+                dc_mask = (HDC) dcCacheEntry1->m_dc;
+
+                wxDCCacheEntry* dcCacheEntry2 = FindDCInCache(dcCacheEntry1, dest->GetHDC());
+                dc_buffer = (HDC) dcCacheEntry2->m_dc;
+
+                wxDCCacheEntry* bitmapCacheEntry = FindBitmapInCache(dest->GetHDC(),
+                    width, height);
+
+                buffer_bmap = (HBITMAP) bitmapCacheEntry->m_bitmap;
+            }
+            else
+#endif
+            {
+                // create a temp buffer bitmap and DCs to access it and the mask
+                dc_mask = ::CreateCompatibleDC(GetHdcOf(*source));
+                dc_buffer = ::CreateCompatibleDC(GetHdc());
+                buffer_bmap = ::CreateCompatibleBitmap(GetHdc(), width, height);
+                ::SelectObject(dc_mask, (HBITMAP) mask->GetMaskBitmap());
+                ::SelectObject(dc_buffer, buffer_bmap);
+            }
 
             // copy dest to buffer
             if ( !::BitBlt(dc_buffer, 0, 0, (int)width, (int)height,
@@ -1715,7 +1747,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
             COLORREF prevBkCol = ::SetBkColor(GetHdc(), RGB(255, 255, 255));
             COLORREF prevCol = ::SetTextColor(GetHdc(), RGB(0, 0, 0));
             if ( !::BitBlt(dc_buffer, 0, 0, (int)width, (int)height,
-                           dc_mask, xsrc, ysrc, SRCAND) )
+                           dc_mask, xsrcMask, ysrcMask, SRCAND) )
             {
                 wxLogLastError(wxT("BitBlt"));
             }
@@ -1724,7 +1756,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
             ::SetBkColor(GetHdc(), RGB(0, 0, 0));
             ::SetTextColor(GetHdc(), RGB(255, 255, 255));
             if ( !::BitBlt(GetHdc(), xdest, ydest, (int)width, (int)height,
-                           dc_mask, xsrc, ysrc, SRCAND) )
+                           dc_mask, xsrcMask, ysrcMask, SRCAND) )
             {
                 wxLogLastError(wxT("BitBlt"));
             }
@@ -1742,10 +1774,16 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
 
             // tidy up temporary DCs and bitmap
             ::SelectObject(dc_mask, 0);
-            ::DeleteDC(dc_mask);
             ::SelectObject(dc_buffer, 0);
-            ::DeleteDC(dc_buffer);
-            ::DeleteObject(buffer_bmap);
+
+#if wxUSE_DC_CACHEING
+            if (!CacheEnabled())
+#endif
+            {
+                ::DeleteDC(dc_mask);
+                ::DeleteDC(dc_buffer);
+                ::DeleteObject(buffer_bmap);
+            }
         }
     }
     else // no mask, just BitBlt() it
@@ -1826,4 +1864,128 @@ void wxDC::DoGetTextExtent(const wxString& string, float *x, float *y,
 }
 #endif
 
+#if wxUSE_DC_CACHEING
+
+/*
+ * This implementation is a bit ugly and uses the old-fashioned wxList class, so I will
+ * improve it in due course, either using arrays, or simply storing pointers to one
+ * entry for the bitmap, and two for the DCs. -- JACS
+ */
+
+wxList wxDC::sm_bitmapCache;
+wxList wxDC::sm_dcCache;
+
+wxDCCacheEntry::wxDCCacheEntry(WXHBITMAP hBitmap, int w, int h, int depth)
+{
+    m_bitmap = hBitmap;
+    m_dc = 0;
+    m_width = w;
+    m_height = h;
+    m_depth = depth;
+}
+
+wxDCCacheEntry::wxDCCacheEntry(WXHDC hDC, int depth)
+{
+    m_bitmap = 0;
+    m_dc = hDC;
+    m_width = 0;
+    m_height = 0;
+    m_depth = depth;
+}
+
+wxDCCacheEntry::~wxDCCacheEntry()
+{
+    if (m_bitmap)
+        ::DeleteObject((HBITMAP) m_bitmap);
+    if (m_dc)
+        ::DeleteDC((HDC) m_dc);
+}
+
+wxDCCacheEntry* wxDC::FindBitmapInCache(WXHDC dc, int w, int h)
+{
+    int depth = ::GetDeviceCaps((HDC) dc, PLANES) * ::GetDeviceCaps((HDC) dc, BITSPIXEL);
+    wxNode* node = sm_bitmapCache.First();
+    while (node)
+    {
+        wxDCCacheEntry* entry = (wxDCCacheEntry*) node->Data();
+
+        if (entry->m_depth == depth)
+        {
+            if (entry->m_width < w || entry->m_height < h)
+            {
+                ::DeleteObject((HBITMAP) entry->m_bitmap);
+                entry->m_bitmap = (WXHBITMAP) ::CreateCompatibleBitmap((HDC) dc, w, h);
+                if ( !entry->m_bitmap)
+                {
+                    wxLogLastError(wxT("CreateCompatibleBitmap"));
+                }
+                entry->m_width = w; entry->m_height = h;
+                return entry;
+            }
+            return entry;
+        }
+
+        node = node->Next();
+    }
+    WXHBITMAP hBitmap = (WXHBITMAP) ::CreateCompatibleBitmap((HDC) dc, w, h);
+    if ( !hBitmap)
+    {
+        wxLogLastError(wxT("CreateCompatibleBitmap"));
+    }
+    wxDCCacheEntry* entry = new wxDCCacheEntry(hBitmap, w, h, depth);
+    AddToBitmapCache(entry);
+    return entry;
+}
+
+wxDCCacheEntry* wxDC::FindDCInCache(wxDCCacheEntry* notThis, WXHDC dc)
+{
+    int depth = ::GetDeviceCaps((HDC) dc, PLANES) * ::GetDeviceCaps((HDC) dc, BITSPIXEL);
+    wxNode* node = sm_dcCache.First();
+    while (node)
+    {
+        wxDCCacheEntry* entry = (wxDCCacheEntry*) node->Data();
+
+        // Don't return the same one as we already have
+        if (!notThis || (notThis != entry))
+        {
+            if (entry->m_depth == depth)
+            {
+                return entry;
+            }
+        }
+
+        node = node->Next();
+    }
+    WXHDC hDC = (WXHDC) ::CreateCompatibleDC((HDC) dc);
+    if ( !hDC)
+    {
+        wxLogLastError(wxT("CreateCompatibleDC"));
+    }
+    wxDCCacheEntry* entry = new wxDCCacheEntry(hDC, depth);
+    AddToDCCache(entry);
+    return entry;
+}
+
+void wxDC::AddToBitmapCache(wxDCCacheEntry* entry)
+{
+    sm_bitmapCache.Append(entry);
+}
+
+void wxDC::AddToDCCache(wxDCCacheEntry* entry)
+{
+    sm_dcCache.Append(entry);
+}
+
+void wxDC::ClearCache()
+{
+    sm_bitmapCache.DeleteContents(TRUE);
+    sm_bitmapCache.Clear();
+    sm_bitmapCache.DeleteContents(FALSE);
+    sm_dcCache.DeleteContents(TRUE);
+    sm_dcCache.Clear();
+    sm_dcCache.DeleteContents(FALSE);
+}
+
+#endif
+    // wxUSE_DC_CACHEING
 
diff --git a/src/msw/dcprint.cpp b/src/msw/dcprint.cpp
index 6394049218..76b581fa9f 100644
--- a/src/msw/dcprint.cpp
+++ b/src/msw/dcprint.cpp
@@ -474,7 +474,8 @@ bool wxPrinterDC::DoBlit(wxCoord xdest, wxCoord ydest,
                          wxCoord width, wxCoord height,
                          wxDC *source,
                          wxCoord xsrc, wxCoord ysrc,
-                         int WXUNUSED(rop), bool useMask)
+                         int WXUNUSED(rop), bool useMask,
+                         wxCoord xsrcMask, wxCoord ysrcMask)
 {
     bool success = TRUE;
 
diff --git a/src/msw/files.lst b/src/msw/files.lst
index 1f8f6b056d..c64a89ca40 100644
--- a/src/msw/files.lst
+++ b/src/msw/files.lst
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE MSW.T!
 ALL_SOURCES = \
 		generic/busyinfo.cpp \
@@ -105,7 +105,6 @@ ALL_SOURCES = \
 		common/object.cpp \
 		common/objstrm.cpp \
 		common/paper.cpp \
-		common/popupcmn.cpp \
 		common/prntbase.cpp \
 		common/process.cpp \
 		common/protocol.cpp \
@@ -122,6 +121,7 @@ ALL_SOURCES = \
 		common/strconv.cpp \
 		common/stream.cpp \
 		common/string.cpp \
+		common/sysopt.cpp \
 		common/tbarbase.cpp \
 		common/textcmn.cpp \
 		common/textfile.cpp \
@@ -179,6 +179,7 @@ ALL_SOURCES = \
 		msw/ole/dropsrc.cpp \
 		msw/ole/droptgt.cpp \
 		msw/enhmeta.cpp \
+		msw/evtloop.cpp \
 		msw/filedlg.cpp \
 		msw/font.cpp \
 		msw/fontdlg.cpp \
@@ -359,7 +360,6 @@ ALL_HEADERS = \
 		helpchm.h \
 		helphtml.h \
 		helpwin.h \
-		helpxlp.h \
 		icon.h \
 		imagbmp.h \
 		image.h \
@@ -406,6 +406,7 @@ ALL_HEADERS = \
 		panel.h \
 		paper.h \
 		pen.h \
+		popupwin.h \
 		print.h \
 		printdlg.h \
 		prntbase.h \
@@ -435,6 +436,7 @@ ALL_HEADERS = \
 		spinctrl.h \
 		splash.h \
 		splitter.h \
+		stack.h \
 		statbmp.h \
 		statbox.h \
 		statline.h \
@@ -443,6 +445,7 @@ ALL_HEADERS = \
 		strconv.h \
 		stream.h \
 		string.h \
+		sysopt.h \
 		tab.h \
 		tabctrl.h \
 		taskbar.h \
@@ -470,6 +473,7 @@ ALL_HEADERS = \
 		validate.h \
 		valtext.h \
 		variant.h \
+		vector.h \
 		version.h \
 		wave.h \
 		wfstream.h \
@@ -594,7 +598,6 @@ ALL_HEADERS = \
 		generic/helpext.h \
 		generic/helphtml.h \
 		generic/helpwxht.h \
-		generic/helpxlp.h \
 		generic/imaglist.h \
 		generic/laywin.h \
 		generic/listctrl.h \
@@ -713,7 +716,6 @@ COMMONOBJS = \
 		object.o \
 		objstrm.o \
 		paper.o \
-		popupcmn.o \
 		prntbase.o \
 		process.o \
 		protocol.o \
@@ -730,6 +732,7 @@ COMMONOBJS = \
 		strconv.o \
 		stream.o \
 		string.o \
+		sysopt.o \
 		tbarbase.o \
 		textcmn.o \
 		textfile.o \
@@ -829,7 +832,6 @@ COMMONDEPS = \
 		object.d \
 		objstrm.d \
 		paper.d \
-		popupcmn.d \
 		prntbase.d \
 		process.d \
 		protocol.d \
@@ -846,6 +848,7 @@ COMMONDEPS = \
 		strconv.d \
 		stream.d \
 		string.d \
+		sysopt.d \
 		tbarbase.d \
 		textcmn.d \
 		textfile.d \
@@ -963,6 +966,7 @@ GUIOBJS = \
 		dirdlg.o \
 		dragimag.o \
 		enhmeta.o \
+		evtloop.o \
 		filedlg.o \
 		font.o \
 		fontdlg.o \
@@ -1061,6 +1065,7 @@ GUIDEPS = \
 		dirdlg.d \
 		dragimag.d \
 		enhmeta.d \
+		evtloop.d \
 		filedlg.d \
 		font.d \
 		fontdlg.d \
diff --git a/src/msw/makebase.vc b/src/msw/makebase.vc
index 2479fa8dc7..8cdba7534f 100644
--- a/src/msw/makebase.vc
+++ b/src/msw/makebase.vc
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 16:24, 2001/03/13
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BASEVC.T!
 
 # File:     makebase.vc
@@ -68,6 +68,7 @@ COMMONOBJS = \
 		..\common\$D\datstrm.obj \
 		..\common\$D\db.obj \
 		..\common\$D\dbtable.obj \
+		..\common\$D\dircmn.obj \
 		..\common\$D\dynarray.obj \
 		..\common\$D\dynlib.obj \
 		..\common\$D\encconv.obj \
@@ -108,6 +109,7 @@ COMMONOBJS = \
 		..\common\$D\strconv.obj \
 		..\common\$D\stream.obj \
 		..\common\$D\string.obj \
+		..\common\$D\sysopt.obj \
 		..\common\$D\textfile.obj \
 		..\common\$D\timercmn.obj \
 		..\common\$D\tokenzr.obj \
@@ -130,6 +132,7 @@ MSWOBJS = ..\msw\$D\dde.obj \
 		..\msw\$D\mimetype.obj \
 		..\msw\$D\regconf.obj \
 		..\msw\$D\registry.obj \
+		..\msw\$D\snglinst.obj \
 		..\msw\$D\thread.obj \
 		..\msw\$D\utils.obj \
 		..\msw\$D\utilsexc.obj
diff --git a/src/msw/makefile.b32 b/src/msw/makefile.b32
index 04d933efbc..f2e8ca2f7b 100644
--- a/src/msw/makefile.b32
+++ b/src/msw/makefile.b32
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE B32.T!
 
 #
@@ -190,7 +190,6 @@ COMMONOBJS = \
 		$(MSWDIR)\objstrm.obj \
 		$(MSWDIR)\odbc.obj \
 		$(MSWDIR)\paper.obj \
-		$(MSWDIR)\popupcmn.obj \
 		$(MSWDIR)\prntbase.obj \
 		$(MSWDIR)\process.obj \
 		$(MSWDIR)\protocol.obj \
@@ -207,6 +206,7 @@ COMMONOBJS = \
 		$(MSWDIR)\strconv.obj \
 		$(MSWDIR)\stream.obj \
 		$(MSWDIR)\string.obj \
+		$(MSWDIR)\sysopt.obj \
 		$(MSWDIR)\tbarbase.obj \
 		$(MSWDIR)\textcmn.obj \
 		$(MSWDIR)\textfile.obj \
@@ -265,6 +265,7 @@ MSWOBJS = $(MSWDIR)\accel.obj \
 		$(MSWDIR)\dropsrc.obj \
 		$(MSWDIR)\droptgt.obj \
 		$(MSWDIR)\enhmeta.obj \
+		$(MSWDIR)\evtloop.obj \
 		$(MSWDIR)\filedlg.obj \
 		$(MSWDIR)\font.obj \
 		$(MSWDIR)\fontdlg.obj \
@@ -476,6 +477,8 @@ $(MSWDIR)\droptgt.obj: $(OLEDIR)\droptgt.$(SRCSUFF)
 
 $(MSWDIR)\enhmeta.obj: $(MSWDIR)\enhmeta.$(SRCSUFF)
 
+$(MSWDIR)\evtloop.obj: $(MSWDIR)\evtloop.$(SRCSUFF)
+
 $(MSWDIR)\filedlg.obj: $(MSWDIR)\filedlg.$(SRCSUFF)
 
 $(MSWDIR)\font.obj: $(MSWDIR)\font.$(SRCSUFF)
@@ -765,8 +768,6 @@ $(MSWDIR)\odbc.obj: $(COMMDIR)\odbc.$(SRCSUFF)
 
 $(MSWDIR)\paper.obj: $(COMMDIR)\paper.$(SRCSUFF)
 
-$(MSWDIR)\popupcmn.obj: $(COMMDIR)\popupcmn.$(SRCSUFF)
-
 $(MSWDIR)\prntbase.obj: $(COMMDIR)\prntbase.$(SRCSUFF)
 
 $(MSWDIR)\process.obj: $(COMMDIR)\process.$(SRCSUFF)
@@ -799,6 +800,8 @@ $(MSWDIR)\stream.obj: $(COMMDIR)\stream.$(SRCSUFF)
 
 $(MSWDIR)\string.obj: $(COMMDIR)\string.$(SRCSUFF)
 
+$(MSWDIR)\sysopt.obj: $(COMMDIR)\sysopt.$(SRCSUFF)
+
 $(MSWDIR)\tbarbase.obj: $(COMMDIR)\tbarbase.$(SRCSUFF)
 
 $(MSWDIR)\textcmn.obj: $(COMMDIR)\textcmn.$(SRCSUFF)
diff --git a/src/msw/makefile.bcc b/src/msw/makefile.bcc
index 6ca26a58c6..9aa77429ea 100644
--- a/src/msw/makefile.bcc
+++ b/src/msw/makefile.bcc
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BCC.T!
 
 #
@@ -168,7 +168,6 @@ COMMONOBJS = \
 		$(MSWDIR)\object.obj \
 		$(MSWDIR)\objstrm.obj \
 		$(MSWDIR)\paper.obj \
-		$(MSWDIR)\popupcmn.obj \
 		$(MSWDIR)\prntbase.obj \
 		$(MSWDIR)\quantize.obj \
 		$(MSWDIR)\radiocmn.obj \
@@ -178,6 +177,7 @@ COMMONOBJS = \
 		$(MSWDIR)\strconv.obj \
 		$(MSWDIR)\stream.obj \
 		$(MSWDIR)\string.obj \
+		$(MSWDIR)\sysopt.obj \
 		$(MSWDIR)\tbarbase.obj \
 		$(MSWDIR)\textcmn.obj \
 		$(MSWDIR)\textfile.obj \
@@ -230,6 +230,7 @@ MSWOBJS = $(MSWDIR)\accel.obj \
 		$(MSWDIR)\dibutils.obj \
 		$(MSWDIR)\dir.obj \
 		$(MSWDIR)\dragimag.obj \
+		$(MSWDIR)\evtloop.obj \
 		$(MSWDIR)\filedlg.obj \
 		$(MSWDIR)\font.obj \
 		$(MSWDIR)\fontdlg.obj \
@@ -376,6 +377,8 @@ $(MSWDIR)\dir.obj: $(MSWDIR)\dir.$(SRCSUFF)
 
 $(MSWDIR)\dragimag.obj: $(MSWDIR)\dragimag.$(SRCSUFF)
 
+$(MSWDIR)\evtloop.obj: $(MSWDIR)\evtloop.$(SRCSUFF)
+
 $(MSWDIR)\filedlg.obj: $(MSWDIR)\filedlg.$(SRCSUFF)
 
 $(MSWDIR)\font.obj: $(MSWDIR)\font.$(SRCSUFF)
@@ -615,8 +618,6 @@ $(MSWDIR)\objstrm.obj: $(COMMDIR)\objstrm.$(SRCSUFF)
 
 $(MSWDIR)\paper.obj: $(COMMDIR)\paper.$(SRCSUFF)
 
-$(MSWDIR)\popupcmn.obj: $(COMMDIR)\popupcmn.$(SRCSUFF)
-
 $(MSWDIR)\prntbase.obj: $(COMMDIR)\prntbase.$(SRCSUFF)
 
 $(MSWDIR)\quantize.obj: $(COMMDIR)\quantize.$(SRCSUFF)
@@ -635,6 +636,8 @@ $(MSWDIR)\stream.obj: $(COMMDIR)\stream.$(SRCSUFF)
 
 $(MSWDIR)\string.obj: $(COMMDIR)\string.$(SRCSUFF)
 
+$(MSWDIR)\sysopt.obj: $(COMMDIR)\sysopt.$(SRCSUFF)
+
 $(MSWDIR)\tbarbase.obj: $(COMMDIR)\tbarbase.$(SRCSUFF)
 
 $(MSWDIR)\textcmn.obj: $(COMMDIR)\textcmn.$(SRCSUFF)
diff --git a/src/msw/makefile.dos b/src/msw/makefile.dos
index 296a78c15d..be2f0ab3ea 100644
--- a/src/msw/makefile.dos
+++ b/src/msw/makefile.dos
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE DOS.T!
 
 #
@@ -155,7 +155,6 @@ COMMONOBJS1 = \
 
 COMMONOBJS2 = \
 		$(COMMDIR)\paper.obj \
-		$(COMMDIR)\popupcmn.obj \
 		$(COMMDIR)\prntbase.obj \
 		$(COMMDIR)\quantize.obj \
 		$(COMMDIR)\radiocmn.obj \
@@ -165,6 +164,7 @@ COMMONOBJS2 = \
 		$(COMMDIR)\strconv.obj \
 		$(COMMDIR)\stream.obj \
 		$(COMMDIR)\string.obj \
+		$(COMMDIR)\sysopt.obj \
 		$(COMMDIR)\tbarbase.obj \
 		$(COMMDIR)\textcmn.obj \
 		$(COMMDIR)\textfile.obj \
@@ -217,6 +217,7 @@ MSWOBJS1 = $(MSWDIR)\accel.obj \
 		$(MSWDIR)\dibutils.obj \
 		$(MSWDIR)\dir.obj \
 		$(MSWDIR)\dragimag.obj \
+		$(MSWDIR)\evtloop.obj \
 		$(MSWDIR)\filedlg.obj \
 		$(MSWDIR)\font.obj \
 		$(MSWDIR)\fontdlg.obj \
@@ -493,6 +494,11 @@ $(MSWDIR)/dragimag.obj:     $*.$(SRCSUFF)
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
 <<
 
+$(MSWDIR)/evtloop.obj:     $*.$(SRCSUFF)
+        cl @<<
+$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
+<<
+
 $(MSWDIR)/filedlg.obj:     $*.$(SRCSUFF)
         cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
@@ -1083,11 +1089,6 @@ $(COMMDIR)/paper.obj:     $*.$(SRCSUFF)
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
 <<
 
-$(COMMDIR)/popupcmn.obj:     $*.$(SRCSUFF)
-        cl @<<
-$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
-<<
-
 $(COMMDIR)/prntbase.obj:     $*.$(SRCSUFF)
         cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
@@ -1133,6 +1134,11 @@ $(COMMDIR)/string.obj:     $*.$(SRCSUFF)
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
 <<
 
+$(COMMDIR)/sysopt.obj:     $*.$(SRCSUFF)
+        cl @<<
+$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
+<<
+
 $(COMMDIR)/tbarbase.obj:     $*.$(SRCSUFF)
         cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
diff --git a/src/msw/makefile.g95 b/src/msw/makefile.g95
index c93eb1ae62..4c135f8b80 100644
--- a/src/msw/makefile.g95
+++ b/src/msw/makefile.g95
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE G95.T!
 
 #
@@ -174,7 +174,6 @@ COMMONOBJS  = \
 		$(COMMDIR)/object.$(OBJSUFF) \
 		$(COMMDIR)/objstrm.$(OBJSUFF) \
 		$(COMMDIR)/paper.$(OBJSUFF) \
-		$(COMMDIR)/popupcmn.$(OBJSUFF) \
 		$(COMMDIR)/prntbase.$(OBJSUFF) \
 		$(COMMDIR)/process.$(OBJSUFF) \
 		$(COMMDIR)/protocol.$(OBJSUFF) \
@@ -191,6 +190,7 @@ COMMONOBJS  = \
 		$(COMMDIR)/strconv.$(OBJSUFF) \
 		$(COMMDIR)/stream.$(OBJSUFF) \
 		$(COMMDIR)/string.$(OBJSUFF) \
+		$(COMMDIR)/sysopt.$(OBJSUFF) \
 		$(COMMDIR)/tbarbase.$(OBJSUFF) \
 		$(COMMDIR)/textcmn.$(OBJSUFF) \
 		$(COMMDIR)/textfile.$(OBJSUFF) \
@@ -267,6 +267,7 @@ MSWOBJS     = \
 		$(MSWDIR)/dir.$(OBJSUFF) \
 		$(MSWDIR)/dragimag.$(OBJSUFF) \
 		$(MSWDIR)/enhmeta.$(OBJSUFF) \
+		$(MSWDIR)/evtloop.$(OBJSUFF) \
 		$(MSWDIR)/filedlg.$(OBJSUFF) \
 		$(MSWDIR)/font.$(OBJSUFF) \
 		$(MSWDIR)/fontdlg.$(OBJSUFF) \
diff --git a/src/msw/makefile.sc b/src/msw/makefile.sc
index 63a52568e9..abb1bcdad0 100644
--- a/src/msw/makefile.sc
+++ b/src/msw/makefile.sc
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE SC.T!
 
 # Symantec C++ makefile for the msw objects
@@ -133,7 +133,6 @@ COMMONOBJS = \
 		$(COMMDIR)\objstrm.obj \
 		$(COMMDIR)\odbc.obj \
 		$(COMMDIR)\paper.obj \
-		$(COMMDIR)\popupcmn.obj \
 		$(COMMDIR)\prntbase.obj \
 		$(COMMDIR)\process.obj \
 		$(COMMDIR)\protocol.obj \
@@ -150,6 +149,7 @@ COMMONOBJS = \
 		$(COMMDIR)\strconv.obj \
 		$(COMMDIR)\stream.obj \
 		$(COMMDIR)\string.obj \
+		$(COMMDIR)\sysopt.obj \
 		$(COMMDIR)\tbarbase.obj \
 		$(COMMDIR)\textcmn.obj \
 		$(COMMDIR)\textfile.obj \
@@ -208,6 +208,7 @@ MSWOBJS = $(MSWDIR)\accel.obj \
 		$(MSWDIR)\ole\dropsrc.obj \
 		$(MSWDIR)\ole\droptgt.obj \
 		$(MSWDIR)\enhmeta.obj \
+		$(MSWDIR)\evtloop.obj \
 		$(MSWDIR)\filedlg.obj \
 		$(MSWDIR)\font.obj \
 		$(MSWDIR)\fontdlg.obj \
diff --git a/src/msw/makefile.vc b/src/msw/makefile.vc
index 889657ffd3..fdb858d135 100644
--- a/src/msw/makefile.vc
+++ b/src/msw/makefile.vc
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE VC.T!
 
 # File:     makefile.vc
@@ -50,326 +50,326 @@ HTMLDIR = $(WXDIR)\src\html
 JPEGDIR = $(WXDIR)\src\jpeg
 TIFFDIR = $(WXDIR)\src\tiff
 
-{..\generic}.cpp{..\generic\$D}.obj:
+{$(GENDIR)}.cpp{$(GENDIR)\$D}.obj:
 	cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $<
 <<
 
-{..\common}.cpp{..\common\$D}.obj:
+{$(COMMDIR)}.cpp{$(COMMDIR)\$D}.obj:
 	cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $<
 <<
 
-{..\common}.c{..\common\$D}.obj:
+{$(COMMDIR)}.c{$(COMMDIR)\$D}.obj:
 	cl @<<
 $(CPPFLAGS2) /Fo$@ /c /Tc $<
 <<
 
-{..\msw}.cpp{..\msw\$D}.obj:
+{$(MSWDIR)}.cpp{$(MSWDIR)\$D}.obj:
 	cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $<
 <<
 
-{..\msw}.c{..\msw\$D}.obj:
+{$(MSWDIR)}.c{$(MSWDIR)\$D}.obj:
 	cl @<<
 $(CPPFLAGS2) /Fo$@ /c /Tc $<
 <<
 
-{..\msw\ole}.cpp{..\msw\ole\$D}.obj:
+{$(OLEDIR)}.cpp{$(OLEDIR)\$D}.obj:
 	cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $<
 <<
 
-{..\html}.cpp{..\html\$D}.obj:
+{$(HTMLDIR)}.cpp{$(HTMLDIR)\$D}.obj:
 	cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $<
 <<
 
-GENERICOBJS= ..\generic\$D\busyinfo.obj \
-		..\generic\$D\calctrl.obj \
-		..\generic\$D\choicdgg.obj \
-		..\generic\$D\dirctrlg.obj \
-		..\generic\$D\dragimgg.obj \
-		..\generic\$D\grid.obj \
-		..\generic\$D\gridctrl.obj \
-		..\generic\$D\gridsel.obj \
-		..\generic\$D\laywin.obj \
-		..\generic\$D\logg.obj \
-		..\generic\$D\numdlgg.obj \
-		..\generic\$D\panelg.obj \
-		..\generic\$D\progdlgg.obj \
-		..\generic\$D\prop.obj \
-		..\generic\$D\propform.obj \
-		..\generic\$D\proplist.obj \
-		..\generic\$D\sashwin.obj \
-		..\generic\$D\scrlwing.obj \
-		..\generic\$D\spinctlg.obj \
-		..\generic\$D\splash.obj \
-		..\generic\$D\splitter.obj \
-		..\generic\$D\statusbr.obj \
-		..\generic\$D\tbarsmpl.obj \
-		..\generic\$D\textdlgg.obj \
-		..\generic\$D\tipdlg.obj \
-		..\generic\$D\tipwin.obj \
-		..\generic\$D\treectlg.obj \
-		..\generic\$D\treelay.obj \
-		..\generic\$D\wizard.obj
+GENERICOBJS= $(GENDIR)\$D\busyinfo.obj \
+		$(GENDIR)\$D\calctrl.obj \
+		$(GENDIR)\$D\choicdgg.obj \
+		$(GENDIR)\$D\dirctrlg.obj \
+		$(GENDIR)\$D\dragimgg.obj \
+		$(GENDIR)\$D\grid.obj \
+		$(GENDIR)\$D\gridctrl.obj \
+		$(GENDIR)\$D\gridsel.obj \
+		$(GENDIR)\$D\laywin.obj \
+		$(GENDIR)\$D\logg.obj \
+		$(GENDIR)\$D\numdlgg.obj \
+		$(GENDIR)\$D\panelg.obj \
+		$(GENDIR)\$D\progdlgg.obj \
+		$(GENDIR)\$D\prop.obj \
+		$(GENDIR)\$D\propform.obj \
+		$(GENDIR)\$D\proplist.obj \
+		$(GENDIR)\$D\sashwin.obj \
+		$(GENDIR)\$D\scrlwing.obj \
+		$(GENDIR)\$D\spinctlg.obj \
+		$(GENDIR)\$D\splash.obj \
+		$(GENDIR)\$D\splitter.obj \
+		$(GENDIR)\$D\statusbr.obj \
+		$(GENDIR)\$D\tbarsmpl.obj \
+		$(GENDIR)\$D\textdlgg.obj \
+		$(GENDIR)\$D\tipdlg.obj \
+		$(GENDIR)\$D\tipwin.obj \
+		$(GENDIR)\$D\treectlg.obj \
+		$(GENDIR)\$D\treelay.obj \
+		$(GENDIR)\$D\wizard.obj
 
 # These are generic things that don't need to be compiled on MSW,
 # but sometimes it's useful to do so for testing purposes.
-NONESSENTIALOBJS= ..\generic\$D\colrdlgg.obj \
-		..\generic\$D\dirdlgg.obj \
-		..\generic\$D\fontdlgg.obj \
-		..\generic\$D\helpext.obj \
-		..\generic\$D\helphtml.obj \
-		..\generic\$D\helpwxht.obj \
-		..\generic\$D\helpxlp.obj \
-		..\generic\$D\imaglist.obj \
-		..\generic\$D\listctrl.obj \
-		..\generic\$D\msgdlgg.obj \
-		..\generic\$D\notebook.obj \
-		..\generic\$D\tabg.obj
+NONESSENTIALOBJS= $(GENDIR)\$D\colrdlgg.obj \
+		$(GENDIR)\$D\dirdlgg.obj \
+		$(GENDIR)\$D\fontdlgg.obj \
+		$(GENDIR)\$D\helpext.obj \
+		$(GENDIR)\$D\helphtml.obj \
+		$(GENDIR)\$D\helpwxht.obj \
+		$(GENDIR)\$D\imaglist.obj \
+		$(GENDIR)\$D\listctrl.obj \
+		$(GENDIR)\$D\msgdlgg.obj \
+		$(GENDIR)\$D\notebook.obj \
+		$(GENDIR)\$D\tabg.obj
 
 COMMONOBJS = \
-		..\common\$D\y_tab.obj \
-		..\common\$D\appcmn.obj \
-		..\common\$D\choiccmn.obj \
-		..\common\$D\clipcmn.obj \
-		..\common\$D\cmdline.obj \
-		..\common\$D\cmdproc.obj \
-		..\common\$D\cmndata.obj \
-		..\common\$D\config.obj \
-		..\common\$D\cshelp.obj \
-		..\common\$D\ctrlcmn.obj \
-		..\common\$D\ctrlsub.obj \
-		..\common\$D\datetime.obj \
-		..\common\$D\datstrm.obj \
-		..\common\$D\db.obj \
-		..\common\$D\dbgrid.obj \
-		..\common\$D\dbtable.obj \
-		..\common\$D\dcbase.obj \
-		..\common\$D\dircmn.obj \
-		..\common\$D\dlgcmn.obj \
-		..\common\$D\dndcmn.obj \
-		..\common\$D\dobjcmn.obj \
-		..\common\$D\docmdi.obj \
-		..\common\$D\docview.obj \
-		..\common\$D\dynarray.obj \
-		..\common\$D\dynlib.obj \
-		..\common\$D\effects.obj \
-		..\common\$D\encconv.obj \
-		..\common\$D\event.obj \
-		..\common\$D\extended.obj \
-		..\common\$D\ffile.obj \
-		..\common\$D\file.obj \
-		..\common\$D\fileconf.obj \
-		..\common\$D\filefn.obj \
-		..\common\$D\filename.obj \
-		..\common\$D\filesys.obj \
-		..\common\$D\fontcmn.obj \
-		..\common\$D\fontmap.obj \
-		..\common\$D\framecmn.obj \
-		..\common\$D\fs_inet.obj \
-		..\common\$D\fs_mem.obj \
-		..\common\$D\fs_zip.obj \
-		..\common\$D\ftp.obj \
-		..\common\$D\gaugecmn.obj \
-		..\common\$D\gdicmn.obj \
-		..\common\$D\geometry.obj \
-		..\common\$D\gifdecod.obj \
-		..\common\$D\hash.obj \
-		..\common\$D\helpbase.obj \
-		..\common\$D\http.obj \
-		..\common\$D\imagall.obj \
-		..\common\$D\imagbmp.obj \
-		..\common\$D\image.obj \
-		..\common\$D\imaggif.obj \
-		..\common\$D\imagjpeg.obj \
-		..\common\$D\imagpcx.obj \
-		..\common\$D\imagpng.obj \
-		..\common\$D\imagpnm.obj \
-		..\common\$D\imagtiff.obj \
-		..\common\$D\imagxpm.obj \
-		..\common\$D\intl.obj \
-		..\common\$D\ipcbase.obj \
-		..\common\$D\layout.obj \
-		..\common\$D\lboxcmn.obj \
-		..\common\$D\list.obj \
-		..\common\$D\log.obj \
-		..\common\$D\longlong.obj \
-		..\common\$D\matrix.obj \
-		..\common\$D\memory.obj \
-		..\common\$D\menucmn.obj \
-		..\common\$D\mimecmn.obj \
-		..\common\$D\module.obj \
-		..\common\$D\mstream.obj \
-		..\common\$D\nbkbase.obj \
-		..\common\$D\object.obj \
-		..\common\$D\objstrm.obj \
-		..\common\$D\odbc.obj \
-		..\common\$D\paper.obj \
-		..\common\$D\popupcmn.obj \
-		..\common\$D\prntbase.obj \
-		..\common\$D\process.obj \
-		..\common\$D\protocol.obj \
-		..\common\$D\quantize.obj \
-		..\common\$D\radiocmn.obj \
-		..\common\$D\resource.obj \
-		..\common\$D\sckaddr.obj \
-		..\common\$D\sckfile.obj \
-		..\common\$D\sckipc.obj \
-		..\common\$D\sckstrm.obj \
-		..\common\$D\serbase.obj \
-		..\common\$D\sizer.obj \
-		..\common\$D\socket.obj \
-		..\common\$D\strconv.obj \
-		..\common\$D\stream.obj \
-		..\common\$D\string.obj \
-		..\common\$D\tbarbase.obj \
-		..\common\$D\textcmn.obj \
-		..\common\$D\textfile.obj \
-		..\common\$D\timercmn.obj \
-		..\common\$D\tokenzr.obj \
-		..\common\$D\treebase.obj \
-		..\common\$D\txtstrm.obj \
-		..\common\$D\unzip.obj \
-		..\common\$D\url.obj \
-		..\common\$D\utilscmn.obj \
-		..\common\$D\valgen.obj \
-		..\common\$D\validate.obj \
-		..\common\$D\valtext.obj \
-		..\common\$D\variant.obj \
-		..\common\$D\wfstream.obj \
-		..\common\$D\wincmn.obj \
-		..\common\$D\wxchar.obj \
-		..\common\$D\wxexpr.obj \
-		..\common\$D\xpmdecod.obj \
-		..\common\$D\zipstrm.obj \
-		..\common\$D\zstream.obj
-
-MSWOBJS = ..\msw\$D\accel.obj \
-		..\msw\$D\app.obj \
-		..\msw\ole\$D\automtn.obj \
-		..\msw\$D\bitmap.obj \
-		..\msw\$D\bmpbuttn.obj \
-		..\msw\$D\brush.obj \
-		..\msw\$D\button.obj \
-		..\msw\$D\caret.obj \
-		..\msw\$D\checkbox.obj \
-		..\msw\$D\checklst.obj \
-		..\msw\$D\choice.obj \
-		..\msw\$D\clipbrd.obj \
-		..\msw\$D\colordlg.obj \
-		..\msw\$D\colour.obj \
-		..\msw\$D\combobox.obj \
-		..\msw\$D\control.obj \
-		..\msw\$D\curico.obj \
-		..\msw\$D\cursor.obj \
-		..\msw\$D\data.obj \
-		..\msw\ole\$D\dataobj.obj \
-		..\msw\$D\dc.obj \
-		..\msw\$D\dcclient.obj \
-		..\msw\$D\dcmemory.obj \
-		..\msw\$D\dcprint.obj \
-		..\msw\$D\dcscreen.obj \
-		..\msw\$D\dde.obj \
-		..\msw\$D\dialog.obj \
-		..\msw\$D\dialup.obj \
-		..\msw\$D\dib.obj \
-		..\msw\$D\dibutils.obj \
-		..\msw\$D\dir.obj \
-		..\msw\$D\dirdlg.obj \
-		..\msw\$D\dragimag.obj \
-		..\msw\ole\$D\dropsrc.obj \
-		..\msw\ole\$D\droptgt.obj \
-		..\msw\$D\enhmeta.obj \
-		..\msw\$D\filedlg.obj \
-		..\msw\$D\font.obj \
-		..\msw\$D\fontdlg.obj \
-		..\msw\$D\fontenum.obj \
-		..\msw\$D\fontutil.obj \
-		..\msw\$D\frame.obj \
-		..\msw\$D\gauge95.obj \
-		..\msw\$D\gdiimage.obj \
-		..\msw\$D\gdiobj.obj \
-		..\msw\$D\glcanvas.obj \
-		..\msw\$D\gsocket.obj \
-		..\msw\$D\gsockmsw.obj \
-		..\msw\$D\helpchm.obj \
-		..\msw\$D\helpwin.obj \
-		..\msw\$D\icon.obj \
-		..\msw\$D\imaglist.obj \
-		..\msw\$D\joystick.obj \
-		..\msw\$D\listbox.obj \
-		..\msw\$D\listctrl.obj \
-		..\msw\$D\main.obj \
-		..\msw\$D\mdi.obj \
-		..\msw\$D\menu.obj \
-		..\msw\$D\menuitem.obj \
-		..\msw\$D\metafile.obj \
-		..\msw\$D\mimetype.obj \
-		..\msw\$D\minifram.obj \
-		..\msw\$D\msgdlg.obj \
-		..\msw\$D\nativdlg.obj \
-		..\msw\$D\notebook.obj \
-		..\msw\ole\$D\oleutils.obj \
-		..\msw\$D\ownerdrw.obj \
-		..\msw\$D\palette.obj \
-		..\msw\$D\pen.obj \
-		..\msw\$D\penwin.obj \
-		..\msw\$D\printdlg.obj \
-		..\msw\$D\printwin.obj \
-		..\msw\$D\radiobox.obj \
-		..\msw\$D\radiobut.obj \
-		..\msw\$D\regconf.obj \
-		..\msw\$D\region.obj \
-		..\msw\$D\registry.obj \
-		..\msw\$D\scrolbar.obj \
-		..\msw\$D\settings.obj \
-		..\msw\$D\slider95.obj \
-		..\msw\$D\snglinst.obj \
-		..\msw\$D\spinbutt.obj \
-		..\msw\$D\spinctrl.obj \
-		..\msw\$D\statbmp.obj \
-		..\msw\$D\statbox.obj \
-		..\msw\$D\statbr95.obj \
-		..\msw\$D\statline.obj \
-		..\msw\$D\stattext.obj \
-		..\msw\$D\tabctrl.obj \
-		..\msw\$D\taskbar.obj \
-		..\msw\$D\tbar95.obj \
-		..\msw\$D\textctrl.obj \
-		..\msw\$D\tglbtn.obj \
-		..\msw\$D\thread.obj \
-		..\msw\$D\timer.obj \
-		..\msw\$D\tooltip.obj \
-		..\msw\$D\treectrl.obj \
-		..\msw\$D\utils.obj \
-		..\msw\$D\utilsexc.obj \
-		..\msw\ole\$D\uuid.obj \
-		..\msw\$D\wave.obj \
-		..\msw\$D\window.obj
-
-HTMLOBJS = ..\html\$D\helpctrl.obj \
-		..\html\$D\helpdata.obj \
-		..\html\$D\helpfrm.obj \
-		..\html\$D\htmlcell.obj \
-		..\html\$D\htmlfilt.obj \
-		..\html\$D\htmlpars.obj \
-		..\html\$D\htmltag.obj \
-		..\html\$D\htmlwin.obj \
-		..\html\$D\htmprint.obj \
-		..\html\$D\m_dflist.obj \
-		..\html\$D\m_fonts.obj \
-		..\html\$D\m_hline.obj \
-		..\html\$D\m_image.obj \
-		..\html\$D\m_layout.obj \
-		..\html\$D\m_links.obj \
-		..\html\$D\m_list.obj \
-		..\html\$D\m_meta.obj \
-		..\html\$D\m_pre.obj \
-		..\html\$D\m_tables.obj \
-		..\html\$D\winpars.obj
+		$(COMMDIR)\$D\y_tab.obj \
+		$(COMMDIR)\$D\appcmn.obj \
+		$(COMMDIR)\$D\choiccmn.obj \
+		$(COMMDIR)\$D\clipcmn.obj \
+		$(COMMDIR)\$D\cmdline.obj \
+		$(COMMDIR)\$D\cmdproc.obj \
+		$(COMMDIR)\$D\cmndata.obj \
+		$(COMMDIR)\$D\config.obj \
+		$(COMMDIR)\$D\cshelp.obj \
+		$(COMMDIR)\$D\ctrlcmn.obj \
+		$(COMMDIR)\$D\ctrlsub.obj \
+		$(COMMDIR)\$D\datetime.obj \
+		$(COMMDIR)\$D\datstrm.obj \
+		$(COMMDIR)\$D\db.obj \
+		$(COMMDIR)\$D\dbgrid.obj \
+		$(COMMDIR)\$D\dbtable.obj \
+		$(COMMDIR)\$D\dcbase.obj \
+		$(COMMDIR)\$D\dircmn.obj \
+		$(COMMDIR)\$D\dlgcmn.obj \
+		$(COMMDIR)\$D\dndcmn.obj \
+		$(COMMDIR)\$D\dobjcmn.obj \
+		$(COMMDIR)\$D\docmdi.obj \
+		$(COMMDIR)\$D\docview.obj \
+		$(COMMDIR)\$D\dynarray.obj \
+		$(COMMDIR)\$D\dynlib.obj \
+		$(COMMDIR)\$D\effects.obj \
+		$(COMMDIR)\$D\encconv.obj \
+		$(COMMDIR)\$D\event.obj \
+		$(COMMDIR)\$D\extended.obj \
+		$(COMMDIR)\$D\ffile.obj \
+		$(COMMDIR)\$D\file.obj \
+		$(COMMDIR)\$D\fileconf.obj \
+		$(COMMDIR)\$D\filefn.obj \
+		$(COMMDIR)\$D\filename.obj \
+		$(COMMDIR)\$D\filesys.obj \
+		$(COMMDIR)\$D\fontcmn.obj \
+		$(COMMDIR)\$D\fontmap.obj \
+		$(COMMDIR)\$D\framecmn.obj \
+		$(COMMDIR)\$D\fs_inet.obj \
+		$(COMMDIR)\$D\fs_mem.obj \
+		$(COMMDIR)\$D\fs_zip.obj \
+		$(COMMDIR)\$D\ftp.obj \
+		$(COMMDIR)\$D\gaugecmn.obj \
+		$(COMMDIR)\$D\gdicmn.obj \
+		$(COMMDIR)\$D\geometry.obj \
+		$(COMMDIR)\$D\gifdecod.obj \
+		$(COMMDIR)\$D\hash.obj \
+		$(COMMDIR)\$D\helpbase.obj \
+		$(COMMDIR)\$D\http.obj \
+		$(COMMDIR)\$D\imagall.obj \
+		$(COMMDIR)\$D\imagbmp.obj \
+		$(COMMDIR)\$D\image.obj \
+		$(COMMDIR)\$D\imaggif.obj \
+		$(COMMDIR)\$D\imagjpeg.obj \
+		$(COMMDIR)\$D\imagpcx.obj \
+		$(COMMDIR)\$D\imagpng.obj \
+		$(COMMDIR)\$D\imagpnm.obj \
+		$(COMMDIR)\$D\imagtiff.obj \
+		$(COMMDIR)\$D\imagxpm.obj \
+		$(COMMDIR)\$D\intl.obj \
+		$(COMMDIR)\$D\ipcbase.obj \
+		$(COMMDIR)\$D\layout.obj \
+		$(COMMDIR)\$D\lboxcmn.obj \
+		$(COMMDIR)\$D\list.obj \
+		$(COMMDIR)\$D\log.obj \
+		$(COMMDIR)\$D\longlong.obj \
+		$(COMMDIR)\$D\matrix.obj \
+		$(COMMDIR)\$D\memory.obj \
+		$(COMMDIR)\$D\menucmn.obj \
+		$(COMMDIR)\$D\mimecmn.obj \
+		$(COMMDIR)\$D\module.obj \
+		$(COMMDIR)\$D\mstream.obj \
+		$(COMMDIR)\$D\nbkbase.obj \
+		$(COMMDIR)\$D\object.obj \
+		$(COMMDIR)\$D\objstrm.obj \
+		$(COMMDIR)\$D\odbc.obj \
+		$(COMMDIR)\$D\paper.obj \
+		$(COMMDIR)\$D\prntbase.obj \
+		$(COMMDIR)\$D\process.obj \
+		$(COMMDIR)\$D\protocol.obj \
+		$(COMMDIR)\$D\quantize.obj \
+		$(COMMDIR)\$D\radiocmn.obj \
+		$(COMMDIR)\$D\resource.obj \
+		$(COMMDIR)\$D\sckaddr.obj \
+		$(COMMDIR)\$D\sckfile.obj \
+		$(COMMDIR)\$D\sckipc.obj \
+		$(COMMDIR)\$D\sckstrm.obj \
+		$(COMMDIR)\$D\serbase.obj \
+		$(COMMDIR)\$D\sizer.obj \
+		$(COMMDIR)\$D\socket.obj \
+		$(COMMDIR)\$D\strconv.obj \
+		$(COMMDIR)\$D\stream.obj \
+		$(COMMDIR)\$D\string.obj \
+		$(COMMDIR)\$D\sysopt.obj \
+		$(COMMDIR)\$D\tbarbase.obj \
+		$(COMMDIR)\$D\textcmn.obj \
+		$(COMMDIR)\$D\textfile.obj \
+		$(COMMDIR)\$D\timercmn.obj \
+		$(COMMDIR)\$D\tokenzr.obj \
+		$(COMMDIR)\$D\treebase.obj \
+		$(COMMDIR)\$D\txtstrm.obj \
+		$(COMMDIR)\$D\unzip.obj \
+		$(COMMDIR)\$D\url.obj \
+		$(COMMDIR)\$D\utilscmn.obj \
+		$(COMMDIR)\$D\valgen.obj \
+		$(COMMDIR)\$D\validate.obj \
+		$(COMMDIR)\$D\valtext.obj \
+		$(COMMDIR)\$D\variant.obj \
+		$(COMMDIR)\$D\wfstream.obj \
+		$(COMMDIR)\$D\wincmn.obj \
+		$(COMMDIR)\$D\wxchar.obj \
+		$(COMMDIR)\$D\wxexpr.obj \
+		$(COMMDIR)\$D\xpmdecod.obj \
+		$(COMMDIR)\$D\zipstrm.obj \
+		$(COMMDIR)\$D\zstream.obj
+
+MSWOBJS = $(MSWDIR)\$D\accel.obj \
+		$(MSWDIR)\$D\app.obj \
+		$(OLEDIR)\$D\automtn.obj \
+		$(MSWDIR)\$D\bitmap.obj \
+		$(MSWDIR)\$D\bmpbuttn.obj \
+		$(MSWDIR)\$D\brush.obj \
+		$(MSWDIR)\$D\button.obj \
+		$(MSWDIR)\$D\caret.obj \
+		$(MSWDIR)\$D\checkbox.obj \
+		$(MSWDIR)\$D\checklst.obj \
+		$(MSWDIR)\$D\choice.obj \
+		$(MSWDIR)\$D\clipbrd.obj \
+		$(MSWDIR)\$D\colordlg.obj \
+		$(MSWDIR)\$D\colour.obj \
+		$(MSWDIR)\$D\combobox.obj \
+		$(MSWDIR)\$D\control.obj \
+		$(MSWDIR)\$D\curico.obj \
+		$(MSWDIR)\$D\cursor.obj \
+		$(MSWDIR)\$D\data.obj \
+		$(OLEDIR)\$D\dataobj.obj \
+		$(MSWDIR)\$D\dc.obj \
+		$(MSWDIR)\$D\dcclient.obj \
+		$(MSWDIR)\$D\dcmemory.obj \
+		$(MSWDIR)\$D\dcprint.obj \
+		$(MSWDIR)\$D\dcscreen.obj \
+		$(MSWDIR)\$D\dde.obj \
+		$(MSWDIR)\$D\dialog.obj \
+		$(MSWDIR)\$D\dialup.obj \
+		$(MSWDIR)\$D\dib.obj \
+		$(MSWDIR)\$D\dibutils.obj \
+		$(MSWDIR)\$D\dir.obj \
+		$(MSWDIR)\$D\dirdlg.obj \
+		$(MSWDIR)\$D\dragimag.obj \
+		$(OLEDIR)\$D\dropsrc.obj \
+		$(OLEDIR)\$D\droptgt.obj \
+		$(MSWDIR)\$D\enhmeta.obj \
+		$(MSWDIR)\$D\evtloop.obj \
+		$(MSWDIR)\$D\filedlg.obj \
+		$(MSWDIR)\$D\font.obj \
+		$(MSWDIR)\$D\fontdlg.obj \
+		$(MSWDIR)\$D\fontenum.obj \
+		$(MSWDIR)\$D\fontutil.obj \
+		$(MSWDIR)\$D\frame.obj \
+		$(MSWDIR)\$D\gauge95.obj \
+		$(MSWDIR)\$D\gdiimage.obj \
+		$(MSWDIR)\$D\gdiobj.obj \
+		$(MSWDIR)\$D\glcanvas.obj \
+		$(MSWDIR)\$D\gsocket.obj \
+		$(MSWDIR)\$D\gsockmsw.obj \
+		$(MSWDIR)\$D\helpchm.obj \
+		$(MSWDIR)\$D\helpwin.obj \
+		$(MSWDIR)\$D\icon.obj \
+		$(MSWDIR)\$D\imaglist.obj \
+		$(MSWDIR)\$D\joystick.obj \
+		$(MSWDIR)\$D\listbox.obj \
+		$(MSWDIR)\$D\listctrl.obj \
+		$(MSWDIR)\$D\main.obj \
+		$(MSWDIR)\$D\mdi.obj \
+		$(MSWDIR)\$D\menu.obj \
+		$(MSWDIR)\$D\menuitem.obj \
+		$(MSWDIR)\$D\metafile.obj \
+		$(MSWDIR)\$D\mimetype.obj \
+		$(MSWDIR)\$D\minifram.obj \
+		$(MSWDIR)\$D\msgdlg.obj \
+		$(MSWDIR)\$D\nativdlg.obj \
+		$(MSWDIR)\$D\notebook.obj \
+		$(OLEDIR)\$D\oleutils.obj \
+		$(MSWDIR)\$D\ownerdrw.obj \
+		$(MSWDIR)\$D\palette.obj \
+		$(MSWDIR)\$D\pen.obj \
+		$(MSWDIR)\$D\penwin.obj \
+		$(MSWDIR)\$D\printdlg.obj \
+		$(MSWDIR)\$D\printwin.obj \
+		$(MSWDIR)\$D\radiobox.obj \
+		$(MSWDIR)\$D\radiobut.obj \
+		$(MSWDIR)\$D\regconf.obj \
+		$(MSWDIR)\$D\region.obj \
+		$(MSWDIR)\$D\registry.obj \
+		$(MSWDIR)\$D\scrolbar.obj \
+		$(MSWDIR)\$D\settings.obj \
+		$(MSWDIR)\$D\slider95.obj \
+		$(MSWDIR)\$D\snglinst.obj \
+		$(MSWDIR)\$D\spinbutt.obj \
+		$(MSWDIR)\$D\spinctrl.obj \
+		$(MSWDIR)\$D\statbmp.obj \
+		$(MSWDIR)\$D\statbox.obj \
+		$(MSWDIR)\$D\statbr95.obj \
+		$(MSWDIR)\$D\statline.obj \
+		$(MSWDIR)\$D\stattext.obj \
+		$(MSWDIR)\$D\tabctrl.obj \
+		$(MSWDIR)\$D\taskbar.obj \
+		$(MSWDIR)\$D\tbar95.obj \
+		$(MSWDIR)\$D\textctrl.obj \
+		$(MSWDIR)\$D\tglbtn.obj \
+		$(MSWDIR)\$D\thread.obj \
+		$(MSWDIR)\$D\timer.obj \
+		$(MSWDIR)\$D\tooltip.obj \
+		$(MSWDIR)\$D\treectrl.obj \
+		$(MSWDIR)\$D\utils.obj \
+		$(MSWDIR)\$D\utilsexc.obj \
+		$(OLEDIR)\$D\uuid.obj \
+		$(MSWDIR)\$D\wave.obj \
+		$(MSWDIR)\$D\window.obj
+
+HTMLOBJS = $(HTMLDIR)\$D\helpctrl.obj \
+		$(HTMLDIR)\$D\helpdata.obj \
+		$(HTMLDIR)\$D\helpfrm.obj \
+		$(HTMLDIR)\$D\htmlcell.obj \
+		$(HTMLDIR)\$D\htmlfilt.obj \
+		$(HTMLDIR)\$D\htmlpars.obj \
+		$(HTMLDIR)\$D\htmltag.obj \
+		$(HTMLDIR)\$D\htmlwin.obj \
+		$(HTMLDIR)\$D\htmprint.obj \
+		$(HTMLDIR)\$D\m_dflist.obj \
+		$(HTMLDIR)\$D\m_fonts.obj \
+		$(HTMLDIR)\$D\m_hline.obj \
+		$(HTMLDIR)\$D\m_image.obj \
+		$(HTMLDIR)\$D\m_layout.obj \
+		$(HTMLDIR)\$D\m_links.obj \
+		$(HTMLDIR)\$D\m_list.obj \
+		$(HTMLDIR)\$D\m_meta.obj \
+		$(HTMLDIR)\$D\m_pre.obj \
+		$(HTMLDIR)\$D\m_tables.obj \
+		$(HTMLDIR)\$D\winpars.obj
 
 
 # Add $(NONESSENTIALOBJS) if wanting generic dialogs, PostScript etc.
@@ -562,20 +562,20 @@ $(CPPFLAGS2) /Od /Fo$(MSWDIR)\$D\treectrl.obj /c /Tp $(MSWDIR)\treectrl.cpp
 $(CPPFLAGS2) /Od /Fo$(HTMLDIR)\$D\helpfrm.obj /c /Tp $(HTMLDIR)\helpfrm.cpp
 <<
 
-..\common\$D\y_tab.obj:     ..\common\y_tab.c ..\common\lex_yy.c
+$(COMMDIR)\$D\y_tab.obj:     $(COMMDIR)\y_tab.c $(COMMDIR)\lex_yy.c
         cl @<<
-$(CPPFLAGS2) /c ..\common\y_tab.c -DUSE_DEFINE -DYY_USE_PROTOS /Fo$@
+$(CPPFLAGS2) /c $(COMMDIR)\y_tab.c -DUSE_DEFINE -DYY_USE_PROTOS /Fo$@
 <<
 
-..\common\y_tab.c:     ..\common\dosyacc.c
-        copy "..\common"\dosyacc.c "..\common"\y_tab.c
+$(COMMDIR)\y_tab.c:     $(COMMDIR)\dosyacc.c
+        copy "$(COMMDIR)"\dosyacc.c "$(COMMDIR)"\y_tab.c
 
-..\common\lex_yy.c:    ..\common\doslex.c
-    copy "..\common"\doslex.c "..\common"\lex_yy.c
+$(COMMDIR)\lex_yy.c:    $(COMMDIR)\doslex.c
+    copy "$(COMMDIR)"\doslex.c "$(COMMDIR)"\lex_yy.c
 
 $(OBJECTS):	$(WXDIR)/include/wx/setup.h
 
-..\common\$D\unzip.obj:     ..\common\unzip.c
+$(COMMDIR)\$D\unzip.obj:     $(COMMDIR)\unzip.c
         cl @<<
 $(CPPFLAGS2) /c $(COMMDIR)\unzip.c /Fo$@
 <<
diff --git a/src/msw/makefile.wat b/src/msw/makefile.wat
index f2c59e80ea..ceadd6fa45 100644
--- a/src/msw/makefile.wat
+++ b/src/msw/makefile.wat
@@ -1,6 +1,6 @@
 #!/binb/wmake.exe
 
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE WAT.T!
 
 #
@@ -83,7 +83,6 @@ NONESSENTIALOBJS= accel.obj &
 	helpext.obj &
 	helphtml.obj &
 	helpwxht.obj &
-	helpxlp.obj &
 	imaglist.obj &
 	listctrl.obj &
 	msgdlgg.obj &
@@ -172,7 +171,6 @@ COMMONOBJS = &
 	objstrm.obj &
 	odbc.obj &
 	paper.obj &
-	popupcmn.obj &
 	prntbase.obj &
 	process.obj &
 	protocol.obj &
@@ -189,6 +187,7 @@ COMMONOBJS = &
 	strconv.obj &
 	stream.obj &
 	string.obj &
+	sysopt.obj &
 	tbarbase.obj &
 	textcmn.obj &
 	textfile.obj &
@@ -247,6 +246,7 @@ MSWOBJS = accel.obj &
 	dropsrc.obj &
 	droptgt.obj &
 	enhmeta.obj &
+	evtloop.obj &
 	filedlg.obj &
 	font.obj &
 	fontdlg.obj &
@@ -472,6 +472,9 @@ droptgt.obj:     $(OLEDIR)\droptgt.cpp
 enhmeta.obj:     $(MSWDIR)\enhmeta.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
+evtloop.obj:     $(MSWDIR)\evtloop.cpp
+  *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
+
 filedlg.obj:     $(MSWDIR)\filedlg.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
@@ -915,9 +918,6 @@ odbc.obj:     $(COMMDIR)\odbc.cpp
 paper.obj:     $(COMMDIR)\paper.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
-popupcmn.obj:     $(COMMDIR)\popupcmn.cpp
-  *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
-
 prntbase.obj:     $(COMMDIR)\prntbase.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
@@ -966,6 +966,9 @@ stream.obj:     $(COMMDIR)\stream.cpp
 string.obj:     $(COMMDIR)\string.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
+sysopt.obj:     $(COMMDIR)\sysopt.cpp
+  *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
+
 tbarbase.obj:     $(COMMDIR)\tbarbase.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
diff --git a/src/msw/settings.cpp b/src/msw/settings.cpp
index 9c52e55569..360e8a2fc3 100644
--- a/src/msw/settings.cpp
+++ b/src/msw/settings.cpp
@@ -57,9 +57,6 @@ public:
 
 private:
     DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule)
-
-    static wxArrayString   sm_optionNames;
-    static wxArrayString   sm_optionValues;
 };
 
 // ----------------------------------------------------------------------------
@@ -78,9 +75,6 @@ static wxFont *gs_fontDefault = NULL;
 
 IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule, wxModule)
 
-wxArrayString wxSystemSettingsModule::sm_optionNames;
-wxArrayString wxSystemSettingsModule::sm_optionValues;
-
 bool wxSystemSettingsModule::OnInit()
 {
     return TRUE;
@@ -88,9 +82,8 @@ bool wxSystemSettingsModule::OnInit()
 
 void wxSystemSettingsModule::OnExit()
 {
-    sm_optionNames.Clear();
-    sm_optionValues.Clear();
     delete gs_fontDefault;
+    gs_fontDefault = NULL;
 }
 
 // ----------------------------------------------------------------------------
@@ -274,45 +267,3 @@ int wxSystemSettings::GetSystemMetric(int index)
     // __WXMICROWIN__
 }
 
-// Option functions (arbitrary name/value mapping)
-void wxSystemSettings::SetOption(const wxString& name, const wxString& value)
-{
-    int idx = wxSystemSettingsModule::sm_optionNames.Index(name, FALSE);
-    if (idx == wxNOT_FOUND)
-    {
-        wxSystemSettingsModule::sm_optionNames.Add(name);
-        wxSystemSettingsModule::sm_optionValues.Add(value);
-    }
-    else
-    {
-        wxSystemSettingsModule::sm_optionNames[idx] = name;
-        wxSystemSettingsModule::sm_optionValues[idx] = value;
-    }
-}
-
-void wxSystemSettings::SetOption(const wxString& name, int value)
-{
-    wxString valStr;
-    valStr.Printf(wxT("%d"), value);
-    SetOption(name, valStr);
-}
-
-wxString wxSystemSettings::GetOption(const wxString& name)
-{
-    int idx = wxSystemSettingsModule::sm_optionNames.Index(name, FALSE);
-    if (idx == wxNOT_FOUND)
-        return wxEmptyString;
-    else
-        return wxSystemSettingsModule::sm_optionValues[idx];
-}
-
-int wxSystemSettings::GetOptionInt(const wxString& name)
-{
-    return wxAtoi(GetOption(name));
-}
-
-bool wxSystemSettings::HasOption(const wxString& name)
-{
-    return (wxSystemSettingsModule::sm_optionNames.Index(name, FALSE) != wxNOT_FOUND);
-}
-
diff --git a/src/os2/dcprint.cpp b/src/os2/dcprint.cpp
index 6aa9942d05..77a742cf6c 100644
--- a/src/os2/dcprint.cpp
+++ b/src/os2/dcprint.cpp
@@ -373,6 +373,8 @@ bool wxPrinterDC::DoBlit(
 , wxCoord                           vYsrc
 , int                               nRop
 , bool                              bUseMask
+, wxCoord                           xsrcMask
+, wxCoord                           ysrcMask
 )
 {
     bool                            bSuccess = TRUE;
diff --git a/src/os2/files.lst b/src/os2/files.lst
index f64ed153b3..bb0c850f42 100644
--- a/src/os2/files.lst
+++ b/src/os2/files.lst
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 22:45, 2001/05/20
+# This file was automatically generated by tmake at 10:33, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE OS2.T!
 ALL_SOURCES = \
 		generic/busyinfo.cpp \
@@ -9,11 +9,11 @@ ALL_SOURCES = \
 		generic/dcpsg.cpp \
 		generic/dirctrlg.cpp \
 		generic/grid.cpp \
+		generic/gridctrl.cpp \
 		generic/gridsel.cpp \
 		generic/helpext.cpp \
 		generic/helphtml.cpp \
 		generic/helpwxht.cpp \
-		generic/helpxlp.cpp \
 		generic/imaglist.cpp \
 		generic/laywin.cpp \
 		generic/listctrl.cpp \
@@ -28,7 +28,8 @@ ALL_SOURCES = \
 		generic/propform.cpp \
 		generic/proplist.cpp \
 		generic/sashwin.cpp \
-		generic/scrolwin.cpp \
+		generic/scrlwing.cpp \
+		generic/spinctlg.cpp \
 		generic/splash.cpp \
 		generic/splitter.cpp \
 		generic/statusbr.cpp \
@@ -43,6 +44,7 @@ ALL_SOURCES = \
 		common/choiccmn.cpp \
 		common/clipcmn.cpp \
 		common/cmdline.cpp \
+		common/cmdproc.cpp \
 		common/cmndata.cpp \
 		common/config.cpp \
 		common/cshelp.cpp \
@@ -51,6 +53,7 @@ ALL_SOURCES = \
 		common/datetime.cpp \
 		common/datstrm.cpp \
 		common/db.cpp \
+		common/dbgrid.cpp \
 		common/dbtable.cpp \
 		common/dcbase.cpp \
 		common/dircmn.cpp \
@@ -78,6 +81,7 @@ ALL_SOURCES = \
 		common/fs_mem.cpp \
 		common/fs_zip.cpp \
 		common/ftp.cpp \
+		common/gaugecmn.cpp \
 		common/gdicmn.cpp \
 		common/geometry.cpp \
 		common/gifdecod.cpp \
@@ -107,6 +111,7 @@ ALL_SOURCES = \
 		common/mimecmn.cpp \
 		common/module.cpp \
 		common/mstream.cpp \
+		common/nbkbase.cpp \
 		common/object.cpp \
 		common/objstrm.cpp \
 		common/paper.cpp \
@@ -114,6 +119,7 @@ ALL_SOURCES = \
 		common/process.cpp \
 		common/protocol.cpp \
 		common/quantize.cpp \
+		common/radiocmn.cpp \
 		common/resource.cpp \
 		common/sckaddr.cpp \
 		common/sckfile.cpp \
@@ -125,6 +131,7 @@ ALL_SOURCES = \
 		common/strconv.cpp \
 		common/stream.cpp \
 		common/string.cpp \
+		common/sysopt.cpp \
 		common/tbarbase.cpp \
 		common/textcmn.cpp \
 		common/textfile.cpp \
@@ -259,10 +266,12 @@ ALL_HEADERS = \
 		caret.h \
 		checkbox.h \
 		checklst.h \
+		chkconf.h \
 		choicdlg.h \
 		choice.h \
 		clipbrd.h \
 		cmdline.h \
+		cmdproc.cpp \
 		cmndata.h \
 		colordlg.h \
 		colour.h \
@@ -279,6 +288,8 @@ ALL_HEADERS = \
 		datetime.inl \
 		datstrm.h \
 		db.h \
+		dbgrid.h \
+		dbkeyg.h \
 		dbtable.h \
 		dc.h \
 		dcclient.h \
@@ -326,6 +337,7 @@ ALL_HEADERS = \
 		gifdecod.h \
 		glcanvas.h \
 		grid.h \
+		gridctrl.h \
 		gsocket.h \
 		hash.h \
 		help.h \
@@ -333,7 +345,6 @@ ALL_HEADERS = \
 		helpchm.h \
 		helphtml.h \
 		helpwin.h \
-		helpxlp.h \
 		icon.h \
 		imagbmp.h \
 		image.h \
@@ -380,6 +391,7 @@ ALL_HEADERS = \
 		panel.h \
 		paper.h \
 		pen.h \
+		popupwin.h \
 		print.h \
 		printdlg.h \
 		prntbase.h \
@@ -403,11 +415,13 @@ ALL_HEADERS = \
 		setup.h \
 		sizer.h \
 		slider.h \
+		snglinst.h \
 		socket.h \
 		spinbutt.h \
 		spinctrl.h \
 		splash.h \
 		splitter.h \
+		stack.h \
 		statbmp.h \
 		statbox.h \
 		statline.h \
@@ -416,6 +430,7 @@ ALL_HEADERS = \
 		strconv.h \
 		stream.h \
 		string.h \
+		sysopt.h \
 		tab.h \
 		tabctrl.h \
 		taskbar.h \
@@ -443,6 +458,7 @@ ALL_HEADERS = \
 		validate.h \
 		valtext.h \
 		variant.h \
+		vector.h \
 		version.h \
 		wave.h \
 		wfstream.h \
@@ -531,6 +547,7 @@ ALL_HEADERS = \
 		os2/tooltip.h \
 		os2/wave.h \
 		os2/window.h \
+		generic/accel.h \
 		generic/calctrl.h \
 		generic/caret.h \
 		generic/choicdgg.h \
@@ -542,11 +559,11 @@ ALL_HEADERS = \
 		generic/filedlgg.h \
 		generic/fontdlgg.h \
 		generic/grid.h \
+		generic/gridctrl.h \
 		generic/gridg.h \
 		generic/helpext.h \
 		generic/helphtml.h \
 		generic/helpwxht.h \
-		generic/helpxlp.h \
 		generic/imaglist.h \
 		generic/laywin.h \
 		generic/listctrl.h \
@@ -590,6 +607,7 @@ COMMONOBJS = \
 		choiccmn.o \
 		clipcmn.o \
 		cmdline.o \
+		cmdproc.o \
 		cmndata.o \
 		config.o \
 		cshelp.o \
@@ -598,6 +616,7 @@ COMMONOBJS = \
 		datetime.o \
 		datstrm.o \
 		db.o \
+		dbgrid.o \
 		dbtable.o \
 		dcbase.o \
 		dircmn.o \
@@ -625,6 +644,7 @@ COMMONOBJS = \
 		fs_mem.o \
 		fs_zip.o \
 		ftp.o \
+		gaugecmn.o \
 		gdicmn.o \
 		geometry.o \
 		gifdecod.o \
@@ -654,6 +674,7 @@ COMMONOBJS = \
 		mimecmn.o \
 		module.o \
 		mstream.o \
+		nbkbase.o \
 		object.o \
 		objstrm.o \
 		paper.o \
@@ -661,6 +682,7 @@ COMMONOBJS = \
 		process.o \
 		protocol.o \
 		quantize.o \
+		radiocmn.o \
 		resource.o \
 		sckaddr.o \
 		sckfile.o \
@@ -672,6 +694,7 @@ COMMONOBJS = \
 		strconv.o \
 		stream.o \
 		string.o \
+		sysopt.o \
 		tbarbase.o \
 		textcmn.o \
 		textfile.o \
@@ -700,6 +723,7 @@ COMMONDEPS = \
 		choiccmn.d \
 		clipcmn.d \
 		cmdline.d \
+		cmdproc.d \
 		cmndata.d \
 		config.d \
 		cshelp.d \
@@ -708,6 +732,7 @@ COMMONDEPS = \
 		datetime.d \
 		datstrm.d \
 		db.d \
+		dbgrid.d \
 		dbtable.d \
 		dcbase.d \
 		dircmn.d \
@@ -735,6 +760,7 @@ COMMONDEPS = \
 		fs_mem.d \
 		fs_zip.d \
 		ftp.d \
+		gaugecmn.d \
 		gdicmn.d \
 		geometry.d \
 		gifdecod.d \
@@ -764,6 +790,7 @@ COMMONDEPS = \
 		mimecmn.d \
 		module.d \
 		mstream.d \
+		nbkbase.d \
 		object.d \
 		objstrm.d \
 		paper.d \
@@ -771,6 +798,7 @@ COMMONDEPS = \
 		process.d \
 		protocol.d \
 		quantize.d \
+		radiocmn.d \
 		resource.d \
 		sckaddr.d \
 		sckfile.d \
@@ -782,6 +810,7 @@ COMMONDEPS = \
 		strconv.d \
 		stream.d \
 		string.d \
+		sysopt.d \
 		tbarbase.d \
 		textcmn.d \
 		textfile.d \
@@ -813,11 +842,11 @@ GENERICOBJS = \
 		dcpsg.o \
 		dirctrlg.o \
 		grid.o \
+		gridctrl.o \
 		gridsel.o \
 		helpext.o \
 		helphtml.o \
 		helpwxht.o \
-		helpxlp.o \
 		imaglist.o \
 		laywin.o \
 		listctrl.o \
@@ -832,7 +861,8 @@ GENERICOBJS = \
 		propform.o \
 		proplist.o \
 		sashwin.o \
-		scrolwin.o \
+		scrlwing.o \
+		spinctlg.o \
 		splash.o \
 		splitter.o \
 		statusbr.o \
@@ -853,11 +883,11 @@ GENERICDEPS = \
 		dcpsg.d \
 		dirctrlg.d \
 		grid.d \
+		gridctrl.d \
 		gridsel.d \
 		helpext.d \
 		helphtml.d \
 		helpwxht.d \
-		helpxlp.d \
 		imaglist.d \
 		laywin.d \
 		listctrl.d \
@@ -872,7 +902,8 @@ GENERICDEPS = \
 		propform.d \
 		proplist.d \
 		sashwin.d \
-		scrolwin.d \
+		scrlwing.d \
+		spinctlg.d \
 		splash.d \
 		splitter.d \
 		statusbr.d \
diff --git a/src/png/PngVC.dsp b/src/png/PngVC.dsp
index 6c43ab7b18..5834855ba0 100644
--- a/src/png/PngVC.dsp
+++ b/src/png/PngVC.dsp
@@ -23,8 +23,8 @@ CFG=png - Win32 Debug
 
 # Begin Project
 # PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
+# PROP Scc_ProjName "PngVC"
+# PROP Scc_LocalPath "."
 CPP=cl.exe
 RSC=rc.exe
 
diff --git a/src/tiff/TiffVC.dsp b/src/tiff/TiffVC.dsp
index 3d918dc9e2..a22b1c2d60 100644
--- a/src/tiff/TiffVC.dsp
+++ b/src/tiff/TiffVC.dsp
@@ -8,12 +8,12 @@ CFG=tiff - Win32 Debug
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,
 !MESSAGE use the Export Makefile command and run
 !MESSAGE 
-!MESSAGE NMAKE /f "tiff.mak".
+!MESSAGE NMAKE /f "TiffVC.mak".
 !MESSAGE 
 !MESSAGE You can specify a configuration when running NMAKE
 !MESSAGE by defining the macro CFG on the command line. For example:
 !MESSAGE 
-!MESSAGE NMAKE /f "tiff.mak" CFG="tiff - Win32 Debug"
+!MESSAGE NMAKE /f "TiffVC.mak" CFG="tiff - Win32 Debug"
 !MESSAGE 
 !MESSAGE Possible choices for configuration are:
 !MESSAGE 
@@ -23,8 +23,8 @@ CFG=tiff - Win32 Debug
 
 # Begin Project
 # PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
+# PROP Scc_ProjName "TiffVC"
+# PROP Scc_LocalPath "."
 CPP=cl.exe
 RSC=rc.exe
 
diff --git a/src/univ/files.lst b/src/univ/files.lst
index 876773c449..8fde28a2cb 100644
--- a/src/univ/files.lst
+++ b/src/univ/files.lst
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:07, 2001/07/04
+# This file was automatically generated by tmake at 10:32, 2001/07/11
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE GTK.T!
 UNIVOBJS = \
 		bmpbuttn.o \
@@ -7,16 +7,13 @@ UNIVOBJS = \
 		checklst.o \
 		colschem.o \
 		control.o \
-		combobox.o \
-        evtloop.o \
 		framuniv.o \
 		gauge.o \
 		gtk.o \
 		inphand.o \
 		listbox.o \
-        menu.o \
+		menu.o \
 		notebook.o \
-		popupcmn.o \
 		radiobox.o \
 		radiobut.o \
 		renderer.o \
@@ -46,6 +43,7 @@ UNIVDEPS = \
 		gtk.d \
 		inphand.d \
 		listbox.d \
+		menu.d \
 		notebook.d \
 		radiobox.d \
 		radiobut.d \
diff --git a/src/wxvc.dsp b/src/wxvc.dsp
index 8f1e5b3132..2ea191af47 100644
--- a/src/wxvc.dsp
+++ b/src/wxvc.dsp
@@ -23,8 +23,8 @@ CFG=wxvc - Win32 Debug
 
 # Begin Project
 # PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
+# PROP Scc_ProjName "wxvc"
+# PROP Scc_LocalPath ".."
 CPP=cl.exe
 RSC=rc.exe
 
@@ -456,6 +456,10 @@ SOURCE=.\common\string.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\common\sysopt.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\common\tbarbase.cpp
 # End Source File
 # Begin Source File
diff --git a/src/wxvc_dll.dsp b/src/wxvc_dll.dsp
index c1696f10aa..99b716ffa8 100644
--- a/src/wxvc_dll.dsp
+++ b/src/wxvc_dll.dsp
@@ -471,6 +471,10 @@ SOURCE=.\common\string.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\common\sysopt.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\common\tbarbase.cpp
 # End Source File
 # Begin Source File
diff --git a/src/wxvc_universal.dsp b/src/wxvc_universal.dsp
index 525f26d1cc..4fe3d4fd1e 100644
--- a/src/wxvc_universal.dsp
+++ b/src/wxvc_universal.dsp
@@ -464,6 +464,10 @@ SOURCE=.\common\string.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\common\sysopt.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\common\tbarbase.cpp
 # End Source File
 # Begin Source File
diff --git a/src/zlib/ZlibVC.dsp b/src/zlib/ZlibVC.dsp
index de668c1bed..b2c5ff42db 100644
--- a/src/zlib/ZlibVC.dsp
+++ b/src/zlib/ZlibVC.dsp
@@ -8,12 +8,12 @@ CFG=zlib - Win32 Debug
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,
 !MESSAGE use the Export Makefile command and run
 !MESSAGE 
-!MESSAGE NMAKE /f "zlib.mak".
+!MESSAGE NMAKE /f "ZlibVC.mak".
 !MESSAGE 
 !MESSAGE You can specify a configuration when running NMAKE
 !MESSAGE by defining the macro CFG on the command line. For example:
 !MESSAGE 
-!MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug"
+!MESSAGE NMAKE /f "ZlibVC.mak" CFG="zlib - Win32 Debug"
 !MESSAGE 
 !MESSAGE Possible choices for configuration are:
 !MESSAGE 
@@ -23,8 +23,8 @@ CFG=zlib - Win32 Debug
 
 # Begin Project
 # PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
+# PROP Scc_ProjName "ZlibVC"
+# PROP Scc_LocalPath "."
 CPP=cl.exe
 RSC=rc.exe
 
-- 
2.50.0

