diff --git a/ANNOUNCE b/ANNOUNCE
index 3b5dff6..86723e9 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,13 +1,13 @@
-This is release 951212 of Wine the MS Windows emulator.  This is still a
+This is release 951226 of Wine the MS Windows emulator.  This is still a
 developer's only release.  There are many bugs and many unimplemented API
 features.  Most applications still do not work.
 
 Patches should be submitted to "wine-new@amscons.com".  Please don't forget
 to include a ChangeLog entry.  I'll make a new release every other week.
 
-WHAT'S NEW with Wine-951212: (see ChangeLog for details)
-	- Many more Winelib and Win32 fixes.
-	- Window management and MDI improvements.
+WHAT'S NEW with Wine-951226: (see ChangeLog for details)
+	- Many more Winelib fixes.
+	- Language is now a run-time option.
 	- Lots of bug fixes.
 
 See the README file in the distribution for installation instructions.
@@ -16,10 +16,10 @@
 the release is available at the ftp sites.  The sources will be available
 from the following locations:
 
-    sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-951212.tar.gz
-    tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-951212.tar.gz
-    ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-951212.tar.gz
-    aris.com:/pub/linux/ALPHA/Wine/development/Wine-951212.tar.gz
+    sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-951226.tar.gz
+    tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-951226.tar.gz
+    ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-951226.tar.gz
+    aris.com:/pub/linux/ALPHA/Wine/development/Wine-951226.tar.gz
 
 It should also be available from any site that mirrors tsx-11 or sunsite.
 
diff --git a/ChangeLog b/ChangeLog
index efd9fa4..fc9e70b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,142 @@
 ----------------------------------------------------------------------
+Sat Dec 23 18:15:59 1995  Alexandre Julliard  <julliard@sunsite.unc.edu>
+
+	* [configure.in] [Makefile.in] [tools/install-sh]
+	New 'install' target installs Wine binary, library and man page.
+	Library is now more logically named libwine.a.
+	Split toolkit/ directory into library (for library code) and
+	libtest (for test programs).
+
+	* [controls/edit.c]
+	Quick hack to partially support EM_PASSWORD style (avoids
+	displaying your passwords on the screen when testing programs...)
+
+	* [configure.in] [controls/menu.c] [include/resource.h]
+	  [misc/commdlg.c] [misc/ole2nls.c] [misc/shell.c] [windows/msgbox.c]
+	Language is now a run-time option (wine -language xx).
+
+	* [debugger/dbg.y]
+	Dump some more debugging info on crash.
+
+	* [misc/profile.c]
+	Only consider ';' as a comment if it's the first non-blank
+	character on the line.
+
+	* [miscemu/dpmi.c]
+	More debugging info for real-mode callback.
+
+	* [objects/gdiobj.c]
+	Rewrote EnumObjects() to do the Right Thing.
+
+	* [resources/sysres*]
+	New directory containing system resources.
+
+Fri Dec 22 11:24:39 GMT 1995  John Harvey <john@division.co.uk>
+
+	* [win32/file.c] [win32/memory.c]
+        Unixware doesn't have MAP_ANON ifdefed out for now.
+
+	* [misc/dos_fs.c]
+        DOS_GetDosFileName didn't truncate paths starting ./ properly.
+
+	* [tools/build.c]
+	Produces assembly code that works with the unixware assembler.
+
+Wed Dec 20 22:22:29 +0100 1995  Morten Welinder <terra@diku.dk>
+
+	* [miscemu/instr.c]
+	INSTR_GetOperandAddr: 16-bit addresses should be masked to 16 bits.
+
+	* [misc/dos_fs.c]
+	DOS_readdir should always return directories, even if they don't
+ 	match the file name mask.
+
+Tue Dec 19 18:00:00 1995  Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
+	
+	* [misc/exec.c]
+	Give arguments to winhelp.
+
+	* [miscemu/int21.c]
+	Implemented Interrupt 21 AX=6C00 EXTENDED OPEN/CREATE.
+	Created function ExtendedOpenCreateFile.
+	Give for some Windows95 interrupts the return value 'not
+	implemented'.
+
+Sun Dec 17 16:51:56 EST 1995  Jim Peterson <jspeter@birch.ee.vt.edu>
+
+	* [include/kernel32.h] [include/windows.h]
+	Moved the typedefs for SYSTEMTIME and LPSYSTEMTIME from
+ 	include/kernel32.h to include/windows.h and declared the new Win32
+ 	API functions Sleep(), GetLocalTime(), and GetSystemTime().
+  	Redefined INFINITE as 0xFFFFFFFF if WINELIB32.
+
+	* [rc/rc (new file)]
+	Created the shell script 'rc', which should simplify resource
+ 	compilation.
+
+	* [win32/environment.c]
+	Kludged around an undefined reference to wine_files.  This change
+ 	should be fixed some time.
+
+	* [win32/time.c] [if1632/kernel32.spec]
+	Added the functions GetSystemTime(), and Sleep().
+
+	* [miscemu/int21.c]
+	Renamed static function GetSystemTime to INT21_GetSystemTime to
+ 	avoid conflicts with the API function of the same name.
+
+	* [include/wintypes.h]
+	Added the SPFMT definition for printf statements.
+
+	* [misc/shell.c] [include/shell.h]
+	Changed ERROR_* defines to SHELL_ERROR_*, as they were conflicting
+ 	with the ones in include/winerror.h.  They should probably use the
+ 	versions in winerror.h, but I'm not certain, and that can be done
+ 	later.
+
+	* [windows/mdi.c]
+	Translated WM_MDIACTIVATE(?,(LOhwnd,HIhwnd)) messages to
+ 	WM_MDIACTIVATE(HIhwnd,LOhwnd) for WINELIB32.  The ? parameter
+ 	(boolean) was discarded with this translation.  Translated handler
+ 	of WM_MDISETMENU(ref,(loHMENU,hiHMENU)) to handle
+ 	WM_MDISETMENU(loHMENU, hiHMENU) messages in WINELIB32 (ref assumed
+ 	false, call DrawMenuBar() if desired).
+
+	* [*/*]
+	General explicit casts and more rigid typing to remove warnings.
+
+	* [include/winpos.h] [windows/winpos.c]
+	Changed return type of WINPOS_ChangeActiveWindow to BOOL.
+
+	* [include/commdlg.h] [misc/commdlg.c]
+	Added prototypes for ChooseColor(), CommDlgExtendedError(),
+ 	FindText() GetFileTitle(), GetOpenFileName(), GetSaveFileName(),
+ 	PrintDlg, and ReplaceText().
+	Renamed the CommDlgExtendError() function to CommDlgExtendedError().
+	Made GetFileTitle return a short, as per the API definition.
+
+	* [Makefile.in]
+	Added line to clean and distclean that removes temporaries from
+ 	the include directory.
+
+Sat Dec 16 19:39:14 MET 1995  Steffen Moeller <smoe0024@rz.uni-hildesheim.de>
+
+	* [controls/edit.c]
+	Almost rewrote EDIT_GetLineMsg.
+
+Sat Dec 16 13:51:48 MST 1995  Andrew Taylor <andrew@riscan.com>
+
+	* [windows/mdi.c]
+	Fixed MDITile() bug that occurs when 0 windows are present or all
+	windows are minimized.
+
+Wed Dec 12 23:30:00 1995  Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
+
+	* [misc/profile.c]
+        Try harder to find files, especially in the working directory.
+	Look in $HOME/.wine too and create it there if it isn't found.
+
+----------------------------------------------------------------------
 Mon Dec 11 19:08:55 1995  Alexandre Julliard  <julliard@sunsite.unc.edu>
 
 	* [misc/lstr.c]
diff --git a/Make.rules.in b/Make.rules.in
index 4dd971d..a6d4063 100644
--- a/Make.rules.in
+++ b/Make.rules.in
@@ -1,21 +1,36 @@
 # Global rules shared by all makefiles
 # The makefile must define at least TOPSRC and MODULE
 
+# First some useful definitions
+
 CC 	  = @CC@
+CPP       = @CPP@
 CFLAGS 	  = @CFLAGS@
 DEFS      = @DEFS@
-LANG	  = @LANG@
 X_CFLAGS  = @X_CFLAGS@
+X_LIBS    = @X_LIBS@
+XPM_LIB	  = -lXpm
+XLIB	  = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDLIBS	  = @LDLIBS@
 YACC      = @YACC@
 LEX       = @LEX@
 LEXLIB    = @LEXLIB@
 DIVINCL   = -I$(TOPSRC)/include
-ALLCFLAGS = $(CFLAGS) $(DEFS) -ALANG\($(LANG)\) $(X_CFLAGS) $(DIVINCL) $(EXTRA_DEFS)
+ALLCFLAGS = $(CFLAGS) $(DEFS) $(X_CFLAGS) $(DIVINCL) $(EXTRA_DEFS)
 LDCOMBINE = ld -r
 RM        = rm -f
+BUILD     = $(TOPSRC)/tools/build
+WINERC    = $(TOPSRC)/rc/winerc
+WINELIB   = $(TOPSRC)/libwine.a
+SUBMAKE   = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)'
 @SET_MAKE@
 
-OBJS = $(C_SRCS:.c=.o) $(ASM_SRCS:.S=.o)
+OBJS = $(C_SRCS:.c=.o) $(ASM_SRCS:.S=.o) $(EXTRA_OBJS)
+
+
+# Implicit rules
+
+.SUFFIXES: .rc
 
 .c.o:
 	$(CC) -c $(ALLCFLAGS) -o $*.o $<
@@ -23,20 +38,46 @@
 .S.o:
 	$(CC) -c -o $*.o $<  
 
+.rc.c:
+	echo "#include \"windows.h\"" >winerctmp.c
+	echo WINDOWS_H_ENDS_HERE >>winerctmp.c
+	cat $< >>winerctmp.c
+	$(CPP) $(DEFS) $(DIVINCL) -P winerctmp.c | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | $(WINERC) -c -o $* -p $*
+	$(RM) winerctmp.c
+
+.rc.h:
+	echo "#include \"windows.h\"" >winerctmp.c
+	echo WINDOWS_H_ENDS_HERE >>winerctmp.c
+	cat $< >>winerctmp.c
+	$(CPP) $(DEFS) $(DIVINCL) -P winerctmp.c | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | $(WINERC) -c -o $* -p $*
+	$(RM) winerctmp.c
+
+
+# Rule to rebuild resource compiler
+
+$(WINERC) check_winerc:
+	cd $(TOPSRC)/rc; $(SUBMAKE) winerc
+
+
+# Rule for main module
+
 $(MODULE).o: $(OBJS)
 	$(LDCOMBINE) $(OBJS) -o $(MODULE).o
 
+
+# Misc. rules
+
 depend:: $(C_SRCS)
 	sed '/\#\#\# Dependencies/q' < Makefile > tmp_make
 	$(CC) $(ALLCFLAGS) -MM $(C_SRCS) >> tmp_make
 	mv tmp_make Makefile
 
 clean::
-	$(RM) *.o \#*\# *~ *.bak *.flc tmp_make
+	$(RM) *.o \#*\# *~ *.bak *.flc tmp_make winerctmp.c
 
 distclean:: clean
 	$(RM) Makefile
 
-langclean::
-
 dummy:
+
+# End of global rules
diff --git a/Makefile.in b/Makefile.in
index e7a7bb9..faea819 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -3,18 +3,18 @@
 # all (default):	build wine
 # clean:		remove all intermediate files
 # distclean:		also remove all files created by configure
-# langclean:		remove all files which have to be remade if
-#			a different LANGuage is selected
 # depend:		create the dependencies
 # etags:		Create a TAGS file for Emacs.
 #
 # Author: Michael Patra   <micky@marie.physik.tu-berlin.de>
 #                         <patra@itp1.physik.tu-berlin.de>
 
+# First some useful definitions
+
 CC 	  = @CC@
+CPP       = @CPP@
 CFLAGS 	  = @CFLAGS@
-DEFS      = @DEFS@
-LANG	  = @LANG@
+DEFS      = @DEFS@ -DWINE_INI_GLOBAL=\"$(WINE_INI_GLOBAL)\"
 X_CFLAGS  = @X_CFLAGS@
 X_LIBS    = @X_LIBS@
 TOPSRC    = @top_srcdir@
@@ -25,17 +25,50 @@
 AR        = ar rc
 RANLIB    = @RANLIB@
 RM        = rm -f
+SUBMAKE   = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)'
 @SET_MAKE@
 
+# Installation infos
+
+INSTALL         = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA    = @INSTALL_DATA@
+prefix          = @prefix@
+exec_prefix     = @exec_prefix@
+bindir          = @bindir@
+libdir          = @libdir@
+sysconfdir      = @sysconfdir@
+mandir          = @mandir@/man1
+manext          = .1
+WINE_INI_GLOBAL = $(sysconfdir)/wine.conf
+
+# Main target to build
+
 MAIN_TARGET = @MAIN_TARGET@
 
-COMMONSUBDIRS = rc controls ipc loader misc multimedia objects win32 windows
+COMMONSUBDIRS = \
+	rc \
+	controls \
+	ipc \
+	loader \
+	misc \
+	multimedia \
+	objects \
+	resources \
+	win32 \
+	windows
 
-EMUSUBDIRS = tools debugger debugger/readline if1632 memory miscemu
+EMUSUBDIRS = \
+	tools \
+	debugger \
+	debugger/readline \
+	if1632 \
+	memory \
+	miscemu
 
-LIBSUBDIRS = toolkit
+LIBSUBDIRS = library
 
-ALLSUBDIRS = $(COMMONSUBDIRS) $(EMUSUBDIRS) $(LIBSUBDIRS)
+ALLSUBDIRS = $(COMMONSUBDIRS) $(EMUSUBDIRS) $(LIBSUBDIRS) libtest
 
 COMMONOBJS = \
 	controls/controls.o \
@@ -44,7 +77,7 @@
 	misc/misc.o \
 	multimedia/multimedia.o \
 	objects/objects.o \
-	rc/rc.o \
+	resources/resources.o \
 	win32/win32.o \
 	windows/windows.o
 
@@ -55,22 +88,31 @@
 	memory/memory.o \
 	miscemu/miscemu.o
 
-LIBOBJS = toolkit/toolkit.o
+LIBOBJS = library/library.o
 
 
 all: $(MAIN_TARGET)
 
+install: install_$(MAIN_TARGET)
+
 wine wine.sym: $(COMMONSUBDIRS) $(EMUSUBDIRS) dummy
 	$(CC) -o wine $(COMMONOBJS) $(EMUOBJS) $(LDOPTIONS) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LDLIBS)
 	nm -n wine | grep -v _compiled >wine.sym
 
-winelib.a: $(COMMONSUBDIRS) $(LIBSUBDIRS) dummy
+install_wine: dummy
+	$(INSTALL_PROGRAM) wine $(bindir)/wine
+	$(INSTALL_DATA) wine.man $(mandir)/wine$(manext)
+
+libwine.a: $(COMMONSUBDIRS) $(LIBSUBDIRS) dummy
 	$(RM) $@
 	$(AR) $@ $(COMMONOBJS) $(LIBOBJS)
 	$(RANLIB) $@
 
+install_libwine.a: dummy
+	$(INSTALL_DATA) libwine.a $(libdir)
+
 $(ALLSUBDIRS): dummy
-	@cd $@; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' 'LANG=$(LANG)'
+	@cd $@; $(SUBMAKE)
 
 depend:
 	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) depend); done
@@ -80,15 +122,13 @@
 
 clean:
 	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) clean); done
-	$(RM) *.o \#*\# *~ *.bak *.flc wine wine.sym winelib.a TAGS
+	$(RM) *.o \#*\# *~ *.bak *.flc wine wine.sym libwine.a TAGS
+	$(RM) include/\#*\# include/*~ include/*.bak include/*.flc
 
 distclean:
 	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) distclean); done
-	$(RM) *.o \#*\# *~ *.bak wine wine.sym winelib.a TAGS
+	$(RM) *.o \#*\# *~ *.bak wine wine.sym libwine.a TAGS
+	$(RM) include/\#*\# include/*~ include/*.bak include/*.flc
 	$(RM) config.* include/config.h Make.rules Makefile
 
-langclean:
-	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) langclean); done
-	$(RM) wine wine.sym winelib.a
-
 dummy:
diff --git a/Wine.tmpl b/Wine.tmpl
deleted file mode 100644
index 1cc3320..0000000
--- a/Wine.tmpl
+++ /dev/null
@@ -1,17 +0,0 @@
-INCLUDES = -I$(TOP)/include -I$(TOP)
-
-XCOMM Imake rules go here
-
-/*
- * WineRelocatableTarget - generate rules to produce a relocatable object
- * file instead of a library.  
- */
-#ifndef WineRelocatableTarget
-#define WineRelocatableTarget(objname,objlist,depobj)				@@\
-AllTarget(objname.o)							@@\
-									@@\
-objname.o: depobj							@@\
-	$(RM) $@							@@\
-	$(LD) $(LDCOMBINEFLAGS) objlist depobj -o $@
-#endif /* WineRelocatableTarget */
-
diff --git a/configure b/configure
index 3223ea7..704cc35 100755
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
 
 # From configure.in configure.in 1.00
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.4 
+# Generated automatically using autoconf version 2.7 
 # Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
@@ -15,8 +15,6 @@
 ac_help="$ac_help
   --with-library          build Wine as a library instead of an emulator"
 ac_help="$ac_help
-  --with-language=LANG    change the language (LANG=En/De/Fr/Es/No/Fi/Da)"
-ac_help="$ac_help
   --with-ipc              use inter-process communication for DDE"
 ac_help="$ac_help
   --with-malloc-debug     enable malloc() debugging"
@@ -44,9 +42,22 @@
 verbose=
 x_includes=NONE
 x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
 
 # Initialize some other variables.
 subdirs=
+MFLAGS= MAKEFLAGS=
 
 ac_prev=
 for ac_option
@@ -68,9 +79,14 @@
 
   case "$ac_option" in
 
-  -build | --build | --buil | --bui | --bu | --b)
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
     ac_prev=build ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
     build="$ac_optarg" ;;
 
   -cache-file | --cache-file | --cache-fil | --cache-fi \
@@ -80,6 +96,12 @@
   | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
     cache_file="$ac_optarg" ;;
 
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
   -disable-* | --disable-*)
     ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
     # Reject names that are not valid shell variable names.
@@ -130,12 +152,29 @@
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
                           [$ac_default_prefix]
-  --exec-prefix=PREFIX    install architecture-dependent files in PREFIX
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                           [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
   --srcdir=DIR            find the sources in DIR [configure dir or ..]
   --program-prefix=PREFIX prepend PREFIX to installed program names
   --program-suffix=SUFFIX append SUFFIX to installed program names
-  --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
 Host type:
   --build=BUILD           configure for building on BUILD [BUILD=HOST]
   --host=HOST             configure for HOST [guessed]
@@ -147,8 +186,10 @@
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --x-includes=DIR        X include files are in DIR
   --x-libraries=DIR       X library files are in DIR
---enable and --with options recognized:$ac_help
 EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
     exit 0 ;;
 
   -host | --host | --hos | --ho)
@@ -156,6 +197,44 @@
   -host=* | --host=* | --hos=* | --ho=*)
     host="$ac_optarg" ;;
 
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
   -nfp | --nfp | --nf)
     # Obsolete; use --without-fp.
     with_fp=no ;;
@@ -168,6 +247,15 @@
   | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
     no_recursion=yes ;;
 
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
   -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
     ac_prev=prefix ;;
   -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
@@ -208,6 +296,23 @@
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
   -site | --site | --sit)
     ac_prev=site ;;
   -site=* | --site=* | --sit=*)
@@ -218,6 +323,13 @@
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
     srcdir="$ac_optarg" ;;
 
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
   -target | --target | --targe | --targ | --tar | --ta | --t)
     ac_prev=target ;;
   -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
@@ -227,7 +339,7 @@
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.4"
+    echo "configure generated by autoconf version 2.7"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -273,7 +385,7 @@
   -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
     ;;
 
-  *) 
+  *)
     if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
       echo "configure: warning: $ac_option: invalid host type" 1>&2
     fi
@@ -392,9 +504,12 @@
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
+ac_cpp='echo $CPP $CPPFLAGS 1>&5;
+$CPP $CPPFLAGS'
+ac_compile='echo ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5;
+${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
+ac_link='echo ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5;
+${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
 
 if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
@@ -409,39 +524,48 @@
 fi
 
 		
+ac_aux_dir=
+for ac_dir in tools $srcdir/tools; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in tools $srcdir/tools" 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
 
 # We want these before the checks, so the checks can modify their values.
-test -z "$CFLAGS" && CFLAGS="-g -O2 -Wall" 
+test -z "$CFLAGS" && CFLAGS="-g -O2" 
 test -z "$LDFLAGS" && LDFLAGS=-g 
 test -z "$LDLIBS" && LDLIBS=-lm 
 
 
 # Check whether --with-library or --without-library was given.
-withval="$with_library"
-if test -n "$withval"; then
+if test "${with_library+set}" = set; then
+  withval="$with_library"
   cat >> confdefs.h <<\EOF
 #define WINELIB 1
 EOF
- MAIN_TARGET="winelib.a"
+ MAIN_TARGET="libwine.a"
 else
   MAIN_TARGET="wine"
 fi
 
 
 
-# Check whether --with-language or --without-language was given.
-withval="$with_language"
-if test -n "$withval"; then
-  LANG="$withval"
-else
-  LANG=En
-fi
-
-
-
 # Check whether --with-ipc or --without-ipc was given.
-withval="$with_ipc"
-if test -n "$withval"; then
+if test "${with_ipc+set}" = set; then
+  withval="$with_ipc"
   cat >> confdefs.h <<\EOF
 #define CONFIG_IPC 1
 EOF
@@ -450,8 +574,8 @@
 
 
 # Check whether --with-malloc-debug or --without-malloc-debug was given.
-withval="$with_malloc_debug"
-if test -n "$withval"; then
+if test "${with_malloc_debug+set}" = set; then
+  withval="$with_malloc_debug"
   cat >> confdefs.h <<\EOF
 #define MALLOC_DEBUGGING 1
 EOF
@@ -530,6 +654,7 @@
   ac_cv_prog_gcc=no
 fi
 fi
+
 echo "$ac_t""$ac_cv_prog_gcc" 1>&6
 if test $ac_cv_prog_gcc = yes; then
   GCC=yes
@@ -547,7 +672,8 @@
 rm -f conftest*
 
 fi
-    echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
+
+echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
     if test $ac_cv_prog_gcc_g = yes; then
       CFLAGS="-g -O"
     else
@@ -559,6 +685,7 @@
   test "${CFLAGS+set}" = set || CFLAGS="-g"
 fi
 
+test "x${GCC}" = "xyes" && CFLAGS="$CFLAGS -Wall -fno-strength-reduce"
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
@@ -574,7 +701,7 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 578 "configure"
+#line 705 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
@@ -588,7 +715,7 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 592 "configure"
+#line 719 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
@@ -640,8 +767,8 @@
 echo $ac_n "checking for X""... $ac_c" 1>&6
 
 # Check whether --with-x or --without-x was given.
-withval="$with_x"
-if test -n "$withval"; then
+if test "${with_x+set}" = set; then
+  withval="$with_x"
   :
 fi
 
@@ -667,7 +794,7 @@
   if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
     no_x=
     # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-    eval `make acfindx 2>/dev/null | grep -v make`
+    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
     # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
     for ac_extension in a so sl; do
       if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
@@ -694,7 +821,7 @@
 test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
 test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
 cat > conftest.$ac_ext <<EOF
-#line 698 "configure"
+#line 825 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
@@ -757,7 +884,7 @@
 ac_save_LIBS="$LIBS"
 LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 761 "configure"
+#line 888 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -854,7 +981,7 @@
     X_LIBS="$X_LIBS -L$x_libraries"
     if test "`(uname) 2>/dev/null`" = SunOS &&
       uname -r | grep '^5' >/dev/null; then
-      X_LIBS="$X_LIBS -R$x_libraries"
+      X_LIBS="$X_LIBS -R $x_libraries"
     fi
   fi
 
@@ -869,13 +996,14 @@
   # libraries we check for below, so use a different variable.
   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
   echo $ac_n "checking for -lICE""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_lib_ICE'+set}'`\" = set"; then
+ac_lib_var=`echo ICE | tr '.-/+' '___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="-lICE  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 879 "configure"
+#line 1007 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -885,16 +1013,16 @@
 EOF
 if eval $ac_link; then
   rm -rf conftest*
-  eval "ac_cv_lib_ICE=yes"
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   rm -rf conftest*
-  eval "ac_cv_lib_ICE=no"
+  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
 LIBS="$ac_save_LIBS"
 
 fi
-if eval "test \"`echo '$ac_cv_lib_'ICE`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
 else
@@ -912,13 +1040,14 @@
     # libraries were built with DECnet support.  And karl@cs.umb.edu says
     # the Alpha needs dnet_stub (dnet does not exist).
     echo $ac_n "checking for -ldnet""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_lib_dnet'+set}'`\" = set"; then
+ac_lib_var=`echo dnet | tr '.-/+' '___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="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 922 "configure"
+#line 1051 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -928,16 +1057,16 @@
 EOF
 if eval $ac_link; then
   rm -rf conftest*
-  eval "ac_cv_lib_dnet=yes"
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   rm -rf conftest*
-  eval "ac_cv_lib_dnet=no"
+  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
 LIBS="$ac_save_LIBS"
 
 fi
-if eval "test \"`echo '$ac_cv_lib_'dnet`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
 else
@@ -946,13 +1075,14 @@
 
     if test $ac_cv_lib_dnet = no; then
       echo $ac_n "checking for -ldnet_stub""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_lib_dnet_stub'+set}'`\" = set"; then
+ac_lib_var=`echo dnet_stub | tr '.-/+' '___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="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 956 "configure"
+#line 1086 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -962,16 +1092,16 @@
 EOF
 if eval $ac_link; then
   rm -rf conftest*
-  eval "ac_cv_lib_dnet_stub=yes"
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   rm -rf conftest*
-  eval "ac_cv_lib_dnet_stub=no"
+  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
 LIBS="$ac_save_LIBS"
 
 fi
-if eval "test \"`echo '$ac_cv_lib_'dnet_stub`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
 else
@@ -985,13 +1115,14 @@
     # Not sure which flavor of 386 UNIX this is, but it seems harmless to
     # check for it.
     echo $ac_n "checking for -lnsl""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_lib_nsl'+set}'`\" = set"; then
+ac_lib_var=`echo nsl | tr '.-/+' '___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="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 995 "configure"
+#line 1126 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1001,16 +1132,16 @@
 EOF
 if eval $ac_link; then
   rm -rf conftest*
-  eval "ac_cv_lib_nsl=yes"
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   rm -rf conftest*
-  eval "ac_cv_lib_nsl=no"
+  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
 LIBS="$ac_save_LIBS"
 
 fi
-if eval "test \"`echo '$ac_cv_lib_'nsl`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
 else
@@ -1023,13 +1154,14 @@
     # But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch.
     if test "`(uname) 2>/dev/null`" != IRIX; then
       echo $ac_n "checking for -lsocket""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_lib_socket'+set}'`\" = set"; then
+ac_lib_var=`echo socket | tr '.-/+' '___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="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1033 "configure"
+#line 1165 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1039,16 +1171,16 @@
 EOF
 if eval $ac_link; then
   rm -rf conftest*
-  eval "ac_cv_lib_socket=yes"
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   rm -rf conftest*
-  eval "ac_cv_lib_socket=no"
+  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
 LIBS="$ac_save_LIBS"
 
 fi
-if eval "test \"`echo '$ac_cv_lib_'socket`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket"
 else
@@ -1127,13 +1259,14 @@
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for -l$ac_lib""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib'+set}'`\" = set"; then
+ac_lib_var=`echo $ac_lib | tr '.-/+' '___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="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1137 "configure"
+#line 1270 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1143,16 +1276,16 @@
 EOF
 if eval $ac_link; then
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib=yes"
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib=no"
+  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`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   LEXLIB="-l$ac_lib"
 else
@@ -1189,14 +1322,74 @@
   echo "$ac_t""no" 1>&6
 fi
 
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      for ac_prog in ginstall installbsd scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+	  if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    # OSF/1 installbsd also uses dspmsg, but is usable.
+	    :
+	  else
+	    ac_cv_path_install="$ac_dir/$ac_prog -c"
+	    break 2
+	  fi
+	fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_ifs"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
 echo $ac_n "checking for -li386""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_lib_i386'+set}'`\" = set"; then
+ac_lib_var=`echo i386 | tr '.-/+' '___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="-li386  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1200 "configure"
+#line 1393 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1206,16 +1399,16 @@
 EOF
 if eval $ac_link; then
   rm -rf conftest*
-  eval "ac_cv_lib_i386=yes"
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   rm -rf conftest*
-  eval "ac_cv_lib_i386=no"
+  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
 LIBS="$ac_save_LIBS"
 
 fi
-if eval "test \"`echo '$ac_cv_lib_'i386`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   LDLIBS="$LDLIBS -li386"
 else
@@ -1231,13 +1424,13 @@
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1235 "configure"
+#line 1428 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
 #include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
-char $ac_func(); 
+char $ac_func();
 
 int main() { return 0; }
 int t() {
@@ -1265,7 +1458,7 @@
 fi
 if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr '[a-z]' '[A-Z]'`
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_func 1
 EOF
@@ -1283,7 +1476,7 @@
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1287 "configure"
+#line 1480 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
@@ -1301,7 +1494,7 @@
 fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | tr '[a-z]./\055' '[A-Z]___'`
+    ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_hdr 1
 EOF
@@ -1316,7 +1509,7 @@
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1320 "configure"
+#line 1513 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -1357,6 +1550,7 @@
 rm -f conftest*
 
 fi
+
 echo "$ac_t""$ac_cv_header_stat_broken" 1>&6
 if test $ac_cv_header_stat_broken = yes; then
   cat >> confdefs.h <<\EOF
@@ -1370,7 +1564,7 @@
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1374 "configure"
+#line 1568 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1383,7 +1577,7 @@
 char **p;
 /* NEC SVR4.0.2 mips cc rejects this.  */
 struct point {int x, y;};
-static struct point const zero;
+static struct point const zero = {0,0};
 /* AIX XL C 1.02.0.0 rejects this.
    It does not let you subtract one const X* pointer from another in an arm
    of an if-expression whose if-part is not a constant expression */
@@ -1430,6 +1624,7 @@
 rm -f conftest*
 
 fi
+
 echo "$ac_t""$ac_cv_c_const" 1>&6
 if test $ac_cv_c_const = no; then
   cat >> confdefs.h <<\EOF
@@ -1447,7 +1642,7 @@
   ac_cv_c_cross=yes
 else
 cat > conftest.$ac_ext <<EOF
-#line 1451 "configure"
+#line 1646 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
@@ -1460,15 +1655,16 @@
 fi
 rm -fr conftest*
 fi
-cross_compiling=$ac_cv_c_cross
+
 echo "$ac_t""$ac_cv_c_cross" 1>&6
+cross_compiling=$ac_cv_c_cross
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
 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 1472 "configure"
+#line 1668 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1490,7 +1686,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 1494 "configure"
+#line 1690 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1508,7 +1704,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 1512 "configure"
+#line 1708 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1526,10 +1722,10 @@
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
 if test "$cross_compiling" = yes; then
-  ac_cv_header_stdc=no
+  :
 else
 cat > conftest.$ac_ext <<EOF
-#line 1533 "configure"
+#line 1729 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1550,6 +1746,7 @@
 rm -fr conftest*
 fi
 fi
+
 echo "$ac_t""$ac_cv_header_stdc" 1>&6
 if test $ac_cv_header_stdc = yes; then
   cat >> confdefs.h <<\EOF
@@ -1563,7 +1760,7 @@
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1567 "configure"
+#line 1764 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1590,27 +1787,8 @@
 fi
 
 
-if test -z "${top_srcdir}"; then
-TOP_SRCDIR=`pwd`
-else
-TOP_SRCDIR="${top_srcdir}"
-fi
 
-echo $ac_n "checking for /usr/local/etc/wine.conf""... $ac_c" 1>&6
-if test -f /usr/local/etc/wine.conf; then
-echo "$ac_t""yes" 1>&6
-WINE_INI_GLOBAL='"/usr/local/etc/wine.conf"'
-else
-echo "$ac_t""no" 1>&6
-WINE_INI_GLOBAL="\"${TOP_SRCDIR}/wine.ini\""
-fi
-
-cat >> confdefs.h <<EOF
-#define WINE_INI_GLOBAL $WINE_INI_GLOBAL
-EOF
-
-
-MAKE_RULES=$TOP_SRCDIR/Make.rules
+MAKE_RULES=Make.rules
 
 
 trap '' 1 2 15
@@ -1701,7 +1879,7 @@
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.4"
+    echo "$CONFIG_STATUS generated by autoconf version 2.7"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@ -1710,12 +1888,35 @@
 done
 
 ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
 
-trap 'rm -fr `echo "Make.rules controls/Makefile ipc/Makefile loader/Makefile memory/Makefile misc/Makefile miscemu/Makefile multimedia/Makefile objects/Makefile win32/Makefile windows/Makefile rc/Makefile debugger/Makefile debugger/readline/Makefile tools/Makefile if1632/Makefile toolkit/Makefile Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+trap 'rm -fr `echo "
+Make.rules
+Makefile
+controls/Makefile
+debugger/Makefile
+debugger/readline/Makefile
+if1632/Makefile
+ipc/Makefile
+library/Makefile
+libtest/Makefile
+loader/Makefile
+memory/Makefile
+misc/Makefile
+miscemu/Makefile
+multimedia/Makefile
+objects/Makefile
+rc/Makefile
+resources/Makefile
+tools/Makefile
+win32/Makefile
+windows/Makefile " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
 
-# Protect against being on the right side of a sed subst in config.status. 
-sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\\\&%]/\\\\&/g; 
- s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
 $ac_vpsub
 $extrasub
 s%@CFLAGS@%$CFLAGS%g
@@ -1727,9 +1928,20 @@
 s%@exec_prefix@%$exec_prefix%g
 s%@prefix@%$prefix%g
 s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
 s%@LDLIBS@%$LDLIBS%g
 s%@MAIN_TARGET@%$MAIN_TARGET%g
-s%@LANG@%$LANG%g
 s%@SET_MAKE@%$SET_MAKE%g
 s%@CC@%$CC%g
 s%@CPP@%$CPP%g
@@ -1741,7 +1953,8 @@
 s%@LEX@%$LEX%g
 s%@LEXLIB@%$LEXLIB%g
 s%@RANLIB@%$RANLIB%g
-s%@WINE_INI_GLOBAL@%$WINE_INI_GLOBAL%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
 /@MAKE_RULES@/r $MAKE_RULES
 s%@MAKE_RULES@%%g
 
@@ -1749,7 +1962,26 @@
 EOF
 cat >> $CONFIG_STATUS <<EOF
 
-CONFIG_FILES=\${CONFIG_FILES-"Make.rules controls/Makefile ipc/Makefile loader/Makefile memory/Makefile misc/Makefile miscemu/Makefile multimedia/Makefile objects/Makefile win32/Makefile windows/Makefile rc/Makefile debugger/Makefile debugger/readline/Makefile tools/Makefile if1632/Makefile toolkit/Makefile Makefile"}
+CONFIG_FILES=\${CONFIG_FILES-"Make.rules
+Makefile
+controls/Makefile
+debugger/Makefile
+debugger/readline/Makefile
+if1632/Makefile
+ipc/Makefile
+library/Makefile
+libtest/Makefile
+loader/Makefile
+memory/Makefile
+misc/Makefile
+miscemu/Makefile
+multimedia/Makefile
+objects/Makefile
+rc/Makefile
+resources/Makefile
+tools/Makefile
+win32/Makefile
+windows/Makefile "}
 EOF
 cat >> $CONFIG_STATUS <<\EOF
 for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
@@ -1784,6 +2016,10 @@
     top_srcdir="$ac_dots$ac_given_srcdir" ;;
   esac
 
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
   echo creating "$ac_file"
   rm -f "$ac_file"
   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
@@ -1796,6 +2032,7 @@
 s%@configure_input@%$configure_input%g
 s%@srcdir@%$srcdir%g
 s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
 " -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
 fi; done
 rm -f conftest.subs
diff --git a/configure.in b/configure.in
index 7eee842..27490d1 100644
--- a/configure.in
+++ b/configure.in
@@ -3,9 +3,10 @@
 dnl                         <patra@itp1.physik.tu-berlin.de>
 AC_REVISION([configure.in 1.00])
 AC_INIT(controls/edit.c)		
+AC_CONFIG_AUX_DIR(tools)
 
 # We want these before the checks, so the checks can modify their values.
-test -z "$CFLAGS" && CFLAGS="-g -O2 -Wall" AC_SUBST(CFLAGS)
+test -z "$CFLAGS" && CFLAGS="-g -O2" AC_SUBST(CFLAGS)
 test -z "$LDFLAGS" && LDFLAGS=-g AC_SUBST(LDFLAGS)
 test -z "$LDLIBS" && LDLIBS=-lm AC_SUBST(LDLIBS)
 
@@ -13,15 +14,9 @@
 
 AC_ARG_WITH(library,
 [  --with-library          build Wine as a library instead of an emulator],
-[AC_DEFINE(WINELIB) MAIN_TARGET="winelib.a"],[MAIN_TARGET="wine"])
+[AC_DEFINE(WINELIB) MAIN_TARGET="libwine.a"],[MAIN_TARGET="wine"])
 AC_SUBST(MAIN_TARGET)
 
-AC_ARG_WITH(language,
-[  --with-language=LANG    change the language (LANG=En/De/Fr/Es/No/Fi/Da)],
-[LANG="$withval"],
-[LANG=En],)
-AC_SUBST(LANG)
-
 AC_ARG_WITH(ipc,
 [  --with-ipc              use inter-process communication for DDE],
 [AC_DEFINE(CONFIG_IPC)])
@@ -34,10 +29,14 @@
 
 AC_PROG_MAKE_SET
 AC_PROG_CC
+dnl Add some options for gcc
+test "x${GCC}" = "xyes" && CFLAGS="$CFLAGS -Wall -fno-strength-reduce"
+AC_PROG_CPP
 AC_PATH_XTRA
 AC_PROG_YACC
 AC_PROG_LEX
 AC_PROG_RANLIB
+AC_PROG_INSTALL
 dnl Check for -li386 for NetBSD
 AC_CHECK_LIB(i386,i386_set_ldt,LDLIBS="$LDLIBS -li386")
 
@@ -49,27 +48,32 @@
 AC_C_CONST()
 AC_TYPE_SIZE_T()
 
-if test -z "${top_srcdir}"; then
-TOP_SRCDIR=`pwd`
-else
-TOP_SRCDIR="${top_srcdir}"
-fi
+dnl **** Generate output files ****
 
-AC_MSG_CHECKING(for /usr/local/etc/wine.conf)
-if test -f /usr/local/etc/wine.conf; then
-AC_MSG_RESULT(yes)
-WINE_INI_GLOBAL='"/usr/local/etc/wine.conf"'
-else
-AC_MSG_RESULT(no)
-WINE_INI_GLOBAL="\"${TOP_SRCDIR}/wine.ini\""
-fi
-AC_SUBST(WINE_INI_GLOBAL)
-AC_DEFINE_UNQUOTED(WINE_INI_GLOBAL,$WINE_INI_GLOBAL)
-
-MAKE_RULES=$TOP_SRCDIR/Make.rules
+MAKE_RULES=Make.rules
 AC_SUBST_FILE(MAKE_RULES)
 
-AC_OUTPUT(Make.rules controls/Makefile ipc/Makefile loader/Makefile memory/Makefile misc/Makefile miscemu/Makefile multimedia/Makefile objects/Makefile win32/Makefile windows/Makefile rc/Makefile debugger/Makefile debugger/readline/Makefile tools/Makefile if1632/Makefile toolkit/Makefile Makefile)
+AC_OUTPUT([
+Make.rules
+Makefile
+controls/Makefile
+debugger/Makefile
+debugger/readline/Makefile
+if1632/Makefile
+ipc/Makefile
+library/Makefile
+libtest/Makefile
+loader/Makefile
+memory/Makefile
+misc/Makefile
+miscemu/Makefile
+multimedia/Makefile
+objects/Makefile
+rc/Makefile
+resources/Makefile
+tools/Makefile
+win32/Makefile
+windows/Makefile ])
 
 echo
 echo "Configure finished.  Do 'make depend; make' to compile Wine."
@@ -79,5 +83,5 @@
 dnl comment-start: "dnl "
 dnl comment-end: ""
 dnl comment-start-skip: "\\bdnl\\b\\s *"
-dnl compile-command: "make configure config.h.in"
+dnl compile-command: "autoconf"
 dnl End:
diff --git a/controls/combo.c b/controls/combo.c
index e82deaa..6c3f320 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -434,7 +434,7 @@
   LPHEADLIST lphl = ComboGetListHeader(hwnd);
   WORD  wRet;
 
-  wRet = ListBoxFindString(lphl, wParam, lParam);
+  wRet = ListBoxFindString(lphl, wParam, (SEGPTR)lParam);
 
   /* XXX add functionality here */
 
@@ -447,7 +447,7 @@
 static LRESULT CBFindString(HWND hwnd, WPARAM wParam, LPARAM lParam)
 {
   LPHEADLIST lphl = ComboGetListHeader(hwnd);
-  return ListBoxFindString(lphl, wParam, lParam);
+  return ListBoxFindString(lphl, wParam, (SEGPTR)lParam);
 }
 
 /***********************************************************************
diff --git a/controls/edit.c b/controls/edit.c
index 8663d40..98c2841 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -63,7 +63,7 @@
     int SelEndLine;          /* ending line of selection */
     int SelEndCol;           /* ending column of selection */
     HFONT hFont;             /* handle of current font (if not default) */
-    HANDLE hDeletedText;     /* handle to deleted txet buffer for undo */
+    HANDLE hDeletedText;     /* handle to deleted text buffer for undo */
     int DeletedLength;       /* length of deleted text */
     int DeletedCurrLine;     /* starting line from which text was deleted */
     int DeletedCurrCol;      /* starting col from which text was deleted */
@@ -509,7 +509,15 @@
 	es->BlankLine[(es->ClientWidth / es->CharWidths[32]) + 1] = 0;
     }
 
-    if (!(cp = strchr(str, VK_TAB)))
+    if ((GetWindowLong( hwnd, GWL_STYLE ) & ES_PASSWORD))
+    {
+        int len = strlen(str);
+        char *buff = xmalloc( len+1 );
+        memset( buff, '*', len );
+        buff[len] = '\0';
+	TextOut( hdc, col - diff, row * es->txtht, buff, len );
+    }
+    else if (!(cp = strchr(str, VK_TAB)))
 	TextOut(hdc, col - diff, row * es->txtht, str, strlen(str));
     else
     {
@@ -1920,15 +1928,35 @@
  */
 static LONG EDIT_GetLineMsg(HWND hwnd, WORD wParam, LONG lParam)
 {
-    char *cp, *cp1;
-    int len;
-    unsigned char *buffer = (char *)lParam;
+    char *cp;
+    int len = 0;
+    unsigned char *buffer = (char *)PTR_SEG_TO_LIN(lParam);
 
-    cp = EDIT_TextLine(hwnd, wParam);
-    cp1 = EDIT_TextLine(hwnd, wParam + 1);
-    len = MIN((int)(cp1 - cp), (WORD)(*buffer));
+       /* the line wanted */
+    cp  = EDIT_TextLine  (hwnd, wParam);
+    len = EDIT_LineLength(hwnd, wParam);
+    
+       /* if cp==NULL nothing will be copied - I hope */
+    if ((char *) NULL == cp && 0 != len) {
+       fprintf(stdnimp,"edit: EDIT_GetLineMsg cp == NULL && len != 0"); 
+       return 0L;
+    }
+
+    if (0>len)
+       fprintf(stdnimp,"edit: EDIT_GetLineMsg len < 0"); 
+
+       /* suggested reason for the following line:
+          never copy more than the buffer's size ? 
+          I thought that this would make sense only if
+          the lstrcpyn fun was used instead of the gnu strncpy.
+       */
+    len = MIN(len, (WORD)(*buffer));
+
+    if (0>len)
+       fprintf(stdnimp,"edit: EDIT_GetLineMsg len < 0 after MIN"); 
+
     dprintf_edit( stddeb, "EDIT_GetLineMsg: %d %d, len %d\n", (int)(WORD)(*buffer), (int)(WORD)(*(char *)buffer), len);
-    strncpy(buffer, cp, len);
+    lstrcpyn(buffer, cp, len);
 
     return (LONG)len;
 }
diff --git a/controls/listbox.c b/controls/listbox.c
index 0beca3e..d1b0df7 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -759,7 +759,7 @@
 
   CreateListBoxStruct(hwnd, ODT_LISTBOX, dwStyle, GetParent(hwnd));
   lphl = ListBoxGetStorageHeader(hwnd);
-  dprintf_listbox(stddeb,"ListBox created: lphl = %p dwStyle = "NPFMT":"NPFMT"\n", 
+  dprintf_listbox(stddeb,"ListBox created: lphl = %p dwStyle = %04x:%04x\n", 
 			  lphl, HIWORD(dwStyle), LOWORD(dwStyle));
 
   GetClientRect(hwnd,&rect);
@@ -1431,7 +1431,7 @@
 static LONG LBFindString(HWND hwnd, WORD wParam, LONG lParam)
 {
   LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
-  return ListBoxFindString(lphl, wParam, lParam);
+  return ListBoxFindString(lphl, wParam, (SEGPTR)lParam);
 }
 
 /***********************************************************************
@@ -1600,7 +1600,7 @@
   LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
   WORD  wRet;
 
-  wRet = ListBoxFindString(lphl, wParam, lParam);
+  wRet = ListBoxFindString(lphl, wParam, (SEGPTR)lParam);
 
   /* XXX add functionality here */
 
diff --git a/controls/menu.c b/controls/menu.c
index 41f5a8b..63f424d 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -23,14 +23,10 @@
 #include "win.h"
 #include "message.h"
 #include "graphics.h"
+#include "resource.h"
 #include "stddebug.h"
-/* #define DEBUG_MENU */
-/* #define DEBUG_MENUCALC */
-/* #define DEBUG_MENUSHORTCUT */
 #include "debug.h"
 
-#include "../rc/sysres.h"
-
   /* Dimension of the menu bitmaps */
 static WORD check_bitmap_width = 0, check_bitmap_height = 0;
 static WORD arrow_bitmap_width = 0, arrow_bitmap_height = 0;
@@ -265,7 +261,7 @@
       mistruct->itemData = (long int)lpitem->item_text;
       mistruct->itemHeight = 16;
       mistruct->itemWidth = 30;
-      SendMessage(hwndOwner,WM_MEASUREITEM,0,mistrsegp);
+      SendMessage(hwndOwner,WM_MEASUREITEM,0,(LPARAM)mistrsegp);
       lpitem->rect.bottom += mistruct->itemHeight;
       lpitem->rect.right += mistruct->itemWidth;
       dprintf_menu(stddeb,"DrawMenuItem: MeasureItem %04x %d:%d!\n",
@@ -475,7 +471,7 @@
       distruct->hwndItem = hwnd;
       distruct->hDC = hdc;
       distruct->rcItem = lpitem->rect;
-      SendMessage(hwnd,WM_DRAWITEM,0,distrsegp);
+      SendMessage(hwnd,WM_DRAWITEM,0,(LPARAM)distrsegp);
       return;
     }
     if (menuBar && (lpitem->item_flags & MF_SEPARATOR)) return;
@@ -633,7 +629,7 @@
     int i;
     WND *wndPtr = WIN_FindWndPtr( hwnd );
     
-    lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( wndPtr->wIDmenu );
+    lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( (HMENU)wndPtr->wIDmenu );
     if (lppop == NULL || lprect == NULL) return SYSMETRICS_CYMENU;
     dprintf_menu(stddeb,"MENU_DrawMenuBar("NPFMT", %p, %p); !\n", 
 		 hDC, lprect, lppop);
@@ -1454,7 +1450,7 @@
     SendMessage( hwnd, WM_ENTERMENULOOP, 0, 0 );
     SendMessage( hwnd, WM_INITMENU, wndPtr->wIDmenu, 0 );
       /* Select first selectable item */
-    MENU_SelectItem( hwnd, wndPtr->wIDmenu, NO_SELECTED_ITEM );
+    MENU_SelectItem( hwnd, (HMENU)wndPtr->wIDmenu, NO_SELECTED_ITEM );
     MENU_SelectNextItem( hwnd, (HMENU)wndPtr->wIDmenu );
     MENU_TrackMenu( (HMENU)wndPtr->wIDmenu, TPM_LEFTALIGN | TPM_LEFTBUTTON,
 		    0, 0, hwnd, NULL );
@@ -1672,7 +1668,7 @@
 /**********************************************************************
  *			GetMenuItemCount		[USER.263]
  */
-WORD GetMenuItemCount(HMENU hMenu)
+INT GetMenuItemCount(HMENU hMenu)
 {
 	LPPOPUPMENU	menu;
 	dprintf_menu(stddeb,"GetMenuItemCount("NPFMT");\n", hMenu);
@@ -1724,7 +1720,7 @@
       /* Find where to insert new item */
 
     if ((wFlags & MF_BYPOSITION) && 
-        ((nPos == (UINT)-1) || (nPos == GetMenuItemCount(hMenu))))
+        ((nPos == (UINT)-1) || (nPos == (UINT)GetMenuItemCount(hMenu))))
     {
           /* Special case: append to menu 
              Some programs specify the menu length to do that */
@@ -1857,7 +1853,7 @@
 {
     MENUITEM *item = MENU_FindItem( &hMenu, &nPos, wFlags );
     if (!item) return FALSE;
-    if (item->item_flags & MF_POPUP) DestroyMenu( item->item_id );
+    if (item->item_flags & MF_POPUP) DestroyMenu( (HMENU)item->item_id );
       /* nPos is now the position of the item */
     RemoveMenu( hMenu, nPos, wFlags | MF_BYPOSITION );
     return TRUE;
@@ -2093,7 +2089,7 @@
     if ((UINT)nPos >= lppop->nItems) return 0;
     lpitem = (MENUITEM *) USER_HEAP_LIN_ADDR( lppop->hItems );
     if (!(lpitem[nPos].item_flags & MF_POPUP)) return 0;
-    return lpitem[nPos].item_id;
+    return (HMENU)lpitem[nPos].item_id;
 }
 
 
@@ -2190,9 +2186,12 @@
 HMENU CopySysMenu()
 {
     HMENU hMenu;
+    HGLOBAL handle;
     LPPOPUPMENU menu;
 
-    hMenu = LoadMenuIndirect( sysres_MENU_SYSMENU.bytes );
+    if (!(handle = SYSRES_LoadResource( SYSRES_MENU_SYSMENU ))) return 0;
+    hMenu = LoadMenuIndirect( GlobalLock( handle ) );
+    SYSRES_FreeResource( handle );
     if(!hMenu)
     {
 	dprintf_menu(stddeb,"No SYSMENU\n");
@@ -2230,17 +2229,18 @@
 	    AppendMenu(hMenu, popup_item->item_flags, 
 	    	(UINT)hSubMenu, popup_item->item_text);
 	    }
-	else {
-		MENUITEMTEMPLATE *normal_item = (MENUITEMTEMPLATE *) item;
-		next_item = (WORD *) (normal_item->item_text + 
-		strlen(normal_item->item_text) + 1);
-		if (strlen(normal_item->item_text) == 0 && normal_item->item_id == 0) 
-			normal_item->item_flags |= MF_SEPARATOR;
-		AppendMenu(hMenu, normal_item->item_flags, 
-			normal_item->item_id, normal_item->item_text);
-	    }
-	}
-    while (!(*item & MF_END));
+	else
+        {
+            MENUITEMTEMPLATE *normal_item = (MENUITEMTEMPLATE *) item;
+            WORD flags = normal_item->item_flags;
+            next_item = (WORD *) (normal_item->item_text + 
+                                  strlen(normal_item->item_text) + 1);
+            if (!normal_item->item_text[0] && !normal_item->item_id) 
+                flags |= MF_SEPARATOR;  /* FIXME: do this in InsertMenu? */
+            AppendMenu( hMenu, flags, normal_item->item_id,
+                        normal_item->item_text );
+        }
+    } while (!(*item & MF_END));
     return next_item;
 }
 
diff --git a/debugger/Makefile.in b/debugger/Makefile.in
index c91b01e..3962061 100644
--- a/debugger/Makefile.in
+++ b/debugger/Makefile.in
@@ -25,6 +25,6 @@
 	$(LEX) -8 -I debug.l
 
 clean::
-	rm -f y.tab.c y.tab.h lex.yy.c
+	$(RM) y.tab.c y.tab.h lex.yy.c
 
 ### Dependencies:
diff --git a/debugger/dbg.y b/debugger/dbg.y
index fbca65e..0d9f94c 100644
--- a/debugger/dbg.y
+++ b/debugger/dbg.y
@@ -235,6 +235,19 @@
         if (newmode != dbg_mode)
             fprintf(stderr,"In %d bit mode.\n", dbg_mode = newmode);
 
+        if (signal != SIGTRAP)  /* This is a real crash, dump some info */
+        {
+            DEBUG_InfoRegisters();
+            DEBUG_InfoStack();
+            if (dbg_mode == 16)
+            {
+                LDT_Print( SELECTOR_TO_ENTRY(DS_reg(DEBUG_context)), 1 );
+                if (ES_reg(DEBUG_context) != DS_reg(DEBUG_context))
+                    LDT_Print( SELECTOR_TO_ENTRY(ES_reg(DEBUG_context)), 1 );
+            }
+            DEBUG_BackTrace();
+        }
+
         /* Show where we crashed */
         DEBUG_PrintAddress( &addr, dbg_mode );
         fprintf(stderr,":  ");
diff --git a/debugger/stack.c b/debugger/stack.c
index be7fb9b..9b4e09f 100644
--- a/debugger/stack.c
+++ b/debugger/stack.c
@@ -40,13 +40,13 @@
     {  /* 32-bit mode */
         addr.seg = 0;
         addr.off = ESP_reg(DEBUG_context);
-        DEBUG_ExamineMemory( &addr, 10, 'x' );
+        DEBUG_ExamineMemory( &addr, 24, 'x' );
     }
     else  /* 16-bit mode */
     {
         addr.seg = SS_reg(DEBUG_context);
         addr.off = SP_reg(DEBUG_context);
-        DEBUG_ExamineMemory( &addr, 10, 'w' );
+        DEBUG_ExamineMemory( &addr, 24, 'w' );
     }
     fprintf(stderr,"\n");
 }
diff --git a/if1632/Makefile.in b/if1632/Makefile.in
index 60ac907..b8926e2 100644
--- a/if1632/Makefile.in
+++ b/if1632/Makefile.in
@@ -1,5 +1,4 @@
 TOPSRC = @top_srcdir@
-BUILD  = $(TOPSRC)/tools/build
 
 MODULE = if1632
 
@@ -41,7 +40,7 @@
 $(SPEC16_FILES) $(SPEC32_FILES): $(BUILD)
 
 $(BUILD) checkbuild:
-	cd $(TOPSRC)/tools; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' 'LANG=$(LANG)' build
+	cd $(TOPSRC)/tools; $(SUBMAKE) build
 
 call16.S: $(TOPSRC)/include/callback.h $(BUILD)
 	$(BUILD) -call16 `cat $(TOPSRC)/include/callback.h | grep "extern.*CallTo16_" | sed 's/.*CallTo16_\(.*\)(.*/\1/' | sort | uniq` > call16.S
diff --git a/if1632/commdlg.spec b/if1632/commdlg.spec
index 127e064..3f2e25c 100644
--- a/if1632/commdlg.spec
+++ b/if1632/commdlg.spec
@@ -1,29 +1,29 @@
 name	commdlg
 id	14
 
-  1   pascal  GETOPENFILENAME(ptr) GetOpenFileName
-  2   pascal  GETSAVEFILENAME(ptr) GetSaveFileName
-  5   pascal  CHOOSECOLOR(ptr) ChooseColor
-  6   pascal  FILEOPENDLGPROC(word word word long) FileOpenDlgProc
-  7   pascal  FILESAVEDLGPROC(word word word long) FileSaveDlgProc
-  8   pascal  COLORDLGPROC(word word word long) ColorDlgProc
-#  9   pascal  LOADALTERBITMAP exported, shared data
- 11   pascal  FINDTEXT(ptr) FindText
- 12   pascal  REPLACETEXT(ptr) ReplaceText
- 13   pascal  FINDTEXTDLGPROC(word word word long) FindTextDlgProc
- 14   pascal  REPLACETEXTDLGPROC(word word word long) ReplaceTextDlgProc
- 15   stub  ChooseFont
-# 16   pascal  FORMATCHARDLGPROC exported, shared data
-# 18   pascal  FONTSTYLEENUMPROC exported, shared data
-# 19   pascal  FONTFAMILYENUMPROC exported, shared data
- 20   pascal  PRINTDLG(ptr) PrintDlg
- 21   pascal  PRINTDLGPROC(word word word long) PrintDlgProc
- 22   pascal  PRINTSETUPDLGPROC(word word word long) PrintSetupDlgProc
-# 23   pascal  EDITINTEGERONLY exported, shared data
-# 25   pascal  WANTARROWS exported, shared data
- 26   pascal  COMMDLGEXTENDEDERROR() CommDlgExtendError
- 27   pascal  GETFILETITLE(ptr ptr word) GetFileTitle
-# 28   pascal  WEP exported, shared data
-# 29   pascal  DWLBSUBCLASS exported, shared data
-# 30   pascal  DWUPARROWHACK exported, shared data
-# 31   pascal  DWOKSUBCLASS exported, shared data
+1   pascal16 GetOpenFileName(ptr) GetOpenFileName
+2   pascal16 GetSaveFileName(ptr) GetSaveFileName
+5   pascal16 ChooseColor(ptr) ChooseColor
+6   pascal   FileOpenDlgProc(word word word long) FileOpenDlgProc
+7   pascal   FileSaveDlgProc(word word word long) FileSaveDlgProc
+8   pascal   ColorDlgProc(word word word long) ColorDlgProc
+#9   pascal  LOADALTERBITMAP exported, shared data
+11  pascal16 FindText(ptr) FindText
+12  pascal16 ReplaceText(ptr) ReplaceText
+13  pascal   FindTextDlgProc(word word word long) FindTextDlgProc
+14  pascal   ReplaceTextDlgProc(word word word long) ReplaceTextDlgProc
+15  stub ChooseFont
+#16  pascal  FORMATCHARDLGPROC exported, shared data
+#18  pascal  FONTSTYLEENUMPROC exported, shared data
+#19  pascal  FONTFAMILYENUMPROC exported, shared data
+20  pascal16 PrintDlg(ptr) PrintDlg
+21  pascal   PrintDlgProc(word word word long) PrintDlgProc
+22  pascal   PrintSetupDlgProc(word word word long) PrintSetupDlgProc
+#23  pascal  EDITINTEGERONLY exported, shared data
+#25  pascal  WANTARROWS exported, shared data
+26  pascal   CommDlgExtendedError() CommDlgExtendedError
+27  pascal16 GetFileTitle(ptr ptr word) GetFileTitle
+#28  pascal  WEP exported, shared data
+#29  pascal  DWLBSUBCLASS exported, shared data
+#30  pascal  DWUPARROWHACK exported, shared data
+#31  pascal  DWOKSUBCLASS exported, shared data
diff --git a/if1632/kernel32.spec b/if1632/kernel32.spec
index bb122a0..e7d3523 100644
--- a/if1632/kernel32.spec
+++ b/if1632/kernel32.spec
@@ -286,7 +286,7 @@
 0282 stub GetSystemDirectoryA
 0283 stub GetSystemDirectoryW
 0284 stub GetSystemInfo
-0285 stub GetSystemTime
+0285 	stdcall GetSystemTime(ptr) GetSystemTime
 0286 stub GetSystemTimeAdjustment
 0287 stub GetTapeParameters
 0288 stub GetTapePosition
@@ -525,7 +525,7 @@
 0520 stub SetupComm
 0521 stub ShowConsoleCursor
 0522 stub SizeofResource
-0523 stub Sleep
+0523 	stdcall Sleep(long) Sleep
 0524 stub SleepEx
 0525 stub SuspendThread
 0526 stub SystemTimeToFileTime
diff --git a/if1632/relay.c b/if1632/relay.c
index df41747..6f6f7c8 100644
--- a/if1632/relay.c
+++ b/if1632/relay.c
@@ -173,8 +173,10 @@
     struct dll_table_s *table;
     char *name;
 
-    if (*(DWORD *)PTR_SEG_TO_LIN(IF1632_Stack32_base) != 0xDEADBEEF) {
+    if (*(DWORD *)PTR_SEG_TO_LIN(IF1632_Stack32_base) != 0xDEADBEEF)
+    {
 	fprintf(stderr, "Wine wrote past the end of the 32 bit stack. Please report this.\n");
+        exit(1);  /* There's probably no point in going on */
     }
     if (!debugging_relay) return;
 
@@ -186,13 +188,16 @@
     switch(func_type)
     {
     case 0: /* long */
-        printf( "retval=0x%08x ds=%04x\n", ret_val, frame->ds );
+        printf( "retval=0x%08x ret=%04x:%04x ds=%04x\n",
+                ret_val, frame->cs, frame->ip, frame->ds );
         break;
     case 1: /* word */
-        printf( "retval=0x%04x ds=%04x\n", ret_val & 0xffff, frame->ds );
+        printf( "retval=0x%04x ret=%04x:%04x ds=%04x\n",
+                ret_val & 0xffff, frame->cs, frame->ip, frame->ds );
         break;
     case 2: /* regs */
-        printf( "retval=none ds=%04x\n", frame->ds );
+        printf( "retval=none ret=%04x:%04x ds=%04x\n",
+                frame->cs, frame->ip, frame->ds );
         {
             struct sigcontext_struct *context = (struct sigcontext_struct *)&args32;
             printf( "     AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08lx\n",
diff --git a/include/commdlg.h b/include/commdlg.h
index dcc96b9..f51e4b6 100644
--- a/include/commdlg.h
+++ b/include/commdlg.h
@@ -290,6 +290,15 @@
 #define FINDDLG		       		9
 #define REPLACEDLG	       		10
 
+BOOL  ChooseColor(LPCHOOSECOLOR lpChCol);
+DWORD CommDlgExtendedError(void);
+BOOL  FindText(LPFINDREPLACE lpFind);
+short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf);
+BOOL  GetOpenFileName(LPOPENFILENAME lpofn);
+BOOL  GetSaveFileName(LPOPENFILENAME lpofn);
+BOOL  PrintDlg(LPPRINTDLG lpPrint);
+BOOL  ReplaceText(LPFINDREPLACE lpFind);
+
 LRESULT FileOpenDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
 LRESULT FileSaveDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
 LRESULT ColorDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
diff --git a/include/global.h b/include/global.h
index 6ea7b40..d1692be 100644
--- a/include/global.h
+++ b/include/global.h
@@ -16,7 +16,7 @@
     int shmid;
 } SHMDATA;
 
-extern HGLOBAL GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size,
+extern HGLOBAL GLOBAL_CreateBlock( WORD flags, const void *ptr, DWORD size,
                                    HGLOBAL hOwner, BOOL isCode,
                                    BOOL is32Bit, BOOL isReadOnly,
 				   SHMDATA *shmdata);
diff --git a/include/kernel32.h b/include/kernel32.h
index 501e8d8..367a639 100644
--- a/include/kernel32.h
+++ b/include/kernel32.h
@@ -56,16 +56,7 @@
         HANDLE hStdError;
 } STARTUPINFO, *LPSTARTUPINFO;
 
-typedef struct {
-        WORD wYear;
-        WORD wMonth;
-        WORD wDayOfWeek;
-        WORD wDay;
-        WORD wHour;
-        WORD wMinute;
-        WORD wSecond;
-        WORD wMilliseconds;
-} SYSTEMTIME, *LPSYSTEMTIME;
+/* SYSTEMTIME, and LPSYSTEMTIME moved to include/windows.h (JBP) */
 
 typedef struct {
         LONG Bias;
diff --git a/include/libres.h b/include/libres.h
index 918f042..a719692 100644
--- a/include/libres.h
+++ b/include/libres.h
@@ -6,18 +6,16 @@
 
 #ifdef WINELIB
 
-#include "windows.h"
+#include "wintypes.h"
 #include "resource.h"
 
-void    LIBRES_RegisterResources(struct resource** Res);
-
-INT     LIBRES_AccessResource( HINSTANCE hModule, HRSRC hRsrc );
-HGLOBAL LIBRES_AllocResource( HINSTANCE hModule, HRSRC hRsrc, DWORD size );
-HRSRC   LIBRES_FindResource( HINSTANCE hModule, LPCSTR name, LPCSTR type );
-BOOL    LIBRES_FreeResource( HGLOBAL handle );
-HGLOBAL LIBRES_LoadResource( HINSTANCE hModule, HRSRC hRsrc );
-LPVOID  LIBRES_LockResource( HGLOBAL handle );
-DWORD   LIBRES_SizeofResource( HINSTANCE hModule, HRSRC hRsrc );
+extern INT     LIBRES_AccessResource( HINSTANCE hModule, HRSRC hRsrc );
+extern HGLOBAL LIBRES_AllocResource( HINSTANCE hModule, HRSRC hRsrc, DWORD size );
+extern HRSRC   LIBRES_FindResource( HINSTANCE hModule, LPCSTR name, LPCSTR type );
+extern BOOL    LIBRES_FreeResource( HGLOBAL handle );
+extern HGLOBAL LIBRES_LoadResource( HINSTANCE hModule, HRSRC hRsrc );
+extern LPVOID  LIBRES_LockResource( HGLOBAL handle );
+extern DWORD   LIBRES_SizeofResource( HINSTANCE hModule, HRSRC hRsrc );
 
 #endif /* WINELIB */
 
diff --git a/include/message.h b/include/message.h
index 8956faf..85159b0 100644
--- a/include/message.h
+++ b/include/message.h
@@ -23,7 +23,7 @@
 
 typedef struct tagMESSAGEQUEUE
 {
-  WORD      next;                   /* 00 Next queue */
+  HANDLE    next;                   /* 00 Next queue */
   HTASK     hTask;                  /* 02 hTask owning the queue */
   WORD      msgSize;                /* 04 Size of messages in the queue */
   WORD      msgCount;               /* 06 Number of waiting messages */
diff --git a/include/module.h b/include/module.h
index 5ab729f..3ca58cc 100644
--- a/include/module.h
+++ b/include/module.h
@@ -113,7 +113,7 @@
 extern int MODULE_OpenFile( HMODULE hModule );
 extern LPSTR MODULE_GetModuleName( HMODULE hModule );
 extern WORD MODULE_GetOrdinal( HMODULE hModule, char *name );
-extern DWORD MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal );
+extern SEGPTR MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal );
 extern BOOL MODULE_SetEntryPoint( HMODULE hModule, WORD ordinal, WORD offset );
 extern LPSTR MODULE_GetEntryPointName( HMODULE hModule, WORD ordinal );
 
diff --git a/include/resource.h b/include/resource.h
index 26d5897..358a43e 100644
--- a/include/resource.h
+++ b/include/resource.h
@@ -9,6 +9,40 @@
 
 #include "wintypes.h"
 
+struct resource
+{
+    int id;
+    int type;
+    const char *name;
+    const unsigned char* bytes;
+    unsigned size;
+};
+
+/* Built-in resources */
+typedef enum
+{
+    SYSRES_MENU_SYSMENU,
+    SYSRES_DIALOG_MSGBOX,
+    SYSRES_DIALOG_SHELL_ABOUT_MSGBOX,
+    SYSRES_DIALOG_OPEN_FILE,
+    SYSRES_DIALOG_SAVE_FILE,
+    SYSRES_DIALOG_PRINT,
+    SYSRES_DIALOG_PRINT_SETUP,
+    SYSRES_DIALOG_CHOOSE_FONT,
+    SYSRES_DIALOG_CHOOSE_COLOR,
+    SYSRES_DIALOG_FIND_TEXT,
+    SYSRES_DIALOG_REPLACE_TEXT
+} SYSTEM_RESOURCE;
+
+extern void LIBRES_RegisterResources(const struct resource* const * Res);
+
+#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)
+#define WINE_CONSTRUCTOR  __attribute__((constructor))
+#define HAVE_WINE_CONSTRUCTOR
+#else
+#define WINE_CONSTRUCTOR
+#endif
+
 extern int NE_AccessResource( HMODULE hModule, HRSRC hRsrc );
 extern BOOL NE_FreeResource( HMODULE hModule, HGLOBAL handle );
 extern HRSRC NE_FindResource( HMODULE hModule, SEGPTR typeId, SEGPTR resId );
@@ -17,19 +51,7 @@
 extern HGLOBAL NE_AllocResource( HMODULE hModule, HRSRC hRsrc, DWORD size );
 extern HGLOBAL NE_LoadResource( HMODULE hModule,  HRSRC hRsrc );
 
-struct resource
-{
-        int id,type;
-        char *name;
-        unsigned char* bytes;
-        unsigned size;
-};
-
-#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)
-#define WINE_CONSTRUCTOR  __attribute__((constructor))
-#define HAVE_WINE_CONSTRUCTOR
-#else
-#define WINE_CONSTRUCTOR
-#endif
+extern HANDLE SYSRES_LoadResource( SYSTEM_RESOURCE id );
+extern void SYSRES_FreeResource( HANDLE handle );
 
 #endif /* __WINE_RESOURCE_H */
diff --git a/include/selectors.h b/include/selectors.h
index 83a5309..d06f13d 100644
--- a/include/selectors.h
+++ b/include/selectors.h
@@ -10,9 +10,10 @@
 #include "windows.h"
 #include "ldt.h"
 
-extern WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type,
-                                 BOOL is32bit, BOOL readonly );
-extern WORD SELECTOR_ReallocBlock( WORD sel, void *base, DWORD size,
+extern WORD SELECTOR_AllocBlock( const void *base, DWORD size,
+				 enum seg_type type, BOOL is32bit,
+				 BOOL readonly );
+extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size,
                                    enum seg_type type, BOOL is32bit,
                                    BOOL readonly );
 
diff --git a/include/shell.h b/include/shell.h
index 652f481..88ca4b1 100644
--- a/include/shell.h
+++ b/include/shell.h
@@ -7,15 +7,15 @@
 extern void SHELL_SaveRegistry();
 extern BOOL SHELL_Init();
 
-#define ERROR_SUCCESS           0L
-#define ERROR_BADDB             1L
-#define ERROR_BADKEY            2L
-#define ERROR_CANTOPEN          3L
-#define ERROR_CANTREAD          4L
-#define ERROR_CANTWRITE         5L
-#define ERROR_OUTOFMEMORY       6L
-#define ERROR_INVALID_PARAMETER 7L
-#define ERROR_ACCESS_DENIED     8L
+#define SHELL_ERROR_SUCCESS           0L
+#define SHELL_ERROR_BADDB             1L
+#define SHELL_ERROR_BADKEY            2L
+#define SHELL_ERROR_CANTOPEN          3L
+#define SHELL_ERROR_CANTREAD          4L
+#define SHELL_ERROR_CANTWRITE         5L
+#define SHELL_ERROR_OUTOFMEMORY       6L
+#define SHELL_ERROR_INVALID_PARAMETER 7L
+#define SHELL_ERROR_ACCESS_DENIED     8L
 
 #define REG_SZ                  1           /* string type */
 
diff --git a/include/windows.h b/include/windows.h
index e0430aa..3934834 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -1104,7 +1104,11 @@
 #define ONE5STOPBITS	1
 #define TWOSTOPBITS	2
 #define IGNORE		0
+#ifdef WINELIB32
+#define INFINITE        0xFFFFFFFF
+#else
 #define INFINITE	0xFFFF
+#endif
 
 #define CE_RXOVER	0x0001
 #define CE_OVERRUN	0x0002
@@ -2273,7 +2277,6 @@
 #define LMEM_ZEROINIT       0x0040
 #define LMEM_MODIFY         0x0080
 #define LMEM_DISCARDABLE    0x0F00
-#define LMEM_WINE_ALIGN     0x1000
 
 #define GMEM_FIXED          0x0000
 #define GMEM_MOVEABLE       0x0002
@@ -2510,6 +2513,18 @@
 #define DBF_APPLICATION     0x0008
 #define DBF_DRIVER          0x0010
 
+/* Win32-specific structures */
+
+typedef struct {
+        WORD wYear;
+        WORD wMonth;
+        WORD wDayOfWeek;
+        WORD wDay;
+        WORD wHour;
+        WORD wMinute;
+        WORD wSecond;
+        WORD wMilliseconds;
+} SYSTEMTIME, *LPSYSTEMTIME;
 
 #ifndef WINELIB
 #pragma pack(4)
@@ -2657,7 +2672,7 @@
 WORD       EnumClipboardFormats(WORD);
 int        EnumFonts(HDC,LPSTR,FARPROC,LPSTR);
 BOOL       EnumMetaFile(HDC,LOCALHANDLE,FARPROC,BYTE*);
-int        EnumObjects(HDC,int,FARPROC,LPSTR);
+int        EnumObjects(HDC,int,FARPROC,LPARAM);
 int        EnumProps(HWND,FARPROC);
 BOOL       EnumTaskWindows(HANDLE,FARPROC,LONG);
 BOOL       EnumWindows(FARPROC,LONG);
@@ -2762,10 +2777,11 @@
 void       GetKeyboardState(BYTE*);
 int        GetKeyboardType(int);
 HWND       GetLastActivePopup(HWND);
+VOID       GetLocalTime(LPSYSTEMTIME);     /* Win32 */
 WORD       GetMapMode(HDC);
 HMENU      GetMenu(HWND);
 DWORD      GetMenuCheckMarkDimensions(void);
-WORD       GetMenuItemCount(HMENU);
+INT        GetMenuItemCount(HMENU);
 UINT       GetMenuItemID(HMENU,int);
 UINT       GetMenuState(HMENU,UINT,UINT);
 int        GetMenuString(HMENU,UINT,LPSTR,short,UINT);
@@ -2815,6 +2831,7 @@
 int        GetSystemMetrics(WORD);
 WORD       GetSystemPaletteEntries(HDC,WORD,WORD,LPPALETTEENTRY);
 WORD       GetSystemPaletteUse(HDC);
+VOID       GetSystemTime(LPSYSTEMTIME);    /* Win32 */
 DWORD      GetTabbedTextExtent(HDC,LPSTR,int,int,LPINT);
 HINSTANCE  GetTaskDS(void);
 HGLOBAL    GetTaskQueue(HTASK);
@@ -3143,6 +3160,7 @@
 void       ShowScrollBar(HWND,WORD,BOOL);
 BOOL       ShowWindow(HWND,int);
 DWORD      SizeofResource(HINSTANCE,HRSRC);
+VOID       Sleep(DWORD);      /* Win32 */
 int        StartSound(void);
 int        StopSound(void);
 BOOL       StretchBlt(HDC,short,short,short,short,HDC,short,short,short,short,DWORD);
diff --git a/include/winpos.h b/include/winpos.h
index 56cabb7..8660036 100644
--- a/include/winpos.h
+++ b/include/winpos.h
@@ -28,7 +28,7 @@
 
 extern void WINPOS_FindIconPos( HWND hwnd );
 extern BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus);
-extern HWND WINPOS_ChangeActiveWindow( HWND hwnd, BOOL mouseMsg );
+extern BOOL WINPOS_ChangeActiveWindow( HWND hwnd, BOOL mouseMsg );
 extern LONG WINPOS_SendNCCalcSize( HWND hwnd, BOOL calcValidRect,
 				   RECT *newWindowRect, RECT *oldWindowRect,
 				   RECT *oldClientRect, WINDOWPOS *winpos,
diff --git a/include/wintypes.h b/include/wintypes.h
index 0d7689a..30ecb94 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -34,6 +34,7 @@
 typedef void* SEGPTR;
 #define UIFMT "%u"
 #define NPFMT "%p"
+#define SPFMT "%p"
 #else
 typedef short INT;
 typedef unsigned short UINT;
@@ -42,13 +43,15 @@
 typedef WORD NPVOID;
 typedef DWORD SEGPTR;
 #define UIFMT "%hu"
-#define NPFMT "%04X"
+#define NPFMT "%04x"
+#define SPFMT "%08lx"
 #endif
 typedef LONG LPARAM;
 typedef LONG LRESULT;
 typedef DWORD HHOOK;
 typedef char *LPSTR;
 typedef const char *LPCSTR;
+typedef LPCSTR LPCTSTR;
 typedef char *NPSTR;
 typedef INT *LPINT;
 typedef UINT *LPUINT;
diff --git a/library/Makefile.in b/library/Makefile.in
new file mode 100644
index 0000000..9e27caa
--- /dev/null
+++ b/library/Makefile.in
@@ -0,0 +1,17 @@
+TOPSRC = @top_srcdir@
+MODULE = library
+
+C_SRCS = \
+	atom.c \
+	arch.c \
+	heap.c \
+	libres.c \
+	miscstubs.c \
+	sup.c \
+	winmain.c
+
+all: $(MODULE).o
+
+@MAKE_RULES@
+
+### Dependencies:
diff --git a/toolkit/README.libres b/library/README.libres
similarity index 100%
rename from toolkit/README.libres
rename to library/README.libres
diff --git a/toolkit/README.resources b/library/README.resources
similarity index 100%
rename from toolkit/README.resources
rename to library/README.resources
diff --git a/toolkit/arch.c b/library/arch.c
similarity index 100%
rename from toolkit/arch.c
rename to library/arch.c
diff --git a/toolkit/atom.c b/library/atom.c
similarity index 100%
rename from toolkit/atom.c
rename to library/atom.c
diff --git a/toolkit/heap.c b/library/heap.c
similarity index 95%
rename from toolkit/heap.c
rename to library/heap.c
index 7bb3afd..6148c53 100644
--- a/toolkit/heap.c
+++ b/library/heap.c
@@ -79,11 +79,8 @@
     HANDLE hMem;
 
     slot = HEAP_GetFreeSlot (&hMem);
-    if (flags & LMEM_WINE_ALIGN)
-	m = memalign (4, bytes);
-    else
-	m = malloc (bytes);
-    if (m){
+    if ((m = malloc (bytes)))
+    {
 	*slot = m;
 	if (flags & LMEM_ZEROINIT)
 	    bzero (m, bytes);
@@ -221,11 +218,8 @@
     HeapData* m;
 
     bytes+=sizeof(HeapData);
-    if (flags & LMEM_WINE_ALIGN)
-	m = memalign (4, bytes);
-    else
-	m = malloc (bytes);
-    if (m){
+    if ((m = malloc (bytes)))
+    {
 	if (flags & LMEM_ZEROINIT)
 	    bzero (m, bytes);
     }
diff --git a/toolkit/libres.c b/library/libres.c
similarity index 89%
rename from toolkit/libres.c
rename to library/libres.c
index ae23b41..5f4c5b5 100644
--- a/toolkit/libres.c
+++ b/library/libres.c
@@ -7,29 +7,26 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include "libres.h"
+#include "windows.h"
+#include "xmalloc.h"
 
 typedef struct RLE
 {
-  struct resource** Resources;  /* NULL-terminated array of pointers */
-  struct RLE* next;
+    const struct resource* const * Resources;  /* NULL-terminated array of pointers */
+    struct RLE* next;
 } ResListE;
 
 static ResListE* ResourceList=NULL;
 
-void LIBRES_RegisterResources(struct resource** Res)
+void LIBRES_RegisterResources(const struct resource* const * Res)
 {
   ResListE** Curr;
   ResListE* n;
   for(Curr=&ResourceList; *Curr; Curr=&((*Curr)->next)) { }
   n=xmalloc(sizeof(ResListE));
-  if(n)
-  {
-    n->Resources=Res;
-    n->next=NULL;
-    *Curr=n;
-  }
-  else
-    fprintf(stderr,"LIBRES_RegisterResources(): Out of memory.\n");
+  n->Resources=Res;
+  n->next=NULL;
+  *Curr=n;
 }
 
 /**********************************************************************
@@ -39,7 +36,7 @@
 {
   int nameid=0,typeid;
   ResListE* ResBlock;
-  struct resource** Res;
+  const struct resource* const * Res;
 
   if(HIWORD(name))
   {
diff --git a/toolkit/miscstubs.c b/library/miscstubs.c
similarity index 98%
rename from toolkit/miscstubs.c
rename to library/miscstubs.c
index edab69e..8f62d4c 100644
--- a/toolkit/miscstubs.c
+++ b/library/miscstubs.c
@@ -109,13 +109,13 @@
     return handle;
 }
 
-HGLOBAL GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size,
+HGLOBAL GLOBAL_CreateBlock( WORD flags, const void *ptr, DWORD size,
 			    HGLOBAL hOwner, BOOL isCode,
 			    BOOL is32Bit, BOOL isReadOnly,
 			    SHMDATA *shmdata)
 {
 /*  fprintf(stderr,"JBP: GLOBAL_CreateBlock() faked.\n");*/
-  return ptr;
+  return (HGLOBAL)ptr;
 }
 
 BOOL GLOBAL_FreeBlock( HGLOBAL handle )
diff --git a/toolkit/sup.c b/library/sup.c
similarity index 100%
rename from toolkit/sup.c
rename to library/sup.c
diff --git a/toolkit/winmain.c b/library/winmain.c
similarity index 100%
rename from toolkit/winmain.c
rename to library/winmain.c
diff --git a/libtest/Makefile.in b/libtest/Makefile.in
new file mode 100644
index 0000000..23e4a66
--- /dev/null
+++ b/libtest/Makefile.in
@@ -0,0 +1,34 @@
+TOPSRC   = @top_srcdir@
+MODULE   = none
+PROGRAMS = hello hello2 hello3 rolex
+ALL_LIBS = $(WINELIB) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LDLIBS)
+
+C_SRCS = \
+	hello.c \
+	hello2.c \
+	hello3.c \
+	hello3res.c \
+	rolex.c
+
+all: check_winerc $(PROGRAMS)
+
+@MAKE_RULES@
+
+hello: hello.o $(WINELIB)
+	$(CC) -o hello hello.o $(LDOPTIONS) $(ALL_LIBS)
+
+hello2: hello2.o $(WINELIB)
+	$(CC) -o hello2 hello2.o $(LDOPTIONS) $(ALL_LIBS)
+
+hello3: hello3res.o hello3.o $(WINELIB)
+	$(CC) -o hello3 hello3.o hello3res.o $(LDOPTIONS) $(ALL_LIBS)
+
+rolex: rolex.o $(WINELIB)
+	$(CC) -o rolex rolex.o $(LDOPTIONS) $(ALL_LIBS)
+
+clean::
+	$(RM) hello hello2 hello3 hello3res.c hello3res.h rolex
+
+hello3res.c hello3res.h: $(WINERC)
+
+### Dependencies:
diff --git a/libtest/README.rolex b/libtest/README.rolex
new file mode 100644
index 0000000..a481683
--- /dev/null
+++ b/libtest/README.rolex
@@ -0,0 +1,8 @@
+Windows clock application for WINE (by Jim Peterson)
+
+This is a translation of a Turbo Pascal OWL application I made once,
+so it's a little flaky (tons of globals, functions that could have
+been in-lined, etc.).  The file rolex.exe is a Win32 application
+compiled using this source code and Borland C++ 4.0.
+
+To try it out, type 'make rolex' or 'wine ./rolex.exe' (which fails).
diff --git a/toolkit/hello.c b/libtest/hello.c
similarity index 100%
rename from toolkit/hello.c
rename to libtest/hello.c
diff --git a/toolkit/hello2.c b/libtest/hello2.c
similarity index 100%
rename from toolkit/hello2.c
rename to libtest/hello2.c
diff --git a/toolkit/hello3.c b/libtest/hello3.c
similarity index 92%
rename from toolkit/hello3.c
rename to libtest/hello3.c
index 5b9cd51..fe532cb 100644
--- a/toolkit/hello3.c
+++ b/libtest/hello3.c
@@ -33,12 +33,12 @@
 	case WM_COMMAND:
 	switch(w){
 		case 100:
-			CreateDialogIndirect(0,hello3_DIALOG_DIADEMO.bytes,wnd,(WNDPROC)DlgProc);
+			CreateDialogIndirect(0,hello3res_DIALOG_DIADEMO.bytes,wnd,(WNDPROC)DlgProc);
 			return 0;
 		case 101:
 		{
-			BITMAPINFO *bm=hello3_BITMAP_BITDEMO.bytes;
-			char *bits=bm;
+			BITMAPINFO *bm=(BITMAPINFO*)hello3res_BITMAP_BITDEMO.bytes;
+			char *bits=(char*)bm;
 			HDC hdc=GetDC(wnd);
 			bits+=bm->bmiHeader.biSize;
 			bits+=(1<<bm->bmiHeader.biBitCount)*sizeof(RGBQUAD);
diff --git a/toolkit/hello3res.rc b/libtest/hello3res.rc
similarity index 100%
rename from toolkit/hello3res.rc
rename to libtest/hello3res.rc
diff --git a/libtest/rolex.c b/libtest/rolex.c
new file mode 100644
index 0000000..fc71f79
--- /dev/null
+++ b/libtest/rolex.c
@@ -0,0 +1,241 @@
+#include <math.h>
+#include <string.h>
+#include "windows.h"
+
+char* AppName = "Rolex";
+char* WindowName = "Rolex";
+int WindowWidth = 100;
+int WindowHeight = 121;
+COLORREF FaceColor = RGB(192,192,192);
+COLORREF HandColor = RGB(0,0,0);
+COLORREF EtchColor = RGB(0,0,0);
+
+float Pi=3.1415926;
+
+typedef struct
+{
+  int StartX,StartY,EndX,EndY;
+} HandData;
+
+int MaxX,MaxY;
+HandData OldSecond,OldHour,OldMinute;
+
+HWND HWindow;
+
+void DrawFace(HDC dc)
+{
+  int MidX, MidY, t;
+
+  MidX=MaxX/2;
+  MidY=MaxY/2;
+  SelectObject(dc,CreateSolidBrush(FaceColor));
+  SelectObject(dc,CreatePen(PS_SOLID,1,EtchColor));
+  Ellipse(dc,0,0,MaxX,MaxY);
+
+  for(t=0; t<12; t++)
+  {
+    MoveToEx(dc,MidX+sin(t*Pi/6)*0.9*MidX,MidY-cos(t*Pi/6)*0.9*MidY,NULL);
+    LineTo(dc,MidX+sin(t*Pi/6)*0.8*MidX,MidY-cos(t*Pi/6)*0.8*MidY);
+  }
+  if(MaxX>64 && MaxY>64)
+    for(t=0; t<60; t++)
+      SetPixel(dc,MidX+sin(t*Pi/30)*0.9*MidX,MidY-cos(t*Pi/30)*0.9*MidY
+	       ,EtchColor);
+  DeleteObject(SelectObject(dc,GetStockObject(NULL_BRUSH)));
+  DeleteObject(SelectObject(dc,GetStockObject(NULL_PEN)));
+  memset(&OldSecond,0,sizeof(OldSecond));
+  memset(&OldMinute,0,sizeof(OldMinute));
+  memset(&OldHour,0,sizeof(OldHour));
+}
+
+void DrawHourHand(HDC dc)
+{
+  MoveToEx(dc, OldHour.StartX, OldHour.StartY, NULL);
+  LineTo(dc, OldHour.EndX, OldHour.EndY);
+}
+
+void DrawMinuteHand(HDC dc)
+{
+  MoveToEx(dc, OldMinute.StartX, OldMinute.StartY, NULL);
+  LineTo(dc, OldMinute.EndX, OldMinute.EndY);
+}
+
+void DrawSecondHand(HDC dc)
+{
+  MoveToEx(dc, OldSecond.StartX, OldSecond.StartY, NULL);
+  LineTo(dc, OldSecond.EndX, OldSecond.EndY);
+}
+
+BOOL UpdateHourHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos)
+{
+  int Sx, Sy, Ex, Ey;
+  BOOL rv;
+
+  rv = FALSE;
+  Sx = MidX; Sy = MidY;
+  Ex = MidX+sin(Pos*Pi/6000)*XExt;
+  Ey = MidY-cos(Pos*Pi/6000)*YExt;
+  rv = ( Sx!=OldHour.StartX || Ex!=OldHour.EndX || 
+	 Sy!=OldHour.StartY || Ey!=OldHour.EndY );
+  if(rv)DrawHourHand(dc);
+  OldHour.StartX = Sx; OldHour.EndX = Ex;
+  OldHour.StartY = Sy; OldHour.EndY = Ey;
+  return rv;
+}
+
+BOOL UpdateMinuteHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos)
+{
+  int Sx, Sy, Ex, Ey;
+  BOOL rv;
+
+  rv = FALSE;
+  Sx = MidX; Sy = MidY;
+  Ex = MidX+sin(Pos*Pi/30000)*XExt;
+  Ey = MidY-cos(Pos*Pi/30000)*YExt;
+  rv = ( Sx!=OldMinute.StartX || Ex!=OldMinute.EndX ||
+	 Sy!=OldMinute.StartY || Ey!=OldMinute.EndY );
+  if(rv)DrawMinuteHand(dc);
+  OldMinute.StartX = Sx; OldMinute.EndX = Ex;
+  OldMinute.StartY = Sy; OldMinute.EndY = Ey;
+  return rv;
+}
+
+BOOL UpdateSecondHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos)
+{
+  int Sx, Sy, Ex, Ey;
+  BOOL rv;
+
+  rv = FALSE;
+  Sx = MidX; Sy = MidY;
+  Ex = MidX+sin(Pos*Pi/3000)*XExt;
+  Ey = MidY-cos(Pos*Pi/3000)*YExt;
+  rv = ( Sx!=OldSecond.StartX || Ex!=OldSecond.EndX ||
+	 Sy!=OldSecond.StartY || Ey!=OldSecond.EndY );
+  if(rv)DrawSecondHand(dc);
+  OldSecond.StartX = Sx; OldSecond.EndX = Ex;
+  OldSecond.StartY = Sy; OldSecond.EndY = Ey;
+  return rv;
+}
+
+void Idle(HDC idc)
+{
+  SYSTEMTIME st;
+  WORD H, M, S, F;
+  int MidX, MidY;
+  HDC dc;
+  BOOL Redraw;
+
+  if(idc)
+    dc=idc;
+  else
+    dc=GetDC(HWindow);
+  if(!dc)return;
+
+  GetLocalTime(&st);
+  H = st.wHour;
+  M = st.wMinute;
+  S = st.wSecond;
+  F = st.wMilliseconds / 10;
+  F = F + S*100;
+  M = M*1000+F/6;
+  H = H*1000+M/60;
+  MidX = MaxX/2;
+  MidY = MaxY/2;
+  SelectObject(dc,CreatePen(PS_SOLID,1,FaceColor));
+  Redraw = FALSE;
+  if(UpdateHourHand(dc,MidX,MidY,MidX*0.5,MidY*0.5,H)) Redraw = TRUE;
+  if(UpdateMinuteHand(dc,MidX,MidY,MidX*0.65,MidY*0.65,M)) Redraw = TRUE;
+  if(UpdateSecondHand(dc,MidX,MidY,MidX*0.79,MidY*0.79,F)) Redraw = TRUE;
+  DeleteObject(SelectObject(dc,CreatePen(PS_SOLID,1,HandColor)));
+  if(Redraw)
+  {
+    DrawSecondHand(dc);
+    DrawMinuteHand(dc);
+    DrawHourHand(dc);
+  }
+  DeleteObject(SelectObject(dc,GetStockObject(NULL_PEN)));
+  if(!idc) ReleaseDC(HWindow,dc);
+}
+
+LRESULT ProcessAppMsg(HWND wnd,UINT msg,WPARAM w,LPARAM l)
+{
+  PAINTSTRUCT PaintInfo;
+  HDC dc;
+
+  switch(msg)
+  {
+  case WM_PAINT:
+    if(GetUpdateRect(wnd,NULL,FALSE))
+    {
+      dc=BeginPaint(wnd,&PaintInfo);
+      DrawFace(dc);
+      Idle(dc);
+      EndPaint(wnd,&PaintInfo);
+    }
+    break;
+
+  case WM_SIZE:
+    MaxX = LOWORD(l);
+    MaxY = HIWORD(l);
+    break;
+
+  case WM_DESTROY:
+    PostQuitMessage (0);
+    break;
+
+  default:
+    return DefWindowProc (wnd, msg, w, l);
+  }
+  return 0l;
+}
+
+WPARAM MessageLoop()
+{
+  MSG msg;
+
+  while(1)
+  {
+    Sleep(1); /* sleep 1 millisecond */
+    if(PeekMessage(&msg,0,0,0,PM_REMOVE))
+    {
+      if(msg.message == WM_QUIT) return msg.wParam;
+      TranslateMessage(&msg);
+      DispatchMessage(&msg);
+    }
+    else
+      Idle(NULL);
+  }
+}
+
+int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show)
+{
+  WNDCLASS class;
+  if(!prev)
+  {
+    class.style = CS_HREDRAW | CS_VREDRAW;
+    class.lpfnWndProc = ProcessAppMsg;
+    class.cbClsExtra = 0;
+    class.cbWndExtra = 0;
+    class.hInstance  = inst;
+    class.hIcon      = 0; /* Draw my own icon */
+    class.hCursor    = LoadCursor (0, IDC_ARROW);
+    class.hbrBackground = (HBRUSH)(COLOR_BACKGROUND + 1);
+    class.lpszMenuName = 0;
+    class.lpszClassName = AppName;
+  }
+  if (!RegisterClass (&class)) return -1;
+
+  HWindow=CreateWindowEx(WS_EX_TOPMOST,AppName,WindowName,WS_OVERLAPPEDWINDOW,
+			 CW_USEDEFAULT,CW_USEDEFAULT,WindowWidth,WindowHeight,
+			 0,0,inst,0);
+  memset(&OldSecond,0,sizeof(OldSecond));
+  memset(&OldMinute,0,sizeof(OldMinute));
+  memset(&OldHour,0,sizeof(OldHour));
+  MaxX = WindowWidth;
+  MaxY = WindowHeight;
+
+  ShowWindow (HWindow, show);
+  UpdateWindow (HWindow);
+
+  return MessageLoop();
+}
diff --git a/loader/module.c b/loader/module.c
index 1137f3d..d46529d 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -271,7 +271,9 @@
     close( cachedfd );
     hCachedModule = hModule;
     name = ((LOADEDFILEINFO*)((char*)pModule + pModule->fileinfo))->filename;
-    cachedfd = open( DOS_GetUnixFileName( name ), O_RDONLY );
+    if ((cachedfd = open( DOS_GetUnixFileName( name ), O_RDONLY )) == -1)
+        fprintf( stderr, "MODULE_OpenFile: can't open file '%s' for module "NPFMT"\n",
+                 name, hModule );
     dprintf_module( stddeb, "MODULE_OpenFile: opened '%s' -> %d\n",
                     name, cachedfd );
     return cachedfd;
@@ -457,7 +459,7 @@
 
     hModule = GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, size );
     if (!hModule) return (HMODULE)11;  /* invalid exe */
-    FarSetOwner( hModule, hModule );
+    FarSetOwner( hModule, (WORD)(DWORD)hModule );
     pModule = (NE_MODULE *)GlobalLock( hModule );
     memcpy( pModule, &ne_header, sizeof(NE_MODULE) );
     pModule->count = 0;
@@ -666,7 +668,7 @@
  *
  * Return the entry point for a given ordinal.
  */
-DWORD MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal )
+SEGPTR MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal )
 {
     NE_MODULE *pModule;
     WORD curOrdinal = 1;
@@ -706,8 +708,8 @@
     }
 
     if (sel == 0xfe) sel = 0xffff;  /* constant entry */
-    else sel = (WORD)NE_SEG_TABLE(pModule)[sel-1].selector;
-    return MAKELONG( offset, sel );
+    else sel = (WORD)(DWORD)NE_SEG_TABLE(pModule)[sel-1].selector;
+    return (SEGPTR)MAKELONG( offset, sel );
 }
 
 
@@ -884,7 +886,7 @@
 
       /* Free the referenced modules */
 
-    pModRef = NE_MODULE_TABLE( pModule );
+    pModRef = (HMODULE*)NE_MODULE_TABLE( pModule );
     for (i = 0; i < pModule->modref_count; i++, pModRef++)
     {
         FreeModule( *pModRef );
@@ -1268,7 +1270,11 @@
 
       /* Now load the executable file */
 
+#ifdef WINELIB32
+    params.hEnvironment = (HANDLE)GetDOSEnvironment();
+#else
     params.hEnvironment = (HANDLE)SELECTOROF( GetDOSEnvironment() );
+#endif
     params.cmdLine  = (SEGPTR)WIN16_GlobalLock( cmdLineHandle );
     params.showCmd  = (SEGPTR)WIN16_GlobalLock( cmdShowHandle );
     params.reserved = 0;
@@ -1328,7 +1334,7 @@
 
     ret = MODULE_GetEntryPoint( hModule, ordinal );
 
-    dprintf_module( stddeb, "GetProcAddress: returning %08lx\n", ret );
+    dprintf_module( stddeb, "GetProcAddress: returning "SPFMT"\n", ret );
     return (FARPROC)ret;
 }
 
diff --git a/loader/ne_resource.c b/loader/ne_resource.c
index 18fd164..caf1e0d 100644
--- a/loader/ne_resource.c
+++ b/loader/ne_resource.c
@@ -57,7 +57,7 @@
                               pTypeInfo->type_id, pNameInfo->id );
             handle = LoadResource( hModule, 
 				   (HANDLE)((int)pNameInfo - (int)pModule) );
-            for(p = (WORD*)LockResource(handle); *p; p = (WORD *)((char*)p+*p))
+            for(p = (WORD*)LockResource(handle); p && *p; p = (WORD *)((char*)p+*p))
             {
                 dprintf_resource( stddeb,"  type=%04x '%s' id=%04x '%s'\n",
                                   p[1], (char *)(p+3), p[2],
diff --git a/loader/task.c b/loader/task.c
index 345b9f7..e7f2835 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -311,6 +311,7 @@
  * 32-bit entry point for a new task. This function is responsible for
  * setting up the registers and jumping to the 16-bit entry point.
  */
+#ifndef WINELIB
 static void TASK_CallToStart(void)
 {
     int cs_reg, ds_reg, ip_reg;
@@ -357,6 +358,7 @@
     fprintf( stderr, "TASK_CallToStart: Main program returned!\n" );
     TASK_KillCurrentTask( 1 );
 }
+#endif
 
 
 /***********************************************************************
@@ -747,7 +749,6 @@
 
 #ifndef WINELIB
     NE_InitializeDLLs( pTask->hModule );
-#endif
 
     /* Registers on return are:
      * ax     1 if OK, 0 on error
@@ -764,6 +765,7 @@
     ESI_reg(&context) = (DWORD)pTask->hPrevInstance;
     EDI_reg(&context) = (DWORD)pTask->hInstance;
     ES_reg (&context) = (WORD)pTask->hPDB;
+#endif
 
     /* Initialize the local heap */
     if ( pModule->heap_size )
@@ -910,7 +912,7 @@
     if (!thunkaddr) return (FARPROC)0;
     thunk = PTR_SEG_TO_LIN( thunkaddr );
 
-    dprintf_task( stddeb, "MakeProcInstance(%08lx,"NPFMT"): got thunk %08lx\n",
+    dprintf_task( stddeb, "MakeProcInstance("SPFMT","NPFMT"): got thunk "SPFMT"\n",
                   (SEGPTR)func, hInstance, (SEGPTR)thunkaddr );
     
     *thunk++ = 0xb8;    /* movw instance, %ax */
@@ -929,7 +931,7 @@
  */
 void FreeProcInstance( FARPROC func )
 {
-    dprintf_task( stddeb, "FreeProcInstance(%08lx)\n", (SEGPTR)func );
+    dprintf_task( stddeb, "FreeProcInstance("SPFMT")\n", (SEGPTR)func );
     TASK_FreeThunk( hCurrentTask, (SEGPTR)func );
 }
 
diff --git a/memory/global.c b/memory/global.c
index 0689c88..6d540a3 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -88,7 +88,7 @@
  *
  * Create a global heap block for a fixed range of linear memory.
  */
-HGLOBAL GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size,
+HGLOBAL GLOBAL_CreateBlock( WORD flags, const void *ptr, DWORD size,
                             HGLOBAL hOwner, BOOL isCode,
                             BOOL is32Bit, BOOL isReadOnly,
 			    SHMDATA *shmdata  )
diff --git a/memory/selector.c b/memory/selector.c
index 5b42003..d6c2db1 100644
--- a/memory/selector.c
+++ b/memory/selector.c
@@ -98,7 +98,7 @@
  *
  * Set the LDT entries for an array of selectors.
  */
-static void SELECTOR_SetEntries( WORD sel, void *base, DWORD size,
+static void SELECTOR_SetEntries( WORD sel, const void *base, DWORD size,
                                  enum seg_type type, BOOL is32bit,
                                  BOOL readonly )
 {
@@ -131,7 +131,7 @@
  *
  * Allocate selectors for a block of linear memory.
  */
-WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type,
+WORD SELECTOR_AllocBlock( const void *base, DWORD size, enum seg_type type,
                           BOOL is32bit, BOOL readonly )
 {
     WORD sel, count;
@@ -149,7 +149,7 @@
  *
  * Change the size of a block of selectors.
  */
-WORD SELECTOR_ReallocBlock( WORD sel, void *base, DWORD size,
+WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size,
                             enum seg_type type, BOOL is32bit, BOOL readonly )
 {
     WORD i, oldcount, newcount;
diff --git a/misc/Makefile.in b/misc/Makefile.in
index f4c201e..d6374a5 100644
--- a/misc/Makefile.in
+++ b/misc/Makefile.in
@@ -31,13 +31,7 @@
 	winsocket.c \
 	xmalloc.c
 
-all: checkrc $(MODULE).o
-
-checkrc: dummy
-	cd $(TOPSRC)/rc; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' 'LANG=$(LANG)'
-
-langclean::
-	$(RM) ole2nls.o
+all: $(MODULE).o
 
 @MAKE_RULES@
 
diff --git a/misc/commdlg.c b/misc/commdlg.c
index d6c8815..d147dde 100644
--- a/misc/commdlg.c
+++ b/misc/commdlg.c
@@ -9,12 +9,11 @@
 #include <string.h>
 #include "win.h"
 #include "user.h"
-#include "global.h"
 #include "message.h"
 #include "commdlg.h"
 #include "dlgs.h"
 #include "selectors.h"
-#include "../rc/sysres.h"
+#include "resource.h"
 #include "dos_fs.h"
 #include "stackframe.h"
 
@@ -72,11 +71,7 @@
         }
         hDlgTmpl = LoadResource( lpofn->hInstance, hResInfo );
     }
-    else hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED,
-                                        sysres_DIALOG_OPEN_FILE.bytes,
-                                        sysres_DIALOG_OPEN_FILE.size,
-                                        GetCurrentPDB(), FALSE, FALSE,
-                                        TRUE, NULL );
+    else hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_OPEN_FILE );
     if (!hDlgTmpl)
     {
         CommDlgLastError = CDERR_LOADRESFAILURE;
@@ -91,7 +86,7 @@
     if (!(lpofn->Flags & OFN_ENABLETEMPLATEHANDLE))
     {
         if (lpofn->Flags & OFN_ENABLETEMPLATE) FreeResource( hDlgTmpl );
-        else GLOBAL_FreeBlock( hDlgTmpl );
+        else SYSRES_FreeResource( hDlgTmpl );
     }
 
     printf("GetOpenFileName // return lpstrFile='%s' !\n", 
@@ -123,12 +118,7 @@
         }
         hDlgTmpl = LoadResource( lpofn->hInstance, hResInfo );
     }
-    else hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED,
-                                        sysres_DIALOG_SAVE_FILE.bytes,
-                                        sysres_DIALOG_SAVE_FILE.size,
-                                        GetCurrentPDB(), FALSE, FALSE,
-                                        TRUE, NULL );
-
+    else hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_SAVE_FILE );
 
     hInst = WIN_GetWindowInstance( lpofn->hwndOwner );
     bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpofn->hwndOwner,
@@ -137,7 +127,7 @@
     if (!(lpofn->Flags & OFN_ENABLETEMPLATEHANDLE))
     {
         if (lpofn->Flags & OFN_ENABLETEMPLATE) FreeResource( hDlgTmpl );
-        else GLOBAL_FreeBlock( hDlgTmpl );
+        else SYSRES_FreeResource( hDlgTmpl );
     }
 
     printf( "GetSaveFileName // return lpstrFile='%s' !\n", 
@@ -153,7 +143,7 @@
 {
     char temp[512], *cp;
 
-    SendDlgItemMessage(hwnd, edt1, WM_GETTEXT, 511, MAKE_SEGPTR(temp));
+    SendDlgItemMessage(hwnd, edt1, WM_GETTEXT, 511, (LPARAM)MAKE_SEGPTR(temp));
     cp = strrchr(temp, '\\');
     if (cp != NULL) {
 	strcpy(temp, cp+1);
@@ -172,7 +162,7 @@
   char str[512],str2[512];
 
   strncpy(str,newPath,511); str[511]=0;
-  SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, MAKE_SEGPTR(str2));
+  SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, (LPARAM)MAKE_SEGPTR(str2));
   strncat(str,str2,511-strlen(str)); str[511]=0;
   if (!DlgDirList(hWnd, str, lst1, 0, 0x0000)) return FALSE;
   DlgDirList(hWnd, "*.*", lst2, stc1, 0x8010);
@@ -225,7 +215,7 @@
 	SelectObject(lpdis->hDC, hBrush);
 	FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
 	SendMessage(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, 
-		    MAKE_SEGPTR(str));
+		    (LPARAM)MAKE_SEGPTR(str));
 	TextOut(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
 		str, strlen(str));
 	if (lpdis->itemState != 0) {
@@ -239,7 +229,7 @@
 	SelectObject(lpdis->hDC, hBrush);
 	FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
 	SendMessage(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, 
-		    MAKE_SEGPTR(str));
+		    (LPARAM)MAKE_SEGPTR(str));
 
 	hBitmap = hFolder;
 	GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
@@ -261,7 +251,7 @@
 	SelectObject(lpdis->hDC, hBrush);
 	FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
 	SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, 
-		    MAKE_SEGPTR(str));
+		    (LPARAM)MAKE_SEGPTR(str));
 	switch(str[2]) {
 	 case 'a': case 'b':
 	    hBitmap = hFloppy;
@@ -323,7 +313,7 @@
 	  n = strlen(pstr);
 	  strncpy(tmpstr, pstr, 511); tmpstr[511]=0;
 	  printf("lpstrCustomFilter // add tmpstr='%s' ", tmpstr);
-	  SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, MAKE_SEGPTR(tmpstr));
+	  SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
 	  pstr += n + 1;
 	  n = strlen(pstr);
 	  printf("associated to '%s'\n", pstr);
@@ -337,7 +327,7 @@
       n = strlen(pstr);
       strncpy(tmpstr, pstr, 511); tmpstr[511]=0;
       printf("lpstrFilter // add tmpstr='%s' ", tmpstr);
-      SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, MAKE_SEGPTR(tmpstr));
+      SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
       pstr += n + 1;
       n = strlen(pstr);
       printf("associated to '%s'\n", pstr);
@@ -352,7 +342,7 @@
   tmpstr[511]=0;
   printf("nFilterIndex = %ld // SetText of edt1 to '%s'\n", 
   			lpofn->nFilterIndex, tmpstr);
-  SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr));
+  SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
   /* get drive list */
   *tmpstr = 0;
   DlgDirListComboBox(hWnd, MAKE_SEGPTR(tmpstr), cmb2, 0, 0xC000);
@@ -399,8 +389,8 @@
       lRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0);
       if (lRet == LB_ERR) return TRUE;
       SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, lRet,
-			 MAKE_SEGPTR(tmpstr));
-      SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr));
+			 (LPARAM)MAKE_SEGPTR(tmpstr));
+      SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
       return TRUE;
     case lst2: /* directory list */
       FILEDLG_StripEditControl(hWnd);
@@ -409,7 +399,7 @@
 	  lRet = SendDlgItemMessage(hWnd, lst2, LB_GETCURSEL, 0, 0);
 	  if (lRet == LB_ERR) return TRUE;
 	  SendDlgItemMessage(hWnd, lst2, LB_GETTEXT, lRet,
-			     MAKE_SEGPTR(tmpstr));
+			     (LPARAM)MAKE_SEGPTR(tmpstr));
 	  if (tmpstr[0] == '[')
 	    {
 	      tmpstr[strlen(tmpstr) - 1] = 0;
@@ -430,7 +420,7 @@
       FILEDLG_StripEditControl(hWnd);
       lRet = SendDlgItemMessage(hWnd, cmb2, CB_GETCURSEL, 0, 0L);
       if (lRet == LB_ERR) return 0;
-      SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, lRet, MAKE_SEGPTR(tmpstr));
+      SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, lRet, (LPARAM)MAKE_SEGPTR(tmpstr));
       sprintf(tmpstr, "%c:", tmpstr[2]);
     reset_scan:
       lRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0);
@@ -440,7 +430,7 @@
 				 PTR_SEG_TO_LIN(lpofn->lpstrFilter),
 				 lRet);
       strncpy(tmpstr2, pstr, 511); tmpstr2[511]=0;
-      SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2));
+      SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2));
       FILEDLG_ScanDir(hWnd, tmpstr);
       return TRUE;
     case chx1:
@@ -449,7 +439,7 @@
       return TRUE;
     case IDOK:
     almost_ok:
-      SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, MAKE_SEGPTR(tmpstr));
+      SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 511, (LPARAM)MAKE_SEGPTR(tmpstr));
       pstr = strrchr(tmpstr, '\\');
       if (pstr == NULL)
 	pstr = strrchr(tmpstr, ':');
@@ -467,7 +457,7 @@
 	      *tmpstr=0;
 	    }
 	  printf("commdlg: %s, %s\n", tmpstr, tmpstr2);
-	  SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2));
+	  SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2));
 	  FILEDLG_ScanDir(hWnd, tmpstr);
 	  return TRUE;
 	}
@@ -485,7 +475,7 @@
 				 PTR_SEG_TO_LIN(lpofn->lpstrFilter),
 				 lRet), 511);
       tmpstr2[511]=0;
-      SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2));
+      SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2));
       /* if ScanDir succeeds, we have changed the directory */
       if (FILEDLG_ScanDir(hWnd, tmpstr)) return TRUE;
       /* if not, this must be a filename */
@@ -495,13 +485,13 @@
 	  /* strip off the pathname */
 	  *pstr = 0;
 	  strncpy(tmpstr2, pstr+1, 511); tmpstr2[511]=0;
-	  SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr2));
+	  SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2));
 	  /* Should we MessageBox() if this fails? */
 	  if (!FILEDLG_ScanDir(hWnd, tmpstr)) return TRUE;
 	  strcpy(tmpstr, tmpstr2);
 	}
       else 
-	SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, MAKE_SEGPTR(tmpstr));
+	SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
       ShowWindow(hWnd, SW_HIDE);
       {
 	int drive;
@@ -527,7 +517,7 @@
 	{
 	  lRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0);
 	  SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, lRet,
-			     MAKE_SEGPTR(tmpstr));
+			     (LPARAM)MAKE_SEGPTR(tmpstr));
           printf("strcpy'ing '%s'\n",tmpstr); fflush(stdout);
 	  strcpy(PTR_SEG_TO_LIN(lpofn->lpstrFileTitle), tmpstr);
 	}
@@ -621,14 +611,12 @@
     HANDLE hInst, hDlgTmpl;
     BOOL bRet;
 
-    hDlgTmpl = GLOBAL_CreateBlock(GMEM_FIXED, sysres_DIALOG_CHOOSE_COLOR.bytes,
-                                  sysres_DIALOG_CHOOSE_COLOR.size,
-                                  GetCurrentPDB(), FALSE, FALSE, TRUE, NULL );
+    hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_CHOOSE_COLOR );
     hInst = WIN_GetWindowInstance( lpChCol->hwndOwner );
     bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpChCol->hwndOwner,
                                    GetWndProcEntry16("ColorDlgProc"), 
                                    (DWORD)lpChCol );
-    GLOBAL_FreeBlock( hDlgTmpl );
+    SYSRES_FreeResource( hDlgTmpl );
     return bRet;
 }
 
@@ -668,14 +656,12 @@
     HANDLE hInst, hDlgTmpl;
     BOOL bRet;
 
-    hDlgTmpl = GLOBAL_CreateBlock(GMEM_FIXED, sysres_DIALOG_FIND_TEXT.bytes,
-                                  sysres_DIALOG_FIND_TEXT.size,
-                                  GetCurrentPDB(), FALSE, FALSE, TRUE, NULL );
+    hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_FIND_TEXT );
     hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
     bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpFind->hwndOwner,
                                    GetWndProcEntry16("FindTextDlgProc"), 
                                    (DWORD)lpFind );
-    GLOBAL_FreeBlock( hDlgTmpl );
+    SYSRES_FreeResource( hDlgTmpl );
     return bRet;
 }
 
@@ -688,14 +674,12 @@
     HANDLE hInst, hDlgTmpl;
     BOOL bRet;
 
-    hDlgTmpl = GLOBAL_CreateBlock(GMEM_FIXED, sysres_DIALOG_REPLACE_TEXT.bytes,
-                                  sysres_DIALOG_REPLACE_TEXT.size,
-                                  GetCurrentPDB(), FALSE, FALSE, TRUE, NULL );
+    hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_REPLACE_TEXT );
     hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
     bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpFind->hwndOwner,
                                    GetWndProcEntry16("ReplaceTextDlgProc"), 
                                    (DWORD)lpFind );
-    GLOBAL_FreeBlock( hDlgTmpl );
+    SYSRES_FreeResource( hDlgTmpl );
     return bRet;
 }
 
@@ -769,16 +753,9 @@
         return TRUE;
 
     if (lpPrint->Flags & PD_PRINTSETUP)
-        hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED,
-                                       sysres_DIALOG_PRINT_SETUP.bytes,
-                                       sysres_DIALOG_PRINT_SETUP.size,
-                                       GetCurrentPDB(), FALSE,
-                                       FALSE, TRUE, NULL );
+	hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_PRINT_SETUP );
     else
-        hDlgTmpl = GLOBAL_CreateBlock( GMEM_FIXED, sysres_DIALOG_PRINT.bytes,
-                                       sysres_DIALOG_PRINT.size,
-                                       GetCurrentPDB(), FALSE,
-                                       FALSE, TRUE, NULL );
+	hDlgTmpl = SYSRES_LoadResource( SYSRES_DIALOG_PRINT );
 
     hInst = WIN_GetWindowInstance( lpPrint->hwndOwner );
     bRet = DialogBoxIndirectParam( hInst, hDlgTmpl, lpPrint->hwndOwner,
@@ -786,7 +763,7 @@
                                        GetWndProcEntry16("PrintSetupDlgProc") :
                                        GetWndProcEntry16("PrintDlgProc"),
                                    (DWORD)lpPrint );
-    GLOBAL_FreeBlock( hDlgTmpl );
+    SYSRES_FreeResource( hDlgTmpl );
     return bRet;
 }
 
@@ -845,9 +822,9 @@
 
 
 /***********************************************************************
- *           CommDlgExtendError   (COMMDLG.26)
+ *           CommDlgExtendedError   (COMMDLG.26)
  */
-DWORD CommDlgExtendError(void)
+DWORD CommDlgExtendedError(void)
 {
   return CommDlgLastError;
 }
@@ -856,7 +833,7 @@
 /***********************************************************************
  *           GetFileTitle   (COMMDLG.27)
  */
-int GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf)
+short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf)
 {
     int i, len;
     printf("GetFileTitle(%p %p %d); \n", lpFile, lpTitle, cbBuf);
@@ -879,7 +856,7 @@
     printf("\n---> '%s' ", &lpFile[i]);
     
     len = strlen(lpFile+i)+1;
-    if (cbBuf < len);
+    if (cbBuf < len)
     	return len;
 
     strncpy(lpTitle, &lpFile[i], len);
diff --git a/misc/dos_fs.c b/misc/dos_fs.c
index 0d88d8f..6235df6 100644
--- a/misc/dos_fs.c
+++ b/misc/dos_fs.c
@@ -453,7 +453,7 @@
     } else {
 	/* Expand it if it's a relative name. */
 	getcwd(temp, 255);
-	if(strncmp(unixfilename, "./", 2) != 0) {
+	if(strncmp(unixfilename, "./", 2) == 0) {
 	    strcat(temp, unixfilename + 1);
 	} else {	    
 	    strcat(temp, "/");
@@ -934,20 +934,20 @@
 	    strcpy(de->filename, d->d_name);
 	    if (d->d_reclen > 12)
 	    de->filename[12] = '\0';
-
 	    ToDos(de->filename);
-	} while ( !match(de->filename, de->filemask) );
 
-	strcpy(temp,de->unixpath);
-	strcat(temp,"/");
-	strcat(temp,de->filename);
-	ToUnix(temp + strlen(de->unixpath));
+	    strcpy(temp,de->unixpath);
+	    strcat(temp,"/");
+	    strcat(temp,d->d_name);
+	    stat (temp, &st);
+	    de->attribute = 0x0;
+	    if S_ISDIR(st.st_mode)
+	      de->attribute |= FA_DIREC;
 
-	stat (temp, &st);
-	de->attribute = 0x0;
-	if S_ISDIR(st.st_mode)
-		de->attribute |= FA_DIREC;
-	
+	} while (!(de->attribute & FA_DIREC) &&
+		 !match(de->filename, de->filemask) );
+
+
 	de->filesize = st.st_size;
 	de->filetime = st.st_mtime;
 
diff --git a/misc/exec.c b/misc/exec.c
index ab5bc0e..1235661 100644
--- a/misc/exec.c
+++ b/misc/exec.c
@@ -57,12 +57,13 @@
 	case 0:
 	case HELP_HELPONHELP:
 		GetWindowsDirectory(str, sizeof(str));
-		strcat(str, "\\winhelp.exe");
+		strcat(str, "\\winhelp.exe winhelp.hlp");
         dprintf_exec(stddeb,"'%s'\n", str);
 		break;
 	case HELP_INDEX:
 		GetWindowsDirectory(str, sizeof(str));
-		strcat(str, "\\winhelp.exe");
+		strcat(str, "\\winhelp.exe ");
+		strcat(str, lpHelpFile);
         dprintf_exec(stddeb,"'%s'\n", str);
 		break;
 	default:
diff --git a/misc/ole2nls.c b/misc/ole2nls.c
index 0a20cf9..b02fe65a 100644
--- a/misc/ole2nls.c
+++ b/misc/ole2nls.c
@@ -10,6 +10,7 @@
 #include <string.h>
 #include "windows.h"
 #include "ole.h"
+#include "options.h"
 #include "winnls.h"
 #include "stddebug.h"
 #include "debug.h"
@@ -20,20 +21,18 @@
 DWORD WINAPI GetUserDefaultLCID()
 {
 /* Default sorting, neutral sublanguage */
-#if #LANG(En)
-	return 9;
-#elif #LANG(De)
-	return 7;
-#elif #LANG(Es)
-	return 7; /* Just a Guess :-) */
-#elif #LANG(Fr)
-	return 7; /* ditto :-) */
-#elif #LANG(No)
-	return 0x14;
-#else
-	/* Neutral language */
-	return 0;
-#endif
+    switch(Options.language)
+    {
+    case LANG_En: return 0x09;
+    case LANG_Es: return 0x07; /* Just a Guess :-) */
+    case LANG_De: return 0x07;
+    case LANG_No: return 0x14;
+    case LANG_Fr:
+    case LANG_Fi:
+    case LANG_Da:
+    default:
+	return 0;  /* Neutral language */
+    }
 }
 
 /***********************************************************************
@@ -192,7 +191,9 @@
 
 /* Now, the language specific definitions. They don't have to be
    complete */
-#if #LANG(De)
+    switch(Options.language)
+    {
+    case LANG_De:
 /* This definitions apply to Germany only. Users in Austria 
    or Switzerland might want to modify them */
 LOCVAL(LOCALE_ILANGUAGE,"9")
@@ -315,9 +316,9 @@
 LOCVAL(LOCALE_INEGSYMPRECEDES)
 LOCVAL(LOCALE_INEGSEPBYSPACE)
 */
-#endif /* LANG(De) */
+    break;  /* LANG(De) */
 
-#if #LANG(Da)
+    case LANG_Da:
 /* LOCVAL(LOCALE_ILANGUAGE,"9") */
 LOCVAL(LOCALE_SLANGUAGE,"Dansk")
 LOCVAL(LOCALE_SENGLANGUAGE,"Danish")
@@ -417,11 +418,13 @@
 /* LOCVAL(LOCALE_IPOSSEPBYSPACE) */
 /* LOCVAL(LOCALE_INEGSYMPRECEDES) */
 /* LOCVAL(LOCALE_INEGSEPBYSPACE) */
-#endif /* LANG(Da) */
+    break; /* LANG(Da) */
 
 /*Insert other languages here*/
 
-
+    default:
+	break;
+    }  /* switch */
 
 	if(!retLen)
 	{
diff --git a/misc/profile.c b/misc/profile.c
index 043eb28..ecd1b72 100644
--- a/misc/profile.c
+++ b/misc/profile.c
@@ -74,13 +74,13 @@
 	if (strchr(name, '/'))
 		return name;
 
-	if (strchr(name, '\\'))
-		return DOS_GetUnixFileName(name);
-
+        if (strlen(dir)) {
         strcpy(temp, dir);
         strcat(temp, "\\");
 	strcat(temp, name);
-	
+	}
+	else
+	  strcpy(temp, name);
 	return DOS_GetUnixFileName(temp);
 }
 
@@ -92,23 +92,37 @@
     char *bufptr;
     char *lastnonspc;
     int bufsize;
-    char *file;
+    char *file, *purefilename;
     int c;
     char path[MAX_PATH+1];
     BOOL firstbrace;
     
     *pfullname = NULL;
 
-    /* Try the Windows directory */
+    dprintf_profile(stddeb,"Trying to load file %s \n", filename);
 
-    GetWindowsDirectory(path, sizeof(path));
-    file = GetIniFileName(filename, path);
-
-    dprintf_profile(stddeb,"Load %s\n", file);
+    /* First try it as is */
+    file = GetIniFileName(filename, "");
     f = fopen(file, "r");
     
     if (f == NULL) {
-	/* Try the path of the current executable */
+
+      if  ((purefilename = strrchr( filename, '\\' )))
+	purefilename++; 
+      else if  ((purefilename = strrchr( filename, '/' ))) 
+	purefilename++; 
+      else
+	purefilename = filename;
+      ToUnix(purefilename);
+
+      /* Now try the Windows directory */
+      GetWindowsDirectory(path, sizeof(path));
+      file = GetIniFileName(purefilename, path);
+      dprintf_profile(stddeb,"Trying to load  in windows directory file %s\n",
+		      file);
+      f = fopen(file, "r");
+    
+      if (f == NULL) { 	/* Try the path of the current executable */
     
 	if (GetCurrentTask())
 	{
@@ -116,16 +130,37 @@
 	    GetModuleFileName( GetCurrentTask(), path, MAX_PATH );
 	    if ((p = strrchr( path, '\\' )))
 	    {
-		p[1] = '\0';
-		file = GetIniFileName(filename, path);
+		p[0] = '\0'; /* Remove trailing slash */
+		file = GetIniFileName(purefilename, path);
+		dprintf_profile(stddeb,
+				"Trying to load in current directory%s\n",
+				file);
 		f = fopen(file, "r");
 	    }
 	}
     }
+      if (f == NULL) { 	/* And now in $HOME/.wine */
+	
+	strcpy(file,getenv("HOME"));
+	strcat(file, "/.wine/");
+	strcat(file, purefilename);
+	dprintf_profile(stddeb,"Trying to load in user-directory %s\n", file);
+	f = fopen(file, "r");
+      }
+      
+      if (f == NULL) {
+	/* FIXED: we ought to create it now (in which directory?) */
+	/* lets do it in ~/.wine */
+	strcpy(file,getenv("HOME"));
+	strcat(file, "/.wine/");
+	strcat(file, purefilename);
+	dprintf_profile(stddeb,"Creating %s\n", file);
+	f = fopen(file, "w+");
     if (f == NULL) {
 	fprintf(stderr, "profile.c: load() can't find file %s\n", filename);
-        /* FIXME: we ought to create it now (in which directory?) */
 	return NULL;
+	}
+      }
     }
     
     *pfullname = strdup(file);
@@ -206,7 +241,7 @@
 	    skipspc = TRUE;
 	    do {
 		c = fgetc(f);
-		if (c == EOF || c == '\n' || c == ';') break;
+		if (c == EOF || c == '\n') break;
 		if (!isspace(c) || !skipspc) {
 		    skipspc = FALSE;
 		    bufsize++;
diff --git a/misc/shell.c b/misc/shell.c
index 5e1911c..5e50505 100644
--- a/misc/shell.c
+++ b/misc/shell.c
@@ -8,12 +8,11 @@
 #include <ctype.h>
 #include "windows.h"
 #include "shell.h"
-#include "global.h"
 #include "neexe.h"
 #include "selectors.h"
 #include "alias.h"
 #include "relay32.h"
-#include "../rc/sysres.h"
+#include "resource.h"
 #include "dlgs.h"
 #include "win.h"
 #include "stddebug.h"
@@ -224,7 +223,7 @@
 
 	dprintf_reg(stddeb, "RegOpenKey(%08lX, %p='%s', %p)\n",
 				       (DWORD)hKey, lpSubKey, lpSubKey, lphKey);
-	if (lphKey == NULL) return ERROR_INVALID_PARAMETER;
+	if (lphKey == NULL) return SHELL_ERROR_INVALID_PARAMETER;
         switch((DWORD)hKey) {
 	case 0: 
 	  lpKey = lphTopKey; break;
@@ -237,7 +236,7 @@
         }
 	if (lpSubKey == NULL || !*lpSubKey)  { 
 	  *lphKey = hKey; 
-	  return ERROR_SUCCESS; 
+	  return SHELL_ERROR_SUCCESS; 
 	}
         while(*lpSubKey) {
           ptr = strchr(lpSubKey,'\\');
@@ -254,11 +253,11 @@
           }
           if (lpKey == NULL) {
 	    dprintf_reg(stddeb,"RegOpenKey: key %s not found!\n",str);
-	    return ERROR_BADKEY;
+	    return SHELL_ERROR_BADKEY;
 	  }	    
 	}
         *lphKey = lpKey->hKey;
-	return ERROR_SUCCESS;
+	return SHELL_ERROR_SUCCESS;
 }
 
 
@@ -275,7 +274,7 @@
 	char		str[128];
 
 	dprintf_reg(stddeb, "RegCreateKey(%08lX, '%s', %p)\n",	(DWORD)hKey, lpSubKey, lphKey);
-	if (lphKey == NULL) return ERROR_INVALID_PARAMETER;
+	if (lphKey == NULL) return SHELL_ERROR_INVALID_PARAMETER;
         switch((DWORD)hKey) {
 	case 0: 
 	  lpKey = lphTopKey; break;
@@ -288,7 +287,7 @@
         }
 	if (lpSubKey == NULL || !*lpSubKey)  { 
 	  *lphKey = hKey; 
-	  return ERROR_SUCCESS;
+	  return SHELL_ERROR_SUCCESS;
 	}
         while (*lpSubKey) {
           dprintf_reg(stddeb, "RegCreateKey: Looking for subkey %s\n", lpSubKey);
@@ -309,13 +308,13 @@
 	    lpNewKey = (LPKEYSTRUCT) GlobalLock(hNewKey);
 	    if (lpNewKey == NULL) {
 	      printf("RegCreateKey // Can't alloc new key !\n");
-	      return ERROR_OUTOFMEMORY;
+	      return SHELL_ERROR_OUTOFMEMORY;
 	    }
 	    lpNewKey->hKey = hNewKey;
 	    lpNewKey->lpSubKey = malloc(strlen(str) + 1);
 	    if (lpNewKey->lpSubKey == NULL) {
 	      printf("RegCreateKey // Can't alloc key string !\n");
-	      return ERROR_OUTOFMEMORY;
+	      return SHELL_ERROR_OUTOFMEMORY;
 	    }
 	    strcpy(lpNewKey->lpSubKey, str);
 	    lpNewKey->lpNextKey = lpPrevKey->lpSubLvl;
@@ -333,7 +332,7 @@
 	    dprintf_reg(stddeb,"RegCreateKey // found '%s', key=%08lX\n", str, (DWORD)*lphKey);
 	  }
 	}
-	return ERROR_SUCCESS;
+	return SHELL_ERROR_SUCCESS;
 }
 
 
@@ -343,7 +342,7 @@
 LONG RegCloseKey(HKEY hKey)
 {
 	dprintf_reg(stdnimp, "EMPTY STUB !!! RegCloseKey(%08lX);\n", (DWORD)hKey);
-	return ERROR_SUCCESS;
+	return SHELL_ERROR_SUCCESS;
 }
 
 
@@ -354,7 +353,7 @@
 {
 	dprintf_reg(stdnimp, "EMPTY STUB !!! RegDeleteKey(%08lX, '%s');\n",
                      (DWORD)hKey, lpSubKey);
-	return ERROR_SUCCESS;
+	return SHELL_ERROR_SUCCESS;
 }
 
 
@@ -369,22 +368,22 @@
     LONG       	dwRet;
     dprintf_reg(stddeb, "RegSetValue(%08lX, '%s', %08lX, '%s', %08lX);\n",
 		(DWORD)hKey, lpSubKey, dwType, lpVal, dwIgnored);
-    /*if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;*/
-    if (lpVal == NULL) return ERROR_INVALID_PARAMETER;
-    if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) {
+    /*if (lpSubKey == NULL) return SHELL_ERROR_INVALID_PARAMETER;*/
+    if (lpVal == NULL) return SHELL_ERROR_INVALID_PARAMETER;
+    if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != SHELL_ERROR_SUCCESS) {
 	dprintf_reg(stddeb, "RegSetValue // key not found ... so create it !\n");
-	if ((dwRet = RegCreateKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) {
+	if ((dwRet = RegCreateKey(hKey, lpSubKey, &hRetKey)) != SHELL_ERROR_SUCCESS) {
 	    fprintf(stderr, "RegSetValue // key creation error %08lX !\n", dwRet);
 	    return dwRet;
 	}
     }
     lpKey = (LPKEYSTRUCT)GlobalLock(hRetKey);
-    if (lpKey == NULL) return ERROR_BADKEY;
+    if (lpKey == NULL) return SHELL_ERROR_BADKEY;
     if (lpKey->lpValue != NULL) free(lpKey->lpValue);
     lpKey->lpValue = xmalloc(strlen(lpVal) + 1);
     strcpy(lpKey->lpValue, lpVal);
     dprintf_reg(stddeb,"RegSetValue // successful key='%s' val='%s' !\n", lpSubKey, lpKey->lpValue);
-    return ERROR_SUCCESS;
+    return SHELL_ERROR_SUCCESS;
 }
 
 
@@ -400,16 +399,16 @@
 	dprintf_reg(stddeb, "RegQueryValue(%08lX, '%s', %p, %p);\n",
                     (DWORD)hKey, lpSubKey, lpVal, lpcb);
 	/*if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;*/
-	if (lpVal == NULL) return ERROR_INVALID_PARAMETER;
-	if (lpcb == NULL) return ERROR_INVALID_PARAMETER;
-        if (!*lpcb) return ERROR_INVALID_PARAMETER;
+	if (lpVal == NULL) return SHELL_ERROR_INVALID_PARAMETER;
+	if (lpcb == NULL) return SHELL_ERROR_INVALID_PARAMETER;
+        if (!*lpcb) return SHELL_ERROR_INVALID_PARAMETER;
 
-	if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) {
+	if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != SHELL_ERROR_SUCCESS) {
 		fprintf(stderr, "RegQueryValue // key not found !\n");
 		return dwRet;
 	}
 	lpKey = (LPKEYSTRUCT)GlobalLock(hRetKey);
-	if (lpKey == NULL) return ERROR_BADKEY;
+	if (lpKey == NULL) return SHELL_ERROR_BADKEY;
 	if (lpKey->lpValue != NULL) {
           if ((size = strlen(lpKey->lpValue)+1) > *lpcb){
             strncpy(lpVal,lpKey->lpValue,*lpcb-1);
@@ -423,7 +422,7 @@
 	  *lpcb = (LONG)1;
 	}
 	dprintf_reg(stddeb,"RegQueryValue // return '%s' !\n", lpVal);
-	return ERROR_SUCCESS;
+	return SHELL_ERROR_SUCCESS;
 }
 
 
@@ -436,7 +435,7 @@
 	LONG            len;
 
 	dprintf_reg(stddeb, "RegEnumKey(%08lX, %ld)\n", (DWORD)hKey, dwSubKey);
-	if (lpBuf == NULL) return ERROR_INVALID_PARAMETER;
+	if (lpBuf == NULL) return SHELL_ERROR_INVALID_PARAMETER;
         switch((DWORD)hKey) {
 	case 0: 
 	  lpKey = lphTopKey; break;
@@ -454,13 +453,13 @@
 	    strncpy(lpBuf,lpKey->lpSubKey,len);
 	    lpBuf[len] = 0;
             dprintf_reg(stddeb, "RegEnumKey: found %s\n",lpBuf);
-	    return ERROR_SUCCESS;
+	    return SHELL_ERROR_SUCCESS;
 	  }
           dwSubKey--;
           lpKey = lpKey->lpNextKey;
         }
 	dprintf_reg(stddeb, "RegEnumKey: key not found!\n");
-	return ERROR_INVALID_PARAMETER;
+	return SHELL_ERROR_INVALID_PARAMETER;
 }
 
 
@@ -584,7 +583,7 @@
       }
     } else {
       len=200;
-      if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,p,subclass,&len)==ERROR_SUCCESS) {
+      if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,p,subclass,&len)==SHELL_ERROR_SUCCESS) {
 	if (len>20)
 	  fprintf(stddeb,"ShellExecute:subclass with len %ld? (%s), please report.\n",len,subclass);
 	subclass[len]='\0';
@@ -593,7 +592,7 @@
 	strcat(subclass,"\\command");
 	dprintf_exec(stddeb,"ShellExecute:looking for %s.\n",subclass);
 	len=400;
-	if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,subclass,cmd,&len)==ERROR_SUCCESS) {
+	if (RegQueryValue((HKEY)HKEY_CLASSES_ROOT,subclass,cmd,&len)==SHELL_ERROR_SUCCESS) {
 	  char *t;
 	  dprintf_exec(stddeb,"ShellExecute:...got %s\n",cmd);
 	  cmd[len]='\0';
@@ -701,17 +700,13 @@
         initialized=1;
     }
 
-    handle = GLOBAL_CreateBlock( GMEM_FIXED,
-                                 sysres_DIALOG_SHELL_ABOUT_MSGBOX.bytes,
-                                 sysres_DIALOG_SHELL_ABOUT_MSGBOX.size,
-                                 GetCurrentPDB(), FALSE, FALSE,
-                                 TRUE, NULL );
+    handle = SYSRES_LoadResource( SYSRES_DIALOG_SHELL_ABOUT_MSGBOX );
     if (!handle) return FALSE;
     bRet = DialogBoxIndirectParam( WIN_GetWindowInstance( hWnd ),
                                    handle, hWnd,
                                    GetWndProcEntry16("AboutDlgProc"), 
 				   (LONG)hIcon );
-    GLOBAL_FreeBlock( handle );
+    SYSRES_FreeResource( handle );
     return bRet;
 }
 
diff --git a/misc/user32.c b/misc/user32.c
index a9ce9af..5deaa83 100644
--- a/misc/user32.c
+++ b/misc/user32.c
@@ -158,5 +158,5 @@
     return (DWORD) CreateWindowEx(flags,MAKE_SEGPTR(classbuf),
 				  MAKE_SEGPTR(titlebuf),style,x,y,width,height,
 				  (HWND)parent,(HMENU)menu,(HINSTANCE)instance,
-				  param);
+				  (LPVOID)param);
 }
diff --git a/miscemu/dpmi.c b/miscemu/dpmi.c
index 7389396..1ba8f1a 100644
--- a/miscemu/dpmi.c
+++ b/miscemu/dpmi.c
@@ -17,6 +17,28 @@
 #include "debug.h"
 
 
+/* Structure for real-mode callbacks */
+typedef struct
+{
+    DWORD edi;
+    DWORD esi;
+    DWORD ebp;
+    DWORD reserved;
+    DWORD ebx;
+    DWORD edx;
+    DWORD ecx;
+    DWORD eax;
+    WORD  flags;
+    WORD  es;
+    WORD  ds;
+    WORD  fs;
+    WORD  gs;
+    WORD  ip;
+    WORD  cs;
+    WORD  sp;
+    WORD  ss;
+} REALMODECALL;
+
 /**********************************************************************
  *	    INT_Int31Handler
  *
@@ -132,13 +154,39 @@
         *  ES:DI points to real-mode call structure  
         *  Currently we just print it out and return error.
         */
-        ptr = (BYTE *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) );
-        fprintf(stdnimp,
-               "RealModeInt %02x: AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x DS=%04x\n",
-                BL_reg(&context),
-              *(WORD*)(ptr+0x1c),*(WORD*)(ptr+0x10),*(WORD*)(ptr+0x18),*(WORD*)(ptr+0x14),
-              *(WORD*)(ptr+0x04),*(WORD*)(ptr+0x00),*(WORD*)(ptr+0x22),*(WORD*)(ptr+0x24));
-        SET_CFLAG(&context);
+        {
+            REALMODECALL *p = (REALMODECALL *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) );
+            fprintf(stdnimp,
+                    "RealModeInt %02x: EAX=%08lx EBX=%08lx ECX=%08lx EDX=%08lx\n"
+                    "                ESI=%08lx EDI=%08lx ES=%04x DS=%04x\n",
+                    BL_reg(&context), p->eax, p->ebx, p->ecx, p->edx,
+                    p->esi, p->edi, p->es, p->ds );
+            SET_CFLAG(&context);
+        }
+        break;
+
+    case 0x0301:  /* Call real mode procedure with far return */
+        {
+            REALMODECALL *p = (REALMODECALL *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) );
+            fprintf(stdnimp,
+                    "RealModeCall: EAX=%08lx EBX=%08lx ECX=%08lx EDX=%08lx\n"
+                    "              ESI=%08lx EDI=%08lx ES=%04x DS=%04x CS:IP=%04x:%04x\n",
+                    p->eax, p->ebx, p->ecx, p->edx,
+                    p->esi, p->edi, p->es, p->ds, p->cs, p->ip );
+            SET_CFLAG(&context);
+        }
+        break;
+
+    case 0x0302:  /* Call real mode procedure with interrupt return */
+        {
+            REALMODECALL *p = (REALMODECALL *)PTR_SEG_OFF_TO_LIN( ES_reg(&context), DI_reg(&context) );
+            fprintf(stdnimp,
+                    "RealModeCallIret: EAX=%08lx EBX=%08lx ECX=%08lx EDX=%08lx\n"
+                    "                  ESI=%08lx EDI=%08lx ES=%04x DS=%04x CS:IP=%04x:%04x\n",
+                    p->eax, p->ebx, p->ecx, p->edx,
+                    p->esi, p->edi, p->es, p->ds, p->cs, p->ip );
+            SET_CFLAG(&context);
+        }
         break;
 
     case 0x0400:  /* Get DPMI version */
diff --git a/miscemu/instr.c b/miscemu/instr.c
index 09daf43..8b795a9 100644
--- a/miscemu/instr.c
+++ b/miscemu/instr.c
@@ -181,9 +181,11 @@
             base += (signed short)off;
             break;
         }
+        base &= 0xffff;
     }
     if (segprefix != -1) seg = segprefix;
 
+    /* FIXME: should check limit of the segment here */
     return (BYTE *)PTR_SEG_OFF_TO_LIN( seg, (base + (index << ss)) );
 }
 
diff --git a/miscemu/int21.c b/miscemu/int21.c
index 8c6fac4..143e04a 100644
--- a/miscemu/int21.c
+++ b/miscemu/int21.c
@@ -444,7 +444,7 @@
 	AX_reg(context) = now->tm_wday;
 }
 
-static void GetSystemTime(struct sigcontext_struct *context)
+static void INT21_GetSystemTime(struct sigcontext_struct *context)
 {
 	struct tm *now;
 	struct timeval tv;
@@ -603,6 +603,92 @@
 	RESET_CFLAG(context);
 }
 
+void ExtendedOpenCreateFile(struct sigcontext_struct *context)
+{
+  dprintf_int(stddeb, "int21: extended open/create: file= %s \n",
+	      DOS_GetUnixFileName(PTR_SEG_OFF_TO_LIN(DS_reg(context),SI_reg(context))));
+  /* Shuffle arguments to call OpenExistingFile */
+  AL_reg(context) = BL_reg(context);
+  DX_reg(context) = SI_reg(context);
+  /* BX,CX and DX should be preserved */
+  OpenExistingFile(context);
+  if ((EFL_reg(context) & 0x0001)==0) 
+    { /* It exists */
+      dprintf_int(stddeb, "int21: extended open/create %s exists \n",
+		  DOS_GetUnixFileName(PTR_SEG_OFF_TO_LIN(DS_reg(context),SI_reg(context))));
+      /* Now decide what do do */
+      if ((DL_reg(context) & 0x0007)== 0)
+	{
+	  BX_reg(context) = AX_reg(context);
+	  CloseFile(context);
+	  AX_reg(context) = 0x0050;/*File exists*/
+	  CX_reg(context) = 0;
+	  SET_CFLAG(context);
+	  dprintf_int(stddeb, "int21: extended open/create: failed because file exixts \n");
+	  return;
+	}
+      if ((DL_reg(context) & 0x0007)== 2) {
+	/* Truncate it, but first check if opend for write */
+	if ((BL_reg(context) & 0x0007)== 0) {
+	  BX_reg(context) = AX_reg(context);
+	  CloseFile(context);
+	  dprintf_int(stddeb, "int21: extended open/create: failed, trunc on ro file");
+	  AX_reg(context) = 0x000C;/*Access code invalid*/
+	  CX_reg(context) = 0;
+	  SET_CFLAG(context);
+	  return;
+	}
+	/* Shuffle arguments to call CloseFile */
+	dprintf_int(stddeb, "int21: extended open/create: Closing before truncate\n");
+	BX_reg(context) = AX_reg(context);
+	/* BX and DX should be preserved */
+	CloseFile(context);
+	if (EFL_reg(context) & 0x0001) {
+	  dprintf_int(stddeb, "int21: extended open/create: close before trunc failed");
+	  AX_reg(context) = 0x0019;/*Seek Error*/
+	  CX_reg(context) = 0;
+	  SET_CFLAG(context);
+	}
+	/* Shuffle arguments to call CreateFile */
+	dprintf_int(stddeb, "int21: extended open/create: Truncating\n");
+	AL_reg(context) = BL_reg(context);
+	/* CX is still the same */
+	DX_reg(context) = SI_reg(context);
+	CreateFile(context);
+	if (EFL_reg(context) & 0x0001) { /*no file open, flags set */
+	  dprintf_int(stddeb, "int21: extended open/create: truncfailed");
+	  return;
+	}
+	CX_reg(context) = 3;
+	return;
+      }
+      CX_reg(context) = 1;
+      return;
+    }
+  else /* file does not exist */
+    {
+     dprintf_int(stddeb, "int21: extended open/create %s dosen't exists \n",
+		  DOS_GetUnixFileName(PTR_SEG_OFF_TO_LIN(DS_reg(context),SI_reg(context))));
+      if ((DL_reg(context) & 0x00F0)== 0) {
+	CX_reg(context) = 0;
+	SET_CFLAG(context);
+	dprintf_int(stddeb, "int21: extended open/create: failed, file dosen't exist\n");
+	return;
+      }
+      /* Shuffle arguments to call CreateFile */
+      dprintf_int(stddeb, "int21: extended open/create: Creating\n");
+      AL_reg(context) = BL_reg(context);
+      /* CX should still be the same */
+      DX_reg(context) = SI_reg(context);
+      CreateFile(context);
+      if (EFL_reg(context) & 0x0001) { /*no file open, flags set */
+	dprintf_int(stddeb, "int21: extended open/create: create failed\n");
+	return;
+      }
+      CX_reg(context) = 2;
+      return;
+    }
+}
 static void RenameFile(struct sigcontext_struct *context)
 {
 	char *newname, *oldname;
@@ -1312,7 +1398,7 @@
             break;
 
 	  case 0x2c: /* GET SYSTEM TIME */
-	    GetSystemTime(&context);
+	    INT21_GetSystemTime(&context);
 	    break;
 
           case 0x2d: /* SET SYSTEM TIME */
@@ -1738,6 +1824,21 @@
 	    }
 	    break;
     
+	  case 0x6C: /* Extended Open/Create*/
+	    ExtendedOpenCreateFile(&context);
+	    break;
+	
+          case 0x70: /* MS-DOS 7 (Windows95) - ??? (country-specific?)*/
+          case 0x71: /* MS-DOS 7 (Chicago) - LONG FILENAME FUNCTIONS */
+          case 0x72: /* MS-DOS 7 (Windows95) - ??? */
+          case 0x73: /* MS-DOS 7 (Windows95) - DRIVE LOCKING ??? */
+            dprintf_int(stddeb,"int21: windows95 function AX %04x\n",
+ 			AX_reg(&context));
+ 	    dprintf_int(stddeb, "        returning unimplemented\n");
+ 	    SET_CFLAG(&context);
+ 	    AL_reg(&context) = 0;
+ 	    break;
+
           case 0xdc: /* CONNECTION SERVICES - GET CONNECTION NUMBER */
             break;
 
diff --git a/objects/bitmap.c b/objects/bitmap.c
index 72e18ad..7408f3b 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -227,7 +227,7 @@
     {
         char *str = (char *)PTR_SEG_TO_LIN( name );
         dprintf_bitmap( stddeb, "LoadBitmap("NPFMT",'%s')\n", instance, str );
-        if (str[0] == '#') name = (SEGPTR)(WORD)atoi( str + 1 );
+        if (str[0] == '#') name = (SEGPTR)(DWORD)(WORD)atoi( str + 1 );
     }
     else
         dprintf_bitmap( stddeb, "LoadBitmap("NPFMT",%04x)\n",
diff --git a/objects/cursoricon.c b/objects/cursoricon.c
index 4dc22b2..4098051 100644
--- a/objects/cursoricon.c
+++ b/objects/cursoricon.c
@@ -368,7 +368,7 @@
         return 0;
     }
     /* Make it owned by the module */
-    FarSetOwner( handle, GetExePtr( hInstance ) );
+    FarSetOwner( handle, (WORD)(DWORD)GetExePtr( hInstance ) );
     info = (CURSORICONINFO *)GlobalLock( handle );
     info->ptHotSpot.x   = hotspot.x;
     info->ptHotSpot.y   = hotspot.y;
@@ -404,7 +404,7 @@
     if (!(hInstance = GetExePtr( hInstance ))) return 0;
     size = GlobalSize( handle );
     hNew = GlobalAlloc( GMEM_MOVEABLE, size );
-    FarSetOwner( hNew, hInstance );
+    FarSetOwner( hNew, (WORD)(DWORD)hInstance );
     ptrNew = (char *)GlobalLock( hNew );
     memcpy( ptrNew, ptrOld, size );
     GlobalUnlock( handle );
diff --git a/objects/dc.c b/objects/dc.c
index 41c981a..68e7ff3 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -106,8 +106,8 @@
     caps->vertRes       = screenHeight;
     caps->bitsPixel     = screenDepth;
     caps->planes        = 1;
-    caps->numBrushes    = 0;
-    caps->numPens       = 0;
+    caps->numBrushes    = 16+6;  /* 16 solid + 6 hatched brushes */
+    caps->numPens       = 16;    /* 16 solid pens */
     caps->numMarkers    = 0;
     caps->numFonts      = 0;
     caps->numColors     = 1 << caps->bitsPixel;
diff --git a/objects/gdiobj.c b/objects/gdiobj.c
index bde259b..12cacd3 100644
--- a/objects/gdiobj.c
+++ b/objects/gdiobj.c
@@ -193,32 +193,6 @@
 
 
 /***********************************************************************
- *           GDI_AppendToPenBrushList
- */
-BOOL GDI_AppendToPenBrushList(HANDLE hNewObj)
-{
-	HANDLE	 	*lphObj;
-	int	       	i = 1;
-	if (hNewObj == 0) return FALSE;
-	if (lpPenBrushList == NULL) {
-		lpPenBrushList = xmalloc(MAX_OBJ * sizeof(HANDLE));
-		lpPenBrushList[0] = 0;
-		dprintf_gdi(stddeb,"GDI_AppendToPenBrushList() lpPenBrushList allocated !\n");
-	}
-	for (lphObj = lpPenBrushList; i < MAX_OBJ; i++) {
-		if (*lphObj == 0) {
-			*lphObj = hNewObj;
-			*(lphObj + 1) = 0;
-			dprintf_gdi(stddeb,"GDI_AppendToPenBrushList("NPFMT") appended (count=%d)\n", hNewObj, i);
-			return TRUE;
-		}
-		lphObj++;
-	}
-	return FALSE;
-}
-
-
-/***********************************************************************
  *           GDI_AllocObject
  */
 HANDLE GDI_AllocObject( WORD size, WORD magic )
@@ -231,9 +205,6 @@
     obj->hNext   = 0;
     obj->wMagic  = magic;
     obj->dwCount = ++count;
-    if (magic == PEN_MAGIC || magic == BRUSH_MAGIC) {
-      GDI_AppendToPenBrushList(handle);
-    }
     return handle;
 }
 
@@ -406,8 +377,71 @@
 /***********************************************************************
  *           EnumObjects    (GDI.71)
  */
-int EnumObjects(HDC hDC, int nObjType, FARPROC lpEnumFunc, LPSTR lpData)
+int EnumObjects( HDC hdc, int nObjType, FARPROC lpEnumFunc, LPARAM lParam )
 {
+    /* Solid colors to enumerate */
+    static const COLORREF solid_colors[] =
+    { RGB(0x00,0x00,0x00), RGB(0xff,0xff,0xff),
+      RGB(0xff,0x00,0x00), RGB(0x00,0xff,0x00),
+      RGB(0x00,0x00,0xff), RGB(0xff,0xff,0x00),
+      RGB(0xff,0x00,0xff), RGB(0x00,0xff,0xff),
+      RGB(0x80,0x00,0x00), RGB(0x00,0x80,0x00),
+      RGB(0x80,0x80,0x00), RGB(0x00,0x00,0x80),
+      RGB(0x80,0x00,0x80), RGB(0x00,0x80,0x80),
+      RGB(0x80,0x80,0x80), RGB(0xc0,0xc0,0xc0)
+    };
+    
+    int i, retval = 0;
+
+    dprintf_gdi( stddeb, "EnumObjects: "NPFMT" %d %08lx %08lx\n",
+                 hdc, nObjType, (DWORD)lpEnumFunc, lParam );
+    switch(nObjType)
+    {
+    case OBJ_PEN:
+        /* Enumerate solid pens */
+        for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++)
+        {
+            LOGPEN pen = { PS_SOLID, { 1, 0 }, solid_colors[i] };
+            retval = CallEnumObjectsProc( lpEnumFunc, MAKE_SEGPTR(&pen),
+                                          lParam );
+            dprintf_gdi( stddeb, "EnumObject: solid pen %08lx, ret=%d\n",
+                         solid_colors[i], retval);
+            if (!retval) break;
+        }
+        break;
+
+    case OBJ_BRUSH:
+        /* Enumerate solid brushes */
+        for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++)
+        {
+            LOGBRUSH brush = { BS_SOLID, solid_colors[i], 0 };
+            retval = CallEnumObjectsProc( lpEnumFunc, MAKE_SEGPTR(&brush),
+                                          lParam );
+            dprintf_gdi( stddeb, "EnumObject: solid brush %08lx, ret=%d\n",
+                         solid_colors[i], retval);
+            if (!retval) break;
+        }
+        if (!retval) break;
+
+        /* Now enumerate hatched brushes */
+        for (i = HS_HORIZONTAL; i <= HS_DIAGCROSS; i++)
+        {
+            LOGBRUSH brush = { BS_HATCHED, RGB(0,0,0), i };
+            retval = CallEnumObjectsProc( lpEnumFunc, MAKE_SEGPTR(&brush),
+                                          lParam );
+            dprintf_gdi( stddeb, "EnumObject: hatched brush %d, ret=%d\n",
+                         i, retval);
+            if (!retval) break;
+        }
+        break;
+
+    default:
+        fprintf( stderr, "EnumObjects: invalid type %d\n", nObjType );
+        break;
+    }
+    return retval;
+#if 0
+
   /*    HANDLE 		handle;
    DC 			*dc;*/
   HANDLE       	*lphObj;
@@ -508,8 +542,10 @@
   GDI_HEAP_FREE(hLog);
   dprintf_gdi(stddeb,"EnumObjects // End of enumeration !\n");
   return nRet;
+#endif
 }
 
+
 /***********************************************************************
  *		IsGDIObject(GDI.462)
  */
diff --git a/objects/metafile.c b/objects/metafile.c
index 297f514..ab0b7df 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -910,7 +910,7 @@
 	infohdr->biPlanes = bmp->bitmap.bmPlanes;
 	infohdr->biBitCount = bmp->bitmap.bmBitsPixel;
 	memcpy(mr->rdParam + (sizeof(BITMAPINFOHEADER) / 2) + 4,
-	       bmp->bitmap.bmBits, 
+	       PTR_SEG_TO_LIN(bmp->bitmap.bmBits),
 	       bmp->bitmap.bmHeight * bmp->bitmap.bmWidthBytes);
 	break;
 
diff --git a/rc/Makefile.in b/rc/Makefile.in
index f845784..6778692 100644
--- a/rc/Makefile.in
+++ b/rc/Makefile.in
@@ -1,40 +1,24 @@
 TOPSRC = @top_srcdir@
 
-MODULE = rc
+PROGRAM = winerc
+MODULE = none
 
-C_SRCS = sysres.c
+C_SRCS = y.tab.c lex.yy.c winerc.c 
 
-LANGUAGES = En Es De No Fr Fi Da
-
-all: $(MODULE).o
+all: $(PROGRAM)
 
 @MAKE_RULES@
 
+$(PROGRAM): $(OBJS)
+	$(CC) $(CFLAGS) -o winerc $(OBJS) $(LEXLIB)
+
 y.tab.c y.tab.h: parser.y
 	$(YACC) -d -t parser.y
 
 lex.yy.c: parser.l
 	$(LEX) -8 -I parser.l
 
-winerc: lex.yy.o winerc.o y.tab.o
-	$(CC) $(ALLCFLAGS) lex.yy.o winerc.o y.tab.o -o winerc $(LEXLIB)
-
-sysres.rct: sysres.rc $(LANGUAGES:%=sysres_%.rc)
-	echo "#include \"windows.h\"" >sysres.rct
-	echo WINDOWS_H_ENDS_HERE >>sysres.rct
-	cat sysres.rc >>sysres.rct
-
-sysres.c sysres.h: sysres.rct winerc
-	$(CC) $(ALLCFLAGS) -E -x c -P sysres.rct | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | ./winerc -o sysres -v -p sysres
-
 clean::
-	$(RM) lex.yy.c sysres.rct winerc y.tab.c y.tab.h sysres.c sysres.h
-
-langclean::
-	$(RM) sysres.c sysres.h sysres.o
-
-y.tab.o: y.tab.c y.tab.h parser.h
-lex.yy.o: lex.yy.c y.tab.h parser.h
-winerc.o: $(TOPSRC)/include/windows.h $(TOPSRC)/include/neexe.h parser.h y.tab.h
+	$(RM) y.tab.c y.tab.h lex.yy.c $(PROGRAM)
 
 ### Dependencies:
diff --git a/rc/sysres.rc b/rc/sysres.rc
deleted file mode 100644
index 52e3749..0000000
--- a/rc/sysres.rc
+++ /dev/null
@@ -1,17 +0,0 @@
-#if #LANG(En)
-#include "sysres_En.rc"
-#elif #LANG(De)
-#include "sysres_De.rc"
-#elif #LANG(No)
-#include "sysres_No.rc"
-#elif #LANG(Es)
-#include "sysres_Es.rc"
-#elif #LANG(Fr)
-#include "sysres_Fr.rc"
-#elif #LANG(Fi)
-#include "sysres_Fi.rc"
-#elif #LANG(Da)
-#include "sysres_Da.rc"
-#else
-#error LANG not set to an implemented language.
-#endif
diff --git a/rc/winerc.c b/rc/winerc.c
index c01227f..f5ec380 100644
--- a/rc/winerc.c
+++ b/rc/winerc.c
@@ -18,6 +18,7 @@
 
 char usage[]="winerc -bdvc -p prefix -o outfile < infile \n"
 	"   -b            Create a C array from a binary .res file\n"
+        "   -c            Add 'const' prefix to C constants\n"
 	"   -d            Output debugging information\n"
 	"   -p prefix     Give a prefix for the generated names\n"
 	"   -v            Show each resource as it is processed\n"
@@ -54,7 +55,7 @@
 	extern char* optarg;
 	int optc,lose,ret,binary;
 	lose=binary=0;
-	while((optc=getopt(argc,argv,"bdp:vo:"))!=EOF)
+	while((optc=getopt(argc,argv,"bcdp:vo:"))!=EOF)
 		switch(optc)
 		{
 			/* bison will print state transitions on stderr */
@@ -546,8 +547,8 @@
     for (it=top;it;it=it->next)
         fprintf( header,"extern %sstruct resource %s;\n",
                  ISCONSTANT, get_resource_name(it) );
-    fprintf( header,"\nextern %sstruct resource * %sTable[];\n",
-             ISCONSTANT, prefix );
+    fprintf( header,"\nextern %sstruct resource * %s%s_Table[];\n",
+             ISCONSTANT, ISCONSTANT, prefix );
 
     /* Print the resources bytes */
 
@@ -562,10 +563,10 @@
                  ISCONSTANT, get_resource_name(it) );
         for (i=0;i<it->size-1;i++)
         {
-            fprintf(code,"%#4x,",it->res[i]);
+            fprintf(code,"0x%02x, ",it->res[i]);
             if ((i&7)==7)fputc('\n',code);
         }
-        fprintf(code,"%#4x};\n\n",it->res[i]);
+        fprintf(code,"0x%02x };\n\n",it->res[i]);
     }
 
     /* Print the resources */
@@ -574,15 +575,15 @@
         int type;
         switch(it->type)
         {
-        case acc:type=RT_ACCELERATOR;break;
-        case bmp:type=RT_BITMAP;break;
-        case cur:type=RT_CURSOR;break;
-        case dlg:type=RT_DIALOG;break;
-        case fnt:type=RT_FONT;break;
-        case ico:type=RT_ICON;break;
-        case men:type=RT_MENU;break;
-        case rdt:type=RT_RCDATA;break;
-        case str:type=RT_STRING;break;
+        case acc:type=(int)RT_ACCELERATOR;break;
+        case bmp:type=(int)RT_BITMAP;break;
+        case cur:type=(int)RT_CURSOR;break;
+        case dlg:type=(int)RT_DIALOG;break;
+        case fnt:type=(int)RT_FONT;break;
+        case ico:type=(int)RT_ICON;break;
+        case men:type=(int)RT_MENU;break;
+        case rdt:type=(int)RT_RCDATA;break;
+        case str:type=(int)RT_STRING;break;
         default:fprintf(stderr,"Unknown restype\n");type=-1;break;
         }
         if(it->n_type)
@@ -597,7 +598,8 @@
 
     /* Print the resource table (NULL terminated) */
 
-    fprintf(code,"\n%sstruct resource * %sTable[] = {\n", ISCONSTANT, prefix);
+    fprintf(code,"\n%sstruct resource * %s%s_Table[] = {\n",
+	    ISCONSTANT, ISCONSTANT, prefix);
     for (it=top;it;it=it->next)
         fprintf( code, "  &%s,\n", get_resource_name(it) );
     fprintf( code, "  0\n};\n" );
@@ -608,7 +610,7 @@
                 "static void DoIt() WINE_CONSTRUCTOR;\n"
                 "static void DoIt()\n"
                 "{\n"
-                "\tLIBRES_RegisterResources(%sTable);\n"
+                "\tLIBRES_RegisterResources(%s_Table);\n"
                 "}\n\n"
                 "#ifndef HAVE_WINE_CONSTRUCTOR\n"
                 "void LIBWINE_Register_%s(){\n"
diff --git a/resources/Makefile.in b/resources/Makefile.in
new file mode 100644
index 0000000..3ccf2b0
--- /dev/null
+++ b/resources/Makefile.in
@@ -0,0 +1,20 @@
+TOPSRC = @top_srcdir@
+
+MODULE = resources
+
+LANGUAGES = En Es De No Fr Fi Da
+
+SYSRES_SRCS = $(LANGUAGES:%=sysres_%.c)
+
+C_SRCS = $(SYSRES_SRCS) sysres.c
+
+all: check_winerc $(MODULE).o
+
+@MAKE_RULES@
+
+$(SYSRES_SRCS): $(WINERC)
+
+clean::
+	$(RM) $(SYSRES_SRCS) $(SYSRES_SRCS:.c=.h)
+
+### Dependencies:
diff --git a/resources/sysres.c b/resources/sysres.c
new file mode 100644
index 0000000..04a6d52
--- /dev/null
+++ b/resources/sysres.c
@@ -0,0 +1,56 @@
+/*
+ * System resources loading
+ *
+ * Copyright 1995 Alexandre Julliard
+ */
+
+#include "windows.h"
+#include "global.h"
+#include "options.h"
+#include "resource.h"
+
+#include "sysres_En.h"
+#include "sysres_Es.h"
+#include "sysres_De.h"
+#include "sysres_No.h"
+#include "sysres_Fr.h"
+#include "sysres_Fi.h"
+#include "sysres_Da.h"
+
+
+static const struct resource * const * SYSRES_Resources[] =
+{
+    sysres_En_Table,  /* LANG_En */
+    sysres_Es_Table,  /* LANG_Es */
+    sysres_De_Table,  /* LANG_De */
+    sysres_No_Table,  /* LANG_No */
+    sysres_Fr_Table,  /* LANG_Fr */
+    sysres_Fi_Table,  /* LANG_Fi */
+    sysres_Da_Table   /* LANG_Da */
+};
+
+
+/***********************************************************************
+ *           SYSRES_LoadResource
+ *
+ * Create a global memory block for a system resource.
+ */
+HANDLE SYSRES_LoadResource( SYSTEM_RESOURCE id )
+{
+    const struct resource *resPtr;
+
+    resPtr = SYSRES_Resources[Options.language][id];
+    return GLOBAL_CreateBlock( GMEM_FIXED, resPtr->bytes, resPtr->size,
+			       GetCurrentPDB(), FALSE, FALSE, TRUE, NULL );
+}
+
+
+/***********************************************************************
+ *           SYSRES_FreeResource
+ *
+ * Free a global memory block for a system resource.
+ */
+void SYSRES_FreeResource( HANDLE handle )
+{
+    GLOBAL_FreeBlock( handle );
+}
diff --git a/rc/sysres_Da.rc b/resources/sysres_Da.rc
similarity index 100%
rename from rc/sysres_Da.rc
rename to resources/sysres_Da.rc
diff --git a/rc/sysres_De.rc b/resources/sysres_De.rc
similarity index 100%
rename from rc/sysres_De.rc
rename to resources/sysres_De.rc
diff --git a/rc/sysres_En.rc b/resources/sysres_En.rc
similarity index 100%
rename from rc/sysres_En.rc
rename to resources/sysres_En.rc
diff --git a/rc/sysres_Es.rc b/resources/sysres_Es.rc
similarity index 100%
rename from rc/sysres_Es.rc
rename to resources/sysres_Es.rc
diff --git a/rc/sysres_Fi.rc b/resources/sysres_Fi.rc
similarity index 100%
rename from rc/sysres_Fi.rc
rename to resources/sysres_Fi.rc
diff --git a/rc/sysres_Fr.rc b/resources/sysres_Fr.rc
similarity index 100%
rename from rc/sysres_Fr.rc
rename to resources/sysres_Fr.rc
diff --git a/rc/sysres_No.rc b/resources/sysres_No.rc
similarity index 100%
rename from rc/sysres_No.rc
rename to resources/sysres_No.rc
diff --git a/toolkit/Makefile.in b/toolkit/Makefile.in
deleted file mode 100644
index 46befbf..0000000
--- a/toolkit/Makefile.in
+++ /dev/null
@@ -1,40 +0,0 @@
-TOPSRC = @top_srcdir@
-X_LIBS = @X_LIBS@
-XLIB   = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
-MODULE = toolkit
-
-C_SRCS = \
-	atom.c \
-	arch.c \
-	heap.c \
-	libres.c \
-	miscstubs.c \
-	sup.c \
-	winmain.c
-
-all: $(MODULE).o
-
-hello: hello.o ../winelib.a
-	gcc -g -o hello hello.o ../winelib.a -lm $(X_LIBS) -lXpm $(XLIB)
-
-hello2: hello2.o ../winelib.a
-	gcc -g -o hello2 hello2.o ../winelib.a -lm $(X_LIBS) -lXpm $(XLIB)
-
-hello3: hello3res.o hello3.o
-	gcc -g -o hello3 hello3.o hello3res.o ../winelib.a -lm $(X_LIBS) -lXpm $(XLIB)
-
-hello3.o:   hello3res.o
-
-hello3res.o:    hello3res.rc
-	echo "#include \"windows.h\"" >hello3res.rct
-	echo WINDOWS_H_ENDS_HERE >>hello3res.rct
-	cat hello3res.rc  >>hello3res.rct
-	$(CC) $(ALLCFLAGS) -E -x c -P hello3res.rct | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | ../rc/winerc -o hello3res -v -p hello3
-	gcc -c $(ALLCFLAGS) hello3res.c
-
-@MAKE_RULES@
-
-clean::
-	$(RM) hello hello2 hello3
-
-### Dependencies:
diff --git a/tools/build.c b/tools/build.c
index 53a0150..c2571e0 100644
--- a/tools/build.c
+++ b/tools/build.c
@@ -808,7 +808,7 @@
 		    if(fdp->arg_types[argno]!='.') putchar( 'a'+argno );
 		    if (argno!=argc-1) putchar( ',' );
 		}
-		printf( ") __attribute((stdcall));" );
+		printf( ") __attribute((stdcall));\n" );
 	    }
 
             printf( "void %s_%d(", UpperDLLName, i);
@@ -1071,15 +1071,15 @@
 
     printf( "\tmovl " PREFIX "IF1632_Original32_esp, %%eax\n" );
     printf( "\torl %%eax,%%eax\n" );
-    printf( "\tje 0f\n" );
+    printf( "\tje no_orig_esp\n" );
     printf( "\tmovl %%eax,%%esp\n" );
-    printf( "0:\n" );
+    printf( "no_orig_esp:\n" );
 
     /* Transfer the arguments */
 
     printf( "\tmovl 12(%%ebp),%%ecx\n" );
     printf( "\torl %%ecx,%%ecx\n" );
-    printf( "\tje 1f\n" );
+    printf( "\tje no_args\n" );
     printf( "\tleal 16(%%ebp),%%esi\n" );
     printf( "\tshll $2,%%ecx\n" );
     printf( "\tsubl %%ecx,%%esp\n" );
@@ -1087,7 +1087,7 @@
     printf( "\tshrl $2,%%ecx\n" );
     printf( "\tcld\n" );
     printf( "\trep; movsl\n" );
-    printf( "1:\n" );
+    printf( "no_args:\n" );
 
     /* Call the function */
 
@@ -1321,6 +1321,9 @@
 
     printf( "\tpushw " PREFIX "IF1632_Saved16_sp\n" );
     printf( "\tpushw " PREFIX "IF1632_Saved16_ss\n" );
+#ifdef __svr4__
+    printf("\tdata16\n");
+#endif
     printf( "\tmovw %%ss," PREFIX "IF1632_Saved16_ss\n" );
     printf( "\tmovw %%sp," PREFIX "IF1632_Saved16_sp\n" );
 
@@ -1380,9 +1383,18 @@
 
     /* Restore the 16-bit stack */
 
+#ifdef __svr4__
+    printf( "\tdata16\n");
+#endif
     printf( "\tmovw " PREFIX "IF1632_Saved16_ss,%%ss\n" );
     printf( "\tmovw " PREFIX "IF1632_Saved16_sp,%%sp\n" );
+#ifdef __svr4__
+    printf( "\tdata16\n");
+#endif
     printf( "\tpopw " PREFIX "IF1632_Saved16_ss\n" );
+#ifdef __svr4__
+    printf( "\tdata16\n");
+#endif
     printf( "\tpopw " PREFIX "IF1632_Saved16_sp\n" );
 
     if (reg_func)
@@ -1547,6 +1559,9 @@
 
     /* Switch to the 16-bit stack */
 
+#ifdef __svr4__
+    printf("\tdata16\n");
+#endif
     printf( "\tmovw " PREFIX "IF1632_Saved16_ss,%%ss\n" );
     printf( "\tmovw " PREFIX "IF1632_Saved16_sp,%%sp\n" );
 
@@ -1608,6 +1623,9 @@
     {
         /* Set ax equal to ds for window procedures */
         printf( "\tmovw 16(%%ebx),%%ax\n" );
+#ifdef __svr4__
+        printf( "\tdata16\n");
+#endif
         printf( "\tmovw %%ax,%%ds\n" );
     }
 
@@ -1639,8 +1657,17 @@
     /* Restore 32-bit segment registers */
 
     printf( "\tmovw $0x%04x,%%bx\n", WINE_DATA_SELECTOR );
+#ifdef __svr4__
+    printf( "\tdata16\n");
+#endif
     printf( "\tmovw %%bx,%%ds\n" );
+#ifdef __svr4__
+    printf( "\tdata16\n");
+#endif
     printf( "\tmovw %%bx,%%es\n" );
+#ifdef __svr4__
+    printf( "\tdata16\n");
+#endif
     printf( "\tmovw %%bx,%%ss\n" );
 
     /* Restore the 32-bit stack */
diff --git a/tools/install-sh b/tools/install-sh
new file mode 100755
index 0000000..89fc9b0
--- /dev/null
+++ b/tools/install-sh
@@ -0,0 +1,238 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+#
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+tranformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+	-c) instcmd="$cpprog"
+	    shift
+	    continue;;
+
+	-d) dir_arg=true
+	    shift
+	    continue;;
+
+	-m) chmodcmd="$chmodprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-o) chowncmd="$chownprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-g) chgrpcmd="$chgrpprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-s) stripcmd="$stripprog"
+	    shift
+	    continue;;
+
+	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+	    shift
+	    continue;;
+
+	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+	    shift
+	    continue;;
+
+	*)  if [ x"$src" = x ]
+	    then
+		src=$1
+	    else
+		# this colon is to work around a 386BSD /bin/sh bug
+		:
+		dst=$1
+	    fi
+	    shift
+	    continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+	echo "install:	no input file specified"
+	exit 1
+else
+	true
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+	
+	if [ -d $dst ]; then
+		instcmd=:
+	else
+		instcmd=mkdir
+	fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+	if [ -f $src -o -d $src ]
+	then
+		true
+	else
+		echo "install:  $src does not exist"
+		exit 1
+	fi
+	
+	if [ x"$dst" = x ]
+	then
+		echo "install:	no destination specified"
+		exit 1
+	else
+		true
+	fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+	if [ -d $dst ]
+	then
+		dst="$dst"/`basename $src`
+	else
+		true
+	fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='	
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+	pathcomp="${pathcomp}${1}"
+	shift
+
+	if [ ! -d "${pathcomp}" ] ;
+        then
+		$mkdirprog "${pathcomp}"
+	else
+		true
+	fi
+
+	pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd $dst &&
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+	if [ x"$transformarg" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		dstfile=`basename $dst $transformbasename | 
+			sed $transformarg`$transformbasename
+	fi
+
+# don't allow the sed command to completely eliminate the filename
+
+	if [ x"$dstfile" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		true
+	fi
+
+# Make a temp file name in the proper directory.
+
+	dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd $src $dsttmp &&
+
+	trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+	$doit $rmcmd -f $dstdir/$dstfile &&
+	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/win32/advapi.c b/win32/advapi.c
index 7c9baf2..e60c784 100644
--- a/win32/advapi.c
+++ b/win32/advapi.c
@@ -35,6 +35,7 @@
 /***********************************************************************
  *           RegCreateKeyEx   (ADVAPI32.130)
  */
+LONG RegCreateKey(HKEY,LPCTSTR,LPHKEY);
 WINAPI LONG RegCreateKeyEx(HKEY key,
                             const char *subkey,
                             long dontuse,
diff --git a/win32/environment.c b/win32/environment.c
index e754f41..a9152f1 100644
--- a/win32/environment.c
+++ b/win32/environment.c
@@ -25,9 +25,13 @@
     char *cp;
     PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() );
 
+#ifndef WINELIB
     strcpy(buffer, wine_files->name);
     cp = buffer+strlen(buffer);
     *cp++ = ' ';
+#else
+    cp = buffer;
+#endif;
     memcpy( cp, &pdb->cmdLine[1], pdb->cmdLine[0] );
     dprintf_win32(stddeb,"CommandLine = %s\n", buffer );
     return buffer;
diff --git a/win32/file.c b/win32/file.c
index 9146964..2188ff5 100644
--- a/win32/file.c
+++ b/win32/file.c
@@ -30,6 +30,9 @@
 static void UnixTimeToFileTime(time_t unix_time, FILETIME *filetime);
 static int TranslateCreationFlags(DWORD create_flags);
 static int TranslateAccessFlags(DWORD access_flags);
+#ifndef MAP_ANON
+#define MAP_ANON 0
+#endif
 
 /***********************************************************************
  *           OpenFileMappingA             (KERNEL32.397)
@@ -43,6 +46,7 @@
  *           CreateFileMappingA		(KERNEL32.46)
  *
  */
+int TranslateProtectionFlags(DWORD);
 WINAPI HANDLE32 CreateFileMapping(HANDLE32 h,SECURITY_ATTRIBUTES *ats,
   DWORD pot,  DWORD sh,  DWORD hlow,  const char * lpName )
 {
@@ -97,7 +101,7 @@
                              DWORD offlo, DWORD size, DWORD st)
 {
     if (!size) size = ((FILEMAP_OBJECT *)handle)->size;
-    return mmap (st, size, ((FILEMAP_OBJECT *)handle)->prot, 
+    return mmap ((caddr_t)st, size, ((FILEMAP_OBJECT *)handle)->prot, 
                  MAP_ANON|MAP_PRIVATE, 
 		 ((FILEMAP_OBJECT *)handle)->file_obj->fd,
 		 offlo);
@@ -138,7 +142,7 @@
         lpfi->dwFileAttributes |= FILE_ATTRIBUTE_NORMAL;
     if(file_stat.st_mode & S_IFDIR)
         lpfi->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
-    if(file_stat.st_mode & S_IWRITE == 0)
+    if((file_stat.st_mode & S_IWRITE) == 0)
         lpfi->dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
 
     /* Translate the file times.  Use the last modification time
diff --git a/win32/memory.c b/win32/memory.c
index 78b04fe..352db66 100644
--- a/win32/memory.c
+++ b/win32/memory.c
@@ -20,6 +20,9 @@
 #ifndef PROT_NONE  /* FreeBSD doesn't define PROT_NONE */
 #define PROT_NONE 0
 #endif
+#ifndef MAP_ANON
+#define MAP_ANON 0
+#endif
 
 typedef struct {
     caddr_t	ptr;
@@ -33,6 +36,7 @@
 /***********************************************************************
  *           VirtualAlloc             (KERNEL32.548)
  */
+int TranslateProtectionFlags(DWORD);
 LPVOID VirtualAlloc(LPVOID lpvAddress, DWORD cbSize,
                    DWORD fdwAllocationType, DWORD fdwProtect)
 {
diff --git a/win32/object_mgt.c b/win32/object_mgt.c
index 07a6ed4..6495694 100644
--- a/win32/object_mgt.c
+++ b/win32/object_mgt.c
@@ -14,6 +14,6 @@
 
 int ValidateKernelObject(KERNEL_OBJECT *ptr)
 {
-  return (!ptr || (short int)ptr==-1);
+  return (!ptr || (short int)(int)ptr==-1);
 }
 
diff --git a/win32/time.c b/win32/time.c
index 04d6780..24be6a3 100644
--- a/win32/time.c
+++ b/win32/time.c
@@ -38,6 +38,29 @@
 }
 
 /***********************************************************************
+ *              GetSystemTime            (KERNEL32.285)
+ */
+VOID GetSystemTime(LPSYSTEMTIME systime)
+{
+    time_t local_time;
+    struct tm *local_tm;
+    struct timeval tv;
+
+    time(&local_time);
+    local_tm = gmtime(&local_time);
+    gettimeofday(&tv, NULL);
+
+    systime->wYear = local_tm->tm_year + 1900;
+    systime->wMonth = local_tm->tm_mon + 1;
+    systime->wDayOfWeek = local_tm->tm_wday;
+    systime->wDay = local_tm->tm_mday;
+    systime->wHour = local_tm->tm_hour;
+    systime->wMinute = local_tm->tm_min;
+    systime->wSecond = local_tm->tm_sec;
+    systime->wMilliseconds = (tv.tv_usec / 1000) % 1000;
+}
+
+/***********************************************************************
  *              GetTimeZoneInformation  (KERNEL32.302)
  */
 DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION tzinfo)
@@ -55,3 +78,12 @@
     return TIME_ZONE_ID_UNKNOWN;
 }
 
+/***********************************************************************
+ *              Sleep  (KERNEL32.523)
+ */
+VOID Sleep(DWORD cMilliseconds)
+{
+    if(cMilliseconds == INFINITE)
+        while(1) { /* Spin forever */ }
+    usleep(cMilliseconds*1000);
+}
diff --git a/windows/defwnd.c b/windows/defwnd.c
index bc901b0..42aad58 100644
--- a/windows/defwnd.c
+++ b/windows/defwnd.c
@@ -328,7 +328,7 @@
 	 len = 1;
 	 while(len < 64)
 		if( (hI = LoadIcon(wndPtr->hInstance,MAKEINTRESOURCE(len))) )
-		     return hI;
+		     return (LRESULT)hI;
 	}
         break;
 
diff --git a/windows/dialog.c b/windows/dialog.c
index 8f7cdb0..1ed5fe1 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -218,7 +218,7 @@
     HGLOBAL hmem;
     SEGPTR data;
 
-    dprintf_dialog(stddeb, "CreateDialogParam: "NPFMT",%08lx,"NPFMT",%08lx,%ld\n",
+    dprintf_dialog(stddeb, "CreateDialogParam: "NPFMT","SPFMT","NPFMT",%08lx,%ld\n",
 	    hInst, dlgTemplate, owner, (DWORD)dlgProc, param );
      
     if (!(hRsrc = FindResource( hInst, dlgTemplate, RT_DIALOG ))) return 0;
@@ -523,7 +523,7 @@
 {
     HWND hwnd;
     
-    dprintf_dialog(stddeb, "DialogBoxParam: "NPFMT",%08lx,"NPFMT",%08lx,%ld\n",
+    dprintf_dialog(stddeb, "DialogBoxParam: "NPFMT","SPFMT","NPFMT",%08lx,%ld\n",
 	    hInst, dlgTemplate, owner, (DWORD)dlgProc, param );
     hwnd = CreateDialogParam( hInst, dlgTemplate, owner, dlgProc, param );
     if (hwnd) return DIALOG_DoDialogBox( hwnd, owner );
@@ -751,7 +751,7 @@
 
     if (fSigned) sprintf( str, "%d", (int)value );
     else sprintf( str, "%u", value );
-    SendDlgItemMessage( hwnd, id, WM_SETTEXT, 0, MAKE_SEGPTR(str) );
+    SendDlgItemMessage( hwnd, id, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(str) );
 }
 
 
@@ -764,7 +764,7 @@
     long result = 0;
     
     if (translated) *translated = FALSE;
-    if (SendDlgItemMessage( hwnd, id, WM_GETTEXT, 30, MAKE_SEGPTR(str) ))
+    if (SendDlgItemMessage( hwnd, id, WM_GETTEXT, 30, (LPARAM)MAKE_SEGPTR(str) ))
     {
 	char * endptr;
 	result = strtol( str, &endptr, 10 );
diff --git a/windows/event.c b/windows/event.c
index 301e91f..780cc31 100644
--- a/windows/event.c
+++ b/windows/event.c
@@ -534,7 +534,7 @@
 	    winpos.flags |= SWP_NOSIZE;
 
 	/* Send WM_WINDOWPOSCHANGING */
-	SendMessage(hwnd, WM_WINDOWPOSCHANGING, 0, MAKE_SEGPTR(&winpos));
+	SendMessage(hwnd, WM_WINDOWPOSCHANGING, 0, (LPARAM)MAKE_SEGPTR(&winpos));
 
 	/* Calculate new position and size */
 	newWindowRect.left = event->x;
@@ -549,7 +549,7 @@
 	/* Set new size and position */
 	wndPtr->rectWindow = newWindowRect;
 	wndPtr->rectClient = newClientRect;
-	SendMessage(hwnd, WM_WINDOWPOSCHANGED, 0, MAKE_SEGPTR(&winpos));
+	SendMessage(hwnd, WM_WINDOWPOSCHANGED, 0, (LPARAM)MAKE_SEGPTR(&winpos));
     }
 }
 
diff --git a/windows/focus.c b/windows/focus.c
index 6e8e46a..bbd591b 100644
--- a/windows/focus.c
+++ b/windows/focus.c
@@ -11,7 +11,7 @@
 #include "winpos.h"
 #include "hook.h"
 #include "color.h"
-
+#include "options.h"
 
 static HWND hwndFocus = 0;
 
@@ -25,8 +25,9 @@
     XWindowAttributes win_attr;
     Window win;
 
-      /* Only mess with the X focus if there's no desktop window */
-    if (rootWindow != DefaultRootWindow(display)) return;
+    /* Only mess with the X focus if there's */
+    /* no desktop window and no window manager. */
+    if ((rootWindow != DefaultRootWindow(display)) || Options.managed) return;
 
     if (!hwnd)	/* If setting the focus to 0, uninstall the colormap */
     {
@@ -53,11 +54,11 @@
 {
     hwndFocus = hFocusTo;
 
-    if (hFocusFrom) SendMessage( hFocusFrom, WM_KILLFOCUS, hFocusTo, 0L);
+    if (hFocusFrom) SendMessage( hFocusFrom, WM_KILLFOCUS, (WPARAM)hFocusTo, 0L);
     if( !hFocusTo || hFocusTo != hwndFocus )
 	return;
 
-    SendMessage( hFocusTo, WM_SETFOCUS, hFocusFrom, 0L);
+    SendMessage( hFocusTo, WM_SETFOCUS, (WPARAM)hFocusFrom, 0L);
     FOCUS_SetXFocus( hFocusTo );
 }
 
@@ -88,7 +89,7 @@
 	if( hwnd == hwndFocus ) return hwnd;
 
 	/* call hooks */
-	if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, hwnd, hwndFocus) )
+	if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, (WPARAM)hwnd, (LPARAM)hwndFocus) )
 	    return 0;
 
         /* activate hwndTop if needed. */
@@ -99,7 +100,7 @@
 	    if (!IsWindow( hwnd )) return 0;  /* Abort if window destroyed */
 	}
     }
-    else if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, 0, hwndFocus ) )
+    else if( HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, 0, (LPARAM)hwndFocus ) )
              return 0;
 
       /* Change focus and send messages */
diff --git a/windows/hook.c b/windows/hook.c
index 2460cad..abb6c7f 100644
--- a/windows/hook.c
+++ b/windows/hook.c
@@ -226,7 +226,7 @@
     HTASK hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0;
 
     HANDLE handle = HOOK_SetHook( id, proc, hInst, hTask );
-    if (!handle) return -1;
+    if (!handle) return (FARPROC)-1;
     if (!((HOOKDATA *)USER_HEAP_LIN_ADDR( handle ))->next) return 0;
     /* Not sure if the return value is correct; should not matter much
      * since it's never used (see DefHookProc). -- AJ */
@@ -319,7 +319,11 @@
 DWORD CallNextHookEx( HHOOK hhook, short code, WPARAM wParam, LPARAM lParam )
 {
     HANDLE next;
+#ifdef WINELIB32
+    if (!(next = HOOK_GetNextHook( (HANDLE)hhook ))) return 0;
+#else
     if (HIWORD(hhook) != HOOK_MAGIC) return 0;  /* Not a new format hook */
     if (!(next = HOOK_GetNextHook( LOWORD(hhook) ))) return 0;
+#endif
     return HOOK_CallHook( next, code, wParam, lParam );
 }
diff --git a/windows/mdi.c b/windows/mdi.c
index 0fe19aa..86d5413 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -58,6 +58,7 @@
 /**********************************************************************
  *			MDI_MenuAppendItem
  */
+#ifdef SUPERFLUOUS_FUNCTIONS
 static BOOL MDI_MenuAppendItem(WND *clientWnd, HWND hWndChild)
 {
     char buffer[128];
@@ -74,6 +75,7 @@
  return AppendMenu(clientInfo->hWindowMenu,MF_STRING,
                        wndPtr->wIDmenu,(LPSTR)buffer);
 }
+#endif
 
 /**********************************************************************
  *			MDI_MenuModifyItem
@@ -245,7 +247,8 @@
 			  WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU |
 			  WS_THICKFRAME | WS_VISIBLE | cs->style,
 			  cs->x, cs->y, cs->cx, cs->cy, parent, 
-                         (HMENU) wIDmenu, w->hInstance, (SEGPTR)lParam);
+                         (HMENU)(DWORD)(WORD)wIDmenu, w->hInstance, 
+			 (SEGPTR)lParam);
 
     if (hwnd)
     {
@@ -376,7 +379,7 @@
         ci->nActiveChildren--;
 
         if( ci->flagChildMaximized == child )
-            ci->flagChildMaximized = 1;
+            ci->flagChildMaximized = (HWND)1;
 
         if (flagDestroy)
 	   {
@@ -477,8 +480,13 @@
     if( wndPrev )
     {
 	SendMessage( prevActiveWnd, WM_NCACTIVATE, FALSE, 0L );
+#ifdef WINELIB32
+        SendMessage( prevActiveWnd, WM_MDIACTIVATE, (WPARAM)prevActiveWnd, 
+		     (LPARAM)hWndChild);
+#else
         SendMessage( prevActiveWnd, WM_MDIACTIVATE, FALSE,
 					    MAKELONG(hWndChild,prevActiveWnd));
+#endif
         /* uncheck menu item */
        	if( clientInfo->hWindowMenu )
        	        CheckMenuItem( clientInfo->hWindowMenu,
@@ -517,13 +525,18 @@
 	    SendMessage( hWndChild, WM_NCACTIVATE, TRUE, 0L);
 	    if( GetFocus() == GetParent(hWndChild) )
 		SendMessage( GetParent(hWndChild), WM_SETFOCUS, 
-			     GetParent(hWndChild), 0L );
+			     (WPARAM)GetParent(hWndChild), 0L );
 	    else
 		SetFocus( GetParent(hWndChild) );
     }
 
+#ifdef WINELIB32
+    SendMessage( hWndChild, WM_MDIACTIVATE, (WPARAM)hWndChild,
+		 (LPARAM)prevActiveWnd );
+#else
     SendMessage( hWndChild, WM_MDIACTIVATE, TRUE,
 				       MAKELONG(prevActiveWnd,hWndChild) );
+#endif
 
     return 1;
 }
@@ -678,6 +691,10 @@
 
     if( !listTop ) return 0;
 
+    /* just free memory and return if zero windows to tile */
+    if ( iToPosition == 0 )
+        goto MDITile_free;
+
     GetClientRect(parent, &rect);
 
     rows    = (int) sqrt((double) iToPosition);
@@ -725,7 +742,8 @@
 
 	x += xsize;
     }
-    
+
+  MDITile_free:
     /* free the rest if any */
     while( listTop ) {
 	 listPrev = listTop->prev;
@@ -791,7 +809,7 @@
 
     dprintf_mdi(stddeb, "MDIPaintMaximized: frame "NPFMT",  client "NPFMT
 		",  max flag %d,  menu %04x\n", hwndFrame, hwndClient, 
-		ci->flagChildMaximized, wndPtr ? wndPtr->wIDmenu : 0);
+		(int)ci->flagChildMaximized, wndPtr ? wndPtr->wIDmenu : 0);
 
     if (ci->flagChildMaximized && wndPtr && wndPtr->wIDmenu != 0)
     {
@@ -881,7 +899,7 @@
 	return 0;
 
       case WM_MDIACTIVATE:
-	SetWindowPos(wParam,0,0,0,0,0, SWP_NOSIZE | SWP_NOMOVE );
+	SetWindowPos((HWND)wParam,0,0,0,0,0, SWP_NOSIZE | SWP_NOMOVE );
 	return 0;
 
       case WM_MDICASCADE:
@@ -891,7 +909,7 @@
 	return (LONG)MDICreateChild(w, ci, hwnd, lParam );
 
       case WM_MDIDESTROY:
-	return MDIDestroyChild(w, ci, hwnd, wParam, TRUE);
+	return (LONG)MDIDestroyChild(w, ci, hwnd, (HWND)wParam, TRUE);
 
       case WM_MDIGETACTIVE:
 	return ((LONG) ci->hwndActiveChild | 
@@ -905,7 +923,7 @@
 	       return 0;
 	
       case WM_MDIMAXIMIZE:
-	return MDIMaximizeChild(hwnd, wParam, ci);
+	return MDIMaximizeChild(hwnd, (HWND)wParam, ci);
 
       case WM_MDINEXT:
 	MDI_SwitchActiveChild(hwnd, (HWND)wParam, lParam);
@@ -915,7 +933,11 @@
 	return MDIRestoreChild(hwnd, ci);
 
       case WM_MDISETMENU:
-	return MDISetMenu(hwnd, wParam, LOWORD(lParam), HIWORD(lParam));
+#ifdef WINELIB32
+	return (LRESULT)MDISetMenu(hwnd, FALSE, (HMENU)wParam, (HMENU)lParam);
+#else
+	return (LRESULT)MDISetMenu(hwnd, wParam, LOWORD(lParam), HIWORD(lParam));
+#endif
 	
       case WM_MDITILE:
 	ci->sbStop = TRUE;
@@ -989,7 +1011,11 @@
 	    childHwnd = MDI_GetChildByID( WIN_FindWndPtr(hwndMDIClient),
                                           wParam );
  	    if( childHwnd )
+#ifdef WINELIB32 /* FIXME: need to find out the equivalent Win32 message */
+	        SendMessage(hwndMDIClient, WM_MDIACTIVATE, 0 , 0);
+#else
 	        SendMessage(hwndMDIClient, WM_MDIACTIVATE, childHwnd , 0L);
+#endif
 	    break;
 
 	  case WM_NCLBUTTONDOWN:
@@ -1048,7 +1074,7 @@
         return 0;
 
       case WM_CLOSE:
-	SendMessage(GetParent(hwnd),WM_MDIDESTROY,hwnd,0L);
+	SendMessage(GetParent(hwnd),WM_MDIDESTROY,(WPARAM)hwnd,0L);
 	return 0;
 
       case WM_SIZE:
@@ -1158,11 +1184,11 @@
 void ScrollChildren(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  WND	*wndPtr = WIN_FindWndPtr(hWnd);
- short 	 newPos;
+ short 	 newPos=-1;
  short 	 curPos;
  short 	 length;
- short 	 minPos;
- short 	 maxPos;
+ INT 	 minPos;
+ INT 	 maxPos;
  short   shift;
 
  if( !wndPtr ) return;
diff --git a/windows/message.c b/windows/message.c
index 23afe53..43bb4e4 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -1152,7 +1152,7 @@
 
     EnterSpyMessage(SPY_SENDMESSAGE, hwnd, msg, wParam, lParam);
 
-    HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 1, MAKE_SEGPTR(&msgstruct) );
+    HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 1, (LPARAM)MAKE_SEGPTR(&msgstruct) );
     if (!(wndPtr = WIN_FindWndPtr( hwnd ))) 
     {
         ExitSpyMessage(SPY_RESULT_INVALIDHWND,hwnd,msg,0);
@@ -1225,8 +1225,10 @@
     {
 	if (msg->lParam)
         {
+#ifndef WINELIB32
             HINSTANCE ds = msg->hwnd ? WIN_GetWindowInstance( msg->hwnd )
                                      : (HINSTANCE)CURRENT_DS;
+#endif
 /*            HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 0, FIXME ); */
 	    return CallWndProc( (WNDPROC)msg->lParam, ds, msg->hwnd,
                                 msg->message, msg->wParam, GetTickCount() );
@@ -1293,7 +1295,7 @@
  */
 WORD RegisterWindowMessage( SEGPTR str )
 {
-    dprintf_msg(stddeb, "RegisterWindowMessage: '%08lx'\n", str );
+    dprintf_msg(stddeb, "RegisterWindowMessage: '"SPFMT"'\n", str );
     return GlobalAddAtom( str );
 }
 
diff --git a/windows/msgbox.c b/windows/msgbox.c
index ddb9690..a83b8cc 100644
--- a/windows/msgbox.c
+++ b/windows/msgbox.c
@@ -7,12 +7,11 @@
 
 #include "windows.h"
 #include "dlgs.h"
-#include "global.h"
 #include "selectors.h"
 #include "alias.h"
 #include "relay32.h"
 #include "win.h"
-#include "../rc/sysres.h"
+#include "resource.h"
 #include "task.h"
 
 typedef struct {
@@ -201,15 +200,13 @@
         initialized=1;
     }
 
-    handle = GLOBAL_CreateBlock( GMEM_FIXED, sysres_DIALOG_MSGBOX.bytes,
-                                 sysres_DIALOG_MSGBOX.size, GetCurrentPDB(),
-                                 FALSE, FALSE, TRUE, NULL );
+    handle = SYSRES_LoadResource( SYSRES_DIALOG_MSGBOX );
     if (!handle) return 0;
     ret = DialogBoxIndirectParam( WIN_GetWindowInstance(hWnd),
                                   handle, hWnd,
                                   GetWndProcEntry16("SystemMessageBoxProc"),
                                   (LONG)&mbox );
-    GLOBAL_FreeBlock( handle );
+    SYSRES_FreeResource( handle );
     return ret;
 }
 
diff --git a/windows/nonclient.c b/windows/nonclient.c
index 9df7ae5..863b1c1 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -174,16 +174,16 @@
         MinMax.ptMaxPosition.y = -yinc;
     }
 
-    SendMessage( hwnd, WM_GETMINMAXINFO, 0, MAKE_SEGPTR(&MinMax) );
+    SendMessage( hwnd, WM_GETMINMAXINFO, 0, (LPARAM)MAKE_SEGPTR(&MinMax) );
 
       /* Some sanity checks */
 
     dprintf_nonclient(stddeb, 
 		      "NC_GetMinMaxInfo: %d %d / %d %d / %d %d / %d %d\n",
-		      MinMax.ptMaxSize.x,MinMax.ptMaxSize.y,
-		      MinMax.ptMaxPosition.x,MinMax.ptMaxPosition.y,
-		      MinMax.ptMaxTrackSize.x,MinMax.ptMaxTrackSize.y,
-		      MinMax.ptMinTrackSize.x,MinMax.ptMinTrackSize.y);
+		      (int)MinMax.ptMaxSize.x,(int)MinMax.ptMaxSize.y,
+		      (int)MinMax.ptMaxPosition.x,(int)MinMax.ptMaxPosition.y,
+		      (int)MinMax.ptMaxTrackSize.x,(int)MinMax.ptMaxTrackSize.y,
+		      (int)MinMax.ptMinTrackSize.x,(int)MinMax.ptMinTrackSize.y);
     MinMax.ptMaxTrackSize.x = MAX( MinMax.ptMaxTrackSize.x,
 				   MinMax.ptMinTrackSize.x );
     MinMax.ptMaxTrackSize.y = MAX( MinMax.ptMaxTrackSize.y,
@@ -892,7 +892,7 @@
     }
     *capturePoint = pt;
     SetCursorPos( capturePoint->x, capturePoint->y );
-    NC_HandleSetCursor( hwnd, hwnd, MAKELONG( hittest, WM_MOUSEMOVE ));
+    NC_HandleSetCursor( hwnd, (WPARAM)hwnd, MAKELONG( hittest, WM_MOUSEMOVE ));
     return hittest;
 }
 
diff --git a/windows/property.c b/windows/property.c
index 601615f..1dcafb8 100644
--- a/windows/property.c
+++ b/windows/property.c
@@ -31,7 +31,7 @@
     PROPERTY *prop;
     WND *wndPtr;
 
-    dprintf_prop( stddeb, "SetProp: "NPFMT" %08lx "NPFMT"\n", hwnd, str, hData );
+    dprintf_prop( stddeb, "SetProp: "NPFMT" "SPFMT" "NPFMT"\n", hwnd, str, hData );
     if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
     hProp = USER_HEAP_ALLOC( sizeof(PROPERTY) + 
                              (HIWORD(str) ? strlen(PTR_SEG_TO_LIN(str)) : 0 ));
@@ -62,7 +62,7 @@
     HANDLE hProp;
     WND *wndPtr;
 
-    dprintf_prop( stddeb, "GetProp: "NPFMT" %08lx\n", hwnd, str );
+    dprintf_prop( stddeb, "GetProp: "NPFMT" "SPFMT"\n", hwnd, str );
     if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
     hProp = wndPtr->hProp;
     while (hProp)
@@ -88,7 +88,7 @@
     HANDLE *hProp;
     WND *wndPtr;
 
-    dprintf_prop( stddeb, "RemoveProp: "NPFMT" %08lx\n", hwnd, str );
+    dprintf_prop( stddeb, "RemoveProp: "NPFMT" "SPFMT"\n", hwnd, str );
     if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
     hProp = &wndPtr->hProp;
     while (*hProp)
diff --git a/windows/scroll.c b/windows/scroll.c
index e8652cf..9c5ad2b 100644
--- a/windows/scroll.c
+++ b/windows/scroll.c
@@ -19,7 +19,7 @@
 
 
 
-extern DCE_GetVisRgn(HWND, WORD);
+extern HRGN DCE_GetVisRgn(HWND, WORD);
 
 static int RgnType;
 
@@ -127,10 +127,10 @@
     RECT rc, cliprc;
 
     dprintf_scroll(stddeb,"ScrollWindow: dx=%d, dy=%d, lpRect =%08lx clipRect=%i,%i,%i,%i\n", 
-	    dx, dy, (LONG)rect, (clipRect)?clipRect->left:0,
-                                (clipRect)?clipRect->top:0,
-                                (clipRect)?clipRect->right:0, 
-                                (clipRect)?clipRect->bottom:0);
+	    dx, dy, (LONG)rect, (int)((clipRect)?clipRect->left:0),
+                                (int)((clipRect)?clipRect->top:0),
+                                (int)((clipRect)?clipRect->right:0), 
+                                (int)((clipRect)?clipRect->bottom:0));
 
     /* if rect is NULL children have to be moved */
     if ( !rect )
@@ -146,8 +146,9 @@
        {
 	  GetClientRect(hwnd,&rc);
 	  dprintf_scroll(stddeb,"\trect=%i %i %i %i client=%i %i %i %i\n",
-			 rect->left,rect->top,rect->right,rect->bottom,rc.left,rc.top,
-			 rc.right,rc.bottom);
+			 (int)rect->left,(int)rect->top,(int)rect->right,
+			 (int)rect->bottom,(int)rc.left,(int)rc.top,
+			 (int)rc.right,(int)rc.bottom);
 
 	CopyRect(&rc, rect);
 	  hdc = GetDC(hwnd);
@@ -206,10 +207,10 @@
     DC *dc = (DC *)GDI_GetObjPtr(hdc, DC_MAGIC);
 
     dprintf_scroll(stddeb,"ScrollDC: dx=%d dy=%d, hrgnUpdate="NPFMT" rc=%i %i %i %i\n",
-                                     dx,dy,hrgnUpdate,(rc)?rc->left:0,
-				                      (rc)?rc->top:0,
-				                      (rc)?rc->right:0,
-				                      (rc)?rc->bottom:0); 
+                                     dx,dy,hrgnUpdate,(int)((rc)?rc->left:0),
+				                      (int)((rc)?rc->top:0),
+				                      (int)((rc)?rc->right:0),
+				                      (int)((rc)?rc->bottom:0)); 
 
     if (rc == NULL)
 	return FALSE;
@@ -288,7 +289,7 @@
     HDC hdc;
     RECT rc, cliprc;
 
-    dprintf_scroll(stddeb,"ScrollWindowEx: dx=%d, dy=%d, wFlags="NPFMT"\n",dx, dy, flags);
+    dprintf_scroll(stddeb,"ScrollWindowEx: dx=%d, dy=%d, wFlags=%04x\n",dx, dy, flags);
 
     hdc = GetDC(hwnd);
 
diff --git a/windows/win.c b/windows/win.c
index 1848a3b..da50aec 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -496,7 +496,7 @@
     createStruct.lpszClass      = className;
     createStruct.dwExStyle      = 0;
 
-    wmcreate = SendMessage( hwnd, WM_NCCREATE, 0, MAKE_SEGPTR(&createStruct) );
+    wmcreate = SendMessage( hwnd, WM_NCCREATE, 0, (LPARAM)MAKE_SEGPTR(&createStruct) );
     if (!wmcreate)
     {
 	dprintf_win(stddeb,"CreateWindowEx: WM_NCCREATE return 0\n");
@@ -506,7 +506,7 @@
     {
 	WINPOS_SendNCCalcSize( hwnd, FALSE, &wndPtr->rectWindow,
 			       NULL, NULL, NULL, &wndPtr->rectClient );
-	wmcreate = SendMessage(hwnd, WM_CREATE, 0, MAKE_SEGPTR(&createStruct));
+	wmcreate = SendMessage(hwnd, WM_CREATE, 0, (LPARAM)MAKE_SEGPTR(&createStruct));
     }
 
     if (wmcreate == -1)
@@ -1309,8 +1309,8 @@
 
 	 if(ptrWnd)
 	    dprintf_msg(stddeb,"DragQueryUpdate: hwnd = "NPFMT", %i %i - %i %i\n",hWnd,
-			     ptrWnd->rectWindow.left,ptrWnd->rectWindow.top,
-			     ptrWnd->rectWindow.right,ptrWnd->rectWindow.bottom);	 
+			(int)ptrWnd->rectWindow.left,(int)ptrWnd->rectWindow.top,
+			(int)ptrWnd->rectWindow.right,(int)ptrWnd->rectWindow.bottom);	 
 	 else
 	    dprintf_msg(stddeb,"DragQueryUpdate: hwnd = "NPFMT"\n",hWnd);
 
@@ -1460,7 +1460,7 @@
     if( hCurrentCursor )
         SetCursor(hCurrentCursor);
 
-    dprintf_msg(stddeb,"drag: got "NPFMT"\n",btemp);
+    dprintf_msg(stddeb,"drag: got %04x\n",btemp);
 
     /* send WM_DRAGLOOP */
     SendMessage( hWnd, WM_DRAGLOOP, (WPARAM)(hCurrentCursor != hBummer) , 
@@ -1498,7 +1498,7 @@
 
  if( hCurrentCursor != hBummer ) 
 	dwRet = SendMessage( lpDragInfo->hScope, WM_DROPOBJECT, 
-			     hWnd, (LPARAM)spDragInfo );
+			     (WPARAM)hWnd, (LPARAM)spDragInfo );
  GlobalFree(hDragInfo);
 
  return dwRet;
diff --git a/windows/winpos.c b/windows/winpos.c
index 97109b7..659cd2f 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -583,7 +583,7 @@
 	return 1;
 
     SendMessage( hWnd, WM_ACTIVATEAPP, lpActStruct->wFlag,
-		(LPARAM)(lpActStruct->hWindowTask)?lpActStruct->hWindowTask:0);
+		(LPARAM)((lpActStruct->hWindowTask)?lpActStruct->hWindowTask:0));
     return 1;
 }
 
@@ -615,7 +615,7 @@
 	dprintf_win(stddeb,"WINPOS_ActivateWindow: no current active window.\n");
 
     /* call CBT hook chain */
-    wRet = HOOK_CallHooks(WH_CBT, HCBT_ACTIVATE, hWnd,
+    wRet = HOOK_CallHooks(WH_CBT, HCBT_ACTIVATE, (WPARAM)hWnd,
 			  (LPARAM)MAKE_SEGPTR(&cbtStruct));
 
     if( wRet ) return wRet;
@@ -623,6 +623,7 @@
     /* set prev active wnd to current active wnd and send notification */
     if( (hwndPrevActive = hwndActive) )
     {
+/* FIXME: need a Win32 translation for WINELIB32 */
 	if( !SendMessage(hwndPrevActive, WM_NCACTIVATE, 0, MAKELONG(hWnd,wIconized)) )
         {
 	    if (GetSysModalWindow() != hWnd) return 0;
@@ -647,7 +648,7 @@
 
     /* send palette messages */
     if( SendMessage( hWnd, WM_QUERYNEWPALETTE, 0, 0L) )
-	SendMessage((HWND)-1, WM_PALETTEISCHANGING, hWnd, 0L );
+	SendMessage((HWND)-1, WM_PALETTEISCHANGING, (WPARAM)hWnd, 0L );
 
     /* if prev wnd is minimized redraw icon title 
   if( hwndPrevActive )
@@ -718,6 +719,7 @@
     wndTemp->hwndLastActive = hWnd;
 
     wIconized = HIWORD(wndTemp->dwStyle & WS_MINIMIZE);
+/* FIXME: Needs a Win32 translation for WINELIB32 */
     SendMessage( hWnd, WM_NCACTIVATE, 1,
 		 MAKELONG(hwndPrevActive,wIconized));
 #ifdef WINELIB32
@@ -753,26 +755,26 @@
  *	   WINPOS_ChangeActiveWindow
  *
  */
-HWND WINPOS_ChangeActiveWindow( HWND hWnd, BOOL mouseMsg )
+BOOL WINPOS_ChangeActiveWindow( HWND hWnd, BOOL mouseMsg )
 {
     WND *wndPtr = WIN_FindWndPtr(hWnd);
 
-    if( !wndPtr ) return  0;
+    if( !wndPtr ) return FALSE;
 
     /* minors are not allowed */
     if( (wndPtr->dwStyle & WS_CHILD) && !( wndPtr->dwStyle & WS_POPUP))
 	return SendMessage(hWnd, WM_CHILDACTIVATE, 0, 0L);
 
-    if( hWnd == hwndActive ) return 0;     
+    if( hWnd == hwndActive ) return FALSE;
 
     if( !WINPOS_SetActiveWindow(hWnd ,mouseMsg ,TRUE) )
-	return 0;
+	return FALSE;
 
     /* switch desktop queue to current active here */
     if( wndPtr->hwndParent == GetDesktopWindow())
     { }
 
-    return 1;
+    return TRUE;
 }
 
 
@@ -799,10 +801,10 @@
 	params.lppos = winpos;
     }
     result = SendMessage( hwnd, WM_NCCALCSIZE, calcValidRect,
-                          MAKE_SEGPTR( &params ) );
+                          (LPARAM)MAKE_SEGPTR( &params ) );
     dprintf_win(stddeb, "WINPOS_SendNCCalcSize: %d %d %d %d\n",
-		params.rgrc[0].top,    params.rgrc[0].left,
-		params.rgrc[0].bottom, params.rgrc[0].right);
+		(int)params.rgrc[0].top,    (int)params.rgrc[0].left,
+		(int)params.rgrc[0].bottom, (int)params.rgrc[0].right);
     *newClientRect = params.rgrc[0];
     return result;
 }
@@ -1006,7 +1008,7 @@
       /* Send WM_WINDOWPOSCHANGING message */
 
     if (!(flags & SWP_NOSENDCHANGING))
-	SendMessage( hwnd, WM_WINDOWPOSCHANGING, 0, MAKE_SEGPTR(&winpos) );
+	SendMessage( hwnd, WM_WINDOWPOSCHANGING, 0, (LPARAM)MAKE_SEGPTR(&winpos) );
 
       /* Calculate new position and size */
 
@@ -1162,7 +1164,7 @@
 
     if (!(winpos.flags & SWP_NOSENDCHANGING))
         SendMessage( winpos.hwnd, WM_WINDOWPOSCHANGED,
-                     0, MAKE_SEGPTR(&winpos) );
+                     0, (LPARAM)MAKE_SEGPTR(&winpos) );
 
     return TRUE;
 }
diff --git a/Wine.man b/wine.man
similarity index 100%
rename from Wine.man
rename to wine.man
