diff --git a/ANNOUNCE b/ANNOUNCE
index 8e1d7d6..960f4a5 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,4 +1,4 @@
-This is release 990103 of Wine, a free implementation of Windows on
+This is release 990110 of Wine, a free implementation of Windows on
 Unix.  This is still a developers only release.  There are many bugs
 and unimplemented features.  Most applications still do not work
 correctly.
@@ -6,11 +6,9 @@
 Patches should be submitted to "julliard@lrc.epfl.ch".  Please don't
 forget to include a ChangeLog entry.
 
-WHAT'S NEW with Wine-990103: (see ChangeLog for details)
-	- Improved console support.
-	- Tons of new stubs.
-	- Improvements to header files compatibility.
-	- More features in Wine server.
+WHAT'S NEW with Wine-990110: (see ChangeLog for details)
+	- Many more COM interfaces definitions.
+	- Improvements to the resource compiler.
 	- Lots of bug fixes.
 
 See the README file in the distribution for installation instructions.
@@ -19,10 +17,10 @@
 the release is available at the ftp sites.  The sources will be available
 from the following locations:
 
-  ftp://metalab.unc.edu/pub/Linux/ALPHA/wine/development/Wine-990103.tar.gz
-  ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-990103.tar.gz
-  ftp://ftp.infomagic.com/pub/mirrors/linux/sunsite/ALPHA/wine/development/Wine-990103.tar.gz
-  ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-990103.tar.gz
+  ftp://metalab.unc.edu/pub/Linux/ALPHA/wine/development/Wine-990110.tar.gz
+  ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-990110.tar.gz
+  ftp://ftp.infomagic.com/pub/mirrors/linux/sunsite/ALPHA/wine/development/Wine-990110.tar.gz
+  ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-990110.tar.gz
 
 It should also be available from any site that mirrors tsx-11 or sunsite.
 
diff --git a/ChangeLog b/ChangeLog
index 96c9e11..feec784 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,244 @@
+Sun Jan 10 14:40:34 1999  Alexandre Julliard  <julliard@winehq.com>
+
+	* include/miscemu.h, include/msdos.h, loader/main.c, msdos/Makefile.in, msdos/dosconf.c, msdos/int21.c:
+	Andreas Mohr <a.mohr@mailto.de>
+	Added config.sys parser.
+
+	* controls/listbox.c: Pascal Cuoq <Pascal.Cuoq@inria.fr>
+	Small change in LB_SETCURSEL32 handling (the caret should be moved as
+	well).
+
+	* configure, configure.in, files/async.c, include/config.h.in, misc/winsock_dns.c, msdos/int21.c, ole/compobj.c:
+	Marcus Meissner <marcus@jet.franken.de>
+	Use autoconf check for presence of sys/file.h.
+
+	* dlls/ntdll/rtl.c, relay32/ntdll.spec:
+	Marcus Meissner <marcus@jet.franken.de>
+	Implemented DbgPrint, added ultoa.
+
+	* win32/console.c: Peter Hunnisett <hunnise@nortelnetworks.com>
+	PeekConsoleInput & ReadConsoleInput need to return 0 records read in
+	the case of an invalid handle.
+
+	* console/ncurses.c, loader/main.c:
+	Joseph Pranevich <jpranevich@lycos.com>
+	More verbose debugging output.
+	Remove compilation warning.
+
+	* msdos/int10.c: Joseph Pranevich <jpranevich@lycos.com>
+	Fix up some interrupt calls to return at the data that they are supposed
+	to. Also increase comment verbosity to help debug things later.
+
+	* include/options.h, misc/main.c, misc/version.c:
+	Andreas Mohr <a.mohr@mailto.de>
+	Added switch -dosver.
+	Cleanup for OaBuildVersion().
+
+	* libtest/.cvsignore: Added vartest and volinfo
+
+	* dlls/shell32/contmenu.c, dlls/shell32/pidl.c, dlls/shell32/pidl.h, dlls/shell32/shelllink.c, dlls/shell32/shellord.c, dlls/shell32/shlfolder.c, dlls/shell32/shlview.c, include/shell.h:
+	Juergen Schmied <juergen.schmied@metronet.de>
+	Many bugfixes, code cleanup.
+	Removed a few glitches from the COM patch.
+
+	* windows/dialog.c: Lawson Whitney <lawson_whitney@juno.com>
+	Only destroy window once.
+
+	* graphics/ddraw.c, include/ddraw.h:
+	Marcus Meissner <marcus@jet.franken.de>
+	- moved drawable to common since it is used by both DGA and Xlib.
+	  (fixes one bad memory corruption bug in DGA (StarCraft and Diablo)
+	- added BltFast sanity checks.
+
+	* windows/queue.c, loader/task.c:
+	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
+	InitApp() call removed from 32-bit application startup;
+	create task message queue in InitThreadInput() instead.
+
+	* loader/ne/convert.c:
+	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
+	Added accelerator table PE->NE resource conversion.
+
+	* debugger/editline.c:
+	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
+	Restart read() in case of EINTR in TTYget().
+
+	* dlls/shell32/shellole.c: Marcus Meissner <marcus@jet.franken.de>
+	Ptr ref wrong.
+
+	* tools/wrc/CHANGES, tools/wrc/dumpres.c, tools/wrc/genres.c, tools/wrc/newstruc.c, tools/wrc/newstruc.h, tools/wrc/parser.l, tools/wrc/parser.y, tools/wrc/readres.c, tools/wrc/utils.c, tools/wrc/utils.h, tools/wrc/wrc.h, tools/wrc/wrctypes.h, tools/wrc/writeres.c:
+	Bertho Stultiens <bertho@panter.soci.aau.dk>
+	Wrc version 1.0.8. Toolbar resources are now supported. A couple of
+	other fixes are also included. See file tools/wrc/CHANGES for details.
+
+	* ole/compobj.c: Marcus Meissner <marcus@jet.franken.de>
+	Missing WINAPI.
+
+	* include/x11drv.h, loader/dos/module.c, objects/dc.c, relay32/builtin32.c, relay32/relay386.c, scheduler/k32obj.c, files/async.c, if1632/relay.c, include/main.h, include/multimedia.h, include/windows.h:
+	James Juran <jrj120@psu.edu>
+	Add missing #includes and prototypes to eliminate some implicit
+	function declaration warnings and 'extern's in .c files.
+
+	* configure, configure.in, console/ncurses.c, include/acconfig.h, include/config.h.in:
+	Ove Kaaven <ovek@arcticnet.no>
+	Check for resizeterm in ncurses.
+
+	* libtest/Makefile.in, libtest/vartest-Win32.log, libtest/vartest.c, libtest/vartest.readme:
+	Francis Beaudet <francis@macadamian.com>
+	New test program for VARIANT functions.
+
+	* debugger/msc.c: Eric Pouech <Eric.Pouech@wanadoo.fr>
+	Some debug information (PDB) was not mapped when loading a module,
+	which caused a core in the debugger when it tried to access it.
+
+	* Makefile.in: Ove Kaaven <ovek@arcticnet.no>
+	Links libwine.so.1.0 to libwine.so in Wine's main directory.
+	Makes Wine compile with --enable-dll again.
+
+Sat Jan  9 09:12:40 1999  Alexandre Julliard  <julliard@winehq.com>
+
+	* relay32/ole32.spec, windows/dinput.c, include/storage.h, include/unknwn.h, include/windows.h, include/wine/obj_base.h, include/wine/obj_channel.h, include/wine/obj_clientserver.h, include/wine/obj_dataobject.h, include/wine/obj_marshal.h, include/wine/obj_misc.h, include/wine/obj_moniker.h, include/wine/obj_propertystorage.h, include/wine/obj_storage.h, include/winerror.h, include/wtypes.h, misc/shell.c, multimedia/dplay.c, multimedia/dsound.c, objects/font.c, ole/compobj.c, ole/ifs.c, ole/moniker.c, ole/ole2.c, ole/ole2disp.c, ole/oledlg.c, ole/oleobj.c, ole/storage.c, ole/typelib.c, dlls/shell32/dataobject.c, dlls/shell32/enumidlist.c, dlls/shell32/folders.c, dlls/shell32/pidl.c, dlls/shell32/shell32_main.c, dlls/shell32/shelllink.c, dlls/shell32/shellole.c, dlls/shell32/shellord.c, dlls/shell32/shlfolder.c, dlls/shell32/shlview.c, graphics/ddraw.c, graphics/vga.c, if1632/compobj.spec, include/compobj.h, include/ddraw.h, include/dinput.h, include/dplay.h, include/dsound.h, include/interfaces.h, include/objbase.h, include/objidl.h, include/ole.h, include/ole2.h, include/oleobj.h, include/servprov.h, include/shell.h, include/shlguid.h, include/shlobj.h, dlls/comctl32/imagelist.c, dlls/shell32/contmenu.c:
+	Francois Gouget <fgouget@multimania.com>
+	Added a lot of COM interfaces definitions.
+	Restructured COM header files for better compatibility and clarity.
+
+Fri Jan  8 16:37:03 1999  Alexandre Julliard  <julliard@winehq.com>
+
+	* files/file.c: Set GENERIC_READ|GENERIC_WRITE access for OF_CREATE.
+	Make GetFileType work for all handle types.
+
+	* win32/device.c: Avoid crash on NULL dev->info.
+
+	* include/flatsb.h, relay32/comctl32.spec, dlls/comctl32/Makefile.in, dlls/comctl32/commctrl.c, dlls/comctl32/flatsb.c, include/commctrl.h:
+	Alex Priem <alexp@sci.kun.nl>
+	Added stubs and defines for the flat scrollbar common control.
+
+	* include/commctrl.h, dlls/comctl32/datetime.c:
+	Alex Priem <alexp@sci.kun.nl>
+	Added some defines needed for custom draw'ing and datetime common
+	controls.
+
+	* dlls/shell32/iconcache.c: Eddie Carpenter <ecarpenter@itex.co.za>
+	Fixed a small bug in function ExtractIconEx32A.
+
+	* windows/winproc.c: Juergen Schmied <juergen.schmied@metronet.de>
+	HTASK16 -> threadID mapping of WM_ACTIVATEAPP.
+
+	* files/file.c: Bertho Stultiens <bertho@panter.soci.aau.dk>
+	Make DeleteFile fail for empty path.
+
+	* msdos/ioports.c: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+	Fix dummy_ctr stuff to work even without DIRECT_IO_ACCESS.
+
+	* loader/ne/segment.c: Marcus Meissner <marcus@jet.franken.de>
+	Fixed wrong buffer which caused fixups to fail.
+
+	* graphics/d3dcommon.c, graphics/d3ddevices.c, graphics/d3dtexture.c, include/d3d.h:
+	Lionel Ulmer <ulmer@directprovider.net>
+	- added all the Direct3D error codes
+	- added 8bit palettized texture support
+
+	* msdos/cdrom.c: Marcus Meissner <marcus@jet.franken.de>
+	ifdefs for defines not in linux 2.0.
+
+	* relay32/winspool.spec, misc/printdrv.c:
+	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
+	Added two stubs for AddPrinterDriver.
+
+	* include/dosexe.h, loader/dos/dosmod.c, loader/dos/dosmod.h, loader/dos/dosvm.c:
+	Ove Kaaven <ovek@arcticnet.no>
+	Queue SIGALRM to reduce the "signal 14 lost" complaints.
+	Added support for reprogramming the DOS timer, and reading back the
+	current value.
+
+	* misc/registry.c: Marcus Meissner <marcus@jet.franken.de>
+	Wine hangs when registry (corrupted) has lone \ at end of file.
+
+	* dlls/shell32/shell32_main.h, dlls/shell32/shell32_main.c:
+	Kostya Ivanov <kostya@warmcat.excom.spb.su>
+	Small patch that enables Clarion for Windows not to trap while
+	loading.
+
+	* ole/variant.c: Marcus Meissner <marcus@jet.franken.de>
+	Replace troublesome assignments by memset for whole struct.
+
+	* graphics/ddraw.c: Lionel Ulmer <ulmer@directprovider.net>
+	Added handling of the 'palent' field of the CreatePalette procedure.
+
+	* documentation/wine.man:
+	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
+	Added description about including/excluding functions from relay
+	trace.
+
+	* win32/console.c: Marcus Meissner <marcus@jet.franken.de>
+	Read at least 1 input record in ReadConsoleInputA.
+
+	* memory/virtual.c:
+	Fixed CreateMapping when a mapping with the same name already exists.
+
+Wed Jan  6 10:37:29 1999  Alexandre Julliard  <julliard@winehq.com>
+
+	* server/file.c: Fixed file destruction when file has no name.
+
+Tue Jan  5 18:38:59 1999  Alexandre Julliard  <julliard@winehq.com>
+
+	* misc/main.c: Eric Pouech <Eric.Pouech@wanadoo.fr>
+	Warns user if multiple -dll switches are used on command line.
+
+	* dlls/comctl32/trackbar.c: Alex Priem <alexp@sci.kun.nl>
+	Fixed a leftover HeapFree in the trackbar common control.
+
+	* include/commctrl.h, include/debug.h, include/debugdefs.h, include/tab.h, dlls/comctl32/tab.c:
+	Alex Priem <alexp@sci.kun.nl>
+	Fixed some problems with the tab common control (with thanks to Anders
+	Carlsson <anders.carlsson@linux.nu>).
+
+	* dlls/comctl32/commctrl.c, dlls/comctl32/propsheet.c, include/commctrl.h, include/propsheet.h, relay32/comctl32.spec:
+	Alex Priem <alexp@sci.kun.nl>
+	Added a missing PropertySheet32AW and CreatePropertySheetPage stub,
+	and some missing defines.
+
+	* misc/main.c, scheduler/syslevel.c, graphics/vga.c:
+	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
+	Use MakeCriticalSectionGlobal on all critical sections used across
+	process boundaries.
+
+	* include/winbase.h, include/windows.h:
+	Ulrich Weigand <weigand@informatik.uni-erlangen.de>
+	Added prototypes for MakeCriticalSectionGlobal, ConvertToGlobalHandle.
+
+	* documentation/wine.man:
+	Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
+	Added environment variables in the man page.
+
+	* loader/dos/module.c: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+	Fixed args of MZ_CreateProcess.
+
+	* programs/clock/language.c, programs/notepad/language.c, programs/progman/main.c:
+	Andreas Mohr <a.mohr@mailto.de>
+	Fixed string bug in programs/.
+
+	* msdos/ioports.c: Andreas Mohr <a.mohr@mailto.de>
+	Added stupid "action" emulation for hardware timers in ioports.c.
+
+	* dlls/winaspi/winaspi16.c: Andreas Mohr <a.mohr@mailto.de>
+	Again a small DOSASPI patch.
+
+	* documentation/bugreports, documentation/fonts, windows/sysmetrics.c, windows/win.c, windows/winpos.c:
+	Andreas Mohr <a.mohr@mailto.de>
+	Documentation updates.
+
+	* graphics/ddraw.c: Lionel Ulmer <ulmer@directprovider.net>
+	- check if palette is not null when setting a palette
+	- check if window handle is valid before getting its 'drawable'
+
+	* graphics/x11drv/xfont.c: Eric Pouech <Eric.Pouech@wanadoo.fr>
+	Prevent core dump with some TTF (when X11 runs with a true type
+	server).
+
+	* server/console.c: Marcus Meissner <marcus@jet.franken.de>
+	Use stdout for default console output.
+
 ----------------------------------------------------------------
 Sun Jan  3 17:00:20 1999  Alexandre Julliard  <julliard@winehq.com>
 
diff --git a/Makefile.in b/Makefile.in
index 4a07ba4..3c8de43 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -170,6 +170,7 @@
 
 libwine.so.1.0: $(LIBOBJS) $(X11OBJS)
 	$(LDSHARED) -o$@ $(LIBOBJS) $(X11OBJS) $(LDOPTIONS)
+	ln -sf $@ libwine.so
 
 install_emu: install_lib
 	[ -d $(bindir) ] || $(MKDIR) $(bindir)
@@ -230,7 +231,7 @@
 clean::
 	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) clean) || exit 1; done
 	for i in include; do (cd $$i; $(RM) *.o \#*\# .#* *~ *% *.bak *.orig *.rej *.flc); done
-	$(RM) wine wine.sym libwine.a libwine.so.1.0 TAGS .#*
+	$(RM) wine wine.sym libwine.a libwine.so.1.0 libwine.so TAGS .#*
 
 distclean: clean
 	$(RM) config.* Make.rules include/config.h
diff --git a/configure b/configure
index 6f2682e..da1da01 100755
--- a/configure
+++ b/configure
@@ -2548,10 +2548,53 @@
 fi
 
 if test "$ac_cv_lib_ncurses_waddch" = "yes"
-then :
+then
+    echo $ac_n "checking for resizeterm in -lncurses""... $ac_c" 1>&6
+echo "configure:2554: checking for resizeterm in -lncurses" >&5
+ac_lib_var=`echo ncurses'_'resizeterm | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lncurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2562 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char resizeterm();
+
+int main() {
+resizeterm()
+; return 0; }
+EOF
+if { (eval echo configure:2573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_RESIZETERM 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
 else
     echo $ac_n "checking for waddch in -lcurses""... $ac_c" 1>&6
-echo "configure:2555: checking for waddch in -lcurses" >&5
+echo "configure:2598: checking for waddch in -lcurses" >&5
 ac_lib_var=`echo curses'_'waddch | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2559,7 +2602,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lcurses  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2563 "configure"
+#line 2606 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2570,7 +2613,7 @@
 waddch()
 ; return 0; }
 EOF
-if { (eval echo configure:2574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2597,15 +2640,58 @@
   echo "$ac_t""no" 1>&6
 fi
 
+    echo $ac_n "checking for resizeterm in -lcurses""... $ac_c" 1>&6
+echo "configure:2645: checking for resizeterm in -lcurses" >&5
+ac_lib_var=`echo curses'_'resizeterm | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2653 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char resizeterm();
+
+int main() {
+resizeterm()
+; return 0; }
+EOF
+if { (eval echo configure:2664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_RESIZETERM 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
 fi
 
 echo $ac_n "checking "for GNU style IPX support"""... $ac_c" 1>&6
-echo "configure:2604: checking "for GNU style IPX support"" >&5
+echo "configure:2690: checking "for GNU style IPX support"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_ipx_gnu'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2609 "configure"
+#line 2695 "configure"
 #include "confdefs.h"
 #include <sys/socket.h>
     #include <netipx/ipx.h>
@@ -2613,7 +2699,7 @@
 ((struct sockaddr_ipx *)0)->sipx_family == AF_IPX
 ; return 0; }
 EOF
-if { (eval echo configure:2617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2703: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cat >> confdefs.h <<\EOF
 #define HAVE_IPX_GNU 1
@@ -2635,12 +2721,12 @@
 if test "$ac_cv_c_ipx_gnu" = "no"
 then
  echo $ac_n "checking "for linux style IPX support"""... $ac_c" 1>&6
-echo "configure:2639: checking "for linux style IPX support"" >&5
+echo "configure:2725: checking "for linux style IPX support"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_ipx_linux'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2644 "configure"
+#line 2730 "configure"
 #include "confdefs.h"
 #include <sys/socket.h>
      #include <asm/types.h>
@@ -2649,7 +2735,7 @@
 ((struct sockaddr_ipx *)0)->sipx_family == AF_IPX
 ; return 0; }
 EOF
-if { (eval echo configure:2653: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2739: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cat >> confdefs.h <<\EOF
 #define HAVE_IPX_LINUX 1
@@ -2673,17 +2759,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2677: checking for $ac_hdr" >&5
+echo "configure:2763: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2682 "configure"
+#line 2768 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2687: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2773: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2711,12 +2797,12 @@
 
 
 echo $ac_n "checking "for Open Sound System"""... $ac_c" 1>&6
-echo "configure:2715: checking "for Open Sound System"" >&5
+echo "configure:2801: checking "for Open Sound System"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_opensoundsystem'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2720 "configure"
+#line 2806 "configure"
 #include "confdefs.h"
 
 	#if defined(HAVE_SYS_SOUNDCARD_H)
@@ -2737,7 +2823,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2741: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2827: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_opensoundsystem="yes"
 else
@@ -2761,12 +2847,12 @@
 
 
 echo $ac_n "checking "for union semun"""... $ac_c" 1>&6
-echo "configure:2765: checking "for union semun"" >&5
+echo "configure:2851: checking "for union semun"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_union_semun'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2770 "configure"
+#line 2856 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/sem.h>
@@ -2774,7 +2860,7 @@
 union semun foo
 ; return 0; }
 EOF
-if { (eval echo configure:2778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2864: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_union_semun="yes"
 else
@@ -2802,7 +2888,7 @@
 then
   CFLAGS="$CFLAGS -Wall"
   echo $ac_n "checking "for gcc strength-reduce bug"""... $ac_c" 1>&6
-echo "configure:2806: checking "for gcc strength-reduce bug"" >&5
+echo "configure:2892: checking "for gcc strength-reduce bug"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_gcc_strength_bug'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2810,7 +2896,7 @@
   ac_cv_c_gcc_strength_bug="yes"
 else
   cat > conftest.$ac_ext <<EOF
-#line 2814 "configure"
+#line 2900 "configure"
 #include "confdefs.h"
 
 int main(void) {
@@ -2821,7 +2907,7 @@
   exit( Array[1] != -2 );
 }
 EOF
-if { (eval echo configure:2825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_gcc_strength_bug="no"
 else
@@ -2844,7 +2930,7 @@
 
 
 echo $ac_n "checking "whether external symbols need an underscore prefix"""... $ac_c" 1>&6
-echo "configure:2848: checking "whether external symbols need an underscore prefix"" >&5
+echo "configure:2934: checking "whether external symbols need an underscore prefix"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_extern_prefix'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2856,14 +2942,14 @@
 	.long 0
 EOF
 cat > conftest.$ac_ext <<EOF
-#line 2860 "configure"
+#line 2946 "configure"
 #include "confdefs.h"
 extern int ac_test;
 int main() {
 if (ac_test) return 1
 ; return 0; }
 EOF
-if { (eval echo configure:2867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_cv_c_extern_prefix="yes"
 else
@@ -2887,7 +2973,7 @@
 
 
 echo $ac_n "checking "whether assembler accepts .string"""... $ac_c" 1>&6
-echo "configure:2891: checking "whether assembler accepts .string"" >&5
+echo "configure:2977: checking "whether assembler accepts .string"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_asm_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2897,14 +2983,14 @@
 	.string "test"
 EOF
 cat > conftest.$ac_ext <<EOF
-#line 2901 "configure"
+#line 2987 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_cv_c_asm_string="yes"
 else
@@ -2932,21 +3018,21 @@
 if test "$LIB_TARGET" = "libwine.so.1.0"
 then
   echo $ac_n "checking "whether we can build a Linux dll"""... $ac_c" 1>&6
-echo "configure:2936: checking "whether we can build a Linux dll"" >&5
+echo "configure:3022: checking "whether we can build a Linux dll"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_dll_linux'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   saved_cflags=$CFLAGS
   CFLAGS="$CFLAGS -fPIC -shared -Wl,-soname,conftest.so.1.0"
   cat > conftest.$ac_ext <<EOF
-#line 2943 "configure"
+#line 3029 "configure"
 #include "confdefs.h"
 
 int main() {
 return 1
 ; return 0; }
 EOF
-if { (eval echo configure:2950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_cv_c_dll_linux="yes"
 else
@@ -2967,21 +3053,21 @@
     LDSHARED="\$(CC) -shared -Wl,-soname,libwine.so"
   else
     echo $ac_n "checking "whether we can build a NetBSD dll"""... $ac_c" 1>&6
-echo "configure:2971: checking "whether we can build a NetBSD dll"" >&5
+echo "configure:3057: checking "whether we can build a NetBSD dll"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_dll_netbsd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   saved_cflags=$CFLAGS
     CFLAGS="$CFLAGS -fPIC -Bshareable -Bforcearchive"
     cat > conftest.$ac_ext <<EOF
-#line 2978 "configure"
+#line 3064 "configure"
 #include "confdefs.h"
 
 int main() {
 return 1
 ; return 0; }
 EOF
-if { (eval echo configure:2985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_cv_c_dll_netbsd="yes"
 else
@@ -3012,7 +3098,7 @@
 
 
 echo $ac_n "checking "for reentrant libc"""... $ac_c" 1>&6
-echo "configure:3016: checking "for reentrant libc"" >&5
+echo "configure:3102: checking "for reentrant libc"" >&5
 if eval "test \"`echo '$''{'wine_cv_libc_reentrant'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3020,14 +3106,14 @@
   wine_cv_libc_reentrant=yes 
 else
   cat > conftest.$ac_ext <<EOF
-#line 3024 "configure"
+#line 3110 "configure"
 #include "confdefs.h"
 int myerrno = 0;
 char buf[256];
 int *__errno_location(){return &myerrno;}
 main(){connect(0,buf,255); exit(!myerrno);}
 EOF
-if { (eval echo configure:3031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   wine_cv_libc_reentrant=yes
 else
@@ -3052,7 +3138,7 @@
 
 
 echo $ac_n "checking "for reentrant X libraries"""... $ac_c" 1>&6
-echo "configure:3056: checking "for reentrant X libraries"" >&5
+echo "configure:3142: checking "for reentrant X libraries"" >&5
 if eval "test \"`echo '$''{'wine_cv_x_reentrant'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3097,12 +3183,12 @@
 for ac_func in clone getpagesize memmove sendmsg sigaltstack strerror stricmp tcgetattr timegm usleep wait4 waitpid vfscanf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3101: checking for $ac_func" >&5
+echo "configure:3187: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3106 "configure"
+#line 3192 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3125,7 +3211,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3149,21 +3235,21 @@
 fi
 done
 
-for ac_hdr in wctype.h sys/syscall.h syscall.h sys/param.h sys/vfs.h sys/mount.h sys/statfs.h float.h linux/cdrom.h linux/ucdrom.h sys/cdio.h sys/filio.h sys/modem.h strings.h sys/strtio.h dlfcn.h unistd.h sys/sockio.h net/if.h netinet/in.h
+for ac_hdr in wctype.h sys/syscall.h syscall.h sys/param.h sys/vfs.h sys/mount.h sys/statfs.h float.h linux/cdrom.h linux/ucdrom.h sys/cdio.h sys/filio.h sys/modem.h strings.h sys/strtio.h dlfcn.h unistd.h sys/sockio.h net/if.h netinet/in.h sys/file.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3157: checking for $ac_hdr" >&5
+echo "configure:3243: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3162 "configure"
+#line 3248 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3167: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3253: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3190,12 +3276,12 @@
 done
 
 echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:3194: checking whether stat file-mode macros are broken" >&5
+echo "configure:3280: checking whether stat file-mode macros are broken" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3199 "configure"
+#line 3285 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -3246,12 +3332,12 @@
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3250: checking for working const" >&5
+echo "configure:3336: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3255 "configure"
+#line 3341 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3300,7 +3386,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -3321,12 +3407,12 @@
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3325: checking for ANSI C header files" >&5
+echo "configure:3411: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3330 "configure"
+#line 3416 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3334,7 +3420,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3338: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3351,7 +3437,7 @@
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3355 "configure"
+#line 3441 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3369,7 +3455,7 @@
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3373 "configure"
+#line 3459 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3390,7 +3476,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 3394 "configure"
+#line 3480 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3401,7 +3487,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:3405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -3425,12 +3511,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3429: checking for size_t" >&5
+echo "configure:3515: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3434 "configure"
+#line 3520 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3458,7 +3544,7 @@
 fi
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:3462: checking size of long long" >&5
+echo "configure:3548: checking size of long long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3466,7 +3552,7 @@
   ac_cv_sizeof_long_long=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 3470 "configure"
+#line 3556 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -3477,7 +3563,7 @@
   exit(0);
 }
 EOF
-if { (eval echo configure:3481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -3500,7 +3586,7 @@
 
 if test $ac_cv_func_sendmsg = no; then
     echo $ac_n "checking for sendmsg in -lsocket""... $ac_c" 1>&6
-echo "configure:3504: checking for sendmsg in -lsocket" >&5
+echo "configure:3590: checking for sendmsg in -lsocket" >&5
 ac_lib_var=`echo socket'_'sendmsg | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3508,7 +3594,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3512 "configure"
+#line 3598 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3519,7 +3605,7 @@
 sendmsg()
 ; return 0; }
 EOF
-if { (eval echo configure:3523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3552,12 +3638,12 @@
 if test "$ac_cv_header_sys_vfs_h" = "yes"
 then
     echo $ac_n "checking "whether sys/vfs.h defines statfs"""... $ac_c" 1>&6
-echo "configure:3556: checking "whether sys/vfs.h defines statfs"" >&5
+echo "configure:3642: checking "whether sys/vfs.h defines statfs"" >&5
 if eval "test \"`echo '$''{'wine_cv_sys_vfs_has_statfs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3561 "configure"
+#line 3647 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -3574,7 +3660,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:3578: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3664: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_sys_vfs_has_statfs=yes
 else
@@ -3601,12 +3687,12 @@
 if test "$ac_cv_header_sys_statfs_h" = "yes"
 then
     echo $ac_n "checking "whether sys/statfs.h defines statfs"""... $ac_c" 1>&6
-echo "configure:3605: checking "whether sys/statfs.h defines statfs"" >&5
+echo "configure:3691: checking "whether sys/statfs.h defines statfs"" >&5
 if eval "test \"`echo '$''{'wine_cv_sys_statfs_has_statfs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3610 "configure"
+#line 3696 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -3621,7 +3707,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:3625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3711: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_sys_statfs_has_statfs=yes
 else
@@ -3648,12 +3734,12 @@
 if test "$ac_cv_header_sys_mount_h" = "yes"
 then
     echo $ac_n "checking "whether sys/mount.h defines statfs"""... $ac_c" 1>&6
-echo "configure:3652: checking "whether sys/mount.h defines statfs"" >&5
+echo "configure:3738: checking "whether sys/mount.h defines statfs"" >&5
 if eval "test \"`echo '$''{'wine_cv_sys_mount_has_statfs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3657 "configure"
+#line 3743 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -3668,7 +3754,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:3672: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3758: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_sys_mount_has_statfs=yes
 else
@@ -3694,7 +3780,7 @@
 
 
 echo $ac_n "checking "for statfs.f_bfree"""... $ac_c" 1>&6
-echo "configure:3698: checking "for statfs.f_bfree"" >&5
+echo "configure:3784: checking "for statfs.f_bfree"" >&5
 if eval "test \"`echo '$''{'wine_cv_statfs_bfree'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3703,7 +3789,7 @@
         wine_cv_statfs_bfree=no
     else
     	cat > conftest.$ac_ext <<EOF
-#line 3707 "configure"
+#line 3793 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -3730,7 +3816,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:3734: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3820: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_statfs_bfree=yes
 else
@@ -3754,7 +3840,7 @@
 fi
 
 echo $ac_n "checking "for statfs.f_bavail"""... $ac_c" 1>&6
-echo "configure:3758: checking "for statfs.f_bavail"" >&5
+echo "configure:3844: checking "for statfs.f_bavail"" >&5
 if eval "test \"`echo '$''{'wine_cv_statfs_bavail'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3763,7 +3849,7 @@
         wine_cv_statfs_bavail=no
     else
     	cat > conftest.$ac_ext <<EOF
-#line 3767 "configure"
+#line 3853 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -3790,7 +3876,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:3794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_statfs_bavail=yes
 else
@@ -3815,7 +3901,7 @@
 
 
 echo $ac_n "checking "for working sigaltstack"""... $ac_c" 1>&6
-echo "configure:3819: checking "for working sigaltstack"" >&5
+echo "configure:3905: checking "for working sigaltstack"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_working_sigaltstack'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3824,7 +3910,7 @@
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 3828 "configure"
+#line 3914 "configure"
 #include "confdefs.h"
 
 	#include <stdio.h>
@@ -3862,7 +3948,7 @@
 	}
 	
 EOF
-if { (eval echo configure:3866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_working_sigaltstack="yes"
 else
@@ -3889,12 +3975,12 @@
 
 
 echo $ac_n "checking "for msg_accrights in struct msghdr"""... $ac_c" 1>&6
-echo "configure:3893: checking "for msg_accrights in struct msghdr"" >&5
+echo "configure:3979: checking "for msg_accrights in struct msghdr"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_msg_accrights'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3898 "configure"
+#line 3984 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -3902,7 +3988,7 @@
 struct msghdr hdr; hdr.msg_accrights=0
 ; return 0; }
 EOF
-if { (eval echo configure:3906: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_msg_accrights="yes"
 else
@@ -4420,6 +4506,14 @@
 test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
 
 
+if test "$ac_cv_lib_ncurses_resizeterm" = "no" -a "$ac_cv_lib_ncurses_waddch" = "yes"
+then
+  echo
+  echo "*** Warning: resizeterm not found in ncurses. Wine will be built without"
+  echo "*** terminal resize support. Consider upgrading ncurses."
+  echo
+fi
+
 if test "$wine_cv_libc_reentrant" = "no" 
 then
   echo
diff --git a/configure.in b/configure.in
index 194029b..65c19c1 100644
--- a/configure.in
+++ b/configure.in
@@ -117,9 +117,11 @@
 dnl **** Check which curses lib to use ***
 AC_CHECK_LIB(ncurses,waddch)
 if test "$ac_cv_lib_ncurses_waddch" = "yes"
-then :
+then
+    AC_CHECK_LIB(ncurses,resizeterm,AC_DEFINE(HAVE_RESIZETERM))
 else
     AC_CHECK_LIB(curses,waddch)
+    AC_CHECK_LIB(curses,resizeterm,AC_DEFINE(HAVE_RESIZETERM))
 fi
 
 dnl **** Check for IPX (currently Linux only) ****
@@ -342,7 +344,7 @@
 dnl **** Check for functions and header files ****
 
 AC_CHECK_FUNCS(clone getpagesize memmove sendmsg sigaltstack strerror stricmp tcgetattr timegm usleep wait4 waitpid vfscanf)
-AC_CHECK_HEADERS(wctype.h sys/syscall.h syscall.h sys/param.h sys/vfs.h sys/mount.h sys/statfs.h float.h linux/cdrom.h linux/ucdrom.h sys/cdio.h sys/filio.h sys/modem.h strings.h sys/strtio.h dlfcn.h unistd.h sys/sockio.h net/if.h netinet/in.h)
+AC_CHECK_HEADERS(wctype.h sys/syscall.h syscall.h sys/param.h sys/vfs.h sys/mount.h sys/statfs.h float.h linux/cdrom.h linux/ucdrom.h sys/cdio.h sys/filio.h sys/modem.h strings.h sys/strtio.h dlfcn.h unistd.h sys/sockio.h net/if.h netinet/in.h sys/file.h)
 AC_HEADER_STAT()
 AC_C_CONST()
 AC_TYPE_SIZE_T()
@@ -617,6 +619,14 @@
 windows/ttydrv/Makefile
 windows/x11drv/Makefile ])
 
+if test "$ac_cv_lib_ncurses_resizeterm" = "no" -a "$ac_cv_lib_ncurses_waddch" = "yes"
+then
+  echo
+  echo "*** Warning: resizeterm not found in ncurses. Wine will be built without"
+  echo "*** terminal resize support. Consider upgrading ncurses."
+  echo
+fi
+
 if test "$wine_cv_libc_reentrant" = "no" 
 then
   echo
diff --git a/console/ncurses.c b/console/ncurses.c
index 8bdc09a..b5b5fc6 100644
--- a/console/ncurses.c
+++ b/console/ncurses.c
@@ -39,7 +39,9 @@
    driver.getCursorPosition = NCURSES_GetCursorPosition;
    driver.getCharacterAtCursor = NCURSES_GetCharacterAtCursor;
    driver.clearScreen = NCURSES_ClearScreen;
+#ifdef HAVE_RESIZETERM
    driver.notifyResizeScreen = NCURSES_NotifyResizeScreen;
+#endif
 
    driver.checkForKeystroke = NCURSES_CheckForKeystroke;
    driver.getKeystroke = NCURSES_GetKeystroke;
@@ -62,9 +64,14 @@
 
 void NCURSES_Write(char output, int fg, int bg, int attribute)
 {
+   char row, col;
+
    /* We can discard all extended information. */
    if (waddch(stdscr, output) == ERR)
-      FIXME(console, "NCURSES: waddch() failed.\n");
+   {
+      NCURSES_GetCursorPosition(&row, &col);
+      FIXME(console, "NCURSES: waddch() failed at %d, %d.\n", row, col);
+   }
 }
 
 void NCURSES_Close()
@@ -137,6 +144,8 @@
    werase(stdscr);
 }
 
+#ifdef HAVE_RESIZETERM
+
 void NCURSES_NotifyResizeScreen(int x, int y)
 {
    /* Note: This function gets called *after* another driver in the chain
@@ -146,4 +155,6 @@
    resizeterm(y, x);
 }
 
+#endif
+
 #endif /* WINE_NCURSES */
diff --git a/controls/listbox.c b/controls/listbox.c
index 3405121..74b16eb 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -1186,23 +1186,26 @@
 
 /***********************************************************************
  *           LISTBOX_SetCaretIndex
+ *
+ * NOTES
+ *   index must be between 0 and descr->nb_items-1, or LB_ERR is returned.
+ *
  */
 static LRESULT LISTBOX_SetCaretIndex( WND *wnd, LB_DESCR *descr, INT32 index,
                                       BOOL32 fully_visible )
 {
-    INT32 oldfocus = descr->focus_item;
+    INT32 oldfocus = descr->focus_item;          
 
-    if ((index < -1) || (index >= descr->nb_items)) return LB_ERR;
+    if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
     if (index == oldfocus) return LB_OKAY;
     descr->focus_item = index;
     if ((oldfocus != -1) && descr->caret_on && (GetFocus32() == wnd->hwndSelf))
         LISTBOX_RepaintItem( wnd, descr, oldfocus, ODA_FOCUS );
-    if (index != -1)
-    {
-        LISTBOX_MakeItemVisible( wnd, descr, index, fully_visible );
-        if (descr->caret_on && (GetFocus32() == wnd->hwndSelf))
-            LISTBOX_RepaintItem( wnd, descr, index, ODA_FOCUS );
-    }
+
+    LISTBOX_MakeItemVisible( wnd, descr, index, fully_visible );
+    if (descr->caret_on && (GetFocus32() == wnd->hwndSelf))
+        LISTBOX_RepaintItem( wnd, descr, index, ODA_FOCUS );
+
     return LB_OKAY;
 }
 
@@ -2284,7 +2287,7 @@
         wParam = (INT32)(INT16)wParam;
         /* fall through */
     case LB_SETCURSEL32:
-        if (wParam != -1) LISTBOX_MakeItemVisible( wnd, descr, wParam, TRUE );
+        LISTBOX_SetCaretIndex( wnd, descr, wParam, TRUE );  
         return LISTBOX_SetSelection( wnd, descr, wParam, TRUE, FALSE );
 
     case LB_GETSELCOUNT16:
diff --git a/debugger/editline.c b/debugger/editline.c
index 51e7046..68645fc 100644
--- a/debugger/editline.c
+++ b/debugger/editline.c
@@ -28,6 +28,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <errno.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -279,6 +280,7 @@
 TTYget()
 {
     CHAR	c;
+    int retv;
 
     TTYflush();
     if (Pushed) {
@@ -287,7 +289,14 @@
     }
     if (*Input)
 	return *Input++;
-    return read(0, &c, (size_t)1) == 1 ? c : EOF;
+
+    while ( ( retv = read( 0, &c, (size_t)1 ) ) == -1 )
+    {
+        if ( errno != EINTR )
+            perror( "read" );
+    }
+
+    return retv == 1 ? c : EOF;
 }
 
 #define TTYback()	(backspace ? TTYputs((CHAR *)backspace) : TTYput('\b'))
diff --git a/debugger/msc.c b/debugger/msc.c
index 9b9b56e..80ed6cb 100644
--- a/debugger/msc.c
+++ b/debugger/msc.c
@@ -33,7 +33,7 @@
 #include "debugger.h"
 #include "peexe.h"
 #include "xmalloc.h"
-
+#include "file.h"
 
 /*
  * This is an index we use to keep track of the debug information
@@ -888,7 +888,6 @@
   int			  rtn = FALSE;
   int			  orig_size;
   PIMAGE_DEBUG_DIRECTORY dbgptr;
-  struct deferred_debug_info * deefer;
 
   orig_size = size;
   dbgptr = (PIMAGE_DEBUG_DIRECTORY) (hModule + v_addr);
@@ -934,35 +933,72 @@
 	   * means that this entry points to a .DBG file.  Otherwise,
 	   * it just points to itself, and we can ignore this.
 	   */
-	  if(    (dbgptr->Type == IMAGE_DEBUG_TYPE_MISC)
-	      && (PE_HEADER(hModule)->FileHeader.Characteristics & IMAGE_FILE_DEBUG_STRIPPED) == 0 )
-	    {
-	      break;
-	    }
 
-	  deefer = (struct deferred_debug_info *) xmalloc(sizeof(*deefer));
-	  deefer->module    = hModule;
-	  deefer->load_addr = (char *)hModule;
-	  deefer->dbg_info  = NULL;
-	  deefer->dbg_size  = 0;
 
-	  /*
-	   * Read the important bits.  What we do after this depends
-	   * upon the type, but this is always enough so we are able
-	   * to proceed if we know what we need to do next.
-	   */
-	  deefer->dbg_size = dbgptr->SizeOfData;
-	  deefer->dbg_info = (char *)(hModule + dbgptr->PointerToRawData);
-	  deefer->dbgdir = dbgptr;
-	  deefer->next = dbglist;
-	  deefer->loaded = FALSE;
-	  deefer->dbg_index = DEBUG_next_index;
-	  deefer->module_name = xstrdup(module_name);
 
-	  deefer->sectp = PE_SECTIONS(hModule);
-	  deefer->nsect = PE_HEADER(hModule)->FileHeader.NumberOfSections;
 
-	  dbglist = deefer;
+
+
+          if(   (dbgptr->Type != IMAGE_DEBUG_TYPE_MISC) ||
+                (PE_HEADER(hModule)->FileHeader.Characteristics & IMAGE_FILE_DEBUG_STRIPPED) != 0 )
+            {
+                struct deferred_debug_info*      deefer = (struct deferred_debug_info *) xmalloc(sizeof(*deefer));
+ 
+                deefer->module    = hModule;
+                deefer->load_addr = (char *)hModule;
+ 
+                /*
+                 * Read the important bits.  What we do after this depends
+                 * upon the type, but this is always enough so we are able
+                 * to proceed if we know what we need to do next.
+                 */                  
+                /* in some cases, debug information has not been mapped, so load it...
+                 * basically, the PE loader maps all sections (data, resources...), but doesn't map
+                 * the DataDirectory array's content. One its entry contains the *beloved*
+                 * debug information. (Note the DataDirectory is mapped, not its content)
+                 */
+                if (IsBadReadPtr32((void*)hModule, dbgptr->PointerToRawData + dbgptr->SizeOfData))
+                {
+                    char                 fn[PATH_MAX];
+                    int                  fd = -1;
+                    DOS_FULL_NAME        full_name;
+ 
+                    if (GetModuleFileName32A(hModule, fn, sizeof(fn)) > 0 &&
+                        DOSFS_GetFullName(fn, TRUE, &full_name) &&
+                        (fd = open(full_name.long_name, O_RDONLY)) > 0)
+                    {
+                        deefer->dbg_info = mmap(NULL, dbgptr->SizeOfData,
+                                                PROT_READ, MAP_PRIVATE, fd, dbgptr->PointerToRawData);
+                        close(fd);
+                        if( deefer->dbg_info == (char *) 0xffffffff )
+                        {
+                            free(deefer);
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        free(deefer);
+                        fprintf(stderr, " (not mapped: fn=%s, lfn=%s, fd=%d)", fn, full_name.long_name, fd);
+                        break;
+                    }
+                }
+                else
+                {
+                    deefer->dbg_info = (char *)(hModule + dbgptr->PointerToRawData);
+                }
+                deefer->dbg_size = dbgptr->SizeOfData;
+                deefer->dbgdir = dbgptr;
+                deefer->next = dbglist;
+                deefer->loaded = FALSE;
+                deefer->dbg_index = DEBUG_next_index;
+                deefer->module_name = xstrdup(module_name);
+
+                deefer->sectp = PE_SECTIONS(hModule);
+                deefer->nsect = PE_HEADER(hModule)->FileHeader.NumberOfSections;
+
+                dbglist = deefer;
+            }
 	  break;
 	default:
 	}
@@ -1813,7 +1849,7 @@
   status = stat(filename, &statbuf);
   if( status == -1 )
     {
-      fprintf(stderr, "Unable to open .PDB file %s\n", filename);
+      fprintf(stderr, "-Unable to open .PDB file %s\n", filename);
       goto leave;
     }
 
@@ -1823,7 +1859,7 @@
   fd = open(filename, O_RDONLY);
   if( fd == -1 )
     {
-      fprintf(stderr, "Unable to open .DBG file %s\n", filename);
+      fprintf(stderr, "-Unable to open .DBG file %s\n", filename);
       goto leave;
     }
 
@@ -1835,7 +1871,7 @@
 	      MAP_PRIVATE, fd, 0);
   if( addr == (char *) 0xffffffff )
     {
-      fprintf(stderr, "Unable to mmap .DBG file %s\n", filename);
+      fprintf(stderr, "-Unable to mmap .DBG file %s\n", filename);
       goto leave;
     }
 
@@ -2141,7 +2177,7 @@
   status = stat(filename, &statbuf);
   if( status == -1 )
     {
-      fprintf(stderr, "Unable to open .DBG file %s\n", filename);
+      fprintf(stderr, "-Unable to open .DBG file %s\n", filename);
       goto leave;
     }
 
diff --git a/dlls/comctl32/Makefile.in b/dlls/comctl32/Makefile.in
index 5bd0b5a..a753752 100644
--- a/dlls/comctl32/Makefile.in
+++ b/dlls/comctl32/Makefile.in
@@ -11,6 +11,7 @@
 	comctl32undoc.c \
 	commctrl.c \
 	datetime.c \
+	flatsb.c \
 	header.c \
 	hotkey.c \
 	imagelist.c \
diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c
index f579b6c..463b07f 100644
--- a/dlls/comctl32/commctrl.c
+++ b/dlls/comctl32/commctrl.c
@@ -12,6 +12,7 @@
 #include "animate.h"
 #include "comboex.h"
 #include "datetime.h"
+#include "flatsb.h"
 #include "header.h"
 #include "hotkey.h"
 #include "ipaddress.h"
@@ -20,6 +21,7 @@
 #include "nativefont.h"
 #include "pager.h"
 #include "progress.h"
+#include "propsheet.h"
 #include "rebar.h"
 #include "status.h"
 #include "tab.h"
@@ -70,9 +72,11 @@
 
 		/* register all Win95 common control classes */
 		ANIMATE_Register ();
+		FLATSB_Register ();
 		HEADER_Register ();
 		HOTKEY_Register ();
 		LISTVIEW_Register ();
+		PROPSHEET_Register ();
 		PROGRESS_Register ();
 		STATUS_Register ();
 		TAB_Register ();
@@ -92,6 +96,7 @@
 		ANIMATE_Unregister ();
 		COMBOEX_Unregister ();
 		DATETIME_Unregister ();
+		FLATSB_Unregister ();
 		HEADER_Unregister ();
 		HOTKEY_Unregister ();
 		IPADDRESS_Unregister ();
@@ -99,6 +104,7 @@
 		MONTHCAL_Unregister ();
 		NATIVEFONT_Unregister ();
 		PAGER_Unregister ();
+		PROPSHEET_UnRegister ();
 		PROGRESS_Unregister ();
 		REBAR_Unregister ();
 		STATUS_Unregister ();
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index d9f816a..79963a8 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -60,12 +60,7 @@
 {
     DATETIME_INFO *infoPtr = DATETIME_GetInfoPtr(wndPtr);
 
-
-
-
-
-
-    /* free ipaddress info data */
+    /* free datetime info data */
     COMCTL32_Free (infoPtr);
 
     return 0;
@@ -82,6 +77,49 @@
     switch (uMsg)
     {
 
+    case DTM_GETSYSTEMTIME:
+        FIXME (datetime, "Unimplemented msg DTM_GETSYSTEMTIME\n");
+        return GDT_VALID;
+
+    case DTM_SETSYSTEMTIME:
+        FIXME (datetime, "Unimplemented msg DTM_SETSYSTEMTIME\n");
+        return 1;
+
+    case DTM_GETRANGE:
+        FIXME (datetime, "Unimplemented msg DTM_GETRANGE\n");
+        return 0;
+
+    case DTM_SETRANGE:
+        FIXME (datetime, "Unimplemented msg DTM_SETRANGE\n");
+        return 1;
+
+    case DTM_SETFORMAT32A:
+        FIXME (datetime, "Unimplemented msg DTM_SETFORMAT32A\n");
+        return 1;
+
+    case DTM_SETFORMAT32W:
+        FIXME (datetime, "Unimplemented msg DTM_SETFORMAT32W\n");
+        return 1;
+
+    case DTM_SETMCCOLOR:
+        FIXME (datetime, "Unimplemented msg DTM_SETMCCOLOR\n");
+        return 0;
+
+    case DTM_GETMCCOLOR:
+        FIXME (datetime, "Unimplemented msg DTM_GETMCCOLOR\n");
+        return 0;
+
+    case DTM_GETMONTHCAL:
+        FIXME (datetime, "Unimplemented msg DTM_GETMONTHCAL\n");
+        return 0;
+
+    case DTM_SETMCFONT:
+        FIXME (datetime, "Unimplemented msg DTM_SETMCFONT\n");
+        return 0;
+
+    case DTM_GETMCFONT:
+        FIXME (datetime, "Unimplemented msg DTM_GETMCFONT\n");
+        return 0;
 
 	case WM_CREATE:
 	    return DATETIME_Create (wndPtr, wParam, lParam);
diff --git a/dlls/comctl32/flatsb.c b/dlls/comctl32/flatsb.c
new file mode 100644
index 0000000..c61eb08
--- /dev/null
+++ b/dlls/comctl32/flatsb.c
@@ -0,0 +1,179 @@
+/*
+ * Flat Scrollbar control
+ *
+ * Copyright 1998 Eric Kohl
+ *
+ * NOTES
+ *   This is just a dummy control. An author is needed! Any volunteers?
+ *   I will only improve this control once in a while.
+ *     Eric <ekohl@abo.rhein-zeitung.de>
+ *
+ * TODO:
+ *   - All messages.
+ *   - All notifications.
+ *
+ */
+
+#include "windows.h"
+#include "commctrl.h"
+#include "flatsb.h" 
+#include "win.h"
+#include "debug.h"
+
+
+#define FlatSB_GetInfoPtr(wndPtr) ((FLATSB_INFO*)wndPtr->wExtra[0])
+
+
+BOOL32 WINAPI 
+FlatSB_EnableScrollBar(HWND32 hwnd, INT32 dummy, UINT32 dummy2)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+BOOL32 WINAPI 
+FlatSB_ShowScrollBar(HWND32 hwnd, INT32 code, BOOL32 flag)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+BOOL32 WINAPI 
+FlatSB_GetScrollRange(HWND32 hwnd, INT32 code, LPINT32 min, LPINT32 max)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+BOOL32 WINAPI 
+FlatSB_GetScrollInfo(HWND32 hwnd, INT32 code, LPSCROLLINFO info)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+INT32 WINAPI 
+FlatSB_GetScrollPos(HWND32 hwnd, INT32 code)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+BOOL32 WINAPI 
+FlatSB_GetScrollProp(HWND32 hwnd, INT32 propIndex, LPINT32 prop)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+
+INT32 WINAPI 
+FlatSB_SetScrollPos(HWND32 hwnd, INT32 code, INT32 pos, BOOL32 fRedraw)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+INT32 WINAPI 
+FlatSB_SetScrollInfo(HWND32 hwnd, INT32 code, LPSCROLLINFO info, BOOL32 fRedraw)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+INT32 WINAPI 
+FlatSB_SetScrollRange(HWND32 hwnd, INT32 code, INT32 min, INT32 max, BOOL32 fRedraw)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+BOOL32 WINAPI 
+FlatSB_SetScrollProp(HWND32 hwnd, UINT32 index, INT32 newValue, BOOL32 flag)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+
+BOOL32 WINAPI InitializeFlatSB(HWND32 hwnd)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+HRESULT WINAPI UninitializeFlatSB(HWND32 hwnd)
+{
+    FIXME(commctrl,"stub\n");
+    return 0;
+}
+
+
+
+static LRESULT
+FlatSB_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    return 0;
+}
+
+
+static LRESULT
+FlatSB_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    return 0;
+}
+
+
+
+
+LRESULT WINAPI
+FlatSB_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
+{
+    WND *wndPtr = WIN_FindWndPtr(hwnd);
+
+    switch (uMsg)
+    {
+
+	case WM_CREATE:
+	    return FlatSB_Create (wndPtr, wParam, lParam);
+
+	case WM_DESTROY:
+	    return FlatSB_Destroy (wndPtr, wParam, lParam);
+
+	default:
+	    if (uMsg >= WM_USER)
+		ERR (datetime, "unknown msg %04x wp=%08x lp=%08lx\n",
+		     uMsg, wParam, lParam);
+	    return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
+    }
+    return 0;
+}
+
+
+VOID
+FLATSB_Register (VOID)
+{
+    WNDCLASS32A wndClass;
+
+    if (GlobalFindAtom32A (FLATSB_CLASS32A)) return;
+
+    ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
+    wndClass.style         = CS_GLOBALCLASS;
+    wndClass.lpfnWndProc   = (WNDPROC32)FlatSB_WindowProc;
+    wndClass.cbClsExtra    = 0;
+    wndClass.cbWndExtra    = sizeof(FLATSB_INFO *);
+    wndClass.hCursor       = LoadCursor32A (0, IDC_ARROW32A);
+    wndClass.hbrBackground = (HBRUSH32)(COLOR_WINDOW + 1);
+    wndClass.lpszClassName = FLATSB_CLASS32A;
+ 
+    RegisterClass32A (&wndClass);
+}
+
+
+VOID
+FLATSB_Unregister (VOID)
+{
+    if (GlobalFindAtom32A (FLATSB_CLASS32A))
+	UnregisterClass32A (FLATSB_CLASS32A, (HINSTANCE32)NULL);
+}
+
diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c
index 993d35b..70404fd 100644
--- a/dlls/comctl32/imagelist.c
+++ b/dlls/comctl32/imagelist.c
@@ -32,8 +32,8 @@
  
 #include "windows.h"
 #include "winversion.h"
-#include "compobj.h"
-#include "storage.h"
+#include "wine/obj_base.h"
+#include "wine/obj_storage.h"
 #include "imagelist.h"
 #include "commctrl.h"
 #include "debug.h"
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
index 4bfd3af..19341bf 100644
--- a/dlls/comctl32/propsheet.c
+++ b/dlls/comctl32/propsheet.c
@@ -9,18 +9,50 @@
  */
 
 #include "windows.h"
+#include "winversion.h"
 #include "commctrl.h"
+#include "propsheet.h"
 #include "win.h"
 #include "debug.h"
 
+LRESULT WINAPI
+PROPSHEET_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam);
+
+
+
+
+
+/*****************************************************************
+ *            PropertySheet32AW   (COMCTL32.83)
+ */  
+INT32 WINAPI PropertySheet32AW(LPVOID propertySheetHeader)
+{   
+	if (VERSION_OsIsUnicode())
+		return PropertySheet32W ((LPCPROPSHEETHEADER32W) propertySheetHeader);
+	return PropertySheet32A ((LPCPROPSHEETHEADER32A) propertySheetHeader);
+}
+ 
+
+
+
 /*****************************************************************
  *            PropertySheet32A   (COMCTL32.84)
  */
-INT32 WINAPI PropertySheet32A(LPCPROPSHEETHEADER32A propertySheetHeader)
+INT32 WINAPI PropertySheet32A(LPCPROPSHEETHEADER32A lppsh)
 {
-    FIXME(commctrl, "(%p): stub\n", propertySheetHeader);
+	HWND32 hwnd;
 
-    return -1;
+    FIXME(propsheet, "(%p): stub\n", lppsh);
+
+	if (lppsh->dwFlags & PSH_MODELESS) {
+        hwnd = CreateDialogParam32A ( lppsh->hInstance, WC_PROPSHEET32A,
+                    lppsh->hwndParent, PROPSHEET_WindowProc, (LPARAM) lppsh );
+		ShowWindow32 (hwnd, TRUE);
+	} else {
+		hwnd =  DialogBoxParam32A ( lppsh->hInstance, WC_PROPSHEET32A,
+                    lppsh->hwndParent, PROPSHEET_WindowProc, (LPARAM) lppsh );
+	}
+    return hwnd;
 }
 
 /*****************************************************************
@@ -28,17 +60,33 @@
  */
 INT32 WINAPI PropertySheet32W(LPCPROPSHEETHEADER32W propertySheetHeader)
 {
-    FIXME(commctrl, "(%p): stub\n", propertySheetHeader);
+    FIXME(propsheet, "(%p): stub\n", propertySheetHeader);
 
     return -1;
 }
 
+
+
+
+
+/*****************************************************************
+ *            CreatePropertySheet32AW   (COMCTL32.83)
+ */  
+HPROPSHEETPAGE WINAPI CreatePropertySheetPage32AW (LPVOID lpPropSheetPage)
+{   
+	if (VERSION_OsIsUnicode())
+	return CreatePropertySheetPage32W((LPCPROPSHEETPAGE32W) lpPropSheetPage);
+	return CreatePropertySheetPage32A((LPCPROPSHEETPAGE32A) lpPropSheetPage);
+
+}
+
+
 /*****************************************************************
  *            CreatePropertySheetPage32A   (COMCTL32.19)
  */
 HPROPSHEETPAGE WINAPI CreatePropertySheetPage32A(LPCPROPSHEETPAGE32A lpPropSheetPage)
 {
-    FIXME(commctrl, "(%p): stub\n", lpPropSheetPage);
+    FIXME(propsheet, "(%p): stub\n", lpPropSheetPage);
 
     return 0;
 }
@@ -48,7 +96,7 @@
  */
 HPROPSHEETPAGE WINAPI CreatePropertySheetPage32W(LPCPROPSHEETPAGE32W lpPropSheetPage)
 {
-    FIXME(commctrl, "(%p): stub\n", lpPropSheetPage);
+    FIXME(propsheet, "(%p): stub\n", lpPropSheetPage);
 
     return 0;
 }
@@ -58,8 +106,115 @@
  */
 BOOL32 WINAPI DestroyPropertySheetPage32(HPROPSHEETPAGE hPropPage)
 {
-    FIXME(commctrl, "(0x%x): stub\n", hPropPage);
+    FIXME(propsheet, "(0x%x): stub\n", hPropPage);
 
     return FALSE;
 }
 
+
+
+LRESULT WINAPI
+PROPSHEET_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
+{
+   WND *wndPtr = WIN_FindWndPtr(hwnd);
+
+  switch (uMsg) {
+       case PSM_SETCURSEL:
+           FIXME (propsheet, "Unimplemented msg PSM_SETCURSEL\n");
+           return 0;
+       case PSM_REMOVEPAGE:
+           FIXME (propsheet, "Unimplemented msg PSM_REMOVEPAGE\n");
+           return 0;
+       case PSM_ADDPAGE:
+           FIXME (propsheet, "Unimplemented msg PSM_ADDPAGE\n");
+           return 0;
+       case PSM_CHANGED:
+           FIXME (propsheet, "Unimplemented msg PSM_CHANGED\n");
+           return 0;
+       case PSM_RESTARTWINDOWS:
+           FIXME (propsheet, "Unimplemented msg PSM_RESTARTWINDOWS\n");
+           return 0;
+       case PSM_REBOOTSYSTEM:
+           FIXME (propsheet, "Unimplemented msg PSM_REBOOTSYSTEM\n");
+           return 0;
+       case PSM_CANCELTOCLOSE:
+           FIXME (propsheet, "Unimplemented msg PSM_CANCELTOCLOSE\n");
+           return 0;
+       case PSM_QUERYSIBLINGS:
+           FIXME (propsheet, "Unimplemented msg PSM_QUERYSIBLINGS\n");
+           return 0;
+       case PSM_UNCHANGED:
+           FIXME (propsheet, "Unimplemented msg PSM_UNCHANGED\n");
+           return 0;
+       case PSM_APPLY:
+           FIXME (propsheet, "Unimplemented msg PSM_APPLY\n");
+           return 0;
+       case PSM_SETTITLE32A:
+           FIXME (propsheet, "Unimplemented msg PSM_SETTITLE32A\n");
+           return 0;
+       case PSM_SETTITLE32W:
+           FIXME (propsheet, "Unimplemented msg PSM_SETTITLE32W\n");
+           return 0;
+       case PSM_SETWIZBUTTONS:
+           FIXME (propsheet, "Unimplemented msg PSM_SETWIZBUTTONS\n");
+           return 0;
+       case PSM_PRESSBUTTON:
+           FIXME (propsheet, "Unimplemented msg PSM_PRESSBUTTON\n");
+           return 0;
+       case PSM_SETCURSELID:
+           FIXME (propsheet, "Unimplemented msg PSM_SETCURSELID\n");
+           return 0;
+       case PSM_SETFINISHTEXT32A:
+           FIXME (propsheet, "Unimplemented msg PSM_SETFINISHTEXT32A\n");
+           return 0;
+       case PSM_SETFINISHTEXT32W:
+           FIXME (propsheet, "Unimplemented msg PSM_SETFINISHTEXT32W\n");
+           return 0;
+       case PSM_GETTABCONTROL:
+           FIXME (propsheet, "Unimplemented msg PSM_GETTABCONTROL\n");
+           return 0;
+       case PSM_ISDIALOGMESSAGE:
+           FIXME (propsheet, "Unimplemented msg PSM_ISDIALOGMESSAGE\n");
+           return 0;
+       case PSM_GETCURRENTPAGEHWND:
+           FIXME (propsheet, "Unimplemented msg PSM_GETCURRENTPAGEHWND\n");
+           return 0;
+
+	  default:
+        if (uMsg >= WM_USER)
+        ERR (propsheet, "unknown msg %04x wp=%08x lp=%08lx\n",
+             uMsg, wParam, lParam);
+        return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
+	}
+		
+	
+}
+
+
+VOID
+PROPSHEET_Register (VOID)
+{
+    WNDCLASS32A wndClass;
+
+    if (GlobalFindAtom32A (WC_PROPSHEET32A)) return;
+
+    ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
+    wndClass.style         = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS;
+    wndClass.lpfnWndProc   = (WNDPROC32)PROPSHEET_WindowProc;
+    wndClass.cbClsExtra    = 0;
+    wndClass.cbWndExtra    = sizeof(PROPSHEET_INFO *);
+    wndClass.hCursor       = LoadCursor32A (0, IDC_ARROW32A);
+    wndClass.hbrBackground = 0;
+    wndClass.lpszClassName = WC_PROPSHEET32A;
+
+    RegisterClass32A (&wndClass);
+}
+
+
+VOID
+PROPSHEET_UnRegister (VOID)
+{
+    if (GlobalFindAtom32A (WC_PROPSHEET32A))
+    UnregisterClass32A (WC_PROPSHEET32A, (HINSTANCE32)NULL);
+}
+
diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index 9ca0bba..3013065 100644
--- a/dlls/comctl32/tab.c
+++ b/dlls/comctl32/tab.c
@@ -16,13 +16,17 @@
 #include "windows.h"
 #include "commctrl.h"
 #include "tab.h"
-#include "heap.h"
 #include "win.h"
 #include "debug.h"
 
 
 #define TAB_GetInfoPtr(wndPtr) ((TAB_INFO *)wndPtr->wExtra[0])
 
+
+
+
+
+
 static BOOL32
 TAB_SendSimpleNotify (WND *wndPtr, UINT32 code)
 {
@@ -44,6 +48,22 @@
     return infoPtr->iSelected;
 }
 
+
+static LRESULT
+TAB_SetCurSel (WND *wndPtr,WPARAM32 wParam)
+{
+    TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+	INT32 iItem=(INT32) wParam;
+	INT32 prevItem;
+ 
+	prevItem=-1;
+	if ((iItem >= 0) && (iItem < infoPtr->uNumItem)) {
+		prevItem=infoPtr->iSelected;
+    	infoPtr->iSelected=iItem;
+	}
+	return prevItem;
+}
+
 static LRESULT
 TAB_LButtonUp (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
 {
@@ -78,6 +98,20 @@
     return 0;
 }
 
+
+static LRESULT
+TAB_AdjustRect (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+
+	if (wParam==TRUE) {
+		FIXME (tab,"Should set display rectangle\n");
+	} else {
+		FIXME (tab,"Should set window rectangle\n");
+	}
+	
+	return 0;
+}
+
 static void 
 TAB_SetItemBounds (WND *wndPtr)
 {
@@ -129,9 +163,9 @@
     RECT32 r;
     INT32 oldBkMode;
    
-    HPEN32	hwPen = CreatePen32 (PS_SOLID, 1, RGB (255, 255, 255 ));
-    HPEN32	hbPen = CreatePen32 (PS_SOLID, 1, GetSysColor32 (COLOR_BTNSHADOW));
-    HPEN32	hsdPen = CreatePen32(PS_SOLID, 1, GetSysColor32 (COLOR_BTNTEXT));
+    HPEN32	hwPen  = GetSysColorPen32 (COLOR_3DHILIGHT);
+    HPEN32	hbPen  = GetSysColorPen32 (COLOR_BTNSHADOW);
+    HPEN32	hsdPen = GetSysColorPen32 (COLOR_BTNTEXT);
     HPEN32	htmpPen = (HPEN32)NULL;
 
     CopyRect32(&r, &pti->rect);
@@ -152,9 +186,6 @@
     MoveToEx32 (hdc, r.right, r.top+1, NULL);
     LineTo32(hdc, r.right,r.bottom);
     hsdPen = SelectObject32(hdc,htmpPen); 
-    DeleteObject32(hwPen);
-    DeleteObject32(hbPen);
-    DeleteObject32(hsdPen);
 
     oldBkMode = SetBkMode32(hdc, TRANSPARENT);
     r.left += 3;
@@ -170,9 +201,10 @@
 TAB_DrawBorder (WND *wndPtr, HDC32 hdc)
 {
     HPEN32 htmPen;
-    HPEN32 hwPen = GetStockObject32(WHITE_PEN);
-    HPEN32 hbPen = GetStockObject32(BLACK_PEN);
-    HPEN32 hShade = CreatePen32 ( PS_SOLID, 1, GetSysColor32 (COLOR_BTNSHADOW));
+    HPEN32 hwPen  = GetSysColorPen32 (COLOR_3DHILIGHT);
+    HPEN32 hbPen  = GetSysColorPen32 (COLOR_3DDKSHADOW);
+    HPEN32 hShade = GetSysColorPen32 (COLOR_BTNSHADOW);
+
     RECT32 rect;
 
     htmPen = SelectObject32 (hdc, hwPen);
@@ -191,7 +223,6 @@
     LineTo32 (hdc, rect.right-1, rect.bottom-1);
     LineTo32 (hdc, rect.left, rect.bottom-1);
     hShade = SelectObject32(hdc, hShade);
-    DeleteObject32 (hShade);
 }
 
     
@@ -199,17 +230,16 @@
 TAB_Refresh (WND *wndPtr, HDC32 hdc)
 {
     TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
-    HFONT32 hFont, hOldFont;
-    RECT32 rect;
-    HBRUSH32 hbrBk;
+    HFONT32 hOldFont;
     INT32 i;
 
     TAB_DrawBorder (wndPtr, hdc);
 
+	hOldFont = SelectObject32 (hdc, infoPtr->hFont);
     for (i = 0; i < infoPtr->uNumItem; i++) {
 	TAB_DrawItem (wndPtr, hdc, i);
     }
-
+	SelectObject32 (hdc, hOldFont);
 }
 
 static LRESULT
@@ -230,11 +260,11 @@
 TAB_InsertItem (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
 {
     TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
-    TCITEM *pti;
+    TCITEM32A *pti;
     HDC32  hdc;
     INT32 iItem, len;
 
-    pti = (TCITEM*)lParam;
+    pti = (TCITEM32A *)lParam;
     iItem = (INT32)wParam;
 
     if (iItem < 0) return -1;
@@ -242,16 +272,14 @@
 	iItem = infoPtr->uNumItem;
 
     if (infoPtr->uNumItem == 0) {
-	infoPtr->items = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
-				    sizeof (TAB_ITEM));
+	infoPtr->items = COMCTL32_Alloc (sizeof (TAB_ITEM));
 	infoPtr->uNumItem++;
     }
     else {
 	TAB_ITEM *oldItems = infoPtr->items;
 
 	infoPtr->uNumItem++;
-	infoPtr->items = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
-				    sizeof (TAB_ITEM) * infoPtr->uNumItem);
+	infoPtr->items = COMCTL32_Alloc (sizeof (TAB_ITEM) * infoPtr->uNumItem);
 	
 	/* pre insert copy */
 	if (iItem > 0) {
@@ -266,20 +294,17 @@
 
 	}
 	
-	HeapFree (GetProcessHeap (), 0, oldItems);
+	COMCTL32_Free (oldItems);
     }
 
     infoPtr->items[iItem].mask = pti->mask;
     if (pti->mask & TCIF_TEXT) {
 	len = lstrlen32A (pti->pszText);
-	infoPtr->items[iItem].pszText = 
-	    HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len+1);
+	infoPtr->items[iItem].pszText = COMCTL32_Alloc (len+1);
 	lstrcpy32A (infoPtr->items[iItem].pszText, pti->pszText);
 	infoPtr->items[iItem].cchTextMax = pti->cchTextMax;
     }
 
-    
-
     if (pti->mask & TCIF_IMAGE)
 	infoPtr->items[iItem].iImage = pti->iImage;
 
@@ -298,12 +323,168 @@
 }
 
 static LRESULT 
+TAB_SetItem32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+  TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+  TCITEM32A *tabItem; 
+  TAB_ITEM *wineItem; 
+  INT32    iItem,len;
+
+  iItem=(INT32) wParam;
+  tabItem=(LPTCITEM32A ) lParam;
+  TRACE (tab,"%d %p\n",iItem, tabItem);
+  if ((iItem<0) || (iItem>infoPtr->uNumItem)) return FALSE;
+
+  wineItem=& infoPtr->items[iItem];
+
+  if (tabItem->mask & TCIF_IMAGE) 
+		wineItem->iImage=tabItem->iImage;
+
+  if (tabItem->mask & TCIF_PARAM) 
+		wineItem->lParam=tabItem->lParam;
+
+  if (tabItem->mask & TCIF_RTLREADING) 
+		FIXME (tab,"TCIF_RTLREADING\n");
+
+  if (tabItem->mask & TCIF_STATE) 
+		wineItem->dwState=tabItem->dwState;
+
+  if (tabItem->mask & TCIF_TEXT) {
+	 len=lstrlen32A (tabItem->pszText);
+	 if (len>wineItem->cchTextMax) 
+		 wineItem->pszText= COMCTL32_ReAlloc (wineItem->pszText, len+1);
+	 lstrcpyn32A (wineItem->pszText, tabItem->pszText, len);
+  }
+
+	return TRUE;
+}
+
+static LRESULT 
+TAB_GetItemCount (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+   TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+
+   return infoPtr->uNumItem;
+}
+
+
+static LRESULT 
+TAB_GetItem32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+   TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+   TCITEM32A *tabItem;
+   TAB_ITEM *wineItem;
+   INT32    iItem;
+
+  iItem=(INT32) wParam;
+  tabItem=(LPTCITEM32A) lParam;
+  TRACE (tab,"\n");
+  if ((iItem<0) || (iItem>infoPtr->uNumItem)) return FALSE;
+
+  wineItem=& infoPtr->items[iItem];
+
+  if (tabItem->mask & TCIF_IMAGE) 
+		tabItem->iImage=wineItem->iImage;
+
+  if (tabItem->mask & TCIF_PARAM) 
+		tabItem->lParam=wineItem->lParam;
+
+  if (tabItem->mask & TCIF_RTLREADING) 
+		FIXME (tab, "TCIF_RTLREADING\n");
+
+  if (tabItem->mask & TCIF_STATE) 
+		tabItem->dwState=wineItem->dwState;
+
+  if (tabItem->mask & TCIF_TEXT) 
+	 lstrcpyn32A (tabItem->pszText, wineItem->pszText, tabItem->cchTextMax);
+
+	return TRUE;
+}
+
+static LRESULT 
+TAB_DeleteItem (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+   TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+
+	FIXME (tab,"stub \n");
+	return TRUE;
+}
+static LRESULT 
+TAB_DeleteAllItems (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+   TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+
+	COMCTL32_Free (infoPtr->items);
+	infoPtr->uNumItem=0;
+	
+	return TRUE;
+}
+
+
+static LRESULT
+TAB_GetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+  TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+
+  TRACE (tab,"\n");
+  return (LRESULT)infoPtr->hFont;
+}
+
+static LRESULT
+TAB_SetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+
+{
+ TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+ TEXTMETRIC32A tm;
+ HFONT32 hFont, hOldFont;
+ HDC32 hdc;
+
+ TRACE (tab,"%x %lx\n",wParam, lParam);
+
+ infoPtr->hFont = (HFONT32)wParam;
+
+ hFont = infoPtr->hFont ? infoPtr->hFont : GetStockObject32 (SYSTEM_FONT);
+
+ hdc = GetDC32 (0);
+ hOldFont = SelectObject32 (hdc, hFont);
+ GetTextMetrics32A (hdc, &tm);
+ infoPtr->nHeight= tm.tmHeight + tm.tmExternalLeading;
+ SelectObject32 (hdc, hOldFont);
+
+ if (lParam) TAB_Refresh (wndPtr,hdc);
+ ReleaseDC32 (0, hdc);
+
+ return 0;
+}
+
+
+static LRESULT
+TAB_GetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+  TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+
+  TRACE (tab,"\n");
+  return (LRESULT)infoPtr->himl;
+}
+
+static LRESULT
+TAB_SetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    TAB_INFO *infoPtr = TAB_GetInfoPtr(wndPtr);
+    HIMAGELIST himlPrev;
+
+    TRACE (tab,"\n");
+    himlPrev = infoPtr->himl;
+  	infoPtr->himl= (HIMAGELIST)lParam;
+    return (LRESULT)himlPrev;
+}
+
+static LRESULT 
 TAB_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
 {
     TAB_INFO *infoPtr;
 
-    infoPtr = (TAB_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
-				     sizeof(TAB_INFO));
+    infoPtr = (TAB_INFO *)COMCTL32_Alloc (sizeof(TAB_INFO));
     wndPtr->wExtra[0] = (DWORD)infoPtr;
    
     infoPtr->uNumItem = 0;
@@ -325,12 +506,12 @@
     if (infoPtr->items) {
 	for (iItem = 0; iItem < infoPtr->uNumItem; iItem++) {
 	    if (infoPtr->items[iItem].pszText)
-		HeapFree (GetProcessHeap (), 0, infoPtr->items[iItem].pszText);
+		COMCTL32_Free (infoPtr->items[iItem].pszText);
 	}
-	HeapFree (GetProcessHeap (), 0, infoPtr->items);
+	COMCTL32_Free (infoPtr->items);
     }
 
-    HeapFree (GetProcessHeap (), 0, infoPtr);
+    COMCTL32_Free (infoPtr);
  
     return 0;
 }
@@ -343,20 +524,117 @@
     switch (uMsg)
     {
 
+	case TCM_GETIMAGELIST:
+	   return TAB_GetImageList (wndPtr, wParam, lParam);
+
+	case TCM_SETIMAGELIST:
+	   return TAB_SetImageList (wndPtr, wParam, lParam);
+	
+	case TCM_GETITEMCOUNT:
+	    return TAB_GetItemCount (wndPtr, wParam, lParam);
+
+	case TCM_GETITEM32A:
+	   return TAB_GetItem32A (wndPtr, wParam, lParam);
+
+	case TCM_GETITEM32W:
+	   FIXME (tab, "Unimplemented msg TCM_GETITEM32W\n");
+	   return 0;
+
+	case TCM_SETITEM32A:
+	   return TAB_SetItem32A (wndPtr, wParam, lParam);
+
+	case TCM_SETITEM32W:
+	   FIXME (tab, "Unimplemented msg TCM_GETITEM32W\n");
+	   return 0;
+
+	case TCM_DELETEITEM:
+	   return TAB_DeleteItem (wndPtr, wParam, lParam);
+
+	case TCM_DELETEALLITEMS:
+	   return TAB_DeleteAllItems (wndPtr, wParam, lParam);
+
+	case TCM_GETITEMRECT:
+	   FIXME (tab, "Unimplemented msg TCM_GETITEMRECT\n");
+	   return 0;
+
 	case TCM_GETCURSEL:
 	   return TAB_GetCurSel (wndPtr);
 
-	case TCM_INSERTITEM:
+	case TCM_SETCURSEL:
+	   return TAB_SetCurSel (wndPtr, wParam);
+
+	case TCM_INSERTITEM32A:
 	   return TAB_InsertItem (wndPtr, wParam, lParam);
 
+	case TCM_INSERTITEM32W:
+	   FIXME (tab, "Unimplemented msg TCM_INSERTITEM32W\n");
+	   return 0;
+
+	case TCM_SETITEMEXTRA:
+	   FIXME (tab, "Unimplemented msg TCM_SETITEMEXTRA\n");
+	   return 0;
+
+	case TCM_ADJUSTRECT:
+	   return TAB_AdjustRect (wndPtr, wParam, lParam);
+
+	case TCM_SETITEMSIZE:
+	   FIXME (tab, "Unimplemented msg TCM_SETITEMSIZE\n");
+	   return 0;
+
+	case TCM_REMOVEIMAGE:
+	   FIXME (tab, "Unimplemented msg TCM_REMOVEIMAGE\n");
+	   return 0;
+
+	case TCM_SETPADDING:
+	   FIXME (tab, "Unimplemented msg TCM_SETPADDING\n");
+	   return 0;
+
+	case TCM_GETROWCOUNT:
+	   FIXME (tab, "Unimplemented msg TCM_GETROWCOUNT\n");
+	   return 0;
+
+	case TCM_GETTOOLTIPS:
+	   FIXME (tab, "Unimplemented msg TCM_GETTOOLTIPS\n");
+	   return 0;
+
+	case TCM_SETTOOLTIPS:
+	   FIXME (tab, "Unimplemented msg TCM_SETTOOLTIPS\n");
+	   return 0;
+
+	case TCM_GETCURFOCUS:
+	   FIXME (tab, "Unimplemented msg TCM_GETCURFOCUS\n");
+	   return 0;
+
+	case TCM_SETCURFOCUS:
+	   FIXME (tab, "Unimplemented msg TCM_SETCURFOCUS\n");
+	   return 0;
+
+	case TCM_SETMINTTABWIDTH:
+	   FIXME (tab, "Unimplemented msg TCM_SETMINTTABWIDTH\n");
+	   return 0;
+
+	case TCM_DESELECTALL:
+	   FIXME (tab, "Unimplemented msg TCM_DESELECTALL\n");
+	   return 0;
+
+	case WM_GETFONT:
+	    return TAB_GetFont (wndPtr, wParam, lParam);
+
+	case WM_SETFONT:
+	    return TAB_SetFont (wndPtr, wParam, lParam);
+
 	case WM_CREATE:
 	    return TAB_Create (wndPtr, wParam, lParam);
 
 	case WM_DESTROY:
 	    return TAB_Destroy (wndPtr, wParam, lParam);
 
+    case WM_GETDLGCODE:
+            return DLGC_WANTARROWS | DLGC_WANTCHARS;
+
 	case WM_LBUTTONUP:
 	    return TAB_LButtonUp (wndPtr, wParam, lParam);
+
 	case WM_PAINT:
 	    return TAB_Paint (wndPtr, wParam);
 	
diff --git a/dlls/comctl32/trackbar.c b/dlls/comctl32/trackbar.c
index c04b432..65863b4 100644
--- a/dlls/comctl32/trackbar.c
+++ b/dlls/comctl32/trackbar.c
@@ -2,7 +2,7 @@
  * Trackbar control
  *
  * Copyright 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
- * Copyright 1998 Alex Priem <alexp@sci.kun.nl>
+ * Copyright 1998,1999 Alex Priem <alexp@sci.kun.nl>
  *
  *
  * TODO:
@@ -11,7 +11,7 @@
  *   - handle dragging slider better
  *   - better tic handling.
  *   - more notifications.
- *   - tooltips
+ *   
  */
 
 /* known bugs:
@@ -27,7 +27,6 @@
 #include "windows.h"
 #include "commctrl.h"
 #include "trackbar.h"
-#include "heap.h"
 #include "win.h"
 #include "debug.h"
 
@@ -68,7 +67,7 @@
     	nrTics=(infoPtr->nRangeMax - infoPtr->nRangeMin)/infoPtr->uTicFreq;
 	else {
 		nrTics=0;
-		HeapFree (SystemHeap,0,infoPtr->tics);
+		COMCTL32_Free (infoPtr->tics);
 		infoPtr->tics=NULL;
 		infoPtr->uNumTics=0;
 		return;
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index 1b1537d..e35464d 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -842,3 +842,14 @@
 	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",debugstr_w(x1->Buffer),debugstr_w(x2->Buffer),x3);
 	return 0;
 }
+
+/******************************************************************************
+ *	DbgPrint	[NTDLL] 
+ */
+void __cdecl DbgPrint(LPCSTR fmt,LPVOID args) {
+	char buf[512];
+
+	wvsprintf32A(buf,fmt,&args);
+	MSG("DbgPrint says: %s",buf);
+	/* hmm, raise exception? */
+}
diff --git a/dlls/shell32/contmenu.c b/dlls/shell32/contmenu.c
index 504cc6c..da45f8a 100644
--- a/dlls/shell32/contmenu.c
+++ b/dlls/shell32/contmenu.c
@@ -8,6 +8,7 @@
 #include "debug.h"
 #include "pidl.h"
 #include "shlobj.h"
+#include "objbase.h"
 #include "shell32_main.h"
 #include "shresdef.h"
 #include "if_macros.h"
@@ -52,8 +53,7 @@
   { *ppvObj = (LPCONTEXTMENU)this;
   }   
   else if(IsEqualIID(riid, &IID_IShellExtInit))  /*IShellExtInit*/
-  { *ppvObj = (LPSHELLEXTINIT)this;
-    WARN(shell,"-- LPSHELLEXTINIT pointer requested\n");  
+  { FIXME (shell,"-- LPSHELLEXTINIT pointer requested\n");
   }   
 
   if(*ppvObj)
@@ -270,7 +270,7 @@
 *  IContextMenu_GetCommandString()
 */
 static HRESULT WINAPI IContextMenu_GetCommandString( LPCONTEXTMENU this, UINT32 idCommand,
-						UINT32 uFlags,LPUINT32 lpReserved,LPSTR lpszName,UINT32 uMaxNameLen)
+		UINT32 uFlags,LPUINT32 lpReserved,LPSTR lpszName,UINT32 uMaxNameLen)
 {	HRESULT  hr = E_INVALIDARG;
 
 	TRACE(shell,"(%p)->(idcom=%x flags=%x %p name=%p len=%x)\n",this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
@@ -321,8 +321,9 @@
 *  IContextMenu_AllocPidlTable()
 */
 BOOL32 IContextMenu_AllocPidlTable(LPCONTEXTMENU this, DWORD dwEntries)
-{	/*add one for NULL terminator */
-	TRACE(shell,"(%p)->(entrys=%lu)\n",this, dwEntries);
+{	TRACE(shell,"(%p)->(entrys=%lu)\n",this, dwEntries);
+
+	/*add one for NULL terminator */
 	dwEntries++;
 
 	this->aPidls = (LPITEMIDLIST*)SHAlloc(dwEntries * sizeof(LPITEMIDLIST));
diff --git a/dlls/shell32/dataobject.c b/dlls/shell32/dataobject.c
index 0bc6bf5..849a92d 100644
--- a/dlls/shell32/dataobject.c
+++ b/dlls/shell32/dataobject.c
@@ -7,7 +7,11 @@
  */
 #include "debug.h"
 #include "wintypes.h"
-#include "shlobj.h"
+#include "wine/obj_base.h"
+#include "wine/obj_storage.h"
+#include "wine/obj_moniker.h"
+#include "wine/obj_dataobject.h"
+#include "objbase.h"
 #include "pidl.h"
 #include "winerror.h"
 #include "shell32_main.h"
@@ -19,29 +23,44 @@
 /***********************************************************************
 *   IEnumFORMATETC implementation
 */
-static HRESULT WINAPI IEnumFORMATETC_QueryInterface (LPENUMFORMATETC this, REFIID riid, LPVOID * ppvObj);
-static ULONG WINAPI IEnumFORMATETC_AddRef (LPENUMFORMATETC this);
-static ULONG WINAPI IEnumFORMATETC_Release (LPENUMFORMATETC this);
-static HRESULT WINAPI IEnumFORMATETC_Next(LPENUMFORMATETC this, ULONG celt, FORMATETC32 *rgelt, ULONG *pceltFethed);
-static HRESULT WINAPI IEnumFORMATETC_Skip(LPENUMFORMATETC this, ULONG celt);
-static HRESULT WINAPI IEnumFORMATETC_Reset(LPENUMFORMATETC this);
-static HRESULT WINAPI IEnumFORMATETC_Clone(LPENUMFORMATETC this, LPENUMFORMATETC* ppenum);
+typedef struct _IEnumFORMATETC
+{
+    /* IUnknown fields */
+    ICOM_VTABLE(IEnumFORMATETC)* lpvtbl;
+    DWORD                        ref;
+    /* IEnumFORMATETC fields */
+    UINT32        posFmt;
+    UINT32        countFmt;
+    LPFORMATETC32 pFmt;
+} _IEnumFORMATETC;
 
-static struct IEnumFORMATETC_VTable efvt = 
-{	IEnumFORMATETC_QueryInterface,
-	IEnumFORMATETC_AddRef,
-	IEnumFORMATETC_Release,
-	IEnumFORMATETC_Next,
-	IEnumFORMATETC_Skip,
-	IEnumFORMATETC_Reset,
-	IEnumFORMATETC_Clone
+static HRESULT WINAPI IEnumFORMATETC_fnQueryInterface(LPUNKNOWN iface, REFIID riid, LPVOID* ppvObj);
+static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPUNKNOWN iface);
+static ULONG WINAPI IEnumFORMATETC_fnRelease(LPUNKNOWN iface);
+static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, FORMATETC32* rgelt, ULONG* pceltFethed);
+static HRESULT WINAPI IEnumFORMATETC_fnSkip(LPENUMFORMATETC iface, ULONG celt);
+static HRESULT WINAPI IEnumFORMATETC_fnReset(LPENUMFORMATETC iface);
+static HRESULT WINAPI IEnumFORMATETC_fnClone(LPENUMFORMATETC iface, LPENUMFORMATETC* ppenum);
+
+static struct ICOM_VTABLE(IEnumFORMATETC) efvt = 
+{
+    {
+        IEnumFORMATETC_fnQueryInterface,
+        IEnumFORMATETC_fnAddRef,
+        IEnumFORMATETC_fnRelease
+    },
+    IEnumFORMATETC_fnNext,
+    IEnumFORMATETC_fnSkip,
+    IEnumFORMATETC_fnReset,
+    IEnumFORMATETC_fnClone
 };
 
-extern LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT32 cfmt, const FORMATETC32 afmt[])
-{	LPENUMFORMATETC ef;
+LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT32 cfmt, const FORMATETC32 afmt[])
+{
+	_IEnumFORMATETC* ef;
 	DWORD size=cfmt * sizeof(FORMATETC32);
 	
-	ef=(LPENUMFORMATETC)HeapAlloc(GetProcessHeap(),0,sizeof(IEnumFORMATETC));
+	ef=(_IEnumFORMATETC*)HeapAlloc(GetProcessHeap(),0,sizeof(_IEnumFORMATETC));
 	ef->ref=1;
 	ef->lpvtbl=&efvt;
 
@@ -54,10 +73,12 @@
 	}
 
 	TRACE(shell,"(%p)->()\n",ef);
-	return ef;
+	return (LPENUMFORMATETC)ef;
 }
-static HRESULT WINAPI IEnumFORMATETC_QueryInterface (LPENUMFORMATETC this, REFIID riid, LPVOID * ppvObj)
-{	char    xriid[50];
+static HRESULT WINAPI IEnumFORMATETC_fnQueryInterface(LPUNKNOWN iface, REFIID riid, LPVOID* ppvObj)
+{
+	ICOM_THIS(IEnumFORMATETC,iface);
+	char    xriid[50];
 	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 	TRACE(shell,"(%p)->(\n\tIID:\t%s,%p)\n",this,xriid,ppvObj);
 
@@ -71,7 +92,7 @@
 	}   
 
 	if(*ppvObj)
-	{ (*(LPENUMFORMATETC*)ppvObj)->lpvtbl->fnAddRef(this);      
+	{ IEnumFORMATETC_AddRef((IEnumFORMATETC*)*ppvObj);
 	  TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
@@ -79,12 +100,16 @@
 	return E_NOINTERFACE;
 
 }
-static ULONG WINAPI IEnumFORMATETC_AddRef (LPENUMFORMATETC this)
-{	TRACE(shell,"(%p)->(count=%lu)\n",this,(this->ref)+1);
+static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPUNKNOWN iface)
+{
+	ICOM_THIS(IEnumFORMATETC,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,(this->ref)+1);
 	return ++(this->ref);
 }
-static ULONG WINAPI IEnumFORMATETC_Release (LPENUMFORMATETC this)
-{	TRACE(shell,"(%p)->()\n",this);
+static ULONG WINAPI IEnumFORMATETC_fnRelease(LPUNKNOWN iface)
+{
+	ICOM_THIS(IEnumFORMATETC,iface);
+	TRACE(shell,"(%p)->()\n",this);
 	if (!--(this->ref)) 
 	{ TRACE(shell," destroying IEnumFORMATETC(%p)\n",this);
 	  if (this->pFmt)
@@ -95,8 +120,10 @@
 	}
 	return this->ref;
 }
-static HRESULT WINAPI IEnumFORMATETC_Next(LPENUMFORMATETC this, ULONG celt, FORMATETC32 *rgelt, ULONG *pceltFethed)
-{	UINT32 cfetch;
+static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, FORMATETC32 *rgelt, ULONG *pceltFethed)
+{
+	ICOM_THIS(IEnumFORMATETC,iface);
+	UINT32 cfetch;
 	HRESULT hres = S_FALSE;
 
 	TRACE (shell, "(%p)->()\n", this);
@@ -120,8 +147,10 @@
 
         return hres;
 }
-static HRESULT WINAPI IEnumFORMATETC_Skip(LPENUMFORMATETC this, ULONG celt)
-{	FIXME (shell, "(%p)->(num=%lu)\n", this, celt);
+static HRESULT WINAPI IEnumFORMATETC_fnSkip(LPENUMFORMATETC iface, ULONG celt)
+{
+	ICOM_THIS(IEnumFORMATETC,iface);
+	FIXME (shell, "(%p)->(num=%lu)\n", this, celt);
 
 	this->posFmt += celt;
 	if (this->posFmt > this->countFmt)
@@ -130,55 +159,73 @@
 	}
 	return S_OK;
 }
-static HRESULT WINAPI IEnumFORMATETC_Reset(LPENUMFORMATETC this)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IEnumFORMATETC_fnReset(LPENUMFORMATETC iface)
+{
+	ICOM_THIS(IEnumFORMATETC,iface);
+	FIXME (shell, "(%p)->()\n", this);
 
         this->posFmt = 0;
         return S_OK;
 }
-static HRESULT WINAPI IEnumFORMATETC_Clone(LPENUMFORMATETC this, LPENUMFORMATETC* ppenum)
-{	FIXME (shell, "(%p)->(ppenum=%p)\n", this, ppenum);
+static HRESULT WINAPI IEnumFORMATETC_fnClone(LPENUMFORMATETC iface, LPENUMFORMATETC* ppenum)
+{
+	ICOM_THIS(IEnumFORMATETC,iface);
+	FIXME (shell, "(%p)->(ppenum=%p)\n", this, ppenum);
 	return E_NOTIMPL;
 }
 
 /***********************************************************************
 *   IDataObject implementation
 */
+typedef struct _IDataObject
+{
+    /* IUnknown fields */
+    ICOM_VTABLE(IDataObject)* lpvtbl;
+    DWORD                     ref;
+    /* IDataObject fields */
+    LPSHELLFOLDER psf;
+    LPIDLLIST     lpill;       /* the data of the dataobject */
+    LPITEMIDLIST  pidl;     
+} _IDataObject;
 
-static HRESULT WINAPI IDataObject_QueryInterface (LPDATAOBJECT, REFIID riid, LPVOID * ppvObj);
-static ULONG WINAPI IDataObject_AddRef (LPDATAOBJECT);
-static ULONG WINAPI IDataObject_Release (LPDATAOBJECT);
-static HRESULT WINAPI IDataObject_GetData (LPDATAOBJECT, LPFORMATETC32 pformatetcIn, STGMEDIUM32 *pmedium);
-static HRESULT WINAPI IDataObject_GetDataHere(LPDATAOBJECT, LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium);
-static HRESULT WINAPI IDataObject_QueryGetData(LPDATAOBJECT, LPFORMATETC32 pformatetc);
-static HRESULT WINAPI IDataObject_GetCanonicalFormatEtc(LPDATAOBJECT, LPFORMATETC32 pformatectIn, LPFORMATETC32 pformatetcOut);
-static HRESULT WINAPI IDataObject_SetData(LPDATAOBJECT, LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium, BOOL32 fRelease);
-static HRESULT WINAPI IDataObject_EnumFormatEtc(LPDATAOBJECT, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc);
-static HRESULT WINAPI IDataObject_DAdvise (LPDATAOBJECT, LPFORMATETC32 *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection);
-static HRESULT WINAPI IDataObject_DUnadvise(LPDATAOBJECT, DWORD dwConnection);
-static HRESULT WINAPI IDataObject_EnumDAdvise(LPDATAOBJECT, IEnumSTATDATA **ppenumAdvise);
+static HRESULT WINAPI IDataObject_fnQueryInterface(LPUNKNOWN iface, REFIID riid, LPVOID* ppvObj);
+static ULONG WINAPI IDataObject_fnAddRef(LPUNKNOWN iface);
+static ULONG WINAPI IDataObject_fnRelease(LPUNKNOWN iface);
+static HRESULT WINAPI IDataObject_fnGetData(LPDATAOBJECT iface, LPFORMATETC32 pformatetcIn, STGMEDIUM32* pmedium);
+static HRESULT WINAPI IDataObject_fnGetDataHere(LPDATAOBJECT iface, LPFORMATETC32 pformatetc, STGMEDIUM32* pmedium);
+static HRESULT WINAPI IDataObject_fnQueryGetData(LPDATAOBJECT iface, LPFORMATETC32 pformatetc);
+static HRESULT WINAPI IDataObject_fnGetCanonicalFormatEtc(LPDATAOBJECT iface, LPFORMATETC32 pformatectIn, LPFORMATETC32 pformatetcOut);
+static HRESULT WINAPI IDataObject_fnSetData(LPDATAOBJECT iface, LPFORMATETC32 pformatetc, STGMEDIUM32* pmedium, BOOL32 fRelease);
+static HRESULT WINAPI IDataObject_fnEnumFormatEtc(LPDATAOBJECT iface, DWORD dwDirection, IEnumFORMATETC** ppenumFormatEtc);
+static HRESULT WINAPI IDataObject_fnDAdvise(LPDATAOBJECT iface, LPFORMATETC32* pformatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection);
+static HRESULT WINAPI IDataObject_fnDUnadvise(LPDATAOBJECT iface, DWORD dwConnection);
+static HRESULT WINAPI IDataObject_fnEnumDAdvise(LPDATAOBJECT iface, IEnumSTATDATA **ppenumAdvise);
 
-static struct IDataObject_VTable dtovt = 
-{	IDataObject_QueryInterface,
-	IDataObject_AddRef,
-	IDataObject_Release,
-	IDataObject_GetData,
-	IDataObject_GetDataHere,
-	IDataObject_QueryGetData,
-	IDataObject_GetCanonicalFormatEtc,
-	IDataObject_SetData,
-	IDataObject_EnumFormatEtc,
-	IDataObject_DAdvise,
-	IDataObject_DUnadvise,
-	IDataObject_EnumDAdvise
+static struct ICOM_VTABLE(IDataObject) dtovt = 
+{
+    {
+        IDataObject_fnQueryInterface,
+        IDataObject_fnAddRef,
+        IDataObject_fnRelease
+    },
+    IDataObject_fnGetData,
+    IDataObject_fnGetDataHere,
+    IDataObject_fnQueryGetData,
+    IDataObject_fnGetCanonicalFormatEtc,
+    IDataObject_fnSetData,
+    IDataObject_fnEnumFormatEtc,
+    IDataObject_fnDAdvise,
+    IDataObject_fnDUnadvise,
+    IDataObject_fnEnumDAdvise
 };
 
 /**************************************************************************
 *  IDataObject_Constructor
 */
 LPDATAOBJECT IDataObject_Constructor(HWND32 hwndOwner, LPSHELLFOLDER psf, LPITEMIDLIST * apidl, UINT32 cidl)
-{	LPDATAOBJECT dto;
-	if (!(dto = (LPDATAOBJECT)HeapAlloc(GetProcessHeap(),0,sizeof(IDataObject))))
+{
+	_IDataObject* dto;
+	if (!(dto = (_IDataObject*)HeapAlloc(GetProcessHeap(),0,sizeof(_IDataObject))))
 	  return NULL;
 	  
 	dto->ref=1;
@@ -194,13 +241,15 @@
 	dto->lpill->lpvtbl->fnAddItems(dto->lpill, apidl, cidl); 
 	
 	TRACE(shell,"(%p)->(sf=%p apidl=%p cidl=%u)\n",dto, psf, apidl, cidl);
-	return dto;
+	return (LPDATAOBJECT)dto;
 }
 /***************************************************************************
 *  IDataObject_QueryInterface
 */
-static HRESULT WINAPI IDataObject_QueryInterface (LPDATAOBJECT this, REFIID riid, LPVOID * ppvObj)
-{	char    xriid[50];
+static HRESULT WINAPI IDataObject_fnQueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID * ppvObj)
+{
+	ICOM_THIS(IDataObject,iface);
+	char    xriid[50];
 	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 	TRACE(shell,"(%p)->(\n\tIID:\t%s,%p)\n",this,xriid,ppvObj);
 
@@ -214,7 +263,7 @@
 	}   
 
 	if(*ppvObj)
-	{ (*(LPDATAOBJECT*)ppvObj)->lpvtbl->fnAddRef(this);      
+	{ IDataObject_AddRef((IDataObject*)*ppvObj);      
 	  TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
@@ -224,15 +273,19 @@
 /**************************************************************************
 *  IDataObject_AddRef
 */
-static ULONG WINAPI IDataObject_AddRef(LPDATAOBJECT this)
-{	TRACE(shell,"(%p)->(count=%lu)\n",this,(this->ref)+1);
+static ULONG WINAPI IDataObject_fnAddRef(LPUNKNOWN iface)
+{
+	ICOM_THIS(IDataObject,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,(this->ref)+1);
 	return ++(this->ref);
 }
 /**************************************************************************
 *  IDataObject_Release
 */
-static ULONG WINAPI IDataObject_Release(LPDATAOBJECT this)
-{	TRACE(shell,"(%p)->()\n",this);
+static ULONG WINAPI IDataObject_fnRelease(LPUNKNOWN iface)
+{
+	ICOM_THIS(IDataObject,iface);
+	TRACE(shell,"(%p)->()\n",this);
 	if (!--(this->ref)) 
 	{ TRACE(shell," destroying IDataObject(%p)\n",this);
 	  IDLList_Destructor(this->lpill);
@@ -262,6 +315,7 @@
 * NOTES
 *  get or register the "FileGroupDescriptor" clipformat
 */
+/* FIXME: DATAOBJECT_InitFileGroupDesc is not used (19981226)
 static BOOL32 DATAOBJECT_InitFileGroupDesc(void)
 {	if (cfFileGroupDesc)
         { return(TRUE);
@@ -270,12 +324,14 @@
         cfFileGroupDesc = RegisterClipboardFormat32A(CFSTR_FILEDESCRIPTORA);
         return(cfFileGroupDesc != 0);
 }
+*/
 /**************************************************************************
 * DATAOBJECT_InitFileContents (internal)
 * 
 * NOTES
  * get or register the "FileContents" clipformat
 */
+/* FIXME: DATAOBJECT_InitFileContents is not used (19981226)
 static BOOL32 DATAOBJECT_InitFileContents(void)
 {	if (cfFileContents)
         { return(TRUE);
@@ -284,13 +340,15 @@
         cfFileContents = RegisterClipboardFormat32A(CFSTR_FILECONTENTS);
         return(cfFileContents != 0);
 }
-
+*/
 
 /**************************************************************************
 * interface implementation
 */
-static HRESULT WINAPI IDataObject_GetData (LPDATAOBJECT this, LPFORMATETC32 pformatetcIn, STGMEDIUM32 *pmedium)
-{	char	temp[256];
+static HRESULT WINAPI IDataObject_fnGetData(LPDATAOBJECT iface, LPFORMATETC32 pformatetcIn, STGMEDIUM32 *pmedium)
+{
+	ICOM_THIS(IDataObject,iface);
+	char	temp[256];
 	UINT32	cItems;
 	DWORD	size, size1, size2;
 	LPITEMIDLIST pidl;
@@ -353,35 +411,51 @@
 	FIXME (shell, "-- clipformat not implemented\n");
 	return (E_INVALIDARG);
 }
-static HRESULT WINAPI IDataObject_GetDataHere(LPDATAOBJECT this, LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnGetDataHere(LPDATAOBJECT iface, LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
-static HRESULT WINAPI IDataObject_QueryGetData(LPDATAOBJECT this, LPFORMATETC32 pformatetc)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnQueryGetData(LPDATAOBJECT iface, LPFORMATETC32 pformatetc)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
-static HRESULT WINAPI IDataObject_GetCanonicalFormatEtc(LPDATAOBJECT this, LPFORMATETC32 pformatectIn, LPFORMATETC32 pformatetcOut)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnGetCanonicalFormatEtc(LPDATAOBJECT iface, LPFORMATETC32 pformatectIn, LPFORMATETC32 pformatetcOut)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
-static HRESULT WINAPI IDataObject_SetData(LPDATAOBJECT this, LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium, BOOL32 fRelease)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnSetData(LPDATAOBJECT iface, LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium, BOOL32 fRelease)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
-static HRESULT WINAPI IDataObject_EnumFormatEtc(LPDATAOBJECT this, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnEnumFormatEtc(LPDATAOBJECT iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
-static HRESULT WINAPI IDataObject_DAdvise (LPDATAOBJECT this, LPFORMATETC32 *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnDAdvise(LPDATAOBJECT iface, LPFORMATETC32 *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
-static HRESULT WINAPI IDataObject_DUnadvise(LPDATAOBJECT this, DWORD dwConnection)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnDUnadvise(LPDATAOBJECT iface, DWORD dwConnection)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
-static HRESULT WINAPI IDataObject_EnumDAdvise(LPDATAOBJECT this, IEnumSTATDATA **ppenumAdvise)
-{	FIXME (shell, "(%p)->()\n", this);
+static HRESULT WINAPI IDataObject_fnEnumDAdvise(LPDATAOBJECT iface, IEnumSTATDATA **ppenumAdvise)
+{
+	ICOM_THIS(IDataObject,iface);
+	FIXME (shell, "(%p)->()\n", this);
 	return E_NOTIMPL;
 }
diff --git a/dlls/shell32/enumidlist.c b/dlls/shell32/enumidlist.c
index 45cb0cf..118d839 100644
--- a/dlls/shell32/enumidlist.c
+++ b/dlls/shell32/enumidlist.c
@@ -10,9 +10,8 @@
 #include "ole.h"
 #include "ole2.h"
 #include "debug.h"
-#include "compobj.h"
-#include "interfaces.h"
 #include "shlobj.h"
+#include "objbase.h"
 #include "shell.h"
 #include "winerror.h"
 #include "winnls.h"
diff --git a/dlls/shell32/folders.c b/dlls/shell32/folders.c
index eb9082a..a3e86ed 100644
--- a/dlls/shell32/folders.c
+++ b/dlls/shell32/folders.c
@@ -10,9 +10,8 @@
 #include "ole.h"
 #include "ole2.h"
 #include "debug.h"
-#include "compobj.h"
-#include "interfaces.h"
 #include "shlobj.h"
+#include "objbase.h"
 #include "shell.h"
 #include "winerror.h"
 #include "winnls.h"
diff --git a/dlls/shell32/iconcache.c b/dlls/shell32/iconcache.c
index 2aae5e8..aad6a79 100644
--- a/dlls/shell32/iconcache.c
+++ b/dlls/shell32/iconcache.c
@@ -741,7 +741,7 @@
 	if (phiconSmall)
 	{ ret = ICO_ExtractIconEx(lpszFile, phiconSmall, nIconIndex, nIcons, 16, 16  );
 	  if ( nIcons==1 )
-	  { ret = phiconLarge[0];
+	  { ret = phiconSmall[0];
 	  }
 	}
 
diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c
index 5819b6a..0f014b3 100644
--- a/dlls/shell32/pidl.c
+++ b/dlls/shell32/pidl.c
@@ -14,8 +14,6 @@
 #include "ole.h"
 #include "ole2.h"
 #include "debug.h"
-#include "compobj.h"
-#include "interfaces.h"
 #include "shlobj.h"
 #include "shell.h"
 #include "winerror.h"
@@ -556,8 +554,8 @@
 	return _ILCreate(PT_DESKTOP, NULL, 0);
 }
 LPITEMIDLIST WINAPI _ILCreateMyComputer()
-{ TRACE(pidl,"()\n");
-  return _ILCreate(PT_MYCOMP, (void *)"My Computer", strlen ("My Computer")+1);
+{	TRACE(pidl,"()\n");
+	return _ILCreate(PT_MYCOMP, (void *)"My Computer", strlen ("My Computer")+1);
 }
 LPITEMIDLIST WINAPI _ILCreateDrive( LPCSTR lpszNew)
 {	char sTemp[4];
@@ -568,47 +566,58 @@
 	return _ILCreate(PT_DRIVE,(LPVOID)&sTemp[0],4);
 }
 LPITEMIDLIST WINAPI _ILCreateFolder( LPCSTR lpszNew)
-{ TRACE(pidl,"(%s)\n",lpszNew);
-  return _ILCreate(PT_FOLDER, (LPVOID)lpszNew, strlen(lpszNew)+1);
+{	TRACE(pidl,"(%s)\n",lpszNew);
+	return _ILCreate(PT_FOLDER, (LPVOID)lpszNew, strlen(lpszNew)+1);
 }
 LPITEMIDLIST WINAPI _ILCreateValue(LPCSTR lpszNew)
-{ TRACE(pidl,"(%s)\n",lpszNew);
-  return _ILCreate(PT_VALUE, (LPVOID)lpszNew, strlen(lpszNew)+1);
+{	TRACE(pidl,"(%s)\n",lpszNew);
+	return _ILCreate(PT_VALUE, (LPVOID)lpszNew, strlen(lpszNew)+1);
 }
 
 /**************************************************************************
  *  _ILGetDrive()
  *
- *  FIXME: quick hack
+ *  Gets the text for the drive eg. 'c:\'
+ *
+ * RETURNS
+ *  strlen (lpszText)
  */
-BOOL32 WINAPI _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT16 uSize)
-{	LPITEMIDLIST   pidlTemp=NULL;
+DWORD WINAPI _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT16 uSize)
+{	TRACE(pidl,"(%p,%p,%u)\n",pidl,pOut,uSize);
 
-	TRACE(pidl,"(%p,%p,%u)\n",pidl,pOut,uSize);
 	if(_ILIsMyComputer(pidl))
-	{ pidlTemp = ILGetNext(pidl);
-	}
-	else if (pidlTemp && _ILIsDrive(pidlTemp))
-	{ return (BOOL32)_ILGetData(PT_DRIVE, pidlTemp, (LPVOID)pOut, uSize);
-	}
-	return FALSE;
+	  pidl = ILGetNext(pidl);
+
+	if (pidl && _ILIsDrive(pidl))
+	  return _ILGetData(PT_DRIVE, pidl, (LPVOID)pOut, uSize)-1;
+
+	return 0;
 }
 /**************************************************************************
  *  _ILGetItemText()
- *  Gets the text for only this item
+ *  Gets the text for only the first item
+ *
+ * RETURNS
+ *  strlen (lpszText)
  */
 DWORD WINAPI _ILGetItemText(LPCITEMIDLIST pidl, LPSTR lpszText, UINT16 uSize)
-{	TRACE(pidl,"(pidl=%p %p %x)\n",pidl,lpszText,uSize);
+{	DWORD ret = 0;
+
+	TRACE(pidl,"(pidl=%p %p %d)\n",pidl,lpszText,uSize);
 	if (_ILIsMyComputer(pidl))
-	{ return _ILGetData(PT_MYCOMP, pidl, (LPVOID)lpszText, uSize);
+	{ ret = _ILGetData(PT_MYCOMP, pidl, (LPVOID)lpszText, uSize)-1;
 	}
-	if (_ILIsDrive(pidl))
-	{ return _ILGetData(PT_DRIVE, pidl, (LPVOID)lpszText, uSize);
+	else if (_ILIsDrive(pidl))
+	{ ret = _ILGetData(PT_DRIVE, pidl, (LPVOID)lpszText, uSize)-1;
 	}
-	if (_ILIsFolder (pidl))
-	{ return _ILGetData(PT_FOLDER, pidl, (LPVOID)lpszText, uSize);
+	else if (_ILIsFolder (pidl))
+	{ ret = _ILGetData(PT_FOLDER, pidl, (LPVOID)lpszText, uSize)-1;
 	}
-	return _ILGetData(PT_VALUE, pidl, (LPVOID)lpszText, uSize);	
+	else if (_ILIsValue (pidl))
+	{ ret = _ILGetData(PT_VALUE, pidl, (LPVOID)lpszText, uSize)-1;
+	}
+	TRACE(pidl,"(-- %s)\n",debugstr_a(lpszText));
+	return ret;
 }
 /**************************************************************************
  *  _ILIsDesktop()
@@ -617,82 +626,38 @@
  *  _ILIsValue()
  */
 BOOL32 WINAPI _ILIsDesktop(LPCITEMIDLIST pidl)
-{ TRACE(pidl,"(%p)\n",pidl);
-
-  if (! pidl)
-    return TRUE;
-
-  return (  pidl->mkid.cb == 0x00 );
+{	TRACE(pidl,"(%p)\n",pidl);
+	return ( !pidl || (pidl && pidl->mkid.cb == 0x00) );
 }
 
 BOOL32 WINAPI _ILIsMyComputer(LPCITEMIDLIST pidl)
-{ LPPIDLDATA  pData;
-  TRACE(pidl,"(%p)\n",pidl);
-
-  if (! pidl)
-    return FALSE;
-
-  pData = _ILGetDataPointer(pidl);
-  return (PT_MYCOMP == pData->type);
+{	TRACE(pidl,"(%p)\n",pidl);
+	return (pidl && PT_MYCOMP == _ILGetDataPointer(pidl)->type);
 }
 
 BOOL32 WINAPI _ILIsDrive(LPCITEMIDLIST pidl)
-{ LPPIDLDATA  pData;
-  TRACE(pidl,"(%p)\n",pidl);
-
-  if (! pidl)
-    return FALSE;
-
-  pData = _ILGetDataPointer(pidl);
-  return (PT_DRIVE == pData->type);
+{	TRACE(pidl,"(%p)\n",pidl);
+	return (pidl && PT_DRIVE == _ILGetDataPointer(pidl)->type);
 }
 
 BOOL32 WINAPI _ILIsFolder(LPCITEMIDLIST pidl)
-{ LPPIDLDATA  pData;
-  TRACE(pidl,"(%p)\n",pidl);
-
-  if (! pidl)
-    return FALSE;
-
-  pData = _ILGetDataPointer(pidl);
-  return (PT_FOLDER == pData->type);
+{	TRACE(pidl,"(%p)\n",pidl);
+	return (pidl && PT_FOLDER == _ILGetDataPointer(pidl)->type);
 }
 
 BOOL32 WINAPI _ILIsValue(LPCITEMIDLIST pidl)
-{ LPPIDLDATA  pData;
-  TRACE(pidl,"(%p)\n",pidl);
-
-  if (! pidl)
-    return FALSE;
-
-  pData = _ILGetDataPointer(pidl);
-  return (PT_VALUE == pData->type);
-}
-/**************************************************************************
- * _ILHasFolders()
- * fixme: quick hack
- */
-BOOL32 WINAPI _ILHasFolders( LPSTR pszPath, LPCITEMIDLIST pidl)
-{	BOOL32 bResult= FALSE;
-	WIN32_FIND_DATA32A stffile;	
-	HANDLE32 hFile;
-
-	TRACE(pidl,"%p %p\n", pszPath, pidl);
-	
-	hFile = FindFirstFile32A(pszPath,&stffile);
-	do
-	{ if (! (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
-	  {  bResult= TRUE;	  
-	  }
-	} while( FindNextFile32A(hFile,&stffile));
-	FindClose32 (hFile);
-	
-	return bResult;
+{	TRACE(pidl,"(%p)\n",pidl);
+	return (pidl && PT_VALUE == _ILGetDataPointer(pidl)->type);
 }
 
 /**************************************************************************
  *  _ILGetFolderText()
- *  Creates a Path string from a PIDL, filtering out the special Folders 
+ *  Creates a Path string from a PIDL, filtering out the special Folders and values
+ *  There is no trailing backslash
+ *  When lpszPath is NULL the needed size is returned
+ * 
+ * RETURNS
+ *  strlen(lpszPath)
  */
 DWORD WINAPI _ILGetFolderText(LPCITEMIDLIST pidl,LPSTR lpszPath, DWORD dwSize)
 {	LPITEMIDLIST	pidlTemp;
@@ -702,8 +667,7 @@
 	TRACE(pidl,"(%p path=%p)\n",pidl, lpszPath);
  
 	if(!pidl)
-	{ return 0;
-	}
+	  return 0;
 
 	if(_ILIsMyComputer(pidl))
 	{ pidlTemp = ILGetNext(pidl);
@@ -713,49 +677,36 @@
 	{ pidlTemp = (LPITEMIDLIST)pidl;
 	}
 
-	/*if this is NULL, return the required size of the buffer */
-	if(!lpszPath)
-	{ while(pidlTemp->mkid.cb)
-	  { LPPIDLDATA  pData = _ILGetDataPointer(pidlTemp);
-	    pText = _ILGetTextPointer(pData->type,pData);         
+	if(lpszPath)
+	  *lpszPath = 0;
 
-	    /*add the length of this item plus one for the backslash
-	    fixme: is one to much, drive has its own backslash*/
-	    dwCopied += strlen(pText) + 1;  	    
-	    pidlTemp = ILGetNext(pidlTemp);
-	  }
-
-	  /*add one for the NULL terminator */
-	  TRACE(pidl,"-- (size=%lu)\n",dwCopied);
-	  return dwCopied + 1;
-	}
-
-	*lpszPath = 0;
-
-	while(pidlTemp->mkid.cb && (dwCopied < dwSize))
+	while(pidlTemp->mkid.cb)
 	{ LPPIDLDATA  pData = _ILGetDataPointer(pidlTemp);
 
 	  /*if this item is a value, then skip it and finish */
 	  if(PT_VALUE == pData->type)
 	  { break;
 	  }
-	  pText = _ILGetTextPointer(pData->type,pData);   
-	  strcat(lpszPath, pText);
-	  PathAddBackslash32A(lpszPath);
-	  dwCopied += strlen(pText) + 1;
+
+	  pText = _ILGetTextPointer(pData->type,pData);
 	  pidlTemp = ILGetNext(pidlTemp);
+	  dwCopied += strlen(pText);
 
-	  TRACE(pidl,"-- (size=%lu,%s)\n",dwCopied,lpszPath);
-	}
-
-	/*remove the last backslash if necessary */
-	if(dwCopied)
-	{ if(*(lpszPath + strlen(lpszPath) - 1) == '\\')
-	  { *(lpszPath + strlen(lpszPath) - 1) = 0;
-	    dwCopied--;
+	  if (lpszPath)
+	  { strcat(lpszPath, pText);
+	    if (pidlTemp && lpszPath[dwCopied-1]!='\\')
+	    { lpszPath[dwCopied] = '\\';
+	      lpszPath[dwCopied+1] = '\0';
+	      dwCopied++;
+	    }
+	  }
+	  else						/* only length */
+	  { if (pidlTemp && !_ILIsDrive (pidlTemp))	/* backslash between elements */
+	      dwCopied++;
 	  }
 	}
-	TRACE(pidl,"-- (path=%s)\n",lpszPath);
+
+	TRACE(pidl,"-- (size=%lu path=%s)\n",dwCopied, debugstr_a(lpszPath));
 	return dwCopied;
 }
 
@@ -764,8 +715,7 @@
  *  _ILGetValueText()
  *  Gets the text for the last item in the list
  */
-DWORD WINAPI _ILGetValueText(
-    LPCITEMIDLIST pidl, LPSTR lpszValue, DWORD dwSize)
+DWORD WINAPI _ILGetValueText(LPCITEMIDLIST pidl, LPSTR lpszValue, DWORD dwSize)
 {	LPITEMIDLIST  pidlTemp=pidl;
 	CHAR          szText[MAX_PATH];
 
@@ -786,99 +736,53 @@
 	_ILGetItemText( pidlTemp, szText, sizeof(szText));
 
 	if(!lpszValue)
-	{ return strlen(szText) + 1;
+	{ return strlen(szText);
 	}
+	
 	strcpy(lpszValue, szText);
+
 	TRACE(pidl,"-- (pidl=%p %p=%s 0x%08lx)\n",pidl,lpszValue,lpszValue,dwSize);
 	return strlen(lpszValue);
 }
-/**************************************************************************
- *  _ILGetDataText()
- * NOTES
- *  used from ShellView
- */
-DWORD WINAPI _ILGetDataText( LPCITEMIDLIST pidlPath, LPCITEMIDLIST pidlValue, LPSTR lpszOut, DWORD dwOutSize)
-{ LPSTR    lpszFolder,
-           lpszValueName;
-  DWORD    dwNameSize;
-
-  FIXME(pidl,"(pidl=%p pidl=%p) stub\n",pidlPath,pidlValue);
-
-  if(!lpszOut || !pidlPath || !pidlValue)
-  { return FALSE;
-	}
-
-  /* fixme: get the driveletter*/
-
-  /*assemble the Folder string */
-  dwNameSize = _ILGetFolderText(pidlPath, NULL, 0);
-  lpszFolder = (LPSTR)HeapAlloc(GetProcessHeap(),0,dwNameSize);
-  if(!lpszFolder)
-  {  return FALSE;
-	}
-  _ILGetFolderText(pidlPath, lpszFolder, dwNameSize);
-
-  /*assemble the value name */
-  dwNameSize = _ILGetValueText(pidlValue, NULL, 0);
-  lpszValueName = (LPSTR)HeapAlloc(GetProcessHeap(),0,dwNameSize);
-  if(!lpszValueName)
-  { HeapFree(GetProcessHeap(),0,lpszFolder);
-    return FALSE;
-  }
-  _ILGetValueText(pidlValue, lpszValueName, dwNameSize);
-
-  /* fixme: we've got the path now do something with it*/
-	
-  HeapFree(GetProcessHeap(),0,lpszFolder);
-  HeapFree(GetProcessHeap(),0,lpszValueName);
-
-  TRACE(pidl,"-- (%p=%s 0x%08lx)\n",lpszOut,lpszOut,dwOutSize);
-
-	return TRUE;
-}
 
 /**************************************************************************
  *  _ILGetPidlPath()
  *  Create a string that includes the Drive name, the folder text and 
  *  the value text.
+ *
+ * RETURNS
+ *  strlen(lpszOut)
  */
 DWORD WINAPI _ILGetPidlPath( LPCITEMIDLIST pidl, LPSTR lpszOut, DWORD dwOutSize)
-{ LPSTR lpszTemp;
-  WORD	len;
+{	WORD  len = 0;
 
-  TRACE(pidl,"(%p,%lu)\n",lpszOut,dwOutSize);
+	TRACE(pidl,"(%p,%lu)\n",lpszOut,dwOutSize);
 
-  if(!lpszOut)
-  { return 0;
+	if(!lpszOut)
+	{ return 0;
 	}
 
-  *lpszOut = 0;
-  lpszTemp = lpszOut;
+	*lpszOut = 0;
 
-  dwOutSize -= _ILGetFolderText(pidl, lpszTemp, dwOutSize);
+	len = _ILGetFolderText(pidl, lpszOut, dwOutSize);
 
-  /*add a backslash if necessary */
-  len = strlen(lpszTemp);
-  if (len && lpszTemp[len-1]!='\\')
-	{ lpszTemp[len+0]='\\';
-    lpszTemp[len+1]='\0';
-		dwOutSize--;
-  }
+	lpszOut += len;
+	strcpy (lpszOut,"\\");
+	lpszOut++;
 
-  lpszTemp = lpszOut + strlen(lpszOut);
+	dwOutSize -= len+1;;
 
-  /*add the value string */
-  _ILGetValueText(pidl, lpszTemp, dwOutSize);
+	len += _ILGetValueText(pidl, lpszOut, dwOutSize );
 
-  /*remove the last backslash if necessary */
-  if(*(lpszOut + strlen(lpszOut) - 1) == '\\')
-  { *(lpszOut + strlen(lpszOut) - 1) = 0;
-  }
+	/*remove the last backslash if necessary */
+	if( lpszOut[len-1]=='\\')
+	{ lpszOut[len-1] = 0;
+	  len--;
+	}
 
-  TRACE(pidl,"-- (%p=%s,%lu)\n",lpszOut,lpszOut,dwOutSize);
+	TRACE(pidl,"-- (%p=%s,%lu)\n",lpszOut,lpszOut,dwOutSize);
 
-  return strlen(lpszOut);
-
+	return len;
 }
 
 /**************************************************************************
@@ -886,7 +790,7 @@
  *  Creates a new PIDL
  *  type = PT_DESKTOP | PT_DRIVE | PT_FOLDER | PT_VALUE
  *  pIn = data
- *  uInSize = size of data
+ *  uInSize = size of data (raw)
  */
 
 LPITEMIDLIST WINAPI _ILCreate(PIDLTYPE type, LPVOID pIn, UINT16 uInSize)
@@ -950,6 +854,9 @@
 }
 /**************************************************************************
  *  _ILGetData(PIDLTYPE, LPCITEMIDLIST, LPVOID, UINT16)
+ *
+ * RETURNS
+ *  length of data (raw)
  */
 DWORD WINAPI _ILGetData(PIDLTYPE type, LPCITEMIDLIST pidl, LPVOID pOut, UINT32 uOutSize)
 {	LPPIDLDATA  pData;
@@ -976,20 +883,20 @@
 	    if(uOutSize < 1)
 	      return 0;
 	    strncpy((LPSTR)pOut, "My Computer", uOutSize);
-	    dwReturn = strlen((LPSTR)pOut);
+	    dwReturn = strlen((LPSTR)pOut)+1;
 	    break;
 
 	  case PT_DRIVE:
 	    if(uOutSize < 1)
 	      return 0;
 	    strncpy((LPSTR)pOut, pszSrc, uOutSize);
-	    dwReturn = strlen((LPSTR)pOut);
+	    dwReturn = strlen((LPSTR)pOut)+1;
 	    break;
 
 	  case PT_FOLDER:
 	  case PT_VALUE: 
 	     strncpy((LPSTR)pOut, pszSrc, uOutSize);
-	     dwReturn = strlen((LPSTR)pOut);
+	     dwReturn = strlen((LPSTR)pOut)+1;
 	     break;
 	  default:
 	    ERR(pidl,"-- unknown type\n");
diff --git a/dlls/shell32/pidl.h b/dlls/shell32/pidl.h
index 4ef4891..d2cf699 100644
--- a/dlls/shell32/pidl.h
+++ b/dlls/shell32/pidl.h
@@ -22,7 +22,7 @@
 *
 * a pidl of NULL means the desktop
 *
-* The structure of the pidl seens to be a union. The first byte of the
+* The structure of the pidl seems to be a union. The first byte of the
 * PIDLDATA desribes the type of pidl.
 *
 * first byte - 	my Computer	0x1F
@@ -35,67 +35,92 @@
 * file: see the PIDLDATA structure	 
 */
 
-#define PT_DESKTOP	0x00 /*fixme*/
+#define PT_DESKTOP	0x00 /* internal */
 #define PT_MYCOMP	0x1F
 #define PT_SPECIAL	0x2E
 #define PT_DRIVE	0x23
 #define PT_FOLDER	0x31
-#define PT_VALUE	0x33 /*fixme*/
+#define PT_VALUE	0x32
 
 #pragma pack(1)
 typedef BYTE PIDLTYPE;
 
 typedef struct tagPIDLDATA
-{	PIDLTYPE type;
+{	PIDLTYPE type;			/*00*/
 	union
 	{ struct
-	  { CHAR szDriveName[4];
+	  { CHAR szDriveName[4];	/*01*/
 	    /* end of MS compatible*/
-	    DWORD dwSFGAO;
+	    DWORD dwSFGAO;		/*05*/
+	    /* the drive seems to be 19 bytes every time */
 	  } drive;
 	  struct 
-	  { BYTE dummy;
-	    DWORD dwFileSize;
-	    WORD uFileDate;
-	    WORD uFileTime;
-	    WORD uFileAttribs;
-	    /* end of MS compatible*/
-	    DWORD dwSFGAO;
+	  { BYTE dummy;			/*01 is 0x00 for files or dirs */
+	    DWORD dwFileSize;		/*02*/
+	    WORD uFileDate;		/*06*/
+	    WORD uFileTime;		/*08*/
+	    WORD uFileAttribs;		/*10*/
+	    /* end of MS compatible. Here are comming just one or two
+	    strings. The first is the long name. The second the dos name
+	    when needed. */
+	    DWORD dwSFGAO;		/*12*/
 	    CHAR  szAlternateName[14];	/* the 8.3 Name*/
-	    CHAR szText[1];		/* last entry, variable size */
+	    CHAR  szText[1];		/* last entry, variable size */
 	  } file, folder, generic; 
 	}u;
 } PIDLDATA, *LPPIDLDATA;
 #pragma pack(4)
 
-LPITEMIDLIST WINAPI _ILCreateDesktop(void);
-LPITEMIDLIST WINAPI _ILCreateMyComputer(void);
-LPITEMIDLIST WINAPI _ILCreateDrive(LPCSTR);
-LPITEMIDLIST WINAPI _ILCreateFolder(LPCSTR);
-LPITEMIDLIST WINAPI _ILCreateValue(LPCSTR);
-LPITEMIDLIST WINAPI _ILCreate(PIDLTYPE,LPVOID,UINT16);
-
-BOOL32 WINAPI _ILGetDrive(LPCITEMIDLIST,LPSTR,UINT16);
+/*
+ * getting string values from pidls
+ *
+ * return value is strlen()
+ */
+DWORD WINAPI _ILGetDrive(LPCITEMIDLIST,LPSTR,UINT16);
 DWORD WINAPI _ILGetItemText(LPCITEMIDLIST,LPSTR,UINT16);
 DWORD WINAPI _ILGetFolderText(LPCITEMIDLIST,LPSTR,DWORD);
 DWORD WINAPI _ILGetValueText(LPCITEMIDLIST,LPSTR,DWORD);
-DWORD WINAPI _ILGetDataText(LPCITEMIDLIST,LPCITEMIDLIST,LPSTR,DWORD);
 DWORD WINAPI _ILGetPidlPath(LPCITEMIDLIST,LPSTR,DWORD);
-DWORD WINAPI _ILGetData(PIDLTYPE,LPCITEMIDLIST,LPVOID,UINT32);
 
+/*
+ * getting special values from simple pidls
+ */
+BOOL32 WINAPI _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT32 uOutSize);
+BOOL32 WINAPI _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT32 uOutSize);
+BOOL32 WINAPI _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT32 uOutSize);
+
+
+/*
+ * testing simple pidls
+ */
 BOOL32 WINAPI _ILIsDesktop(LPCITEMIDLIST);
 BOOL32 WINAPI _ILIsMyComputer(LPCITEMIDLIST);
 BOOL32 WINAPI _ILIsDrive(LPCITEMIDLIST);
 BOOL32 WINAPI _ILIsFolder(LPCITEMIDLIST);
 BOOL32 WINAPI _ILIsValue(LPCITEMIDLIST);
 
-BOOL32 WINAPI _ILHasFolders(LPSTR,LPCITEMIDLIST);
+/*
+ * simple pidls from strings
+ */
+LPITEMIDLIST WINAPI _ILCreateDesktop(void);
+LPITEMIDLIST WINAPI _ILCreateMyComputer(void);
+LPITEMIDLIST WINAPI _ILCreateDrive(LPCSTR);
+LPITEMIDLIST WINAPI _ILCreateFolder(LPCSTR);
+LPITEMIDLIST WINAPI _ILCreateValue(LPCSTR);
 
+/*
+ * raw pidl handling (binary) 
+ *
+ * data is binary / sizes are bytes
+ */
+DWORD WINAPI _ILGetData(PIDLTYPE,LPCITEMIDLIST,LPVOID,UINT32);
+LPITEMIDLIST WINAPI _ILCreate(PIDLTYPE,LPVOID,UINT16);
+
+/*
+ * helper functions (getting struct-pointer)
+ */
 LPPIDLDATA WINAPI _ILGetDataPointer(LPCITEMIDLIST);
 LPSTR WINAPI _ILGetTextPointer(PIDLTYPE type, LPPIDLDATA pidldata);
-BOOL32 WINAPI _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT32 uOutSize);
-BOOL32 WINAPI _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT32 uOutSize);
-BOOL32 WINAPI _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT32 uOutSize);
 
 void pdump (LPCITEMIDLIST pidl);
 #endif
diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index 5acf03c..78ca810 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -21,7 +21,6 @@
 #include "dlgs.h"
 #include "win.h"
 #include "cursoricon.h"
-#include "interfaces.h"
 #include "sysmetrics.h"
 #include "shlobj.h"
 #include "debug.h"
@@ -382,30 +381,29 @@
   LPCLASSFACTORY lpclf;
 	TRACE(shell,"%p->(%p)\n",shellfolder,*shellfolder);
 
-  if (pdesktopfolder)
-	{	hres = NOERROR;
-	}
-	else
-  { lpclf = IClassFactory_Constructor();
+  if (pdesktopfolder) {
+    hres = NOERROR;
+  } else {
+    lpclf = IClassFactory_Constructor();
     /* fixme: the buildin IClassFactory_Constructor is at the moment only 
  		for rclsid=CLSID_ShellDesktop, so we get the right Interface (jsch)*/
-    if(lpclf)
-    { hres = lpclf->lpvtbl->fnCreateInstance(lpclf,NULL,(REFIID)&IID_IShellFolder, (void*)&pdesktopfolder);
-	 	  lpclf->lpvtbl->fnRelease(lpclf);
+    if(lpclf) {
+      hres = IClassFactory_CreateInstance(lpclf,NULL,(REFIID)&IID_IShellFolder, (void*)&pdesktopfolder);
+      IClassFactory_Release(lpclf);
 	  }  
   }
 	
-  if (pdesktopfolder)
-	{ *shellfolder = pdesktopfolder;
+  if (pdesktopfolder) {
+    *shellfolder = pdesktopfolder;
     pdesktopfolder->lpvtbl->fnAddRef(pdesktopfolder);
+  } else {
+    *shellfolder=NULL;
 	}
-  else
-	{ *shellfolder=NULL;
-	}	
 
   TRACE(shell,"-- %p->(%p)\n",shellfolder, *shellfolder);
 	return hres;
 }
+
 /*************************************************************************
  *			 SHGetPathFromIDList		[SHELL32.221][NT 4.0: SHELL32.219]
  */
@@ -962,7 +960,7 @@
 }
 
 
-void	(CALLBACK* pDLLInitComctl)(void);
+void	(CALLBACK* pDLLInitComctl)(LPVOID);
 INT32	(CALLBACK* pImageList_AddIcon) (HIMAGELIST himl, HICON32 hIcon);
 INT32	(CALLBACK* pImageList_ReplaceIcon) (HIMAGELIST, INT32, HICON32);
 HIMAGELIST (CALLBACK * pImageList_Create) (INT32,INT32,UINT32,INT32,INT32);
@@ -1000,7 +998,7 @@
     if (hComctl32)
     { pDLLInitComctl=GetProcAddress32(hComctl32,"InitCommonControlsEx");
       if (pDLLInitComctl)
-      { pDLLInitComctl();
+      { pDLLInitComctl(NULL);
       }
       pImageList_Create=GetProcAddress32(hComctl32,"ImageList_Create");
       pImageList_AddIcon=GetProcAddress32(hComctl32,"ImageList_AddIcon");
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index 280e269..ff64d05 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -16,7 +16,7 @@
 /*******************************************
 * pointer to functions dynamically loaded
 */
-extern void	(CALLBACK* pDLLInitComctl)(void);
+extern void	(CALLBACK* pDLLInitComctl)(LPVOID);
 extern INT32	(CALLBACK* pImageList_AddIcon) (HIMAGELIST himl, HICON32 hIcon);
 extern INT32	(CALLBACK* pImageList_ReplaceIcon) (HIMAGELIST, INT32, HICON32);
 extern HIMAGELIST (CALLBACK* pImageList_Create) (INT32,INT32,UINT32,INT32,INT32);
diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c
index cb2fcae..ddba978 100644
--- a/dlls/shell32/shelllink.c
+++ b/dlls/shell32/shelllink.c
@@ -11,9 +11,9 @@
 #include "ole.h"
 #include "ole2.h"
 #include "debug.h"
-#include "compobj.h"
-#include "interfaces.h"
-#include "shlobj.h"
+#include "objbase.h"
+#include "wine/obj_base.h"
+#include "wine/obj_storage.h"
 #include "shell.h"
 #include "winerror.h"
 #include "winnls.h"
@@ -24,48 +24,38 @@
 #include "shell32_main.h"
 
 /* IPersistFile Implementation */
-static HRESULT WINAPI IPersistFile_QueryInterface(LPPERSISTFILE this, REFIID riid, LPVOID * ppvObj);
-static ULONG WINAPI IPersistFile_AddRef(LPPERSISTFILE this);
-static ULONG WINAPI IPersistFile_Release(LPPERSISTFILE this);
+typedef struct _IPersistFile {
+    /* IUnknown fields */
+    ICOM_VTABLE(IPersistFile)* lpvtbl;
+    DWORD                       ref;
+} _IPersistFile;
 
-static HRESULT WINAPI IPersistFile_GetClassID (LPPERSISTFILE this, CLSID *pClassID);
-static HRESULT WINAPI IPersistFile_IsDirty (LPPERSISTFILE this);
-static HRESULT WINAPI IPersistFile_Load (LPPERSISTFILE this, LPCOLESTR32 pszFileName, DWORD dwMode);
-static HRESULT WINAPI IPersistFile_Save (LPPERSISTFILE this, LPCOLESTR32 pszFileName, BOOL32 fRemember);
-static HRESULT WINAPI IPersistFile_SaveCompleted (LPPERSISTFILE this, LPCOLESTR32 pszFileName);
-static HRESULT WINAPI IPersistFile_GetCurFile (LPPERSISTFILE this, LPOLESTR32 *ppszFileName);
+static struct ICOM_VTABLE(IPersistFile) pfvt;
 
-static struct IPersistFile_VTable pfvt = 
-{	IPersistFile_QueryInterface,
-	IPersistFile_AddRef,
-	IPersistFile_Release,
-	IPersistFile_GetClassID,
-	IPersistFile_IsDirty,
-	IPersistFile_Load,
-	IPersistFile_Save,
-	IPersistFile_SaveCompleted,
-	IPersistFile_GetCurFile
-};
+
 /**************************************************************************
  *	  IPersistFile_Constructor
  */
 LPPERSISTFILE IPersistFile_Constructor(void) 
-{	LPPERSISTFILE sl;
+{
+	_IPersistFile* sl;
 
-	sl = (LPPERSISTFILE)HeapAlloc(GetProcessHeap(),0,sizeof(IPersistFile));
+	sl = (_IPersistFile*)HeapAlloc(GetProcessHeap(),0,sizeof(_IPersistFile));
 	sl->ref = 1;
 	sl->lpvtbl = &pfvt;
 
 	TRACE(shell,"(%p)->()\n",sl);
-	return sl;
+	return (LPPERSISTFILE)sl;
 }
 
 /**************************************************************************
  *  IPersistFile_QueryInterface
  */
-static HRESULT WINAPI IPersistFile_QueryInterface(
-  LPPERSISTFILE this, REFIID riid, LPVOID *ppvObj)
-{	char    xriid[50];
+static HRESULT WINAPI IPersistFile_fnQueryInterface(
+  LPUNKNOWN iface, REFIID riid, LPVOID *ppvObj)
+{
+	ICOM_THIS(IPersistFile,iface);
+	char    xriid[50];
 	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 	TRACE(shell,"(%p)->(\n\tIID:\t%s)\n",this,xriid);
 
@@ -79,7 +69,7 @@
 	}   
 
 	if(*ppvObj)
-	{ (*(LPPERSISTFILE*)ppvObj)->lpvtbl->fnAddRef(this);      
+	{ IPersistFile_AddRef((IPersistFile*)*ppvObj);      
 	  TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
@@ -89,15 +79,19 @@
 /******************************************************************************
  * IPersistFile_AddRef
  */
-static ULONG WINAPI IPersistFile_AddRef(LPPERSISTFILE this)
-{	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IPersistFile_fnAddRef(LPUNKNOWN iface)
+{
+	ICOM_THIS(IPersistFile,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	return ++(this->ref);
 }
 /******************************************************************************
  * IPersistFile_Release
  */
-static ULONG WINAPI IPersistFile_Release(LPPERSISTFILE this)
-{	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IPersistFile_fnRelease(LPUNKNOWN iface)
+{
+	ICOM_THIS(IPersistFile,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	if (!--(this->ref)) 
 	{ TRACE(shell,"-- destroying IPersistFile(%p)\n",this);
 	  HeapFree(GetProcessHeap(),0,this);
@@ -106,70 +100,89 @@
 	return this->ref;
 }
 
-static HRESULT WINAPI IPersistFile_GetClassID (LPPERSISTFILE this, CLSID *pClassID)
-{	FIXME(shell,"(%p)\n",this);
+static HRESULT WINAPI IPersistFile_fnGetClassID(const IPersist* iface, CLSID *pClassID)
+{
+	ICOM_CTHIS(IPersistFile,iface);
+	FIXME(shell,"(%p)\n",this);
 	return NOERROR;
 }
-static HRESULT WINAPI IPersistFile_IsDirty (LPPERSISTFILE this)
-{	FIXME(shell,"(%p)\n",this);
+static HRESULT WINAPI IPersistFile_fnIsDirty(const IPersistFile* iface)
+{
+	ICOM_CTHIS(IPersistFile,iface);
+	FIXME(shell,"(%p)\n",this);
 	return NOERROR;
 }
-static HRESULT WINAPI IPersistFile_Load (LPPERSISTFILE this, LPCOLESTR32 pszFileName, DWORD dwMode)
-{	FIXME(shell,"(%p)->(%s)\n",this,debugstr_w(pszFileName));
+static HRESULT WINAPI IPersistFile_fnLoad(LPPERSISTFILE iface, LPCOLESTR32 pszFileName, DWORD dwMode)
+{
+	ICOM_THIS(IPersistFile,iface);
+	FIXME(shell,"(%p)->(%s)\n",this,debugstr_w(pszFileName)); 
 	return E_FAIL;
 }
-static HRESULT WINAPI IPersistFile_Save (LPPERSISTFILE this, LPCOLESTR32 pszFileName, BOOL32 fRemember)
-{	FIXME(shell,"(%p)->(%s)\n",this,debugstr_w(pszFileName));
+static HRESULT WINAPI IPersistFile_fnSave(LPPERSISTFILE iface, LPCOLESTR32 pszFileName, BOOL32 fRemember)
+{
+	ICOM_THIS(IPersistFile,iface);
+	FIXME(shell,"(%p)->(%s)\n",this,debugstr_w(pszFileName));
+       	return NOERROR;
+}
+static HRESULT WINAPI IPersistFile_fnSaveCompleted(LPPERSISTFILE iface, LPCOLESTR32 pszFileName)
+{
+	ICOM_THIS(IPersistFile,iface);
+	FIXME(shell,"(%p)->(%s)\n",this,debugstr_w(pszFileName));
+        return NOERROR;
+}
+static HRESULT WINAPI IPersistFile_fnGetCurFile(const IPersistFile* iface, LPOLESTR32 *ppszFileName)
+{
+	ICOM_CTHIS(IPersistFile,iface);
+	FIXME(shell,"(%p)\n",this);
 	return NOERROR;
 }
-static HRESULT WINAPI IPersistFile_SaveCompleted (LPPERSISTFILE this, LPCOLESTR32 pszFileName)
-{	FIXME(shell,"(%p)->(%s)\n",this,debugstr_w(pszFileName));
-	return NOERROR;
-}
-static HRESULT WINAPI IPersistFile_GetCurFile (LPPERSISTFILE this, LPOLESTR32 *ppszFileName)
-{	FIXME(shell,"(%p)\n",this);
-	return NOERROR;
-}
-
-
-/**************************************************************************
-*  IClassFactory Implementation
-*/
-static HRESULT WINAPI IShellLink_CF_QueryInterface(LPCLASSFACTORY,REFIID,LPVOID*);
-static ULONG WINAPI IShellLink_CF_AddRef(LPCLASSFACTORY);
-static ULONG WINAPI IShellLink_CF_Release(LPCLASSFACTORY);
-static HRESULT WINAPI IShellLink_CF_CreateInstance(LPCLASSFACTORY, LPUNKNOWN, REFIID, LPVOID *);
-static HRESULT WINAPI IShellLink_CF_LockServer(LPCLASSFACTORY, BOOL32);
-/**************************************************************************
- *  IShellLink_CF_VTable
- */
-static IClassFactory_VTable slcfvt = 
-{	IShellLink_CF_QueryInterface,
-	IShellLink_CF_AddRef,
-	IShellLink_CF_Release,
-	IShellLink_CF_CreateInstance,
-	IShellLink_CF_LockServer
+  
+static struct ICOM_VTABLE(IPersistFile) pfvt = 
+{
+    {
+        {
+            IPersistFile_fnQueryInterface,
+            IPersistFile_fnAddRef,
+            IPersistFile_fnRelease
+        },
+        IPersistFile_fnGetClassID
+    },
+    IPersistFile_fnIsDirty,
+    IPersistFile_fnLoad,
+    IPersistFile_fnSave,
+    IPersistFile_fnSaveCompleted,
+    IPersistFile_fnGetCurFile
 };
 
+
+/**************************************************************************
+*  IShellLink's IClassFactory implementation
+ */
+
+static ICOM_VTABLE(IClassFactory) slcfvt;
+
 /**************************************************************************
  *  IShellLink_CF_Constructor
  */
 
 LPCLASSFACTORY IShellLink_CF_Constructor(void)
-{	LPCLASSFACTORY	lpclf;
+{
+	_IClassFactory* lpclf;
 
-	lpclf= (LPCLASSFACTORY)HeapAlloc(GetProcessHeap(),0,sizeof(IClassFactory));
+	lpclf= (_IClassFactory*)HeapAlloc(GetProcessHeap(),0,sizeof(_IClassFactory));
 	lpclf->ref = 1;
 	lpclf->lpvtbl = &slcfvt;
 	TRACE(shell,"(%p)->()\n",lpclf);
-	return lpclf;
+	return (LPCLASSFACTORY)lpclf;
 }
 /**************************************************************************
  *  IShellLink_CF_QueryInterface
  */
 static HRESULT WINAPI IShellLink_CF_QueryInterface(
-  LPCLASSFACTORY this, REFIID riid, LPVOID *ppvObj)
-{	char	xriid[50];
+  LPUNKNOWN iface, REFIID riid, LPVOID *ppvObj)
+{
+	ICOM_THIS(IClassFactory,iface);
+	char	xriid[50];
 	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 	TRACE(shell,"(%p)->(\n\tIID:\t%s)\n",this,xriid);
 
@@ -183,7 +196,7 @@
 	}   
 
 	if(*ppvObj)
-	{ (*(LPCLASSFACTORY*)ppvObj)->lpvtbl->fnAddRef(this);  	
+	{ IUnknown_AddRef((IUnknown*)*ppvObj);  	
 	  TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
@@ -193,15 +206,19 @@
 /******************************************************************************
  * IShellLink_CF_AddRef
  */
-static ULONG WINAPI IShellLink_CF_AddRef(LPCLASSFACTORY this)
-{ TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IShellLink_CF_AddRef(LPUNKNOWN iface)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	return ++(this->ref);
 }
 /******************************************************************************
  * IShellLink_CF_Release
  */
-static ULONG WINAPI IShellLink_CF_Release(LPCLASSFACTORY this)
-{	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IShellLink_CF_Release(LPUNKNOWN iface)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	if (!--(this->ref)) 
 	{ TRACE(shell,"-- destroying IClassFactory(%p)\n",this);
 		HeapFree(GetProcessHeap(),0,this);
@@ -213,8 +230,10 @@
  * IShellLink_CF_CreateInstance
  */
 static HRESULT WINAPI IShellLink_CF_CreateInstance(
-  LPCLASSFACTORY this, LPUNKNOWN pUnknown, REFIID riid, LPVOID *ppObject)
-{	IUnknown *pObj = NULL;
+  LPCLASSFACTORY iface, LPUNKNOWN pUnknown, REFIID riid, LPVOID *ppObject)
+{
+	ICOM_THIS(IClassFactory,iface);
+	IUnknown *pObj = NULL;
 	HRESULT hres;
 	char	xriid[50];
 
@@ -239,8 +258,8 @@
 	{ return(E_OUTOFMEMORY);
 	}
 	 
-	hres = pObj->lpvtbl->fnQueryInterface(pObj,riid, ppObject);
-	pObj->lpvtbl->fnRelease(pObj);
+	hres = IUnknown_QueryInterface(pObj,riid, ppObject);
+	IUnknown_Release(pObj);
 	TRACE(shell,"-- Object created: (%p)->%p\n",this,*ppObject);
 
 	return hres;
@@ -248,10 +267,22 @@
 /******************************************************************************
  * IShellLink_CF_LockServer
  */
-static HRESULT WINAPI IShellLink_CF_LockServer(LPCLASSFACTORY this, BOOL32 fLock)
-{	TRACE(shell,"%p->(0x%x), not implemented\n",this, fLock);
+static HRESULT WINAPI IShellLink_CF_LockServer(LPCLASSFACTORY iface, BOOL32 fLock)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"%p->(0x%x), not implemented\n",this, fLock);
 	return E_NOTIMPL;
 }
+static ICOM_VTABLE(IClassFactory) slcfvt = 
+{
+  {
+    IShellLink_CF_QueryInterface,
+    IShellLink_CF_AddRef,
+    IShellLink_CF_Release
+  },
+  IShellLink_CF_CreateInstance,
+  IShellLink_CF_LockServer
+};
 
 /* IShellLink Implementation */
 static HRESULT WINAPI IShellLink_QueryInterface(LPSHELLLINK,REFIID,LPVOID*);
@@ -280,6 +311,7 @@
 * IShellLink Implementation
 */
 
+
 static struct IShellLink_VTable slvt = 
 {	IShellLink_QueryInterface,
 	IShellLink_AddRef,
@@ -363,7 +395,7 @@
 {	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	if (!--(this->ref)) 
 	{ TRACE(shell,"-- destroying IShellLink(%p)\n",this);
-	  this->lppf->lpvtbl->fnRelease(this->lppf);	/* IPersistFile*/
+	  IPersistFile_Release(this->lppf);	/* IPersistFile*/
 	  HeapFree(GetProcessHeap(),0,this);
 	  return 0;
 	}
@@ -453,43 +485,33 @@
 }
 
 /**************************************************************************
-*  IClassFactory for IShellLinkW 
+*  IShellLink's IClassFactory implementation
 */
-static HRESULT WINAPI IShellLinkW_CF_QueryInterface(LPCLASSFACTORY,REFIID,LPVOID*);
-static ULONG WINAPI IShellLinkW_CF_AddRef(LPCLASSFACTORY);
-static ULONG WINAPI IShellLinkW_CF_Release(LPCLASSFACTORY);
-static HRESULT WINAPI IShellLinkW_CF_CreateInstance(LPCLASSFACTORY, LPUNKNOWN, REFIID, LPVOID *);
-static HRESULT WINAPI IShellLinkW_CF_LockServer(LPCLASSFACTORY, BOOL32);
-/**************************************************************************
- *  IShellLinkW_CF_VTable
- */
-static IClassFactory_VTable slwcfvt = 
-{	IShellLinkW_CF_QueryInterface,
-	IShellLinkW_CF_AddRef,
-	IShellLinkW_CF_Release,
-	IShellLinkW_CF_CreateInstance,
-	IShellLinkW_CF_LockServer
-};
+
+static ICOM_VTABLE(IClassFactory) slwcfvt;
 
 /**************************************************************************
  *  IShellLinkW_CF_Constructor
  */
 
 LPCLASSFACTORY IShellLinkW_CF_Constructor(void)
-{	LPCLASSFACTORY	lpclf;
+{
+	_IClassFactory* lpclf;
 
-	lpclf= (LPCLASSFACTORY)HeapAlloc(GetProcessHeap(),0,sizeof(IClassFactory));
+	lpclf= (_IClassFactory*)HeapAlloc(GetProcessHeap(),0,sizeof(_IClassFactory));
 	lpclf->ref = 1;
 	lpclf->lpvtbl = &slwcfvt;
 	TRACE(shell,"(%p)->()\n",lpclf);
-	return lpclf;
+	return (LPCLASSFACTORY)lpclf;
 }
 /**************************************************************************
  *  IShellLinkW_CF_QueryInterface
  */
 static HRESULT WINAPI IShellLinkW_CF_QueryInterface(
-  LPCLASSFACTORY this, REFIID riid, LPVOID *ppvObj)
-{	char	xriid[50];
+  LPUNKNOWN iface, REFIID riid, LPVOID *ppvObj)
+{
+	ICOM_THIS(IClassFactory,iface);
+	char	xriid[50];
 	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 	TRACE(shell,"(%p)->(\n\tIID:\t%s)\n",this,xriid);
 
@@ -502,8 +524,8 @@
 	{ *ppvObj = (LPCLASSFACTORY)this;
 	}   
 
-	if(*ppvObj)
-	{ (*(LPCLASSFACTORY*)ppvObj)->lpvtbl->fnAddRef(this);  	
+	if(*ppvObj) {
+	  IUnknown_AddRef((IUnknown*)*ppvObj);  	
 	  TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
@@ -513,15 +535,19 @@
 /******************************************************************************
  * IShellLinkW_CF_AddRef
  */
-static ULONG WINAPI IShellLinkW_CF_AddRef(LPCLASSFACTORY this)
-{ TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IShellLinkW_CF_AddRef(LPUNKNOWN iface)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	return ++(this->ref);
 }
 /******************************************************************************
  * IShellLinkW_CF_Release
  */
-static ULONG WINAPI IShellLinkW_CF_Release(LPCLASSFACTORY this)
-{	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IShellLinkW_CF_Release(LPUNKNOWN iface)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	if (!--(this->ref)) 
 	{ TRACE(shell,"-- destroying IClassFactory(%p)\n",this);
 		HeapFree(GetProcessHeap(),0,this);
@@ -533,8 +559,10 @@
  * IShellLinkW_CF_CreateInstance
  */
 static HRESULT WINAPI IShellLinkW_CF_CreateInstance(
-  LPCLASSFACTORY this, LPUNKNOWN pUnknown, REFIID riid, LPVOID *ppObject)
-{	IUnknown *pObj = NULL;
+  LPCLASSFACTORY iface, LPUNKNOWN pUnknown, REFIID riid, LPVOID *ppObject)
+{
+	ICOM_THIS(IClassFactory,iface);
+	IUnknown *pObj = NULL;
 	HRESULT hres;
 	char	xriid[50];
 
@@ -569,11 +597,24 @@
  * IShellLinkW_CF_LockServer
  */
 
-static HRESULT WINAPI IShellLinkW_CF_LockServer(LPCLASSFACTORY this, BOOL32 fLock)
-{	TRACE(shell,"%p->(0x%x), not implemented\n",this, fLock);
+static HRESULT WINAPI IShellLinkW_CF_LockServer(LPCLASSFACTORY iface, BOOL32 fLock)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"%p->(0x%x), not implemented\n",this, fLock);
 	return E_NOTIMPL;
 }
 
+static ICOM_VTABLE(IClassFactory) slwcfvt = 
+{
+  {
+    IShellLinkW_CF_QueryInterface,
+    IShellLinkW_CF_AddRef,
+    IShellLinkW_CF_Release
+  },
+  IShellLinkW_CF_CreateInstance,
+  IShellLinkW_CF_LockServer
+};
+
 /* IShellLinkW Implementation */
 static HRESULT WINAPI IShellLinkW_QueryInterface(LPSHELLLINKW,REFIID,LPVOID*);
 static ULONG WINAPI IShellLinkW_AddRef(LPSHELLLINKW);
@@ -684,7 +725,7 @@
 { TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
   if (!--(this->ref)) 
   { TRACE(shell,"-- destroying IShellLinkW(%p)\n",this);
-    this->lppf->lpvtbl->fnRelease(this->lppf);	/* IPersistFile*/
+    IPersistFile_Release(this->lppf);	/* IPersistFile*/
     HeapFree(GetProcessHeap(),0,this);
     return 0;
   }
diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c
index 0d8efa1..b63f7d8 100644
--- a/dlls/shell32/shellole.c
+++ b/dlls/shell32/shellole.c
@@ -12,9 +12,8 @@
 #include "ole.h"
 #include "ole2.h"
 #include "debug.h"
-#include "compobj.h"
-#include "interfaces.h"
 #include "shlobj.h"
+#include "objbase.h"
 #include "shell.h"
 #include "winerror.h"
 #include "winnls.h"
@@ -84,8 +83,8 @@
 	{ FIXME(shell,"no classfactory, but hres is 0x%ld!\n",hres);
 	  return E_FAIL;
 	}
-	classfac->lpvtbl->fnCreateInstance(classfac,unknownouter,refiid,inst);
-	classfac->lpvtbl->fnRelease(classfac);
+	IClassFactory_CreateInstance(classfac,unknownouter,refiid,inst);
+	IClassFactory_Release(classfac);
 	return 0;
 }
 
@@ -185,9 +184,9 @@
 	  { lpclf = IClassFactory_Constructor();
 	  }
 
-	  if(lpclf)
-	  { hres = lpclf->lpvtbl->fnQueryInterface(lpclf,iid, ppv);
-		lpclf->lpvtbl->fnRelease(lpclf);
+	  if(lpclf) {
+	    hres = IClassFactory_QueryInterface(lpclf,iid, ppv);
+	    IClassFactory_Release(lpclf);
 	  }
 	}
 	else
@@ -216,41 +215,31 @@
 /**************************************************************************
 *  IClassFactory Implementation
 */
-static HRESULT WINAPI IClassFactory_QueryInterface(LPCLASSFACTORY,REFIID,LPVOID*);
-static ULONG WINAPI IClassFactory_AddRef(LPCLASSFACTORY);
-static ULONG WINAPI IClassFactory_Release(LPCLASSFACTORY);
-static HRESULT WINAPI IClassFactory_CreateInstance(LPCLASSFACTORY, LPUNKNOWN, REFIID, LPVOID *);
-static HRESULT WINAPI IClassFactory_LockServer(LPCLASSFACTORY, BOOL32);
-/**************************************************************************
- *  IClassFactory_VTable
- */
-static IClassFactory_VTable clfvt = 
-{	IClassFactory_QueryInterface,
-	IClassFactory_AddRef,
-	IClassFactory_Release,
-	IClassFactory_CreateInstance,
-	IClassFactory_LockServer
-};
+
+static ICOM_VTABLE(IClassFactory) clfvt;
 
 /**************************************************************************
  *  IClassFactory_Constructor
  */
 
 LPCLASSFACTORY IClassFactory_Constructor(void)
-{	LPCLASSFACTORY	lpclf;
+{
+	_IClassFactory* lpclf;
 
-	lpclf= (LPCLASSFACTORY)HeapAlloc(GetProcessHeap(),0,sizeof(IClassFactory));
+	lpclf= (_IClassFactory*)HeapAlloc(GetProcessHeap(),0,sizeof(_IClassFactory));
 	lpclf->ref = 1;
 	lpclf->lpvtbl = &clfvt;
   TRACE(shell,"(%p)->()\n",lpclf);
-	return lpclf;
+	return (LPCLASSFACTORY)lpclf;
 }
 /**************************************************************************
  *  IClassFactory_QueryInterface
  */
-static HRESULT WINAPI IClassFactory_QueryInterface(
-  LPCLASSFACTORY this, REFIID riid, LPVOID *ppvObj)
-{	char	xriid[50];
+static HRESULT WINAPI IClassFactory_fnQueryInterface(
+  LPUNKNOWN iface, REFIID riid, LPVOID *ppvObj)
+{
+	ICOM_THIS(IClassFactory,iface);
+	char	xriid[50];
 	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 	TRACE(shell,"(%p)->(\n\tIID:\t%s)\n",this,xriid);
 
@@ -264,7 +253,7 @@
 	}   
 
 	if(*ppvObj)
-	{ (*(LPCLASSFACTORY*)ppvObj)->lpvtbl->fnAddRef(this);  	
+	{ IUnknown_AddRef((LPUNKNOWN)*ppvObj);  	
 	  TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
@@ -274,15 +263,19 @@
 /******************************************************************************
  * IClassFactory_AddRef
  */
-static ULONG WINAPI IClassFactory_AddRef(LPCLASSFACTORY this)
-{ TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IClassFactory_fnAddRef(LPUNKNOWN iface)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	return ++(this->ref);
 }
 /******************************************************************************
  * IClassFactory_Release
  */
-static ULONG WINAPI IClassFactory_Release(LPCLASSFACTORY this)
-{	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
+static ULONG WINAPI IClassFactory_fnRelease(LPUNKNOWN iface)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"(%p)->(count=%lu)\n",this,this->ref);
 	if (!--(this->ref)) 
 	{ TRACE(shell,"-- destroying IClassFactory(%p)\n",this);
 		HeapFree(GetProcessHeap(),0,this);
@@ -293,9 +286,11 @@
 /******************************************************************************
  * IClassFactory_CreateInstance
  */
-static HRESULT WINAPI IClassFactory_CreateInstance(
-  LPCLASSFACTORY this, LPUNKNOWN pUnknown, REFIID riid, LPVOID *ppObject)
-{	IUnknown *pObj = NULL;
+static HRESULT WINAPI IClassFactory_fnCreateInstance(
+  LPCLASSFACTORY iface, LPUNKNOWN pUnknown, REFIID riid, LPVOID *ppObject)
+{
+	ICOM_THIS(IClassFactory,iface);
+	IUnknown *pObj = NULL;
 	HRESULT hres;
 	char	xriid[50];
 
@@ -341,7 +336,20 @@
 /******************************************************************************
  * IClassFactory_LockServer
  */
-static HRESULT WINAPI IClassFactory_LockServer(LPCLASSFACTORY this, BOOL32 fLock)
-{	TRACE(shell,"%p->(0x%x), not implemented\n",this, fLock);
+static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface, BOOL32 fLock)
+{
+	ICOM_THIS(IClassFactory,iface);
+	TRACE(shell,"%p->(0x%x), not implemented\n",this, fLock);
 	return E_NOTIMPL;
 }
+
+static ICOM_VTABLE(IClassFactory) clfvt = 
+{
+  {
+    IClassFactory_fnQueryInterface,
+    IClassFactory_fnAddRef,
+    IClassFactory_fnRelease
+  },
+  IClassFactory_fnCreateInstance,
+  IClassFactory_fnLockServer
+};
diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index cf2b4a8..2edd0df 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -25,7 +25,6 @@
 #include "dlgs.h"
 #include "win.h"
 #include "cursoricon.h"
-#include "interfaces.h"
 #include "shlobj.h"
 #include "debug.h"
 #include "winreg.h"
@@ -311,7 +310,9 @@
  */
 DWORD WINAPI SHFree(LPVOID x) {
   TRACE(shell,"%p\n",x);
-  /*return LocalFree32((HANDLE32)x);*/ /* crashes */
+  if (!HIWORD(x))
+  { *(LPDWORD)0xdeaf0000 = 0;
+  }
   return HeapFree(GetProcessHeap(),0,x);
 }
 
diff --git a/dlls/shell32/shlfolder.c b/dlls/shell32/shlfolder.c
index 969ce17..3fff67d 100644
--- a/dlls/shell32/shlfolder.c
+++ b/dlls/shell32/shlfolder.c
@@ -1,5 +1,5 @@
 /*
- *	Shell Folder stuff (...and all the OLE-Objects of SHELL32.DLL)
+ *	Shell Folder stuff
  *
  *	Copyright 1997	Marcus Meissner
  *	Copyright 1998	Juergen Schmied
@@ -12,9 +12,8 @@
 #include "ole.h"
 #include "ole2.h"
 #include "debug.h"
-#include "compobj.h"
-#include "interfaces.h"
 #include "shlobj.h"
+#include "objbase.h"
 #include "shell.h"
 #include "winerror.h"
 #include "winnls.h"
@@ -115,11 +114,11 @@
 	if(sf->mpidl)        /* do we have a pidl? */
 	{ dwSize = 0;
 	  if(sf->mpSFParent->sMyPath)		/* get the size of the parents path */
-	  { dwSize += strlen(sf->mpSFParent->sMyPath) + 1;
+	  { dwSize += strlen(sf->mpSFParent->sMyPath) ;
 	    TRACE(shell,"-- (%p)->(parent's path=%s)\n",sf, debugstr_a(sf->mpSFParent->sMyPath));
 	  }   
 	  dwSize += _ILGetFolderText(sf->mpidl,NULL,0); /* add the size of the foldername*/
-	  sf->sMyPath = SHAlloc(dwSize);
+	  sf->sMyPath = SHAlloc(dwSize+1);
 	  if(sf->sMyPath)
 	  { *(sf->sMyPath)=0x00;
 	    if(sf->mpSFParent->sMyPath)		/* if the parent has a path, get it*/
@@ -141,24 +140,24 @@
 */
 static HRESULT WINAPI IShellFolder_QueryInterface(
   LPSHELLFOLDER this, REFIID riid, LPVOID *ppvObj)
-{  char	xriid[50];
-   WINE_StringFromCLSID((LPCLSID)riid,xriid);
-   TRACE(shell,"(%p)->(\n\tIID:\t%s,%p)\n",this,xriid,ppvObj);
+{	char	xriid[50];
+	WINE_StringFromCLSID((LPCLSID)riid,xriid);
+	TRACE(shell,"(%p)->(\n\tIID:\t%s,%p)\n",this,xriid,ppvObj);
 
-  *ppvObj = NULL;
+	*ppvObj = NULL;
 
-  if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
-  { *ppvObj = this; 
-  }
-  else if(IsEqualIID(riid, &IID_IShellFolder))  /*IShellFolder*/
-  {    *ppvObj = (IShellFolder*)this;
-  }   
+	if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
+	{ *ppvObj = this; 
+	}
+	else if(IsEqualIID(riid, &IID_IShellFolder))  /*IShellFolder*/
+	{    *ppvObj = (IShellFolder*)this;
+	}   
 
-  if(*ppvObj)
-  { (*(LPSHELLFOLDER*)ppvObj)->lpvtbl->fnAddRef(this);  	
-    TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
-		return S_OK;
-  }
+	if(*ppvObj)
+ 	{ (*(LPSHELLFOLDER*)ppvObj)->lpvtbl->fnAddRef(this);  	
+	  TRACE(shell,"-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
+	  return S_OK;
+	}
 	TRACE(shell,"-- Interface: E_NOINTERFACE\n");
 	return E_NOINTERFACE;
 }   
@@ -223,36 +222,40 @@
 	DWORD *pdwAttributes)
 {	HRESULT        hr=E_OUTOFMEMORY;
 	LPITEMIDLIST   pidlFull=NULL, pidlTemp = NULL, pidlOld = NULL;
-	LPSTR          pszTemp, pszNext=NULL;
-	CHAR           szElement[MAX_PATH];
+	LPSTR          pszNext=NULL;
+	CHAR           szTemp[MAX_PATH],szElement[MAX_PATH];
 	BOOL32         bIsFile;
-	DWORD          dwChars;
        
 	TRACE(shell,"(%p)->(HWND=0x%08x,%p,%p=%s,%p,pidl=%p,%p)\n",
 		this,hwndOwner,pbcReserved,lpszDisplayName,
 		debugstr_w(lpszDisplayName),pchEaten,ppidl,pdwAttributes);
 
-	dwChars=lstrlen32W(lpszDisplayName) + 1;
-	pszTemp=(LPSTR)HeapAlloc(GetProcessHeap(),0,dwChars);
-
-	if(pszTemp)
 	{ hr = E_FAIL;
-	  WideCharToLocal32(pszTemp, lpszDisplayName, dwChars);
-	  if(*pszTemp)
-	  { if (strcmp(pszTemp,"Desktop")==0)
-	    { pidlFull = (LPITEMIDLIST)HeapAlloc(GetProcessHeap(),0,2);
-	      pidlFull->mkid.cb = 0;
+	  WideCharToLocal32(szTemp, lpszDisplayName, lstrlen32W(lpszDisplayName) + 1);
+	  if(szTemp[0])
+	  { if (strcmp(szTemp,"Desktop")==0)
+	    { pidlFull = _ILCreateDesktop();
 	    }
-	    else if (strcmp(pszTemp,"My Computer")==0)
+	    else if (strcmp(szTemp,"My Computer")==0)
 	    { pidlFull = _ILCreateMyComputer();
 	    }
 	    else
-	    { pidlFull = _ILCreateMyComputer();
-
+	    { if (!PathIsRoot32A(szTemp))
+	      { if (this->sMyPath && strlen (this->sMyPath))
+	        { if (strcmp(this->sMyPath,"My Computer"))
+	          { strcpy (szElement,this->sMyPath);
+	            PathAddBackslash32A (szElement);
+		    strcat (szElement, szTemp);
+		    strcpy (szTemp, szElement);
+	          }
+	        }
+	      }
+	      
 	      /* check if the lpszDisplayName is Folder or File*/
-	      bIsFile = ! (GetFileAttributes32A(pszTemp) & FILE_ATTRIBUTE_DIRECTORY);
-	      pszNext = GetNextElement(pszTemp, szElement, MAX_PATH);
+	      bIsFile = ! (GetFileAttributes32A(szTemp) & FILE_ATTRIBUTE_DIRECTORY);
+	      pszNext = GetNextElement(szTemp, szElement, MAX_PATH);
 
+	      pidlFull = _ILCreateMyComputer();
 	      pidlTemp = _ILCreateDrive(szElement);			
 	      pidlOld = pidlFull;
 	      pidlFull = ILCombine(pidlFull,pidlTemp);
@@ -275,7 +278,6 @@
 	    }
 	  }
 	}
-	HeapFree(GetProcessHeap(),0,pszTemp);
 	*ppidl = pidlFull;
 	return hr;
 }
@@ -358,19 +360,15 @@
 *  REFIID        riid,       //[in ] Initial storage interface 
 *  LPVOID*       ppvObject   //[out] Interface* returned
 */
-static HRESULT WINAPI IShellFolder_BindToStorage(
-  	LPSHELLFOLDER this,
-    LPCITEMIDLIST pidl, /*simple/complex pidl*/
-    LPBC pbcReserved, 
-    REFIID riid, 
-    LPVOID *ppvOut)
+static HRESULT WINAPI IShellFolder_BindToStorage(LPSHELLFOLDER this,
+	    LPCITEMIDLIST pidl,LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
 {	char xriid[50];
 	WINE_StringFromCLSID(riid,xriid);
 
 	FIXME(shell,"(%p)->(pidl=%p,%p,\n\tIID:%s,%p) stub\n",this,pidl,pbcReserved,xriid,ppvOut);
 
-  *ppvOut = NULL;
-  return E_NOTIMPL;
+	*ppvOut = NULL;
+	return E_NOTIMPL;
 }
 
 /**************************************************************************
@@ -463,8 +461,10 @@
 	*ppvOut = NULL;
 
 	pShellView = IShellView_Constructor(this, this->mpidl);
+
 	if(!pShellView)
 	  return E_OUTOFMEMORY;
+	  
 	hr = pShellView->lpvtbl->fnQueryInterface(pShellView, riid, ppvOut);
 	pShellView->lpvtbl->fnRelease(pShellView);
 	TRACE(shell,"-- (%p)->(interface=%p)\n",this, ppvOut);
@@ -617,54 +617,56 @@
 
 	szSpecial[0]=0x00; 
 	szDrive[0]=0x00;
+	szText[0]=0x00;
 
 	/* test if simple(relative) or complex(absolute) pidl */
 	pidlTemp = ILGetNext(pidl);
 	if (pidlTemp && pidlTemp->mkid.cb==0x00)
 	{ bSimplePidl = TRUE;
 	  TRACE(shell,"-- simple pidl\n");
+
 	}
+
 	if (_ILIsDesktop( pidl))
 	{ strcpy (szText,"Desktop");
-	}
+	}	
 	else
-	{ if (_ILIsMyComputer( pidl))
-	  { _ILGetItemText( pidl, szSpecial, MAX_PATH);
+	{ if (_ILIsMyComputer(pidl))
+	  { _ILGetItemText(pidl, szSpecial, MAX_PATH);
+	    pidl = ILGetNext(pidl);
 	  }
-	  if (_ILIsDrive( pidl))
-	  { pidlTemp = ILFindLastID(pidl);
-	    if (pidlTemp)
-	    { _ILGetItemText( pidlTemp, szTemp, MAX_PATH);
-	    }
-	    if ( dwFlags==SHGDN_NORMAL || dwFlags==SHGDN_INFOLDER)
+
+	  if (_ILIsDrive(pidl))
+	  { _ILGetDrive( pidl, szTemp, MAX_PATH);
+
+	    if ( dwFlags==SHGDN_NORMAL || dwFlags==SHGDN_INFOLDER)	/* like "A1-dos (C:)" */
 	    { GetVolumeInformation32A(szTemp,szDrive,MAX_PATH,&dwVolumeSerialNumber,&dwMaximumComponetLength,&dwFileSystemFlags,NULL,0);
-	      if (szTemp[2]=='\\')
-	      { szTemp[2]=0x00;
-	      }
+	      szTemp[2]=0x00;						/* overwrite '\' */
 	      strcat (szDrive," (");
 	      strcat (szDrive,szTemp);
 	      strcat (szDrive,")"); 
 	    }
-	    else
+	    else							/* like "C:\" */
 	    {  PathAddBackslash32A (szTemp);
 	       strcpy(szDrive,szTemp);
 	    }
 	  }
+
 		
 	  switch(dwFlags)
-	  { case SHGDN_NORMAL:
+	  { case SHGDN_NORMAL:				/* 0x0000 */
 	      _ILGetPidlPath( pidl, szText, MAX_PATH);
 	      break;
 
-	    case SHGDN_INFOLDER | SHGDN_FORPARSING: /*fall thru*/
-	    case SHGDN_INFOLDER:
+	    case SHGDN_INFOLDER | SHGDN_FORPARSING:	/* 0x8001 */
+	    case SHGDN_INFOLDER:			/* 0x0001 */
 	      pidlTemp = ILFindLastID(pidl);
 	      if (pidlTemp)
 	      { _ILGetItemText( pidlTemp, szText, MAX_PATH);
 	      }
 	      break;				
 
-	    case SHGDN_FORPARSING:
+	    case SHGDN_FORPARSING:			/* 0x8000 */
 	      if (bSimplePidl)
 	      { /* if the IShellFolder has parents, get the path from the
 	        parent and add the ItemName*/
@@ -681,9 +683,8 @@
 	        } 
 	        strcat(szText,szTemp);
 	      }
-	      else					
-	      { /* if the pidl is absolute, get everything from the pidl*/
-	        _ILGetPidlPath( pidl, szText, MAX_PATH);
+	      else	/* if the pidl is absolute, get everything from the pidl*/					
+	      {	_ILGetPidlPath( pidl, szText, MAX_PATH);
 	      }
 	      break;
 	    default:
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index 403c337..95a60b1 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -10,9 +10,9 @@
 #include "ole.h"
 #include "ole2.h"
 #include "debug.h"
-#include "compobj.h"
-#include "interfaces.h"
+#include "servprov.h"
 #include "shlobj.h"
+#include "objbase.h"
 #include "shell.h"
 #include "winerror.h"
 #include "winnls.h"
@@ -666,7 +666,7 @@
 	hr = IShellBrowser_QueryInterface(this->pShellBrowser, (REFIID)&IID_IServiceProvider, (LPVOID*)&pSP);
 	if(SUCCEEDED(hr))
 	{ /*get the IDockingWindowFrame pointer*/
-	  hr = pSP->lpvtbl->fnQueryService(pSP, (REFGUID)&SID_SShellBrowser, (REFIID)&IID_IDockingWindowFrame, (LPVOID*)&pFrame);
+	  hr = IServiceProvider_QueryService(pSP, (REFGUID)&SID_SShellBrowser, (REFIID)&IID_IDockingWindowFrame, (LPVOID*)&pFrame);
 	  if(SUCCEEDED(hr))
 	  { if(bAdd)
 	    { hr = S_OK;
@@ -706,7 +706,7 @@
 	    }
 	    pFrame->lpvtbl->fnRelease(pFrame);
 	  }
-	  pSP->lpvtbl->fnRelease(pSP);
+	  IServiceProvider_Release(pSP);
 	}
 	return bReturn;
 }
@@ -725,12 +725,12 @@
 	/*get the browser's IServiceProvider*/
 	hr = IShellBrowser_QueryInterface(this->pShellBrowser, (REFIID)&IID_IServiceProvider, (LPVOID*)&pSP);
 	if(hr==S_OK)
-	{ hr = pSP->lpvtbl->fnQueryService(pSP, (REFGUID)&SID_SShellBrowser, (REFIID)&IID_IDockingWindowFrame, (LPVOID*)&pFrame);
+	{ hr = IServiceProvider_QueryService(pSP, (REFGUID)&SID_SShellBrowser, (REFIID)&IID_IDockingWindowFrame, (LPVOID*)&pFrame);
    	  if(SUCCEEDED(hr))
 	  { bReturn = TRUE;
 	    pFrame->lpvtbl->fnRelease(pFrame);
 	  }
-	  pSP->lpvtbl->fnRelease(pSP);
+	  IServiceProvider_Release(pSP);
 	}
 	return bReturn;
 }
@@ -843,6 +843,11 @@
 {	LVITEM32A	lvItem;
 	UINT32	i;
 
+
+	if (this->aSelectedItems)
+	{ SHFree(this->aSelectedItems);
+	}
+
 	this->uSelected = ListView_GetSelectedCount(this->hWndList);
 	this->aSelectedItems = (LPITEMIDLIST*)SHAlloc(this->uSelected * sizeof(LPITEMIDLIST));
 
@@ -949,9 +954,6 @@
 	    if (pContextMenu)
 	      pContextMenu->lpvtbl->fnRelease(pContextMenu);
 	  }
-	  SHFree(this->aSelectedItems);
-	  this->aSelectedItems=NULL;
-	  this->uSelected=0;
 	}
 	else	/* background context menu */
 	{ hMenu = LoadMenuIndirect32A(&_Resource_Men_MENU_002_0_data);
@@ -1321,17 +1323,20 @@
 *  IShellView_Release
 */
 static ULONG WINAPI IShellView_Release(LPSHELLVIEW this)
-{ TRACE(shell,"(%p)->()\n",this);
-  if (!--(this->ref)) 
-  { TRACE(shell," destroying IShellView(%p)\n",this);
+{ 	TRACE(shell,"(%p)->()\n",this);
+	if (!--(this->ref)) 
+	{ TRACE(shell," destroying IShellView(%p)\n",this);
 
-    if(this->pSFParent)
-       this->pSFParent->lpvtbl->fnRelease(this->pSFParent);
+	  if(this->pSFParent)
+	    this->pSFParent->lpvtbl->fnRelease(this->pSFParent);
 
-    HeapFree(GetProcessHeap(),0,this);
-    return 0;
-  }
-  return this->ref;
+	  if (this->aSelectedItems)
+	    SHFree(this->aSelectedItems);
+
+	  HeapFree(GetProcessHeap(),0,this);
+	  return 0;
+	}
+	return this->ref;
 }
 /**************************************************************************
 *  ShellView_GetWindow
@@ -1516,14 +1521,12 @@
 
 	*ppvOut = NULL;
 	if(IsEqualIID(riid, &IID_IContextMenu))
-	{ pObj =(LPUNKNOWN)IContextMenu_Constructor(this->pSFParent,this->aSelectedItems,this->uSelected);	
+	{ ShellView_GetSelections(this);
+	  pObj =(LPUNKNOWN)IContextMenu_Constructor(this->pSFParent,this->aSelectedItems,this->uSelected);	
 	}
 	else if (IsEqualIID(riid, &IID_IDataObject))
 	{ ShellView_GetSelections(this);
 	  pObj =(LPUNKNOWN)IDataObject_Constructor(this->hWndParent, this->pSFParent,this->aSelectedItems,this->uSelected);
-	  SHFree(this->aSelectedItems);
-	  this->aSelectedItems=NULL;
-	  this->uSelected=0;
 	}
 
 	TRACE(shell,"-- (%p)->(interface=%p)\n",this, ppvOut);
diff --git a/dlls/winaspi/winaspi16.c b/dlls/winaspi/winaspi16.c
index a9eb055..0dc0cbc 100644
--- a/dlls/winaspi/winaspi16.c
+++ b/dlls/winaspi/winaspi16.c
@@ -490,8 +490,14 @@
 {
 #ifdef linux
 	FARPROC16 *p = (FARPROC16 *)CTX_SEG_OFF_TO_LIN(context, DS_reg(context), EDX_reg(context));
+	if ((CX_reg(context) == 4) || (CX_reg(context) == 5))
+	{
 	*p = DPMI_AllocInternalRMCB(ASPI_DOS_func);
 	TRACE(aspi, "allocated real mode proc %p\n", *p);
+	    AX_reg(context) = CX_reg(context);
+	}
+	else
+	SET_CFLAG(context);
 #else
        SET_CFLAG(context);
 #endif
diff --git a/documentation/bugreports b/documentation/bugreports
index 52c28bc..b20be06 100644
--- a/documentation/bugreports
+++ b/documentation/bugreports
@@ -1,4 +1,4 @@
-How to Report a Bug
+How To Report A Bug
 -------------------
 
 Some simple advice on making your bug report more useful (and thus more
@@ -6,21 +6,23 @@
 
 1) Post as much information as possible.  
 
-	This means we need more information than,
-	"MS Word crashes whenever I run it.  Do you know why?"  Include at 
-	least the following information:
+	This means we need more information than a simple
+	"MS Word crashes whenever I run it.  Do you know why?"
+	Include at least the following information:
 
 	- Version of Wine you're using (run 'wine -v')
 	- Operating system you're using, what distribution (if any), and what
-		version.
+		version
 	- Compiler and version (run 'gcc -v')
+	- Windows version, if installed
 	- Program you're trying to run, its version number, and a URL for 
-		where the program can be obtained (if available).
+		where the program can be obtained (if available)
 	- Command line you used to start wine
-	- Any other information you think may be relevant or helpful.
+	- Any other information you think may be relevant or helpful, such as
+		X server version in case of X problems, libc version etc.
 
-2) Re-run the program with the -debugmsg +relay option 
-   (i.e., 'wine -debugmsg +relay sol.exe').
+2) Re-run the program with the -debugmsg +relay,+snoop option 
+   (i.e., 'wine -debugmsg +relay,+snoop sol.exe').
 
 	If Wine crashes while running your program, it is important that we
 	have this information to have a chance at figuring out what is causing
@@ -32,7 +34,7 @@
 
 	tcsh and other csh-like shells:
 
-	    wine -debugmsg +relay [other_options] program_name |& tee filename.out
+	    wine -debugmsg +relay,+snoop [other_options] program_name |& tee filename.out
 	    tail -100 filename.out > report_file
 
 	bash and other sh-like shells:
diff --git a/documentation/fonts b/documentation/fonts
index 32ac06c..b3a6c2e 100644
--- a/documentation/fonts
+++ b/documentation/fonts
@@ -169,6 +169,5 @@
 
 The most likely cause is a broken fonts.dir file in one of your font
 directories. You need to rerun 'mkfontdir' to rebuild this file. Read
-its manpage for more information.
-
-
+its manpage for more information. If you can't run mkfontdir on this machine
+as you are not root, use "xset -fp xxx" to remove the broken font path.
diff --git a/documentation/wine.man b/documentation/wine.man
index 4ce56b7..f43f1cf 100644
--- a/documentation/wine.man
+++ b/documentation/wine.man
@@ -94,7 +94,7 @@
 .I -debug
 Enter the debugger before starting application
 .TP
-.I -debugmsg [xxx]#name[,[xxx1]#name1]
+.I -debugmsg [xxx]#name[,[xxx1]#name1][,<+|->relay=yyy1[:yyy2]]
 Turn debugging messages on or off.  
 .RS +7
 .PP
@@ -107,7 +107,10 @@
 If xxx is not specified, all debugging messages for the specified
 channel are turned on.  Each channel will print messages about a particular
 component of Wine.  # is required and can be either + or -.  Note that 
-there is not a space after the comma between names.
+there is not a space after the comma between names. yyy are either the
+name of a whole DLL or a single API entry by Name you either
+want to include or exclude from the relay listing. These names must be in
+the case as names used in the relaylisting. You can do the same for snoop.
 .PP
 For instance:
 .PP
@@ -117,6 +120,13 @@
 .I -debugmsg fixme-all,warn+cursor,+relay
 will turn off all FIXME messages, turn on cursor warning messages, and turn
 on all relay messages (API calls).
+.br 
+.I -debugmsg -relay=LeaveCriticalSection:EnterCriticalSection
+will turn on all relay messages except for LeaveCriticalSection and
+EnterCriticalSection.
+.br 
+.I -debugmsg +relay=ADVAPI32
+will only turn on relay messages into the ADVAPI32 code.
 .PP
 The full list of names is: all, accel, advapi, animate, aspi, atom, 
 bitblt, bitmap, caret, cd, cdaudio, class, clipboard, clipping, combo, 
@@ -234,6 +244,12 @@
 .B WINE_INI
 pointing to a configuration file, or use the -config option on the command 
 line.
+.SH ENVIRONMENT VARIABLES
+.B wine
+makes the environment variables of the shell from which 
+.B wine
+is started accesible to the windows/dos processes started. So use the
+appropriate syntax for your shell to enter environment variables you need. 
 .SH CONFIGURATION FILE FORMAT
 All entries are grouped in sections; a section begins with the line
 .br
diff --git a/files/async.c b/files/async.c
index 7f1c69f..c22da8e 100644
--- a/files/async.c
+++ b/files/async.c
@@ -18,6 +18,7 @@
 
 #include <assert.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/time.h>
@@ -29,7 +30,7 @@
 #ifdef HAVE_SYS_FILIO_H
 # include <sys/filio.h>
 #endif
-#ifdef __svr4__
+#ifdef HAVE_SYS_FILE_H
 # include <sys/file.h>
 #endif
 
diff --git a/files/file.c b/files/file.c
index dc17b99..fddb304 100644
--- a/files/file.c
+++ b/files/file.c
@@ -911,9 +911,9 @@
 
     if (mode & OF_CREATE)
     {
-        if ((hFileRet = CreateFile32A( name, access, sharing, NULL,
-                                       CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
-                                       -1 ))== INVALID_HANDLE_VALUE32)
+        if ((hFileRet = CreateFile32A( name, GENERIC_READ | GENERIC_WRITE,
+                                       sharing, NULL, CREATE_ALWAYS,
+                                       FILE_ATTRIBUTE_NORMAL, -1 ))== INVALID_HANDLE_VALUE32)
             goto error;
         goto success;
     }
@@ -1452,6 +1452,11 @@
 
     TRACE(file, "'%s'\n", path );
 
+    if (!*path)
+    {
+        ERR(file, "Empty path passed\n");
+        return FALSE;
+    }
     if (DOSFS_GetDevice( path ))
     {
         WARN(file, "cannot remove DOS device '%s'!\n", path);
@@ -1581,7 +1586,7 @@
     struct get_file_info_reply reply;
 
     if ((req.handle = HANDLE_GetServerHandle( PROCESS_Current(), hFile,
-                                              K32OBJ_FILE, 0 )) == -1)
+                                              K32OBJ_UNKNOWN, 0 )) == -1)
         return FILE_TYPE_UNKNOWN;
     CLIENT_SendRequest( REQ_GET_FILE_INFO, -1, 1, &req, sizeof(req) );
     if (CLIENT_WaitSimpleReply( &reply, sizeof(reply), NULL ))
diff --git a/graphics/d3dcommon.c b/graphics/d3dcommon.c
index 8fa6c8b..b71351a 100644
--- a/graphics/d3dcommon.c
+++ b/graphics/d3dcommon.c
@@ -121,6 +121,24 @@
   } else {
     /* All others state variables */
     switch (dwRenderStateType) {
+
+    case D3DRENDERSTATE_TEXTUREHANDLE: {
+      LPDIRECT3DTEXTURE2 tex = (LPDIRECT3DTEXTURE2) dwRenderState;
+      
+      if (tex == NULL) {
+	glBindTexture(GL_TEXTURE_2D, 0);
+	glDisable(GL_TEXTURE_2D);
+      } else {
+	TRACE(ddraw, "setting OpenGL texture handle : %d\n", tex->tex_name);
+	glEnable(GL_TEXTURE_2D);
+	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	glBindTexture(GL_TEXTURE_2D, tex->tex_name);
+      }
+    } break;
+
+      
     case D3DRENDERSTATE_ZENABLE:          /*  7 */
       if (dwRenderState)
 	glEnable(GL_DEPTH_TEST);
diff --git a/graphics/d3ddevices.c b/graphics/d3ddevices.c
index dcbdc0c..a53f6db 100644
--- a/graphics/d3ddevices.c
+++ b/graphics/d3ddevices.c
@@ -884,11 +884,12 @@
       glColor3f(((col >> 16) & 0xFF) / 255.0,
 		((col >>  8) & 0xFF) / 255.0,
 		((col >>  0) & 0xFF) / 255.0);
-      
+      glTexCoord2f(vx->u.tu, vx->v.tv);
       glVertex3f(vx->x.sx, vx->y.sy, vx->z.sz);
-      TRACE(ddraw, " TLV: %f %f %f (%02lx %02lx %02lx)\n",
+      TRACE(ddraw, " TLV: %f %f %f (%02lx %02lx %02lx) (%f %f)\n",
 	    vx->x.sx, vx->y.sy, vx->z.sz,
-	    ((col >> 16) & 0xFF), ((col >>  8) & 0xFF), ((col >>  0) & 0xFF));
+	    ((col >> 16) & 0xFF), ((col >>  8) & 0xFF), ((col >>  0) & 0xFF),
+	    vx->u.tu, vx->v.tv);
     } break;
       
     default:
diff --git a/graphics/d3dtexture.c b/graphics/d3dtexture.c
index f79ba15..14bc4c4 100644
--- a/graphics/d3dtexture.c
+++ b/graphics/d3dtexture.c
@@ -98,9 +98,9 @@
 {
   FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DDevice, lpHandle);
 
-  *lpHandle = (DWORD) this->surface;
+  *lpHandle = (DWORD) this;
   
-  return DD_OK;
+  return D3D_OK;
 }
 
 static HRESULT WINAPI IDirect3DTexture_Initialize(LPDIRECT3DTEXTURE this,
@@ -116,7 +116,7 @@
 {
   FIXME(ddraw, "(%p)->(): stub\n", this);
 
-  return DD_OK;
+  return D3D_OK;
 }
 
 /*** IDirect3DTexture2 methods ***/
@@ -124,11 +124,19 @@
 						  LPDIRECT3DDEVICE2 lpD3DDevice2,
 						  LPD3DTEXTUREHANDLE lpHandle)
 {
-  FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DDevice2, lpHandle);
+  TRACE(ddraw, "(%p)->(%p,%p)\n", this, lpD3DDevice2, lpHandle);
 
-  *lpHandle = (DWORD) this->surface; /* lpD3DDevice2->store_texture(this); */
+  /* For 32 bits OSes, handles = pointers */
+  *lpHandle = (DWORD) this;
   
-  return DD_OK;
+  /* Now, bind a new texture */
+  lpD3DDevice2->set_context(lpD3DDevice2);
+  this->D3Ddevice = (void *) lpD3DDevice2;
+  glGenTextures(1, &(this->tex_name));
+
+  TRACE(ddraw, "OpenGL texture handle is : %d\n", this->tex_name);
+  
+  return D3D_OK;
 }
 
 /* Common methods */
@@ -138,17 +146,74 @@
 {
   FIXME(ddraw, "(%p)->(%8ld,%8ld): stub\n", this, dwStart, dwCount);
 
-  return DD_OK;
+  return D3D_OK;
 }
 
 static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this,
 					     LPDIRECT3DTEXTURE2 lpD3DTexture2)
 {
-  FIXME(ddraw, "(%p)->(%p): stub\n", this, lpD3DTexture2);
+  DDSURFACEDESC	*src_d, *dst_d;
+  TRACE(ddraw, "(%p)->(%p)\n", this, lpD3DTexture2);
 
   /* Hack ? */
-  FIXME(ddraw, "Sthis %p / Sload %p\n", this->surface, lpD3DTexture2->surface);
+  TRACE(ddraw, "Copied to surface %p, surface %p\n", this->surface, lpD3DTexture2->surface);
   this->surface->s.surface_desc.ddsCaps.dwCaps &= ~DDSCAPS_ALLOCONLOAD;
+
+  /* Copy one surface on the other */
+  dst_d = &(this->surface->s.surface_desc);
+  src_d = &(lpD3DTexture2->surface->s.surface_desc);
+
+  if ((src_d->dwWidth != dst_d->dwWidth) || (src_d->dwHeight != dst_d->dwHeight)) {
+    /* Should also check for same pixel format, lPitch, ... */
+    ERR(ddraw, "Error in surface sizes\n");
+    return D3DERR_TEXTURE_LOAD_FAILED;
+  } else {
+    LPDIRECT3DDEVICE2 d3dd = (LPDIRECT3DDEVICE2) this->D3Ddevice;
+    /* I should put a macro for the calculus of bpp */
+    int bpp = (src_d->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8 ?
+	       1 /* 8 bit of palette index */:
+	       src_d->ddpfPixelFormat.x.dwRGBBitCount / 8 /* RGB bits for each colors */ );
+
+    /* Not sure if this is usefull ! */
+    memcpy(dst_d->y.lpSurface, src_d->y.lpSurface, src_d->dwWidth * src_d->dwHeight * bpp);
+
+    /* Now, load the texture */
+    d3dd->set_context(d3dd);
+    glBindTexture(GL_TEXTURE_2D, this->tex_name);
+
+    if (src_d->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) {
+      LPDIRECTDRAWPALETTE pal = this->surface->s.palette;
+      BYTE table[256][4];
+      int i;
+      
+      /* Get the surface's palette */
+      for (i = 0; i < 256; i++) {
+	table[i][0] = pal->palents[i].peRed;
+	table[i][1] = pal->palents[i].peGreen;
+	table[i][2] = pal->palents[i].peBlue;
+	table[i][3] = 0xFF;
+      }
+      
+      /* Use Paletted Texture Extension */
+      glColorTableEXT(GL_TEXTURE_2D,    /* target */
+		      GL_RGBA,          /* internal format */
+		      256,              /* table size */
+		      GL_RGBA,          /* table format */
+		      GL_UNSIGNED_BYTE, /* table type */
+		      table);           /* the color table */
+
+      glTexImage2D(GL_TEXTURE_2D,       /* target */
+		   0,                   /* level */
+		   GL_COLOR_INDEX8_EXT, /* internal format */
+		   src_d->dwWidth, src_d->dwHeight, /* width, height */
+		   0,                   /* border */
+		   GL_COLOR_INDEX,      /* texture format */
+		   GL_UNSIGNED_BYTE,    /* texture type */
+		   src_d->y.lpSurface); /* the texture */
+    } else {
+      ERR(ddraw, "Unhandled texture format\n");
+    }
+  }
   
   return DD_OK;
 }
diff --git a/graphics/ddraw.c b/graphics/ddraw.c
index e0a61b3..f297b9f 100644
--- a/graphics/ddraw.c
+++ b/graphics/ddraw.c
@@ -33,7 +33,6 @@
 #endif
 
 #include "winerror.h"
-#include "interfaces.h"
 #include "gdi.h"
 #include "heap.h"
 #include "ldt.h"
@@ -43,7 +42,6 @@
 #include "ddraw.h"
 #include "d3d.h"
 #include "debug.h"
-#include "compobj.h"
 #include "spy.h"
 #include "message.h"
 #include "x11drv.h"
@@ -426,7 +424,7 @@
 #ifdef HAVE_LIBXXSHM
     if (this->s.ddraw->e.xlib.xshm_active)
       TSXShmPutImage(display,
-		     this->s.ddraw->e.xlib.drawable,
+		     this->s.ddraw->d.drawable,
 		     DefaultGCOfScreen(screen),
 		     this->t.xlib.image,
 		     0, 0, 0, 0,
@@ -436,7 +434,7 @@
     else
 #endif
 	TSXPutImage(		display,
-				this->s.ddraw->e.xlib.drawable,
+				this->s.ddraw->d.drawable,
 				DefaultGCOfScreen(screen),
 				this->t.xlib.image,
 				0, 0, 0, 0,
@@ -444,7 +442,7 @@
 		  this->t.xlib.image->height);
   
 	if (this->s.palette && this->s.palette->cm)
-		TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
+		TSXSetWindowColormap(display,this->s.ddraw->d.drawable,this->s.palette->cm);
 	}
 
 	return DD_OK;
@@ -503,7 +501,7 @@
 #ifdef HAVE_LIBXXSHM
 	if (this->s.ddraw->e.xlib.xshm_active) {
 	  TSXShmPutImage(display,
-			 this->s.ddraw->e.xlib.drawable,
+			 this->s.ddraw->d.drawable,
 			 DefaultGCOfScreen(screen),
 			 flipto->t.xlib.image,
 			 0, 0, 0, 0,
@@ -513,7 +511,7 @@
 	} else
 #endif
 	TSXPutImage(display,
-				this->s.ddraw->e.xlib.drawable,
+				this->s.ddraw->d.drawable,
 				DefaultGCOfScreen(screen),
 				flipto->t.xlib.image,
 				0, 0, 0, 0,
@@ -521,7 +519,7 @@
 				flipto->t.xlib.image->height);
 	
 	if (flipto->s.palette && flipto->s.palette->cm) {
-	  TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,flipto->s.palette->cm);
+	  TSXSetWindowColormap(display,this->s.ddraw->d.drawable,flipto->s.palette->cm);
 	}
 	if (flipto!=this) {
 		XImage *tmp;
@@ -547,12 +545,17 @@
 	int i;
 	TRACE(ddraw,"(%p)->(%p)\n",this,pal);
 
+	if (pal == NULL) {
+          if( this->s.palette != NULL )
+            this->s.palette->lpvtbl->fnRelease( this->s.palette );
+	  this->s.palette = pal;
+
+	  return DD_OK;
+	}
+	
 	if( !(pal->cm) && (this->s.ddraw->d.depth<=8)) 
 	{
-		pal->cm = TSXCreateColormap(display,this->s.ddraw->e.xlib.drawable,DefaultVisualOfScreen(screen),AllocAll);
-
-		/* FIXME: this is not correct, when using -managed (XSetWindowColormap??) */
-		TSXInstallColormap(display,pal->cm);
+		pal->cm = TSXCreateColormap(display,this->s.ddraw->d.drawable,DefaultVisualOfScreen(screen),AllocAll);
 
 		for (i=0;i<256;i++) {
 			XColor xc;
@@ -587,7 +590,7 @@
                 pal->lpvtbl->fnAddRef( pal );
            }
           /* Perform the refresh */
-          TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
+          TSXSetWindowColormap(display,this->s.ddraw->d.drawable,this->s.palette->cm);
         }
 	return DD_OK;
 }
@@ -697,6 +700,7 @@
 	    if (dwFlags) {
 	      TRACE(ddraw,"\t(src=NULL):Unsupported flags: ");_dump_DDBLT(dwFlags);fprintf(stderr,"\n");
 	    }
+	    this->lpvtbl->fnUnlock(this,ddesc.y.lpSurface);
 	    return DD_OK;
 	}
 
@@ -768,24 +772,33 @@
 static HRESULT WINAPI IDirectDrawSurface3_BltFast(
 	LPDIRECTDRAWSURFACE3 this,DWORD dstx,DWORD dsty,LPDIRECTDRAWSURFACE3 src,LPRECT32 rsrc,DWORD trans
 ) {
-	int		i,bpp;
+	int		i,bpp,w,h;
 	DDSURFACEDESC	ddesc,sdesc;
 
-	if (TRACE_ON(ddraw)) {
-	    TRACE(ddraw,"(%p)->(%ld,%ld,%p,%p,%08lx)\n",
+	if (1  || TRACE_ON(ddraw)) {
+	    FIXME(ddraw,"(%p)->(%ld,%ld,%p,%p,%08lx)\n",
 		    this,dstx,dsty,src,rsrc,trans
 	    );
-	    TRACE(ddraw,"	trans:");_dump_DDBLTFAST(trans);fprintf(stderr,"\n");
-	    TRACE(ddraw,"	srcrect: %dx%d-%dx%d\n",rsrc->left,rsrc->top,rsrc->right,rsrc->bottom);
+	    FIXME(ddraw,"	trans:");_dump_DDBLTFAST(trans);fprintf(stderr,"\n");
+	    FIXME(ddraw,"	srcrect: %dx%d-%dx%d\n",rsrc->left,rsrc->top,rsrc->right,rsrc->bottom);
 	}
 	/* We need to lock the surfaces, or we won't get refreshes when done. */
 	src ->lpvtbl->fnLock(src, NULL,&sdesc,DDLOCK_READONLY, 0);
 	this->lpvtbl->fnLock(this,NULL,&ddesc,DDLOCK_WRITEONLY,0);
 	bpp = this->s.surface_desc.ddpfPixelFormat.x.dwRGBBitCount / 8;
-	for (i=0;i<rsrc->bottom-rsrc->top;i++) {
+	h=rsrc->bottom-rsrc->top;
+	if (h>ddesc.dwHeight-dsty) h=ddesc.dwHeight-dsty;
+	if (h>sdesc.dwHeight-rsrc->top) h=sdesc.dwHeight-rsrc->top;
+	if (h<0) h=0;
+	w=rsrc->right-rsrc->left;
+	if (w>ddesc.dwWidth-dstx) w=ddesc.dwWidth-dstx;
+	if (w>sdesc.dwWidth-rsrc->left) w=sdesc.dwWidth-rsrc->left;
+	if (w<0) w=0;
+
+	for (i=0;i<h;i++) {
 		memcpy(	ddesc.y.lpSurface+(dsty     +i)*ddesc.lPitch+dstx*bpp,
 			sdesc.y.lpSurface+(rsrc->top+i)*sdesc.lPitch+rsrc->left*bpp,
-			(rsrc->right-rsrc->left)*bpp
+			w*bpp
 		);
 	}
 	this->lpvtbl->fnUnlock(this,ddesc.y.lpSurface);
@@ -2247,7 +2260,8 @@
 
 	/* This will be overwritten in the case of Full Screen mode.
 	   Windowed games could work with that :-) */
-	this->e.xlib.drawable  = ((X11DRV_WND_DATA *) WIN_FindWndPtr(hwnd)->pDriverData)->window;
+	if (hwnd)
+	this->d.drawable  = ((X11DRV_WND_DATA *) WIN_FindWndPtr(hwnd)->pDriverData)->window;
 
 	return DD_OK;
 }
@@ -2414,10 +2428,10 @@
 	_common_IDirectDraw_SetDisplayMode(this);
 
 	this->e.xlib.paintable = 1;
-        this->e.xlib.drawable  = ((X11DRV_WND_DATA *) WIN_FindWndPtr(this->d.window)->pDriverData)->window;  
+        this->d.drawable  = ((X11DRV_WND_DATA *) WIN_FindWndPtr(this->d.window)->pDriverData)->window;  
         /* We don't have a context for this window. Host off the desktop */
-        if( !this->e.xlib.drawable )
-           this->e.xlib.drawable = ((X11DRV_WND_DATA *) WIN_GetDesktop()->pDriverData)->window;
+        if( !this->d.drawable )
+           this->d.drawable = ((X11DRV_WND_DATA *) WIN_GetDesktop()->pDriverData)->window;
 	return DD_OK;
 }
 
@@ -2495,7 +2509,7 @@
 }
 
 static HRESULT WINAPI common_IDirectDraw2_CreatePalette(
-	LPDIRECTDRAW2 this,DWORD x,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk
+	LPDIRECTDRAW2 this,DWORD dwFlags,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk
 ) {
 	*lpddpal = (LPDIRECTDRAWPALETTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawPalette));
 	if (*lpddpal == NULL) return E_OUTOFMEMORY;
@@ -2511,8 +2525,20 @@
 
         if (palent)
         {
-                /* Initialize the palette based on the passed palent struct */
-                FIXME(ddraw,"needs to handle palent (%p)\n",palent);
+ 	  int size = 0;
+	  
+	  if (dwFlags & DDPCAPS_1BIT)
+	    size = 2;
+	  else if (dwFlags & DDPCAPS_2BIT)
+	    size = 4;
+	  else if (dwFlags & DDPCAPS_4BIT)
+	    size = 16;
+	  else if (dwFlags & DDPCAPS_8BIT)
+	    size = 256;
+	  else
+	    ERR(ddraw, "unhandled palette format\n");
+	  
+	  memcpy((*lpddpal)->palents, palent, size * sizeof(PALETTEENTRY));
         }
 	return DD_OK;
 }
@@ -2529,11 +2555,13 @@
 }
 
 static HRESULT WINAPI Xlib_IDirectDraw2_CreatePalette(
-	LPDIRECTDRAW2 this,DWORD x,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk
+	LPDIRECTDRAW2 this,DWORD dwFlags,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk
 ) {
-	TRACE(ddraw,"(%p)->(%08lx,%p,%p,%p)\n",this,x,palent,lpddpal,lpunk);
+	TRACE(ddraw,"(%p)->(%08lx,%p,%p,%p)\n",this,dwFlags,palent,lpddpal,lpunk);
 	*lpddpal = (LPDIRECTDRAWPALETTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawPalette));
 
+	TRACE(ddraw, "Palette created : %p\n", *lpddpal);
+	
 	if (*lpddpal == NULL) 
 		return E_OUTOFMEMORY;
 
@@ -2544,8 +2572,22 @@
 	(*lpddpal)->ddraw = (LPDIRECTDRAW)this;
         this->lpvtbl->fnAddRef(this);
 
-	if (palent)
-		FIXME(ddraw,"needs to handle palent (%p)\n",palent);
+	if (palent) {
+	  int size = 0;
+
+	  if (dwFlags & DDPCAPS_1BIT)
+	    size = 2;
+	  else if (dwFlags & DDPCAPS_2BIT)
+	    size = 4;
+	  else if (dwFlags & DDPCAPS_4BIT)
+	    size = 16;
+	  else if (dwFlags & DDPCAPS_8BIT)
+	    size = 256;
+	  else
+	    ERR(ddraw, "unhandled palette format\n");
+	  
+	  memcpy((*lpddpal)->palents, palent, size * sizeof(PALETTEENTRY));
+	}
 
 	return DD_OK;
 }
@@ -3215,7 +3257,7 @@
 	*lplpDD = (LPDIRECTDRAW)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDraw));
 	(*lplpDD)->lpvtbl = &xlib_ddvt;
 	(*lplpDD)->ref = 1;
-	(*lplpDD)->e.xlib.drawable = 0; /* in SetDisplayMode */
+	(*lplpDD)->d.drawable = 0; /* in SetDisplayMode */
 
 	(*lplpDD)->d.depth = DefaultDepthOfScreen(screen);
 	(*lplpDD)->d.height = screenHeight;
diff --git a/graphics/vga.c b/graphics/vga.c
index 3f9480e..490074d 100644
--- a/graphics/vga.c
+++ b/graphics/vga.c
@@ -10,8 +10,6 @@
 #include "winbase.h"
 #include "miscemu.h"
 #include "vga.h"
-#include "compobj.h"
-#include "interfaces.h"
 #include "ddraw.h"
 #include "debug.h"
 
@@ -49,6 +47,7 @@
         }
         vga_refresh=0;
         InitializeCriticalSection(&vga_crit);
+        MakeCriticalSectionGlobal(&vga_crit);
         /* poll every 20ms (50fps should provide adequate responsiveness) */
         poll_timer = CreateSystemTimer( 20, VGA_Poll );
     }
diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index c0b7fda..a36a5c0 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -1806,6 +1806,7 @@
   HeapFree(SystemHeap, 0, buffer);
 
   InitializeCriticalSection( &crtsc_fonts_X11 );
+  MakeCriticalSectionGlobal( &crtsc_fonts_X11 );
 
   /* fontList initialization is over, allocate X font cache */
 
@@ -1935,7 +1936,7 @@
        d = (h = pfi->df.dfPoints) + plf->lfHeight;
    else d = h = 0;	
 
-   if( d && plf->lfHeight )
+   if( d && h && plf->lfHeight )
    {
        UINT16	height = ( plf->lfHeight > 0 ) ? plf->lfHeight
 			 : ((-plf->lfHeight * pfi->df.dfPixHeight) / h);
@@ -1959,7 +1960,8 @@
            pfm->height = pfi->df.dfPixHeight;
            penalty += (d > 0)? d * 0x8 : -d * 0x10;
        }
-   } else pfm->height = pfi->df.dfPixHeight;
+   }
+   else pfm->height = pfi->df.dfPixHeight;
 
    if((pfm->flags & FO_MATCH_PAF) &&
       (plf->lfPitchAndFamily & FF_FAMILY) != (pfi->df.dfPitchAndFamily & FF_FAMILY) )
diff --git a/if1632/compobj.spec b/if1632/compobj.spec
index 3f245a4..072204a 100644
--- a/if1632/compobj.spec
+++ b/if1632/compobj.spec
@@ -18,7 +18,7 @@
 15 pascal CoDisconnectObject(ptr long) CoDisconnectObject
 16 stub CORELEASEMARSHALDATA
 17 pascal16 COFREEUNUSEDLIBRARIES() CoFreeUnusedLibraries
-18 pascal16 IsEqualGUID(ptr ptr) IsEqualGUID
+18 pascal16 IsEqualGUID(ptr ptr) IsEqualGUID16
 19 pascal StringFromCLSID(ptr ptr) StringFromCLSID16
 20 pascal CLSIDFromString(str ptr) CLSIDFromString16
 21 stub ISVALIDPTRIN
@@ -208,12 +208,12 @@
 207 stub ADDAPPCOMPATFLAG
 
 # WINE internal relays (for Win16 interfaces)
-500 cdecl IMalloc16_QueryInterface(ptr ptr ptr) IMalloc16_QueryInterface
-501 cdecl IMalloc16_AddRef(ptr) IMalloc16_AddRef
-502 cdecl IMalloc16_Release(ptr) IMalloc16_Release
-503 cdecl IMalloc16_Alloc(ptr long) IMalloc16_Alloc
-504 cdecl IMalloc16_Realloc(ptr segptr long) IMalloc16_Realloc
-505 cdecl IMalloc16_Free(ptr segptr) IMalloc16_Free
-506 cdecl IMalloc16_GetSize(ptr segptr) IMalloc16_GetSize
-507 cdecl IMalloc16_DidAlloc(ptr segptr) IMalloc16_DidAlloc
-508 cdecl IMalloc16_HeapMinimize(ptr) IMalloc16_HeapMinimize
+500 cdecl IMalloc16_QueryInterface(ptr ptr ptr) IMalloc16_fnQueryInterface
+501 cdecl IMalloc16_AddRef(ptr) IMalloc16_fnAddRef
+502 cdecl IMalloc16_Release(ptr) IMalloc16_fnRelease
+503 cdecl IMalloc16_Alloc(ptr long) IMalloc16_fnAlloc
+504 cdecl IMalloc16_Realloc(ptr segptr long) IMalloc16_fnRealloc
+505 cdecl IMalloc16_Free(ptr segptr) IMalloc16_fnFree
+506 cdecl IMalloc16_GetSize(ptr segptr) IMalloc16_fnGetSize
+507 cdecl IMalloc16_DidAlloc(ptr segptr) IMalloc16_fnDidAlloc
+508 cdecl IMalloc16_HeapMinimize(ptr) IMalloc16_fnHeapMinimize
diff --git a/if1632/relay.c b/if1632/relay.c
index 35da94b..cc7c2e3 100644
--- a/if1632/relay.c
+++ b/if1632/relay.c
@@ -14,6 +14,7 @@
 #include "task.h"
 #include "debugstr.h"
 #include "debug.h"
+#include "main.h"
 
 
 /***********************************************************************
@@ -22,7 +23,6 @@
 BOOL32 RELAY_Init(void)
 {
     WORD codesel;
-    extern BOOL32 THUNK_Init(void);
 
       /* Allocate the code selector for CallTo16 routines */
 
@@ -74,8 +74,6 @@
     char *args16;
     const char *funstr;
     int i;
-    /* from relay32/relay386.c */
-    extern int RELAY_ShowDebugmsgRelay(const char *);
 
     if (!TRACE_ON(relay)) return;
 
@@ -196,8 +194,6 @@
     STACK16FRAME *frame;
     WORD ordinal;
     const char *funstr;
-    /* from relay32/relay386.c */
-    extern int RELAY_ShowDebugmsgRelay(const char *);
 
     if (!TRACE_ON(relay)) return;
     frame = CURRENT_STACK16;
diff --git a/include/acconfig.h b/include/acconfig.h
index 35c7acf..19e6bba 100644
--- a/include/acconfig.h
+++ b/include/acconfig.h
@@ -63,6 +63,9 @@
 /* Define if we can use curses (if no ncurses) for full-screen access */
 #undef HAVE_LIBCURSES
 
+/* Define if ncurses have the new resizeterm function */
+#undef HAVE_RESIZETERM
+
 /* Define if we can a compatible xterm program */
 #undef XTERM_PROGRAM
 
diff --git a/include/commctrl.h b/include/commctrl.h
index 00e0953..49c888b 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -93,6 +93,7 @@
 
 #define I_IMAGECALLBACK          (-1)
 #define I_INDENTCALLBACK         (-1)
+#define I_CHILDRENCALLBACK       (-1)
 
 
 /* owner drawn types */
@@ -117,6 +118,66 @@
 #define SNDMSG WINELIB_NAME_AW(SendMessage)
 
 
+
+/* Custom Draw messages */
+
+#define CDRF_DODEFAULT          0x0
+#define CDRF_NEWFONT            0x00000002
+#define CDRF_SKIPDEFAULT        0x00000004
+#define CDRF_NOTIFYPOSTPAINT    0x00000010
+#define CDRF_NOTIFYITEMDRAW     0x00000020
+#define CDRF_NOTIFYSUBITEMDRAW  0x00000020
+#define CDRF_NOTIFYPOSTERASE    0x00000040
+/* #define CDRF_NOTIFYITEMERASE    0x00000080          obsolete ? */
+
+
+/* drawstage flags */
+
+#define CDDS_PREPAINT           1
+#define CDDS_POSTPAINT          2
+#define CDDS_PREERASE           3
+#define CDDS_POSTERASE          4
+
+#define CDDS_ITEM				0x00010000
+#define CDDS_ITEMPREPAINT		(CDDS_ITEM | CDDS_PREPAINT)
+#define CDDS_ITEMPOSTPAINT		(CDDS_ITEM | CDDS_POSTPAINT)
+#define CDDS_ITEMPREERASE		(CDDS_ITEM | CDDS_PREERASE)
+#define CDDS_ITEMPOSTERASE		(CDDS_ITEM | CDDS_POSTERASE)
+#define CDDS_SUBITEM            0x00020000
+
+/* itemState flags */
+
+#define CDIS_SELECTED	 	0x0001
+#define CDIS_GRAYED			0x0002
+#define CDIS_DISABLED		0x0004
+#define CDIS_CHECKED		0x0008
+#define CDIS_FOCUS			0x0010
+#define CDIS_DEFAULT		0x0020
+#define CDIS_HOT			0x0040
+#define CDIS_MARKED         0x0080
+#define CDIS_INDETERMINATE  0x0100
+
+
+typedef struct tagNMCUSTOMDRAWINFO
+{
+	NMHDR	hdr;
+	DWORD	dwDrawStage;
+	HDC32	hdc;
+	RECT32	rc;
+	DWORD	dwItemSpec; 
+	UINT32	uItemState;
+	LPARAM	lItemlParam;
+} NMCUSTOMDRAW, *LPNMCUSTOMDRAW;
+
+typedef struct tagNMTTCUSTOMDRAW
+{
+	NMCUSTOMDRAW nmcd;
+	UINT32		 uDrawFlags;
+} NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW;
+
+
+
+
 /* StatusWindow */
 
 #define STATUSCLASSNAME16	"msctls_statusbar"
@@ -395,6 +456,28 @@
 #define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)
 
 
+/* Flat Scrollbar control */
+
+#define FLATSB_CLASS16        "flatsb_class"
+#define FLATSB_CLASS32A       "flatsb_class32"
+#define FLATSB_CLASS32W       L"flatsb_class32"
+#define FLATSB_CLASS          WINELIB_NAME_AW(FLATSB_CLASS)
+
+BOOL32  WINAPI FlatSB_EnableScrollBar(HWND32, INT32, UINT32);
+BOOL32  WINAPI FlatSB_ShowScrollBar(HWND32, INT32, BOOL32);
+BOOL32  WINAPI FlatSB_GetScrollRange(HWND32, INT32, LPINT32, LPINT32);
+BOOL32  WINAPI FlatSB_GetScrollInfo(HWND32, INT32, LPSCROLLINFO);
+INT32   WINAPI FlatSB_GetScrollPos(HWND32, INT32);
+BOOL32  WINAPI FlatSB_GetScrollProp(HWND32, INT32, LPINT32);
+INT32   WINAPI FlatSB_SetScrollPos(HWND32, INT32, INT32, BOOL32);
+INT32   WINAPI FlatSB_SetScrollInfo(HWND32, INT32, LPSCROLLINFO, BOOL32);
+INT32   WINAPI FlatSB_SetScrollRange(HWND32, INT32, INT32, INT32, BOOL32);
+BOOL32  WINAPI FlatSB_SetScrollProp(HWND32, UINT32, INT32, BOOL32);
+BOOL32  WINAPI InitializeFlatSB(HWND32);
+HRESULT WINAPI UninitializeFlatSB(HWND32);
+
+
+
 /* Header control */
 
 #define WC_HEADER16		"SysHeader" 
@@ -2307,9 +2390,15 @@
 #define TCM_GETIMAGELIST        (TCM_FIRST + 2)
 #define TCM_SETIMAGELIST        (TCM_FIRST + 3)
 #define TCM_GETITEMCOUNT	(TCM_FIRST + 4)
-#define TCM_GETITEM             (TCM_FIRST + 5)
-#define TCM_SETITEM             (TCM_FIRST + 6)
-#define	TCM_INSERTITEM		(TCM_FIRST + 7)
+#define TCM_GETITEM				WINELIB_NAME_AW(TCM_GETITEM)
+#define TCM_GETITEM32A			(TCM_FIRST + 5)
+#define TCM_GETITEM32W			(TCM_FIRST + 60)
+#define TCM_SETITEM32A			(TCM_FIRST + 6)
+#define TCM_SETITEM32W			(TCM_FIRST + 61)
+#define TCM_SETITEM				WINELIB_NAME_AW(TCM_SETITEM)
+#define TCM_INSERTITEM32A		(TCM_FIRST + 7)
+#define TCM_INSERTITEM32W		(TCM_FIRST + 62)
+#define TCM_INSERTITEM			WINELIB_NAME_AW(TCM_INSERTITEM)
 #define TCM_DELETEITEM          (TCM_FIRST + 8)
 #define TCM_DELETEALLITEMS      (TCM_FIRST + 9)
 #define TCM_GETITEMRECT         (TCM_FIRST + 10)
@@ -2328,27 +2417,51 @@
 #define TCM_SETCURFOCUS         (TCM_FIRST + 48)
 #define TCM_SETMINTTABWIDTH     (TCM_FIRST + 49)
 #define TCM_DESELECTALL         (TCM_FIRST + 50)
+#define TCM_HIGHLIGHTITEM		(TCM_FIRST + 51)
+#define TCM_SETEXTENDEDSTYLE	(TCM_FIRST + 52)
+#define TCM_GETEXTENDEDSTYLE	(TCM_FIRST + 53)
+#define TCM_SETUNICODEFORMAT	CCM_SETUNICODEFORMAT
+#define TCM_GETUNICODEFORMAT	CCM_GETUNICODEFORMAT
+
 
 #define TCIF_TEXT		0x0001
 #define TCIF_IMAGE		0x0002
 #define TCIF_RTLREADING		0x0004
 #define TCIF_PARAM		0x0008
+#define TCIF_STATE		0x0010
 
-typedef struct tagTCITEM {
+
+typedef struct tagTCITEM32A {
     UINT32 mask;
-    UINT32 lpReserved1;
-    UINT32 lpReserved2;
+    UINT32 dwState;
+    UINT32 dwStateMask;
     LPSTR  pszText;
     int    cchTextMax;
     int    iImage;
     LPARAM lParam;
-} TCITEM, *LPTCITEM;
+} TCITEM32A, *LPTCITEM32A;
+
+typedef struct tagTCITEM32W
+{
+    UINT32 mask;
+    DWORD  dwState;
+    DWORD  dwStateMask;
+    LPWSTR pszText;
+    INT32  cchTextMax;
+    INT32  iImage;
+    LPARAM lParam;
+} TCITEM32W, *LPTCITEM32W;
+
+#define TCITEM   WINELIB_NAME_AW(TCITEM)
+#define LPTCITEM WINELIB_NAME_AW(LPTCITEM)
+
 
 #define TCN_FIRST               (0U-550U)
 #define TCN_LAST                (0U-580U)
 #define TCN_KEYDOWN             (TCN_FIRST - 0)
 #define TCN_SELCHANGE		(TCN_FIRST - 1)
 #define TCN_SELCHANGING         (TCN_FIRST - 2)
+#define TCN_GETOBJECT      (TCN_FIRST - 3)
 
 
 /* ComboBoxEx control */
@@ -2522,6 +2635,36 @@
 #define DATETIMEPICK_CLASS32W	L"SysDateTimePick32"
 #define DATETIMEPICK_CLASS	WINELIB_NAME_AW(DATETIMEPICK_CLASS)
 
+#define DTM_FIRST        0x1000
+
+#define DTM_GETSYSTEMTIME	(DTM_FIRST+1)
+#define DTM_SETSYSTEMTIME	(DTM_FIRST+2)
+#define DTM_GETRANGE		(DTM_FIRST+3)
+#define DTM_SETRANGE		(DTM_FIRST+4)
+#define DTM_SETFORMAT32A	(DTM_FIRST+5)
+#define DTM_SETFORMAT32W	(DTM_FIRST + 50)
+#define DTM_SETFORMAT		WINELIB_NAME_AW(DTM_SETFORMAT)
+#define DTM_SETMCCOLOR		(DTM_FIRST+6)
+#define DTM_GETMCCOLOR		(DTM_FIRST+7)
+
+#define DTM_GETMONTHCAL		(DTM_FIRST+8)
+
+#define DTM_SETMCFONT		(DTM_FIRST+9)
+#define DTM_GETMCFONT		(DTM_FIRST+10)
+
+
+
+
+#define GDT_ERROR    -1
+#define GDT_VALID    0
+#define GDT_NONE     1
+
+#define GDTR_MIN     0x0001
+#define GDTR_MAX     0x0002
+
+
+
+
 
 /**************************************************************************
  *  UNDOCUMENTED functions
@@ -2624,6 +2767,13 @@
 /*
  * Property sheet support (callback procs)
  */
+
+
+#define WC_PROPSHEET32A      "SysPager"
+#define WC_PROPSHEET32W      L"SysPager"
+#define WC_PROPSHEET         WINELIB_NAME_AW(WC_PROPSHEET)
+
+
 struct _PROPSHEETPAGE32A;  /** need to forward declare those structs **/
 struct _PROPSHEETPAGE32W;
 struct _PSP;
diff --git a/include/compobj.h b/include/compobj.h
index ecd57eb..e1b372b 100644
--- a/include/compobj.h
+++ b/include/compobj.h
@@ -1,43 +1,8 @@
-#ifndef COMPOBJ_H
-#define COMPOBJ_H
+#ifndef __WINE_COMPOBJ_H
+#define __WINE_COMPOBJ_H
 
-#include "ole.h"
+/* "compobj.h" is obsolete, you should include "objbase.h" instead */
 
-struct tagGUID
-{
-    DWORD Data1;
-    WORD  Data2;
-    WORD  Data3;
-    BYTE  Data4[8];
-};
+#include "objbase.h"
 
-typedef struct tagGUID	GUID,*LPGUID,*REFGUID;
-typedef struct tagGUID	CLSID,*LPCLSID,*REFCLSID;
-typedef struct tagGUID	IID,*REFIID,*LPIID;
-
-OLESTATUS WINAPI StringFromCLSID16(const CLSID *id, LPOLESTR16*);
-OLESTATUS WINAPI StringFromCLSID32(const CLSID *id, LPOLESTR32*);
-#define StringFromCLSID WINELIB_NAME(StringFromCLSID)
-OLESTATUS WINAPI CLSIDFromString16(LPCOLESTR16, CLSID *);
-OLESTATUS WINAPI CLSIDFromString32(LPCOLESTR32, CLSID *);
-#define CLSIDFromString WINELIB_NAME(CLSIDFromString)
-
-OLESTATUS WINAPI WINE_StringFromCLSID(const CLSID *id, LPSTR);
-
-INT32 WINAPI StringFromGUID2(REFGUID id, LPOLESTR32 str, INT32 cmax);
-
-
-#ifdef INITGUID
-#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
-        const GUID name =\
-	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
-#else
-#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
-    extern const GUID name
-#endif
-
-#define DEFINE_OLEGUID(name, l, w1, w2) \
-	DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
-
-#define DEFINE_SHLGUID(name, l, w1, w2) DEFINE_OLEGUID(name,l,w1,w2)
-#endif
+#endif /* __WINE_COMPOBJ_H */
diff --git a/include/config.h.in b/include/config.h.in
index 75367e9..9f12234 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -69,6 +69,9 @@
 /* Define if the struct statfs is defined by <sys/mount.h> */
 #undef STATFS_DEFINED_BY_SYS_MOUNT
 
+/* Define if ncurses have the new resizeterm function */
+#undef HAVE_RESIZETERM
+
 /* Define if IPX should use netipx/ipx.h from libc */
 #undef HAVE_IPX_GNU
 
@@ -153,6 +156,9 @@
 /* Define if you have the <sys/cdio.h> header file.  */
 #undef HAVE_SYS_CDIO_H
 
+/* Define if you have the <sys/file.h> header file.  */
+#undef HAVE_SYS_FILE_H
+
 /* Define if you have the <sys/filio.h> header file.  */
 #undef HAVE_SYS_FILIO_H
 
diff --git a/include/d3d.h b/include/d3d.h
index d572933..34e0cac 100644
--- a/include/d3d.h
+++ b/include/d3d.h
@@ -41,6 +41,65 @@
 typedef struct IDirect3DExecuteBuffer IDirect3DExecuteBuffer, *LPDIRECT3DEXECUTEBUFFER;
 
 /* ********************************************************************
+   Error Codes
+   ******************************************************************** */
+#define D3D_OK                          DD_OK
+#define D3DERR_BADMAJORVERSION          MAKE_DDHRESULT(700)
+#define D3DERR_BADMINORVERSION          MAKE_DDHRESULT(701)
+#define D3DERR_INVALID_DEVICE           MAKE_DDHRESULT(705)
+#define D3DERR_INITFAILED               MAKE_DDHRESULT(706)
+#define D3DERR_DEVICEAGGREGATED         MAKE_DDHRESULT(707)
+#define D3DERR_EXECUTE_CREATE_FAILED    MAKE_DDHRESULT(710)
+#define D3DERR_EXECUTE_DESTROY_FAILED   MAKE_DDHRESULT(711)
+#define D3DERR_EXECUTE_LOCK_FAILED      MAKE_DDHRESULT(712)
+#define D3DERR_EXECUTE_UNLOCK_FAILED    MAKE_DDHRESULT(713)
+#define D3DERR_EXECUTE_LOCKED           MAKE_DDHRESULT(714)
+#define D3DERR_EXECUTE_NOT_LOCKED       MAKE_DDHRESULT(715)
+#define D3DERR_EXECUTE_FAILED           MAKE_DDHRESULT(716)
+#define D3DERR_EXECUTE_CLIPPED_FAILED   MAKE_DDHRESULT(717)
+#define D3DERR_TEXTURE_NO_SUPPORT       MAKE_DDHRESULT(720)
+#define D3DERR_TEXTURE_CREATE_FAILED    MAKE_DDHRESULT(721)
+#define D3DERR_TEXTURE_DESTROY_FAILED   MAKE_DDHRESULT(722)
+#define D3DERR_TEXTURE_LOCK_FAILED      MAKE_DDHRESULT(723)
+#define D3DERR_TEXTURE_UNLOCK_FAILED    MAKE_DDHRESULT(724)
+#define D3DERR_TEXTURE_LOAD_FAILED      MAKE_DDHRESULT(725)
+#define D3DERR_TEXTURE_SWAP_FAILED      MAKE_DDHRESULT(726)
+#define D3DERR_TEXTURE_LOCKED           MAKE_DDHRESULT(727)
+#define D3DERR_TEXTURE_NOT_LOCKED       MAKE_DDHRESULT(728)
+#define D3DERR_TEXTURE_GETSURF_FAILED   MAKE_DDHRESULT(729)
+#define D3DERR_MATRIX_CREATE_FAILED     MAKE_DDHRESULT(730)
+#define D3DERR_MATRIX_DESTROY_FAILED    MAKE_DDHRESULT(731)
+#define D3DERR_MATRIX_SETDATA_FAILED    MAKE_DDHRESULT(732)
+#define D3DERR_MATRIX_GETDATA_FAILED    MAKE_DDHRESULT(733)
+#define D3DERR_SETVIEWPORTDATA_FAILED   MAKE_DDHRESULT(734)
+#define D3DERR_INVALIDCURRENTVIEWPORT   MAKE_DDHRESULT(735)
+#define D3DERR_INVALIDPRIMITIVETYPE     MAKE_DDHRESULT(736)
+#define D3DERR_INVALIDVERTEXTYPE        MAKE_DDHRESULT(737)
+#define D3DERR_TEXTURE_BADSIZE          MAKE_DDHRESULT(738)
+#define D3DERR_INVALIDRAMPTEXTURE       MAKE_DDHRESULT(739)
+#define D3DERR_MATERIAL_CREATE_FAILED   MAKE_DDHRESULT(740)
+#define D3DERR_MATERIAL_DESTROY_FAILED  MAKE_DDHRESULT(741)
+#define D3DERR_MATERIAL_SETDATA_FAILED  MAKE_DDHRESULT(742)
+#define D3DERR_MATERIAL_GETDATA_FAILED  MAKE_DDHRESULT(743)
+#define D3DERR_INVALIDPALETTE           MAKE_DDHRESULT(744)
+#define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745)
+#define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY  MAKE_DDHRESULT(746)
+#define D3DERR_SURFACENOTINVIDMEM       MAKE_DDHRESULT(747)
+#define D3DERR_LIGHT_SET_FAILED         MAKE_DDHRESULT(750)
+#define D3DERR_LIGHTHASVIEWPORT         MAKE_DDHRESULT(751)
+#define D3DERR_LIGHTNOTINTHISVIEWPORT   MAKE_DDHRESULT(752)
+#define D3DERR_SCENE_IN_SCENE           MAKE_DDHRESULT(760)
+#define D3DERR_SCENE_NOT_IN_SCENE       MAKE_DDHRESULT(761)
+#define D3DERR_SCENE_BEGIN_FAILED       MAKE_DDHRESULT(762)
+#define D3DERR_SCENE_END_FAILED         MAKE_DDHRESULT(763)
+#define D3DERR_INBEGIN                  MAKE_DDHRESULT(770)
+#define D3DERR_NOTINBEGIN               MAKE_DDHRESULT(771)
+#define D3DERR_NOVIEWPORTS              MAKE_DDHRESULT(772)
+#define D3DERR_VIEWPORTDATANOTSET       MAKE_DDHRESULT(773)
+#define D3DERR_VIEWPORTHASNODEVICE      MAKE_DDHRESULT(774)
+#define D3DERR_NOCURRENTVIEWPORT        MAKE_DDHRESULT(775)
+
+/* ********************************************************************
    Enums
    ******************************************************************** */
 #define D3DNEXT_NEXT 0x01l
@@ -1202,7 +1261,12 @@
 struct IDirect3DTexture2 {
   LPDIRECT3DTEXTURE2_VTABLE  lpvtbl;
   DWORD                      ref;
-  
+
+  void *D3Ddevice; /* I put (void *) to use the same pointer for both
+		      Direct3D and Direct3D2 */
+#ifdef HAVE_MESAGL
+  GLuint tex_name;
+#endif  
   LPDIRECTDRAWSURFACE3       surface;
 };
 
diff --git a/include/ddraw.h b/include/ddraw.h
index 4b5e917..fdb74dc 100644
--- a/include/ddraw.h
+++ b/include/ddraw.h
@@ -1,6 +1,8 @@
 #ifndef __WINE_DDRAW_H
 #define __WINE_DDRAW_H
 
+#include "wine/obj_base.h"
+
 #include "config.h"
 
 #ifndef X_DISPLAY_MISSING
@@ -14,7 +16,6 @@
 #define	DIRECTDRAW_VERSION	0x0500
 #endif /* DIRECTDRAW_VERSION */
 
-
 DEFINE_GUID( CLSID_DirectDraw,		0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );
 DEFINE_GUID( CLSID_DirectDrawClipper,	0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );
 DEFINE_GUID( IID_IDirectDraw,		0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
@@ -900,6 +901,7 @@
        We need it also in DGA mode to make some games (for example Monkey Island III work) */
     ATOM		winclass;
     HWND32		window;
+    Window		drawable;
     PAINTSTRUCT32	ps;
 };
 
@@ -910,7 +912,6 @@
 };
 
 struct _xlib_directdrawdata {
-    Window		drawable;
     int			paintable;
 
 #ifdef HAVE_LIBXXSHM
diff --git a/include/debug.h b/include/debug.h
index f5e6447..8d0ea7a 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -101,57 +101,58 @@
 #define dbch_profile 93
 #define dbch_progress 94
 #define dbch_prop 95
-#define dbch_psapi 96
-#define dbch_psdrv 97
-#define dbch_ras 98
-#define dbch_rebar 99
-#define dbch_reg 100
-#define dbch_region 101
-#define dbch_relay 102
-#define dbch_resource 103
-#define dbch_scroll 104
-#define dbch_security 105
-#define dbch_segment 106
-#define dbch_selector 107
-#define dbch_sem 108
-#define dbch_sendmsg 109
-#define dbch_server 110
-#define dbch_shell 111
-#define dbch_shm 112
-#define dbch_snoop 113
-#define dbch_sound 114
-#define dbch_static 115
-#define dbch_statusbar 116
-#define dbch_stress 117
-#define dbch_string 118
-#define dbch_syscolor 119
-#define dbch_system 120
-#define dbch_tab 121
-#define dbch_task 122
-#define dbch_text 123
-#define dbch_thread 124
-#define dbch_thunk 125
-#define dbch_timer 126
-#define dbch_toolbar 127
-#define dbch_toolhelp 128
-#define dbch_tooltips 129
-#define dbch_trackbar 130
-#define dbch_treeview 131
-#define dbch_tweak 132
-#define dbch_uitools 133
-#define dbch_updown 134
-#define dbch_ver 135
-#define dbch_virtual 136
-#define dbch_vxd 137
-#define dbch_wave 138
-#define dbch_win 139
-#define dbch_win16drv 140
-#define dbch_win32 141
-#define dbch_wing 142
-#define dbch_winsock 143
-#define dbch_wnet 144
-#define dbch_x11 145
-#define dbch_x11drv 146
+#define dbch_propsheet 96
+#define dbch_psapi 97
+#define dbch_psdrv 98
+#define dbch_ras 99
+#define dbch_rebar 100
+#define dbch_reg 101
+#define dbch_region 102
+#define dbch_relay 103
+#define dbch_resource 104
+#define dbch_scroll 105
+#define dbch_security 106
+#define dbch_segment 107
+#define dbch_selector 108
+#define dbch_sem 109
+#define dbch_sendmsg 110
+#define dbch_server 111
+#define dbch_shell 112
+#define dbch_shm 113
+#define dbch_snoop 114
+#define dbch_sound 115
+#define dbch_static 116
+#define dbch_statusbar 117
+#define dbch_stress 118
+#define dbch_string 119
+#define dbch_syscolor 120
+#define dbch_system 121
+#define dbch_tab 122
+#define dbch_task 123
+#define dbch_text 124
+#define dbch_thread 125
+#define dbch_thunk 126
+#define dbch_timer 127
+#define dbch_toolbar 128
+#define dbch_toolhelp 129
+#define dbch_tooltips 130
+#define dbch_trackbar 131
+#define dbch_treeview 132
+#define dbch_tweak 133
+#define dbch_uitools 134
+#define dbch_updown 135
+#define dbch_ver 136
+#define dbch_virtual 137
+#define dbch_vxd 138
+#define dbch_wave 139
+#define dbch_win 140
+#define dbch_win16drv 141
+#define dbch_win32 142
+#define dbch_wing 143
+#define dbch_winsock 144
+#define dbch_wnet 145
+#define dbch_x11 146
+#define dbch_x11drv 147
 /* Definitions for classes identifiers */
 #define dbcl_fixme 0
 #define dbcl_err 1
diff --git a/include/debugdefs.h b/include/debugdefs.h
index ea469b5..cd1a472 100644
--- a/include/debugdefs.h
+++ b/include/debugdefs.h
@@ -4,7 +4,7 @@
 #include "debugtools.h"
 #endif
 
-#define DEBUG_CHANNEL_COUNT 147
+#define DEBUG_CHANNEL_COUNT 148
 #ifdef DEBUG_RUNTIME
 short debug_msg_enabled[][DEBUG_CLASS_COUNT] = {
 {1, 1, 0, 0},
@@ -154,6 +154,7 @@
 {1, 1, 0, 0},
 {1, 1, 0, 0},
 {1, 1, 0, 0},
+{1, 1, 0, 0},
 };
 const char* debug_ch_name[] = {
 "accel",
@@ -252,6 +253,7 @@
 "profile",
 "progress",
 "prop",
+"propsheet",
 "psapi",
 "psdrv",
 "ras",
diff --git a/include/dinput.h b/include/dinput.h
index 03978e2..0bf86c3 100644
--- a/include/dinput.h
+++ b/include/dinput.h
@@ -1,6 +1,8 @@
 #ifndef _WINE_DINPUT_H
 #define _WINE_DINPUT_H
 
+#include "unknwn.h"
+
 #define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn)
 #define STDMETHOD_(ret,xfn) ret (CALLBACK *fn##xfn)
 #define PURE
diff --git a/include/dosexe.h b/include/dosexe.h
index 4f5c16b..530cdd7 100644
--- a/include/dosexe.h
+++ b/include/dosexe.h
@@ -51,5 +51,7 @@
 extern HINSTANCE16 MZ_CreateProcess( LPCSTR name, LPCSTR cmdline, LPCSTR env, BOOL32 inherit,
                                      LPSTARTUPINFO32A startup, LPPROCESS_INFORMATION info );
 extern int DOSVM_Enter( PCONTEXT context );
+extern void DOSVM_SetTimer( unsigned ticks );
+extern unsigned DOSVM_GetTimer( void );
 
 #endif /* __WINE_DOSEXE_H */
diff --git a/include/dplay.h b/include/dplay.h
index fd9552e..d6d5506 100644
--- a/include/dplay.h
+++ b/include/dplay.h
@@ -2,6 +2,8 @@
 #ifndef __WINE_DPLAY_H
 #define __WINE_DPLAY_H
 
+#include "unknwn.h"
+
 #pragma pack(1)
 
 /* Return Values for Direct Play */
diff --git a/include/dsound.h b/include/dsound.h
index 2b2bcca..e944fab 100644
--- a/include/dsound.h
+++ b/include/dsound.h
@@ -3,7 +3,6 @@
 
 #include "windows.h"
 #include "winbase.h"
-#include "compobj.h"
 #include "mmsystem.h"
 #include "d3d.h"			/*FIXME: Need to break out d3dtypes.h */
 
diff --git a/include/flatsb.h b/include/flatsb.h
new file mode 100644
index 0000000..2103ada
--- /dev/null
+++ b/include/flatsb.h
@@ -0,0 +1,20 @@
+/*
+ * Date and time picker class extra info
+ *
+ * Copyright 1998 Eric Kohl
+ */
+
+#ifndef __WINE_FLATSB_H
+#define __WINE_FLATSB_H
+
+typedef struct tagFLATSB_INFO
+{
+    DWORD dwDummy;  /* just to keep the compiler happy ;-) */
+
+} FLATSB_INFO, *LPFLATSB_INFO;
+
+
+extern VOID FLATSB_Register (VOID);
+extern VOID FLATSB_Unregister (VOID);
+
+#endif  /* __WINE_FLATSB_H */
diff --git a/include/interfaces.h b/include/interfaces.h
index 26f28d5..a7621f6 100644
--- a/include/interfaces.h
+++ b/include/interfaces.h
@@ -48,7 +48,6 @@
 #include "objbase.h"
 
 #define THIS LPCLASSFACTORY this
-typedef struct IClassFactory *LPCLASSFACTORY,IClassFactory;
 typedef struct {
 	STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
 	STDMETHOD_(ULONG,AddRef) (THIS) PURE;
@@ -57,14 +56,9 @@
 	STDMETHOD(LockServer) (THIS_ BOOL32) PURE;
 } *LPCLASSFACTORY_VTABLE,IClassFactory_VTable;
 
-struct IClassFactory {
-	LPCLASSFACTORY_VTABLE	lpvtbl;
-	DWORD			ref;
-};
 #undef THIS
 
 #define THIS LPMALLOC32 this
-typedef struct IMalloc32 *LPMALLOC32,IMalloc32;
 typedef struct {
 	STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
 	STDMETHOD_(ULONG,AddRef) (THIS) PURE;
@@ -78,14 +72,9 @@
 	STDMETHOD_(LPVOID,HeapMinimize) ( THIS );
 } *LPMALLOC32_VTABLE,IMalloc32_VTable;
 
-struct IMalloc32 {
-	LPMALLOC32_VTABLE	lpvtbl;
-	DWORD			ref;
-};
 #undef THIS
 
 #define THIS LPMALLOC16 this
-typedef struct IMalloc16 *LPMALLOC16,IMalloc16;
 typedef struct {
 	STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
 	STDMETHOD_(ULONG,AddRef) (THIS) PURE;
@@ -99,14 +88,6 @@
 	STDMETHOD_(LPVOID,HeapMinimize) ( THIS );
 } *LPMALLOC16_VTABLE,IMalloc16_VTable;
 
-struct IMalloc16 {
-	LPMALLOC16_VTABLE	lpvtbl;
-	DWORD			ref;
-	/* Gmm, I think one is not enough, we should probably manage a list of
-	 * heaps
-	 */
-	HGLOBAL16		heap;
-};
 #undef THIS
 
 /* private prototypes for the constructors */
diff --git a/include/main.h b/include/main.h
index dc0762a..8e4af75 100644
--- a/include/main.h
+++ b/include/main.h
@@ -12,6 +12,9 @@
 extern int MAIN_GetLanguageID(char*lang, char*country, char*charset, char*dialect);
 
 extern BOOL32 RELAY_Init(void);
+extern int RELAY_ShowDebugmsgRelay(const char *func);
 extern void* CALL32_Init(void);
 
+extern BOOL32 THUNK_Init(void);
+
 #endif  /* __WINE_MAIN_H */
diff --git a/include/miscemu.h b/include/miscemu.h
index 9b2598b..558f841 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -11,7 +11,10 @@
 #include "winnt.h"
 #include "ldt.h"
 
-  /* msdos/dosmem.c */
+/* msdos/dosconf.c */
+extern int DOSCONF_ReadConfig(void);
+
+/* msdos/dosmem.c */
 extern HANDLE16 DOSMEM_BiosSeg;
 extern DWORD DOSMEM_CollateTable;
 
diff --git a/include/msdos.h b/include/msdos.h
index dccb072..ca68cf2 100644
--- a/include/msdos.h
+++ b/include/msdos.h
@@ -196,4 +196,25 @@
 void do_mscdex( CONTEXT *context );
 void do_mscdex_dd (CONTEXT * context, int dorealmode);
 
+#define DOSCONF_MEM_HIGH        0x0001
+#define DOSCONF_MEM_UMB         0x0002
+#define DOSCONF_NUMLOCK         0x0004
+#define DOSCONF_KEYB_CONV       0x0008
+
+typedef struct {
+        char lastdrive;
+        int brk_flag;
+        int files;
+        int stacks_nr;
+        int stacks_sz;
+        int buf;
+        int buf2;
+        int fcbs;
+        int flags;
+        char *shell;
+        char *country;
+} DOSCONF;
+
+extern DOSCONF DOSCONF_config;
+
 #endif /* __WINE_MSDOS_H */
diff --git a/include/multimedia.h b/include/multimedia.h
index 4d97843..11ac6a4 100644
--- a/include/multimedia.h
+++ b/include/multimedia.h
@@ -58,8 +58,8 @@
 extern UINT16 		MCI_NextDevID(UINT16 wDevID);
 extern BOOL32 		MCI_DevIDValid(UINT16 wDevID);
 
-extern int			MCI_MapMsg16To32A(WORD uDevType, WORD wMsg, DWORD* lParam);
-extern int			MCI_UnMapMsg16To32A(WORD uDevTyp, WORD wMsg, DWORD lParam);
+extern int		MCI_MapMsg16To32A(WORD uDevType, WORD wMsg, DWORD* lParam);
+extern int		MCI_UnMapMsg16To32A(WORD uDevTyp, WORD wMsg, DWORD lParam);
 
 typedef LONG		(*MCIPROC16)(DWORD, HDRVR16,  WORD, DWORD, DWORD);
 typedef LONG		(*MCIPROC32)(DWORD, HDRVR16, DWORD, DWORD, DWORD);
@@ -69,7 +69,9 @@
 extern DWORD		MCI_WriteString(LPSTR lpDstStr, DWORD dstSize, LPCSTR lpSrcStr);
 extern const char* MCI_CommandToString(UINT16 wMsg);
 
-extern DWORD		MCI_SendCommandAsync32(UINT32 wDevID, UINT32 wMsg, DWORD dwParam1, DWORD dwParam2);
+
+extern DWORD MCI_SendCommand32(UINT32 wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2);
+extern DWORD MCI_SendCommandAsync32(UINT32 wDevID, UINT32 wMsg, DWORD dwParam1, DWORD dwParam2);
 
 LONG MCIWAVE_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
 			  DWORD dwParam1, DWORD dwParam2);
diff --git a/include/objbase.h b/include/objbase.h
index f7c5697..38a540c 100644
--- a/include/objbase.h
+++ b/include/objbase.h
@@ -2,467 +2,115 @@
 #define __WINE_OBJBASE_H
 
 
-/*
- * The goal of the following set of definitions is to provide a way to use the same 
- * header file definitions to provide both a C interface and a C++ object oriented 
- * interface to COM interfaces. The type of interface is selected automatically 
- * depending on the language but it is always possible to get the C interface in C++ 
- * by defining CINTERFACE.
- *
- * It is based on the following assumptions:
- *  - all COM interfaces derive from IUnknown, this should not be a problem.
- *  - the header file only defines the interface, the actual fields are defined 
- *    separately in the C file implementing the interface.
- *  - no COM method returns void. This seems to be the case but otherwise we could support this 
- *    case by having one more set of macros.
- *
- * The natural approach to this problem would be to make sure we get a C++ class and 
- * virtual methods in C++ and a structure with a table of pointer to functions in C.
- * Unfortunately the layout of the virtual table is compiler specific, the layout of 
- * g++ virtual tables is not the same as that of an egcs virtual table which is not the 
- * same as that generated by Visual C+. There are workarounds to make the virtual tables 
- * compatible via padding but unfortunately the one which is imposed to the WINE emulator
- * by the Windows binaries, i.e. the Visual C++ one, is the most compact of all.
- *
- * So the solution I finally adopted does not use virtual tables. Instead I use inline 
- * non virtual methods that dereference the method pointer themselves and perform the call.
- *
- * Let's take Direct3D as an example:
- *
- *    #define ICOM_INTERFACE IDirect3D
- *    ICOM_BEGIN(IDirect3D,IUnknown)
- *        ICOM_METHOD1(HRESULT,Initialize,    REFIID,);
- *        ICOM_METHOD2(HRESULT,EnumDevices,   LPD3DENUMDEVICESCALLBACK,, LPVOID,);
- *        ICOM_METHOD2(HRESULT,CreateLight,   LPDIRECT3DLIGHT*,, IUnknown*,);
- *        ICOM_METHOD2(HRESULT,CreateMaterial,LPDIRECT3DMATERIAL*,, IUnknown*,);
- *        ICOM_METHOD2(HRESULT,CreateViewport,LPDIRECT3DVIEWPORT*,, IUnknown*,);
- *        ICOM_METHOD2(HRESULT,FindDevice,    LPD3DFINDDEVICESEARCH,, LPD3DFINDDEVICERESULT,);
- *    ICOM_END(IDirect3D)
- *    #undef ICOM_INTERFACE
- *
- *    #if !defined(__cplusplus) || defined(CINTERFACE)
- *    // *** IUnknown methods *** //
- *    #define IDirect3D_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
- *    #define IDirect3D_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
- *    #define IDirect3D_Release(p)            ICOM_ICALL (IUnknown,Release,p)
- *    // *** IDirect3D methods *** //
- *    #define IDirect3D_Initialize(p,a)       ICOM_CALL1(Initialize,p,a)
- *    #define IDirect3D_EnumDevices(p,a,b)    ICOM_CALL2(EnumDevice,p,a,b)
- *    #define IDirect3D_CreateLight(p,a,b)    ICOM_CALL2(CreateLight,p,a,b)
- *    #define IDirect3D_CreateMaterial(p,a,b) ICOM_CALL2(CreateMaterial,p,a,b)
- *    #define IDirect3D_CreateViewport(p,a,b) ICOM_CALL2(CreateViewport,p,a,b)
- *    #define IDirect3D_FindDevice(p,a,b)     ICOM_CALL2(FindDevice,p,a,b)
- *    #endif
- *
- * Comments:
- *  - The ICOM_INTERFACE is used in the ICOM_METHOD macros for the 'this' pointer and to cast 
- *    pointers. Defining this macro here saves us the trouble of having to repeat the interface 
- *    name everywhere. Note haowever that because of the way macros work a macro like ICOM_METHOD1 
- *    cannot use 'ICOM_INTERFACE##_VTABLE' because this would give 'ICOM_INTERFACE_VTABLE' and not 
- *    'IDirect3D_VTABLE'.
- *  - ICOM_BEGIN and ICOM_END are responsible for generating whatever structure is appropriate for 
- *    representing the interface in the current language. In C this is a couple of structs in C++ 
- *    it's a class. The first parameter is the interface name and the second one is the interface 
- *    we inherit from. The reason why you have to repeat the interface name is because that's the 
- *    only way these macro can successfully output "IDirect3D_VTABLE'. Trying to use ICOM_INTERFACE 
- *    would, as in ICOM_METHOD, only yield 'ICOM_INTERFACE_VTABLE'.
- *  - With the way ICOM_BEGIN works you don't have to repeat the definitions of the methods of the 
- *    parent interface. They are automatically inherited both in C and in C++.
- *  - In C++ the ICOM_METHOD macros generate a function prototype and a call to a function pointer 
- *    method. This means using once 't1 p1, t2 p2, ...' and once 'p1, p2' without the types. The 
- *    only way I found to handle this is to have one ICOM_METHOD macro per number of parameters and 
- *    to have it take only the type information (with const if necessary) as parameters.
- *    The 'undef ICOM_INTERFACE' is here to remind you that using ICOM_INTERFACE in the following 
- *    macros will not work. This time it's because the ICOM_CALL macro expansion is done only once 
- *    the 'IDirect3D_Xxx' macro is expanded. And by that time ICOM_INTERFACE will be long gone 
- *    anyway.
- *  - You may have noticed the double commas after each parameter type. This allows you to put the 
- *    name of that parameter which I think is good for documentation. It is not required and since 
- *    I did not know what to put there for this example (I could only find doc about IDirect3D2), 
- *    I left them blank.
- *  - Finally the set of 'IDirect3D_Xxx' macros is a standard set of macros defined to ease access 
- *    to the interface methods in C. Unfortunately I don't see any way to avoid having to duplicate 
- *    the inherited method definitions there. We must use ICOM_ICALL to invoke inherited methods, 
- *    because in C we have to cast the virtual table pointer, and we should use the ICOM_CALL 
- *    method in the other cases. This time I could have used a trick to use only one macro whatever 
- *    the number of parameters but I prefered to have it work the same way as above.
- *  - You probably have noticed that we don't define the fields we need to actually implement this 
- *    interface: reference count, pointer to other resources and miscellaneous fields. That's 
- *    because it's not needed, and the user will anyway only manipulate pointers to this structure
- *    so he does not need to know its real size. Of course on the implementation side we have the 
- *    real definition of the interface structure and they should match what the macros yield in 
- *    each language (or conversely).
- *
- *
- * In C this gives:
- *    typedef struct IDirect3D_VTABLE IDirect3D_VTABLE;
- *    struct IDirect3D {
- *        IDirect3D_VTABLE* lpvtbl;
- *    };
- *    struct IDirect3D_VTABLE {
- *        IUnknown_VTABLE bvt;
- *        HRESULT (*fnInitialize)(IDirect3D* me, REFIID a);
- *        HRESULT (*fnEnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b);
- *        HRESULT (*fnCreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b);
- *        HRESULT (*fnCreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b);
- *        HRESULT (*fnCreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b);
- *        HRESULT (*fnFindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b);
- *    }; 
- *
- *    #if !defined(__cplusplus) || defined(CINTERFACE)
- *    // *** IUnknown methods *** //
- *    #define IDirect3D_QueryInterface(p,a,b) ((IUnknown_VTABLE*)(p)->lpvtbl)->fnQueryInterface((IUnknown*)p,a,b)
- *    #define IDirect3D_AddRef(p)             ((IUnknown_VTABLE*)(p)->lpvtbl)->fnAddRef((IUnknown*)p)
- *    #define IDirect3D_Release(p)            ((IUnknown_VTABLE*)(p)->lpvtbl)->fnRelease((IUnknown*)p)
- *    // *** IDirect3D methods *** //
- *    #define IDirect3D_Initialize(p,a)       (p)->lpvtbl->fnInitialize(p,a)
- *    #define IDirect3D_EnumDevices(p,a,b)    (p)->lpvtbl->fnEnumDevice(p,a,b)
- *    #define IDirect3D_CreateLight(p,a,b)    (p)->lpvtbl->fnCreateLight(p,a,b)
- *    #define IDirect3D_CreateMaterial(p,a,b) (p)->lpvtbl->fnCreateMaterial(p,a,b)
- *    #define IDirect3D_CreateViewport(p,a,b) (p)->lpvtbl->fnCreateViewport(p,a,b)
- *    #define IDirect3D_FindDevice(p,a,b)     (p)->lpvtbl->fnFindDevice(p,a,b)
- *    #endif
- *
- * Comments:
- *  - IDirect3D only contains a pointer to the IDirect3D virtual/jump table. This is the only thing 
- *    the user needs to know to use the interface. Of course the structure we will define to 
- *    implement this interface will have more fields but the first one will match this pointer.
- *  - The code generated by ICOM_BEGIN goes up to the bvt field in the IDirect3D virtual table. 
- *    This bvt field is what saves us from having to duplicate the inherited method definitions.
- *    It's a shame that C (gcc) will not allow unnamed structs. If this was possible we could 
- *    seamlessly inherit and use the parent's interface function pointers.
- *  - What follows is just a bunch of function pointer definitions generated by the ICOM_METHOD 
- *    macros. The implementation will fill this jump table with appropriate values in a static 
- *    variable and initialize the lpvtbl field to point to this variable.
- *  - The IDirect3D_Xxx macros then just derefence the lpvtbl pointer and use the function pointer 
- *    corresponding to the macro name. This emulates the behavior of a virtual table and should be 
- *    about as fast. In the case of inherited methods we have some additional casting to do to 
- *    because the inherited methods are defined in the bvt field or maybe further imbricated. Since 
- *    the effect of the bvt field is that we inherit the parent virtual table fields this cast is 
- *    relatively inocuous. A similar cast must be performed on the interface pointer before the 
- *    invoked method will accept it. Despite all these casts there is little chance that you call a 
- *    method on the wrong type of interface because the function names still have to match. But this 
- *    is the only thing that will make the compilation fail.
- *
- *
- * And in C++ (with gcc's g++):
- *
- *    typedef struct IDirect3D: public IUnknown {
- *        private: HRESULT (*fnInitialize)(IDirect3D* me, REFIID a);
- *        public: inline HRESULT Initialize(REFIID a) { return ((IDirect3D*)t.lpvtbl)->fnInitialize(this,a); };
- *        private: HRESULT (*fnEnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b);
- *        public: inline HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK a, LPVOID b)
- *            { return ((IDirect3D*)t.lpvtbl)->fnEnumDevices(this,a,b); };
- *        private: HRESULT (*fnCreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b);
- *        public: inline HRESULT CreateLight(LPDIRECT3DLIGHT* a, IUnknown* b)
- *            { return ((IDirect3D*)t.lpvtbl)->fnCreateLight(this,a,b); };
- *        private: HRESULT (*fnCreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b);
- *        public: inline HRESULT CreateMaterial(LPDIRECT3DMATERIAL* a, IUnknown* b)
- *            { return ((IDirect3D*)t.lpvtbl)->fnCreateMaterial(this,a,b); };
- *        private: HRESULT (*fnCreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b);
- *        public: inline HRESULT CreateViewport(LPDIRECT3DVIEWPORT* a, IUnknown* b)
- *            { return ((IDirect3D*)t.lpvtbl)->fnCreateViewport(this,a,b); };
- *        private:  HRESULT (*fnFindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b);
- *        public: inline HRESULT FindDevice(LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b)
- *            { return ((IDirect3D*)t.lpvtbl)->fnFindDevice(this,a,b); };
- *    }; 
- *
- * Comments:
- *  - In C++ IDirect3D does double duty as both the virtual/jump table and as the interface 
- *    definition. The reason for this is to avoid having to duplicate the mehod definitions: once 
- *    to have the function pointers in the jump table and once to have the methods in the interface 
- *    class. Here one macro can generate both. This means though that the first pointer, t.lpvtbl 
- *    defined in IUnknown,  must be interpreted as the jump table pointer if we interpret the 
- *    structure as the the interface class, and as the function pointer to the QueryInterface 
- *    method, t.fnQueryInterface, if we interpret the structure as the jump table. Fortunately this 
- *    gymnastic is entirely taken care of in the header of IUnknown.
- *  - Of course in C++ we use inheritance so that we don't have to duplicate the method definitions. 
- *  - Since IDirect3D does double duty, each ICOM_METHOD macro defines both a function pointer and 
- *    a non-vritual inline method which dereferences it and calls it. This way this method behaves 
- *    just like a virtual method but does not create a true C++ virtual table which would break the 
- *    structure layout. If you look at the implementation of these methods you'll notice that they 
- *    would not work for void functions. We have to return something and fortunately this seems to 
- *    be what all the COM methods do (otherwise we would need another set of macros).
- *  - Note how the ICOM_METHOD generates both function prototypes mixing types and formal parameter 
- *    names and the method invocation using only the formal parameter name. This is the reason why 
- *    we need different macros to handle different numbers of parameters.
- *  - Finally there is no IDirect3D_Xxx macro. These are not needed in C++ unless the CINTERFACE 
- *    macro is defined in which case we would not be here.
- *
- *
- * Implementing a COM interface.
- *
- * This continues the above example.I assume the implementation is in C but it would probably 
- * be similar in C++.
- *
- *    typedef struct _IDirect3D {
- *        void* lpvtbl;
- *        // ...
- *
- *    } _IDirect3D;
- *
- *    static ICOM_VTABLE(IDirect3D) d3dvt;
- *
- *    // implement the IDirect3D methods here
- *
- *    int IDirect3D_fnQueryInterface(LPUNKNOWN me)
- *    {
- *        ICOM_THIS(IDirect3D,me);
- *        // ...
- *    }
- *
- *    // ...
- *
- *    static ICOM_VTABLE(IDirect3D) d3dvt = {
- *        {
- *            IDirect3D_fnQueryInterface,
- *            IUnknown_fnAdd,
- *            IUnknown_fnAdd2
- *        },
- *        IDirect3D_fnInitialize,
- *        IDirect3D_fnSetWidth
- *    };
- *
- * Comments:
- *  - We first define what the interface really contains. This is th e_IDirect3D structure. The 
- *    first field must of course be the virtual table pointer. Everything else is free.
- *  - Then we predeclare our static virtual table variable, we will need its address in some 
- *    methods to initialize the virtual table pointer of the returned interface objects.
- *  - Then we implement the interface methods. To match what has been declared in the header file 
- *    they must take a pointer to a IDirect3D structure so we must cast it to an _IDirect3D so that 
- *    we can manipulate the fields. This is performed by the ICOM_THIS macro.
- *  - Finally we initialize the virtual table. The inherited methods must be in curly brackets to 
- *    match the parent interface's virtual table definition.
+#include "wine/obj_base.h"
+
+/* the following depend only on obj_base.h */
+#include "wine/obj_misc.h"
+#include "wine/obj_channel.h"
+#include "wine/obj_clientserver.h"
+#include "wine/obj_marshal.h"
+#include "wine/obj_storage.h"
+
+/* the following depend on obj_storage.h */
+#include "wine/obj_moniker.h"
+#include "wine/obj_propertystorage.h"
+
+/* the following depend on obj_moniker.h */
+#include "wine/obj_dataobject.h"
+
+/* FIXME: the following should be moved to one of the wine/obj_XXX.h headers */
+
+/*****************************************************************************
+ * CoXXX API
+ */
+/* FIXME: more CoXXX functions are missing */
+DWORD WINAPI CoBuildVersion(void);
+
+typedef enum tagCOINIT
+{
+    COINIT_APARTMENTTHREADED  = 0x2, /* Apartment model */
+    COINIT_MULTITHREADED      = 0x0, /* OLE calls objects on any thread */
+    COINIT_DISABLE_OLE1DDE    = 0x4, /* Don't use DDE for Ole1 support */
+    COINIT_SPEED_OVER_MEMORY  = 0x8  /* Trade memory for speed */
+} COINIT;
+
+HRESULT WINAPI CoInitialize16(LPVOID lpReserved);
+HRESULT WINAPI CoInitialize32(LPVOID lpReserved);
+#define CoInitialize WINELIB_NAME(CoInitialize)
+
+HRESULT WINAPI CoInitializeEx32(LPVOID lpReserved, DWORD dwCoInit);
+#define CoInitializeEx WINELIB_NAME(CoInitializeEx)
+
+void WINAPI CoUninitialize(void);
+
+
+HRESULT WINAPI CoCreateGuid(GUID *pguid);
+
+/* class registration flags; passed to CoRegisterClassObject */
+typedef enum tagREGCLS
+{
+    REGCLS_SINGLEUSE = 0,
+    REGCLS_MULTIPLEUSE = 1,
+    REGCLS_MULTI_SEPARATE = 2,
+    REGCLS_SUSPENDED = 4
+} REGCLS;
+
+HRESULT WINAPI CoRegisterClassObject16(REFCLSID rclsid, LPUNKNOWN pUnk, DWORD dwClsContext, DWORD flags, LPDWORD lpdwRegister);
+HRESULT WINAPI CoRegisterClassObject32(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);
+#define CoRegisterClassObject WINELIB_NAME(CoRegisterClassObject)
+
+HRESULT WINAPI CoRevokeClassObject(DWORD dwRegister);
+HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext,LPVOID pvReserved, const REFIID iid, LPVOID *ppv);
+
+
+HRESULT WINAPI CoCreateInstance(REFCLSID rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,REFIID iid,LPVOID *ppv);
+void WINAPI CoFreeLibrary(HINSTANCE32 hLibrary);
+void WINAPI CoFreeAllLibraries(void);
+void WINAPI CoFreeUnusedLibraries(void);
+HRESULT WINAPI CoFileTimeNow(FILETIME *lpFileTime);
+LPVOID WINAPI CoTaskMemAlloc(ULONG size);
+void WINAPI CoTaskMemFree(LPVOID ptr);
+HINSTANCE32 WINAPI CoLoadLibrary(LPOLESTR16 lpszLibName, BOOL32 bAutoFree);
+
+HRESULT WINAPI CoLockObjectExternal16(LPUNKNOWN pUnk,BOOL16 fLock,BOOL16 fLastUnlockReleases);
+HRESULT WINAPI CoLockObjectExternal32(LPUNKNOWN pUnk,BOOL32 fLock,BOOL32 fLastUnlockReleases);
+#define CoLockObjectExternal WINELIB_NAME(CoLockObjectExternal)
+
+
+/* internal Wine stuff */
+
+
+/*****************************************************************************
+ * IClassFactory interface
  */
 
+typedef struct _IClassFactory {
+    /* IUnknown fields */
+    ICOM_VTABLE(IClassFactory)* lpvtbl;
+    DWORD                       ref;
+} _IClassFactory;
 
-#define ICOM_VTABLE(iface)       iface##_VTABLE
+HRESULT WINE_StringFromCLSID(const CLSID *id, LPSTR);
 
 
-#if defined(__cplusplus) && !defined(CINTERFACE)
-/* C++ interface */
-
-#define ICOM_BEGIN(iface,ibase) \
-    typedef struct iface: public ibase {
-
-#define ICOM_METHOD(ret,xfn) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me); \
-    public: inline ret (CALLBACK xfn)(void) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); };
-
-#define ICOM_METHOD1(ret,xfn,ta,na) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a); \
-    public: inline ret (CALLBACK xfn)(ta a) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); };
-
-#define ICOM_METHOD2(ret,xfn,ta,na,tb,nb) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); };
-
-#define ICOM_METHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); };
-
-#define ICOM_METHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); };
-
-#define ICOM_METHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); };
-
-#define ICOM_METHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); };
-
-#define ICOM_METHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
-    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); };
-
-
-#define ICOM_CMETHOD(ret,xfn) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me); \
-    public: inline ret (CALLBACK xfn)(void) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); };
-
-#define ICOM_CMETHOD1(ret,xfn,ta,na) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a); \
-    public: inline ret (CALLBACK xfn)(ta a) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); };
-
-#define ICOM_CMETHOD2(ret,xfn,ta,na,tb,nb) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); };
-
-#define ICOM_CMETHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); };
-
-#define ICOM_CMETHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); };
-
-#define ICOM_CMETHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); };
-
-#define ICOM_CMETHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); };
-
-#define ICOM_CMETHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
-    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \
-    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); };
-
-
-#define ICOM_END(iface) \
-    };
-
-#define ICOM_ICALL(ibase, xfn, p)                this_is_a_syntax_error
-#define ICOM_ICALL1(ibase, xfn, p,a)             this_is_a_syntax_error
-#define ICOM_ICALL2(ibase, xfn, p,a,b)           this_is_a_syntax_error
-#define ICOM_ICALL3(ibase, xfn, p,a,b,c)         this_is_a_syntax_error
-#define ICOM_ICALL4(ibase, xfn, p,a,b,c,d)       this_is_a_syntax_error
-#define ICOM_ICALL5(ibase, xfn, p,a,b,c,d,e)     this_is_a_syntax_error
-#define ICOM_ICALL6(ibase, xfn, p,a,b,c,d,e,f)   this_is_a_syntax_error
-#define ICOM_ICALL7(ibase, xfn, p,a,b,c,d,e,f,g) this_is_a_syntax_error
-
-#define ICOM_CALL(xfn, p)                        this_is_a_syntax_error
-#define ICOM_CALL1(xfn, p,a)                     this_is_a_syntax_error
-#define ICOM_CALL2(xfn, p,a,b)                   this_is_a_syntax_error
-#define ICOM_CALL3(xfn, p,a,b,c)                 this_is_a_syntax_error
-#define ICOM_CALL4(xfn, p,a,b,c,d)               this_is_a_syntax_error
-#define ICOM_CALL5(xfn, p,a,b,c,d,e)             this_is_a_syntax_error
-#define ICOM_CALL6(xfn, p,a,b,c,d,e,f)           this_is_a_syntax_error
-#define ICOM_CALL7(xfn, p,a,b,c,d,e,f,g)         this_is_a_syntax_error
-
-
-#else
-/* C interface */
-
-
-#define ICOM_BEGIN(iface,ibase) \
-    typedef struct ICOM_VTABLE(iface) ICOM_VTABLE(iface); \
-    struct iface { \
-        const ICOM_VTABLE(iface)* lpvtbl; \
-    }; \
-    struct ICOM_VTABLE(iface) { \
-        ICOM_VTABLE(ibase) bvt;
-
-#define ICOM_METHOD(ret, xfn) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me);
-
-#define ICOM_METHOD1(ret,xfn,ta,na) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a);
-
-#define ICOM_METHOD2(ret,xfn,ta,na,tb,nb) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b);
-
-#define ICOM_METHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c);
-
-#define ICOM_METHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d);
-
-#define ICOM_METHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e);
-
-#define ICOM_METHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f);
-
-#define ICOM_METHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
-    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g);
-
-
-#define ICOM_CMETHOD(ret, xfn) \
-        ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me);
-
-#define ICOM_CMETHOD1(ret,xfn,ta,na) \
-    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a);
-
-#define ICOM_CMETHOD2(ret,xfn,ta,na,tb,nb) \
-    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b);
-
-#define ICOM_CMETHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
-    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c);
-
-#define ICOM_CMETHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
-    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d);
-
-#define ICOM_CMETHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
-    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e);
-
-#define ICOM_CMETHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
-    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f);
-
-#define ICOM_CMETHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
-    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g);
-
-#define ICOM_END(iface) \
-    };
-
-#define ICOM_ICALL(ibase, xfn, p)  ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p)
-#define ICOM_ICALL1(ibase, xfn, p,a) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a)
-#define ICOM_ICALL2(ibase, xfn, p,a,b) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b)
-#define ICOM_ICALL3(ibase, xfn, p,a,b,c) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c)
-#define ICOM_ICALL4(ibase, xfn, p,a,b,c,d) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d)
-#define ICOM_ICALL5(ibase, xfn, p,a,b,c,d,e) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d,e)
-#define ICOM_ICALL6(ibase, xfn, p,a,b,c,d,e,f) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d,e,f)
-#define ICOM_ICALL7(ibase, xfn, p,a,b,c,d,e,f,g) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d,e,f,g)
-
-#define ICOM_CALL(xfn, p)  (p)->lpvtbl->fn##xfn(p)
-#define ICOM_CALL1(xfn, p,a) (p)->lpvtbl->fn##xfn(p,a)
-#define ICOM_CALL2(xfn, p,a,b) (p)->lpvtbl->fn##xfn(p,a,b)
-#define ICOM_CALL3(xfn, p,a,b,c) (p)->lpvtbl->fn##xfn(p,a,b,c)
-#define ICOM_CALL4(xfn, p,a,b,c,d) (p)->lpvtbl->fn##xfn(p,a,b,c,d)
-#define ICOM_CALL5(xfn, p,a,b,c,d,e) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e)
-#define ICOM_CALL6(xfn, p,a,b,c,d,e,f) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f)
-#define ICOM_CALL7(xfn, p,a,b,c,d,e,f,g) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f,g)
-
-
-#define ICOM_THIS(iface,me)          struct _##iface* this=(struct _##iface*)me
-#define ICOM_CTHIS(iface,me)         const _##iface* this=(const _##iface*)me
-
-#endif
-
-
-/* FIXME: compobj.h seems to be obsolete (replaced by objbase.h!) but it still contains REFIID */
-#include "compobj.h"
-
-typedef struct IUnknown      IUnknown ,*LPUNKNOWN;
+/*****************************************************************************
+ * IMalloc interface
+ */
+/* private prototypes for the constructors */
+LPMALLOC16	IMalloc16_Constructor(void);
+LPMALLOC32	IMalloc32_Constructor(void);
 
 
 /*****************************************************************************
  * IUnknown interface
  */
-#define ICOM_INTERFACE IUnknown
-#if defined(__cplusplus) && !defined(CINTERFACE)
-struct IUnknown {
-    union {
-        const void* lpvtbl;
-        HRESULT (CALLBACK *fnQueryInterface)(IUnknown* me, REFIID riid, LPVOID* ppvObj);
-    } t;
-    inline int QueryInterface(REFIID a, LPVOID* b) { return ((IUnknown*)t.lpvtbl)->t.fnQueryInterface(this,a,b); }
-#else
-typedef struct ICOM_VTABLE(IUnknown) ICOM_VTABLE(IUnknown);
-struct IUnknown {
+
+typedef struct _IUnknown {
+    /* IUnknown fields */
     ICOM_VTABLE(IUnknown)* lpvtbl;
-};
-struct ICOM_VTABLE(IUnknown) {
-    ICOM_METHOD2(HRESULT,QueryInterface,REFIID,riid, LPVOID*,ppvObj)
-#endif
+    DWORD                  ref;
+} _IUnknown;
 
-    ICOM_METHOD (ULONG,AddRef)
-    ICOM_METHOD (ULONG,Release)
-#ifdef __WRC__
-}; /* FIXME: WRC does not support function macros and it is ICOM_END that is supposed to close the class */
-#else
-ICOM_END(IUnknown)
-#endif
-#undef ICOM_INTERFACE
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-/*** IUnknown methods ***/
-#define IUnknown_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
-#define IUnknown_AddRef(p)             ICOM_CALL (AddRef,p)
-#define IUnknown_Release(p)            ICOM_CALL (Release,p)
-#endif
-
+LPUNKNOWN	IUnknown_Constructor(void);
 
 #endif /* __WINE_OBJBASE_H */
diff --git a/include/objidl.h b/include/objidl.h
new file mode 100644
index 0000000..a923c1e
--- /dev/null
+++ b/include/objidl.h
@@ -0,0 +1,22 @@
+#ifndef __WINE_OBJIDL_H
+#define __WINE_OBJIDL_H
+
+
+#include "wine/obj_base.h"
+
+/* the following depend only on obj_base.h */
+#include "wine/obj_misc.h"
+#include "wine/obj_channel.h"
+#include "wine/obj_clientserver.h"
+#include "wine/obj_marshal.h"
+#include "wine/obj_storage.h"
+
+/* the following depend on obj_storage.h */
+#include "wine/obj_moniker.h"
+#include "wine/obj_propertystorage.h"
+
+/* the following depend on obj_moniker.h */
+#include "wine/obj_dataobject.h"
+
+
+#endif /* __WINE_OBJIDL_H */
diff --git a/include/ole.h b/include/ole.h
index 0a368ef..e5d4fab 100644
--- a/include/ole.h
+++ b/include/ole.h
@@ -7,37 +7,18 @@
 
 #include "wingdi.h"
 
-typedef CHAR		OLECHAR16;
-typedef OLECHAR16	*BSTR16;
-typedef BSTR16		*LPBSTR16;
-typedef LPSTR		LPOLESTR16;
-typedef LPCSTR		LPCOLESTR16;
-typedef WCHAR		OLECHAR32;
-typedef OLECHAR32	*BSTR32;
-typedef BSTR32		*LPBSTR32;
-typedef LPWSTR		LPOLESTR32;
-typedef LPCWSTR		LPCOLESTR32;
-DECL_WINELIB_TYPE(OLECHAR)
-DECL_WINELIB_TYPE(LPOLESTR)
-DECL_WINELIB_TYPE(LPCOLESTR)
-DECL_WINELIB_TYPE(BSTR)
-DECL_WINELIB_TYPE(LPBSTR)
+/* FIXME: we need to include wtypes.h mainly, it seems, because we need BSTR. 
+ * Normally none of the APIs in ole.h depend on it. It is most likey that they should 
+ * be moved to ole2.h (which includes objbase.h and thus wtypes.h) or some other 
+ * OLE include
+ */
+#include "wtypes.h"
+
 
 #define OLESTR16(x) x
 #define OLESTR32(x) L##x	/* probably wrong */
 #define OLESTR WINELIB_NAME(OLESTR)
 
-typedef enum tagCLSCTX
-{
-    CLSCTX_INPROC_SERVER   = 0x1,
-    CLSCTX_INPROC_HANDLER  = 0x2,
-    CLSCTX_LOCAL_SERVER    = 0x4,
-    CLSCTX_REMOTE_SERVER   = 0x10
-} CLSCTX;
-
-#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER)
-#define CLSCTX_ALL    (CLSCTX_INPROC_HANDLER|CLSCTX_SERVER)
-
 typedef unsigned short VARTYPE;
 typedef LONG DISPID;
 
diff --git a/include/ole2.h b/include/ole2.h
index dc604c4..c91c9ae 100644
--- a/include/ole2.h
+++ b/include/ole2.h
@@ -6,18 +6,15 @@
 #define __WINE_OLE2_H
 
 /* to be implemented */
-typedef LPVOID LPMESSAGEFILTER;
+/* FIXME: this should be defined somewhere in oleidl.h instead, should it be repeated here ? */
 typedef LPVOID LPDROPTARGET;
-typedef struct tagMONIKER *LPMONIKER, IMoniker;
 
-#define S_OK	0
-#define S_FALSE	1
 
 /* OLE version */
 #define rmm             23
 #define rup            639
 
-/* FIXME should be in oleidl.h*/
+/* FIXME: should be in oleidl.h */
 typedef struct  tagOleMenuGroupWidths
 { LONG width[ 6 ];
 } OLEMENUGROUPWIDTHS32;
diff --git a/include/oleobj.h b/include/oleobj.h
index ab21084..d846d97 100644
--- a/include/oleobj.h
+++ b/include/oleobj.h
@@ -3,8 +3,10 @@
 
 #include "ole.h"
 #include "ole2.h"
-#include "compobj.h"
-/* #include "interfaces.h" */
+#include "wine/obj_base.h"
+#include "wine/obj_storage.h"
+#include "wine/obj_moniker.h"
+#include "wine/obj_dataobject.h"
 
 #define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn)
 #define STDMETHOD_(type,xfn) type (CALLBACK *fn##xfn)
@@ -14,8 +16,6 @@
 
 /* forward declaration of the objects*/
 typedef struct tagOLEADVISEHOLDER	*LPOLEADVISEHOLDER,	IOleAdviseHolder;
-typedef struct tagADVISESINK		*LPADVISESINK,		IAdviseSink;
-typedef struct tagENUMSTATDATA		*LPENUMSTATDATA,	IEnumSTATDATA;
 
 
 /****************************************************************************
diff --git a/include/options.h b/include/options.h
index 9a09ecb..84150fc 100644
--- a/include/options.h
+++ b/include/options.h
@@ -92,6 +92,7 @@
 extern char* PROFILE_GetStringItem( char* );
 
 /* Version functions */
-extern void VERSION_ParseVersion( char *arg );
+extern void VERSION_ParseWinVersion( const char *arg );
+extern void VERSION_ParseDosVersion( const char *arg );
 
 #endif  /* __WINE_OPTIONS_H */
diff --git a/include/propsheet.h b/include/propsheet.h
new file mode 100644
index 0000000..0a42159
--- /dev/null
+++ b/include/propsheet.h
@@ -0,0 +1,21 @@
+/*
+ * Property sheet class extra info
+ *
+ * Copyright 1998 Anders Carlsson
+ */
+
+#ifndef __WINE_PROPSHEET_H  
+#define __WINE_PROPSHEET_H
+
+typedef struct tagPROPSHEET_INFO
+{
+    DWORD dwDummy;  /* just to keep the compiler happy ;-) */
+
+} PROPSHEET_INFO, *LPPROPSHEET_INFO;
+
+
+
+extern VOID PROPSHEET_Register (VOID);
+extern VOID PROPSHEET_UnRegister (VOID);
+
+#endif  /* __WINE_PROPSHEET_H */
diff --git a/include/servprov.h b/include/servprov.h
new file mode 100644
index 0000000..6df57b3
--- /dev/null
+++ b/include/servprov.h
@@ -0,0 +1,34 @@
+#ifndef __WINE_SERVPROV_H
+#define __WINE_SERVPROV_H
+
+
+#include "unknwn.h"
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID   (IID_IServiceProvider,	0x6d5140c1L, 0x7436, 0x11ce, 0x80, 0x34, 0x00, 0xaa, 0x00, 0x60, 0x09, 0xfa);
+typedef struct IServiceProvider IServiceProvider,*LPSERVICEPROVIDER;
+
+
+/*****************************************************************************
+ * IServiceProvider interface
+ */
+#define ICOM_INTERFACE IServiceProvider
+ICOM_BEGIN(IServiceProvider,IUnknown)
+    ICOM_METHOD3(HRESULT,QueryService, REFGUID,guidService, REFIID,riid, void**,ppvObject);
+ICOM_END(IServiceProvider)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IServiceProvider_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IServiceProvider_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IServiceProvider_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IServiceProvider methods ***/
+#define IServiceProvider_QueryService(p,a,b,c) ICOM_CALL3(QueryService,p,a,b,c)
+#endif
+
+
+#endif /* __WINE_SERVPROV_H */
diff --git a/include/shell.h b/include/shell.h
index c19af49..2b5cdf6 100644
--- a/include/shell.h
+++ b/include/shell.h
@@ -4,13 +4,10 @@
 #ifndef __WINE_SHELL_H
 #define __WINE_SHELL_H
 
-#include "wintypes.h"
+#include "windows.h"
 #include "winreg.h"
 #include "imagelist.h"
 
-#ifndef MAX_PATH
-#define MAX_PATH 260
-#endif
 
 /****************************************************************************
 * shell 16
@@ -247,6 +244,11 @@
 /****************************************************************************
 *  string and path functions
 */
+BOOL32 WINAPI PathIsRoot32A(LPCSTR x);
+BOOL32 WINAPI PathIsRoot32W(LPCWSTR x);
+#define  PathIsRoot WINELIB_NAME_AW(PathIsRoot)
+BOOL32 WINAPI PathIsRoot32AW(LPCVOID x);
+
 LPSTR  WINAPI PathAddBackslash32A(LPSTR path);	
 LPWSTR WINAPI PathAddBackslash32W(LPWSTR path);	
 #define  PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
diff --git a/include/shlguid.h b/include/shlguid.h
new file mode 100644
index 0000000..3f6a853
--- /dev/null
+++ b/include/shlguid.h
@@ -0,0 +1,13 @@
+#ifndef __WINE_SHLGUID_H
+#define __WINE_SHLGUID_H
+
+
+/* This file defines the GUID of the shell objects. In WINE we define
+ * the GUIDs where the interface is declared so this file just 
+ * includes shlobj.h
+ */
+
+#include "shlobj.h"
+
+
+#endif /* __WINE_SHLGUID_H */
diff --git a/include/shlobj.h b/include/shlobj.h
index 8f82309..c741985 100644
--- a/include/shlobj.h
+++ b/include/shlobj.h
@@ -1,15 +1,13 @@
-#ifndef _WINE_SHLOBJ_H
-#define _WINE_SHLOBJ_H
+#ifndef __WINE_SHLOBJ_H
+#define __WINE_SHLOBJ_H
 
+#include "wine/obj_base.h"
 #include "shell.h"
 #include "ole.h"
 #include "ole2.h"
-#include "compobj.h"
 #include "oleobj.h"
-#include "storage.h"
 #include "commctrl.h"
 #include "wintypes.h"
-#include "interfaces.h"
 
 #define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn)
 #define STDMETHOD_(type,xfn) type (CALLBACK *fn##xfn)
@@ -23,22 +21,19 @@
 DWORD WINAPI SHELL32_DllGetClassObject(LPCLSID,REFIID,LPVOID*);
 
 
-typedef LPVOID	LPBC; /* *IBindCtx really */
 
 /* foreward declaration of the objects*/
-typedef struct tagPERSISTFILE	*LPPERSISTFILE,	IPersistFile;
 typedef struct tagCONTEXTMENU	*LPCONTEXTMENU,	IContextMenu;
 typedef struct tagSHELLEXTINIT	*LPSHELLEXTINIT,IShellExtInit;
 typedef struct tagENUMIDLIST	*LPENUMIDLIST,	IEnumIDList;
 typedef struct tagSHELLFOLDER	*LPSHELLFOLDER,	IShellFolder;
 typedef struct tagSHELLVIEW	*LPSHELLVIEW,	IShellView;
 typedef struct tagSHELLBROWSER	*LPSHELLBROWSER,IShellBrowser;
-typedef struct tagDATAOBJECT	*LPDATAOBJECT,	IDataObject;
 typedef struct tagSHELLICON	*LPSHELLICON,	IShellIcon;
 typedef struct tagDOCKINGWINDOWFRAME	*LPDOCKINGWINDOWFRAME,	IDockingWindowFrame;
-typedef struct tagSERVICEPROVIDER	*LPSERVICEPROVIDER,	IServiceProvider;
 typedef struct tagCOMMDLGBROWSER	*LPCOMMDLGBROWSER,	ICommDlgBrowser;
-typedef struct tagENUMFORMATETC	*LPENUMFORMATETC,	IEnumFORMATETC;
+ 
+
  
 /****************************************************************************
 *  SHELL ID
@@ -47,24 +42,13 @@
 DEFINE_GUID (IID_MyComputer,		0x20D04FE0L, 0x3AEA, 0x1069, 0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
 
 /* strange Objects */
-DEFINE_SHLGUID(IID_IEnumUnknown,	0x00000100L, 0, 0);
-DEFINE_SHLGUID(IID_IEnumString,		0x00000101L, 0, 0);
-DEFINE_SHLGUID(IID_IEnumMoniker,	0x00000102L, 0, 0);
-DEFINE_SHLGUID(IID_IEnumFORMATETC,	0x00000103L, 0, 0);
 DEFINE_SHLGUID(IID_IEnumOLEVERB,	0x00000104L, 0, 0);
-DEFINE_SHLGUID(IID_IEnumSTATDATA,	0x00000105L, 0, 0);
 
-DEFINE_SHLGUID(IID_IPersistStream,	0x00000109L, 0, 0);
-DEFINE_SHLGUID(IID_IPersistStorage,	0x0000010AL, 0, 0);
-DEFINE_SHLGUID(IID_IPersistFile,	0x0000010BL, 0, 0);
-DEFINE_SHLGUID(IID_IPersist,		0x0000010CL, 0, 0);
 DEFINE_SHLGUID(IID_IViewObject,		0x0000010DL, 0, 0);
-DEFINE_SHLGUID(IID_IDataObject,		0x0000010EL, 0, 0);
 
 DEFINE_SHLGUID(IID_IDropSource,		0x00000121L, 0, 0);
 DEFINE_SHLGUID(IID_IDropTarget,		0x00000122L, 0, 0);
 
-DEFINE_GUID (IID_IServiceProvider,	0x6D5140C1L, 0x7436, 0x11CE, 0x80, 0x34, 0x00, 0xAA, 0x00, 0x60, 0x09, 0xFA);
 DEFINE_GUID (IID_IDockingWindow,	0x012dd920L, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
 DEFINE_GUID (IID_IDockingWindowSite,	0x2A342FC2L, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
 DEFINE_GUID (IID_IDockingWindowFrame,	0x47D2657AL, 0x7B27, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
@@ -127,31 +111,8 @@
     WCHAR	cStrW[MAX_PATH];
   }u;
 } STRRET,*LPSTRRET;
-/*****************************************************************************
- * IPersistFile interface
- */
-#define THIS LPPERSISTFILE this
-typedef struct IPersistFile_VTable
-{   /* *** IUnknown methods *** */
-    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
-    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
-    STDMETHOD_(ULONG,Release) (THIS) PURE;
 
-    STDMETHOD(GetClassID )(THIS_ CLSID *pClassID) PURE;
-    STDMETHOD(IsDirty )(THIS) PURE;
-    STDMETHOD(Load )(THIS_ LPCOLESTR32 pszFileName, DWORD dwMode) PURE;
-    STDMETHOD(Save )(THIS_ LPCOLESTR32 pszFileName, BOOL32 fRemember) PURE;
-    STDMETHOD(SaveCompleted )(THIS_ LPCOLESTR32 pszFileName) PURE;
-    STDMETHOD(GetCurFile )(THIS_ LPOLESTR32 *ppszFileName) PURE;
 
-} IPersistFile_VTable,*LPPERSISTFILE_VTABLE;
-
-struct tagPERSISTFILE
-{ LPPERSISTFILE_VTABLE	lpvtbl;
-  DWORD			ref;
-};
-
-#undef THIS
 /*****************************************************************************
  * IContextMenu interface
  */
@@ -282,52 +243,6 @@
         DVASPECT_DOCPRINT	= 8
 } DVASPECT;
 
-typedef enum tagTYMED
-{	TYMED_HGLOBAL   = 1,
-	TYMED_FILE      = 2,
-	TYMED_ISTREAM   = 4,
-	TYMED_ISTORAGE  = 8,
-	TYMED_GDI       = 16,
-	TYMED_MFPICT    = 32,
-	TYMED_ENHMF     = 64,
-	TYMED_NULL      = 0
-} TYMED;
-  
-typedef struct
-{	DWORD tdSize;
-	WORD tdDriverNameOffset;
-	WORD tdDeviceNameOffset;
-	WORD tdPortNameOffset;
-	WORD tdExtDevmodeOffset;
-	BYTE tdData[ 1 ];
-} DVTARGETDEVICE32;
-
-typedef WORD CLIPFORMAT32, *LPCLIPFORMAT32;
-
-/* dataobject as answer to a request */
-typedef struct 
-{	DWORD tymed;
-	union 
-	{ HBITMAP32 hBitmap;
-	  /*HMETAFILEPICT32 hMetaFilePict;*/
-	  /*HENHMETAFILE32 hEnhMetaFile;*/
-	  HGLOBAL32 hGlobal;
-	  LPOLESTR32 lpszFileName;
-	  IStream32 *pstm;
-	  IStorage32 *pstg;
-        } u;
-	IUnknown *pUnkForRelease;
-} STGMEDIUM32;   
-
-/* wished data format */
-typedef struct 
-{	CLIPFORMAT32 cfFormat;
-	DVTARGETDEVICE32 *ptd;
-	DWORD dwAspect;
-	LONG lindex;
-	DWORD tymed;
-} FORMATETC32, *LPFORMATETC32;
-
 /* shell specific clipboard formats */
 
 /* DATAOBJECT_InitShellIDList*/
@@ -399,65 +314,6 @@
 extern LPIDLLIST IDLList_Constructor (UINT32 uStep);
 extern void IDLList_Destructor(LPIDLLIST this);
 #undef THIS
-/*****************************************************************************
- * IEnumFORMATETC interface
- */
-#define THIS LPENUMFORMATETC this
-
-typedef struct IEnumFORMATETC_VTable 
-{    /* IUnknown methods */
-	STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
-	STDMETHOD_(ULONG,AddRef) (THIS) PURE;
-	STDMETHOD_(ULONG,Release) (THIS) PURE;
-
-	/* IEnumFORMATETC methods */
-	STDMETHOD (Next)(THIS_ ULONG celt, FORMATETC32 *rgelt, ULONG *pceltFethed) PURE;
-	STDMETHOD (Skip)(THIS_ ULONG celt) PURE;
-	STDMETHOD (Reset)(THIS) PURE;
-	STDMETHOD (Clone)(THIS_ IEnumFORMATETC ** ppenum) PURE;
-} IEnumFORMATETC_VTable,*LPENUMFORMATETC_VTABLE;
-
-struct tagENUMFORMATETC
-{	LPENUMFORMATETC_VTABLE	lpvtbl;
-	DWORD			 ref;
-        UINT32	posFmt;
-        UINT32	countFmt;
-        LPFORMATETC32 pFmt;
-};
-
-#undef THIS
-
-/*****************************************************************************
- * IDataObject interface
- */
-#define THIS LPDATAOBJECT this
-
-typedef struct IDataObject_VTable 
-{	/*** IUnknown methods ***/
-	STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
-	STDMETHOD_(ULONG,AddRef) (THIS) PURE;
-	STDMETHOD_(ULONG,Release) (THIS) PURE;
-
-	STDMETHOD (GetData )(THIS_ LPFORMATETC32 pformatetcIn, STGMEDIUM32 *pmedium) PURE;
-	STDMETHOD (GetDataHere)(THIS_ LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium) PURE;
-        STDMETHOD (QueryGetData)(THIS_ LPFORMATETC32 pformatetc) PURE;
-        STDMETHOD (GetCanonicalFormatEtc)(THIS_ LPFORMATETC32 pformatectIn, LPFORMATETC32 pformatetcOut) PURE;
-        STDMETHOD (SetData)(THIS_ LPFORMATETC32 pformatetc, STGMEDIUM32 *pmedium, BOOL32 fRelease) PURE;
-        STDMETHOD (EnumFormatEtc)(THIS_ DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc) PURE;
-        STDMETHOD (DAdvise )(THIS_ LPFORMATETC32 *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection) PURE;
-        STDMETHOD (DUnadvise)(THIS_ DWORD dwConnection) PURE;
-        STDMETHOD (EnumDAdvise)(THIS_ IEnumSTATDATA **ppenumAdvise) PURE;
-} IDataObject_VTable,*LPDATAOBJECT_VTABLE;
-
-struct tagDATAOBJECT
-{	LPDATAOBJECT_VTABLE	lpvtbl;
-	DWORD	ref;
-	LPSHELLFOLDER	psf;
-	LPIDLLIST  lpill;	/* the data of the dataobject */
-	LPITEMIDLIST  pidl;	
-};
-
-#undef THIS
 
 
 /*****************************************************************************
@@ -1108,24 +964,6 @@
 
 #undef THIS
 /****************************************************************************
- * IServiceProvider interface
- */
-#define THIS LPSERVICEPROVIDER this
-
-typedef struct IServiceProvider_VTable
-{	/*** IUnknown methods ***/
-	STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
-	STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
-	STDMETHOD_(ULONG,Release) (THIS) PURE;
-
-	STDMETHOD(QueryService)(THIS_ REFGUID guidService, REFIID riid, void **ppvObject);
-} IServiceProvider_VTable, *LPSERVICEPROVIDER_VTABLE;
-
-struct tagSERVICEPROVIDER
-{	LPSERVICEPROVIDER_VTABLE lpvtbl;
-	DWORD ref;
-};           
-/****************************************************************************
  * Shell Execute API
  */
 #define SE_ERR_FNF              2       /* file not found */
@@ -1389,4 +1227,5 @@
 #undef THIS_
 #undef STDMETHOD
 #undef STDMETHOD_
-#endif /*_WINE_SHLOBJ_H*/
+
+#endif /* __WINE_SHLOBJ_H */
diff --git a/include/storage.h b/include/storage.h
index 678ea76..10fd693 100644
--- a/include/storage.h
+++ b/include/storage.h
@@ -1,254 +1,8 @@
 #ifndef __WINE_STORAGE_H
 #define __WINE_STORAGE_H
 
+/* "storage.h" is obsolete, you should include "objbase.h" instead */
+  
 #include "objbase.h"
-#include "windows.h"
-
-/* Does this look like a cellar to you? */
-
-struct storage_header {
-	BYTE	magic[8];	/* 00: magic */
-	BYTE	unknown1[36];	/* 08: unknown */
-	DWORD	num_of_bbd_blocks;/* 2C: length of big datablocks */
-	DWORD	root_startblock;/* 30: root storage first big block */
-	DWORD	unknown2[2];	/* 34: unknown */
-	DWORD	sbd_startblock;	/* 3C: small block depot first big block */
-	DWORD	unknown3[3];	/* 40: unknown */
-	DWORD	bbd_list[109];	/* 4C: big data block list (up to end of sector)*/
-};
-struct storage_pps_entry {
-	WCHAR	pps_rawname[32];/* 00: \0 terminated widechar name */
-	WORD	pps_sizeofname;	/* 40: namelength in bytes */
-	BYTE	pps_type;	/* 42: flags, 1 storage/dir, 2 stream, 5 root */
-	BYTE	pps_unknown0;	/* 43: unknown */
-	DWORD	pps_prev;	/* 44: previous pps */
-	DWORD	pps_next;	/* 48: next pps */
-	DWORD	pps_dir;	/* 4C: directory pps */
-	GUID	pps_guid;	/* 50: class ID */
-	DWORD	pps_unknown1;	/* 60: unknown */
-	FILETIME pps_ft1;	/* 64: filetime1 */
-	FILETIME pps_ft2;	/* 70: filetime2 */
-	DWORD	pps_sb;		/* 74: data startblock */
-	DWORD	pps_size;	/* 78: datalength. (<0x1000)?small:big blocks*/
-	DWORD	pps_unknown2;	/* 7C: unknown */
-};
-
-#define STORAGE_CHAINENTRY_FAT		0xfffffffd
-#define STORAGE_CHAINENTRY_ENDOFCHAIN	0xfffffffe
-#define STORAGE_CHAINENTRY_FREE		0xffffffff
-
-typedef LPOLESTR16 *SNB16;
-typedef LPOLESTR32 *SNB32;
-DECL_WINELIB_TYPE(SNB)
-
-typedef struct IStorage16 IStorage16,*LPSTORAGE16;
-typedef struct IStorage32 IStorage32,*LPSTORAGE32;
-typedef struct IStream16 IStream16,*LPSTREAM16;
-typedef struct IStream32 IStream32,*LPSTREAM32;
-
-typedef struct IEnumSTATSTG IEnumSTATSTG,*LPENUMSTATSTG;
-
-typedef struct {
-    LPOLESTR16	pwcsName;
-    DWORD	type;
-    ULARGE_INTEGER cbSize;
-    FILETIME	mtime;
-    FILETIME	ctime;
-    FILETIME	atime;
-    DWORD	grfMode;
-    DWORD	grfLocksSupported;
-    CLSID	clsid;
-    DWORD	grfStateBits;
-    DWORD	reserved;
-} STATSTG;
-
-#define STGM_DIRECT		0x00000000
-#define STGM_TRANSACTED		0x00010000
-#define STGM_SIMPLE		0x08000000
-#define STGM_READ		0x00000000
-#define STGM_WRITE		0x00000001
-#define STGM_READWRITE		0x00000002
-#define STGM_SHARE_DENY_NONE	0x00000040
-#define STGM_SHARE_DENY_READ	0x00000030
-#define STGM_SHARE_DENY_WRITE	0x00000020
-#define STGM_SHARE_EXCLUSIVE	0x00000010
-#define STGM_PRIORITY		0x00040000
-#define STGM_DELETEONRELEASE	0x04000000
-#define STGM_NOSCRATCH		0x00100000
-#define STGM_CREATE		0x00001000
-#define STGM_CONVERT		0x00020000
-#define STGM_FAILIFTHERE	0x00000000
-
-
-/*****************************************************************************
- * IStorage16 interface
- */
-#define ICOM_INTERFACE IStorage16
-ICOM_BEGIN(IStorage16,IUnknown)
-    ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR16,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream16**,ppstm)
-    ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR16,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream16**,ppstm)
-    ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR16,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage16**,ppstg)
-    ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR16,pwcsName, IStorage16*,pstgPriority, DWORD,grfMode, SNB16,snb16Exclude, DWORD,reserved, IStorage16**,ppstg)
-    ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB16,snb16Exclude, IStorage16*,pstgDest)
-    ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR16,pwcsName, IStorage16*,pstgDest, LPCOLESTR16,pwcsNewName, DWORD,grfFlags)
-    ICOM_METHOD1(HRESULT,Commit,         DWORD,grfCommitFlags)
-    ICOM_METHOD (HRESULT,Revert)
-    ICOM_METHOD4(HRESULT,EnumElements,   DWORD,reserved1, void*,reserved2, DWORD,reserved3, IEnumSTATSTG**,ppenum)
-    ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR16,pwcsName)
-    ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR16,pwcsOldName, LPCOLESTR16,pwcsNewName)
-    ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR16,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime)
-    ICOM_METHOD1(HRESULT,SetClass,       REFCLSID,clsid)
-    ICOM_METHOD2(HRESULT,SetStateBits,   DWORD,grfStateBits, DWORD,grfMask)
-    ICOM_METHOD2(HRESULT,Stat,           STATSTG*,pstatstg, DWORD,grfStatFlag)
-ICOM_END(IStorage16)
-#undef ICOM_INTERFACE
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-/*** IUnknown methods ***/
-#define IStorage16_QueryInterface(p,a,b) ICOM_ICALL2(QueryInterface,p,a,b)
-#define IStorage16_AddRef(p)             ICOM_ICALL (AddRef,p)
-#define IStorage16_Release(p)            ICOM_ICALL (Release,p)
-/*** IStorage16 methods ***/
-#define IStorage16_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
-#define IStorage16_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
-#define IStorage16_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
-#define IStorage16_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
-#define IStorage16_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
-#define IStorage16_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
-#define IStorage16_Commit(p,a)                ICOM_CALL1(Commit,p,a)
-#define IStorage16_Revert(p)                  ICOM_CALL (Revert,p)
-#define IStorage16_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
-#define IStorage16_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
-#define IStorage16_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
-#define IStorage16_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
-#define IStorage16_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
-#define IStorage16_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
-#define IStorage16_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
-#endif
-
-
-/*****************************************************************************
- * IStorage32 interface
- */
-#define ICOM_INTERFACE IStorage32
-ICOM_BEGIN(IStorage32,IUnknown)
-    ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR32,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream32**,ppstm)
-    ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR32,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream32**,ppstm)
-    ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR32,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage32**,ppstg)
-    ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR32,pwcsName, IStorage32*,pstgPriority, DWORD,grfMode, SNB32,snb16Exclude, DWORD,reserved, IStorage32**,ppstg)
-    ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB32,snb16Exclude, IStorage32*,pstgDest)
-    ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR32,pwcsName, IStorage32*,pstgDest, LPCOLESTR32,pwcsNewName, DWORD,grfFlags)
-    ICOM_METHOD1(HRESULT,Commit,         DWORD,grfCommitFlags)
-    ICOM_METHOD (HRESULT,Revert)
-    ICOM_METHOD4(HRESULT,EnumElements,   DWORD,reserved1, void*,reserved2, DWORD,reserved3, IEnumSTATSTG**,ppenum)
-    ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR32,pwcsName)
-    ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR32,pwcsOldName, LPCOLESTR32,pwcsNewName)
-    ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR32,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime)
-    ICOM_METHOD1(HRESULT,SetClass,       REFCLSID,clsid)
-    ICOM_METHOD2(HRESULT,SetStateBits,   DWORD,grfStateBits, DWORD,grfMask)
-    ICOM_METHOD2(HRESULT,Stat,           STATSTG*,pstatstg, DWORD,grfStatFlag)
-ICOM_END(IStorage32)
-#undef ICOM_INTERFACE
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-/*** IUnknown methods ***/
-#define IStorage32_QueryInterface(p,a,b) ICOM_ICALL2(QueryInterface,p,a,b)
-#define IStorage32_AddRef(p)             ICOM_ICALL (AddRef,p)
-#define IStorage32_Release(p)            ICOM_ICALL (Release,p)
-/*** IStorage32 methods ***/
-#define IStorage32_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
-#define IStorage32_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
-#define IStorage32_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
-#define IStorage32_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
-#define IStorage32_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
-#define IStorage32_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
-#define IStorage32_Commit(p,a)                ICOM_CALL1(Commit,p,a)
-#define IStorage32_Revert(p)                  ICOM_CALL (Revert,p)
-#define IStorage32_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
-#define IStorage32_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
-#define IStorage32_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
-#define IStorage32_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
-#define IStorage32_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
-#define IStorage32_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
-#define IStorage32_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
-#endif
-
-
-/*****************************************************************************
- * IStream16 interface
- */
-#define ICOM_INTERFACE IStream16
-ICOM_BEGIN(IStream16,IUnknown)
-    ICOM_METHOD3(HRESULT,Read,        void*,pv, ULONG,cb, ULONG*,pcbRead)
-    ICOM_METHOD3(HRESULT,Write,       const void*,pv, ULONG,cb, ULONG*,pcbWritten)
-    ICOM_METHOD3(HRESULT,Seek,        LARGE_INTEGER,dlibMove, DWORD,dwOrigin, ULARGE_INTEGER*,plibNewPosition)
-    ICOM_METHOD1(HRESULT,SetSize,     ULARGE_INTEGER,libNewSize)
-    ICOM_METHOD4(HRESULT,CopyTo,      IStream16*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten)
-    ICOM_METHOD1(HRESULT,Commit,      DWORD,grfCommitFlags)
-    ICOM_METHOD (HRESULT,Revert)
-    ICOM_METHOD3(HRESULT,LockRegion,  ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType)
-    ICOM_METHOD3(HRESULT,UnlockRegion,ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType)
-    ICOM_METHOD2(HRESULT,Stat,        STATSTG*,pstatstg, DWORD,grfStatFlag)
-    ICOM_METHOD1(HRESULT,Clone,       IStream16**,ppstm)
-ICOM_END(IStream16)
-#undef ICOM_INTERFACE
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-/*** IUnknown methods ***/
-#define IStream16_QueryInterface(p,a,b) ICOM_ICALL2(QueryInterface,p,a,b)
-#define IStream16_AddRef(p)             ICOM_ICALL (AddRef,p)
-#define IStream16_Release(p)            ICOM_ICALL (Release,p)
-/*** IStream16 methods ***/
-#define IStream16_Read(p,a,b,c)         ICOM_CALL3(Read,p,a,b,c)
-#define IStream16_Write(p,a,b,c)        ICOM_CALL3(Write,p,a,b,c)
-#define IStream16_Seek(p)               ICOM_CALL3(Seek,p)
-#define IStream16_SetSize(p,a,b)        ICOM_CALL1(SetSize,p,a,b)
-#define IStream16_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
-#define IStream16_Commit(p,a)           ICOM_CALL1(Commit,p,a)
-#define IStream16_Revert(p)             ICOM_CALL (Revert,p)
-#define IStream16_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
-#define IStream16_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
-#define IStream16_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
-#define IStream16_Clone(p,a)            ICOM_CALL1(Clone,p,a)
-#endif
-
-
-/*****************************************************************************
- * IStream32 interface
- */
-#define ICOM_INTERFACE IStream32
-ICOM_BEGIN(IStream32,IUnknown)
-    ICOM_METHOD3(HRESULT,Read,        void*,pv, ULONG,cb, ULONG*,pcbRead)
-    ICOM_METHOD3(HRESULT,Write,       const void*,pv, ULONG,cb, ULONG*,pcbWritten)
-    ICOM_METHOD3(HRESULT,Seek,        LARGE_INTEGER,dlibMove, DWORD,dwOrigin, ULARGE_INTEGER*,plibNewPosition)
-    ICOM_METHOD1(HRESULT,SetSize,     ULARGE_INTEGER,libNewSize)
-    ICOM_METHOD4(HRESULT,CopyTo,      IStream32*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten)
-    ICOM_METHOD1(HRESULT,Commit,      DWORD,grfCommitFlags)
-    ICOM_METHOD (HRESULT,Revert)
-    ICOM_METHOD3(HRESULT,LockRegion,  ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType)
-    ICOM_METHOD3(HRESULT,UnlockRegion,ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType)
-    ICOM_METHOD2(HRESULT,Stat,        STATSTG*,pstatstg, DWORD,grfStatFlag)
-    ICOM_METHOD1(HRESULT,Clone,       IStream32**,ppstm)
-ICOM_END(IStream32)
-#undef ICOM_INTERFACE
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-/*** IUnknown methods ***/
-#define IStream32_QueryInterface(p,a,b) ICOM_ICALL2(QueryInterface,p,a,b)
-#define IStream32_AddRef(p)             ICOM_ICALL (AddRef,p)
-#define IStream32_Release(p)            ICOM_ICALL (Release,p)
-/*** IStream32 methods ***/
-#define IStream32_Read(p,a,b,c)         ICOM_CALL3(Read,p,a,b,c)
-#define IStream32_Write(p,a,b,c)        ICOM_CALL3(Write,p,a,b,c)
-#define IStream32_Seek(p)               ICOM_CALL3(Seek,p)
-#define IStream32_SetSize(p,a,b)        ICOM_CALL1(SetSize,p,a,b)
-#define IStream32_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
-#define IStream32_Commit(p,a)           ICOM_CALL1(Commit,p,a)
-#define IStream32_Revert(p)             ICOM_CALL (Revert,p)
-#define IStream32_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
-#define IStream32_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
-#define IStream32_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
-#define IStream32_Clone(p,a)            ICOM_CALL1(Clone,p,a)
-#endif
 
 #endif
diff --git a/include/tab.h b/include/tab.h
index 81b7248..40f6e36 100644
--- a/include/tab.h
+++ b/include/tab.h
@@ -9,11 +9,10 @@
 
 typedef struct tagTAB_ITEM
 {
-    UINT32	mask;
-    UINT32	lpReserved1;
-    UINT32	lpReserved2;
+	UINT32  mask;
+	DWORD	dwState;
     LPSTR	pszText;
-    INT32	cchTextMax;
+	INT32   cchTextMax;
     INT32	iImage;
     LPARAM	lParam;
     RECT32   	rect;		/* bounding rectangle of the item */
@@ -21,13 +20,15 @@
 
 typedef struct tagTAB_INFO
 {
-    UINT32	uNumItem;	/* number of tab items */
-    INT32	nHeight;	/* height of the tab row */
-    HFONT32	hFont;		/* handle to the current font */
+    UINT32	    uNumItem;	/* number of tab items */
+    INT32	    nHeight;	/* height of the tab row */
+    HFONT32	    hFont;		/* handle to the current font */
     HCURSOR32	hcurArrow;	/* handle to the current cursor */
-    INT32	iSelected;	/* the currently selected item */
+	HIMAGELIST  himl;       /* handle to a image list (may be 0) */
+	UINT32		cchTextMax;
+    INT32	    iSelected;	/* the currently selected item */
     TAB_ITEM	*items;		/* pointer to an array of TAB_ITEM's */
-    RECT32	rect;
+    RECT32	    rect;
 } TAB_INFO;
 
 
diff --git a/include/unknwn.h b/include/unknwn.h
new file mode 100644
index 0000000..1803cb2
--- /dev/null
+++ b/include/unknwn.h
@@ -0,0 +1,8 @@
+#ifndef __WINE_UNKNWN_H
+#define __WINE_UNKNWN_H
+
+
+#include "wine/obj_base.h"
+
+
+#endif /* __WINE_UNKNWN_H */
diff --git a/include/version.h b/include/version.h
index 6d6aa5a..cf4f0e4 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1 +1 @@
-#define WINE_RELEASE_INFO "Wine release 990103"
+#define WINE_RELEASE_INFO "Wine release 990110"
diff --git a/include/winbase.h b/include/winbase.h
index 8668da9..8df2d66 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -302,6 +302,7 @@
 void      WINAPI EnterCriticalSection(CRITICAL_SECTION *lpCrit);
 void      WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit);
 void      WINAPI LeaveCriticalSection(CRITICAL_SECTION *lpCrit);
+void      WINAPI MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit);
 HANDLE32  WINAPI OpenProcess(DWORD access, BOOL32 inherit, DWORD id);
 BOOL32    WINAPI GetProcessWorkingSetSize(HANDLE32,LPDWORD,LPDWORD);
 BOOL32    WINAPI SetProcessWorkingSetSize(HANDLE32,DWORD,DWORD);
diff --git a/include/windows.h b/include/windows.h
index db13b18..3b602c4 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -12,8 +12,14 @@
 #include "wintypes.h"
 #include "winbase.h"  
 
-/* FIXME: Maybe we should try to get something from the Unix headers instead, this should be in windef.h by the way */
+/* FIXME: Maybe MAX_PATH and _MAX_PATH should be computed from the Unix headers instead
+ * and by the way, _MAX_PATH should be defined in stdlib.h and MAX_PATH in windef.h 
+ * and mapiwin.h
+ */
+#define _MAX_PATH 260
+#ifndef MAX_PATH
 #define MAX_PATH 260
+#endif
 
 #ifndef DONT_INCLUDE_WINGDI
 #include "winbase.h"
@@ -3836,6 +3842,8 @@
 VOID        WINAPI PostEvent(HTASK16);
 WORD        WINAPI PrestoChangoSelector(WORD,WORD);
 BOOL32      WINAPI RegisterShellHook(HWND16,UINT16);
+/* NOTE: This is SYSTEM.3, not USER.182, which is also named KillSystemTimer */
+WORD        WINAPI SYSTEM_KillSystemTimer( WORD );
 WORD        WINAPI SelectorAccessRights(WORD,WORD,WORD);
 VOID        WINAPI SetPriority(HTASK16,INT16);
 FARPROC16   WINAPI SetResourceHandler(HINSTANCE16,SEGPTR,FARPROC16);
@@ -3857,6 +3865,7 @@
 BOOL32      WINAPI Beep(DWORD,DWORD);
 BOOL32      WINAPI CloseHandle(HANDLE32);
 BOOL32      WINAPI CloseServiceHandle(HANDLE32);
+HANDLE32    WINAPI ConvertToGlobalHandle(HANDLE32 hSrc);
 BOOL32      WINAPI CopyFile32A(LPCSTR,LPCSTR,BOOL32);
 BOOL32      WINAPI CopyFile32W(LPCWSTR,LPCWSTR,BOOL32);
 #define     CopyFile WINELIB_NAME_AW(CopyFile)
@@ -4135,6 +4144,7 @@
 LONG        WINAPI RegUnLoadKey32A(HKEY,LPCSTR);
 LONG        WINAPI RegUnLoadKey32W(HKEY,LPCWSTR);
 #define     RegUnLoadKey WINELIB_NAME_AW(RegUnLoadKey)
+BOOL32      WINAPI ReleaseMutex(HANDLE32);
 BOOL32      WINAPI ReleaseSemaphore(HANDLE32,LONG,LPLONG);
 BOOL32      WINAPI ResetEvent(HANDLE32);
 DWORD       WINAPI ResumeThread(HANDLE32);
diff --git a/include/wine/obj_base.h b/include/wine/obj_base.h
new file mode 100644
index 0000000..d03d1e9
--- /dev/null
+++ b/include/wine/obj_base.h
@@ -0,0 +1,749 @@
+/*
+ * This file defines the macros and types necessary to define COM interfaces, 
+ * and the three most basic COM interfaces: IUnknown, IMalloc and IClassFactory.
+ */
+
+#ifndef __WINE_WINE_OBJ_BASE_H
+#define __WINE_WINE_OBJ_BASE_H
+
+
+/*****************************************************************************
+ * Defines the basic types
+ */
+#include "wtypes.h"
+
+
+/*****************************************************************************
+ * Macros to declare the GUIDs
+ */
+#ifdef INITGUID
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        const GUID name = \
+	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+    extern const GUID name
+#endif
+
+#define DEFINE_OLEGUID(name, l, w1, w2) \
+	DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+#define DEFINE_SHLGUID(name, l, w1, w2) DEFINE_OLEGUID(name,l,w1,w2)
+
+
+/*****************************************************************************
+ * GUID API
+ */
+HRESULT WINAPI StringFromCLSID16(const CLSID *id, LPOLESTR16*);
+HRESULT WINAPI StringFromCLSID32(const CLSID *id, LPOLESTR32*);
+#define StringFromCLSID WINELIB_NAME(StringFromCLSID)
+HRESULT WINAPI CLSIDFromString16(LPCOLESTR16, CLSID *);
+HRESULT WINAPI CLSIDFromString32(LPCOLESTR32, CLSID *);
+#define CLSIDFromString WINELIB_NAME(CLSIDFromString)
+HRESULT WINAPI CLSIDFromProgID16(LPCOLESTR16 progid, LPCLSID riid);
+HRESULT WINAPI CLSIDFromProgID32(LPCOLESTR32 progid, LPCLSID riid);
+#define CLSIDFromProgID WINELIB_NAME(CLSIDFromProgID)
+
+INT32 WINAPI StringFromGUID2(REFGUID id, LPOLESTR32 str, INT32 cmax);
+
+BOOL16 WINAPI IsEqualGUID16(GUID* g1,GUID* g2);
+BOOL32 WINAPI IsEqualGUID32(REFGUID rguid1,REFGUID rguid2);
+/*#define IsEqualGUID WINELIB_NAME(IsEqualGUID)*/
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
+#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+
+
+/*****************************************************************************
+ * Macros to define a COM interface
+ */
+/*
+ * The goal of the following set of definitions is to provide a way to use the same 
+ * header file definitions to provide both a C interface and a C++ object oriented 
+ * interface to COM interfaces. The type of interface is selected automatically 
+ * depending on the language but it is always possible to get the C interface in C++ 
+ * by defining CINTERFACE.
+ *
+ * It is based on the following assumptions:
+ *  - all COM interfaces derive from IUnknown, this should not be a problem.
+ *  - the header file only defines the interface, the actual fields are defined 
+ *    separately in the C file implementing the interface.
+ *
+ * The natural approach to this problem would be to make sure we get a C++ class and 
+ * virtual methods in C++ and a structure with a table of pointer to functions in C.
+ * Unfortunately the layout of the virtual table is compiler specific, the layout of 
+ * g++ virtual tables is not the same as that of an egcs virtual table which is not the 
+ * same as that generated by Visual C+. There are workarounds to make the virtual tables 
+ * compatible via padding but unfortunately the one which is imposed to the WINE emulator
+ * by the Windows binaries, i.e. the Visual C++ one, is the most compact of all.
+ *
+ * So the solution I finally adopted does not use virtual tables. Instead I use inline 
+ * non virtual methods that dereference the method pointer themselves and perform the call.
+ *
+ * Let's take Direct3D as an example:
+ *
+ *    #define ICOM_INTERFACE IDirect3D
+ *    ICOM_BEGIN(IDirect3D,IUnknown)
+ *        ICOM_METHOD1(HRESULT,Initialize,    REFIID,);
+ *        ICOM_METHOD2(HRESULT,EnumDevices,   LPD3DENUMDEVICESCALLBACK,, LPVOID,);
+ *        ICOM_METHOD2(HRESULT,CreateLight,   LPDIRECT3DLIGHT*,, IUnknown*,);
+ *        ICOM_METHOD2(HRESULT,CreateMaterial,LPDIRECT3DMATERIAL*,, IUnknown*,);
+ *        ICOM_METHOD2(HRESULT,CreateViewport,LPDIRECT3DVIEWPORT*,, IUnknown*,);
+ *        ICOM_METHOD2(HRESULT,FindDevice,    LPD3DFINDDEVICESEARCH,, LPD3DFINDDEVICERESULT,);
+ *    ICOM_END(IDirect3D)
+ *    #undef ICOM_INTERFACE
+ *
+ *    #if !defined(__cplusplus) || defined(CINTERFACE)
+ *    // *** IUnknown methods *** //
+ *    #define IDirect3D_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+ *    #define IDirect3D_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+ *    #define IDirect3D_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+ *    // *** IDirect3D methods *** //
+ *    #define IDirect3D_Initialize(p,a)       ICOM_CALL1(Initialize,p,a)
+ *    #define IDirect3D_EnumDevices(p,a,b)    ICOM_CALL2(EnumDevice,p,a,b)
+ *    #define IDirect3D_CreateLight(p,a,b)    ICOM_CALL2(CreateLight,p,a,b)
+ *    #define IDirect3D_CreateMaterial(p,a,b) ICOM_CALL2(CreateMaterial,p,a,b)
+ *    #define IDirect3D_CreateViewport(p,a,b) ICOM_CALL2(CreateViewport,p,a,b)
+ *    #define IDirect3D_FindDevice(p,a,b)     ICOM_CALL2(FindDevice,p,a,b)
+ *    #endif
+ *
+ * Comments:
+ *  - The ICOM_INTERFACE is used in the ICOM_METHOD macros for the 'this' pointer and to cast 
+ *    pointers. Defining this macro here saves us the trouble of having to repeat the interface 
+ *    name everywhere. Note haowever that because of the way macros work a macro like ICOM_METHOD1 
+ *    cannot use 'ICOM_INTERFACE##_VTABLE' because this would give 'ICOM_INTERFACE_VTABLE' and not 
+ *    'IDirect3D_VTABLE'.
+ *  - ICOM_BEGIN and ICOM_END are responsible for generating whatever structure is appropriate for 
+ *    representing the interface in the current language. In C this is a couple of structs in C++ 
+ *    it's a class. The first parameter is the interface name and the second one is the interface 
+ *    we inherit from. The reason why you have to repeat the interface name is because that's the 
+ *    only way these macro can successfully output "IDirect3D_VTABLE'. Trying to use ICOM_INTERFACE 
+ *    would, as in ICOM_METHOD, only yield 'ICOM_INTERFACE_VTABLE'.
+ *  - With the way ICOM_BEGIN works you don't have to repeat the definitions of the methods of the 
+ *    parent interface. They are automatically inherited both in C and in C++.
+ *  - In C++ the ICOM_METHOD macros generate a function prototype and a call to a function pointer 
+ *    method. This means using once 't1 p1, t2 p2, ...' and once 'p1, p2' without the types. The 
+ *    only way I found to handle this is to have one ICOM_METHOD macro per number of parameters and 
+ *    to have it take only the type information (with const if necessary) as parameters.
+ *    The 'undef ICOM_INTERFACE' is here to remind you that using ICOM_INTERFACE in the following 
+ *    macros will not work. This time it's because the ICOM_CALL macro expansion is done only once 
+ *    the 'IDirect3D_Xxx' macro is expanded. And by that time ICOM_INTERFACE will be long gone 
+ *    anyway.
+ *  - You may have noticed the double commas after each parameter type. This allows you to put the 
+ *    name of that parameter which I think is good for documentation. It is not required and since 
+ *    I did not know what to put there for this example (I could only find doc about IDirect3D2), 
+ *    I left them blank.
+ *  - Finally the set of 'IDirect3D_Xxx' macros is a standard set of macros defined to ease access 
+ *    to the interface methods in C. Unfortunately I don't see any way to avoid having to duplicate 
+ *    the inherited method definitions there. We must use ICOM_ICALL to invoke inherited methods, 
+ *    because in C we have to cast the virtual table pointer, and we should use the ICOM_CALL 
+ *    method in the other cases. This time I could have used a trick to use only one macro whatever 
+ *    the number of parameters but I prefered to have it work the same way as above.
+ *  - You probably have noticed that we don't define the fields we need to actually implement this 
+ *    interface: reference count, pointer to other resources and miscellaneous fields. That's 
+ *    because it's not needed, and the user will anyway only manipulate pointers to this structure
+ *    so he does not need to know its real size. Of course on the implementation side we have the 
+ *    real definition of the interface structure and they should match what the macros yield in 
+ *    each language (or conversely).
+ *
+ *
+ * In C this gives:
+ *    typedef struct IDirect3D_VTABLE IDirect3D_VTABLE;
+ *    struct IDirect3D {
+ *        IDirect3D_VTABLE* lpvtbl;
+ *    };
+ *    struct IDirect3D_VTABLE {
+ *        IUnknown_VTABLE bvt;
+ *        HRESULT (*fnInitialize)(IDirect3D* me, REFIID a);
+ *        HRESULT (*fnEnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b);
+ *        HRESULT (*fnCreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b);
+ *        HRESULT (*fnCreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b);
+ *        HRESULT (*fnCreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b);
+ *        HRESULT (*fnFindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b);
+ *    }; 
+ *
+ *    #if !defined(__cplusplus) || defined(CINTERFACE)
+ *    // *** IUnknown methods *** //
+ *    #define IDirect3D_QueryInterface(p,a,b) ((IUnknown_VTABLE*)(p)->lpvtbl)->fnQueryInterface((IUnknown*)p,a,b)
+ *    #define IDirect3D_AddRef(p)             ((IUnknown_VTABLE*)(p)->lpvtbl)->fnAddRef((IUnknown*)p)
+ *    #define IDirect3D_Release(p)            ((IUnknown_VTABLE*)(p)->lpvtbl)->fnRelease((IUnknown*)p)
+ *    // *** IDirect3D methods *** //
+ *    #define IDirect3D_Initialize(p,a)       (p)->lpvtbl->fnInitialize(p,a)
+ *    #define IDirect3D_EnumDevices(p,a,b)    (p)->lpvtbl->fnEnumDevice(p,a,b)
+ *    #define IDirect3D_CreateLight(p,a,b)    (p)->lpvtbl->fnCreateLight(p,a,b)
+ *    #define IDirect3D_CreateMaterial(p,a,b) (p)->lpvtbl->fnCreateMaterial(p,a,b)
+ *    #define IDirect3D_CreateViewport(p,a,b) (p)->lpvtbl->fnCreateViewport(p,a,b)
+ *    #define IDirect3D_FindDevice(p,a,b)     (p)->lpvtbl->fnFindDevice(p,a,b)
+ *    #endif
+ *
+ * Comments:
+ *  - IDirect3D only contains a pointer to the IDirect3D virtual/jump table. This is the only thing 
+ *    the user needs to know to use the interface. Of course the structure we will define to 
+ *    implement this interface will have more fields but the first one will match this pointer.
+ *  - The code generated by ICOM_BEGIN goes up to the bvt field in the IDirect3D virtual table. 
+ *    This bvt field is what saves us from having to duplicate the inherited method definitions.
+ *    It's a shame that C (gcc) will not allow unnamed structs. If this was possible we could 
+ *    seamlessly inherit and use the parent's interface function pointers.
+ *  - What follows is just a bunch of function pointer definitions generated by the ICOM_METHOD 
+ *    macros. The implementation will fill this jump table with appropriate values in a static 
+ *    variable and initialize the lpvtbl field to point to this variable.
+ *  - The IDirect3D_Xxx macros then just derefence the lpvtbl pointer and use the function pointer 
+ *    corresponding to the macro name. This emulates the behavior of a virtual table and should be 
+ *    about as fast. In the case of inherited methods we have some additional casting to do to 
+ *    because the inherited methods are defined in the bvt field or maybe further imbricated. Since 
+ *    the effect of the bvt field is that we inherit the parent virtual table fields this cast is 
+ *    relatively inocuous. A similar cast must be performed on the interface pointer before the 
+ *    invoked method will accept it. Despite all these casts there is little chance that you call a 
+ *    method on the wrong type of interface because the function names still have to match. But this 
+ *    is the only thing that will make the compilation fail.
+ *
+ *
+ * And in C++ (with gcc's g++):
+ *
+ *    typedef struct IDirect3D: public IUnknown {
+ *        private: HRESULT (*fnInitialize)(IDirect3D* me, REFIID a);
+ *        public: inline HRESULT Initialize(REFIID a) { return ((IDirect3D*)t.lpvtbl)->fnInitialize(this,a); };
+ *        private: HRESULT (*fnEnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b);
+ *        public: inline HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK a, LPVOID b)
+ *            { return ((IDirect3D*)t.lpvtbl)->fnEnumDevices(this,a,b); };
+ *        private: HRESULT (*fnCreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b);
+ *        public: inline HRESULT CreateLight(LPDIRECT3DLIGHT* a, IUnknown* b)
+ *            { return ((IDirect3D*)t.lpvtbl)->fnCreateLight(this,a,b); };
+ *        private: HRESULT (*fnCreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b);
+ *        public: inline HRESULT CreateMaterial(LPDIRECT3DMATERIAL* a, IUnknown* b)
+ *            { return ((IDirect3D*)t.lpvtbl)->fnCreateMaterial(this,a,b); };
+ *        private: HRESULT (*fnCreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b);
+ *        public: inline HRESULT CreateViewport(LPDIRECT3DVIEWPORT* a, IUnknown* b)
+ *            { return ((IDirect3D*)t.lpvtbl)->fnCreateViewport(this,a,b); };
+ *        private:  HRESULT (*fnFindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b);
+ *        public: inline HRESULT FindDevice(LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b)
+ *            { return ((IDirect3D*)t.lpvtbl)->fnFindDevice(this,a,b); };
+ *    }; 
+ *
+ * Comments:
+ *  - In C++ IDirect3D does double duty as both the virtual/jump table and as the interface 
+ *    definition. The reason for this is to avoid having to duplicate the mehod definitions: once 
+ *    to have the function pointers in the jump table and once to have the methods in the interface 
+ *    class. Here one macro can generate both. This means though that the first pointer, t.lpvtbl 
+ *    defined in IUnknown,  must be interpreted as the jump table pointer if we interpret the 
+ *    structure as the the interface class, and as the function pointer to the QueryInterface 
+ *    method, t.fnQueryInterface, if we interpret the structure as the jump table. Fortunately this 
+ *    gymnastic is entirely taken care of in the header of IUnknown.
+ *  - Of course in C++ we use inheritance so that we don't have to duplicate the method definitions. 
+ *  - Since IDirect3D does double duty, each ICOM_METHOD macro defines both a function pointer and 
+ *    a non-vritual inline method which dereferences it and calls it. This way this method behaves 
+ *    just like a virtual method but does not create a true C++ virtual table which would break the 
+ *    structure layout. If you look at the implementation of these methods you'll notice that they 
+ *    would not work for void functions. We have to return something and fortunately this seems to 
+ *    be what all the COM methods do (otherwise we would need another set of macros).
+ *  - Note how the ICOM_METHOD generates both function prototypes mixing types and formal parameter 
+ *    names and the method invocation using only the formal parameter name. This is the reason why 
+ *    we need different macros to handle different numbers of parameters.
+ *  - Finally there is no IDirect3D_Xxx macro. These are not needed in C++ unless the CINTERFACE 
+ *    macro is defined in which case we would not be here.
+ *
+ *
+ * Implementing a COM interface.
+ *
+ * This continues the above example.I assume the implementation is in C but it would probably 
+ * be similar in C++.
+ *
+ *    typedef struct _IDirect3D {
+ *        void* lpvtbl;
+ *        // ...
+ *
+ *    } _IDirect3D;
+ *
+ *    static ICOM_VTABLE(IDirect3D) d3dvt;
+ *
+ *    // implement the IDirect3D methods here
+ *
+ *    int IDirect3D_fnQueryInterface(LPUNKNOWN me)
+ *    {
+ *        ICOM_THIS(IDirect3D,me);
+ *        // ...
+ *    }
+ *
+ *    // ...
+ *
+ *    static ICOM_VTABLE(IDirect3D) d3dvt = {
+ *        {
+ *            IDirect3D_fnQueryInterface,
+ *            IUnknown_fnAdd,
+ *            IUnknown_fnAdd2
+ *        },
+ *        IDirect3D_fnInitialize,
+ *        IDirect3D_fnSetWidth
+ *    };
+ *
+ * Comments:
+ *  - We first define what the interface really contains. This is th e_IDirect3D structure. The 
+ *    first field must of course be the virtual table pointer. Everything else is free.
+ *  - Then we predeclare our static virtual table variable, we will need its address in some 
+ *    methods to initialize the virtual table pointer of the returned interface objects.
+ *  - Then we implement the interface methods. To match what has been declared in the header file 
+ *    they must take a pointer to a IDirect3D structure so we must cast it to an _IDirect3D so that 
+ *    we can manipulate the fields. This is performed by the ICOM_THIS macro.
+ *  - Finally we initialize the virtual table. The inherited methods must be in curly brackets to 
+ *    match the parent interface's virtual table definition.
+ */
+
+
+#define ICOM_VTABLE(iface)       iface##_VTABLE
+
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+/* C++ interface */
+
+#define ICOM_BEGIN(iface,ibase) \
+    typedef struct iface: public ibase {
+
+
+#define ICOM_METHOD(ret,xfn) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me); \
+    public: inline ret (CALLBACK xfn)(void) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); };
+
+#define ICOM_METHOD1(ret,xfn,ta,na) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a); \
+    public: inline ret (CALLBACK xfn)(ta a) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); };
+
+#define ICOM_METHOD2(ret,xfn,ta,na,tb,nb) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); };
+
+#define ICOM_METHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); };
+
+#define ICOM_METHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); };
+
+#define ICOM_METHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); };
+
+#define ICOM_METHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); };
+
+#define ICOM_METHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); };
+
+
+#define ICOM_CMETHOD(ret,xfn) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me); \
+    public: inline ret (CALLBACK xfn)(void) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); };
+
+#define ICOM_CMETHOD1(ret,xfn,ta,na) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a); \
+    public: inline ret (CALLBACK xfn)(ta a) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); };
+
+#define ICOM_CMETHOD2(ret,xfn,ta,na,tb,nb) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); };
+
+#define ICOM_CMETHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); };
+
+#define ICOM_CMETHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); };
+
+#define ICOM_CMETHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); };
+
+#define ICOM_CMETHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); };
+
+#define ICOM_CMETHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \
+    public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); };
+
+
+#define ICOM_VMETHOD(xfn) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me); \
+    public: inline void (CALLBACK xfn)(void) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); };
+
+#define ICOM_VMETHOD1(xfn,ta,na) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a); \
+    public: inline void (CALLBACK xfn)(ta a) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); };
+
+#define ICOM_VMETHOD2(xfn,ta,na,tb,nb) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b); \
+    public: inline void (CALLBACK xfn)(ta a,tb b) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); };
+
+#define ICOM_VMETHOD3(xfn,ta,na,tb,nb,tc,nc) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); };
+
+#define ICOM_VMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); };
+
+#define ICOM_VMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); };
+
+#define ICOM_VMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); };
+
+#define ICOM_VMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); };
+
+
+#define ICOM_CVMETHOD(xfn) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me); \
+    public: inline void (CALLBACK xfn)(void) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); };
+
+#define ICOM_CVMETHOD1(xfn,ta,na) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a); \
+    public: inline void (CALLBACK xfn)(ta a) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); };
+
+#define ICOM_CVMETHOD2(xfn,ta,na,tb,nb) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b); \
+    public: inline void (CALLBACK xfn)(ta a,tb b) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); };
+
+#define ICOM_CVMETHOD3(xfn,ta,na,tb,nb,tc,nc) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); };
+
+#define ICOM_CVMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); };
+
+#define ICOM_CVMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); };
+
+#define ICOM_CVMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); };
+
+#define ICOM_CVMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \
+    public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); };
+
+
+#define ICOM_END(iface) \
+    };
+
+#define ICOM_ICALL(ibase, xfn, p)                this_is_a_syntax_error
+#define ICOM_ICALL1(ibase, xfn, p,a)             this_is_a_syntax_error
+#define ICOM_ICALL2(ibase, xfn, p,a,b)           this_is_a_syntax_error
+#define ICOM_ICALL3(ibase, xfn, p,a,b,c)         this_is_a_syntax_error
+#define ICOM_ICALL4(ibase, xfn, p,a,b,c,d)       this_is_a_syntax_error
+#define ICOM_ICALL5(ibase, xfn, p,a,b,c,d,e)     this_is_a_syntax_error
+#define ICOM_ICALL6(ibase, xfn, p,a,b,c,d,e,f)   this_is_a_syntax_error
+#define ICOM_ICALL7(ibase, xfn, p,a,b,c,d,e,f,g) this_is_a_syntax_error
+
+#define ICOM_CALL(xfn, p)                        this_is_a_syntax_error
+#define ICOM_CALL1(xfn, p,a)                     this_is_a_syntax_error
+#define ICOM_CALL2(xfn, p,a,b)                   this_is_a_syntax_error
+#define ICOM_CALL3(xfn, p,a,b,c)                 this_is_a_syntax_error
+#define ICOM_CALL4(xfn, p,a,b,c,d)               this_is_a_syntax_error
+#define ICOM_CALL5(xfn, p,a,b,c,d,e)             this_is_a_syntax_error
+#define ICOM_CALL6(xfn, p,a,b,c,d,e,f)           this_is_a_syntax_error
+#define ICOM_CALL7(xfn, p,a,b,c,d,e,f,g)         this_is_a_syntax_error
+
+
+#else
+/* C interface */
+
+
+#define ICOM_BEGIN(iface,ibase) \
+    typedef struct ICOM_VTABLE(iface) ICOM_VTABLE(iface); \
+    struct iface { \
+        const ICOM_VTABLE(iface)* lpvtbl; \
+    }; \
+    struct ICOM_VTABLE(iface) { \
+        ICOM_VTABLE(ibase) bvt;
+
+
+#define ICOM_METHOD(ret,xfn) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me);
+
+#define ICOM_METHOD1(ret,xfn,ta,na) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a);
+
+#define ICOM_METHOD2(ret,xfn,ta,na,tb,nb) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b);
+
+#define ICOM_METHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c);
+
+#define ICOM_METHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d);
+
+#define ICOM_METHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e);
+
+#define ICOM_METHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f);
+
+#define ICOM_METHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g);
+
+
+#define ICOM_CMETHOD(ret,xfn) \
+        ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me);
+
+#define ICOM_CMETHOD1(ret,xfn,ta,na) \
+    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a);
+
+#define ICOM_CMETHOD2(ret,xfn,ta,na,tb,nb) \
+    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b);
+
+#define ICOM_CMETHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \
+    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c);
+
+#define ICOM_CMETHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d);
+
+#define ICOM_CMETHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e);
+
+#define ICOM_CMETHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f);
+
+#define ICOM_CMETHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g);
+
+
+#define ICOM_VMETHOD(xfn) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me);
+
+#define ICOM_VMETHOD1(xfn,ta,na) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a);
+
+#define ICOM_VMETHOD2(xfn,ta,na,tb,nb) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b);
+
+#define ICOM_VMETHOD3(xfn,ta,na,tb,nb,tc,nc) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c);
+
+#define ICOM_VMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d);
+
+#define ICOM_VMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e);
+
+#define ICOM_VMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f);
+
+#define ICOM_VMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g);
+
+
+#define ICOM_CVMETHOD(xfn) \
+        void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me);
+
+#define ICOM_CVMETHOD1(xfn,ta,na) \
+    void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a);
+
+#define ICOM_CVMETHOD2(xfn,ta,na,tb,nb) \
+    void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b);
+
+#define ICOM_CVMETHOD3(xfn,ta,na,tb,nb,tc,nc) \
+    void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c);
+
+#define ICOM_CVMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \
+    void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d);
+
+#define ICOM_CVMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \
+    void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e);
+
+#define ICOM_CVMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \
+    void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f);
+
+#define ICOM_CVMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \
+    void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g);
+
+
+#define ICOM_END(iface) \
+    };
+
+#define ICOM_ICALL(ibase, xfn, p)  ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p)
+#define ICOM_ICALL1(ibase, xfn, p,a) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a)
+#define ICOM_ICALL2(ibase, xfn, p,a,b) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b)
+#define ICOM_ICALL3(ibase, xfn, p,a,b,c) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c)
+#define ICOM_ICALL4(ibase, xfn, p,a,b,c,d) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d)
+#define ICOM_ICALL5(ibase, xfn, p,a,b,c,d,e) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d,e)
+#define ICOM_ICALL6(ibase, xfn, p,a,b,c,d,e,f) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d,e,f)
+#define ICOM_ICALL7(ibase, xfn, p,a,b,c,d,e,f,g) ((ICOM_VTABLE(ibase)*)(p)->lpvtbl)->fn##xfn((ibase*)p,a,b,c,d,e,f,g)
+
+#define ICOM_CALL(xfn, p)  (p)->lpvtbl->fn##xfn(p)
+#define ICOM_CALL1(xfn, p,a) (p)->lpvtbl->fn##xfn(p,a)
+#define ICOM_CALL2(xfn, p,a,b) (p)->lpvtbl->fn##xfn(p,a,b)
+#define ICOM_CALL3(xfn, p,a,b,c) (p)->lpvtbl->fn##xfn(p,a,b,c)
+#define ICOM_CALL4(xfn, p,a,b,c,d) (p)->lpvtbl->fn##xfn(p,a,b,c,d)
+#define ICOM_CALL5(xfn, p,a,b,c,d,e) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e)
+#define ICOM_CALL6(xfn, p,a,b,c,d,e,f) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f)
+#define ICOM_CALL7(xfn, p,a,b,c,d,e,f,g) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f,g)
+
+
+#define ICOM_THIS(iface,me)          struct _##iface* this=(struct _##iface*)me
+#define ICOM_CTHIS(iface,me)         const _##iface* this=(const _##iface*)me
+
+#endif
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IClassFactory,	0x00000001L, 0, 0);
+typedef struct IClassFactory IClassFactory, *LPCLASSFACTORY;
+
+DEFINE_OLEGUID(IID_IMalloc,		0x00000002L, 0, 0);
+typedef struct IMalloc16 IMalloc16,*LPMALLOC16;
+typedef struct IMalloc32 IMalloc32,*LPMALLOC32;
+DECL_WINELIB_TYPE(IMalloc)
+DECL_WINELIB_TYPE(LPMALLOC)
+
+DEFINE_OLEGUID(IID_IUnknown,		0x00000000L, 0, 0);
+typedef struct IUnknown IUnknown, *LPUNKNOWN;
+
+
+/*****************************************************************************
+ * IUnknown interface
+ */
+#define ICOM_INTERFACE IUnknown
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IUnknown {
+    union {
+        const void* lpvtbl;
+        HRESULT (CALLBACK *fnQueryInterface)(IUnknown* me, REFIID riid, LPVOID* ppvObj);
+    } t;
+    inline int QueryInterface(REFIID a, LPVOID* b) { return ((IUnknown*)t.lpvtbl)->t.fnQueryInterface(this,a,b); }
+#else
+typedef struct ICOM_VTABLE(IUnknown) ICOM_VTABLE(IUnknown);
+struct IUnknown {
+    ICOM_VTABLE(IUnknown)* lpvtbl;
+};
+struct ICOM_VTABLE(IUnknown) {
+    ICOM_METHOD2(HRESULT,QueryInterface,REFIID,riid, LPVOID*,ppvObj)
+#endif
+
+    ICOM_METHOD (ULONG,AddRef)
+    ICOM_METHOD (ULONG,Release)
+#ifdef __WRC__
+}; /* FIXME: WRC does not support function macros and it is ICOM_END that is supposed to close the class */
+#else
+ICOM_END(IUnknown)
+#endif
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IUnknown_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IUnknown_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IUnknown_Release(p)            ICOM_CALL (Release,p)
+#endif
+
+
+/*****************************************************************************
+ * IClassFactory interface
+ */
+#define ICOM_INTERFACE IClassFactory
+ICOM_BEGIN(IClassFactory,IUnknown)
+    ICOM_METHOD3(HRESULT,CreateInstance, LPUNKNOWN,pUnkOuter, REFIID,riid, LPVOID*,ppvObject);
+    ICOM_METHOD1(HRESULT,LockServer,     BOOL32,fLock);
+ICOM_END(IClassFactory)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IClassFactory_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IClassFactory_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IClassFactory_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IClassFactory methods ***/
+#define IClassFactory_CreateInstance(p,a,b,c) ICOM_CALL3(CreateInstance,p,a,b,c)
+#define IClassFactory_LockServer(p,a)         ICOM_CALL1(LockServer,p,a)
+#endif
+
+
+/*****************************************************************************
+ * IMalloc interface
+ */
+#define ICOM_INTERFACE IMalloc16
+ICOM_BEGIN(IMalloc16,IUnknown)
+    ICOM_METHOD1 (LPVOID,Alloc,       DWORD,cb);
+    ICOM_METHOD2 (LPVOID,Realloc,     LPVOID,pv, DWORD,cb);
+    ICOM_VMETHOD1(       Free,        LPVOID,pv);
+    ICOM_CMETHOD1(DWORD, GetSize,     LPVOID,pv);
+    ICOM_CMETHOD1(INT16, DidAlloc,    LPVOID,pv);
+    ICOM_METHOD  (LPVOID,HeapMinimize);
+ICOM_END(IMalloc16)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IMalloc16_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IMalloc16_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IMalloc16_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IMalloc16 methods ***/
+#define IMalloc16_Alloc(p,a)      ICOM_CALL1(Alloc,p,a)
+#define IMalloc16_Realloc(p,a,b)  ICOM_CALL2(Realloc,p,a,b)
+#define IMalloc16_Free(p,a)       ICOM_CALL1(Free,p,a)
+#define IMalloc16_GetSize(p,a)    ICOM_CALL1(GetSize,p,a)
+#define IMalloc16_DidAlloc(p,a)   ICOM_CALL1(DidAlloc,p,a)
+#define IMalloc16_HeapMinimize(p) ICOM_CALL (HeapMinimize,p)
+#endif
+
+
+#define ICOM_INTERFACE IMalloc32
+ICOM_BEGIN(IMalloc32,IUnknown)
+    ICOM_METHOD1 (LPVOID,Alloc,       DWORD,cb);
+    ICOM_METHOD2 (LPVOID,Realloc,     LPVOID,pv, DWORD,cb);
+    ICOM_VMETHOD1(       Free,        LPVOID,pv);
+    ICOM_CMETHOD1(DWORD, GetSize,     LPVOID,pv);
+    ICOM_CMETHOD1(INT32, DidAlloc,    LPVOID,pv);
+    ICOM_METHOD  (LPVOID,HeapMinimize);
+ICOM_END(IMalloc32)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IMalloc32_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IMalloc32_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IMalloc32_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IMalloc32 methods ***/
+#define IMalloc32_Alloc(p,a)      ICOM_CALL1(Alloc,p,a)
+#define IMalloc32_Realloc(p,a,b)  ICOM_CALL2(Realloc,p,a,b)
+#define IMalloc32_Free(p,a)       ICOM_CALL1(Free,p,a)
+#define IMalloc32_GetSize(p,a)    ICOM_CALL1(GetSize,p,a)
+#define IMalloc32_DidAlloc(p,a)   ICOM_CALL1(DidAlloc,p,a)
+#define IMalloc32_HeapMinimize(p) ICOM_CALL (HeapMinimize,p)
+
+#ifndef __WINE__
+/* Duplicated for WINELIB */
+/*** IUnknown methods ***/
+#define IMalloc_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IMalloc_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IMalloc_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IMalloc methods ***/
+#define IMalloc_Alloc(p,a)      ICOM_CALL1(Alloc,p,a)
+#define IMalloc_Realloc(p,a,b)  ICOM_CALL2(Realloc,p,a,b)
+#define IMalloc_Free(p,a)       ICOM_CALL1(Free,p,a)
+#define IMalloc_GetSize(p,a)    ICOM_CALL1(GetSize,p,a)
+#define IMalloc_DidAlloc(p,a)   ICOM_CALL1(DidAlloc,p,a)
+#define IMalloc_HeapMinimize(p) ICOM_CALL (HeapMinimize,p)
+#endif
+#endif
+
+
+HRESULT WINAPI CoCreateStandardMalloc16(DWORD dwMemContext, LPMALLOC16* lpMalloc);
+#define CoCreateStandardMalloc WINELIB_NAME(CoCreateStandardMalloc)
+
+HRESULT WINAPI CoGetMalloc16(DWORD dwMemContext,LPMALLOC16* lpMalloc);
+HRESULT WINAPI CoGetMalloc32(DWORD dwMemContext,LPMALLOC32* lpMalloc);
+#define CoGetMalloc WINELIB_NAME(CoGetMalloc)
+
+
+#endif /* __WINE_WINE_OBJ_BASE_H */
diff --git a/include/wine/obj_channel.h b/include/wine/obj_channel.h
new file mode 100644
index 0000000..e6372c4
--- /dev/null
+++ b/include/wine/obj_channel.h
@@ -0,0 +1,60 @@
+/*
+ * Defines undocumented Microsoft COM interfaces and APIs seemingly related to some 'channel' notion.
+ *
+ * Depends on 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_CHANNEL_H
+#define __WINE_WINE_OBJ_CHANNEL_H
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID   (IID_IChannelHook,	0x1008c4a0L, 0x7613, 0x11cf, 0x9a, 0xf1, 0x00, 0x20, 0xaf, 0x6e, 0x72, 0xf4);
+typedef struct IChannelHook IChannelHook,*LPCHANNELHOOK;
+
+DEFINE_GUID   (IID_IPSFactoryBuffer,	0xd5f569d0L, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a);
+typedef struct IPSFactoryBuffer IPSFactoryBuffer,*LPPSFACTORYBUFFER;
+
+DEFINE_GUID   (IID_IRpcChannelBuffer,	0xd5f56b60L, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a);
+typedef struct IRpcChannelBuffer IRpcChannelBuffer,*LPRPCCHANNELBUFFER;
+
+DEFINE_GUID   (IID_IRpcProxyBuffer,	0xd5f56a34L, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a);
+typedef struct IRpcProxyBuffer IRpcProxyBuffer,*LPRPCPROXYBUFFER;
+
+DEFINE_GUID   (IID_IRpcStubBuffer,	0xd5f56afcL, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a);
+typedef struct IRpcStubBuffer IRpcStubBuffer,*LPRPCSTUBBUFFER;
+
+
+/*****************************************************************************
+ * IChannelHook interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IPSFactoryBuffer interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IRpcChannelBuffer interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IRpcProxyBuffer interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IRpcStubBuffer interface
+ */
+/* FIXME: not implemented */
+
+
+#endif /* __WINE_WINE_OBJ_CHANNEL_H */
diff --git a/include/wine/obj_clientserver.h b/include/wine/obj_clientserver.h
new file mode 100644
index 0000000..81aa7c9
--- /dev/null
+++ b/include/wine/obj_clientserver.h
@@ -0,0 +1,57 @@
+/*
+ * Defines the COM interfaces and APIs related to client/server aspects.
+ *
+ * Depends on 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_CLIENTSERVER_H
+#define __WINE_WINE_OBJ_CLIENTSERVER_H
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IClientSecurity,	0x0000013dL, 0, 0);
+typedef struct IClientSecurity IClientSecurity,*LPCLIENTSECURITY;
+
+DEFINE_OLEGUID(IID_IExternalConnection,	0x00000019L, 0, 0);
+typedef struct IExternalConnection IExternalConnection,*LPEXTERNALCONNECTION;
+
+DEFINE_OLEGUID(IID_IMessageFilter,	0x00000016L, 0, 0);
+typedef struct IMessageFilter IMessageFilter,*LPMESSAGEFILTER;
+
+DEFINE_OLEGUID(IID_IServerSecurity,	0x0000013eL, 0, 0);
+typedef struct IServerSecurity IServerSecurity,*LPSERVERSECURITY;
+
+
+/*****************************************************************************
+ * IClientSecurity interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IExternalConnection interface
+ */
+/* FIXME: not implemented */
+
+HRESULT WINAPI CoDisconnectObject(LPUNKNOWN lpUnk, DWORD reserved);
+
+
+/*****************************************************************************
+ * IMessageFilter interface
+ */
+/* FIXME: not implemented */
+
+HRESULT WINAPI CoRegisterMessageFilter16(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
+HRESULT WINAPI CoRegisterMessageFilter32(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
+#define CoRegisterMessageFilter WINELIB_NAME(CoRegisterMessageFilter)
+
+
+/*****************************************************************************
+ * IServerSecurity interface
+ */
+/* FIXME: not implemented */
+
+
+#endif /* __WINE_WINE_OBJ_CLIENTSERVER_H */
diff --git a/include/wine/obj_dataobject.h b/include/wine/obj_dataobject.h
new file mode 100644
index 0000000..4bc3bac
--- /dev/null
+++ b/include/wine/obj_dataobject.h
@@ -0,0 +1,192 @@
+/*
+ * Defines the COM interfaces and APIs related to IDataObject.
+ *
+ * Depends on 'obj_moniker.h', 'obj_storage.h' and 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_DATAOBJECT_H
+#define __WINE_WINE_OBJ_DATAOBJECT_H
+
+
+/*****************************************************************************
+ * Predeclare the structures
+ */
+typedef struct DVTARGETDEVICE32 DVTARGETDEVICE32, *LPDVTARGETDEVICE32;
+DECL_WINELIB_TYPE(DVTARGETDEVICE)
+DECL_WINELIB_TYPE(LPDVTARGETDEVICE)
+
+typedef struct FORMATETC32 FORMATETC32, *LPFORMATETC32;
+DECL_WINELIB_TYPE(FORMATETC)
+DECL_WINELIB_TYPE(LPFORMATETC)
+
+typedef struct STGMEDIUM32 STGMEDIUM32, *LPSTGMEDIUM32;
+DECL_WINELIB_TYPE(STGMEDIUM)
+DECL_WINELIB_TYPE(LPSTGMEDIUM)
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IAdviseSink,		0x0000010fL, 0, 0);
+typedef struct IAdviseSink IAdviseSink,*LPADVISESINK;
+
+DEFINE_OLEGUID(IID_IAdviseSink2,	0x00000125L, 0, 0);
+typedef struct IAdviseSink2 IAdviseSink2,*LPADVISESINK2;
+
+DEFINE_OLEGUID(IID_IDataAdviseHolder,	0x00000110L, 0, 0);
+typedef struct IDataAdviseHolder IDataAdviseHolder,*LPDATAADVISEHOLDER;
+
+DEFINE_OLEGUID(IID_IDataObject,		0x0000010EL, 0, 0);
+typedef struct IDataObject IDataObject,*LPDATAOBJECT;
+
+DEFINE_OLEGUID(IID_IEnumFORMATETC,	0x00000103L, 0, 0);
+typedef struct IEnumFORMATETC IEnumFORMATETC,*LPENUMFORMATETC;
+
+DEFINE_OLEGUID(IID_IEnumSTATDATA,	0x00000105L, 0, 0);
+typedef struct IEnumSTATDATA IEnumSTATDATA,*LPENUMSTATDATA;
+
+
+/*****************************************************************************
+ * DVTARGETDEVICE structure
+ */
+struct DVTARGETDEVICE32
+{
+    DWORD tdSize;
+    WORD tdDriverNameOffset;
+    WORD tdDeviceNameOffset;
+    WORD tdPortNameOffset;
+    WORD tdExtDevmodeOffset;
+    BYTE tdData[1];
+};
+
+
+/*****************************************************************************
+ * FORMATETC structure
+ */
+/* wished data format */
+struct FORMATETC32
+{
+    CLIPFORMAT32 cfFormat;
+    DVTARGETDEVICE32* ptd;
+    DWORD dwAspect;
+    LONG lindex;
+    DWORD tymed;
+};
+
+
+/*****************************************************************************
+ * STGMEDIUM structure
+ */
+typedef enum tagTYMED
+{	TYMED_HGLOBAL   = 1,
+	TYMED_FILE      = 2,
+	TYMED_ISTREAM   = 4,
+	TYMED_ISTORAGE  = 8,
+	TYMED_GDI       = 16,
+	TYMED_MFPICT    = 32,
+	TYMED_ENHMF     = 64,
+	TYMED_NULL      = 0
+} TYMED;
+  
+/* dataobject as answer to a request */
+struct STGMEDIUM32
+{
+    DWORD tymed;
+    union {
+        HBITMAP32 hBitmap;
+        HMETAFILEPICT32 hMetaFilePict;
+        HENHMETAFILE32 hEnhMetaFile;
+        HGLOBAL32 hGlobal;
+        LPOLESTR32 lpszFileName;
+        IStream32 *pstm;
+        IStorage32 *pstg;
+    } u;
+    IUnknown *pUnkForRelease;
+};   
+
+
+/*****************************************************************************
+ * IAdviseSink interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IAdviseSink2 interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IDataAdviseHolder interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IDataObject interface
+ */
+#define ICOM_INTERFACE IDataObject
+ICOM_BEGIN(IDataObject,IUnknown)
+    ICOM_METHOD2(HRESULT,GetData,               LPFORMATETC32,pformatetcIn, STGMEDIUM32*,pmedium);
+    ICOM_METHOD2(HRESULT,GetDataHere,           LPFORMATETC32,pformatetc, STGMEDIUM32*,pmedium);
+    ICOM_METHOD1(HRESULT,QueryGetData,          LPFORMATETC32,pformatetc);
+    ICOM_METHOD2(HRESULT,GetCanonicalFormatEtc, LPFORMATETC32,pformatectIn, LPFORMATETC32,pformatetcOut);
+    ICOM_METHOD3(HRESULT,SetData,               LPFORMATETC32,pformatetc, STGMEDIUM32*,pmedium, BOOL32,fRelease);
+    ICOM_METHOD2(HRESULT,EnumFormatEtc,         DWORD,dwDirection, IEnumFORMATETC**,ppenumFormatEtc);
+    ICOM_METHOD4(HRESULT,DAdvise,               LPFORMATETC32*,pformatetc, DWORD,advf, IAdviseSink*,pAdvSink, DWORD*,pdwConnection);
+    ICOM_METHOD1(HRESULT,DUnadvise,             DWORD,dwConnection);
+    ICOM_METHOD1(HRESULT,EnumDAdvise,           IEnumSTATDATA**,ppenumAdvise);
+ICOM_END(IDataObject)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDataObject_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IDataObject_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IDataObject_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IDataObject methods ***/
+#define IDataObject_GetData(p,a,b)               ICOM_CALL2(GetData,p,a,b)
+#define IDataObject_GetDataHere(p,a,b)           ICOM_CALL2(GetDataHere,p,a,b)
+#define IDataObject_QueryGetData(p,a)            ICOM_CALL1(QueryGetData,p,a)
+#define IDataObject_GetCanonicalFormatEtc(p,a,b) ICOM_CALL2(GetCanonicalFormatEtc,p,a,b)
+#define IDataObject_SetData(p,a,b,c)             ICOM_CALL3(SetData,p,a,b,c)
+#define IDataObject_EnumFormatEtc(p,a,b)         ICOM_CALL2(EnumFormatEtc,p,a,b)
+#define IDataObject_DAdvise(p,a,b,c,d)           ICOM_CALL4(DAdvise,p,a,b,c,d)
+#define IDataObject_DUnadvise(p,a)               ICOM_CALL1(DUnadvise,p,a)
+#define IDataObject_EnumDAdvise(p,a)             ICOM_CALL1(EnumDAdvise,p,a)
+#endif
+
+
+/*****************************************************************************
+ * IEnumFORMATETC interface
+ */
+#define ICOM_INTERFACE IEnumFORMATETC
+ICOM_BEGIN(IEnumFORMATETC,IUnknown)
+    ICOM_METHOD3(HRESULT,Next,  ULONG,celt, FORMATETC32*,rgelt, ULONG*,pceltFethed);
+    ICOM_METHOD1(HRESULT,Skip,  ULONG,celt);
+    ICOM_METHOD (HRESULT,Reset);
+    ICOM_METHOD1(HRESULT,Clone, IEnumFORMATETC**,ppenum);
+ICOM_END(IEnumFORMATETC)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IEnumFORMATETC_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IEnumFORMATETC_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IEnumFORMATETC_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IEnumFORMATETC methods ***/
+#define IEnumFORMATETC_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
+#define IEnumFORMATETC_Skip(p,a)     ICOM_CALL1(Skip,p,a)
+#define IEnumFORMATETC_Reset(p)      ICOM_CALL (Reset,p)
+#define IEnumFORMATETC_Clone(p,a)    ICOM_CALL1(Clone,p,a)
+#endif
+
+
+/*****************************************************************************
+ * IEnumSTATDATA interface
+ */
+/* FIXME: not implemented */
+
+
+#endif /* __WINE_WINE_OBJ_DATAOBJECT_H */
diff --git a/include/wine/obj_marshal.h b/include/wine/obj_marshal.h
new file mode 100644
index 0000000..92fc243
--- /dev/null
+++ b/include/wine/obj_marshal.h
@@ -0,0 +1,34 @@
+/*
+ * Defines the COM interfaces and APIs that allow an interface to 
+ * specify a custom marshaling for its objects.
+ *
+ * Depends on 'obj_storage.h' and 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_MARSHAL_H
+#define __WINE_WINE_OBJ_MARSHAL_H
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IMarshal,		0x00000003L, 0, 0);
+typedef struct IMarshal IMarshal,*LPMARSHAL;
+
+DEFINE_OLEGUID(IID_IStdMarshalInfo,	0x00000018L, 0, 0);
+typedef struct IStdMarshalInfo IStdMarshalInfo,*LPSTDMARSHALINFO;
+
+
+/*****************************************************************************
+ * IMarshal interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IStdMarshalInfo interface
+ */
+/* FIXME: not implemented */
+
+
+#endif /* __WINE_WINE_OBJ_MARSHAL_H */
diff --git a/include/wine/obj_misc.h b/include/wine/obj_misc.h
new file mode 100644
index 0000000..98dc1e4
--- /dev/null
+++ b/include/wine/obj_misc.h
@@ -0,0 +1,54 @@
+/*
+ * Defines miscellaneous COM interfaces and APIs defined in objidl.h.
+ * These did not really fit into the other categories, whould have 
+ * required their own specific category or are too rarely used to be 
+ * put in 'obj_base.h'.
+ *
+ * Depends on 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_MISC_H
+#define __WINE_WINE_OBJ_MISC_H
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IEnumString,		0x00000101L, 0, 0);
+typedef struct IEnumString IEnumString,*LPENUMSTRING;
+
+DEFINE_OLEGUID(IID_IEnumUnknown,	0x00000100L, 0, 0);
+typedef struct IEnumUnknown IEnumUnknown,*LPENUMUNKNOWN;
+
+DEFINE_OLEGUID(IID_IMallocSpy,		0x0000001dL, 0, 0);
+typedef struct IMallocSpy IMallocSpy,*LPMALLOCSPY;
+
+DEFINE_OLEGUID(IID_IMultiQI,		0x00000020L, 0, 0);
+typedef struct IMultiQI IMultiQI,*LPMULTIQI;
+
+
+/*****************************************************************************
+ * IEnumString interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IEnumUnknown interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IMallocSpy interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IMultiQI interface
+ */
+/* FIXME: not implemented */
+
+
+#endif /* __WINE_WINE_OBJ_MISC_H */
diff --git a/include/wine/obj_moniker.h b/include/wine/obj_moniker.h
new file mode 100644
index 0000000..194ddd0
--- /dev/null
+++ b/include/wine/obj_moniker.h
@@ -0,0 +1,87 @@
+/*
+ * Defines the COM interfaces and APIs related to the moniker functionality.
+ *
+ * This file depends on 'obj_storage.h' and 'obj_base.h'.
+ */
+
+
+#ifndef __WINE_WINE_OBJ_MONIKER_H
+#define __WINE_WINE_OBJ_MONIKER_H
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IBindCtx,0xe,0,0);
+typedef struct IBindCtx IBindCtx,*LPBINDCTX;
+typedef LPBINDCTX LPBC;
+
+DEFINE_OLEGUID(IID_IClassActivator,	0x00000140L, 0, 0);
+typedef struct IClassActivator IClassActivator,*LPCLASSACTIVATOR;
+
+DEFINE_OLEGUID(IID_IEnumMoniker,	0x00000102L, 0, 0);
+typedef struct IEnumMoniker IEnumMoniker,*LPENUMMONIKER;
+
+DEFINE_OLEGUID(IID_IMoniker,		0x0000000fL, 0, 0);
+typedef struct IMoniker IMoniker,*LPMONIKER;
+
+DEFINE_GUID   (IID_IROTData,		0xf29f6bc0L, 0x5021, 0x11ce, 0xaa, 0x15, 0x00, 0x00, 0x69, 0x01, 0x29, 0x3f);
+typedef struct IROTData IROTData,*LPROTDATA;
+
+DEFINE_OLEGUID(IID_IRunnableObject,	0x00000126L, 0, 0);
+typedef struct IRunnableObject IRunnableObject,*LPRUNNABLEOBJECT;
+
+DEFINE_OLEGUID(IID_IRunningObjectTable,	0x00000010L, 0, 0);
+typedef struct IRunningObjectTable IRunningObjectTable,*LPRUNNINGOBJECTTABLE;
+
+
+/*****************************************************************************
+ * IBindCtx interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IClassActivator interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IEnumMoniker interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IMoniker interface
+ */
+/* FIXME: not implemented */
+
+HRESULT WINAPI CreateFileMoniker16(LPCOLESTR16 lpszPathName,LPMONIKER* ppmk);
+HRESULT WINAPI CreateFileMoniker32(LPCOLESTR32 lpszPathName,LPMONIKER* ppmk);
+#define CreateFileMoniker WINELIB_NAME(CreateFileMoniker)
+
+HRESULT WINAPI CreateItemMoniker32(LPCOLESTR32 lpszDelim,LPCOLESTR32 lpszItem,LPMONIKER* ppmk);
+#define CreateItemMoniker WINELIB_NAME(CreateItemMoniker)
+
+
+/*****************************************************************************
+ * IROTData interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IRunnableObject interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IRunningObjectTable interface
+ */
+/* FIXME: not implemented */
+
+
+#endif /* __WINE_WINE_OBJ_MONIKER_H */
diff --git a/include/wine/obj_propertystorage.h b/include/wine/obj_propertystorage.h
new file mode 100644
index 0000000..837daa1
--- /dev/null
+++ b/include/wine/obj_propertystorage.h
@@ -0,0 +1,52 @@
+/*
+ * Defines the COM interfaces and APIs related to saving properties to file.
+ *
+ * Depends on 'obj_storage.h' and 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_PROPERTYSTORAGE_H
+#define __WINE_WINE_OBJ_PROPERTYSTORAGE_H
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IEnumSTATPROPSETSTG,	0x0000013bL, 0, 0);
+typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG,*LPENUMSTATPROPSETSTG;
+
+DEFINE_OLEGUID(IID_IEnumSTATPROPSTG,	0x00000139L, 0, 0);
+typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG,*LPENUMSTATPROPSTG;
+
+DEFINE_OLEGUID(IID_IPropertySetStorage,	0x0000013aL, 0, 0);
+typedef struct IPropertySetStorage IPropertySetStorage,*LPPROPERTYSETSTORAGE;
+
+DEFINE_OLEGUID(IID_IPropertyStorage,	0x00000138L, 0, 0);
+typedef struct IPropertyStorage IPropertyStorage,*LPPROPERTYSTORAGE;
+
+
+/*****************************************************************************
+ * IEnumSTATPROPSETSTG interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IEnumSTATPROPSTG interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IPropertySetStorage interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IPropertyStorage interface
+ */
+/* FIXME: not implemented */
+
+
+
+#endif /* __WINE_WINE_OBJ_PROPERTYSTORAGE_H */
diff --git a/include/wine/obj_storage.h b/include/wine/obj_storage.h
new file mode 100644
index 0000000..88797d6
--- /dev/null
+++ b/include/wine/obj_storage.h
@@ -0,0 +1,459 @@
+/*
+ * Defines the COM interfaces and APIs related to structured data storage.
+ *
+ * Depends on 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_STORAGE_H
+#define __WINE_WINE_OBJ_STORAGE_H
+
+
+#include "winnt.h"
+
+
+/*****************************************************************************
+ * Predeclare the structures
+ */
+typedef LPOLESTR16 *SNB16;
+typedef LPOLESTR32 *SNB32;
+DECL_WINELIB_TYPE(SNB)
+
+typedef struct STATSTG STATSTG;
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_OLEGUID(IID_IEnumSTATSTG,	0x0000000dL, 0, 0);
+typedef struct IEnumSTATSTG IEnumSTATSTG,*LPENUMSTATSTG;
+
+DEFINE_GUID   (IID_IFillLockBytes,	0x99caf010L, 0x415e, 0x11cf, 0x88, 0x14, 0x00, 0xaa, 0x00, 0xb5, 0x69, 0xf5);
+typedef struct IFillLockBytes IFillLockBytes,*LPFILLLOCKBYTES;
+
+DEFINE_GUID   (IID_ILayoutStorage,	0x0e6d4d90L, 0x6738, 0x11cf, 0x96, 0x08, 0x00, 0xaa, 0x00, 0x68, 0x0d, 0xb4);
+typedef struct ILayoutStorage ILayoutStorage,*LPLAYOUTSTORAGE;
+
+DEFINE_OLEGUID(IID_ILockBytes,		0x0000000aL, 0, 0);
+typedef struct ILockBytes ILockBytes,*LPLOCKBYTES;
+
+DEFINE_OLEGUID(IID_IPersist,		0x0000010cL, 0, 0);
+typedef struct IPersist IPersist,*LPPERSIST;
+
+DEFINE_OLEGUID(IID_IPersistFile,	0x0000010bL, 0, 0);
+typedef struct IPersistFile IPersistFile,*LPPERSISTFILE;
+
+DEFINE_OLEGUID(IID_IPersistStorage,	0x0000010aL, 0, 0);
+typedef struct IPersistStorage IPersistStorage,*LPPERSISTSTORAGE;
+
+DEFINE_OLEGUID(IID_IPersistStream,	0x00000109L, 0, 0);
+typedef struct IPersistStream IPersistStream,*LPPERSISTSTREAM;
+
+DEFINE_GUID   (IID_IProgressNotify,	0xa9d758a0L, 0x4617, 0x11cf, 0x95, 0xfc, 0x00, 0xaa, 0x00, 0x68, 0x0d, 0xb4);
+typedef struct IProgressNotify IProgressNotify,*LPPROGRESSNOTIFY;
+
+DEFINE_OLEGUID(IID_IRootStorage,	0x00000012L, 0, 0);
+typedef struct IRootStorage IRootStorage,*LPROOTSTORAGE;
+
+DEFINE_GUID   (IID_ISequentialStream,	0x0c733a30L, 0x2a1c, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
+typedef struct ISequentialStream ISequentialStream,*LPSEQUENTIALSTREAM;
+
+DEFINE_OLEGUID(IID_IStorage,		0x0000000bL, 0, 0);
+typedef struct IStorage16 IStorage16,*LPSTORAGE16;
+typedef struct IStorage32 IStorage32,*LPSTORAGE32;
+DECL_WINELIB_TYPE(IStorage)
+DECL_WINELIB_TYPE(LPSTORAGE)
+
+DEFINE_OLEGUID(IID_IStream,		0x0000000cL, 0, 0);
+typedef struct IStream16 IStream16,*LPSTREAM16;
+typedef struct IStream32 IStream32,*LPSTREAM32;
+DECL_WINELIB_TYPE(IStream)
+DECL_WINELIB_TYPE(LPSTREAM)
+
+
+/*****************************************************************************
+ * STGM enumeration
+ *
+ * See IStorage and IStream
+ */
+#define STGM_DIRECT		0x00000000
+#define STGM_TRANSACTED		0x00010000
+#define STGM_SIMPLE		0x08000000
+#define STGM_READ		0x00000000
+#define STGM_WRITE		0x00000001
+#define STGM_READWRITE		0x00000002
+#define STGM_SHARE_DENY_NONE	0x00000040
+#define STGM_SHARE_DENY_READ	0x00000030
+#define STGM_SHARE_DENY_WRITE	0x00000020
+#define STGM_SHARE_EXCLUSIVE	0x00000010
+#define STGM_PRIORITY		0x00040000
+#define STGM_DELETEONRELEASE	0x04000000
+#define STGM_CREATE		0x00001000
+#define STGM_CONVERT		0x00020000
+#define STGM_FAILIFTHERE	0x00000000
+#define STGM_NOSCRATCH		0x00100000
+#define STGM_NOSNAPSHOT		0x00200000
+
+
+/*****************************************************************************
+ * STATSTG structure
+ */
+struct STATSTG {
+    LPOLESTR16	pwcsName;
+    DWORD	type;
+    ULARGE_INTEGER cbSize;
+    FILETIME	mtime;
+    FILETIME	ctime;
+    FILETIME	atime;
+    DWORD	grfMode;
+    DWORD	grfLocksSupported;
+    CLSID	clsid;
+    DWORD	grfStateBits;
+    DWORD	reserved;
+};
+
+
+/*****************************************************************************
+ * IEnumSTATSTG interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IFillLockBytes interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * ILayoutStorage interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * ILockBytes interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IPersist interface
+ */
+#define ICOM_INTERFACE IPersist
+ICOM_BEGIN(IPersist,IUnknown)
+    ICOM_CMETHOD1(HRESULT,GetClassID, CLSID*,pClassID);
+ICOM_END(IPersist)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IPersist_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IPersist_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IPersist_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IPersist methods ***/
+#define IPersist_GetClassID(p,a) ICOM_CALL1(GetClassID,p,a)
+#endif
+
+
+/*****************************************************************************
+ * IPersistFile interface
+ */
+#define ICOM_INTERFACE IPersistFile
+ICOM_BEGIN(IPersistFile,IPersist)
+    ICOM_CMETHOD (HRESULT,IsDirty);
+    ICOM_METHOD2 (HRESULT,Load,          LPCOLESTR32,pszFileName, DWORD,dwMode);
+    ICOM_METHOD2 (HRESULT,Save,          LPCOLESTR32,pszFileName, BOOL32,fRemember);
+    ICOM_METHOD1 (HRESULT,SaveCompleted, LPCOLESTR32,pszFileName);
+    ICOM_CMETHOD1(HRESULT,GetCurFile,    LPOLESTR32*,ppszFileName);
+ICOM_END(IPersistFile)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IPersistFile_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IPersistFile_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IPersistFile_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IPersist methods ***/
+#define IPersistFile_GetClassID(p,a) ICOM_ICALL1(IPersist,GetClassID,p,a)
+/*** IPersistFile methods ***/
+#define IPersistFile_IsDirty(p)         ICOM_CALL(IsDirty,p)
+#define IPersistFile_Load(p,a,b)        ICOM_CALL(Load,p,a,b)
+#define IPersistFile_Save(p,a,b)        ICOM_CALL(Save,p,a,b)
+#define IPersistFile_SaveCompleted(p,a) ICOM_CALL(SaveCompleted,p,a)
+#define IPersistFile_GetCurFile(p,a)    ICOM_CALL(GetCurFile,p,a)
+#endif
+
+
+/*****************************************************************************
+ * IPersistStorage interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IPersistStream interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IProgressNotify interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * IRootStorage interface
+ */
+/* FIXME: not implemented */
+
+
+/*****************************************************************************
+ * ISequentialStream interface
+ */
+#define ICOM_INTERFACE ISequentialStream
+ICOM_BEGIN(ISequentialStream,IUnknown)
+    ICOM_METHOD3(HRESULT,Read,        void*,pv, ULONG,cb, ULONG*,pcbRead);
+    ICOM_METHOD3(HRESULT,Write,       const void*,pv, ULONG,cb, ULONG*,pcbWritten);
+ICOM_END(ISequentialStream)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ISequentialStream_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define ISequentialStream_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define ISequentialStream_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** ISequentialStream methods ***/
+#define ISequentialStream_Read(p,a,b,c)  ICOM_CALL3(Read,p,a,b,c)
+#define ISequentialStream_Write(p,a,b,c) ICOM_CALL3(Write,p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IStorage interface
+ */
+#define ICOM_INTERFACE IStorage16
+ICOM_BEGIN(IStorage16,IUnknown)
+    ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR16,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream16**,ppstm)
+    ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR16,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream16**,ppstm)
+    ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR16,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage16**,ppstg)
+    ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR16,pwcsName, IStorage16*,pstgPriority, DWORD,grfMode, SNB16,snb16Exclude, DWORD,reserved, IStorage16**,ppstg)
+    ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB16,snb16Exclude, IStorage16*,pstgDest)
+    ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR16,pwcsName, IStorage16*,pstgDest, LPCOLESTR16,pwcsNewName, DWORD,grfFlags)
+    ICOM_METHOD1(HRESULT,Commit,         DWORD,grfCommitFlags)
+    ICOM_METHOD (HRESULT,Revert)
+    ICOM_METHOD4(HRESULT,EnumElements,   DWORD,reserved1, void*,reserved2, DWORD,reserved3, IEnumSTATSTG**,ppenum)
+    ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR16,pwcsName)
+    ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR16,pwcsOldName, LPCOLESTR16,pwcsNewName)
+    ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR16,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime)
+    ICOM_METHOD1(HRESULT,SetClass,       REFCLSID,clsid)
+    ICOM_METHOD2(HRESULT,SetStateBits,   DWORD,grfStateBits, DWORD,grfMask)
+    ICOM_METHOD2(HRESULT,Stat,           STATSTG*,pstatstg, DWORD,grfStatFlag)
+ICOM_END(IStorage16)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IStorage16_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IStorage16_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IStorage16_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IStorage16 methods ***/
+#define IStorage16_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
+#define IStorage16_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
+#define IStorage16_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
+#define IStorage16_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
+#define IStorage16_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
+#define IStorage16_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
+#define IStorage16_Commit(p,a)                ICOM_CALL1(Commit,p,a)
+#define IStorage16_Revert(p)                  ICOM_CALL (Revert,p)
+#define IStorage16_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
+#define IStorage16_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
+#define IStorage16_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
+#define IStorage16_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
+#define IStorage16_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
+#define IStorage16_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
+#define IStorage16_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
+#endif
+
+
+#define ICOM_INTERFACE IStorage32
+ICOM_BEGIN(IStorage32,IUnknown)
+    ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR32,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream32**,ppstm);
+    ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR32,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream32**,ppstm);
+    ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR32,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage32**,ppstg);
+    ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR32,pwcsName, IStorage32*,pstgPriority, DWORD,grfMode, SNB32,snb16Exclude, DWORD,reserved, IStorage32**,ppstg);
+    ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB32,snb16Exclude, IStorage32*,pstgDest);
+    ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR32,pwcsName, IStorage32*,pstgDest, LPCOLESTR32,pwcsNewName, DWORD,grfFlags);
+    ICOM_METHOD1(HRESULT,Commit,         DWORD,grfCommitFlags);
+    ICOM_METHOD (HRESULT,Revert);
+    ICOM_METHOD4(HRESULT,EnumElements,   DWORD,reserved1, void*,reserved2, DWORD,reserved3, IEnumSTATSTG**,ppenum);
+    ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR32,pwcsName);
+    ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR32,pwcsOldName, LPCOLESTR32,pwcsNewName);
+    ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR32,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime);
+    ICOM_METHOD1(HRESULT,SetClass,       REFCLSID,clsid);
+    ICOM_METHOD2(HRESULT,SetStateBits,   DWORD,grfStateBits, DWORD,grfMask);
+    ICOM_METHOD2(HRESULT,Stat,           STATSTG*,pstatstg, DWORD,grfStatFlag);
+ICOM_END(IStorage32)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IStorage32_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IStorage32_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IStorage32_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IStorage32 methods ***/
+#define IStorage32_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
+#define IStorage32_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
+#define IStorage32_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
+#define IStorage32_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
+#define IStorage32_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
+#define IStorage32_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
+#define IStorage32_Commit(p,a)                ICOM_CALL1(Commit,p,a)
+#define IStorage32_Revert(p)                  ICOM_CALL (Revert,p)
+#define IStorage32_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
+#define IStorage32_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
+#define IStorage32_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
+#define IStorage32_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
+#define IStorage32_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
+#define IStorage32_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
+#define IStorage32_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
+
+#ifndef __WINE__
+/* Duplicated for WINELIB */
+/*** IUnknown methods ***/
+#define IStorage_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IStorage_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IStorage_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** IStorage methods ***/
+#define IStorage_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
+#define IStorage_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
+#define IStorage_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
+#define IStorage_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
+#define IStorage_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
+#define IStorage_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
+#define IStorage_Commit(p,a)                ICOM_CALL1(Commit,p,a)
+#define IStorage_Revert(p)                  ICOM_CALL (Revert,p)
+#define IStorage_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
+#define IStorage_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
+#define IStorage_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
+#define IStorage_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
+#define IStorage_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
+#define IStorage_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
+#define IStorage_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
+#endif
+#endif
+
+
+/*****************************************************************************
+ * IStream interface
+ */
+#define ICOM_INTERFACE IStream16
+ICOM_BEGIN(IStream16,ISequentialStream)
+    ICOM_METHOD3(HRESULT,Seek,        LARGE_INTEGER,dlibMove, DWORD,dwOrigin, ULARGE_INTEGER*,plibNewPosition); 
+    ICOM_METHOD1(HRESULT,SetSize,     ULARGE_INTEGER,libNewSize);
+    ICOM_METHOD4(HRESULT,CopyTo,      IStream16*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten);
+    ICOM_METHOD1(HRESULT,Commit,      DWORD,grfCommitFlags);
+    ICOM_METHOD (HRESULT,Revert);
+    ICOM_METHOD3(HRESULT,LockRegion,  ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType);
+    ICOM_METHOD3(HRESULT,UnlockRegion,ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType);
+    ICOM_METHOD2(HRESULT,Stat,        STATSTG*,pstatstg, DWORD,grfStatFlag);
+    ICOM_METHOD1(HRESULT,Clone,       IStream16**,ppstm);
+ICOM_END(IStream16)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IStream16_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IStream16_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IStream16_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** ISequentialStream methods ***/
+#define IStream16_Read(p,a,b,c)  ICOM_ICALL3(ISequentialStream,Read,p,a,b,c)
+#define IStream16_Write(p,a,b,c) ICOM_ICALL3(ISequentialStream,Write,p,a,b,c)
+/*** IStream16 methods ***/
+#define IStream16_Seek(p)               ICOM_CALL3(Seek,p)
+#define IStream16_SetSize(p,a,b)        ICOM_CALL1(SetSize,p,a,b)
+#define IStream16_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
+#define IStream16_Commit(p,a)           ICOM_CALL1(Commit,p,a)
+#define IStream16_Revert(p)             ICOM_CALL (Revert,p)
+#define IStream16_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
+#define IStream16_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
+#define IStream16_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
+#define IStream16_Clone(p,a)            ICOM_CALL1(Clone,p,a)
+#endif
+
+
+#define ICOM_INTERFACE IStream32
+ICOM_BEGIN(IStream32,ISequentialStream)
+    ICOM_METHOD3(HRESULT,Seek,        LARGE_INTEGER,dlibMove, DWORD,dwOrigin, ULARGE_INTEGER*,plibNewPosition); 
+    ICOM_METHOD1(HRESULT,SetSize,     ULARGE_INTEGER,libNewSize);
+    ICOM_METHOD4(HRESULT,CopyTo,      IStream32*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten);
+    ICOM_METHOD1(HRESULT,Commit,      DWORD,grfCommitFlags);
+    ICOM_METHOD (HRESULT,Revert);
+    ICOM_METHOD3(HRESULT,LockRegion,  ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType);
+    ICOM_METHOD3(HRESULT,UnlockRegion,ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType);
+    ICOM_METHOD2(HRESULT,Stat,        STATSTG*,pstatstg, DWORD,grfStatFlag);
+    ICOM_METHOD1(HRESULT,Clone,       IStream32**,ppstm);
+ICOM_END(IStream32)
+#undef ICOM_INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IStream32_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IStream32_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IStream32_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** ISequentialStream methods ***/
+#define IStream32_Read(p,a,b,c)  ICOM_ICALL3(ISequentialStream,Read,p,a,b,c)
+#define IStream32_Write(p,a,b,c) ICOM_ICALL3(ISequentialStream,Write,p,a,b,c)
+/*** IStream32 methods ***/
+#define IStream32_Seek(p)               ICOM_CALL3(Seek,p)
+#define IStream32_SetSize(p,a,b)        ICOM_CALL1(SetSize,p,a,b)
+#define IStream32_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
+#define IStream32_Commit(p,a)           ICOM_CALL1(Commit,p,a)
+#define IStream32_Revert(p)             ICOM_CALL (Revert,p)
+#define IStream32_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
+#define IStream32_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
+#define IStream32_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
+#define IStream32_Clone(p,a)            ICOM_CALL1(Clone,p,a)
+
+#ifndef __WINE__
+/* Duplicated for WINELIB */
+/*** IUnknown methods ***/
+#define IStream_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b)
+#define IStream_AddRef(p)             ICOM_ICALL (IUnknown,AddRef,p)
+#define IStream_Release(p)            ICOM_ICALL (IUnknown,Release,p)
+/*** ISequentialStream methods ***/
+#define IStream_Read(p,a,b,c)  ICOM_ICALL3(ISequentialStream,Read,p,a,b,c)
+#define IStream_Write(p,a,b,c) ICOM_ICALL3(ISequentialStream,Write,p,a,b,c)
+/*** IStream methods ***/
+#define IStream_Seek(p)               ICOM_CALL3(Seek,p)
+#define IStream_SetSize(p,a,b)        ICOM_CALL1(SetSize,p,a,b)
+#define IStream_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
+#define IStream_Commit(p,a)           ICOM_CALL1(Commit,p,a)
+#define IStream_Revert(p)             ICOM_CALL (Revert,p)
+#define IStream_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
+#define IStream_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
+#define IStream_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
+#define IStream_Clone(p,a)            ICOM_CALL1(Clone,p,a)
+#endif
+#endif
+
+
+/*****************************************************************************
+ * StgXXX API
+ */
+/* FIXME: many functions are missing */
+HRESULT WINAPI StgCreateDocFile16(LPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,IStorage16 **ppstgOpen);
+HRESULT WINAPI StgCreateDocfile32(LPCOLESTR32 pwcsName,DWORD grfMode,DWORD reserved,IStorage32 **ppstgOpen);
+#define StgCreateDocfile WINELIB_NAME(StgCreateDocfile)
+
+HRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn);
+HRESULT WINAPI StgIsStorageFile32(LPCOLESTR32 fn);
+#define StgIsStorageFile WINELIB_NAME(StgIsStorageFile)
+
+HRESULT WINAPI StgOpenStorage16(const OLECHAR16* pwcsName,IStorage16* pstgPriority,DWORD grfMode,SNB16 snbExclude,DWORD reserved,IStorage16**ppstgOpen);
+HRESULT WINAPI StgOpenStorage32(const OLECHAR32* pwcsName,IStorage32* pstgPriority,DWORD grfMode,SNB32 snbExclude,DWORD reserved,IStorage32**ppstgOpen);
+#define StgOpenStorage WINELIB_NAME(StgOpenStorage)
+
+
+
+#endif /* __WINE_WINE_OBJ_STORAGE_H */
diff --git a/include/winerror.h b/include/winerror.h
index da07d75..b7fdcbb 100644
--- a/include/winerror.h
+++ b/include/winerror.h
@@ -145,8 +145,9 @@
 
 /* HRESULT values for OLE, SHELL and other Interface stuff */
 /* the codes 4000-40ff are reserved for OLE */
-#define	NOERROR				0
-#define	S_OK				0
+#define NOERROR                                0L
+#define S_OK                                   ((HRESULT)0L)
+#define S_FALSE                                ((HRESULT)1L)
 
 #define DISP_E_BADVARTYPE   0x80020008L
 #define DISP_E_OVERFLOW     0x8002000AL
diff --git a/include/wtypes.h b/include/wtypes.h
new file mode 100644
index 0000000..8d21349
--- /dev/null
+++ b/include/wtypes.h
@@ -0,0 +1,68 @@
+/*
+ * Defines the basic types used by COM interfaces.
+ */
+
+#ifndef __WINE_WTYPES_H
+#define __WINE_WTYPES_H
+
+
+#include "wintypes.h"
+
+
+typedef WORD CLIPFORMAT32, *LPCLIPFORMAT32;
+DECL_WINELIB_TYPE(CLIPFORMAT)
+
+typedef CHAR		OLECHAR16;
+typedef WCHAR		OLECHAR32;
+DECL_WINELIB_TYPE(OLECHAR)
+
+typedef LPSTR		LPOLESTR16;
+typedef LPWSTR		LPOLESTR32;
+DECL_WINELIB_TYPE(LPOLESTR)
+
+typedef LPCSTR		LPCOLESTR16;
+typedef LPCWSTR		LPCOLESTR32;
+DECL_WINELIB_TYPE(LPCOLESTR)
+
+typedef OLECHAR16	*BSTR16;
+typedef OLECHAR32	*BSTR32;
+DECL_WINELIB_TYPE(BSTR)
+
+typedef BSTR16		*LPBSTR16;
+typedef BSTR32		*LPBSTR32;
+DECL_WINELIB_TYPE(LPBSTR)
+
+struct _GUID
+{
+    DWORD Data1;
+    WORD  Data2;
+    WORD  Data3;
+    BYTE  Data4[8];
+};
+
+typedef struct _GUID	GUID,*LPGUID,*REFGUID;
+typedef struct _GUID	CLSID,*LPCLSID,*REFCLSID;
+typedef struct _GUID	IID,*REFIID,*LPIID;
+
+#define DECLARE_HANDLE(a)  typedef HANDLE16 a##16; typedef HANDLE32 a##32
+DECLARE_HANDLE(HMETAFILEPICT);
+#undef DECLARE_HANDLE
+
+typedef enum tagCLSCTX
+{
+    CLSCTX_INPROC_SERVER     = 0x1,
+    CLSCTX_INPROC_HANDLER    = 0x2,
+    CLSCTX_LOCAL_SERVER      = 0x4,
+    CLSCTX_INPROC_SERVER16   = 0x8,
+    CLSCTX_REMOTE_SERVER     = 0x10,
+    CLSCTX_INPROC_HANDLER16  = 0x20,
+    CLSCTX_INPROC_SERVERX86  = 0x40,
+    CLSCTX_INPROC_HANDLERX86 = 0x80
+} CLSCTX;
+
+#define CLSCTX_INPROC           (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)
+#define CLSCTX_ALL              (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
+#define CLSCTX_SERVER           (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
+
+
+#endif /* __WINE_WTYPES_H */
diff --git a/include/x11drv.h b/include/x11drv.h
index 01dfb7a..1e89604 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -272,6 +272,8 @@
 extern UINT16 X11DRV_KEYBOARD_MapVirtualKey(UINT16 wCode, UINT16 wMapType);
 extern INT16 X11DRV_KEYBOARD_GetKeyNameText(LONG lParam, LPSTR lpBuffer, INT16 nSize);
 extern INT16 X11DRV_KEYBOARD_ToAscii(UINT16 virtKey, UINT16 scanCode, LPBYTE lpKeyState, LPVOID lpChar, UINT16 flags);
+extern void KEYBOARD_HandleEvent( WND *pWnd, XKeyEvent *event );
+extern void KEYBOARD_UpdateState ( void );
 
 /* X11 mouse driver */
 
diff --git a/libtest/.cvsignore b/libtest/.cvsignore
index 19e3247..eff5fce 100644
--- a/libtest/.cvsignore
+++ b/libtest/.cvsignore
@@ -9,3 +9,5 @@
 hello5
 new
 rolex
+vartest
+volinfo
diff --git a/libtest/Makefile.in b/libtest/Makefile.in
index 084a2a6..f93f344 100644
--- a/libtest/Makefile.in
+++ b/libtest/Makefile.in
@@ -4,7 +4,7 @@
 VPATH     = @srcdir@
 MODULE    = none
 RCFLAGS   = -w32 -h
-PROGRAMS  = expand hello hello2 hello3 hello4 hello5 new rolex volinfo
+PROGRAMS  = expand hello hello2 hello3 hello4 hello5 new rolex vartest volinfo
 ALL_LIBS  = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS)
 
 C_SRCS = \
@@ -16,6 +16,7 @@
 	hello5.c \
 	new.c \
 	rolex.c \
+	vartest.c \
 	volinfo.c
 
 RC_SRCS = \
@@ -54,6 +55,9 @@
 rolex: rolex.o
 	$(CC) -o rolex rolex.o $(LDOPTIONS) $(ALL_LIBS)
 
+vartest: vartest.o
+	$(CC) -o vartest vartest.o $(LDOPTIONS) $(ALL_LIBS)
+
 volinfo: volinfo.o
 	$(CC) -o volinfo volinfo.o $(LDOPTIONS) $(ALL_LIBS)
 
diff --git a/libtest/vartest-Win32.log b/libtest/vartest-Win32.log
new file mode 100644
index 0000000..3377dcc
--- /dev/null
+++ b/libtest/vartest-Win32.log
@@ -0,0 +1,1800 @@
+
+
+======== Testing VarUI1FromXXX ========
+VarUI1FromI2: passing in NULL as return val makes it crash, 0
+VarUI1FromStr: passing in NULL as param: 80020005
+VarUI1FromI2: 0, 0, 0
+VarUI1FromI2: 69, 45, 0
+VarUI1FromI2: 70, 46, 0
+VarUI1FromI2: 128, 80, 0
+VarUI1FromI2: 255, FF, 0
+VarUI1FromI2: 256, FF, 8002000A
+VarUI1FromI2: 257, FF, 8002000A
+VarUI1FromR8: 0.0, 0, 0
+VarUI1FromR8: 69.33, 45, 0
+VarUI1FromR8: 69.66, 46, 0
+VarUI1FromR8: -69.33, 46, 8002000A
+VarUI1FromR8: -69.66, 46, 8002000A
+VarUI1FromR8: -0.5, 0, 0
+VarUI1FromR8: -0.51, 0, 8002000A
+VarUI1FromR8: -0.49, 0, 0
+VarUI1FromR8: 0.5, 0, 0
+VarUI1FromR8: 0.51, 1, 0
+VarUI1FromR8: 0.49, 0, 0
+VarUI1FromDate: 0.0, 0, 0
+VarUI1FromDate: 69.33, 45, 0
+VarUI1FromDate: 69.66, 46, 0
+VarUI1FromDate: -69.33, 46, 8002000A
+VarUI1FromDate: -69.66, 46, 8002000A
+VarUI1FromBool: VARIANT_TRUE, FF, 0
+VarUI1FromBool: VARIANT_FALSE, 0, 0
+VarUI1FromStr: "-2", 0, 8002000A
+VarUI1FromStr: "-1", 0, 8002000A
+VarUI1FromStr: "-0.51", 0, 8002000A
+VarUI1FromStr: "-0.5", 0, 0
+VarUI1FromStr: "-0.49", 0, 0
+VarUI1FromStr: "-0.0", 0, 0
+VarUI1FromStr: "0.0", 0, 0
+VarUI1FromStr: "0.49", 0, 0
+VarUI1FromStr: "0.5", 0, 0
+VarUI1FromStr: "0.51", 1, 0
+VarUI1FromStr: "1", 1, 0
+VarUI1FromStr: "127", 7F, 0
+VarUI1FromStr: "128", 80, 0
+VarUI1FromStr: "129", 81, 0
+VarUI1FromStr: "255", FF, 0
+VarUI1FromStr: "256", FF, 8002000A
+VarUI1FromStr: "257", FF, 8002000A
+VarUI1FromStr: "32767", FF, 8002000A
+VarUI1FromStr: "32768", FF, 8002000A
+VarUI1FromStr: "-32768", FF, 8002000A
+VarUI1FromStr: "-32769", FF, 8002000A
+VarUI1FromStr: "16777216", FF, 8002000A
+VarUI1FromStr: "16777217", FF, 8002000A
+VarUI1FromStr: "-16777216", FF, 8002000A
+VarUI1FromStr: "16777217", FF, 8002000A
+VarUI1FromStr: "2147483647", FF, 8002000A
+VarUI1FromStr: "2147483648", FF, 8002000A
+VarUI1FromStr: "-2147483647", FF, 8002000A
+VarUI1FromStr: "-2147483648", FF, 8002000A
+VarUI1FromStr: "", FF, 80020005
+VarUI1FromStr: " ", FF, 80020005
+VarUI1FromStr: "1F", FF, 80020005
+VarUI1FromStr: "1G", FF, 80020005
+VarUI1FromStr: " 1 ", 1, 0
+VarUI1FromStr: " 1 2 ", 1, 80020005
+VarUI1FromStr: "1,2,3", 7B, 0
+VarUI1FromStr: "1 2 3", 7B, 80020005
+VarUI1FromStr: "1,2, 3", 7B, 80020005
+VarUI1FromStr: "1;2;3", 7B, 80020005
+VarUI1FromStr: "1.2.3", 7B, 80020005
+VarUI1FromStr: "0.", 0, 0
+VarUI1FromStr: ".0", 0, 0
+VarUI1FromStr: "0.1E12", 0, 8002000A
+VarUI1FromStr: "2.4,E1", 18, 0
+VarUI1FromStr: "  +3.2,E1", 20, 0
+VarUI1FromStr: "4E2.5", 20, 80020005
+VarUI1FromStr: "	2E+2", C8, 0
+VarUI1FromStr: "1 E+2", C8, 80020005
+VarUI1FromStr: ".", C8, 80020005
+VarUI1FromStr: ".E2", C8, 80020005
+VarUI1FromStr: "1000000000000000000000000000000000000000000000000000000000000000", C8, 8002000A
+VarUI1FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI1FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI1FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 8002000A
+VarUI1FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI1FromStr: "65535", 1, 8002000A
+VarUI1FromStr: "65535.5", 1, 8002000A
+VarUI1FromStr: "65536", 1, 8002000A
+VarUI1FromStr: "4294967295", 1, 8002000A
+VarUI1FromStr: "4294967296", 1, 8002000A
+VarUI1FromStr: "1 January 99", 1, 80020005
+VarUI1FromStr: "December 31, 2078", 1, 80020005
+VarUI1FromStr: "January 1, 1900", 1, 80020005
+VarUI1FromStr: "January 2 1900", 1, 80020005
+VarUI1FromStr: "11.11.1999", 1, 80020005
+VarUI1FromStr: "11/11/1999", 1, 80020005
+VarUI1FromStr: " 11 / 11 / 1999", 1, 80020005
+VarUI1FromStr: "11/11/1999:11:11:1134", 1, 80020005
+VarUI1FromStr: "11/11/1999 11:11:11:1", 1, 80020005
+VarUI1FromStr: "	1999/	11/21 11 :11:11am", 1, 80020005
+VarUI1FromStr: "11/11/1999 11:11:11Am", 1, 80020005
+VarUI1FromStr: "11/11/1999 11:11:11PM", 1, 80020005
+VarUI1FromStr: "11/11/199911:11:11PM", 1, 80020005
+VarUI1FromStr: "11/11/1999 0:0:11am", 1, 80020005
+VarUI1FromStr: "11/11/1999 11,11:11am", 1, 80020005
+VarUI1FromStr: "11/11/1999 11:11:11am", 1, 80020005
+VarUI1FromStr: "11/11/1999 11/11:11am", 1, 80020005
+VarUI1FromStr: "11/11/1999 11:11AM", 1, 80020005
+VarUI1FromStr: "11/11/1999 1AM", 1, 80020005
+VarUI1FromStr: "11/11/1999 0AM", 1, 80020005
+VarUI1FromStr: "11/11/1999 11:11:11", 1, 80020005
+VarUI1FromStr: "11/13/1999 0AM", 1, 80020005
+VarUI1FromStr: "13/13/1999 0AM", 1, 80020005
+VarUI1FromStr: "13/11/1999 0AM", 1, 80020005
+VarUI1FromStr: "11/33/1999 0AM", 1, 80020005
+VarUI1FromStr: "11/11/1999 AM", 1, 80020005
+VarUI1FromStr: "1/1/0 0AM", 1, 80020005
+VarUI1FromStr: "1/1/-1 0AM", 1, 80020005
+VarUI1FromStr: "1999 January 3 9AM", 1, 80020005
+VarUI1FromStr: "1 January 1999 11AM", 1, 80020005
+VarUI1FromStr: "4AM 11/11/1999", 1, 80020005
+VarUI1FromStr: "4:22 11/11/1999 AM", 1, 80020005
+VarUI1FromStr: " 1 1 /11/1999", 1, 80020005
+VarUI1FromStr: "11-11/1999 11:11:11.12AM", 1, 80020005
+VarUI1FromStr: "1999 January 3, 9AM", 1, 80020005
+VarUI1FromStr: "December, 31, 2078", 1, 80020005
+VarUI1FromStr: "December, 31, 2078,", 1, 80020005
+VarUI1FromStr: "December, 31 2078", 1, 80020005
+VarUI1FromStr: "11/99", 1, 80020005
+VarUI1FromStr: "11-1999", 1, 80020005
+VarUI1FromStr: "true", 1, 80020005
+VarUI1FromStr: "True", 1, 80020005
+VarUI1FromStr: "TRue", 1, 80020005
+VarUI1FromStr: "TRUE", 1, 80020005
+VarUI1FromStr: " TRUE", 1, 80020005
+VarUI1FromStr: "FALSE ", 1, 80020005
+VarUI1FromStr: "False", 1, 80020005
+VarUI1FromStr: "JustSomeText", 1, 80020005
+VarUI1FromStr: "Just Some Text", 1, 80020005
+VarUI1FromStr: "", 1, 80020005
+VarUI1FromStr: "1.5", 2, 0
+VarUI1FromStr: "2.5", 2, 0
+VarUI1FromStr: "3.5", 4, 0
+VarUI1FromStr: "4.5", 4, 0
+VarUI1FromStr: "", 4, 80020005
+VarUI1FromStr: "", 4, 80020005
+VarUI1FromStr: "", 4, 80020005
+VarUI1FromStr: "", 4, 80020005
+VarUI1FromStr: "", 4, 80020005
+VarUI1FromStr: "", 4, 80020005
+
+
+======== Testing VarUI2FromXXX ========
+VarUI2FromI2: -1, 0, 8002000A
+VarUI2FromI2: passing in NULL as return val makes it crash, 8002000A
+VarUI2FromStr: passing in NULL as param: 80020005
+VarUI2FromI2: 0, 0, 0
+VarUI2FromI2: 69, 69, 0
+VarUI2FromI2: 70, 70, 0
+VarUI2FromI2: 128, 128, 0
+VarUI2FromI4: 65535, 65535, 0
+VarUI2FromI4: 65536, 65535, 8002000A
+VarUI2FromI4: 65537, 65535, 8002000A
+VarUI2FromR8: 0.0, 0, 0
+VarUI2FromR8: 69.33, 69, 0
+VarUI2FromR8: 69.66, 70, 0
+VarUI2FromR8: -69.33, 70, 8002000A
+VarUI2FromR8: -69.66, 70, 8002000A
+VarUI2FromR8: -0.5, 0, 0
+VarUI2FromR8: -0.51, 0, 8002000A
+VarUI2FromR8: -0.49, 0, 0
+VarUI2FromR8: 0.5, 0, 0
+VarUI2FromR8: 0.51, 1, 0
+VarUI2FromR8: 0.49, 0, 0
+VarUI2FromDate: 0.0, 0, 0
+VarUI2FromDate: 69.33, 69, 0
+VarUI2FromDate: 69.66, 70, 0
+VarUI2FromDate: -69.33, 70, 8002000A
+VarUI2FromDate: -69.66, 70, 8002000A
+VarUI2FromBool: VARIANT_TRUE, 65535, 0
+VarUI2FromBool: VARIANT_FALSE, 0, 0
+VarUI2FromStr: "-2", 0, 8002000A
+VarUI2FromStr: "-1", 0, 8002000A
+VarUI2FromStr: "-0.51", 0, 8002000A
+VarUI2FromStr: "-0.5", 0, 0
+VarUI2FromStr: "-0.49", 0, 0
+VarUI2FromStr: "-0.0", 0, 0
+VarUI2FromStr: "0.0", 0, 0
+VarUI2FromStr: "0.49", 0, 0
+VarUI2FromStr: "0.5", 0, 0
+VarUI2FromStr: "0.51", 1, 0
+VarUI2FromStr: "1", 1, 0
+VarUI2FromStr: "127", 127, 0
+VarUI2FromStr: "128", 128, 0
+VarUI2FromStr: "129", 129, 0
+VarUI2FromStr: "255", 255, 0
+VarUI2FromStr: "256", 256, 0
+VarUI2FromStr: "257", 257, 0
+VarUI2FromStr: "32767", 32767, 0
+VarUI2FromStr: "32768", 32768, 0
+VarUI2FromStr: "-32768", 32768, 8002000A
+VarUI2FromStr: "-32769", 32768, 8002000A
+VarUI2FromStr: "16777216", 32768, 8002000A
+VarUI2FromStr: "16777217", 32768, 8002000A
+VarUI2FromStr: "-16777216", 32768, 8002000A
+VarUI2FromStr: "16777217", 32768, 8002000A
+VarUI2FromStr: "2147483647", 32768, 8002000A
+VarUI2FromStr: "2147483648", 32768, 8002000A
+VarUI2FromStr: "-2147483647", 32768, 8002000A
+VarUI2FromStr: "-2147483648", 32768, 8002000A
+VarUI2FromStr: "", 32768, 80020005
+VarUI2FromStr: " ", 32768, 80020005
+VarUI2FromStr: "1F", 32768, 80020005
+VarUI2FromStr: "1G", 32768, 80020005
+VarUI2FromStr: " 1 ", 1, 0
+VarUI2FromStr: " 1 2 ", 1, 80020005
+VarUI2FromStr: "1,2,3", 123, 0
+VarUI2FromStr: "1 2 3", 123, 80020005
+VarUI2FromStr: "1,2, 3", 123, 80020005
+VarUI2FromStr: "1;2;3", 123, 80020005
+VarUI2FromStr: "1.2.3", 123, 80020005
+VarUI2FromStr: "0.", 0, 0
+VarUI2FromStr: ".0", 0, 0
+VarUI2FromStr: "0.1E12", 0, 8002000A
+VarUI2FromStr: "2.4,E1", 24, 0
+VarUI2FromStr: "  +3.2,E1", 32, 0
+VarUI2FromStr: "4E2.5", 32, 80020005
+VarUI2FromStr: "	2E+2", 200, 0
+VarUI2FromStr: "1 E+2", 200, 80020005
+VarUI2FromStr: ".", 200, 80020005
+VarUI2FromStr: ".E2", 200, 80020005
+VarUI2FromStr: "1000000000000000000000000000000000000000000000000000000000000000", 200, 8002000A
+VarUI2FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI2FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI2FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 8002000A
+VarUI2FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI2FromStr: "65535", 65535, 0
+VarUI2FromStr: "65535.5", 65535, 8002000A
+VarUI2FromStr: "65536", 65535, 8002000A
+VarUI2FromStr: "4294967295", 65535, 8002000A
+VarUI2FromStr: "4294967296", 65535, 8002000A
+VarUI2FromStr: "1 January 99", 65535, 80020005
+VarUI2FromStr: "December 31, 2078", 65535, 80020005
+VarUI2FromStr: "January 1, 1900", 65535, 80020005
+VarUI2FromStr: "January 2 1900", 65535, 80020005
+VarUI2FromStr: "11.11.1999", 65535, 80020005
+VarUI2FromStr: "11/11/1999", 65535, 80020005
+VarUI2FromStr: " 11 / 11 / 1999", 65535, 80020005
+VarUI2FromStr: "11/11/1999:11:11:1134", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11:11:11:1", 65535, 80020005
+VarUI2FromStr: "	1999/	11/21 11 :11:11am", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11:11:11Am", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11:11:11PM", 65535, 80020005
+VarUI2FromStr: "11/11/199911:11:11PM", 65535, 80020005
+VarUI2FromStr: "11/11/1999 0:0:11am", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11,11:11am", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11:11:11am", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11/11:11am", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11:11AM", 65535, 80020005
+VarUI2FromStr: "11/11/1999 1AM", 65535, 80020005
+VarUI2FromStr: "11/11/1999 0AM", 65535, 80020005
+VarUI2FromStr: "11/11/1999 11:11:11", 65535, 80020005
+VarUI2FromStr: "11/13/1999 0AM", 65535, 80020005
+VarUI2FromStr: "13/13/1999 0AM", 65535, 80020005
+VarUI2FromStr: "13/11/1999 0AM", 65535, 80020005
+VarUI2FromStr: "11/33/1999 0AM", 65535, 80020005
+VarUI2FromStr: "11/11/1999 AM", 65535, 80020005
+VarUI2FromStr: "1/1/0 0AM", 65535, 80020005
+VarUI2FromStr: "1/1/-1 0AM", 65535, 80020005
+VarUI2FromStr: "1999 January 3 9AM", 65535, 80020005
+VarUI2FromStr: "1 January 1999 11AM", 65535, 80020005
+VarUI2FromStr: "4AM 11/11/1999", 65535, 80020005
+VarUI2FromStr: "4:22 11/11/1999 AM", 65535, 80020005
+VarUI2FromStr: " 1 1 /11/1999", 65535, 80020005
+VarUI2FromStr: "11-11/1999 11:11:11.12AM", 65535, 80020005
+VarUI2FromStr: "1999 January 3, 9AM", 65535, 80020005
+VarUI2FromStr: "December, 31, 2078", 65535, 80020005
+VarUI2FromStr: "December, 31, 2078,", 65535, 80020005
+VarUI2FromStr: "December, 31 2078", 65535, 80020005
+VarUI2FromStr: "11/99", 65535, 80020005
+VarUI2FromStr: "11-1999", 65535, 80020005
+VarUI2FromStr: "true", 65535, 80020005
+VarUI2FromStr: "True", 65535, 80020005
+VarUI2FromStr: "TRue", 65535, 80020005
+VarUI2FromStr: "TRUE", 65535, 80020005
+VarUI2FromStr: " TRUE", 65535, 80020005
+VarUI2FromStr: "FALSE ", 65535, 80020005
+VarUI2FromStr: "False", 65535, 80020005
+VarUI2FromStr: "JustSomeText", 65535, 80020005
+VarUI2FromStr: "Just Some Text", 65535, 80020005
+VarUI2FromStr: "", 65535, 80020005
+VarUI2FromStr: "1.5", 2, 0
+VarUI2FromStr: "2.5", 2, 0
+VarUI2FromStr: "3.5", 4, 0
+VarUI2FromStr: "4.5", 4, 0
+VarUI2FromStr: "", 4, 80020005
+VarUI2FromStr: "", 4, 80020005
+VarUI2FromStr: "", 4, 80020005
+VarUI2FromStr: "", 4, 80020005
+VarUI2FromStr: "", 4, 80020005
+VarUI2FromStr: "", 4, 80020005
+
+
+======== Testing VarUI4FromXXX ========
+VarUI4FromI2: passing in NULL as return val makes it crash, 80020005
+VarUI4FromStr: passing in NULL as param: 80020005
+VarUI4FromI2: 0, 0, 0
+VarUI4FromI2: 69, 69, 0
+VarUI4FromI2: 70, 70, 0
+VarUI4FromI2: 128, 128, 0
+VarUI4FromI2: 255, 255, 0
+VarUI4FromR8: 4294967295, 4294967295, 0
+VarUI4FromR8: 4294967296, 4294967295, 8002000A
+VarUI4FromR8: 0.0, 0, 0
+VarUI4FromR8: 69.33, 69, 0
+VarUI4FromR8: 69.66, 70, 0
+VarUI4FromR8: -69.33, 70, 8002000A
+VarUI4FromR8: -69.66, 70, 8002000A
+VarUI4FromR8: -0.5, 0, 0
+VarUI4FromR8: -0.51, 0, 8002000A
+VarUI4FromR8: -0.49, 0, 0
+VarUI4FromR8: 0.5, 0, 0
+VarUI4FromR8: 0.51, 1, 0
+VarUI4FromR8: 0.49, 0, 0
+VarUI4FromDate: 0.0, 0, 0
+VarUI4FromDate: 69.33, 69, 0
+VarUI4FromDate: 69.66, 70, 0
+VarUI4FromDate: -69.33, 70, 8002000A
+VarUI4FromDate: -69.66, 70, 8002000A
+VarUI4FromBool: VARIANT_TRUE, 4294967295, 0
+VarUI4FromBool: VARIANT_FALSE, 0, 0
+VarUI4FromStr: "-2", 0, 8002000A
+VarUI4FromStr: "-1", 0, 8002000A
+VarUI4FromStr: "-0.51", 0, 8002000A
+VarUI4FromStr: "-0.5", 0, 0
+VarUI4FromStr: "-0.49", 0, 0
+VarUI4FromStr: "-0.0", 0, 0
+VarUI4FromStr: "0.0", 0, 0
+VarUI4FromStr: "0.49", 0, 0
+VarUI4FromStr: "0.5", 0, 0
+VarUI4FromStr: "0.51", 1, 0
+VarUI4FromStr: "1", 1, 0
+VarUI4FromStr: "127", 127, 0
+VarUI4FromStr: "128", 128, 0
+VarUI4FromStr: "129", 129, 0
+VarUI4FromStr: "255", 255, 0
+VarUI4FromStr: "256", 256, 0
+VarUI4FromStr: "257", 257, 0
+VarUI4FromStr: "32767", 32767, 0
+VarUI4FromStr: "32768", 32768, 0
+VarUI4FromStr: "-32768", 32768, 8002000A
+VarUI4FromStr: "-32769", 32768, 8002000A
+VarUI4FromStr: "16777216", 16777216, 0
+VarUI4FromStr: "16777217", 16777217, 0
+VarUI4FromStr: "-16777216", 16777217, 8002000A
+VarUI4FromStr: "16777217", 16777217, 0
+VarUI4FromStr: "2147483647", 2147483647, 0
+VarUI4FromStr: "2147483648", 2147483648, 0
+VarUI4FromStr: "-2147483647", 2147483648, 8002000A
+VarUI4FromStr: "-2147483648", 2147483648, 8002000A
+VarUI4FromStr: "", 2147483648, 80020005
+VarUI4FromStr: " ", 2147483648, 80020005
+VarUI4FromStr: "1F", 2147483648, 80020005
+VarUI4FromStr: "1G", 2147483648, 80020005
+VarUI4FromStr: " 1 ", 1, 0
+VarUI4FromStr: " 1 2 ", 1, 80020005
+VarUI4FromStr: "1,2,3", 123, 0
+VarUI4FromStr: "1 2 3", 123, 80020005
+VarUI4FromStr: "1,2, 3", 123, 80020005
+VarUI4FromStr: "1;2;3", 123, 80020005
+VarUI4FromStr: "1.2.3", 123, 80020005
+VarUI4FromStr: "0.", 0, 0
+VarUI4FromStr: ".0", 0, 0
+VarUI4FromStr: "0.1E12", 0, 8002000A
+VarUI4FromStr: "2.4,E1", 24, 0
+VarUI4FromStr: "  +3.2,E1", 32, 0
+VarUI4FromStr: "4E2.5", 32, 80020005
+VarUI4FromStr: "	2E+2", 200, 0
+VarUI4FromStr: "1 E+2", 200, 80020005
+VarUI4FromStr: ".", 200, 80020005
+VarUI4FromStr: ".E2", 200, 80020005
+VarUI4FromStr: "1000000000000000000000000000000000000000000000000000000000000000", 200, 8002000A
+VarUI4FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI4FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI4FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 8002000A
+VarUI4FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarUI4FromStr: "65535", 65535, 0
+VarUI4FromStr: "65535.5", 65536, 0
+VarUI4FromStr: "65536", 65536, 0
+VarUI4FromStr: "4294967295", 4294967295, 0
+VarUI4FromStr: "4294967296", 4294967295, 8002000A
+VarUI4FromStr: "1 January 99", 4294967295, 80020005
+VarUI4FromStr: "December 31, 2078", 4294967295, 80020005
+VarUI4FromStr: "January 1, 1900", 4294967295, 80020005
+VarUI4FromStr: "January 2 1900", 4294967295, 80020005
+VarUI4FromStr: "11.11.1999", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999", 4294967295, 80020005
+VarUI4FromStr: " 11 / 11 / 1999", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999:11:11:1134", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11:11:11:1", 4294967295, 80020005
+VarUI4FromStr: "	1999/	11/21 11 :11:11am", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11:11:11Am", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11:11:11PM", 4294967295, 80020005
+VarUI4FromStr: "11/11/199911:11:11PM", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 0:0:11am", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11,11:11am", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11:11:11am", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11/11:11am", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11:11AM", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 1AM", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 0AM", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 11:11:11", 4294967295, 80020005
+VarUI4FromStr: "11/13/1999 0AM", 4294967295, 80020005
+VarUI4FromStr: "13/13/1999 0AM", 4294967295, 80020005
+VarUI4FromStr: "13/11/1999 0AM", 4294967295, 80020005
+VarUI4FromStr: "11/33/1999 0AM", 4294967295, 80020005
+VarUI4FromStr: "11/11/1999 AM", 4294967295, 80020005
+VarUI4FromStr: "1/1/0 0AM", 4294967295, 80020005
+VarUI4FromStr: "1/1/-1 0AM", 4294967295, 80020005
+VarUI4FromStr: "1999 January 3 9AM", 4294967295, 80020005
+VarUI4FromStr: "1 January 1999 11AM", 4294967295, 80020005
+VarUI4FromStr: "4AM 11/11/1999", 4294967295, 80020005
+VarUI4FromStr: "4:22 11/11/1999 AM", 4294967295, 80020005
+VarUI4FromStr: " 1 1 /11/1999", 4294967295, 80020005
+VarUI4FromStr: "11-11/1999 11:11:11.12AM", 4294967295, 80020005
+VarUI4FromStr: "1999 January 3, 9AM", 4294967295, 80020005
+VarUI4FromStr: "December, 31, 2078", 4294967295, 80020005
+VarUI4FromStr: "December, 31, 2078,", 4294967295, 80020005
+VarUI4FromStr: "December, 31 2078", 4294967295, 80020005
+VarUI4FromStr: "11/99", 4294967295, 80020005
+VarUI4FromStr: "11-1999", 4294967295, 80020005
+VarUI4FromStr: "true", 4294967295, 80020005
+VarUI4FromStr: "True", 4294967295, 80020005
+VarUI4FromStr: "TRue", 4294967295, 80020005
+VarUI4FromStr: "TRUE", 4294967295, 80020005
+VarUI4FromStr: " TRUE", 4294967295, 80020005
+VarUI4FromStr: "FALSE ", 4294967295, 80020005
+VarUI4FromStr: "False", 4294967295, 80020005
+VarUI4FromStr: "JustSomeText", 4294967295, 80020005
+VarUI4FromStr: "Just Some Text", 4294967295, 80020005
+VarUI4FromStr: "", 4294967295, 80020005
+VarUI4FromStr: "1.5", 2, 0
+VarUI4FromStr: "2.5", 2, 0
+VarUI4FromStr: "3.5", 4, 0
+VarUI4FromStr: "4.5", 4, 0
+VarUI4FromStr: "", 4, 80020005
+VarUI4FromStr: "", 4, 80020005
+VarUI4FromStr: "", 4, 80020005
+VarUI4FromStr: "", 4, 80020005
+VarUI4FromStr: "", 4, 80020005
+VarUI4FromStr: "", 4, 80020005
+
+
+======== Testing VarI1FromXXX ========
+VarI1FromBool: VARIANT_TRUE, 255, 0
+VarI1FromBool: VARIANT_TRUE, -1, 0
+VarI1FromBool: VARIANT_FALSE, 0, 0
+VarI1FromUI1: 32767, 0, 8002000A
+VarI1FromUI1: 65535, 0, 8002000A
+VarI1FromI4: 32767, 0, 8002000A
+VarI1FromI4: 32768, 0, 8002000A
+VarI1FromI4: -32768, 0, 8002000A
+VarI1FromI4: -32769, 0, 8002000A
+VarI1FromR8: 69.33, 69, 0
+VarI1FromR8: 69.66, 70, 0
+VarI1FromR8: -69.33, -69, 0
+VarI1FromR8: -69.66, -70, 0
+VarI1FromDate: -69.66, -70, 0
+VarI1FromStr: "-2", -2, 0
+VarI1FromStr: "-1", -1, 0
+VarI1FromStr: "-0.51", -1, 0
+VarI1FromStr: "-0.5", 0, 0
+VarI1FromStr: "-0.49", 0, 0
+VarI1FromStr: "-0.0", 0, 0
+VarI1FromStr: "0.0", 0, 0
+VarI1FromStr: "0.49", 0, 0
+VarI1FromStr: "0.5", 0, 0
+VarI1FromStr: "0.51", 1, 0
+VarI1FromStr: "1", 1, 0
+VarI1FromStr: "127", 127, 0
+VarI1FromStr: "128", 127, 8002000A
+VarI1FromStr: "129", 127, 8002000A
+VarI1FromStr: "255", 127, 8002000A
+VarI1FromStr: "256", 127, 8002000A
+VarI1FromStr: "257", 127, 8002000A
+VarI1FromStr: "32767", 127, 8002000A
+VarI1FromStr: "32768", 127, 8002000A
+VarI1FromStr: "-32768", 127, 8002000A
+VarI1FromStr: "-32769", 127, 8002000A
+VarI1FromStr: "16777216", 127, 8002000A
+VarI1FromStr: "16777217", 127, 8002000A
+VarI1FromStr: "-16777216", 127, 8002000A
+VarI1FromStr: "16777217", 127, 8002000A
+VarI1FromStr: "2147483647", 127, 8002000A
+VarI1FromStr: "2147483648", 127, 8002000A
+VarI1FromStr: "-2147483647", 127, 8002000A
+VarI1FromStr: "-2147483648", 127, 8002000A
+VarI1FromStr: "", 127, 80020005
+VarI1FromStr: " ", 127, 80020005
+VarI1FromStr: "1F", 127, 80020005
+VarI1FromStr: "1G", 127, 80020005
+VarI1FromStr: " 1 ", 1, 0
+VarI1FromStr: " 1 2 ", 1, 80020005
+VarI1FromStr: "1,2,3", 123, 0
+VarI1FromStr: "1 2 3", 123, 80020005
+VarI1FromStr: "1,2, 3", 123, 80020005
+VarI1FromStr: "1;2;3", 123, 80020005
+VarI1FromStr: "1.2.3", 123, 80020005
+VarI1FromStr: "0.", 0, 0
+VarI1FromStr: ".0", 0, 0
+VarI1FromStr: "0.1E12", 0, 8002000A
+VarI1FromStr: "2.4,E1", 24, 0
+VarI1FromStr: "  +3.2,E1", 32, 0
+VarI1FromStr: "4E2.5", 32, 80020005
+VarI1FromStr: "	2E+2", 32, 8002000A
+VarI1FromStr: "1 E+2", 32, 80020005
+VarI1FromStr: ".", 32, 80020005
+VarI1FromStr: ".E2", 32, 80020005
+VarI1FromStr: "1000000000000000000000000000000000000000000000000000000000000000", 32, 8002000A
+VarI1FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI1FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI1FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 8002000A
+VarI1FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI1FromStr: "65535", 1, 8002000A
+VarI1FromStr: "65535.5", 1, 8002000A
+VarI1FromStr: "65536", 1, 8002000A
+VarI1FromStr: "4294967295", 1, 8002000A
+VarI1FromStr: "4294967296", 1, 8002000A
+VarI1FromStr: "1 January 99", 1, 80020005
+VarI1FromStr: "December 31, 2078", 1, 80020005
+VarI1FromStr: "January 1, 1900", 1, 80020005
+VarI1FromStr: "January 2 1900", 1, 80020005
+VarI1FromStr: "11.11.1999", 1, 80020005
+VarI1FromStr: "11/11/1999", 1, 80020005
+VarI1FromStr: " 11 / 11 / 1999", 1, 80020005
+VarI1FromStr: "11/11/1999:11:11:1134", 1, 80020005
+VarI1FromStr: "11/11/1999 11:11:11:1", 1, 80020005
+VarI1FromStr: "	1999/	11/21 11 :11:11am", 1, 80020005
+VarI1FromStr: "11/11/1999 11:11:11Am", 1, 80020005
+VarI1FromStr: "11/11/1999 11:11:11PM", 1, 80020005
+VarI1FromStr: "11/11/199911:11:11PM", 1, 80020005
+VarI1FromStr: "11/11/1999 0:0:11am", 1, 80020005
+VarI1FromStr: "11/11/1999 11,11:11am", 1, 80020005
+VarI1FromStr: "11/11/1999 11:11:11am", 1, 80020005
+VarI1FromStr: "11/11/1999 11/11:11am", 1, 80020005
+VarI1FromStr: "11/11/1999 11:11AM", 1, 80020005
+VarI1FromStr: "11/11/1999 1AM", 1, 80020005
+VarI1FromStr: "11/11/1999 0AM", 1, 80020005
+VarI1FromStr: "11/11/1999 11:11:11", 1, 80020005
+VarI1FromStr: "11/13/1999 0AM", 1, 80020005
+VarI1FromStr: "13/13/1999 0AM", 1, 80020005
+VarI1FromStr: "13/11/1999 0AM", 1, 80020005
+VarI1FromStr: "11/33/1999 0AM", 1, 80020005
+VarI1FromStr: "11/11/1999 AM", 1, 80020005
+VarI1FromStr: "1/1/0 0AM", 1, 80020005
+VarI1FromStr: "1/1/-1 0AM", 1, 80020005
+VarI1FromStr: "1999 January 3 9AM", 1, 80020005
+VarI1FromStr: "1 January 1999 11AM", 1, 80020005
+VarI1FromStr: "4AM 11/11/1999", 1, 80020005
+VarI1FromStr: "4:22 11/11/1999 AM", 1, 80020005
+VarI1FromStr: " 1 1 /11/1999", 1, 80020005
+VarI1FromStr: "11-11/1999 11:11:11.12AM", 1, 80020005
+VarI1FromStr: "1999 January 3, 9AM", 1, 80020005
+VarI1FromStr: "December, 31, 2078", 1, 80020005
+VarI1FromStr: "December, 31, 2078,", 1, 80020005
+VarI1FromStr: "December, 31 2078", 1, 80020005
+VarI1FromStr: "11/99", 1, 80020005
+VarI1FromStr: "11-1999", 1, 80020005
+VarI1FromStr: "true", 1, 80020005
+VarI1FromStr: "True", 1, 80020005
+VarI1FromStr: "TRue", 1, 80020005
+VarI1FromStr: "TRUE", 1, 80020005
+VarI1FromStr: " TRUE", 1, 80020005
+VarI1FromStr: "FALSE ", 1, 80020005
+VarI1FromStr: "False", 1, 80020005
+VarI1FromStr: "JustSomeText", 1, 80020005
+VarI1FromStr: "Just Some Text", 1, 80020005
+VarI1FromStr: "", 1, 80020005
+VarI1FromStr: "1.5", 2, 0
+VarI1FromStr: "2.5", 2, 0
+VarI1FromStr: "3.5", 4, 0
+VarI1FromStr: "4.5", 4, 0
+VarI1FromStr: "", 4, 80020005
+VarI1FromStr: "", 4, 80020005
+VarI1FromStr: "", 4, 80020005
+VarI1FromStr: "", 4, 80020005
+VarI1FromStr: "", 4, 80020005
+VarI1FromStr: "", 4, 80020005
+
+
+======== Testing VarI2FromXXX ========
+VarI2FromUI2: 32767, 32767, 0
+VarI2FromUI2: 65535, 32767, 8002000A
+VarI2FromI4: 32767, 32767, 0
+VarI2FromI4: 32768, 32767, 8002000A
+VarI2FromI4: -32768, -32768, 0
+VarI2FromI4: -32769, -32768, 8002000A
+VarI2FromR8: 69.33, 69, 0
+VarI2FromR8: 69.66, 70, 0
+VarI2FromR8: -69.33, -69, 0
+VarI2FromR8: -69.66, -70, 0
+VarI2FromDate: -69.66, -70, 0
+VarI2FromStr: "-2", -2, 0
+VarI2FromStr: "-1", -1, 0
+VarI2FromStr: "-0.51", -1, 0
+VarI2FromStr: "-0.5", 0, 0
+VarI2FromStr: "-0.49", 0, 0
+VarI2FromStr: "-0.0", 0, 0
+VarI2FromStr: "0.0", 0, 0
+VarI2FromStr: "0.49", 0, 0
+VarI2FromStr: "0.5", 0, 0
+VarI2FromStr: "0.51", 1, 0
+VarI2FromStr: "1", 1, 0
+VarI2FromStr: "127", 127, 0
+VarI2FromStr: "128", 128, 0
+VarI2FromStr: "129", 129, 0
+VarI2FromStr: "255", 255, 0
+VarI2FromStr: "256", 256, 0
+VarI2FromStr: "257", 257, 0
+VarI2FromStr: "32767", 32767, 0
+VarI2FromStr: "32768", 32767, 8002000A
+VarI2FromStr: "-32768", -32768, 0
+VarI2FromStr: "-32769", -32768, 8002000A
+VarI2FromStr: "16777216", -32768, 8002000A
+VarI2FromStr: "16777217", -32768, 8002000A
+VarI2FromStr: "-16777216", -32768, 8002000A
+VarI2FromStr: "16777217", -32768, 8002000A
+VarI2FromStr: "2147483647", -32768, 8002000A
+VarI2FromStr: "2147483648", -32768, 8002000A
+VarI2FromStr: "-2147483647", -32768, 8002000A
+VarI2FromStr: "-2147483648", -32768, 8002000A
+VarI2FromStr: "", -32768, 80020005
+VarI2FromStr: " ", -32768, 80020005
+VarI2FromStr: "1F", -32768, 80020005
+VarI2FromStr: "1G", -32768, 80020005
+VarI2FromStr: " 1 ", 1, 0
+VarI2FromStr: " 1 2 ", 1, 80020005
+VarI2FromStr: "1,2,3", 123, 0
+VarI2FromStr: "1 2 3", 123, 80020005
+VarI2FromStr: "1,2, 3", 123, 80020005
+VarI2FromStr: "1;2;3", 123, 80020005
+VarI2FromStr: "1.2.3", 123, 80020005
+VarI2FromStr: "0.", 0, 0
+VarI2FromStr: ".0", 0, 0
+VarI2FromStr: "0.1E12", 0, 8002000A
+VarI2FromStr: "2.4,E1", 24, 0
+VarI2FromStr: "  +3.2,E1", 32, 0
+VarI2FromStr: "4E2.5", 32, 80020005
+VarI2FromStr: "	2E+2", 200, 0
+VarI2FromStr: "1 E+2", 200, 80020005
+VarI2FromStr: ".", 200, 80020005
+VarI2FromStr: ".E2", 200, 80020005
+VarI2FromStr: "1000000000000000000000000000000000000000000000000000000000000000", 200, 8002000A
+VarI2FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI2FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI2FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 8002000A
+VarI2FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI2FromStr: "65535", 1, 8002000A
+VarI2FromStr: "65535.5", 1, 8002000A
+VarI2FromStr: "65536", 1, 8002000A
+VarI2FromStr: "4294967295", 1, 8002000A
+VarI2FromStr: "4294967296", 1, 8002000A
+VarI2FromStr: "1 January 99", 1, 80020005
+VarI2FromStr: "December 31, 2078", 1, 80020005
+VarI2FromStr: "January 1, 1900", 1, 80020005
+VarI2FromStr: "January 2 1900", 1, 80020005
+VarI2FromStr: "11.11.1999", 1, 80020005
+VarI2FromStr: "11/11/1999", 1, 80020005
+VarI2FromStr: " 11 / 11 / 1999", 1, 80020005
+VarI2FromStr: "11/11/1999:11:11:1134", 1, 80020005
+VarI2FromStr: "11/11/1999 11:11:11:1", 1, 80020005
+VarI2FromStr: "	1999/	11/21 11 :11:11am", 1, 80020005
+VarI2FromStr: "11/11/1999 11:11:11Am", 1, 80020005
+VarI2FromStr: "11/11/1999 11:11:11PM", 1, 80020005
+VarI2FromStr: "11/11/199911:11:11PM", 1, 80020005
+VarI2FromStr: "11/11/1999 0:0:11am", 1, 80020005
+VarI2FromStr: "11/11/1999 11,11:11am", 1, 80020005
+VarI2FromStr: "11/11/1999 11:11:11am", 1, 80020005
+VarI2FromStr: "11/11/1999 11/11:11am", 1, 80020005
+VarI2FromStr: "11/11/1999 11:11AM", 1, 80020005
+VarI2FromStr: "11/11/1999 1AM", 1, 80020005
+VarI2FromStr: "11/11/1999 0AM", 1, 80020005
+VarI2FromStr: "11/11/1999 11:11:11", 1, 80020005
+VarI2FromStr: "11/13/1999 0AM", 1, 80020005
+VarI2FromStr: "13/13/1999 0AM", 1, 80020005
+VarI2FromStr: "13/11/1999 0AM", 1, 80020005
+VarI2FromStr: "11/33/1999 0AM", 1, 80020005
+VarI2FromStr: "11/11/1999 AM", 1, 80020005
+VarI2FromStr: "1/1/0 0AM", 1, 80020005
+VarI2FromStr: "1/1/-1 0AM", 1, 80020005
+VarI2FromStr: "1999 January 3 9AM", 1, 80020005
+VarI2FromStr: "1 January 1999 11AM", 1, 80020005
+VarI2FromStr: "4AM 11/11/1999", 1, 80020005
+VarI2FromStr: "4:22 11/11/1999 AM", 1, 80020005
+VarI2FromStr: " 1 1 /11/1999", 1, 80020005
+VarI2FromStr: "11-11/1999 11:11:11.12AM", 1, 80020005
+VarI2FromStr: "1999 January 3, 9AM", 1, 80020005
+VarI2FromStr: "December, 31, 2078", 1, 80020005
+VarI2FromStr: "December, 31, 2078,", 1, 80020005
+VarI2FromStr: "December, 31 2078", 1, 80020005
+VarI2FromStr: "11/99", 1, 80020005
+VarI2FromStr: "11-1999", 1, 80020005
+VarI2FromStr: "true", 1, 80020005
+VarI2FromStr: "True", 1, 80020005
+VarI2FromStr: "TRue", 1, 80020005
+VarI2FromStr: "TRUE", 1, 80020005
+VarI2FromStr: " TRUE", 1, 80020005
+VarI2FromStr: "FALSE ", 1, 80020005
+VarI2FromStr: "False", 1, 80020005
+VarI2FromStr: "JustSomeText", 1, 80020005
+VarI2FromStr: "Just Some Text", 1, 80020005
+VarI2FromStr: "", 1, 80020005
+VarI2FromStr: "1.5", 2, 0
+VarI2FromStr: "2.5", 2, 0
+VarI2FromStr: "3.5", 4, 0
+VarI2FromStr: "4.5", 4, 0
+VarI2FromStr: "", 4, 80020005
+VarI2FromStr: "", 4, 80020005
+VarI2FromStr: "", 4, 80020005
+VarI2FromStr: "", 4, 80020005
+VarI2FromStr: "", 4, 80020005
+VarI2FromStr: "", 4, 80020005
+
+
+======== Testing VarI4FromXXX ========
+VarIntFromI2: 3, 3, 0
+VarI4FromR8: 69.33, 69, 0
+VarI4FromR8: 69.66, 70, 0
+VarI4FromR8: -69.33, -69, 0
+VarI4FromR8: -69.66, -70, 0
+VarI4FromR8: 2147483647.0, 2147483647, 0
+VarI4FromR8: 2147483648.0, 2147483647, 8002000A
+VarI4FromR8: -2147483647.0, -2147483647, 0
+VarI4FromR8: -2147483648.0, -2147483648, 0
+VarI4FromR8: -2147483649.0, -2147483648, 8002000A
+VarI4FromDate: -2147483649.0, -2147483648, 8002000A
+VarI4FromStr: "-2", -2, 0
+VarI4FromStr: "-1", -1, 0
+VarI4FromStr: "-0.51", -1, 0
+VarI4FromStr: "-0.5", 0, 0
+VarI4FromStr: "-0.49", 0, 0
+VarI4FromStr: "-0.0", 0, 0
+VarI4FromStr: "0.0", 0, 0
+VarI4FromStr: "0.49", 0, 0
+VarI4FromStr: "0.5", 0, 0
+VarI4FromStr: "0.51", 1, 0
+VarI4FromStr: "1", 1, 0
+VarI4FromStr: "127", 127, 0
+VarI4FromStr: "128", 128, 0
+VarI4FromStr: "129", 129, 0
+VarI4FromStr: "255", 255, 0
+VarI4FromStr: "256", 256, 0
+VarI4FromStr: "257", 257, 0
+VarI4FromStr: "32767", 32767, 0
+VarI4FromStr: "32768", 32768, 0
+VarI4FromStr: "-32768", -32768, 0
+VarI4FromStr: "-32769", -32769, 0
+VarI4FromStr: "16777216", 16777216, 0
+VarI4FromStr: "16777217", 16777217, 0
+VarI4FromStr: "-16777216", -16777216, 0
+VarI4FromStr: "16777217", 16777217, 0
+VarI4FromStr: "2147483647", 2147483647, 0
+VarI4FromStr: "2147483648", 2147483647, 8002000A
+VarI4FromStr: "-2147483647", -2147483647, 0
+VarI4FromStr: "-2147483648", -2147483648, 0
+VarI4FromStr: "", -2147483648, 80020005
+VarI4FromStr: " ", -2147483648, 80020005
+VarI4FromStr: "1F", -2147483648, 80020005
+VarI4FromStr: "1G", -2147483648, 80020005
+VarI4FromStr: " 1 ", 1, 0
+VarI4FromStr: " 1 2 ", 1, 80020005
+VarI4FromStr: "1,2,3", 123, 0
+VarI4FromStr: "1 2 3", 123, 80020005
+VarI4FromStr: "1,2, 3", 123, 80020005
+VarI4FromStr: "1;2;3", 123, 80020005
+VarI4FromStr: "1.2.3", 123, 80020005
+VarI4FromStr: "0.", 0, 0
+VarI4FromStr: ".0", 0, 0
+VarI4FromStr: "0.1E12", 0, 8002000A
+VarI4FromStr: "2.4,E1", 24, 0
+VarI4FromStr: "  +3.2,E1", 32, 0
+VarI4FromStr: "4E2.5", 32, 80020005
+VarI4FromStr: "	2E+2", 200, 0
+VarI4FromStr: "1 E+2", 200, 80020005
+VarI4FromStr: ".", 200, 80020005
+VarI4FromStr: ".E2", 200, 80020005
+VarI4FromStr: "1000000000000000000000000000000000000000000000000000000000000000", 200, 8002000A
+VarI4FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI4FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI4FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 8002000A
+VarI4FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1, 0
+VarI4FromStr: "65535", 65535, 0
+VarI4FromStr: "65535.5", 65536, 0
+VarI4FromStr: "65536", 65536, 0
+VarI4FromStr: "4294967295", 65536, 8002000A
+VarI4FromStr: "4294967296", 65536, 8002000A
+VarI4FromStr: "1 January 99", 65536, 80020005
+VarI4FromStr: "December 31, 2078", 65536, 80020005
+VarI4FromStr: "January 1, 1900", 65536, 80020005
+VarI4FromStr: "January 2 1900", 65536, 80020005
+VarI4FromStr: "11.11.1999", 65536, 80020005
+VarI4FromStr: "11/11/1999", 65536, 80020005
+VarI4FromStr: " 11 / 11 / 1999", 65536, 80020005
+VarI4FromStr: "11/11/1999:11:11:1134", 65536, 80020005
+VarI4FromStr: "11/11/1999 11:11:11:1", 65536, 80020005
+VarI4FromStr: "	1999/	11/21 11 :11:11am", 65536, 80020005
+VarI4FromStr: "11/11/1999 11:11:11Am", 65536, 80020005
+VarI4FromStr: "11/11/1999 11:11:11PM", 65536, 80020005
+VarI4FromStr: "11/11/199911:11:11PM", 65536, 80020005
+VarI4FromStr: "11/11/1999 0:0:11am", 65536, 80020005
+VarI4FromStr: "11/11/1999 11,11:11am", 65536, 80020005
+VarI4FromStr: "11/11/1999 11:11:11am", 65536, 80020005
+VarI4FromStr: "11/11/1999 11/11:11am", 65536, 80020005
+VarI4FromStr: "11/11/1999 11:11AM", 65536, 80020005
+VarI4FromStr: "11/11/1999 1AM", 65536, 80020005
+VarI4FromStr: "11/11/1999 0AM", 65536, 80020005
+VarI4FromStr: "11/11/1999 11:11:11", 65536, 80020005
+VarI4FromStr: "11/13/1999 0AM", 65536, 80020005
+VarI4FromStr: "13/13/1999 0AM", 65536, 80020005
+VarI4FromStr: "13/11/1999 0AM", 65536, 80020005
+VarI4FromStr: "11/33/1999 0AM", 65536, 80020005
+VarI4FromStr: "11/11/1999 AM", 65536, 80020005
+VarI4FromStr: "1/1/0 0AM", 65536, 80020005
+VarI4FromStr: "1/1/-1 0AM", 65536, 80020005
+VarI4FromStr: "1999 January 3 9AM", 65536, 80020005
+VarI4FromStr: "1 January 1999 11AM", 65536, 80020005
+VarI4FromStr: "4AM 11/11/1999", 65536, 80020005
+VarI4FromStr: "4:22 11/11/1999 AM", 65536, 80020005
+VarI4FromStr: " 1 1 /11/1999", 65536, 80020005
+VarI4FromStr: "11-11/1999 11:11:11.12AM", 65536, 80020005
+VarI4FromStr: "1999 January 3, 9AM", 65536, 80020005
+VarI4FromStr: "December, 31, 2078", 65536, 80020005
+VarI4FromStr: "December, 31, 2078,", 65536, 80020005
+VarI4FromStr: "December, 31 2078", 65536, 80020005
+VarI4FromStr: "11/99", 65536, 80020005
+VarI4FromStr: "11-1999", 65536, 80020005
+VarI4FromStr: "true", 65536, 80020005
+VarI4FromStr: "True", 65536, 80020005
+VarI4FromStr: "TRue", 65536, 80020005
+VarI4FromStr: "TRUE", 65536, 80020005
+VarI4FromStr: " TRUE", 65536, 80020005
+VarI4FromStr: "FALSE ", 65536, 80020005
+VarI4FromStr: "False", 65536, 80020005
+VarI4FromStr: "JustSomeText", 65536, 80020005
+VarI4FromStr: "Just Some Text", 65536, 80020005
+VarI4FromStr: "", 65536, 80020005
+VarI4FromStr: "1.5", 2, 0
+VarI4FromStr: "2.5", 2, 0
+VarI4FromStr: "3.5", 4, 0
+VarI4FromStr: "4.5", 4, 0
+VarI4FromStr: "", 4, 80020005
+VarI4FromStr: "", 4, 80020005
+VarI4FromStr: "", 4, 80020005
+VarI4FromStr: "", 4, 80020005
+VarI4FromStr: "", 4, 80020005
+VarI4FromStr: "", 4, 80020005
+
+
+======== Testing VarR4FromXXX ========
+VarR4FromI4: 16777216, 16777216.000000, 0
+VarR4FromI4: 16777217, 16777216.000000, 0
+VarR4FromI4: -16777216, -16777216.000000, 0
+VarR4FromI4: -16777217, -16777216.000000, 0
+VarR4FromR8: 16777216.0, 16777216.000000, 0
+VarR4FromR8: 16777217.0, 16777216.000000, 0
+VarR4FromR8: -16777216.0, -16777216.000000, 0
+VarR4FromR8: -16777217.0, -16777216.000000, 0
+VarR4FromR8: 16777218e31, 167772177736353110000000000000000000000.000000, 0
+VarR4FromR8: 16777218e32, 167772177736353110000000000000000000000.000000, 8002000A
+VarR4FromDate: 16777218e31, 167772177736353110000000000000000000000.000000, 0
+VarR4FromStr: "-2", -2.000000, 0
+VarR4FromStr: "-1", -1.000000, 0
+VarR4FromStr: "-0.51", -0.510000, 0
+VarR4FromStr: "-0.5", -0.500000, 0
+VarR4FromStr: "-0.49", -0.490000, 0
+VarR4FromStr: "-0.0", 0.000000, 0
+VarR4FromStr: "0.0", 0.000000, 0
+VarR4FromStr: "0.49", 0.490000, 0
+VarR4FromStr: "0.5", 0.500000, 0
+VarR4FromStr: "0.51", 0.510000, 0
+VarR4FromStr: "1", 1.000000, 0
+VarR4FromStr: "127", 127.000000, 0
+VarR4FromStr: "128", 128.000000, 0
+VarR4FromStr: "129", 129.000000, 0
+VarR4FromStr: "255", 255.000000, 0
+VarR4FromStr: "256", 256.000000, 0
+VarR4FromStr: "257", 257.000000, 0
+VarR4FromStr: "32767", 32767.000000, 0
+VarR4FromStr: "32768", 32768.000000, 0
+VarR4FromStr: "-32768", -32768.000000, 0
+VarR4FromStr: "-32769", -32769.000000, 0
+VarR4FromStr: "16777216", 16777216.000000, 0
+VarR4FromStr: "16777217", 16777216.000000, 0
+VarR4FromStr: "-16777216", -16777216.000000, 0
+VarR4FromStr: "16777217", 16777216.000000, 0
+VarR4FromStr: "2147483647", 2147483648.000000, 0
+VarR4FromStr: "2147483648", 2147483648.000000, 0
+VarR4FromStr: "-2147483647", -2147483648.000000, 0
+VarR4FromStr: "-2147483648", -2147483648.000000, 0
+VarR4FromStr: "", -2147483648.000000, 80020005
+VarR4FromStr: " ", -2147483648.000000, 80020005
+VarR4FromStr: "1F", -2147483648.000000, 80020005
+VarR4FromStr: "1G", -2147483648.000000, 80020005
+VarR4FromStr: " 1 ", 1.000000, 0
+VarR4FromStr: " 1 2 ", 1.000000, 80020005
+VarR4FromStr: "1,2,3", 123.000000, 0
+VarR4FromStr: "1 2 3", 123.000000, 80020005
+VarR4FromStr: "1,2, 3", 123.000000, 80020005
+VarR4FromStr: "1;2;3", 123.000000, 80020005
+VarR4FromStr: "1.2.3", 123.000000, 80020005
+VarR4FromStr: "0.", 0.000000, 0
+VarR4FromStr: ".0", 0.000000, 0
+VarR4FromStr: "0.1E12", 99999997952.000000, 0
+VarR4FromStr: "2.4,E1", 24.000000, 0
+VarR4FromStr: "  +3.2,E1", 32.000000, 0
+VarR4FromStr: "4E2.5", 32.000000, 80020005
+VarR4FromStr: "	2E+2", 200.000000, 0
+VarR4FromStr: "1 E+2", 200.000000, 80020005
+VarR4FromStr: ".", 200.000000, 80020005
+VarR4FromStr: ".E2", 200.000000, 80020005
+VarR4FromStr: "1000000000000000000000000000000000000000000000000000000000000000", 200.000000, 8002000A
+VarR4FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1.000000, 0
+VarR4FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1.000000, 0
+VarR4FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1.000000, 8002000A
+VarR4FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1.000000, 0
+VarR4FromStr: "65535", 65535.000000, 0
+VarR4FromStr: "65535.5", 65535.500000, 0
+VarR4FromStr: "65536", 65536.000000, 0
+VarR4FromStr: "4294967295", 4294967296.000000, 0
+VarR4FromStr: "4294967296", 4294967296.000000, 0
+VarR4FromStr: "1 January 99", 4294967296.000000, 80020005
+VarR4FromStr: "December 31, 2078", 4294967296.000000, 80020005
+VarR4FromStr: "January 1, 1900", 4294967296.000000, 80020005
+VarR4FromStr: "January 2 1900", 4294967296.000000, 80020005
+VarR4FromStr: "11.11.1999", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999", 4294967296.000000, 80020005
+VarR4FromStr: " 11 / 11 / 1999", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999:11:11:1134", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11:11:11:1", 4294967296.000000, 80020005
+VarR4FromStr: "	1999/	11/21 11 :11:11am", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11:11:11Am", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11:11:11PM", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/199911:11:11PM", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 0:0:11am", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11,11:11am", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11:11:11am", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11/11:11am", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11:11AM", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 1AM", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 0AM", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 11:11:11", 4294967296.000000, 80020005
+VarR4FromStr: "11/13/1999 0AM", 4294967296.000000, 80020005
+VarR4FromStr: "13/13/1999 0AM", 4294967296.000000, 80020005
+VarR4FromStr: "13/11/1999 0AM", 4294967296.000000, 80020005
+VarR4FromStr: "11/33/1999 0AM", 4294967296.000000, 80020005
+VarR4FromStr: "11/11/1999 AM", 4294967296.000000, 80020005
+VarR4FromStr: "1/1/0 0AM", 4294967296.000000, 80020005
+VarR4FromStr: "1/1/-1 0AM", 4294967296.000000, 80020005
+VarR4FromStr: "1999 January 3 9AM", 4294967296.000000, 80020005
+VarR4FromStr: "1 January 1999 11AM", 4294967296.000000, 80020005
+VarR4FromStr: "4AM 11/11/1999", 4294967296.000000, 80020005
+VarR4FromStr: "4:22 11/11/1999 AM", 4294967296.000000, 80020005
+VarR4FromStr: " 1 1 /11/1999", 4294967296.000000, 80020005
+VarR4FromStr: "11-11/1999 11:11:11.12AM", 4294967296.000000, 80020005
+VarR4FromStr: "1999 January 3, 9AM", 4294967296.000000, 80020005
+VarR4FromStr: "December, 31, 2078", 4294967296.000000, 80020005
+VarR4FromStr: "December, 31, 2078,", 4294967296.000000, 80020005
+VarR4FromStr: "December, 31 2078", 4294967296.000000, 80020005
+VarR4FromStr: "11/99", 4294967296.000000, 80020005
+VarR4FromStr: "11-1999", 4294967296.000000, 80020005
+VarR4FromStr: "true", 4294967296.000000, 80020005
+VarR4FromStr: "True", 4294967296.000000, 80020005
+VarR4FromStr: "TRue", 4294967296.000000, 80020005
+VarR4FromStr: "TRUE", 4294967296.000000, 80020005
+VarR4FromStr: " TRUE", 4294967296.000000, 80020005
+VarR4FromStr: "FALSE ", 4294967296.000000, 80020005
+VarR4FromStr: "False", 4294967296.000000, 80020005
+VarR4FromStr: "JustSomeText", 4294967296.000000, 80020005
+VarR4FromStr: "Just Some Text", 4294967296.000000, 80020005
+VarR4FromStr: "", 4294967296.000000, 80020005
+VarR4FromStr: "1.5", 1.500000, 0
+VarR4FromStr: "2.5", 2.500000, 0
+VarR4FromStr: "3.5", 3.500000, 0
+VarR4FromStr: "4.5", 4.500000, 0
+VarR4FromStr: "", 4.500000, 80020005
+VarR4FromStr: "", 4.500000, 80020005
+VarR4FromStr: "", 4.500000, 80020005
+VarR4FromStr: "", 4.500000, 80020005
+VarR4FromStr: "", 4.500000, 80020005
+VarR4FromStr: "", 4.500000, 80020005
+
+
+======== Testing VarR8FromXXX ========
+VarR8FromDate: 900719925474099.0, 900719925474099.000000, 0
+VarR8FromStr: "-2", -2.000000, 0
+VarR8FromStr: "-1", -1.000000, 0
+VarR8FromStr: "-0.51", -0.510000, 0
+VarR8FromStr: "-0.5", -0.500000, 0
+VarR8FromStr: "-0.49", -0.490000, 0
+VarR8FromStr: "-0.0", 0.000000, 0
+VarR8FromStr: "0.0", 0.000000, 0
+VarR8FromStr: "0.49", 0.490000, 0
+VarR8FromStr: "0.5", 0.500000, 0
+VarR8FromStr: "0.51", 0.510000, 0
+VarR8FromStr: "1", 1.000000, 0
+VarR8FromStr: "127", 127.000000, 0
+VarR8FromStr: "128", 128.000000, 0
+VarR8FromStr: "129", 129.000000, 0
+VarR8FromStr: "255", 255.000000, 0
+VarR8FromStr: "256", 256.000000, 0
+VarR8FromStr: "257", 257.000000, 0
+VarR8FromStr: "32767", 32767.000000, 0
+VarR8FromStr: "32768", 32768.000000, 0
+VarR8FromStr: "-32768", -32768.000000, 0
+VarR8FromStr: "-32769", -32769.000000, 0
+VarR8FromStr: "16777216", 16777216.000000, 0
+VarR8FromStr: "16777217", 16777217.000000, 0
+VarR8FromStr: "-16777216", -16777216.000000, 0
+VarR8FromStr: "16777217", 16777217.000000, 0
+VarR8FromStr: "2147483647", 2147483647.000000, 0
+VarR8FromStr: "2147483648", 2147483648.000000, 0
+VarR8FromStr: "-2147483647", -2147483647.000000, 0
+VarR8FromStr: "-2147483648", -2147483648.000000, 0
+VarR8FromStr: "", -2147483648.000000, 80020005
+VarR8FromStr: " ", -2147483648.000000, 80020005
+VarR8FromStr: "1F", -2147483648.000000, 80020005
+VarR8FromStr: "1G", -2147483648.000000, 80020005
+VarR8FromStr: " 1 ", 1.000000, 0
+VarR8FromStr: " 1 2 ", 1.000000, 80020005
+VarR8FromStr: "1,2,3", 123.000000, 0
+VarR8FromStr: "1 2 3", 123.000000, 80020005
+VarR8FromStr: "1,2, 3", 123.000000, 80020005
+VarR8FromStr: "1;2;3", 123.000000, 80020005
+VarR8FromStr: "1.2.3", 123.000000, 80020005
+VarR8FromStr: "0.", 0.000000, 0
+VarR8FromStr: ".0", 0.000000, 0
+VarR8FromStr: "0.1E12", 100000000000.000000, 0
+VarR8FromStr: "2.4,E1", 24.000000, 0
+VarR8FromStr: "  +3.2,E1", 32.000000, 0
+VarR8FromStr: "4E2.5", 32.000000, 80020005
+VarR8FromStr: "	2E+2", 200.000000, 0
+VarR8FromStr: "1 E+2", 200.000000, 80020005
+VarR8FromStr: ".", 200.000000, 80020005
+VarR8FromStr: ".E2", 200.000000, 80020005
+VarR8FromStr: "1000000000000000000000000000000000000000000000000000000000000000", 1000000000000000100000000000000000000000000000000000000000000000.000000, 0
+VarR8FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1.000000, 0
+VarR8FromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1.000000, 0
+VarR8FromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 99999999999999997000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000, 0
+VarR8FromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 1.000000, 0
+VarR8FromStr: "65535", 65535.000000, 0
+VarR8FromStr: "65535.5", 65535.500000, 0
+VarR8FromStr: "65536", 65536.000000, 0
+VarR8FromStr: "4294967295", 4294967295.000000, 0
+VarR8FromStr: "4294967296", 4294967296.000000, 0
+VarR8FromStr: "1 January 99", 4294967296.000000, 80020005
+VarR8FromStr: "December 31, 2078", 4294967296.000000, 80020005
+VarR8FromStr: "January 1, 1900", 4294967296.000000, 80020005
+VarR8FromStr: "January 2 1900", 4294967296.000000, 80020005
+VarR8FromStr: "11.11.1999", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999", 4294967296.000000, 80020005
+VarR8FromStr: " 11 / 11 / 1999", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999:11:11:1134", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11:11:11:1", 4294967296.000000, 80020005
+VarR8FromStr: "	1999/	11/21 11 :11:11am", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11:11:11Am", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11:11:11PM", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/199911:11:11PM", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 0:0:11am", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11,11:11am", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11:11:11am", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11/11:11am", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11:11AM", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 1AM", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 0AM", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 11:11:11", 4294967296.000000, 80020005
+VarR8FromStr: "11/13/1999 0AM", 4294967296.000000, 80020005
+VarR8FromStr: "13/13/1999 0AM", 4294967296.000000, 80020005
+VarR8FromStr: "13/11/1999 0AM", 4294967296.000000, 80020005
+VarR8FromStr: "11/33/1999 0AM", 4294967296.000000, 80020005
+VarR8FromStr: "11/11/1999 AM", 4294967296.000000, 80020005
+VarR8FromStr: "1/1/0 0AM", 4294967296.000000, 80020005
+VarR8FromStr: "1/1/-1 0AM", 4294967296.000000, 80020005
+VarR8FromStr: "1999 January 3 9AM", 4294967296.000000, 80020005
+VarR8FromStr: "1 January 1999 11AM", 4294967296.000000, 80020005
+VarR8FromStr: "4AM 11/11/1999", 4294967296.000000, 80020005
+VarR8FromStr: "4:22 11/11/1999 AM", 4294967296.000000, 80020005
+VarR8FromStr: " 1 1 /11/1999", 4294967296.000000, 80020005
+VarR8FromStr: "11-11/1999 11:11:11.12AM", 4294967296.000000, 80020005
+VarR8FromStr: "1999 January 3, 9AM", 4294967296.000000, 80020005
+VarR8FromStr: "December, 31, 2078", 4294967296.000000, 80020005
+VarR8FromStr: "December, 31, 2078,", 4294967296.000000, 80020005
+VarR8FromStr: "December, 31 2078", 4294967296.000000, 80020005
+VarR8FromStr: "11/99", 4294967296.000000, 80020005
+VarR8FromStr: "11-1999", 4294967296.000000, 80020005
+VarR8FromStr: "true", 4294967296.000000, 80020005
+VarR8FromStr: "True", 4294967296.000000, 80020005
+VarR8FromStr: "TRue", 4294967296.000000, 80020005
+VarR8FromStr: "TRUE", 4294967296.000000, 80020005
+VarR8FromStr: " TRUE", 4294967296.000000, 80020005
+VarR8FromStr: "FALSE ", 4294967296.000000, 80020005
+VarR8FromStr: "False", 4294967296.000000, 80020005
+VarR8FromStr: "JustSomeText", 4294967296.000000, 80020005
+VarR8FromStr: "Just Some Text", 4294967296.000000, 80020005
+VarR8FromStr: "", 4294967296.000000, 80020005
+VarR8FromStr: "1.5", 1.500000, 0
+VarR8FromStr: "2.5", 2.500000, 0
+VarR8FromStr: "3.5", 3.500000, 0
+VarR8FromStr: "4.5", 4.500000, 0
+VarR8FromStr: "", 4.500000, 80020005
+VarR8FromStr: "", 4.500000, 80020005
+VarR8FromStr: "", 4.500000, 80020005
+VarR8FromStr: "", 4.500000, 80020005
+VarR8FromStr: "", 4.500000, 80020005
+VarR8FromStr: "", 4.500000, 80020005
+
+
+======== Testing VarDateFromXXX ========
+VarDateFromI4: 2958465, 2958465.000000, 0
+VarDateFromI4: 2958466, 2958465.000000, 8002000A
+VarDateFromI4: -657434, -657434.000000, 0
+VarDateFromI4: -657435, -657434.000000, 8002000A
+VarDateFromR8: 2958465.9999, 2958465.999900, 0
+VarDateFromR8: 2958466, 2958465.999900, 8002000A
+VarDateFromR8: -657434.9999, -657434.999900, 0
+VarDateFromR8: -657435, -657434.999900, 8002000A
+VarDateFromR8: 0.0, 0.000000, 0
+VarDateFromR8: 1.0, 1.000000, 0
+VarDateFromR8: 2.25, 2.250000, 0
+VarDateFromR8: -2.0, -2.000000, 0
+VarDateFromStr: "-2", -2.000000, 80020005
+VarDateFromStr: "-1", -2.000000, 80020005
+VarDateFromStr: "-0.51", -2.000000, 80020005
+VarDateFromStr: "-0.5", -2.000000, 80020005
+VarDateFromStr: "-0.49", -2.000000, 80020005
+VarDateFromStr: "-0.0", -2.000000, 80020005
+VarDateFromStr: "0.0", 0.000000, 0
+VarDateFromStr: "0.49", 0.034028, 0
+VarDateFromStr: "0.5", 0.003472, 0
+VarDateFromStr: "0.51", 0.035417, 0
+VarDateFromStr: "1", 0.035417, 80020005
+VarDateFromStr: "127", 0.035417, 80020005
+VarDateFromStr: "128", 0.035417, 80020005
+VarDateFromStr: "129", 0.035417, 80020005
+VarDateFromStr: "255", 0.035417, 80020005
+VarDateFromStr: "256", 0.035417, 80020005
+VarDateFromStr: "257", 0.035417, 80020005
+VarDateFromStr: "32767", 0.035417, 80020005
+VarDateFromStr: "32768", 0.035417, 80020005
+VarDateFromStr: "-32768", 0.035417, 80020005
+VarDateFromStr: "-32769", 0.035417, 80020005
+VarDateFromStr: "16777216", 0.035417, 80020005
+VarDateFromStr: "16777217", 0.035417, 80020005
+VarDateFromStr: "-16777216", 0.035417, 80020005
+VarDateFromStr: "16777217", 0.035417, 80020005
+VarDateFromStr: "2147483647", 0.035417, 80020005
+VarDateFromStr: "2147483648", 0.035417, 80020005
+VarDateFromStr: "-2147483647", 0.035417, 80020005
+VarDateFromStr: "-2147483648", 0.035417, 80020005
+VarDateFromStr: "", 0.035417, 80020005
+VarDateFromStr: " ", 0.035417, 80020005
+VarDateFromStr: "1F", 0.035417, 80020005
+VarDateFromStr: "1G", 0.035417, 80020005
+VarDateFromStr: " 1 ", 0.035417, 80020005
+VarDateFromStr: " 1 2 ", 35797.000000, 0
+VarDateFromStr: "1,2,3", 37623.000000, 0
+VarDateFromStr: "1 2 3", 37623.000000, 0
+VarDateFromStr: "1,2, 3", 37623.000000, 0
+VarDateFromStr: "1;2;3", 37623.000000, 80020005
+VarDateFromStr: "1.2.3", 0.043090, 0
+VarDateFromStr: "0.", 0.043090, 80020005
+VarDateFromStr: ".0", 0.043090, 80020005
+VarDateFromStr: "0.1E12", 0.043090, 80020005
+VarDateFromStr: "2.4,E1", 0.043090, 80020005
+VarDateFromStr: "  +3.2,E1", 0.043090, 80020005
+VarDateFromStr: "4E2.5", 0.043090, 80020005
+VarDateFromStr: "	2E+2", 0.043090, 80020005
+VarDateFromStr: "1 E+2", 0.043090, 80020005
+VarDateFromStr: ".", 0.043090, 80020005
+VarDateFromStr: ".E2", 0.043090, 80020005
+VarDateFromStr: "1000000000000000000000000000000000000000000000000000000000000000", 0.043090, 80020005
+VarDateFromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 0.043090, 80020005
+VarDateFromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 0.043090, 80020005
+VarDateFromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 0.043090, 80020005
+VarDateFromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 0.043090, 80020005
+VarDateFromStr: "65535", 0.043090, 80020005
+VarDateFromStr: "65535.5", 0.043090, 80020005
+VarDateFromStr: "65536", 0.043090, 80020005
+VarDateFromStr: "4294967295", 0.043090, 80020005
+VarDateFromStr: "4294967296", 0.043090, 80020005
+VarDateFromStr: "1 January 99", 36161.000000, 0
+VarDateFromStr: "December 31, 2078", 65380.000000, 0
+VarDateFromStr: "January 1, 1900", 2.000000, 0
+VarDateFromStr: "January 2 1900", 3.000000, 0
+VarDateFromStr: "11.11.1999", 3.000000, 80020005
+VarDateFromStr: "11/11/1999", 36475.000000, 0
+VarDateFromStr: " 11 / 11 / 1999", 36475.000000, 0
+VarDateFromStr: "11/11/1999:11:11:1134", 36475.000000, 80020005
+VarDateFromStr: "11/11/1999 11:11:11:1", 36475.000000, 80020005
+VarDateFromStr: "	1999/	11/21 11 :11:11am", 36485.466100, 0
+VarDateFromStr: "11/11/1999 11:11:11Am", 36475.466100, 0
+VarDateFromStr: "11/11/1999 11:11:11PM", 36475.966100, 0
+VarDateFromStr: "11/11/199911:11:11PM", 36475.966100, 80020005
+VarDateFromStr: "11/11/1999 0:0:11am", 36475.000127, 0
+VarDateFromStr: "11/11/1999 11,11:11am", 36475.000127, 80020005
+VarDateFromStr: "11/11/1999 11:11:11am", 36475.466100, 0
+VarDateFromStr: "11/11/1999 11/11:11am", 36475.466100, 80020005
+VarDateFromStr: "11/11/1999 11:11AM", 36475.465972, 0
+VarDateFromStr: "11/11/1999 1AM", 36475.041667, 0
+VarDateFromStr: "11/11/1999 0AM", 36475.000000, 0
+VarDateFromStr: "11/11/1999 11:11:11", 36475.466100, 0
+VarDateFromStr: "11/13/1999 0AM", 36477.000000, 0
+VarDateFromStr: "13/13/1999 0AM", 36477.000000, 80020005
+VarDateFromStr: "13/11/1999 0AM", 36477.000000, 0
+VarDateFromStr: "11/33/1999 0AM", 36477.000000, 80020005
+VarDateFromStr: "11/11/1999 AM", 36477.000000, 80020005
+VarDateFromStr: "1/1/0 0AM", 36526.000000, 0
+VarDateFromStr: "1/1/-1 0AM", 36526.000000, 80020005
+VarDateFromStr: "1999 January 3 9AM", 36163.375000, 0
+VarDateFromStr: "1 January 1999 11AM", 36161.458333, 0
+VarDateFromStr: "4AM 11/11/1999", 36475.166667, 0
+VarDateFromStr: "4:22 11/11/1999 AM", 36475.166667, 80020005
+VarDateFromStr: " 1 1 /11/1999", 36475.166667, 80020005
+VarDateFromStr: "11-11/1999 11:11:11.12AM", 36475.166667, 80020005
+VarDateFromStr: "1999 January 3, 9AM", 36475.166667, 80020005
+VarDateFromStr: "December, 31, 2078", 65380.000000, 0
+VarDateFromStr: "December, 31, 2078,", 65380.000000, 80020005
+VarDateFromStr: "December, 31 2078", 65380.000000, 0
+VarDateFromStr: "11/99", 36465.000000, 0
+VarDateFromStr: "11-1999", 36465.000000, 0
+VarDateFromStr: "true", 36465.000000, 80020005
+VarDateFromStr: "True", 36465.000000, 80020005
+VarDateFromStr: "TRue", 36465.000000, 80020005
+VarDateFromStr: "TRUE", 36465.000000, 80020005
+VarDateFromStr: " TRUE", 36465.000000, 80020005
+VarDateFromStr: "FALSE ", 36465.000000, 80020005
+VarDateFromStr: "False", 36465.000000, 80020005
+VarDateFromStr: "JustSomeText", 36465.000000, 80020005
+VarDateFromStr: "Just Some Text", 36465.000000, 80020005
+VarDateFromStr: "", 36465.000000, 80020005
+VarDateFromStr: "1.5", 0.045139, 0
+VarDateFromStr: "2.5", 0.086806, 0
+VarDateFromStr: "3.5", 0.128472, 0
+VarDateFromStr: "4.5", 0.170139, 0
+VarDateFromStr: "", 0.170139, 80020005
+VarDateFromStr: "", 0.170139, 80020005
+VarDateFromStr: "", 0.170139, 80020005
+VarDateFromStr: "", 0.170139, 80020005
+VarDateFromStr: "", 0.170139, 80020005
+VarDateFromStr: "", 0.170139, 80020005
+
+
+======== Testing VarBoolFromXXX ========
+VarBoolFromI4: 0, 0, 0
+VarBoolFromI4: 1, -1, 0
+VarBoolFromI4: -1, -1, 0
+VarBoolFromI4: 2, -1, 0
+VarBoolFromUI1: ' ', -1, 0
+VarBoolFromUI1: '\0', 0, 0
+VarBoolFromUI1: 0x0000, 0, 0
+VarBoolFromUI1: 0xFFF, -1, 0
+VarBoolFromUI1: 0xFFFF, -1, 0
+VarBoolFromR8: 0.0, 0, 0
+VarBoolFromR8: 1.1, -1, 0
+VarBoolFromR8: 0.5, -1, 0
+VarBoolFromR8: 0.49, -1, 0
+VarBoolFromR8: 0.51, -1, 0
+VarBoolFromR8: -0.5, -1, 0
+VarBoolFromR8: -0.49, -1, 0
+VarBoolFromR8: -0.51, -1, 0
+VarBoolFromStr: "-2", -1, 0
+VarBoolFromStr: "-1", -1, 0
+VarBoolFromStr: "-0.51", -1, 0
+VarBoolFromStr: "-0.5", -1, 0
+VarBoolFromStr: "-0.49", -1, 0
+VarBoolFromStr: "-0.0", 0, 0
+VarBoolFromStr: "0.0", 0, 0
+VarBoolFromStr: "0.49", -1, 0
+VarBoolFromStr: "0.5", -1, 0
+VarBoolFromStr: "0.51", -1, 0
+VarBoolFromStr: "1", -1, 0
+VarBoolFromStr: "127", -1, 0
+VarBoolFromStr: "128", -1, 0
+VarBoolFromStr: "129", -1, 0
+VarBoolFromStr: "255", -1, 0
+VarBoolFromStr: "256", -1, 0
+VarBoolFromStr: "257", -1, 0
+VarBoolFromStr: "32767", -1, 0
+VarBoolFromStr: "32768", -1, 0
+VarBoolFromStr: "-32768", -1, 0
+VarBoolFromStr: "-32769", -1, 0
+VarBoolFromStr: "16777216", -1, 0
+VarBoolFromStr: "16777217", -1, 0
+VarBoolFromStr: "-16777216", -1, 0
+VarBoolFromStr: "16777217", -1, 0
+VarBoolFromStr: "2147483647", -1, 0
+VarBoolFromStr: "2147483648", -1, 0
+VarBoolFromStr: "-2147483647", -1, 0
+VarBoolFromStr: "-2147483648", -1, 0
+VarBoolFromStr: "", -1, 80020005
+VarBoolFromStr: " ", -1, 80020005
+VarBoolFromStr: "1F", -1, 80020005
+VarBoolFromStr: "1G", -1, 80020005
+VarBoolFromStr: " 1 ", -1, 0
+VarBoolFromStr: " 1 2 ", -1, 80020005
+VarBoolFromStr: "1,2,3", -1, 0
+VarBoolFromStr: "1 2 3", -1, 80020005
+VarBoolFromStr: "1,2, 3", -1, 80020005
+VarBoolFromStr: "1;2;3", -1, 80020005
+VarBoolFromStr: "1.2.3", -1, 80020005
+VarBoolFromStr: "0.", 0, 0
+VarBoolFromStr: ".0", 0, 0
+VarBoolFromStr: "0.1E12", -1, 0
+VarBoolFromStr: "2.4,E1", -1, 0
+VarBoolFromStr: "  +3.2,E1", -1, 0
+VarBoolFromStr: "4E2.5", -1, 80020005
+VarBoolFromStr: "	2E+2", -1, 0
+VarBoolFromStr: "1 E+2", -1, 80020005
+VarBoolFromStr: ".", -1, 80020005
+VarBoolFromStr: ".E2", -1, 80020005
+VarBoolFromStr: "1000000000000000000000000000000000000000000000000000000000000000", -1, 0
+VarBoolFromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", -1, 0
+VarBoolFromStr: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", -1, 0
+VarBoolFromStr: "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", -1, 0
+VarBoolFromStr: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", -1, 0
+VarBoolFromStr: "65535", -1, 0
+VarBoolFromStr: "65535.5", -1, 0
+VarBoolFromStr: "65536", -1, 0
+VarBoolFromStr: "4294967295", -1, 0
+VarBoolFromStr: "4294967296", -1, 0
+VarBoolFromStr: "1 January 99", -1, 80020005
+VarBoolFromStr: "December 31, 2078", -1, 80020005
+VarBoolFromStr: "January 1, 1900", -1, 80020005
+VarBoolFromStr: "January 2 1900", -1, 80020005
+VarBoolFromStr: "11.11.1999", -1, 80020005
+VarBoolFromStr: "11/11/1999", -1, 80020005
+VarBoolFromStr: " 11 / 11 / 1999", -1, 80020005
+VarBoolFromStr: "11/11/1999:11:11:1134", -1, 80020005
+VarBoolFromStr: "11/11/1999 11:11:11:1", -1, 80020005
+VarBoolFromStr: "	1999/	11/21 11 :11:11am", -1, 80020005
+VarBoolFromStr: "11/11/1999 11:11:11Am", -1, 80020005
+VarBoolFromStr: "11/11/1999 11:11:11PM", -1, 80020005
+VarBoolFromStr: "11/11/199911:11:11PM", -1, 80020005
+VarBoolFromStr: "11/11/1999 0:0:11am", -1, 80020005
+VarBoolFromStr: "11/11/1999 11,11:11am", -1, 80020005
+VarBoolFromStr: "11/11/1999 11:11:11am", -1, 80020005
+VarBoolFromStr: "11/11/1999 11/11:11am", -1, 80020005
+VarBoolFromStr: "11/11/1999 11:11AM", -1, 80020005
+VarBoolFromStr: "11/11/1999 1AM", -1, 80020005
+VarBoolFromStr: "11/11/1999 0AM", -1, 80020005
+VarBoolFromStr: "11/11/1999 11:11:11", -1, 80020005
+VarBoolFromStr: "11/13/1999 0AM", -1, 80020005
+VarBoolFromStr: "13/13/1999 0AM", -1, 80020005
+VarBoolFromStr: "13/11/1999 0AM", -1, 80020005
+VarBoolFromStr: "11/33/1999 0AM", -1, 80020005
+VarBoolFromStr: "11/11/1999 AM", -1, 80020005
+VarBoolFromStr: "1/1/0 0AM", -1, 80020005
+VarBoolFromStr: "1/1/-1 0AM", -1, 80020005
+VarBoolFromStr: "1999 January 3 9AM", -1, 80020005
+VarBoolFromStr: "1 January 1999 11AM", -1, 80020005
+VarBoolFromStr: "4AM 11/11/1999", -1, 80020005
+VarBoolFromStr: "4:22 11/11/1999 AM", -1, 80020005
+VarBoolFromStr: " 1 1 /11/1999", -1, 80020005
+VarBoolFromStr: "11-11/1999 11:11:11.12AM", -1, 80020005
+VarBoolFromStr: "1999 January 3, 9AM", -1, 80020005
+VarBoolFromStr: "December, 31, 2078", -1, 80020005
+VarBoolFromStr: "December, 31, 2078,", -1, 80020005
+VarBoolFromStr: "December, 31 2078", -1, 80020005
+VarBoolFromStr: "11/99", -1, 80020005
+VarBoolFromStr: "11-1999", -1, 80020005
+VarBoolFromStr: "true", -1, 0
+VarBoolFromStr: "True", -1, 0
+VarBoolFromStr: "TRue", -1, 0
+VarBoolFromStr: "TRUE", -1, 0
+VarBoolFromStr: " TRUE", -1, 80020005
+VarBoolFromStr: "FALSE ", -1, 80020005
+VarBoolFromStr: "False", 0, 0
+VarBoolFromStr: "JustSomeText", 0, 80020005
+VarBoolFromStr: "Just Some Text", 0, 80020005
+VarBoolFromStr: "", 0, 80020005
+VarBoolFromStr: "1.5", -1, 0
+VarBoolFromStr: "2.5", -1, 0
+VarBoolFromStr: "3.5", -1, 0
+VarBoolFromStr: "4.5", -1, 0
+VarBoolFromStr: "", -1, 80020005
+VarBoolFromStr: "", -1, 80020005
+VarBoolFromStr: "", -1, 80020005
+VarBoolFromStr: "", -1, 80020005
+VarBoolFromStr: "", -1, 80020005
+VarBoolFromStr: "", -1, 80020005
+VarI1FromBool: VARIANT_TRUE, 255, 0
+VarUI2FromI2: -1, 0, 8002000A
+
+
+======== Testing VarBSTRFromXXX ========
+VarBstrFromI1: -100, "-100", 0
+VarBstrFromUI1: 0x5A, "90", 0
+VarBstrFromI4: 2958465, "2958465", 0
+VarBstrFromR8: 1.000000, "1", 0
+VarBstrFromR8: -1.000000, "-1", 0
+VarBstrFromR8: 21.000000, "21", 0
+VarBstrFromR8: -21.000000, "-21", 0
+VarBstrFromR8: 321.000000, "321", 0
+VarBstrFromR8: -321.000000, "-321", 0
+VarBstrFromR8: 4321.000000, "4321", 0
+VarBstrFromR8: -4321.000000, "-4321", 0
+VarBstrFromR8: 54321.000000, "54321", 0
+VarBstrFromR8: -54321.000000, "-54321", 0
+VarBstrFromR8: 654321.000000, "654321", 0
+VarBstrFromR8: -654321.000000, "-654321", 0
+VarBstrFromR8: 7654321.000000, "7654321", 0
+VarBstrFromR8: -7654321.000000, "-7654321", 0
+VarBstrFromR8: 87654321.000000, "87654321", 0
+VarBstrFromR8: -87654321.000000, "-87654321", 0
+VarBstrFromR8: 987654321.000000, "987654321", 0
+VarBstrFromR8: -987654321.000000, "-987654321", 0
+VarBstrFromR8: 1987654321.000000, "1987654321", 0
+VarBstrFromR8: -1987654321.000000, "-1987654321", 0
+VarBstrFromR8: 21987654321.000000, "21987654321", 0
+VarBstrFromR8: -21987654321.000000, "-21987654321", 0
+VarBstrFromR8: 321987654321.000000, "321987654321", 0
+VarBstrFromR8: -321987654321.000000, "-321987654321", 0
+VarBstrFromR8: 4321987654321.000000, "4321987654321", 0
+VarBstrFromR8: -4321987654321.000000, "-4321987654321", 0
+VarBstrFromR8: 54321987654321.000000, "54321987654321", 0
+VarBstrFromR8: -54321987654321.000000, "-54321987654321", 0
+VarBstrFromR8: 654321987654321.000000, "654321987654321", 0
+VarBstrFromR8: -654321987654321.000000, "-654321987654321", 0
+VarBstrFromR8: 7654321987654321.000000, "7.65432198765432e+15", 0
+VarBstrFromR8: -7654321987654321.000000, "-7.65432198765432e+15", 0
+VarBstrFromR8: 87654321987654320.000000, "8.76543219876543e+16", 0
+VarBstrFromR8: -87654321987654320.000000, "-8.76543219876543e+16", 0
+VarBstrFromR8: 987654321987654270.000000, "9.87654321987654e+17", 0
+VarBstrFromR8: -987654321987654270.000000, "-9.87654321987654e+17", 0
+VarBstrFromR8: 1987654321987654100.000000, "1.98765432198765e+18", 0
+VarBstrFromR8: -1987654321987654100.000000, "-1.98765432198765e+18", 0
+VarBstrFromR8: 21987654321987654000.000000, "2.19876543219877e+19", 0
+VarBstrFromR8: -21987654321987654000.000000, "-2.19876543219877e+19", 0
+VarBstrFromR8: 1.000000, "1", 0
+VarBstrFromR8: 0.000000, "0", 0
+VarBstrFromR8: -1.000000, "-1", 0
+VarBstrFromR8: 1.200000, "1.2", 0
+VarBstrFromR8: 0.200000, "0.2", 0
+VarBstrFromR8: -1.200000, "-1.2", 0
+VarBstrFromR8: 1.230000, "1.23", 0
+VarBstrFromR8: 0.230000, "0.23", 0
+VarBstrFromR8: -1.230000, "-1.23", 0
+VarBstrFromR8: 1.234000, "1.234", 0
+VarBstrFromR8: 0.234000, "0.234", 0
+VarBstrFromR8: -1.234000, "-1.234", 0
+VarBstrFromR8: 1.234500, "1.2345", 0
+VarBstrFromR8: 0.234500, "0.2345", 0
+VarBstrFromR8: -1.234500, "-1.2345", 0
+VarBstrFromR8: 1.234560, "1.23456", 0
+VarBstrFromR8: 0.234560, "0.23456", 0
+VarBstrFromR8: -1.234560, "-1.23456", 0
+VarBstrFromR8: 1.234567, "1.234567", 0
+VarBstrFromR8: 0.234567, "0.234567", 0
+VarBstrFromR8: -1.234567, "-1.234567", 0
+VarBstrFromR8: 1.234568, "1.2345678", 0
+VarBstrFromR8: 0.234568, "0.2345678", 0
+VarBstrFromR8: -1.234568, "-1.2345678", 0
+VarBstrFromR8: 1.234568, "1.23456789", 0
+VarBstrFromR8: 0.234568, "0.23456789", 0
+VarBstrFromR8: -1.234568, "-1.23456789", 0
+VarBstrFromR8: 1.234568, "1.234567891", 0
+VarBstrFromR8: 0.234568, "0.234567891", 0
+VarBstrFromR8: -1.234568, "-1.234567891", 0
+VarBstrFromR8: 1.234568, "1.2345678912", 0
+VarBstrFromR8: 0.234568, "0.2345678912", 0
+VarBstrFromR8: -1.234568, "-1.2345678912", 0
+VarBstrFromR8: 1.234568, "1.23456789123", 0
+VarBstrFromR8: 0.234568, "0.23456789123", 0
+VarBstrFromR8: -1.234568, "-1.23456789123", 0
+VarBstrFromR8: 1.234568, "1.234567891234", 0
+VarBstrFromR8: 0.234568, "0.234567891234", 0
+VarBstrFromR8: -1.234568, "-1.234567891234", 0
+VarBstrFromR8: 1.234568, "1.2345678912345", 0
+VarBstrFromR8: 0.234568, "0.2345678912345", 0
+VarBstrFromR8: -1.234568, "-1.2345678912345", 0
+VarBstrFromR8: 1.234568, "1.23456789123456", 0
+VarBstrFromR8: 0.234568, "0.23456789123456", 0
+VarBstrFromR8: -1.234568, "-1.23456789123456", 0
+VarBstrFromR8: 1.234568, "1.23456789123457", 0
+VarBstrFromR8: 0.234568, "0.234567891234567", 0
+VarBstrFromR8: -1.234568, "-1.23456789123457", 0
+VarBstrFromR8: 1.234568, "1.23456789123457", 0
+VarBstrFromR8: 0.234568, "0.234567891234568", 0
+VarBstrFromR8: -1.234568, "-1.23456789123457", 0
+VarBstrFromR8: 1.234568, "1.23456789123457", 0
+VarBstrFromR8: 0.234568, "0.234567891234568", 0
+VarBstrFromR8: -1.234568, "-1.23456789123457", 0
+VarBstrFromR8: 1.234568, "1.23456789123457", 0
+VarBstrFromR8: 0.234568, "0.234567891234568", 0
+VarBstrFromR8: -1.234568, "-1.23456789123457", 0
+VarBstrFromR8: 1.234568, "1.23456789123457", 0
+VarBstrFromR8: 0.234568, "0.234567891234568", 0
+VarBstrFromR8: -1.234568, "-1.23456789123457", 0
+VarBstrFromR8: 2.000000, "2", 0
+VarBstrFromR8: -2.000000, "-2", 0
+VarBstrFromR8: 22.200000, "22.2", 0
+VarBstrFromR8: -22.200000, "-22.2", 0
+VarBstrFromR8: 322.230000, "322.23", 0
+VarBstrFromR8: -322.230000, "-322.23", 0
+VarBstrFromR8: 4322.234000, "4322.234", 0
+VarBstrFromR8: -4322.234000, "-4322.234", 0
+VarBstrFromR8: 54322.234500, "54322.2345", 0
+VarBstrFromR8: -54322.234500, "-54322.2345", 0
+VarBstrFromR8: 654322.234560, "654322.23456", 0
+VarBstrFromR8: -654322.234560, "-654322.23456", 0
+VarBstrFromR8: 7654322.234567, "7654322.234567", 0
+VarBstrFromR8: -7654322.234567, "-7654322.234567", 0
+VarBstrFromR8: 87654322.234568, "87654322.2345678", 0
+VarBstrFromR8: -87654322.234568, "-87654322.2345678", 0
+VarBstrFromR8: 987654322.234568, "987654322.234568", 0
+VarBstrFromR8: -987654322.234568, "-987654322.234568", 0
+VarBstrFromR8: 1987654322.234568, "1987654322.23457", 0
+VarBstrFromR8: -1987654322.234568, "-1987654322.23457", 0
+VarBstrFromR8: 21987654322.234570, "21987654322.2346", 0
+VarBstrFromR8: -21987654322.234570, "-21987654322.2346", 0
+VarBstrFromR8: 321987654322.234560, "321987654322.235", 0
+VarBstrFromR8: -321987654322.234560, "-321987654322.235", 0
+VarBstrFromR8: 4321987654322.234400, "4321987654322.23", 0
+VarBstrFromR8: -4321987654322.234400, "-4321987654322.23", 0
+VarBstrFromR8: 54321987654322.234000, "54321987654322.2", 0
+VarBstrFromR8: -54321987654322.234000, "-54321987654322.2", 0
+VarBstrFromR8: 654321987654322.250000, "654321987654322", 0
+VarBstrFromR8: -654321987654322.250000, "-654321987654322", 0
+VarBstrFromR8: 7654321987654322.000000, "7.65432198765432e+15", 0
+VarBstrFromR8: -7654321987654322.000000, "-7.65432198765432e+15", 0
+VarBstrFromR8: 87654321987654320.000000, "8.76543219876543e+16", 0
+VarBstrFromR8: -87654321987654320.000000, "-8.76543219876543e+16", 0
+VarBstrFromR8: 987654321987654270.000000, "9.87654321987654e+17", 0
+VarBstrFromR8: -987654321987654270.000000, "-9.87654321987654e+17", 0
+VarBstrFromR8: 1987654321987654100.000000, "1.98765432198765e+18", 0
+VarBstrFromR8: -1987654321987654100.000000, "-1.98765432198765e+18", 0
+VarBstrFromR8: 21987654321987654000.000000, "2.19876543219877e+19", 0
+VarBstrFromR8: -21987654321987654000.000000, "-2.19876543219877e+19", 0
+VarBstrFromR4: 1.000000, "1", 0
+VarBstrFromR4: -1.000000, "-1", 0
+VarBstrFromR4: 21.000000, "21", 0
+VarBstrFromR4: -21.000000, "-21", 0
+VarBstrFromR4: 321.000000, "321", 0
+VarBstrFromR4: -321.000000, "-321", 0
+VarBstrFromR4: 4321.000000, "4321", 0
+VarBstrFromR4: -4321.000000, "-4321", 0
+VarBstrFromR4: 54321.000000, "54321", 0
+VarBstrFromR4: -54321.000000, "-54321", 0
+VarBstrFromR4: 654321.000000, "654321", 0
+VarBstrFromR4: -654321.000000, "-654321", 0
+VarBstrFromR4: 7654321.000000, "7654321", 0
+VarBstrFromR4: -7654321.000000, "-7654321", 0
+VarBstrFromR4: 87654321.000000, "8.765432e+07", 0
+VarBstrFromR4: -87654321.000000, "-8.765432e+07", 0
+VarBstrFromR4: 987654321.000000, "9.876543e+08", 0
+VarBstrFromR4: -987654321.000000, "-9.876543e+08", 0
+VarBstrFromR4: 1987654321.000000, "1.987654e+09", 0
+VarBstrFromR4: -1987654321.000000, "-1.987654e+09", 0
+VarBstrFromR4: 1.000000, "1", 0
+VarBstrFromR4: 0.000000, "0", 0
+VarBstrFromR4: -1.000000, "-1", 0
+VarBstrFromR4: 1.200000, "1.2", 0
+VarBstrFromR4: 0.200000, "0.2", 0
+VarBstrFromR4: -1.200000, "-1.2", 0
+VarBstrFromR4: 1.230000, "1.23", 0
+VarBstrFromR4: 0.230000, "0.23", 0
+VarBstrFromR4: -1.230000, "-1.23", 0
+VarBstrFromR4: 1.234000, "1.234", 0
+VarBstrFromR4: 0.234000, "0.234", 0
+VarBstrFromR4: -1.234000, "-1.234", 0
+VarBstrFromR4: 1.234500, "1.2345", 0
+VarBstrFromR4: 0.234500, "0.2345", 0
+VarBstrFromR4: -1.234500, "-1.2345", 0
+VarBstrFromR4: 1.234560, "1.23456", 0
+VarBstrFromR4: 0.234560, "0.23456", 0
+VarBstrFromR4: -1.234560, "-1.23456", 0
+VarBstrFromR4: 1.234567, "1.234567", 0
+VarBstrFromR4: 0.234567, "0.234567", 0
+VarBstrFromR4: -1.234567, "-1.234567", 0
+VarBstrFromR4: 1.234568, "1.234568", 0
+VarBstrFromR4: 0.234568, "0.2345678", 0
+VarBstrFromR4: -1.234568, "-1.234568", 0
+VarBstrFromR4: 1.234568, "1.234568", 0
+VarBstrFromR4: 0.234568, "0.2345679", 0
+VarBstrFromR4: -1.234568, "-1.234568", 0
+VarBstrFromR4: 1.234568, "1.234568", 0
+VarBstrFromR4: 0.234568, "0.2345679", 0
+VarBstrFromR4: -1.234568, "-1.234568", 0
+VarBstrFromR4: 2.000000, "2", 0
+VarBstrFromR4: -2.000000, "-2", 0
+VarBstrFromR4: 22.200000, "22.2", 0
+VarBstrFromR4: -22.200000, "-22.2", 0
+VarBstrFromR4: 322.230000, "322.23", 0
+VarBstrFromR4: -322.230000, "-322.23", 0
+VarBstrFromR4: 4322.234000, "4322.234", 0
+VarBstrFromR4: -4322.234000, "-4322.234", 0
+VarBstrFromR4: 54322.234500, "54322.23", 0
+VarBstrFromR4: -54322.234500, "-54322.23", 0
+VarBstrFromR4: 654322.234560, "654322.3", 0
+VarBstrFromR4: -654322.234560, "-654322.3", 0
+VarBstrFromR4: 7654322.234567, "7654322", 0
+VarBstrFromR4: -7654322.234567, "-7654322", 0
+VarBstrFromR4: 87654322.234568, "8.765432e+07", 0
+VarBstrFromR4: -87654322.234568, "-8.765432e+07", 0
+VarBstrFromR4: 987654322.234568, "9.876543e+08", 0
+VarBstrFromR4: -987654322.234568, "-9.876543e+08", 0
+VarBstrFromR4: 1987654322.234568, "1.987654e+09", 0
+VarBstrFromR4: -1987654322.234568, "-1.987654e+09", 0
+VarBstrFromBool: 0x00, "False", 0
+VarBstrFromBool: 0xFF, "True", 0
+VarBstrFromDate: 0.0, "12:00:00 AM", 0
+VarBstrFromDate: 3.34, "1/2/1900 8:09:36 AM", 0
+VarBstrFromDate: 3339.34, "2/20/1909 8:09:36 AM", 0
+VarBstrFromDate: 365.00, "12/30/1900", 0
+VarBstrFromDate: 365.25, "12/30/1900 6:00:00 AM", 0
+VarBstrFromDate: 1461.00, "12/31/1903", 0
+VarBstrFromDate: 1461.5, "12/31/1903 12:00:00 PM", 0
+VarBstrFromBool: 0x00, "False", 0
+VarBstrFromBool: 0xFF, "True", 0
+VarBstrFromDate: 0.0, "12:00:00 AM", 0
+VarBstrFromDate: 3.34, "1/2/1900 8:09:36 AM", 0
+
+
+======== Testing Hi-Level Variant API ========
+Result is: 80020008
+VariantClear: 0
+VariantClear: 0
+VariantCopy: 0
+VariantClear: 0
+VariantClear: 0
+VariantCopy 4.123000 -> 4.123000: 0
+VariantCopyInd 31.123000: 0
+VariantCopy 1.123000 -> 1.123000: 0
+VariantCopy 123.123000 -> 123.123000: 0
+VariantCopyInd 111.200000 -> 111.200000: 0
+VariantChangeTypeEx 1211: 0
+VariantChangeTypeEx 4 -> "4": 0
+VariantChangeTypeEx 34465.332431 -> "5/11/94 7:58:42 AM": 0
+VariantChangeTypeEx "-0.49" -> -0.490000: 0
+VariantCopyInd: 80070057
+-------------- Testing different VARTYPES ----------------
+VariantCopyInd: 0 -> 0
+VariantCopyInd: 0 -> 80070057
+VariantChangeTypeEx: 0 -> 0
+VariantChangeTypeEx: VT_BYREF 0 -> 80020008
+VariantClear: 0 -> 80020008
+VariantCopyInd: 1 -> 0
+VariantCopyInd: 1 -> 80070057
+VariantChangeTypeEx: 1 -> 0
+VariantChangeTypeEx: VT_BYREF 1 -> 80020008
+VariantClear: 1 -> 80020008
+VariantCopyInd: 2 -> 0
+VariantCopyInd: 2 -> 0
+VariantChangeTypeEx: 2 -> 0
+VariantChangeTypeEx: VT_BYREF 2 -> 80020005
+VariantClear: 2 -> 80020008
+VariantCopyInd: 3 -> 0
+VariantCopyInd: 3 -> 0
+VariantChangeTypeEx: 3 -> 0
+VariantChangeTypeEx: VT_BYREF 3 -> 80020005
+VariantClear: 3 -> 80020008
+VariantCopyInd: 4 -> 0
+VariantCopyInd: 4 -> 0
+VariantChangeTypeEx: 4 -> 0
+VariantChangeTypeEx: VT_BYREF 4 -> 80020005
+VariantClear: 4 -> 80020008
+VariantCopyInd: 5 -> 0
+VariantCopyInd: 5 -> 0
+VariantChangeTypeEx: 5 -> 0
+VariantChangeTypeEx: VT_BYREF 5 -> 80020005
+VariantClear: 5 -> 80020008
+VariantCopyInd: 6 -> 0
+VariantCopyInd: 6 -> 0
+VariantChangeTypeEx: 6 -> 0
+VariantChangeTypeEx: VT_BYREF 6 -> 80020005
+VariantClear: 6 -> 80020008
+VariantCopyInd: 7 -> 0
+VariantCopyInd: 7 -> 0
+VariantChangeTypeEx: 7 -> 0
+VariantChangeTypeEx: VT_BYREF 7 -> 80020005
+VariantClear: 7 -> 80020008
+VariantCopyInd: 77 -> 80020008
+VariantCopyInd: 77 -> 80070057
+VariantChangeTypeEx: 77 -> 80020008
+VariantChangeTypeEx: VT_BYREF 77 -> 80020008
+VariantClear: 77 -> 80020008
+VariantCopyInd: 78 -> 80020008
+VariantCopyInd: 78 -> 80070057
+VariantChangeTypeEx: 78 -> 80020008
+VariantChangeTypeEx: VT_BYREF 78 -> 80020008
+VariantClear: 78 -> 80020008
+VariantCopyInd: 79 -> 80020008
+VariantCopyInd: 79 -> 80070057
+VariantChangeTypeEx: 79 -> 80020008
+VariantChangeTypeEx: VT_BYREF 79 -> 80020008
+VariantClear: 79 -> 80020008
+VariantCopyInd: 80 -> 80020008
+VariantCopyInd: 80 -> 80070057
+VariantChangeTypeEx: 80 -> 80020008
+VariantChangeTypeEx: VT_BYREF 80 -> 80020008
+VariantClear: 80 -> 80020008
+VariantCopyInd: 81 -> 80020008
+VariantCopyInd: 81 -> 80070057
+VariantChangeTypeEx: 81 -> 80020008
+VariantChangeTypeEx: VT_BYREF 81 -> 80020008
+VariantClear: 81 -> 80020008
+VariantCopyInd: 82 -> 80020008
+VariantCopyInd: 82 -> 80070057
+VariantChangeTypeEx: 82 -> 80020008
+VariantChangeTypeEx: VT_BYREF 82 -> 80020008
+VariantClear: 82 -> 80020008
+VariantCopyInd: 83 -> 80020008
+VariantCopyInd: 83 -> 80070057
+VariantChangeTypeEx: 83 -> 80020008
+VariantChangeTypeEx: VT_BYREF 83 -> 80020008
+VariantClear: 83 -> 80020008
+VariantCopyInd: 84 -> 80020008
+VariantCopyInd: 84 -> 80070057
+VariantChangeTypeEx: 84 -> 80020008
+VariantChangeTypeEx: VT_BYREF 84 -> 80020008
+VariantClear: 84 -> 80020008
+VariantCopyInd: 85 -> 80020008
+VariantCopyInd: 85 -> 80070057
+VariantChangeTypeEx: 85 -> 80020008
+VariantChangeTypeEx: VT_BYREF 85 -> 80020008
+VariantClear: 85 -> 80020008
+VariantCopyInd: 86 -> 80020008
+VariantCopyInd: 86 -> 80070057
+VariantChangeTypeEx: 86 -> 80020008
+VariantChangeTypeEx: VT_BYREF 86 -> 80020008
+VariantClear: 86 -> 80020008
+VariantCopyInd: 87 -> 80020008
+VariantCopyInd: 87 -> 80070057
+VariantChangeTypeEx: 87 -> 80020008
+VariantChangeTypeEx: VT_BYREF 87 -> 80020008
+VariantClear: 87 -> 80020008
+VariantCopyInd: 88 -> 80020008
+VariantCopyInd: 88 -> 80070057
+VariantChangeTypeEx: 88 -> 80020008
+VariantChangeTypeEx: VT_BYREF 88 -> 80020008
+VariantClear: 88 -> 80020008
+VariantCopyInd: 89 -> 80020008
+VariantCopyInd: 89 -> 80070057
+VariantChangeTypeEx: 89 -> 80020008
+VariantChangeTypeEx: VT_BYREF 89 -> 80020008
+VariantClear: 89 -> 80020008
+VariantCopyInd: 90 -> 80020008
+VariantCopyInd: 90 -> 80070057
+VariantChangeTypeEx: 90 -> 80020008
+VariantChangeTypeEx: VT_BYREF 90 -> 80020008
+VariantClear: 90 -> 80020008
+VariantCopyInd: 91 -> 80020008
+VariantCopyInd: 91 -> 80070057
+VariantChangeTypeEx: 91 -> 80020008
+VariantChangeTypeEx: VT_BYREF 91 -> 80020008
+VariantClear: 91 -> 80020008
+VariantCopyInd: 92 -> 80020008
+VariantCopyInd: 92 -> 80070057
+VariantChangeTypeEx: 92 -> 80020008
+VariantChangeTypeEx: VT_BYREF 92 -> 80020008
+VariantClear: 92 -> 80020008
+VariantCopyInd: 93 -> 80020008
+VariantCopyInd: 93 -> 80070057
+VariantChangeTypeEx: 93 -> 80020008
+VariantChangeTypeEx: VT_BYREF 93 -> 80020008
+VariantClear: 93 -> 80020008
+VariantCopyInd: 94 -> 80020008
+VariantCopyInd: 94 -> 80070057
+VariantChangeTypeEx: 94 -> 80020008
+VariantChangeTypeEx: VT_BYREF 94 -> 80020008
+VariantClear: 94 -> 80020008
+VariantCopyInd: 95 -> 80020008
+VariantCopyInd: 95 -> 80070057
+VariantChangeTypeEx: 95 -> 80020008
+VariantChangeTypeEx: VT_BYREF 95 -> 80020008
+VariantClear: 95 -> 80020008
+VariantCopyInd: 96 -> 80020008
+VariantCopyInd: 96 -> 80070057
+VariantChangeTypeEx: 96 -> 80020008
+VariantChangeTypeEx: VT_BYREF 96 -> 80020008
+VariantClear: 96 -> 80020008
+VariantCopyInd: 97 -> 80020008
+VariantCopyInd: 97 -> 80070057
+VariantChangeTypeEx: 97 -> 80020008
+VariantChangeTypeEx: VT_BYREF 97 -> 80020008
+VariantClear: 97 -> 80020008
+VariantCopyInd: 98 -> 80020008
+VariantCopyInd: 98 -> 80070057
+VariantChangeTypeEx: 98 -> 80020008
+VariantChangeTypeEx: VT_BYREF 98 -> 80020008
+VariantClear: 98 -> 80020008
+VariantCopyInd: 99 -> 80020008
+VariantCopyInd: 99 -> 80070057
+VariantChangeTypeEx: 99 -> 80020008
+VariantChangeTypeEx: VT_BYREF 99 -> 80020008
+VariantClear: 99 -> 80020008
+VariantClear: 80020008
+VariantClear: 0
+VariantClear: 0
+VariantClear: 0
+VariantClear: 0
diff --git a/libtest/vartest.c b/libtest/vartest.c
new file mode 100644
index 0000000..8506cf2
--- /dev/null
+++ b/libtest/vartest.c
@@ -0,0 +1,1051 @@
+/*
+ * VARIANT test program
+ *
+ * Copyright 1998 Jean-Claude Cote
+ *
+ * The purpose of this program is validate the implementation
+ * of the APIs related to VARIANTs. The validation is done
+ * by comparing the results given by the Windows implementation
+ * versus the Wine implementation.
+ *
+ * This program tests the creation/coercion/destruction of VARIANTs.
+ *
+ * The program does not currently test any API that takes
+ * arguments of type: IDispatch, IUnknown, DECIMAL, CURRENCY.
+ *
+ * Since the purpose of this program is to compare the results
+ * from Windows and Wine it is written so that with a simple
+ * define it can be compiled either in Windows or Linux.
+ *
+ *
+ * NOTES
+ *	 - The Variant structure in Windows has a non-named union. This means
+ *	 the member of the union are accessible simply by doing pVariant->pfltVal.
+ *	 With gcc it is not possible to have non-named union so it has been named
+ *	 'u'.  So it's members are accessible using this name like so
+ *	 pVariant->u.pfltVal.  So if this program is compiled in Windows
+ *	 the references to 'u' will need to be take out of this file.
+ *
+ *	 - Also the printf is a little different so the format specifiers may
+ *	 need to be tweaked if this file is compile in Windows.
+ *	 Printf is also different in that it continues printing numbers
+ *	 even after there is no more significative digits left to print.  These
+ *	 number are garbage and in windows they are set to zero but not
+ *	 on Linux.
+ *
+ *	 - The VarDateFromStr is not implemented yet.
+ *
+ *	 - The date and floating point format may not be the exact same format has the one in
+ *	 windows depending on what the Internatinal setting are in windows.
+ *
+ */
+
+
+
+#include <stdio.h>
+#include <malloc.h>
+#include <windows.h>
+#include <winerror.h>
+#include <winnt.h>
+
+#include <oleauto.h>
+
+#include <math.h>
+#include <float.h>
+#include <time.h>
+
+#if WINDOWS
+#include <wtypes.h>
+#else
+#include <wintypes.h>
+#endif
+
+
+#ifdef WINDOWS
+#else
+#include <debugstr.h>
+extern LPWSTR HEAP_strdupAtoW( HANDLE32 heap, DWORD flags, LPCSTR str );
+#endif
+
+
+static const int MAX_BUFFER = 1024;
+
+
+#ifdef WINDOWS
+char* WtoA( OLECHAR* p )
+{
+	int i = 0;
+	char* pc = (char *)malloc( MAX_BUFFER*sizeof(char) );
+	pc[0] = '\"';
+	pc++;
+	i = wcstombs( pc, p, MAX_BUFFER );
+	if( i < MAX_BUFFER-1 )
+	{
+		pc[i] = '\"';
+		pc[i+1] = '\0';
+	}
+	pc--;
+	return pc;
+}
+
+OLECHAR* AtoW( char* p )
+{
+	int i = 0;
+	OLECHAR* pwc = (OLECHAR *)malloc( MAX_BUFFER*sizeof(OLECHAR) );
+	i = mbstowcs( pwc, p, MAX_BUFFER );
+	return pwc;
+}
+#else 
+char* WtoA( OLECHAR* p )
+{
+	return debugstr_wn( p, MAX_BUFFER );
+}
+OLECHAR* AtoW( char* p )
+{
+	return HEAP_strdupAtoW( GetProcessHeap(), 0, p );
+}
+#endif
+
+
+int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show)
+{
+	VARIANTARG va;
+	VARIANTARG vb;
+	VARIANTARG vc;
+	VARIANTARG vd;
+	VARIANTARG ve;
+
+	int theInt = 0;
+	int* pInt = &theInt;
+	VARIANT_BOOL b = 0;
+	VARIANT_BOOL* pBool = &b;
+	unsigned short uShort = 0;
+	unsigned short* pUShort = &uShort;
+	unsigned long uLong = 0;
+	unsigned long* pULong = &uLong;
+	CHAR theChar;
+	CHAR* pChar = &theChar;
+	BYTE byte;
+	BYTE* pByte = &byte;
+	short s = 0;
+	short* pShort = &s;
+	long Long = 0;
+	long* pLong = &Long;
+	float f = 0;
+	float* pFloat = &f;
+	double d = 0;
+	double* pDouble = &d;
+	
+	unsigned short i = 0;
+	HRESULT res = 0;
+	BSTR bstr = NULL;
+	int olePtrIndex = 0;
+	int nOlePtrs = 120;
+	OLECHAR* pOleChar[120];
+
+	pOleChar[0] = AtoW( "-2" );
+	pOleChar[1] = AtoW( "-1" );
+	pOleChar[2] = AtoW( "-0.51" );
+	pOleChar[3] = AtoW( "-0.5" );
+	pOleChar[4] = AtoW( "-0.49" );
+	pOleChar[5] = AtoW( "-0.0" );
+	pOleChar[6] = AtoW( "0.0" );
+	pOleChar[7] = AtoW( "0.49" );
+	pOleChar[8] = AtoW( "0.5" );
+	pOleChar[9] = AtoW( "0.51" );
+	pOleChar[10] = AtoW( "1" );
+	pOleChar[11] = AtoW( "127" );
+	pOleChar[12] = AtoW( "128" );
+	pOleChar[13] = AtoW( "129" );
+	pOleChar[14] = AtoW( "255" );
+	pOleChar[15] = AtoW( "256" );
+	pOleChar[16] = AtoW( "257" );
+	pOleChar[17] = AtoW( "32767" );
+	pOleChar[18] = AtoW( "32768" );
+	pOleChar[19] = AtoW( "-32768" );
+	pOleChar[20] = AtoW( "-32769" );
+	pOleChar[21] = AtoW( "16777216" );
+	pOleChar[22] = AtoW( "16777217" );
+	pOleChar[23] = AtoW( "-16777216" );
+	pOleChar[24] = AtoW( "16777217" );
+	pOleChar[25] = AtoW( "2147483647" );
+	pOleChar[26] = AtoW( "2147483648" );
+	pOleChar[27] = AtoW( "-2147483647" );
+	pOleChar[28] = AtoW( "-2147483648" );
+
+	pOleChar[29] = AtoW( "" );
+	pOleChar[30] = AtoW( " " );
+	pOleChar[31] = AtoW( "1F" );
+	pOleChar[32] = AtoW( "1G" );
+	pOleChar[33] = AtoW( " 1 " );
+	pOleChar[34] = AtoW( " 1 2 " );
+	pOleChar[35] = AtoW( "1,2,3" );
+	pOleChar[36] = AtoW( "1 2 3" );
+	pOleChar[37] = AtoW( "1,2, 3" );
+	pOleChar[38] = AtoW( "1;2;3" );
+	pOleChar[39] = AtoW( "1.2.3" );
+
+	pOleChar[40] = AtoW( "0." );
+	pOleChar[41] = AtoW( ".0" );
+	pOleChar[42] = AtoW( "0.1E12" );
+	pOleChar[43] = AtoW( "2.4,E1" );
+	pOleChar[44] = AtoW( "	+3.2,E1" );
+	pOleChar[45] = AtoW( "4E2.5" );
+	pOleChar[46] = AtoW( "	2E+2" );
+	pOleChar[47] = AtoW( "1 E+2" );
+	pOleChar[48] = AtoW( "." );
+	pOleChar[49] = AtoW( ".E2" );
+	pOleChar[50] = AtoW( "1000000000000000000000000000000000000000000000000000000000000000" );
+	pOleChar[51] = AtoW( "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
+	pOleChar[52] = AtoW( "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
+	pOleChar[53] = AtoW( "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
+	pOleChar[54] = AtoW( "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
+	pOleChar[55] = AtoW( "65535" );
+	pOleChar[56] = AtoW( "65535.5" );
+	pOleChar[57] = AtoW( "65536" );
+	pOleChar[58] = AtoW( "4294967295" );
+	pOleChar[59] = AtoW( "4294967296" );
+	
+	pOleChar[60] = AtoW( "1 January 99" );
+	pOleChar[61] = AtoW( "December 31, 2078" );
+	pOleChar[62] = AtoW( "January 1, 1900" );
+	pOleChar[63] = AtoW( "January 2 1900" );
+	pOleChar[64] = AtoW( "11.11.1999" );
+	pOleChar[65] = AtoW( "11/11/1999" );
+	pOleChar[66] = AtoW( " 11 / 11 / 1999" );
+	pOleChar[67] = AtoW( "11/11/1999:11:11:1134" );
+	pOleChar[68] = AtoW( "11/11/1999 11:11:11:1" );
+	pOleChar[69] = AtoW( "\t1999/\t11/21 11 :11:11am" );
+
+	pOleChar[70] = AtoW( "11/11/1999 11:11:11Am" );
+	pOleChar[71] = AtoW( "11/11/1999 11:11:11PM" );
+	pOleChar[72] = AtoW( "11/11/199911:11:11PM" );
+	pOleChar[73] = AtoW( "11/11/1999 0:0:11am" );
+	pOleChar[74] = AtoW( "11/11/1999 11,11:11am" );
+	pOleChar[75] = AtoW( "11/11/1999 11:11:11am" );
+	pOleChar[76] = AtoW( "11/11/1999 11/11:11am" );
+	pOleChar[77] = AtoW( "11/11/1999 11:11AM" );
+	pOleChar[78] = AtoW( "11/11/1999 1AM" );
+	pOleChar[79] = AtoW( "11/11/1999 0AM" );
+
+	pOleChar[80] = AtoW( "11/11/1999 11:11:11" );
+	pOleChar[81] = AtoW( "11/13/1999 0AM" );
+	pOleChar[82] = AtoW( "13/13/1999 0AM" );
+	pOleChar[83] = AtoW( "13/11/1999 0AM" );
+	pOleChar[84] = AtoW( "11/33/1999 0AM" );
+	pOleChar[85] = AtoW( "11/11/1999 AM" );
+	pOleChar[86] = AtoW( "1/1/0 0AM" );
+	pOleChar[87] = AtoW( "1/1/-1 0AM" );
+	pOleChar[88] = AtoW( "1999 January 3 9AM" );
+	pOleChar[89] = AtoW( "1 January 1999 11AM" );
+
+	pOleChar[90] = AtoW( "4AM 11/11/1999" );
+	pOleChar[91] = AtoW( "4:22 11/11/1999 AM" );
+	pOleChar[92] = AtoW( " 1 1 /11/1999" );
+	pOleChar[93] = AtoW( "11-11/1999 11:11:11.12AM" );
+	pOleChar[94] = AtoW( "1999 January 3, 9AM" );
+	pOleChar[95] = AtoW( "December, 31, 2078" );
+	pOleChar[96] = AtoW( "December, 31, 2078," );
+	pOleChar[97] = AtoW( "December, 31 2078" );
+	pOleChar[98] = AtoW( "11/99" );
+	pOleChar[99] = AtoW( "11-1999" );
+
+	pOleChar[100] = AtoW( "true" );
+	pOleChar[101] = AtoW( "True" );
+	pOleChar[102] = AtoW( "TRue" );
+	pOleChar[103] = AtoW( "TRUE" );
+	pOleChar[104] = AtoW( " TRUE" );
+	pOleChar[105] = AtoW( "FALSE " );
+	pOleChar[106] = AtoW( "False" );
+	pOleChar[107] = AtoW( "JustSomeText" );
+	pOleChar[108] = AtoW( "Just Some Text" );
+	pOleChar[109] = AtoW( "" );
+
+	pOleChar[110] = AtoW( "1.5" );
+	pOleChar[111] = AtoW( "2.5" );
+	pOleChar[112] = AtoW( "3.5" );
+	pOleChar[113] = AtoW( "4.5" );
+	pOleChar[114] = AtoW( "" );
+	pOleChar[115] = AtoW( "" );
+	pOleChar[116] = AtoW( "" );
+	pOleChar[117] = AtoW( "" );
+	pOleChar[118] = AtoW( "" );
+	pOleChar[119] = AtoW( "" );
+
+
+	/* Start testing the Low-Level API ( the coercions )
+	 */
+
+
+	/* unsigned char from...
+	 */
+	printf( "\n\n======== Testing VarUI1FromXXX ========\n");
+	
+	/* res = VarUI1FromI2( 0, NULL );
+	 */
+	printf( "VarUI1FromI2: passing in NULL as return val makes it crash, %X\n", (unsigned int) res );
+
+	res = VarUI1FromStr( NULL, 0, 0, pByte );
+	printf( "VarUI1FromStr: passing in NULL as param: %X\n", (unsigned int) res );
+
+	res = VarUI1FromI2( 0, pByte );
+	printf( "VarUI1FromI2: 0, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromI2( 69, pByte );
+	printf( "VarUI1FromI2: 69, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromI2( 70, pByte );
+	printf( "VarUI1FromI2: 70, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromI2( 128, pByte );
+	printf( "VarUI1FromI2: 128, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromI2( 255, pByte );
+	printf( "VarUI1FromI2: 255, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromI2( 256, pByte );
+	printf( "VarUI1FromI2: 256, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromI2( 257, pByte );
+	printf( "VarUI1FromI2: 257, %X, %X\n", *pByte, (unsigned int) res );
+
+	res = VarUI1FromR8( 0.0, pByte );
+	printf( "VarUI1FromR8: 0.0, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( 69.33, pByte );
+	printf( "VarUI1FromR8: 69.33, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( 69.66, pByte );
+	printf( "VarUI1FromR8: 69.66, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( -69.33, pByte );
+	printf( "VarUI1FromR8: -69.33, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( -69.66, pByte );
+	printf( "VarUI1FromR8: -69.66, %X, %X\n", *pByte, (unsigned int) res );
+
+	res = VarUI1FromR8( -0.5, pByte );
+	printf( "VarUI1FromR8: -0.5, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( -0.51, pByte );
+	printf( "VarUI1FromR8: -0.51, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( -0.49, pByte );
+	printf( "VarUI1FromR8: -0.49, %X, %X\n", *pByte, (unsigned int) res );
+
+	res = VarUI1FromR8( 0.5, pByte );
+	printf( "VarUI1FromR8: 0.5, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( 0.51, pByte );
+	printf( "VarUI1FromR8: 0.51, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromR8( 0.49, pByte );
+	printf( "VarUI1FromR8: 0.49, %X, %X\n", *pByte, (unsigned int) res );
+
+	res = VarUI1FromDate( 0.0, pByte );
+	printf( "VarUI1FromDate: 0.0, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromDate( 69.33, pByte );
+	printf( "VarUI1FromDate: 69.33, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromDate( 69.66, pByte );
+	printf( "VarUI1FromDate: 69.66, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromDate( -69.33, pByte );
+	printf( "VarUI1FromDate: -69.33, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromDate( -69.66, pByte );
+	printf( "VarUI1FromDate: -69.66, %X, %X\n", *pByte, (unsigned int) res );
+
+	res = VarUI1FromBool( VARIANT_TRUE, pByte );
+	printf( "VarUI1FromBool: VARIANT_TRUE, %X, %X\n", *pByte, (unsigned int) res );
+	res = VarUI1FromBool( VARIANT_FALSE, pByte );
+	printf( "VarUI1FromBool: VARIANT_FALSE, %X, %X\n", *pByte, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarUI1FromStr( pOleChar[olePtrIndex], 0, 0, pByte );
+		printf( "VarUI1FromStr: %s, %X, %X\n", WtoA(pOleChar[olePtrIndex]), *pByte, (unsigned int) res );
+	}
+
+
+	/* unsigned short from ...
+	 */
+	printf( "\n\n======== Testing VarUI2FromXXX ========\n");
+	
+	res = VarUI2FromI2( -1, &i );
+	printf( "VarUI2FromI2: -1, %d, %X\n", i, (unsigned int) res );
+
+	/* res = VarUI2FromI2( 0, NULL );
+	 */
+	printf( "VarUI2FromI2: passing in NULL as return val makes it crash, %X\n", (unsigned int) res );
+
+	res = VarUI2FromStr( NULL, 0, 0, pUShort );
+	printf( "VarUI2FromStr: passing in NULL as param: %X\n", (unsigned int) res );
+
+	res = VarUI2FromI2( 0, pUShort );
+	printf( "VarUI2FromI2: 0, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromI2( 69, pUShort );
+	printf( "VarUI2FromI2: 69, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromI2( 70, pUShort );
+	printf( "VarUI2FromI2: 70, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromI2( 128, pUShort );
+	printf( "VarUI2FromI2: 128, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromI4( 65535, pUShort );
+	printf( "VarUI2FromI4: 65535, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromI4( 65536, pUShort );
+	printf( "VarUI2FromI4: 65536, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromI4( 65537, pUShort );
+	printf( "VarUI2FromI4: 65537, %u, %X\n", *pUShort, (unsigned int) res );
+
+	res = VarUI2FromR8( 0.0, pUShort );
+	printf( "VarUI2FromR8: 0.0, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( 69.33, pUShort );
+	printf( "VarUI2FromR8: 69.33, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( 69.66, pUShort );
+	printf( "VarUI2FromR8: 69.66, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( -69.33, pUShort );
+	printf( "VarUI2FromR8: -69.33, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( -69.66, pUShort );
+	printf( "VarUI2FromR8: -69.66, %u, %X\n", *pUShort, (unsigned int) res );
+
+	res = VarUI2FromR8( -0.5, pUShort );
+	printf( "VarUI2FromR8: -0.5, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( -0.51, pUShort );
+	printf( "VarUI2FromR8: -0.51, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( -0.49, pUShort );
+	printf( "VarUI2FromR8: -0.49, %u, %X\n", *pUShort, (unsigned int) res );
+
+	res = VarUI2FromR8( 0.5, pUShort );
+	printf( "VarUI2FromR8: 0.5, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( 0.51, pUShort );
+	printf( "VarUI2FromR8: 0.51, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromR8( 0.49, pUShort );
+	printf( "VarUI2FromR8: 0.49, %u, %X\n", *pUShort, (unsigned int) res );
+
+	res = VarUI2FromDate( 0.0, pUShort );
+	printf( "VarUI2FromDate: 0.0, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromDate( 69.33, pUShort );
+	printf( "VarUI2FromDate: 69.33, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromDate( 69.66, pUShort );
+	printf( "VarUI2FromDate: 69.66, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromDate( -69.33, pUShort );
+	printf( "VarUI2FromDate: -69.33, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromDate( -69.66, pUShort );
+	printf( "VarUI2FromDate: -69.66, %u, %X\n", *pUShort, (unsigned int) res );
+
+	res = VarUI2FromBool( VARIANT_TRUE, pUShort );
+	printf( "VarUI2FromBool: VARIANT_TRUE, %u, %X\n", *pUShort, (unsigned int) res );
+	res = VarUI2FromBool( VARIANT_FALSE, pUShort );
+	printf( "VarUI2FromBool: VARIANT_FALSE, %u, %X\n", *pUShort, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarUI2FromStr( pOleChar[olePtrIndex], 0, 0, pUShort );
+		printf( "VarUI2FromStr: %s, %u, %X\n", WtoA(pOleChar[olePtrIndex]), (int)*pUShort, (unsigned int) res );
+	}
+
+	/* unsigned long from ...
+	 */
+	printf( "\n\n======== Testing VarUI4FromXXX ========\n");
+	
+	/*res = VarUI4FromI2( 0, NULL );
+	 */
+	printf( "VarUI4FromI2: passing in NULL as return val makes it crash, %X\n", (unsigned int) res );
+
+	res = VarUI4FromStr( NULL, 0, 0, pULong );
+	printf( "VarUI4FromStr: passing in NULL as param: %X\n", (unsigned int) res );
+
+	res = VarUI4FromI2( 0, pULong );
+	printf( "VarUI4FromI2: 0, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromI2( 69, pULong );
+	printf( "VarUI4FromI2: 69, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromI2( 70, pULong );
+	printf( "VarUI4FromI2: 70, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromI2( 128, pULong );
+	printf( "VarUI4FromI2: 128, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromI2( 255, pULong );
+	printf( "VarUI4FromI2: 255, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( 4294967295.0, pULong );
+	printf( "VarUI4FromR8: 4294967295, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( 4294967296.0, pULong );
+	printf( "VarUI4FromR8: 4294967296, %lu, %X\n", *pULong, (unsigned int) res );
+
+	res = VarUI4FromR8( 0.0, pULong );
+	printf( "VarUI4FromR8: 0.0, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( 69.33, pULong );
+	printf( "VarUI4FromR8: 69.33, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( 69.66, pULong );
+	printf( "VarUI4FromR8: 69.66, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( -69.33, pULong );
+	printf( "VarUI4FromR8: -69.33, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( -69.66, pULong );
+	printf( "VarUI4FromR8: -69.66, %lu, %X\n", *pULong, (unsigned int) res );
+
+	res = VarUI4FromR8( -0.5, pULong );
+	printf( "VarUI4FromR8: -0.5, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( -0.51, pULong );
+	printf( "VarUI4FromR8: -0.51, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( -0.49, pULong );
+	printf( "VarUI4FromR8: -0.49, %lu, %X\n", *pULong, (unsigned int) res );
+
+	res = VarUI4FromR8( 0.5, pULong );
+	printf( "VarUI4FromR8: 0.5, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( 0.51, pULong );
+	printf( "VarUI4FromR8: 0.51, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromR8( 0.49, pULong );
+	printf( "VarUI4FromR8: 0.49, %lu, %X\n", *pULong, (unsigned int) res );
+
+	res = VarUI4FromDate( 0.0, pULong );
+	printf( "VarUI4FromDate: 0.0, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromDate( 69.33, pULong );
+	printf( "VarUI4FromDate: 69.33, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromDate( 69.66, pULong );
+	printf( "VarUI4FromDate: 69.66, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromDate( -69.33, pULong );
+	printf( "VarUI4FromDate: -69.33, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromDate( -69.66, pULong );
+	printf( "VarUI4FromDate: -69.66, %lu, %X\n", *pULong, (unsigned int) res );
+
+	res = VarUI4FromBool( VARIANT_TRUE, pULong );
+	printf( "VarUI4FromBool: VARIANT_TRUE, %lu, %X\n", *pULong, (unsigned int) res );
+	res = VarUI4FromBool( VARIANT_FALSE, pULong );
+	printf( "VarUI4FromBool: VARIANT_FALSE, %lu, %X\n", *pULong, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarUI4FromStr( pOleChar[olePtrIndex], 0, 0, pULong );
+		printf( "VarUI4FromStr: %s, %lu, %X\n", WtoA(pOleChar[olePtrIndex]), *pULong, (unsigned int) res );
+	}
+
+	/* CHAR from ...
+	 */
+	printf( "\n\n======== Testing VarI1FromXXX ========\n");
+
+	res = VarI1FromBool( VARIANT_TRUE, pByte );
+	printf( "VarI1FromBool: VARIANT_TRUE, %d, %X\n", *pByte, (unsigned int) res );
+
+	res = VarI1FromBool( VARIANT_TRUE, pChar );
+	printf( "VarI1FromBool: VARIANT_TRUE, %d, %X\n", *pChar, (unsigned int) res );
+
+	res = VarI1FromBool( VARIANT_FALSE, pChar );
+	printf( "VarI1FromBool: VARIANT_FALSE, %d, %X\n", *pChar, (unsigned int) res );
+
+	res = VarI1FromUI1( (unsigned char)32767, pChar );
+	printf( "VarI1FromUI1: 32767, %d, %X\n", *pChar, (unsigned int) res );
+	res = VarI1FromUI1( (unsigned char)65535, pChar );
+	printf( "VarI1FromUI1: 65535, %d, %X\n", *pChar, (unsigned int) res );
+
+	res = VarI1FromI4( 32767, pChar );
+	printf( "VarI1FromI4: 32767, %d, %X\n", *pChar, (unsigned int) res );
+	res = VarI1FromI4( 32768, pChar );
+	printf( "VarI1FromI4: 32768, %d, %X\n", *pChar, (unsigned int) res );
+	res = VarI1FromI4( -32768, pChar );
+	printf( "VarI1FromI4: -32768, %d, %X\n", *pChar, (unsigned int) res );
+	res = VarI1FromI4( -32769, pChar );
+	printf( "VarI1FromI4: -32769, %d, %X\n", *pChar, (unsigned int) res );
+
+	res = VarI1FromR8( 69.33, pChar );
+	printf( "VarI1FromR8: 69.33, %d, %X\n", *pChar, (unsigned int) res );
+	res = VarI1FromR8( 69.66, pChar );
+	printf( "VarI1FromR8: 69.66, %d, %X\n", *pChar, (unsigned int) res );
+	res = VarI1FromR8( -69.33, pChar );
+	printf( "VarI1FromR8: -69.33, %d, %X\n", *pChar, (unsigned int) res );
+	res = VarI1FromR8( -69.66, pChar );
+	printf( "VarI1FromR8: -69.66, %d, %X\n", *pChar, (unsigned int) res );
+
+	res = VarI1FromDate( -69.66, pChar );
+	printf( "VarI1FromDate: -69.66, %d, %X\n", *pChar, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarI1FromStr( pOleChar[olePtrIndex], 0, 0, pChar );
+		printf( "VarI1FromStr: %s, %d, %X\n", WtoA(pOleChar[olePtrIndex]), *pChar, (unsigned int) res );
+	}
+
+	/* short from ...
+	 */
+	printf( "\n\n======== Testing VarI2FromXXX ========\n");
+
+	res = VarI2FromUI2( 32767, pShort );
+	printf( "VarI2FromUI2: 32767, %d, %X\n", *pShort, (unsigned int) res );
+	res = VarI2FromUI2( 65535, pShort );
+	printf( "VarI2FromUI2: 65535, %d, %X\n", *pShort, (unsigned int) res );
+
+	res = VarI2FromI4( 32767, pShort );
+	printf( "VarI2FromI4: 32767, %d, %X\n", *pShort, (unsigned int) res );
+	res = VarI2FromI4( 32768, pShort );
+	printf( "VarI2FromI4: 32768, %d, %X\n", *pShort, (unsigned int) res );
+	res = VarI2FromI4( -32768, pShort );
+	printf( "VarI2FromI4: -32768, %d, %X\n", *pShort, (unsigned int) res );
+	res = VarI2FromI4( -32769, pShort );
+	printf( "VarI2FromI4: -32769, %d, %X\n", *pShort, (unsigned int) res );
+
+	res = VarI2FromR8( 69.33, pShort );
+	printf( "VarI2FromR8: 69.33, %d, %X\n", *pShort, (unsigned int) res );
+	res = VarI2FromR8( 69.66, pShort );
+	printf( "VarI2FromR8: 69.66, %d, %X\n", *pShort, (unsigned int) res );
+	res = VarI2FromR8( -69.33, pShort );
+	printf( "VarI2FromR8: -69.33, %d, %X\n", *pShort, (unsigned int) res );
+	res = VarI2FromR8( -69.66, pShort );
+	printf( "VarI2FromR8: -69.66, %d, %X\n", *pShort, (unsigned int) res );
+
+	res = VarI2FromDate( -69.66, pShort );
+	printf( "VarI2FromDate: -69.66, %d, %X\n", *pShort, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarI2FromStr( pOleChar[olePtrIndex], 0, 0, pShort );
+		printf( "VarI2FromStr: %s, %d, %X\n", WtoA(pOleChar[olePtrIndex]), *pShort, (unsigned int) res );
+	}
+	
+	/* long from ...
+	 */
+	printf( "\n\n======== Testing VarI4FromXXX ========\n");
+
+	res = VarI4FromI2( 3, (long*)pInt );
+	printf( "VarIntFromI2: 3, %d, %X\n", *pInt, (unsigned int) res );
+
+	res = VarI4FromR8( 69.33, pLong );
+	printf( "VarI4FromR8: 69.33, %ld, %X\n", *pLong, (unsigned int) res );
+	res = VarI4FromR8( 69.66, pLong );
+	printf( "VarI4FromR8: 69.66, %ld, %X\n", *pLong, (unsigned int) res );
+	res = VarI4FromR8( -69.33, pLong );
+	printf( "VarI4FromR8: -69.33, %ld, %X\n", *pLong, (unsigned int) res );
+	res = VarI4FromR8( -69.66, pLong );
+	printf( "VarI4FromR8: -69.66, %ld, %X\n", *pLong, (unsigned int) res );
+
+	res = VarI4FromR8( 2147483647.0, pLong );
+	printf( "VarI4FromR8: 2147483647.0, %ld, %X\n", *pLong, (unsigned int) res );
+	res = VarI4FromR8( 2147483648.0, pLong );
+	printf( "VarI4FromR8: 2147483648.0, %ld, %X\n", *pLong, (unsigned int) res );
+	res = VarI4FromR8( -2147483647.0, pLong );
+	printf( "VarI4FromR8: -2147483647.0, %ld, %X\n", *pLong, (unsigned int) res );
+	res = VarI4FromR8( -2147483648.0, pLong );
+	printf( "VarI4FromR8: -2147483648.0, %ld, %X\n", *pLong, (unsigned int) res );
+	res = VarI4FromR8( -2147483649.0, pLong );
+	printf( "VarI4FromR8: -2147483649.0, %ld, %X\n", *pLong, (unsigned int) res );
+
+	res = VarI4FromDate( -2147483649.0, pLong );
+	printf( "VarI4FromDate: -2147483649.0, %ld, %X\n", *pLong, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarI4FromStr( pOleChar[olePtrIndex], 0, 0, pLong );
+		printf( "VarI4FromStr: %s, %ld, %X\n", WtoA(pOleChar[olePtrIndex]), *pLong, (unsigned int) res );
+	}
+
+	/* float from ...
+	 */
+	printf( "\n\n======== Testing VarR4FromXXX ========\n");
+
+	res = VarR4FromI4( 16777216, pFloat );
+	printf( "VarR4FromI4: 16777216, %f, %X\n", *pFloat, (unsigned int) res );
+	res = VarR4FromI4( 16777217, pFloat );
+	printf( "VarR4FromI4: 16777217, %f, %X\n", *pFloat, (unsigned int) res );
+	res = VarR4FromI4( -16777216, pFloat );
+	printf( "VarR4FromI4: -16777216, %f, %X\n", *pFloat, (unsigned int) res );
+	res = VarR4FromI4( -16777217, pFloat );
+	printf( "VarR4FromI4: -16777217, %f, %X\n", *pFloat, (unsigned int) res );
+
+	res = VarR4FromR8( 16777216.0, pFloat );
+	printf( "VarR4FromR8: 16777216.0, %f, %X\n", *pFloat, (unsigned int) res );
+	res = VarR4FromR8( 16777217.0, pFloat );
+	printf( "VarR4FromR8: 16777217.0, %f, %X\n", *pFloat, (unsigned int) res );
+	res = VarR4FromR8( -16777216.0, pFloat );
+	printf( "VarR4FromR8: -16777216.0, %f, %X\n", *pFloat, (unsigned int) res );
+	res = VarR4FromR8( -16777217.0, pFloat );
+	printf( "VarR4FromR8: -16777217.0, %f, %X\n", *pFloat, (unsigned int) res );
+	
+	res = VarR4FromR8( 16777218e31, pFloat );
+	printf( "VarR4FromR8: 16777218e31, %f, %X\n", *pFloat, (unsigned int) res );
+	res = VarR4FromR8( 16777218e32, pFloat );
+	printf( "VarR4FromR8: 16777218e32, %f, %X\n", *pFloat, (unsigned int) res );
+	
+	res = VarR4FromDate( 16777218e31, pFloat );
+	printf( "VarR4FromDate: 16777218e31, %f, %X\n", *pFloat, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarR4FromStr( pOleChar[olePtrIndex], 0, 0, pFloat );
+		printf( "VarR4FromStr: %s, %f, %X\n", WtoA(pOleChar[olePtrIndex]), *pFloat, (unsigned int) res );
+	}
+
+	/* double from ...
+	 */
+	printf( "\n\n======== Testing VarR8FromXXX ========\n");
+
+	res = VarR8FromDate( 900719925474099.0, pDouble );
+	printf( "VarR8FromDate: 900719925474099.0, %f, %X\n", *pDouble, (unsigned int) res );
+
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarR8FromStr( pOleChar[olePtrIndex], 0, 0, pDouble );
+		printf( "VarR8FromStr: %s, %f, %X\n", WtoA(pOleChar[olePtrIndex]), *pDouble, (unsigned int) res );
+	}
+
+	/* date from ...
+	 */
+	printf( "\n\n======== Testing VarDateFromXXX ========\n");
+
+	res = VarDateFromI4( 2958465, pDouble );
+	printf( "VarDateFromI4: 2958465, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromI4( 2958466, pDouble );
+	printf( "VarDateFromI4: 2958466, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromI4( -657434, pDouble );
+	printf( "VarDateFromI4: -657434, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromI4( -657435, pDouble );
+	printf( "VarDateFromI4: -657435, %f, %X\n", *pDouble, (unsigned int) res );
+
+	res = VarDateFromR8( 2958465.9999, pDouble );
+	printf( "VarDateFromR8: 2958465.9999, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromR8( 2958466, pDouble );
+	printf( "VarDateFromR8: 2958466, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromR8( -657434.9999, pDouble );
+	printf( "VarDateFromR8: -657434.9999, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromR8( -657435, pDouble );
+	printf( "VarDateFromR8: -657435, %f, %X\n", *pDouble, (unsigned int) res );
+
+
+	res = VarDateFromR8( 0.0, pDouble );
+	printf( "VarDateFromR8: 0.0, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromR8( 1.0, pDouble );
+	printf( "VarDateFromR8: 1.0, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromR8( 2.25, pDouble );
+	printf( "VarDateFromR8: 2.25, %f, %X\n", *pDouble, (unsigned int) res );
+	res = VarDateFromR8( -2.0, pDouble );
+	printf( "VarDateFromR8: -2.0, %f, %X\n", *pDouble, (unsigned int) res );
+
+	/* Need some parsing function in Linux to emulate this...
+	 * Still in progess.
+	 */
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarDateFromStr( pOleChar[olePtrIndex], 0, 0, pDouble );
+		printf( "VarDateFromStr: %s, %f, %X\n", WtoA(pOleChar[olePtrIndex]), *pDouble, (unsigned int) res );
+	}
+	
+	/* bool from ...
+	 */
+	printf( "\n\n======== Testing VarBoolFromXXX ========\n");
+
+	res = VarBoolFromI4( 0, pBool );
+	printf( "VarBoolFromI4: 0, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromI4( 1, pBool );
+	printf( "VarBoolFromI4: 1, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromI4( -1, pBool );
+	printf( "VarBoolFromI4: -1, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromI4( 2, pBool );
+	printf( "VarBoolFromI4: 2, %d, %X\n", *pBool, (unsigned int) res );
+
+	res = VarBoolFromUI1( ' ', pBool );
+	printf( "VarBoolFromUI1: ' ', %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromUI1( '\0', pBool );
+	printf( "VarBoolFromUI1: '\\0', %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromUI1( 0x0000, pBool );
+	printf( "VarBoolFromUI1: 0x0000, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromUI1( (unsigned char)0xFFF, pBool );
+	printf( "VarBoolFromUI1: 0xFFF, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromUI1( (unsigned char)0xFFFF, pBool );
+	printf( "VarBoolFromUI1: 0xFFFF, %d, %X\n", *pBool, (unsigned int) res );
+	
+	res = VarBoolFromR8( 0.0, pBool );
+	printf( "VarBoolFromR8: 0.0, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromR8( 1.1, pBool );
+	printf( "VarBoolFromR8: 1.1, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromR8( 0.5, pBool );
+	printf( "VarBoolFromR8: 0.5, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromR8( 0.49, pBool );
+	printf( "VarBoolFromR8: 0.49, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromR8( 0.51, pBool );
+	printf( "VarBoolFromR8: 0.51, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromR8( -0.5, pBool );
+	printf( "VarBoolFromR8: -0.5, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromR8( -0.49, pBool );
+	printf( "VarBoolFromR8: -0.49, %d, %X\n", *pBool, (unsigned int) res );
+	res = VarBoolFromR8( -0.51, pBool );
+	printf( "VarBoolFromR8: -0.51, %d, %X\n", *pBool, (unsigned int) res );
+
+	
+	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
+	{
+		res = VarBoolFromStr( pOleChar[olePtrIndex], 0, 0, pBool );
+		printf( "VarBoolFromStr: %s, %d, %X\n", WtoA(pOleChar[olePtrIndex]), *pBool, (unsigned int) res );
+	}
+
+	res = VarI1FromBool( VARIANT_TRUE, pByte );
+	printf( "VarI1FromBool: VARIANT_TRUE, %d, %X\n", *pByte, (unsigned int) res );
+
+	res = VarUI2FromI2( -1, &i );
+	printf( "VarUI2FromI2: -1, %d, %X\n", i, (unsigned int) res );
+
+
+	/* BSTR from ...
+	 */
+	printf( "\n\n======== Testing VarBSTRFromXXX ========\n");
+
+	/* integers...
+	 */
+	res = VarBstrFromI1( -100, 0, 0, &bstr );
+	printf( "VarBstrFromI1: -100, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+
+	res = VarBstrFromUI1( 0x5A, 0, 0, &bstr );
+	printf( "VarBstrFromUI1: 0x5A, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+
+	res = VarBstrFromI4( 2958465, 0, 0, &bstr );
+	printf( "VarBstrFromI4: 2958465, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+
+	/* reals...
+	 */
+	d=0;
+	for( i=0; i<20; i++ )
+	{
+		/* add an integer to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, i );
+		res = VarBstrFromR8( d, 0, 0, &bstr );
+		printf( "VarBstrFromR8: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
+		res = VarBstrFromR8( -d, 0, 0, &bstr );
+		printf( "VarBstrFromR8: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
+	}
+	d=0;
+	for( i=0; i<20; i++ )
+	{
+		/* add a decimal to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, (i*-1) );
+		res = VarBstrFromR8( d, 0, 0, &bstr );
+		printf( "VarBstrFromR8: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
+		res = VarBstrFromR8( d-1, 0, 0, &bstr );
+		printf( "VarBstrFromR8: %f, %s, %X\n", d-1, WtoA( bstr ), (unsigned int) res );
+		res = VarBstrFromR8( -d, 0, 0, &bstr );
+		printf( "VarBstrFromR8: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
+	}
+
+	d=0;
+	for( i=0; i<20; i++ )
+	{
+		/* add an integer to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, i );
+		/* add a decimal to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, (i*-1) );
+		res = VarBstrFromR8( d, 0, 0, &bstr );
+		printf( "VarBstrFromR8: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int)res );
+		res = VarBstrFromR8( -d, 0, 0, &bstr );
+		printf( "VarBstrFromR8: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
+	}
+
+
+
+	d=0;
+	for( i=0; i<10; i++ )
+	{
+		/* add an integer to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, i );
+		res = VarBstrFromR4( (float)d, 0, 0, &bstr );
+		printf( "VarBstrFromR4: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
+		res = VarBstrFromR4( (float)-d, 0, 0, &bstr );
+		printf( "VarBstrFromR4: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
+	}
+	d=0;
+	for( i=0; i<10; i++ )
+	{
+		/* add a decimal to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, (i*-1) );
+		res = VarBstrFromR4( (float)d, 0, 0, &bstr );
+		printf( "VarBstrFromR4: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
+		res = VarBstrFromR4( (float)d-1, 0, 0, &bstr );
+		printf( "VarBstrFromR4: %f, %s, %X\n", d-1, WtoA( bstr ), (unsigned int) res );
+		res = VarBstrFromR4( (float)-d, 0, 0, &bstr );
+		printf( "VarBstrFromR4: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
+	}
+
+	d=0;
+	for( i=0; i<10; i++ )
+	{
+		/* add an integer to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, i );
+		/* add a decimal to the real number
+		 */
+		d += ((i%9)+1) * pow( 10, (i*-1) );
+		res = VarBstrFromR4( (float)d, 0, 0, &bstr );
+		printf( "VarBstrFromR4: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
+		res = VarBstrFromR4( (float)-d, 0, 0, &bstr );
+		printf( "VarBstrFromR4: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
+	}
+
+	res = VarBstrFromBool( 0x00, 0, 0, &bstr );
+	printf( "VarBstrFromBool: 0x00, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	res = VarBstrFromBool( 0xFF, 0, 0, &bstr );
+	printf( "VarBstrFromBool: 0xFF, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+
+	res = VarBstrFromDate( 0.0, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 0.0, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	res = VarBstrFromDate( 3.34, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 3.34, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	res = VarBstrFromDate( 3339.34, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 3339.34, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	res = VarBstrFromDate( 365.00, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 365.00, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	res = VarBstrFromDate( 365.25, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 365.25, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	res = VarBstrFromDate( 1461.0, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 1461.00, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	res = VarBstrFromDate( 1461.5, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 1461.5, %s, %X\n", WtoA( bstr ), (unsigned int) res );
+	
+
+	res = VarBstrFromBool( 0x00, 0, 0, &bstr );
+	printf( "VarBstrFromBool: 0x00, %s, %X\n", WtoA(bstr), (unsigned int) res );
+	res = VarBstrFromBool( 0xFF, 0, 0, &bstr );
+	printf( "VarBstrFromBool: 0xFF, %s, %X\n", WtoA(bstr), (unsigned int) res );
+
+	res = VarBstrFromDate( 0.0, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 0.0, %s, %X\n", WtoA(bstr), (unsigned int) res );
+	res = VarBstrFromDate( 3.34, 0, 0, &bstr );
+	printf( "VarBstrFromDate: 3.34, %s, %X\n", WtoA(bstr), (unsigned int) res );
+
+	/* Test variant API...
+	 */
+	printf( "\n\n======== Testing Hi-Level Variant API ========\n");
+
+	bstr = SysAllocString( pOleChar[4] );
+
+	res = VariantClear( &va );
+	printf( "Result is: %x\n", (unsigned int)res );
+
+	VariantInit( &va );
+	VariantInit( &vb );
+	VariantInit( &vc );
+	VariantInit( &vd );
+	VariantInit( &ve );
+
+	va.vt = VT_BSTR;
+	va.u.bstrVal = bstr;
+	res = VariantClear( &va );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+	SysFreeString( bstr );
+	SysFreeString( bstr );
+
+	res = VariantCopy( &vb, &va );
+	printf( "VariantCopy: %x\n", (unsigned int)res );
+	res = VariantClear( &vb );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+	res = VariantClear( &va );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+
+
+	va.vt = VT_R8;
+	d = 4.123;
+	va.u.dblVal = d;
+	res = VariantCopy( &va, &va );
+	printf( "VariantCopy %f -> %f: %x\n", V_R8(&va), V_R8(&va), (unsigned int)res );
+
+	va.vt = VT_R8 | VT_BYREF;
+	d = 31.123;
+	va.u.pdblVal = &d;
+	res = VariantCopyInd( &va, &va );
+	printf( "VariantCopyInd %f: %x\n", V_R8(&va), (unsigned int)res );
+
+	va.vt = VT_R8;
+	d = 1.123;
+	va.u.dblVal = d;
+	res = VariantCopy( &vb, &va );
+	printf( "VariantCopy %f -> %f: %x\n", V_R8(&va), V_R8(&vb), (unsigned int)res );
+
+	va.vt = VT_R8 | VT_BYREF;
+	d = 123.123;
+	va.u.pdblVal = &d;
+	res = VariantCopy( &vb, &va );
+	printf( "VariantCopy %f -> %f: %x\n", *(V_R8REF(&va)), *(V_R8REF(&vb)), (unsigned int)res );
+
+	va.vt = VT_R8 | VT_BYREF;
+	d = 111.2;
+	va.u.pdblVal = &d;
+	res = VariantCopyInd( &vb, &va );
+	printf( "VariantCopyInd %f -> %f: %x\n", *(V_R8REF(&va)), V_R8(&vb), (unsigned int)res );
+
+	va.vt = VT_R8 | VT_BYREF;
+	d = 1211.123453;
+	va.u.pdblVal = &d;
+	res = VariantChangeTypeEx( &va, &va, 0, 0, VT_I2 );
+	printf( "VariantChangeTypeEx %d: %x\n", V_I2(&va), (unsigned int) res );
+
+	va.vt = VT_INT;
+	va.u.intVal = 4;
+	res = VariantChangeTypeEx(&vb, &va, 0, 0, VT_BSTR );
+	printf( "VariantChangeTypeEx %d -> %s: %x\n", V_INT(&va), WtoA(V_BSTR(&vb)), (unsigned int)res );
+
+	va.vt = VT_DATE;
+	va.u.date = 34465.332431;
+	res = VariantChangeTypeEx(&vb, &va, 0, 0, VT_BSTR );
+	printf( "VariantChangeTypeEx %f -> %s: %x\n", V_DATE(&va), WtoA(V_BSTR(&vb)), (unsigned int)res );
+
+	bstr = pOleChar[4];
+	va.vt = VT_BSTR;
+	va.u.bstrVal = bstr;
+	res = VariantChangeTypeEx(&vb, &va, 0, 0, VT_R8 );
+	printf( "VariantChangeTypeEx %s -> %f: %x\n", WtoA(V_BSTR(&va)), V_R8(&vb), (unsigned int)res );
+
+
+	vc.vt = VT_BSTR | VT_BYREF;
+	vc.u.pbstrVal = &bstr;
+	vb.vt = VT_VARIANT | VT_BYREF;
+	vb.u.pvarVal = &vc;
+	va.vt = VT_VARIANT | VT_BYREF;
+	va.u.pvarVal = &vb;
+	res = VariantCopyInd( &vd, &va );
+	printf( "VariantCopyInd: %x\n", (unsigned int)res );
+
+	/* test what happens when bad vartypes are passed in
+	 */
+	printf( "-------------- Testing different VARTYPES ----------------\n" );
+
+	for( i=0; i<100; i++ )
+	{
+		/* Trying to use variants that are set to be BSTR but
+		 * do not contain a valid pointer makes the program crash
+		 * in Windows so we will skip those.  We do not need them
+		 * anyways to illustrate the behavior.
+		 */
+		if( i ==  VT_BSTR )
+			i = 77;
+
+		va.vt = i;
+		d = 4.123;
+		va.u.dblVal = d;
+		res = VariantCopyInd( &vb, &va );
+		printf( "VariantCopyInd: %d -> %x\n", i, (unsigned int)res );
+
+		va.vt = i | VT_BYREF;
+		d = 4.123;
+		va.u.pdblVal = &d;
+		res = VariantCopyInd( &vb, &va );
+		printf( "VariantCopyInd: %d -> %x\n", i, (unsigned int)res );
+
+		va.vt = VT_R8;
+		d = 4.123;
+		va.u.dblVal = d;
+		res = VariantChangeTypeEx( &vb, &va, 0, 0, i );
+		printf( "VariantChangeTypeEx: %d -> %x\n", i, (unsigned int)res );
+
+		va.vt = VT_R8;
+		d = 4.123;
+		va.u.dblVal = d;
+		res = VariantChangeTypeEx( &vb, &va, 0, 0, i | VT_BYREF );
+		printf( "VariantChangeTypeEx: VT_BYREF %d -> %x\n", i, (unsigned int)res );
+
+		va.vt = 99;
+		d = 4.123;
+		va.u.dblVal = d;
+		res = VariantClear( &va );
+		printf( "VariantClear: %d -> %x\n", i, (unsigned int)res );
+
+	}
+	
+	res = VariantClear( &va );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+	res = VariantClear( &vb );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+	res = VariantClear( &vc );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+	res = VariantClear( &vd );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+	res = VariantClear( &ve );
+	printf( "VariantClear: %x\n", (unsigned int)res );
+
+
+	/* There is alot of memory leaks but this is simply a test program.
+	 */
+
+	return 0;
+}
+
diff --git a/libtest/vartest.readme b/libtest/vartest.readme
new file mode 100644
index 0000000..5d1c495
--- /dev/null
+++ b/libtest/vartest.readme
@@ -0,0 +1,21 @@
+The purpose of this program is validate the implementation 
+of the APIs related to VARIANTs. The validation is done
+by comparing the results given by the Windows implementation
+versus the Wine implementation.
+
+This program tests the creation/coercion/destruction of VARIANTs.
+
+This program was built in both Windows and Wine and the purpose
+of this program is to compare the output produced in both 
+environments. To facilitate that, the log of the output created 
+by the windows version of this program was added to CVS.
+
+If you modify this program, it might be wise to rebuild it in
+Windows, regenerate that output file and resubmit it to CVS.
+
+The output of the programs differ slightly from the one generated
+in Windows but most of the differences are caused by differences 
+in the way that printf interprets some escape sequences and the way
+floating point numbers are printed. See the notes in vartest.c for
+more information.
+
diff --git a/loader/dos/dosmod.c b/loader/dos/dosmod.c
index 75ac48f..b53c8fa 100644
--- a/loader/dos/dosmod.c
+++ b/loader/dos/dosmod.c
@@ -56,6 +56,41 @@
     return -1;
 }
 
+int XREAD(int fd,void*buf,int size) {
+ int res;
+
+ while (1) {
+  res = read(fd, buf, size);
+  if (res==size)
+   return res;
+  if (res==-1) {
+   if (errno==EINTR)
+    continue;
+   perror("dosmod read");
+   return -1;
+  }
+  fprintf(stderr,"dosmod read only %d of %d bytes.\n",res,size);
+  return res;
+ }
+}
+int XWRITE(int fd,void*buf,int size) {
+ int res;
+
+ while (1) {
+  res = write(fd, buf, size);
+  if (res==size)
+   return res;
+  if (res==-1) {
+   if (errno==EINTR)
+    continue;
+   perror("dosmod write");
+   return -1;
+  }
+  fprintf(stderr,"dosmod write only %d of %d bytes.\n",res,size);
+  return res;
+ }
+}
+
 void set_timer(struct timeval*tim)
 {
  struct itimerval cur;
@@ -65,7 +100,15 @@
  setitimer(ITIMER_REAL,&cur,NULL);
 }
 
-volatile int sig_pend,sig_fatal=0;
+void get_timer(struct timeval*tim)
+{
+ struct itimerval cur;
+
+ getitimer(ITIMER_REAL,&cur);
+ *tim=cur.it_value;
+}
+
+volatile int sig_pend,sig_fatal=0,sig_alrm=0;
 void*img;
 struct vm86plus_struct VM86;
 
@@ -84,6 +127,12 @@
  signal(sig,bad_handler);
 }
 
+void alarm_handler(int sig)
+{
+ sig_alrm++;
+ signal(sig,alarm_handler);
+}
+
 int main(int argc,char**argv)
 {
  int mfd=open(argv[0],O_RDWR);
@@ -121,7 +170,7 @@
  signal(SIGINT,sig_handler);
  signal(SIGUSR1,sig_handler);
  signal(SIGUSR2,sig_handler);
- signal(SIGALRM,sig_handler);
+ signal(SIGALRM,alarm_handler);
 
  signal(SIGQUIT,bad_handler);
  signal(SIGILL,bad_handler);
@@ -135,28 +184,33 @@
 #endif
 /* report back to the main program that we're ready */
  ret=1; /* dosmod protocol revision 1 */
- write(1,&ret,sizeof(ret));
+ XWRITE(1,&ret,sizeof(ret));
 /* context exchange loop */
  do {
-  if (read(0,&func,sizeof(func))!=sizeof(func)) return 1;
+  if (XREAD(0,&func,sizeof(func))!=sizeof(func)) return 1;
   if (func<0) break;
   switch (func) {
    case DOSMOD_SET_TIMER:
-    if (read(0,&tim,sizeof(tim))!=sizeof(tim)) return 1;
+    if (XREAD(0,&tim,sizeof(tim))!=sizeof(tim)) return 1;
     set_timer(&tim);
     /* no response */
     break;
+   case DOSMOD_GET_TIMER:
+    get_timer(&tim);
+    if (XWRITE(1,&tim,sizeof(tim))!=sizeof(tim)) return 1;
+    break;
    case DOSMOD_ENTER:
    default:
-    if (read(0,&VM86,sizeof(VM86))!=sizeof(VM86)) return 1;
-    if (sig_pend) ret=DOSMOD_SIGNAL; else
+    if (XREAD(0,&VM86,sizeof(VM86))!=sizeof(VM86)) return 1;
+    if (sig_pend||sig_alrm) ret=DOSMOD_SIGNAL; else
      ret=vm86plus(func,&VM86);
-    if (write(1,&ret,sizeof(ret))!=sizeof(ret)) return 1;
-    if (write(1,&VM86,sizeof(VM86))!=sizeof(VM86)) return 1;
+    if (XWRITE(1,&ret,sizeof(ret))!=sizeof(ret)) return 1;
+    if (XWRITE(1,&VM86,sizeof(VM86))!=sizeof(VM86)) return 1;
     switch (ret&0xff) {
      case DOSMOD_SIGNAL:
       ret=sig_pend; sig_pend=0;
-      if (write(1,&ret,sizeof(ret))!=sizeof(ret)) return 1;
+      if (!ret) { ret=SIGALRM; sig_alrm--; }
+      if (XWRITE(1,&ret,sizeof(ret))!=sizeof(ret)) return 1;
       if (sig_fatal) return 1;
       break;
     }
diff --git a/loader/dos/dosmod.h b/loader/dos/dosmod.h
index 6545620..ee9d9f3 100644
--- a/loader/dos/dosmod.h
+++ b/loader/dos/dosmod.h
@@ -3,6 +3,7 @@
 
 #define DOSMOD_ENTER     0x01 /* VM86_ENTER */
 #define DOSMOD_SET_TIMER 0x10
+#define DOSMOD_GET_TIMER 0x11
 
 #define DOSMOD_SIGNAL 0x00 /* VM86_SIGNAL */
 
diff --git a/loader/dos/dosvm.c b/loader/dos/dosvm.c
index 989b6a9..c493363 100644
--- a/loader/dos/dosvm.c
+++ b/loader/dos/dosvm.c
@@ -295,6 +295,56 @@
  return 0;
 }
 
+void DOSVM_SetTimer( unsigned ticks )
+{
+ TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
+ NE_MODULE *pModule = NE_GetPtr( pTask->hModule );
+ int stat=DOSMOD_SET_TIMER;
+ struct timeval tim;
+
+ GlobalUnlock16( GetCurrentTask() );
+ if (pModule&&pModule->lpDosTask) {
+  /* the PC clocks ticks at 1193180 Hz */
+  tim.tv_sec=0;
+  tim.tv_usec=((unsigned long long)ticks*1000000)/1193180;
+  /* sanity check */
+  if (!tim.tv_usec) tim.tv_usec=1;
+
+  if (write(pModule->lpDosTask->write_pipe,&stat,sizeof(stat))!=sizeof(stat)) {
+   ERR(module,"dosmod sync lost, errno=%d\n",errno);
+   return;
+  }
+  if (write(pModule->lpDosTask->write_pipe,&tim,sizeof(tim))!=sizeof(tim)) {
+   ERR(module,"dosmod sync lost, errno=%d\n",errno);
+   return;
+  }
+  /* there's no return */
+ }
+}
+
+unsigned DOSVM_GetTimer( void )
+{
+ TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
+ NE_MODULE *pModule = NE_GetPtr( pTask->hModule );
+ int stat=DOSMOD_GET_TIMER;
+ struct timeval tim;
+
+ GlobalUnlock16( GetCurrentTask() );
+ if (pModule&&pModule->lpDosTask) {
+  if (write(pModule->lpDosTask->write_pipe,&stat,sizeof(stat))!=sizeof(stat)) {
+   ERR(module,"dosmod sync lost, errno=%d\n",errno);
+   return 0;
+  }
+  /* read response */
+  if (read(pModule->lpDosTask->read_pipe,&tim,sizeof(tim))!=sizeof(tim)) {
+   ERR(module,"dosmod sync lost, errno=%d\n",errno);
+   return 0;
+  }
+  return ((unsigned long long)tim.tv_usec*1193180)/1000000;
+ }
+ return 0;
+}
+
 void MZ_Tick( WORD handle )
 {
  /* find the DOS task that has the right system_timer handle... */
@@ -319,5 +369,7 @@
 }
 
 void MZ_Tick( WORD handle ) {}
+void DOSVM_SetTimer( unsigned ticks ) {}
+unsigned DOSVM_GetTimer( void ) { return 0; }
 
 #endif
diff --git a/loader/dos/module.c b/loader/dos/module.c
index 64feff4..dc01307 100644
--- a/loader/dos/module.c
+++ b/loader/dos/module.c
@@ -45,8 +45,6 @@
 #define SEG16(ptr,seg) ((LPVOID)((BYTE*)ptr+((DWORD)(seg)<<4)))
 #define SEGPTR16(ptr,segptr) ((LPVOID)((BYTE*)ptr+((DWORD)SELECTOROF(segptr)<<4)+OFFSETOF(segptr)))
 
-extern WORD WINAPI SYSTEM_KillSystemTimer( WORD timer );
-
 static void MZ_InitPSP( LPVOID lpPSP, LPCSTR cmdline, WORD env )
 {
  PDB*psp=lpPSP;
@@ -494,7 +492,7 @@
 
 #else /* !MZ_SUPPORTED */
 
-HINSTANCE16 MZ_CreateProcess( LPCSTR name, LPCSTR cmdline, LPCSTR env, 
+HINSTANCE16 MZ_CreateProcess( LPCSTR name, LPCSTR cmdline, LPCSTR env, BOOL32 inherit,
                               LPSTARTUPINFO32A startup, LPPROCESS_INFORMATION info )
 {
  WARN(module,"DOS executables not supported on this architecture\n");
diff --git a/loader/main.c b/loader/main.c
index 0f48ae3..bbbadac37 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -43,6 +43,7 @@
 #include "debug.h"
 #include "psdrv.h"
 #include "server.h"
+#include "console.h"
 
 int __winelib = 1;  /* Winelib run-time flag */
 
@@ -88,6 +89,9 @@
     /* Set up text-mode stuff */
     CONSOLE_ResizeScreen(80, 25);
 
+    /* Read DOS config.sys */
+    if (!DOSCONF_ReadConfig()) return FALSE;
+
     return TRUE;
 }
 
diff --git a/loader/ne/convert.c b/loader/ne/convert.c
index ec6975c..0d201e6 100644
--- a/loader/ne/convert.c
+++ b/loader/ne/convert.c
@@ -376,6 +376,28 @@
 }
 
 /**********************************************************************
+ *	    ConvertAccelerator32To16
+ */
+VOID ConvertAccelerator32To16( LPVOID acc32, DWORD size, LPVOID acc16 )
+{
+    int type;
+
+    do
+    {
+        /* Copy type */
+        type = *((BYTE *)acc16)++ = *((BYTE *)acc32)++;
+        /* Skip padding */
+        ((BYTE *)acc32)++;
+        /* Copy event and IDval */
+        *((WORD *)acc16)++ = *((WORD *)acc32)++;
+        *((WORD *)acc16)++ = *((WORD *)acc32)++;
+        /* Skip padding */
+        ((WORD *)acc32)++;
+
+    } while ( !( type & 0x80 ) );
+}
+
+/**********************************************************************
  *	    NE_LoadPEResource
  */
 HGLOBAL16 NE_LoadPEResource( NE_MODULE *pModule, WORD type, LPVOID bits, DWORD size )
@@ -397,6 +419,10 @@
         ConvertDialog32To16( bits, size, GlobalLock16( handle ) );
         break;
 
+    case RT_ACCELERATOR16:
+        ConvertAccelerator32To16( bits, size, GlobalLock16( handle ) );
+        break;
+
     case RT_STRING16:
         FIXME( resource, "not yet implemented!\n" );
         /* fall through */
diff --git a/loader/ne/segment.c b/loader/ne/segment.c
index 854cbf3..a40ee19 100644
--- a/loader/ne/segment.c
+++ b/loader/ne/segment.c
@@ -148,7 +148,7 @@
       */
       char* buff = xmalloc(size);
       char* curr = buff;
-      ReadFile(hf, mem, size, &res, NULL);
+      ReadFile(hf, buff, size, &res, NULL);
       while(curr < buff + size) {
 	unsigned int rept = *((short*) curr)++;
 	unsigned int len = *((short*) curr)++;
@@ -800,6 +800,17 @@
 {
     WORD size = wSize << wElem;
     HANDLE16 hMem = GlobalAlloc16( NE_Ne2MemFlags(wFlags), size);
+
+    /* not data == code */
+    if (	(wFlags & NE_SEGFLAGS_EXECUTEONLY) ||
+    		!(wFlags & NE_SEGFLAGS_DATA)
+    ) {
+        WORD hSel = GlobalHandleToSel(hMem);
+        WORD access = SelectorAccessRights(hSel,0,0);
+
+	access |= 2<<2; /* SEGMENT_CODE */
+	SelectorAccessRights(hSel,1,access);
+    }
     return MAKELONG( hMem, GlobalHandleToSel(hMem) );
 }
 
diff --git a/loader/task.c b/loader/task.c
index b0aba02..3f742d2 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -251,7 +251,6 @@
         if (pModule->heap_size)
             LocalInit( pTask->hInstance, 0, pModule->heap_size );
 
-        InitApp( pTask->hModule );
         MODULE_InitializeDLLs( PROCESS_Current(), 0, DLL_PROCESS_ATTACH, (LPVOID)-1 );
         TRACE(relay, "(entryproc=%p)\n", entry );
 
diff --git a/memory/virtual.c b/memory/virtual.c
index 0950942..a387b9b 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -1094,9 +1094,16 @@
     {
         if (obj->type == K32OBJ_MEM_MAPPED_FILE)
         {
-            SetLastError( ERROR_ALREADY_EXISTS );
+            req.handle = -1;
+            CLIENT_SendRequest( REQ_CREATE_MAPPING, -1, 2,
+                                &req, sizeof(req),
+                                name, name ? strlen(name) + 1 : 0 );
+            CLIENT_WaitSimpleReply( &reply, sizeof(reply), NULL );
+            if (reply.handle == -1) return 0;
+            if (GetLastError() != ERROR_ALREADY_EXISTS)
+                return 0;  /* not supposed to happen */
             handle = HANDLE_Alloc( PROCESS_Current(), obj,
-                                   FILE_MAP_ALL_ACCESS /*FIXME*/, inherit, -1 );
+                                   FILE_MAP_ALL_ACCESS /*FIXME*/, inherit, reply.handle );
         }
         else
         {
diff --git a/misc/main.c b/misc/main.c
index f148a5b..86a1307 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -122,7 +122,8 @@
     { "-winver",        ".winver",          XrmoptionSepArg, (caddr_t)NULL },
     { "-config",        ".config",          XrmoptionSepArg, (caddr_t)NULL },
     { "-nodga",         ".nodga",           XrmoptionNoArg,  (caddr_t)"off"},
-    { "-console",       ".console",         XrmoptionSepArg, (caddr_t)NULL }
+    { "-console",       ".console",         XrmoptionSepArg, (caddr_t)NULL },
+    { "-dosver",        ".dosver",          XrmoptionSepArg, (caddr_t)NULL }
 };
 
 #define NB_OPTIONS  (sizeof(optionsTable) / sizeof(optionsTable[0]))
@@ -154,7 +155,8 @@
   "    -privatemap     Use a private color map\n" \
   "    -synchronous    Turn on synchronous display mode\n" \
   "    -version        Display the Wine version\n" \
-  "    -winver         Version to imitate (one of win31,win95,nt351,nt40)\n"
+  "    -winver         Windows version to imitate (one of win31,win95,nt351,nt40)\n" \
+  "    -dosver         DOS version to imitate (x.xx, e.g. 6.22). Only valid with -winver win31\n"
 
 
 
@@ -866,7 +868,20 @@
       {
           /* Hack: store option value in Options to be retrieved */
           /* later on inside the emulator code. */
-          if (!__winelib) Options.dllFlags = xstrdup((char *)value.addr);
+          if (!__winelib)
+                        {
+                                if (Options.dllFlags)
+                                {
+                                        /* don't overwrite previous value. Should we
+                                         * automatically add the ',' between multiple DLLs ?
+                                         */
+                                        MSG("Only one -dll flag is allowed. Use ',' between multiple DLLs\n");
+                                }
+                                else
+                                {
+                                        Options.dllFlags = xstrdup((char *)value.addr);
+                                }
+                        }
           else
           {
               MSG("-dll not supported in Winelib\n" );
@@ -875,7 +890,9 @@
       }
 
       if (MAIN_GetResource( db, ".winver", &value))
-          VERSION_ParseVersion( (char*)value.addr );
+          VERSION_ParseWinVersion( (char*)value.addr );
+      if (MAIN_GetResource( db, ".dosver", &value))
+          VERSION_ParseDosVersion( (char*)value.addr );
       if (MAIN_GetResource( db, ".config", &value))
          Options.configFileName = xstrdup((char *)value.addr);
       if (MAIN_GetResource( db, ".nodga", &value))
@@ -1041,6 +1058,7 @@
 
     /* We need this before calling any Xlib function */
     InitializeCriticalSection( &X11DRV_CritSection );
+    MakeCriticalSectionGlobal( &X11DRV_CritSection );
 
     TSXrmInitialize();
 
diff --git a/misc/printdrv.c b/misc/printdrv.c
index d53a5f6..5cfade5 100644
--- a/misc/printdrv.c
+++ b/misc/printdrv.c
@@ -742,6 +742,25 @@
           Level,pDriverInfo,cbBuf, pcbNeeded);
     return FALSE;
 }
+/*****************************************************************************
+ *          AddPrinterDriver32A  [WINSPOOL.120]
+ */
+BOOL32 WINAPI AddPrinterDriver32A(LPSTR printerName,DWORD level, 
+				   LPBYTE pDriverInfo)
+{
+    FIXME(print, "(%s,%ld,%p): stub\n",printerName,level,pDriverInfo);
+    return FALSE;
+}
+/*****************************************************************************
+ *          AddPrinterDriver32W  [WINSPOOL.121]
+ */
+BOOL32 WINAPI AddPrinterDriver32W(LPWSTR printerName,DWORD level, 
+				   LPBYTE pDriverInfo)
+{
+    FIXME(print, "(%s,%ld,%p): stub\n",debugstr_w(printerName),
+	  level,pDriverInfo);
+    return FALSE;
+}
 
 
 
diff --git a/misc/registry.c b/misc/registry.c
index 2f53228..e8f22e2 100644
--- a/misc/registry.c
+++ b/misc/registry.c
@@ -831,6 +831,12 @@
 			*ws++=*((unsigned char*)s++);
 		else {
 			s++;
+			if (!*s) {
+				/* Dangling \ ... may only happen if a registry
+				 * write was short. FIXME: What do to?
+				 */
+				 break;
+			}
 			if (*s=='\\') {
 				*ws++='\\';
 				s++;
diff --git a/misc/shell.c b/misc/shell.c
index 530a9b4..4947eeb 100644
--- a/misc/shell.c
+++ b/misc/shell.c
@@ -19,7 +19,6 @@
 #include "dlgs.h"
 #include "win.h"
 #include "cursoricon.h"
-#include "interfaces.h"
 #include "sysmetrics.h"
 #include "shlobj.h"
 #include "debug.h"
diff --git a/misc/version.c b/misc/version.c
index a865e4c..92d1f15 100644
--- a/misc/version.c
+++ b/misc/version.c
@@ -1,12 +1,14 @@
 /*
- * Windows version functions
+ * Windows and DOS version functions
  *
  * Copyright 1997 Alexandre Julliard
  * Copyright 1997 Marcus Meissner
  * Copyright 1998 Patrik Stridvall
+ * Copyright 1998 Andreas Mohr
  */
 
 #include <string.h>
+#include <stdlib.h>
 #include "windows.h"
 #include "winbase.h"
 #include "process.h"
@@ -24,7 +26,7 @@
 
 
 /* FIXME: compare values below with original and fix */
-static const VERSION_DATA VersionData[NB_WINDOWS_VERSIONS] =
+static VERSION_DATA VersionData[NB_WINDOWS_VERSIONS] =
 {
     /* WIN31 */
     {
@@ -64,7 +66,7 @@
     }
 };
 
-static const char *VersionNames[NB_WINDOWS_VERSIONS] =
+static const char *WinVersionNames[NB_WINDOWS_VERSIONS] =
 {
     "win31",
     "win95",
@@ -74,20 +76,20 @@
 
 /* the current version has not been autodetected but forced via cmdline */
 static BOOL32 versionForced = FALSE;
-static WINDOWS_VERSION defaultVersion = WIN31;
+static WINDOWS_VERSION defaultWinVersion = WIN31;
 
 
 /**********************************************************************
- *         VERSION_ParseVersion
+ *         VERSION_ParseWinVersion
  */
-void VERSION_ParseVersion( char *arg )
+void VERSION_ParseWinVersion( const char *arg )
 {
     int i;
     for (i = 0; i < NB_WINDOWS_VERSIONS; i++)
     {
-        if (!strcmp( VersionNames[i], arg ))
+        if (!strcmp( WinVersionNames[i], arg ))
         {
-            defaultVersion = (WINDOWS_VERSION)i;
+            defaultWinVersion = (WINDOWS_VERSION)i;
             versionForced = TRUE;
             return;
         }
@@ -95,12 +97,29 @@
     MSG("Invalid winver value '%s' specified.\n", arg );
     MSG("Valid versions are:" );
     for (i = 0; i < NB_WINDOWS_VERSIONS; i++)
-        MSG(" '%s'%c", VersionNames[i],
+        MSG(" '%s'%c", WinVersionNames[i],
 	    (i == NB_WINDOWS_VERSIONS - 1) ? '\n' : ',' );
 }
 
 
 /**********************************************************************
+ *         VERSION_ParseDosVersion
+ */
+void VERSION_ParseDosVersion( const char *arg )
+{
+    int hi, lo;
+    if (sscanf( arg, "%d.%d", &hi, &lo ) == 2)
+    {
+        VersionData[WIN31].getVersion16 =
+            MAKELONG(LOWORD(VersionData[WIN31].getVersion16),
+                     (hi<<8) + lo);
+    }
+    else
+        fprintf( stderr, "-dosver: Wrong version format. Use \"-dosver x.xx\"\n");
+}
+
+
+/**********************************************************************
  *         VERSION_GetVersion
  */
 WINDOWS_VERSION VERSION_GetVersion(void)
@@ -108,7 +127,7 @@
     PIMAGE_NT_HEADERS peheader;	
 
     if (versionForced) /* user has overridden any sensible checks */
-        return defaultVersion;
+        return defaultWinVersion;
     if (!PROCESS_Current()->exe_modref)
     {
         /* HACK: if we have loaded a PE image into this address space,
@@ -135,7 +154,7 @@
     ERR(ver,"unknown subsystem version: %04x.%04x, please report.\n",
 	peheader->OptionalHeader.MajorSubsystemVersion,
 	peheader->OptionalHeader.MinorSubsystemVersion );
-    return defaultVersion;
+    return defaultWinVersion;
 }
 
 
@@ -348,14 +367,16 @@
 {
     WINDOWS_VERSION ver = VERSION_GetVersion();
 
+    FIXME(ver, "Please report to a.mohr@mailto.de if you get version error messages !\n");
     switch(VersionData[ver].getVersion32)
     {
         case 0x80000a03: /* Win 3.1 */
 		return 0x140fd1; /* from Win32s 1.1e */
         case 0xc0000004: /* Win 95 */
-		return 0x0a0bd3;
+		return 0x1e10a9; /* some older version: 0x0a0bd3 */
         case 0x04213303: /* NT 3.51 */
-		return 0x0; /* FIXME */
+		FIXME(ver, "NT 3.51 version value unknown !\n");
+		return 0x1e10a9; /* value borrowed from Win95 */
         case 0x05650004: /* NT 4.0 */
 		return 0x141016;
 	default:
diff --git a/misc/winsock_dns.c b/misc/winsock_dns.c
index 5408c95..801e77c 100644
--- a/misc/winsock_dns.c
+++ b/misc/winsock_dns.c
@@ -30,7 +30,7 @@
 #ifdef HAVE_SYS_FILIO_H
 # include <sys/filio.h>
 #endif
-#ifdef __svr4__
+#ifdef HAVE_SYS_FILE_H
 # include <sys/file.h>
 #endif
 
diff --git a/msdos/Makefile.in b/msdos/Makefile.in
index 06d1288..db4c25a 100644
--- a/msdos/Makefile.in
+++ b/msdos/Makefile.in
@@ -7,6 +7,7 @@
 
 C_SRCS = \
 	cdrom.c \
+	dosconf.c \
 	dosmem.c \
 	dpmi.c \
 	xms.c \
diff --git a/msdos/cdrom.c b/msdos/cdrom.c
index 1881c77..817d430 100644
--- a/msdos/cdrom.c
+++ b/msdos/cdrom.c
@@ -24,7 +24,6 @@
 #include "msdos.h"
 #include "miscemu.h"
 #include "module.h"
-/* #define DEBUG_INT */
 #include "debug.h"
 
 
@@ -159,14 +158,18 @@
 	 io_stru[3]=io_stru[4]=0;
 	 io_stru[2]=1; /* supports audio channels (?? FIXME ??) */
 	 io_stru[1]=16; /* data read and plays audio racks */
+#if defined(CDROM_DRIVE_STATUS) && defined(CDS_TRAY_OPEN)
 	 io_stru[1]|=(ioctl(fdcd,CDROM_DRIVE_STATUS,0)==CDS_TRAY_OPEN);
+#endif
          TRACE(int," ----> DEVICE STATUS <0x%08lx>\n\n",(DWORD)io_stru[1]); 
 	 break;
 
 	case 9: /* media changed ? */
+#ifdef CDROM_MEDIA_CHANGED
 	 if (ioctl(fdcd,CDROM_MEDIA_CHANGED,0))
           io_stru[1]=0xff;
          else
+#endif
 	  io_stru[0]=0; /* FIXME? 1? */
 	 break;
 
diff --git a/msdos/dosconf.c b/msdos/dosconf.c
new file mode 100644
index 0000000..dd447ac
--- /dev/null
+++ b/msdos/dosconf.c
@@ -0,0 +1,440 @@
+/*
+ * DOS CONFIG.SYS parser
+ *
+ * Copyright 1998 Andreas Mohr 
+ *
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include "windows.h"
+#include "msdos.h"
+#include "debug.h"
+#include "options.h"
+#include "file.h"
+
+
+static int DOSCONF_Device(char **confline);
+static int DOSCONF_Dos(char **confline);
+static int DOSCONF_Fcbs(char **confline);
+static int DOSCONF_Break(char **confline);
+static int DOSCONF_Files(char **confline);
+static int DOSCONF_Install(char **confline);
+static int DOSCONF_Lastdrive(char **confline);
+static int DOSCONF_Menu(char **confline);
+static int DOSCONF_Include(char **confline);
+static int DOSCONF_Country(char **confline);
+static int DOSCONF_Numlock(char **confline);
+static int DOSCONF_Switches(char **confline);
+static int DOSCONF_Shell(char **confline);
+static int DOSCONF_Stacks(char **confline);
+static int DOSCONF_Buffers(char **confline);
+static void DOSCONF_Parse(char *menuname);
+
+DOSCONF DOSCONF_config = 
+{
+    'E',  /* lastdrive */
+    0,    /* brk_flag */
+    8,    /* files */
+    9,    /* stacks_nr */
+    256,  /* stacks_sz */
+    15,   /* buf */
+    1,    /* buf2 */
+    4,    /* fcbs */
+    0,    /* flags */
+    NULL, /* shell */
+    NULL  /* country */
+};
+
+typedef struct {
+    const char *tag_name;
+    int (*tag_handler)(char **p);
+    void *data;
+} TAG_ENTRY;
+
+
+/*
+ * see
+ * http://egeria.cm.cf.ac.uk/User/P.L.Poulain/project/internal/allinter.htm
+ * or
+ * http://www.csulb.edu/~murdock/dosindex.html
+ */
+
+static const TAG_ENTRY tag_entries[] =
+{
+    { ";", NULL },
+    { "REM ", NULL },
+    { "DEVICE", DOSCONF_Device },
+    { "[", DOSCONF_Menu },
+    { "SUBMENU", NULL },
+    { "MENUDEFAULT", DOSCONF_Menu },
+    { "INCLUDE", DOSCONF_Include },
+
+    { "INSTALL", DOSCONF_Install },
+    { "DOS", DOSCONF_Dos },
+    { "FCBS", DOSCONF_Fcbs },
+    { "BREAK", DOSCONF_Break },
+    { "FILES", DOSCONF_Files },
+    { "SHELL", DOSCONF_Shell },    
+    { "STACKS", DOSCONF_Stacks },
+    { "BUFFERS", DOSCONF_Buffers },
+    { "COUNTRY", DOSCONF_Country },
+    { "NUMLOCK", DOSCONF_Numlock },
+    { "SWITCHES", DOSCONF_Switches },
+    { "LASTDRIVE", DOSCONF_Lastdrive }
+};
+
+static FILE *cfg_fd;
+
+static char *menu_default = NULL;
+static int menu_in_listing = 0;		/* we are in the [menu] section */
+static int menu_skip = 0;				/* the current menu gets skipped */
+
+
+static void DOSCONF_skip(char **pconfline)
+{
+    char *p;
+    
+    p = *pconfline;
+    while ( (*p == ' ') || (*p == '\t') ) p++;
+    *pconfline = p;
+}
+		
+static int DOSCONF_JumpToEntry(char **pconfline, char separator)
+{
+    char *p;
+    
+    p = *pconfline;
+    while ( (*p != separator) && (*p != '\0') ) p++;
+
+    if (*p != separator)
+	return 0;
+    else p++;
+
+    while ( (*p == ' ') || (*p == '\t') ) p++;
+    *pconfline = p;
+    return 1;
+}
+
+static int DOSCONF_Device(char **confline)
+{
+    int loadhigh = 0;
+
+    *confline += 6; /* strlen("DEVICE") */
+    if (!(strncasecmp(*confline, "HIGH", 4)))
+    {
+	loadhigh = 1;
+	*confline += 4;
+	/* FIXME: get DEVICEHIGH parameters if avail ? */
+    }
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    TRACE(profile, "Loading device '%s'\n", *confline);
+#if 0
+    DOSMOD_LoadDevice(*confline, loadhigh);
+#endif
+    return 1;
+}
+
+static int DOSCONF_Dos(char **confline)
+{
+    *confline += 3; /* strlen("DOS") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    while (**confline != '\0')
+    {
+	if (!(strncasecmp(*confline, "HIGH", 4)))
+	{
+	    DOSCONF_config.flags |= DOSCONF_MEM_HIGH;
+	    *confline += 4;
+	}
+	else
+	if (!(strncasecmp(*confline, "UMB", 3)))
+	{
+	    DOSCONF_config.flags |= DOSCONF_MEM_UMB;
+	    *confline += 3;
+	}
+        else (*confline)++;
+	DOSCONF_JumpToEntry(confline, ',');
+    }
+    TRACE(profile, "DOSCONF_Dos: HIGH is %d, UMB is %d\n",
+    	(DOSCONF_config.flags & DOSCONF_MEM_HIGH) != 0, (DOSCONF_config.flags & DOSCONF_MEM_UMB) != 0);
+    return 1;
+}
+
+static int DOSCONF_Fcbs(char **confline)
+{
+    *confline += 4; /* strlen("FCBS") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    DOSCONF_config.fcbs = atoi(*confline);
+    if (DOSCONF_config.fcbs > 255)
+    {
+		MSG("The FCBS value in the config.sys file is too high ! Setting to 255.\n");
+		DOSCONF_config.fcbs = 255;
+    }
+    TRACE(profile, "DOSCONF_Fcbs returning %d\n", DOSCONF_config.fcbs);
+    return 1;
+}
+
+static int DOSCONF_Break(char **confline)
+{
+    *confline += 5; /* strlen("BREAK") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    if (!(strcasecmp(*confline, "ON")))
+        DOSCONF_config.brk_flag = 1;
+    TRACE(profile, "BREAK is %d\n", DOSCONF_config.brk_flag);
+    return 1;
+}
+
+static int DOSCONF_Files(char **confline)
+{
+    *confline += 5; /* strlen("FILES") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    DOSCONF_config.files = atoi(*confline);
+    if (DOSCONF_config.files > 255)
+    {
+    	MSG("The FILES value in the config.sys file is too high ! Setting to 255.\n");
+        DOSCONF_config.files = 255;
+    }
+    if (DOSCONF_config.files < 8)
+    {
+    	MSG("The FILES value in the config.sys file is too low ! Setting to 8.\n");
+        DOSCONF_config.files = 8;
+    }
+    TRACE(profile, "DOSCONF_Files returning %d\n", DOSCONF_config.files);
+    return 1;
+}
+
+static int DOSCONF_Install(char **confline)
+{
+    int loadhigh = 0;
+
+    *confline += 7; /* strlen("INSTALL") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    TRACE(profile, "Installing '%s'\n", *confline);
+#if 0
+    DOSMOD_Install(*confline, loadhigh);
+#endif
+    return 1;
+}
+
+static int DOSCONF_Lastdrive(char **confline)
+{
+    *confline += 9; /* strlen("LASTDRIVE") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    DOSCONF_config.lastdrive = toupper(**confline);
+    TRACE(profile, "Lastdrive %c\n", DOSCONF_config.lastdrive);
+    return 1;
+}
+
+static int DOSCONF_Country(char **confline)
+{
+    *confline += 7; /* strlen("COUNTRY") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    TRACE(profile, "Country '%s'\n", *confline);
+    if (DOSCONF_config.country == NULL)
+		DOSCONF_config.country = malloc(strlen(*confline) + 1);
+    strcpy(DOSCONF_config.country, *confline);
+    return 1;
+}
+
+static int DOSCONF_Numlock(char **confline)
+{
+    *confline += 7; /* strlen("NUMLOCK") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    if (!(strcasecmp(*confline, "ON")))
+        DOSCONF_config.flags |= DOSCONF_NUMLOCK;
+    TRACE(profile, "NUMLOCK is %d\n", (DOSCONF_config.flags & DOSCONF_NUMLOCK) != 0);
+    return 1;
+}
+
+static int DOSCONF_Switches(char **confline)
+{
+    char *p;
+
+    *confline += 8; /* strlen("SWITCHES") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    p = strtok(*confline, "/");
+    do
+    {
+	if ( toupper(*p) == 'K')
+	    DOSCONF_config.flags |= DOSCONF_KEYB_CONV;
+    }
+    while ((p = strtok(NULL, "/")));
+    TRACE(profile, "'Force conventional keyboard' is %d\n",
+		(DOSCONF_config.flags & DOSCONF_KEYB_CONV) != 0);
+    return 1;
+}
+
+static int DOSCONF_Shell(char **confline)
+{
+    *confline += 5; /* strlen("SHELL") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    TRACE(profile, "Shell '%s'\n", *confline);
+    if (DOSCONF_config.shell == NULL)
+		DOSCONF_config.shell = malloc(strlen(*confline) + 1);
+    strcpy(DOSCONF_config.shell, *confline);
+    return 1;
+}
+
+static int DOSCONF_Stacks(char **confline)
+{
+
+    *confline += 6; /* strlen("STACKS") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    DOSCONF_config.stacks_nr = atoi(strtok(*confline, ","));
+    DOSCONF_config.stacks_sz = atoi((strtok(NULL, ",")));
+    TRACE(profile, "%d stacks of size %d\n",
+          DOSCONF_config.stacks_nr, DOSCONF_config.stacks_sz);
+    return 1;
+}
+
+static int DOSCONF_Buffers(char **confline)
+{
+    char *p;
+
+    *confline += 7; /* strlen("BUFFERS") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    p = strtok(*confline, ",");
+    DOSCONF_config.buf = atoi(p);
+    if ((p = strtok(NULL, ",")))
+        DOSCONF_config.buf2 = atoi(p);
+    TRACE(profile, "%d primary buffers, %d secondary buffers\n",
+          DOSCONF_config.buf, DOSCONF_config.buf2);
+    return 1;
+}
+
+static int DOSCONF_Menu(char **confline)
+{
+    if (!(strncasecmp(*confline, "[MENU]", 6)))
+	menu_in_listing = 1;
+    else
+    if ((!(strncasecmp(*confline, "[COMMON]", 8)))
+    || (!(strncasecmp(*confline, "[WINE]", 6))))
+	menu_skip = 0;
+    else
+    if (**confline == '[')
+    {
+	(*confline)++;
+	if ((menu_default)
+	&& (!(strncasecmp(*confline, menu_default, strlen(menu_default)))))
+    {
+		free(menu_default);
+		menu_default = NULL;
+	    menu_skip = 0;
+    }
+	else
+	    menu_skip = 1;
+	menu_in_listing = 0;
+    }
+    else
+    if (!(strncasecmp(*confline, "menudefault", 11)) && (menu_in_listing))
+    {
+	if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    *confline = strtok(*confline, ",");
+    menu_default = malloc(strlen(*confline) + 1);
+	strcpy(menu_default, *confline);
+    }
+    return 1;
+}
+
+static int DOSCONF_Include(char **confline)
+{
+    fpos_t oldpos;
+    char *temp;
+    
+    *confline += 7; /* strlen("INCLUDE") */
+    if (!(DOSCONF_JumpToEntry(confline, '='))) return 0;
+    fgetpos(cfg_fd, &oldpos);
+    fseek(cfg_fd, 0, SEEK_SET);
+    TRACE(profile, "Including menu '%s'\n", *confline);
+    temp = malloc(strlen(*confline) + 1);
+    strcpy(temp, *confline);
+    DOSCONF_Parse(temp);
+	free(temp);
+    fsetpos(cfg_fd, &oldpos);
+    return 1;
+}
+
+static void DOSCONF_Parse(char *menuname)
+{
+   char confline[256];
+   char *p, *trail;
+   int i;
+    
+    if (menuname != NULL) /* we need to jump to a certain sub menu */
+    {
+	while (fgets(confline, 255, cfg_fd))
+	{
+	     p = confline;
+	     DOSCONF_skip(&p);
+	     if (*p == '[')
+	     {
+		p++;
+		if (!(trail = strrchr(p, ']')))
+		    return;
+		if (!(strncasecmp(p, menuname, (int)trail - (int)p)))
+		    break;
+	     }
+	}
+    }
+
+    while (fgets(confline, 255, cfg_fd))
+    {
+	p = confline;
+	DOSCONF_skip(&p);
+
+	if ((menuname) && (*p == '['))
+	    /* we were handling a specific sub menu, but now next menu begins */
+	    break;
+
+	if ((trail = strrchr(confline, '\n')))
+		*trail = '\0';
+	if ((trail = strrchr(confline, '\r')))
+		*trail = '\0';
+	if (!(menu_skip))
+	{
+	    for (i = 0; i < sizeof(tag_entries) / sizeof(TAG_ENTRY); i++)
+		if (!(strncasecmp(p, tag_entries[i].tag_name,
+		   strlen(tag_entries[i].tag_name))))
+		{
+		    TRACE(profile, "tag '%s'\n", tag_entries[i].tag_name);
+		    if (tag_entries[i].tag_handler != NULL)
+			    tag_entries[i].tag_handler(&p);
+			break;
+		}
+	}
+	else /* the current menu gets skipped */
+	DOSCONF_Menu(&p);
+    }
+}
+
+int DOSCONF_ReadConfig(void)
+{
+    char buffer[256];
+    DOS_FULL_NAME fullname;
+    char *filename, *menuname;
+    int ret = 1;
+
+    PROFILE_GetWineIniString( "wine", "config.sys", "", buffer, sizeof(buffer) );
+    filename = strtok(buffer, ",");
+    menuname = strtok(NULL,   ",");
+    if (!filename) return ret;
+
+    DOSFS_GetFullName(filename, FALSE, &fullname);
+    if (menuname) menu_default = strdup(menuname);
+    if ((cfg_fd = fopen(fullname.long_name, "r")))
+    {
+        DOSCONF_Parse(NULL);
+        fclose(cfg_fd);
+    }
+    else
+    {
+        MSG("Couldn't open config.sys file given as \"%s\" in" \
+            " wine.conf or .winerc, section [wine] !\n", filename);
+        ret = 0;
+    }
+    if (menu_default) free(menu_default);
+    return ret;
+}
diff --git a/msdos/int10.c b/msdos/int10.c
index c7ac518..23d3763 100644
--- a/msdos/int10.c
+++ b/msdos/int10.c
@@ -212,7 +212,7 @@
         break;
 
     case 0x0f: /* GET CURRENT VIDEO MODE */
-        TRACE(int10, "Get Current Video Mode (0x0%x)\n", AL_reg(context));
+        TRACE(int10, "Get Current Video Mode\n");
         /* Note: This should not be a constant value. */
         AL_reg(context) = 0x07; /* 80x25 text mode */
         AH_reg(context) = 80; /* 80 columns */
@@ -334,8 +334,10 @@
         switch BL_reg(context) {
         case 0x10: /* GET EGA INFO */
             TRACE(int10, "EGA Info Requested\n");
-            BX_reg(context) = 0x0003;
-            CX_reg(context) = 0x0009;
+            BH_reg(context) = 0x00;   /* Color screen */
+            BL_reg(context) = 0x03;   /* 256K EGA card */
+            CH_reg(context) = 0x00;   /* Switch settings?? */
+            CL_reg(context) = 0x09;   /* EGA+ card */
             break;
         case 0x20: /* ALTERNATE PRTSC */
             FIXME(int10, "Install Alternate Print Screen - Not Supported\n");
@@ -374,9 +376,9 @@
         switch AL_reg(context) {
         case 0x00: /* GET DISPLAY COMBINATION CODE */
             TRACE(int10, "Get Display Combination Code\n");
-            /* Why are we saying this? */
-            /* Do we need to check if we are in a windows or text app? */
-            BX_reg(context) = 0x0008; /* VGA w/ color analog display */
+            AL_reg(context) = 0x1a;
+            BH_reg(context) = 0x08; /* VGA w/ color analog display */
+            BL_reg(context) = 0x00; /* No secondary hardware */
             break;
         case 0x01: /* SET DISPLAY COMBINATION CODE */
             FIXME(int10, "Set Display Combination Code - Not Supported\n");
diff --git a/msdos/int21.c b/msdos/int21.c
index 6f7ca49..8315d74 100644
--- a/msdos/int21.c
+++ b/msdos/int21.c
@@ -6,7 +6,9 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <stdlib.h>
-#include <sys/file.h>
+#ifdef HAVE_SYS_FILE_H
+# include <sys/file.h>
+#endif
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/time.h>
@@ -1100,19 +1102,9 @@
 
     switch(AH_reg(context)) 
     {
-    case 0x00: /* TERMINATE PROGRAM */
-        TRACE(int21,"TERMINATE PROGRAM\n");
-        ExitProcess( 0 );
-        break;
-
-    case 0x01: /* READ CHARACTER FROM STANDARD INPUT, WITH ECHO */
-		_lread16(1, (BYTE *)&context->Eax, 1);
-		break;
-
     case 0x03: /* READ CHARACTER FROM STDAUX  */
     case 0x04: /* WRITE CHARACTER TO STDAUX */
     case 0x05: /* WRITE CHARACTER TO PRINTER */
-    case 0x0b: /* GET STDIN STATUS */
     case 0x0f: /* OPEN FILE USING FCB */
     case 0x10: /* CLOSE FILE USING FCB */
     case 0x14: /* SEQUENTIAL READ FROM FCB FILE */		
@@ -1129,6 +1121,15 @@
         INT_BARF( context, 0x21 );
         break;
 
+    case 0x00: /* TERMINATE PROGRAM */
+        TRACE(int21,"TERMINATE PROGRAM\n");
+        ExitProcess( 0 );
+        break;
+
+    case 0x01: /* READ CHARACTER FROM STANDARD INPUT, WITH ECHO */
+                _lread16(1, (BYTE *)&context->Eax, 1);
+                break;
+
     case 0x02: /* WRITE CHARACTER TO STANDARD OUTPUT */
         TRACE(int21, "Write Character to Standard Output\n");
     	CONSOLE_Write(DL_reg(context), 0, 0, 0);
@@ -1176,6 +1177,13 @@
 	break;
       }
 
+    case 0x0b: /* GET STDIN STATUS */
+	{
+	    CHAR dummy;
+
+	    AL_reg(context) = CONSOLE_CheckForKeystroke(&dummy, &dummy);
+	}
+        break;
     case 0x2e: /* SET VERIFY FLAG */
         TRACE(int21,"SET VERIFY FLAG ignored\n");
     	/* we cannot change the behaviour anyway, so just ignore it */
@@ -1319,17 +1327,28 @@
         switch (AL_reg(context))
         {
 	      case 0x00: /* GET CURRENT EXTENDED BREAK STATE */
-		TRACE(int21,"GET CURRENT EXTENDED BREAK STATE stub\n");
-                DL_reg(context) = 0;
+		TRACE(int21,"GET CURRENT EXTENDED BREAK STATE\n");
+                DL_reg(context) = DOSCONF_config.brk_flag;
 		break;
 
 	      case 0x01: /* SET EXTENDED BREAK STATE */
-		TRACE(int21,"SET CURRENT EXTENDED BREAK STATE stub\n");
+		TRACE(int21,"SET CURRENT EXTENDED BREAK STATE\n");
+		DOSCONF_config.brk_flag = (DL_reg(context) > 0);
 		break;		
 		
 	      case 0x02: /* GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE*/
-		TRACE(int21,"GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE stub\n");
-		DL_reg(context) = 0;
+		TRACE(int21,"GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE\n");
+		/* ugly coding in order to stay reentrant */
+		if (DL_reg(context))
+		{
+		    DL_reg(context) = DOSCONF_config.brk_flag;
+		    DOSCONF_config.brk_flag = 1;
+		}
+		else
+		{
+		    DL_reg(context) = DOSCONF_config.brk_flag;
+		    DOSCONF_config.brk_flag = 0;
+		}
 		break;
 
 	      case 0x05: /* GET BOOT DRIVE */
diff --git a/msdos/ioports.c b/msdos/ioports.c
index 1154c3e..d6adf75 100644
--- a/msdos/ioports.c
+++ b/msdos/ioports.c
@@ -2,6 +2,7 @@
  * Emulation of processor ioports.
  *
  * Copyright 1995 Morten Welinder
+ * Copyright 1998 Andreas Mohr, Ove Kaaven
  */
 
 /* Known problems:
@@ -17,9 +18,18 @@
 #include <unistd.h>
 #include "windows.h"
 #include "vga.h"
+#include "dosexe.h"
 #include "options.h"
 #include "debug.h"
 
+static WORD tmr_8253_countmax[3] = {0xffff, 0x12, 1}; /* [2] needs to be 1 ! */
+/* if byte_toggle is TRUE, then hi byte has already been written */
+static BOOL16 tmr_8253_byte_toggle[3] = {FALSE, FALSE, FALSE};
+static BYTE tmr_8253_ctrlbyte_ch[4] = {0x06, 0x44, 0x86, 0};
+static int dummy_ctr = 0;
+
+static BYTE parport_8255[4] = {0x4f, 0x20, 0xff, 0xff};
+
 static BYTE cmosaddress;
 
 static BYTE cmosimage[64] =
@@ -52,7 +62,7 @@
 
 #endif  /* DIRECT_IO_ACCESS */
 
-static void IO_FixCMOSCheckSum()
+static void IO_FixCMOSCheckSum(void)
 {
 	WORD sum = 0;
 	int i;
@@ -64,6 +74,26 @@
 	TRACE(int, "calculated hi %02x, lo %02x\n", cmosimage[0x2e], cmosimage[0x2f]);
 }
 
+static void set_timer_maxval(unsigned timer, unsigned maxval)
+{
+    switch (timer) {
+        case 0: /* System timer counter divisor */
+            DOSVM_SetTimer(maxval);
+            break;
+        case 1: /* RAM refresh */
+            FIXME(int, "RAM refresh counter handling not implemented !");
+            break;
+        case 2: /* cassette & speaker */
+            /* speaker on ? */
+            if (((BYTE)parport_8255[1] & 3) == 3)
+            {
+                TRACE(int, "Beep (freq: %d) !\n", 1193180 / maxval );
+                Beep(1193180 / maxval, 20);
+            }
+            break;
+    }
+}
+
 /**********************************************************************
  *	    IO_port_init
  */
@@ -206,62 +236,99 @@
 
 /**********************************************************************
  *	    IO_inport
+ *
+ * Note: The size argument has to be handled correctly _externally_ 
+ * (as we always return a DWORD)
  */
-DWORD IO_inport( int port, int count )
+DWORD IO_inport( int port, int size )
 {
     DWORD res = 0;
-    BYTE b;    
 
 #ifdef DIRECT_IO_ACCESS    
-    if (do_direct_port_access)
+    if ((do_direct_port_access)
+        /* Make sure we have access to the port */
+        && (port_permissions[port] & IO_READ))
     {
-        /* Make sure we have access to the whole range */
-        int i;
-        for (i = 0; i < count; i++)
-            if (!(port_permissions[port+i] & IO_READ)) break;
-        if (i == count)
+        iopl(3);
+        switch(size)
         {
-            iopl(3);
-            switch(count)
-            {
-                case 1: res = inb( port ); break;
-                case 2: res = inw( port ); break;
-                case 4: res = inl( port ); break;
-                default:
-                    ERR(int, "invalid count %d\n", count);
-            }
-            iopl(0);
-            return res;
+        case 1: res = inb( port ); break;
+        case 2: res = inw( port ); break;
+        case 4: res = inl( port ); break;
+        default:
+            ERR(int, "invalid data size %d\n", size);
         }
+        iopl(0);
+        return res;
     }
 #endif
 
-    TRACE(int, "%d bytes from port 0x%02x\n", count, port );
+    TRACE(int, "%d-byte value from port 0x%02x\n", size, port );
 
-    while (count-- > 0)
+    switch (port)
     {
-        switch (port)
+    case 0x40:
+    case 0x41:
+    case 0x42:
+    {
+        BYTE chan = port & 3;
+        WORD tempval = 0;
+
+        if (chan == 0) /* System timer counter divisor */
+            tempval = (WORD)DOSVM_GetTimer();
+        else
+        {   /* FIXME: intelligent hardware timer emulation needed */
+            dummy_ctr -= 10;
+            tempval = dummy_ctr;
+        }
+        switch (tmr_8253_ctrlbyte_ch[chan] & 0x30)
         {
-        case 0x70:
-            b = cmosaddress;
+        case 0x00:
+            break; /* correct ? */
+        case 0x10: /* read lo byte */
+            res = (BYTE)tempval;
             break;
-        case 0x71:
-            b = cmosimage[cmosaddress & 0x3f];
-            break;
-        case 0x200:
-        case 0x201:
-            b = 0xff; /* no joystick */
-            break;
-        case 0x3da:
-            b = VGA_ioport_in( port );
-            break;
-        default:
-            WARN( int, "Direct I/O read attempted from port %x\n", port);
-            b = 0xff;
+        case 0x30: /* read lo byte, then hi byte */
+            tmr_8253_byte_toggle[chan] ^= TRUE; /* toggle */
+            if (tmr_8253_byte_toggle[chan] == TRUE)
+            {
+                res = (BYTE)tempval;
+                break;
+            }
+            /* else [fall through if read hi byte !] */
+        case 0x20: /* read hi byte */
+            res = (BYTE)tempval>>8;
             break;
         }
-        port++;
-        res = (res << 8) | b;
+        break;
+    }
+    case 0x60:
+        res = (DWORD)parport_8255[0];
+        break;
+    case 0x61:
+        res = (DWORD)parport_8255[1];
+        break;
+    case 0x62:
+        res = (DWORD)parport_8255[2];
+        break;
+    case 0x70:
+        res = (DWORD)cmosaddress;
+        break;
+    case 0x71:
+        res = (DWORD)cmosimage[cmosaddress & 0x3f];
+        break;
+    case 0x200:
+    case 0x201:
+        res = 0xffffffff; /* no joystick */
+        break;
+    case 0x3ba:
+    case 0x3da:
+        res = (DWORD)VGA_ioport_in( port );
+        break;
+    default:
+        WARN( int, "Direct I/O read attempted from port %x\n", port);
+        res = 0xffffffff;
+        break;
     }
     TRACE(int, "  returning ( 0x%lx )\n", res );
     return res;
@@ -271,57 +338,107 @@
 /**********************************************************************
  *	    IO_outport
  */
-void IO_outport( int port, int count, DWORD value )
+void IO_outport( int port, int size, DWORD value )
 {
-    BYTE b;
-
-    TRACE(int, "IO: 0x%lx (%d bytes) to port 0x%02x\n",
-                 value, count, port );
+    TRACE(int, "IO: 0x%lx (%d-byte value) to port 0x%02x\n",
+                 value, size, port );
 
 #ifdef DIRECT_IO_ACCESS
-    if (do_direct_port_access)
+    if ((do_direct_port_access)
+        /* Make sure we have access to the port */
+        && (port_permissions[port] & IO_WRITE))
     {
-        /* Make sure we have access to the whole range */
-        int i;
-        for (i = 0; i < count; i++)
-            if (!(port_permissions[port+i] & IO_WRITE)) break;
-        if (i == count)
+        iopl(3);
+        switch(size)
         {
-            iopl(3);
-            switch(count)
-            {
-                case 1: outb( LOBYTE(value), port ); break;
-                case 2: outw( LOWORD(value), port ); break;
-                case 4: outl( value, port ); break;
-                default:
-                    WARN(int, "Invalid count %d\n", count);
-            }
-            iopl(0);
-            return;
+        case 1: outb( LOBYTE(value), port ); break;
+        case 2: outw( LOWORD(value), port ); break;
+        case 4: outl( value, port ); break;
+        default:
+            WARN(int, "Invalid data size %d\n", size);
         }
+        iopl(0);
+        return;
     }
 #endif
 
-    while (count-- > 0)
+    switch (port)
     {
-        b = value & 0xff;
-        value >>= 8;
-        switch (port)
+    case 0x40:
+    case 0x41:
+    case 0x42:
+    {
+        BYTE chan = port & 3;
+        WORD oldval = 0;
+
+        if ( ((tmr_8253_ctrlbyte_ch[chan] & 0x30) != 0x30) ||
+/* we need to get the oldval before any lo/hi byte change has been made */
+             (tmr_8253_byte_toggle[chan] == FALSE) )
+            oldval = tmr_8253_countmax[chan];
+        switch (tmr_8253_ctrlbyte_ch[chan] & 0x30)
         {
-        case 0x70:
-            cmosaddress = b & 0x7f;
+        case 0x00:
+            break; /* correct ? */
+        case 0x10: /* write lo byte */
+            tmr_8253_countmax[chan] =
+                (tmr_8253_countmax[chan] & 0xff00) | (BYTE)value;
             break;
-        case 0x71:
-            cmosimage[cmosaddress & 0x3f] = b;
-            break;
-        case 0x3c8:
-        case 0x3c9:
-            VGA_ioport_out( port, b );
-            break;
-        default:
-            WARN(int, "Direct I/O write attempted to port %x\n", port );
+        case 0x30: /* write lo byte, then hi byte */
+            tmr_8253_byte_toggle[chan] ^= TRUE; /* toggle */
+            if (tmr_8253_byte_toggle[chan] == TRUE)
+            {
+                tmr_8253_countmax[chan] =
+                    (tmr_8253_countmax[chan] & 0xff00) | (BYTE)value;
+                break;
+            }
+            /* else [fall through if write hi byte !] */
+        case 0x20: /* write hi byte */
+            tmr_8253_countmax[chan] =
+                (tmr_8253_countmax[chan] & 0xff)|((BYTE)value << 8);
             break;
         }
-	port++;
+        if (
+            /* programming finished ? */
+            ( ((tmr_8253_ctrlbyte_ch[chan] & 0x30) != 0x30) ||
+              (tmr_8253_byte_toggle[chan] == FALSE) )
+            /* update to new value ? */
+            && (tmr_8253_countmax[chan] != oldval)
+            )
+            set_timer_maxval(chan, tmr_8253_countmax[chan]);
+    }
+    break;          
+    case 0x43:
+        /* ctrl byte for specific timer channel */
+        tmr_8253_ctrlbyte_ch[((BYTE)value & 0xc0) >> 6] = (BYTE)value;
+        if (((BYTE)value&0xc0)==0xc0) {
+            FIXME(int,"8254 timer readback not implemented yet\n");
+        } else
+            if (((BYTE)value&3)==0) {
+                FIXME(int,"timer counter latch not implemented yet\n");
+            }
+        if ((value & 0x30) == 0x30) /* write lo byte, then hi byte */
+            tmr_8253_byte_toggle[((BYTE)value & 0xc0) >> 6] = FALSE; /* init */
+        break;
+    case 0x61:
+        parport_8255[1] = (BYTE)value;
+        if ((((BYTE)parport_8255[1] & 3) == 3) && (tmr_8253_countmax[2] != 1))
+        {
+            TRACE(int, "Beep (freq: %d) !\n", 1193180 / tmr_8253_countmax[2]);
+            Beep(1193180 / tmr_8253_countmax[2], 20);
+        }
+        break;
+    case 0x70:
+        cmosaddress = (BYTE)value & 0x7f;
+        break;
+    case 0x71:
+        cmosimage[cmosaddress & 0x3f] = (BYTE)value;
+        break;
+    case 0x3c8:
+    case 0x3c9:
+        VGA_ioport_out( port, (BYTE)value );
+        break;
+    default:
+        WARN(int, "Direct I/O write attempted to port %x\n", port );
+        break;
     }
 }
diff --git a/multimedia/dplay.c b/multimedia/dplay.c
index e3a22d7..f460f8a 100644
--- a/multimedia/dplay.c
+++ b/multimedia/dplay.c
@@ -5,13 +5,11 @@
  * <presently under construction - contact hunnise@nortelnetworks.com>
  *
  */
-#include "interfaces.h"
 #include "heap.h"
 #include "winerror.h"
 #include "debug.h"
 #include "winnt.h"
 #include "winreg.h"
-#include "compobj.h"
 #include "dplay.h"
 
 #include "thread.h"
diff --git a/multimedia/dsound.c b/multimedia/dsound.c
index e37a572..54bfc81 100644
--- a/multimedia/dsound.c
+++ b/multimedia/dsound.c
@@ -41,9 +41,9 @@
 #include <math.h>	/* Insomnia - pow() function */
 #include "windows.h"
 #include "winerror.h"
-#include "interfaces.h"
 #include "multimedia.h"
 #include "dsound.h"
+#include "objbase.h"
 #include "thread.h"
 #include "debug.h"
 #include "xmalloc.h"
@@ -2115,7 +2115,8 @@
  * DirectSound ClassFactory
  */
 static HRESULT WINAPI 
-DSCF_QueryInterface(LPCLASSFACTORY this,REFIID riid,LPVOID *ppobj) {
+DSCF_QueryInterface(LPUNKNOWN iface,REFIID riid,LPVOID *ppobj) {
+	ICOM_THIS(IClassFactory,iface);
 	char buf[80];
 
 	if (HIWORD(riid))
@@ -2127,18 +2128,21 @@
 }
 
 static ULONG WINAPI
-DSCF_AddRef(LPCLASSFACTORY this) {
+DSCF_AddRef(LPUNKNOWN iface) {
+	ICOM_THIS(IClassFactory,iface);
 	return ++(this->ref);
 }
 
-static ULONG WINAPI DSCF_Release(LPCLASSFACTORY this) {
+static ULONG WINAPI DSCF_Release(LPUNKNOWN iface) {
+	ICOM_THIS(IClassFactory,iface);
 	/* static class, won't be  freed */
 	return --(this->ref);
 }
 
 static HRESULT WINAPI DSCF_CreateInstance(
-	LPCLASSFACTORY this,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
+	LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
 ) {
+	ICOM_THIS(IClassFactory,iface);
 	char buf[80];
 
 	WINE_StringFromCLSID(riid,buf);
@@ -2150,19 +2154,22 @@
 	return E_NOINTERFACE;
 }
 
-static HRESULT WINAPI DSCF_LockServer(LPCLASSFACTORY this,BOOL32 dolock) {
+static HRESULT WINAPI DSCF_LockServer(LPCLASSFACTORY iface,BOOL32 dolock) {
+	ICOM_THIS(IClassFactory,iface);
 	FIXME(dsound,"(%p)->(%d),stub!\n",this,dolock);
 	return S_OK;
 }
 
-static IClassFactory_VTable DSCF_VTable = {
+static ICOM_VTABLE(IClassFactory) DSCF_VTable = {
+  {
 	DSCF_QueryInterface,
 	DSCF_AddRef,
-	DSCF_Release,
+    DSCF_Release
+  },
 	DSCF_CreateInstance,
 	DSCF_LockServer
 };
-static IClassFactory DSOUND_CF = {&DSCF_VTable, 1 };
+static _IClassFactory DSOUND_CF = {&DSCF_VTable, 1 };
 
 /*******************************************************************************
  * DllGetClassObject [DSOUND.4]
@@ -2197,7 +2204,7 @@
     TRACE(dsound, "(%p,%p,%p)\n", xbuf, buf, ppv);
     if (!memcmp(riid,&IID_IClassFactory,sizeof(IID_IClassFactory))) {
     	*ppv = (LPVOID)&DSOUND_CF;
-	DSOUND_CF.lpvtbl->fnAddRef(&DSOUND_CF);
+	IClassFactory_AddRef(&DSOUND_CF);
     return S_OK;
     }
     FIXME(dsound, "(%p,%p,%p): no interface found.\n", xbuf, buf, ppv);
diff --git a/objects/dc.c b/objects/dc.c
index 73b303c..981d5d3 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -15,6 +15,7 @@
 #include "font.h"
 #include "winerror.h"
 #include "x11drv.h"
+#include "ts_xlib.h"
 
 /***********************************************************************
  *           DC_Init_DC_INFO
diff --git a/objects/font.c b/objects/font.c
index 01bc8ff..e98ac86 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -756,7 +756,7 @@
  *
  * FIXME: Should this have a bug for compatibility?
  * Original Windows versions of GetTextExtentPoint{A,W} have documented
- * bugs.
+ * bugs (-> MSDN KB q147647.txt).
  */
 BOOL16 WINAPI GetTextExtentPoint16( HDC16 hdc, LPCSTR str, INT16 count,
                                     LPSIZE16 size )
diff --git a/ole/compobj.c b/ole/compobj.c
index d1264e7..a534994 100644
--- a/ole/compobj.c
+++ b/ole/compobj.c
@@ -5,50 +5,57 @@
  *	Copyright 1998	Justin Bradford
  */
 
-#define INITGUID
-
 #include "config.h"
 #ifdef HAVE_UNISTD_H
-#include <unistd.h>
+# include <unistd.h>
 #endif
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/stat.h>
-#include <sys/file.h>
+#ifdef HAVE_SYS_FILE_H
+# include <sys/file.h>
+#endif
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #ifdef HAVE_SYS_SOCKIO_H
-#include <sys/sockio.h>
+# include <sys/sockio.h>
 #endif
 #ifdef HAVE_NET_IF_H
-#include <net/if.h>
+# include <net/if.h>
 #endif
 #ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
+# include <netinet/in.h>
 #endif
 #include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#include "ole.h"
-#include "ole2.h"
+#include "windows.h"
 #include "winerror.h"
+#include "ole2.h"
 #include "debug.h"
 #include "file.h"
-#include "compobj.h"
 #include "heap.h"
 #include "ldt.h"
-#include "interfaces.h"
-#include "shlobj.h"
-#include "oleobj.h"
-#include "ddraw.h"
-#include "dsound.h"
-#include "dinput.h"
-#include "d3d.h"
-#include "dplay.h"
-#include "windows.h"
+#include "winreg.h"
 
+#define INITGUID
+
+/* FIXME: we include all the header files containing GUIDs 
+ * so that the corresponding variables get defined. But they 
+ * don't even all belong to the same DLL !!!
+ */
+#include "objbase.h"
+#include "servprov.h"
+#include "shlobj.h"
+#include "ddraw.h"
+#include "d3d.h"
+#include "dinput.h"
+#include "dsound.h"
+#include "dplay.h"
+
+#include "objbase.h"
 
 LPMALLOC16 currentMalloc16=NULL;
 LPMALLOC32 currentMalloc32=NULL;
@@ -87,26 +94,59 @@
  * Set the win16 IMalloc used for memory management
  */
 HRESULT WINAPI CoInitialize16(
-	LPMALLOC16 lpReserved	/* [in] pointer to win16 malloc interface */
+	LPVOID lpReserved	/* [in] pointer to win16 malloc interface */
 ) {
-    currentMalloc16 = lpReserved;
+    currentMalloc16 = (LPMALLOC16)lpReserved;
     return S_OK;
 }
 
 /******************************************************************************
  *		CoInitialize32	[OLE32.26]
+ *
  * Set the win32 IMalloc used for memorymanagement
+ *
+ * RETURNS
+ * S_OK if successful, S_FALSE otherwise, RPC_E_CHANGED_MODE if a previous 
+ * call to CoInitializeEx specified another threading model.
+ *
+ * BUGS
+ * Only the single threaded model is supported. As a result RPC_E_CHANGED_MODE 
+ * is never returned.
  */
 HRESULT WINAPI CoInitialize32(
-	LPMALLOC32 lpReserved	/* [in] pointer to win32 malloc interface */
+	LPVOID lpReserved	/* [in] pointer to win32 malloc interface */
 ) {
     /* FIXME: there really should be something here that incrememts a refcount
      * but I'm supposing that it is a real COM object, so I won't bother
      * creating one here.  (Decrement done in CoUnitialize()) */
-    currentMalloc32 = lpReserved;
+    currentMalloc32 = (LPMALLOC32)lpReserved;
     return S_OK;
 }
 
+/******************************************************************************
+ *		CoInitializeEx32	[OLE32.163]
+ *
+ * Set the win32 IMalloc used for memory management
+ *
+ * RETURNS
+ * S_OK if successful, S_FALSE otherwise, RPC_E_CHANGED_MODE if a previous 
+ * call to CoInitializeEx specified another threading model.
+ *
+ * BUGS
+ * Only the single threaded model is supported. As a result RPC_E_CHANGED_MODE 
+ * is never returned.
+ */
+HRESULT WINAPI CoInitializeEx32(
+	LPVOID lpReserved,	/* [in] pointer to win32 malloc interface */
+	DWORD dwCoInit		/* [in] A value from COINIT specifies the threading model */
+) {
+  if (dwCoInit!=COINIT_APARTMENTTHREADED) {
+    FIXME(ole, ":(%p,%x): unsupported flag %x\n", lpReserved, (int)dwCoInit, (int)dwCoInit);
+    /* Hope for the best and continue anyway */
+  }
+  return CoInitialize32(lpReserved);
+}
+
 /***********************************************************************
  *           CoUnitialize   [COMPOBJ.3]
  * Don't know what it does. 
@@ -153,7 +193,7 @@
 /***********************************************************************
  *           CoCreateStandardMalloc16 [COMPOBJ.71]
  */
-OLESTATUS WINAPI CoCreateStandardMalloc16(DWORD dwMemContext,
+HRESULT WINAPI CoCreateStandardMalloc16(DWORD dwMemContext,
 					  LPMALLOC16 *lpMalloc)
 {
     /* FIXME: docu says we shouldn't return the same allocator as in
@@ -165,25 +205,43 @@
 /******************************************************************************
  *		CoDisconnectObject	[COMPOBJ.15]
  */
-OLESTATUS WINAPI CoDisconnectObject( LPUNKNOWN lpUnk, DWORD reserved )
+HRESULT WINAPI CoDisconnectObject( LPUNKNOWN lpUnk, DWORD reserved )
 {
     TRACE(ole,"%p %lx\n",lpUnk,reserved);
     return S_OK;
 }
 
 /***********************************************************************
- *           IsEqualGUID [COMPOBJ.18]
- * Compares two Unique Identifiers
+ *           IsEqualGUID16 [COMPOBJ.18]
+ *
+ * Compares two Unique Identifiers.
+ *
  * RETURNS
  *	TRUE if equal
  */
-BOOL16 WINAPI IsEqualGUID(
+BOOL16 WINAPI IsEqualGUID16(
 	GUID* g1,	/* [in] unique id 1 */
-	GUID* g2	/* [in] unique id 2 */
+	GUID* g2	/**/
 ) {
     return !memcmp( g1, g2, sizeof(GUID) );
 }
 
+/***********************************************************************
+ *           IsEqualGUID32 [OLE32.76]
+ *
+ * Compares two Unique Identifiers.
+ *
+ * RETURNS
+ *	TRUE if equal
+ */
+BOOL32 WINAPI IsEqualGUID32(
+     REFGUID rguid1, /* [in] unique id 1 */
+     REFGUID rguid2  /* [in] unique id 2 */
+     )
+{
+    return !memcmp(rguid1,rguid2,sizeof(GUID));
+}
+
 /******************************************************************************
  *		CLSIDFromString16	[COMPOBJ.20]
  * Converts a unique identifier from it's string representation into 
@@ -194,7 +252,7 @@
  * RETURNS
  *	the converted GUID
  */
-OLESTATUS WINAPI CLSIDFromString16(
+HRESULT WINAPI CLSIDFromString16(
 	LPCOLESTR16 idstr,	/* [in] string representation of guid */
 	CLSID *id		/* [out] GUID converted from string */
 ) {
@@ -262,11 +320,19 @@
 
 /******************************************************************************
  *		CoCreateGuid[OLE32.6]
+ *
+ * Creates a 128bit GUID.
  * Implemented according the DCE specification for UUID generation.
  * Code is based upon uuid library in e2fsprogs by Theodore Ts'o.
  * Copyright (C) 1996, 1997 Theodore Ts'o.
+ *
+ * RETURNS
+ *
+ *  S_OK if successful.
  */
-int CoCreateGuid(GUID *pguid) {
+HRESULT WINAPI CoCreateGuid(
+	GUID *pguid /* [out] points to the GUID to initialize */
+) {
    static char has_init = 0;
    unsigned char a[6];
    static int                      adjustment = 0;
@@ -458,7 +524,7 @@
  * RETURNS
  *	the converted GUID
  */
-OLESTATUS WINAPI CLSIDFromString32(
+HRESULT WINAPI CLSIDFromString32(
 	LPCOLESTR32 idstr,	/* [in] string representation of GUID */
 	CLSID *id		/* [out] GUID represented by above string */
 ) {
@@ -474,12 +540,11 @@
  * Converts a GUID into the respective string representation.
  *
  * NOTES
- *    Why is this WINAPI?
  *
  * RETURNS
  *	the string representation and OLESTATUS
  */
-OLESTATUS WINAPI WINE_StringFromCLSID(
+HRESULT WINE_StringFromCLSID(
 	const CLSID *id,	/* [in] GUID to be converted */
 	LPSTR idstr		/* [out] pointer to buffer to contain converted guid */
 ) {
@@ -519,7 +584,7 @@
  * RETURNS
  *	the string representation and OLESTATUS
  */
-OLESTATUS WINAPI StringFromCLSID16(
+HRESULT WINAPI StringFromCLSID16(
 	const CLSID *id,	/* [in] the GUID to be converted */
 	LPOLESTR16 *idstr	/* [out] a pointer to a to-be-allocated segmented pointer pointing to the resulting string */
 
@@ -538,7 +603,7 @@
      * everything we need.
      */
     if (!WOWCallback16Ex(
-    	(FARPROC16)((LPMALLOC16_VTABLE)PTR_SEG_TO_LIN(
+    	(FARPROC16)((ICOM_VTABLE(IMalloc16)*)PTR_SEG_TO_LIN(
 		((LPMALLOC16)PTR_SEG_TO_LIN(mllc))->lpvtbl)
 	)->fnAlloc,
 	WCB16_CDECL,
@@ -559,7 +624,7 @@
  * RETURNS
  *	the string representation and OLESTATUS
  */
-OLESTATUS WINAPI StringFromCLSID32(
+HRESULT WINAPI StringFromCLSID32(
 	const CLSID *id,	/* [in] the GUID to be converted */
 	LPOLESTR32 *idstr	/* [out] a pointer to a to-be-allocated pointer pointing to the resulting string */
 ) {
@@ -607,7 +672,7 @@
  * RETURNS
  *	riid associated with the progid
  */
-OLESTATUS WINAPI CLSIDFromProgID16(
+HRESULT WINAPI CLSIDFromProgID16(
 	LPCOLESTR16 progid,	/* [in] program id as found in registry */
 	LPCLSID riid		/* [out] associated CLSID */
 ) {
@@ -638,7 +703,7 @@
  * RETURNS
  *	riid associated with the progid
  */
-OLESTATUS WINAPI CLSIDFromProgID32(
+HRESULT WINAPI CLSIDFromProgID32(
 	LPCOLESTR32 progid,	/* [in] program id as found in registry */
 	LPCLSID riid		/* [out] associated CLSID */
 ) {
@@ -649,6 +714,7 @@
 	return ret;
 }
 
+/* FIXME: this function is not declared in the WINELIB headers. But where should it go ? */
 /***********************************************************************
  *           LookupETask (COMPOBJ.94)
  */
@@ -660,6 +726,7 @@
 	return 0;
 }
 
+/* FIXME: this function is not declared in the WINELIB headers. But where should it go ? */
 /***********************************************************************
  *           SetETask (COMPOBJ.95)
  */
@@ -669,6 +736,7 @@
 	return 0;
 }
 
+/* FIXME: this function is not declared in the WINELIB headers. But where should it go ? */
 /***********************************************************************
  *           CallObjectInWOW (COMPOBJ.201)
  */
@@ -682,11 +750,11 @@
  *
  * Don't know where it registers it ...
  */
-OLESTATUS WINAPI CoRegisterClassObject16(
+HRESULT WINAPI CoRegisterClassObject16(
 	REFCLSID rclsid,
 	LPUNKNOWN pUnk,
-	DWORD dwClsContext,
-	DWORD flags,
+	DWORD dwClsContext, /* [in] CLSCTX flags indicating the context in which to run the executable */
+	DWORD flags,        /* [in] REGCLS flags indicating how connections are made */
 	LPDWORD lpdwRegister
 ) {
 	char	buf[80];
@@ -704,11 +772,11 @@
  *
  * Don't know where it registers it ...
  */
-OLESTATUS WINAPI CoRegisterClassObject32(
+HRESULT WINAPI CoRegisterClassObject32(
 	REFCLSID rclsid,
 	LPUNKNOWN pUnk,
-	DWORD dwClsContext,
-	DWORD flags,
+	DWORD dwClsContext, /* [in] CLSCTX flags indicating the context in which to run the executable */
+	DWORD flags,        /* [in] REGCLS flags indicating how connections are made */
 	LPDWORD lpdwRegister
 ) {
     char buf[80];
@@ -799,7 +867,7 @@
 /******************************************************************************
  *		CoRegisterMessageFilter16	[COMPOBJ.27]
  */
-OLESTATUS WINAPI CoRegisterMessageFilter16(
+HRESULT WINAPI CoRegisterMessageFilter16(
 	LPMESSAGEFILTER lpMessageFilter,
 	LPMESSAGEFILTER *lplpMessageFilter
 ) {
@@ -837,8 +905,8 @@
 
         hres = CoGetClassObject(rclsid, dwClsContext, NULL, (const REFIID) &IID_IClassFactory, (LPVOID)&lpclf);
         if (!SUCCEEDED(hres)) return hres;
-	hres = lpclf->lpvtbl->fnCreateInstance(lpclf, pUnkOuter, iid, ppv);
-	lpclf->lpvtbl->fnRelease(lpclf);
+	hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv);
+	IClassFactory_Release(lpclf);
 	return hres;
 #endif
 }
@@ -968,7 +1036,7 @@
 /***********************************************************************
  *           CoLoadLibrary (OLE32.30)
  */
-HINSTANCE32 WINAPI CoLoadLibrary(LPSTR lpszLibName, BOOL32 bAutoFree)
+HINSTANCE32 WINAPI CoLoadLibrary(LPOLESTR16 lpszLibName, BOOL32 bAutoFree)
 {
     HINSTANCE32 hLibrary;
     OpenDll *ptr;
diff --git a/ole/ifs.c b/ole/ifs.c
index 9e8ebca..5fb8031 100644
--- a/ole/ifs.c
+++ b/ole/ifs.c
@@ -9,24 +9,17 @@
 #include <string.h>
 #include <assert.h>
 #include "winerror.h"
-#include "ole.h"
-#include "ole2.h"
 #include "ldt.h"
 #include "heap.h"
-#include "compobj.h"
-#include "interfaces.h"
-#include "shlobj.h"
+#include "wine/obj_base.h"
+#include "objbase.h"
 #include "local.h"
 #include "module.h"
 #include "debug.h"
 
+
 /* --- IUnknown implementation */
 
-typedef struct _IUnknown {
-        /* IUnknown fields */
-        ICOM_VTABLE(IUnknown)*  lpvtbl;
-        DWORD                   ref;
-} _IUnknown;
 
 /******************************************************************************
  *		IUnknown_AddRef	[VTABLE:IUNKNOWN.1]
@@ -86,30 +79,26 @@
 	return (LPUNKNOWN)unk;
 }
 
-/*
- * IMalloc
- */
 
-/******************************************************************************
- *		IMalloc16_AddRef	[COMPOBJ.501]
- */
-ULONG WINAPI IMalloc16_AddRef(LPMALLOC16 this) {
-	TRACE(relay,"(%p)->AddRef()\n",this);
-	return 1; /* cannot be freed */
-}
+/* --- IMalloc16 implementation */
 
-/******************************************************************************
- *		IMalloc16_Release	[COMPOBJ.502]
+
+typedef struct _IMalloc16 {
+        /* IUnknown fields */
+        ICOM_VTABLE(IMalloc16)* lpvtbl;
+        DWORD                   ref;
+        /* IMalloc16 fields */
+        /* Gmm, I think one is not enough, we should probably manage a list of
+         * heaps
  */
-ULONG WINAPI IMalloc16_Release(LPMALLOC16 this) {
-	TRACE(relay,"(%p)->Release()\n",this);
-	return 1; /* cannot be freed */
-}
+        HGLOBAL16 heap;
+} _IMalloc16;
 
 /******************************************************************************
  *		IMalloc16_QueryInterface	[COMPOBJ.500]
  */
-HRESULT WINAPI IMalloc16_QueryInterface(LPMALLOC16 this,REFIID refiid,LPVOID *obj) {
+HRESULT WINAPI IMalloc16_fnQueryInterface(LPUNKNOWN iface,REFIID refiid,LPVOID *obj) {
+        ICOM_THIS(IMalloc16,iface);
 	char	xrefiid[50];
 
 	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
@@ -124,9 +113,28 @@
 }
 
 /******************************************************************************
+ *		IMalloc16_AddRef	[COMPOBJ.501]
+ */
+ULONG WINAPI IMalloc16_fnAddRef(LPUNKNOWN iface) {
+        ICOM_THIS(IMalloc16,iface);
+	TRACE(relay,"(%p)->AddRef()\n",this);
+	return 1; /* cannot be freed */
+}
+
+/******************************************************************************
+ *		IMalloc16_Release	[COMPOBJ.502]
+ */
+ULONG WINAPI IMalloc16_fnRelease(LPUNKNOWN iface) {
+        ICOM_THIS(IMalloc16,iface);
+	TRACE(relay,"(%p)->Release()\n",this);
+	return 1; /* cannot be freed */
+}
+
+/******************************************************************************
  * IMalloc16_Alloc [COMPOBJ.503]
  */
-LPVOID WINAPI IMalloc16_Alloc(LPMALLOC16 this,DWORD cb) {
+LPVOID WINAPI IMalloc16_fnAlloc(IMalloc16* iface,DWORD cb) {
+        ICOM_THIS(IMalloc16,iface);
 	TRACE(relay,"(%p)->Alloc(%ld)\n",this,cb);
 	return (LPVOID)PTR_SEG_OFF_TO_SEGPTR(this->heap,LOCAL_Alloc(this->heap,0,cb));
 }
@@ -134,7 +142,8 @@
 /******************************************************************************
  * IMalloc16_Realloc [COMPOBJ.504]
  */
-LPVOID WINAPI IMalloc16_Realloc(LPMALLOC16 this,LPVOID pv,DWORD cb) {
+LPVOID WINAPI IMalloc16_fnRealloc(IMalloc16* iface,LPVOID pv,DWORD cb) {
+        ICOM_THIS(IMalloc16,iface);
 	TRACE(relay,"(%p)->Realloc(%p,%ld)\n",this,pv,cb);
 	return (LPVOID)PTR_SEG_OFF_TO_SEGPTR(this->heap,LOCAL_ReAlloc(this->heap,0,LOWORD(pv),cb));
 }
@@ -142,7 +151,8 @@
 /******************************************************************************
  * IMalloc16_Free [COMPOBJ.505]
  */
-VOID WINAPI IMalloc16_Free(LPMALLOC16 this,LPVOID pv) {
+VOID WINAPI IMalloc16_fnFree(IMalloc16* iface,LPVOID pv) {
+        ICOM_THIS(IMalloc16,iface);
 	TRACE(relay,"(%p)->Free(%p)\n",this,pv);
 	LOCAL_Free(this->heap,LOWORD(pv));
 }
@@ -150,7 +160,8 @@
 /******************************************************************************
  * IMalloc16_GetSize [COMPOBJ.506]
  */
-DWORD WINAPI IMalloc16_GetSize(LPMALLOC16 this,LPVOID pv) {
+DWORD WINAPI IMalloc16_fnGetSize(const IMalloc16* iface,LPVOID pv) {
+	ICOM_CTHIS(IMalloc16,iface);
 	TRACE(relay,"(%p)->GetSize(%p)\n",this,pv);
 	return LOCAL_Size(this->heap,LOWORD(pv));
 }
@@ -158,7 +169,8 @@
 /******************************************************************************
  * IMalloc16_DidAlloc [COMPOBJ.507]
  */
-INT16 WINAPI IMalloc16_DidAlloc(LPMALLOC16 this,LPVOID pv) {
+INT16 WINAPI IMalloc16_fnDidAlloc(const IMalloc16* iface,LPVOID pv) {
+        ICOM_CTHIS(IMalloc16,iface);
 	TRACE(relay,"(%p)->DidAlloc(%p)\n",this,pv);
 	return (INT16)-1;
 }
@@ -166,52 +178,40 @@
 /******************************************************************************
  * IMalloc16_HeapMinimize [COMPOBJ.508]
  */
-LPVOID WINAPI IMalloc16_HeapMinimize(LPMALLOC16 this) {
+LPVOID WINAPI IMalloc16_fnHeapMinimize(IMalloc16* iface) {
+        ICOM_THIS(IMalloc16,iface);
 	TRACE(relay,"(%p)->HeapMinimize()\n",this);
 	return NULL;
 }
 
-#ifdef OLD_TABLE
-/* FIXME: This is unused */
-static IMalloc16_VTable mvt16 = {
-	IMalloc16_QueryInterface,
-	IMalloc16_AddRef,
-	IMalloc16_Release,
-	IMalloc16_Alloc,
-	IMalloc16_Realloc,
-	IMalloc16_Free,
-	IMalloc16_GetSize,
-	IMalloc16_DidAlloc,
-	IMalloc16_HeapMinimize,
-};
-#endif
-static IMalloc16_VTable *msegvt16 = NULL;
+static ICOM_VTABLE(IMalloc16)* msegvt16 = NULL;
 
 /******************************************************************************
  * IMalloc16_Constructor [VTABLE]
  */
 LPMALLOC16
 IMalloc16_Constructor() {
-	LPMALLOC16	this;
+	_IMalloc16*	this;
         HMODULE16	hcomp = GetModuleHandle16("COMPOBJ");
 
-	this = (LPMALLOC16)SEGPTR_NEW(IMalloc16);
+	this = (_IMalloc16*)SEGPTR_NEW(_IMalloc16);
         if (!msegvt16) {
-            this->lpvtbl = msegvt16 = SEGPTR_NEW(IMalloc16_VTable);
+            this->lpvtbl = msegvt16 = SEGPTR_NEW(ICOM_VTABLE(IMalloc16));
 
-#define FN(x) this->lpvtbl->fn##x = (void*)WIN32_GetProcAddress16(hcomp,"IMalloc16_"#x);assert(this->lpvtbl->fn##x)
-            FN(QueryInterface);
-            FN(AddRef);
-            FN(Release);
-            FN(Alloc);
-            FN(Realloc);
-            FN(Free);
-            FN(GetSize);
-            FN(DidAlloc);
-            FN(HeapMinimize);
-            msegvt16 = (LPMALLOC16_VTABLE)SEGPTR_GET(msegvt16);
-#undef FN
-            this->lpvtbl = msegvt16;
+#define VTENT(x) msegvt16->bvt.fn##x = (void*)WIN32_GetProcAddress16(hcomp,"IMalloc16_"#x);assert(msegvt16->bvt.fn##x)
+            VTENT(QueryInterface);
+            VTENT(AddRef);
+            VTENT(Release);
+#undef VTENT
+#define VTENT(x) msegvt16->fn##x = (void*)WIN32_GetProcAddress16(hcomp,"IMalloc16_"#x);assert(msegvt16->fn##x)
+            VTENT(Alloc);
+            VTENT(Realloc);
+            VTENT(Free);
+            VTENT(GetSize);
+            VTENT(DidAlloc);
+            VTENT(HeapMinimize);
+            msegvt16 = (ICOM_VTABLE(IMalloc16)*)SEGPTR_GET(msegvt16);
+#undef VTENT
 	}
 	this->ref = 1;
 	/* FIXME: implement multiple heaps */
@@ -220,30 +220,20 @@
 	return (LPMALLOC16)SEGPTR_GET(this);
 }
 
-/*
- * IMalloc32
- */
 
-/******************************************************************************
- *		IMalloc32_AddRef	[VTABLE]
- */
-static ULONG WINAPI IMalloc32_AddRef(LPMALLOC32 this) {
-	TRACE(relay,"(%p)->AddRef()\n",this);
-	return 1; /* cannot be freed */
-}
+/* --- IMalloc32 implementation */
 
-/******************************************************************************
- *		IMalloc32_Release	[VTABLE]
- */
-static ULONG WINAPI IMalloc32_Release(LPMALLOC32 this) {
-	TRACE(relay,"(%p)->Release()\n",this);
-	return 1; /* cannot be freed */
-}
+typedef struct _IMalloc32 {
+        /* IUnknown fields */
+        ICOM_VTABLE(IMalloc32)* lpvtbl;
+        DWORD                   ref;
+} _IMalloc32;
 
 /******************************************************************************
  *		IMalloc32_QueryInterface	[VTABLE]
  */
-static HRESULT WINAPI IMalloc32_QueryInterface(LPMALLOC32 this,REFIID refiid,LPVOID *obj) {
+static HRESULT WINAPI IMalloc32_fnQueryInterface(LPUNKNOWN iface,REFIID refiid,LPVOID *obj) {
+	ICOM_THIS(IMalloc32,iface);
 	char	xrefiid[50];
 
 	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
@@ -252,15 +242,34 @@
 		!memcmp(&IID_IMalloc,refiid,sizeof(IID_IMalloc))
 	) {
 		*obj = this;
-		return 0;
+		return S_OK;
 	}
 	return OLE_E_ENUM_NOMORE; 
 }
 
 /******************************************************************************
+ *		IMalloc32_AddRef	[VTABLE]
+ */
+static ULONG WINAPI IMalloc32_fnAddRef(LPUNKNOWN iface) {
+	ICOM_THIS(IMalloc32,iface);
+	TRACE(relay,"(%p)->AddRef()\n",this);
+	return 1; /* cannot be freed */
+}
+
+/******************************************************************************
+ *		IMalloc32_Release	[VTABLE]
+ */
+static ULONG WINAPI IMalloc32_fnRelease(LPUNKNOWN iface) {
+	ICOM_THIS(IMalloc32,iface);
+	TRACE(relay,"(%p)->Release()\n",this);
+	return 1; /* cannot be freed */
+}
+
+/******************************************************************************
  * IMalloc32_Alloc [VTABLE]
  */
-static LPVOID WINAPI IMalloc32_Alloc(LPMALLOC32 this,DWORD cb) {
+static LPVOID WINAPI IMalloc32_fnAlloc(LPMALLOC32 iface,DWORD cb) {
+	ICOM_THIS(IMalloc32,iface);
 	TRACE(relay,"(%p)->Alloc(%ld)\n",this,cb);
 	return HeapAlloc(GetProcessHeap(),0,cb);
 }
@@ -268,7 +277,8 @@
 /******************************************************************************
  * IMalloc32_Realloc [VTABLE]
  */
-static LPVOID WINAPI IMalloc32_Realloc(LPMALLOC32 this,LPVOID pv,DWORD cb) {
+static LPVOID WINAPI IMalloc32_fnRealloc(LPMALLOC32 iface,LPVOID pv,DWORD cb) {
+	ICOM_THIS(IMalloc32,iface);
 	TRACE(relay,"(%p)->Realloc(%p,%ld)\n",this,pv,cb);
 	return HeapReAlloc(GetProcessHeap(),0,pv,cb);
 }
@@ -276,7 +286,8 @@
 /******************************************************************************
  * IMalloc32_Free [VTABLE]
  */
-static VOID WINAPI IMalloc32_Free(LPMALLOC32 this,LPVOID pv) {
+static VOID WINAPI IMalloc32_fnFree(LPMALLOC32 iface,LPVOID pv) {
+	ICOM_THIS(IMalloc32,iface);
 	TRACE(relay,"(%p)->Free(%p)\n",this,pv);
 	HeapFree(GetProcessHeap(),0,pv);
 }
@@ -284,7 +295,8 @@
 /******************************************************************************
  * IMalloc32_GetSize [VTABLE]
  */
-static DWORD WINAPI IMalloc32_GetSize(LPMALLOC32 this,LPVOID pv) {
+static DWORD WINAPI IMalloc32_fnGetSize(const IMalloc32* iface,LPVOID pv) {
+	ICOM_CTHIS(IMalloc32,iface);
 	TRACE(relay,"(%p)->GetSize(%p)\n",this,pv);
 	return HeapSize(GetProcessHeap(),0,pv);
 }
@@ -292,7 +304,8 @@
 /******************************************************************************
  * IMalloc32_DidAlloc [VTABLE]
  */
-static INT32 WINAPI IMalloc32_DidAlloc(LPMALLOC32 this,LPVOID pv) {
+static INT32 WINAPI IMalloc32_fnDidAlloc(const IMalloc32* iface,LPVOID pv) {
+	ICOM_CTHIS(IMalloc32,iface);
 	TRACE(relay,"(%p)->DidAlloc(%p)\n",this,pv);
 	return -1;
 }
@@ -300,21 +313,24 @@
 /******************************************************************************
  * IMalloc32_HeapMinimize [VTABLE]
  */
-static LPVOID WINAPI IMalloc32_HeapMinimize(LPMALLOC32 this) {
+static LPVOID WINAPI IMalloc32_fnHeapMinimize(LPMALLOC32 iface) {
+	ICOM_THIS(IMalloc32,iface);
 	TRACE(relay,"(%p)->HeapMinimize()\n",this);
 	return NULL;
 }
 
-static IMalloc32_VTable VT_IMalloc32 = {
-	IMalloc32_QueryInterface,
-	IMalloc32_AddRef,
-	IMalloc32_Release,
-	IMalloc32_Alloc,
-	IMalloc32_Realloc,
-	IMalloc32_Free,
-	IMalloc32_GetSize,
-	IMalloc32_DidAlloc,
-	IMalloc32_HeapMinimize,
+static ICOM_VTABLE(IMalloc32) VT_IMalloc32 = {
+  {
+    IMalloc32_fnQueryInterface,
+    IMalloc32_fnAddRef,
+    IMalloc32_fnRelease
+  },
+  IMalloc32_fnAlloc,
+  IMalloc32_fnRealloc,
+  IMalloc32_fnFree,
+  IMalloc32_fnGetSize,
+  IMalloc32_fnDidAlloc,
+  IMalloc32_fnHeapMinimize
 };
 
 /******************************************************************************
@@ -322,12 +338,12 @@
  */
 LPMALLOC32
 IMalloc32_Constructor() {
-	LPMALLOC32	this;
+	_IMalloc32* this;
 
-	this = (LPMALLOC32)HeapAlloc(GetProcessHeap(),0,sizeof(IMalloc32));
+	this = (_IMalloc32*)HeapAlloc(GetProcessHeap(),0,sizeof(_IMalloc32));
 	this->lpvtbl = &VT_IMalloc32;
 	this->ref = 1;
-	return this;
+	return (LPMALLOC32)this;
 }
 
 /****************************************************************************
diff --git a/ole/moniker.c b/ole/moniker.c
index 7c1d88a..9bc2171 100644
--- a/ole/moniker.c
+++ b/ole/moniker.c
@@ -9,16 +9,9 @@
 #include <string.h>
 #include <assert.h>
 #include "winerror.h"
-#include "ole.h"
-#include "ole2.h"
-#include "ldt.h"
-#include "heap.h"
-#include "compobj.h"
-#include "interfaces.h"
-#include "storage.h"
-#include "shlobj.h"
-#include "local.h"
-#include "module.h"
+#include "wine/obj_base.h"
+#include "wine/obj_storage.h"
+#include "wine/obj_moniker.h"
 #include "debug.h"
 
 /******************************************************************************
diff --git a/ole/ole2.c b/ole/ole2.c
index d0a4706..b472ab3 100644
--- a/ole/ole2.c
+++ b/ole/ole2.c
@@ -9,7 +9,10 @@
 #include "ole2.h"
 #include "process.h"
 #include "debug.h"
-#include "compobj.h"
+#include "wine/obj_base.h"
+#include "wine/obj_clientserver.h"
+#include "wine/obj_storage.h"
+#include "wine/obj_moniker.h"
 
 /******************************************************************************
  *		OleBuildVersion	[OLE2.1]
diff --git a/ole/ole2disp.c b/ole/ole2disp.c
index 2582b44..dea2df1 100644
--- a/ole/ole2disp.c
+++ b/ole/ole2disp.c
@@ -9,7 +9,9 @@
 #include "ole.h"
 #include "ole2.h"
 #include "oleauto.h"
-#include "interfaces.h"
+#include "wtypes.h"
+#include "wine/obj_base.h"
+#include "objbase.h"
 #include "heap.h"
 #include "ldt.h"
 #include "debug.h"
diff --git a/ole/oledlg.c b/ole/oledlg.c
index 8b010f2..8aef25b 100644
--- a/ole/oledlg.c
+++ b/ole/oledlg.c
@@ -9,7 +9,7 @@
 #include "winerror.h"
 #include "ole.h"
 #include "oledlg.h"
-#include "compobj.h"
+#include "wine/obj_base.h"
 #include "debug.h"
 
 /***********************************************************************
diff --git a/ole/oleobj.c b/ole/oleobj.c
index b7802c7..cc4427d 100644
--- a/ole/oleobj.c
+++ b/ole/oleobj.c
@@ -8,10 +8,13 @@
 #include "ole.h"
 #include "ole2.h"
 #include "winerror.h"
-#include "interfaces.h"
+#include "windows.h"
+#include "wine/obj_base.h"
+#include "wine/obj_storage.h"
+#include "wine/obj_moniker.h"
+#include "wine/obj_dataobject.h"
 #include "oleobj.h"
 #include "debug.h"
-#include "windows.h"
 
 
 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
diff --git a/ole/storage.c b/ole/storage.c
index 1e9de4c..736449b 100644
--- a/ole/storage.c
+++ b/ole/storage.c
@@ -14,15 +14,46 @@
 #include "winerror.h"
 #include "file.h"
 #include "ole.h"
-#include "ole2.h"
-#include "compobj.h"
-#include "interfaces.h"
-#include "storage.h"
+#include "wine/obj_base.h"
+#include "wine/obj_storage.h"
+#include "objbase.h"
 #include "heap.h"
 #include "module.h"
 #include "ldt.h"
 #include "debug.h"
 
+struct storage_header {
+	BYTE	magic[8];	/* 00: magic */
+	BYTE	unknown1[36];	/* 08: unknown */
+	DWORD	num_of_bbd_blocks;/* 2C: length of big datablocks */
+	DWORD	root_startblock;/* 30: root storage first big block */
+	DWORD	unknown2[2];	/* 34: unknown */
+	DWORD	sbd_startblock;	/* 3C: small block depot first big block */
+	DWORD	unknown3[3];	/* 40: unknown */
+	DWORD	bbd_list[109];	/* 4C: big data block list (up to end of sector)*/
+};
+struct storage_pps_entry {
+	WCHAR	pps_rawname[32];/* 00: \0 terminated widechar name */
+	WORD	pps_sizeofname;	/* 40: namelength in bytes */
+	BYTE	pps_type;	/* 42: flags, 1 storage/dir, 2 stream, 5 root */
+	BYTE	pps_unknown0;	/* 43: unknown */
+	DWORD	pps_prev;	/* 44: previous pps */
+	DWORD	pps_next;	/* 48: next pps */
+	DWORD	pps_dir;	/* 4C: directory pps */
+	GUID	pps_guid;	/* 50: class ID */
+	DWORD	pps_unknown1;	/* 60: unknown */
+	FILETIME pps_ft1;	/* 64: filetime1 */
+	FILETIME pps_ft2;	/* 70: filetime2 */
+	DWORD	pps_sb;		/* 74: data startblock */
+	DWORD	pps_size;	/* 78: datalength. (<0x1000)?small:big blocks*/
+	DWORD	pps_unknown2;	/* 7C: unknown */
+};
+
+#define STORAGE_CHAINENTRY_FAT		0xfffffffd
+#define STORAGE_CHAINENTRY_ENDOFCHAIN	0xfffffffe
+#define STORAGE_CHAINENTRY_FREE		0xffffffff
+
+
 static const BYTE STORAGE_magic[8]   ={0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1};
 static const BYTE STORAGE_notmagic[8]={0x0e,0x11,0xfc,0x0d,0xd0,0xcf,0x11,0xe0};
 static const BYTE STORAGE_oldmagic[8]={0xd0,0xcf,0x11,0xe0,0x0e,0x11,0xfc,0x0d};
@@ -732,14 +763,14 @@
 	if (this->offset.LowPart>this->stde.pps_size)
 		this->offset.LowPart=this->stde.pps_size;
 	if (newpos) *newpos = this->offset;
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
  *		IStream16_Read	[STORAGE.521]
  */
 HRESULT WINAPI IStream16_fnRead(
-        LPSTREAM16 iface,void  *pv,ULONG cb,ULONG  *pcbRead
+        LPSEQUENTIALSTREAM iface,void  *pv,ULONG cb,ULONG  *pcbRead
 ) {
 	ICOM_THIS(IStream16,iface);
 	BYTE	block[BIGSIZE];
@@ -793,14 +824,14 @@
 			blocknr=STORAGE_get_next_big_blocknr(this->hf,blocknr);
 		}
 	}
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
  *		IStream16_Write	[STORAGE.522]
  */
 HRESULT WINAPI IStream16_fnWrite(
-        LPSTREAM16 iface,const void *pv,ULONG cb,ULONG *pcbWrite
+        LPSEQUENTIALSTREAM iface,const void *pv,ULONG cb,ULONG *pcbWrite
 ) {
 	ICOM_THIS(IStream16,iface);
 	BYTE	block[BIGSIZE];
@@ -1055,7 +1086,7 @@
 			blocknr = STORAGE_get_next_big_blocknr(hf,blocknr);
 		}
 	}
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1064,50 +1095,54 @@
 static void _create_istream16(LPSTREAM16 *str) {
 	_IStream16*	lpst;
 
-	if (!strvt16.bvt.fnQueryInterface) {
+	if (!strvt16.bvt.bvt.fnQueryInterface) {
 		HMODULE16	wp = GetModuleHandle16("STORAGE");
 		if (wp>=32) {
 		  /* FIXME: what is this WIN32_GetProcAddress16. Should the name be IStream16_QueryInterface of IStream16_fnQueryInterface */
-#define VTENT(xfn)  strvt16.bvt.fn##xfn = (void*)WIN32_GetProcAddress16(wp,"IStream16_"#xfn);
-			VTENT(QueryInterface)
-			VTENT(AddRef)
-			VTENT(Release)
+#define VTENT(xfn)  strvt16.bvt.bvt.fn##xfn = (void*)WIN32_GetProcAddress16(wp,"IStream16_"#xfn);assert(strvt16.bvt.bvt.fn##xfn)
+			VTENT(QueryInterface);
+			VTENT(AddRef);
+			VTENT(Release);
 #undef VTENT
-#define VTENT(xfn)  strvt16.fn##xfn = (void*)WIN32_GetProcAddress16(wp,"IStream16_"#xfn);
-			VTENT(Read)
-			VTENT(Write)
-			VTENT(Seek)
-			VTENT(SetSize)
-			VTENT(CopyTo)
-			VTENT(Commit)
-			VTENT(Revert)
-			VTENT(LockRegion)
-			VTENT(UnlockRegion)
-			VTENT(Stat)
-			VTENT(Clone)
+#define VTENT(xfn)  strvt16.bvt.fn##xfn = (void*)WIN32_GetProcAddress16(wp,"IStream16_"#xfn);assert(strvt16.bvt.fn##xfn)
+			VTENT(Read);
+			VTENT(Write);
+#undef VTENT
+#define VTENT(xfn)  strvt16.fn##xfn = (void*)WIN32_GetProcAddress16(wp,"IStream16_"#xfn);assert(strvt16.fn##xfn)
+			VTENT(Seek);
+			VTENT(SetSize);
+			VTENT(CopyTo);
+			VTENT(Commit);
+			VTENT(Revert);
+			VTENT(LockRegion);
+			VTENT(UnlockRegion);
+			VTENT(Stat);
+			VTENT(Clone);
 #undef VTENT
 			segstrvt16 = SEGPTR_NEW(ICOM_VTABLE(IStream16));
 			memcpy(segstrvt16,&strvt16,sizeof(strvt16));
 			segstrvt16 = (ICOM_VTABLE(IStream16)*)SEGPTR_GET(segstrvt16);
 		} else {
+#define VTENT(xfn) strvt16.bvt.bvt.fn##xfn = IStream16_fn##xfn;
+			VTENT(QueryInterface);
+			VTENT(AddRef);
+			VTENT(Release);
+#undef VTENT
 #define VTENT(xfn) strvt16.bvt.fn##xfn = IStream16_fn##xfn;
-			VTENT(QueryInterface)
-			VTENT(AddRef)
-			VTENT(Release)
+			VTENT(Read);
+			VTENT(Write);
 #undef VTENT
 #define VTENT(xfn) strvt16.fn##xfn = IStream16_fn##xfn;
-			VTENT(Read)
-			VTENT(Write)
-			VTENT(Seek)
+			VTENT(Seek);
 	/*
-			VTENT(CopyTo)
-			VTENT(Commit)
-			VTENT(SetSize)
-			VTENT(Revert)
-			VTENT(LockRegion)
-			VTENT(UnlockRegion)
-			VTENT(Stat)
-			VTENT(Clone)
+			VTENT(CopyTo);
+			VTENT(Commit);
+			VTENT(SetSize);
+			VTENT(Revert);
+			VTENT(LockRegion);
+			VTENT(UnlockRegion);
+			VTENT(Stat);
+			VTENT(Clone);
 	*/
 #undef VTENT
 			segstrvt16 = &strvt16;
@@ -1178,12 +1213,14 @@
 
 static ICOM_VTABLE(IStream32) strvt32 = {
 	{
+	  {
 	  IStream32_fnQueryInterface,
 	  IStream32_fnAddRef,
 	  IStream32_fnRelease
 	},
 	(void*)0xdead0004,
-	(void*)0xdead0005,
+	  (void*)0xdead0005
+	},
 	(void*)0xdead0006,
 	(void*)0xdead0007,
 	(void*)0xdead0008,
@@ -1266,7 +1303,7 @@
 	pstatstg->clsid		= this->stde.pps_guid;
 	pstatstg->grfStateBits	= 0; /* FIXME */
 	pstatstg->reserved	= 0;
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1279,7 +1316,7 @@
 	FIXME(ole,"(%p)->(0x%08lx),STUB!\n",
 		this,commitflags
 	);
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1296,7 +1333,7 @@
 	FIXME(ole,"IStorage16(%p)->(0x%08lx,%s,%p,%p),stub!\n",
 		this,ciidExclude,xguid,SNB16Exclude,pstgDest
 	);
-	return OLE_OK;
+	return S_OK;
 }
 
 
@@ -1357,7 +1394,7 @@
 	/* FIXME: timestamps? */
 	if (!STORAGE_put_pps_entry(lpstg->hf,ppsent,&(lpstg->stde)))
 		return E_FAIL;
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1410,7 +1447,7 @@
 	/* FIXME: timestamps? */
 	if (!STORAGE_put_pps_entry(lpstr->hf,ppsent,&(lpstr->stde)))
 		return E_FAIL;
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1445,7 +1482,7 @@
 		return E_FAIL;
 	}
 	lpstg->ppsent		= newpps;
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1482,7 +1519,7 @@
 	lpstr->offset.LowPart	= 0;
 	lpstr->offset.HighPart	= 0;
 	lpstr->ppsent		= newpps;
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1620,7 +1657,7 @@
 	((_IStream32*)(*ppstm))->lpvtbl= &strvt32;
 	((_IStream32*)(*ppstm))->ref	= 1;
 
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
@@ -1636,7 +1673,7 @@
 	*ppstm = (IStream32*)HeapAlloc(GetProcessHeap(),0,sizeof(IStream32));
 	((_IStream32*)(*ppstm))->lpvtbl= &strvt32;
 	((_IStream32*)(*ppstm))->ref	= 1;
-	return OLE_OK;
+	return S_OK;
 }
 
 static ICOM_VTABLE(IStorage32) stvt32 = {
@@ -1669,7 +1706,7 @@
 /******************************************************************************
  *		StgCreateDocFile16	[STORAGE.1]
  */
-OLESTATUS WINAPI StgCreateDocFile16(
+HRESULT WINAPI StgCreateDocFile16(
 	LPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,IStorage16 **ppstgOpen
 ) {
 	HFILE32		hf;
@@ -1707,13 +1744,13 @@
 		IStorage16_fnRelease((IUnknown*)lpstg); /* will remove it */
 		return E_FAIL;
 	}
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
- *		StgCreateDocFile32	[OLE32.144]
+ *		StgCreateDocfile32	[OLE32.144]
  */
-OLESTATUS WINAPI StgCreateDocFile32(
+HRESULT WINAPI StgCreateDocfile32(
 	LPCOLESTR32 pwcsName,DWORD grfMode,DWORD reserved,IStorage32 **ppstgOpen
 ) {
 	TRACE(ole,"(%p,0x%08lx,0x%08lx,%p)\n",
@@ -1722,13 +1759,13 @@
 	*ppstgOpen = (IStorage32*)HeapAlloc(GetProcessHeap(),0,sizeof(IStorage32));
 	((_IStorage32*)(*ppstgOpen))->ref = 1;
 	((_IStorage32*)(*ppstgOpen))->lpvtbl = &stvt32;
-	return OLE_OK;
+	return S_OK;
 }
 
 /******************************************************************************
  * StgIsStorageFile16 [STORAGE.5]
  */
-OLESTATUS WINAPI StgIsStorageFile16(LPCOLESTR16 fn) {
+HRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn) {
 	HFILE32		hf;
 	OFSTRUCT	ofs;
 	BYTE		magic[24];
@@ -1765,7 +1802,7 @@
 /******************************************************************************
  * StgIsStorageFile32 [OLE32.146]
  */
-OLESTATUS WINAPI 
+HRESULT WINAPI 
 StgIsStorageFile32(LPCOLESTR32 fn) 
 {
 	LPOLESTR16	xfn = HEAP_strdupWtoA(GetProcessHeap(),0,fn);
@@ -1779,7 +1816,7 @@
 /******************************************************************************
  * StgOpenStorage16 [STORAGE.3]
  */
-OLESTATUS WINAPI StgOpenStorage16(
+HRESULT WINAPI StgOpenStorage16(
 	const OLECHAR16 * pwcsName,IStorage16 *pstgPriority,DWORD grfMode,
 	SNB16 snbExclude,DWORD reserved, IStorage16 **ppstgOpen
 ) {
@@ -1813,14 +1850,14 @@
 		IStorage16_fnRelease((IUnknown*)lpstg); /* will remove it */
 		return E_FAIL;
 	}
-	return OLE_OK;
+	return S_OK;
 	
 }
 
 /******************************************************************************
  *		StgOpenStorage32	[OLE32.148]
  */
-OLESTATUS WINAPI StgOpenStorage32(
+HRESULT WINAPI StgOpenStorage32(
 	const OLECHAR32 * pwcsName,IStorage32 *pstgPriority,DWORD grfMode,
 	SNB32 snbExclude,DWORD reserved, IStorage32 **ppstgOpen
 ) {
@@ -1830,7 +1867,7 @@
 	*ppstgOpen = (IStorage32*)HeapAlloc(GetProcessHeap(),0,sizeof(IStorage32));
 	((_IStorage32*)(*ppstgOpen))->ref = 1;
 	((_IStorage32*)(*ppstgOpen))->lpvtbl = &stvt32;
-	return OLE_OK;
+	return S_OK;
 }
 
 
diff --git a/ole/typelib.c b/ole/typelib.c
index 913a839..98a3b04 100644
--- a/ole/typelib.c
+++ b/ole/typelib.c
@@ -12,10 +12,9 @@
 #include "windows.h"
 #include "winreg.h"
 #include "winerror.h"
-#include "ole.h"
-#include "ole2.h"
 #include "oleauto.h"
-#include "compobj.h"
+#include "wine/obj_base.h"
+#include "objbase.h"
 #include "debug.h"
 #include "winversion.h"
 
diff --git a/ole/variant.c b/ole/variant.c
index 6729e19..52a9e3e 100644
--- a/ole/variant.c
+++ b/ole/variant.c
@@ -333,17 +333,7 @@
 		double decimalPart = 0.0;
 		double wholePart = 0.0;
 
-		pTm->tm_sec = 0;
-		pTm->tm_min = 0;
-		pTm->tm_hour = 0;
-		pTm->tm_mday = 0;
-		pTm->tm_mon = 0;
-		pTm->tm_year = 0;
-		pTm->tm_wday = 0;
-		pTm->tm_yday = 0;
-		pTm->tm_isdst = 0;
-		pTm->tm_gmtoff = 0;
-		pTm->tm_zone = 0;
+		memset(pTm,0,sizeof(*pTm));
 	
 		/* Because of the nature of DATE format witch
 		 * associates 2.0 to January 1, 1900. We will
diff --git a/programs/clock/language.c b/programs/clock/language.c
index 7c42191..3dbf11a 100644
--- a/programs/clock/language.c
+++ b/programs/clock/language.c
@@ -187,7 +187,7 @@
   if (Globals.lpszLanguage == "En") {
         PROFILE_GetWineIniString("programs", "language", "En", szBuffer, 
                                   sizeof(szBuffer));       
-        Globals.lpszLanguage = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(szBuffer)));
+        Globals.lpszLanguage = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(szBuffer)+1));
 
 /*        hmemcpy(Globals.lpszLanguage, szBuffer, 1+lstrlen(szBuffer));  */
         lstrcpyn(Globals.lpszLanguage, szBuffer, strlen(szBuffer)+1); 
diff --git a/programs/notepad/language.c b/programs/notepad/language.c
index 8cd0983..68372d6 100644
--- a/programs/notepad/language.c
+++ b/programs/notepad/language.c
@@ -147,7 +147,7 @@
 
     PROFILE_GetWineIniString("programs", "language", "language", 
                              buffer, sizeof(buffer));
-  Globals.lpszLanguage = p = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(buffer)));
+  Globals.lpszLanguage = p = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(buffer)+1));
   strcpy(p, buffer);
   /* hmemcpy(p, buffer, 1 + lstrlen(buffer)); */
   #endif
diff --git a/programs/progman/main.c b/programs/progman/main.c
index 6f0e985..4023c46 100644
--- a/programs/progman/main.c
+++ b/programs/progman/main.c
@@ -64,13 +64,13 @@
     /* Redirect `progman.ini' */
     PROFILE_GetWineIniString("progman", "progman.ini", "progman.ini", 
 			     buffer, sizeof(buffer));
-    Globals.lpszIniFile = p = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(buffer)));
+    Globals.lpszIniFile = p = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(buffer)+1));
     hmemcpy(p, buffer, 1 + lstrlen(buffer));
 
     /* Redirect `progman.ico' */
     PROFILE_GetWineIniString("progman", "progman.ico", "progman.ico", 
 			     buffer, sizeof(buffer));
-    Globals.lpszIcoFile = p = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(buffer)));
+    Globals.lpszIcoFile = p = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(buffer)+1));
     hmemcpy(p, buffer, 1 + lstrlen(buffer));
   }
 #endif
diff --git a/relay32/builtin32.c b/relay32/builtin32.c
index 55f3fcf..c066e22 100644
--- a/relay32/builtin32.c
+++ b/relay32/builtin32.c
@@ -10,6 +10,7 @@
 #include "peexe.h"
 #include "heap.h"
 #include "debug.h"
+#include "main.h"
 
 typedef struct
 {
diff --git a/relay32/comctl32.spec b/relay32/comctl32.spec
index 3a2f96e..6eabd41 100644
--- a/relay32/comctl32.spec
+++ b/relay32/comctl32.spec
@@ -23,7 +23,7 @@
  15 stub DrawInsert
  16 stdcall CreateUpDownControl(long long long long long long long long long long long long) CreateUpDownControl
  17 stdcall InitCommonControls() InitCommonControls
- 18 stub CreatePropertySheetPage
+ 18 stdcall CreatePropertySheetPage(ptr) CreatePropertySheetPage32AW
  19 stdcall CreatePropertySheetPageA(ptr) CreatePropertySheetPage32A
  20 stdcall CreatePropertySheetPageW(ptr) CreatePropertySheetPage32W
  21 stdcall CreateStatusWindow(long str long long) CreateStatusWindow32AW
@@ -34,16 +34,16 @@
  26 stub DllInstall
  27 stdcall DrawStatusText(long ptr ptr long) DrawStatusText32AW
  28 stdcall DrawStatusTextW(long ptr wstr long) DrawStatusText32W
- 29 stub FlatSB_EnableScrollBar
- 30 stub FlatSB_GetScrollInfo
- 31 stub FlatSB_GetScrollPos
- 32 stub FlatSB_GetScrollProp
- 33 stub FlatSB_GetScrollRange
- 34 stub FlatSB_SetScrollInfo
- 35 stub FlatSB_SetScrollPos
- 36 stub FlatSB_SetScrollProp
- 37 stub FlatSB_SetScrollRange
- 38 stub FlatSB_ShowScrollBar
+ 29 stdcall FlatSB_EnableScrollBar (long long long) FlatSB_EnableScrollBar
+ 30 stdcall FlatSB_GetScrollInfo (long long ptr) FlatSB_GetScrollInfo
+ 31 stdcall FlatSB_GetScrollPos (long long) FlatSB_GetScrollPos
+ 32 stdcall FlatSB_GetScrollProp (long long ptr) FlatSB_GetScrollProp
+ 33 stdcall FlatSB_GetScrollRange (long long ptr ptr) FlatSB_GetScrollRange
+ 34 stdcall FlatSB_SetScrollInfo (long long ptr long) FlatSB_SetScrollInfo
+ 35 stdcall FlatSB_SetScrollPos (long long long long) FlatSB_SetScrollPos
+ 36 stdcall FlatSB_SetScrollProp (long long long long) FlatSB_SetScrollProp
+ 37 stdcall FlatSB_SetScrollRange (long long long long long) FlatSB_SetScrollRange
+ 38 stdcall FlatSB_ShowScrollBar (long long long) FlatSB_ShowScrollBar
  39 stdcall ImageList_Add(ptr long long) ImageList_Add
  40 stdcall ImageList_AddIcon(ptr long) ImageList_AddIcon
  41 stdcall ImageList_AddMasked(ptr long long) ImageList_AddMasked
@@ -87,11 +87,11 @@
  79 stdcall ImageList_SetOverlayImage(ptr long long) ImageList_SetOverlayImage
  80 stdcall ImageList_Write(ptr ptr) ImageList_Write
  81 stdcall InitCommonControlsEx(ptr) InitCommonControlsEx
- 82 stub InitializeFlatSB
- 83 stub PropertySheet
+ 82 stdcall InitializeFlatSB(long) InitializeFlatSB
+ 83 stdcall PropertySheet(ptr) PropertySheet32AW
  84 stdcall PropertySheetA(ptr) PropertySheet32A
  85 stdcall PropertySheetW(ptr) PropertySheet32W
- 86 stub UninitializeFlatSB
+ 86 stdcall UninitializeFlatSB(long) UninitializeFlatSB
  87 stub _TrackMouseEvent
 
 151 stdcall CreateMRUListA(ptr) CreateMRUList32A
diff --git a/relay32/ntdll.spec b/relay32/ntdll.spec
index ccbae37..c7b0681 100644
--- a/relay32/ntdll.spec
+++ b/relay32/ntdll.spec
@@ -25,7 +25,7 @@
 017 stub CsrSetPriorityClass
 018 stub CsrpProcessCallbackRequest
 019 stub DbgBreakPoint
-020 stub DbgPrint
+020 cdecl DbgPrint(str long) DbgPrint
 021 stub DbgPrompt
 022 stub DbgSsHandleKmApiMsg
 023 stub DbgSsInitialize
@@ -882,7 +882,7 @@
 874 stub _strlwr
 875 cdecl _strnicmp(str str long) CRTDLL__strnicmp
 876 cdecl _strupr(str) CRTDLL__strupr
-877 stub _ultoa
+877 cdecl _ultoa(long ptr long) CRTDLL__ultoa
 878 stub _vsnprintf
 879 cdecl _wcsicmp(wstr wstr) CRTDLL__wcsicmp
 880 cdecl _wcslwr(wstr) CRTDLL__wcslwr
diff --git a/relay32/ole32.spec b/relay32/ole32.spec
index 4a4ff32..0a83668 100644
--- a/relay32/ole32.spec
+++ b/relay32/ole32.spec
@@ -26,7 +26,7 @@
  23 stub CoGetStandardMarshal
  24 stub CoGetState
  25 stub CoGetTreatAsClass
- 26 stdcall CoInitialize(long) CoInitialize32
+ 26 stdcall CoInitialize(ptr) CoInitialize32
  27 stdcall CoInitializeWOW(long long) CoInitializeWOW
  28 stub CoIsHandlerConnected
  29 stub CoIsOle1Class
@@ -76,7 +76,7 @@
  73 stdcall GetRunningObjectTable(long ptr) GetRunningObjectTable32
  74 stub IIDFromString
  75 stub IsAccelerator
- 76 stub IsEqualGUID
+ 76 stdcall IsEqualGUID(ptr ptr) IsEqualGUID32
  77 stub IsValidIid
  78 stdcall IsValidInterface(ptr) IsValidInterface32
  79 stub IsValidPtrIn
@@ -144,7 +144,7 @@
 141 stdcall RevokeDragDrop(long) RevokeDragDrop32
 142 stub SetConvertStg
 143 stub SetDocumentBitStg
-144 stdcall StgCreateDocfile(wstr long long ptr) StgCreateDocFile32
+144 stdcall StgCreateDocfile(wstr long long ptr) StgCreateDocfile32
 145 stub StgCreateDocfileOnILockBytes
 146 stdcall StgIsStorageFile(wstr) StgIsStorageFile32
 147 stub StgIsStorageILockBytes
@@ -163,7 +163,7 @@
 160 stub WriteFmtUserTypeStg
 161 stub WriteOleStg
 162 stub WriteStringStream
-163 stub CoInitializeEx
+163 stdcall CoInitializeEx(ptr long) CoInitializeEx32
 164 stub CoInitializeSecurity
 165 stub CoCreateInstanceEx
 166 stub PropVariantClear
diff --git a/relay32/relay386.c b/relay32/relay386.c
index 52873dd..082c302 100644
--- a/relay32/relay386.c
+++ b/relay32/relay386.c
@@ -14,6 +14,7 @@
 #include "selectors.h"
 #include "debugstr.h"
 #include "debug.h"
+#include "main.h"
 
 char **debug_relay_excludelist = NULL, **debug_relay_includelist = NULL;
 
diff --git a/relay32/winspool.spec b/relay32/winspool.spec
index a99a998..35e0329 100644
--- a/relay32/winspool.spec
+++ b/relay32/winspool.spec
@@ -20,8 +20,8 @@
 117 stdcall AddPrinterA(str long ptr) AddPrinter32A
 118 stub AddPrinterConnectionA
 119 stub AddPrinterConnectionW
-120 stub AddPrinterDriverA
-121 stub AddPrinterDriverW
+120 stdcall AddPrinterDriverA(str long ptr) AddPrinterDriver32A
+121 stdcall AddPrinterDriverW(wstr long ptr) AddPrinterDriver32W
 122 stdcall AddPrinterW(wstr long ptr) AddPrinter32W
 123 stub AdvancedDocumentPropertiesA
 124 stub AdvancedDocumentPropertiesW
diff --git a/scheduler/k32obj.c b/scheduler/k32obj.c
index 3d67e95..35f5be3 100644
--- a/scheduler/k32obj.c
+++ b/scheduler/k32obj.c
@@ -9,6 +9,7 @@
 #include "k32obj.h"
 #include "heap.h"
 #include "process.h"
+#include "server.h"
 
 
 /* The declarations are here to avoid including a lot of unnecessary files */
diff --git a/scheduler/syslevel.c b/scheduler/syslevel.c
index 3b4f0a6..8babea4 100644
--- a/scheduler/syslevel.c
+++ b/scheduler/syslevel.c
@@ -31,6 +31,7 @@
     segpWin16Mutex = SEGPTR_GET(w16Mutex);
 
     InitializeCriticalSection(&Win16Mutex);
+    MakeCriticalSectionGlobal(&Win16Mutex);
 }
 
 /************************************************************************
diff --git a/server/console.c b/server/console.c
index b7cd57b..d9cfae3 100644
--- a/server/console.c
+++ b/server/console.c
@@ -69,7 +69,7 @@
         file_set_error();
         return 0;
     }
-    if ((write_fd = (fd != -1) ? dup(fd) : dup(0)) == -1)
+    if ((write_fd = (fd != -1) ? dup(fd) : dup(1)) == -1)
     {
         file_set_error();
         close( read_fd );
diff --git a/server/file.c b/server/file.c
index 760902d..c786807 100644
--- a/server/file.c
+++ b/server/file.c
@@ -304,18 +304,19 @@
 
 static void file_destroy( struct object *obj )
 {
-    struct file **pptr;
     struct file *file = (struct file *)obj;
     assert( obj->ops == &file_ops );
 
-    /* remove it from the hashing list */
-    pptr = &file_hash[get_name_hash( file->name )];
-    while (*pptr && *pptr != file) pptr = &(*pptr)->next;
-    assert( *pptr );
-    *pptr = (*pptr)->next;
-
+    if (file->name)
+    {
+        /* remove it from the hashing list */
+        struct file **pptr = &file_hash[get_name_hash( file->name )];
+        while (*pptr && *pptr != file) pptr = &(*pptr)->next;
+        assert( *pptr );
+        *pptr = (*pptr)->next;
+        free( file->name );
+    }
     close( file->fd );
-    free( file->name );
     free( file );
 }
 
diff --git a/tools/wrc/CHANGES b/tools/wrc/CHANGES
index 6f3bc36..7848237 100644
--- a/tools/wrc/CHANGES
+++ b/tools/wrc/CHANGES
@@ -1,4 +1,44 @@
 ---------------------------------------------------------------------------
+Version 1.0.8 (10-Jan-1999)
+
+Albert den Haan <albertd@corel.ca>:
+- Added TOOLBAR support.
+- Buffer overflow fix in strncpyWtoA.
+- Open embedded files in resource definitions through the include path from
+  the commandline.
+- Support named icons in dialogs with unquoted names
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Fixed a major bug in the language propagation in the parser. The parser
+  did not copy the current language while binding it to a resource structure
+  causing wrong sorting if multiple global languages were in use and was a
+  potential segfault because the pointer might not be valid.
+- Added language/version/characteristics support for toolbar.
+- Moved some defines from wrc.h to wrctypes.h to support in toolbars.
+- Removed function stricmp from source and replaced with native function
+  strcasecmp.
+- Allocate cursor and icon ordinals according to the language of the item to
+  decrease the amount of ordinals in use. This reduces the resource
+  directory size by reducing the tree size.
+- Versions 1.0.5 through 1.0.7 were never commited to cvs but were available
+  for download from an alternate site for elf-dll test generation.
+
+---------------------------------------------------------------------------
+Version 1.0.7 (19-Dec-1998)
+- Changed a couple of labels that are used by dllglue. Also reversed a patch
+  that made wrc's generated code dependent on dllglue's code.
+
+---------------------------------------------------------------------------
+Version 1.0.6 (12-Dec-1998)
+- Fixed the _PEResTab table where incorrect RVA's were put in the table.
+  The dllglue should now be merged into wrc for correct labels and the least
+  number of loadtime fixups.
+
+---------------------------------------------------------------------------
+Version 1.0.5 (12-Dec-1998)
+- Fixed an omited .globl statement for dllglue linking.
+
+---------------------------------------------------------------------------
 Version 1.0.4 (10-Dec-1998)
 - Added a global label for elf-dll linking and a long with the resource
   size and a long with the directory size.
diff --git a/tools/wrc/dumpres.c b/tools/wrc/dumpres.c
index 6814a3b..3a46bfe 100644
--- a/tools/wrc/dumpres.c
+++ b/tools/wrc/dumpres.c
@@ -42,6 +42,7 @@
 	case res_usr:   return "UserResource";
 	case res_msg:	return "MESSAGETABLE";
 	case res_ver:	return "VERSIONINFO";
+	case res_toolbar: return "TOOLBAR";
 	default: 	return "Unknown";
 	}
 }
@@ -64,7 +65,8 @@
 char *strncpyWtoA(char *cs, short *ws, int maxlen)
 {
 	char *cptr = cs;
-	while(*ws && maxlen-1)
+	short *wsMax = ws + maxlen;
+	while(ws < wsMax)
 	{
 		if(*ws < -128 || *ws > 127)
 			printf("***Warning: Unicode string contains non-printable chars***");
@@ -821,6 +823,49 @@
 
 /*
  *****************************************************************************
+ * Function	: dump_toolbar_item
+ * Syntax	: void dump_toolbar_item(toolbar_item_t *item)
+ * Input	:
+ * Output	:
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+void dump_toolbar_items(toolbar_item_t *items)
+{
+	while(items)
+	{
+	        if(items->id)
+			printf("   BUTTON %d", items->id );
+		else
+	      		printf("   SEPARATOR");
+
+		printf("\n");
+	      
+		items = items->next;
+	}
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_toolbar
+ * Syntax	: void dump_toolbar(dialogex_t *toolbar)
+ * Input	:
+ *	toolbar	- Toolbar resource descriptor
+ * Output	:
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+void dump_toolbar(toolbar_t *toolbar)
+{
+	dump_memopt(toolbar->memopt);
+	dump_lvc(&(toolbar->lvc));
+	dump_toolbar_items(toolbar->items);
+}
+
+/*
+ *****************************************************************************
  * Function	:
  * Syntax	:
  * Input	:
@@ -899,6 +944,9 @@
 		case res_ver:
 			dump_versioninfo(top->res.ver);
 			break;
+		case res_toolbar:
+			dump_toolbar(top->res.tbt);
+			break;
 		default:
 			printf("Report this: Unknown resource type parsed %08x\n", top->type);
 		}
diff --git a/tools/wrc/genres.c b/tools/wrc/genres.c
index 0f863d4..abffb11 100644
--- a/tools/wrc/genres.c
+++ b/tools/wrc/genres.c
@@ -1425,6 +1425,72 @@
 
 /*
  *****************************************************************************
+ * Function	: toolbaritem2res
+ * Syntax	: void toolbaritem2res(res_t *res, toolbar_item_t *tbitem)
+ * Input	:
+ * Output	: nop
+ * Description	:
+ * Remarks	: Self recursive
+ *****************************************************************************
+*/
+void toolbaritem2res(res_t *res, toolbar_item_t *tbitem)
+{
+	toolbar_item_t *itm = tbitem;
+	assert(win32 != 0);
+	while(itm)
+	{
+		put_word(res, itm->id);
+		itm = itm->next;
+	}
+
+}
+
+/*
+ *****************************************************************************
+ * Function	: toolbar2res
+ * Syntax	: res_t *toolbar2res(name_id_t *name, toolbar_t *toolbar)
+ * Input	:
+ *	name	- Name/ordinal of the resource
+ *	toolbar	- The toolbar descriptor
+ * Output	: New .res format structure
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+res_t *toolbar2res(name_id_t *name, toolbar_t *toolbar)
+{
+	int restag;
+	res_t *res;
+	assert(name != NULL);
+	assert(toolbar != NULL);
+
+	res = new_res();
+	if(win32)
+	{
+		restag = put_res_header(res, WRC_RT_TOOLBAR, NULL, name, toolbar->memopt, &(toolbar->lvc));
+
+		put_word(res, 1);		/* Menuheader: Version */
+		put_word(res, toolbar->button_width); /* (in pixels?) */
+		put_word(res, toolbar->button_height); /* (in pixels?) */
+		put_word(res, toolbar->nitems); 
+		put_pad(res);
+		toolbaritem2res(res, toolbar->items);
+		/* Set ResourceSize */
+		SetResSize(res, restag);
+		put_pad(res);
+	}
+	else /* win16 */
+	{
+		/* Do not generate anything in 16-bit mode */
+		free(res->data);
+		free(res);
+		return NULL;
+	}
+	return res;
+}
+
+/*
+ *****************************************************************************
  * Function	: prep_nid_for_label
  * Syntax	: char *prep_nid_for_label(name_id_t *nid)
  * Input	:
@@ -1546,6 +1612,7 @@
 	case res_usr:	return "Usr";
 	case res_msg:	return "MsgTab";
 	case res_ver:	return "VerInf";
+	case res_toolbar:	return "TlBr";
 	default:	return "Oops";
 	}
 }
@@ -1631,6 +1698,10 @@
 			if(!top->binres)
 				top->binres = versioninfo2res(top->name, top->res.ver);
 			break;
+		case res_toolbar:
+			if(!top->binres)
+				top->binres = toolbar2res(top->name, top->res.tbt);
+			break;
 		default:
 			internal_error(__FILE__, __LINE__, "Unknown resource type encountered %d in binary res generation", top->type);
 		}
diff --git a/tools/wrc/newstruc.c b/tools/wrc/newstruc.c
index 3fb9941..05d9ee0 100644
--- a/tools/wrc/newstruc.c
+++ b/tools/wrc/newstruc.c
@@ -37,6 +37,7 @@
 __NEW_STRUCT_FUNC(lvc)
 __NEW_STRUCT_FUNC(res_count)
 __NEW_STRUCT_FUNC(string)
+__NEW_STRUCT_FUNC(toolbar_item)
 
 /* New instances for all types of structures */
 /* Very inefficient (in size), but very functional :-]
@@ -250,4 +251,12 @@
 	return stt;
 }
 
-
+toolbar_t *new_toolbar(int button_width, int button_height, toolbar_item_t *items, int nitems)
+{
+	toolbar_t *tb = (toolbar_t *)xmalloc(sizeof(toolbar_t));
+	tb->button_width = button_width;
+	tb->button_height = button_height;
+	tb->nitems = nitems;
+	tb->items = items;
+	return tb;
+}
diff --git a/tools/wrc/newstruc.h b/tools/wrc/newstruc.h
index 61d3907..3e79a3a 100644
--- a/tools/wrc/newstruc.h
+++ b/tools/wrc/newstruc.h
@@ -40,6 +40,7 @@
 __NEW_STRUCT_PROTO(lvc);
 __NEW_STRUCT_PROTO(res_count);
 __NEW_STRUCT_PROTO(string);
+__NEW_STRUCT_PROTO(toolbar_item);
 
 resource_t *new_resource(enum res_e t, void *res, int memopt, language_t *lan);
 version_t *new_version(DWORD v);
@@ -61,6 +62,7 @@
 void copy_raw_data(raw_data_t *dst, raw_data_t *src, int offs, int len);
 int *new_int(int i);
 stringtable_t *new_stringtable(lvc_t *lvc);
+toolbar_t *new_toolbar(int button_width, int button_Height, toolbar_item_t *items, int nitems);
 
 #endif
 
diff --git a/tools/wrc/parser.l b/tools/wrc/parser.l
index bc11b4e..9b132d6 100644
--- a/tools/wrc/parser.l
+++ b/tools/wrc/parser.l
@@ -261,6 +261,7 @@
 	{ "BEGIN", tBEGIN, 0, 0, 1},
 	{ "BITMAP", tBITMAP, 0, 0, 0},
 	{ "BLOCK", BLOCK, 0, 0, 1},
+	{ "BUTTON", BUTTON, 1, 0, 0},
 	{ "CAPTION", CAPTION, 0, 0, 0},
 	{ "CHARACTERISTICS", CHARACTERISTICS, 1, 0, 0},
 	{ "CHECKBOX", CHECKBOX, 0, 0, 0},
@@ -321,6 +322,7 @@
 	{ "STRING", tSTRING, 0, 0, 0},
 	{ "STRINGTABLE", STRINGTABLE, 0, 0, 1},
 	{ "STYLE", STYLE, 0, 0, 0},
+	{ "TOOLBAR", TOOLBAR, 1, 0, 0},
 	{ "typedef", tTYPEDEF, 0, 1, 1},
 	{ "VALUE", VALUE, 0, 0, 0},
 	{ "VERSION", VERSION, 1, 0, 0},
@@ -333,7 +335,7 @@
 int kw_cmp_func(const void *s1, const void *s2)
 {
 	int ret;
-	ret = stricmp(KWP(s1)->keyword, KWP(s2)->keyword);
+	ret = strcasecmp(KWP(s1)->keyword, KWP(s2)->keyword);
 	if(!ret && (KWP(s1)->needcase || KWP(s2)->needcase))
 		return strcmp(KWP(s1)->keyword, KWP(s2)->keyword);
 	else
@@ -804,10 +806,12 @@
 #ifndef yywrap
 int yywrap(void)
 {
-//	if(bufferstackidx > 0)
-//	{
-//		return 0;
-//	}
+#if 0
+	if(bufferstackidx > 0)
+	{
+		return 0;
+ 	}
+#endif
 	return 1;
 }
 #endif
diff --git a/tools/wrc/parser.y b/tools/wrc/parser.y
index 7f5d877..0d5baf1 100644
--- a/tools/wrc/parser.y
+++ b/tools/wrc/parser.y
@@ -3,6 +3,14 @@
  * Copyright  Martin von Loewis, 1994
  * Copyright 1998 Bertho A. Stultiens (BS)
  *
+ * 29-Dec-1998 AdH	- Grammar and function extensions.
+ *			     grammar: TOOLBAR resources, Named ICONs in 
+ *				DIALOGS
+ *			     functions: semantic actions for the grammar 
+ *				changes, resource files can now be anywhere
+ *				on the include path instead of just in the
+ *				current directory
+ *
  * 20-Jun-1998 BS	- Fixed a bug in load_file() where the name was not
  *			  printed out correctly.
  *
@@ -82,6 +90,7 @@
 #include <stdarg.h>
 #include <assert.h>
 #include <ctype.h>
+#include <string.h>
 
 #include <config.h>
 #include "wrc.h"
@@ -114,8 +123,8 @@
 /* Prototypes of here defined functions */
 void split_cursors(raw_data_t *rd, cursor_group_t *curg, int *ncur);
 void split_icons(raw_data_t *rd, icon_group_t *icog, int *nico);
-int alloc_cursor_id(void);
-int alloc_icon_id(void);
+int alloc_cursor_id(language_t *);
+int alloc_icon_id(language_t *);
 void ins_stt_entry(stt_entry_t *ste);
 int check_stt_entry(stringtable_t *tabs, stt_entry_t *ste);
 event_t *get_event_head(event_t *p);
@@ -156,6 +165,8 @@
 dialog_t *dialog_style(int st, dialog_t *dlg);
 resource_t *build_stt_resources(stringtable_t *stthead);
 stringtable_t *find_stringtable(lvc_t *lvc);
+toolbar_item_t *ins_tlbr_button(toolbar_item_t *prev, toolbar_item_t *idrec);
+toolbar_item_t *get_tlbr_buttons_head(toolbar_item_t *p, int *nitems);
 
 %}
 %union{
@@ -195,6 +206,8 @@
 	ver_value_t	*val;
 	ver_block_t	*blk;
 	ver_words_t	*verw;
+	toolbar_t	*tlbar;
+	toolbar_item_t	*tlbarItems;
 }
 
 %token tIF tIFDEF tIFNDEF tELSE tELIF tENDIF tDEFINED tNL
@@ -217,6 +230,7 @@
 %token MENUBARBREAK MENUBREAK MENUITEM POPUP SEPARATOR
 %token HELP
 %token tSTRING IDENT RAWDATA
+%token TOOLBAR BUTTON
 %token tBEGIN tEND
 %left LOGOR
 %left LOGAND
@@ -267,6 +281,8 @@
 %type <num>	expr xpr dummy
 %type <iptr>	e_expr
 %type <iptr>	pp_expr pp_constant
+%type <tlbar>	toolbar
+%type <tlbarItems>	toolbar_items
 
 %%
 
@@ -432,14 +448,14 @@
 /* get the value for a single resource*/
 resource_definition
 	: accelerators	{ $$ = new_resource(res_acc, $1, $1->memopt, $1->lvc.language); }
-	| bitmap	{ $$ = new_resource(res_bmp, $1, $1->memopt, currentlanguage); }
+	| bitmap	{ $$ = new_resource(res_bmp, $1, $1->memopt, dup_language(currentlanguage)); }
 	| cursor {
 		resource_t *rsc;
 		cursor_t *cur;
-		$$ = rsc = new_resource(res_curg, $1, $1->memopt, currentlanguage);
+		$$ = rsc = new_resource(res_curg, $1, $1->memopt, dup_language(currentlanguage));
 		for(cur = $1->cursorlist; cur; cur = cur->next)
 		{
-			rsc->prev = new_resource(res_cur, cur, $1->memopt, currentlanguage);
+			rsc->prev = new_resource(res_cur, cur, $1->memopt, dup_language(currentlanguage));
 			rsc->prev->next = rsc;
 			rsc = rsc->prev;
 			rsc->name = new_name_id();
@@ -454,14 +470,14 @@
 		else
 			$$ = NULL;
 		}
-	| font		{ $$=new_resource(res_fnt, $1, $1->memopt, currentlanguage); }
+	| font		{ $$=new_resource(res_fnt, $1, $1->memopt, dup_language(currentlanguage)); }
 	| icon {
 		resource_t *rsc;
 		icon_t *ico;
-		$$ = rsc = new_resource(res_icog, $1, $1->memopt, currentlanguage);
+		$$ = rsc = new_resource(res_icog, $1, $1->memopt, dup_language(currentlanguage));
 		for(ico = $1->iconlist; ico; ico = ico->next)
 		{
-			rsc->prev = new_resource(res_ico, ico, $1->memopt, currentlanguage);
+			rsc->prev = new_resource(res_ico, ico, $1->memopt, dup_language(currentlanguage));
 			rsc->prev->next = rsc;
 			rsc = rsc->prev;
 			rsc->name = new_name_id();
@@ -476,10 +492,11 @@
 		else
 			$$ = NULL;
 		}
-	| messagetable	{ $$ = new_resource(res_msg, $1, WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, currentlanguage); }
+	| messagetable	{ $$ = new_resource(res_msg, $1, WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, dup_language(currentlanguage)); }
 	| rcdata	{ $$ = new_resource(res_rdt, $1, $1->memopt, $1->lvc.language); }
-	| userres	{ $$ = new_resource(res_usr, $1, $1->memopt, currentlanguage); }
-	| versioninfo	{ $$ = new_resource(res_ver, $1, WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, currentlanguage); }
+	| toolbar	{ $$ = new_resource(res_toolbar, $1, $1->memopt, $1->lvc.language); }
+	| userres	{ $$ = new_resource(res_usr, $1, $1->memopt, dup_language(currentlanguage)); }
+	| versioninfo	{ $$ = new_resource(res_ver, $1, WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, dup_language(currentlanguage)); }
 	;
 
 /* ------------------------------ Bitmap ------------------------------ */
@@ -673,8 +690,15 @@
 	| ctrls CTEXT		lab_ctrl	{ $$=ins_ctrl(CT_STATIC, SS_CENTER, $3, $1); }
 	| ctrls RTEXT		lab_ctrl	{ $$=ins_ctrl(CT_STATIC, SS_RIGHT, $3, $1); }
 	/* special treatment for icons, as the extent is optional */
-	| ctrls ICON tSTRING ',' expr ',' expr ',' expr iconinfo {
-		$10->title = $3;
+	| ctrls ICON nameid_s ',' expr ',' expr ',' expr iconinfo {
+		if($3->type == name_str)
+		{
+			$10->title = $3->name.s_name;
+		}
+		else
+		{
+			$10->title = NULL;
+		}
 		$10->id = $5;
 		$10->x = $7;
 		$10->y = $9;
@@ -1380,6 +1404,46 @@
 	| ver_words ',' expr	{ $$ = add_ver_words($1, $3); }
 	;
 
+/* ------------------------------ Toolbar ------------------------------ */
+toolbar: TOOLBAR loadmemopts expr ',' expr opt_lvc tBEGIN toolbar_items tEND {
+		int nitems;
+		toolbar_item_t *items = get_tlbr_buttons_head($8, &nitems);
+		$$ = new_toolbar($3, $5, items, nitems);
+		if($2)
+		{
+			$$->memopt = *($2);
+			free($2); 
+		}
+		else
+		{
+			$$->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE;
+		}
+		if($6)
+		{
+			$$->lvc = *($6);
+			free($6);
+		}
+		if(!$$->lvc.language)
+		{
+			$$->lvc.language = dup_language(currentlanguage);
+		}
+		}
+	;
+
+toolbar_items
+	:  /* Empty */			{ $$ = NULL; }
+	| toolbar_items BUTTON expr	{         
+		toolbar_item_t *idrec = new_toolbar_item();
+		idrec->id = $3;
+		$$ = ins_tlbr_button($1, idrec); 
+		}
+	| toolbar_items SEPARATOR	{         
+		toolbar_item_t *idrec = new_toolbar_item();
+		idrec->id = 0;
+		$$ = ins_tlbr_button($1, idrec); 
+	}
+	;
+
 /* ------------------------------ Memory options ------------------------------ */
 loadmemopts
 	: /* Empty */		{ $$ = NULL; }
@@ -1714,17 +1778,17 @@
 	else
 		cc = cls->name.s_name->str.cstr;
 
-	if(!stricmp("BUTTON", cc))
+	if(!strcasecmp("BUTTON", cc))
 		iclass = CT_BUTTON;
-	else if(!stricmp("COMBOBOX", cc))
+	else if(!strcasecmp("COMBOBOX", cc))
 		iclass = CT_COMBOBOX;
-	else if(!stricmp("LISTBOX", cc))
+	else if(!strcasecmp("LISTBOX", cc))
 		iclass = CT_LISTBOX;
-	else if(!stricmp("EDIT", cc))
+	else if(!strcasecmp("EDIT", cc))
 		iclass = CT_EDIT;
-	else if(!stricmp("STATIC", cc))
+	else if(!strcasecmp("STATIC", cc))
 		iclass = CT_STATIC;
-	else if(!stricmp("SCROLLBAR", cc))
+	else if(!strcasecmp("SCROLLBAR", cc))
 		iclass = CT_SCROLLBAR;
 	else
 		return cls;	/* No default, return user controlclass */
@@ -1896,7 +1960,7 @@
 	if(name->type != str_char)
 		yyerror("Filename must be ASCII string");
 		
-	fp = fopen(name->str.cstr, "rb");
+	fp = open_include(name->str.cstr, 1);
 	if(!fp)
 		yyerror("Cannot open file %s", name->str.cstr);
 	rd = new_raw_data();
@@ -2028,7 +2092,7 @@
 	assert(lvc != NULL);
 
 	if(!lvc->language)
-		lvc->language = currentlanguage;
+		lvc->language = dup_language(currentlanguage);
 
 	for(stt = sttres; stt; stt = stt->next)
 	{
@@ -2162,16 +2226,54 @@
 }
 
 /* Cursor and icon splitter functions */
-int alloc_icon_id(void)
+typedef struct {
+	language_t	lan;
+	int		id;
+} id_alloc_t;
+
+static int get_new_id(id_alloc_t **list, int *n, language_t *lan)
 {
-	static int icon_id = 1;
-	return icon_id++;
+	int i;
+	assert(lan != NULL);
+	assert(list != NULL);
+	assert(n != NULL);
+
+	if(!*list)
+	{
+		*list = (id_alloc_t *)xmalloc(sizeof(id_alloc_t));
+		*n = 1;
+		(*list)[0].lan = *lan;
+		(*list)[0].id = 1;
+		return 1;
+	}
+
+	for(i = 0; i < *n; i++)
+	{
+		if((*list)[i].lan.id == lan->id && (*list)[i].lan.sub == lan->sub)
+			return ++((*list)[i].id);
+	}
+
+	*list = (id_alloc_t *)xrealloc(*list, sizeof(id_alloc_t) * (*n+1));
+	(*list)[*n].lan = *lan;
+	(*list)[*n].id = 1;
+	*n += 1;
+	return 1;
 }
 
-int alloc_cursor_id(void)
+int alloc_icon_id(language_t *lan)
 {
-	static int cursor_id = 1;
-	return cursor_id++;
+	static id_alloc_t *idlist = NULL;
+	static int nid = 0;
+
+	return get_new_id(&idlist, &nid, lan);
+}
+
+int alloc_cursor_id(language_t *lan)
+{
+	static id_alloc_t *idlist = NULL;
+	static int nid = 0;
+
+	return get_new_id(&idlist, &nid, lan);
 }
 
 #define BPTR(base)	((char *)(rd->data + (base)))
@@ -2193,7 +2295,7 @@
 	for(i = 0; i < cnt; i++)
 	{
 		ico = new_icon();
-		ico->id = alloc_icon_id();
+		ico->id = alloc_icon_id(icog->lvc.language);
 		ico->lvc.language = dup_language(icog->lvc.language);
 		if(ide[i].offset > rd->size
 		|| ide[i].offset + ide[i].ressize > rd->size)
@@ -2246,7 +2348,7 @@
 	for(i = 0; i < cnt; i++)
 	{
 		cur = new_cursor();
-		cur->id = alloc_cursor_id();
+		cur->id = alloc_cursor_id(curg->lvc.language);
 		cur->lvc.language = dup_language(curg->lvc.language);
 		if(cde[i].offset > rd->size
 		|| cde[i].offset + cde[i].ressize > rd->size)
@@ -2283,3 +2385,31 @@
 #undef	DPTR
 
 
+toolbar_item_t *ins_tlbr_button(toolbar_item_t *prev, toolbar_item_t *idrec)
+{
+	idrec->prev = prev;
+	if(prev)
+		prev->next = idrec;
+
+	return idrec;
+}
+
+toolbar_item_t *get_tlbr_buttons_head(toolbar_item_t *p, int *nitems)
+{
+	if(!p)
+	{
+		*nitems = 0;
+		return NULL;
+	} 
+
+	*nitems = 1;
+
+	while(p->prev)
+	{
+		(*nitems)++;
+		p = p->prev;
+	}
+
+	return p;
+}
+
diff --git a/tools/wrc/readres.c b/tools/wrc/readres.c
index c2fdc6d..8fcb3c7 100644
--- a/tools/wrc/readres.c
+++ b/tools/wrc/readres.c
@@ -108,6 +108,7 @@
 	case WRC_RT_GROUP_CURSOR:	return res_curg;
 	case WRC_RT_GROUP_ICON:		return res_icog;
 	case WRC_RT_VERSION:		return res_ver;
+	case WRC_RT_TOOLBAR:		return res_toolbar;
 
 	default:
 	case WRC_RT_DLGINCLUDE:
diff --git a/tools/wrc/utils.c b/tools/wrc/utils.c
index 7d1b67e..55ce0af 100644
--- a/tools/wrc/utils.c
+++ b/tools/wrc/utils.c
@@ -137,7 +137,7 @@
 	/* +4 for later extension and +1 for '\0' */
 	base = (char *)xmalloc(namelen +4 +1);
 	strcpy(base, name);
-	if(!stricmp(name + namelen-extlen, ext))
+	if(!strcasecmp(name + namelen-extlen, ext))
 	{
 		base[namelen - extlen] = '\0';
 	}
@@ -184,7 +184,7 @@
 {
 	if(s1->type == str_char && s2->type == str_char)
 	{
-		return stricmp(s1->str.cstr, s2->str.cstr);
+		return strcasecmp(s1->str.cstr, s2->str.cstr);
 	}
 	else
 	{
@@ -213,7 +213,7 @@
 {
 	char *cs1 = dupwstr2cstr(s1);
 	char *cs2 = dupwstr2cstr(s2);
-	int retval = stricmp(cs1, cs2);
+	int retval = strcasecmp(cs1, cs2);
 	free(cs1);
 	free(cs2);
 	warning("Comparing unicode strings without case -> converting to ascii");
@@ -248,15 +248,3 @@
 	return cs;
 }
 
-#ifndef HAVE_STRICMP
-int stricmp(const char *s1, const char *s2)
-{
-	while(*s1 && *s2 && !(toupper(*s1) - toupper(*s2)))
-	{
-		s1++;
-		s2++;
-	}
-	return *s2 - *s1;
-}
-#endif
-
diff --git a/tools/wrc/utils.h b/tools/wrc/utils.h
index e16613a..6ddd10c 100644
--- a/tools/wrc/utils.h
+++ b/tools/wrc/utils.h
@@ -33,8 +33,4 @@
 char *dupwstr2cstr(const short *str);
 short *dupcstr2wstr(const char *str);
 
-#ifndef HAVE_STRICMP
-int stricmp(const char *s1, const char *s2);
-#endif
-
 #endif
diff --git a/tools/wrc/wrc.h b/tools/wrc/wrc.h
index 1201c6c..b634062 100644
--- a/tools/wrc/wrc.h
+++ b/tools/wrc/wrc.h
@@ -12,48 +12,13 @@
 #include "wrctypes.h"
 #endif
 
-#define WRC_VERSION	"1.0.4"
-#define WRC_RELEASEDATE	"(10-Dec-1998)"
+#define WRC_VERSION	"1.0.8"
+#define WRC_RELEASEDATE	"(10-Jan-1999)"
 #define WRC_FULLVERSION WRC_VERSION " " WRC_RELEASEDATE
 
 /* Only used in heavy debugging sessions */
 #define HEAPCHECK()
 
-/* Memory/load flags */
-#define WRC_MO_MOVEABLE		0x0010
-#define WRC_MO_PURE		0x0020
-#define WRC_MO_PRELOAD		0x0040
-#define WRC_MO_DISCARDABLE	0x1000
-
-/* Resource type IDs */
-#define WRC_RT_CURSOR		(1)
-#define WRC_RT_BITMAP		(2)
-#define WRC_RT_ICON		(3)
-#define WRC_RT_MENU		(4)
-#define WRC_RT_DIALOG		(5)
-#define WRC_RT_STRING		(6)
-#define WRC_RT_FONTDIR		(7)
-#define WRC_RT_FONT		(8)
-#define WRC_RT_ACCELERATOR	(9)
-#define WRC_RT_RCDATA		(10)
-#define WRC_RT_MESSAGETABLE	(11)
-#define WRC_RT_GROUP_CURSOR	(12)
-#define WRC_RT_GROUP_ICON	(14)
-#define WRC_RT_VERSION		(16)
-#define WRC_RT_DLGINCLUDE	(17)
-#define WRC_RT_PLUGPLAY		(19)
-#define WRC_RT_VXD		(20)
-#define WRC_RT_ANICURSOR	(21)
-#define WRC_RT_ANIICON		(22)
-
-/* Default class type IDs */
-#define CT_BUTTON	0x80
-#define CT_EDIT		0x81
-#define CT_STATIC 	0x82
-#define CT_LISTBOX	0x83
-#define CT_SCROLLBAR	0x84
-#define CT_COMBOBOX	0x85
-
 /* From wrc.c */
 extern int debuglevel;
 #define DEBUGLEVEL_NONE		0x0000
diff --git a/tools/wrc/wrctypes.h b/tools/wrc/wrctypes.h
index eebdb56..1d81d94 100644
--- a/tools/wrc/wrctypes.h
+++ b/tools/wrc/wrctypes.h
@@ -21,6 +21,42 @@
 #include "ver.h"
 #endif
 
+/* Memory/load flags */
+#define WRC_MO_MOVEABLE		0x0010
+#define WRC_MO_PURE		0x0020
+#define WRC_MO_PRELOAD		0x0040
+#define WRC_MO_DISCARDABLE	0x1000
+
+/* Resource type IDs */
+#define WRC_RT_CURSOR		(1)
+#define WRC_RT_BITMAP		(2)
+#define WRC_RT_ICON		(3)
+#define WRC_RT_MENU		(4)
+#define WRC_RT_DIALOG		(5)
+#define WRC_RT_STRING		(6)
+#define WRC_RT_FONTDIR		(7)
+#define WRC_RT_FONT		(8)
+#define WRC_RT_ACCELERATOR	(9)
+#define WRC_RT_RCDATA		(10)
+#define WRC_RT_MESSAGETABLE	(11)
+#define WRC_RT_GROUP_CURSOR	(12)
+#define WRC_RT_GROUP_ICON	(14)
+#define WRC_RT_VERSION		(16)
+#define WRC_RT_DLGINCLUDE	(17)
+#define WRC_RT_PLUGPLAY		(19)
+#define WRC_RT_VXD		(20)
+#define WRC_RT_ANICURSOR	(21)
+#define WRC_RT_ANIICON		(22)
+#define WRC_RT_TOOLBAR		(241)  
+
+/* Default class type IDs */
+#define CT_BUTTON	0x80
+#define CT_EDIT		0x81
+#define CT_STATIC 	0x82
+#define CT_LISTBOX	0x83
+#define CT_SCROLLBAR	0x84
+#define CT_COMBOBOX	0x85
+
 
 /* Binary resource structure */
 #define RES_BLOCKSIZE	512
@@ -112,6 +148,8 @@
 	res_anicur,	/* Not implemented, no layout available */
 	res_aniico,	/* Not implemented, no layout available */
 
+	res_toolbar = WRC_RT_TOOLBAR,	/* 241 */
+
 	res_menex = 256 + 4,
 	res_dlgex,
 	res_usr,
@@ -419,6 +457,22 @@
 	event_t		*events;
 } accelerator_t;
 
+/* Toolbar structures */
+typedef struct toolbar_item {
+	struct toolbar_item	*next;
+	struct toolbar_item	*prev;        
+	int			id;
+} toolbar_item_t;
+
+typedef struct toolbar {
+	DWORD		memopt;
+	lvc_t		lvc;
+	int		button_width;
+	int		button_height;
+	int		nitems;
+	toolbar_item_t	*items;
+} toolbar_t;
+
 /* A top-level resource node */
 typedef struct resource {
 	struct resource	*next;
@@ -441,6 +495,7 @@
 		messagetable_t	*msg;
 		rcdata_t	*rdt;
 		stringtable_t	*stt;
+		toolbar_t	*tbt;
 		user_t		*usr;
 		versioninfo_t	*ver;
 		void		*overlay; /* To catch all types at once... */
diff --git a/tools/wrc/writeres.c b/tools/wrc/writeres.c
index b87f465..2e17143 100644
--- a/tools/wrc/writeres.c
+++ b/tools/wrc/writeres.c
@@ -299,7 +299,7 @@
 		if(n1->name.s_name->type == str_char
 		&& n2->name.s_name->type == str_char)
 		{
-			return stricmp(n1->name.s_name->str.cstr, n2->name.s_name->str.cstr);
+			return strcasecmp(n1->name.s_name->str.cstr, n2->name.s_name->str.cstr);
 		}
 		else if(n1->name.s_name->type == str_unicode
 		&& n2->name.s_name->type == str_unicode)
@@ -571,6 +571,7 @@
 void write_pe_segment(FILE *fp, resource_t *top)
 {
 	int i;
+	int direntries;
 
 	fprintf(fp, "\t.align\t4\n");
 	fprintf(fp, "%s%s:\n", prefix, _PEResTab);
@@ -704,6 +705,9 @@
 	}
 
 	/* Write the resource table itself */
+	fprintf(fp, "%s_ResourceDirectory:\n", prefix);
+	fprintf(fp, "\t.globl\t%s_ResourceDirectory\n", prefix);
+	direntries = 0;
 
 	for(i = 0; i < rccount; i++)
 	{
@@ -746,6 +750,8 @@
 				fprintf(fp, "\t.long\t%ld\n", codepage);
 				/* Reserved */
 				fprintf(fp, "\t.long\t0\n");
+
+				direntries++;
 			}
 			free(namelabel);
 		}
@@ -753,9 +759,9 @@
 	}
 
 	fprintf(fp, "\t.align\t4\n");
-	fprintf(fp, "%s_ResourceDirectorySize:\n", Underscore);
-	fprintf(fp, "\t.globl\t%s_ResourceDirectorySize\n", Underscore);
-	fprintf(fp, "\t.long\t. - %s%s\n", prefix, _PEResTab);
+	fprintf(fp, "%s_NumberOfResources:\n", prefix);
+	fprintf(fp, "\t.globl\t%s_NumberOfResources\n", prefix);
+	fprintf(fp, "\t.long\t%d\n", direntries);
 }
 
 /*
@@ -988,7 +994,8 @@
 		if(create_dir)
 		{
 			/* Add the size of the entire resource section for elf-dlls */
-			fprintf(fo, "%s_ResourceSectionSize:\n", Underscore);
+			fprintf(fo, "%s_ResourceSectionSize:\n", prefix);
+			fprintf(fo, "\t.globl\t%s_ResourceSectionSize\n", prefix);
 			fprintf(fo, "\t.long\t. - %s%s\n", prefix, _PEResTab);
 		}
 	}
diff --git a/win32/console.c b/win32/console.c
index aa9a17f..f82afc4 100644
--- a/win32/console.c
+++ b/win32/console.c
@@ -567,7 +567,7 @@
 static BOOL32 CONSOLE_make_complex(HANDLE32 handle,CONSOLE *console)
 {
 	struct termios term;
-	char buf[30];
+	char buf[30],*title;
 	char c = '\0';
 	int status = 0;
 	int i,xpid;
@@ -611,6 +611,12 @@
 	/* enable mouseclicks */
 	sprintf(buf,"%c[?1001s%c[?1000h",27,27);
 	WriteFile(handle,buf,strlen(buf),&xlen,NULL);
+	if (console->title) {
+	    title = HeapAlloc(GetProcessHeap(),0,strlen("\033]2;\a")+1+strlen(console->title));
+	    sprintf(title,"\033]2;%s\a",console->title);
+	    WriteFile(handle,title,strlen(title),&xlen,NULL);
+	    HeapFree(GetProcessHeap(),0,title);
+	}
 	return TRUE;
 
 }
@@ -966,9 +972,7 @@
     );
     CONSOLE_get_input(hConsoleInput);
 
-    /* FIXME:	should this drain everything from the input queue and just 
-     * 		put the keypresses in the buffer? Needs further thought.
-     */
+    /* FIXME: should we read at least 1 char? The SDK does not say */
     for (i=0;(i<console->nrofirs)&&(charsread<nNumberOfCharsToRead);i++) {
     	if (console->irs[i].EventType != KEY_EVENT)
 		continue;
@@ -977,6 +981,7 @@
 	*xbuf++ = console->irs[i].Event.KeyEvent.uChar.AsciiChar; 
 	charsread++;
     }
+    /* SDK says: Drains all other input events from queue. */
     CONSOLE_drain_input(console,i);
     if (lpNumberOfCharsRead)
     	*lpNumberOfCharsRead = charsread;
@@ -1034,9 +1039,27 @@
     if (!console) {
     	FIXME(console, "(%d,%p,%ld,%p), No console handle!\n",hConsoleInput,
 		lpBuffer, nLength, lpNumberOfEventsRead);
+
+        /* Indicate that nothing was read */
+        *lpNumberOfEventsRead = 0;
+
 	return FALSE;
     }
     CONSOLE_get_input(hConsoleInput);
+    /* SDK: return at least 1 input record */
+    while (!console->nrofirs) {
+    	DWORD res;
+
+    	res=WaitForSingleObject(hConsoleInput,0);
+	switch (res) {
+	case STATUS_TIMEOUT:	continue;
+	case 0:			break; /*ok*/
+	case WAIT_FAILED:	return 0;/*FIXME: SetLastError?*/
+	default:		break;	/*hmm*/
+	}
+	CONSOLE_get_input(hConsoleInput);
+    }
+    
     if (nLength>console->nrofirs)
     	nLength = console->nrofirs;
     memcpy(lpBuffer,console->irs,sizeof(INPUT_RECORD)*nLength);
@@ -1081,11 +1104,13 @@
     }
 
     sprintf(titlestring,titleformat,title);
-    /* FIXME: hmm, should use WriteFile probably... */
-    /*CONSOLE_Write(&console->header,titlestring,strlen(titlestring),&written,NULL);*/
-    WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),titlestring,strlen(titlestring),&written,NULL);
-    if (written == strlen(titlestring))
-	ret =TRUE;
+    /* only set title for complex console (own xterm) */
+    if (console->pid != -1) {
+	WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),titlestring,strlen(titlestring),&written,NULL);
+	if (written == strlen(titlestring))
+	    ret =TRUE;
+    } else
+    	ret = TRUE;
     HeapFree( GetProcessHeap(), 0, titlestring );
     K32OBJ_DecCount(&console->header);
     return ret;
@@ -1215,6 +1240,10 @@
 
     if (!console) {
         FIXME(console,"(%d,%p,%ld,%p), No console handle passed!\n",hConsoleInput, pirBuffer, cInRecords, lpcRead);
+
+        /* Indicate that nothing was read */
+        *lpcRead = 0; 
+
     	return FALSE;
     }
     TRACE(console,"(%d,%p,%ld,%p)\n",hConsoleInput, pirBuffer, cInRecords, lpcRead);
diff --git a/win32/device.c b/win32/device.c
index dcfdb38..9a6b1df 100644
--- a/win32/device.c
+++ b/win32/device.c
@@ -348,7 +348,7 @@
 		{
 			/* FIXME: Set appropriate error */
 			FIXME( win32, "Unimplemented control %ld for VxD device %s\n", 
-				          dwIoControlCode, dev->info->name );
+                               dwIoControlCode, dev->info ? dev->info->name : "???" );
 		}
 	}
 	else
diff --git a/windows/dialog.c b/windows/dialog.c
index 1f765ca..9a1ed9c 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -869,6 +869,7 @@
     }
     retval = dlgInfo->idResult;
     EnableWindow32( owner, TRUE );
+    dlgInfo->flags |= DF_ENDING;   /* try to stop it being destroyed twice */
     DestroyWindow32( hwnd );
     return retval;
 }
diff --git a/windows/dinput.c b/windows/dinput.c
index 85b2246..7e504ff 100644
--- a/windows/dinput.c
+++ b/windows/dinput.c
@@ -27,13 +27,11 @@
 #include "windows.h"
 #include "winerror.h"
 #include "shell.h"
-#include "ole.h"
-#include "compobj.h"
-#include "interfaces.h"
 #include "gdi.h"
 #include "heap.h"
 #include "win.h"
 #include "dinput.h"
+#include "objbase.h"
 #include "debug.h"
 #include "message.h"
 
diff --git a/windows/hook.c b/windows/hook.c
index e7b5302..5261b6b 100644
--- a/windows/hook.c
+++ b/windows/hook.c
@@ -860,7 +860,12 @@
     {
 	if ((id == WH_JOURNALRECORD) || (id == WH_JOURNALPLAYBACK) ||
 	    (id == WH_SYSMSGFILTER)) return 0;  /* System-only hooks */
-        if (!(hQueue = GetTaskQueue( hTask ))) return 0;
+        if (!(hQueue = GetTaskQueue( hTask )))
+        {
+            /* FIXME: shouldn't this be done somewhere else? */
+            if (hTask != GetCurrentTask()) return 0;
+            if (!(hQueue = GetFastQueue())) return 0;
+        }
     }
 
     /* Create the hook structure */
diff --git a/windows/queue.c b/windows/queue.c
index 2ef76e8..f83647a 100644
--- a/windows/queue.c
+++ b/windows/queue.c
@@ -828,6 +828,13 @@
 HQUEUE16 WINAPI InitThreadInput( WORD unknown, WORD flags )
 {
     HQUEUE16 hQueue = GetTaskQueue( 0 );
+    if ( !hQueue )
+    {
+        /* Create task message queue */
+        int queueSize = GetProfileInt32A( "windows", "DefaultQueueSize", 8 );
+        SetMessageQueue32( queueSize );
+        return GetTaskQueue( 0 );
+    }
 
     FIXME( msg, "(%04X,%04X): should create thread-local message queue!\n",
                 unknown, flags );
diff --git a/windows/sysmetrics.c b/windows/sysmetrics.c
index 6b626a6..eb97bda 100644
--- a/windows/sysmetrics.c
+++ b/windows/sysmetrics.c
@@ -18,6 +18,18 @@
  *           SYSMETRICS_Init
  *
  * Initialisation of the system metrics array.
+ *
+ * Differences in return values between 3.1 and 95 apps under Win95 (FIXME ?):
+ * SM_CXVSCROLL        x+1      x
+ * SM_CYHSCROLL        x+1      x
+ * SM_CXDLGFRAME       x-1      x
+ * SM_CYDLGFRAME       x-1      x
+ * SM_CYCAPTION        x+1      x
+ * SM_CYMENU           x-1      x
+ * SM_CYFULLSCREEN     x-1      x
+ * 
+ * (collides with TWEAK_WineLook sometimes,
+ * so changing anything might be difficult) 
  */
 void SYSMETRICS_Init(void)
 {
diff --git a/windows/win.c b/windows/win.c
index 10b1612..e34bd6e 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -1702,9 +1702,15 @@
  * Do not use GWL_HWNDPARENT to reset the window's parent, use
  * SetParent() instead.
  *
+ * Win95:
+ * When offset is GWL_STYLE and the calling app's ver is 4.0,
+ * it sends WM_STYLECHANGING before changing the settings
+ * and WM_STYLECHANGED afterwards.
+ * App ver 4.0 can't use SetWindowLong to change WS_EX_TOPMOST.
+ *
  * BUGS
  *
- * GWL_STYLE does not dispatch WM_STYLE_... messages.
+ * GWL_STYLE does not dispatch WM_STYLE... messages.
  *
  * CONFORMANCE
  *
diff --git a/windows/winpos.c b/windows/winpos.c
index a5fba13..2593483 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -1273,6 +1273,9 @@
 
 /***********************************************************************
  *           GetWindowPlacement32   (USER32.307)
+ *
+ * Win95:
+ * Fails if wndpl->length of Win95 (!) apps is invalid.
  */
 BOOL32 WINAPI GetWindowPlacement32( HWND32 hwnd, WINDOWPLACEMENT32 *pwpl32 )
 {
@@ -1355,6 +1358,9 @@
 
 /***********************************************************************
  *           SetWindowPlacement32   (USER32.519)
+ *
+ * Win95:
+ * Fails if wndpl->length of Win95 (!) apps is invalid.
  */
 BOOL32 WINAPI SetWindowPlacement32( HWND32 hwnd, const WINDOWPLACEMENT32 *pwpl32 )
 {
diff --git a/windows/winproc.c b/windows/winproc.c
index 8ab0f54..59a2675 100644
--- a/windows/winproc.c
+++ b/windows/winproc.c
@@ -15,6 +15,8 @@
 #include "debug.h"
 #include "spy.h"
 #include "commctrl.h"
+#include "task.h"
+#include "thread.h"
 
 /* Window procedure 16-to-32-bit thunk,
  * see BuildSpec16Files() in tools/build.c */
@@ -1080,6 +1082,17 @@
     case WM_NOTIFY:
     	*plparam = (LPARAM)PTR_SEG_TO_LIN(*plparam);
     	return 1;
+    case WM_ACTIVATEAPP:
+    	if (*plparam)
+	{ /* We need this when SetActiveWindow sends a Sendmessage16() to
+	     a 32bit window. Might be superflous with 32bit interprocess
+	     message queues.
+	  */
+	  HTASK16 htask = (HTASK16) *plparam;
+	  DWORD idThread = THDB_TO_THREAD_ID(((TDB*)GlobalLock16(htask))->thdb);
+	  *plparam = (LPARAM) idThread;
+	}
+	return 1;
     case WM_ASKCBFORMATNAME:
     case WM_DEVMODECHANGE:
     case WM_PAINTCLIPBOARD:
@@ -1763,6 +1776,7 @@
         }
         return 0;
 
+    case WM_ACTIVATEAPP:
     case WM_ASKCBFORMATNAME:
     case WM_DEVMODECHANGE:
     case WM_PAINTCLIPBOARD:
