diff --git a/ChangeLog b/ChangeLog
index 0ec9eaa..37409fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,222 @@
+----------------------------------------------------------------------
+Sun Oct 30 13:01:18 1994  Alexandre Julliard  (julliard@lamisun.epfl.ch)
+
+	* [controls/static.c]
+	Bug fix for SS_ICON controls.
+
+	* [if1632/Imakefile]
+	Fixed call.o dependencies.
+
+	* [objects/clipping.c] [objects/dc.c]
+	Fixed visible region handling. hVisRgn is always non-null now.
+
+	* [windows/dce.c]
+	Bug fix in GetDCEx for CS_OWNDC windows.
+
+	* [windows/nonclient.c] [windows/painting.c]
+	Fixes to icon window drawing.
+
+	* [windows/winpos.c]
+	A few fixes in SetWindowPos().
+
+Sun Oct 30 12:50:24 1994  Michael Patra  <micky@marie.physik.tu-berlin.de>
+
+	* [objects/bitblt.c]
+	BitBlt(): BitBlt is now able to handle any raster operation. If
+	the request can't be passed to XWindows directly, it's quite
+	slow, though.
+
+	* [*/*.c]
+	  [misc/main.c]
+	Improvements of the system for handling debug messages. Options are
+	now also loaded from /usr/lib/X11/app-defaults/Wine (insert
+	*debugoptions: +xxx there if you want to have turn messages xxx on).
+
+	* [controls/menu.c]
+	DestroyMenu(): The whole window won't be destroyed as a sideeffect
+	any longer.
+
+	* [misc/file.c]
+	OpenFile(): Fixed bug in searching in system/window-directory.
+
+Sun Oct 30 12:25:53 1994  Jimmy Tirtawangsa <j0t2527@tam2000.tamu.edu>
+
+	* [include/windows.h]
+	Bug fix for window related structures.
+	DCB and COMSTAT are affected. They must be packed.
+
+	* [misc/comm.c]
+	Bug fix for COM ports:
+	Dial and dialog window in terminal.exe now works.
+	Non sequential COM assignments in wine.conf should not break now.
+	Baudrate can be specified in wine.conf to overcome baudrate limitation
+	in mswindow. See sample wine.ini
+
+	* [include/comm.h]
+	add baudrate field to DosDeviceStructre
+
+	* [object/font.c]
+	Bug fix for font assignment.
+	Use pairs of foundry and family fontnames in X11 to correspond with
+	window's fonts.
+	Put font assignment ini wine.ini.
+
+	* [wine.ini]
+	Adding optional baudrate after port name in "serialports" section
+	Add new section, "fonts".
+	"default" is special key in "fonts" to match any unmatch window font.
+
+Oct 29, 94 (new address) wine@trgcorp.mksinfo.qc.ca (Martin Ayotte)
+
+	* [if1632/relay.c]
+	* [if1632/commdlg.spec] 	New file.
+	* [misc/commdlg.c] 			New file.
+	* [include/commdlg.h] 		New file.
+	Begin of an emulated COMMDLG DLL, built-in for now.
+	(BTW, if you want to switch between built-in & 16bits CommDlg, only 
+	thing you need to do is to put the real/dummy name in file relay.c)
+
+	* [controls/scroll.c]
+	* [controls/combo.c]
+	* [controls/listbox.c]
+	Few bug fixes and/or cosmetic.
+
+	* [misc/audio.c]
+	* [misc/mmaux.c]
+	bug fixes and flags returned to emulate SB16.
+
+	* [misc/midi.c] 			New file.
+	skeleton for 'Midi' MMSYSTEM & MCI driver.
+
+	* [misc/mcianim.c] 			New file.
+	skeleton for 'Animation1' MCI driver.
+
+	* [windows/win.c]
+	Add new stub for GetLastActiveWindow().
+
+Tue Oct 25 09:17:25 1994  Olaf Flebbe  (flebbe@tat.physik.uni-tuebingen.de)
+
+	* [if1632/call.S] [tools/build.c]
+           Support for ELF format. (Not complete)
+
+Sun Oct 23 00:51:50 1994  Paul Falstad  (pf@zoof)
+
+	* [if1632/user.spec]
+	Add stubs for ArrangeIconicWindows(), etc.
+
+	* [if1632/kernel.spec]
+	Add IsBad*Ptr() functions.
+
+	* [loader/signal.c]
+	Add test_memory(), for use with IsBad*Ptr().
+
+	* [windows/winpos.c]
+	Add stubs for TileChildWindows(), etc.
+
+	* [windows/win.c]
+	IsWindow() shouldn't crash if it's given a bad handle.
+	Add stub for GetLastActivePopup().
+
+	* [memory/global.c]
+	Implement the IsBad*Ptr() functions.
+
+	* [controls/listbox.c]
+	Return the full longword of the item data in LB_GETITEMDATA.
+
+	* [controls/edit.c]
+	Don't let the user select an area past the end of the text.
+
+	* [objects/text.c]
+	In DrawText(), the code to delete crlfs also removed multiple
+	consecutive newlines.  Also, using DT_CALCRECT didn't return
+	the right height, and the width wasn't returned at all.
+	This caused MessageBoxes to be missing much of their text.
+
+	* [windows/scroll.c]
+	ScrollWindow[Ex] didn't work right with null LPRECT arguments.
+
+Fri Oct 21 21:47:19 1994  Paul Falstad  (pf@zoof.cts.com)
+
+	* [miscemu/int21.c]
+	Fixed int21 0x42 handler to properly assemble 32-bit seek ptr.
+
+	* [misc/property.c]
+	Fixed inverted logic in EnumProps(), and changed CallBack16()
+	call to use new arg format.
+
+	* [windows/win.c]
+	Fixed CallBack16() call in Enum[Child]Windows to use new arg
+	format; this fixes crashes in enum procedures.
+
+Wed Oct 19 21:30:00 PDT 1994		martin@cs.csufresno.edu
+
+	* [misc/clipboard.c]
+	  [windows/event.c]
+	  [windows/message.c]
+	Added cut and paste between Wine and other X clients via
+	the PRIMARY selection. Text only this time.
+
+	* [controls/edit.c]
+	EDIT_LineLength, EDIT_TextLine return 0 for lines after last one.
+
+	* [windows/defwnd.c]
+	Send WM_SYSCOMMAND to overlapped ancestor window, 
+	not the receiver of WM_SYSKEYDOWN
+
+Sat Oct 22 15:01:02 1994  Thomas Sandford <t.d.g.sandford@bradford.ac.uk>
+
+        * [controls/edit.c]
+	ClientWidth()/ClientHeight() macros: return 0 if size would
+	be negative
+	EDIT_StrLength(): takes unsigned char* instead of char*
+
+	* [controls/listbox.c]
+	ListBoxWndProc(): in "case WM_MOUSEMOVE" - set lphl at start of
+	case instead of in each place required (it was omitted in
+	some places causing problems!)
+
+	* [controls/menu.c]
+	MENU_CalcItemSize(): don't try to find size of a text item
+	if the pointer is NULL
+
+	* [include/heap.h]
+	added definition of HEAP_LocalInit()
+
+	* [include/msdos.h]
+	removed buggy pointer() macro (use SAFEMAKEPTR() from segmem.h
+	instead)
+
+	* [loader/selector.c]
+	IPCCopySelector(): added missing flags to shmget() call
+	? does this break linux - I added these flags in a previous
+	patch but they were missing in the corresponding release ?
+
+	* [loader/signal.c]
+	win_fault(): added missing definitions of i, dump for those
+	not running NetBSD or linux
+
+	* [misc/dos_fs.c]
+	DOS_GetCurrentDir(): made temp[] static so it can be safely
+	returned
+
+	* [miscemu/int21.c,int25.c,int26.c]
+	Changed all invocations of pointer() to SAFEMAKEPTR(). Included
+	segmem.h where necessary.
+
+	* [windows/dialog.c]
+	CreateDialogIndirectParam(): Changed HEAP_Init() call to 
+	HEAP_LocalInit(), removed redundant variables
+
+Sat Oct 22 00:29:41 MET 1994		  Dag Asheim (dash@ifi.uio.no)
+
+	* [loader/library.c] [loader/main.c] [loader/ne_image.c]
+	  [misc/exec.c] [miscemu/int10.c] [miscemu/int21.c]
+	  [objects/bitblt.c] [objects/metafile.c]
+	Rewritten more printf's to use the new debugging system, and
+	made wine less verbose per default. Use "-debugmsg +module"
+	to get (almost) the same behavior as before.
+
+----------------------------------------------------------------------
 Sun Oct 16 13:29:07 1994  Alexandre Julliard  (julliard@lamisun.epfl.ch)
 
 	* [controls/button.c]
diff --git a/Imakefile b/Imakefile
index 5b5f709..9a38b3d7 100644
--- a/Imakefile
+++ b/Imakefile
@@ -30,6 +30,7 @@
 	loader \
 	misc \
 	objects \
+	rc \
 	test \
 	windows
 
diff --git a/controls/combo.c b/controls/combo.c
index 0dc66fb..fbf10f1 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -14,6 +14,7 @@
 
 #include "windows.h"
 #include "combo.h"
+#include "user.h"
 #include "heap.h"
 #include "win.h"
 #include "prototypes.h"
@@ -22,11 +23,18 @@
 /* #undef  DEBUG_COMBO */
 #include "debug.h"
 
+  /* windows/graphics.c */
+extern void GRAPH_DrawReliefRect( HDC hdc, RECT *rect,
+                                 int thickness, BOOL pressed );
+extern BOOL GRAPH_DrawBitmap( HDC hdc, HBITMAP hbitmap, int xdest, int ydest,
+                          int xsrc, int ysrc, int width, int height, int rop );
+
 
 HBITMAP hComboBit = 0;
 
 LPHEADCOMBO ComboGetStorageHeader(HWND hwnd);
 int CreateComboStruct(HWND hwnd);
+void ComboBoxStaticOwnerDraw(HWND hWnd, LPHEADCOMBO lphc);
 
 
 /***********************************************************************
@@ -34,66 +42,75 @@
  */
 LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
 {    
-    RECT	rect;
-    int		y, count;
-    int		width, height;
-    WND  	*wndPtr;
-    LPHEADCOMBO lphc;
-    HDC		hDC;
-    BITMAP	bm;
-    char	str[128];
-    PAINTSTRUCT paintstruct;
-    int         style;
-    switch(message)
-    {
-    case WM_CREATE:
-		wndPtr = WIN_FindWndPtr(hwnd);
-		if (wndPtr == NULL) return 0;
-		dprintf_combo(stddeb,"Combo WM_CREATE %p !\n", lphc);
-		if (hComboBit == (HBITMAP)NULL) 
-		hComboBit = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_COMBO));
-		GetObject(hComboBit, sizeof(BITMAP), (LPSTR)&bm);
-		wndPtr->dwStyle &= 0xFFFFFFFFL ^ (WS_VSCROLL | WS_HSCROLL);
-		GetWindowRect(hwnd, &rect);
-		width = rect.right - rect.left;
-		height = rect.bottom - rect.top;
-		SetWindowPos(hwnd, 0, 0, 0, width + bm.bmHeight, bm.bmHeight, 
-										SWP_NOMOVE | SWP_NOZORDER); 
-		CreateComboStruct(hwnd);
-		lphc = ComboGetStorageHeader(hwnd);
-		if (lphc == NULL) return 0;
-		if (wndPtr->dwStyle & CBS_SIMPLE)
-/*			lphc->hWndEdit = CreateWindow("EDIT", "", */
-			lphc->hWndEdit = CreateWindow("STATIC", "", 
-				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | SS_LEFT,
-				0, 0, width - bm.bmHeight, bm.bmHeight, 
-				hwnd, 1, wndPtr->hInstance, 0L);
-		else
-			lphc->hWndEdit = CreateWindow("STATIC", "", 
-				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | SS_LEFT,
-				0, 0, width - bm.bmHeight, bm.bmHeight, 
-				hwnd, 1, wndPtr->hInstance, 0L);
-		style=0;
-		if ((wndPtr->dwStyle & CBS_HASSTRINGS) == CBS_HASSTRINGS)
-			style |= LBS_HASSTRINGS;
-		if ((wndPtr->dwStyle & CBS_OWNERDRAWFIXED) ==CBS_OWNERDRAWFIXED)
-			style |= LBS_OWNERDRAWFIXED;
-		if ((wndPtr->dwStyle & CBS_OWNERDRAWVARIABLE)==CBS_OWNERDRAWVARIABLE)
-			style |= LBS_OWNERDRAWVARIABLE;
-		lphc->hWndLBox = CreateWindow("LISTBOX", "", 
-			WS_POPUP | WS_BORDER | WS_VSCROLL | LBS_NOTIFY | style,
-			rect.left, rect.top + bm.bmHeight, 
-			width, height, wndPtr->hwndParent, 0, 
-			wndPtr->hInstance, (LPSTR)MAKELONG(0, hwnd));
-		ShowWindow(lphc->hWndLBox, SW_HIDE);
-		dprintf_combo(stddeb,"Combo Creation LBox=%X!\n", 
-			      lphc->hWndLBox);
-		return 0;
+	RECT	rect;
+	int		y, count;
+	int		width, height;
+	WND  	*wndPtr;
+	LPHEADCOMBO lphc;
+	HDC		hDC;
+	BITMAP	bm;
+	char	str[128];
+	PAINTSTRUCT paintstruct;
+	LPDRAWITEMSTRUCT lpdis;
+	DWORD       dwStyle;
+	switch(message) {
+		case WM_CREATE:
+			wndPtr = WIN_FindWndPtr(hwnd);
+			if (wndPtr == NULL) return 0;
+			dprintf_combo(stddeb,"Combo WM_CREATE %p !\n", lphc);
+			if (hComboBit == (HBITMAP)NULL) 
+			hComboBit = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_COMBO));
+			GetObject(hComboBit, sizeof(BITMAP), (LPSTR)&bm);
+			wndPtr->dwStyle &= 0xFFFFFFFFL ^ (WS_VSCROLL | WS_HSCROLL);
+			GetWindowRect(hwnd, &rect);
+			width = rect.right - rect.left;
+			height = rect.bottom - rect.top;
+			if (height < bm.bmHeight) height = bm.bmHeight;
+/*			SetWindowPos(hwnd, 0, 0, 0, width + bm.bmHeight, bm.bmHeight, 
+									SWP_NOMOVE | SWP_NOZORDER); */
+			SetWindowPos(hwnd, 0, 0, 0, width, bm.bmHeight, 
+								SWP_NOMOVE | SWP_NOZORDER); 
+			CreateComboStruct(hwnd);
+			lphc = ComboGetStorageHeader(hwnd);
+			if (lphc == NULL) return 0;
+/*			SetRect(&lphc->RectEdit, 0, 0, width - 2, bm.bmHeight); */
+			SetRect(&lphc->RectEdit, 0, 0, width - bm.bmHeight, bm.bmHeight);
+			if (wndPtr->dwStyle & CBS_DROPDOWNLIST) {
+				if ((wndPtr->dwStyle & CBS_OWNERDRAWFIXED) == CBS_OWNERDRAWFIXED ||
+					(wndPtr->dwStyle & CBS_OWNERDRAWVARIABLE) == CBS_OWNERDRAWVARIABLE)
+					lphc->hWndEdit = 0;
+				else
+					lphc->hWndEdit = CreateWindow("STATIC", "",
+						WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | SS_LEFT,
+						0, 0, width - bm.bmHeight, bm.bmHeight,
+						hwnd, 1, wndPtr->hInstance, 0L);
+				}
+			else {
+/*				lphc->hWndEdit = CreateWindow("EDIT", "", */
+				lphc->hWndEdit = CreateWindow("STATIC", "",
+					WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | SS_LEFT,
+					0, 0, width - bm.bmHeight, bm.bmHeight,
+					hwnd, 1, wndPtr->hInstance, 0L);
+				}
+			dwStyle = WS_POPUP | WS_BORDER | WS_VSCROLL | LBS_NOTIFY;
+			if ((wndPtr->dwStyle & CBS_HASSTRINGS) == CBS_HASSTRINGS)
+				dwStyle |= LBS_HASSTRINGS;
+			if ((wndPtr->dwStyle & CBS_OWNERDRAWFIXED) == CBS_OWNERDRAWFIXED)
+				dwStyle |= LBS_OWNERDRAWFIXED;
+			if ((wndPtr->dwStyle & CBS_OWNERDRAWVARIABLE) == CBS_OWNERDRAWVARIABLE)
+				dwStyle |= LBS_OWNERDRAWVARIABLE;
+			lphc->hWndLBox = CreateWindow("LISTBOX", "", dwStyle,
+				rect.left, rect.top + bm.bmHeight,
+				width, height, wndPtr->hwndParent, 0,
+				wndPtr->hInstance, (LPSTR)MAKELONG(0, hwnd));
+			ShowWindow(lphc->hWndLBox, SW_HIDE);
+			dprintf_combo(stddeb,"Combo Creation LBox=%X!\n", lphc->hWndLBox);
+			return 0;
     case WM_DESTROY:
 		lphc = ComboGetStorageHeader(hwnd);
 		if (lphc == 0) return 0;
 /*
-		DestroyWindow(lphc->hWndEdit);
+		if (lphc->hWndEdit != 0) DestroyWindow(lphc->hWndEdit);
 */
 		DestroyWindow(lphc->hWndLBox);
 		free(lphc);
@@ -114,24 +131,29 @@
     case WM_COMMAND:
 		wndPtr = WIN_FindWndPtr(hwnd);
 		lphc = ComboGetStorageHeader(hwnd);
-		if (lphc == NULL) return 0;
+		if (lphc == NULL || wndPtr == NULL) return 0;
 		if (LOWORD(lParam) == lphc->hWndLBox) {
-            switch(HIWORD(lParam)) {
-	        	case LBN_SELCHANGE:
-				    lphc->dwState = lphc->dwState & (CB_SHOWDROPDOWN ^ 0xFFFFFFFFL);
-				    ShowWindow(lphc->hWndLBox, SW_HIDE);
-				    y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
-				    if (y != LB_ERR) {
-				    	SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
-				    	SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str); 
-				    	}
-				    SendMessage(GetParent(hwnd), WM_COMMAND, wndPtr->wIDmenu,
-					        	MAKELONG(hwnd, CBN_SELCHANGE));
-	        	    break;
-	        	case LBN_DBLCLK:
-				    SendMessage(GetParent(hwnd), WM_COMMAND, wndPtr->wIDmenu,
-					        	MAKELONG(hwnd, CBN_DBLCLK));
-	        	    break;
+			switch(HIWORD(lParam)) {
+				case LBN_SELCHANGE:
+					lphc->dwState = lphc->dwState & (CB_SHOWDROPDOWN ^ 0xFFFFFFFFL);
+					ShowWindow(lphc->hWndLBox, SW_HIDE);
+					y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
+					if (y != LB_ERR) {
+						SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
+						if (lphc->hWndEdit != 0) 
+							SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
+						else {
+							InvalidateRect(hwnd, NULL, TRUE);
+							UpdateWindow(hwnd);
+							}
+						}
+					SendMessage(GetParent(hwnd), WM_COMMAND, wndPtr->wIDmenu,
+										MAKELONG(hwnd, CBN_SELCHANGE));
+					break;
+				case LBN_DBLCLK:
+					SendMessage(GetParent(hwnd), WM_COMMAND, wndPtr->wIDmenu,
+										MAKELONG(hwnd, CBN_DBLCLK));
+					break;
 	        	}
             }
 		break;
@@ -178,14 +200,18 @@
    case WM_KEYDOWN:
 		wndPtr = WIN_FindWndPtr(hwnd);
 		lphc = ComboGetStorageHeader(hwnd);
-		if (lphc == NULL) return 0;
+		if (lphc == NULL || wndPtr == NULL) return 0;
 		y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
 		count = SendMessage(lphc->hWndLBox, LB_GETCOUNT, 0, 0L);
 		dprintf_combo(stddeb,"COMBOBOX // GetKeyState(VK_MENU)=%d\n", GetKeyState(VK_MENU));
 		if (GetKeyState(VK_MENU) < 0) {
 			lphc->dwState = lphc->dwState ^ CB_SHOWDROPDOWN;
 			if ((lphc->dwState & CB_SHOWDROPDOWN) == CB_SHOWDROPDOWN) {
-				ShowWindow(lphc->hWndLBox, SW_SHOW);
+				GetWindowRect(hwnd, &rect);
+				SetWindowPos(lphc->hWndLBox, 0, rect.left, rect.bottom, 0, 0, 
+									SWP_NOREDRAW | SWP_NOSIZE); 
+				SetWindowPos(lphc->hWndLBox, 0, 0, 0, 0, 0, SWP_SHOWWINDOW | 
+									SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); 
 			    SetFocus(lphc->hWndLBox);
 				}
 			else {
@@ -193,7 +219,8 @@
 				y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
 				if (y != LB_ERR) {
 					SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
-					SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
+					if (lphc->hWndEdit != 0) 
+						SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
 					}
 				}
 		    }
@@ -214,9 +241,11 @@
 				}
 			if (y < 0) y = 0;
 			if (y >= count) y = count - 1;
+			lphc->LastSel = y;
 			SendMessage(lphc->hWndLBox, LB_SETCURSEL, y, 0L);
 			SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
-			SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
+			if (lphc->hWndEdit != 0) 
+				SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
 			SendMessage(GetParent(hwnd), WM_COMMAND, wndPtr->wIDmenu,
 			MAKELONG(hwnd, CBN_SELCHANGE));
 			}
@@ -226,8 +255,21 @@
     	return(SendMessage(GetParent(hwnd), WM_MEASUREITEM, wParam, lParam));
     case WM_CTLCOLOR:
     	return(SendMessage(GetParent(hwnd), WM_CTLCOLOR, wParam, lParam));
+	case WM_SETREDRAW:
+		dprintf_combo(stddeb,"ComboBoxWndProc WM_SETREDRAW hWnd=%04X w=%04X !\n", hwnd, wParam);
+		lphc = ComboGetStorageHeader(hwnd);
+		if (lphc == NULL) return 0;
+		lphc->bRedrawFlag = wParam;
+		break;
     case WM_DRAWITEM:
-	return(SendMessage(GetParent(hwnd), WM_DRAWITEM, wParam, lParam));
+		dprintf_combo(stddeb,"ComboBoxWndProc // WM_DRAWITEM w=%04X l=%08lX\n", wParam, lParam);
+		wndPtr = WIN_FindWndPtr(hwnd);
+		if (wndPtr == NULL) break;
+		lpdis = (LPDRAWITEMSTRUCT)lParam;
+		if (lpdis == NULL) break;
+		lpdis->CtlType = ODT_COMBOBOX;
+		lpdis->CtlID = wndPtr->wIDmenu;
+		return(SendMessage(GetParent(hwnd), WM_DRAWITEM, wParam, lParam));
     case WM_PAINT:
 		GetClientRect(hwnd, &rect);
 		hDC = BeginPaint(hwnd, &paintstruct);
@@ -241,8 +283,13 @@
 		EndPaint(hwnd, &paintstruct);
 		lphc = ComboGetStorageHeader(hwnd);
 		if (lphc == NULL) return 0;
-		InvalidateRect(lphc->hWndEdit, NULL, TRUE);
-		UpdateWindow(lphc->hWndEdit);
+		if (lphc->hWndEdit != 0) {
+			InvalidateRect(lphc->hWndEdit, NULL, TRUE);
+			UpdateWindow(lphc->hWndEdit);
+			}
+		else {
+			ComboBoxStaticOwnerDraw(hwnd, lphc);
+			}
 		if ((lphc->dwState & CB_SHOWDROPDOWN) == CB_SHOWDROPDOWN) {
 			InvalidateRect(lphc->hWndLBox, NULL, TRUE);
 			UpdateWindow(lphc->hWndLBox);
@@ -251,7 +298,8 @@
 	case WM_SETFOCUS:
 		lphc = ComboGetStorageHeader(hwnd);
 		if (lphc == NULL) return 0;
-		SetFocus(lphc->hWndEdit);
+		if (lphc->hWndEdit != 0) 
+			SetFocus(lphc->hWndEdit);
 		break;
 	case WM_KILLFOCUS:
 		lphc = ComboGetStorageHeader(hwnd);
@@ -260,11 +308,12 @@
 		y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
 		if (y != LB_ERR) {
 			SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
-			SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
+			if (lphc->hWndEdit != 0)
+				SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
 			}
 		break;
 	case CB_ADDSTRING:
-                dprintf_combo(stddeb,"CB_ADDSTRING '%s' !\n", (LPSTR)lParam);
+		dprintf_combo(stddeb,"CB_ADDSTRING '%s' !\n", (LPSTR)lParam);
 		lphc = ComboGetStorageHeader(hwnd);
 		if (lphc == NULL) return 0;
 		return(SendMessage(lphc->hWndLBox, LB_ADDSTRING, wParam, lParam));
@@ -319,14 +368,16 @@
 		dprintf_combo(stddeb,"ComboBox CB_GETEDITSEL !\n");
 		lphc = ComboGetStorageHeader(hwnd);
 		if (lphc == NULL) return 0;
-/*        return(SendMessage(lphc->hWndEdit, EM_GETSEL, 0, 0L)); */
+/*		if (lphc->hWndEdit != 0)
+			return(SendMessage(lphc->hWndEdit, EM_GETSEL, 0, 0L)); */
 		break;
 	case CB_SETEDITSEL:
 		dprintf_combo(stddeb,"ComboBox CB_SETEDITSEL lParam=%lX !\n", 
 			      lParam);
 		lphc = ComboGetStorageHeader(hwnd);
 		if (lphc == NULL) return 0;
-/*        return(SendMessage(lphc->hWndEdit, EM_SETSEL, 0, lParam)); */
+/*		if (lphc->hWndEdit != 0)
+			return(SendMessage(lphc->hWndEdit, EM_SETSEL, 0, lParam)); */
 		break;
 	case CB_SELECTSTRING:
 		dprintf_combo(stddeb,"ComboBox CB_SELECTSTRING !\n");
@@ -339,7 +390,11 @@
 		if (lphc == NULL) return 0;
 		lphc->dwState = lphc->dwState | CB_SHOWDROPDOWN;
 		if (wParam != 0) {
-			ShowWindow(lphc->hWndLBox, SW_SHOW);
+			GetWindowRect(hwnd, &rect);
+			SetWindowPos(lphc->hWndLBox, 0, rect.left, rect.bottom, 0, 0, 
+								SWP_NOREDRAW | SWP_NOSIZE); 
+			SetWindowPos(lphc->hWndLBox, 0, 0, 0, 0, 0, SWP_SHOWWINDOW | 
+								SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); 
 			}
 		else {
 			lphc->dwState = lphc->dwState ^ CB_SHOWDROPDOWN;
@@ -364,7 +419,8 @@
 		dprintf_combo(stddeb,"ComboBox CB_LIMITTEXT !\n");
 		lphc = ComboGetStorageHeader(hwnd);
 		if (lphc == NULL) return 0;
-/*        return(SendMessage(lphc->hWndEdit, EM_LIMITTEXT, wParam, 0L)); */
+/*		if (lphc->hWndEdit != 0) 
+	        return(SendMessage(lphc->hWndEdit, EM_LIMITTEXT, wParam, 0L)); */
         break;
 
     default:
@@ -377,35 +433,79 @@
 
 LPHEADCOMBO ComboGetStorageHeader(HWND hwnd)
 {
-    WND  *wndPtr;
-    LPHEADCOMBO lphc;
-    wndPtr = WIN_FindWndPtr(hwnd);
-    if (wndPtr == 0) {
-    	fprintf(stderr,"Bad Window handle on ComboBox !\n");
-    	return 0;
-    	}
-    lphc = *((LPHEADCOMBO *)&wndPtr->wExtra[1]);
-    return lphc;
+	WND  *wndPtr;
+	LPHEADCOMBO lphc;
+	wndPtr = WIN_FindWndPtr(hwnd);
+	if (wndPtr == 0) {
+		fprintf(stderr,"Bad Window handle on ComboBox !\n");
+		return 0;
+		}
+	lphc = *((LPHEADCOMBO *)&wndPtr->wExtra[1]);
+	return lphc;
 }
 
 
 
 int CreateComboStruct(HWND hwnd)
 {
-    WND  *wndPtr;
-    LPHEADCOMBO lphc;
-    wndPtr = WIN_FindWndPtr(hwnd);
-    if (wndPtr == 0) {
-    	fprintf(stderr,"Bad Window handle on ComboBox !\n");
-    	return 0;
-    	}
-    lphc = (LPHEADCOMBO)malloc(sizeof(HEADCOMBO));
-    *((LPHEADCOMBO *)&wndPtr->wExtra[1]) = lphc;
-    lphc->dwState = 0;
-    return TRUE;
+	WND  *wndPtr;
+	LPHEADCOMBO lphc;
+	wndPtr = WIN_FindWndPtr(hwnd);
+	if (wndPtr == 0) {
+		fprintf(stderr,"Bad Window handle on ComboBox !\n");
+		return 0;
+		}
+	lphc = (LPHEADCOMBO)malloc(sizeof(HEADCOMBO));
+	*((LPHEADCOMBO *)&wndPtr->wExtra[1]) = lphc;
+	lphc->hWndEdit = 0;
+	lphc->hWndLBox = 0;
+	lphc->dwState = 0;
+	lphc->LastSel = -1;
+	return TRUE;
 }
 
 
+void ComboBoxStaticOwnerDraw(HWND hWnd, LPHEADCOMBO lphc)
+{
+	HDC     hDC;
+	HBRUSH  hBrush;
+	short   y;
+	char    str[64];
+	LPSTR   ptr = NULL;
+	HANDLE  hTemp;
+	WND       *wndPtr;
+	LPDRAWITEMSTRUCT lpdis;
+	dprintf_combo(stddeb,"ComboBoxStaticOwnerDraw(%04X, %p) !\n", hWnd, lphc);
+	y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
+	if (y != LB_ERR) {
+		SendMessage(lphc->hWndLBox, LB_GETTEXT, y, (LPARAM)str);
+		ptr = (LPSTR)SendMessage(lphc->hWndLBox, LB_GETITEMDATA, y, 0L);
+		}
+	hBrush = SendMessage(GetParent(hWnd), WM_CTLCOLOR, (WORD)hDC,
+						MAKELONG(hWnd, CTLCOLOR_STATIC)); 
+	if (hBrush == (HBRUSH)NULL)  hBrush = GetStockObject(WHITE_BRUSH);
+	wndPtr = WIN_FindWndPtr(hWnd);
+	if (wndPtr == NULL) return;
+	hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(DRAWITEMSTRUCT));
+	lpdis = (LPDRAWITEMSTRUCT) USER_HEAP_ADDR(hTemp);
+	if (lpdis == NULL) {
+		printf("ComboBox Ownerdraw // Error allocating DRAWITEMSTRUCT !\n");
+		return;
+		}
+	hDC = GetDC(hWnd);
+	FillRect(hDC, &lphc->RectEdit, hBrush);
+	lpdis->hDC = hDC;
+	if (y != LB_ERR) lpdis->itemID = y - 1;
+	CopyRect(&lpdis->rcItem, &lphc->RectEdit);
+	lpdis->itemData = (DWORD)ptr;
+	lpdis->itemAction = ODA_DRAWENTIRE;
+	lpdis->CtlType = ODT_COMBOBOX;
+	lpdis->CtlID = wndPtr->wIDmenu;
+	SendMessage(GetParent(hWnd), WM_DRAWITEM, y, (LPARAM)lpdis);
+	USER_HEAP_FREE(hTemp);
+	ReleaseDC(hWnd, hDC);
+}
+
 
 /************************************************************************
  * 					DlgDirSelectComboBox	[USER.194]
@@ -413,7 +513,8 @@
 BOOL DlgDirSelectComboBox(HWND hDlg, LPSTR lpStr, int nIDLBox)
 {
 	fprintf(stdnimp,"DlgDirSelectComboBox(%04X, '%s', %d) \n",	
-		hDlg, lpStr, nIDLBox);
+				hDlg, lpStr, nIDLBox);
+	return TRUE;
 }
 
 
diff --git a/controls/edit.c b/controls/edit.c
index 968cc3d..81e5b4f 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -18,8 +18,8 @@
 #include "user.h"
 #include "scroll.h"
 #include "stddebug.h"
-/* #define DEBUG_EDIT /* */
-/* #undef  DEBUG_EDIT /* */
+/* #define DEBUG_EDIT */
+/* #undef  DEBUG_EDIT */
 #include "debug.h"
 
 
@@ -69,10 +69,12 @@
 } EDITSTATE;
 
 
-#define ClientWidth(wndPtr) (wndPtr->rectClient.right - \
-			     wndPtr->rectClient.left)
-#define ClientHeight(wndPtr, es) ((wndPtr->rectClient.bottom - \
-				   wndPtr->rectClient.top) / es->txtht)
+#define ClientWidth(wndPtr) \
+	(wndPtr->rectClient.right > wndPtr->rectClient.left ? \
+	wndPtr->rectClient.right - wndPtr->rectClient.left : 0)
+#define ClientHeight(wndPtr, es) \
+	(wndPtr->rectClient.bottom > wndPtr->rectClient.top ? \
+	(wndPtr->rectClient.bottom - wndPtr->rectClient.top) / es->txtht : 0)
 #define EditBufLen(wndPtr) (wndPtr->dwStyle & ES_MULTILINE \
 			    ? EDITLEN : ENTRYLEN)
 #define CurrChar (EDIT_TextLine(hwnd, es->CurrLine) + es->CurrCol)
@@ -94,7 +96,6 @@
 static BOOL ButtonDown;          /* TRUE if left mouse button down */
 static int ButtonRow;              /* row in text buffer when button pressed */
 static int ButtonCol;              /* col in text buffer when button pressed */
-static BOOL Print = FALSE;
 
 
 LONG EditWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam);
@@ -106,7 +107,7 @@
 void EDIT_PaintMsg(HWND hwnd);
 HANDLE EDIT_GetTextLine(HWND hwnd, int selection);
 char *EDIT_TextLine(HWND hwnd, int sel);
-int EDIT_StrLength(HWND hwnd, char *str, int len, int pcol);
+int EDIT_StrLength(HWND hwnd, unsigned char *str, int len, int pcol);
 int EDIT_LineLength(HWND hwnd, int num);
 void EDIT_WriteTextLine(HWND hwnd, RECT *rc, int y);
 void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row, 
@@ -177,7 +178,6 @@
 LONG EditWndProc(HWND hwnd, WORD uMsg, WORD wParam, LONG lParam)
 {
     LONG lResult = 0L;
-    HDC hdc;
     char *textPtr;
     int len;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
@@ -466,7 +466,6 @@
     EDITSTATE *es;
     unsigned int *textPtrs;
     char *text;
-    int len;
 
     /* store pointer to local or global heap in window structure so that */
     /* EDITSTATE structure itself can be stored on local heap  */
@@ -627,7 +626,7 @@
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     char *text, *cp;
     int incrs = INITLINES;
-    unsigned int off, len, temp;
+    unsigned int off, len;
     EDITSTATE *es;
     unsigned int *textPtrs;
     short *charWidths;
@@ -772,6 +771,7 @@
     unsigned int *textPtrs = 
 	(unsigned int *)EDIT_HeapAddr(hwnd, es->hTextPtrs);
 
+    if(sel>es->wlines)return NULL;
     return (text + *(textPtrs + sel));
 }
     
@@ -784,12 +784,9 @@
  *  the width of a tab.
  */
 
-int EDIT_StrLength(HWND hwnd, char *str, int len, int pcol)
+int EDIT_StrLength(HWND hwnd, unsigned char *str, int len, int pcol)
 {
     int i, plen = 0;
-    WND *wndPtr = WIN_FindWndPtr(hwnd);
-    EDITSTATE *es = 
-	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
 
     for (i = 0; i < len; i++)
 	plen += EDIT_CharWidth(hwnd, (BYTE)(*(str + i)), pcol + plen);
@@ -807,12 +804,10 @@
 
 int EDIT_LineLength(HWND hwnd, int num)
 {
-    WND *wndPtr = WIN_FindWndPtr(hwnd);
-    EDITSTATE *es = 
-	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
     char *cp = EDIT_TextLine(hwnd, num);
     char *cp1;
 
+    if(!cp)return 0;
     cp1 = strchr(cp, '\n');
     return cp1 ? (int)(cp1 - cp) : strlen(cp);
 }
@@ -827,14 +822,12 @@
 void EDIT_WriteTextLine(HWND hwnd, RECT *rect, int y)
 {
     int len = 0;
-    unsigned char line[200];
     HANDLE hLine;
     unsigned char *lp;
     int lnlen, lnlen1;
     int col, off = 0;
     int sbl, sel, sbc, sec;
     RECT rc;
-    BOOL trunc = FALSE;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
@@ -1049,7 +1042,7 @@
 	cp++;
 	scol += tabwidth;
 
-	while (cp1 = strchr(cp, VK_TAB))
+	while ((cp1 = strchr(cp, VK_TAB)))
 	{
 	    TextOut(hdc, scol, row * es->txtht, cp, (int)(cp1 - cp));
 	    scol += EDIT_StrLength(hwnd, cp, (int)(cp1 - cp), scol);
@@ -1102,9 +1095,6 @@
     char *str;
     int ch = 0, i = 0, j, s_i;
     int ch1;
-    WND *wndPtr = WIN_FindWndPtr(hwnd);
-    EDITSTATE *es = 
-	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
 
     dprintf_edit(stddeb,"EDIT_GetStr %s %d %d\n", lp, off, len);
 
@@ -1147,8 +1137,6 @@
 void EDIT_CharMsg(HWND hwnd, WORD wParam)
 {
     WND *wndPtr = WIN_FindWndPtr(hwnd);
-    EDITSTATE *es = 
-	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
 
     dprintf_edit(stddeb,"EDIT_CharMsg: wParam=%c\n", (char)wParam);
 
@@ -1326,7 +1314,7 @@
 
 int EDIT_GetNextTabStop(HWND hwnd, int pcol)
 {
-    int i, tmp;
+    int i;
     int baseUnitWidth = LOWORD(GetDialogBaseUnits());
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
@@ -1360,7 +1348,6 @@
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
-    char *text = EDIT_HeapAddr(hwnd, es->hText);
 
     if (*CurrChar == '\0')
 	return;
@@ -1449,7 +1436,6 @@
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
-    char *text = EDIT_HeapAddr(hwnd, es->hText);
 
     if (es->CurrCol)
     {
@@ -1480,11 +1466,9 @@
 
 void EDIT_End(HWND hwnd)
 {
-    RECT rc;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
-    char *text = EDIT_HeapAddr(hwnd, es->hText);
 
     while (*CurrChar && *CurrChar != '\n')
     {
@@ -1510,7 +1494,6 @@
 
 void EDIT_Home(HWND hwnd)
 {
-    RECT rc;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
@@ -1667,7 +1650,6 @@
 
 void EDIT_KeyHScroll(HWND hwnd, WORD opt)
 {
-    RECT rc;
     int hscrollpos;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
@@ -1779,7 +1761,6 @@
 
 void EDIT_KeyVScrollPage(HWND hwnd, WORD opt)
 {
-    RECT rc;
     int vscrollpos;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
@@ -1827,7 +1808,6 @@
 
 void EDIT_KeyVScrollDoc(HWND hwnd, WORD opt)
 {
-    RECT rc;
     int vscrollpos;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
@@ -2050,7 +2030,6 @@
 
 void EDIT_VScrollPage(HWND hwnd, WORD opt)
 {
-    RECT rc;
     int vscrollpos;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
@@ -2114,7 +2093,6 @@
 
 void EDIT_SizeMsg(HWND hwnd, WORD wParam, LONG lParam)
 {
-    RECT rc;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
@@ -2200,9 +2178,6 @@
 {
     int ch = 0, i = 0, s_i;
     char *text;
-    WND *wndPtr = WIN_FindWndPtr(hwnd);
-    EDITSTATE *es = 
-	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
 
     dprintf_edit(stddeb,"EDIT_PixelToChar: row=%d, pixel=%d\n", row, *pixel);
 
@@ -2233,7 +2208,6 @@
 {
     int len;
     char *text;
-    RECT rc;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
@@ -2440,7 +2414,6 @@
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
-    char *text = EDIT_HeapAddr(hwnd, es->hText);
 
     if (SelMarked(es))
     {
@@ -2555,7 +2528,7 @@
 {
     int bbl, bel, bbc, bec;
     char *cp;
-    int len;
+    int len, line;
     BOOL end = FALSE;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
@@ -2565,8 +2538,11 @@
 
     bbl = es->SelEndLine;
     bbc = es->SelEndCol;
-    cp = EDIT_TextLine(hwnd, es->wtop + y / es->txtht);
-    len = EDIT_LineLength(hwnd, es->wtop + y / es->txtht);
+    line = es->wtop + y / es->txtht;
+    if (line > es->wlines)
+	line = es->wlines;
+    cp = EDIT_TextLine(hwnd, line);
+    len = EDIT_LineLength(hwnd, line);
 
     es->WndRow = y / es->txtht;
     if (es->WndRow > es->wlines - es->wtop - 1)
@@ -2699,9 +2675,6 @@
     char *cp, *cp1;
     int len;
     char *buffer = (char *)lParam;
-    WND *wndPtr = WIN_FindWndPtr(hwnd);
-    EDITSTATE *es = 
-	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
 
     cp = EDIT_TextLine(hwnd, wParam);
     cp1 = EDIT_TextLine(hwnd, wParam + 1);
@@ -3077,7 +3050,6 @@
 
 void EDIT_SetHandleMsg(HWND hwnd, WORD wParam)
 {
-    MDESC *m;
     WND *wndPtr = WIN_FindWndPtr(hwnd);
     EDITSTATE *es = 
 	(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
diff --git a/controls/listbox.c b/controls/listbox.c
index a639814..b5d59b7 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -22,8 +22,8 @@
 #include "scroll.h"
 #include "prototypes.h"
 #include "stddebug.h"
-/* #define DEBUG_LISTBOX /* */
-/* #undef  DEBUG_LISTBOX /* */
+/* #define DEBUG_LISTBOX */
+/* #undef  DEBUG_LISTBOX */
 #include "debug.h"
 
 #define GMEM_ZEROINIT 0x0040
@@ -58,6 +58,11 @@
     ((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) != LBS_OWNERDRAWVARIABLE) ) || \
   ((wndPtr->dwStyle & LBS_HASSTRINGS) == LBS_HASSTRINGS) )
 
+#define HasStrings(wndPtr) ( \
+	( ((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) != LBS_OWNERDRAWFIXED) && \
+	  ((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) != LBS_OWNERDRAWVARIABLE) ) || \
+	  ((wndPtr->dwStyle & LBS_HASSTRINGS) == LBS_HASSTRINGS) )
+
 
 /***********************************************************************
  *           ListBoxWndProc 
@@ -68,6 +73,7 @@
 	LPHEADLIST  lphl;
 	HWND	hWndCtl;
 	WORD	wRet;
+	LONG	lRet;
 	RECT	rect;
 	int		y;
 	CREATESTRUCT *createStruct;
@@ -76,7 +82,7 @@
 	case WM_CREATE:
 		CreateListBoxStruct(hwnd);
 		lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
-		dprintf_listbox(stddeb,"ListBox WM_CREATE %lX !\n", lphl);
+		dprintf_listbox(stddeb,"ListBox WM_CREATE %p !\n", lphl);
 		if (lphl == NULL) return 0;
 		createStruct = (CREATESTRUCT *)lParam;
 		if (HIWORD(createStruct->lpCreateParams) != 0)
@@ -102,11 +108,11 @@
 		ListBoxResetContent(hwnd);
 		free(lphl);
 		*((LPHEADLIST *)&wndPtr->wExtra[1]) = 0;
-		dprintf_listbox(stddeb,"ListBox WM_DESTROY %lX !\n", lphl);
+		dprintf_listbox(stddeb,"ListBox WM_DESTROY %p !\n", lphl);
 		return 0;
 
 	case WM_VSCROLL:
-		dprintf_listbox(stddeb,"ListBox WM_VSCROLL w=%04X l=%08X !\n",
+		dprintf_listbox(stddeb,"ListBox WM_VSCROLL w=%04X l=%08lX !\n",
 				wParam, lParam);
 		lphl = ListBoxGetStorageHeader(hwnd);
 		if (lphl == NULL) return 0;
@@ -143,7 +149,7 @@
 		return 0;
 	
 	case WM_HSCROLL:
-		dprintf_listbox(stddeb,"ListBox WM_HSCROLL w=%04X l=%08X !\n",
+		dprintf_listbox(stddeb,"ListBox WM_HSCROLL w=%04X l=%08lX !\n",
 				wParam, lParam);
 		lphl = ListBoxGetStorageHeader(hwnd);
 		if (lphl == NULL) return 0;
@@ -195,6 +201,8 @@
 		if (lphl == NULL) return 0;
 		lphl->PrevFocused = lphl->ItemFocused;
 	        y = ListBoxFindMouse(hwnd, LOWORD(lParam), HIWORD(lParam));
+		if (y==-1)
+		    return 0;
 		if ((wndPtr->dwStyle & LBS_MULTIPLESEL) == LBS_MULTIPLESEL) {
 		    lphl->ItemFocused = y;
 		    wRet = ListBoxGetSel(hwnd, y);
@@ -202,6 +210,9 @@
 		    }
 		else {
 		    ListBoxSetCurSel(hwnd, y);
+		    if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
+				SendMessage(lphl->hWndLogicParent, WM_COMMAND, 
+	    	    wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
 		    }
 		ListBoxGetItemRect(hwnd, y, &rectsel);
 		InvalidateRect(hwnd, NULL, TRUE);
@@ -223,11 +234,11 @@
 										MAKELONG(hwnd, LBN_DBLCLK));
 		return 0;
 	case WM_MOUSEMOVE:
+		lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
+		if (lphl == NULL) return 0;
 		if ((wParam & MK_LBUTTON) != 0) {
 			y = HIWORD(lParam);
 			if (y < 4) {
-				lphl = ListBoxGetStorageHeader(hwnd);
-				if (lphl == NULL) return 0;
 				if (lphl->FirstVisible > 1) {
 					lphl->FirstVisible--;
 					if (wndPtr->dwStyle & WS_VSCROLL)
@@ -239,8 +250,6 @@
 				}
 			GetClientRect(hwnd, &rect);
 			if (y > (rect.bottom - 4)) {
-				lphl = ListBoxGetStorageHeader(hwnd);
-				if (lphl == NULL) return 0;
 				if (lphl->FirstVisible < lphl->ItemsCount) {
 					lphl->FirstVisible++;
 					if (wndPtr->dwStyle & WS_VSCROLL)
@@ -252,14 +261,15 @@
 				}
 			if ((y > 0) && (y < (rect.bottom - 4))) {
 				if ((y < rectsel.top) || (y > rectsel.bottom)) {
-					lphl = ListBoxGetStorageHeader(hwnd);
-					if (lphl == NULL) return 0;
 					wRet = ListBoxFindMouse(hwnd, LOWORD(lParam), HIWORD(lParam));
 					if ((wndPtr->dwStyle & LBS_MULTIPLESEL) == LBS_MULTIPLESEL) {
 						lphl->ItemFocused = wRet;
 						}
 					else {
 						ListBoxSetCurSel(hwnd, wRet);
+					    if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
+							SendMessage(lphl->hWndLogicParent, WM_COMMAND, 
+				    	    wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
 						}
 					ListBoxGetItemRect(hwnd, wRet, &rectsel);
 					InvalidateRect(hwnd, NULL, TRUE);
@@ -327,6 +337,9 @@
 		if (lphl->FirstVisible < 1) lphl->FirstVisible = 1;
 		if ((wndPtr->dwStyle & LBS_MULTIPLESEL) != LBS_MULTIPLESEL) {
 			ListBoxSetCurSel(hwnd, lphl->ItemFocused);
+		    if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
+				SendMessage(lphl->hWndLogicParent, WM_COMMAND, 
+	    	    wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
 			}
 		if (wndPtr->dwStyle & WS_VSCROLL)
 			SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
@@ -341,6 +354,15 @@
 		else
 			lphl->hFont = wParam;
 		if (wParam == 0) break;
+		break;
+	case WM_SETREDRAW:
+#ifdef DEBUG_LISTBOX
+		printf("ListBox WM_SETREDRAW hWnd=%04X w=%04X !\n", hwnd, wParam);
+#endif
+		lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
+		if (lphl == NULL) return 0;
+		lphl->bRedrawFlag = wParam;
+		break;
 	case WM_PAINT:
 		wndPtr = WIN_FindWndPtr(hwnd);
 		if ((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) == LBS_OWNERDRAWFIXED) {
@@ -401,23 +423,29 @@
 	case LB_GETHORIZONTALEXTENT:
 		return wRet;
 	case LB_GETITEMDATA:
-		wRet = ListBoxGetText(hwnd, wParam, (LPSTR)lParam, TRUE);
-		return wRet;
+		lRet = ListBoxGetText(hwnd, wParam, (LPSTR)lParam, HasStrings(wndPtr));
+		return lRet;
 	case LB_GETITEMHEIGHT:
-		return wRet;
+                ListBoxGetItemRect(hwnd, wParam, &rect);
+                return (rect.bottom - rect.top);
 	case LB_GETITEMRECT:
-		return wRet;
+                ListBoxGetItemRect(hwnd, wParam, (LPRECT)lParam);
+                return 0;
 	case LB_GETSEL:
 		wRet = ListBoxGetSel(hwnd, wParam);
 		return wRet;
 	case LB_GETSELCOUNT:
-		return wRet;
+		lphl = ListBoxGetStorageHeader(hwnd);
+		if (lphl == NULL) return LB_ERR;
+		return lphl->SelCount;
 	case LB_GETSELITEMS:
 		return wRet;
 	case LB_GETTEXTLEN:
 		return wRet;
 	case LB_GETTOPINDEX:
-		return wRet;
+		lphl = ListBoxGetStorageHeader(hwnd);
+		if (lphl == NULL) return LB_ERR;
+		return lphl->FirstVisible;
 	case LB_SELECTSTRING:
 		return wRet;
 	case LB_SELITEMRANGE:
@@ -426,6 +454,7 @@
 		return wRet;
 	case LB_SETCOLUMNWIDTH:
 		lphl = ListBoxGetStorageHeader(hwnd);
+		if (lphl == NULL) return LB_ERR;
 		lphl->ColumnsWidth = wParam;
 		break;
 	case LB_SETHORIZONTALEXTENT:
@@ -434,7 +463,10 @@
 		wRet = ListBoxSetItemData(hwnd, wParam, lParam);
 		return wRet;
 	case LB_SETTABSTOPS:
-		return wRet;
+		lphl = ListBoxGetStorageHeader(hwnd);
+		if (lphl == NULL) return LB_ERR;
+		lphl->FirstVisible = wParam;
+		return 0;
 	case LB_SETCURSEL:
 		dprintf_listbox(stddeb,"ListBox LB_SETCURSEL wParam=%x !\n", 
 				wParam);
@@ -500,19 +532,18 @@
 	HBRUSH 	hBrush;
 	int 	OldBkMode;
 	DWORD 	dwOldTextColor;
-	HWND	hWndParent;
 	HDC 	hdc;
 	RECT 	rect;
-	UINT	i, h, h2, maxwidth, ipc;
-	char	C[128];
+	int     i, h, h2, maxwidth, ipc;
 	h = 0;
 	hdc = BeginPaint( hwnd, &ps );
-    	if (!IsWindowVisible(hwnd)) {
-	    EndPaint( hwnd, &ps );
-	    return;
-	    }
+	if (!IsWindowVisible(hwnd)) {
+		EndPaint( hwnd, &ps );
+		return;
+		}
 	lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
 	if (lphl == NULL) goto EndOfPaint;
+	if (!lphl->bRedrawFlag) goto EndOfPaint;
 	SelectObject(hdc, lphl->hFont);
 	hBrush = SendMessage(lphl->hWndLogicParent, WM_CTLCOLOR, (WORD)hdc,
 		    MAKELONG(hwnd, CTLCOLOR_LISTBOX));
@@ -592,18 +623,19 @@
 	PAINTSTRUCT ps;
 	HBRUSH 	hBrush;
 	HWND	hWndParent;
-	HDC hdc;
-	RECT rect;
-	UINT  i, h, h2, maxwidth;
-	char	C[128];
+	DWORD   itemData;
+	HDC 	hdc;
+	RECT 	rect;
+	int     i, h, h2, maxwidth;
 	h = 0;
 	hdc = BeginPaint(hwnd, &ps);
-    	if (!IsWindowVisible(hwnd)) {
-	    EndPaint( hwnd, &ps );
-	    return;
-	    }
+	if (!IsWindowVisible(hwnd)) {
+		EndPaint( hwnd, &ps );
+		return;
+		}
 	lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
 	if (lphl == NULL) goto EndOfPaint;
+	if (!lphl->bRedrawFlag) goto EndOfPaint;
 	hBrush = SendMessage(lphl->hWndLogicParent, WM_CTLCOLOR, (WORD)hdc,
 		    MAKELONG(hwnd, CTLCOLOR_LISTBOX));
 	if (hBrush == (HBRUSH)NULL)  hBrush = GetStockObject(WHITE_BRUSH);
@@ -623,11 +655,10 @@
 		lpls->dis.hwndItem = hwnd;
 		lpls->dis.CtlType = ODT_LISTBOX;
 		lpls->dis.itemID = i - 1;
-		if ((!lpls->dis.CtlID)&&(lphl->hWndLogicParent))
-		{
-			ListBoxGetWindowAndStorage(lphl->hWndLogicParent, &ParentWndPtr);
+		if ((!lpls->dis.CtlID) && (lphl->hWndLogicParent)) {
+			ParentWndPtr = WIN_FindWndPtr(lphl->hWndLogicParent);
 			lpls->dis.CtlID = ParentWndPtr->wIDmenu;
-		}
+			}
 		h2 = lpls->dis.rcItem.bottom - lpls->dis.rcItem.top;
 		lpls->dis.rcItem.top = h;
 		lpls->dis.rcItem.bottom = h + h2;
@@ -645,10 +676,18 @@
 			lpls->dis.rcItem.right, lpls->dis.rcItem.bottom);
 		dprintf_listbox(stddeb,"LBOX WM_DRAWITEM Parent=%X &dis=%lX CtlID=%u !\n", 
 			hWndParent, (LONG)&lpls->dis, lpls->dis.CtlID);
-		dprintf_listbox(stddeb,"LBOX WM_DRAWITEM %08X!\n",lpls->dis.itemData);
+		dprintf_listbox(stddeb,"LBOX WM_DRAWITEM %08lX!\n",lpls->dis.itemData);
 		if (HasStrings(wndPtr))
 		  dprintf_listbox(stddeb,"  '%s'\n",lpls->itemText);
-		SendMessage(lphl->hWndLogicParent, WM_DRAWITEM, i-1, (LPARAM)&lpls->dis);
+		if (HasStrings(wndPtr)) {
+			itemData = lpls->dis.itemData;
+			lpls->dis.itemData = (DWORD)lpls->itemText;
+			}
+		SendMessage(lphl->hWndLogicParent, WM_DRAWITEM, 
+							i-1, (LPARAM)&lpls->dis);
+		if (HasStrings(wndPtr))
+			lpls->dis.itemData = itemData;
+
 /*		if (lpls->dis.itemState != 0) {
   		    InvertRect(hdc, &lpls->dis.rcItem);  
 		    }  */
@@ -662,7 +701,7 @@
 EndOfPaint:
     EndPaint( hwnd, &ps );
     if ((lphl->ItemsCount > lphl->ItemsVisible) &
-	(wndPtr->dwStyle & WS_VSCROLL)) {
+		(wndPtr->dwStyle & WS_VSCROLL)) {
 /*
         InvalidateRect(wndPtr->hWndVScroll, NULL, TRUE);
         UpdateWindow(wndPtr->hWndVScroll);
@@ -679,8 +718,7 @@
     LPHEADLIST 		lphl;
     LPLISTSTRUCT	lpls;
     RECT 		rect;
-    UINT  		i, h, h2, w, w2;
-    char		C[128];
+    int                 i, h, h2, w, w2;
     lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
     if (lphl == NULL) return LB_ERR;
     if (lphl->ItemsCount == 0) return LB_ERR;
@@ -715,39 +753,48 @@
 
 int CreateListBoxStruct(HWND hwnd)
 {
-    WND  *wndPtr;
-    LPHEADLIST lphl;
-    wndPtr = WIN_FindWndPtr(hwnd);
-    lphl = (LPHEADLIST)malloc(sizeof(HEADLIST));
-    lphl->lpFirst = NULL;
-    *((LPHEADLIST *)&wndPtr->wExtra[1]) = lphl; 	/* HEAD of List */
-    lphl->ItemsCount = 0;
-    lphl->ItemsVisible = 0;
-    lphl->FirstVisible = 1;
-    lphl->StdItemHeight = 15;
-    lphl->DrawCtlType = ODT_LISTBOX;
-    return TRUE;
+	WND  *wndPtr;
+	LPHEADLIST lphl;
+	wndPtr = WIN_FindWndPtr(hwnd);
+	lphl = (LPHEADLIST)malloc(sizeof(HEADLIST));
+	lphl->lpFirst = NULL;
+	*((LPHEADLIST *)&wndPtr->wExtra[1]) = lphl;     /* HEAD of List */
+	lphl->ItemsCount = 0;
+	lphl->ItemsVisible = 0;
+	lphl->FirstVisible = 1;
+	lphl->ColumnsVisible = 1;
+	lphl->ItemsPerColumn = 0;
+	lphl->StdItemHeight = 15;
+	lphl->ItemFocused = 0;
+	lphl->PrevFocused = 0;
+	lphl->SelCount = 0;
+	lphl->DrawCtlType = ODT_LISTBOX;
+	lphl->bRedrawFlag = TRUE;
+	return TRUE;
 }
 
 
 void ListBoxAskMeasure(WND *wndPtr, LPHEADLIST lphl, LPLISTSTRUCT lpls)  
 {
-	MEASUREITEMSTRUCT *measure;
+	MEASUREITEMSTRUCT 	*lpmeasure;
 	HANDLE hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(MEASUREITEMSTRUCT));
-	measure = (MEASUREITEMSTRUCT *) USER_HEAP_ADDR(hTemp);
-	if (measure == NULL) {
+	lpmeasure = (MEASUREITEMSTRUCT *) USER_HEAP_ADDR(hTemp);
+	if (lpmeasure == NULL) {
 		fprintf(stderr,"ListBoxAskMeasure() // Bad allocation of Measure struct !\n");
 		return;
 		}
-	measure->CtlType = ODT_LISTBOX;
-	measure->CtlID = wndPtr->wIDmenu;
-	measure->itemID = lpls->dis.itemID;
-	measure->itemWidth = wndPtr->rectWindow.right - wndPtr->rectWindow.left;
-	measure->itemHeight = 0;
-	measure->itemData = lpls->dis.itemData;
-	SendMessage(lphl->hWndLogicParent, WM_MEASUREITEM, 0, (DWORD)measure);
-	lpls->dis.rcItem.right = lpls->dis.rcItem.left + measure->itemWidth;
-	lpls->dis.rcItem.bottom = lpls->dis.rcItem.top + measure->itemHeight;
+	lpmeasure->CtlType = ODT_LISTBOX;
+	lpmeasure->CtlID = wndPtr->wIDmenu;
+	lpmeasure->itemID = lpls->dis.itemID;
+	lpmeasure->itemWidth = wndPtr->rectWindow.right - wndPtr->rectWindow.left;
+	lpmeasure->itemHeight = 0;
+	if (HasStrings(wndPtr))
+		lpmeasure->itemData = (DWORD)lpls->itemText;
+	else
+		lpmeasure->itemData = lpls->dis.itemData;
+	SendMessage(lphl->hWndLogicParent, WM_MEASUREITEM, 0, (DWORD)lpmeasure);
+	lpls->dis.rcItem.right = lpls->dis.rcItem.left + lpmeasure->itemWidth;
+	lpls->dis.rcItem.bottom = lpls->dis.rcItem.top + lpmeasure->itemHeight;
 	USER_HEAP_FREE(hTemp);			
 }
 
@@ -757,14 +804,15 @@
     WND  	*wndPtr;
     LPHEADLIST 	lphl;
     LPLISTSTRUCT lpls, lplsnew;
-    HANDLE 	hTemp;
+    HANDLE 	hItem;
+    HANDLE 	hStr;
     LPSTR 	str;
     lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
     if (lphl == NULL) return LB_ERR;
-    hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LISTSTRUCT));
-    lplsnew = (LPLISTSTRUCT) USER_HEAP_ADDR(hTemp);
+    hItem = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LISTSTRUCT));
+    lplsnew = (LPLISTSTRUCT) USER_HEAP_ADDR(hItem);
     if (lplsnew == NULL) {
-		fprintf(stderr,"ListBoxAddString() // Bad allocation of new item !\n");
+		dprintf_listbox(stddeb,"ListBoxAddString() // Bad allocation of new item !\n");
 		return LB_ERRSPACE;
 		}
     lpls = lphl->lpFirst;
@@ -778,47 +826,47 @@
 	lphl->lpFirst = lplsnew;
     lphl->ItemsCount++;
     dprintf_listbox(stddeb,"Items Count = %u\n", lphl->ItemsCount);
-    hTemp = 0;
-    ListBoxDefaultItem(hwnd, wndPtr, lphl, lplsnew);
-    if (HasStrings(wndPtr))
-      {
-	hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, strlen(newstr) + 1);
-	str = (LPSTR)USER_HEAP_ADDR(hTemp);
-	if (str == NULL) return LB_ERRSPACE;
-	strcpy(str, newstr);
-	newstr = str;
-	lplsnew->itemText = str;
-	lplsnew->dis.itemData = 0;
-	dprintf_listbox(stddeb,"ListBoxAddString// after strcpy '%s'\n", str);
-      }
-    else
-      {
-	lplsnew->itemText = NULL;
-	lplsnew->dis.itemData = (DWORD)newstr;
-      }
-    lplsnew->hMem = hTemp;
-    lplsnew->lpNext = NULL;
-    lplsnew->dis.itemID = lphl->ItemsCount;
-    lplsnew->hData = hTemp;
-	if (((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) == LBS_OWNERDRAWVARIABLE)|| ((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) == LBS_OWNERDRAWFIXED)) 
+    hStr = 0;
+
+	ListBoxDefaultItem(hwnd, wndPtr, lphl, lplsnew);
+	if (HasStrings(wndPtr)) {
+		hStr = USER_HEAP_ALLOC(GMEM_MOVEABLE, strlen(newstr) + 1);
+		str = (LPSTR)USER_HEAP_ADDR(hStr);
+		if (str == NULL) return LB_ERRSPACE;
+		strcpy(str, newstr);
+		newstr = str;
+		lplsnew->itemText = str;
+		dprintf_listbox(stddeb,"ListBoxAddString // LBS_HASSTRINGS after strcpy '%s'\n", str);
+		}
+    else {
+		lplsnew->itemText = NULL;
+		lplsnew->dis.itemData = (DWORD)newstr;
+		}
+	lplsnew->hMem = hItem;
+	lplsnew->lpNext = NULL;
+	lplsnew->dis.itemID = lphl->ItemsCount;
+	lplsnew->hData = hStr;
+	if (((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) == LBS_OWNERDRAWVARIABLE) ||
+		((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) == LBS_OWNERDRAWFIXED))
 		ListBoxAskMeasure(wndPtr, lphl, lplsnew);
-    if (wndPtr->dwStyle & WS_VSCROLL)
-	SetScrollRange(hwnd, SB_VERT, 1, lphl->ItemsCount, 
-	    (lphl->FirstVisible != 1));
-    if ((wndPtr->dwStyle & WS_HSCROLL) && lphl->ItemsPerColumn != 0)
-	SetScrollRange(hwnd, SB_HORZ, 1, lphl->ItemsVisible / 
-	    lphl->ItemsPerColumn + 1, (lphl->FirstVisible != 1));
-    if (lphl->FirstVisible >= (lphl->ItemsCount - lphl->ItemsVisible)) {
-        InvalidateRect(hwnd, NULL, TRUE);
-        UpdateWindow(hwnd);
-        }
-    if ((lphl->ItemsCount - lphl->FirstVisible) == lphl->ItemsVisible) {
 	if (wndPtr->dwStyle & WS_VSCROLL)
-	    ShowScrollBar(hwnd, SB_VERT, TRUE);
-	if (wndPtr->dwStyle & WS_HSCROLL)
-	    ShowScrollBar(hwnd, SB_HORZ, TRUE);
-	}
-    return lphl->ItemsCount-1;
+		SetScrollRange(hwnd, SB_VERT, 1, lphl->ItemsCount, 
+			(lphl->FirstVisible != 1 && lphl->bRedrawFlag));
+	if ((wndPtr->dwStyle & WS_HSCROLL) && lphl->ItemsPerColumn != 0)
+		SetScrollRange(hwnd, SB_HORZ, 1, 
+			lphl->ItemsVisible / lphl->ItemsPerColumn + 1, 
+			(lphl->FirstVisible != 1 && lphl->bRedrawFlag));
+	if (lphl->FirstVisible >= (lphl->ItemsCount - lphl->ItemsVisible)) {
+		InvalidateRect(hwnd, NULL, TRUE);
+		UpdateWindow(hwnd);
+		}
+	if ((lphl->ItemsCount - lphl->FirstVisible) == lphl->ItemsVisible) {
+		if (wndPtr->dwStyle & WS_VSCROLL)
+			ShowScrollBar(hwnd, SB_VERT, TRUE);
+		if (wndPtr->dwStyle & WS_HSCROLL)
+			ShowScrollBar(hwnd, SB_HORZ, TRUE);
+		}
+    return (lphl->ItemsCount - 1);
 }
 
 
@@ -827,10 +875,11 @@
 	WND  	*wndPtr;
 	LPHEADLIST 	lphl;
 	LPLISTSTRUCT lpls, lplsnew;
-	HANDLE	hTemp;
+    HANDLE 	hItem;
+    HANDLE 	hStr;
 	LPSTR	str;
 	UINT	Count;
-	dprintf_listbox(stddeb,"ListBoxInsertString(%04X, %d, %08X);\n", 
+	dprintf_listbox(stddeb,"ListBoxInsertString(%04X, %d, %p);\n", 
 		    hwnd, uIndex, newstr);
 	if (uIndex == (UINT)-1) return ListBoxAddString(hwnd, newstr);
 	lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
@@ -846,47 +895,42 @@
 		if (lpls->lpNext == NULL) return LB_ERR;
 		lpls = (LPLISTSTRUCT)lpls->lpNext;
 		}
-	hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LISTSTRUCT));
-	lplsnew = (LPLISTSTRUCT) USER_HEAP_ADDR(hTemp);
+	hItem = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LISTSTRUCT));
+	lplsnew = (LPLISTSTRUCT) USER_HEAP_ADDR(hItem);
     if (lplsnew == NULL) {
-		fprintf(stderr,"ListBoxInsertString() // Bad allocation of new item !\n");
+		printf("ListBoxInsertString() // Bad allocation of new item !\n");
 		return LB_ERRSPACE;
 		}
 	ListBoxDefaultItem(hwnd, wndPtr, lphl, lplsnew);
-	lplsnew->hMem = hTemp;
-	if (uIndex == 0)
-	{
+	lplsnew->hMem = hItem;
+	if (uIndex == 0) {
 		lplsnew->lpNext = lphl->lpFirst;
 		lphl->lpFirst = lplsnew;
-	}
-	else	
-	{
+		}
+	else {
 		lplsnew->lpNext = lpls->lpNext;
 		lpls->lpNext = lplsnew;
-	}
+		}
 	lphl->ItemsCount++;
-	hTemp = 0;
-	if (HasStrings(wndPtr))
-	  {
-	    hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, strlen(newstr) + 1);
-	    str = (LPSTR)USER_HEAP_ADDR(hTemp);
-	    if (str == NULL) return LB_ERRSPACE;
-	    strcpy(str, newstr);
-	    newstr = str;
-	    lplsnew->itemText = str;
-	    lplsnew->dis.itemData = 0;
-#ifdef DEBUG_LISTBOX
-	    printf("ListBoxInsertString // after strcpy '%s'\n", str);
-#endif
-	  }
-	else
-	  {
-	    lplsnew->itemText = NULL;
-	    lplsnew->dis.itemData = (DWORD)newstr;
-	  }
+	hStr = 0;
+
+	if (HasStrings(wndPtr)) {
+		hStr = USER_HEAP_ALLOC(GMEM_MOVEABLE, strlen(newstr) + 1);
+		str = (LPSTR)USER_HEAP_ADDR(hStr);
+		if (str == NULL) return LB_ERRSPACE;
+		strcpy(str, newstr);
+		newstr = str;
+		lplsnew->itemText = str;
+		dprintf_listbox(stddeb,"ListBoxInsertString // LBS_HASSTRINGS after strcpy '%s'\n", str);
+		}
+	else {
+		lplsnew->itemText = NULL;
+		lplsnew->dis.itemData = (DWORD)newstr;
+		}
 	lplsnew->dis.itemID = lphl->ItemsCount;
-	lplsnew->hData = hTemp;
-	if (((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) == LBS_OWNERDRAWVARIABLE)|| ((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) == LBS_OWNERDRAWFIXED))
+	lplsnew->hData = hStr;
+	if (((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) == LBS_OWNERDRAWVARIABLE) ||
+		((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) == LBS_OWNERDRAWFIXED))
 		ListBoxAskMeasure(wndPtr, lphl, lplsnew);
 	if (wndPtr->dwStyle & WS_VSCROLL)
 		SetScrollRange(hwnd, SB_VERT, 1, lphl->ItemsCount, 
@@ -904,10 +948,9 @@
 		InvalidateRect(hwnd, NULL, TRUE);
 		UpdateWindow(hwnd);
 		}
-#ifdef DEBUG_LISTBOX
-    printf("ListBoxInsertString // count=%d\n", lphl->ItemsCount);
-#endif
-	return /* lphl->ItemsCount;*/ uIndex;
+        dprintf_listbox(stddeb,"ListBoxInsertString // count=%d\n", lphl->ItemsCount);
+/*	return lphl->ItemsCount; */
+	return uIndex;
 }
 
 
@@ -917,8 +960,7 @@
     LPHEADLIST 	lphl;
     LPLISTSTRUCT lpls;
     UINT	Count;
-    if (!bItemData)
-    	*OutStr=0;
+    if (!bItemData)   	*OutStr=0;
     lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
     if (lphl == NULL) return LB_ERR;
     if (uIndex >= lphl->ItemsCount) return LB_ERR;
@@ -1055,8 +1097,8 @@
     lphl->lpFirst = NULL;
     lphl->FirstVisible = 1;
     lphl->ItemsCount = 0;
-    lphl->ItemFocused = /*0*/-1;
-    lphl->PrevFocused = /*0*/-1;
+	lphl->ItemFocused = -1;
+	lphl->PrevFocused = -1;
     if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
 	SendMessage(lphl->hWndLogicParent, WM_COMMAND, 
     	    wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
@@ -1153,64 +1195,56 @@
 
 int ListBoxDirectory(HWND hwnd, UINT attrib, LPSTR filespec)
 {
-  struct dosdirent *dp;
-  struct dosdirent *newdp;
-  struct stat	st;
-  int	x, wRet;
-  char 	temp[256];
-#ifdef DEBUG_LISTBOX
-  fprintf(stderr,"ListBoxDirectory: %s, %4x\n",filespec,attrib);
-#endif
-  if ((dp = (struct dosdirent *)DOS_opendir(filespec)) ==NULL) return 0;
-  while (dp = (struct dosdirent *)DOS_readdir(dp)) 
-    {
-      if (!dp->inuse) break;
-#ifdef DEBUG_LISTBOX
-      printf("ListBoxDirectory %08X '%s' !\n", dp->filename, dp->filename);
-#endif
-      if (dp->attribute & FA_DIREC) 
-	{
-	  if (attrib & DDL_DIRECTORY) 
-	    {
-	      sprintf(temp, "[%s]", dp->filename);
-	      if ( (wRet = ListBoxAddString(hwnd, temp)) == LB_ERR) break;
-	    }
-	} 
-      else 
-	{
-	  if (attrib & DDL_EXCLUSIVE) 
-	    {
-	      if (attrib & (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | 
-			    DDL_SYSTEM) )
-		if ( (wRet = ListBoxAddString(hwnd, dp->filename)) 
-		    == LB_ERR)
-		  break;
-	    } 
-	  else 
-	    {
-	      if ( (wRet = ListBoxAddString(hwnd, dp->filename)) == LB_ERR)
-		break;
-	    }
-	}
-    }
-  DOS_closedir(dp);
-	
-  if (attrib & DDL_DRIVES)
-    {
-      for (x=0;x!=MAX_DOS_DRIVES;x++)
-	{
-	  if (DOS_ValidDrive(x))
-	    {
-	      sprintf(temp, "[-%c-]", 'a'+x);
-	      if ( (wRet = ListBoxAddString(hwnd, temp)) == LB_ERR)
-		break;
-	    }		
-	}
-    }
-#ifdef DEBUG_LISTBOX
-  printf("End of ListBoxDirectory !\n");
-#endif
-  return wRet;
+	struct dosdirent *dp;
+	int	x, wRet;
+	BOOL    OldFlag;
+	char 	temp[256];
+    LPHEADLIST 	lphl;
+	dprintf_listbox(stddeb,"ListBoxDirectory: %s, %4x\n",filespec,attrib);
+    lphl = ListBoxGetStorageHeader(hwnd);
+    if (lphl == NULL) return LB_ERR;
+	if ((dp = (struct dosdirent *)DOS_opendir(filespec)) ==NULL) return 0;
+	OldFlag = lphl->bRedrawFlag;
+	lphl->bRedrawFlag = FALSE;
+	while ((dp = (struct dosdirent *)DOS_readdir(dp))) {
+		if (!dp->inuse) break;
+		dprintf_listbox(stddeb,"ListBoxDirectory %p '%s' !\n", dp->filename, dp->filename);
+		if (dp->attribute & FA_DIREC) {
+			if (attrib & DDL_DIRECTORY) {
+				sprintf(temp, "[%s]", dp->filename);
+				if ( (wRet = ListBoxAddString(hwnd, temp)) == LB_ERR) break;
+				}
+			} 
+		else {
+			if (attrib & DDL_EXCLUSIVE) {
+				if (attrib & (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | 
+					    DDL_SYSTEM) )
+					if ( (wRet = ListBoxAddString(hwnd, dp->filename)) 
+					    == LB_ERR) break;
+				} 
+			else {
+				if ( (wRet = ListBoxAddString(hwnd, dp->filename)) 
+					== LB_ERR) break;
+				}
+			}
+		}
+	DOS_closedir(dp);
+
+	if (attrib & DDL_DRIVES) {
+		for (x=0;x!=MAX_DOS_DRIVES;x++) {
+			if (DOS_ValidDrive(x)) {
+				sprintf(temp, "[-%c-]", 'a'+x);
+				if ( (wRet = ListBoxAddString(hwnd, temp)) == LB_ERR) break;
+				}		
+			}
+		}
+	lphl->bRedrawFlag = OldFlag;
+	if (OldFlag) {
+		InvalidateRect(hwnd, NULL, TRUE);
+		UpdateWindow(hwnd);
+		}
+	dprintf_listbox(stddeb,"End of ListBoxDirectory !\n");
+	return wRet;
 }
 
 
@@ -1357,7 +1391,8 @@
  */
 BOOL DlgDirSelect(HWND hDlg, LPSTR lpStr, int nIDLBox)
 {
-      fprintf(stdnimp,"DlgDirSelect(%04X, '%s', %d) \n", hDlg, lpStr, nIDLBox);
+	fprintf(stdnimp,"DlgDirSelect(%04X, '%s', %d) \n", hDlg, lpStr, nIDLBox);
+	return FALSE;
 }
 
 
diff --git a/controls/menu.c b/controls/menu.c
index 8290dda..3d5fef0 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -24,14 +24,15 @@
 #include "user.h"
 #include "win.h"
 #include "message.h"
+#include "stddebug.h"
+/* #define DEBUG_MENU */
+/* #undef DEBUG_MENU */
+/* #define DEBUG_MENUCALC */
+/* #undef DEBUG_MENUCALC */
+/* #define DEBUG_MENUSHORTCUT */
+/* #undef DEBUG_MENUSHORTCUT */
 #include "debug.h"
 
-/* #define DEBUG_MENU /* */
-/* #undef DEBUG_MENU /* */
-/* #define DEBUG_MENUCALC /* */
-/* #undef DEBUG_MENUCALC /* */
-/* #define DEBUG_MENUSHORTCUT /* */
-/* #undef DEBUG_MENUSHORTCUT /* */
 
   /* Dimension of the menu bitmaps */
 static WORD check_bitmap_width = 0, check_bitmap_height = 0;
@@ -288,7 +289,7 @@
     
       /* If we get here, then it is a text item */
 
-    dwSize = GetTextExtent( hdc, lpitem->item_text, strlen(lpitem->item_text));
+    dwSize = (lpitem->item_text == NULL) ? 0 : GetTextExtent( hdc, lpitem->item_text, strlen(lpitem->item_text));
     lpitem->rect.right  += LOWORD(dwSize);
     lpitem->rect.bottom += max( HIWORD(dwSize), SYSMETRICS_CYMENU );
 
@@ -605,7 +606,7 @@
     
     lppop = (LPPOPUPMENU) USER_HEAP_ADDR( wndPtr->wIDmenu );
     if (lppop == NULL || lprect == NULL) return SYSMETRICS_CYMENU;
-    dprintf_menu(stddeb,"MENU_DrawMenuBar(%04X, %08X, %08X); !\n", 
+    dprintf_menu(stddeb,"MENU_DrawMenuBar(%04X, %p, %p); !\n", 
 		 hDC, lprect, lppop);
     if (lppop->Height == 0) MENU_MenuBarCalcSize(hDC, lprect, lppop, hwnd);
     lprect->bottom = lprect->top + lppop->Height;
@@ -1527,7 +1528,7 @@
 {
 	LPMENUITEM 	lpitem;
 	int		maxsiz;
-	dprintf_menu(stddeb,"GetMenuString(%04X, %04X, %08X, %d, %04X);\n",
+	dprintf_menu(stddeb,"GetMenuString(%04X, %04X, %p, %d, %04X);\n",
 					hMenu, wItemID, str, nMaxSiz, wFlags);
 	if (str == NULL) return FALSE;
 	lpitem = MENU_FindItem( &hMenu, &wItemID, wFlags );
@@ -1624,10 +1625,12 @@
     LPPOPUPMENU	menu;
     
     if (IS_STRING_ITEM(wFlags))
-	   dprintf_menu(stddeb,"InsertMenu (%04X, %04X, %04X, '%s') !\n",
-					hMenu, wFlags, wItemID, lpNewItem);
+	{
+	   dprintf_menu(stddeb,"InsertMenu (%04X, %04X, %04X, %04X, '%s') !\n",
+				 hMenu, nPos, wFlags, wItemID, lpNewItem);
+	}
     else
-	   dprintf_menu(stddeb,"InsertMenu (%04X, %04X, %04X, %04X, %08X) !\n",
+	   dprintf_menu(stddeb,"InsertMenu (%04X, %04X, %04X, %04X, %p) !\n",
 		                  hMenu, nPos, wFlags, wItemID, lpNewItem);
 
       /* Find where to insert new item */
@@ -1763,7 +1766,7 @@
 	dprintf_menu(stddeb,"ModifyMenu (%04X, %04X, %04X, %04X, '%s') !\n",
 	       hMenu, nPos, wFlags, wItemID, lpNewItem);
     else
-	dprintf_menu(stddeb,"ModifyMenu (%04X, %04X, %04X, %04X, %08X) !\n",
+	dprintf_menu(stddeb,"ModifyMenu (%04X, %04X, %04X, %04X, %p) !\n",
 	       hMenu, nPos, wFlags, wItemID, lpNewItem);
     if (!(lpitem = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
     
@@ -1872,7 +1875,8 @@
 	if (hMenu == 0) return FALSE;
 	lppop = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu);
 	if (lppop == NULL) return FALSE;
-	if (lppop->hWnd) DestroyWindow (lppop->hWnd);
+	if ((lppop->wFlags & MF_POPUP) && lppop->hWnd)
+            DestroyWindow( lppop->hWnd );
 
 	if (lppop->hItems)
 	{
@@ -1912,10 +1916,10 @@
  */
 BOOL SetSystemMenu(HWND hWnd, HMENU newHmenu)
 {
-	WND	*wndPtr;
+    WND *wndPtr;
 
-	if ((wndPtr = WIN_FindWndPtr(hWnd)) != NULL)
-		wndPtr->hSysMenu = newHmenu;
+    if ((wndPtr = WIN_FindWndPtr(hWnd)) != NULL) wndPtr->hSysMenu = newHmenu;
+    return TRUE;
 }
 
 
@@ -2030,7 +2034,7 @@
 {
 	HMENU     		hMenu;
 	MENU_HEADER 	*menu_desc;
-	dprintf_menu(stddeb,"LoadMenuIndirect: menu_template '%08X'\n", 
+	dprintf_menu(stddeb,"LoadMenuIndirect: menu_template '%p'\n", 
 		     menu_template);
 	hMenu = CreateMenu();
 	menu_desc = (MENU_HEADER *)menu_template;
diff --git a/controls/scroll.c b/controls/scroll.c
index 36c7ef8..74be050 100644
--- a/controls/scroll.c
+++ b/controls/scroll.c
@@ -20,8 +20,8 @@
 #include "win.h"
 #include "prototypes.h"
 #include "stddebug.h"
-/* #define DEBUG_SCROLL /* */
-/* #undef  DEBUG_SCROLL /* */
+/* #define DEBUG_SCROLL */
+/* #undef  DEBUG_SCROLL */
 #include "debug.h"
 
 
@@ -34,6 +34,10 @@
 HBITMAP hLfArrowD = 0;
 HBITMAP hRgArrowD = 0;
 
+  /* windows/graphics.c */
+extern void GRAPH_DrawReliefRect( HDC hdc, RECT *rect,
+                                  int thickness, BOOL pressed );
+
 LPHEADSCROLL ScrollBarGetWindowAndStorage(HWND hWnd, WND **wndPtr);
 LPHEADSCROLL ScrollBarGetStorageHeader(HWND hWnd);
 LPHEADSCROLL GetScrollObjectStruct(HWND hWnd, int nBar);
@@ -51,17 +55,12 @@
  */
 LONG ScrollBarWndProc( HWND hWnd, WORD message, WORD wParam, LONG lParam )
 {    
-	WORD	wRet;
-	short	x, y;
-	short	width, height;
 	WND  	*wndPtr;
 	LPHEADSCROLL lphs;
 	PAINTSTRUCT ps;
 	HDC		hDC;
-	BITMAP	bm;
-	RECT 	rect, rect2;
+	RECT 	rect;
 	LPCREATESTRUCT lpCreat;
-	static RECT rectsel;
 	POINT *pt;
 	pt=(POINT*)&lParam;
 	switch(message) {
@@ -90,7 +89,7 @@
 	case WM_DESTROY:
 		lphs = ScrollBarGetWindowAndStorage(hWnd, &wndPtr);
 		if (lphs == 0) return 0;
-		dprintf_scroll(stddeb,"ScrollBar WM_DESTROY %lX !\n", lphs);
+		dprintf_scroll(stddeb,"ScrollBar WM_DESTROY %p !\n", lphs);
 		free(lphs);
 		*((LPHEADSCROLL *)&wndPtr->wExtra[1]) = 0;
 		return 0;
@@ -143,10 +142,19 @@
 		SetTimer(hWnd, 1, 100, NULL);
 		return 0;
 
+	case WM_SETREDRAW:
+#ifdef DEBUG_SCROLL
+		printf("ScrollBar WM_SETREDRAW hWnd=%04X w=%04X !\n", hWnd, wParam);
+#endif
+		lphs = ScrollBarGetStorageHeader(hWnd);
+		if (lphs == NULL) return 0;
+		lphs->bRedrawFlag = wParam;
+		break;
+
 	case WM_PAINT:
 		hDC = BeginPaint(hWnd, &ps);
 		lphs = ScrollBarGetStorageHeader(hWnd);
-		if (lphs != NULL) {
+		if (lphs != NULL && lphs->bRedrawFlag) {
 			GetClientRect(hWnd, &rect);
 			StdDrawScrollBar(hWnd, hDC, SB_CTL, &rect, lphs);
 			}
@@ -164,7 +172,7 @@
 {
 	LPHEADSCROLL lphs;
 	HWND	hWndParent;
-	RECT	rect, rect2;
+	RECT	rect;
 	int		width, height;
 	LONG	dwOwner;
 	lphs = GetScrollObjectStruct(hWnd, nBar);
@@ -265,7 +273,7 @@
 void ScrollBarButtonUp(HWND hWnd, int nBar, int x, int y)
 {
 	LPHEADSCROLL lphs;
-	RECT	rect, rect2;
+	RECT	rect;
 	HDC		hDC;
 	dprintf_scroll(stddeb,"ScrollBarButtonUp // x=%d y=%d\n", x, y); 
 	lphs = GetScrollObjectStruct(hWnd, nBar);
@@ -308,7 +316,7 @@
 	LPHEADSCROLL lphs;
 	HWND	hWndParent;
 	HWND	hWndOwner;
-	LONG	dwOwner;
+
 	if ((wParam & MK_LBUTTON) == 0) return;
 	lphs = GetScrollObjectStruct(hWnd, nBar);
 	if (lphs->ThumbActive == 0) return;
@@ -391,9 +399,10 @@
         HBITMAP hOldBmp;
 	BITMAP	bm;
 	RECT 	rect;
-	UINT  	i, w, w2, h, h2, siz;
-	char	C[128];
+	UINT  	w, w2, h, h2;
+
 	if (lphs == NULL) return;
+	if (!lphs->bRedrawFlag) return;
 	dprintf_scroll(stddeb,"StdDrawScrollBar nBar=%04X !\n", nBar);
 	if (lphs->Direction == WM_VSCROLL)
 		dprintf_scroll(stddeb,"StdDrawScrollBar Vertical left=%d top=%d right=%d bottom=%d !\n", 
@@ -505,7 +514,6 @@
 
 int CreateScrollBarStruct(HWND hWnd)
 {
-    RECT	rect;
     int		width, height;
     WND  *wndPtr;
     LPHEADSCROLL lphs;
@@ -516,7 +524,7 @@
 	lphs = AllocScrollBar(WS_VSCROLL, width, height);
     else
 	lphs = AllocScrollBar(WS_HSCROLL, width, height);
-        dprintf_scroll(stddeb,"CreateScrollBarStruct %lX !\n", lphs);
+    dprintf_scroll(stddeb,"CreateScrollBarStruct %p !\n", lphs);
     *((LPHEADSCROLL *)&wndPtr->wExtra[1]) = lphs;
     lphs->hWndOwner = hWnd;
     CopyRect(&lphs->rect, &wndPtr->rectClient);
@@ -549,6 +557,7 @@
 		fprintf(stderr,"Bad Memory Alloc on ScrollBar !\n");
 		return NULL;
 		}
+	lphs->bRedrawFlag = TRUE;
 	lphs->ThumbActive = FALSE;
 	lphs->TimerPending = FALSE;
 	lphs->ButtonDown = 0;
@@ -589,7 +598,7 @@
 	if (wndPtr->dwStyle & WS_VSCROLL) {
 		if (wndPtr->dwStyle & WS_HSCROLL) height -= SYSMETRICS_CYHSCROLL;
 		lphs = AllocScrollBar(WS_VSCROLL, SYSMETRICS_CXVSCROLL, height);
-		dprintf_scroll(stddeb,"NC_CreateScrollBars Vertical %lX !\n", 
+		dprintf_scroll(stddeb,"NC_CreateScrollBars Vertical %p !\n", 
 			       lphs);
 		lphs->rect.left = width - SYSMETRICS_CYVSCROLL;
 		lphs->rect.right = width;
@@ -601,7 +610,7 @@
 	if (wndPtr->dwStyle & WS_HSCROLL) {
 		if (wndPtr->dwStyle & WS_VSCROLL) width -= SYSMETRICS_CYVSCROLL;
 		lphs = AllocScrollBar(WS_HSCROLL, width, SYSMETRICS_CYHSCROLL);
-		dprintf_scroll(stddeb,"NC_CreateScrollBars Horizontal %lX !\n", lphs);
+		dprintf_scroll(stddeb,"NC_CreateScrollBars Horizontal %p !\n", lphs);
 		lphs->rect.top = height - SYSMETRICS_CYHSCROLL;
 		lphs->rect.bottom = height;
 		lphs->hWndOwner = hWnd;
@@ -750,17 +759,20 @@
 	wndPtr = WIN_FindWndPtr(hWnd);
 	if ((wBar == SB_VERT) || (wBar == SB_BOTH)) {
 		if (bFlag)
-			wndPtr->scroll_flags != 0x0001;
+			wndPtr->scroll_flags |= 1;
 		else
-			wndPtr->scroll_flags &= 0xFFFE;
+			wndPtr->scroll_flags &= ~1;
 		}
 	if ((wBar == SB_HORZ) || (wBar == SB_BOTH)) {
 		if (bFlag)
-			wndPtr->scroll_flags != 0x0002;
+			wndPtr->scroll_flags |= 2;
 		else
-			wndPtr->scroll_flags &= 0xFFFD;
+			wndPtr->scroll_flags &= ~2;
 		}
 	SetWindowPos(hWnd, 0, 0, 0, 0, 0, 
 		SWP_NOZORDER | SWP_NOMOVE | 
 		SWP_NOSIZE | SWP_FRAMECHANGED);
 }
+
+
+
diff --git a/controls/static.c b/controls/static.c
index e36b412..b61c9e1 100644
--- a/controls/static.c
+++ b/controls/static.c
@@ -86,6 +86,17 @@
 	    InvalidateRect(hWnd, NULL, FALSE);
 	    break;
 
+        case WM_NCCREATE:
+	    if (style == SS_ICON)
+            {
+		CREATESTRUCT * createStruct = (CREATESTRUCT *)lParam;
+		if (createStruct->lpszName)
+                    STATIC_SetIcon( hWnd, LoadIcon( createStruct->hInstance,
+                                                    createStruct->lpszName ));
+                break;
+            }
+            return DefWindowProc(hWnd, uMsg, wParam, lParam);
+
 	case WM_CREATE:
 	    if (style < 0L || style > LAST_STATIC_TYPE) {
 		lResult = -1L;
@@ -95,17 +106,13 @@
 	    color_windowframe  = GetSysColor(COLOR_WINDOWFRAME);
 	    color_background   = GetSysColor(COLOR_BACKGROUND);
 	    color_window       = GetSysColor(COLOR_WINDOW);
-	    if (style == SS_ICON)
-            {
-		CREATESTRUCT * createStruct = (CREATESTRUCT *)lParam;
-		if (createStruct->lpszName)
-                    STATIC_SetIcon( hWnd, LoadIcon( createStruct->hInstance,
-                                                    createStruct->lpszName ));
-            }
 	    break;
 
-        case WM_DESTROY:
-            STATIC_SetIcon( hWnd, 0 );  /* Destroy the current icon */
+        case WM_NCDESTROY:
+            if (style == SS_ICON)
+                STATIC_SetIcon( hWnd, 0 );  /* Destroy the current icon */
+            else 
+                lResult = DefWindowProc(hWnd, uMsg, wParam, lParam);
             break;
 
 	case WM_PAINT:
diff --git a/if1632/Imakefile b/if1632/Imakefile
index 4c15d44..9812c1d 100644
--- a/if1632/Imakefile
+++ b/if1632/Imakefile
@@ -3,18 +3,17 @@
 
 MODULE = if1632
 
-#ifdef WINELIB
 SRCS = \
 	callback.c \
 	relay.c
-#else
-SRCS = \
-	call.S \
-	callback.c \
-	relay.c
-#endif
 
+#ifdef WINELIB
+CALLOBJS =
+DLLOBJS =
+#else
+CALLOBJS = call.o
 DLLOBJS = \
+	dll_commdlg.o \
 	dll_gdi.o \
 	dll_kernel.o \
 	dll_keyboard.o \
@@ -29,22 +28,18 @@
 	dll_user.o \
 	dll_win87em.o \
 	dll_winsock.o
-
-#ifdef WINELIB
-DLLOBJS=
 #endif
 
-OBJS1= $(SRCS:.S=.o)
-
 #ifndef NewBuild
-OBJS = $(DLLOBJS) $(OBJS1:.c=.o) $(DLLOBJS:.o=_tab.o)
+OBJS = $(CALLOBJS) $(DLLOBJS) $(SRCS:.c=.o) $(DLLOBJS:.o=_tab.o)
 #else
-OBJS = $(DLLOBJS) $(OBJS1:.c=.o) $(DLLOBJS:.o=_tab.o) $(DLLOBJS:dll_.rly_)
+OBJS = $(CALLOBJS) $(DLLOBJS) $(SRCS:.c=.o) $(DLLOBJS:.o=_tab.o) $(DLLOBJS:dll_.rly_)
 #endif
 
 /*
  * If you add a new spec file, copy one of these lines
  */
+MakeDllFromSpec(commdlg,$(TOP)/$(MODULE))
 MakeDllFromSpec(gdi,$(TOP)/$(MODULE))
 MakeDllFromSpec(kernel,$(TOP)/$(MODULE))
 MakeDllFromSpec(keyboard,$(TOP)/$(MODULE))
@@ -63,10 +58,13 @@
 WineRelocatableTarget($(TOP)/$(MODULE),,$(OBJS))
 DependTarget()
 
+#ifndef WINELIB
 pop.h: $(TOP)/tools/build
 	$(TOP)/tools/build -p
 
-call.s: call.S pop.h
+call.o: call.S pop.h
+	gcc -I. -c -o call.o call.S
+#endif
 
 includes::
 	touch pop.h
diff --git a/if1632/call.S b/if1632/call.S
index 48f6d75..5a6b10b 100644
--- a/if1632/call.S
+++ b/if1632/call.S
@@ -7,6 +7,11 @@
 #if defined(__NetBSD__) || defined(__FreeBSD__)
 #define UDATASEL 0x27
 #endif
+#ifdef __ELF__
+#define A( addr) addr
+#else
+#define A( addr) _##addr
+#endif
 	.data
 jump_target:
 return_value:
@@ -15,23 +20,23 @@
 /**********************************************************************
  *	Places to keep info about the current 32-bit stack frame.
  */
-	.globl	_IF1632_Saved32_esp,_IF1632_Saved32_ebp,_IF1632_Saved32_ss
-_IF1632_Saved32_esp:
+	.globl	A( IF1632_Saved32_esp), A(IF1632_Saved32_ebp), A(IF1632_Saved32_ss)
+A(IF1632_Saved32_esp):
 	.long	0
-_IF1632_Saved32_ebp:
+A(IF1632_Saved32_ebp):
 	.long	0
-_IF1632_Saved32_ss:
+A(IF1632_Saved32_ss):
 	.word	0
 
 /**********************************************************************
  *	Places to keep info about the current 16-bit stack frame.
  */
-	.globl	_IF1632_Saved16_esp,_IF1632_Saved16_ebp,_IF1632_Saved16_ss
-_IF1632_Saved16_esp:
+	.globl A(IF1632_Saved16_esp),A(IF1632_Saved16_ebp),A(IF1632_Saved16_ss)
+A(IF1632_Saved16_esp):
 	.long	0
-_IF1632_Saved16_ebp:
+A(IF1632_Saved16_ebp):
 	.long	0
-_IF1632_Saved16_ss:
+A(IF1632_Saved16_ss):
 	.word	0
 
 nbytes:
@@ -56,8 +61,8 @@
  *			16	target ds
  */
 	.align	4
-	.globl _CallToInit16
-_CallToInit16:
+	.globl A(CallToInit16)
+A(CallToInit16):
 	pushl	%ebp
 	movl	%esp,%ebp
 
@@ -65,9 +70,9 @@
  	 * Save our registers
 	 */
 	pushal
-	pushl	_IF1632_Saved32_esp
-	pushl	_IF1632_Saved32_ebp
-	pushw	_IF1632_Saved32_ss
+	pushl	A(IF1632_Saved32_esp)
+	pushl	A(IF1632_Saved32_ebp)
+	pushw	A(IF1632_Saved32_ss)
 
 	/*
 	 * Get target address.
@@ -79,18 +84,18 @@
 	/*
 	 * Put stack registers where we can get them after stack switch.
 	 */
-	movw	%ss,_IF1632_Saved32_ss
-	movl	%esp,_IF1632_Saved32_esp
-	movl	%ebp,_IF1632_Saved32_ebp
+	movw	%ss,A(IF1632_Saved32_ss)
+	movl	%esp,A(IF1632_Saved32_esp)
+	movl	%ebp,A(IF1632_Saved32_ebp)
 
 	/*
 	 * Load initial registers
 	 */
-	movw	_WIN_StackSize,%bx
-	movw	_WIN_HeapSize,%cx
+	movw	A(WIN_StackSize),%bx
+	movw	A(WIN_HeapSize),%cx
 	movl	$0,%esi
 	xorl	%eax,%eax
-	movw	_PSPSelector,%ax
+	movw	A(PSPSelector),%ax
 	movw	%ax,%es
 	movw	16(%ebp),%ax
 	movw	%ax,%ds
@@ -131,16 +136,16 @@
 	movw	%ax,%fs
 	movw	%ax,%gs
 	popl	%eax
-	movw	_IF1632_Saved32_ss,%ss
-	movl	_IF1632_Saved32_esp,%esp
-	movl	_IF1632_Saved32_ebp,%ebp
+	movw	A(IF1632_Saved32_ss),%ss
+	movl	A(IF1632_Saved32_esp),%esp
+	movl	A(IF1632_Saved32_ebp),%ebp
 
 	/*
  	 * Restore registers, but do not destroy return value.
 	 */
-	popw	_IF1632_Saved32_ss
-	popl	_IF1632_Saved32_ebp
-	popl	_IF1632_Saved32_esp
+	popw	A(IF1632_Saved32_ss)
+	popl	A(IF1632_Saved32_ebp)
+	popl	A(IF1632_Saved32_esp)
 	movl	%eax,return_value
 	popal
 	movl	return_value,%eax
@@ -158,8 +163,8 @@
  *			12	target ds
  */
 	.align	4
-	.globl _CallTo16
-_CallTo16:
+	.globl A(CallTo16)
+A(CallTo16):
 	pushl	%ebp
 	movl	%esp,%ebp
 
@@ -174,17 +179,17 @@
 	/*
 	 * Switch to 16-bit stack
 	 */
-	pushl	_IF1632_Saved32_esp
-	pushl	_IF1632_Saved32_ebp
-	pushw	_IF1632_Saved32_ss
+	pushl	A(IF1632_Saved32_esp)
+	pushl	A(IF1632_Saved32_ebp)
+	pushw	A(IF1632_Saved32_ss)
 
-	movw	%ss,_IF1632_Saved32_ss
-	movl	%esp,_IF1632_Saved32_esp
-	movl	%ebp,_IF1632_Saved32_ebp
+	movw	%ss,A(IF1632_Saved32_ss)
+	movl	%esp,A(IF1632_Saved32_esp)
+	movl	%ebp,A(IF1632_Saved32_ebp)
 
-	movw	_IF1632_Saved16_ss,%ss
-	movl	_IF1632_Saved16_esp,%esp
-	movl	_IF1632_Saved16_ebp,%ebp
+	movw	A(IF1632_Saved16_ss),%ss
+	movl	A(IF1632_Saved16_esp),%esp
+	movl	A(IF1632_Saved16_ebp),%ebp
 
 	/*
 	 * Call entry point
@@ -213,17 +218,17 @@
 	movw	%ax,%gs
 	popl	%eax
 
-	movw	%ss,_IF1632_Saved16_ss
-	movl	%esp,_IF1632_Saved16_esp
-	movl	%ebp,_IF1632_Saved16_ebp
+	movw	%ss,A(IF1632_Saved16_ss)
+	movl	%esp,A(IF1632_Saved16_esp)
+	movl	%ebp,A(IF1632_Saved16_ebp)
 
-	movw	_IF1632_Saved32_ss,%ss
-	movl	_IF1632_Saved32_esp,%esp
-	movl	_IF1632_Saved32_ebp,%ebp
+	movw	A(IF1632_Saved32_ss),%ss
+	movl	A(IF1632_Saved32_esp),%esp
+	movl	A(IF1632_Saved32_ebp),%ebp
 
-	popw	_IF1632_Saved32_ss
-	popl	_IF1632_Saved32_ebp
-	popl	_IF1632_Saved32_esp
+	popw	A(IF1632_Saved32_ss)
+	popl	A(IF1632_Saved32_ebp)
+	popl	A(IF1632_Saved32_esp)
 
 	movl	%eax,return_value
 	movw	return_value+2,%dx
@@ -246,8 +251,8 @@
  *	16-bit stack.
  */
 	.align	4
-	.globl _CallTo32
-_CallTo32:
+	.globl A(CallTo32)
+A(CallTo32):
 	pushl	%ebp
 	movl	%esp,%ebp
 
@@ -270,26 +275,26 @@
 	 * Save old stack save variables, save stack registers, reload
 	 * stack registers.
 	 */
-	pushl	_IF1632_Saved16_esp
-	pushl	_IF1632_Saved16_ebp
-	pushw	_IF1632_Saved16_ss
+	pushl	A(IF1632_Saved16_esp)
+	pushl	A(IF1632_Saved16_ebp)
+	pushw	A(IF1632_Saved16_ss)
 
-	movw	%ss,_IF1632_Saved16_ss
-	movl	%esp,_IF1632_Saved16_esp
-	movl	%ebp,_IF1632_Saved16_ebp
+	movw	%ss,A(IF1632_Saved16_ss)
+	movl	%esp,A(IF1632_Saved16_esp)
+	movl	%ebp,A(IF1632_Saved16_ebp)
 
-	movw	_IF1632_Saved32_ss,%ss
-	movl	_IF1632_Saved32_esp,%esp
-	movl	_IF1632_Saved32_ebp,%ebp
+	movw	A(IF1632_Saved32_ss),%ss
+	movl	A(IF1632_Saved32_esp),%esp
+	movl	A(IF1632_Saved32_ebp),%ebp
 
 	/*
 	 * Call entry point
 	 */
 	pushl	%edx
-	pushw	_IF1632_Saved16_ss
-	pushw	_IF1632_Saved16_esp
+	pushw	A(IF1632_Saved16_ss)
+	pushw	A(IF1632_Saved16_esp)
 	pushl	%eax
-	call	_DLLRelay
+	call	A(DLLRelay)
 
 	popl	%edx
 	popl	%edx
@@ -298,13 +303,13 @@
 	/*
  	 * Restore registers, but do not destroy return value.
 	 */
-	movw	_IF1632_Saved16_ss,%ss
-	movl	_IF1632_Saved16_esp,%esp
-	movl	_IF1632_Saved16_ebp,%ebp
+	movw	A(IF1632_Saved16_ss),%ss
+	movl	A(IF1632_Saved16_esp),%esp
+	movl	A(IF1632_Saved16_ebp),%ebp
 
-	popw	_IF1632_Saved16_ss
-	popl	_IF1632_Saved16_ebp
-	popl	_IF1632_Saved16_esp
+	popw	A(IF1632_Saved16_ss)
+	popl	A(IF1632_Saved16_ebp)
+	popl	A(IF1632_Saved16_esp)
 
 	popw	%es
 	popw	%ds
@@ -348,8 +353,8 @@
  *	word of EAX won't be moved to DX.
  */
 	.align	4
-	.globl _CallTo32_16
-_CallTo32_16:
+	.globl A(CallTo32_16)
+A(CallTo32_16):
 	pushl	%ebp
 	movl	%esp,%ebp
 
@@ -372,26 +377,26 @@
 	 * Save old stack save variables, save stack registers, reload
 	 * stack registers.
 	 */
-	pushl	_IF1632_Saved16_esp
-	pushl	_IF1632_Saved16_ebp
-	pushw	_IF1632_Saved16_ss
+	pushl	A(IF1632_Saved16_esp)
+	pushl	A(IF1632_Saved16_ebp)
+	pushw	A(IF1632_Saved16_ss)
 
-	movw	%ss,_IF1632_Saved16_ss
-	movl	%esp,_IF1632_Saved16_esp
-	movl	%ebp,_IF1632_Saved16_ebp
+	movw	%ss,A(IF1632_Saved16_ss)
+	movl	%esp,A(IF1632_Saved16_esp)
+	movl	%ebp,A(IF1632_Saved16_ebp)
 
-	movw	_IF1632_Saved32_ss,%ss
-	movl	_IF1632_Saved32_esp,%esp
-	movl	_IF1632_Saved32_ebp,%ebp
+	movw	A(IF1632_Saved32_ss),%ss
+	movl	A(IF1632_Saved32_esp),%esp
+	movl	A(IF1632_Saved32_ebp),%ebp
 
 	/*
 	 * Call entry point
 	 */
 	pushl	%edx
-	pushw	_IF1632_Saved16_ss
-	pushw	_IF1632_Saved16_esp
+	pushw	A(IF1632_Saved16_ss)
+	pushw	A(IF1632_Saved16_esp)
 	pushl	%eax
-	call	_DLLRelay
+	call	A(DLLRelay)
 
 	popl	%edx
 	popl	%edx
@@ -400,13 +405,13 @@
 	/*
  	 * Restore registers, but do not destroy return value.
 	 */
-	movw	_IF1632_Saved16_ss,%ss
-	movl	_IF1632_Saved16_esp,%esp
-	movl	_IF1632_Saved16_ebp,%ebp
+	movw	A(IF1632_Saved16_ss),%ss
+	movl	A(IF1632_Saved16_esp),%esp
+	movl	A(IF1632_Saved16_ebp),%ebp
 
-	popw	_IF1632_Saved16_ss
-	popl	_IF1632_Saved16_ebp
-	popl	_IF1632_Saved16_esp
+	popw	A(IF1632_Saved16_ss)
+	popl	A(IF1632_Saved16_ebp)
+	popl	A(IF1632_Saved16_esp)
 
 	popw	%es
 	popw	%ds
@@ -437,18 +442,18 @@
 /**********************************************************************
  *	ReturnFromRegisterFunc()
  */
-	.globl _ReturnFromRegisterFunc
-_ReturnFromRegisterFunc:
+	.globl A(ReturnFromRegisterFunc)
+A(ReturnFromRegisterFunc):
 	/*
  	 * Restore 16-bit stack
 	 */
-	movw	_IF1632_Saved16_ss,%ss
-	movl	_IF1632_Saved16_esp,%esp
-	movl	_IF1632_Saved16_ebp,%ebp
+	movw	A(IF1632_Saved16_ss),%ss
+	movl	A(IF1632_Saved16_esp),%esp
+	movl	A(IF1632_Saved16_ebp),%ebp
 
-	popw	_IF1632_Saved16_ss
-	popl	_IF1632_Saved16_ebp
-	popl	_IF1632_Saved16_esp
+	popw	A(IF1632_Saved16_ss)
+	popl	A(IF1632_Saved16_ebp)
+	popl	A(IF1632_Saved16_esp)
 
 	popw	%es
 	popw	%ds
diff --git a/if1632/callback.c b/if1632/callback.c
index 3d69c34..6f27756 100644
--- a/if1632/callback.c
+++ b/if1632/callback.c
@@ -10,6 +10,12 @@
 #include "segmem.h"
 #include <setjmp.h>
 #include "dlls.h"
+#include "stddebug.h"
+/* #define DEBUG_CALLBACK */
+/* #undef  DEBUG_CALLBACK */
+#include "debug.h"
+
+
 extern SEGDESC Segments[];
 extern unsigned short IF1632_Saved16_ss;
 extern unsigned long  IF1632_Saved16_ebp;
@@ -99,8 +105,6 @@
 void *
 CALLBACK_MakeProcInstance(void *func, int instance)
 {
-    int handle;
-    void *new_func;
     struct thunk_s *tp;
     int i;
     
@@ -129,8 +133,6 @@
  */
 void FreeProcInstance(FARPROC func)
 {
-    int handle;
-    void *new_func;
     struct thunk_s *tp;
     int i;
     
@@ -155,7 +157,7 @@
     /* Return the code segment containing 'proc'. */
     /* Not sure if this is really correct (shouldn't matter that much). */
     printf( "STUB: GetCodeHandle(%p) returning %x\n",
-            tp->thunk[8] + (tp->thunk[9] << 8) );
+            proc, tp->thunk[8] + (tp->thunk[9] << 8) );
     return tp->thunk[8] + (tp->thunk[9] << 8);
 }
 
@@ -197,9 +199,7 @@
     }
     else if (Is16bitAddress(func))
     {	
-#ifdef DEBUG_CALLBACK
-	printf("CallWindowProc // 16bit func=%08X !\n", func);
-#endif 
+	dprintf_callback(stddeb, "CallWindowProc // 16bit func=%p !\n", func);
 	PushOn16( CALLBACK_SIZE_WORD, hwnd );
 	PushOn16( CALLBACK_SIZE_WORD, message );
 	PushOn16( CALLBACK_SIZE_WORD, wParam );
@@ -209,9 +209,7 @@
     }
     else
     {
-#ifdef DEBUG_CALLBACK
-	printf("CallWindowProc // 32bit func=%08X !\n", func);
-#endif 
+	dprintf_callback(stddeb, "CallWindowProc // 32bit func=%08X !\n", func);
 	return (*func)(hwnd, message, wParam, lParam);
     }
 }
@@ -325,15 +323,12 @@
 				(IF1632_Saved16_esp & 0xffff));
 
 		memcpy (stack16, sb -> stack_part, STACK_DEPTH_16);
-#ifdef	DEBUG_CATCH
-		printf ("Been thrown here: %d, retval = %d\n", sb, retval);
-#endif
+		dprintf_catch (stddeb, "Been thrown here: %d, retval = %d\n", 
+			sb, retval);
 		free ((void *) sb);
 		return (retval);
 	} else {
-#ifdef	DEBUG_CATCH
-		printf ("Will somtime get thrown here: %d\n", sb);
-#endif
+		dprintf_catch (stddeb, "Will somtime get thrown here: %d\n", sb);
 		return (retval);
 	}
 }
@@ -341,9 +336,7 @@
 void Throw (LPCATCHBUF cbuf, int val)
 {
 	sb = *((struct special_buffer **)cbuf);
-#ifdef	DEBUG_CATCH
-	printf ("Throwing to: %d\n", sb);
-#endif
+	dprintf_catch (stddeb, "Throwing to: %d\n", sb);
 	longjmp (sb -> buffer, val);
 }
 #endif /* !WINELIB */
diff --git a/if1632/commdlg.spec b/if1632/commdlg.spec
new file mode 100644
index 0000000..c52227b
--- /dev/null
+++ b/if1632/commdlg.spec
@@ -0,0 +1,32 @@
+# $Id: commdlg.spec,v 1.3 1994/20/08 04:04:21 root Exp root $
+#
+name	commdlg
+id	15
+length	31
+
+  1   pascal  GETOPENFILENAME(ptr) GetOpenFileName(1)
+  2   pascal  GETSAVEFILENAME(ptr) GetSaveFileName(1)
+  5   pascal  CHOOSECOLOR(ptr) ChooseColor(1)
+  6   pascal  FILEOPENDLGPROC(word word word long) FileOpenDlgProc(1 2 3 4)
+  7   pascal  FILESAVEDLGPROC(word word word long) FileSaveDlgProc(1 2 3 4)
+  8   pascal  COLORDLGPROC(word word word long) ColorDlgProc(1 2 3 4)
+#  9   pascal  LOADALTERBITMAP exported, shared data
+ 11   pascal  FINDTEXT(ptr) FindText(1)
+ 12   pascal  REPLACETEXT(ptr) ReplaceText(1)
+ 13   pascal  FINDTEXTDLGPROC(word word word long) FindTextDlgProc(1 2 3 4)
+ 14   pascal  REPLACETEXTDLGPROC(word word word long) ReplaceTextDlgProc(1 2 3 4)
+# 15   pascal  CHOOSEFONT exported, shared data
+# 16   pascal  FORMATCHARDLGPROC exported, shared data
+# 18   pascal  FONTSTYLEENUMPROC exported, shared data
+# 19   pascal  FONTFAMILYENUMPROC exported, shared data
+ 20   pascal  PRINTDLG(ptr) PrintDlg(1)
+ 21   pascal  PRINTDLGPROC(word word word long) PrintDlgProc(1 2 3 4)
+ 22   pascal  PRINTSETUPDLGPROC(word word word long) PrintSetupDlgProc(1 2 3 4)
+# 23   pascal  EDITINTEGERONLY exported, shared data
+# 25   pascal  WANTARROWS exported, shared data
+ 26   pascal  COMMDLGEXTENDEDERROR() CommDlgExtendError()
+ 27   pascal  GETFILETITLE(ptr ptr word) GetFileTitle(1 2 3)
+# 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/kernel.spec b/if1632/kernel.spec
index f3930a5..e265567 100644
--- a/if1632/kernel.spec
+++ b/if1632/kernel.spec
@@ -221,10 +221,10 @@
 #328 _DEBUGOUTPUT
 #329 K329
 #332 THHOOK
-#334 ISBADREADPTR
-#335 ISBADWRITEPTR
-#336 ISBADCODEPTR
-#337 ISBADSTRINGPTR
+334 pascal IsBadReadPtr(ptr long) IsBadReadPtr(1 2)
+335 pascal IsBadWritePtr(ptr long) IsBadWritePtr(1 2)
+336 pascal IsBadCodePtr(ptr) IsBadCodePtr(1)
+337 pascal IsBadStringPtr(ptr word) IsBadStringPtr(1 2)
 #338 HASGPHANDLER
 #339 DIAGQUERY
 #340 DIAGOUTPUT
@@ -233,8 +233,8 @@
 #343 REGISTERWINOLDAPHOOK
 #344 GETWINOLDAPHOOKS
 #345 ISSHAREDSELECTOR
-#346 ISBADHUGEREADPTR
-#347 ISBADHUGEWRITEPTR
+346 pascal IsBadHugeReadPtr(ptr long) IsBadHugeReadPtr(1 2)
+347 pascal IsBadHugeWritePtr(ptr long) IsBadHugeWritePtr(1 2)
 348 pascal hmemcpy(ptr ptr long) hmemcpy(1 2 3)
 349 pascal16 _hread(word ptr long) _hread(1 2 3)
 350 pascal16 _hwrite(word ptr long) _hwrite(1 2 3)
diff --git a/if1632/mmsystem.spec b/if1632/mmsystem.spec
index d599d19..d074cae 100644
--- a/if1632/mmsystem.spec
+++ b/if1632/mmsystem.spec
@@ -34,6 +34,7 @@
 211    pascal  MIDIOUTGETVOLUME(word ptr) midiOutGetVolume(1 2)
 212    pascal  MIDIOUTSETVOLUME(word long) midiOutSetVolume(1 2)
 215    pascal  MIDIOUTGETID(word ptr) midiOutGetID(1 2)
+216    pascal  MIDIOUTMESSAGE(word word long long) midiOutMessage(1 2 3 4)
 301    pascal  MIDIINGETNUMDEVS() midiInGetNumDevs()
 302    pascal  MIDIINGETDEVCAPS(word ptr word) midiInGetDevCaps(1 2 3)
 303    pascal  MIDIINGETERRORTEXT(word ptr word) midiInGetErrorText(1 2 3)
@@ -45,10 +46,12 @@
 310    pascal  MIDIINSTOP(word) midiInStop(1)
 311    pascal  MIDIINRESET(word) midiInReset(1)
 312    pascal  MIDIINGETID(word ptr) midiInGetID(1 2)
+313    pascal  MIDIINMESSAGE(word word long long) midiInMessage(1 2 3 4)
 350    pascal  AUXGETNUMDEVS() auxGetNumDevs()
 351    pascal  AUXGETDEVCAPS(word ptr word) auxGetDevCaps(1 2 3)
 352    pascal  AUXGETVOLUME(word ptr) auxGetVolume(1 2)
 353    pascal  AUXSETVOLUME(word long) auxSetVolume(1 2)
+354    pascal  AUXOUTMESSAGE(word word long long) auxOutMessage(1 2 3 4)
 401    pascal  WAVEOUTGETNUMDEVS() waveOutGetNumDevs()
 402    pascal  WAVEOUTGETDEVCAPS(word ptr word) waveOutGetDevCaps(1 2 3)
 403    pascal  WAVEOUTGETERRORTEXT(word ptr word) waveOutGetErrorText(1 2 3)
@@ -69,6 +72,7 @@
 418    pascal  WAVEOUTSETPLAYBACKRATE(word long) waveOutSetPlaybackRate(1 2)
 419    pascal  WAVEOUTBREAKLOOP(word) waveOutBreakLoop(1)
 420    pascal  WAVEOUTGETID(word ptr) waveOutGetID(1 2)
+421    pascal  WAVEOUTMESSAGE(word word long long) waveOutMessage(1 2 3 4)
 501    pascal  WAVEINGETNUMDEVS() waveInGetNumDevs()
 502    pascal  WAVEINGETDEVCAPS(word ptr word) waveInGetDevCaps(1 2 3)
 503    pascal  WAVEINGETERRORTEXT(word ptr word) waveInGetErrorText(1 2 3)
@@ -82,6 +86,7 @@
 511    pascal  WAVEINRESET(word) waveInReset(1)
 512    pascal  WAVEINGETPOSITION(word ptr word) waveInGetPosition(1 2 3)
 513    pascal  WAVEINGETID(word ptr) waveInGetID(1 2)
+514    pascal  WAVEINMESSAGE(word word long long) waveInMessage(1 2 3 4)
 601    pascal  timeGetSystemTime(ptr word) timeGetSystemTime(1 2)
 602    pascal  timeSetEvent(word word ptr long word) timeSetEvent(1 2 3 4 5)
 603    pascal  timeKillEvent(word) timeKillEvent(1)
diff --git a/if1632/relay.c b/if1632/relay.c
index 9bf9682..d9d9994 100644
--- a/if1632/relay.c
+++ b/if1632/relay.c
@@ -46,6 +46,7 @@
     { "SYSTEM",  WineLibSkip(SYSTEM_table),   20 ,12},
     { "TOOLHELP",WineLibSkip(TOOLHELP_table), 83, 13},
     { "MOUSE",   WineLibSkip(MOUSE_table),     8, 14},
+    { "EMUCOMMDLG", WineLibSkip(COMMDLG_table),  31, 15},
 };
 /* don't forget to increase N_BUILTINS in dll.h if you add a dll */
 
diff --git a/if1632/user.spec b/if1632/user.spec
index 673bbc3..3e7af17 100644
--- a/if1632/user.spec
+++ b/if1632/user.spec
@@ -172,7 +172,7 @@
 167 pascal ShowCaret(word) ShowCaret(1)
 168 pascal SetCaretBlinkTime(word) SetCaretBlinkTime(1)
 169 pascal GetCaretBlinkTime() GetCaretBlinkTime()
-#170 ARRANGEICONICWINDOWS
+170 pascal ArrangeIconicWindows(word) ArrangeIconicWindows(1)
 171 pascal WinHelp(word ptr word long) WinHelp(1 2 3 4)
 #172 SWITCHTOTHISWINDOW
 173 pascal LoadCursor(word ptr) LoadCursor(1 2)
@@ -203,8 +203,8 @@
 		TabbedTextOut(1 2 3 4 5 6 7 8)
 197 pascal GETTABBEDTEXTEXTENT(word ptr word word ptr)
 	   GetTabbedTextExtent(1 2 3 4 5)
-#198 CASCADECHILDWINDOWS
-#199 TILECHILDWINDOWS
+198 pascal CascadeChildWindows(word word) CascadeChildWindows(1 2)
+199 pascal TileChildWindows(word word) TileChildWindows(1 2)
 200 pascal OpenComm(ptr word word) OpenComm(1 2 3)
 201 pascal SetCommState(ptr) SetCommState(1)
 202 pascal GetCommState(word ptr) GetCommState(1 2)
@@ -299,7 +299,7 @@
 284 pascal16 GetFreeSystemResources(word) GetFreeSystemResources(1)
 #285 BEAR285
 286 pascal GetDesktopWindow() GetDesktopWindow()
-#287 GETLASTACTIVEPOPUP
+287 pascal GetLastActivePopup(word) GetLastActivePopup(1)
 288 pascal GetMessageExtraInfo() GetMessageExtraInfo()
 #289 KEYB_EVENT
 290 pascal RedrawWindow(word ptr word word) RedrawWindow(1 2 3 4)
diff --git a/include/combo.h b/include/combo.h
index 0162664..4b0d444 100644
--- a/include/combo.h
+++ b/include/combo.h
@@ -8,6 +8,9 @@
     DWORD	dwState;
     HWND	hWndEdit;
     HWND	hWndLBox;
+	short	LastSel;
+	RECT	RectEdit;
+	BOOL	bRedrawFlag;
 } HEADCOMBO;
 typedef HEADCOMBO FAR* LPHEADCOMBO;
 
diff --git a/include/comm.h b/include/comm.h
index 7f74685..785a7b7 100644
--- a/include/comm.h
+++ b/include/comm.h
@@ -16,6 +16,7 @@
     int suspended;
     int unget;
     int unget_byte;
+    int baudrate;
 };
 
 #endif  /* COMM_H */
diff --git a/include/commdlg.h b/include/commdlg.h
new file mode 100644
index 0000000..737e6e0
--- /dev/null
+++ b/include/commdlg.h
@@ -0,0 +1,298 @@
+/* 
+ * COMMDLG - Common Wine Dialog ... :-)
+ */
+
+#ifndef COMMDLG_H
+#define COMMDLG_H
+
+#define RT_CURSOR           MAKEINTRESOURCE(1)
+#define RT_BITMAP           MAKEINTRESOURCE(2)
+#define RT_ICON             MAKEINTRESOURCE(3)
+#define RT_MENU             MAKEINTRESOURCE(4)
+#define RT_DIALOG           MAKEINTRESOURCE(5)
+#define RT_STRING           MAKEINTRESOURCE(6)
+#define RT_FONTDIR          MAKEINTRESOURCE(7)
+#define RT_FONT             MAKEINTRESOURCE(8)
+#define RT_ACCELERATOR      MAKEINTRESOURCE(9)
+#define RT_RCDATA           MAKEINTRESOURCE(10)
+
+#define RT_GROUP_CURSOR     MAKEINTRESOURCE(12)
+#define RT_GROUP_ICON       MAKEINTRESOURCE(14)
+
+#ifndef HGLOBAL
+#define HGLOBAL     HANDLE
+#endif
+
+#define OFN_READONLY                 0x00000001
+#define OFN_OVERWRITEPROMPT          0x00000002
+#define OFN_HIDEREADONLY             0x00000004
+#define OFN_NOCHANGEDIR              0x00000008
+#define OFN_SHOWHELP                 0x00000010
+#define OFN_ENABLEHOOK               0x00000020
+#define OFN_ENABLETEMPLATE           0x00000040
+#define OFN_ENABLETEMPLATEHANDLE     0x00000080
+#define OFN_NOVALIDATE               0x00000100
+#define OFN_ALLOWMULTISELECT         0x00000200
+#define OFN_EXTENSIONDIFFERENT       0x00000400
+#define OFN_PATHMUSTEXIST            0x00000800
+#define OFN_FILEMUSTEXIST            0x00001000
+#define OFN_CREATEPROMPT             0x00002000
+#define OFN_SHAREAWARE               0x00004000
+#define OFN_NOREADONLYRETURN         0x00008000
+#define OFN_NOTESTFILECREATE         0x00010000
+
+#define OFN_SHAREFALLTHROUGH     2
+#define OFN_SHARENOWARN          1
+#define OFN_SHAREWARN            0
+
+
+typedef struct {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
+	LPCSTR		lpstrFilter;
+	LPSTR		lpstrCustomFilter;
+	DWORD		nMaxCustFilter;
+	DWORD		nFilterIndex;
+	LPSTR		lpstrFile;
+	DWORD		nMaxFile;
+	LPSTR		lpstrFileTitle;
+	DWORD		nMaxFileTitle;
+	LPCSTR 		lpstrInitialDir;
+	LPCSTR 		lpstrTitle;
+	DWORD		Flags;
+	UINT		nFileOffset;
+	UINT		nFileExtension;
+	LPCSTR		lpstrDefExt;
+	LPARAM 		lCustData;
+	UINT 		(CALLBACK *lpfnHook)(HWND, UINT, WPARAM, LPARAM);
+	LPCSTR 		lpTemplateName;
+	}   OPENFILENAME;
+typedef OPENFILENAME * LPOPENFILENAME;
+
+
+typedef struct {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HWND		hInstance;
+	COLORREF	rgbResult;
+	COLORREF	FAR* lpCustColors;
+	DWORD 		Flags;
+	LPARAM		lCustData;
+	UINT		(CALLBACK* lpfnHook)(HWND, UINT, WPARAM, LPARAM);
+	LPCSTR 		lpTemplateName;
+	} CHOOSECOLOR;
+typedef CHOOSECOLOR *LPCHOOSECOLOR;
+
+#define CC_RGBINIT               0x00000001
+#define CC_FULLOPEN              0x00000002
+#define CC_PREVENTFULLOPEN       0x00000004
+#define CC_SHOWHELP              0x00000008
+#define CC_ENABLEHOOK            0x00000010
+#define CC_ENABLETEMPLATE        0x00000020
+#define CC_ENABLETEMPLATEHANDLE  0x00000040
+
+typedef struct {
+	DWORD		lStructSize; 			/* size of this struct 0x20 */
+	HWND		hwndOwner; 				/* handle to owner's window */
+	HINSTANCE	hInstance; 				/* instance handle of.EXE that  */
+										/*	contains cust. dlg. template */
+	DWORD		Flags;                  /* one or more of the FR_?? */
+	LPSTR		lpstrFindWhat;          /* ptr. to search string    */
+	LPSTR		lpstrReplaceWith;       /* ptr. to replace string   */
+	UINT		wFindWhatLen;           /* size of find buffer      */
+	UINT 		wReplaceWithLen;        /* size of replace buffer   */
+	LPARAM 		lCustData;              /* data passed to hook fn.  */
+	UINT		(CALLBACK* lpfnHook)(HWND, UINT, WPARAM, LPARAM);
+	LPCSTR 		lpTemplateName;         /* custom template name     */
+	} FINDREPLACE;
+typedef FINDREPLACE *LPFINDREPLACE;
+
+#define FR_DOWN                         0x00000001
+#define FR_WHOLEWORD                    0x00000002
+#define FR_MATCHCASE                    0x00000004
+#define FR_FINDNEXT                     0x00000008
+#define FR_REPLACE                      0x00000010
+#define FR_REPLACEALL                   0x00000020
+#define FR_DIALOGTERM                   0x00000040
+#define FR_SHOWHELP                     0x00000080
+#define FR_ENABLEHOOK                   0x00000100
+#define FR_ENABLETEMPLATE               0x00000200
+#define FR_NOUPDOWN                     0x00000400
+#define FR_NOMATCHCASE                  0x00000800
+#define FR_NOWHOLEWORD                  0x00001000
+#define FR_ENABLETEMPLATEHANDLE         0x00002000
+#define FR_HIDEUPDOWN                   0x00004000
+#define FR_HIDEMATCHCASE                0x00008000
+#define FR_HIDEWHOLEWORD                0x00010000
+
+
+typedef struct {
+	DWORD			lStructSize;
+	HWND			hwndOwner;          /* caller's window handle   */
+	HDC				hDC;                /* printer DC/IC or NULL    */
+	LOGFONT FAR*	lpLogFont;          /* ptr. to a LOGFONT struct */
+	short			iPointSize;         /* 10 * size in points of selected font */
+	DWORD			Flags;              /* enum. type flags         */
+	COLORREF		rgbColors;          /* returned text color      */
+	LPARAM			lCustData;          /* data passed to hook fn.  */
+	UINT (CALLBACK* lpfnHook)(HWND, UINT, WPARAM, LPARAM);
+	LPCSTR			lpTemplateName;     /* custom template name     */
+	HINSTANCE		hInstance;          /* instance handle of.EXE that   */
+										/* contains cust. dlg. template  */
+	LPSTR			lpszStyle;          /* return the style field here   */
+										/* must be LF_FACESIZE or bigger */
+	UINT			nFontType;          /* same value reported to the    */
+										/* EnumFonts callback with the   */
+										/* extra FONTTYPE_ bits added    */
+	short			nSizeMin;           /* minimum pt size allowed & */
+	short			nSizeMax;           /* max pt size allowed if    */
+										/* CF_LIMITSIZE is used      */
+	} CHOOSEFONT;
+typedef CHOOSEFONT *LPCHOOSEFONT;
+
+
+#define CF_SCREENFONTS               0x00000001
+#define CF_PRINTERFONTS              0x00000002
+#define CF_BOTH                      (CF_SCREENFONTS | CF_PRINTERFONTS)
+#define CF_SHOWHELP                  0x00000004L
+#define CF_ENABLEHOOK                0x00000008L
+#define CF_ENABLETEMPLATE            0x00000010L
+#define CF_ENABLETEMPLATEHANDLE      0x00000020L
+#define CF_INITTOLOGFONTSTRUCT       0x00000040L
+#define CF_USESTYLE                  0x00000080L
+#define CF_EFFECTS                   0x00000100L
+#define CF_APPLY                     0x00000200L
+#define CF_ANSIONLY                  0x00000400L
+#define CF_NOVECTORFONTS             0x00000800L
+#define CF_NOOEMFONTS                CF_NOVECTORFONTS
+#define CF_NOSIMULATIONS             0x00001000L
+#define CF_LIMITSIZE                 0x00002000L
+#define CF_FIXEDPITCHONLY            0x00004000L
+#define CF_WYSIWYG                   0x00008000L /* use with CF_SCREENFONTS & CF_PRINTERFONTS */
+#define CF_FORCEFONTEXIST            0x00010000L
+#define CF_SCALABLEONLY              0x00020000L
+#define CF_TTONLY                    0x00040000L
+#define CF_NOFACESEL                 0x00080000L
+#define CF_NOSTYLESEL                0x00100000L
+#define CF_NOSIZESEL                 0x00200000L
+
+#define SIMULATED_FONTTYPE      0x8000
+#define PRINTER_FONTTYPE        0x4000
+#define SCREEN_FONTTYPE         0x2000
+#define BOLD_FONTTYPE           0x0100
+#define ITALIC_FONTTYPE         0x0200
+#define REGULAR_FONTTYPE        0x0400
+
+#define WM_CHOOSEFONT_GETLOGFONT        (WM_USER + 1)
+
+#define LBSELCHSTRING  "commdlg_LBSelChangedNotify"
+#define SHAREVISTRING  "commdlg_ShareViolation"
+#define FILEOKSTRING   "commdlg_FileNameOK"
+#define COLOROKSTRING  "commdlg_ColorOK"
+#define SETRGBSTRING   "commdlg_SetRGBColor"
+#define FINDMSGSTRING  "commdlg_FindReplace"
+#define HELPMSGSTRING  "commdlg_help"
+
+#define CD_LBSELNOITEMS -1
+#define CD_LBSELCHANGE   0
+#define CD_LBSELSUB      1
+#define CD_LBSELADD      2
+
+typedef struct {
+	DWORD 		lStructSize;
+	HWND 		hwndOwner;
+	HGLOBAL		hDevMode;
+	HGLOBAL		hDevNames;
+	HDC			hDC;
+	DWORD 		Flags;
+	UINT		nFromPage;
+	UINT		nToPage;
+	UINT		nMinPage;
+	UINT		nMaxPage;
+	UINT		nCopies;
+	HINSTANCE 	hInstance;
+	LPARAM 		lCustData;
+	UINT		(CALLBACK* lpfnPrintHook)(HWND, UINT, WPARAM, LPARAM);
+	UINT		(CALLBACK* lpfnSetupHook)(HWND, UINT, WPARAM, LPARAM);
+	LPCSTR 		lpPrintTemplateName;
+	LPCSTR 		lpSetupTemplateName;
+	HGLOBAL 	hPrintTemplate;
+	HGLOBAL 	hSetupTemplate;
+	} PRINTDLG;
+typedef PRINTDLG * LPPRINTDLG;
+
+
+#define PD_ALLPAGES                  0x00000000
+#define PD_SELECTION                 0x00000001
+#define PD_PAGENUMS                  0x00000002
+#define PD_NOSELECTION               0x00000004
+#define PD_NOPAGENUMS                0x00000008
+#define PD_COLLATE                   0x00000010
+#define PD_PRINTTOFILE               0x00000020
+#define PD_PRINTSETUP                0x00000040
+#define PD_NOWARNING                 0x00000080
+#define PD_RETURNDC                  0x00000100
+#define PD_RETURNIC                  0x00000200
+#define PD_RETURNDEFAULT             0x00000400
+#define PD_SHOWHELP                  0x00000800
+#define PD_ENABLEPRINTHOOK           0x00001000
+#define PD_ENABLESETUPHOOK           0x00002000
+#define PD_ENABLEPRINTTEMPLATE       0x00004000
+#define PD_ENABLESETUPTEMPLATE       0x00008000
+#define PD_ENABLEPRINTTEMPLATEHANDLE 0x00010000
+#define PD_ENABLESETUPTEMPLATEHANDLE 0x00020000
+#define PD_USEDEVMODECOPIES          0x00040000
+#define PD_DISABLEPRINTTOFILE        0x00080000
+#define PD_HIDEPRINTTOFILE           0x00100000
+
+typedef struct {
+	UINT 	wDriverOffset;
+	UINT 	wDeviceOffset;
+	UINT 	wOutputOffset;
+	UINT 	wDefault;
+	} DEVNAMES;
+typedef DEVNAMES * LPDEVNAMES;
+
+#define DN_DEFAULTPRN      0x0001
+
+
+#define CDERR_DIALOGFAILURE   0xFFFF
+#define CDERR_GENERALCODES     0x0000
+#define CDERR_STRUCTSIZE       0x0001
+#define CDERR_INITIALIZATION   0x0002
+#define CDERR_NOTEMPLATE       0x0003
+#define CDERR_NOHINSTANCE      0x0004
+#define CDERR_LOADSTRFAILURE   0x0005
+#define CDERR_FINDRESFAILURE   0x0006
+#define CDERR_LOADRESFAILURE   0x0007
+#define CDERR_LOCKRESFAILURE   0x0008
+#define CDERR_MEMALLOCFAILURE  0x0009
+#define CDERR_MEMLOCKFAILURE   0x000A
+#define CDERR_NOHOOK           0x000B
+#define CDERR_REGISTERMSGFAIL  0x000C
+
+/************************************************************************
+*                 COMMDLG Resources placed in Wine SYSRES.DLL		    *
+************************************************************************/
+
+#define OBM_FOLDER			32520
+#define OBM_FOLDER2			32521
+#define OBM_FLOPPY			32522
+#define OBM_HDISK			32523
+#define OBM_CDROM			32524
+
+#define OPENFILEDLG				3
+#define SAVEFILEDLG				4
+#define PRINTDLG				5
+#define PRINTSETUPDLG			6
+#define FONTDLG					7
+#define COLORDLG				8
+#define FINDDLG					9
+#define REPLACEDLG				10
+
+
+
+#endif 		/* #ifdef COMMDLG_H */
+
+
diff --git a/include/debug.h b/include/debug.h
index ab06923..eb60565 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -9,7 +9,9 @@
 #ifdef DEBUG_NONE_EXT
 #undef DEBUG_ACCEL
 #undef DEBUG_BITMAP
+#undef DEBUG_CALLBACK
 #undef DEBUG_CARET
+#undef DEBUG_CATCH
 #undef DEBUG_CDAUDIO
 #undef DEBUG_CLASS
 #undef DEBUG_CLIPBOARD
@@ -33,36 +35,51 @@
 #undef DEBUG_GRAPHICS
 #undef DEBUG_HEAP
 #undef DEBUG_ICON
+#undef DEBUG_IF
 #undef DEBUG_INT
 #undef DEBUG_KEY
 #undef DEBUG_KEYBOARD
 #undef DEBUG_LDT
 #undef DEBUG_LISTBOX
+#undef DEBUG_MCI
+#undef DEBUG_MCIANIM
 #undef DEBUG_MCIWAVE
 #undef DEBUG_MDI
 #undef DEBUG_MENU
 #undef DEBUG_MENUCALC
 #undef DEBUG_MESSAGE
 #undef DEBUG_METAFILE
+#undef DEBUG_MMIO
+#undef DEBUG_MMTIME
 #undef DEBUG_MODULE
 #undef DEBUG_MSG
+#undef DEBUG_MSGBOX
 #undef DEBUG_NONCLIENT
 #undef DEBUG_PALETTE
+#undef DEBUG_PROFILE
+#undef DEBUG_PROP
+#undef DEBUG_REG
 #undef DEBUG_REGION
 #undef DEBUG_RESOURCE
 #undef DEBUG_SCROLL
+#undef DEBUG_SELECTORS
+#undef DEBUG_STRESS
 #undef DEBUG_SYSCOLOR
+#undef DEBUG_TASK
 #undef DEBUG_TEXT
 #undef DEBUG_TIMER
 #undef DEBUG_UTILITY
 #undef DEBUG_WIN
+#undef DEBUG_WINSOCK
 #endif
  
  
 #ifdef DEBUG_ALL_EXT
 #define DEBUG_ACCEL
 #define DEBUG_BITMAP
+#define DEBUG_CALLBACK
 #define DEBUG_CARET
+#define DEBUG_CATCH
 #define DEBUG_CDAUDIO
 #define DEBUG_CLASS
 #define DEBUG_CLIPBOARD
@@ -86,29 +103,42 @@
 #define DEBUG_GRAPHICS
 #define DEBUG_HEAP
 #define DEBUG_ICON
+#define DEBUG_IF
 #define DEBUG_INT
 #define DEBUG_KEY
 #define DEBUG_KEYBOARD
 #define DEBUG_LDT
 #define DEBUG_LISTBOX
+#define DEBUG_MCI
+#define DEBUG_MCIANIM
 #define DEBUG_MCIWAVE
 #define DEBUG_MDI
 #define DEBUG_MENU
 #define DEBUG_MENUCALC
 #define DEBUG_MESSAGE
 #define DEBUG_METAFILE
+#define DEBUG_MMIO
+#define DEBUG_MMTIME
 #define DEBUG_MODULE
 #define DEBUG_MSG
+#define DEBUG_MSGBOX
 #define DEBUG_NONCLIENT
 #define DEBUG_PALETTE
+#define DEBUG_PROFILE
+#define DEBUG_PROP
+#define DEBUG_REG
 #define DEBUG_REGION
 #define DEBUG_RESOURCE
 #define DEBUG_SCROLL
+#define DEBUG_SELECTORS
+#define DEBUG_STRESS
 #define DEBUG_SYSCOLOR
+#define DEBUG_TASK
 #define DEBUG_TEXT
 #define DEBUG_TIMER
 #define DEBUG_UTILITY
 #define DEBUG_WIN
+#define DEBUG_WINSOCK
 #endif
  
  
@@ -125,11 +155,21 @@
 #else
 0,
 #endif
+#ifdef DEBUG_CALLBACK
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_CARET
 1,
 #else
 0,
 #endif
+#ifdef DEBUG_CATCH
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_CDAUDIO
 1,
 #else
@@ -245,6 +285,11 @@
 #else
 0,
 #endif
+#ifdef DEBUG_IF
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_INT
 1,
 #else
@@ -270,6 +315,16 @@
 #else
 0,
 #endif
+#ifdef DEBUG_MCI
+1,
+#else
+0,
+#endif
+#ifdef DEBUG_MCIANIM
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_MCIWAVE
 1,
 #else
@@ -300,6 +355,16 @@
 #else
 0,
 #endif
+#ifdef DEBUG_MMIO
+1,
+#else
+0,
+#endif
+#ifdef DEBUG_MMTIME
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_MODULE
 1,
 #else
@@ -310,6 +375,11 @@
 #else
 0,
 #endif
+#ifdef DEBUG_MSGBOX
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_NONCLIENT
 1,
 #else
@@ -320,6 +390,21 @@
 #else
 0,
 #endif
+#ifdef DEBUG_PROFILE
+1,
+#else
+0,
+#endif
+#ifdef DEBUG_PROP
+1,
+#else
+0,
+#endif
+#ifdef DEBUG_REG
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_REGION
 1,
 #else
@@ -335,11 +420,26 @@
 #else
 0,
 #endif
+#ifdef DEBUG_SELECTORS
+1,
+#else
+0,
+#endif
+#ifdef DEBUG_STRESS
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_SYSCOLOR
 1,
 #else
 0,
 #endif
+#ifdef DEBUG_TASK
+1,
+#else
+0,
+#endif
 #ifdef DEBUG_TEXT
 1,
 #else
@@ -360,6 +460,11 @@
 #else
 0,
 #endif
+#ifdef DEBUG_WINSOCK
+1,
+#else
+0,
+#endif
 0};
 #else
 extern short debug_msg_enabled[];
@@ -388,7 +493,17 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_caret if(debug_msg_enabled[2]) fprintf
+#define dprintf_callback if(debug_msg_enabled[2]) fprintf
+#else
+#ifdef DEBUG_CALLBACK
+#define dprintf_callback fprintf
+#else
+#define dprintf_callback
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_caret if(debug_msg_enabled[3]) fprintf
 #else
 #ifdef DEBUG_CARET
 #define dprintf_caret fprintf
@@ -398,7 +513,17 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_cdaudio if(debug_msg_enabled[3]) fprintf
+#define dprintf_catch if(debug_msg_enabled[4]) fprintf
+#else
+#ifdef DEBUG_CATCH
+#define dprintf_catch fprintf
+#else
+#define dprintf_catch
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_cdaudio if(debug_msg_enabled[5]) fprintf
 #else
 #ifdef DEBUG_CDAUDIO
 #define dprintf_cdaudio fprintf
@@ -408,7 +533,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_class if(debug_msg_enabled[4]) fprintf
+#define dprintf_class if(debug_msg_enabled[6]) fprintf
 #else
 #ifdef DEBUG_CLASS
 #define dprintf_class fprintf
@@ -418,7 +543,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_clipboard if(debug_msg_enabled[5]) fprintf
+#define dprintf_clipboard if(debug_msg_enabled[7]) fprintf
 #else
 #ifdef DEBUG_CLIPBOARD
 #define dprintf_clipboard fprintf
@@ -428,7 +553,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_clipping if(debug_msg_enabled[6]) fprintf
+#define dprintf_clipping if(debug_msg_enabled[8]) fprintf
 #else
 #ifdef DEBUG_CLIPPING
 #define dprintf_clipping fprintf
@@ -438,7 +563,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_combo if(debug_msg_enabled[7]) fprintf
+#define dprintf_combo if(debug_msg_enabled[9]) fprintf
 #else
 #ifdef DEBUG_COMBO
 #define dprintf_combo fprintf
@@ -448,7 +573,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_comm if(debug_msg_enabled[8]) fprintf
+#define dprintf_comm if(debug_msg_enabled[10]) fprintf
 #else
 #ifdef DEBUG_COMM
 #define dprintf_comm fprintf
@@ -458,7 +583,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_cursor if(debug_msg_enabled[9]) fprintf
+#define dprintf_cursor if(debug_msg_enabled[11]) fprintf
 #else
 #ifdef DEBUG_CURSOR
 #define dprintf_cursor fprintf
@@ -468,7 +593,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_dc if(debug_msg_enabled[10]) fprintf
+#define dprintf_dc if(debug_msg_enabled[12]) fprintf
 #else
 #ifdef DEBUG_DC
 #define dprintf_dc fprintf
@@ -478,7 +603,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_dialog if(debug_msg_enabled[11]) fprintf
+#define dprintf_dialog if(debug_msg_enabled[13]) fprintf
 #else
 #ifdef DEBUG_DIALOG
 #define dprintf_dialog fprintf
@@ -488,7 +613,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_dll if(debug_msg_enabled[12]) fprintf
+#define dprintf_dll if(debug_msg_enabled[14]) fprintf
 #else
 #ifdef DEBUG_DLL
 #define dprintf_dll fprintf
@@ -498,7 +623,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_dosfs if(debug_msg_enabled[13]) fprintf
+#define dprintf_dosfs if(debug_msg_enabled[15]) fprintf
 #else
 #ifdef DEBUG_DOSFS
 #define dprintf_dosfs fprintf
@@ -508,7 +633,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_driver if(debug_msg_enabled[14]) fprintf
+#define dprintf_driver if(debug_msg_enabled[16]) fprintf
 #else
 #ifdef DEBUG_DRIVER
 #define dprintf_driver fprintf
@@ -518,7 +643,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_edit if(debug_msg_enabled[15]) fprintf
+#define dprintf_edit if(debug_msg_enabled[17]) fprintf
 #else
 #ifdef DEBUG_EDIT
 #define dprintf_edit fprintf
@@ -528,7 +653,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_enum if(debug_msg_enabled[16]) fprintf
+#define dprintf_enum if(debug_msg_enabled[18]) fprintf
 #else
 #ifdef DEBUG_ENUM
 #define dprintf_enum fprintf
@@ -538,7 +663,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_event if(debug_msg_enabled[17]) fprintf
+#define dprintf_event if(debug_msg_enabled[19]) fprintf
 #else
 #ifdef DEBUG_EVENT
 #define dprintf_event fprintf
@@ -548,7 +673,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_exec if(debug_msg_enabled[18]) fprintf
+#define dprintf_exec if(debug_msg_enabled[20]) fprintf
 #else
 #ifdef DEBUG_EXEC
 #define dprintf_exec fprintf
@@ -558,7 +683,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_file if(debug_msg_enabled[19]) fprintf
+#define dprintf_file if(debug_msg_enabled[21]) fprintf
 #else
 #ifdef DEBUG_FILE
 #define dprintf_file fprintf
@@ -568,7 +693,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_fixup if(debug_msg_enabled[20]) fprintf
+#define dprintf_fixup if(debug_msg_enabled[22]) fprintf
 #else
 #ifdef DEBUG_FIXUP
 #define dprintf_fixup fprintf
@@ -578,7 +703,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_font if(debug_msg_enabled[21]) fprintf
+#define dprintf_font if(debug_msg_enabled[23]) fprintf
 #else
 #ifdef DEBUG_FONT
 #define dprintf_font fprintf
@@ -588,7 +713,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_gdi if(debug_msg_enabled[22]) fprintf
+#define dprintf_gdi if(debug_msg_enabled[24]) fprintf
 #else
 #ifdef DEBUG_GDI
 #define dprintf_gdi fprintf
@@ -598,7 +723,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_graphics if(debug_msg_enabled[23]) fprintf
+#define dprintf_graphics if(debug_msg_enabled[25]) fprintf
 #else
 #ifdef DEBUG_GRAPHICS
 #define dprintf_graphics fprintf
@@ -608,7 +733,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_heap if(debug_msg_enabled[24]) fprintf
+#define dprintf_heap if(debug_msg_enabled[26]) fprintf
 #else
 #ifdef DEBUG_HEAP
 #define dprintf_heap fprintf
@@ -618,7 +743,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_icon if(debug_msg_enabled[25]) fprintf
+#define dprintf_icon if(debug_msg_enabled[27]) fprintf
 #else
 #ifdef DEBUG_ICON
 #define dprintf_icon fprintf
@@ -628,7 +753,17 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_int if(debug_msg_enabled[26]) fprintf
+#define dprintf_if if(debug_msg_enabled[28]) fprintf
+#else
+#ifdef DEBUG_IF
+#define dprintf_if fprintf
+#else
+#define dprintf_if
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_int if(debug_msg_enabled[29]) fprintf
 #else
 #ifdef DEBUG_INT
 #define dprintf_int fprintf
@@ -638,7 +773,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_key if(debug_msg_enabled[27]) fprintf
+#define dprintf_key if(debug_msg_enabled[30]) fprintf
 #else
 #ifdef DEBUG_KEY
 #define dprintf_key fprintf
@@ -648,7 +783,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_keyboard if(debug_msg_enabled[28]) fprintf
+#define dprintf_keyboard if(debug_msg_enabled[31]) fprintf
 #else
 #ifdef DEBUG_KEYBOARD
 #define dprintf_keyboard fprintf
@@ -658,7 +793,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_ldt if(debug_msg_enabled[29]) fprintf
+#define dprintf_ldt if(debug_msg_enabled[32]) fprintf
 #else
 #ifdef DEBUG_LDT
 #define dprintf_ldt fprintf
@@ -668,7 +803,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_listbox if(debug_msg_enabled[30]) fprintf
+#define dprintf_listbox if(debug_msg_enabled[33]) fprintf
 #else
 #ifdef DEBUG_LISTBOX
 #define dprintf_listbox fprintf
@@ -678,7 +813,27 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_mciwave if(debug_msg_enabled[31]) fprintf
+#define dprintf_mci if(debug_msg_enabled[34]) fprintf
+#else
+#ifdef DEBUG_MCI
+#define dprintf_mci fprintf
+#else
+#define dprintf_mci
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_mcianim if(debug_msg_enabled[35]) fprintf
+#else
+#ifdef DEBUG_MCIANIM
+#define dprintf_mcianim fprintf
+#else
+#define dprintf_mcianim
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_mciwave if(debug_msg_enabled[36]) fprintf
 #else
 #ifdef DEBUG_MCIWAVE
 #define dprintf_mciwave fprintf
@@ -688,7 +843,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_mdi if(debug_msg_enabled[32]) fprintf
+#define dprintf_mdi if(debug_msg_enabled[37]) fprintf
 #else
 #ifdef DEBUG_MDI
 #define dprintf_mdi fprintf
@@ -698,7 +853,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_menu if(debug_msg_enabled[33]) fprintf
+#define dprintf_menu if(debug_msg_enabled[38]) fprintf
 #else
 #ifdef DEBUG_MENU
 #define dprintf_menu fprintf
@@ -708,7 +863,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_menucalc if(debug_msg_enabled[34]) fprintf
+#define dprintf_menucalc if(debug_msg_enabled[39]) fprintf
 #else
 #ifdef DEBUG_MENUCALC
 #define dprintf_menucalc fprintf
@@ -718,7 +873,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_message if(debug_msg_enabled[35]) fprintf
+#define dprintf_message if(debug_msg_enabled[40]) fprintf
 #else
 #ifdef DEBUG_MESSAGE
 #define dprintf_message fprintf
@@ -728,7 +883,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_metafile if(debug_msg_enabled[36]) fprintf
+#define dprintf_metafile if(debug_msg_enabled[41]) fprintf
 #else
 #ifdef DEBUG_METAFILE
 #define dprintf_metafile fprintf
@@ -738,7 +893,27 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_module if(debug_msg_enabled[37]) fprintf
+#define dprintf_mmio if(debug_msg_enabled[42]) fprintf
+#else
+#ifdef DEBUG_MMIO
+#define dprintf_mmio fprintf
+#else
+#define dprintf_mmio
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_mmtime if(debug_msg_enabled[43]) fprintf
+#else
+#ifdef DEBUG_MMTIME
+#define dprintf_mmtime fprintf
+#else
+#define dprintf_mmtime
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_module if(debug_msg_enabled[44]) fprintf
 #else
 #ifdef DEBUG_MODULE
 #define dprintf_module fprintf
@@ -748,7 +923,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_msg if(debug_msg_enabled[38]) fprintf
+#define dprintf_msg if(debug_msg_enabled[45]) fprintf
 #else
 #ifdef DEBUG_MSG
 #define dprintf_msg fprintf
@@ -758,7 +933,17 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_nonclient if(debug_msg_enabled[39]) fprintf
+#define dprintf_msgbox if(debug_msg_enabled[46]) fprintf
+#else
+#ifdef DEBUG_MSGBOX
+#define dprintf_msgbox fprintf
+#else
+#define dprintf_msgbox
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_nonclient if(debug_msg_enabled[47]) fprintf
 #else
 #ifdef DEBUG_NONCLIENT
 #define dprintf_nonclient fprintf
@@ -768,7 +953,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_palette if(debug_msg_enabled[40]) fprintf
+#define dprintf_palette if(debug_msg_enabled[48]) fprintf
 #else
 #ifdef DEBUG_PALETTE
 #define dprintf_palette fprintf
@@ -778,7 +963,37 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_region if(debug_msg_enabled[41]) fprintf
+#define dprintf_profile if(debug_msg_enabled[49]) fprintf
+#else
+#ifdef DEBUG_PROFILE
+#define dprintf_profile fprintf
+#else
+#define dprintf_profile
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_prop if(debug_msg_enabled[50]) fprintf
+#else
+#ifdef DEBUG_PROP
+#define dprintf_prop fprintf
+#else
+#define dprintf_prop
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_reg if(debug_msg_enabled[51]) fprintf
+#else
+#ifdef DEBUG_REG
+#define dprintf_reg fprintf
+#else
+#define dprintf_reg
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_region if(debug_msg_enabled[52]) fprintf
 #else
 #ifdef DEBUG_REGION
 #define dprintf_region fprintf
@@ -788,7 +1003,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_resource if(debug_msg_enabled[42]) fprintf
+#define dprintf_resource if(debug_msg_enabled[53]) fprintf
 #else
 #ifdef DEBUG_RESOURCE
 #define dprintf_resource fprintf
@@ -798,7 +1013,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_scroll if(debug_msg_enabled[43]) fprintf
+#define dprintf_scroll if(debug_msg_enabled[54]) fprintf
 #else
 #ifdef DEBUG_SCROLL
 #define dprintf_scroll fprintf
@@ -808,7 +1023,27 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_syscolor if(debug_msg_enabled[44]) fprintf
+#define dprintf_selectors if(debug_msg_enabled[55]) fprintf
+#else
+#ifdef DEBUG_SELECTORS
+#define dprintf_selectors fprintf
+#else
+#define dprintf_selectors
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_stress if(debug_msg_enabled[56]) fprintf
+#else
+#ifdef DEBUG_STRESS
+#define dprintf_stress fprintf
+#else
+#define dprintf_stress
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_syscolor if(debug_msg_enabled[57]) fprintf
 #else
 #ifdef DEBUG_SYSCOLOR
 #define dprintf_syscolor fprintf
@@ -818,7 +1053,17 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_text if(debug_msg_enabled[45]) fprintf
+#define dprintf_task if(debug_msg_enabled[58]) fprintf
+#else
+#ifdef DEBUG_TASK
+#define dprintf_task fprintf
+#else
+#define dprintf_task
+#endif
+#endif
+ 
+#ifdef DEBUG_RUNTIME
+#define dprintf_text if(debug_msg_enabled[59]) fprintf
 #else
 #ifdef DEBUG_TEXT
 #define dprintf_text fprintf
@@ -828,7 +1073,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_timer if(debug_msg_enabled[46]) fprintf
+#define dprintf_timer if(debug_msg_enabled[60]) fprintf
 #else
 #ifdef DEBUG_TIMER
 #define dprintf_timer fprintf
@@ -838,7 +1083,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_utility if(debug_msg_enabled[47]) fprintf
+#define dprintf_utility if(debug_msg_enabled[61]) fprintf
 #else
 #ifdef DEBUG_UTILITY
 #define dprintf_utility fprintf
@@ -848,7 +1093,7 @@
 #endif
  
 #ifdef DEBUG_RUNTIME
-#define dprintf_win if(debug_msg_enabled[48]) fprintf
+#define dprintf_win if(debug_msg_enabled[62]) fprintf
 #else
 #ifdef DEBUG_WIN
 #define dprintf_win fprintf
@@ -857,6 +1102,16 @@
 #endif
 #endif
  
+#ifdef DEBUG_RUNTIME
+#define dprintf_winsock if(debug_msg_enabled[63]) fprintf
+#else
+#ifdef DEBUG_WINSOCK
+#define dprintf_winsock fprintf
+#else
+#define dprintf_winsock
+#endif
+#endif
+ 
  
  
 #ifdef DEBUG_RUNTIME
@@ -864,7 +1119,9 @@
 static char *debug_msg_name[] = {
 "accel",
 "bitmap",
+"callback",
 "caret",
+"catch",
 "cdaudio",
 "class",
 "clipboard",
@@ -888,29 +1145,42 @@
 "graphics",
 "heap",
 "icon",
+"if",
 "int",
 "key",
 "keyboard",
 "ldt",
 "listbox",
+"mci",
+"mcianim",
 "mciwave",
 "mdi",
 "menu",
 "menucalc",
 "message",
 "metafile",
+"mmio",
+"mmtime",
 "module",
 "msg",
+"msgbox",
 "nonclient",
 "palette",
+"profile",
+"prop",
+"reg",
 "region",
 "resource",
 "scroll",
+"selectors",
+"stress",
 "syscolor",
+"task",
 "text",
 "timer",
 "utility",
 "win",
+"winsock",
 ""};
 #endif
 #endif
diff --git a/include/dlgs.h b/include/dlgs.h
new file mode 100644
index 0000000..f7116ac
--- /dev/null
+++ b/include/dlgs.h
@@ -0,0 +1,186 @@
+/******************************************************************************
+* dlgs.h -      Common dialog's dialog control ID numbers                     *
+******************************************************************************/
+
+#ifndef DLGS_H
+#define DLGS_H
+
+#define ctlFirst    0x0400
+#define ctlLast     0x04ff
+    /* Push buttons */
+#define psh1        0x0400
+#define psh2        0x0401
+#define psh3        0x0402
+#define psh4        0x0403
+#define psh5        0x0404
+#define psh6        0x0405
+#define psh7        0x0406
+#define psh8        0x0407
+#define psh9        0x0408
+#define psh10       0x0409
+#define psh11       0x040a
+#define psh12       0x040b
+#define psh13       0x040c
+#define psh14       0x040d
+#define psh15       0x040e
+#define pshHelp     psh15
+#define psh16       0x040f
+    /* Checkboxes */
+#define chx1        0x0410
+#define chx2        0x0411
+#define chx3        0x0412
+#define chx4        0x0413
+#define chx5        0x0414
+#define chx6        0x0415
+#define chx7        0x0416
+#define chx8        0x0417
+#define chx9        0x0418
+#define chx10       0x0419
+#define chx11       0x041a
+#define chx12       0x041b
+#define chx13       0x041c
+#define chx14       0x041d
+#define chx15       0x041e
+#define chx16       0x041f
+    /* Radio buttons */
+#define rad1        0x0420
+#define rad2        0x0421
+#define rad3        0x0422
+#define rad4        0x0423
+#define rad5        0x0424
+#define rad6        0x0425
+#define rad7        0x0426
+#define rad8        0x0427
+#define rad9        0x0428
+#define rad10       0x0429
+#define rad11       0x042a
+#define rad12       0x042b
+#define rad13       0x042c
+#define rad14       0x042d
+#define rad15       0x042e
+#define rad16       0x042f
+    /* Groups, frames, rectangles, and icons */
+#define grp1        0x0430
+#define grp2        0x0431
+#define grp3        0x0432
+#define grp4        0x0433
+#define frm1        0x0434
+#define frm2        0x0435
+#define frm3        0x0436
+#define frm4        0x0437
+#define rct1        0x0438
+#define rct2        0x0439
+#define rct3        0x043a
+#define rct4        0x043b
+#define ico1        0x043c
+#define ico2        0x043d
+#define ico3        0x043e
+#define ico4        0x043f
+    /* Static text */
+#define stc1        0x0440
+#define stc2        0x0441
+#define stc3        0x0442
+#define stc4        0x0443
+#define stc5        0x0444
+#define stc6        0x0445
+#define stc7        0x0446
+#define stc8        0x0447
+#define stc9        0x0448
+#define stc10       0x0449
+#define stc11       0x044a
+#define stc12       0x044b
+#define stc13       0x044c
+#define stc14       0x044d
+#define stc15       0x044e
+#define stc16       0x044f
+#define stc17       0x0450
+#define stc18       0x0451
+#define stc19       0x0452
+#define stc20       0x0453
+#define stc21       0x0454
+#define stc22       0x0455
+#define stc23       0x0456
+#define stc24       0x0457
+#define stc25       0x0458
+#define stc26       0x0459
+#define stc27       0x045a
+#define stc28       0x045b
+#define stc29       0x045c
+#define stc30       0x045d
+#define stc31       0x045e
+#define stc32       0x045f
+    /* Listboxes */
+#define lst1        0x0460
+#define lst2        0x0461
+#define lst3        0x0462
+#define lst4        0x0463
+#define lst5        0x0464
+#define lst6        0x0465
+#define lst7        0x0466
+#define lst8        0x0467
+#define lst9        0x0468
+#define lst10       0x0469
+#define lst11       0x046a
+#define lst12       0x046b
+#define lst13       0x046c
+#define lst14       0x046d
+#define lst15       0x046e
+#define lst16       0x046f
+    /* Combo boxes */
+#define cmb1        0x0470
+#define cmb2        0x0471
+#define cmb3        0x0472
+#define cmb4        0x0473
+#define cmb5        0x0474
+#define cmb6        0x0475
+#define cmb7        0x0476
+#define cmb8        0x0477
+#define cmb9        0x0478
+#define cmb10       0x0479
+#define cmb11       0x047a
+#define cmb12       0x047b
+#define cmb13       0x047c
+#define cmb14       0x047d
+#define cmb15       0x047e
+#define cmb16       0x047f
+    /* Edit controls */
+#define edt1        0x0480
+#define edt2        0x0481
+#define edt3        0x0482
+#define edt4        0x0483
+#define edt5        0x0484
+#define edt6        0x0485
+#define edt7        0x0486
+#define edt8        0x0487
+#define edt9        0x0488
+#define edt10       0x0489
+#define edt11       0x048a
+#define edt12       0x048b
+#define edt13       0x048c
+#define edt14       0x048d
+#define edt15       0x048e
+#define edt16       0x048f
+    /* Scroll bars */
+#define scr1        0x0490
+#define scr2        0x0491
+#define scr3        0x0492
+#define scr4        0x0493
+#define scr5        0x0494
+#define scr6        0x0495
+#define scr7        0x0496
+#define scr8        0x0497
+
+/* These dialog resource ordinals really start at 0x0600, but the
+ * RC Compiler can't handle hex for resource IDs, hence the decimal.
+ */
+#define FILEOPENORD      1536
+#define MULTIFILEOPENORD 1537
+#define PRINTDLGORD      1538
+#define PRNSETUPDLGORD   1539
+#define FINDDLGORD       1540
+#define REPLACEDLGORD    1541
+#define FONTDLGORD       1542
+#define FORMATDLGORD31   1543
+#define FORMATDLGORD30   1544
+
+#endif  /* #ifdef DLGS_H */
diff --git a/include/dlls.h b/include/dlls.h
index 5a5cdf6..b4a3fc0 100644
--- a/include/dlls.h
+++ b/include/dlls.h
@@ -112,7 +112,8 @@
 extern struct dll_table_entry_s SYSTEM_table[];
 extern struct dll_table_entry_s TOOLHELP_table[];
 extern struct dll_table_entry_s MOUSE_table[];
+extern struct dll_table_entry_s COMMDLG_table[];
 
-#define N_BUILTINS	14
+#define N_BUILTINS	15
 
 #endif /* DLLS_H */
diff --git a/include/gdi.h b/include/gdi.h
index 9198f21..bc553df 100644
--- a/include/gdi.h
+++ b/include/gdi.h
@@ -124,8 +124,8 @@
     DeviceCaps   *devCaps;
 
     HANDLE        hMetaFile;
-    HRGN          hClipRgn;     /* Clip region */
-    HRGN          hVisRgn;      /* Visible region */
+    HRGN          hClipRgn;     /* Clip region (may be 0) */
+    HRGN          hVisRgn;      /* Visible region (must never be 0) */
     HRGN          hGCClipRgn;   /* GC clip region (ClipRgn AND VisRgn) */
     HPEN          hPen;
     HBRUSH        hBrush;
@@ -158,8 +158,6 @@
     WORD          MapMode;
     short         DCOrgX;            /* DC origin */
     short         DCOrgY;
-    short         DCSizeX;           /* DC dimensions */
-    short         DCSizeY;
     short         CursPosX;          /* Current position */
     short         CursPosY;
     short         WndOrgX;
diff --git a/include/heap.h b/include/heap.h
index 7ff97a0..ff4321a 100644
--- a/include/heap.h
+++ b/include/heap.h
@@ -37,6 +37,7 @@
 			  int new_size, unsigned int flags);
 extern LHEAP *HEAP_LocalFindHeap(unsigned short owner);
 extern unsigned int HEAP_LocalSize(MDESC **free_list, unsigned int handle);
+extern void HEAP_LocalInit(unsigned short owner, void *start, int length);
 
 #define HEAP_OWNER	(Segments[Stack16Frame[11] >> 3].owner)
 #define LOCALHEAP()	(&HEAP_LocalFindHeap(HEAP_OWNER)->free_list)
diff --git a/include/listbox.h b/include/listbox.h
index 22148ec..e244781 100644
--- a/include/listbox.h
+++ b/include/listbox.h
@@ -4,30 +4,32 @@
 
 
 typedef struct tagLISTSTRUCT {
-    DRAWITEMSTRUCT 	dis;
-    HANDLE		hMem;
-    HANDLE		hData;
-    char                *itemText;
-    void		*lpNext;
+	DRAWITEMSTRUCT 	dis;
+	HANDLE		hMem;
+	HANDLE		hData;
+	char		*itemText;
+	void		*lpNext;
 } LISTSTRUCT;
 typedef LISTSTRUCT FAR* LPLISTSTRUCT;
 
 
 typedef struct tagHEADLIST {
-    short	FirstVisible;
-    short	ItemsCount;
-    short	ItemsVisible;
-    short	ColumnsVisible;
-    short	ItemsPerColumn;
-    short	ItemFocused;
-    short	PrevFocused;
-    short 	StdItemHeight;
-    short	ColumnsWidth;
-    short	DrawCtlType;
-    void	*lpFirst; 
-    DWORD	dwStyle;
-    HWND	hWndLogicParent;
-    HFONT	hFont;
+	short	FirstVisible;
+	short	ItemsCount;
+	short	ItemsVisible;
+	short	ColumnsVisible;
+	short	ItemsPerColumn;
+	short	ItemFocused;
+	short	PrevFocused;
+	short	SelCount;
+	short 	StdItemHeight;
+	short	ColumnsWidth;
+	short	DrawCtlType;
+	void	*lpFirst; 
+	DWORD	dwStyle;
+	HWND	hWndLogicParent;
+	HFONT	hFont;
+	BOOL	bRedrawFlag;
 } HEADLIST;
 typedef HEADLIST FAR* LPHEADLIST;
 
diff --git a/include/msdos.h b/include/msdos.h
index 0578218..0529883 100644
--- a/include/msdos.h
+++ b/include/msdos.h
@@ -30,25 +30,24 @@
 #define DOSVERSION 0x0330;
 #define MAX_DOS_DRIVES	26
 
-#define pointer(a,b) 	(BYTE*)(((WORD) a << 16) | b)
-#define segment(a) 	((DWORD)a >> 16)
-#define offset(a)	((DWORD)a & 0xffff)
+#define segment(a) 	((DWORD)(a) >> 16)
+#define offset(a)	((DWORD)(a) & 0xffff)
 
-#define setword(a,b)	*(BYTE*)(a)	= b & 0xff; \
-			*((BYTE*)(a + 1)) = (b>>8) & 0xff;
+#define setword(a,b)	*(BYTE*)(a)	  = (b) & 0xff; \
+			*((BYTE*)((a)+1)) = ((b)>>8) & 0xff;
 			
-#define setdword(a,b)	*(BYTE*)a	= b & 0xff; \
-			*((BYTE*)a + 1) = (b>>8) & 0xff; \
-			*((BYTE*)a + 2) = (b>>16) & 0xff; \
-			*((BYTE*)a + 3) = (b>>24) & 0xff;
+#define setdword(a,b)	*(BYTE*)(a)	= (b) & 0xff; \
+			*((BYTE*)(a)+1) = ((b)>>8) & 0xff; \
+			*((BYTE*)(a)+2) = ((b)>>16) & 0xff; \
+			*((BYTE*)(a)+3) = ((b)>>24) & 0xff;
 
-#define getword(a)	(WORD) *(BYTE*)a + \
-			(*((BYTE*)a + 1) << 8)
+#define getword(a)	(WORD) *(BYTE*)(a) + \
+			(*((BYTE*)(a) + 1) << 8)
 
-#define getdword(a)	(DWORD) (*(BYTE*)a + \
-			(*((BYTE*)a + 1) << 8) + \
-			(*((BYTE*)a + 2) << 16) + \
-			(*((BYTE*)a + 3) << 24))
+#define getdword(a)	(DWORD) (*(BYTE*)(a) + \
+			(*((BYTE*)(a) + 1) << 8) + \
+			(*((BYTE*)(a) + 2) << 16) + \
+			(*((BYTE*)(a) + 3) << 24))
 
 /* dos file attributes */
 
diff --git a/include/scroll.h b/include/scroll.h
index 02ce9d1..96a6be9 100644
--- a/include/scroll.h
+++ b/include/scroll.h
@@ -4,22 +4,23 @@
 
 
 typedef struct tagHEADSSCROLL {
-    short	CurVal;
-    short	MinVal;
-    short	MaxVal;
-    short	MaxPix;
-    short	CurPix;
-    short      ThumbVal;
-    RECT	rect;
-    RECT	rectUp;
-    RECT	rectDown;
-    BOOL	ThumbActive;
-    BOOL	TimerPending;
-    WORD	ButtonDown;
-    WORD	Direction;
-    DWORD	dwStyle;
-    HWND	hWndOwner;
-} HEADSCROLL;
+	short	CurVal;
+	short	MinVal;
+	short	MaxVal;
+	short	MaxPix;
+	short	CurPix;
+	short	ThumbVal;
+	RECT	rect;
+	RECT	rectUp;
+	RECT	rectDown;
+	BOOL	ThumbActive;
+	BOOL	TimerPending;
+	WORD	ButtonDown;
+	WORD	Direction;
+	DWORD	dwStyle;
+	HWND	hWndOwner;
+	BOOL	bRedrawFlag;
+	} HEADSCROLL;
 typedef HEADSCROLL FAR* LPHEADSCROLL;
 
 
diff --git a/include/stddebug.h b/include/stddebug.h
index cda6a2e..465bd25 100644
--- a/include/stddebug.h
+++ b/include/stddebug.h
@@ -68,6 +68,8 @@
 /* #define DEBUG_WIN       */
 /* #define DEBUG_ENUM      */
 /* #define DEBUG_DLL       */
+/* #define DEBUG_MSGBOX    */
+/* #define DEBUG_CATCH     */
  
 
 # /* Do not remove this line or change anything below this line */
@@ -75,7 +77,9 @@
 #ifdef DEBUG_NONE
 #undef DEBUG_ACCEL
 #undef DEBUG_BITMAP
+#undef DEBUG_CALLBACK
 #undef DEBUG_CARET
+#undef DEBUG_CATCH
 #undef DEBUG_CDAUDIO
 #undef DEBUG_CLASS
 #undef DEBUG_CLIPBOARD
@@ -99,36 +103,51 @@
 #undef DEBUG_GRAPHICS
 #undef DEBUG_HEAP
 #undef DEBUG_ICON
+#undef DEBUG_IF
 #undef DEBUG_INT
 #undef DEBUG_KEY
 #undef DEBUG_KEYBOARD
 #undef DEBUG_LDT
 #undef DEBUG_LISTBOX
+#undef DEBUG_MCI
+#undef DEBUG_MCIANIM
 #undef DEBUG_MCIWAVE
 #undef DEBUG_MDI
 #undef DEBUG_MENU
 #undef DEBUG_MENUCALC
 #undef DEBUG_MESSAGE
 #undef DEBUG_METAFILE
+#undef DEBUG_MMIO
+#undef DEBUG_MMTIME
 #undef DEBUG_MODULE
 #undef DEBUG_MSG
+#undef DEBUG_MSGBOX
 #undef DEBUG_NONCLIENT
 #undef DEBUG_PALETTE
+#undef DEBUG_PROFILE
+#undef DEBUG_PROP
+#undef DEBUG_REG
 #undef DEBUG_REGION
 #undef DEBUG_RESOURCE
 #undef DEBUG_SCROLL
+#undef DEBUG_SELECTORS
+#undef DEBUG_STRESS
 #undef DEBUG_SYSCOLOR
+#undef DEBUG_TASK
 #undef DEBUG_TEXT
 #undef DEBUG_TIMER
 #undef DEBUG_UTILITY
 #undef DEBUG_WIN
+#undef DEBUG_WINSOCK
 #endif
  
  
 #ifdef DEBUG_ALL
 #define DEBUG_ACCEL
 #define DEBUG_BITMAP
+#define DEBUG_CALLBACK
 #define DEBUG_CARET
+#define DEBUG_CATCH
 #define DEBUG_CDAUDIO
 #define DEBUG_CLASS
 #define DEBUG_CLIPBOARD
@@ -152,27 +171,40 @@
 #define DEBUG_GRAPHICS
 #define DEBUG_HEAP
 #define DEBUG_ICON
+#define DEBUG_IF
 #define DEBUG_INT
 #define DEBUG_KEY
 #define DEBUG_KEYBOARD
 #define DEBUG_LDT
 #define DEBUG_LISTBOX
+#define DEBUG_MCI
+#define DEBUG_MCIANIM
 #define DEBUG_MCIWAVE
 #define DEBUG_MDI
 #define DEBUG_MENU
 #define DEBUG_MENUCALC
 #define DEBUG_MESSAGE
 #define DEBUG_METAFILE
+#define DEBUG_MMIO
+#define DEBUG_MMTIME
 #define DEBUG_MODULE
 #define DEBUG_MSG
+#define DEBUG_MSGBOX
 #define DEBUG_NONCLIENT
 #define DEBUG_PALETTE
+#define DEBUG_PROFILE
+#define DEBUG_PROP
+#define DEBUG_REG
 #define DEBUG_REGION
 #define DEBUG_RESOURCE
 #define DEBUG_SCROLL
+#define DEBUG_SELECTORS
+#define DEBUG_STRESS
 #define DEBUG_SYSCOLOR
+#define DEBUG_TASK
 #define DEBUG_TEXT
 #define DEBUG_TIMER
 #define DEBUG_UTILITY
 #define DEBUG_WIN
+#define DEBUG_WINSOCK
 #endif
diff --git a/include/windows.h b/include/windows.h
index ee8fc6f..96d80ea 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -1195,7 +1195,7 @@
 typedef struct tagDCB
 {
     BYTE Id;
-    UINT BaudRate;
+    UINT BaudRate WINE_PACKED;
     BYTE ByteSize;
     BYTE Parity;
     BYTE StopBits;
@@ -1227,15 +1227,15 @@
     char PeChar;
     char EofChar;
     char EvtChar;
-    UINT TxDelay;
+    UINT TxDelay WINE_PACKED;
 } DCB;
 typedef DCB FAR* LPDCB;
 
 typedef struct tagCOMSTAT
 {
     BYTE status;
-    UINT cbInQue;
-    UINT cbOutQue;
+    UINT cbInQue WINE_PACKED;
+    UINT cbOutQue WINE_PACKED;
 } COMSTAT;
 
 #define CSTF_CTSHOLD	0x01
@@ -2655,6 +2655,7 @@
 Fb(BOOL,InvertRgn,HDC,a,HRGN,b)
 Fb(BOOL,IsChild,HWND,a,HWND,b)
 Fb(BOOL,IsDialogMessage,HWND,a,LPMSG,b)
+Fb(BOOL,KillSystemTimer,HWND,a,WORD,b)
 Fb(BOOL,KillTimer,HWND,a,WORD,b)
 Fb(BOOL,OemToAnsi,LPSTR,a,LPSTR,b)
 Fb(BOOL,PaintRgn,HDC,a,HRGN,b)
@@ -2916,6 +2917,7 @@
 Fd(WORD,GetPrivateProfileInt,LPSTR,a,LPSTR,b,short,c,LPSTR,d)
 Fd(WORD,GetSystemPaletteEntries,HDC,a,WORD,b,WORD,c,LPPALETTEENTRY,d)
 Fd(WORD,SetPaletteEntries,HPALETTE,a,WORD,b,WORD,c,LPPALETTEENTRY,d)
+Fd(WORD,SetSystemTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
 Fd(WORD,SetTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
 Fd(BOOL,SetViewportExtEx,HDC,a,short,b,short,c,LPSIZE,d)
 Fd(BOOL,SetViewportOrgEx,HDC,a,short,b,short,c,LPPOINT,d)
diff --git a/include/winpos.h b/include/winpos.h
index 1353f92..837a5b3 100644
--- a/include/winpos.h
+++ b/include/winpos.h
@@ -15,6 +15,7 @@
     WORD        suggestedCount;
     WORD        valid;
     WORD        wMagic;
+    HWND        hwndParent;
     WINDOWPOS   winPos[1];
 } DWP;
 
diff --git a/loader/dump.c b/loader/dump.c
index 08e1962..1cf84fa 100644
--- a/loader/dump.c
+++ b/loader/dump.c
@@ -29,14 +29,14 @@
 	   ne_header->header_type[1]);
     printf("linker version: %d.%d\n", ne_header->linker_version,
 	   ne_header->linker_revision);
-    printf("format flags: %04.4x\n", ne_header->format_flags);
-    printf("automatic data segment: %04.4x\n", ne_header->auto_data_seg);
-    printf("CS:IP  %04.4x:%04.4x\n", ne_header->cs, ne_header->ip);
-    printf("SS:SP  %04.4x:%04.4x\n", ne_header->ss, ne_header->sp);
-    printf("additional flags: %02.2x\n", ne_header->additional_flags);
-    printf("operating system: %02.2x\n", ne_header->operating_system);
-    printf("fast load offset: %04.4x\n", ne_header->fastload_offset);
-    printf("fast load length: %04.4x\n", ne_header->fastload_length);
+    printf("format flags: %04x\n", ne_header->format_flags);
+    printf("automatic data segment: %04x\n", ne_header->auto_data_seg);
+    printf("CS:IP  %04x:%04x\n", ne_header->cs, ne_header->ip);
+    printf("SS:SP  %04x:%04x\n", ne_header->ss, ne_header->sp);
+    printf("additional flags: %02x\n", ne_header->additional_flags);
+    printf("operating system: %02x\n", ne_header->operating_system);
+    printf("fast load offset: %04x\n", ne_header->fastload_offset);
+    printf("fast load length: %04x\n", ne_header->fastload_length);
 }
 
 /**********************************************************************
@@ -49,10 +49,10 @@
 
     for (i = 0; i < nentries; i++)
     {
-	printf("  %2d: OFFSET %04.4x, LENGTH %04.4x, ",
+	printf("  %2d: OFFSET %04x, LENGTH %04x, ",
 	       i + 1, seg_table[i].seg_data_offset, 
 	       seg_table[i].seg_data_length);
-	printf("FLAGS %04.4x, MIN ALLOC %04.4x\n",
+	printf("FLAGS %04x, MIN ALLOC %04x\n",
 	       seg_table[i].seg_flags, seg_table[i].min_alloc);
     }
 }
@@ -85,9 +85,9 @@
     rep = (struct relocation_entry_s *) (sp + 1);
     for (i = 0; i < n_entries; i++, rep++)
     {
-	printf("  ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,",
+	printf("  ADDR TYPE %d,  TYPE %d,  OFFSET %04x,",
 	       rep->address_type, rep->relocation_type, rep->offset);
-	printf("TARGET %04.4x %04.4x\n", rep->target1, rep->target2);
+	printf("TARGET %04x %04x\n", rep->target1, rep->target2);
     }
 }
 #endif /* ifndef WINELIB */
diff --git a/loader/ldt.c b/loader/ldt.c
index 96ca5e4..ebcd574 100644
--- a/loader/ldt.c
+++ b/loader/ldt.c
@@ -55,7 +55,7 @@
 #endif
 	if (*lp & 1000)
 	{
-	    printf("Entry %2d: Base %08.8x, Limit %05.5x, DPL %d, Type %d\n",
+	    printf("Entry %2d: Base %08lx, Limit %05lx, DPL %d, Type %d\n",
 		   i, base_addr, limit, dpl, type);
 	    printf("          ");
 	    if (*lp & 0x100)
@@ -75,13 +75,13 @@
 	    else
 		printf("byte limit, ");
 	    printf("\n");
-	    printf("          %08.8x %08.8x\n", *(lp), *(lp-1));
+	    printf("          %08lx %08lx\n", *(lp), *(lp-1));
 	}
 	else
 	{
-	    printf("Entry %2d: Base %08.8x, Limit %05.5x, DPL %d, Type %d\n",
+	    printf("Entry %2d: Base %08lx, Limit %05lx, DPL %d, Type %d\n",
 		   i, base_addr, limit, dpl, type);
-	    printf("          SYSTEM: %08.8x %08.8x\n", *lp, *(lp-1));
+	    printf("          SYSTEM: %08x %08x\n", *lp, *(lp-1));
 	}
     }
 }
diff --git a/loader/ldtlib.c b/loader/ldtlib.c
index 8266c7f..6e4c30b 100644
--- a/loader/ldtlib.c
+++ b/loader/ldtlib.c
@@ -7,8 +7,8 @@
 #include <errno.h>
 #include "autoconf.h"
 #include "stddebug.h"
-/* #define DEBUG_LDT /* */
-/* #undef DEBUG_LDT  /* */
+/* #define DEBUG_LDT */
+/* #undef DEBUG_LDT  */
 #include "debug.h"
 
 #ifdef linux
diff --git a/loader/library.c b/loader/library.c
index ea6f623..1f9291d 100644
--- a/loader/library.c
+++ b/loader/library.c
@@ -22,8 +22,8 @@
 #include "task.h"
 #include "toolhelp.h"
 #include "stddebug.h"
-/* #define DEBUG_MODULE /* */
-/* #undef DEBUG_MODULE  /* */
+/* #define DEBUG_MODULE */
+/* #undef DEBUG_MODULE  */
 #include "debug.h"
 
 extern char WindowsPath[256];
@@ -96,12 +96,12 @@
     static flagReadyToRun = 0;
     struct w_files *final_wpnt;
 
-    printf("InitializeLoadedDLLs %08X\n", wpnt);
+    dprintf_module(stddeb,"InitializeLoadedDLLs(%08lX)\n", wpnt);
 
     if (wpnt == NULL)
     {
 	flagReadyToRun = 1;
-	fprintf(stderr, "Initializing DLLs\n");
+	dprintf_module(stddeb,"Initializing DLLs\n");
     }
     
     if (!flagReadyToRun)
@@ -109,7 +109,7 @@
 
 #if 1
     if (wpnt != NULL)
-	fprintf(stderr, "Initializing %s\n", wpnt->name);
+	dprintf_module(stddeb,"Initializing %s\n", wpnt->name);
 #endif
 
     /*
@@ -140,7 +140,7 @@
     char buffer[256], header[2], modulename[64], *fullname;
 
     ExtractDLLName(module, modulename);
-    printf("LoadImage [%s]\n", module);
+    dprintf_module(stddeb,"LoadImage [%s]\n", module);
     /* built-in one ? */
     if (FindDLLTable(modulename)) {
 	return GetModuleHandle(modulename);
@@ -166,7 +166,7 @@
 
     fullname = GetDosFileName(fullname);
     
-    fprintf(stderr,"LoadImage: loading %s (%s)\n           [%s]\n", 
+    dprintf_module(stddeb,"LoadImage: loading %s (%s)\n           [%s]\n", 
 	    module, buffer, fullname);
 
     if (change_dir && fullname)
@@ -209,8 +209,12 @@
     {
 	myerror("Unable to read MZ header from file");
     }
+
+      /* This field is ignored according to "Windows Internals", p.242 */
+#if 0
     if (wpnt->mz_header->must_be_0x40 != 0x40)
 	myerror("This is not a Windows program");
+#endif
 
     /* read first two bytes to determine filetype */
     lseek(wpnt->fd, wpnt->mz_header->ne_offset, SEEK_SET);
@@ -261,45 +265,45 @@
 		ExtractDLLName(lpModuleName, dllname);
 
 	if ((int) lpModuleName & 0xffff0000)
-	 	printf("GetModuleHandle('%s');\n", lpModuleName);
+	 	dprintf_module(stddeb,"GetModuleHandle('%s');\n", lpModuleName);
 	else
-	 	printf("GetModuleHandle('%x');\n", lpModuleName);
+	 	dprintf_module(stddeb,"GetModuleHandle('%p');\n", lpModuleName);
 
-/* 	printf("GetModuleHandle // searching in builtin libraries\n");*/
+/* 	dprintf_module(stddeb,"GetModuleHandle // searching in builtin libraries\n");*/
 	for (i = 0; i < N_BUILTINS; i++) {
 		if (dll_builtin_table[i].dll_name == NULL) break;
 		if (((int) lpModuleName & 0xffff0000) == 0) {
 			if (0xFF00 + i == (int) lpModuleName) {
-				printf("GetModuleHandle('%s') return %04X \n",
+				dprintf_module(stddeb,"GetModuleHandle('%s') return %04X \n",
 				       lpModuleName, 0xff00 + i);
 				return 0xFF00 + i;
 				}
 			}
 		else if (strcasecmp(dll_builtin_table[i].dll_name, dllname) == 0) {
-			printf("GetModuleHandle('%x') return %04X \n", 
+			dprintf_module(stddeb,"GetModuleHandle('%p') return %04X \n", 
 							lpModuleName, 0xFF00 + i);
 			return (0xFF00 + i);
 			}
 		}
 
- 	printf("GetModuleHandle // searching in loaded modules\n");
+ 	dprintf_module(stddeb,"GetModuleHandle // searching in loaded modules\n");
 	while (w) {
-/*		printf("GetModuleHandle // '%x' \n", w->name);  */
+/*		dprintf_module(stddeb,"GetModuleHandle // '%x' \n", w->name);  */
 		if (((int) lpModuleName & 0xffff0000) == 0) {
 			if (w->hinstance == (int) lpModuleName) {
-				printf("GetModuleHandle('%x') return %04X \n",
+				dprintf_module(stddeb,"GetModuleHandle('%p') return %04X \n",
 				       lpModuleName, w->hinstance);
 				return w->hinstance;
 				}
 			}
 		else if (strcasecmp(w->name, dllname) == 0) {
-			printf("GetModuleHandle('%s') return %04X \n", 
+			dprintf_module(stddeb,"GetModuleHandle('%s') return %04X \n", 
 							lpModuleName, w->hinstance);
 			return w->hinstance;
 			}
 		w = w->next;
 		}
-	printf("GetModuleHandle('%x') not found !\n", lpModuleName);
+	printf("GetModuleHandle('%p') not found !\n", lpModuleName);
 	return 0;
 }
 
@@ -311,7 +315,7 @@
 {
 	struct w_files *w;
 
-	printf("GetModuleUsage(%04X);\n", hModule);
+	dprintf_module(stddeb,"GetModuleUsage(%04X);\n", hModule);
 
 	/* built-in dll ? */
 	if (IS_BUILTIN_DLL(hModule)) 
@@ -332,7 +336,7 @@
     LPSTR str;
     char windir[256], temp[256];
 
-    printf("GetModuleFileName(%04X, %08X, %d);\n", hModule, lpFileName, nSize);
+    dprintf_module(stddeb,"GetModuleFileName(%04X, %p, %d);\n", hModule, lpFileName, nSize);
 
     if (lpFileName == NULL) return 0;
     if (nSize < 1) return 0;
@@ -343,7 +347,7 @@
 	sprintf(temp, "%s\\%s.DLL", windir, dll_builtin_table[hModule & 0x00ff].dll_name);
 	ToDos(temp);
 	strncpy(lpFileName, temp, nSize);
-        printf("GetModuleFileName copied '%s' (internal dll) return %d \n", lpFileName, nSize);
+        dprintf_module(stddeb,"GetModuleFileName copied '%s' (internal dll) return %d \n", lpFileName, nSize);
 	return strlen(lpFileName);
     }
 
@@ -353,7 +357,7 @@
     str = GetDosFileName(w->filename);
     if (nSize > strlen(str)) nSize = strlen(str) + 1;
     strncpy(lpFileName, str, nSize);
-    printf("GetModuleFileName copied '%s' return %d \n", lpFileName, nSize);
+    dprintf_module(stddeb,"GetModuleFileName copied '%s' return %d \n", lpFileName, nSize);
     return nSize - 1;
 }
 
@@ -379,8 +383,7 @@
  */
 void FreeLibrary(HANDLE hLib)
 {
-	struct w_files *wpnt;
-	printf("FreeLibrary(%04X);\n", hLib);
+	dprintf_module(stddeb,"FreeLibrary(%04X);\n", hLib);
 
 	/* built-in dll ? */
 	if (IS_BUILTIN_DLL(hLib) || hLib == 0 || hLib == hSysRes) 
@@ -399,11 +402,11 @@
 				if (lpMod->ModuleName != NULL) free(lpMod->ModuleName);
 				if (lpMod->FileName != NULL) free(lpMod->FileName);
 				GlobalFree(lpMod->hModule);
-				printf("FreeLibrary // freed !\n");
+				dprintf_module(stddeb,"FreeLibrary // freed !\n");
 				return;
 				}
 			lpMod->Count--;
-			printf("FreeLibrary // Count decremented !\n");
+			dprintf_module(stddeb,"FreeLibrary // Count decremented !\n");
 			return;
 			}
 		lpMod = lpMod->lpNextModule;
@@ -433,7 +436,7 @@
     {
 	if ((int) proc_name & 0xffff0000) 
 	{
-	    printf("GetProcAddress: builtin %#04X, '%s'\n", 
+	    dprintf_module(stddeb,"GetProcAddress: builtin %#04X, '%s'\n", 
 		   hModule, proc_name);
 	    if (GetEntryDLLName(dll_builtin_table[hModule - 0xFF00].dll_name,
 				proc_name, &sel, &addr)) 
@@ -443,7 +446,7 @@
 	}
 	else 
 	{
-	    printf("GetProcAddress: builtin %#04X, %d\n", 
+	    dprintf_module(stddeb,"GetProcAddress: builtin %#04X, %d\n", 
 		   hModule, (int)proc_name);
 	    if (GetEntryDLLOrdinal(dll_builtin_table[hModule-0xFF00].dll_name,
 				   (int)proc_name & 0x0000FFFF, &sel, &addr)) 
@@ -452,14 +455,14 @@
 	    }
 	}
 	ret = MAKELONG(addr, sel);
-	printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n", 
+	dprintf_module(stddeb,"GetProcAddress // ret=%08X sel=%04X addr=%04X\n", 
 	       ret, sel, addr);
 	return (FARPROC)ret;
     }
     if (hModule == 0) 
     {
 	hTask = GetCurrentTask();
-	printf("GetProcAddress // GetCurrentTask()=%04X\n", hTask);
+	dprintf_module(stddeb,"GetProcAddress // GetCurrentTask()=%04X\n", hTask);
 	lpTask = (LPTASKENTRY) GlobalLock(hTask);
 	if (lpTask == NULL) 
 	{
@@ -467,7 +470,7 @@
 	    return NULL;
 	}
 	hModule = lpTask->hInst;
-	printf("GetProcAddress: current module=%04X instance=%04X!\n", 
+	dprintf_module(stddeb,"GetProcAddress: current module=%04X instance=%04X!\n", 
 	       lpTask->hModule, lpTask->hInst);
 	GlobalUnlock(hTask);
     }
@@ -475,11 +478,11 @@
 	w = w->next;
     if (w == NULL) 
 	return NULL;
-    printf("GetProcAddress // Module Found ! w->filename='%s'\n", w->filename);
+    dprintf_module(stddeb,"GetProcAddress // Module Found ! w->filename='%s'\n", w->filename);
     if ((int)proc_name & 0xFFFF0000) 
     {
 	AnsiUpper(proc_name);
-	printf("GetProcAddress: %04X, '%s'\n", hModule, proc_name);
+	dprintf_module(stddeb,"GetProcAddress: %04X, '%s'\n", hModule, proc_name);
 	cpnt = w->ne->nrname_table;
 	while(TRUE) 
 	{
@@ -488,10 +491,8 @@
 	    len = *cpnt++;
 	    strncpy(C, cpnt, len);
 	    C[len] = '\0';
-#ifdef DEBUG_MODULE
-	    printf("pointing Function '%s' ordinal=%d !\n", 
+	    dprintf_module(stddeb,"pointing Function '%s' ordinal=%d !\n", 
 		   C, *((unsigned short *)(cpnt +  len)));
-#endif
 	    if (strncmp(cpnt, proc_name, len) ==  0) 
 	    {
 		ordinal =  *((unsigned short *)(cpnt +  len));
@@ -507,7 +508,7 @@
     }
     else 
     {
-	printf("GetProcAddress: %#04x, %d\n", hModule, (int) proc_name);
+	dprintf_module(stddeb,"GetProcAddress: %#04x, %d\n", hModule, (int) proc_name);
 	ordinal = (int)proc_name;
     }
     ret = GetEntryPointFromOrdinal(w, ordinal);
@@ -518,7 +519,7 @@
     }
     addr  = ret & 0xffff;
     sel = (ret >> 16);
-    printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n", ret, sel, addr);
+    dprintf_module(stddeb,"GetProcAddress // ret=%08X sel=%04X addr=%04X\n", ret, sel, addr);
     return (FARPROC) ret;
 #endif /* WINELIB */
 }
@@ -552,7 +553,7 @@
  */
 BOOL ModuleFirst(MODULEENTRY *lpModule)
 {
-	printf("ModuleFirst(%08X)\n", (int) lpModule);
+	dprintf_module(stddeb,"ModuleFirst(%08X)\n", (int) lpModule);
 	
 	FillModStructBuiltIn(lpModule, &dll_builtin_table[0]);
 	return TRUE;
@@ -565,7 +566,7 @@
 {
 	struct w_files *w;
 
-	printf("ModuleNext(%08X)\n", (int) lpModule);
+	dprintf_module(stddeb,"ModuleNext(%08X)\n", (int) lpModule);
 
 	if (IS_BUILTIN_DLL(lpModule->hModule)) {
 		/* last built-in ? */
@@ -594,7 +595,7 @@
 {
 	struct w_files *w;
 
-	printf("ModuleFindHandle(%08X, %04X)\n", (int) lpModule, (int)hModule);
+	dprintf_module(stddeb,"ModuleFindHandle(%08X, %04X)\n", (int) lpModule, (int)hModule);
 
 	/* built-in dll ? */
 	if (IS_BUILTIN_DLL(hModule)) {
diff --git a/loader/main.c b/loader/main.c
index eefa3c1..5721a52 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -20,8 +20,8 @@
 #include "task.h"
 #include "options.h"
 #include "stddebug.h"
-/* #define DEBUG_DLL /* */
-/* #undef  DEBUG_DLL /* */
+/* #define DEBUG_DLL */
+/* #undef  DEBUG_DLL */
 #include "debug.h"
 
 
@@ -83,7 +83,8 @@
 		exit(1);
 	}
 	hTaskMain = CreateNewTask(hInstMain, 0);
-	printf("_WinMain // hTaskMain=%04X hInstMain=%04X !\n", hTaskMain, hInstMain);
+	dprintf_dll(stddeb,"_WinMain // hTaskMain=%04X hInstMain=%04X !\n",
+		    hTaskMain, hInstMain);
 
 	GetPrivateProfileString("wine", "SystemResources", "sysres.dll", 
 				filename, sizeof(filename), WINE_INI);
@@ -93,7 +94,8 @@
 		fprintf(stderr, "wine: can't load %s!.\n", filename);
 		exit(1);
 	} else
- 	    dprintf_dll(stddeb,"System Resources Loaded // hSysRes='%04X'\n", hSysRes);
+ 	    dprintf_dll(stddeb,"System Resources Loaded // hSysRes='%04X'\n",
+			hSysRes);
 	
 #ifdef WINESTAT
     cp = strrchr(argv[0], '/');
diff --git a/loader/ne_image.c b/loader/ne_image.c
index 03d3b86..5584fec 100644
--- a/loader/ne_image.c
+++ b/loader/ne_image.c
@@ -25,8 +25,8 @@
 #include "arch.h"
 #include "options.h"
 #include "stddebug.h"
-/* #define DEBUG_FIXUP /* */
-/* #undef DEBUG_FIXUP  /* */
+/* #define DEBUG_FIXUP */
+/* #undef DEBUG_FIXUP  */
 #include "debug.h"
 
 extern HANDLE CreateNewTask(HINSTANCE hInst);
@@ -284,7 +284,7 @@
 		return -1;
 	    }
 
-	    dprintf_fixup(stddeb,"%d: %s.%d: %04.4x:%04.4x\n", i + 1, 
+	    dprintf_fixup(stddeb,"%d: %s.%d: %04x:%04x\n", i + 1, 
 		   dll_name, ordinal, selector, address);
 	    break;
 	    
@@ -317,7 +317,7 @@
 		return -1;
 	    }
 
-	    dprintf_fixup(stddeb,"%d: %s %s.%d: %04.4x:%04.4x\n", i + 1, 
+	    dprintf_fixup(stddeb,"%d: %s %s.%d: %04x:%04x\n", i + 1, 
                    func_name, dll_name, ordinal, selector, address);
 	    break;
 	    
@@ -335,7 +335,7 @@
 		address  = rep->target2;
 	    }
 	    
-	    dprintf_fixup(stddeb,"%d: %04.4x:%04.4x\n", 
+	    dprintf_fixup(stddeb,"%d: %04x:%04x\n", 
 			  i + 1, selector, address);
 	    break;
 
@@ -349,19 +349,19 @@
 	     * exist.
 	     */
 	    dprintf_fixup(stddeb,
-                   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,  ",
+                   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04x,  ",
 		   i + 1, rep->address_type, rep->relocation_type, 
 		   rep->offset);
-	    dprintf_fixup(stddeb,"TARGET %04.4x %04.4x\n", 
+	    dprintf_fixup(stddeb,"TARGET %04x %04x\n", 
 		   rep->target1, rep->target2);
 	    continue;
 	    
 	  default:
 	    dprintf_fixup(stddeb,
-		   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,  ",
+		   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04x,  ",
 		   i + 1, rep->address_type, rep->relocation_type, 
 		   rep->offset);
-	    dprintf_fixup(stddeb,"TARGET %04.4x %04.4x\n", 
+	    dprintf_fixup(stddeb,"TARGET %04x %04x\n", 
 		    rep->target1, rep->target2);
 	    free(rep1);
 	    return -1;
@@ -376,10 +376,10 @@
 	    if (FindDLLTable(dll_name) == NULL)
 		additive = 2;
 	    dprintf_fixup(stddeb,
-		   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,  ",
+		   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04x,  ",
 		   i + 1, rep->address_type, rep->relocation_type, 
 		   rep->offset);
-	    dprintf_fixup(stddeb,"TARGET %04.4x %04.4x\n", 
+	    dprintf_fixup(stddeb,"TARGET %04x %04x\n", 
 		    rep->target1, rep->target2);
 	    dprintf_fixup(stddeb, "    Additive = %d\n", additive);
 	}
@@ -388,8 +388,8 @@
 	{
 	  case NE_RADDR_OFFSET16:
 	    do {
-		dprintf_fixup(stddeb,"    %04.4x:%04.4x:%04.4x OFFSET16\n",
-		       (unsigned long) sp >> 16, (int) sp & 0xFFFF, *sp);
+		dprintf_fixup(stddeb,"    %04x:%04x:%04x OFFSET16\n",
+		       (unsigned int) sp >> 16, (int) sp & 0xFFFF, *sp);
 		next_addr = *sp;
 		*sp = (unsigned short) address;
 		if (additive == 2)
@@ -402,8 +402,8 @@
 	    
 	  case NE_RADDR_POINTER32:
 	    do {
-		dprintf_fixup(stddeb,"    %04.4x:%04.4x:%04.4x POINTER32\n",
-		       (unsigned long) sp >> 16, (int) sp & 0xFFFF, *sp);
+		dprintf_fixup(stddeb,"    %04x:%04x:%04x POINTER32\n",
+		       (unsigned int) sp >> 16, (int) sp & 0xFFFF, *sp);
 		next_addr = *sp;
 		*sp     = (unsigned short) address;
 		if (additive == 2)
@@ -417,8 +417,8 @@
 	    
 	  case NE_RADDR_SELECTOR:
 	    do {
-		dprintf_fixup(stddeb,"    %04.4x:%04.4x:%04.4x SELECTOR\n",
-		       (unsigned long) sp >> 16, (int) sp & 0xFFFF, *sp);
+		dprintf_fixup(stddeb,"    %04x:%04x:%04x SELECTOR\n",
+		       (unsigned int) sp >> 16, (int) sp & 0xFFFF, *sp);
 		next_addr = *sp;
 		*sp     = (unsigned short) selector;
 		sp = (unsigned short *) ((char *) sel->base_addr + next_addr);
@@ -431,11 +431,11 @@
 	    
 	  default:
 	    dprintf_fixup(stddeb,
-		   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,  ",
+		   "%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04x,  ",
 		   i + 1, rep->address_type, rep->relocation_type, 
 		   rep->offset);
 	    dprintf_fixup(stddeb,
-		   "TARGET %04.4x %04.4x\n", rep->target1, rep->target2);
+		   "TARGET %04x %04x\n", rep->target1, rep->target2);
 	    free(rep1);
 	    return -1;
 	}
@@ -447,7 +447,7 @@
 
 int NEunloadImage(struct w_files *wpnt)
 {
-	printf("NEunloadImage() called!\n");
+	dprintf_fixup(stdnimp, "NEunloadImage() called!\n");
 	/* free resources, image */
 	return 1;
 }
@@ -491,13 +491,13 @@
 	    ip_reg = wpnt->ne->ne_header->ip;
 
 	    if (cs_reg) {
-		fprintf(stderr, "Initializing %s, cs:ip %04x:%04x, ds %04x\n", 
+		dprintf_dll(stddeb,"Initializing %s, cs:ip %04x:%04x, ds %04x\n", 
 		    wpnt->name, cs_reg, ip_reg, ds_reg);
 	    	    
 		rv = CallTo16(cs_reg << 16 | ip_reg, ds_reg);
-		printf ("rv = %x\n", rv);
+		dprintf_exec(stddeb,"rv = %x\n", rv);
 	    } else
-		printf("%s skipped\n", wpnt->name);
+		dprintf_exec(stddeb,"%s skipped\n", wpnt->name);
 	}
 }
 
diff --git a/loader/ne_resource.c b/loader/ne_resource.c
index 25e0b4c..9e665c0 100644
--- a/loader/ne_resource.c
+++ b/loader/ne_resource.c
@@ -14,8 +14,11 @@
 #include "arch.h"
 #include "dlls.h"
 #include "resource.h"
-
+#include "stddebug.h"
 /* #define DEBUG_RESOURCE */
+/* #undef  DEBUG_RESOURCE */
+#include "debug.h"
+
 
 static int ResourceFd = -1;
 static HANDLE ResourceInst = 0;
@@ -142,10 +145,8 @@
 #endif
 #endif
 
-#ifdef DEBUG_RESOURCE
-    printf("OpenResourceFile(%04X) // file='%s' hFile=%04X !\n", 
+    dprintf_resource(stddeb, "OpenResourceFile(%04X) // file='%s' hFile=%04X !\n", 
 		instance, w->filename, ResourceFd);
-#endif
     return ResourceFd;
 }
 
@@ -170,22 +171,16 @@
 	}
 	if ((type_id2 & 0x8000) != 0)
 		return 0;
-#ifdef DEBUG_RESOURCE
-	printf("type_compare: type_id2=%04X !\n", type_id2);
-#endif
+	dprintf_resource(stddeb, "type_compare: type_id2=%04X !\n", type_id2);
 	old_pos = lseek(fd, 0, SEEK_CUR);
 	lseek(fd, off + type_id2, SEEK_SET);
 	read(fd, &c, 1);
 	nbytes = CONV_CHAR_TO_LONG (c);
-#ifdef DEBUG_RESOURCE
-	printf("type_compare: namesize=%d\n", nbytes);
-#endif
+	dprintf_resource(stddeb, "type_compare: namesize=%d\n", nbytes);
 	read(fd, name, nbytes);
 	lseek(fd, old_pos, SEEK_SET);
 	name[nbytes] = '\0';
-#ifdef DEBUG_RESOURCE
-	printf("type_compare: name=`%s'\n", name);
-#endif
+	dprintf_resource(stddeb, "type_compare: name=`%s'\n", name);
 	return strcasecmp((char *) type_id1, name) == 0;
 }
 
@@ -227,10 +222,8 @@
 	    printf("FindResourceByNumber (%X) bad typeinfo size !\n", resource_id);
 	    return -1;
 	    }
-#ifdef DEBUG_RESOURCE
-	printf("FindResourceByNumber type=%X count=%d ?=%d searched=%08X\n", 
+	dprintf_resource(stddeb, "FindResourceByNumber type=%X count=%d ?=%ld searched=%08X\n", 
 		typeinfo.type_id, typeinfo.count, typeinfo.reserved, type_id);
-#endif
 	if (typeinfo.type_id == 0) break;
 	if (type_match(type_id, typeinfo.type_id, ResourceFd, rtoff)) {
 
@@ -245,10 +238,8 @@
 		    printf("FindResourceByNumber (%X) bad nameinfo size !\n", resource_id);
 		    return -1;
 		    }
-#ifdef DEBUG_RESOURCE
-		printf("FindResource: search type=%X id=%X // type=%X id=%X\n",
+		dprintf_resource(stddeb, "FindResource: search type=%X id=%X // type=%X id=%X\n",
 			type_id, resource_id, typeinfo.type_id, nameinfo.id);
-#endif
 		if (nameinfo.id == resource_id) {
 		    memcpy(result_p, &nameinfo, sizeof(nameinfo));
 		    return size_shift;
@@ -325,10 +316,8 @@
 	    printf("FindResourceByName (%s) bad typeinfo size !\n", resource_name);
 	    return -1;
 	}
-#ifdef DEBUG_RESOURCE
-	printf("FindResourceByName typeinfo.type_id=%X count=%d type_id=%X\n",
+	dprintf_resource(stddeb, "FindResourceByName typeinfo.type_id=%X count=%d type_id=%X\n",
 			typeinfo.type_id, typeinfo.count, type_id);
-#endif
 	if (typeinfo.type_id == 0) break;
 	if (type_match(type_id, typeinfo.type_id, ResourceFd, rtoff))
 	{
@@ -347,25 +336,19 @@
 /*
 		if ((nameinfo.id & 0x8000) != 0) continue;
 */		
-#ifdef DEBUG_RESOURCE
-		printf("FindResourceByName // nameinfo.id=%04X !\n", nameinfo.id);
-#endif
+		dprintf_resource(stddeb, "FindResourceByName // nameinfo.id=%04X !\n", nameinfo.id);
 		old_pos = lseek(ResourceFd, 0, SEEK_CUR);
 		new_pos = rtoff + nameinfo.id;
 		lseek(ResourceFd, new_pos, SEEK_SET);
 		read(ResourceFd, &nbytes, 1);
-#ifdef DEBUG_RESOURCE
-		printf("FindResourceByName // namesize=%d !\n", nbytes);
-#endif
+		dprintf_resource(stddeb, "FindResourceByName // namesize=%d !\n", nbytes);
  		nbytes = CONV_CHAR_TO_LONG (nbytes);
 		read(ResourceFd, name, nbytes);
 		lseek(ResourceFd, old_pos, SEEK_SET);
 		name[nbytes] = '\0';
-#ifdef DEBUG_RESOURCE
-		printf("FindResourceByName type_id=%X (%d of %d) name='%s' resource_name='%s'\n", 
+		dprintf_resource(stddeb, "FindResourceByName type_id=%X (%d of %d) name='%s' resource_name='%s'\n", 
 			typeinfo.type_id, i + 1, typeinfo.count, 
 			name, resource_name);
-#endif
 		if (strcasecmp(name, resource_name) == 0)
 		{
 		    memcpy(result_p, &nameinfo, sizeof(nameinfo));
@@ -392,9 +375,8 @@
     off_t rtoff;
 
     if (hInst == 0) return 0;
-#ifdef DEBUG_RESOURCE
-    printf("GetRsrcCount hInst=%04X typename=%08X\n", hInst, type_id);
-#endif
+    dprintf_resource(stddeb, "GetRsrcCount hInst=%04X typename=%08X\n", 
+	hInst, type_id);
     if (OpenResourceFile(hInst) < 0)	return 0;
 
     /*
@@ -416,10 +398,8 @@
 			printf("GetRsrcCount // bad typeinfo size !\n");
 			return 0;
 			}
-#ifdef DEBUG_RESOURCE
-		printf("GetRsrcCount // typeinfo.type_id=%X count=%d type_id=%X\n",
+		dprintf_resource(stddeb, "GetRsrcCount // typeinfo.type_id=%X count=%d type_id=%X\n",
 				typeinfo.type_id, typeinfo.count, type_id);
-#endif
 		if (typeinfo.type_id == 0) break;
 		if (type_match(type_id, typeinfo.type_id, ResourceFd, rtoff)) {
 			return typeinfo.count;
@@ -440,10 +420,8 @@
 {
     int type;
 
-#ifdef DEBUG_RESOURCE
-    printf("NE_FindResource hInst=%04X typename=%08X resname=%08X\n", 
+    dprintf_resource(stddeb, "NE_FindResource hInst=%04X typename=%p resname=%p\n", 
 			instance, type_name, resource_name);
-#endif
 
     ResourceFd = r->fd;
     ResourceFileInfo = r->wpnt;
diff --git a/loader/pe_image.c b/loader/pe_image.c
index 948e8e6..78b536b 100644
--- a/loader/pe_image.c
+++ b/loader/pe_image.c
@@ -6,6 +6,7 @@
  *	ftp.microsoft.com:/pub/developer/MSDN/CD8/PEFILE.ZIP
  */
 
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -41,7 +42,7 @@
 
   /* Sigh.  Alignment must be wrong for mmap.  Do this the hard way. */
   if(!(flags & MAP_FIXED)) {
-    vaddr = 0x40000000;
+    vaddr = (char *)0x40000000;
     flags |= MAP_FIXED;
   };
 
@@ -51,7 +52,7 @@
   return vaddr;
 };
 
-dump_exports(struct PE_Export_Directory * pe_exports)
+void dump_exports(struct PE_Export_Directory * pe_exports)
 { 
   char * Module;
   int i;
@@ -60,7 +61,7 @@
   u_char ** name, *ename;
 
   Module = ((char *) load_addr) + pe_exports->Name;
-  printf("\n*******EXPORT DATA*******\nModule name is %s, %d functions, %d names\n", 
+  printf("\n*******EXPORT DATA*******\nModule name is %s, %ld functions, %ld names\n", 
 	 Module,
 	 pe_exports->Number_Of_Functions,
 	 pe_exports->Number_Of_Names);
@@ -73,13 +74,11 @@
   for(i=0; i< pe_exports->Number_Of_Functions; i++)
     {
       ename =  (char *) (((char *) load_addr) + (int) *name++);
-      printf("%-32s %4d    %8.8x\n", ename, *ordinal++, *function++);
+      printf("%-32s %4d    %8.8lx\n", ename, *ordinal++, *function++);
     }
-
-  return;
 }
 
-dump_imports(struct PE_Import_Directory *pe_imports)
+void dump_imports(struct PE_Import_Directory *pe_imports)
 { 
   struct PE_Import_Directory * pe_imp;
 
@@ -88,7 +87,7 @@
   pe_imp = pe_imports;
   while (pe_imp->ModuleName)
     {
-      char * Module, *Function;
+      char * Module;
       struct pe_import_name * pe_name;
       unsigned int * import_list;
       char * c;
@@ -119,7 +118,7 @@
   printf("   Name    VSz  Vaddr     SzRaw   Fileadr  *Reloc *Lineum #Reloc #Linum Char\n");
   for(i=0; i< wpnt->pe->pe_header->coff.NumberOfSections; i++)
     {
-      printf("%8s: %4.4x %8.8x %8.8x %8.8x %8.8x %8.8x %4.4x %4.4x %8.8x\n", 
+      printf("%8s: %4.4lx %8.8lx %8.8lx %8.8lx %8.8lx %8.8lx %4.4x %4.4x %8.8lx\n", 
 	     wpnt->pe->pe_seg[i].Name, 
 	     wpnt->pe->pe_seg[i].Virtual_Size,
 	     wpnt->pe->pe_seg[i].Virtual_Address,
diff --git a/loader/pe_resource.c b/loader/pe_resource.c
index d82789c..41fa92d 100644
--- a/loader/pe_resource.c
+++ b/loader/pe_resource.c
@@ -18,13 +18,15 @@
 #include "peexe.h"
 #include "dlls.h"
 #include "resource.h"
+#include "stddebug.h"
+/* #define DEBUG_RESOURCE */
+/* #undef  DEBUG_RESOURCE */
+#include "debug.h"
 
-#define DEBUG_RESOURCE
 
 static int
 find_lang(char *root, struct PE_Resource_Directory *resource, RESOURCE *r)
 {
-	int i;
 	struct PE_Directory_Entry *type_dir;
 	struct PE_Resource_Leaf_Entry *leaf;
 
@@ -33,10 +35,8 @@
 
 	/* grab the 1st resource available */
 	leaf = (struct PE_Resource_Leaf_Entry *) (root + type_dir->OffsetToData);
-#ifdef DEBUG_RESOURCE
-		printf("\t\tPE_findlang: id %8x\n", (int) type_dir->Name);
-		printf("\t\taddress %d, size %d, language id %d\n", leaf->OffsetToData, leaf->Size, leaf->CodePage);
-#endif
+		dprintf_resource(stddeb, "\t\tPE_findlang: id %8x\n", (int) type_dir->Name);
+		dprintf_resource(stddeb, "\t\taddress %ld, size %ld, language id %ld\n", leaf->OffsetToData, leaf->Size, leaf->CodePage);
 	r->offset = leaf->OffsetToData - r->wpnt->pe->resource_offset;
 	r->size = leaf->Size;
 	printf("\t\toffset %d, size %d\n", r->offset, r->size);
@@ -44,11 +44,10 @@
 
 /*	for(i=0; i< resource->NumberOfIdEntries; i++) {
 		leaf = (root + (type_dir->OffsetToData & ~IMAGE_RESOURCE_DATA_IS_DIRECTORY));
-#ifdef DEBUG_RESOURCE
-		printf("\t\tPE_findlang: id %8x\n", (int) type_dir->Name);
-		printf("\t\t%x %x %x\n", leaf->OffsetToData, leaf->Size,
-						leaf->CodePage);
-#endif
+		dprintf_resource(stddeb, "\t\tPE_findlang: id %8x\n", 
+			(int) type_dir->Name);
+		dprintf_resource(stddeb, "\t\t%x %x %x\n", leaf->OffsetToData, 
+			leaf->Size, leaf->CodePage);
 		type_dir++;
 	} */
 }
@@ -69,9 +68,7 @@
 			name = (struct PE_Directory_Name_String_U *)(root + (type_dir->Name & ~IMAGE_RESOURCE_NAME_IS_STRING));
 			memset(res_name, 0, sizeof(res_name));
 			my_wcstombs(res_name, name->NameString, name->Length);
-#ifdef DEBUG_RESOURCE
-			printf("\tPE_findresource: name %s\n", res_name);
-#endif
+			dprintf_resource(stddeb, "\tPE_findresource: name %s\n", res_name);
 			if (strcasecmp(res_name, resource_name) == 0) 
 				return find_lang(root, (struct PE_Resource_Directory *) (root + (type_dir->OffsetToData & ~IMAGE_RESOURCE_DATA_IS_DIRECTORY)), r);
 			type_dir++;
@@ -79,9 +76,7 @@
 	} else {
 		type_dir += resource->NumberOfNamedEntries;
 		for(i=0; i< resource->NumberOfIdEntries; i++) {
-#ifdef DEBUG_RESOURCE
-			printf("\tPE_findresource: name %8x\n", (int) type_dir->Name);
-#endif
+			dprintf_resource(stddeb, "\tPE_findresource: name %8x\n", (int) type_dir->Name);
 			if (type_dir->Name == ((int) resource_name & 0xff))
 				return find_lang(root, (struct PE_Resource_Directory *) (root + (type_dir->OffsetToData & ~IMAGE_RESOURCE_DATA_IS_DIRECTORY)), r);
 			type_dir++;
@@ -107,9 +102,8 @@
 			name = (struct PE_Directory_Name_String_U *)(root + (type_dir->Name & ~IMAGE_RESOURCE_NAME_IS_STRING));
 			memset(res_name, 0, sizeof(res_name));
 			my_wcstombs(res_name, name->NameString, name->Length);
-#ifdef DEBUG_RESOURCE
-			printf("PE_findtype: type %s\n", res_name);
-#endif
+			dprintf_resource(stddeb, "PE_findtype: type %s\n", 
+				res_name);
 			if (strcasecmp(res_name, type_name) == 0) 
 				return find_resource(root, (struct PE_Resource_Directory *) (root + (type_dir->OffsetToData & ~IMAGE_RESOURCE_DATA_IS_DIRECTORY)), resource_name, r);
 			type_dir++;
@@ -117,9 +111,7 @@
 	} else {
 		type_dir += resource->NumberOfNamedEntries;
 		for(i=0; i< resource->NumberOfIdEntries; i++) {
-#ifdef DEBUG_RESOURCE
-			printf("PE_findtype: type %8x\n", (int) type_dir->Name);
-#endif
+			dprintf_resource(stddeb, "PE_findtype: type %8x\n", (int) type_dir->Name);
 			if (type_dir->Name == ((int) type_name & 0xff))
 				return find_resource(root, (struct PE_Resource_Directory *) (root + (type_dir->OffsetToData & ~IMAGE_RESOURCE_DATA_IS_DIRECTORY)), resource_name, r);
 			type_dir++;
@@ -135,10 +127,8 @@
 PE_FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name,
 		RESOURCE *r)
 {
-#ifdef DEBUG_RESOURCE
-	printf("PE_FindResource hInst=%04X typename=%08X resname=%08X\n", 
+	dprintf_resource(stddeb, "PE_FindResource hInst=%04X typename=%08X resname=%08X\n", 
 		instance, (int) type_name, (int) resource_name);
-#endif
 	if (HIWORD((DWORD)resource_name)) 
 		if (resource_name[0] == '#')
 			resource_name = (LPSTR) atoi(resource_name + 1);
diff --git a/loader/resource.c b/loader/resource.c
index 867c783..f1ed5cb 100644
--- a/loader/resource.c
+++ b/loader/resource.c
@@ -19,10 +19,10 @@
 #include "dlls.h"
 #include "resource.h"
 #include "stddebug.h"
-/* #define DEBUG_RESOURCE /* */
-/* #undef  DEBUG_RESOURCE /* */
-/* #define DEBUG_ACCEL    /* */
-/* #undef  DEBUG_ACCEL    /* */
+/* #define DEBUG_RESOURCE */
+/* #undef  DEBUG_RESOURCE */
+/* #define DEBUG_ACCEL    */
+/* #undef  DEBUG_ACCEL    */
 #include "debug.h"
 
 #define MIN(a,b)	((a) < (b) ? (a) : (b))
@@ -110,9 +110,8 @@
 	RESOURCE *r;
 	int image_size;
 
-#ifdef DEBUG_RESOURCE
-	printf("AllocResource(%04X, %04X, %08X);\n", instance, hResInfo, (int) dwSize);
-#endif 
+	dprintf_resource(stddeb, "AllocResource(%04X, %04X, %08X);\n", 
+		instance, hResInfo, (int) dwSize);
 
 	if (instance == (HANDLE)NULL)
 		instance = hSysRes;
@@ -140,9 +139,8 @@
 	int fd;
 	RESOURCE *r;
 
-#ifdef DEBUG_RESOURCE
-	printf("AccessResource(%04X, %04X);\n", instance, hResInfo);
-#endif
+	dprintf_resource(stddeb, "AccessResource(%04X, %04X);\n", 
+		instance, hResInfo);
 
 	if (instance == (HANDLE)NULL)
 		instance = hSysRes;
@@ -165,9 +163,8 @@
 	RESOURCE *r;
 	int size;
 	
-#ifdef DEBUG_RESOURCE
-	printf("SizeofResource(%04X, %04X);\n", instance, hResInfo);
-#endif
+	dprintf_resource(stddeb, "SizeofResource(%04X, %04X);\n", 
+		instance, hResInfo);
 
 	if (instance == (HANDLE)NULL)
 		instance = hSysRes;
@@ -191,9 +188,7 @@
     void *image;
     HANDLE h;
 
-#ifdef DEBUG_RESOURCE
-	printf("LoadResource(%04X, %04X);\n", instance, hResInfo);
-#endif
+    dprintf_resource(stddeb, "LoadResource(%04X, %04X);\n", instance, hResInfo);
 
     if (instance == (HANDLE)NULL)
 	instance = hSysRes;
@@ -233,9 +228,7 @@
 {
     RESOURCE *r, *rp;
 
-#ifdef DEBUG_RESOURCE
-    printf("FreeResource: handle %04x\n", hResData);
-#endif
+    dprintf_resource(stddeb, "FreeResource: handle %04x\n", hResData);
 
     for (r = rp = Top; r ; r = r->next) {
 	if (r->rsc_mem == hResData) {
@@ -269,9 +262,8 @@
     HBITMAP hbitmap;
     char * bits;
     int i, size, n_colors;
-    
+   
     n_colors = 1 << image->bcBitCount;
-
     if (image->bcBitCount < 24)
     {
 	size = sizeof(BITMAPINFOHEADER) + n_colors * sizeof(RGBQUAD);	
@@ -337,10 +329,8 @@
 	if (instance == (HANDLE)NULL)
 		instance = hSysRes;
 
-#ifdef DEBUG_RESOURCE
-	printf("RSC_LoadResource: instance = %04x, name = %08x, type = %08x\n",
+	dprintf_resource(stddeb, "RSC_LoadResource: instance = %04x, name = %08x, type = %08x\n",
 	   instance, (int) rsc_name, (int) type);
-#endif
 
 	if ((hResInfo = FindResource(instance, rsc_name, (LPSTR) type)) == (HANDLE) NULL) {
 		return (HANDLE)NULL;
@@ -371,6 +361,7 @@
     HDC 	hMemDC2;
     HDC 	hdc;
     int 	image_size;
+    HBITMAP     hbmpOld1, hbmpOld2;
 
 #ifdef DEBUG_RESOURCE
 	printf("LoadIcon(%04X", instance);
@@ -458,9 +449,11 @@
     GlobalFree(rsc_mem);
     hMemDC = CreateCompatibleDC(hdc);
     hMemDC2 = CreateCompatibleDC(hdc);
-    SelectObject(hMemDC, lpico->hBitmap);
-    SelectObject(hMemDC2, lpico->hBitMask);
-    BitBlt(hMemDC, 0, 0, bih->biWidth, bih->biHeight, hMemDC2, 0, 0, SRCINVERT);
+    hbmpOld1 = SelectObject(hMemDC, lpico->hBitmap);
+    hbmpOld2 = SelectObject(hMemDC2, lpico->hBitMask);
+    BitBlt(hMemDC, 0, 0, bih->biWidth, bih->biHeight, hMemDC2, 0, 0,SRCINVERT);
+    SelectObject( hMemDC, hbmpOld1 );
+    SelectObject( hMemDC2, hbmpOld2 );
     DeleteDC(hMemDC);
     DeleteDC(hMemDC2);
     ReleaseDC(GetDesktopWindow(), hdc);
@@ -479,13 +472,11 @@
     HICON 	hIcon;
     ICONALLOC	*lpico;
 
-#ifdef DEBUG_RESOURCE
-    printf("CreateIcon: hInstance = %04x, nWidth = %08x, nHeight = %08x \n",
+    dprintf_resource(stddeb, "CreateIcon: hInstance = %04x, nWidth = %08x, nHeight = %08x \n",
 	    hInstance, nWidth, nHeight);
-    printf("  nPlanes = %04x, nBitsPixel = %04x,",nPlanes, nBitsPixel);
-    printf(" lpANDbits= %04x, lpXORbits = %04x, \n", (int)lpANDbits,
+    dprintf_resource(stddeb, "  nPlanes = %04x, nBitsPixel = %04x,",nPlanes, nBitsPixel);
+    dprintf_resource(stddeb, " lpANDbits= %04x, lpXORbits = %04x, \n", (int)lpANDbits,
     		(int)lpXORbits);
-#endif
 
     if (hInstance == (HANDLE)NULL) { 
         printf("CreateIcon / hInstance %04x not Found!\n",hInstance);
@@ -522,9 +513,7 @@
     }
 
     GlobalUnlock(hIcon);
-#ifdef DEBUG_RESOURCE
-    printf("CreateIcon Alloc hIcon=%X\n", hIcon);
-#endif
+    dprintf_resource(stddeb, "CreateIcon Alloc hIcon=%X\n", hIcon);
     return hIcon;
 }
 
@@ -612,9 +601,7 @@
     	msg->message != WM_KEYUP &&
     	msg->message != WM_CHAR) return 0;
 
-#ifdef DEBUG_ACCEL
-    printf("TranslateAccelerators hAccel=%04X !\n", hAccel);
-#endif
+    dprintf_accel(stddeb, "TranslateAccelerators hAccel=%04X !\n", hAccel);
 
     lpAccelTbl = (LPACCELHEADER)GlobalLock(hAccel);
     for (i = 0; i < lpAccelTbl->wCount; i++) {
@@ -667,10 +654,8 @@
     int string_num;
     int i;
 
-#ifdef DEBUG_RESOURCE
-    printf("LoadString: instance = %04x, id = %d, buffer = %08x, "
+    dprintf_resource(stddeb, "LoadString: instance = %04x, id = %d, buffer = %08x, "
 	   "length = %d\n", instance, resource_id, (int) buffer, buflen);
-#endif
 
     hmem = RSC_LoadResource(instance, (char *) ((resource_id >> 4) + 1),
 			    (LPSTR) NE_RSCTYPE_STRING, &rsc_size);
@@ -760,7 +745,7 @@
 	return 0;
 	}
     lp = (long *) GlobalLinearLock(rsc_mem);
-    if (!(hdc = GetDC(0))) lp == NULL;
+    if (!(hdc = GetDC(0))) lp = NULL;
     if (lp == NULL)
     {
 	GlobalFree(rsc_mem);
diff --git a/loader/selector.c b/loader/selector.c
index b38feeb..eb17a27 100644
--- a/loader/selector.c
+++ b/loader/selector.c
@@ -29,10 +29,11 @@
 #include "wine.h"
 #include "windows.h"
 #include "prototypes.h"
+#include "stddebug.h"
+/* #define DEBUG_SELECTORS */
+/* #undef DEBUG_SELECTORS */
 #include "debug.h"
 
-/* #define DEBUG_SELECTORS /* */
-/* #undef DEBUG_SELECTORS /* */
 
 #ifdef linux
 #define DEV_ZERO
@@ -68,6 +69,9 @@
 extern char **Argv;
 extern int Argc;
 extern char **environ;
+
+unsigned int 
+GetEntryPointFromOrdinal(struct w_files * wpnt, int ordinal);
 
 /**********************************************************************
  *					FindUnusedSelectors
@@ -160,7 +164,7 @@
      */
     if (s_old->shm_key == -1)
     {
-	s_old->shm_key = shmget(IPC_PRIVATE, s_old->length, IPC_CREAT);
+	s_old->shm_key = shmget(IPC_PRIVATE, s_old->length, IPC_CREAT | 0600);
 	if (s_old->shm_key == -1)
 	{
 	    if (s_new) {
@@ -232,7 +236,7 @@
  */
 WORD AllocSelector(WORD old_selector)
 {
-    SEGDESC *s_new, *s_old;
+    SEGDESC *s_new;
     int i_new, i_old;
     int selector;
     
@@ -506,9 +510,8 @@
     
     i = FindUnusedSelectors(n_segments);
 
-#ifdef DEBUG_SELECTORS    
-    fprintf(stddeb, "Using %d segments starting at index %d.\n", n_segments, i);
-#endif
+    dprintf_selectors(stddeb, "Using %d segments starting at index %d.\n", 
+	n_segments, i);
 
     /*
      * Fill in selector info.
@@ -661,10 +664,6 @@
 unsigned int 
 GetEntryPointFromOrdinal(struct w_files * wpnt, int ordinal)
 {
-   int fd =  wpnt->fd;
-   struct mz_header_s *mz_header = wpnt->mz_header;   
-   struct ne_header_s *ne_header = wpnt->ne->ne_header;   
-
     union lookup entry_tab_pointer;
     struct entry_tab_header_s *eth;
     struct entry_tab_movable_s *etm;
@@ -771,11 +770,9 @@
     /*
      * Display environment
      */
-#ifdef DEBUG_SELECTORS
-    fprintf(stddeb, "Environment at %08.8x\n", s->base_addr);
+    dprintf_selectors(stddeb, "Environment at %08.8x\n", s->base_addr);
     for (p = s->base_addr; *p; p += strlen(p) + 1)
-	fprintf(stddeb, "    %s\n", p);
-#endif
+	dprintf_selectors(stddeb, "    %s\n", p);
 
     return  s;
 }
@@ -848,7 +845,7 @@
     int fd = wpnt->fd;
     struct ne_segment_table_entry_s *seg_table = wpnt->ne->seg_table;
     struct ne_header_s *ne_header = wpnt->ne->ne_header;
-    SEGDESC *selectors, *s, *stmp;
+    SEGDESC *selectors, *s;
     unsigned short auto_data_sel;
     int contents, read_only;
     int SelectorTableLength;
@@ -992,7 +989,6 @@
 void
 FixupFunctionPrologs(struct w_files * wpnt)
 {
-    struct mz_header_s *mz_header = wpnt->mz_header;   
     struct ne_header_s *ne_header = wpnt->ne->ne_header;   
     union lookup entry_tab_pointer;
     struct entry_tab_header_s *eth;
@@ -1059,6 +1055,7 @@
 DWORD GetSelectorBase(WORD wSelector)
 {
 	fprintf(stdnimp, "GetSelectorBase(selector %4X) stub!\n", wSelector);
+        return 0;
 }
 
 /***********************************************************************
@@ -1066,7 +1063,7 @@
  */
 void SetSelectorBase(WORD wSelector, DWORD dwBase)
 {
-	fprintf(stdnimp, "SetSelectorBase(selector %4X, base %8X) stub!\n",
+	fprintf(stdnimp, "SetSelectorBase(selector %4X, base %8lX) stub!\n",
 			wSelector, dwBase);
 }
 
@@ -1085,7 +1082,7 @@
  */
 void SetSelectorLimit(WORD wSelector, DWORD dwLimit)
 {
-	fprintf(stdnimp, "SetSelectorLimit(selector %4X, base %8X) stub!\n", 
+	fprintf(stdnimp, "SetSelectorLimit(selector %4X, base %8lX) stub!\n", 
 			wSelector, dwLimit);
 }
 
diff --git a/loader/signal.c b/loader/signal.c
index 24256e4..aa5f467 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -4,6 +4,7 @@
 #include <signal.h>
 #include <errno.h>
 #include <time.h>
+#include <setjmp.h>
 
 #if defined(__NetBSD__) || defined(__FreeBSD__)
 #include <sys/syscall.h>
@@ -102,6 +103,9 @@
 {
 #endif
     unsigned char * instr;
+#if !(defined (linux) || defined (__NetBSD__))
+	int i, *dump;
+#endif
 
 	/* First take care of a few preliminaries */
 #ifdef linux
@@ -132,7 +136,7 @@
     {
 #endif
 	fprintf(stderr,
-		"Segmentation fault in Wine program (%x:%x)."
+		"Segmentation fault in Wine program (%x:%lx)."
 		"  Please debug\n",
 		scp->sc_cs, scp->sc_eip);
 	goto oops;
@@ -195,7 +199,7 @@
     XUngrabPointer(display, CurrentTime);
 	XUngrabServer(display);
 	XFlush(display);
-    fprintf(stderr,"In win_fault %x:%x\n", scp->sc_cs, scp->sc_eip);
+    fprintf(stderr,"In win_fault %x:%lx\n", scp->sc_cs, scp->sc_eip);
 #if defined(linux) || defined(__NetBSD__)
     wine_debug(signal, scp);  /* Enter our debugger */
 #else
@@ -278,4 +282,34 @@
 #endif
 }
 
+static sigjmp_buf segv_jmpbuf;
+
+static void
+segv_handler()
+{
+    siglongjmp(segv_jmpbuf, 1);
+}
+
+int
+test_memory( char *p, int write )
+{
+    int ret = FALSE;
+    struct sigaction new_act;
+    struct sigaction old_act;
+
+    memset(&new_act, 0, sizeof new_act);
+    new_act.sa_handler = segv_handler;
+    if (sigsetjmp( segv_jmpbuf, 1 ) == 0) {
+	char c = 100;
+	if (sigaction(SIGSEGV, &new_act, &old_act) < 0)
+	    perror("sigaction");
+	c = *p;
+	if (write)
+	    *p = c;
+	ret = TRUE;
+    }
+    wine_sigaction(SIGSEGV, &old_act, NULL);
+    return ret;
+}
+
 #endif /* ifndef WINELIB */
diff --git a/loader/task.c b/loader/task.c
index d43e404..693612f 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -12,13 +12,12 @@
 #include "windows.h"
 #include "wine.h"
 #include "task.h"
+#include "stddebug.h"
+/* #define DEBUG_TASK */
+/* #undef DEBUG_TASK */
 #include "debug.h"
 
 
-/* #define DEBUG_TASK /* */
-/* #undef DEBUG_TASK /* */
-
-
 static LPWINETASKENTRY lpTaskList = NULL;
 static int nTaskCount = 0;
 
@@ -29,18 +28,14 @@
 {
 	LPWINETASKENTRY lpTask = lpTaskList;
 	int pid = getpid();
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"GetCurrentTask() // unix_pid=%08X !\n", pid);
-#endif
+	dprintf_task(stddeb,"GetCurrentTask() // unix_pid=%08X !\n", pid);
 	if (lpTask == NULL) return 0;
 	while (TRUE) {
 		if (lpTask->unix_pid == pid) break;
 		if (lpTask->lpNextTask == NULL) return 0;
 		lpTask = lpTask->lpNextTask;
 		}
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"GetCurrentTask() returned hTask=%04X !\n", lpTask->te.hTask);
-#endif
+	dprintf_task(stddeb,"GetCurrentTask() returned hTask=%04X !\n", lpTask->te.hTask);
 	return lpTask->te.hTask;
 }
 
@@ -50,9 +45,7 @@
  */
 WORD GetNumTasks()
 {
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"GetNumTasks() returned %d !\n", nTaskCount);
-#endif
+	dprintf_task(stddeb,"GetNumTasks() returned %d !\n", nTaskCount);
 	return nTaskCount;
 }
 
@@ -65,23 +58,17 @@
 	HWND 	*wptr;
 	int		count;
 	LPWINETASKENTRY lpTask = lpTaskList;
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"GetWindowTask(%04X) !\n", hWnd);
-#endif
+	dprintf_task(stddeb,"GetWindowTask(%04X) !\n", hWnd);
 	while (lpTask != NULL) {
 		wptr = lpTask->lpWndList;
 		if (wptr != NULL) {
 			count = 0;
 			while (++count < MAXWIN_PER_TASK) {
-#ifdef DEBUG_TASK
-				fprintf(stddeb,"GetWindowTask // searching %04X %04X !\n",
+				dprintf_task(stddeb,"GetWindowTask // searching %04X %04X !\n",
 										lpTask->te.hTask, *(wptr));
-#endif
 				if (*(wptr) == hWnd) {
-#ifdef DEBUG_TASK
-					fprintf(stddeb,"GetWindowTask(%04X) found hTask=%04X !\n", 
+					dprintf_task(stddeb,"GetWindowTask(%04X) found hTask=%04X !\n", 
 												hWnd, lpTask->te.hTask);
-#endif
 					return lpTask->te.hTask;
 					}
 				wptr++;
@@ -102,30 +89,22 @@
 	BOOL	bRet;
 	int		count = 0;
 	LPWINETASKENTRY lpTask = lpTaskList;
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"EnumTaskWindows(%04X, %08X, %08X) !\n", hTask, lpEnumFunc, lParam);
-#endif
+	dprintf_task(stddeb,"EnumTaskWindows(%04X, %08X, %08X) !\n", hTask, lpEnumFunc, lParam);
 	while (TRUE) {
 		if (lpTask->te.hTask == hTask) break;
 		if (lpTask == NULL) {
-#ifdef DEBUG_TASK
-			fprintf(stddeb,"EnumTaskWindows // hTask=%04X not found !\n", hTask);
-#endif
+			dprintf_task(stddeb,"EnumTaskWindows // hTask=%04X not found !\n", hTask);
 			return FALSE;
 			}
 		lpTask = lpTask->lpNextTask;
 		}
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"EnumTaskWindows // found hTask=%04X !\n", hTask);
-#endif
+	dprintf_task(stddeb,"EnumTaskWindows // found hTask=%04X !\n", hTask);
 	wptr = lpTask->lpWndList;
 	if (wptr == NULL) return FALSE;
 	if (lpEnumFunc == NULL)	return FALSE;
 	while ((hWnd = *(wptr++)) != 0) {
 		if (++count >= MAXWIN_PER_TASK) return FALSE;
-#ifdef DEBUG_TASK
-		fprintf(stddeb,"EnumTaskWindows // hWnd=%04X count=%d !\n", hWnd, count);
-#endif
+		dprintf_task(stddeb,"EnumTaskWindows // hWnd=%04X count=%d !\n", hWnd, count);
 #ifdef WINELIB
 		bRet = (*lpEnumFunc)(hWnd, lParam); 
 #else
@@ -158,9 +137,7 @@
 		}
 	hTask = GlobalAlloc(GMEM_MOVEABLE, sizeof(WINETASKENTRY));
 	lpNewTask = (LPWINETASKENTRY) GlobalLock(hTask);
-#ifdef DEBUG_TASK
-    fprintf(stddeb,"CreateNewTask entry allocated %08X\n", lpNewTask);
-#endif
+    	dprintf_task(stddeb,"CreateNewTask entry allocated %08X\n", lpNewTask);
 	if (lpNewTask == NULL) return 0;
 	if (lpTaskList == NULL) {
 		lpTaskList = lpNewTask;
@@ -191,10 +168,8 @@
 	lpNewTask->lpWndList = (HWND *) malloc(MAXWIN_PER_TASK * sizeof(HWND));
 	if (lpNewTask->lpWndList != NULL) 
 		memset((LPSTR)lpNewTask->lpWndList, 0, MAXWIN_PER_TASK * sizeof(HWND));
-#ifdef DEBUG_TASK
-    fprintf(stddeb,"CreateNewTask // unix_pid=%08X return hTask=%04X\n", 
+    	dprintf_task(stddeb,"CreateNewTask // unix_pid=%08X return hTask=%04X\n", 
 									lpNewTask->unix_pid, hTask);
-#endif
 	GlobalUnlock(hTask);	
 	nTaskCount++;
     return hTask;
@@ -209,9 +184,7 @@
 	HWND 	*wptr;
 	int		count = 0;
 	LPWINETASKENTRY lpTask = lpTaskList;
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"AddWindowToTask(%04X, %04X); !\n", hTask, hWnd);
-#endif
+	dprintf_task(stddeb,"AddWindowToTask(%04X, %04X); !\n", hTask, hWnd);
 	while (TRUE) {
 		if (lpTask->te.hTask == hTask) break;
 		if (lpTask == NULL) {
@@ -227,9 +200,7 @@
 		wptr++;
 		}
 	*wptr = hWnd;
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"AddWindowToTask // window added, count=%d !\n", count);
-#endif
+	dprintf_task(stddeb,"AddWindowToTask // window added, count=%d !\n", count);
 	return TRUE;
 }
 
@@ -242,9 +213,7 @@
 	HWND 	*wptr;
 	int		count = 0;
 	LPWINETASKENTRY lpTask = lpTaskList;
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"RemoveWindowToTask(%04X, %04X); !\n", hTask, hWnd);
-#endif
+	dprintf_task(stddeb,"RemoveWindowFromTask (%04X, %04X); !\n", hTask, hWnd);
 	while (TRUE) {
 		if (lpTask->te.hTask == hTask) break;
 		if (lpTask == NULL) {
@@ -264,17 +233,13 @@
 		if (++count >= MAXWIN_PER_TASK) return FALSE;
 		wptr++;
 		}
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"RemoveWindowFromTask // window removed, count=%d !\n", --count);
-#endif
+	dprintf_task(stddeb,"RemoveWindowFromTask // window removed, count=%d !\n", --count);
 	return TRUE;
 }
 
 BOOL TaskFirst(LPTASKENTRY lpTask)
 {
-#ifdef DEBUG_TASK
-	fprintf(stddeb,"TaskFirst(%8x)\n", (int) lpTask);
-#endif
+	dprintf_task(stddeb,"TaskFirst(%8x)\n", (int) lpTask);
 	if (lpTaskList) {
 		memcpy(lpTask, &lpTaskList->te, lpTask->dwSize);
 		return TRUE;
@@ -285,9 +250,7 @@
 BOOL TaskNext(LPTASKENTRY lpTask)
 {
 	LPWINETASKENTRY list;
-#ifdef DEBUG_TASK	
-	fprintf(stddeb,"TaskNext(%8x)\n", (int) lpTask);
-#endif
+	dprintf_task(stddeb,"TaskNext(%8x)\n", (int) lpTask);
 	list = lpTaskList;
 	while (list) {
 		if (list->te.hTask == lpTask->hTask) {
@@ -306,9 +269,7 @@
 BOOL TaskFindHandle(LPTASKENTRY lpTask, HTASK hTask)
 {
 	static LPWINETASKENTRY list;
-#ifdef DEBUG_TASK	
-	fprintf(stddeb,"TaskFindHandle(%8x,%4x)\n", (int) lpTask, hTask);
-#endif
+	dprintf_task(stddeb,"TaskFindHandle(%8x,%4x)\n", (int) lpTask, hTask);
 	list = lpTaskList;
 	while (list) {
 		if (list->te.hTask == hTask) {
diff --git a/memory/global.c b/memory/global.c
index 8ab7d2e..9450c95 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -196,9 +196,15 @@
 
 	g = GlobalGetFreeSegments(flags, segments);
 	if (g == NULL)
+	  {
+	    dprintf_heap(stddeb, "==> NULL\n");
 	    return 0;
+	  }
 	else
+	  {
+	    dprintf_heap(stddeb, "==> %04x\n",g->handle);
 	    return g->handle;
+	  }
     }
     /*
      * Otherwise we just need a little piece of a segment.
@@ -226,7 +232,10 @@
 	{
 	    g = GlobalGetFreeSegments(0, 1);
 	    if (g == NULL)
+	      {
+		dprintf_heap(stddeb, "==> Null\n");
 		return 0;
+	      }
 
 	    g->handle = 0;
 	    g->sequence = 0;
@@ -235,7 +244,10 @@
 	    m = HEAP_Alloc((MDESC **) g->addr, flags & GLOBAL_FLAGS_ZEROINIT, 
 			   size);
 	    if (m == NULL)
+	      {
+		dprintf_heap(stddeb, "==> Null\n");
 		return 0;
+	      }
 	}
 
 	/*
@@ -449,7 +461,7 @@
 	if (g->handle == selector)
 	{
 	    if (g->sequence > 0)
-		return g->handle;
+		return MAKELONG(g->handle, selector);
 	    else
 	    {
 		fprintf(stderr, "Attempt to get a handle "
@@ -458,7 +470,7 @@
 	    }
 	}
     }
-
+	dprintf_heap(stddeb, "GlobalHandle ==> Null\n");
     return 0;
 }
 
@@ -820,6 +832,65 @@
  */
 LONG SetSwapAreaSize( WORD size )
 {
-    printf( "STUB: SetSwapAreaSize(%d)\n", size );
+    dprintf_heap(stdnimp, "STUB: SetSwapAreaSize(%d)\n", size );
     return MAKELONG( size, 0xffff );
 }
+
+/***********************************************************************
+ *           IsBadCodePtr   (KERNEL.336)
+ */
+BOOL IsBadCodePtr( FARPROC lpfn )
+{
+    printf( "STUB: IsBadCodePtr(%p)\n", lpfn );
+    return FALSE;
+}
+
+/***********************************************************************
+ *           IsBadHugeWritePtr  (KERNEL.347)
+ */
+BOOL IsBadHugeWritePtr( const char *lp, DWORD cb )
+{
+    return !test_memory(&lp[cb-1], TRUE);
+}
+
+/***********************************************************************
+ *           IsBadWritePtr   	(KERNEL.335)
+ */
+BOOL IsBadWritePtr( const char *lp, DWORD cb )
+{
+    if ((0xffff & (unsigned int) lp) + cb > 0xffff)
+	return TRUE;
+    return !test_memory(&lp[cb-1], TRUE);
+}
+
+/***********************************************************************
+ *           IsBadReadPtr      (KERNEL.334)
+ */
+BOOL IsBadReadPtr( const char *lp, DWORD cb )
+{
+    if ((0xffff & (unsigned int) lp) + cb > 0xffff)
+	return TRUE;
+    return !test_memory(&lp[cb-1], FALSE);
+}
+
+/***********************************************************************
+ *           IsBadHugeReadPtr  (KERNEL.346)
+ */
+BOOL IsBadHugeReadPtr( const char *lp, DWORD cb )
+{
+    if ((0xffff & (unsigned int) lp) + cb > 0xffff)
+	return TRUE;
+    return !test_memory(&lp[cb-1], FALSE);
+}
+
+/***********************************************************************
+ *           IsBadStringPtr   (KERNEL.337)
+ */
+BOOL IsBadStringPtr( const char *lp, UINT cb )
+{
+    if (!IsBadReadPtr(lp, cb+1))
+	return FALSE;
+    if (lp[cb])
+	return FALSE;
+    return TRUE;
+}
diff --git a/memory/linear.c b/memory/linear.c
index 1bceeaa..1ebb17b 100644
--- a/memory/linear.c
+++ b/memory/linear.c
@@ -164,7 +164,7 @@
 }
 /**********************************************************************/
 
-LinearTest()
+void LinearTest()
 {
 #if 0
     unsigned int handle;
diff --git a/misc/Imakefile b/misc/Imakefile
index 3bd175fd..c5bdec9 100644
--- a/misc/Imakefile
+++ b/misc/Imakefile
@@ -7,6 +7,7 @@
 	atom.c \
 	clipboard.c \
 	comm.c \
+	commdlg.c \
 	dos_fs.c \
 	driver.c \
 	exec.c \
@@ -15,8 +16,10 @@
 	keyboard.c \
 	lstr.c \
 	main.c \
+	mcianim.c \
 	mcicda.c \
 	message.c \
+	midi.c \
 	mmaux.c \
 	mmsystem.c \
 	network.c \
diff --git a/misc/audio.c b/misc/audio.c
index 1aad3cd..42e63ee 100644
--- a/misc/audio.c
+++ b/misc/audio.c
@@ -1,4 +1,4 @@
-/*
+/*
  * Sample Wine Driver for Linux
  *
  * Copyright 1994 Martin Ayotte
@@ -11,6 +11,8 @@
 
 #ifdef BUILTIN_MMSYSTEM
 
+#define EMULATE_SB16
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -344,7 +346,7 @@
 		end = lpParms->dwTo;
 		dprintf_mciwave(stddeb,"WAVE_mciPlay // MCI_TO=%d \n", end);
 		}
-/*
+/**/
 	if (dwFlags & MCI_NOTIFY) {
         dprintf_mciwave(stddeb,
 	        "WAVE_mciPlay // MCI_NOTIFY %08X !\n", lpParms->dwCallback);
@@ -360,7 +362,7 @@
 				return 0;
 			}
 		}
-*/
+/**/
 	lpWaveHdr = &MCIWavDev[wDevID].WaveHdr;
 	lpWaveHdr->lpData = (LPSTR) malloc(64000);
 	lpWaveHdr->dwBufferLength = 32000;
@@ -719,7 +721,7 @@
 				lpParms->dwReturn = TRUE;
 				break;
 			case MCI_GETDEVCAPS_CAN_SAVE:
-				lpParms->dwReturn = FALSE;
+				lpParms->dwReturn = TRUE;
 				break;
 			case MCI_WAVE_GETDEVCAPS_INPUTS:
 				lpParms->dwReturn = 1;
@@ -752,7 +754,8 @@
 			lpParms->lpstrReturn = "Linux Sound System 0.5";
 			break;
 		case MCI_INFO_FILE:
-			lpParms->lpstrReturn = "FileName";
+			lpParms->lpstrReturn = 
+				(LPSTR)MCIWavDev[wDevID].openParms.lpstrElementName;
 			break;
 		case MCI_WAVE_INPUT:
 			lpParms->lpstrReturn = "Linux Sound System 0.5";
@@ -793,12 +796,19 @@
 	if (lpCaps == NULL) return MMSYSERR_NOTENABLED;
 	audio = open (SOUND_DEV, O_WRONLY, 0);
 	if (audio == -1) return MMSYSERR_NOTENABLED;
-	lpCaps->wMid = 0xFF; 	/* Manufac ID */
-	lpCaps->wPid = 0x01; 	/* Product ID */
-	strcpy(lpCaps->szPname, "Linux WAV Driver");
-	lpCaps->dwFormats = 0;
-	lpCaps->dwSupport = 0;
+#ifdef EMULATE_SB16
+	lpCaps->wMid = 0x0002;
+	lpCaps->wPid = 0x0104;
+	strcpy(lpCaps->szPname, "SB16 Wave Out");
+#else
+	lpCaps->wMid = 0x00FF; 	/* Manufac ID */
+	lpCaps->wPid = 0x0001; 	/* Product ID */
+	strcpy(lpCaps->szPname, "Linux WAVOUT Driver");
+#endif
+	lpCaps->dwFormats = 0x00000000;
+	lpCaps->dwSupport = WAVECAPS_VOLUME;
 	lpCaps->wChannels = (IOCTL(audio, SNDCTL_DSP_STEREO, dsp_stereo) != 0) ? 1 : 2;
+	if (lpCaps->wChannels > 1) lpCaps->dwSupport |= WAVECAPS_LRVOLUME;
 	bytespersmpl = (IOCTL(audio, SNDCTL_DSP_SAMPLESIZE, samplesize) != 0) ? 1 : 2;
 	smplrate = 44100;
 	if (IOCTL(audio, SNDCTL_DSP_SPEED, smplrate) == 0) {
@@ -1223,10 +1233,16 @@
 	if (lpCaps == NULL) return MMSYSERR_NOTENABLED;
 	audio = open (SOUND_DEV, O_RDONLY, 0);
 	if (audio == -1) return MMSYSERR_NOTENABLED;
-	lpCaps->wMid = 0xFF; 	/* Manufac ID */
-	lpCaps->wPid = 0x01; 	/* Product ID */
-	strcpy(lpCaps->szPname, "Linux WAV Driver");
-	lpCaps->dwFormats = 0;
+#ifdef EMULATE_SB16
+	lpCaps->wMid = 0x0002;
+	lpCaps->wPid = 0x0004;
+	strcpy(lpCaps->szPname, "SB16 Wave Out");
+#else
+	lpCaps->wMid = 0x00FF; 	/* Manufac ID */
+	lpCaps->wPid = 0x0001; 	/* Product ID */
+	strcpy(lpCaps->szPname, "Linux WAVIN Driver");
+#endif
+	lpCaps->dwFormats = 0x00000000;
 	lpCaps->wChannels = (IOCTL(audio, SNDCTL_DSP_STEREO, dsp_stereo) != 0) ? 1 : 2;
 	bytespersmpl = (IOCTL(audio, SNDCTL_DSP_SAMPLESIZE, samplesize) != 0) ? 1 : 2;
 	smplrate = 44100;
@@ -1681,26 +1697,4 @@
 }
 
 
-/*-----------------------------------------------------------------------*/
-
-
-
-/**************************************************************************
-* 				midMessage			[sample driver]
-*/
-DWORD midMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-					DWORD dwParam1, DWORD dwParam2)
-{
-	return MMSYSERR_NOTENABLED;
-}
-
-/**************************************************************************
-* 				modMessage			[sample driver]
-*/
-DWORD modMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-					DWORD dwParam1, DWORD dwParam2)
-{
-	return MMSYSERR_NOTENABLED;
-}
-
 #endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/misc/clipboard.c b/misc/clipboard.c
index ad2d99a..3910314 100644
--- a/misc/clipboard.c
+++ b/misc/clipboard.c
@@ -13,6 +13,8 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
 #include "prototypes.h"
 #include "heap.h"
 #include "win.h"
@@ -35,6 +37,8 @@
 static HWND hWndClipboardOwner = 0;
 static HWND hWndViewer = 0;
 static WORD LastRegFormat = 0xC000;
+static Bool wait_for_selection = False;
+static Bool wineOwnsSelection = False;
 
 CLIPFORMAT ClipFormats[12]  = {
     { CF_TEXT, 1, "Text", (HANDLE)NULL, 0, NULL, &ClipFormats[1] },
@@ -91,6 +95,11 @@
 	    }
 	lpFormat = lpFormat->NextFormat;
 	}
+    if(wineOwnsSelection){
+        dprintf_clipboard(stddeb,"Losing selection\n");
+	wineOwnsSelection=False;
+	XSetSelectionOwner(display,XA_PRIMARY,None,CurrentTime);
+    }
     return TRUE;
 }
 
@@ -119,6 +128,11 @@
 	if (lpFormat->wFormatID == wFormat) break;
 	lpFormat = lpFormat->NextFormat;
 	}
+    /* doc says we shouldn't use CurrentTime */
+    /* should we become owner of CLIPBOARD as well? */
+    XSetSelectionOwner(display,XA_PRIMARY,WIN_GetXWindow(hWndClipboardOwner),CurrentTime);
+    wineOwnsSelection = True;
+    dprintf_clipboard(stddeb,"Getting selection\n");
     if (lpFormat->hData != 0) GlobalFree(lpFormat->hData);
     lpFormat->hData = hData;
     return lpFormat->hData;
@@ -132,6 +146,15 @@
 {
     LPCLIPFORMAT lpFormat = ClipFormats; 
     dprintf_clipboard(stddeb,"GetClipboardData(%04X) !\n", wFormat);
+    if(wFormat == CF_TEXT && !wineOwnsSelection)
+    {	wait_for_selection=True;
+        dprintf_clipboard(stddeb,"Requesting selection\n");
+	XConvertSelection(display,XA_PRIMARY,XA_STRING,
+		XInternAtom(display,"PRIMARY_TEXT",False),
+		WIN_GetXWindow(hWndClipboardOwner),CurrentTime);
+	/* TODO: need time-out for broken clients */
+	while(wait_for_selection)MSG_WaitXEvent(-1);
+    }
     while(TRUE) {
 	if (lpFormat == NULL) return 0;
 	if (lpFormat->wFormatID == wFormat) break;
@@ -289,6 +312,8 @@
 {
     LPCLIPFORMAT lpFormat = ClipFormats; 
     dprintf_clipboard(stddeb,"IsClipboardFormatAvailable(%04X) !\n", wFormat);
+    if(wFormat == CF_TEXT) /* obtain selection as text if possible */
+	return GetClipboardData(CF_TEXT)!=0;
     while(TRUE) {
 	if (lpFormat == NULL) return FALSE;
 	if (lpFormat->wFormatID == wFormat) break;
@@ -319,4 +344,62 @@
 }
 
 
+/**************************************************************************
+ *			CLIPBOARD_ReadSelection
+ *
+ *	The current selection owner has set prop at our window w
+ *	Transfer the property contents into the Clipboard
+ */
+void CLIPBOARD_ReadSelection(Window w,Atom prop)
+{
+    HANDLE hText;
+    LPCLIPFORMAT lpFormat = ClipFormats; 
+    if(prop==None)hText=NULL;
+    else{
+	Atom atype=None;
+	int aformat;
+	unsigned long nitems,remain;
+	unsigned char *val=NULL;
+        dprintf_clipboard(stddeb,"Received prop %s\n",XGetAtomName(display,prop));
+        /* TODO: Properties longer than 64K */
+	if(XGetWindowProperty(display,w,prop,0,0x3FFF,True,XA_STRING,
+	    &atype, &aformat, &nitems, &remain, &val)!=Success)
+		printf("couldn't read property\n");
+        dprintf_clipboard(stddeb,"Type %s,Format %d,nitems %d,value %s\n",
+		XGetAtomName(display,atype),aformat,nitems,val);
+	if(atype!=XA_STRING || aformat!=8){
+	    fprintf(stderr,"Property not set\n");
+	    hText=NULL;
+	} else {
+	    dprintf_clipboard(stddeb,"Selection is %s\n",val);
+	    hText=GlobalAlloc(GMEM_MOVEABLE, nitems);
+	    memcpy(GlobalLock(hText),val,nitems+1);
+	    GlobalUnlock(hText);
+	}
+	XFree(val);
+    }
+    while(TRUE) {
+	if (lpFormat == NULL) return;
+	if (lpFormat->wFormatID == CF_TEXT) break;
+	lpFormat = lpFormat->NextFormat;
+	}
+    if (lpFormat->hData != 0) GlobalFree(lpFormat->hData);
+    wait_for_selection=False;
+    lpFormat->hData = hText;
+    dprintf_clipboard(stddeb,"Received selection\n");
+}
 
+/**************************************************************************
+ *			CLIPBOARD_ReleaseSelection
+ *
+ *	Wine lost the primary selection.
+ *	Empty the clipboard, but don't set the current owner to None.
+ *	Make sure current get/put attempts fail.
+ */
+void CLIPBOARD_ReleaseSelection(HWND hwnd)
+{
+    wineOwnsSelection=False;
+    OpenClipboard(hwnd);
+    EmptyClipboard();
+    CloseClipboard();
+}
diff --git a/misc/comm.c b/misc/comm.c
index 930a5f1..00a0d6a 100644
--- a/misc/comm.c
+++ b/misc/comm.c
@@ -29,55 +29,62 @@
 struct DosDeviceStruct COM[MAX_PORTS];
 struct DosDeviceStruct LPT[MAX_PORTS];
 
-void Comm_DeInit(void);
-
 void Comm_Init(void)
 {
-	int x, serial = 0, parallel = 0;
-	char option[10], temp[256];
+	int x;
+	char option[10], temp[256], *btemp;
 	struct stat st;
 
 	for (x=0; x!=MAX_PORTS; x++) {
 		strcpy(option,"COMx");
-		option[3] = '0' + x;
+		option[3] = '1' + x;
 		option[4] = '\0';
 
 		GetPrivateProfileString("serialports", option, "*", temp, sizeof(temp), WINE_INI);
 		if (!strcmp(temp, "*") || *temp == '\0') 
-			COM[serial].devicename = NULL;
+			COM[x].devicename = NULL;
 		else {
+		  	btemp = index(temp,',');
+			if (btemp != NULL) {
+			  	*btemp++ = '\0';
+				COM[x].baudrate = atoi(btemp);
+			} else {
+				COM[x].baudrate = -1;
+			}
 			stat(temp, &st);
 			if (!S_ISCHR(st.st_mode)) 
-				fprintf(stderr,"comm: can 't use `%s' as COM%d !\n", temp, x);
+				fprintf(stderr,"comm: can 't use `%s' as %s !\n", temp, option);
 			else
-				if ((COM[serial].devicename = malloc(strlen(temp)+1)) == NULL) 
+				if ((COM[x].devicename = malloc(strlen(temp)+1)) == NULL) 
 					fprintf(stderr,"comm: can't malloc for device info!\n");
 				else {
-					COM[serial].fd = 0;
-					strcpy(COM[serial].devicename, temp);
-					serial++;
+					COM[x].fd = 0;
+					strcpy(COM[x].devicename, temp);
 				}
-		}
+                dprintf_comm(stddeb,
+                        "Comm_Init: %s = %s\n", option, COM[x].devicename);
+ 		}
 
 		strcpy(option, "LPTx");
-		option[3] = '0' + x;
+		option[3] = '1' + x;
 		option[4] = '\0';
 
 		GetPrivateProfileString("parallelports", option, "*", temp, sizeof(temp), WINE_INI);
 		if (!strcmp(temp, "*") || *temp == '\0')
-			LPT[parallel].devicename = NULL;
+			LPT[x].devicename = NULL;
 		else {
 			stat(temp, &st);
 			if (!S_ISCHR(st.st_mode)) 
-				fprintf(stderr,"comm: can 't use `%s' as LPT%d !\n", temp, x);
+				fprintf(stderr,"comm: can 't use `%s' as %s !\n", temp, option);
 			else 
-				if ((LPT[parallel].devicename = malloc(strlen(temp)+1)) == NULL) 
+				if ((LPT[x].devicename = malloc(strlen(temp)+1)) == NULL) 
 					fprintf(stderr,"comm: can't malloc for device info!\n");
 				else {
-					LPT[parallel].fd = 0;
-					strcpy(LPT[parallel].devicename, temp);
-					parallel++;
+					LPT[x].fd = 0;
+					strcpy(LPT[x].devicename, temp);
 				}
+                dprintf_comm(stddeb,
+                        "Comm_Init: %s = %s\n", option, LPT[x].devicename);
 		}
 
 	}
@@ -128,7 +135,7 @@
 
 int WinError(void)
 {
-	perror("comm");
+        dprintf_comm(stddeb, "WinError: errno = %d\n", errno);
 	switch (errno) {
 		default:
 			return CE_IOE;
@@ -175,8 +182,11 @@
 		strcpy(temp,device+5);
 		ptr = strtok(temp, ","); 
 
-        	dprintf_comm(stddeb,"BuildCommDCB: baudrate (%s)\n", ptr);
-		lpdcb->BaudRate = atoi(ptr);
+		if (COM[port].baudrate > 0)
+			lpdcb->BaudRate = COM[port].baudrate;
+		else
+			lpdcb->BaudRate = atoi(ptr);
+        	dprintf_comm(stddeb,"BuildCommDCB: baudrate (%d)\n", lpdcb->BaudRate);
 
 		ptr = strtok(NULL, ",");
 		if (islower(*ptr))
@@ -243,6 +253,9 @@
 			commerror = IE_BADID;
 		}
 
+                dprintf_comm(stddeb,
+                       "OpenComm: %s = %s\n", device, COM[port].devicename);
+
 		if (!ValidCOMPort(port)) {
 			commerror = IE_BADID;
 			return -1;
@@ -251,7 +264,7 @@
 			return COM[port].fd;
 		}
 
-		fd = open(COM[port].devicename, O_RDWR | O_NONBLOCK, 0);
+		fd = open(COM[port].devicename, O_RDWR | O_NONBLOCK);
 		if (fd == -1) {
 			commerror = WinError();
 			return -1;
@@ -344,13 +357,13 @@
 			break;					
 
 		case GETMAXCOM:
-			for (max = 0;COM[max].devicename;max++)
+			for (max = MAX_PORTS;!COM[max].devicename;max--)
 				;		
 			return max;
 			break;
 
 		case GETMAXLPT:
-			for (max = 0;LPT[max].devicename;max++)
+			for (max = MAX_PORTS;!LPT[max].devicename;max--)
 				;		
 			return 0x80 + max;
 			break;
@@ -425,9 +438,13 @@
 
 int GetCommError(int fd, COMSTAT FAR *lpStat)
 {
+	int temperror;
+
     	dprintf_comm(stddeb,
 		"GetCommError: fd %d (current error %d)\n", fd, commerror);
-	return(commerror);
+	temperror = commerror;
+	commerror = 0;
+	return(temperror);
 }
 
 UINT FAR* SetCommEventMask(int fd, UINT fuEvtMask)
@@ -449,6 +466,7 @@
 int SetCommState(DCB FAR *lpdcb)
 {
 	struct termios port;
+	struct DosDeviceStruct *ptr;
 
     	dprintf_comm(stddeb,
 		"SetCommState: fd %d, ptr %d\n", lpdcb->Id, (long) lpdcb);
@@ -471,6 +489,12 @@
 	port.c_lflag &= ~(ICANON|ECHO|ISIG);
 	port.c_lflag |= NOFLSH;
 
+	if ((ptr = GetDeviceStruct(lpdcb->Id)) == NULL) {
+		commerror = IE_BADID;
+		return -1;
+	}
+	if (ptr->baudrate > 0)
+	  	lpdcb->BaudRate = ptr->baudrate;
     	dprintf_comm(stddeb,"SetCommState: baudrate %d\n",lpdcb->BaudRate);
 #ifdef CBAUD
 	port.c_cflag &= ~CBAUD;
@@ -823,9 +847,14 @@
 	status = read(fd, (void *) lpvBuf, cbRead);
 
 	if (status == -1) {
-		commerror = WinError();
-		return -1 - length;	
-	} else {
+                if (errno != EAGAIN) {
+                       commerror = WinError();
+                       return -1 - length;
+                } else {
+                        commerror = 0;
+                        return length;
+                }
+ 	} else {
 		commerror = 0;
 		return length + status;
 	}
diff --git a/misc/commdlg.c b/misc/commdlg.c
new file mode 100644
index 0000000..aa1614b
--- /dev/null
+++ b/misc/commdlg.c
@@ -0,0 +1,1127 @@
+/*
+ * COMMDLG functions
+ *
+ * Copyright 1994 Martin Ayotte
+ */
+static char Copyright[] = "Copyright  Martin Ayotte, 1994";
+
+/*
+#define DEBUG_OPENDLG
+#define DEBUG_OPENDLG_DRAW
+*/
+
+#include "stdio.h"
+#include "dialog.h"
+#include "win.h"
+#include "user.h"
+#include "message.h"
+#include "heap.h"
+#include "commdlg.h"
+#include "dlgs.h"
+
+#define OPENFILEDLG2			11
+#define SAVEFILEDLG2			12
+
+
+extern 	HINSTANCE 	hSysRes;
+static	DWORD 		CommDlgLastError = 0;
+
+static	HBITMAP		hFolder = 0;
+static	HBITMAP		hFolder2 = 0;
+static	HBITMAP		hFloppy = 0;
+static	HBITMAP		hHDisk = 0;
+static	HBITMAP		hCDRom = 0;
+
+int DOS_GetDefaultDrive(void);
+void DOS_SetDefaultDrive(int drive);
+char *DOS_GetCurrentDir(int drive);
+int DOS_ChangeDir(int drive, char *dirname);
+
+BOOL FileDlg_Init(HWND hWnd, DWORD lParam);
+BOOL OpenDlg_ScanFiles(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec);
+BOOL OpenDlg_ScanDir(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec);
+LPSTR OpenDlg_GetFileType(LPCSTR types, WORD index);
+LPSTR OpenDlg_ExtractCurDir(LPSTR FullPath, short MaxLen);
+BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
+BOOL FileSaveDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
+BOOL ColorDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
+BOOL PrintDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
+BOOL PrintSetupDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
+BOOL ReplaceTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
+BOOL FindTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam);
+
+/***********************************************************************
+ * 				GetOpenFileName			[COMMDLG.1]
+ */
+BOOL GetOpenFileName(LPOPENFILENAME lpofn)
+{
+	HANDLE		hDlgTmpl;
+	HANDLE		hResInfo;
+	HINSTANCE	hInst;
+	WND 		*wndPtr;
+	BOOL		bRet;
+	printf("GetOpenFileName(%08X); !\n", lpofn);
+	if (lpofn == NULL) return FALSE;
+	printf("GetOpenFileName // Flags=%08X !\n", lpofn->Flags);
+	printf("GetOpenFileName // nMaxFile=%d lpstrFile='%s' !\n", 
+						lpofn->nMaxFile, lpofn->lpstrFile);
+	printf("GetOpenFileName // lpstrInitialDir='%s' !\n", lpofn->lpstrInitialDir);
+	printf("GetOpenFileName // lpstrFilter=%08X !\n", lpofn->lpstrFilter);
+	printf("GetOpenFileName // nFilterIndex=%d !\n", lpofn->nFilterIndex);
+	if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
+		hDlgTmpl = lpofn->hInstance;
+		}
+	else {
+		if (lpofn->Flags & OFN_ENABLETEMPLATE) {
+			printf("GetOpenFileName // avant FindResource hInstance=%04X lpTemplateName='%s' !\n", 
+								lpofn->hInstance, lpofn->lpTemplateName);
+			hInst = lpofn->hInstance;
+			hResInfo = FindResource(hInst, 
+				(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
+			}
+		else {
+			printf("GetOpenFileName // avant FindResource hSysRes=%04X !\n", hSysRes);
+			hInst = hSysRes;
+			hResInfo = FindResource(hInst, MAKEINTRESOURCE(OPENFILEDLG2), RT_DIALOG);
+			}
+		if (hResInfo == 0) {
+			CommDlgLastError = CDERR_FINDRESFAILURE;
+			return FALSE;
+			}
+		printf("GetOpenFileName // apres FindResource hResInfo=%04X!\n", hResInfo);
+		hDlgTmpl = LoadResource(hInst, hResInfo);
+		}
+	if (hDlgTmpl == 0) {
+		CommDlgLastError = CDERR_LOADRESFAILURE;
+		return FALSE;
+		}
+	printf("GetOpenFileName // apres LoadResource hDlgTmpl=%04X!\n", hDlgTmpl);
+    wndPtr = WIN_FindWndPtr(lpofn->hwndOwner);
+	bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl, 
+		lpofn->hwndOwner, (WNDPROC)FileOpenDlgProc, (DWORD)lpofn); 
+
+/*	strcpy(lpofn->lpstrFile, "SETUP.TXT"); */
+/*	strcpy(lpofn->lpstrFileTitle, "SETUP.TXT");*/
+/*
+	lpofn->nFileOffset = 0;
+	lpofn->nFileExtension = strlen(lpofn->lpstrFile) - 3;
+	bRet = TRUE;
+*/
+	printf("GetOpenFileName // return lpstrFile='%s' !\n", lpofn->lpstrFile);
+	return bRet;
+}
+
+
+/***********************************************************************
+ * 				GetSaveFileName			[COMMDLG.2]
+ */
+BOOL GetSaveFileName(LPOPENFILENAME lpofn)
+{
+	HANDLE		hDlgTmpl;
+	HANDLE		hResInfo;
+	HINSTANCE	hInst;
+    WND 		*wndPtr;
+	BOOL		bRet;
+	printf("GetSaveFileName(%08X); !\n", lpofn);
+	if (lpofn == NULL) return FALSE;
+	printf("GetSaveFileName // Flags=%08X !\n", lpofn->Flags);
+	printf("GetSaveFileName // nMaxFile=%d lpstrFile='%s' !\n", 
+						lpofn->nMaxFile, lpofn->lpstrFile);
+	printf("GetSaveFileName // lpstrInitialDir='%s' !\n", lpofn->lpstrInitialDir);
+	printf("GetSaveFileName // lpstrFilter=%08X !\n", lpofn->lpstrFilter);
+	if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
+		hDlgTmpl = lpofn->hInstance;
+		}
+	else {
+		if (lpofn->Flags & OFN_ENABLETEMPLATE) {
+			printf("GetSaveFileName // avant FindResource lpTemplateName='%s' !\n", 
+												lpofn->lpTemplateName);
+			hInst = lpofn->hInstance;
+			hResInfo = FindResource(hInst, 
+				(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
+			}
+		else {
+			printf("GetSaveFileName // avant FindResource !\n");
+			hInst = hSysRes;
+			hResInfo = FindResource(hInst, MAKEINTRESOURCE(SAVEFILEDLG2), RT_DIALOG);
+			}
+		if (hResInfo == 0) {
+			CommDlgLastError = CDERR_FINDRESFAILURE;
+			return FALSE;
+			}
+		hDlgTmpl = LoadResource(hInst, hResInfo);
+		}
+	if (hDlgTmpl == 0) {
+		CommDlgLastError = CDERR_LOADRESFAILURE;
+		return FALSE;
+		}
+    wndPtr = WIN_FindWndPtr(lpofn->hwndOwner);
+	bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl, 
+		lpofn->hwndOwner, (WNDPROC)FileSaveDlgProc, (DWORD)lpofn);
+	printf("GetSaveFileName // return lpstrFile='%s' !\n", lpofn->lpstrFile);
+	return bRet;
+}
+
+
+/***********************************************************************
+ * 				ChooseColor				[COMMDLG.5]
+ */
+BOOL ChooseColor(LPCHOOSECOLOR lpChCol)
+{
+	HANDLE	hDlgTmpl;
+	HANDLE	hResInfo;
+    WND 	*wndPtr;
+	BOOL	bRet;
+	hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(COLORDLG), RT_DIALOG);
+	hDlgTmpl = LoadResource(hSysRes, hResInfo);
+    wndPtr = WIN_FindWndPtr(lpChCol->hwndOwner);
+	bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl, 
+		lpChCol->hwndOwner, (WNDPROC)ColorDlgProc, (DWORD)lpChCol);
+	return bRet;
+}
+
+
+/***********************************************************************
+ * 				FileOpenDlgProc			[COMMDLG.6]
+ */
+BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
+{
+	int		n;
+	LPSTR	ptr;
+	LPSTR	fspec;
+	char	str[512];
+	char	C2[128];
+	WORD	wRet;
+	HBRUSH	hBrush;
+	HDC 	hMemDC;
+	HBITMAP	hBitmap;
+	BITMAP	bm;
+    WND 	*wndPtr;
+	LPMEASUREITEMSTRUCT lpmeasure;
+	LPDRAWITEMSTRUCT lpdis;
+	static	int		nDrive;
+	static 	char	CurPath[512];
+	static LPOPENFILENAME lpofn;
+
+	switch (wMsg) {
+		case WM_INITDIALOG:
+#ifdef DEBUG_OPENDLG
+			printf("FileOpenDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+#endif
+			printf("FileOpenDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+			if (!FileDlg_Init(hWnd, lParam)) return TRUE;
+			SendDlgItemMessage(hWnd, cmb1, CB_RESETCONTENT, 0, 0L);
+			lpofn = (LPOPENFILENAME)lParam;
+			ptr = (LPSTR)lpofn->lpstrFilter;
+			strcpy(CurPath, lpofn->lpstrInitialDir);
+#ifdef DEBUG_OPENDLG
+			printf("FileOpenDlgProc // lpstrInitialDir='%s' !\n", CurPath);
+#endif
+			while((n = strlen(ptr)) != 0) {
+#ifdef DEBUG_OPENDLG
+				printf("FileOpenDlgProc // file type '%s' !\n", ptr);
+#endif
+				SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (DWORD)ptr);
+				ptr += ++n;
+#ifdef DEBUG_OPENDLG
+				printf("FileOpenDlgProc // file spec '%s' !\n", ptr);
+#endif
+				n = strlen(ptr);
+				ptr += ++n;
+				}
+			SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
+			SendDlgItemMessage(hWnd, cmb1, CB_SETCURSEL, 
+						lpofn->nFilterIndex - 1, 0L);
+			DlgDirListComboBox(hWnd, "", cmb2, 0, 0xC000);
+			nDrive = 2; 		/* Drive 'C:' */
+			SendDlgItemMessage(hWnd, cmb2, CB_SETCURSEL, nDrive, 0L);
+			sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
+			fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, 
+									lpofn->nFilterIndex);
+#ifdef DEBUG_OPENDLG
+			printf("FileOpenDlgProc // WM_INITDIALOG fspec #%d = '%s' !\n", 
+											lpofn->nFilterIndex, fspec);
+#endif
+			if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
+				printf("OpenDlg_ScanDir // ChangeDir Error !\n");
+				}
+			else {
+				strcpy(CurPath, str);
+				}
+			ShowWindow(hWnd, SW_SHOWNORMAL);
+			return TRUE;
+
+	case WM_SHOWWINDOW:
+		if (wParam == 0) break;
+		if (!(lpofn->Flags & OFN_SHOWHELP)) {
+			ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);
+			}
+		if (lpofn->Flags & OFN_HIDEREADONLY) {
+			ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE); 
+			}
+		return TRUE;
+
+    case WM_MEASUREITEM:
+		GetObject(hFolder2, sizeof(BITMAP), (LPSTR)&bm);
+		lpmeasure = (LPMEASUREITEMSTRUCT)lParam;
+		lpmeasure->itemHeight = bm.bmHeight;
+#ifdef DEBUG_OPENDLG_DRAW
+		printf("FileOpenDlgProc WM_MEASUREITEM Height=%d !\n", bm.bmHeight);
+#endif
+		return TRUE;
+
+	case WM_DRAWITEM:
+#ifdef DEBUG_OPENDLG_DRAW
+		printf("FileOpenDlgProc // WM_DRAWITEM w=%04X l=%08X\n", wParam, lParam);
+#endif
+		if (lParam == 0L) break;
+		lpdis = (LPDRAWITEMSTRUCT)lParam;
+#ifdef DEBUG_OPENDLG_DRAW
+		printf("FileOpenDlgProc // WM_DRAWITEM CtlType=%04X CtlID=%04X \n", 
+									lpdis->CtlType, lpdis->CtlID);
+#endif
+		if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst1)) {
+			hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
+			SelectObject(lpdis->hDC, hBrush);
+			FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
+			ptr = (LPSTR) lpdis->itemData;
+			if (ptr == NULL) break;
+			TextOut(lpdis->hDC, lpdis->rcItem.left,	lpdis->rcItem.top, 
+											ptr, strlen(ptr));
+			}
+		if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst2)) {
+			hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
+			SelectObject(lpdis->hDC, hBrush);
+			FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
+			ptr = (LPSTR) lpdis->itemData;
+			if (ptr == NULL) break;
+			if (strcmp(ptr, "[.]") == 0) {
+				hBitmap = hFolder2;
+/*				ptr = OpenDlg_ExtractCurDir(CurPath, -1); */
+				ptr = CurPath;
+				}
+			else
+				hBitmap = hFolder;
+			GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
+			TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth, 
+							lpdis->rcItem.top, ptr, strlen(ptr));
+			hMemDC = CreateCompatibleDC(lpdis->hDC);
+			SelectObject(hMemDC, hBitmap);
+			BitBlt(lpdis->hDC, lpdis->rcItem.left,	lpdis->rcItem.top,
+						bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+			DeleteDC(hMemDC);
+			}
+		if ((lpdis->CtlType == ODT_COMBOBOX) && (lpdis->CtlID == cmb2)) {
+			hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
+			SelectObject(lpdis->hDC, hBrush);
+			FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
+			ptr = (LPSTR) lpdis->itemData;
+			if (ptr == NULL) break;
+			switch(ptr[2]) {
+				case 'a':
+				case 'b':
+					hBitmap = hFloppy;
+					break;
+				default:
+					hBitmap = hHDisk;
+				}
+			GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
+			TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth, 
+							lpdis->rcItem.top, ptr, strlen(ptr));
+			hMemDC = CreateCompatibleDC(lpdis->hDC);
+			SelectObject(hMemDC, hBitmap);
+			BitBlt(lpdis->hDC, lpdis->rcItem.left,	lpdis->rcItem.top,
+						bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+			DeleteDC(hMemDC);
+			}
+		if (lpdis->itemState != 0) {
+		    InvertRect(lpdis->hDC, &lpdis->rcItem);
+		    }
+        break;
+
+	case WM_COMMAND:
+		switch (wParam) {
+			case lst1:
+				if (HIWORD(lParam) == LBN_DBLCLK ||
+					HIWORD(lParam) == LBN_SELCHANGE) {
+#ifdef DEBUG_OPENDLG
+					printf("FileOpenDlgProc // LBN_SELCHANGE on lst1 !\n");
+#endif
+					wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
+					SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)C2);
+					}
+				if (HIWORD(lParam) == LBN_DBLCLK) {
+#ifdef DEBUG_OPENDLG
+					printf("FileOpenDlgProc // LBN_DBLCLK on lst1 !\n");
+#endif
+					return SendMessage(hWnd, WM_COMMAND, IDOK, 0L);
+					}
+				break;
+			case lst2:
+				if (HIWORD(lParam) == LBN_DBLCLK) {
+#ifdef DEBUG_OPENDLG
+					printf("FileOpenDlgProc // LBN_DBLCLK on lst2 !\n");
+#endif
+					wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
+					if (wRet == (WORD)LB_ERR) return 0;
+					fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
+					C2[0] = '\0';
+					wRet = SendDlgItemMessage(hWnd, lst2, LB_GETCURSEL, 0, 0L);
+					if (wRet == (WORD)LB_ERR) return 0;
+					SendDlgItemMessage(hWnd, lst2, LB_GETTEXT, wRet, (DWORD)C2);
+					if (C2[0] == '[') {
+						C2[strlen(C2) - 1] = '\0';
+						sprintf(str, "%s\\%s", CurPath, &C2[1]);
+						if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
+							printf("OpenDlg_ScanDir // ChangeDir Error !\n");
+							}
+						else {
+							strcpy(CurPath, str);
+							}
+						}
+					}
+				break;
+			case cmb1:
+				if (HIWORD(lParam) == CBN_SELCHANGE) {
+					wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
+					if (wRet == (WORD)LB_ERR) return 0;
+					fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
+					printf("FileOpenDlgProc // new fspec #%d = '%s' !\n", wRet, fspec);
+					if (!OpenDlg_ScanFiles(hWnd, nDrive, CurPath, fspec)) {
+						printf("OpenDlg_ScanFiles // Change FileType Error !\n");
+						}
+					}
+				break;
+			case cmb2:
+#ifdef DEBUG_OPENDLG
+				printf("FileOpenDlgProc // combo #2 changed !\n");
+#endif
+				wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
+				if (wRet == (WORD)LB_ERR) return 0;
+				fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
+				wRet = SendDlgItemMessage(hWnd, cmb2, CB_GETCURSEL, 0, 0L);
+				if (wRet == (WORD)LB_ERR) return 0;
+				printf("FileOpenDlgProc // combo #2 CB_GETCURSEL=%d !\n", wRet);
+				SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, wRet, (DWORD)C2);
+				nDrive = C2[2] - 'a';
+#ifdef DEBUG_OPENDLG
+				printf("FileOpenDlgProc // new drive selected=%d !\n", nDrive);
+#endif
+				sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
+#ifdef DEBUG_OPENDLG
+				printf("FileOpenDlgProc // new drive , curPath='%s' !\n", str);
+#endif
+				if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
+					printf("OpenDlg_ScanDir // ChangeDir Error !\n");
+					}
+				else {
+					strcpy(CurPath, str);
+					}
+				break;
+			case chx1:
+#ifdef DEBUG_OPENDLG
+				printf("FileOpenDlgProc // read-only toggled !\n");
+#endif
+				break;
+			case pshHelp:
+#ifdef DEBUG_OPENDLG
+				printf("FileOpenDlgProc // pshHelp pressed !\n");
+#endif
+				break;
+			case IDOK:
+				ShowWindow(hWnd, SW_HIDE); 
+				SendDlgItemMessage(hWnd, edt1, WM_GETTEXT, 0, (DWORD)str);
+				wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
+				SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
+				printf("FileOpenDlgProc // IDOK str='%s'\n", str);
+				strcpy(lpofn->lpstrFile, str);
+				lpofn->nFileOffset = 0;
+				lpofn->nFileExtension = strlen(lpofn->lpstrFile) - 3;
+				if (lpofn->lpstrFileTitle != NULL) {
+					wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
+					SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
+					strcpy(lpofn->lpstrFileTitle, str);
+					}
+				EndDialog(hWnd, TRUE);
+				return(TRUE);
+			case IDCANCEL:
+				EndDialog(hWnd, FALSE);
+				return(TRUE);
+			}
+		return(FALSE);
+	}
+
+
+/*
+    case WM_CTLCOLOR:
+        SetBkColor((HDC)wParam, 0x00C0C0C0);
+        switch (HIWORD(lParam))
+            {
+            case CTLCOLOR_BTN:
+                SetTextColor((HDC)wParam, 0x00000000);
+                return(hGRAYBrush);
+            case CTLCOLOR_STATIC:
+                SetTextColor((HDC)wParam, 0x00000000);
+                return(hGRAYBrush);
+            }
+        return(FALSE);
+
+*/
+	return FALSE;
+}
+
+
+/***********************************************************************
+ * 				FileDlg_Init			[internal]
+ */
+BOOL FileDlg_Init(HWND hWnd, DWORD lParam)
+{
+	LPOPENFILENAME	lpofn;
+	lpofn = (LPOPENFILENAME)lParam;
+	if (lpofn == NULL) {
+		fprintf(stderr, "FileDlg_Init // Bad LPOPENFILENAME pointer !");
+		return FALSE;
+		}
+	if (hFolder == (HBITMAP)NULL) 
+		hFolder = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_FOLDER));
+	if (hFolder2 == (HBITMAP)NULL) 
+		hFolder2 = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_FOLDER2));
+	if (hFloppy == (HBITMAP)NULL) 
+		hFloppy = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_FLOPPY));
+	if (hHDisk == (HBITMAP)NULL) 
+		hHDisk = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_HDISK));
+	if (hCDRom == (HBITMAP)NULL) 
+		hCDRom = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_CDROM));
+	if (hFolder == 0 || hFolder2 == 0 || hFloppy == 0 || 
+		hHDisk == 0 || hCDRom == 0)
+		fprintf(stderr, "FileDlg_Init // Error loading bitmaps !");
+	return TRUE;
+}
+
+
+/***********************************************************************
+ * 				OpenDlg_ScanFiles		[internal]
+ */
+BOOL OpenDlg_ScanFiles(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec)
+{
+	int		OldDrive;
+	char	OldPath[512];
+	char	str[512];
+	OldDrive = DOS_GetDefaultDrive();
+	DOS_SetDefaultDrive(nDrive) ;
+	strcpy(OldPath, DOS_GetCurrentDir(nDrive));
+#ifdef DEBUG_OPENDLG
+	printf("OpenDlg_ScanFiles // OldDrive=%d OldPath='%s'\n", OldDrive, OldPath);
+	printf("OpenDlg_ScanFiles // wanted newPath='%s'\n", newPath);
+#endif
+	if (newPath[1] == ':')
+		DOS_ChangeDir(nDrive, &newPath[2]);
+	else
+		DOS_ChangeDir(nDrive, newPath);
+	sprintf(newPath, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
+#ifdef DEBUG_OPENDLG
+	printf("OpenDlg_ScanFiles // actual newPath='%s'\n", newPath);
+#endif
+	if (strlen(newPath) == 3) newPath[2] = '\0';
+	sprintf(str, "%s\\%s", newPath, fileSpec);
+	DlgDirList(hWnd, str, lst1, 0, 0x0000);
+	SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
+	DOS_ChangeDir(nDrive, OldPath);
+	DOS_SetDefaultDrive(OldDrive);
+	return TRUE;
+}
+
+
+
+/***********************************************************************
+ * 				OpenDlg_ScanDir			[internal]
+ */
+BOOL OpenDlg_ScanDir(HWND hWnd, WORD nDrive, LPSTR newPath, LPSTR fileSpec)
+{
+	int		OldDrive;
+	char	OldPath[512];
+	char	str[512];
+	OldDrive = DOS_GetDefaultDrive();
+	DOS_SetDefaultDrive(nDrive) ;
+	strcpy(OldPath, DOS_GetCurrentDir(nDrive));
+#ifdef DEBUG_OPENDLG
+	printf("OpenDlg_ScanDir // OldDrive=%d OldPath='%s'\n", OldDrive, OldPath);
+	printf("OpenDlg_ScanDir // wanted newPath='%s'\n", newPath);
+#endif
+	if (newPath[1] == ':')
+		DOS_ChangeDir(nDrive, &newPath[2]);
+	else
+		DOS_ChangeDir(nDrive, newPath);
+	sprintf(newPath, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
+#ifdef DEBUG_OPENDLG
+	printf("OpenDlg_ScanDir // actual newPath='%s'\n", newPath);
+#endif
+	if (strlen(newPath) == 3) newPath[2] = '\0';
+	sprintf(str, "%s\\%s", newPath, fileSpec);
+	DlgDirList(hWnd, str, lst1, 0, 0x0000);
+	SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
+	sprintf(str, "%s\\*.*", newPath);
+	DlgDirList(hWnd, str, lst2, 0, 0x8010);
+	if (strlen(newPath) == 2) strcat(newPath, "\\");
+	SendDlgItemMessage(hWnd, stc1, WM_SETTEXT, 0, (DWORD)newPath);
+	DOS_ChangeDir(nDrive, OldPath);
+	DOS_SetDefaultDrive(OldDrive);
+	return TRUE;
+}
+
+
+
+/***********************************************************************
+ * 				OpenDlg_GetFileType		[internal]
+ */
+LPSTR OpenDlg_GetFileType(LPCSTR types, WORD index)
+{
+	int		n;
+	int		i = 1;
+	LPSTR 	ptr = (LPSTR) types;
+	if	(ptr == NULL) return NULL;
+	while((n = strlen(ptr)) != 0) {
+#ifdef DEBUG_OPENDLG
+		printf("OpenDlg_GetFileType // file type '%s' !\n", ptr);
+#endif
+		ptr += ++n;
+#ifdef DEBUG_OPENDLG
+		printf("OpenDlg_GetFileType // file spec '%s' !\n", ptr);
+#endif
+		if (i++ == index) return ptr;
+		n = strlen(ptr);
+		ptr += ++n;
+		}
+	return NULL;
+}
+
+
+/***********************************************************************
+ * 				OpenDlg_ExtractCurDir	[internal]
+ */
+LPSTR OpenDlg_ExtractCurDir(LPSTR FullPath, short MaxLen)
+{
+	LPSTR 	ptr;
+	if (MaxLen < 0) MaxLen = strlen(FullPath);
+	ptr = FullPath + MaxLen - 1;
+	if (*ptr == '\\') return NULL;
+	while (ptr > FullPath) {
+		if (*ptr == '\\') return (ptr + 1);
+		ptr--;
+		}
+	return NULL;
+}
+
+
+/***********************************************************************
+ * 				FileSaveDlgProc			[COMMDLG.7]
+ */
+BOOL FileSaveDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
+{
+	int		n;
+	LPSTR	ptr;
+	LPSTR	fspec;
+	char	str[512];
+	char	C2[128];
+	WORD	wRet;
+	HBRUSH	hBrush;
+	HDC 	hMemDC;
+	HBITMAP	hBitmap;
+	BITMAP	bm;
+	LPMEASUREITEMSTRUCT lpmeasure;
+	LPDRAWITEMSTRUCT lpdis;
+	static	int		nDrive;
+	static	int		OldDrive;
+	static 	char	OldPath[512];
+	static 	char	CurPath[512];
+	static LPOPENFILENAME lpofn;
+
+	switch (wMsg) {
+		case WM_INITDIALOG:
+#ifdef DEBUG_OPENDLG
+			printf("FileSaveDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+#endif
+			if (!FileDlg_Init(hWnd, lParam)) return TRUE;
+			SendDlgItemMessage(hWnd, cmb1, CB_RESETCONTENT, 0, 0L);
+			lpofn = (LPOPENFILENAME)lParam;
+			ptr = (LPSTR)lpofn->lpstrFilter;
+			strcpy(CurPath, lpofn->lpstrInitialDir);
+			while((n = strlen(ptr)) != 0) {
+#ifdef DEBUG_OPENDLG
+				printf("FileSaveDlgProc // file type '%s' !\n", ptr);
+#endif
+				SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (DWORD)ptr);
+				ptr += ++n;
+#ifdef DEBUG_OPENDLG
+				printf("FileSaveDlgProc // file spec '%s' !\n", ptr);
+#endif
+				n = strlen(ptr);
+				ptr += ++n;
+				}
+			SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (DWORD)str);
+			SendDlgItemMessage(hWnd, cmb1, CB_SETCURSEL, 
+						lpofn->nFilterIndex - 1, 0L);
+			DlgDirListComboBox(hWnd, "", cmb2, 0, 0xC000);
+			nDrive = 2; 		/* Drive 'C:' */
+			SendDlgItemMessage(hWnd, cmb2, CB_SETCURSEL, nDrive, 0L);
+			sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
+			fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, 
+									lpofn->nFilterIndex);
+#ifdef DEBUG_OPENDLG
+			printf("FileSaveDlgProc // WM_INITDIALOG fspec #%d = '%s' !\n", 
+											lpofn->nFilterIndex, fspec);
+#endif
+			if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
+				printf("OpenDlg_ScanDir // ChangeDir Error !\n");
+				}
+			else {
+				strcpy(CurPath, str);
+				}
+			ShowWindow(hWnd, SW_SHOWNORMAL);
+			return (TRUE);
+
+	case WM_SHOWWINDOW:
+		if (wParam == 0) break;
+		if (!(lpofn->Flags & OFN_SHOWHELP)) {
+			ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);
+			}
+		if (lpofn->Flags & OFN_HIDEREADONLY) {
+			ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE); 
+			}
+		return TRUE;
+
+    case WM_MEASUREITEM:
+		GetObject(hFolder2, sizeof(BITMAP), (LPSTR)&bm);
+		lpmeasure = (LPMEASUREITEMSTRUCT)lParam;
+		lpmeasure->itemHeight = bm.bmHeight;
+#ifdef DEBUG_OPENDLG_DRAW
+		printf("FileSaveDlgProc WM_MEASUREITEM Height=%d !\n", bm.bmHeight);
+#endif
+		return TRUE;
+
+		case WM_DRAWITEM:
+#ifdef DEBUG_OPENDLG_DRAW
+			printf("FileSaveDlgProc // WM_DRAWITEM w=%04X l=%08X\n", wParam, lParam);
+#endif
+			if (lParam == 0L) break;
+			lpdis = (LPDRAWITEMSTRUCT)lParam;
+#ifdef DEBUG_OPENDLG_DRAW
+			printf("FileSaveDlgProc // WM_DRAWITEM lpdis->CtlID=%04X\n", lpdis->CtlID);
+#endif
+			if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst1)) {
+				hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
+				SelectObject(lpdis->hDC, hBrush);
+				FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
+				ptr = (LPSTR) lpdis->itemData;
+				if (ptr == NULL) break;
+				TextOut(lpdis->hDC, lpdis->rcItem.left,	lpdis->rcItem.top, 
+														ptr, strlen(ptr));
+				}
+			if ((lpdis->CtlType == ODT_LISTBOX) && (lpdis->CtlID == lst2)) {
+				hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
+				SelectObject(lpdis->hDC, hBrush);
+				FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
+				ptr = (LPSTR) lpdis->itemData;
+				if (ptr == NULL) break;
+				if (strcmp(ptr, "[.]") == 0) {
+					hBitmap = hFolder2;
+					ptr = CurPath;
+					}
+				else
+					hBitmap = hFolder;
+				GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
+				TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth, 
+								lpdis->rcItem.top, ptr, strlen(ptr));
+				hMemDC = CreateCompatibleDC(lpdis->hDC);
+				SelectObject(hMemDC, hBitmap);
+				BitBlt(lpdis->hDC, lpdis->rcItem.left,	lpdis->rcItem.top,
+							bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+				DeleteDC(hMemDC);
+				}
+			if ((lpdis->CtlType == ODT_COMBOBOX) && (lpdis->CtlID == cmb2)) {
+				hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
+				SelectObject(lpdis->hDC, hBrush);
+				FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
+				ptr = (LPSTR) lpdis->itemData;
+				if (ptr == NULL) break;
+				switch(ptr[2]) {
+					case 'a':
+					case 'b':
+						hBitmap = hFloppy;
+						break;
+					default:
+						hBitmap = hHDisk;
+					}
+				GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
+				TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth, 
+								lpdis->rcItem.top, ptr, strlen(ptr));
+				hMemDC = CreateCompatibleDC(lpdis->hDC);
+				SelectObject(hMemDC, hBitmap);
+				BitBlt(lpdis->hDC, lpdis->rcItem.left,	lpdis->rcItem.top,
+							bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+				DeleteDC(hMemDC);
+				}
+	        break;
+
+		case WM_COMMAND:
+			switch (wParam) {
+				case lst1:
+					if (HIWORD(lParam) == LBN_DBLCLK ||
+						HIWORD(lParam) == LBN_SELCHANGE) {
+#ifdef DEBUG_OPENDLG
+						printf("FileSaveDlgProc // LBN_SELCHANGE on lst1 !\n");
+#endif
+						wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
+						SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)C2);
+						}
+					if (HIWORD(lParam) == LBN_DBLCLK) {
+#ifdef DEBUG_OPENDLG
+						printf("FileSaveDlgProc // LBN_DBLCLK on lst1 !\n");
+#endif
+						return SendMessage(hWnd, WM_COMMAND, IDOK, 0L);
+						}
+					break;
+				case lst2:
+				if (HIWORD(lParam) == LBN_DBLCLK) {
+#ifdef DEBUG_OPENDLG
+					printf("FileSaveDlgProc // LBN_DBLCLK on lst2 !\n");
+#endif
+					wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
+					fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
+					C2[0] = '\0';
+					wRet = SendDlgItemMessage(hWnd, lst2, LB_GETCURSEL, 0, 0L);
+					SendDlgItemMessage(hWnd, lst2, LB_GETTEXT, wRet, (DWORD)C2);
+					if (C2[0] == '[') {
+						C2[strlen(C2) - 1] = '\0';
+						sprintf(str, "%s\\%s", CurPath, &C2[1]);
+						if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
+							printf("FileSaveDlgProc // ChangeDir Error !\n");
+							}
+						else {
+							strcpy(CurPath, str);
+							}
+						}
+					}
+				break;
+			case cmb1:
+				if (HIWORD(lParam) == CBN_SELCHANGE) {
+					wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
+					fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
+					printf("FileSaveDlgProc // new fspec #%d = '%s' !\n", wRet, fspec);
+					if (!OpenDlg_ScanFiles(hWnd, nDrive, CurPath, fspec)) {
+						printf("OpenDlg_ScanFile // Change FileType Error !\n");
+						}
+					}
+				break;
+			case cmb2:
+#ifdef DEBUG_OPENDLG
+				printf("FileSaveDlgProc // combo #2 changed !\n");
+#endif
+				wRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0L);
+				if (wRet == (WORD)LB_ERR) return 0;
+				fspec = OpenDlg_GetFileType(lpofn->lpstrFilter, wRet + 1);
+				wRet = SendDlgItemMessage(hWnd, cmb2, CB_GETCURSEL, 0, 0L);
+				if (wRet == (WORD)LB_ERR) return 0;
+				printf("FileSaveDlgProc // combo #2 CB_GETCURSEL=%d !\n", wRet);
+				SendDlgItemMessage(hWnd, cmb2, CB_GETLBTEXT, wRet, (DWORD)C2);
+				nDrive = C2[2] - 'a';
+#ifdef DEBUG_OPENDLG
+				printf("FileSaveDlgProc // new drive selected=%d !\n", nDrive);
+#endif
+				sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
+#ifdef DEBUG_OPENDLG
+				printf("FileSaveDlgProc // new drive , curPath='%s' !\n", str);
+#endif
+				if (!OpenDlg_ScanDir(hWnd, nDrive, str, fspec)) {
+					printf("FileSaveDlgProc // Change Drive Error !\n");
+					}
+				else {
+					strcpy(CurPath, str);
+					}
+				break;
+			case chx1:
+#ifdef DEBUG_OPENDLG
+				printf("FileSaveDlgProc // read-only toggled !\n");
+#endif
+				break;
+			case pshHelp:
+#ifdef DEBUG_OPENDLG
+				printf("FileSaveDlgProc // pshHelp pressed !\n");
+#endif
+				break;
+				case IDOK:
+					strcpy(lpofn->lpstrFile, "titi.txt");
+					if (lpofn->lpstrFileTitle != NULL) {
+						strcpy(lpofn->lpstrFileTitle, "titi.txt");
+						}
+					EndDialog(hWnd, TRUE);
+					return(TRUE);
+				case IDCANCEL:
+					EndDialog(hWnd, FALSE);
+					return(TRUE);
+				}
+			return(FALSE);
+		}
+	return FALSE;
+}
+
+
+/***********************************************************************
+ * 				ColorDlgProc			[COMMDLG.8]
+ */
+BOOL ColorDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
+{
+	switch (wMsg) {
+		case WM_INITDIALOG:
+			printf("ColorDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+			ShowWindow(hWnd, SW_SHOWNORMAL);
+			return (TRUE);
+
+		case WM_COMMAND:
+			switch (wParam) {
+				case IDOK:
+					EndDialog(hWnd, TRUE);
+					return(TRUE);
+				case IDCANCEL:
+					EndDialog(hWnd, FALSE);
+					return(TRUE);
+				}
+			return(FALSE);
+		}
+	return FALSE;
+}
+
+
+/***********************************************************************
+ * 				FindTextDlg				[COMMDLG.11]
+ */
+BOOL FindText(LPFINDREPLACE lpFind)
+{
+	HANDLE	hDlgTmpl;
+	HANDLE	hResInfo;
+    WND 	*wndPtr;
+	BOOL	bRet;
+	hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(FINDDLG), RT_DIALOG);
+	if (hResInfo == 0) {
+		CommDlgLastError = CDERR_FINDRESFAILURE;
+		return FALSE;
+		}
+	hDlgTmpl = LoadResource(hSysRes, hResInfo);
+	if (hDlgTmpl == 0) {
+		CommDlgLastError = CDERR_LOADRESFAILURE;
+		return FALSE;
+		}
+    wndPtr = WIN_FindWndPtr(lpFind->hwndOwner);
+	bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl, 
+		lpFind->hwndOwner, (WNDPROC)FindTextDlgProc, (DWORD)lpFind);
+	return bRet;
+}
+
+
+/***********************************************************************
+ * 				ReplaceTextDlg			[COMMDLG.12]
+ */
+BOOL ReplaceText(LPFINDREPLACE lpFind)
+{
+	HANDLE	hDlgTmpl;
+	HANDLE	hResInfo;
+    WND 	*wndPtr;
+	BOOL	bRet;
+	hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(REPLACEDLG), RT_DIALOG);
+	if (hResInfo == 0) {
+		CommDlgLastError = CDERR_FINDRESFAILURE;
+		return FALSE;
+		}
+	hDlgTmpl = LoadResource(hSysRes, hResInfo);
+	if (hDlgTmpl == 0) {
+		CommDlgLastError = CDERR_LOADRESFAILURE;
+		return FALSE;
+		}
+    wndPtr = WIN_FindWndPtr(lpFind->hwndOwner);
+	bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl, 
+		lpFind->hwndOwner, (WNDPROC)ReplaceTextDlgProc, (DWORD)lpFind);
+	return bRet;
+}
+
+
+/***********************************************************************
+ * 				FindTextDlgProc			[COMMDLG.13]
+ */
+BOOL FindTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
+{
+	switch (wMsg) {
+		case WM_INITDIALOG:
+			printf("FindTextDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+			ShowWindow(hWnd, SW_SHOWNORMAL);
+			return (TRUE);
+
+		case WM_COMMAND:
+			switch (wParam) {
+				case IDOK:
+					EndDialog(hWnd, TRUE);
+					return(TRUE);
+				case IDCANCEL:
+					EndDialog(hWnd, FALSE);
+					return(TRUE);
+				}
+			return(FALSE);
+		}
+	return FALSE;
+}
+
+
+/***********************************************************************
+ * 				ReplaceTextDlgProc		[COMMDLG.14]
+ */
+BOOL ReplaceTextDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
+{
+	switch (wMsg) {
+		case WM_INITDIALOG:
+			printf("ReplaceTextDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+			ShowWindow(hWnd, SW_SHOWNORMAL);
+			return (TRUE);
+
+		case WM_COMMAND:
+			switch (wParam) {
+				case IDOK:
+					EndDialog(hWnd, TRUE);
+					return(TRUE);
+				case IDCANCEL:
+					EndDialog(hWnd, FALSE);
+					return(TRUE);
+				}
+			return(FALSE);
+		}
+	return FALSE;
+}
+
+
+/***********************************************************************
+ * 				PrintDlg				[COMMDLG.20]
+ */
+BOOL PrintDlg(LPPRINTDLG lpPrint)
+{
+	HANDLE	hDlgTmpl;
+	HANDLE	hResInfo;
+    WND 	*wndPtr;
+	BOOL	bRet;
+	printf("PrintDlg(%08X) // Flags=%08X\n", lpPrint->Flags);
+	if (lpPrint->Flags & PD_PRINTSETUP)
+		hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(PRINTSETUPDLG), RT_DIALOG);
+	else
+		hResInfo = FindResource(hSysRes, MAKEINTRESOURCE(PRINTDLG), RT_DIALOG);
+	if (hResInfo == 0) {
+		CommDlgLastError = CDERR_FINDRESFAILURE;
+		return FALSE;
+		}
+	hDlgTmpl = LoadResource(hSysRes, hResInfo);
+	if (hDlgTmpl == 0) {
+		CommDlgLastError = CDERR_LOADRESFAILURE;
+		return FALSE;
+		}
+    wndPtr = WIN_FindWndPtr(lpPrint->hwndOwner);
+	if (lpPrint->Flags & PD_PRINTSETUP)
+		bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl, 
+			lpPrint->hwndOwner, (WNDPROC)PrintSetupDlgProc, (DWORD)lpPrint);
+	else
+		bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl, 
+			lpPrint->hwndOwner, (WNDPROC)PrintDlgProc, (DWORD)lpPrint);
+	return bRet;
+}
+
+
+/***********************************************************************
+ * 				PrintDlgProc			[COMMDLG.21]
+ */
+BOOL PrintDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
+{
+	switch (wMsg) {
+		case WM_INITDIALOG:
+			printf("PrintDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+			ShowWindow(hWnd, SW_SHOWNORMAL);
+			return (TRUE);
+
+		case WM_COMMAND:
+			switch (wParam) {
+				case IDOK:
+					EndDialog(hWnd, TRUE);
+					return(TRUE);
+				case IDCANCEL:
+					EndDialog(hWnd, FALSE);
+					return(TRUE);
+				}
+			return(FALSE);
+		}
+	return FALSE;
+}
+
+
+/***********************************************************************
+ * 				PrintSetupDlgProc		[COMMDLG.22]
+ */
+BOOL PrintSetupDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
+{
+	switch (wMsg) {
+		case WM_INITDIALOG:
+			printf("PrintSetupDlgProc // WM_INITDIALOG lParam=%08X\n", lParam);
+			ShowWindow(hWnd, SW_SHOWNORMAL);
+			return (TRUE);
+
+		case WM_COMMAND:
+			switch (wParam) {
+				case IDOK:
+					EndDialog(hWnd, TRUE);
+					return(TRUE);
+				case IDCANCEL:
+					EndDialog(hWnd, FALSE);
+					return(TRUE);
+				}
+			return(FALSE);
+		}
+	return FALSE;
+}
+
+
+/***********************************************************************
+ * 				CommDlgExtendError		[COMMDLG.26]
+ */
+DWORD CommDlgExtendError(void)
+{
+	return CommDlgLastError;
+}
+
+
+/***********************************************************************
+ * 				GetFileTitle			[COMMDLG.27]
+ */
+int GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf)
+{
+	int		i, len;
+	printf("GetFileTitle(%08X %08X %d); \n", lpFile, lpTitle, cbBuf);
+	if (lpFile == NULL || lpTitle == NULL) return -1;
+	len = strlen(lpFile);
+	if (len == 0) return -1;
+	if (strchr(lpFile, '*') != NULL) return -1;
+	if (strchr(lpFile, '[') != NULL) return -1;
+	if (strchr(lpFile, ']') != NULL) return -1;
+	len--;
+	if (lpFile[len] == '/' || lpFile[len] == '\\' || lpFile[len] == ':') return -1;
+	for (i = len; i >= 0; i--) {
+		if (lpFile[i] == '/' || 
+			lpFile[i] == '\\' || 
+			lpFile[i] == ':') {
+			i++;
+			break;
+			}
+		}
+	printf("\n---> '%s' ", &lpFile[i]);
+	len = min(cbBuf, strlen(&lpFile[i]) + 1);
+	strncpy(lpTitle, &lpFile[i], len + 1);
+	if (len != cbBuf)
+		return len;
+	else
+		return 0;
+}
+
+
+
diff --git a/misc/dos_fs.c b/misc/dos_fs.c
index 29a68ed..f6ba92f 100644
--- a/misc/dos_fs.c
+++ b/misc/dos_fs.c
@@ -382,9 +382,7 @@
 
 	ToUnix(rootdir);
 
-#ifdef DEBUG
-	fprintf(stderr,"%s\n", rootdir);
-#endif
+	dprintf_dosfs(stddeb,"%s\n", rootdir);
 
 }
 
@@ -440,7 +438,7 @@
 { 
 	/* should return 'WINDOWS\SYSTEM' */
 
-	char temp[256];
+	static char temp[256];
 
 	if (!DOS_ValidDrive(drive)) 
 		return 0;
diff --git a/misc/exec.c b/misc/exec.c
index 31d3570..920cb27 100644
--- a/misc/exec.c
+++ b/misc/exec.c
@@ -129,14 +129,14 @@
 
 	dprintf_exec(stddeb,"StartNewTask() before CallToInit16() !\n");
     rv = CallToInit16(cs_reg << 16 | ip_reg, ss_reg << 16 | sp_reg, ds_reg);
-    printf ("rv = %x\n", rv);
+    dprintf_exec(stddeb,"rv = %x\n", rv);
 
 }
 
 #else
 void StartNewTask (HINSTANCE hInst)
 {
-    printf ("Not yet implemented\n");
+    fprintf(stdnimp, "StartNewTask(): Not yet implemented\n");
 }
 #endif
 
diff --git a/misc/file.c b/misc/file.c
index 5a9d86a..2320a8b 100644
--- a/misc/file.c
+++ b/misc/file.c
@@ -186,12 +186,14 @@
 	  if ( (!stat(GetUnixFileName(filename), &s)) && (S_ISREG(s.st_mode)) )
 	    break;
 	  GetWindowsDirectory (filename,MAX_PATH);
-	  if (filename[1] != ':') strcat(filename,"\\");
+	  if ((!filename[0])||(filename[strlen(filename)-1]!='\\'))
+            strcat(filename, "\\");
 	  strcat (filename, lpFileName);
 	  if ( (!stat(GetUnixFileName(filename), &s)) && (S_ISREG(s.st_mode)) )
 	    break;
 	  GetSystemDirectory (filename,MAX_PATH);
-	  if (filename[1] != ':') strcat(filename,"\\");
+	  if ((!filename[0])||(filename[strlen(filename)-1]!='\\'))
+ 	    strcat(filename, "\\");
 	  strcat (filename, lpFileName);
 	  if ( (!stat(GetUnixFileName(filename), &s)) && (S_ISREG(s.st_mode)) )
 	    break;
diff --git a/misc/main.c b/misc/main.c
index 5c2a1a4..3b9250e 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -201,6 +201,56 @@
 }
 
 /***********************************************************************
+ *                    ParseDebugOptions
+ *
+ *  Turns specific debug messages on or off, according to "options".
+ *  Returns TRUE if parsing was successfull 
+ */
+#ifdef DEBUG_RUNTIME
+
+BOOL ParseDebugOptions(char *options)
+{
+  int l;
+  if (strlen(options)<3)
+    return FALSE;
+  do
+  {
+    if ((*options!='+')&&(*options!='-'))
+      return FALSE;
+    if (strchr(options,','))
+      l=strchr(options,',')-options;
+    else
+      l=strlen(options);
+    if (!strncasecmp(options+1,"all",l-1))
+      {
+	int i;
+	for (i=0;i<sizeof(debug_msg_enabled)/sizeof(short);i++)
+	  debug_msg_enabled[i]=(*options=='+');
+      }
+    else
+      {
+	int i;
+	for (i=0;i<sizeof(debug_msg_enabled)/sizeof(short);i++)
+	  if (debug_msg_name && (!strncasecmp(options+1,debug_msg_name[i],l-1)))
+	    {
+	      debug_msg_enabled[i]=(*options=='+');
+	      break;
+	    }
+	if (i==sizeof(debug_msg_enabled)/sizeof(short))
+	  return FALSE;
+      }
+    options+=l;
+  }
+  while((*options==',')&&(*(++options)));
+  if (*options)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+#endif
+
+/***********************************************************************
  *           MAIN_ParseOptions
  *
  * Parse command line options and open display.
@@ -209,7 +259,7 @@
 {
     char *display_name;
     XrmValue value;
-    XrmDatabase db = NULL;
+    XrmDatabase db = XrmGetFileDatabase("/usr/lib/X11/app-defaults/Wine");
 
       /* Parse command line */
     Options.programName = MAIN_GetProgramName( *argc, argv );
@@ -254,6 +304,10 @@
 	screenDepth = atoi( value.addr );
     if (MAIN_GetResource( db, ".desktop", &value))
 	Options.desktopGeometry = value.addr;
+#ifdef DEBUG_RUNTIME
+    if (MAIN_GetResource( db, ".debugoptions", &value))
+	ParseDebugOptions((char*)value.addr);
+#endif
     if (MAIN_GetResource( db, ".debugmsg", &value))
       {
 #ifndef DEBUG_RUNTIME
@@ -262,38 +316,19 @@
 	  argv[0]);
 	exit(1);
 #else
-	char *p=(char*)value.addr;
-	if (strlen(p)<3)
-	  goto msgerror;
-	if ((*p!='+')&&(*p!='-'))
-	  goto msgerror;
-	if (!strcasecmp(p+1,"all"))
+	if (ParseDebugOptions((char*)value.addr)==FALSE)
 	  {
 	    int i;
-	    for (i=0;i<sizeof(debug_msg_enabled)/sizeof(short);i++)
-	      debug_msg_enabled[i]=(*p=='+');
-	  }
-	else
-	  {
-	    int i;
-	    for (i=0;i<sizeof(debug_msg_enabled)/sizeof(short);i++)
-	      if (debug_msg_name && (!strcasecmp(p+1,debug_msg_name[i])))
-		{
-		  debug_msg_enabled[i]=(*p=='+');
-		  break;
-		}
-	    if (i==sizeof(debug_msg_enabled)/sizeof(short))
-	      {
-	      msgerror:
-		fprintf(stderr,"%s: Syntax: -debugmsg +xxx  or -debugmsg -xxx  with xxx one of\n",argv[0]);
-		fprintf(stderr,"%-9s ","all");
-		for(i=0;i<sizeof(debug_msg_enabled)/sizeof(short);i++)
-		  if(debug_msg_name[i])
-		      fprintf(stderr,"%-9s%c",debug_msg_name[i],
+	    fprintf(stderr,"%s: Syntax: -debugmsg +xxx,...  or -debugmsg -xxx,...\n",argv[0]);
+	    fprintf(stderr,"Example: -debugmsg +all,-heap    turn on all messages except heap messages\n");
+	    fprintf(stderr,"Available message types:\n");
+	    fprintf(stderr,"%-9s ","all");
+	    for(i=0;i<sizeof(debug_msg_enabled)/sizeof(short);i++)
+	      if(debug_msg_name[i])
+		fprintf(stderr,"%-9s%c",debug_msg_name[i],
 			(((i+2)%8==0)?'\n':' '));
-		fprintf(stderr,"\n\n");
-		exit(1);
-	      }
+	    fprintf(stderr,"\n\n");
+	    exit(1);
 	  }
 #endif
       }
@@ -435,6 +470,7 @@
     MAIN_SaveSetup();
     DOS_InitFS();
     Comm_Init();
+    Font_Init();
 #ifndef WINELIB
     INT21_Init();
 #endif
diff --git a/misc/mcianim.c b/misc/mcianim.c
new file mode 100644
index 0000000..8a850f9
--- /dev/null
+++ b/misc/mcianim.c
@@ -0,0 +1,679 @@
+/*
+ * Sample MCI ANIMATION Wine Driver for Linux
+ *
+ * Copyright 1994 Martin Ayotte
+ */
+static char Copyright[] = "Copyright  Martin Ayotte, 1994";
+
+#ifndef WINELIB
+#define BUILTIN_MMSYSTEM
+#endif 
+
+#ifdef BUILTIN_MMSYSTEM
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include "win.h"
+#include "user.h"
+#include "driver.h"
+#include "mmsystem.h"
+#include "stddebug.h"
+/* #define DEBUG_ANIM /* */
+/* #undef  DEBUG_ANIM /* */
+#include "debug.h"
+
+#define MAX_ANIMDRV 		2
+
+#define ANIMFRAMES_PERSEC 	30
+#define ANIMFRAMES_PERMIN 	1800
+#define SECONDS_PERMIN	 	60
+
+#ifdef linux
+typedef struct {
+    int     nUseCount;          /* Incremented for each shared open */
+    BOOL    fShareable;         /* TRUE if first open was shareable */
+    WORD    wNotifyDeviceID;    /* MCI device ID with a pending notification */
+    HANDLE  hCallback;          /* Callback handle for pending notification */
+	MCI_OPEN_PARMS openParms;
+	DWORD	dwTimeFormat;
+	int		mode;
+	UINT	nCurTrack;
+	DWORD	dwCurFrame;
+	UINT	nTracks;
+	DWORD	dwTotalLen;
+	LPDWORD	lpdwTrackLen;
+	LPDWORD	lpdwTrackPos;
+	} LINUX_ANIM;
+
+static LINUX_ANIM	AnimDev[MAX_ANIMDRV];
+#endif
+
+
+DWORD ANIM_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame);
+DWORD ANIM_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime);
+
+
+/*-----------------------------------------------------------------------*/
+
+/**************************************************************************
+* 				ANIM_mciOpen			[internal]
+*/
+DWORD ANIM_mciOpen(DWORD dwFlags, LPMCI_OPEN_PARMS lpParms)
+{
+#ifdef linux
+	UINT	wDevID;
+	int		cdrom;
+	dprintf_mcianim(stddeb,"ANIM_mciOpen(%08X, %08X);\n", 
+						dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	wDevID = lpParms->wDeviceID;
+	if (AnimDev[wDevID].nUseCount > 0) {
+		/* The driver already open on this channel */
+		/* If the driver was opened shareable before and this open specifies */
+		/* shareable then increment the use count */
+		if (AnimDev[wDevID].fShareable && (dwFlags & MCI_OPEN_SHAREABLE))
+			++AnimDev[wDevID].nUseCount;
+		else
+			return MCIERR_MUST_USE_SHAREABLE;
+		}
+	else {
+		AnimDev[wDevID].nUseCount = 1;
+		AnimDev[wDevID].fShareable = dwFlags & MCI_OPEN_SHAREABLE;
+		}
+    if (dwFlags & MCI_OPEN_ELEMENT) {
+        dprintf_mcianim(stddeb,"ANIM_mciOpen // MCI_OPEN_ELEMENT !\n");
+/*		return MCIERR_NO_ELEMENT_ALLOWED; */
+		}
+	memcpy(&AnimDev[wDevID].openParms, lpParms, sizeof(MCI_OPEN_PARMS));
+	AnimDev[wDevID].wNotifyDeviceID = lpParms->wDeviceID;
+	AnimDev[wDevID].mode = 0;
+	AnimDev[wDevID].dwTimeFormat = MCI_FORMAT_TMSF;
+	AnimDev[wDevID].nCurTrack = 0;
+	AnimDev[wDevID].nTracks = 0;
+	AnimDev[wDevID].dwTotalLen = 0;
+	AnimDev[wDevID].lpdwTrackLen = NULL;
+	AnimDev[wDevID].lpdwTrackPos = NULL;
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciOpen // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+ 	return 0;
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciClose		[internal]
+*/
+DWORD ANIM_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciClose(%u, %08X, %08X);\n", 
+				wDevID, dwParam, lpParms);
+	if (AnimDev[wDevID].lpdwTrackLen != NULL) free(AnimDev[wDevID].lpdwTrackLen);
+	if (AnimDev[wDevID].lpdwTrackPos != NULL) free(AnimDev[wDevID].lpdwTrackPos);
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciGetDevCaps	[internal]
+*/
+DWORD ANIM_mciGetDevCaps(UINT wDevID, DWORD dwFlags, 
+						LPMCI_GETDEVCAPS_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciGetDevCaps(%u, %08X, %08X);\n", 
+				wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	if (dwFlags & MCI_GETDEVCAPS_ITEM) {
+        	dprintf_mcianim(stddeb,
+		"ANIM_mciGetDevCaps // MCI_GETDEVCAPS_ITEM dwItem=%08X;\n",
+				lpParms->dwItem);
+		switch(lpParms->dwItem) {
+			case MCI_GETDEVCAPS_CAN_RECORD:
+				lpParms->dwReturn = FALSE;
+				break;
+			case MCI_GETDEVCAPS_HAS_AUDIO:
+				lpParms->dwReturn = FALSE;
+				break;
+			case MCI_GETDEVCAPS_HAS_VIDEO:
+				lpParms->dwReturn = FALSE;
+				break;
+			case MCI_GETDEVCAPS_DEVICE_TYPE:
+				lpParms->dwReturn = MCI_DEVTYPE_ANIMATION;
+				break;
+			case MCI_GETDEVCAPS_USES_FILES:
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_GETDEVCAPS_COMPOUND_DEVICE:
+				lpParms->dwReturn = FALSE;
+				break;
+			case MCI_GETDEVCAPS_CAN_EJECT:
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_GETDEVCAPS_CAN_PLAY:
+				lpParms->dwReturn = FALSE;
+				break;
+			case MCI_GETDEVCAPS_CAN_SAVE:
+				lpParms->dwReturn = FALSE;
+				break;
+			default:
+				return MCIERR_UNRECOGNIZED_COMMAND;
+			}
+		}
+	dprintf_mcianim(stddeb,
+		"ANIM_mciGetDevCaps // lpParms->dwReturn=%08X;\n", 
+		lpParms->dwReturn);
+ 	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciInfo			[internal]
+*/
+DWORD ANIM_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciInfo(%u, %08X, %08X);\n", 
+		wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	lpParms->lpstrReturn = NULL;
+	switch(dwFlags) {
+		case MCI_INFO_PRODUCT:
+			lpParms->lpstrReturn = "Linux ANIMATION 0.5";
+			break;
+		case MCI_INFO_FILE:
+			lpParms->lpstrReturn = 
+				(LPSTR)AnimDev[wDevID].openParms.lpstrElementName;
+			break;
+		case MCI_ANIM_INFO_TEXT:
+			lpParms->lpstrReturn = "Animation Window";
+			break;
+		default:
+			return MCIERR_UNRECOGNIZED_COMMAND;
+		}
+	if (lpParms->lpstrReturn != NULL)
+		lpParms->dwRetSize = strlen(lpParms->lpstrReturn);
+	else
+		lpParms->dwRetSize = 0;
+ 	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciStatus		[internal]
+*/
+DWORD ANIM_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciStatus(%u, %08X, %08X);\n", 
+			wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciStatus // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+	if (dwFlags & MCI_STATUS_ITEM) {
+		switch(lpParms->dwItem) {
+			case MCI_STATUS_CURRENT_TRACK:
+				lpParms->dwReturn = AnimDev[wDevID].nCurTrack;
+				dprintf_mcianim(stddeb,"ANIM_mciStatus // CURRENT_TRACK=%u!\n", lpParms->dwReturn);
+			 	return 0;
+			case MCI_STATUS_LENGTH:
+				if (dwFlags & MCI_TRACK) {
+					dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_TRACK #%u LENGTH=??? !\n",
+														lpParms->dwTrack);
+					if (lpParms->dwTrack > AnimDev[wDevID].nTracks)
+						return MCIERR_OUTOFRANGE;
+					lpParms->dwReturn = AnimDev[wDevID].lpdwTrackLen[lpParms->dwTrack];
+					}
+				else
+					lpParms->dwReturn = AnimDev[wDevID].dwTotalLen;
+				lpParms->dwReturn = ANIM_CalcTime(wDevID, 
+					AnimDev[wDevID].dwTimeFormat, lpParms->dwReturn);
+                		dprintf_mcianim(stddeb,"ANIM_mciStatus // LENGTH=%u !\n", lpParms->dwReturn);
+			 	return 0;
+			case MCI_STATUS_MODE:
+				lpParms->dwReturn = AnimDev[wDevID].mode;
+				dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_MODE=%08X !\n",
+												lpParms->dwReturn);
+			 	return 0;
+			case MCI_STATUS_MEDIA_PRESENT:
+				lpParms->dwReturn = TRUE;
+				dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_MEDIA_PRESENT !\n");
+			 	return 0;
+			case MCI_STATUS_NUMBER_OF_TRACKS:
+				lpParms->dwReturn = 1;
+				dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_NUMBER_OF_TRACKS = %u !\n",
+											lpParms->dwReturn);
+				if (lpParms->dwReturn == (WORD)-1) return MCIERR_INTERNAL;
+			 	return 0;
+			case MCI_STATUS_POSITION:
+				lpParms->dwReturn = AnimDev[wDevID].dwCurFrame;
+				if (dwFlags & MCI_STATUS_START) {
+					lpParms->dwReturn = 0;
+					dprintf_mcianim(stddeb,"CDAUDIO_mciStatus // get MCI_STATUS_START !\n");
+					}
+				if (dwFlags & MCI_TRACK) {
+					if (lpParms->dwTrack > AnimDev[wDevID].nTracks)
+						return MCIERR_OUTOFRANGE;
+					lpParms->dwReturn = AnimDev[wDevID].lpdwTrackPos[lpParms->dwTrack - 1];
+					dprintf_mcianim(stddeb,"ANIM_mciStatus // get MCI_TRACK #%u !\n", lpParms->dwTrack);
+					}
+				lpParms->dwReturn = ANIM_CalcTime(wDevID, 
+					AnimDev[wDevID].dwTimeFormat, lpParms->dwReturn);
+					dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_POSITION=%08X !\n",
+														lpParms->dwReturn);
+			 	return 0;
+			case MCI_STATUS_READY:
+				dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_READY !\n");
+				lpParms->dwReturn = TRUE;
+			 	return 0;
+			case MCI_STATUS_TIME_FORMAT:
+				dprintf_mcianim(stddeb,"ANIM_mciStatus // MCI_STATUS_TIME_FORMAT !\n");
+				lpParms->dwReturn = MCI_FORMAT_MILLISECONDS;
+			 	return 0;
+			default:
+				fprintf(stderr,"ANIM_mciStatus // unknown command %04X !\n", lpParms->dwItem);
+				return MCIERR_UNRECOGNIZED_COMMAND;
+			}
+		}
+    fprintf(stderr,"ANIM_mciStatus // not MCI_STATUS_ITEM !\n");
+ 	return 0;
+#else
+	return MMSYSERR_NOTENABLED;
+#endif
+}
+
+
+/**************************************************************************
+* 				ANIM_CalcTime			[internal]
+*/
+DWORD ANIM_CalcTime(UINT wDevID, DWORD dwFormatType, DWORD dwFrame)
+{
+	DWORD	dwTime = 0;
+#ifdef linux
+	UINT	wTrack;
+	UINT	wMinutes;
+	UINT	wSeconds;
+	UINT	wFrames;
+	dprintf_mcianim(stddeb,"ANIM_CalcTime(%u, %08X, %lu);\n", 
+			wDevID, dwFormatType, dwFrame);
+TryAGAIN:
+	switch (dwFormatType) {
+		case MCI_FORMAT_MILLISECONDS:
+			dwTime = dwFrame / ANIMFRAMES_PERSEC * 1000;
+			dprintf_mcianim(stddeb,
+				"ANIM_CalcTime // MILLISECONDS %u\n", dwTime);
+			break;
+		case MCI_FORMAT_MSF:
+			wMinutes = dwFrame / ANIMFRAMES_PERMIN;
+			wSeconds = (dwFrame - ANIMFRAMES_PERMIN * wMinutes) / ANIMFRAMES_PERSEC;
+			wFrames = dwFrame - ANIMFRAMES_PERMIN * wMinutes - 
+								ANIMFRAMES_PERSEC * wSeconds;
+			dwTime = MCI_MAKE_MSF(wMinutes, wSeconds, wFrames);
+			dprintf_mcianim(stddeb,"ANIM_CalcTime // MSF %02u:%02u:%02u -> dwTime=%u\n",
+								wMinutes, wSeconds, wFrames, dwTime);
+			break;
+		case MCI_FORMAT_TMSF:
+			for (wTrack = 0; wTrack < AnimDev[wDevID].nTracks; wTrack++) {
+/*				dwTime += AnimDev[wDevID].lpdwTrackLen[wTrack - 1];
+				printf("Adding trk#%u curpos=%u \n", dwTime);
+				if (dwTime >= dwFrame) break; */
+				if (AnimDev[wDevID].lpdwTrackPos[wTrack - 1] >= dwFrame) break;
+				}
+			wMinutes = dwFrame / ANIMFRAMES_PERMIN;
+			wSeconds = (dwFrame - ANIMFRAMES_PERMIN * wMinutes) / ANIMFRAMES_PERSEC;
+			wFrames = dwFrame - ANIMFRAMES_PERMIN * wMinutes - 
+								ANIMFRAMES_PERSEC * wSeconds;
+			dwTime = MCI_MAKE_TMSF(wTrack, wMinutes, wSeconds, wFrames);
+			dprintf_mcianim(stddeb,
+				"ANIM_CalcTime // %02u-%02u:%02u:%02u\n",
+				wTrack, wMinutes, wSeconds, wFrames);
+			break;
+		default:
+			/* unknown format ! force TMSF ! ... */
+			dwFormatType = MCI_FORMAT_TMSF;
+			goto TryAGAIN;
+		}
+#endif
+	return dwTime;
+}
+
+
+/**************************************************************************
+* 				ANIM_CalcFrame			[internal]
+*/
+DWORD ANIM_CalcFrame(UINT wDevID, DWORD dwFormatType, DWORD dwTime)
+{
+	DWORD	dwFrame = 0;
+#ifdef linux
+	UINT	wTrack;
+	dprintf_mcianim(stddeb,"ANIM_CalcFrame(%u, %08X, %lu);\n", 
+			wDevID, dwFormatType, dwTime);
+TryAGAIN:
+	switch (dwFormatType) {
+		case MCI_FORMAT_MILLISECONDS:
+			dwFrame = dwTime * ANIMFRAMES_PERSEC / 1000;
+			dprintf_mcianim(stddeb,
+				"ANIM_CalcFrame // MILLISECONDS %u\n", dwFrame);
+			break;
+		case MCI_FORMAT_MSF:
+			dprintf_mcianim(stddeb,
+				"ANIM_CalcFrame // MSF %02u:%02u:%02u\n",
+				MCI_MSF_MINUTE(dwTime), MCI_MSF_SECOND(dwTime), 
+				MCI_MSF_FRAME(dwTime));
+			dwFrame += ANIMFRAMES_PERMIN * MCI_MSF_MINUTE(dwTime);
+			dwFrame += ANIMFRAMES_PERSEC * MCI_MSF_SECOND(dwTime);
+			dwFrame += MCI_MSF_FRAME(dwTime);
+			break;
+		case MCI_FORMAT_TMSF:
+			wTrack = MCI_TMSF_TRACK(dwTime);
+			dprintf_mcianim(stddeb,
+				"ANIM_CalcFrame // TMSF %02u-%02u:%02u:%02u\n",
+				MCI_TMSF_TRACK(dwTime), MCI_TMSF_MINUTE(dwTime), 
+				MCI_TMSF_SECOND(dwTime), MCI_TMSF_FRAME(dwTime));
+			dprintf_mcianim(stddeb,
+				"ANIM_CalcFrame // TMSF trackpos[%u]=%u\n",
+				wTrack, AnimDev[wDevID].lpdwTrackPos[wTrack - 1]);
+			dwFrame = AnimDev[wDevID].lpdwTrackPos[wTrack - 1];
+			dwFrame += ANIMFRAMES_PERMIN * MCI_TMSF_MINUTE(dwTime);
+			dwFrame += ANIMFRAMES_PERSEC * MCI_TMSF_SECOND(dwTime);
+			dwFrame += MCI_TMSF_FRAME(dwTime);
+			break;
+		default:
+			/* unknown format ! force TMSF ! ... */
+			dwFormatType = MCI_FORMAT_TMSF;
+			goto TryAGAIN;
+		}
+#endif
+	return dwFrame;
+}
+
+
+
+/**************************************************************************
+* 				ANIM_mciPlay			[internal]
+*/
+DWORD ANIM_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
+{
+#ifdef linux
+	int 	start, end;
+	dprintf_mcianim(stddeb,"ANIM_mciPlay(%u, %08X, %08X);\n", 
+		wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	start = 0; 		end = AnimDev[wDevID].dwTotalLen;
+	AnimDev[wDevID].nCurTrack = 1;
+	if (dwFlags & MCI_FROM) {
+		start = ANIM_CalcFrame(wDevID, 
+			AnimDev[wDevID].dwTimeFormat, lpParms->dwFrom); 
+        dprintf_mcianim(stddeb,"ANIM_mciPlay // MCI_FROM=%08X -> %u \n",
+				lpParms->dwFrom, start);
+		}
+	if (dwFlags & MCI_TO) {
+		end = ANIM_CalcFrame(wDevID, 
+			AnimDev[wDevID].dwTimeFormat, lpParms->dwTo);
+        	dprintf_mcianim(stddeb,
+			"ANIM_mciPlay // MCI_TO=%08X -> %u \n",
+			lpParms->dwTo, end);
+		}
+	AnimDev[wDevID].mode = MCI_MODE_PLAY;
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciPlay // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+	return 0;
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciStop			[internal]
+*/
+DWORD ANIM_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciStop(%u, %08X, %08X);\n", 
+			wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	AnimDev[wDevID].mode = MCI_MODE_STOP;
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciStop // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+ 	return 0;
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciPause		[internal]
+*/
+DWORD ANIM_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciPause(%u, %08X, %08X);\n", 
+		wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	AnimDev[wDevID].mode = MCI_MODE_PAUSE;
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciPause // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+	return 0;
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciResume		[internal]
+*/
+DWORD ANIM_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciResume(%u, %08X, %08X);\n", 
+		wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	AnimDev[wDevID].mode = MCI_MODE_STOP;
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciResume // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+	return 0;
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+/**************************************************************************
+* 				ANIM_mciSeek			[internal]
+*/
+DWORD ANIM_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
+{
+#ifdef linux
+	DWORD	dwRet;
+	MCI_PLAY_PARMS PlayParms;
+	dprintf_mcianim(stddeb,"ANIM_mciSeek(%u, %08X, %08X);\n", 
+		wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	AnimDev[wDevID].mode = MCI_MODE_SEEK;
+	switch(dwFlags) {
+		case MCI_SEEK_TO_START:
+			PlayParms.dwFrom = 0;
+			break;
+		case MCI_SEEK_TO_END:
+			PlayParms.dwFrom = AnimDev[wDevID].dwTotalLen;
+			break;
+		case MCI_TO:
+			PlayParms.dwFrom = lpParms->dwTo;
+			break;
+		}
+	dwRet = ANIM_mciPlay(wDevID, MCI_WAIT | MCI_FROM, &PlayParms);
+	if (dwRet != 0) return dwRet;
+	dwRet = ANIM_mciStop(wDevID, MCI_WAIT, (LPMCI_GENERIC_PARMS)&PlayParms);
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciSeek // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+	return dwRet;
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+
+/**************************************************************************
+* 				ANIM_mciSet			[internal]
+*/
+DWORD ANIM_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
+{
+#ifdef linux
+	dprintf_mcianim(stddeb,"ANIM_mciSet(%u, %08X, %08X);\n", 
+		wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+/*
+	printf("ANIM_mciSet // dwTimeFormat=%08X\n", lpParms->dwTimeFormat);
+	printf("ANIM_mciSet // dwAudio=%08X\n", lpParms->dwAudio);
+*/
+	if (dwFlags & MCI_SET_TIME_FORMAT) {
+		switch (lpParms->dwTimeFormat) {
+			case MCI_FORMAT_MILLISECONDS:
+				dprintf_mcianim(stddeb,
+					"ANIM_mciSet // MCI_FORMAT_MILLISECONDS !\n");
+				break;
+			case MCI_FORMAT_MSF:
+				dprintf_mcianim(stddeb,"ANIM_mciSet // MCI_FORMAT_MSF !\n");
+				break;
+			case MCI_FORMAT_TMSF:
+				dprintf_mcianim(stddeb,"ANIM_mciSet // MCI_FORMAT_TMSF !\n");
+				break;
+			default:
+				fprintf(stderr,"ANIM_mciSet // bad time format !\n");
+				return MCIERR_BAD_TIME_FORMAT;
+			}
+		AnimDev[wDevID].dwTimeFormat = lpParms->dwTimeFormat;
+		}
+	if (dwFlags & MCI_SET_VIDEO) return MCIERR_UNSUPPORTED_FUNCTION;
+	if (dwFlags & MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION;
+	if (dwFlags & MCI_SET_OFF) return MCIERR_UNSUPPORTED_FUNCTION;
+	if (dwFlags & MCI_NOTIFY) {
+		dprintf_mcianim(stddeb,
+			"ANIM_mciSet // MCI_NOTIFY_SUCCESSFUL %08X !\n", 
+			lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			AnimDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+	return 0;
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+
+/**************************************************************************
+* 				ANIM_DriverProc		[sample driver]
+*/
+LRESULT ANIM_DriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg, 
+							DWORD dwParam1, DWORD dwParam2)
+{
+#ifdef linux
+	switch(wMsg) {
+		case DRV_LOAD:
+			return (LRESULT)1L;
+		case DRV_FREE:
+			return (LRESULT)1L;
+		case DRV_OPEN:
+		case MCI_OPEN_DRIVER:
+		case MCI_OPEN:
+			return ANIM_mciOpen(dwParam1, (LPMCI_OPEN_PARMS)dwParam2); 
+		case DRV_CLOSE:
+		case MCI_CLOSE_DRIVER:
+		case MCI_CLOSE:
+			return ANIM_mciClose(dwDevID, dwParam1, 
+					(LPMCI_GENERIC_PARMS)dwParam2);
+		case DRV_ENABLE:
+			return (LRESULT)1L;
+		case DRV_DISABLE:
+			return (LRESULT)1L;
+		case DRV_QUERYCONFIGURE:
+			return (LRESULT)1L;
+		case DRV_CONFIGURE:
+			MessageBox((HWND)NULL, "Sample MultiMedia Linux Driver !", 
+								"MMLinux Driver", MB_OK);
+			return (LRESULT)1L;
+		case DRV_INSTALL:
+			return (LRESULT)DRVCNF_RESTART;
+		case DRV_REMOVE:
+			return (LRESULT)DRVCNF_RESTART;
+		case MCI_GETDEVCAPS:
+			return ANIM_mciGetDevCaps(dwDevID, dwParam1, 
+					(LPMCI_GETDEVCAPS_PARMS)dwParam2);
+		case MCI_INFO:
+			return ANIM_mciInfo(dwDevID, dwParam1, 
+						(LPMCI_INFO_PARMS)dwParam2);
+		case MCI_STATUS:
+			return ANIM_mciStatus(dwDevID, dwParam1, 
+						(LPMCI_STATUS_PARMS)dwParam2);
+		case MCI_SET:
+			return ANIM_mciSet(dwDevID, dwParam1, 
+						(LPMCI_SET_PARMS)dwParam2);
+		case MCI_PLAY:
+			return ANIM_mciPlay(dwDevID, dwParam1, 
+						(LPMCI_PLAY_PARMS)dwParam2);
+		case MCI_STOP:
+			return ANIM_mciStop(dwDevID, dwParam1, 
+					(LPMCI_GENERIC_PARMS)dwParam2);
+		case MCI_PAUSE:
+			return ANIM_mciPause(dwDevID, dwParam1, 
+					(LPMCI_GENERIC_PARMS)dwParam2);
+		case MCI_RESUME:
+			return ANIM_mciResume(dwDevID, dwParam1, 
+					(LPMCI_GENERIC_PARMS)dwParam2);
+		case MCI_SEEK:
+			return ANIM_mciSeek(dwDevID, dwParam1, 
+					(LPMCI_SEEK_PARMS)dwParam2);
+		default:
+			return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+		}
+#else
+	return MCIERR_HARDWARE;
+#endif
+}
+
+
+/*-----------------------------------------------------------------------*/
+
+#endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/misc/mcicda.c b/misc/mcicda.c
index 213ebff..de2a3d8 100644
--- a/misc/mcicda.c
+++ b/misc/mcicda.c
@@ -93,7 +93,7 @@
 	wDevID = lpParms->wDeviceID;
 	if (CDADev[wDevID].nUseCount > 0) {
 		/* The driver already open on this channel */
-		/* If the driver was% op, ened shareable before and this open specifies */
+		/* If the driver was opened shareable before and this open specifies */
 		/* shareable then increment the use count */
 		if (CDADev[wDevID].fShareable && (dwFlags & MCI_OPEN_SHAREABLE))
 			++CDADev[wDevID].nUseCount;
@@ -468,7 +468,7 @@
 }
 
 /**************************************************************************
-* 				CDAUDIO_GetNumberOfTracks		[internal]
+* 				CDAUDIO_GetTracksInfo			[internal]
 */
 BOOL CDAUDIO_GetTracksInfo(UINT wDevID)
 {
@@ -544,7 +544,7 @@
 
 
 /**************************************************************************
-* 				CDAUDIO_GetNumberOfTracks		[internal]
+* 				CDAUDIO_GetCDStatus				[internal]
 */
 BOOL CDAUDIO_GetCDStatus(UINT wDevID)
 {
diff --git a/misc/message.c b/misc/message.c
index 3f766df..5063736 100644
--- a/misc/message.c
+++ b/misc/message.c
@@ -6,7 +6,6 @@
 
 static char Copyright[] = "Copyright Martin Ayotte, 1993";
 
-#define DEBUG_MSGBOX
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -21,7 +20,12 @@
 #include "heap.h"
 #include "win.h"
 #include "texts.h"
- 
+#include "stddebug.h"
+/* #define DEBUG_MSGBOX */
+/* #undef  DEBUG_MSGBOX */ 
+#include "debug.h"
+
+
 /*
  * Defaults for button-texts
  */
@@ -76,17 +80,13 @@
 	wndPtr = WIN_FindWndPtr(hWnd);
 	if (wndPtr == NULL) {
 		hInst = hSysRes;
-#ifdef DEBUG_MSGBOX
-		printf("MessageBox(NULL, %08X='%s', %08X='%s', %04X)\n", 
+		dprintf_msgbox(stddeb,"MessageBox(NULL, %08X='%s', %08X='%s', %04X)\n", 
 									str, str, title, title, type);
-#endif
 		}
 	else {
 		hInst = wndPtr->hInstance;
-#ifdef DEBUG_MSGBOX
-		printf("MessageBox(%04X, %08X='%s', %08X='%s', %04X)\n", 
+		dprintf_msgbox(stddeb,"MessageBox(%04X, %08X='%s', %08X='%s', %04X)\n", 
 							hWnd, str, str, title, title, type);
-#endif
 		}
     lpmb = (LPMSGBOX) malloc(sizeof(MSGBOX));
 	memset(lpmb, 0, sizeof(MSGBOX));
@@ -116,9 +116,7 @@
 	wndClass.hbrBackground   = GetStockObject(WHITE_BRUSH);
 	wndClass.lpszMenuName    = NULL;
 	wndClass.lpszClassName   = "MESSAGEBOX";
-#ifdef DEBUG_MSGBOX
-	printf( "MessageBox // before RegisterClass, '%s' '%s' !\n", str, title);
-#endif
+	dprintf_msgbox(stddeb, "MessageBox // before RegisterClass, '%s' '%s' !\n", str, title);
 	if (!RegisterClass(&wndClass)) {
 		printf("Unable to Register class 'MESSAGEBOX' !\n");
 		if (lpmb != NULL) free(lpmb);
@@ -134,9 +132,7 @@
 		if (lpmb != NULL) free(lpmb);
 		return 0;
 		}
-#ifdef DEBUG_MSGBOX
-	printf( "MessageBox // before Msg Loop !\n");
-#endif
+	dprintf_msgbox(stddeb, "MessageBox // before Msg Loop !\n");
 	while(TRUE) {
 		if (!lpmb->ActiveFlg) break;
 		if (!GetMessage(&msg, (HWND)NULL, 0, 0)) break;
@@ -158,9 +154,7 @@
 	nRet = lpmb->wRetVal;
 	if (lpmb != NULL) free(lpmb);
 	if (!UnregisterClass("MESSAGEBOX", hInst)) return 0;
-#ifdef DEBUG_MSGBOX
-	printf( "MessageBox return %04X !\n", nRet);
-#endif
+	dprintf_msgbox(stddeb, "MessageBox return %04X !\n", nRet);
 	return(nRet);
 }
 
@@ -190,26 +184,17 @@
 	DWORD		OldTextColor;
 	RECT		rect;
 	LPMSGBOX	lpmb;
-	BITMAP		bm;
-	HBITMAP		hBitMap;
-	HDC			hMemDC;
-	HICON		hIcon;
-	HINSTANCE	hInst2;
-	int			x;
+
 	switch(message) {
 	case WM_CREATE:
-#ifdef DEBUG_MSGBOX
-		printf("MessageBox WM_CREATE hWnd=%04X !\n", hWnd);
-#endif
+		dprintf_msgbox(stddeb, "MessageBox WM_CREATE hWnd=%04X !\n", hWnd);
 		wndPtr = WIN_FindWndPtr(hWnd);
 		createStruct = (CREATESTRUCT *)lParam;
 		lpmb = (LPMSGBOX)createStruct->lpCreateParams;
 		if (lpmb == NULL) break;
 		*((LPMSGBOX *)&wndPtr->wExtra[1]) = lpmb;
-#ifdef DEBUG_MSGBOX
-		printf("MessageBox WM_CREATE title='%s' str='%s' !\n", 
+		dprintf_msgbox(stddeb, "MessageBox WM_CREATE title='%s' str='%s' !\n", 
 									lpmb->Title, lpmb->Str);
-#endif
 		GetClientRect(hWnd, &rect);
 		CopyRect(&lpmb->rectStr, &rect);
 		lpmb->rectStr.bottom -= 32;
@@ -295,17 +280,13 @@
 			}
 	    break;
 	case WM_SHOWWINDOW:
-#ifdef DEBUG_MSGBOX
-		printf("MessageBox WM_SHOWWINDOW hWnd=%04X !\n", hWnd);
-#endif
+		dprintf_msgbox(stddeb, "MessageBox WM_SHOWWINDOW hWnd=%04X !\n", hWnd);
 		if (!(wParam == 0 && lParam == 0L)) {
 			InvalidateRect(hWnd, NULL, TRUE);
 			}
 	    break;
 	case WM_PAINT:
-#ifdef DEBUG_MSGBOX
-		printf("MessageBox WM_PAINT hWnd=%04X !\n", hWnd);
-#endif
+		dprintf_msgbox(stddeb, "MessageBox WM_PAINT hWnd=%04X !\n", hWnd);
 		lpmb = MsgBoxGetStorageHeader(hWnd);
 		if (lpmb == NULL) break;
 		if (!lpmb->ActiveFlg) break;
@@ -328,14 +309,10 @@
 		DrawText(hDC, lpmb->Str, -1, &rect, DT_CENTER | DT_WORDBREAK);
 		SetTextColor(hDC, OldTextColor);
 		EndPaint(hWnd, &ps);
-#ifdef DEBUG_MSGBOX
-		printf("MessageBox End of WM_PAINT !\n");
-#endif
+		dprintf_msgbox(stddeb, "MessageBox End of WM_PAINT !\n");
 		break;
 	case WM_DESTROY:
-#ifdef DEBUG_MSGBOX
-	    printf("MessageBox WM_DESTROY !\n");
-#endif
+	    dprintf_msgbox(stddeb, "MessageBox WM_DESTROY !\n");
 	    ReleaseCapture();
 	    lpmb = MsgBoxGetStorageHeader(hWnd);
 		if (lpmb == NULL) break;
@@ -343,9 +320,7 @@
 	    if (lpmb->hWndYes) DestroyWindow(lpmb->hWndYes);
 	    if (lpmb->hWndNo) DestroyWindow(lpmb->hWndNo);
 	    if (lpmb->hWndCancel) DestroyWindow(lpmb->hWndCancel);
-#ifdef DEBUG_MSGBOX
-	    printf("MessageBox WM_DESTROY end !\n");
-#endif
+	    dprintf_msgbox(stddeb, "MessageBox WM_DESTROY end !\n");
 	    lpmb->ActiveFlg = FALSE;
 	    break;
 	case WM_COMMAND:
@@ -353,9 +328,7 @@
 		if (lpmb == NULL) break;
 	    if (wParam < IDOK || wParam > IDNO) return(0);
 	    lpmb->wRetVal = wParam;
-#ifdef DEBUG_MSGBOX
-	    printf("MessageBox sending WM_CLOSE !\n");
-#endif
+	    dprintf_msgbox(stddeb, "MessageBox sending WM_CLOSE !\n");
 	    PostMessage(hWnd, WM_CLOSE, 0, 0L);
 	    break;
 	case WM_CHAR:
@@ -398,12 +371,10 @@
     HDC  	hDC;
     HDC		hMemDC;
     PAINTSTRUCT ps;
-    int 	OldBackMode;
-    HFONT	hOldFont;
     RECT 	rect;
     BITMAP	bm;
-    int 	X;
     OFSTRUCT	ofstruct;
+    HBITMAP     hbmpOld;
     static LPSTR	ptr;
     static char 	str[256];
     static HBITMAP	hBitMap = 0;
@@ -438,10 +409,11 @@
 	FrameRect(hDC, &rect, GetStockObject(BLACK_BRUSH));
 	InflateRect(&rect, -10, -10);
 	hMemDC = CreateCompatibleDC(hDC);
-	SelectObject(hMemDC, hBitMap);
+	hbmpOld = SelectObject(hMemDC, hBitMap);
 	GetObject(hBitMap, sizeof(BITMAP), (LPSTR)&bm);
 	BitBlt(hDC, rect.left, rect.top, bm.bmWidth, bm.bmHeight, 
 					hMemDC, 0, 0, SRCCOPY);
+        SelectObject( hMemDC, hbmpOld );
 	DeleteDC(hMemDC);
 	EndPaint(hDlg, &ps);
 	return TRUE;
@@ -465,7 +437,7 @@
 		return TRUE;
 	    case IDCANCEL:
 	    case IDOK:
-CloseDLG:	if (hBitMap != 0 ) DeleteObject(hBitMap);
+                if (hBitMap != 0 ) DeleteObject(hBitMap);
 		if (ptr != NULL) free(ptr);
 		EndDialog(hDlg, TRUE);
 		return TRUE;
diff --git a/misc/midi.c b/misc/midi.c
new file mode 100644
index 0000000..cc20a08
--- /dev/null
+++ b/misc/midi.c
@@ -0,0 +1,983 @@
+/*
+ * Sample MIDI Wine Driver for Linux
+ *
+ * Copyright 1994 Martin Ayotte
+ */
+static char Copyright[] = "Copyright  Martin Ayotte, 1994";
+
+#ifndef WINELIB
+#define BUILTIN_MMSYSTEM
+#endif 
+
+#ifdef BUILTIN_MMSYSTEM
+
+#define DEBUG_MCIMIDI
+
+#include "stdio.h"
+#include "win.h"
+#include "user.h"
+#include "driver.h"
+#include "mmsystem.h"
+
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#ifdef linux
+#include <linux/soundcard.h>
+#endif
+
+#ifdef linux
+#define MIDI_DEV "/dev/midi"
+
+#ifdef SOUND_VERSION
+#define IOCTL(a,b,c)		ioctl(a,b,&c)
+#else
+#define IOCTL(a,b,c)		(c = ioctl(a,b,c) )
+#endif
+
+#define MAX_MIDIINDRV 	2
+#define MAX_MIDIOUTDRV 	2
+#define MAX_MCIMIDIDRV 	2
+
+typedef struct {
+	int				unixdev;
+	int				state;
+	DWORD			bufsize;
+	MIDIOPENDESC	midiDesc;
+	WORD			wFlags;
+	MIDIHDR 		lpQueueHdr;
+	DWORD			dwTotalPlayed;
+	} LINUX_MIDIIN;
+
+typedef struct {
+	int				unixdev;
+	int				state;
+	DWORD			bufsize;
+	MIDIOPENDESC	midiDesc;
+	WORD			wFlags;
+	MIDIHDR 		lpQueueHdr;
+	DWORD			dwTotalPlayed;
+	} LINUX_MIDIOUT;
+
+typedef struct {
+	int     nUseCount;          /* Incremented for each shared open */
+	BOOL    fShareable;         /* TRUE if first open was shareable */
+	WORD    wNotifyDeviceID;    /* MCI device ID with a pending notification */
+	HANDLE  hCallback;          /* Callback handle for pending notification */
+	HMMIO	hFile;				/* mmio file handle open as Element		*/
+	MCI_OPEN_PARMS openParms;
+	MIDIHDR		MidiHdr;
+	WORD		dwStatus;
+	} LINUX_MCIMIDI;
+
+static LINUX_MIDIIN		MidiInDev[MAX_MIDIINDRV];
+static LINUX_MIDIOUT	MidiOutDev[MAX_MIDIOUTDRV];
+static LINUX_MCIMIDI	MCIMidiDev[MAX_MCIMIDIDRV];
+#endif
+
+DWORD MIDI_mciOpen(DWORD dwFlags, LPMCI_OPEN_PARMS lpParms);
+DWORD MIDI_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms);
+DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms);
+DWORD MIDI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms);
+DWORD MIDI_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
+DWORD MIDI_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
+DWORD MIDI_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
+DWORD MIDI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms);
+DWORD MIDI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms);
+DWORD MIDI_mciGetDevCaps(UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms);
+DWORD MIDI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms);
+
+
+/**************************************************************************
+* 				MIDI_NotifyClient			[internal]
+*/
+DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg, 
+				DWORD dwParam1, DWORD dwParam2)
+{
+#ifdef linux
+	if (MidiInDev[wDevID].wFlags != DCB_NULL && !DriverCallback(
+		MidiInDev[wDevID].midiDesc.dwCallback, MidiInDev[wDevID].wFlags, 
+		MidiInDev[wDevID].midiDesc.hMidi, wMsg, 
+		MidiInDev[wDevID].midiDesc.dwInstance, dwParam1, dwParam2)) {
+		printf("MIDI_NotifyClient // can't notify client !\n");
+		return MMSYSERR_NOERROR;
+		}
+#else
+	return MMSYSERR_NOTENABLED;
+#endif
+}
+
+
+/**************************************************************************
+* 				AUDIO_DriverProc		[sample driver]
+*/
+LRESULT MIDI_DriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg, 
+						DWORD dwParam1, DWORD dwParam2)
+{
+#ifdef linux
+	switch(wMsg) {
+		case DRV_LOAD:
+			return (LRESULT)1L;
+		case DRV_FREE:
+			return (LRESULT)1L;
+		case DRV_OPEN:
+			return (LRESULT)1L;
+		case DRV_CLOSE:
+			return (LRESULT)1L;
+		case DRV_ENABLE:
+			return (LRESULT)1L;
+		case DRV_DISABLE:
+			return (LRESULT)1L;
+		case DRV_QUERYCONFIGURE:
+			return (LRESULT)1L;
+		case DRV_CONFIGURE:
+			MessageBox((HWND)NULL, "Sample Midi Linux Driver !", 
+								"MMLinux Driver", MB_OK);
+			return (LRESULT)1L;
+		case DRV_INSTALL:
+			return (LRESULT)DRVCNF_RESTART;
+		case DRV_REMOVE:
+			return (LRESULT)DRVCNF_RESTART;
+		case MCI_OPEN_DRIVER:
+		case MCI_OPEN:
+			return MIDI_mciOpen(dwParam1, (LPMCI_OPEN_PARMS)dwParam2);
+		case MCI_CLOSE_DRIVER:
+		case MCI_CLOSE:
+			return MIDI_mciClose(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
+		case MCI_PLAY:
+			return MIDI_mciPlay(dwDevID, dwParam1, (LPMCI_PLAY_PARMS)dwParam2);
+		case MCI_RECORD:
+			return MIDI_mciRecord(dwDevID, dwParam1, (LPMCI_RECORD_PARMS)dwParam2);
+		case MCI_STOP:
+			return MIDI_mciStop(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
+		case MCI_SET:
+			return MIDI_mciSet(dwDevID, dwParam1, (LPMCI_SET_PARMS)dwParam2);
+		case MCI_PAUSE:
+			return MIDI_mciPause(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
+		case MCI_RESUME:
+			return MIDI_mciResume(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
+		case MCI_STATUS:
+			return MIDI_mciStatus(dwDevID, dwParam1, (LPMCI_STATUS_PARMS)dwParam2);
+		case MCI_GETDEVCAPS:
+			return MIDI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
+		case MCI_INFO:
+			return MIDI_mciInfo(dwDevID, dwParam1, (LPMCI_INFO_PARMS)dwParam2);
+		default:
+			return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+		}
+#else
+	return MMSYSERR_NOTENABLED;
+#endif
+}
+
+/**************************************************************************
+* 				MIDI_mciOpen			[internal]	
+*/
+DWORD MIDI_mciOpen(DWORD dwFlags, LPMCI_OPEN_PARMS lpParms)
+{
+#ifdef linux
+	int			hFile;
+	UINT 		wDevID;
+	OFSTRUCT	OFstruct;
+	MIDIOPENDESC 	MidiDesc;
+	DWORD		dwRet;
+	char		str[128];
+	LPSTR		ptr;
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciOpen(%08X, %08X)\n", dwFlags, lpParms);
+#endif
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	wDevID = lpParms->wDeviceID;
+	if (MCIMidiDev[wDevID].nUseCount > 0) {
+		/* The driver already open on this channel */
+		/* If the driver was opened shareable before and this open specifies */
+		/* shareable then increment the use count */
+		if (MCIMidiDev[wDevID].fShareable && (dwFlags & MCI_OPEN_SHAREABLE))
+			++MCIMidiDev[wDevID].nUseCount;
+		else
+			return MCIERR_MUST_USE_SHAREABLE;
+		}
+	else {
+		MCIMidiDev[wDevID].nUseCount = 1;
+		MCIMidiDev[wDevID].fShareable = dwFlags & MCI_OPEN_SHAREABLE;
+		}
+    if (dwFlags & MCI_OPEN_ELEMENT) {
+		printf("MIDI_mciOpen // MCI_OPEN_ELEMENT '%s' !\n", 
+								lpParms->lpstrElementName);
+/*		printf("MIDI_mciOpen // cdw='%s'\n", DOS_GetCurrentDir(DOS_GetDefaultDrive())); */
+		if (strlen(lpParms->lpstrElementName) > 0) {
+			strcpy(str, lpParms->lpstrElementName);
+			AnsiUpper(str);
+			MCIMidiDev[wDevID].hFile = mmioOpen(str, NULL, 
+				MMIO_ALLOCBUF | MMIO_READWRITE | MMIO_EXCLUSIVE);
+			if (MCIMidiDev[wDevID].hFile == 0) {
+				printf("MIDI_mciOpen // can't find file='%s' !\n", str);
+				return MCIERR_FILE_NOT_FOUND;
+				}
+			}
+		else 
+			MCIMidiDev[wDevID].hFile = 0;
+		}
+	printf("MIDI_mciOpen // hFile=%u\n", MCIMidiDev[wDevID].hFile);
+	memcpy(&MCIMidiDev[wDevID].openParms, lpParms, sizeof(MCI_OPEN_PARMS));
+	MCIMidiDev[wDevID].wNotifyDeviceID = lpParms->wDeviceID;
+	MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP;
+	MidiDesc.hMidi = 0;
+	if (MCIMidiDev[wDevID].hFile != 0) {
+		MMCKINFO	mmckInfo;
+		MMCKINFO	ckMainRIFF;
+		if (mmioDescend(MCIMidiDev[wDevID].hFile, &ckMainRIFF, NULL, 0) != 0) {
+			return MCIERR_INTERNAL;
+			}
+#ifdef DEBUG_MCIMIDI
+		printf("MIDI_mciOpen // ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX \n",
+				(LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType,
+				ckMainRIFF.cksize);
+#endif
+		if (ckMainRIFF.ckid != FOURCC_RIFF) return MCIERR_INTERNAL;
+		if (ckMainRIFF.fccType != mmioFOURCC('R', 'M', 'I', 'D') &&
+			ckMainRIFF.fccType != mmioFOURCC('M', 'T', 'h', 'd')) {
+			return MCIERR_INTERNAL;
+			}
+		mmckInfo.ckid = mmioFOURCC('d', 'a', 't', 'a');
+		if (mmioDescend(MCIMidiDev[wDevID].hFile, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK) != 0) {
+			return MCIERR_INTERNAL;
+			}
+#ifdef DEBUG_MCIMIDI
+		printf("MIDI_mciOpen // Chunk Found ckid=%.4s fccType=%.4s cksize=%08lX \n",
+				(LPSTR)&mmckInfo.ckid, (LPSTR)&mmckInfo.fccType,
+				mmckInfo.cksize);
+#endif
+		}
+	dwRet = modMessage(0, MODM_OPEN, 0, (DWORD)&MidiDesc, CALLBACK_NULL);
+	dwRet = midMessage(0, MIDM_OPEN, 0, (DWORD)&MidiDesc, CALLBACK_NULL);
+	return 0;
+#else
+	return MMSYSERR_NOTENABLED;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciClose		[internal]
+*/
+DWORD MIDI_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+	DWORD		dwRet;
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciClose(%u, %08X, %08X);\n", wDevID, dwParam, lpParms);
+#endif
+	if (MCIMidiDev[wDevID].dwStatus != MCI_MODE_STOP) {
+		MIDI_mciStop(wDevID, MCI_WAIT, lpParms);
+		}
+	MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP;
+	MCIMidiDev[wDevID].nUseCount--;
+	if (MCIMidiDev[wDevID].nUseCount == 0) {
+		if (MCIMidiDev[wDevID].hFile != 0) {
+			close(MCIMidiDev[wDevID].hFile);
+			MCIMidiDev[wDevID].hFile = 0;
+			}
+		dwRet = modMessage(0, MODM_CLOSE, 0, 0L, 0L);
+		if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL;
+		dwRet = midMessage(0, MIDM_CLOSE, 0, 0L, 0L);
+		if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL;
+		}
+	return 0;
+#else
+	return 0;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciPlay		[internal]
+*/
+DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
+{
+#ifdef linux
+	int			count;
+	int			start, end;
+	LPMIDIHDR	lpMidiHdr;
+	DWORD		dwRet;
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciPlay(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+#endif
+	if (MCIMidiDev[wDevID].hFile == 0) {
+		printf("MIDI_mciPlay // can't find file='%s' !\n", 
+				MCIMidiDev[wDevID].openParms.lpstrElementName);
+		return MCIERR_FILE_NOT_FOUND;
+		}
+	start = 1; 		end = 99999;
+	if (dwFlags & MCI_FROM) {
+		start = lpParms->dwFrom; 
+		printf("MIDI_mciPlay // MCI_FROM=%d \n", start);
+		}
+	if (dwFlags & MCI_TO) {
+		end = lpParms->dwTo;
+		printf("MIDI_mciPlay // MCI_TO=%d \n", end);
+		}
+/**/
+	if (dwFlags & MCI_NOTIFY) {
+		printf("MIDI_mciPlay // MCI_NOTIFY %08X !\n", lpParms->dwCallback);
+		switch(fork()) {
+			case -1:
+				printf("MIDI_mciPlay // Can't 'fork' process !\n");
+				break;
+			case 0:
+				printf("MIDI_mciPlay // process started ! play in background ...\n");
+				break;
+			default:
+				printf("MIDI_mciPlay // process started ! return to caller...\n");
+				return 0;
+			}
+		}
+/**/
+	lpMidiHdr = &MCIMidiDev[wDevID].MidiHdr;
+	lpMidiHdr->lpData = (LPSTR) malloc(64000);
+	lpMidiHdr->dwBufferLength = 32000;
+	lpMidiHdr->dwUser = 0L;
+	lpMidiHdr->dwFlags = 0L;
+	dwRet = modMessage(0, MODM_PREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR));
+/*	printf("MIDI_mciPlay // after MODM_PREPARE \n"); */
+	MCIMidiDev[wDevID].dwStatus = MCI_MODE_PLAY;
+	while(MCIMidiDev[wDevID].dwStatus != MCI_MODE_STOP) {
+		printf("MIDI_mciPlay // MCIMidiDev[wDevID].dwStatus=%p %d\n",
+			&MCIMidiDev[wDevID].dwStatus, MCIMidiDev[wDevID].dwStatus);
+		count = mmioRead(MCIMidiDev[wDevID].hFile, lpMidiHdr->lpData, lpMidiHdr->dwBufferLength);
+		if (count < 1) break;
+		lpMidiHdr->dwBytesRecorded = count;
+#ifdef DEBUG_MCIMIDI
+		printf("MIDI_mciPlay // before MODM_LONGDATA lpMidiHdr=%08X dwBytesRecorded=%u\n",
+					lpMidiHdr, lpMidiHdr->dwBytesRecorded);
+#endif
+/*		dwRet = modMessage(0, MODM_LONGDATA, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR)); */
+		}
+	dwRet = modMessage(0, MODM_UNPREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR));
+	if (lpMidiHdr->lpData != NULL) {
+		free(lpMidiHdr->lpData);
+		lpMidiHdr->lpData = NULL;
+		}
+	MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP;
+	if (dwFlags & MCI_NOTIFY) {
+#ifdef DEBUG_MCIMIDI
+		printf("MIDI_mciPlay // MCI_NOTIFY_SUCCESSFUL %08X !\n", lpParms->dwCallback);
+#endif
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			MCIMidiDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		exit(1);
+		}
+	return 0;
+#else
+	return MMSYSERR_NOTENABLED;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciRecord			[internal]
+*/
+DWORD MIDI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
+{
+#ifdef linux
+	int			count;
+	int			start, end;
+	LPMIDIHDR	lpMidiHdr;
+	DWORD		dwRet;
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciRecord(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+#endif
+	if (MCIMidiDev[wDevID].hFile == 0) {
+		printf("MIDI_mciRecord // can't find file='%s' !\n", 
+				MCIMidiDev[wDevID].openParms.lpstrElementName);
+		return MCIERR_FILE_NOT_FOUND;
+		}
+	start = 1; 		end = 99999;
+	if (dwFlags & MCI_FROM) {
+		start = lpParms->dwFrom; 
+		printf("MIDI_mciRecord // MCI_FROM=%d \n", start);
+		}
+	if (dwFlags & MCI_TO) {
+		end = lpParms->dwTo;
+		printf("MIDI_mciRecord // MCI_TO=%d \n", end);
+		}
+	lpMidiHdr = &MCIMidiDev[wDevID].MidiHdr;
+	lpMidiHdr->lpData = (LPSTR) malloc(64000);
+	lpMidiHdr->dwBufferLength = 32000;
+	lpMidiHdr->dwUser = 0L;
+	lpMidiHdr->dwFlags = 0L;
+	dwRet = midMessage(0, MIDM_PREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR));
+	printf("MIDI_mciRecord // after MIDM_PREPARE \n");
+	MCIMidiDev[wDevID].dwStatus = MCI_MODE_RECORD;
+	while(MCIMidiDev[wDevID].dwStatus != MCI_MODE_STOP) {
+		printf("MIDI_mciRecord // MCIMidiDev[wDevID].dwStatus=%p %d\n",
+			&MCIMidiDev[wDevID].dwStatus, MCIMidiDev[wDevID].dwStatus);
+		lpMidiHdr->dwBytesRecorded = 0;
+		dwRet = midMessage(0, MIDM_START, 0, 0L, 0L);
+		printf("MIDI_mciRecord // after MIDM_START lpMidiHdr=%08X dwBytesRecorded=%u\n",
+					lpMidiHdr, lpMidiHdr->dwBytesRecorded);
+		if (lpMidiHdr->dwBytesRecorded == 0) break;
+		}
+	printf("MIDI_mciRecord // before MIDM_UNPREPARE \n");
+	dwRet = midMessage(0, MIDM_UNPREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR));
+	printf("MIDI_mciRecord // after MIDM_UNPREPARE \n");
+	if (lpMidiHdr->lpData != NULL) {
+		free(lpMidiHdr->lpData);
+		lpMidiHdr->lpData = NULL;
+		}
+	MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP;
+	if (dwFlags & MCI_NOTIFY) {
+#ifdef DEBUG_MCIMIDI
+		printf("MIDI_mciRecord // MCI_NOTIFY_SUCCESSFUL %08X !\n", lpParms->dwCallback);
+#endif
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			MCIMidiDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+	return 0;
+#else
+	return MMSYSERR_NOTENABLED;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciStop			[internal]
+*/
+DWORD MIDI_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciStop(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+#endif
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	MCIMidiDev[wDevID].dwStatus = MCI_MODE_STOP;
+	printf("MIDI_mciStop // MCIMidiDev[wDevID].dwStatus=%p %d\n",
+			&MCIMidiDev[wDevID].dwStatus, MCIMidiDev[wDevID].dwStatus);
+	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciPause			[internal]
+*/
+DWORD MIDI_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciPause(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+#endif
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciResume			[internal]
+*/
+DWORD MIDI_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+#ifdef linux
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciResume(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+#endif
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciSet			[internal]
+*/
+DWORD MIDI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
+{
+#ifdef linux
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciSet(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+#endif
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciSet // dwTimeFormat=%08X\n", lpParms->dwTimeFormat);
+	printf("MIDI_mciSet // dwAudio=%08X\n", lpParms->dwAudio);
+#endif
+	if (dwFlags & MCI_SET_TIME_FORMAT) {
+		switch (lpParms->dwTimeFormat) {
+			case MCI_FORMAT_MILLISECONDS:
+				printf("MIDI_mciSet // MCI_FORMAT_MILLISECONDS !\n");
+				break;
+			case MCI_FORMAT_BYTES:
+				printf("MIDI_mciSet // MCI_FORMAT_BYTES !\n");
+				break;
+			case MCI_FORMAT_SAMPLES:
+				printf("MIDI_mciSet // MCI_FORMAT_SAMPLES !\n");
+				break;
+			default:
+				printf("MIDI_mciSet // bad time format !\n");
+				return MCIERR_BAD_TIME_FORMAT;
+			}
+		}
+	if (dwFlags & MCI_SET_VIDEO) return MCIERR_UNSUPPORTED_FUNCTION;
+	if (dwFlags & MCI_SET_DOOR_OPEN) return MCIERR_UNSUPPORTED_FUNCTION;
+	if (dwFlags & MCI_SET_DOOR_CLOSED) return MCIERR_UNSUPPORTED_FUNCTION;
+	if (dwFlags & MCI_SET_AUDIO) {
+		printf("MIDI_mciSet // MCI_SET_AUDIO !\n");
+		}
+	if (dwFlags && MCI_SET_ON) {
+		printf("MIDI_mciSet // MCI_SET_ON !\n");
+		if (dwFlags && MCI_SET_AUDIO_LEFT) {
+			printf("MIDI_mciSet // MCI_SET_AUDIO_LEFT !\n");
+			}
+		if (dwFlags && MCI_SET_AUDIO_RIGHT) {
+			printf("MIDI_mciSet // MCI_SET_AUDIO_RIGHT !\n");
+			}
+		}
+	if (dwFlags & MCI_SET_OFF) {
+		printf("MIDI_mciSet // MCI_SET_OFF !\n");
+		}
+	if (dwFlags & MCI_SEQ_SET_MASTER) {
+		printf("MIDI_mciSet // MCI_SEQ_SET_MASTER !\n");
+		}
+	if (dwFlags & MCI_SEQ_SET_SLAVE) {
+		printf("MIDI_mciSet // MCI_SEQ_SET_SLAVE !\n");
+		}
+	if (dwFlags & MCI_SEQ_SET_OFFSET) {
+		printf("MIDI_mciSet // MCI_SEQ_SET_OFFSET !\n");
+		}
+	if (dwFlags & MCI_SEQ_SET_PORT) {
+		printf("MIDI_mciSet // MCI_SEQ_SET_PORT !\n");
+		}
+	if (dwFlags & MCI_SEQ_SET_TEMPO) {
+		printf("MIDI_mciSet // MCI_SEQ_SET_TEMPO !\n");
+		}
+ 	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+
+/**************************************************************************
+* 				MIDI_mciStatus		[internal]
+*/
+DWORD MIDI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
+{
+#ifdef linux
+#ifdef DEBUG_MCIMIDI
+	printf("MIDI_mciStatus(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+#endif
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	if (dwFlags & MCI_STATUS_ITEM) {
+		switch(lpParms->dwItem) {
+			case MCI_STATUS_CURRENT_TRACK:
+				lpParms->dwReturn = 1;
+				break;
+			case MCI_STATUS_LENGTH:
+				lpParms->dwReturn = 5555;
+				if (dwFlags & MCI_TRACK) {
+					lpParms->dwTrack = 1;
+					lpParms->dwReturn = 2222;
+					}
+				break;
+			case MCI_STATUS_MODE:
+				lpParms->dwReturn = MCI_MODE_STOP;
+				break;
+			case MCI_STATUS_MEDIA_PRESENT:
+				printf("MIDI_mciStatus // MCI_STATUS_MEDIA_PRESENT !\n");
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_STATUS_NUMBER_OF_TRACKS:
+				lpParms->dwReturn = 1;
+				break;
+			case MCI_STATUS_POSITION:
+				lpParms->dwReturn = 3333;
+				if (dwFlags & MCI_STATUS_START) {
+					lpParms->dwItem = 1;
+					}
+				if (dwFlags & MCI_TRACK) {
+					lpParms->dwTrack = 1;
+					lpParms->dwReturn = 777;
+					}
+				break;
+			case MCI_STATUS_READY:
+				printf("MIDI_mciStatus // MCI_STATUS_READY !\n");
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_STATUS_TIME_FORMAT:
+				printf("MIDI_mciStatus // MCI_STATUS_TIME_FORMAT !\n");
+				lpParms->dwReturn = MCI_FORMAT_MILLISECONDS;
+				break;
+			case MCI_SEQ_STATUS_DIVTYPE:
+				printf("MIDI_mciStatus // MCI_SEQ_STATUS_DIVTYPE !\n");
+				lpParms->dwReturn = 0;
+				break;
+			case MCI_SEQ_STATUS_MASTER:
+				printf("MIDI_mciStatus // MCI_SEQ_STATUS_MASTER !\n");
+				lpParms->dwReturn = 0;
+				break;
+			case MCI_SEQ_STATUS_SLAVE:
+				printf("MIDI_mciStatus // MCI_SEQ_STATUS_SLAVE !\n");
+				lpParms->dwReturn = 0;
+				break;
+			case MCI_SEQ_STATUS_OFFSET:
+				printf("MIDI_mciStatus // MCI_SEQ_STATUS_OFFSET !\n");
+				lpParms->dwReturn = 0;
+				break;
+			case MCI_SEQ_STATUS_PORT:
+				printf("MIDI_mciStatus // MCI_SEQ_STATUS_PORT !\n");
+				lpParms->dwReturn = 0;
+				break;
+			case MCI_SEQ_STATUS_TEMPO:
+				printf("MIDI_mciStatus // MCI_SEQ_STATUS_TEMPO !\n");
+				lpParms->dwReturn = 0;
+				break;
+			default:
+				printf("MIDI_mciStatus // unknowm command %04X !\n", lpParms->dwItem);
+				return MCIERR_UNRECOGNIZED_COMMAND;
+			}
+		}
+	if (dwFlags & MCI_NOTIFY) {
+		printf("MIDI_mciStatus // MCI_NOTIFY_SUCCESSFUL %08X !\n", lpParms->dwCallback);
+		mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			MCIMidiDev[wDevID].wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+		}
+ 	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+/**************************************************************************
+* 				MIDI_mciGetDevCaps		[internal]
+*/
+DWORD MIDI_mciGetDevCaps(UINT wDevID, DWORD dwFlags, 
+					LPMCI_GETDEVCAPS_PARMS lpParms)
+{
+#ifdef linux
+	printf("MIDI_mciGetDevCaps(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	if (dwFlags & MCI_GETDEVCAPS_ITEM) {
+		switch(lpParms->dwItem) {
+			case MCI_GETDEVCAPS_CAN_RECORD:
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_GETDEVCAPS_HAS_AUDIO:
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_GETDEVCAPS_HAS_VIDEO:
+				lpParms->dwReturn = FALSE;
+				break;
+			case MCI_GETDEVCAPS_DEVICE_TYPE:
+				lpParms->dwReturn = MCI_DEVTYPE_SEQUENCER;
+				break;
+			case MCI_GETDEVCAPS_USES_FILES:
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_GETDEVCAPS_COMPOUND_DEVICE:
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_GETDEVCAPS_CAN_EJECT:
+				lpParms->dwReturn = FALSE;
+				break;
+			case MCI_GETDEVCAPS_CAN_PLAY:
+				lpParms->dwReturn = TRUE;
+				break;
+			case MCI_GETDEVCAPS_CAN_SAVE:
+				lpParms->dwReturn = FALSE;
+				break;
+			default:
+				return MCIERR_UNRECOGNIZED_COMMAND;
+			}
+		}
+ 	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+/**************************************************************************
+* 				MIDI_mciInfo			[internal]
+*/
+DWORD MIDI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMS lpParms)
+{
+#ifdef linux
+	printf("MIDI_mciInfo(%u, %08X, %08X);\n", wDevID, dwFlags, lpParms);
+	if (lpParms == NULL) return MCIERR_INTERNAL;
+	lpParms->lpstrReturn = NULL;
+	switch(dwFlags) {
+		case MCI_INFO_PRODUCT:
+			lpParms->lpstrReturn = "Linux Sound System 0.5";
+			break;
+		case MCI_INFO_FILE:
+			lpParms->lpstrReturn = "FileName";
+			break;
+		default:
+			return MCIERR_UNRECOGNIZED_COMMAND;
+		}
+	if (lpParms->lpstrReturn != NULL)
+		lpParms->dwRetSize = strlen(lpParms->lpstrReturn);
+	else
+		lpParms->dwRetSize = 0;
+ 	return 0;
+#else
+	return MCIERR_INTERNAL;
+#endif
+}
+
+
+/*-----------------------------------------------------------------------*/
+
+
+/**************************************************************************
+* 				midGetDevCaps			[internal]
+*/
+DWORD midGetDevCaps(WORD wDevID, LPMIDIINCAPS lpCaps, DWORD dwSize)
+{
+	printf("midGetDevCaps(%u, %08X, %08X);\n", wDevID, lpCaps, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				midOpen					[internal]
+*/
+DWORD midOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags)
+{
+	printf("modOpen(%u, %08X, %08X);\n", wDevID, lpDesc, dwFlags);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				midClose				[internal]
+*/
+DWORD midClose(WORD wDevID)
+{
+	printf("midClose(%u);\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				midAddBuffer		[internal]
+*/
+DWORD midAddBuffer(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
+{
+	printf("midAddBuffer(%u, %08X, %08X);\n", wDevID, lpMidiHdr, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				midPrepare			[internal]
+*/
+DWORD midPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
+{
+	printf("midPrepare(%u, %08X, %08X);\n", wDevID, lpMidiHdr, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				midUnprepare			[internal]
+*/
+DWORD midUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
+{
+	printf("midUnprepare(%u, %08X, %08X);\n", wDevID, lpMidiHdr, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				midReset				[internal]
+*/
+DWORD midReset(WORD wDevID)
+{
+	printf("midReset(%u);\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+* 				midStart				[internal]
+*/
+DWORD midStart(WORD wDevID)
+{
+	printf("midStart(%u);\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+* 				midStop					[internal]
+*/
+DWORD midStop(WORD wDevID)
+{
+	printf("midStop(%u);\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+* 				midMessage				[sample driver]
+*/
+DWORD midMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
+					DWORD dwParam1, DWORD dwParam2)
+{
+	printf("midMessage(%u, %04X, %08X, %08X, %08X);\n", 
+			wDevID, wMsg, dwUser, dwParam1, dwParam2);
+	switch(wMsg) {
+		case MIDM_OPEN:
+			return midOpen(wDevID, (LPMIDIOPENDESC)dwParam1, dwParam2);
+		case MIDM_CLOSE:
+			return midClose(wDevID);
+		case MIDM_ADDBUFFER:
+			return midAddBuffer(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
+		case MIDM_PREPARE:
+			return midPrepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
+		case MIDM_UNPREPARE:
+			return midUnprepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
+		case MIDM_GETDEVCAPS:
+			return midGetDevCaps(wDevID, (LPMIDIINCAPS)dwParam1, dwParam2);
+		case MIDM_GETNUMDEVS:
+			return 1L;
+		case MIDM_RESET:
+			return midReset(wDevID);
+		case MIDM_START:
+			return midStart(wDevID);
+		case MIDM_STOP:
+			return midStop(wDevID);
+		}
+	return MMSYSERR_NOTSUPPORTED;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+
+
+/**************************************************************************
+* 				modGetDevCaps			[internal]
+*/
+DWORD modGetDevCaps(WORD wDevID, LPMIDIOUTCAPS lpCaps, DWORD dwSize)
+{
+	printf("modGetDevCaps(%u, %08X, %08X);\n", wDevID, lpCaps, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+* 				modOpen					[internal]
+*/
+DWORD modOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags)
+{								 
+	printf("modOpen(%u, %08X, %08X);\n", wDevID, lpDesc, dwFlags);
+	return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+* 				modClose				[internal]
+*/
+DWORD modClose(WORD wDevID)
+{
+	printf("modClose(%u);\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				modData					[internal]
+*/
+DWORD modData(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
+{
+	printf("modData(%u, %08X, %08X);\n", wDevID, lpMidiHdr, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				modLongData					[internal]
+*/
+DWORD modLongData(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
+{
+	printf("modLongData(%u, %08X, %08X);\n", wDevID, lpMidiHdr, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				modPrepare				[internal]
+*/
+DWORD modPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
+{
+	printf("modPrepare(%u, %08X, %08X);\n", wDevID, lpMidiHdr, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				modUnprepare			[internal]
+*/
+DWORD modUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
+{
+	printf("modUnprepare(%u, %08X, %08X);\n", wDevID, lpMidiHdr, dwSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
+* 				modReset				[internal]
+*/
+DWORD modReset(WORD wDevID)
+{
+	printf("modReset(%u);\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+* 				modGetPosition			[internal]
+*/
+DWORD modGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
+{
+	printf("modGetposition(%u, %08X, %08X);\n", wDevID, lpTime, uSize);
+	return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+* 				modMessage			[sample driver]
+*/
+DWORD modMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
+					DWORD dwParam1, DWORD dwParam2)
+{
+	printf("modMessage(%u, %04X, %08X, %08X, %08X);\n", 
+			wDevID, wMsg, dwUser, dwParam1, dwParam2);
+	switch(wMsg) {
+		case MODM_OPEN:
+			return modOpen(wDevID, (LPMIDIOPENDESC)dwParam1, dwParam2);
+		case MODM_CLOSE:
+			return modClose(wDevID);
+		case MODM_DATA:
+			return modData(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
+		case MODM_LONGDATA:
+			return modLongData(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
+		case MODM_PREPARE:
+			return modPrepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
+		case MODM_UNPREPARE:
+			return modUnprepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
+		case MODM_GETDEVCAPS:
+			return modGetDevCaps(wDevID, (LPMIDIOUTCAPS)dwParam1, dwParam2);
+		case MODM_GETNUMDEVS:
+			return 1L;
+		case MODM_GETVOLUME:
+			return 0L;
+		case MODM_SETVOLUME:
+			return 0L;
+		case MODM_RESET:
+			return modReset(wDevID);
+		}
+	return MMSYSERR_NOTSUPPORTED;
+}
+
+
+/*-----------------------------------------------------------------------*/
+
+
+#endif /* #ifdef BUILTIN_MMSYSTEM */
diff --git a/misc/mmaux.c b/misc/mmaux.c
index 80ed111..1c4cc06 100644
--- a/misc/mmaux.c
+++ b/misc/mmaux.c
@@ -11,6 +11,8 @@
 
 #ifdef BUILTIN_MMSYSTEM
 
+#define EMULATE_SB16
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -53,10 +55,55 @@
 		return MMSYSERR_NOTENABLED;
 		}
     if (ioctl(mixer, SOUND_MIXER_READ_LINE, &volume) == -1) {
+		close(mixer);
 		printf("AUX_GetDevCaps // unable read mixer !\n");
 		return MMSYSERR_NOTENABLED;
 		}
 	close(mixer);
+#ifdef EMULATE_SB16
+	lpCaps->wMid = 0x0002;
+	lpCaps->vDriverVersion = 0x0200;
+	lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
+	switch (wDevID) {
+		case 0:
+			lpCaps->wPid = 0x0196;
+			strcpy(lpCaps->szPname, "SB16 Aux: Wave");
+			lpCaps->wTechnology = AUXCAPS_AUXIN;
+			break;
+		case 1:
+			lpCaps->wPid = 0x0197;
+			strcpy(lpCaps->szPname, "SB16 Aux: Midi Synth");
+			lpCaps->wTechnology = AUXCAPS_AUXIN;
+			break;
+		case 2:
+			lpCaps->wPid = 0x0191;
+			strcpy(lpCaps->szPname, "SB16 Aux: CD");
+			lpCaps->wTechnology = AUXCAPS_CDAUDIO;
+			break;
+		case 3:
+			lpCaps->wPid = 0x0192;
+			strcpy(lpCaps->szPname, "SB16 Aux: Line-In");
+			lpCaps->wTechnology = AUXCAPS_AUXIN;
+			break;
+		case 4:
+			lpCaps->wPid = 0x0193;
+			strcpy(lpCaps->szPname, "SB16 Aux: Mic");
+			lpCaps->wTechnology = AUXCAPS_AUXIN;
+			break;
+		case 5:
+			lpCaps->wPid = 0x0194;
+			strcpy(lpCaps->szPname, "SB16 Aux: Master");
+			lpCaps->wTechnology = AUXCAPS_AUXIN;
+			break;
+		}
+#else
+	lpCaps->wMid = 0xAA;
+	lpCaps->wPid = 0x55;
+	lpCaps->vDriverVersion = 0x0100;
+	strcpy(lpCaps->szPname, "Generic Linux Auxiliary Driver");
+	lpCaps->wTechnology = AUXCAPS_CDAUDIO;
+	lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
+#endif
 	return MMSYSERR_NOERROR;
 #else
 	return MMSYSERR_NOTENABLED;
@@ -67,12 +114,13 @@
 /**************************************************************************
 * 				AUX_GetVolume			[internal]
 */
-DWORD AUX_GetVolume(WORD wDevID, DWORD dwParam)
+DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol)
 {
 #ifdef linux
 	int 	mixer;
 	int		volume;
-	printf("AUX_GetVolume(%u, %08X);\n", wDevID, dwParam);
+	printf("AUX_GetVolume(%u, %08X);\n", wDevID, lpdwVol);
+	if (lpdwVol == NULL) return MMSYSERR_NOTENABLED;
 	if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
 		printf("Linux 'AUX_GetVolume' // mixer device not available !\n");
 		return MMSYSERR_NOTENABLED;
@@ -82,6 +130,7 @@
 		return MMSYSERR_NOTENABLED;
 		}
 	close(mixer);
+	*lpdwVol = MAKELONG(volume, volume);
 	return MMSYSERR_NOERROR;
 #else
 	return MMSYSERR_NOTENABLED;
@@ -125,9 +174,10 @@
 		case AUXDM_GETDEVCAPS:
 			return AUX_GetDevCaps(wDevID, (LPAUXCAPS)dwParam1, dwParam2);
 		case AUXDM_GETNUMDEVS:
-			return 0L;
+			printf("AUX_GetNumDevs();\n");
+			return 1L;
 		case AUXDM_GETVOLUME:
-			return AUX_GetVolume(wDevID, dwParam1);
+			return AUX_GetVolume(wDevID, (LPDWORD)dwParam1);
 		case AUXDM_SETVOLUME:
 			return AUX_SetVolume(wDevID, dwParam1);
 		}
diff --git a/misc/mmsystem.c b/misc/mmsystem.c
index 4da49f9..db60012 100644
--- a/misc/mmsystem.c
+++ b/misc/mmsystem.c
@@ -16,6 +16,15 @@
 #include "user.h"
 #include "driver.h"
 #include "mmsystem.h"
+#include "stddebug.h"
+/* #define DEBUG_MCI    */
+/* #undef  DEBUG_MCI    */
+/* #define DEBUG_MMTIME */
+/* #undef  DEBUG_MMTIME */
+/* #define DEBUG_MMIO   */
+/* #undef  DEBUG_MMIO   */
+#include "debug.h"
+
 
 static WORD		mciActiveDev = 0;
 static BOOL		mmTimeStarted = FALSE;
@@ -291,8 +300,10 @@
 */
 UINT WINAPI auxGetDevCaps(UINT uDeviceID, AUXCAPS FAR* lpCaps, UINT uSize)
 {
-	printf("auxGetDevCaps !\n");
-	return 0;
+	printf("auxGetDevCaps(%04X, %08X, %d) !\n", 
+					uDeviceID, lpCaps, uSize);
+	return auxMessage(uDeviceID, AUXDM_GETDEVCAPS, 
+				0L, (DWORD)lpCaps, (DWORD)uSize);
 }
 
 /**************************************************************************
@@ -300,8 +311,8 @@
 */
 UINT WINAPI auxGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume)
 {
-	printf("auxGetVolume !\n");
-	return 0;
+	printf("auxGetVolume(%04X, %08X) !\n", uDeviceID, lpdwVolume);
+	return auxMessage(uDeviceID, AUXDM_GETVOLUME, 0L, (DWORD)lpdwVolume, 0L);
 }
 
 /**************************************************************************
@@ -309,8 +320,8 @@
 */
 UINT WINAPI auxSetVolume(UINT uDeviceID, DWORD dwVolume)
 {
-	printf("auxSetVolume !\n");
-	return 0;
+	printf("auxSetVolume(%04X, %08X) !\n", uDeviceID, dwVolume);
+	return auxMessage(uDeviceID, AUXDM_SETVOLUME, 0L, dwVolume, 0L);
 }
 
 /**************************************************************************
@@ -318,8 +329,10 @@
 */
 DWORD WINAPI auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD dw1, DWORD dw2)
 {
-	printf("auxOutMessage !\n");
-	return 0L;
+	LPMIDIOPENDESC	lpDesc;
+	printf("auxOutMessage(%04X, %04X, %08X, %08X)\n", 
+				uDeviceID, uMessage, dw1, dw2);
+	return auxMessage(uDeviceID, uMessage, 0L, dw1, dw2);
 }
 
 /**************************************************************************
@@ -656,11 +669,11 @@
 				return WAVE_DriverProc(0, 0, MCI_OPEN_DRIVER, 
 									dwParam, (DWORD)lpParms);
 			case MCI_DEVTYPE_SEQUENCER:
-				printf("MCI_OPEN // No SEQUENCER yet !\n");
-				return MCIERR_DEVICE_NOT_INSTALLED;
+				return MIDI_DriverProc(0, 0, MCI_OPEN_DRIVER, 
+									dwParam, (DWORD)lpParms);
 			case MCI_DEVTYPE_ANIMATION:
-				printf("MCI_OPEN // No ANIMATION yet !\n");
-				return MCIERR_DEVICE_NOT_INSTALLED;
+				return ANIM_DriverProc(0, 0, MCI_OPEN_DRIVER, 
+									dwParam, (DWORD)lpParms);
 			case MCI_DEVTYPE_DIGITAL_VIDEO:
 				printf("MCI_OPEN // No DIGITAL_VIDEO yet !\n");
 				return MCIERR_DEVICE_NOT_INSTALLED;
@@ -691,6 +704,10 @@
 			dwRet = WAVE_DriverProc(mciDrv[wDevID].wDeviceID, 0, 
 						MCI_CLOSE, dwParam, (DWORD)lpParms);
 			break;
+		case MCI_DEVTYPE_SEQUENCER:
+			dwRet = MIDI_DriverProc(mciDrv[wDevID].wDeviceID, 0, 
+						MCI_CLOSE, dwParam, (DWORD)lpParms);
+			break;
 		default:
 			printf("mciClose() // unknown type=%04X !\n", mciDrv[wDevID].wType);
 		}
@@ -718,10 +735,8 @@
 DWORD mciSendCommand(UINT wDevID, UINT wMsg, DWORD dwParam1, DWORD dwParam2)
 {
 	HDRVR	hDrv = 0;
-#ifdef DEBUG_MCI
-	printf("mciSendCommand(%04X, %04X, %08X, %08X)\n", 
+	dprintf_mci(stddeb, "mciSendCommand(%04X, %04X, %08X, %08X)\n", 
 					wDevID, wMsg, dwParam1, dwParam2);
-#endif
 	switch(wMsg) {
 		case MCI_OPEN:
 			return mciOpen(dwParam1, (LPMCI_OPEN_PARMS)dwParam2);
@@ -738,6 +753,9 @@
 				case MCI_DEVTYPE_WAVEFORM_AUDIO:
 					return WAVE_DriverProc(mciDrv[wDevID].wDeviceID, hDrv, 
 											wMsg, dwParam1, dwParam2);
+				case MCI_DEVTYPE_SEQUENCER:
+					return MIDI_DriverProc(mciDrv[wDevID].wDeviceID, hDrv, 
+											wMsg, dwParam1, dwParam2);
 				default:
 					printf("mciSendCommand() // unknown type=%04X !\n", 
 											mciDrv[wDevID].wType);
@@ -807,8 +825,11 @@
 */
 UINT WINAPI midiOutGetNumDevs(void)
 {
+	UINT	count = 0;
 	printf("midiOutGetNumDevs\n");
-	return 0;
+	count += modMessage(0, MODM_GETNUMDEVS, 0L, 0L, 0L);
+	printf("midiOutGetNumDevs return %u \n", count);
+	return count;
 }
 
 /**************************************************************************
@@ -885,9 +906,34 @@
 UINT WINAPI midiOutOpen(HMIDIOUT FAR* lphMidiOut, UINT uDeviceID,
     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)
 {
-	printf("midiOutOpen\n");
+	HMIDI	hMidiOut;
+	LPMIDIOPENDESC	lpDesc;
+	DWORD	dwRet;
+	BOOL	bMapperFlg = FALSE;
 	if (lphMidiOut != NULL) *lphMidiOut = 0;
-	return 0;
+	printf("midiOutOpen(%08X, %d, %08X, %08X, %08X);\n", 
+		lphMidiOut, uDeviceID, dwCallback, dwInstance, dwFlags);
+	if (uDeviceID == (UINT)MIDI_MAPPER) {
+		printf("midiOutOpen	// MIDI_MAPPER mode requested !\n");
+		bMapperFlg = TRUE;
+		uDeviceID = 0;
+		}
+	hMidiOut = GlobalAlloc(GMEM_MOVEABLE, sizeof(MIDIOPENDESC));
+	if (lphMidiOut != NULL) *lphMidiOut = hMidiOut;
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiOut);
+	if (lpDesc == NULL) return MMSYSERR_NOMEM;
+	lpDesc->hMidi = hMidiOut;
+	lpDesc->dwCallback = dwCallback;
+	lpDesc->dwInstance = dwInstance;
+	while(uDeviceID < MAXMIDIDRIVERS) {
+		dwRet = modMessage(uDeviceID, MODM_OPEN, 
+			lpDesc->dwInstance, (DWORD)lpDesc, 0L);
+		if (dwRet == MMSYSERR_NOERROR) break;
+		if (!bMapperFlg) break;
+		uDeviceID++;
+		printf("midiOutOpen	// MIDI_MAPPER mode ! try next driver...\n");
+		}
+	return dwRet;
 }
 
 /**************************************************************************
@@ -895,8 +941,11 @@
 */
 UINT WINAPI midiOutClose(HMIDIOUT hMidiOut)
 {
-	printf("midiOutClose\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiOutClose(%04X)\n", hMidiOut);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiOut);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return modMessage(0, MODM_CLOSE, lpDesc->dwInstance, 0L, 0L);
 }
 
 /**************************************************************************
@@ -905,8 +954,13 @@
 UINT WINAPI midiOutPrepareHeader(HMIDIOUT hMidiOut,
     MIDIHDR FAR* lpMidiOutHdr, UINT uSize)
 {
-	printf("midiOutPrepareHeader\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiOutPrepareHeader(%04X, %08X, %d)\n", 
+					hMidiOut, lpMidiOutHdr, uSize);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiOut);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return modMessage(0, MODM_PREPARE, lpDesc->dwInstance, 
+						(DWORD)lpMidiOutHdr, (DWORD)uSize);
 }
 
 /**************************************************************************
@@ -915,8 +969,13 @@
 UINT WINAPI midiOutUnprepareHeader(HMIDIOUT hMidiOut,
     MIDIHDR FAR* lpMidiOutHdr, UINT uSize)
 {
-	printf("midiOutUnprepareHeader\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiOutUnprepareHeader(%04X, %08X, %d)\n", 
+					hMidiOut, lpMidiOutHdr, uSize);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiOut);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return modMessage(0, MODM_UNPREPARE, lpDesc->dwInstance, 
+						(DWORD)lpMidiOutHdr, (DWORD)uSize);
 }
 
 /**************************************************************************
@@ -924,8 +983,11 @@
 */
 UINT WINAPI midiOutShortMsg(HMIDIOUT hMidiOut, DWORD dwMsg)
 {
-	printf("midiOutShortMsg\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiOutShortMsg(%04X, %08X)\n", hMidiOut, dwMsg);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiOut);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return modMessage(0, MODM_DATA, lpDesc->dwInstance, dwMsg, 0L);
 }
 
 /**************************************************************************
@@ -934,8 +996,13 @@
 UINT WINAPI midiOutLongMsg(HMIDIOUT hMidiOut,
     MIDIHDR FAR* lpMidiOutHdr, UINT uSize)
 {
-	printf("midiOutLongMsg\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiOutLongMsg(%04X, %08X, %d)\n", 
+				hMidiOut, lpMidiOutHdr, uSize);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiOut);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return modMessage(0, MODM_LONGDATA, lpDesc->dwInstance, 
+						(DWORD)lpMidiOutHdr, (DWORD)uSize);
 }
 
 /**************************************************************************
@@ -997,9 +1064,15 @@
 /**************************************************************************
 * 				midiOutMessage		[MMSYSTEM.216]
 */
-DWORD WINAPI midiOutMessage(HMIDIOUT hMidiOut, UINT uMessage, DWORD dw1, DWORD dw2)
+DWORD WINAPI midiOutMessage(HMIDIOUT hMidiOut, UINT uMessage, 
+						DWORD dwParam1, DWORD dwParam2)
 {
-	printf("midiOutMessage\n");
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiOutMessage(%04X, %04X, %08X, %08X)\n", 
+			hMidiOut, uMessage, dwParam1, dwParam2);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiOut);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return modMessage(0, uMessage, lpDesc->dwInstance, dwParam1, dwParam2);
 	return 0;
 }
 
@@ -1037,9 +1110,34 @@
 UINT WINAPI midiInOpen(HMIDIIN FAR* lphMidiIn, UINT uDeviceID,
     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)
 {
-	printf("midiInOpen\n");
+	HMIDI	hMidiIn;
+	LPMIDIOPENDESC	lpDesc;
+	DWORD	dwRet;
+	BOOL	bMapperFlg = FALSE;
 	if (lphMidiIn != NULL) *lphMidiIn = 0;
-	return 0;
+	printf("midiInOpen(%08X, %d, %08X, %08X, %08X);\n", 
+		lphMidiIn, uDeviceID, dwCallback, dwInstance, dwFlags);
+	if (uDeviceID == (UINT)MIDI_MAPPER) {
+		printf("midiInOpen	// MIDI_MAPPER mode requested !\n");
+		bMapperFlg = TRUE;
+		uDeviceID = 0;
+		}
+	hMidiIn = GlobalAlloc(GMEM_MOVEABLE, sizeof(MIDIOPENDESC));
+	if (lphMidiIn != NULL) *lphMidiIn = hMidiIn;
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiIn);
+	if (lpDesc == NULL) return MMSYSERR_NOMEM;
+	lpDesc->hMidi = hMidiIn;
+	lpDesc->dwCallback = dwCallback;
+	lpDesc->dwInstance = dwInstance;
+	while(uDeviceID < MAXMIDIDRIVERS) {
+		dwRet = midMessage(uDeviceID, MIDM_OPEN, 
+			lpDesc->dwInstance, (DWORD)lpDesc, 0L);
+		if (dwRet == MMSYSERR_NOERROR) break;
+		if (!bMapperFlg) break;
+		uDeviceID++;
+		printf("midiInOpen	// MIDI_MAPPER mode ! try next driver...\n");
+		}
+	return dwRet;
 }
 
 /**************************************************************************
@@ -1047,8 +1145,11 @@
 */
 UINT WINAPI midiInClose(HMIDIIN hMidiIn)
 {
-	printf("midiInClose\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiInClose(%04X)\n", hMidiIn);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiIn);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return midMessage(0, MIDM_CLOSE, lpDesc->dwInstance, 0L, 0L);
 }
 
 /**************************************************************************
@@ -1057,8 +1158,13 @@
 UINT WINAPI midiInPrepareHeader(HMIDIIN hMidiIn,
     MIDIHDR FAR* lpMidiInHdr, UINT uSize)
 {
-	printf("midiInPrepareHeader\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiInPrepareHeader(%04X, %08X, %d)\n", 
+					hMidiIn, lpMidiInHdr, uSize);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiIn);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return midMessage(0, MIDM_PREPARE, lpDesc->dwInstance, 
+						(DWORD)lpMidiInHdr, (DWORD)uSize);
 }
 
 /**************************************************************************
@@ -1067,8 +1173,13 @@
 UINT WINAPI midiInUnprepareHeader(HMIDIIN hMidiIn,
     MIDIHDR FAR* lpMidiInHdr, UINT uSize)
 {
-	printf("midiInUnprepareHeader\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiInUnprepareHeader(%04X, %08X, %d)\n", 
+					hMidiIn, lpMidiInHdr, uSize);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiIn);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return midMessage(0, MIDM_UNPREPARE, lpDesc->dwInstance, 
+						(DWORD)lpMidiInHdr, (DWORD)uSize);
 }
 
 /**************************************************************************
@@ -1123,8 +1234,12 @@
 DWORD WINAPI midiInMessage(HMIDIIN hMidiIn, UINT uMessage, 
 							DWORD dwParam1, DWORD dwParam2)
 {
-	printf("midiInMessage\n");
-	return 0;
+	LPMIDIOPENDESC	lpDesc;
+	printf("midiInMessage(%04X, %04X, %08X, %08X)\n", 
+			hMidiIn, uMessage, dwParam1, dwParam2);
+	lpDesc = (LPMIDIOPENDESC) GlobalLock(hMidiIn);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return midMessage(0, uMessage, lpDesc->dwInstance, dwParam1, dwParam2);
 }
 
 
@@ -1445,6 +1560,12 @@
 DWORD WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage, 
 							DWORD dwParam1, DWORD dwParam2)
 {
+	LPWAVEOPENDESC	lpDesc;
+	printf("waveOutMessage(%04X, %04X, %08X, %08X)\n", 
+			hWaveOut, uMessage, dwParam1, dwParam2);
+	lpDesc = (LPWAVEOPENDESC) GlobalLock(hWaveOut);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return wodMessage(0, uMessage, lpDesc->dwInstance, dwParam1, dwParam2);
 }
 
 /**************************************************************************
@@ -1668,6 +1789,12 @@
 DWORD WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage,
 							DWORD dwParam1, DWORD dwParam2)
 {
+	LPWAVEOPENDESC	lpDesc;
+	printf("waveInMessage(%04X, %04X, %08X, %08X)\n", 
+			hWaveIn, uMessage, dwParam1, dwParam2);
+	lpDesc = (LPWAVEOPENDESC) GlobalLock(hWaveIn);
+	if (lpDesc == NULL) return MMSYSERR_INVALHANDLE;
+	return widMessage(0, uMessage, lpDesc->dwInstance, dwParam1, dwParam2);
 }
 
 
@@ -1684,10 +1811,7 @@
 		if (lpTimer->wCurTime == 0) {
 			lpTimer->wCurTime = lpTimer->wDelay;
 			if (lpTimer->lpFunc != NULL) {
-#ifdef DEBUG_MMTIME
-				printf("MMSysTimeCallback // before CallBack16 !\n");
-				fflush(stdout);
-#endif
+				dprintf_mmtime(stddeb,"MMSysTimeCallback // before CallBack16 !\n");
 #ifdef WINELIB
 				(*lpTimer->lpFunc)(lpTimer->wTimerID, (WORD)0, 
 						lpTimer->dwUser, (DWORD)0, (DWORD)0);
@@ -1696,10 +1820,8 @@
 					0, (int)lpTimer->wTimerID, 0, (int)0, 
 					2, lpTimer->dwUser, 2, 0, 2, 0);
 #endif
-#ifdef DEBUG_MMTIME
-				printf("MMSysTimeCallback // after CallBack16 !\n");
+				dprintf_mmtime(stddeb, "MMSysTimeCallback // after CallBack16 !\n");
 				fflush(stdout);
-#endif
 				}
 			if (lpTimer->wFlags & TIME_ONESHOT)
 				timeKillEvent(lpTimer->wTimerID);
@@ -1883,9 +2005,7 @@
 {
 	int		count;
 	LPMMIOINFO	lpmminfo;
-#ifdef DEBUG_MMIO
-	printf("mmioRead(%04X, %08X, %ld);\n", hmmio, pch, cch);
-#endif
+	dprintf_mmio(stddeb, "mmioRead(%04X, %08X, %ld);\n", hmmio, pch, cch);
 	lpmminfo = (LPMMIOINFO)GlobalLock(hmmio);
 	if (lpmminfo == NULL) return 0;
 	count = _lread(LOWORD(lpmminfo->dwReserved2), pch, cch);
@@ -2036,27 +2156,21 @@
 {
 	DWORD	dwfcc, dwOldPos;
 	LPMMIOINFO	lpmminfo;
-#ifdef DEBUG_MMIO
-	printf("mmioDescend(%04X, %08X, %08X, %04X);\n", 
+	dprintf_mmio(stddeb, "mmioDescend(%04X, %08X, %08X, %04X);\n", 
 				hmmio, lpck, lpckParent, uFlags);
-#endif
 	if (lpck == NULL) return 0;
 	lpmminfo = (LPMMIOINFO)GlobalLock(hmmio);
 	if (lpmminfo == NULL) return 0;
 	dwfcc = lpck->ckid;
 	dwOldPos = _llseek(LOWORD(lpmminfo->dwReserved2), 0, SEEK_CUR);
 	if (lpckParent != NULL) {
-#ifdef DEBUG_MMIO
-		printf("mmioDescend // seek inside parent at %ld !\n", lpckParent->dwDataOffset);
-#endif
+		dprintf_mmio(stddeb, "mmioDescend // seek inside parent at %ld !\n", lpckParent->dwDataOffset);
 		dwOldPos = _llseek(LOWORD(lpmminfo->dwReserved2), 
 					lpckParent->dwDataOffset, SEEK_SET);
 		}
 	if ((uFlags & MMIO_FINDCHUNK) || (uFlags & MMIO_FINDRIFF) || 
 		(uFlags & MMIO_FINDLIST)) {
-#ifdef DEBUG_MMIO
-		printf("mmioDescend // MMIO_FINDxxxx dwfcc=%08X !\n", dwfcc);
-#endif
+		dprintf_mmio(stddeb, "mmioDescend // MMIO_FINDxxxx dwfcc=%08X !\n", dwfcc);
 		while (TRUE) {
 			if (_lread(LOWORD(lpmminfo->dwReserved2), (LPSTR)lpck, 
 					sizeof(MMCKINFO)) < sizeof(MMCKINFO)) {
@@ -2064,10 +2178,8 @@
 				GlobalUnlock(hmmio);
 				return MMIOERR_CHUNKNOTFOUND;
 				}
-#ifdef DEBUG_MMIO
-			printf("mmioDescend // dwfcc=%08X ckid=%08X cksize=%08X !\n", 
+			dprintf_mmio(stddeb, "mmioDescend // dwfcc=%08X ckid=%08X cksize=%08X !\n", 
 									dwfcc, lpck->ckid, lpck->cksize);
-#endif
 			if (dwfcc == lpck->ckid) break;
 			dwOldPos += lpck->cksize + 2 * sizeof(DWORD);
 			if (lpck->ckid == FOURCC_RIFF || lpck->ckid == FOURCC_LIST) 
@@ -2089,11 +2201,9 @@
 		lpck->dwDataOffset += sizeof(DWORD);
 	lpmminfo->lDiskOffset = _llseek(LOWORD(lpmminfo->dwReserved2), 
 									lpck->dwDataOffset, SEEK_SET);
-#ifdef DEBUG_MMIO
-	printf("mmioDescend // lpck->ckid=%08X lpck->cksize=%ld !\n", 
+	dprintf_mmio(stddeb, "mmioDescend // lpck->ckid=%08X lpck->cksize=%ld !\n", 
 								lpck->ckid, lpck->cksize);
 	printf("mmioDescend // lpck->fccType=%08X !\n", lpck->fccType);
-#endif
 	return 0;
 }
 
diff --git a/misc/profile.c b/misc/profile.c
index 7bd9488..12a961e 100644
--- a/misc/profile.c
+++ b/misc/profile.c
@@ -25,8 +25,11 @@
 #include "wine.h"
 #include "windows.h"
 #include "prototypes.h"
+#include "stddebug.h"
+/* #define DEBUG_PROFILE */
+/* #undef  DEBUG_PROFILE */
+#include "debug.h"
 
-/* #define DEBUG */
 
 #define STRSIZE 255
 #define xmalloc(x) malloc(x)
@@ -97,15 +100,11 @@
 
     file = GetIniFileName(filename);
 
-#ifdef DEBUG
-    printf("Load %s\n", file);
-#endif		
+    dprintf_profile(stddeb,"Load %s\n", file);
     if ((f = fopen (file, "r"))==NULL)
 	return NULL;
 
-#ifdef DEBUG
-    printf("Loading %s\n", file);
-#endif		
+    dprintf_profile(stddeb,"Loading %s\n", file);
 
 
     state = FirstBrace;
@@ -121,9 +120,7 @@
 		next = CharBuffer;
 		SecHeader->AppName = strdup (CharBuffer);
 		state = IgnoreToEOL;
-#ifdef DEBUG
-		printf("%s: section %s\n", file, CharBuffer);
-#endif		
+		dprintf_profile(stddeb,"%s: section %s\n", file, CharBuffer);
 	    } else
 		*next++ = c;
 	    break;
@@ -151,7 +148,7 @@
 	    if (state == FirstBrace) /* On first pass, don't allow dangling keys */
 		break;
 
-	    if (c == ' ' || c == '\t')
+	    if (c == '\t')
 		break;
 	    
 	    if (c == '\n' || c == ';' || overflow) /* Abort Definition */
@@ -167,15 +164,14 @@
 		TKeys *temp;
 
 		temp = SecHeader->Keys;
+		while(next[-1]==' ')next--;
 		*next = '\0';
 		SecHeader->Keys = (TKeys *) xmalloc (sizeof (TKeys));
 		SecHeader->Keys->link = temp;
 		SecHeader->Keys->KeyName = strdup (CharBuffer);
 		state = KeyValue;
 		next = CharBuffer;
-#ifdef DEBUG
-		printf("%s:   key %s\n", file, CharBuffer);
-#endif		
+		dprintf_profile(stddeb,"%s:   key %s\n", file, CharBuffer);
 	    } else
 		*next++ = c;
 	    break;
@@ -186,10 +182,8 @@
 		SecHeader->Keys->Value = strdup (CharBuffer);
 		state = c == '\n' ? KeyDef : IgnoreToEOL;
 		next = CharBuffer;
-#ifdef DEBUG
-		printf ("[%s] (%s)=%s\n", SecHeader->AppName,
+		dprintf_profile (stddeb, "[%s] (%s)=%s\n", SecHeader->AppName,
 			SecHeader->Keys->KeyName, SecHeader->Keys->Value);
-#endif
 	    } else
 		*next++ = c;
 	    break;
@@ -243,28 +237,25 @@
 	    char *p = ReturnedString;
 	    int left = Size - 2;
 	    int slen;
-#ifdef DEBUG_PROFILE
-		printf("GetSetProfile // KeyName == NULL, Enumeration !\n");
-#endif
+
+	    dprintf_profile(stddeb,"GetSetProfile // KeyName == NULL, Enumeration !\n");
 	    for (key = section->Keys; key; key = key->link){
 		if (left < 1) {
-			printf("GetSetProfile // No more storage for enum !\n");
+			dprintf_profile(stddeb,"GetSetProfile // No more storage for enum !\n");
 			return (Size - 2);
 			}
 		slen = min(strlen(key->KeyName) + 1, left);
-#ifdef DEBUG_PROFILE
-		printf("GetSetProfile // strncpy(%08X, %08X, %d);\n", 
+		dprintf_profile(stddeb,"GetSetProfile // strncpy(%08X, %08X, %d);\n", 
 				ReturnedString, key->Value, slen);
-#endif
 		strncpy (p, key->KeyName, slen);
-#ifdef DEBUG_PROFILE
-		printf("GetSetProfile // enum '%s' !\n", p);
-#endif
+		dprintf_profile(stddeb,"GetSetProfile // enum '%s' !\n", p);
 		left -= slen;
 		p += slen;
 	    }
 		*p = '\0';
+#ifdef DEBUG_PROFILE
 		printf("GetSetProfile // normal end of enum !\n");
+#endif
 	    return (Size - 2 - left);
 	}
 	for (key = section->Keys; key; key = key->link){
@@ -311,10 +302,8 @@
 {
     int v;
 
-#ifdef DEBUG_PROFILE
-	printf("GetPrivateProfileString ('%s', '%s', '%s', %08X, %d, %s\n", 
+    dprintf_profile(stddeb,"GetPrivateProfileString ('%s', '%s', '%s', %08X, %d, %s\n", 
 			AppName, KeyName, Default, ReturnedString, Size, FileName);
-#endif
     v = GetSetProfile (0,AppName,KeyName,Default,ReturnedString,Size,FileName);
     if (AppName)
 	return strlen (ReturnedString);
diff --git a/misc/property.c b/misc/property.c
index b58d173..9733ae1 100644
--- a/misc/property.c
+++ b/misc/property.c
@@ -3,9 +3,6 @@
  */
 static char Copyright[] = "Copyright Martin Ayotte, 1994";
 
-/*
-#define DEBUG_PROP
-*/
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -14,6 +11,11 @@
 #include "windows.h"
 #include "heap.h"
 #include "win.h"
+#include "callback.h"
+#include "stddebug.h"
+/* #define DEBUG_PROP */
+/* #undef  DEBUG_PROP */
+#include "debug.h"
 
 typedef struct tagPROPENTRY {
 	LPSTR		PropName;
@@ -33,12 +35,10 @@
     WND 		*wndPtr;
 	LPPROPENTRY lpProp;
 	HANDLE		hOldData;
-#ifdef DEBUG_PROP
 	if (((DWORD)lpStr & 0xFFFF0000) == 0L)
-		printf("RemoveProp(%04X, Atom %04X)\n", hWnd, LOWORD((DWORD)lpStr));
+		dprintf_prop(stddeb, "RemoveProp(%04X, Atom %04X)\n", hWnd, LOWORD((DWORD)lpStr));
 	else
-		printf("RemoveProp(%04X, '%s')\n", hWnd, lpStr);
-#endif
+		dprintf_prop(stddeb, "RemoveProp(%04X, '%s')\n", hWnd, lpStr);
 	wndPtr = WIN_FindWndPtr(hWnd);
     if (wndPtr == NULL) {
     	printf("RemoveProp // Bad Window handle !\n");
@@ -46,9 +46,7 @@
     	}
 	lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
 	if (lpProp == NULL) {
-#ifdef DEBUG_PROP
-		printf("Property List Empty !\n");
-#endif
+		dprintf_prop(stddeb, "Property List Empty !\n");
 		return 0;
 		}
 	while (TRUE) {
@@ -57,9 +55,7 @@
 			(((DWORD)lpStr & 0xFFFF0000) != 0L && 
 			lpProp->PropName != NULL &&
 			strcmp(lpProp->PropName, lpStr) == 0)) {
-#ifdef DEBUG_PROP
-		   	printf("RemoveProp // Property found ! hData=%04X\n", lpProp->hData);
-#endif
+		   	dprintf_prop(stddeb, "RemoveProp // Property found ! hData=%04X\n", lpProp->hData);
 			hOldData = lpProp->hData;
 			if (lpProp->lpPrevProp != NULL) 
 				lpProp->lpPrevProp->lpNextProp = lpProp->lpNextProp;
@@ -74,9 +70,7 @@
 		lpProp = lpProp->lpNextProp;
 		}
 	GlobalUnlock(wndPtr->hProp);
-#ifdef DEBUG_PROP
-   	printf("RemoveProp // Property not found !\n");
-#endif
+   	dprintf_prop(stddeb, "RemoveProp // Property not found !\n");
 	return 0;
 }
 
@@ -88,12 +82,10 @@
 {
     WND 		*wndPtr;
 	LPPROPENTRY lpProp;
-#ifdef DEBUG_PROP
 	if (((DWORD)lpStr & 0xFFFF0000) == 0L)
-		printf("GetProp(%04X, Atom %04X)\n", hWnd, LOWORD((DWORD)lpStr));
+		dprintf_prop(stddeb, "GetProp(%04X, Atom %04X)\n", hWnd, LOWORD((DWORD)lpStr));
 	else
-		printf("GetProp(%04X, '%s')\n", hWnd, lpStr);
-#endif
+		dprintf_prop(stddeb, "GetProp(%04X, '%s')\n", hWnd, lpStr);
 	wndPtr = WIN_FindWndPtr(hWnd);
     if (wndPtr == NULL) {
     	printf("GetProp // Bad Window handle !\n");
@@ -101,9 +93,7 @@
     	}
 	lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
 	if (lpProp == NULL) {
-#ifdef DEBUG_PROP
-		printf("Property List Empty !\n");
-#endif
+		dprintf_prop(stddeb, "Property List Empty !\n");
 		return 0;
 		}
 	while (TRUE) {
@@ -112,18 +102,14 @@
 			(((DWORD)lpStr & 0xFFFF0000) != 0L && 
 			lpProp->PropName != NULL &&
 			strcmp(lpProp->PropName, lpStr) == 0)) {
-#ifdef DEBUG_PROP
-		   	printf("GetProp // Property found ! hData=%04X\n", lpProp->hData);
-#endif
+		   	dprintf_prop(stddeb, "GetProp // Property found ! hData=%04X\n", lpProp->hData);
 			GlobalUnlock(wndPtr->hProp);
 			return lpProp->hData;
 			}
 		if (lpProp->lpNextProp == NULL) break;
 		lpProp = lpProp->lpNextProp;
 		}
-#ifdef DEBUG_PROP
-   	printf("GetProp // Property not found !\n");
-#endif
+   	dprintf_prop(stddeb, "GetProp // Property not found !\n");
 	GlobalUnlock(wndPtr->hProp);
 	return 0;
 }
@@ -138,13 +124,11 @@
     HANDLE 		hNewProp;
 	LPPROPENTRY lpNewProp;
 	LPPROPENTRY lpProp;
-#ifdef DEBUG_PROP
 	if (((DWORD)lpStr & 0xFFFF0000) == 0L)
-		printf("SetProp(%04X, Atom %04X, %04X)\n", 
+		dprintf_prop(stddeb, "SetProp(%04X, Atom %04X, %04X)\n", 
 				hWnd, LOWORD((DWORD)lpStr), hData);
 	else
-		printf("SetProp(%04X, '%s', %04X)\n", hWnd, lpStr, hData);
-#endif
+		dprintf_prop(stddeb, "SetProp(%04X, '%s', %04X)\n", hWnd, lpStr, hData);
 	wndPtr = WIN_FindWndPtr(hWnd);
     if (wndPtr == NULL) {
     	printf("SetProp // Bad Window handle !\n");
@@ -158,9 +142,7 @@
 				(((DWORD)lpStr & 0xFFFF0000) != 0L && 
 				lpProp->PropName != NULL &&
 				strcmp(lpProp->PropName, lpStr) == 0)) {
-#ifdef DEBUG_PROP
-			    printf("SetProp // change already exinsting property !\n");
-#endif
+			    dprintf_prop(stddeb, "SetProp // change already exinsting property !\n");
 				lpProp->hData = hData;
 				GlobalUnlock(wndPtr->hProp);
 				return TRUE;
@@ -176,15 +158,11 @@
 		GlobalUnlock(wndPtr->hProp);
     	return FALSE;
 		}
-#ifdef DEBUG_PROP
-    printf("SetProp // entry allocated %08X\n", lpNewProp);
-#endif
+    dprintf_prop(stddeb, "SetProp // entry allocated %08X\n", lpNewProp);
 	if (lpProp == NULL) {
 		wndPtr->hProp = hNewProp;
 		lpNewProp->lpPrevProp = NULL;
-#ifdef DEBUG_PROP
-	    printf("SetProp // first entry \n");
-#endif
+	    dprintf_prop(stddeb, "SetProp // first entry \n");
 		}
 	else {
 		lpProp->lpNextProp = lpNewProp;
@@ -232,7 +210,7 @@
 		printf("Property List Empty !\n");
 		return 0;
 		}
-	if (lpEnumFunc != NULL)	return 0;
+	if (lpEnumFunc == NULL)	return 0;
 	while (TRUE) {
     	printf("EnumProps // lpProp->Atom=%04X !\n", lpProp->Atom);
 		str = (LPSTR)MAKELONG(lpProp->Atom, 0); 
@@ -244,8 +222,10 @@
 		nRet = (*lpEnumFunc)((HWND)hWnd, (WORD)0, 
 			(LPSTR)str, (HANDLE)lpProp->hData);
 #else
-		nRet = CallBack16(lpEnumFunc, 4, (HANDLE)lpProp->hData, 
-							(LPSTR)str, (WORD)0, (HWND)hWnd);
+		nRet = CallBack16(lpEnumFunc, 3,
+		    CALLBACK_SIZE_WORD, (HWND)hWnd,
+		    CALLBACK_SIZE_LONG, (LPSTR)str,
+		    CALLBACK_SIZE_WORD, (HANDLE)lpProp->hData);
 #endif
 		if (nRet == 0) break;
 		if (lpProp->lpNextProp == NULL) break;
diff --git a/misc/shell.c b/misc/shell.c
index 6682100..71af863 100644
--- a/misc/shell.c
+++ b/misc/shell.c
@@ -8,10 +8,11 @@
 #include "prototypes.h"
 #include "windows.h"
 #include "shell.h"
+#include "stddebug.h"
+/* #define DEBUG_REG */
+/* #undef  DEBUG_REG */
+#include "debug.h"
 
-/*
-#define DEBUG_REG
-*/
 
 LPKEYSTRUCT	lphRootKey = NULL;
 
@@ -27,31 +28,23 @@
 	LPKEYSTRUCT	lpKey = lphRootKey;
 	LPSTR		ptr;
 	char		str[128];
-	int			size;
-#ifdef DEBUG_REG
-	fprintf(stderr, "RegOpenKey(%04X, %08X='%s', %08X)\n",
+
+	dprintf_reg(stddeb, "RegOpenKey(%04X, %08X='%s', %08X)\n",
 						hKey, lpSubKey, lpSubKey, lphKey);
-#endif
 	if (lpKey == NULL) return ERROR_BADKEY;
 	if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;
 	if (lphKey == NULL) return ERROR_INVALID_PARAMETER;
 	if (hKey != HKEY_CLASSES_ROOT) {
-#ifdef DEBUG_REG
-		printf("RegOpenKey // specific key = %04X !\n", hKey);
-#endif
+		dprintf_reg(stddeb,"RegOpenKey // specific key = %04X !\n", hKey);
 		lpKey = (LPKEYSTRUCT)GlobalLock(hKey);
 		}
 	while ( (ptr = strchr(lpSubKey, '\\')) != NULL ) {
 		strncpy(str, lpSubKey, (LONG)ptr - (LONG)lpSubKey);
 		str[(LONG)ptr - (LONG)lpSubKey] = '\0';
 		lpSubKey = ptr + 1;
-#ifdef DEBUG_REG
-		printf("RegOpenKey // next level '%s' !\n", str);
-#endif
+		dprintf_reg(stddeb,"RegOpenKey // next level '%s' !\n", str);
 		while(TRUE) {
-#ifdef DEBUG_REG
-			printf("RegOpenKey // '%s' <-> '%s' !\n", str, lpKey->lpSubKey);
-#endif
+			dprintf_reg(stddeb,"RegOpenKey // '%s' <-> '%s' !\n", str, lpKey->lpSubKey);
 			if (lpKey->lpSubKey != NULL && lpKey->lpSubKey[0] != '\0' &&
 				strcmp(lpKey->lpSubKey, str) == 0) {
 				lpKey = lpKey->lpSubLvl;
@@ -78,9 +71,7 @@
 		lpKey = lpKey->lpNextKey;
 		}
 	*lphKey = lpKey->hKey;
-#ifdef DEBUG_REG
-	printf("RegOpenKey // return hKey=%04X !\n", lpKey->hKey);
-#endif
+	dprintf_reg(stddeb,"RegOpenKey // return hKey=%04X !\n", lpKey->hKey);
 	return ERROR_SUCCESS;
 }
 
@@ -97,35 +88,25 @@
 	LONG		dwRet;
 	LPSTR		ptr;
 	char		str[128];
-#ifdef DEBUG_REG
-	fprintf(stderr, "RegCreateKey(%04X, '%s', %08X)\n",	hKey, lpSubKey, lphKey);
-#endif
+	dprintf_reg(stddeb, "RegCreateKey(%04X, '%s', %08X)\n",	hKey, lpSubKey, lphKey);
 	if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;
 	if (lphKey == NULL) return ERROR_INVALID_PARAMETER;
 	if (hKey != HKEY_CLASSES_ROOT) {
-#ifdef DEBUG_REG
-		printf("RegCreateKey // specific key = %04X !\n", hKey);
-#endif
+		dprintf_reg(stddeb,"RegCreateKey // specific key = %04X !\n", hKey);
 		lpKey = (LPKEYSTRUCT)GlobalLock(hKey);
 		}
 	while ( (ptr = strchr(lpSubKey, '\\')) != NULL ) {
 		strncpy(str, lpSubKey, (LONG)ptr - (LONG)lpSubKey);
 		str[(LONG)ptr - (LONG)lpSubKey] = '\0';
 		lpSubKey = ptr + 1;
-#ifdef DEBUG_REG
-		printf("RegCreateKey // next level '%s' !\n", str);
-#endif
+		dprintf_reg(stddeb,"RegCreateKey // next level '%s' !\n", str);
 		lpPrevKey = lpKey;
 		while(TRUE) {
-#ifdef DEBUG_REG
-			printf("RegCreateKey // '%s' <-> '%s' !\n", str, lpKey->lpSubKey);
-#endif
+			dprintf_reg(stddeb,"RegCreateKey // '%s' <-> '%s' !\n", str, lpKey->lpSubKey);
 			if (lpKey->lpSubKey != NULL &&
 				strcmp(lpKey->lpSubKey, str) == 0) {
 				if (lpKey->lpSubLvl == NULL) {
-#ifdef DEBUG_REG
-					printf("RegCreateKey // '%s' found !\n", str);
-#endif
+					dprintf_reg(stddeb,"RegCreateKey // '%s' found !\n", str);
 					if ( (ptr = strchr(lpSubKey, '\\')) != NULL ) {
 						strncpy(str, lpSubKey, (LONG)ptr - (LONG)lpSubKey);
 						str[(LONG)ptr - (LONG)lpSubKey] = '\0';
@@ -181,9 +162,7 @@
 	lpNewKey->lpNextKey = NULL;
 	lpNewKey->lpSubLvl = NULL;
 	*lphKey = hNewKey;
-#ifdef DEBUG_REG
-	printf("RegCreateKey // successful '%s' key=%04X !\n", lpSubKey, hNewKey);
-#endif
+	dprintf_reg(stddeb,"RegCreateKey // successful '%s' key=%04X !\n", lpSubKey, hNewKey);
 	return ERROR_SUCCESS;
 }
 
@@ -193,7 +172,7 @@
  */
 LONG RegCloseKey(HKEY hKey)
 {
-	fprintf(stderr, "EMPTY STUB !!! RegCloseKey(%04X);\n", hKey);
+	dprintf_reg(stdnimp, "EMPTY STUB !!! RegCloseKey(%04X);\n", hKey);
 	return ERROR_INVALID_PARAMETER;
 }
 
@@ -203,7 +182,7 @@
  */
 LONG RegDeleteKey(HKEY hKey, LPCSTR lpSubKey)
 {
-	fprintf(stderr, "EMPTY STUB !!! RegDeleteKey(%04X, '%s');\n", 
+	dprintf_reg(stdnimp, "EMPTY STUB !!! RegDeleteKey(%04X, '%s');\n", 
 												hKey, lpSubKey);
 	return ERROR_INVALID_PARAMETER;
 }
@@ -218,16 +197,12 @@
 	HKEY		hRetKey;
 	LPKEYSTRUCT	lpKey;
 	LONG		dwRet;
-#ifdef DEBUG_REG
-	fprintf(stderr, "RegSetValue(%04X, '%s', %08X, '%s', %08X);\n",
+	dprintf_reg(stddeb, "RegSetValue(%04X, '%s', %08X, '%s', %08X);\n",
 						hKey, lpSubKey, dwType, lpVal, dwIgnored);
-#endif
 	if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;
 	if (lpVal == NULL) return ERROR_INVALID_PARAMETER;
 	if ((dwRet = RegOpenKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) {
-#ifdef DEBUG_REG
-		fprintf(stderr, "RegSetValue // key not found ... so create it !\n");
-#endif
+		dprintf_reg(stddeb, "RegSetValue // key not found ... so create it !\n");
 		if ((dwRet = RegCreateKey(hKey, lpSubKey, &hRetKey)) != ERROR_SUCCESS) {
 			fprintf(stderr, "RegSetValue // key creation error %04X !\n", dwRet);
 			return dwRet;
@@ -238,9 +213,7 @@
 	if (lpKey->lpValue != NULL) free(lpKey->lpValue);
 	lpKey->lpValue = malloc(strlen(lpVal) + 1);
 	strcpy(lpKey->lpValue, lpVal);
-#ifdef DEBUG_REG
-	printf("RegSetValue // successful key='%s' val='%s' !\n", lpSubKey, lpVal);
-#endif
+	dprintf_reg(stddeb,"RegSetValue // successful key='%s' val='%s' !\n", lpSubKey, lpVal);
 	return ERROR_SUCCESS;
 }
 
@@ -254,7 +227,7 @@
 	LPKEYSTRUCT	lpKey;
 	LONG		dwRet;
 	int			size;
-	fprintf(stderr, "RegQueryValue(%04X, '%s', %08X, %08X);\n",
+	dprintf_reg(stddeb, "RegQueryValue(%04X, '%s', %08X, %08X);\n",
 							hKey, lpSubKey, lpVal, lpcb);
 	if (lpSubKey == NULL) return ERROR_INVALID_PARAMETER;
 	if (lpVal == NULL) return ERROR_INVALID_PARAMETER;
@@ -274,7 +247,7 @@
 		lpVal[0] = '\0';
 		*lpcb = (LONG)0;
 		}
-	printf("RegQueryValue // return '%s' !\n", lpVal);
+	dprintf_reg(stddeb,"RegQueryValue // return '%s' !\n", lpVal);
 	return ERROR_SUCCESS;
 }
 
@@ -284,7 +257,7 @@
  */
 LONG RegEnumKey(HKEY hKey, DWORD dwSubKey, LPSTR lpBuf, DWORD dwSize)
 {
-	fprintf(stderr, "RegEnumKey : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "RegEnumKey : Empty Stub !!!\n");
 	return ERROR_INVALID_PARAMETER;
 }
 
@@ -293,7 +266,7 @@
  */
 void DragAcceptFiles(HWND hWnd, BOOL b)
 {
-	fprintf(stderr, "DragAcceptFiles : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "DragAcceptFiles : Empty Stub !!!\n");
 }
 
 
@@ -302,7 +275,7 @@
  */
 void DragQueryFile(HDROP h, UINT u, LPSTR u2, UINT u3)
 {
-	fprintf(stderr, "DragQueryFile : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "DragQueryFile : Empty Stub !!!\n");
 
 }
 
@@ -312,7 +285,7 @@
  */
 void DragFinish(HDROP h)
 {
-	fprintf(stderr, "DragFinish : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "DragFinish : Empty Stub !!!\n");
 
 }
 
@@ -322,8 +295,8 @@
  */
 BOOL DragQueryPoint(HDROP h, POINT FAR *p)
 {
-	fprintf(stderr, "DragQueryPoinyt : Empty Stub !!!\n");
-
+	dprintf_reg(stdnimp, "DragQueryPoinyt : Empty Stub !!!\n");
+        return FALSE;
 }
 
 
@@ -332,12 +305,12 @@
  */
 HINSTANCE ShellExecute(HWND hWnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, int iShowCmd)
 {
-	fprintf(stderr, "ShellExecute // hWnd=%04X\n", hWnd);
-	fprintf(stderr, "ShellExecute // lpOperation='%s'\n", lpOperation);
-	fprintf(stderr, "ShellExecute // lpFile='%s'\n", lpFile);
-	fprintf(stderr, "ShellExecute // lpParameters='%s'\n", lpParameters);
-	fprintf(stderr, "ShellExecute // lpDirectory='%s'\n", lpDirectory);
-	fprintf(stderr, "ShellExecute // iShowCmd=%04X\n", iShowCmd);
+	dprintf_reg(stdnimp, "ShellExecute // hWnd=%04X\n", hWnd);
+	dprintf_reg(stdnimp, "ShellExecute // lpOperation='%s'\n", lpOperation);
+	dprintf_reg(stdnimp, "ShellExecute // lpFile='%s'\n", lpFile);
+	dprintf_reg(stdnimp, "ShellExecute // lpParameters='%s'\n", lpParameters);
+	dprintf_reg(stdnimp, "ShellExecute // lpDirectory='%s'\n", lpDirectory);
+	dprintf_reg(stdnimp, "ShellExecute // iShowCmd=%04X\n", iShowCmd);
 	return 2; /* file not found */
 }
 
@@ -347,7 +320,7 @@
  */
 HINSTANCE FindExecutable(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult)
 {
-	fprintf(stderr, "FindExecutable : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "FindExecutable : Empty Stub !!!\n");
 
 }
 
@@ -371,7 +344,7 @@
 	else
 		*AppMisc = 0;
 
-	return DialogBox(hSysRes, "SHELL_ABOUT_MSGBOX", hWnd, (FARPROC)AboutDlgProc);
+	return DialogBox(hSysRes, "SHELL_ABOUT_MSGBOX", hWnd, (WNDPROC)AboutDlgProc);
 }
 
 
@@ -407,14 +380,14 @@
 	int		count;
 	HICON	hIcon = 0;
 	HINSTANCE hInst2 = hInst;
-	fprintf(stderr, "ExtractIcon(%04X, '%s', %d\n", 
+	dprintf_reg(stddeb, "ExtractIcon(%04X, '%s', %d\n", 
 			hInst, lpszExeFileName, nIconIndex);
 	if (lpszExeFileName != NULL) {
 		hInst2 = LoadLibrary(lpszExeFileName);
 		}
 	if (hInst2 != 0 && nIconIndex == (UINT)-1) {
 		count = GetRsrcCount(hInst2, NE_RSCTYPE_GROUP_ICON);
-		printf("ExtractIcon // '%s' has %d icons !\n", lpszExeFileName, count);
+		dprintf_reg(stddeb, "ExtractIcon // '%s' has %d icons !\n", lpszExeFileName, count);
 		return (HICON)count;
 		}
 	if (hInst2 != hInst && hInst2 != 0) {
@@ -429,7 +402,7 @@
  */
 HICON ExtractAssociatedIcon(HINSTANCE hInst,LPSTR lpIconPath, LPWORD lpiIcon)
 {
-	fprintf(stderr, "ExtractAssociatedIcon : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "ExtractAssociatedIcon : Empty Stub !!!\n");
 }
 
 /*************************************************************************
@@ -437,7 +410,7 @@
  */
 int RegisterShellHook(void *ptr) 
 {
-	fprintf(stderr, "RegisterShellHook : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "RegisterShellHook : Empty Stub !!!\n");
 	return 0;
 }
 
@@ -447,5 +420,5 @@
  */
 int ShellHookProc(void) 
 {
-	fprintf(stderr, "ShellHookProc : Empty Stub !!!\n");
+	dprintf_reg(stdnimp, "ShellHookProc : Empty Stub !!!\n");
 }
diff --git a/misc/spy.c b/misc/spy.c
index 2598711..f121b18 100644
--- a/misc/spy.c
+++ b/misc/spy.c
@@ -268,7 +268,7 @@
 	strstr(SpyFilters, msg_name) == NULL)
     {
 	msg_name[strlen(msg_name) - 1] = '\0';
-	fprintf(SpyFp, "%04.4x  %20.20s  %04.4x  %04.4x  %08.8x\n",
+	fprintf(SpyFp, "%04x  %20.20s  %04x  %04x  %08lx\n",
 		hwnd, msg_name, msg, wParam, lParam);
     }
 #endif
diff --git a/misc/stress.c b/misc/stress.c
index e503ef9..3223fa7 100644
--- a/misc/stress.c
+++ b/misc/stress.c
@@ -2,23 +2,22 @@
 #include <limits.h>
 #include "windows.h"
 #include "stress.h"
+#include "stddebug.h"
+/* #define DEBUG_STRESS */
+/* #undef  DEBUG_STRESS */
+#include "debug.h"
 
-#define STRESS_DEBUG
 
 int AllocDiskSpace(long lLeft, UINT uDrive)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: AllocDiskSpace %d, %ld\n", uDrive, lLeft);
-#endif
+	dprintf_stress(stdnimp, "stress.dll: AllocDiskSpace %d, %ld\n", uDrive, lLeft);
 
 	return 1;
 }
 
 int AllocFileHandles(int Left)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: AllocFileHandles %d\n", Left);
-#endif
+	dprintf_stress(stddeb, "stress.dll: AllocFileHandles %d\n", Left);
 
 	if (Left < 0)
 		return -1;
@@ -28,64 +27,48 @@
 
 BOOL AllocGDIMem(UINT uLeft)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: AllocGDIMem %d\n", uLeft);
-#endif
+	dprintf_stress(stddeb, "stress.dll: AllocGDIMem %d\n", uLeft);
 
 	return 1;
 }
 
 BOOL AllocMem(DWORD dwLeft)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: AllocMem %ld\n", dwLeft);
-#endif
+	dprintf_stress(stdnimp, "stress.dll: AllocMem %ld\n", dwLeft);
 
 	return 1;
 }
 
 BOOL AllocUserMem(UINT uContig)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: AllocUserMem %d\n", uContig);
-#endif
+	dprintf_stress(stddeb, "stress.dll: AllocUserMem %d\n", uContig);
 
 	return 1;
 }
 
 void FreeAllMem(void)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: FreeAllMem\n");
-#endif
+	dprintf_stress(stddeb, "stress.dll: FreeAllMem\n");
 }
 
 void FreeAllGDIMem(void)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: FreeAllGDIMem\n");
-#endif
+	dprintf_stress(stddeb, "stress.dll: FreeAllGDIMem\n");
 }
 
 void FreeAllUserMem(void)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: FreeAllUserMem\n");
-#endif
+	dprintf_stress(stddeb, "stress.dll: FreeAllUserMem\n");
 }
 
 void GetFreeAllUserMem(void)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: GetFreeAllUserMem\n");
-#endif
+       dprintf_stress(stddeb, "stress.dll: GetFreeAllUserMem\n");
 }
 
 int GetFreeFileHandles(void)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: GetFreeFileHandles\n");
-#endif
+	dprintf_stress(stddeb, "stress.dll: GetFreeFileHandles\n");
 
 #ifndef OPEN_MAX
 	return _POSIX_OPEN_MAX;
@@ -96,14 +79,10 @@
 
 void UnAllocDiskSpace(UINT drive)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: UnAllocDiskSpace %d\n", drive);
-#endif
+	dprintf_stress(stddeb, "stress.dll: UnAllocDiskSpace %d\n", drive);
 }
 
 void UnAllocFileHandles(void)
 {
-#ifdef STRESS_DEBUG
-	fprintf(stderr, "stress.dll: GetFreeAllUserMem\n");
-#endif
+	dprintf_stress(stddeb, "stress.dll: GetFreeAllUserMem\n");
 }
diff --git a/misc/winsocket.c b/misc/winsocket.c
index 5195e2a..f9e2b1d 100644
--- a/misc/winsocket.c
+++ b/misc/winsocket.c
@@ -19,8 +19,11 @@
 #include <unistd.h>
 #include "heap.h"
 #include "winsock.h"
+#include "stddebug.h"
+/* #define DEBUG_WINSOCK */
+/* #undef  DEBUG_WINSOCK */
+#include "debug.h"
 
-#define DEBUG_WINSOCK
 
 static WORD wsa_errno;
 static int wsa_initted;
@@ -180,9 +183,7 @@
 {
 	int sock;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_accept: socket %d, ptr %8x, length %d\n", s, (int) addr, addrlen);
-#endif
+	dprintf_winsock(stddeb, "WSA_accept: socket %d, ptr %8x, length %d\n", s, (int) addr, addrlen);
 
 	if ((sock = accept(s, addr, (int *) addrlen)) < 0) {
         	errno_to_wsaerrno();
@@ -193,10 +194,8 @@
 
 INT Winsock_bind(SOCKET s, struct sockaddr *name, INT namelen)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_bind: socket %d, ptr %8x, length %d\n", s, (int) name, namelen);
+	dprintf_winsock(stddeb, "WSA_bind: socket %d, ptr %8x, length %d\n", s, (int) name, namelen);
 	dump_sockaddr(name);
-#endif
 
 	if (bind(s, name, namelen) < 0) {
         	errno_to_wsaerrno();
@@ -207,9 +206,7 @@
 
 INT Winsock_closesocket(SOCKET s)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_closesocket: socket %d\n", s);
-#endif
+	dprintf_winsock(stddeb, "WSA_closesocket: socket %d\n", s);
 
 	FD_CLR(s, &fd_in_use);
 
@@ -222,10 +219,8 @@
 
 INT Winsock_connect(SOCKET s, struct sockaddr *name, INT namelen)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_connect: socket %d, ptr %8x, length %d\n", s, (int) name, namelen);
+	dprintf_winsock(stddeb, "WSA_connect: socket %d, ptr %8x, length %d\n", s, (int) name, namelen);
 	dump_sockaddr(name);
-#endif
 
 	if (connect(s, name, namelen) < 0) {
         	errno_to_wsaerrno();
@@ -236,10 +231,8 @@
 
 INT Winsock_getpeername(SOCKET s, struct sockaddr *name, INT *namelen)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_getpeername: socket: %d, ptr %8x, ptr %8x\n", s, (int) name, *namelen);
+	dprintf_winsock(stddeb, "WSA_getpeername: socket: %d, ptr %8x, ptr %8x\n", s, (int) name, *namelen);
 	dump_sockaddr(name);
-#endif
 
 	if (getpeername(s, name, (int *) namelen) < 0) {
         	errno_to_wsaerrno();
@@ -250,9 +243,7 @@
 
 INT Winsock_getsockname(SOCKET s, struct sockaddr *name, INT *namelen)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_getsockname: socket: %d, ptr %8x, ptr %8x\n", s, (int) name, (int) *namelen);
-#endif
+	dprintf_winsock(stddeb, "WSA_getsockname: socket: %d, ptr %8x, ptr %8x\n", s, (int) name, (int) *namelen);
 	if (getsockname(s, name, (int *) namelen) < 0) {
         	errno_to_wsaerrno();
         	return SOCKET_ERROR;
@@ -263,9 +254,7 @@
 INT
 Winsock_getsockopt(SOCKET s, INT level, INT optname, char *optval, INT *optlen)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_getsockopt: socket: %d, opt %d, ptr %8x, ptr %8x\n", s, level, (int) optval, (int) *optlen);
-#endif
+	dprintf_winsock(stddeb, "WSA_getsockopt: socket: %d, opt %d, ptr %8x, ptr %8x\n", s, level, (int) optval, (int) *optlen);
 	convert_sockopt(&level, &optname);
 
 	if (getsockopt(s, (int) level, optname, optval, (int *) optlen) < 0) {
@@ -294,9 +283,7 @@
 {
 	char *s;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_inet_ntoa: %8x\n", in);
-#endif
+	dprintf_winsock(stddeb, "WSA_inet_ntoa: %8x\n", in);
 
 	if ((s = inet_ntoa(in)) == NULL) {
         	errno_to_wsaerrno();
@@ -310,9 +297,7 @@
 
 INT Winsock_ioctlsocket(SOCKET s, long cmd, u_long *argp)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_ioctl: socket %d, cmd %d, ptr %8x\n", s, cmd, (int) argp);
-#endif
+	dprintf_winsock(stddeb, "WSA_ioctl: socket %d, cmd %d, ptr %8x\n", s, cmd, (int) argp);
 
 	if (ioctl(s, cmd, argp) < 0) {
         	errno_to_wsaerrno();
@@ -323,9 +308,7 @@
 
 INT Winsock_listen(SOCKET s, INT backlog)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_listen: socket %d, backlog %d\n", s, backlog);
-#endif
+	dprintf_winsock(stddeb, "WSA_listen: socket %d, backlog %d\n", s, backlog);
 
 	if (listen(s, backlog) < 0) {
         	errno_to_wsaerrno();
@@ -348,9 +331,7 @@
 {
 	int length;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_recv: socket %d, ptr %8x, length %d, flags %d\n", s, (int) buf, len, flags);
-#endif
+	dprintf_winsock(stddeb, "WSA_recv: socket %d, ptr %8x, length %d, flags %d\n", s, (int) buf, len, flags);
 
 	if ((length = recv(s, buf, len, flags)) < 0) {
         	errno_to_wsaerrno();
@@ -364,9 +345,7 @@
 {
 	int length;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_recvfrom: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
-#endif
+	dprintf_winsock(stddeb, "WSA_recvfrom: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
 
 	if ((length = recvfrom(s, buf, len, flags, from, fromlen)) < 0) {
         	errno_to_wsaerrno();
@@ -378,9 +357,7 @@
 INT Winsock_select(INT nfds, fd_set *readfds, fd_set *writefds,
 	fd_set *exceptfds, struct timeval *timeout)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_select: fd # %d, ptr %8x, ptr %8x, ptr %*X\n", nfds, readfds, writefds, exceptfds);
-#endif
+	dprintf_winsock(stddeb, "WSA_select: fd # %d, ptr %8x, ptr %8x, ptr %*X\n", nfds, readfds, writefds, exceptfds);
 
 	return(select(nfds, readfds, writefds, exceptfds, timeout));
 }
@@ -389,9 +366,7 @@
 {
 	int length;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_send: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
-#endif
+	dprintf_winsock(stddeb, "WSA_send: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
 
 	if ((length = send(s, buf, len, flags)) < 0) {
         	errno_to_wsaerrno();
@@ -405,9 +380,7 @@
 {
 	int length;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_sendto: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
-#endif
+	dprintf_winsock(stddeb, "WSA_sendto: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
 
 	if ((length = sendto(s, buf, len, flags, to, tolen)) < 0) {
         	errno_to_wsaerrno();
@@ -419,9 +392,7 @@
 INT Winsock_setsockopt(SOCKET s, INT level, INT optname, const char *optval, 
 			INT optlen)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_setsockopt: socket %d, level %d, opt %d, ptr %8x, len %d\n", s, level, optname, (int) optval, optlen);
-#endif
+	dprintf_winsock(stddeb, "WSA_setsockopt: socket %d, level %d, opt %d, ptr %8x, len %d\n", s, level, optname, (int) optval, optlen);
 	convert_sockopt(&level, &optname);
 	
 	if (setsockopt(s, level, optname, optval, optlen) < 0) {
@@ -433,9 +404,7 @@
 
 INT Winsock_shutdown(SOCKET s, INT how)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_shutdown: socket s %d, how %d\n", s, how);
-#endif
+	dprintf_winsock(stddeb, "WSA_shutdown: socket s %d, how %d\n", s, how);
 
 	if (shutdown(s, how) < 0) {
         	errno_to_wsaerrno();
@@ -448,15 +417,11 @@
 {
     int sock;
 
-#ifdef DEBUG_WINSOCK
-    fprintf(stderr, "WSA_socket: af=%d type=%d protocol=%d\n", af, type, protocol);
-#endif
+    dprintf_winsock(stddeb, "WSA_socket: af=%d type=%d protocol=%d\n", af, type, protocol);
 
     if ((sock = socket(af, type, protocol)) < 0) {
             errno_to_wsaerrno();
-#ifdef DEBUG_WINSOCK
-    fprintf(stderr, "WSA_socket: failed !\n");
-#endif
+    dprintf_winsock(stddeb, "WSA_socket: failed !\n");
             return INVALID_SOCKET;
     }
     
@@ -467,9 +432,7 @@
 
     FD_SET(sock, &fd_in_use);
 
-#ifdef DEBUG_WINSOCK
-    fprintf(stderr, "WSA_socket: fd %d\n", sock);
-#endif
+    dprintf_winsock(stddeb, "WSA_socket: fd %d\n", sock);
     return sock;
 }
 
@@ -477,9 +440,7 @@
 {
 	struct hostent *host;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_gethostbyaddr: ptr %8x, len %d, type %d\n", (int) addr, len, type);
-#endif
+	dprintf_winsock(stddeb, "WSA_gethostbyaddr: ptr %8x, len %d, type %d\n", (int) addr, len, type);
 
 	if ((host = gethostbyaddr(addr, len, type)) == NULL) {
         	errno_to_wsaerrno();
@@ -494,9 +455,7 @@
 {
 	struct hostent *host;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_gethostbyname: name %s\n", name);
-#endif
+	dprintf_winsock(stddeb, "WSA_gethostbyname: name %s\n", name);
 
 	if ((host = gethostbyname(name)) == NULL) {
         	errno_to_wsaerrno();
@@ -510,9 +469,7 @@
 int Winsock_gethostname(char *name, INT namelen)
 {
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_gethostname: name %d, len %d\n", name, namelen);
-#endif
+	dprintf_winsock(stddeb, "WSA_gethostname: name %d, len %d\n", name, namelen);
 
 	if (gethostname(name, namelen) < 0) {
         	errno_to_wsaerrno();
@@ -525,9 +482,7 @@
 {
 	struct protoent *proto;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_getprotobyname: name %s\n", name);
-#endif
+	dprintf_winsock(stddeb, "WSA_getprotobyname: name %s\n", name);
 
 	if ((proto = getprotobyname(name)) == NULL) {
         	errno_to_wsaerrno();
@@ -542,9 +497,7 @@
 {
 	struct protoent *proto;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_getprotobynumber: num %d\n", number);
-#endif
+	dprintf_winsock(stddeb, "WSA_getprotobynumber: num %d\n", number);
 
 	if ((proto = getprotobynumber(number)) == NULL) {
         	errno_to_wsaerrno();
@@ -559,9 +512,7 @@
 {
 	struct servent *service;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_getservbyname: name %s, proto %s\n", name, proto);
-#endif
+	dprintf_winsock(stddeb, "WSA_getservbyname: name %s, proto %s\n", name, proto);
 
 	if ((service = getservbyname(name, proto)) == NULL) {
         	errno_to_wsaerrno();
@@ -576,9 +527,7 @@
 {
 	struct servent *service;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_getservbyport: port %d, name %s\n", port, proto);
-#endif
+	dprintf_winsock(stddeb, "WSA_getservbyport: port %d, name %s\n", port, proto);
 
 	if ((service = getservbyport(port, proto)) == NULL) {
         	errno_to_wsaerrno();
@@ -776,9 +725,7 @@
 	long event;
 	fd_set read_fds, write_fds, except_fds;
 
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_AsyncSelect: socket %d, HWND %d, wMsg %d, event %d\n", s, hWnd, wMsg, lEvent);
-#endif
+	dprintf_winsock(stddeb, "WSA_AsyncSelect: socket %d, HWND %d, wMsg %d, event %d\n", s, hWnd, wMsg, lEvent);
 
 	/* remove outstanding asyncselect() processes */
 	/* kill */
@@ -820,51 +767,39 @@
 
 INT WSACancelAsyncRequest(HANDLE hAsyncTaskHandle)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_AsyncRequest: handle %d\n", hAsyncTaskHandle);
-#endif
+	dprintf_winsock(stddeb, "WSA_AsyncRequest: handle %d\n", hAsyncTaskHandle);
 
 	return 0;
 }
 
 INT WSACancelBlockingCall(void)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_CancelBlockCall\n");
-#endif
+	dprintf_winsock(stddeb, "WSA_CancelBlockCall\n");
 	return 0;
 }
           
 INT WSAGetLastError(void)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_GetLastError\n");
-#endif
+	dprintf_winsock(stddeb, "WSA_GetLastError\n");
 
     return wsa_errno;
 }
 
 void WSASetLastError(INT iError)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_SetLastErorr %d\n", iError);
-#endif
+	dprintf_winsock(stddeb, "WSA_SetLastErorr %d\n", iError);
 
     wsa_errno = iError;
 }
 
 BOOL WSAIsBlocking(void)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_IsBlocking\n");
-#endif
+	dprintf_winsock(stddeb, "WSA_IsBlocking\n");
 }
 
 FARPROC WSASetBlockingHook(FARPROC lpBlockFunc)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_SetBlockHook %8x, STUB!\n", lpBlockFunc);
-#endif
+	dprintf_winsock(stddeb, "WSA_SetBlockHook %8x, STUB!\n", lpBlockFunc);
 	BlockFunction = lpBlockFunc;
 
 	return lpBlockFunc;
@@ -872,9 +807,7 @@
 
 INT WSAUnhookBlockingHook(void)
 {
-#ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_UnhookBlockingHook\n");
-#endif
+	dprintf_winsock(stddeb, "WSA_UnhookBlockingHook\n");
 	BlockFunction = NULL;
 
 	return 0;
@@ -903,9 +836,7 @@
     int HeapHandle;
     MDESC *MyHeap;
 
-#ifdef DEBUG_WINSOCK
-    fprintf(stderr, "WSAStartup: verReq=%x\n", wVersionRequested);
-#endif
+    dprintf_winsock(stddeb, "WSAStartup: verReq=%x\n", wVersionRequested);
 
     if (LOBYTE(wVersionRequested) < 1 ||
         (LOBYTE(wVersionRequested) == 1 &&
diff --git a/miscemu/int10.c b/miscemu/int10.c
index 2260fff..123ddbb 100644
--- a/miscemu/int10.c
+++ b/miscemu/int10.c
@@ -9,8 +9,8 @@
 
 void IntBarf(int i, struct sigcontext_struct *context)
 {
-	fprintf(stderr, "int%x: unknown/not implemented parameters:\n", i);
-	fprintf(stderr, "int%x: AX %04x, BX %04x, CX %04x, DX %04x, "
+	fprintf(stdnimp, "int%x: unknown/not implemented parameters:\n", i);
+	fprintf(stdnimp, "int%x: AX %04x, BX %04x, CX %04x, DX %04x, "
 	       "SI %04x, DI %04x, DS %04x, ES %04x\n",
 	       i, AX, BX, CX, DX, SI, DI, DS, ES);
 }
diff --git a/miscemu/int21.c b/miscemu/int21.c
index 84cb953..fae0a1b 100644
--- a/miscemu/int21.c
+++ b/miscemu/int21.c
@@ -97,8 +97,8 @@
 /*
 static void Barf(struct sigcontext_struct *context)
 {
-	fprintf(stderr, "int21: unknown/not implemented parameters:\n");
-	fprintf(stderr, "int21: AX %04x, BX %04x, CX %04x, DX %04x, "
+	fprintf(stdnimp, "int21: unknown/not implemented parameters:\n");
+	fprintf(stdnimp, "int21: AX %04x, BX %04x, CX %04x, DX %04x, "
 	       "SI %04x, DI %04x, DS %04x, ES %04x\n",
 	       AX, BX, CX, DX, SI, DI, DS, ES);
 }
@@ -235,7 +235,7 @@
 		return;
 	}
 
-	ptr = pointer (DS,DX);
+	ptr = SAFEMAKEPTR (DS,DX);
 	if (BX == 0) {
 		*ptr = EOF;
 		Error (0,0,0);
@@ -261,7 +261,7 @@
 	char *ptr;
 	int x,size;
 	
-	ptr = pointer (DS,DX);
+	ptr = SAFEMAKEPTR (DS,DX);
 	
 	if (BX == 0) {
 		Error (InvalidHandle, EC_Unknown, EL_Unknown);
@@ -312,7 +312,7 @@
 		case 0: fileoffset = SEEK_SET;
 			break;
 		}
-	status = lseek(BX, (CX * 0x100) + DX, fileoffset);
+        status = lseek(BX, (CX << 16) + DX, fileoffset);
 	if (status == -1) {
 		errno_to_doserr();
 		AL = ExtendedError;			SetCflag;
@@ -355,7 +355,7 @@
 
 static void ioctlGenericBlkDevReq(struct sigcontext_struct *context)
 {
-	BYTE *dataptr = pointer(DS, DX);
+	BYTE *dataptr = SAFEMAKEPTR(DS, DX);
 	int drive;
 
 	if (BL == 0)
@@ -436,7 +436,7 @@
 {
 	int handle;
 
-	if ((handle = open(GetUnixFileName( pointer(DS,DX)), 
+	if ((handle = open(GetUnixFileName( SAFEMAKEPTR(DS,DX)), 
            O_CREAT | O_TRUNC | O_RDWR )) == -1) {
 		errno_to_doserr();
 		AL = ExtendedError;
@@ -469,7 +469,7 @@
 	    break;
 	}
 
-	if ((handle = open(GetUnixFileName(pointer(DS,DX)), mode)) == -1) {
+	if ((handle = open(GetUnixFileName(SAFEMAKEPTR(DS,DX)), mode)) == -1) {
 		errno_to_doserr();
 		AL = ExtendedError;
 		SetCflag;
@@ -486,7 +486,7 @@
 	  case 0x30:    /* DENYREAD */
 	    dprintf_int(stdnimp,
 	      "OpenExistingFile (%s): DENYREAD changed to DENYALL\n",
-	      pointer(DS,DX));
+	      SAFEMAKEPTR(DS,DX));
 	  case 0x10:    /* DENYALL */  
 	    lock = LOCK_EX;
 	    break;
@@ -550,10 +550,10 @@
 	char *newname, *oldname;
 
 	dprintf_int(stddeb,"int21: renaming %s to %s\n",
-			pointer(DS,DX), pointer(ES,DI) );
+			SAFEMAKEPTR(DS,DX), SAFEMAKEPTR(ES,DI) );
 	
-	oldname = GetUnixFileName( pointer(DS,DX) );
-	newname = GetUnixFileName( pointer(ES,DI) );
+	oldname = GetUnixFileName( SAFEMAKEPTR(DS,DX) );
+	newname = GetUnixFileName( SAFEMAKEPTR(ES,DI) );
 
 	rename( oldname, newname);
 	ResetCflag;
@@ -564,9 +564,9 @@
 {
 	char *dirname;
 
-	dprintf_int(stddeb,"int21: makedir %s\n", pointer(DS,DX) );
+	dprintf_int(stddeb,"int21: makedir %s\n", SAFEMAKEPTR(DS,DX) );
 	
-	if ((dirname = GetUnixFileName( pointer(DS,DX) ))== NULL) {
+	if ((dirname = GetUnixFileName( SAFEMAKEPTR(DS,DX) ))== NULL) {
 		AL = CanNotMakeDir;
 		SetCflag;
 		return;
@@ -583,7 +583,7 @@
 static void ChangeDir(struct sigcontext_struct *context)
 {
 	int drive;
-	char *dirname = pointer(DS,DX);
+	char *dirname = SAFEMAKEPTR(DS,DX);
 	drive = DOS_GetDefaultDrive();
 	dprintf_int(stddeb,"int21: changedir %s\n", dirname);
 	if (dirname != NULL && dirname[1] == ':') {
@@ -601,9 +601,9 @@
 {
 	char *dirname;
 
-	dprintf_int(stddeb,"int21: removedir %s\n", pointer(DS,DX) );
+	dprintf_int(stddeb,"int21: removedir %s\n", SAFEMAKEPTR(DS,DX) );
 
-	if ((dirname = GetUnixFileName( pointer(DS,DX) ))== NULL) {
+	if ((dirname = GetUnixFileName( SAFEMAKEPTR(DS,DX) ))== NULL) {
 		AL = CanNotMakeDir;
 		SetCflag;
 		return;
@@ -624,7 +624,7 @@
 
 static void ExecProgram(struct sigcontext_struct *context)
 {
-	execl("wine", GetUnixFileName( pointer(DS,DX)) );
+	execl("wine", GetUnixFileName( SAFEMAKEPTR(DS,DX)) );
 }
 
 static void FindNext(struct sigcontext_struct *context)
@@ -656,7 +656,7 @@
 
 static void FindFirst(struct sigcontext_struct *context)
 {
-	BYTE drive, *path = pointer(DS, DX);
+	BYTE drive, *path = SAFEMAKEPTR(DS, DX);
 	struct dosdirent *dp;
 
 	if ((*path)&&(path[1] == ':')) {
@@ -704,7 +704,7 @@
 	struct stat filestat;
 	struct tm *now;
 
-	if ((filename = GetUnixFileName( pointer(DS,DX) ))== NULL) {
+	if ((filename = GetUnixFileName( SAFEMAKEPTR(DS,DX) ))== NULL) {
 		AL = FileNotFound;
 		SetCflag;
 		return;
@@ -724,7 +724,7 @@
 	char *filename;
 	struct utimbuf filetime;
 	
-	filename = GetUnixFileName( pointer(DS,DX) );
+	filename = GetUnixFileName( SAFEMAKEPTR(DS,DX) );
 
 	filetime.actime = 0L;
 	filetime.modtime = filetime.actime;
@@ -750,7 +750,7 @@
 		return;
 	}
 
-	strcpy(pointer(DS,DX), temp);
+	strcpy(SAFEMAKEPTR(DS,DX), temp);
 	
 	AX = handle;
 	ResetCflag;
@@ -760,7 +760,7 @@
 {
 	int handle;
 	
-	if ((handle = open(GetUnixFileName( pointer(DS,DX) ), O_CREAT | O_EXCL | O_RDWR)) == -1) {
+	if ((handle = open(GetUnixFileName( SAFEMAKEPTR(DS,DX) ), O_CREAT | O_EXCL | O_RDWR)) == -1) {
 		AL = WriteProtected;
 		SetCflag;
 		return;
@@ -785,14 +785,14 @@
 		return;
 	}
 
-	strcpy(pointer(DS,SI), DOS_GetCurrentDir(drive) );
+	strcpy(SAFEMAKEPTR(DS,SI), DOS_GetCurrentDir(drive) );
 	ResetCflag;
 }
 
 static void GetDiskSerialNumber(struct sigcontext_struct *context)
 {
 	int drive;
-	BYTE *dataptr = pointer(DS, DX);
+	BYTE *dataptr = SAFEMAKEPTR(DS, DX);
 	DWORD serialnumber;
 	
 	if (BL == 0)
@@ -820,7 +820,7 @@
 static void SetDiskSerialNumber(struct sigcontext_struct *context)
 {
 	int drive;
-	BYTE *dataptr = pointer(DS, DX);
+	BYTE *dataptr = SAFEMAKEPTR(DS, DX);
 	DWORD serialnumber;
 
 	if (BL == 0)
@@ -860,7 +860,7 @@
 
 static void FindFirstFCB(struct sigcontext_struct *context)
 {
-	BYTE *fcb = pointer(DS, DX);
+	BYTE *fcb = SAFEMAKEPTR(DS, DX);
 	struct fcb *standard_fcb;
 	struct fcb *output_fcb;
 	int drive;
@@ -927,7 +927,7 @@
 
 static void DeleteFileFCB(struct sigcontext_struct *context)
 {
-	BYTE *fcb = pointer(DS, DX);
+	BYTE *fcb = SAFEMAKEPTR(DS, DX);
 	int drive;
 	struct dosdirent *dp;
 	char temp[256], *ptr;
@@ -969,7 +969,7 @@
 
 static void RenameFileFCB(struct sigcontext_struct *context)
 {
-	BYTE *fcb = pointer(DS, DX);
+	BYTE *fcb = SAFEMAKEPTR(DS, DX);
 	int drive;
 	struct dosdirent *dp;
 	char temp[256], oldname[256], newname[256], *oldnameptr, *newnameptr;
@@ -1069,7 +1069,7 @@
 
 static void GetFileAttribute (struct sigcontext_struct * context)
 {
-  char *filename = pointer (DS,DX);
+  char *filename = SAFEMAKEPTR (DS,DX);
   struct stat s;
   int res,cx; 
 
@@ -1201,7 +1201,7 @@
 	    break;
 
 	  case 0x1a: /* SET DISK TRANSFER AREA ADDRESS */
-            dta = pointer(DS, DX);
+            dta = SAFEMAKEPTR(DS, DX);
             break;
 
 	  case 0x1b: /* GET ALLOCATION INFORMATION FOR DEFAULT DRIVE */
@@ -1336,7 +1336,7 @@
 	    break;
 	
 	  case 0x41: /* "UNLINK" - DELETE FILE */
-		if (unlink( GetUnixFileName( pointer(DS,DX)) ) == -1) {
+		if (unlink( GetUnixFileName( SAFEMAKEPTR(DS,DX)) ) == -1) {
 			errno_to_doserr();
 			AL = ExtendedError;
 			SetCflag;
@@ -1526,7 +1526,7 @@
 	    break;
 
 	  case 0x60: /* "TRUENAME" - CANONICALIZE FILENAME OR PATH */
-		strncpy(pointer(ES,DI), pointer(DS,SI), strlen(pointer(DS,SI)) & 0x7f);
+		strncpy(SAFEMAKEPTR(ES,DI), SAFEMAKEPTR(DS,SI), strlen(SAFEMAKEPTR(DS,SI)) & 0x7f);
 		ResetCflag;
 	    break;
 
diff --git a/miscemu/int25.c b/miscemu/int25.c
index 7f95717..67c2ec6 100644
--- a/miscemu/int25.c
+++ b/miscemu/int25.c
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include "registers.h"
 #include "msdos.h"
+#include "segmem.h"
 #include "wine.h"
 #include "stddebug.h"
 /* #define DEBUG_INT */
@@ -10,7 +11,7 @@
 
 int do_int25(struct sigcontext_struct *context)
 {
-	BYTE *dataptr = pointer(DS, BX);
+	BYTE *dataptr = SAFEMAKEPTR(DS, BX);
 	DWORD begin, length;
 
 	if (CX == 0xffff) {
@@ -37,7 +38,7 @@
 
 	/* push flags on stack */
 	SP -= sizeof(WORD);
-	setword(pointer(SS,SP), (WORD) EFL);
+	setword(SAFEMAKEPTR(SS,SP), (WORD) EFL);
 
 	return 1;
 }
diff --git a/miscemu/int26.c b/miscemu/int26.c
index 6abe988..2b262ed 100644
--- a/miscemu/int26.c
+++ b/miscemu/int26.c
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include "registers.h"
 #include "msdos.h"
+#include "segmem.h"
 #include "wine.h"
 #include "stddebug.h"
 /* #define DEBUG_INT */
@@ -12,7 +13,7 @@
 
 int do_int26(struct sigcontext_struct *context)
 {
-	BYTE *dataptr = pointer(DS, BX);
+	BYTE *dataptr = SAFEMAKEPTR(DS, BX);
 	DWORD begin, length;
 
 	if (CX == 0xffff) {
@@ -32,7 +33,7 @@
 
 	/* push flags on stack */
 	SP -= sizeof(WORD);
-	setword(pointer(SS,SP), (WORD) EFL);
+	setword(SAFEMAKEPTR(SS,SP), (WORD) EFL);
 
 	return 1;
 }
diff --git a/objects/bitblt.c b/objects/bitblt.c
index 47aa35c..0aa4e9a 100644
--- a/objects/bitblt.c
+++ b/objects/bitblt.c
@@ -15,11 +15,12 @@
 #include "metafile.h"
 #include "options.h"
 #include "stddebug.h"
-/* #define DEBUG_GDI /* */
-/* #undef  DEBUG_GDI /* */
+/* #define DEBUG_GDI */
+/* #undef  DEBUG_GDI */
 #include "debug.h"
 
 extern const int DC_XROPfunction[];
+extern Colormap COLOR_WinColormap;
 
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 #define MAX(a,b) ((a) > (b) ? (a) : (b))
@@ -41,7 +42,7 @@
 	return TRUE;
     }
 
-    dprintf_gdi(stddeb, "PatBlt: %d %d,%d %dx%d %06x\n",
+    dprintf_gdi(stddeb, "PatBlt: %d %d,%d %dx%d %06lx\n",
 	    hdc, left, top, width, height, rop );
 
       /* Convert ROP3 code to ROP2 code */
@@ -92,7 +93,7 @@
     DWORD saverop = rop;
     DC *dcDest, *dcSrc;
 
-    dprintf_gdi(stddeb, "BitBlt: %04x %d,%d %dx%d %04x %d,%d %08x\n",
+    dprintf_gdi(stddeb, "BitBlt: %04x %d,%d %dx%d %04x %d,%d %06lx\n",
                 hdcDest, xDest, yDest, width, height, hdcSrc, xSrc, ySrc, rop);
 
     if (width == 0 || height == 0) return FALSE;
@@ -100,12 +101,7 @@
 	return PatBlt( hdcDest, xDest, yDest, width, height, rop );
 
     rop >>= 16;
-    if ((rop & 0x0f) != (rop >> 4))
-    {
-	dprintf_gdi(stdnimp, "BitBlt: Unimplemented ROP %02x\n", rop );
-	return FALSE;
-    }
-    
+
     dcSrc = (DC *) GDI_GetObjPtr( hdcSrc, DC_MAGIC );
     if (!dcSrc) return FALSE;
     dcDest = (DC *) GDI_GetObjPtr( hdcDest, DC_MAGIC );
@@ -131,22 +127,128 @@
 	return FALSE;  /* Should call StretchBlt here */
     
     DC_SetupGCForText( dcDest );
-    XSetFunction( display, dcDest->u.x.gc, DC_XROPfunction[rop & 0x0f] );
-    if (dcSrc->w.bitsPerPixel == dcDest->w.bitsPerPixel)
-    {
-	XCopyArea( display, dcSrc->u.x.drawable,
-		   dcDest->u.x.drawable, dcDest->u.x.gc,
-		   min(xs1,xs2), min(ys1,ys2), abs(xs2-xs1), abs(ys2-ys1),
-		   min(xd1,xd2), min(yd1,yd2) );
-    }
+    if (((rop & 0x0f) == (rop >> 4))&&(rop!=0xbb))
+	/* FIXME: Test, whether more than just 0xbb has to be excluded */
+      {
+        XSetFunction( display, dcDest->u.x.gc, DC_XROPfunction[rop & 0x0f] );
+        if (dcSrc->w.bitsPerPixel == dcDest->w.bitsPerPixel)
+        {
+	    XCopyArea( display, dcSrc->u.x.drawable,
+	    	       dcDest->u.x.drawable, dcDest->u.x.gc,
+		       min(xs1,xs2), min(ys1,ys2), abs(xs2-xs1), abs(ys2-ys1),
+		       min(xd1,xd2), min(yd1,yd2) );
+        }
+        else
+        {
+	   if (dcSrc->w.bitsPerPixel != 1) return FALSE;
+	    XCopyPlane( display, dcSrc->u.x.drawable,
+	  	        dcDest->u.x.drawable, dcDest->u.x.gc,
+		        min(xs1,xs2), min(ys1,ys2), abs(xs2-xs1), abs(ys2-ys1),
+		        min(xd1,xd2), min(yd1,yd2), 1 );
+        }
+      }  
     else
-    {
-	if (dcSrc->w.bitsPerPixel != 1) return FALSE;
-	XCopyPlane( display, dcSrc->u.x.drawable,
-		    dcDest->u.x.drawable, dcDest->u.x.gc,
-		    min(xs1,xs2), min(ys1,ys2), abs(xs2-xs1), abs(ys2-ys1),
-		    min(xd1,xd2), min(yd1,yd2), 1 );
-    }
+      {
+        XImage *sxi, *dxi, *bxi;
+	int x,y,s,d,p,res,ofs,i,cp,cs,cd,cres;
+	XColor sentry,dentry,pentry,entry;
+	long colors[256];
+
+	/* HDC hdcBrush = CreateCompatibleDC(hdcDest);
+	DC *dcBrush;*/
+	RECT r = {min(xDest,xDest+width), min(yDest,yDest+height), 
+		  MAX(xDest,xDest+width), MAX(yDest,yDest+height)};
+	HBRUSH cur_brush=SelectObject(hdcDest, GetStockObject(BLACK_BRUSH));
+	SelectObject(hdcDest, cur_brush);
+        /* FillRect(hdcBrush, &r, cur_brush);*/
+        sxi=XGetImage(display, dcSrc->u.x.drawable, min(xs1,xs2), min(ys1,ys2), 
+             abs(xs2-xs1), abs(ys2-ys1), AllPlanes, ZPixmap);
+        dxi=XGetImage(display, dcDest->u.x.drawable, min(xd1,xd2),min(yd1,yd2), 
+             abs(xs2-xs1), abs(ys2-ys1), AllPlanes, ZPixmap);
+        /* dcBrush = (DC *) GDI_GetObjPtr( hdcBrush, DC_MAGIC );*/
+        /* bxi=XGetImage(display, dcBrush->u.x.drawable, min(xd1,xd2),min(yd1,yd2),
+             abs(xs2-xs1), abs(ys2-ys1), AllPlanes, ZPixmap);*/
+	/* FIXME: It's really not necessary to do this on the visible screen */
+        FillRect(hdcDest, &r, cur_brush);
+	bxi=XGetImage(display, dcDest->u.x.drawable, min(xd1,xd2),min(yd1,yd2),
+             abs(xs2-xs1), abs(ys2-ys1), AllPlanes, ZPixmap);
+        for (i=0; i<min(256,1<<(dcDest->w.bitsPerPixel)); i++)
+	{
+	  entry.pixel = i;
+	  XQueryColor ( display, COLOR_WinColormap, &entry);
+	  colors[i] = (int) RGB( entry.red>>8, entry.green>>8, entry.blue>>8 );
+	}
+	if (dcSrc->w.bitsPerPixel == dcDest->w.bitsPerPixel)
+        {
+ 	  for(x=0; x<abs(xs2-xs1); x++)
+	  {
+	    for(y=0; y<abs(ys2-ys1); y++)
+	    {
+	      s = XGetPixel(sxi, x, y);
+	      d = XGetPixel(dxi, x, y);
+	      p = XGetPixel(bxi, x, y);
+	      if (s<256)
+		cs=colors[s];
+	      else
+	      {
+	        sentry.pixel = s;
+		XQueryColor ( display, COLOR_WinColormap, &sentry);
+		cs = (int) RGB( sentry.red>>8,sentry.green>>8, sentry.blue>>8 );
+	      }
+	      if (d<256)
+		cd=colors[d];
+	      else
+	      {
+       		dentry.pixel = d;
+		XQueryColor ( display, COLOR_WinColormap, &dentry);
+		cd = (int) RGB( dentry.red>>8, dentry.green>>8,dentry.blue>>8 );
+	      }
+	      if (p<256)
+		cp=colors[p];
+	      else
+    	      {	      
+	        pentry.pixel = p;
+	        XQueryColor ( display, COLOR_WinColormap, &pentry);
+	        cp = (int) RGB( pentry.red>>8, pentry.green>>8,pentry.blue>>8 );
+	      }
+	      cres = 0;
+	      for(i=0; i<24; i++)
+ 	      {
+		ofs=1<<(((cp>>i)&1)*4+((cs>>i)&1)*2+((cd>>i)&1));
+		if (rop & ofs)
+		  cres |= (1<<i);
+	      }
+	      if (cres==cs)
+		res=s;
+	      else if (cres==cd)
+		res=d;
+	      else if (cres==cp)
+		res=p;
+	      else
+	      {
+		res = -1;
+	        for (i=0; i<min(256,1<<(dcDest->w.bitsPerPixel)); i++)
+		  if (colors[i]==cres)
+		  {
+		    res = i;
+		    break;
+	          }
+		if (res == -1)
+	          res = GetNearestPaletteIndex(dcDest->w.hPalette, res);
+	      } 	
+	      XPutPixel(dxi, x, y, res);
+	    }
+	  }
+        }
+	else
+	    fprintf(stderr,"BitBlt // depths different!\n");
+	XPutImage(display, dcDest->u.x.drawable, dcDest->u.x.gc,
+            dxi, 0, 0, min(xd1,xd2), min(yd1,yd2), abs(xs2-xs1), abs(ys2-ys1)+38);
+	XDestroyImage(sxi);
+        XDestroyImage(dxi);
+	XDestroyImage(bxi);
+	/*DeleteDC(hdcBrush);*/
+      }
     return TRUE;
 }
 
@@ -351,9 +453,8 @@
     XImage *sxi, *dxi;
     DWORD saverop = rop;
     WORD stretchmode;
-	BOOL	flg;
 
-    dprintf_gdi(stddeb, "StretchBlt: %d %d,%d %dx%d %d %d,%d %dx%d %08x\n",
+    dprintf_gdi(stddeb, "StretchBlt: %d %d,%d %dx%d %d %d,%d %dx%d %06lx\n",
            hdcDest, xDest, yDest, widthDest, heightDest, hdcSrc, xSrc, 
            ySrc, widthSrc, heightSrc, rop );
     dprintf_gdi(stddeb, "StretchMode is %x\n", 
@@ -376,7 +477,7 @@
     rop >>= 16;
     if ((rop & 0x0f) != (rop >> 4))
     {
-        dprintf_gdi(stdnimp, "StretchBlt: Unimplemented ROP %02x\n", rop );
+        fprintf(stdnimp, "StretchBlt: Unimplemented ROP %02lx\n", rop );
         return FALSE;
     }
 
diff --git a/objects/bitmap.c b/objects/bitmap.c
index 0785559..2b540e6 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -27,7 +27,8 @@
   /* GCs used for B&W and color bitmap operations */
 GC BITMAP_monoGC = 0, BITMAP_colorGC = 0;
 
-extern void DC_InitDC( HDC hdc );  /* dc.c */
+extern void DC_InitDC( HDC hdc );                /* objects/dc.c */
+extern void CLIPPING_UpdateGCRegion( DC * dc );  /* objects/clipping.c */
 
 /***********************************************************************
  *           BITMAP_Init
@@ -296,12 +297,16 @@
 HBITMAP BITMAP_SelectObject( HDC hdc, DC * dc, HBITMAP hbitmap,
 			     BITMAPOBJ * bmp )
 {
+    HRGN hrgn;
     HBITMAP prevHandle = dc->w.hBitmap;
     
     if (!(dc->w.flags & DC_MEMORY)) return 0;
+    hrgn = CreateRectRgn( 0, 0, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight );
+    if (!hrgn) return 0;
+
+    DeleteObject( dc->w.hVisRgn );
+    dc->w.hVisRgn    = hrgn;
     dc->u.x.drawable = bmp->pixmap;
-    dc->w.DCSizeX    = bmp->bitmap.bmWidth;
-    dc->w.DCSizeY    = bmp->bitmap.bmHeight;
     dc->w.hBitmap    = hbitmap;
 
       /* Change GC depth if needed */
@@ -313,6 +318,7 @@
 	dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
         DC_InitDC( hdc );
     }
+    else CLIPPING_UpdateGCRegion( dc );  /* Just update GC clip region */
     return prevHandle;
 }
 
diff --git a/objects/brush.c b/objects/brush.c
index 1a4ff72..6555d6c 100644
--- a/objects/brush.c
+++ b/objects/brush.c
@@ -232,6 +232,8 @@
     BITMAPINFO * bmpInfo;
     HBRUSH prevHandle = dc->w.hBrush;
 
+    dprintf_gdi(stddeb, "Brush_SelectObject   hdc=%04x  hbrush=%04x\n",
+		hdc,hbrush);
     if (dc->header.wMagic == METAFILE_DC_MAGIC)
     {
 	switch (brush->logbrush.lbStyle)
@@ -264,13 +266,16 @@
     switch(brush->logbrush.lbStyle)
     {
       case BS_NULL:
+	dprintf_gdi( stddeb,"BS_NULL\n" );
 	break;
 
       case BS_SOLID:
+        dprintf_gdi( stddeb,"BS_SOLID\n" );
 	BRUSH_SelectSolidBrush( dc, brush->logbrush.lbColor );
 	break;
 	
       case BS_HATCHED:
+	dprintf_gdi( stddeb, "BS_HATCHED\n" );
 	dc->u.x.brush.pixel = COLOR_ToPhysical( dc, brush->logbrush.lbColor );
 	dc->u.x.brush.pixmap = XCreateBitmapFromData( display, rootWindow,
 				 HatchBrushes[brush->logbrush.lbHatch], 8, 8 );
@@ -278,10 +283,12 @@
 	break;
 	
       case BS_PATTERN:
+	dprintf_gdi( stddeb, "BS_PATTERN\n");
 	BRUSH_SelectPatternBrush( dc, brush->logbrush.lbHatch );
 	break;
 
       case BS_DIBPATTERN:
+	dprintf_gdi( stddeb, "BS_DIBPATTERN\n");
 	if ((bmpInfo = (BITMAPINFO *) GlobalLock( brush->logbrush.lbHatch )))
 	{
 	    int size = DIB_BitmapInfoSize( bmpInfo, brush->logbrush.lbColor );
diff --git a/objects/clipping.c b/objects/clipping.c
index 26019dc..d6d8bba 100644
--- a/objects/clipping.c
+++ b/objects/clipping.c
@@ -10,8 +10,8 @@
 #include "gdi.h"
 #include "metafile.h"
 #include "stddebug.h"
-/* #define DEBUG_CLIPPING /* */
-/* #undef  DEBUG_CLIPPING /* */
+/* #define DEBUG_CLIPPING */
+/* #undef  DEBUG_CLIPPING */
 #include "debug.h"
 
 /***********************************************************************
@@ -19,32 +19,29 @@
  *
  * Set the clip region of the physical device.
  */
-void CLIPPING_SetDeviceClipping( DC * dc )
+static void CLIPPING_SetDeviceClipping( DC * dc )
 {
-    if (dc->w.hGCClipRgn)
+    RGNOBJ *obj = (RGNOBJ *) GDI_GetObjPtr(dc->w.hGCClipRgn, REGION_MAGIC);
+    if (!obj)
     {
-	RGNOBJ *obj = (RGNOBJ *) GDI_GetObjPtr(dc->w.hGCClipRgn, REGION_MAGIC);
-	if (obj->region.xrgn)
-	{
-	    XSetRegion( display, dc->u.x.gc, obj->region.xrgn );
-	    XSetClipOrigin( display, dc->u.x.gc, dc->w.DCOrgX, dc->w.DCOrgY );
-	}
-	else if (obj->region.pixmap)
-	{
-	    XSetClipMask( display, dc->u.x.gc, obj->region.pixmap );
-	    XSetClipOrigin( display, dc->u.x.gc,
-			    dc->w.DCOrgX + obj->region.box.left,
-			    dc->w.DCOrgY + obj->region.box.top );
-	}
-	else  /* Clip everything */
-	{
-	    XSetClipRectangles( display, dc->u.x.gc, 0, 0, NULL, 0, 0 );
-	}
+        fprintf( stderr, "SetDeviceClipping: Rgn is 0. Please report this.\n");
+        exit(1);
     }
-    else
+    if (obj->region.xrgn)
     {
-	XSetClipMask( display, dc->u.x.gc, None );
-	XSetClipOrigin( display, dc->u.x.gc, dc->w.DCOrgX, dc->w.DCOrgY );
+        XSetRegion( display, dc->u.x.gc, obj->region.xrgn );
+        XSetClipOrigin( display, dc->u.x.gc, dc->w.DCOrgX, dc->w.DCOrgY );
+    }
+    else if (obj->region.pixmap)
+    {
+        XSetClipMask( display, dc->u.x.gc, obj->region.pixmap );
+        XSetClipOrigin( display, dc->u.x.gc,
+                       dc->w.DCOrgX + obj->region.box.left,
+                       dc->w.DCOrgY + obj->region.box.top );
+    }
+    else  /* Clip everything */
+    {
+        XSetClipRectangles( display, dc->u.x.gc, 0, 0, NULL, 0, 0 );
     }
 }
 
@@ -54,66 +51,47 @@
  *
  * Update the GC clip region when the ClipRgn or VisRgn have changed.
  */
-static void CLIPPING_UpdateGCRegion( DC * dc )
+void CLIPPING_UpdateGCRegion( DC * dc )
 {
-    if (!dc->w.hGCClipRgn) dc->w.hGCClipRgn = CreateRectRgn(0,0,0,0);
+    if (!dc->w.hGCClipRgn) dc->w.hGCClipRgn = CreateRectRgn( 0, 0, 0, 0 );
 
     if (!dc->w.hVisRgn)
     {
-	if (!dc->w.hClipRgn)
-	{
-	    DeleteObject( dc->w.hGCClipRgn );
-	    dc->w.hGCClipRgn = 0;
-	}
-	else
-	    CombineRgn( dc->w.hGCClipRgn, dc->w.hClipRgn, 0, RGN_COPY );
+        fprintf( stderr, "UpdateGCRegion: hVisRgn is zero. Please report this.\n" );
+        exit(1);
     }
+    if (!dc->w.hClipRgn)
+        CombineRgn( dc->w.hGCClipRgn, dc->w.hVisRgn, 0, RGN_COPY );
     else
-    {
-	if (!dc->w.hClipRgn)
-	    CombineRgn( dc->w.hGCClipRgn, dc->w.hVisRgn, 0, RGN_COPY );
-	else
-	    CombineRgn( dc->w.hGCClipRgn, dc->w.hClipRgn, dc->w.hVisRgn, RGN_AND );
-    }
+        CombineRgn( dc->w.hGCClipRgn, dc->w.hClipRgn, dc->w.hVisRgn, RGN_AND );
     CLIPPING_SetDeviceClipping( dc );
 }
 
 
 /***********************************************************************
- *           CLIPPING_SelectRgn
- *
- * Helper function for SelectClipRgn() and SelectVisRgn().
- */
-static int CLIPPING_SelectRgn( DC * dc, HRGN * hrgnPrev, HRGN hrgn )
-{
-    int retval;
-    
-    if (hrgn)
-    {
-	if (!*hrgnPrev) *hrgnPrev = CreateRectRgn(0,0,0,0);
-	retval = CombineRgn( *hrgnPrev, hrgn, 0, RGN_COPY );
-    }
-    else
-    {
-	if (*hrgnPrev) DeleteObject( *hrgnPrev );
-	*hrgnPrev = 0;
-	retval = SIMPLEREGION; /* Clip region == client area */
-    }
-    CLIPPING_UpdateGCRegion( dc );
-    return retval;
-}
-
-
-/***********************************************************************
  *           SelectClipRgn    (GDI.44)
  */
 int SelectClipRgn( HDC hdc, HRGN hrgn )
 {
+    int retval;
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
     if (!dc) return ERROR;
-    
+
     dprintf_clipping(stddeb, "SelectClipRgn: %d %d\n", hdc, hrgn );
-    return CLIPPING_SelectRgn( dc, &dc->w.hClipRgn, hrgn );
+
+    if (hrgn)
+    {
+	if (!dc->w.hClipRgn) dc->w.hClipRgn = CreateRectRgn(0,0,0,0);
+	retval = CombineRgn( dc->w.hClipRgn, hrgn, 0, RGN_COPY );
+    }
+    else
+    {
+	if (dc->w.hClipRgn) DeleteObject( dc->w.hClipRgn );
+	dc->w.hClipRgn = 0;
+	retval = SIMPLEREGION; /* Clip region == whole DC */
+    }
+    CLIPPING_UpdateGCRegion( dc );
+    return retval;
 }
 
 
@@ -122,11 +100,15 @@
  */
 int SelectVisRgn( HDC hdc, HRGN hrgn )
 {
+    int retval;
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
-    if (!dc) return ERROR;
-    
+    if (!dc || !hrgn) return ERROR;
+
     dprintf_clipping(stddeb, "SelectVisRgn: %d %d\n", hdc, hrgn );
-    return CLIPPING_SelectRgn( dc, &dc->w.hVisRgn, hrgn );
+
+    retval = CombineRgn( dc->w.hVisRgn, hrgn, 0, RGN_COPY );
+    CLIPPING_UpdateGCRegion( dc );
+    return retval;
 }
 
 
@@ -161,62 +143,45 @@
  */
 int OffsetVisRgn( HDC hdc, short x, short y )
 {
+    int retval;
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
     if (!dc) return ERROR;    
     dprintf_clipping(stddeb, "OffsetVisRgn: %d %d,%d\n", hdc, x, y );
-
-    if (dc->w.hVisRgn)
-    {
-	int retval = OffsetRgn( dc->w.hVisRgn, x, y );
-	CLIPPING_UpdateGCRegion( dc );
-	return retval;
-    }
-    else return SIMPLEREGION; /* Clip region == client area */
+    retval = OffsetRgn( dc->w.hVisRgn, x, y );
+    CLIPPING_UpdateGCRegion( dc );
+    return retval;
 }
 
 
 /***********************************************************************
- *           CLIPPING_IntersectRect
+ *           CLIPPING_IntersectClipRect
  *
- * Helper function for {Intersect,Exclude}{Clip,Vis}Rect
+ * Helper function for {Intersect,Exclude}ClipRect
  */
-int CLIPPING_IntersectRect( DC * dc, HRGN * hrgn, short left, short top,
-			    short right, short bottom, int exclude )
+static int CLIPPING_IntersectClipRect( DC * dc, short left, short top,
+                                       short right, short bottom, BOOL exclude)
 {
-    HRGN tempRgn = 0, prevRgn = 0, newRgn = 0;
-    RGNOBJ *newObj, *prevObj;
-    int retval;
+    HRGN tempRgn, newRgn;
+    int ret;
 
-    if (!*hrgn)
+    if (!(newRgn = CreateRectRgn( 0, 0, 0, 0 ))) return ERROR;
+    if (!(tempRgn = CreateRectRgn( left, top, right, bottom )))
     {
-	if (!(*hrgn = CreateRectRgn( 0, 0, dc->w.DCSizeX, dc->w.DCSizeY )))
-	    goto Error;
-	prevRgn = *hrgn;
+        DeleteObject( newRgn );
+        return ERROR;
     }
-    if (!(newRgn = CreateRectRgn( 0, 0, 0, 0))) goto Error;
-    if (!(tempRgn = CreateRectRgn( left, top, right, bottom ))) goto Error;
-
-    retval = CombineRgn( newRgn, *hrgn, tempRgn, exclude ? RGN_DIFF : RGN_AND);
-    if (retval == ERROR) goto Error;
-
-    newObj = (RGNOBJ *) GDI_GetObjPtr( newRgn, REGION_MAGIC );
-    prevObj = (RGNOBJ *) GDI_GetObjPtr( *hrgn, REGION_MAGIC );
-    if (newObj && prevObj) newObj->header.hNext = prevObj->header.hNext;
+    ret = CombineRgn( newRgn, dc->w.hClipRgn ? dc->w.hClipRgn : dc->w.hVisRgn,
+                      tempRgn, exclude ? RGN_DIFF : RGN_AND);
     DeleteObject( tempRgn );
-    if (*hrgn) DeleteObject( *hrgn );
-    *hrgn = newRgn;    
-    CLIPPING_UpdateGCRegion( dc );
-    return retval;
 
- Error:
-    if (tempRgn) DeleteObject( tempRgn );
-    if (newRgn) DeleteObject( newRgn );
-    if (prevRgn)
+    if (ret != ERROR)
     {
-	DeleteObject( prevRgn );
-	*hrgn = 0;
+        if (dc->w.hClipRgn) DeleteObject( dc->w.hClipRgn );
+        dc->w.hClipRgn = newRgn;    
+        CLIPPING_UpdateGCRegion( dc );
     }
-    return ERROR;
+    else DeleteObject( newRgn );
+    return ret;
 }
 
 
@@ -237,8 +202,7 @@
 
     dprintf_clipping(stddeb, "ExcludeClipRect: %d %dx%d,%dx%d\n",
 	    hdc, left, top, right, bottom );
-    return CLIPPING_IntersectRect( dc, &dc->w.hClipRgn, left, top,
-				   right, bottom, 1 );
+    return CLIPPING_IntersectClipRect( dc, left, top, right, bottom, TRUE );
 }
 
 
@@ -259,23 +223,55 @@
 
     dprintf_clipping(stddeb, "IntersectClipRect: %d %dx%d,%dx%d\n",
 	    hdc, left, top, right, bottom );
-    return CLIPPING_IntersectRect( dc, &dc->w.hClipRgn, left, top,
-				   right, bottom, 0 );
+    return CLIPPING_IntersectClipRect( dc, left, top, right, bottom, FALSE );
+}
+
+
+/***********************************************************************
+ *           CLIPPING_IntersectVisRect
+ *
+ * Helper function for {Intersect,Exclude}VisRect
+ */
+static int CLIPPING_IntersectVisRect( DC * dc, short left, short top,
+                                      short right, short bottom, BOOL exclude )
+{
+    HRGN tempRgn, newRgn;
+    int ret;
+
+    if (!(newRgn = CreateRectRgn( 0, 0, 0, 0 ))) return ERROR;
+    if (!(tempRgn = CreateRectRgn( left, top, right, bottom )))
+    {
+        DeleteObject( newRgn );
+        return ERROR;
+    }
+    ret = CombineRgn( newRgn, dc->w.hVisRgn, tempRgn,
+                      exclude ? RGN_DIFF : RGN_AND);
+    DeleteObject( tempRgn );
+
+    if (ret != ERROR)
+    {
+        RGNOBJ *newObj  = (RGNOBJ*)GDI_GetObjPtr( newRgn, REGION_MAGIC);
+        RGNOBJ *prevObj = (RGNOBJ*)GDI_GetObjPtr( dc->w.hVisRgn, REGION_MAGIC);
+        if (newObj && prevObj) newObj->header.hNext = prevObj->header.hNext;
+        DeleteObject( dc->w.hVisRgn );
+        dc->w.hVisRgn = newRgn;    
+        CLIPPING_UpdateGCRegion( dc );
+    }
+    else DeleteObject( newRgn );
+    return ret;
 }
 
 
 /***********************************************************************
  *           ExcludeVisRect    (GDI.73)
  */
-int ExcludeVisRect( HDC hdc, short left, short top,
-		    short right, short bottom )
+int ExcludeVisRect( HDC hdc, short left, short top, short right, short bottom )
 {
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
     if (!dc) return ERROR;    
     dprintf_clipping(stddeb, "ExcludeVisRect: %d %dx%d,%dx%d\n",
 	    hdc, left, top, right, bottom );
-    return CLIPPING_IntersectRect( dc, &dc->w.hVisRgn, left, top,
-				   right, bottom, 1 );
+    return CLIPPING_IntersectVisRect( dc, left, top, right, bottom, TRUE );
 }
 
 
@@ -283,14 +279,13 @@
  *           IntersectVisRect    (GDI.98)
  */
 int IntersectVisRect( HDC hdc, short left, short top,
-		      short right, short bottom )
+                      short right, short bottom )
 {
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
     if (!dc) return ERROR;    
     dprintf_clipping(stddeb, "IntersectVisRect: %d %dx%d,%dx%d\n",
 	    hdc, left, top, right, bottom );
-    return CLIPPING_IntersectRect( dc, &dc->w.hVisRgn, left, top,
-				   right, bottom, 0 );
+    return CLIPPING_IntersectVisRect( dc, left, top, right, bottom, FALSE );
 }
 
 
@@ -334,15 +329,7 @@
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
     if (!dc) return ERROR;    
     dprintf_clipping(stddeb, "GetClipBox: %d %p\n", hdc, rect );
-
-    if (dc->w.hGCClipRgn) return GetRgnBox( dc->w.hGCClipRgn, rect );
-    else
-    {
-	rect->top = rect->left = 0;
-	rect->right = dc->w.DCSizeX;
-	rect->bottom = dc->w.DCSizeY;
-	return SIMPLEREGION;
-    }
+    return GetRgnBox( dc->w.hGCClipRgn, rect );
 }
 
 
@@ -356,7 +343,11 @@
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
     if (!dc) return 0;
     dprintf_clipping(stddeb, "SaveVisRgn: %d\n", hdc );
-    if (!dc->w.hVisRgn) return 0;
+    if (!dc->w.hVisRgn)
+    {
+        fprintf( stderr, "SaveVisRgn: hVisRgn is zero. Please report this.\n" );
+        exit(1);
+    }
     if (!(obj = (RGNOBJ *) GDI_GetObjPtr( dc->w.hVisRgn, REGION_MAGIC )))
 	return 0;
     if (!(copy = CreateRectRgn( 0, 0, 0, 0 ))) return 0;
@@ -377,9 +368,8 @@
     HRGN saved;
     RGNOBJ *obj, *savedObj;
     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
-    if (!dc) return ERROR;    
+    if (!dc || !dc->w.hVisRgn) return ERROR;    
     dprintf_clipping(stddeb, "RestoreVisRgn: %d\n", hdc );
-    if (!dc->w.hVisRgn) return ERROR;
     if (!(obj = (RGNOBJ *) GDI_GetObjPtr( dc->w.hVisRgn, REGION_MAGIC )))
 	return ERROR;
     if (!(saved = obj->header.hNext)) return ERROR;
diff --git a/objects/dc.c b/objects/dc.c
index 5365efb..a38906c 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -21,7 +21,7 @@
 
 extern const WIN_DC_INFO DCVAL_defaultValues;
 
-extern void CLIPPING_SetDeviceClipping( DC * dc );     /* objects/clipping.c */
+extern void CLIPPING_UpdateGCRegion( DC * dc );     /* objects/clipping.c */
 extern WORD COLOR_ToPhysical( DC *dc, COLORREF color );/* objects/color.c */
 extern void COLOR_SetMapping( DC *dc, HANDLE, WORD );  /* objects/color.c */
 
@@ -110,7 +110,7 @@
     SelectObject( hdc, dc->w.hFont );
     XSetGraphicsExposures( display, dc->u.x.gc, False );
     XSetSubwindowMode( display, dc->u.x.gc, IncludeInferiors );
-    CLIPPING_SetDeviceClipping( dc );
+    CLIPPING_UpdateGCRegion( dc );
 }
 
 
@@ -242,17 +242,14 @@
     newdc->saveLevel = 0;
     newdc->w.flags |= DC_SAVED;
 
+    newdc->w.hGCClipRgn = 0;
+    newdc->w.hVisRgn = CreateRectRgn( 0, 0, 0, 0 );
+    CombineRgn( newdc->w.hVisRgn, dc->w.hVisRgn, 0, RGN_COPY );	
     if (dc->w.hClipRgn)
     {
 	newdc->w.hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
 	CombineRgn( newdc->w.hClipRgn, dc->w.hClipRgn, 0, RGN_COPY );
     }
-    if (dc->w.hVisRgn)
-    {
-	newdc->w.hVisRgn = CreateRectRgn( 0, 0, 0, 0 );
-	CombineRgn( newdc->w.hVisRgn, dc->w.hVisRgn, 0, RGN_COPY );	
-    }
-    newdc->w.hGCClipRgn = 0;
     COLOR_SetMapping( newdc, dc->u.x.pal.hMapping, dc->u.x.pal.mappingSize );
     return handle;
 }
@@ -264,26 +261,31 @@
 void SetDCState( HDC hdc, HDC hdcs )
 {
     DC * dc, * dcs;
-    
+    HRGN hVisRgn, hClipRgn, hGCClipRgn;
+
     if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return;
     if (!(dcs = (DC *) GDI_GetObjPtr( hdcs, DC_MAGIC ))) return;
     if (!dcs->w.flags & DC_SAVED) return;
     dprintf_dc(stddeb, "SetDCState: %d %d\n", hdc, hdcs );
-    if (dc->w.hClipRgn)	DeleteObject( dc->w.hClipRgn );
-    if (dc->w.hVisRgn) DeleteObject( dc->w.hVisRgn );
-    if (dc->w.hGCClipRgn) DeleteObject( dc->w.hGCClipRgn );
 
+      /* Save the regions before overwriting everything */
+    hVisRgn    = dc->w.hVisRgn;
+    hClipRgn   = dc->w.hClipRgn;
+    hGCClipRgn = dc->w.hGCClipRgn;
     memcpy( &dc->w, &dcs->w, sizeof(dc->w) );
     memcpy( &dc->u.x.pen, &dcs->u.x.pen, sizeof(dc->u.x.pen) );
-    dc->w.hClipRgn = dc->w.hVisRgn = dc->w.hGCClipRgn = 0;
     dc->w.flags &= ~DC_SAVED;
 
+      /* Restore the regions */
+    dc->w.hVisRgn    = hVisRgn;
+    dc->w.hClipRgn   = hClipRgn;
+    dc->w.hGCClipRgn = hGCClipRgn;
+    CombineRgn( dc->w.hVisRgn, dcs->w.hVisRgn, 0, RGN_COPY );
+    SelectClipRgn( hdc, dcs->w.hClipRgn );
+
     SelectObject( hdc, dcs->w.hBrush );
     SelectObject( hdc, dcs->w.hFont );
     COLOR_SetMapping( dc, dcs->u.x.pal.hMapping, dcs->u.x.pal.mappingSize );
-
-    SelectClipRgn( hdc, dcs->w.hClipRgn );
-    SelectVisRgn( hdc, dcs->w.hVisRgn );
 }
 
 
@@ -374,8 +376,13 @@
     dc->w.flags        = 0;
     dc->w.devCaps      = displayDevCaps;
     dc->w.bitsPerPixel = displayDevCaps->bitsPixel;
-    dc->w.DCSizeX      = displayDevCaps->horzRes;
-    dc->w.DCSizeY      = displayDevCaps->vertRes;
+    dc->w.hVisRgn      = CreateRectRgn( 0, 0, displayDevCaps->horzRes,
+                                        displayDevCaps->vertRes );
+    if (!dc->w.hVisRgn)
+    {
+        GDI_HEAP_FREE( handle );
+        return 0;
+    }
 
     DC_InitDC( handle );
 
@@ -426,9 +433,15 @@
     dc->w.flags        = DC_MEMORY;
     dc->w.bitsPerPixel = 1;
     dc->w.devCaps      = displayDevCaps;
-    dc->w.DCSizeX      = 1;
-    dc->w.DCSizeY      = 1;
     dc->w.hBitmap      = hbitmap;
+    dc->w.hVisRgn      = CreateRectRgn( 0, 0, 1, 1 );
+
+    if (!dc->w.hVisRgn)
+    {
+        DeleteObject( hbitmap );
+        GDI_HEAP_FREE( handle );
+        return 0;
+    }
 
     DC_InitDC( handle );
 
diff --git a/objects/dcvalues.c b/objects/dcvalues.c
index c1fafaf..2def05b 100644
--- a/objects/dcvalues.c
+++ b/objects/dcvalues.c
@@ -45,8 +45,6 @@
     MM_TEXT,                /* MapMode */
     0,                      /* DCOrgX */
     0,                      /* DCOrgY */
-    0,                      /* DCSizeX */
-    0,                      /* DCSizeY */
     0,                      /* CursPosX */
     0,                      /* CursPosY */
     0,                      /* WndOrgX */
diff --git a/objects/font.c b/objects/font.c
index 1a28d6c..111984d 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -48,6 +48,47 @@
 #define CI_GET_DEFAULT_INFO(fs,cs) \
   CI_GET_CHAR_INFO(fs, fs->default_char, NULL, cs)
 
+struct FontStructure {
+	char *window;
+	char *x11;
+} FontNames[32];
+int FontSize;
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+ *           Font_Init
+ */
+
+void Font_Init( void )
+{
+  char  temp[1024];
+  LPSTR ptr;
+  int i;
+
+  if( GetPrivateProfileString("fonts", NULL, "*", temp, sizeof(temp), WINE_INI) > 2 ) {
+    for( ptr = temp, i = 1; strlen(ptr) != 0; ptr += strlen(ptr) + 1, i++ )
+      if( strcmp( ptr, "default" ) )
+	FontNames[i].window = strdup( ptr );
+    FontSize = i;
+
+    for( i = 1; i < FontSize; i++ ) {
+      GetPrivateProfileString("fonts", FontNames[i].window, "*", temp, sizeof(temp), WINE_INI);
+      FontNames[i].x11 = strdup( temp );
+    }
+    GetPrivateProfileString("fonts", "default", "*", temp, sizeof(temp), WINE_INI);
+    if( *temp == '*' )
+      FontNames[0].x11 = strdup( temp );
+
+  } else {
+    FontNames[0].window = NULL; FontNames[0].x11 = "bitstream-courier";
+    FontNames[1].window = "ms sans serif"; FontNames[1].x11 = "*-helvetica";
+    FontNames[2].window = "ms serif"; FontNames[2].x11 = "*-times";
+    FontNames[3].window = "fixedsys"; FontNames[3].x11 = "*-fixed";
+    FontNames[4].window = "arial"; FontNames[4].x11 = "*-helvetica";
+    FontNames[5].window = "helv"; FontNames[5].x11 = "*-helvetica";
+    FontNames[6].window = "roman"; FontNames[6].x11 = "*-times";
+    FontSize = 7;
+  }
+}
 
 /***********************************************************************
  *           FONT_TranslateName
@@ -57,26 +98,14 @@
  */
 static const char *FONT_TranslateName( char *winFaceName )
 {
-    int i;
-    static const char *mappings[] =
-    {
-        /*Windows name*/  /*X11 name*/
-        "system",         "helvetica",
-        "ms sans serif",  "helvetica",
-        "ms serif",       "times",
-        "fixedsys",       "fixed",
-        "arial",          "helvetica",
-        "helv",           "helvetica",
-        "roman",          "times"
-    };
+  int i;
 
-    for (i = 0; i < sizeof(mappings)/sizeof(mappings[0]); i += 2)
-        if (!strcmp( winFaceName, mappings[i] ))
-        {
-            dprintf_font(stddeb, "---- Mapped %s to %s\n", winFaceName, mappings[i+1] );
-            return mappings[i+1];
-        }
-    return winFaceName;
+  for (i = 1; i < FontSize; i ++)
+    if( !strcmp( winFaceName, FontNames[i].window ) ) {
+      dprintf_font(stddeb, "---- Mapped %s to %s\n", winFaceName, FontNames[i].x11 );
+      return FontNames[i].x11;
+    }
+  return FontNames[0].x11;
 }
 
 
@@ -100,25 +129,37 @@
     width = font->lfWidth * 10;
     spacing = (font->lfPitchAndFamily & FIXED_PITCH) ? 'm' :
 	      (font->lfPitchAndFamily & VARIABLE_PITCH) ? 'p' : '*';
-    charset = (font->lfCharSet == ANSI_CHARSET) ? "iso8859-1" : "*";
+    charset = (font->lfCharSet == ANSI_CHARSET) ? "iso8859-1" : "*-*";
     if (*font->lfFaceName) family = FONT_TranslateName( font->lfFaceName );
     else switch(font->lfPitchAndFamily & 0xf0)
     {
-      case FF_ROMAN:      family = "times"; break;
-      case FF_SWISS:      family = "helvetica"; break;
-      case FF_MODERN:     family = "courier"; break;
-      case FF_SCRIPT:     family = "*"; break;
-      case FF_DECORATIVE: family = "*"; break;
-      default:            family = "*"; break;
+    case FF_ROMAN:
+      family = FONT_TranslateName( "roman" );
+      break;
+    case FF_SWISS:
+      family = FONT_TranslateName( "swiss" );
+      break;
+    case FF_MODERN:
+      family = FONT_TranslateName( "modern" );
+      break;
+    case FF_SCRIPT:
+      family = FONT_TranslateName( "script" );
+      break;
+    case FF_DECORATIVE:
+      family = FONT_TranslateName( "decorative" );
+      break;
+    default:
+      family = FontNames[0].x11;
+      break;
     }
     
 	while (TRUE) {
 	    /* Width==0 seems not to be a valid wildcard on SGI's, using * instead */
 	    if ( width == 0 )
-	      sprintf( pattern, "-*-%s-%s-%c-normal-*-*-%d-*-*-%c-*-%s",
+	      sprintf( pattern, "-%s-%s-%c-normal-*-*-%d-*-*-%c-*-%s",
 		      family, weight, slant, height, spacing, charset);
 	    else
-	      sprintf( pattern, "-*-%s-%s-%c-normal-*-*-%d-*-*-%c-%d-%s",
+	      sprintf( pattern, "-%s-%s-%c-normal-*-*-%d-*-*-%c-%d-%s",
 		      family, weight, slant, height, spacing, width, charset);
 	    dprintf_font(stddeb, "FONT_MatchFont: '%s'\n", pattern );
 	    names = XListFonts( display, pattern, 1, &count );
@@ -525,9 +566,9 @@
     slant = 'r';
     spacing = '*';
     charset = "*";
-    family = "*";
+    family = "*-*";
     dprintf_font(stddeb,"InitFontsList !\n");
-    sprintf( pattern, "-*-%s-%s-%c-normal-*-*-*-*-*-%c-*-%s",
+    sprintf( pattern, "-%s-%s-%c-normal-*-*-*-*-*-%c-*-%s",
 	      family, weight, slant, spacing, charset);
     names = XListFonts( display, pattern, MAX_FONTS, &count );
     dprintf_font(stddeb,"InitFontsList // count=%d \n", count);
diff --git a/objects/metafile.c b/objects/metafile.c
index 83cf4c4..8715bf7 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -897,7 +897,7 @@
 BOOL MF_BitBlt(DC *dcDest, short xDest, short yDest, short width,
 	       short height, HDC hdcSrc, short xSrc, short ySrc, DWORD rop)
 {
-    dprintf_metafile(stdnimp,"MF_BitBlt: not implemented yet\n");
+    fprintf(stdnimp,"MF_BitBlt: not implemented yet\n");
 }
 
 
@@ -908,5 +908,5 @@
 		   short heightDest, HDC hdcSrc, short xSrc, short ySrc, 
 		   short widthSrc, short heightSrc, DWORD rop)
 {
-    dprintf_metafile(stdnimp,"MF_StretchBlt: not implemented yet\n");
+    fprintf(stdnimp,"MF_StretchBlt: not implemented yet\n");
 }
diff --git a/objects/text.c b/objects/text.c
index 95b2eb7..e45973e 100644
--- a/objects/text.c
+++ b/objects/text.c
@@ -62,9 +62,9 @@
 	case LF:
 	    if (!(format & DT_SINGLELINE))
 	    {
-		i++;
-		if (str[i] == CR || str[i] == LF)
+		if (str[i] == CR && str[i+1] == LF)
 		    i++;
+		i++;
 		*len = j;
 		return (&str[i]);
 	    }
@@ -188,6 +188,7 @@
     TEXTMETRIC tm;
     int x = rect->left, y = rect->top;
     int width = rect->right - rect->left;
+    int max_width = 0;
 
     dprintf_text(stddeb,"DrawText: '%s', %d , [(%d,%d),(%d,%d)]\n", str, count,
 	   rect->left, rect->top, rect->right, rect->bottom);
@@ -237,8 +238,12 @@
 	    else if (flags & DT_BOTTOM) y = rect->bottom - size.cy;
 	}
 	if (!(flags & DT_CALCRECT))
+	{
 	    if (!ExtTextOut( hdc, x, y, (flags & DT_NOCLIP) ? 0 : ETO_CLIPPED,
                              rect, line, len, NULL )) return 0;
+	}
+	else if (size.cx > max_width)
+	    max_width = size.cx;
 
 	if (prefix_offset != -1)
 	{
@@ -250,9 +255,9 @@
 	    DeleteObject( hpen );
 	}
 
+	y += lh;
 	if (strPtr)
 	{
-	    y += lh;
 	    if (!(flags & DT_NOCLIP))
 	    {
 		if (y > rect->bottom - lh)
@@ -261,7 +266,11 @@
 	}
     }
     while (strPtr);
-    if (flags & DT_CALCRECT) rect->bottom = y;
+    if (flags & DT_CALCRECT)
+    {
+	rect->right = rect->left + max_width;
+	rect->bottom = y;
+    }
     return 1;
 }
 
diff --git a/rc/ChangeLog b/rc/ChangeLog
new file mode 100644
index 0000000..c08835f
--- /dev/null
+++ b/rc/ChangeLog
@@ -0,0 +1,5 @@
+----------------------------------------------------------------------
+Sun Sep  25 12:00:00 PDT 1994	<martin@osiris.cs.csufresno.edu>
+
+	* [rc/rc.y] [rc/rc.h] [rc/rc.l] [rc/winerc.c]
+	Files created
diff --git a/rc/Imakefile b/rc/Imakefile
new file mode 100644
index 0000000..74c7064
--- /dev/null
+++ b/rc/Imakefile
@@ -0,0 +1,44 @@
+#include "../Wine.tmpl"
+
+.SUFFIXES: .rc
+
+.rc.c:
+	echo "#include \"windows.h\"" >$*.rct
+	echo WINDOWS_H_ENDS_HERE >>$*.rct
+	cat $< >>$*.rct
+	gcc -E -x c $(CFLAGS) $*.rct | sed -e '1,/^WINDOWS_H_ENDS_HERE/d' | winerc -v -p $* >$@
+	$(RM) $*.rct
+
+AllTarget(sysres.c)
+
+sysres.c: winerc $(TOP)/include/windows.h
+
+includes::
+
+clean::
+	$(RM) sysres.c
+
+
+XCOMM Rules to build the winerc program
+
+SRCS = \
+	lex.yy.c \
+	rc.tab.c \
+	winerc.c
+
+OBJS = $(SRCS:.c=.o)
+
+depend:: rc.tab.c rc.tab.h lex.yy.c
+
+clean::
+	$(RM) lex.yy.c rc.tab* y.tab.c
+
+ComplexProgramTarget(winerc)
+
+rc.tab.c rc.tab.h: rc.y
+	$(YACC) -b rc -d --debug rc.y
+
+lex.yy.c: rc.l
+	$(LEX) -I rc.l
+ 
+
diff --git a/rc/README b/rc/README
new file mode 100644
index 0000000..d436c18
--- /dev/null
+++ b/rc/README
@@ -0,0 +1,38 @@
+This is winerc, the resource compiler for the Wine project. It takes the
+same input as rc.exe, but generates C files as output. These C files can
+be linked together with the application, which can access the resource
+data directly instead of using FindResource/LoadResource/LockResource.
+The generated C code contains arrays, which represent the resource as if
+it was obtained from LoadResource. A table to map resource names to
+pointers is also available.
+Primary applications are the resources of sysres.dll and a future
+commdlg.dll, but the use in the library version is possible as well.
+The expected advantage of using winerc over sysres.dll is a speed
+improvement, however, actual data to support that claim are not
+available. The use of winerc might also simplifies the source code. For
+example, the system menu is managed in the function CopySysMenu
+(controls/menu.c). A winerc-based implementation would just call
+	return LoadMenuIndirect(_Sysres_SYSMENU);
+As the resources are already in the Wine image, they are loaded on
+demand as any other part of a Unix executable image. 
+
+Current State
+This is the first release of winerc. It is alpha software, as the rest
+of Wine is. If you use it for replacing sysres.dll, or if you write
+other parts of Wine which require resource (like commdlg), you will
+probably notice a loss in stability. This is especially true for cursor
+and icon resources, as they are unlikely to work at all. See the TODO
+file for details.
+
+Copying
+The license for Wine applies for winerc as well. Read the files LICENSE
+and WARRANTY in the current or any future distribution for details. You
+can change any source files, and you can add your own copyright notice,
+as long as you leave the existing copyrights intact.
+
+Bug Reports and Fixes
+If you find a bug in winerc, you can report it to me,
+martin@cs.csufresno.edu (Martin von Loewis)
+or to comp.emulators.ms-windows.wine. If you can fix the bug, send the
+diffs & ChangeLog to wine-new@amscons.com (Bob Amstadt), or send it to
+me, and I will collect the fixes and forward them to wine-news.
diff --git a/rc/README.sysres b/rc/README.sysres
new file mode 100644
index 0000000..df59f95
--- /dev/null
+++ b/rc/README.sysres
@@ -0,0 +1,19 @@
+This release of winerc contains a resource script for sysres.dll,
+obtained by saving it as RC in Borland's Resource Workshop. Obsolete
+or duplicate resources where removed. If you find that I deleted to
+little or to much, drop me a note.
+You are encouraged to create sysres dumps using your favoured resource
+editor. If the output cannot be compiled, or the generated C code is
+different from mine, report this as a bug. When comparing the results,
+note that only the order might be different, which is not considered a
+bug.
+systest.c is a Windows program which shows how to use winerc generated
+resources. Compile it with your Windows compiler, and link it with
+sysres.c. It also shows how to prevent curious people from spying your
+bitmaps, dialogs, and menus :-)
+
+Deleted resources:
+Bitmap: OBMCLOSE
+Menu: 1, 0xF140+2
+Dialog: 0XF140+3, EXCLAMATION_MSGBOX, QUESTION_MSGBOX, STOP_MSGBOX
+Icon: SYSIDI_STOPICON
diff --git a/rc/TODO b/rc/TODO
new file mode 100644
index 0000000..c00d31e
--- /dev/null
+++ b/rc/TODO
@@ -0,0 +1,63 @@
+1. User interface 
+- use GNU's long_getopt 
+- allow to pass input and output files via command line
+- add options for various not-yet-implemented features (Unicode, Win32
+format, non-native/native alignment and endianness, compact output
+format)
+
+2. Input format 
+- improve input file processing
+  Currently, certain pre- and postprocessing is required.  winerc
+  should accept an arbitrary resource script and generate the C file
+  with as little intermediate files as possible. I'm not sure how to
+  handle the symbols from windows.h. There are certain options:  
+    * winerc predefines the symbols via the cpp command line 
+    * windows.h is #include'd, and the resulting C code is dropped 
+      (Should winerc do C parsing here?) 
+    * a stripped-down version of windows.h is included,
+      generated by "grep '^#' windows.h" 
+    * windows.h #ifdef's every C code with _RC_INVOKED
+    (commercial solution) 
+- complete input syntax 
+  The goal here is to support every existing resource file which is
+  accepted by another resource compiler, not to put as much fancy
+  features into the compiler as possible.  Every correct resource file
+  which generates a parse error can be reported as a bug, a problem
+  analysis and a fix would be appreciated.
+
+3. Output file format
+- add missing resources (fonts, versioninfo, stringtables,rcdata)
+- check style handling
+  The semantics of control and dialog styles is somewhat poorly
+  documented. For example, I couldn't find a reference that every
+  control has the WS_VISIBLE and WS_CHILD style, even if they are
+  not specified. What other styles are considered default?
+  The existance of default styles implies support for disabling these,
+  unlike any other proper programming language,
+    NOT WS_VISIBLE | WS_GROUP
+  does *not* mean ~WS_VISIBLE, but WS_CHILD|WS_GROUP (in C semantics).
+  What other strange semantics are there?
+- check cursor and icon handling
+  At the moment, the .CUR and .ICO files are copied byte-by-byte into
+  the C array. This is probably wrong, as there are things like cursor
+  and icon groups. In which way should they be present in a Wine image?
+  Should we have arrays for every cursor, as well as the cursor group?
+  Is one cursor per group enough, in the context of X? If so, do we
+  still need the group?
+- create a more compact output file
+  The current format is well-suited for debugging, as one can easily
+  match it with a resource' hex dump. A more compact format would use
+  strings instead of integer lists. A clever algorithm for embedding
+  values <32 and >127 is required.
+- platform independence
+  Currently, the lay-out of the resources is just as it is in Win3.1 -
+  packed structures, little endian. Although this format can be used
+  on any architecture, aligned data and native endianness would speed-up
+  the resource manipulation and simplify the code. OTOH, this would
+  break applications that rely on the lay-out. All this is of interest
+  for the library version only.
+- Win32 support
+
+4. Programming Style
+- memory management
+  No memory is freed in the current implementation.
diff --git a/rc/rc.h b/rc/rc.h
new file mode 100644
index 0000000..d080882
--- /dev/null
+++ b/rc/rc.h
@@ -0,0 +1,105 @@
+/*
+ *
+ * Copyright  Martin von Loewis, 1994
+ *
+ */
+
+/* resource types */
+enum rt {acc,bmp,cur,dlg,fnt,ico,men,rdt,str};
+/* generic resource
+   Bytes can be inserted at arbitrary positions, the data field (res) 
+   grows as required. As the dialog header contains the number of 
+   controls, this number is generated in num_entries. If n_type if 0,
+   the resource name is i_name, and s_name otherwise. Top level
+   resources are linked via next. All gen_res objects are linked via
+   g_prev, g_next for debugging purposes. space is the length of res,
+   size is the used part of res.
+   As most bison rules are right recursive, new items are usually 
+   inserted at the beginning
+*/   
+typedef struct gen_res{
+	int size,space;
+	int num_entries;
+	enum rt type;
+	union{
+		int i_name;
+		char* s_name;
+	}n;
+	int n_type; /*0 - integer, 1 = string*/
+	struct gen_res *next;
+	struct gen_res *g_prev,*g_next;
+	unsigned char res[0];
+} gen_res;
+
+/* control/dialog style. or collects styles, and collects NOT styles */
+typedef struct rc_style{
+	int and, or;
+}rc_style;
+
+/* create a new resource */
+gen_res *new_res(void);
+/* double the space of the resource */
+gen_res* grow(gen_res*);
+/* insert byte array at the beginning, increase count */
+gen_res* insert_at_beginning(gen_res*,char*,int);
+/* insert byte array at offset */
+gen_res* insert_bytes(gen_res*,char*,int,int);
+/* delete bytes at offset */
+gen_res* delete_bytes(gen_res*,int,int);
+/* create a new style */
+rc_style* new_style(void);
+/* convert \t to tab etc. */
+char* parse_c_string(char*);
+/* get the resources type, convert dlg to "DIALOG" and so on */
+char* get_typename(gen_res*);
+
+gen_res* add_accelerator(int,int,int,gen_res*);
+gen_res* add_string_accelerator(char*,int,int,gen_res*);
+gen_res* add_ascii_accelerator(int,int,int,gen_res*);
+gen_res* add_vk_accelerator(int,int,int,gen_res*);
+
+gen_res* new_dialog(void);
+gen_res* dialog_style(rc_style*,gen_res*);
+int dialog_get_menu(gen_res*);
+int dialog_get_class(gen_res*);
+int dialog_get_caption(gen_res*);
+int dialog_get_fontsize(gen_res*);
+gen_res* dialog_caption(char*,gen_res*);
+gen_res* dialog_font(short,char*,gen_res*);
+gen_res* dialog_class(char*,gen_res*);
+gen_res* dialog_menu(char*,gen_res*);
+gen_res* create_control_desc(int,int,int,int,int,rc_style*);
+gen_res* label_control_desc(char*,gen_res*);
+gen_res* create_generic_control(char*,int,char*,rc_style*,int,int,int,int);
+gen_res* add_control(int,int,gen_res*,gen_res*);
+gen_res* add_icon(char*,int,int,int,gen_res*,gen_res*);
+gen_res* add_generic_control(gen_res*,gen_res*);
+gen_res* make_dialog(gen_res*,int,int,int,int,gen_res*);
+
+gen_res *hex_to_raw(char*,gen_res*);
+gen_res *make_bitmap(gen_res*);
+gen_res *make_icon(gen_res*);
+gen_res *make_cursor(gen_res*);
+gen_res *load_file(char*);
+
+gen_res *add_menuitem(char*,int,int,gen_res*);
+gen_res *add_popup(char*,short,gen_res*,gen_res*);
+gen_res *make_menu(gen_res*);
+
+gen_res *add_resource(gen_res*,gen_res*);
+
+void create_output(gen_res*);
+
+#define CT_BUTTON 	0x80
+#define CT_EDIT 	0x81
+#define CT_STATIC 	0x82
+#define CT_LISTBOX	0x83
+#define CT_SCROLLBAR 0x84
+#define CT_COMBOBOX	0x85
+
+extern int verbose;
+
+#ifdef __sun__
+#define strtoul strtol
+#endif
+
diff --git a/rc/rc.l b/rc/rc.l
new file mode 100644
index 0000000..a09819f
--- /dev/null
+++ b/rc/rc.l
@@ -0,0 +1,76 @@
+%{
+/*
+ *
+ * Copyright  Martin von Loewis, 1994
+ *
+ */
+
+static char Copyright[] = "Copyright Martin von Loewis, 1994";
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "rc.h"
+#include "rc.tab.h"
+%}
+%%
+ACCELERATORS	return ACCELERATORS;
+ALT		return ALT;
+ASCII		return ASCII;
+BEGIN		return tBEGIN;
+BITMAP		return tBITMAP;
+CAPTION		return CAPTION;
+CHECKBOX	return CHECKBOX;
+CHECKED		return CHECKED;
+CLASS		return CLASS;
+COMBOBOX	return COMBOBOX;
+CONTROL		return CONTROL;
+CTEXT		return CTEXT;
+CURSOR		return CURSOR;
+DEFPUSHBUTTON	return DEFPUSHBUTTON;
+DIALOG		return DIALOG;
+DISCARDABLE	return DISCARDABLE;
+EDITTEXT	return EDITTEXT;
+END		return tEND;
+FIXED		return FIXED;
+FONT		return FONT;
+GRAYED		return GRAYED;
+GROUPBOX	return GROUPBOX;
+HELP		return HELP;
+ICON		return ICON;
+INACTIVE	return INACTIVE;
+LISTBOX		return LISTBOX;
+LTEXT		return LTEXT;
+MENU		return MENU;
+MENUBARBREAK	return MENUBARBREAK;
+MENUBREAK	return MENUBREAK;
+MENUITEM	return MENUITEM;
+MOVEABLE	return MOVEABLE;
+LOADONCALL	return LOADONCALL;
+NOINVERT	return NOINVERT;
+NOT			return NOT;
+NUMBER		return NUMBER;
+POPUP		return POPUP;
+PRELOAD		return PRELOAD;
+PUSHBUTTON	return PUSHBUTTON;
+PURE		return PURE;
+RADIOBUTTON	return RADIOBUTTON;
+RCDATA		return RCDATA;
+RTEXT		return RTEXT;
+SCROLLBAR	return SCROLLBAR;
+SHIFT		return SHIFT;
+SEPARATOR	return SEPARATOR;
+STRING		return STRING;
+STRINGTABLE	return STRINGTABLE;
+STYLE		return STYLE;
+VERSIONINFO	return VERSIONINFO;
+VIRTKEY		return VIRTKEY;
+\{			return tBEGIN;
+\}			return tEND;
+[+-]?[0-9]+	yylval.num=atoi(yytext);return NUMBER;
+0x[0-9A-Fa-f]+L?	yylval.num=strtoul(yytext,0,16);return NUMBER;
+[A-Za-z][A-Za-z_0-9]*	yylval.str=strdup(yytext);return IDENT;
+\"[^"]*\"	yylval.str=parse_c_string(yytext);return STRING;
+\'[^']*\'   yylval.str=strdup(yytext+1);return SINGLE_QUOTED;
+[ \t\n\r]		;
+.			return yytext[0];
diff --git a/rc/rc.y b/rc/rc.y
new file mode 100644
index 0000000..bfdaafc
--- /dev/null
+++ b/rc/rc.y
@@ -0,0 +1,211 @@
+%{
+/*
+ *
+ * Copyright  Martin von Loewis, 1994
+ *
+ */
+
+static char Copyright[] = "Copyright Martin von Loewis, 1994";
+
+#include <stdio.h>
+#include "rc.h"
+#include "windows.h"
+%}
+%union{
+	gen_res *res;
+	char *str;
+	int num;
+	struct rc_style *style;
+}
+%token <num> NUMBER
+%token <str> STRING SINGLE_QUOTED IDENT
+%token ACCELERATORS ALT ASCII tBEGIN tBITMAP CAPTION CHECKBOX CHECKED 
+%token CLASS COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG 
+%token DISCARDABLE EDITTEXT tEND FIXED FONT GRAYED GROUPBOX HELP ICON 
+%token IDENT INACTIVE LISTBOX LTEXT MENU MENUBARBREAK MENUBREAK MENUITEM 
+%token MOVEABLE LOADONCALL NOINVERT NOT NOT_SUPPORTED POPUP PRELOAD 
+%token PURE PUSHBUTTON RADIOBUTTON RCDATA RTEXT SCROLLBAR SHIFT SEPARATOR 
+%token SINGLE_QUOTED STRING STRINGTABLE STYLE VERSIONINFO VIRTKEY
+%type <res> resource_file resource resources resource_definition accelerators
+%type <res> events bitmap cursor dialog dlg_attributes controls 
+%type <res> generic_control labeled_control control_desc font icon 
+%type <res> iconinfo menu menu_body item_definitions rcdata raw_data raw_elements 
+%type <res> stringtable strings versioninfo
+%type <num> acc_options item_options
+%type <style> style optional_style
+%%
+
+resource_file: resources {create_output($1)}
+
+/*resources are put into a linked list*/
+resources:	{$$=0;}
+		|resource resources {$$=add_resource($1,$2);}
+		;
+
+/* get the name for a single resource*/
+resource:	NUMBER resource_definition
+		{$$=$2;$$->n.i_name=$1;$$->n_type=0;
+			if(verbose)fprintf(stderr,"Got %s %d\n",get_typename($2),$1);
+		}
+		| IDENT resource_definition
+		{$$=$2;$$->n.s_name=$1;$$->n_type=1;
+			if(verbose)fprintf(stderr,"Got %s %s\n",get_typename($2),$1);
+		}
+
+/* get the value for a single resource*/
+resource_definition:	accelerators {$$=$1;}
+		| bitmap {$$=$1;}
+		| cursor {$$=$1;}
+		| dialog {$$=$1;}
+		| font {$$=$1;}
+		| icon {$$=$1;}
+		| menu {$$=$1;}
+		| rcdata {$$=$1;}
+		| stringtable {$$=$1;}
+		| versioninfo {$$=$1;}
+
+/* have to use tBEGIN because BEGIN is predefined */
+accelerators:	ACCELERATORS  tBEGIN  events tEND {$$=$3;$$->type=acc;}
+/* the events are collected in a gen_res, as the accelerator resource is just
+   an array of events */
+events:		{$$=new_res();}
+		| STRING ',' NUMBER acc_options  events 
+			{$$=add_string_accelerator($1,$3,$4,$5);}
+		| NUMBER ',' NUMBER ',' ASCII acc_options  events 
+			{$$=add_ascii_accelerator($1,$3,$6,$7);}
+		| NUMBER ',' NUMBER ',' VIRTKEY acc_options  events 
+			{$$=add_vk_accelerator($1,$3,$6,$7);}
+acc_options:	{$$=0;}
+		| ',' NOINVERT acc_options {$$=$3|2;}
+		| ',' ALT acc_options      {$$=$3|16;}
+		| ',' SHIFT acc_options	   {$$=$3|4;}
+		| ',' CONTROL acc_options  {$$=$3|8;}
+
+bitmap:		tBITMAP load_and_memoption STRING {$$=make_bitmap(load_file($3));}
+		| tBITMAP load_and_memoption raw_data {$$=make_bitmap($3);}
+
+/* load and memory options are ignored */
+load_and_memoption:	| lamo load_and_memoption
+lamo:	PRELOAD | LOADONCALL | FIXED | MOVEABLE | DISCARDABLE | PURE
+
+cursor:		CURSOR load_and_memoption STRING {$$=make_cursor(load_file($3));}
+		|CURSOR load_and_memoption raw_data {$$=make_cursor($3);}
+
+dialog:		DIALOG load_and_memoption NUMBER ',' NUMBER ',' NUMBER ',' NUMBER 
+		dlg_attributes
+		tBEGIN  controls tEND 
+		{$$=make_dialog($10,$3,$5,$7,$9,$12);}
+
+dlg_attributes:	{$$=new_dialog();}
+		| STYLE style dlg_attributes 
+		  {$$=dialog_style($2,$3);}
+		| CAPTION STRING dlg_attributes
+		  {$$=dialog_caption($2,$3);}
+		| FONT NUMBER ',' STRING dlg_attributes 
+		  {$$=dialog_font($2,$4,$5);}
+		| CLASS STRING dlg_attributes
+		  {$$=dialog_class($2,$3);}
+		| MENU STRING dlg_attributes
+		  {$$=dialog_menu($2,$3);}
+
+/* the controls are collected into a gen_res, and finally the dialog header 
+   is put at the beginning */
+controls:	{$$=new_res();}
+		| CHECKBOX  labeled_control controls 
+		  {$$=add_control(CT_BUTTON, BS_CHECKBOX, $2, $3);}
+		| COMBOBOX control_desc controls 
+		  {$$=add_control(CT_COMBOBOX, 0, $2, $3);}
+		| CONTROL generic_control controls
+		  {$$=add_generic_control($2, $3);}
+		| CTEXT labeled_control controls 
+		  {$$=add_control(CT_STATIC, SS_CENTER, $2, $3);}
+		| DEFPUSHBUTTON labeled_control controls 
+		  {$$=add_control(CT_BUTTON, BS_DEFPUSHBUTTON, $2, $3);}
+		| EDITTEXT control_desc controls 
+		  {$$=add_control(CT_EDIT, 0, $2, $3);}
+		| GROUPBOX labeled_control controls 
+		  {$$=add_control(CT_BUTTON, BS_GROUPBOX, $2, $3);}
+		/*special treatment for icons, as the extent is optional*/
+		| ICON STRING ',' NUMBER ',' NUMBER ',' NUMBER iconinfo controls
+		  {$$=add_icon($2, $4, $6, $8, $9, $10);}
+		| LISTBOX control_desc controls 
+		  {$$=add_control(CT_LISTBOX, 0, $2, $3);}
+		| LTEXT labeled_control controls 
+		  {$$=add_control(CT_STATIC, SS_LEFT, $2, $3);}
+		| PUSHBUTTON labeled_control controls 
+		  {$$=add_control(CT_BUTTON, BS_PUSHBUTTON, $2, $3);}
+		| RADIOBUTTON labeled_control controls 
+		  {$$=add_control(CT_BUTTON, BS_RADIOBUTTON, $2, $3);}
+		| RTEXT labeled_control controls 
+		  {$$=add_control(CT_STATIC, SS_RIGHT, $2, $3);}
+		| SCROLLBAR control_desc controls		
+		  {$$=add_control(CT_SCROLLBAR, 0, $2, $3);}
+
+
+labeled_control: STRING ',' control_desc {$$=label_control_desc($1,$3);}
+control_desc:	NUMBER ',' NUMBER ',' NUMBER ',' NUMBER ',' NUMBER optional_style 
+		{$$=create_control_desc($1,$3,$5,$7,$9,$10);}
+
+optional_style: {$$=0;}|
+		',' style {$$=$2;}
+
+iconinfo:	/*set extent and style to 0 if they are not provided */
+		{$$=create_control_desc(0,0,0,0,0,0);} 
+		/* x and y are overwritten later */
+		| ',' NUMBER ',' NUMBER optional_style
+        {$$=create_control_desc(0,0,0,$2,$4,$5);}
+
+generic_control:	STRING ',' NUMBER ',' STRING ',' style ',' NUMBER
+		',' NUMBER ',' NUMBER ',' NUMBER
+		{$$=create_generic_control($1,$3,$5,$7,$9,$11,$13,$15);}
+
+font:		FONT load_and_memoption STRING {$$=make_font(load_file($3));}
+
+icon:		ICON load_and_memoption STRING {$$=make_icon(load_file($3));}
+		| ICON load_and_memoption raw_data {$$=make_icon($3);}
+
+menu:		MENU load_and_memoption menu_body {$$=make_menu($3);}
+/* menu items are collected in a gen_res and prefixed with the menu header*/
+menu_body:	tBEGIN item_definitions tEND {$$=$2;}
+item_definitions:	{$$=new_res();}
+		| MENUITEM STRING ',' NUMBER item_options item_definitions
+		  {$$=add_menuitem($2,$4,$5,$6);}
+		| MENUITEM SEPARATOR item_definitions
+		  {$$=add_menuitem("",0,0,$3);}
+		| POPUP STRING item_options menu_body item_definitions
+		  {$$=add_popup($2,$3,$4,$5);}
+item_options:	{$$=0;}
+		| ',' CHECKED item_options {$$=$3|MF_CHECKED;}
+		| ',' GRAYED item_options {$$=$3|MF_GRAYED;}
+		| ',' HELP item_options {$$=$3|MF_HELP;}
+		| ',' INACTIVE item_options {$$=$3|MF_DISABLED;}
+		| ',' MENUBARBREAK item_options {$$=$3|MF_MENUBARBREAK;}
+		| ',' MENUBREAK item_options {$$=$3|MF_MENUBREAK;}
+
+rcdata:		RCDATA load_and_memoption raw_data {$$=make_raw($3);}
+
+raw_data:	tBEGIN raw_elements tEND {$$=$2;}
+raw_elements:	SINGLE_QUOTED {$$=hex_to_raw($1,new_res());}
+		| NUMBER {$$=int_to_raw($1,new_res());}
+		| SINGLE_QUOTED raw_elements {$$=hex_to_raw($1,$2);}
+		| NUMBER ',' raw_elements {$$=int_to_raw($1,$3);}
+
+stringtable:	STRINGTABLE load_and_memoption tBEGIN strings tEND
+			{$$=$4;}
+strings:	{$$=0;}|
+		NUMBER STRING strings {$$=0;}
+
+versioninfo:	VERSIONINFO NOT_SUPPORTED {$$=0;}
+
+/* NOT x | NOT y | a | b means (a|b)& ~x & ~y
+   NOT is used to disable default styles */
+style:		NUMBER {$$=new_style();$$->or=$1;}
+		| NOT NUMBER {$$=new_style();$$->and=~($2);}
+		| NUMBER '|' style {$$=$3;$$->or|=$1;}
+		| NOT NUMBER '|' style {$$=$4;$$->and&=~($2);}
+%%
+yyerror(char *s)
+{
+	puts(s);
+}
+
diff --git a/rc/sysres.rc b/rc/sysres.rc
new file mode 100644
index 0000000..508cb16
--- /dev/null
+++ b/rc/sysres.rc
@@ -0,0 +1,1626 @@
+
+32512 ICON 
+{
+'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 BF 00 00 BF 00 00 00 BF BF 00 BF 00'
+'00 00 BF 00 BF 00 BF BF 00 00 C0 C0 C0 00 80 80'
+'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 77 77 77 70 00 00 00 00'
+'77 77 77 77 77 77 77 77 70 00 00 00 00 00 00 00'
+'77 77 77 77 77 77 77 77 70 88 88 00 00 00 00 00'
+'77 77 77 77 77 77 77 77 70 88 80 00 00 00 00 00'
+'77 77 77 77 77 77 77 77 70 88 00 00 00 00 00 00'
+'77 77 77 77 77 77 77 77 70 80 00 00 00 00 00 00'
+'77 77 77 77 77 77 77 77 70 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 00'
+'00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00'
+'00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00'
+'00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00'
+'00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00'
+'00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00'
+'00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00'
+'00 07 E0 00 00 0F E0 00 00 1F E0 00 00 3F E0 00'
+'00 7F E0 00 00 FF E0 00 01 FF E0 00 03 FF'
+
+}
+
+
+32513 ICON 
+{
+'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 BF 00 00 BF 00 00 00 BF BF 00 BF 00'
+'00 00 BF 00 BF 00 BF BF 00 00 C0 C0 C0 00 80 80'
+'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 88 88 88 88 88 88 88 80 00 00 00 00 00 00'
+'00 0F 88 88 88 88 88 88 88 88 00 00 00 00 00 00'
+'00 FF 99 99 99 99 99 99 99 98 80 00 00 00 00 00'
+'0F F9 99 99 99 99 99 99 99 99 88 00 00 00 00 00'
+'FF 99 99 99 99 99 99 99 99 99 98 80 00 00 00 0F'
+'F9 99 99 99 99 99 99 99 99 99 99 88 00 00 00 FF'
+'99 99 99 99 99 99 99 99 99 99 99 98 80 00 0F F9'
+'99 99 99 99 99 99 99 99 99 99 99 99 88 00 FF 99'
+'99 99 99 99 99 99 99 99 99 99 99 99 98 80 FF 99'
+'99 99 99 99 99 99 99 99 99 99 99 99 98 80 FF 99'
+'99 99 99 99 99 99 99 99 99 99 99 99 98 80 FF 99'
+'FF F9 99 9F 99 99 FF F9 99 F9 99 99 98 80 FF 99'
+'99 9F 99 9F 99 9F 99 9F 99 F9 99 99 98 80 FF 99'
+'99 9F 99 9F 99 9F 99 9F 99 F9 99 99 98 80 FF 99'
+'99 9F 99 9F 99 9F 99 9F 99 F9 99 99 98 80 FF 99'
+'9F F9 99 9F 99 9F 99 9F 99 FF FF 99 98 80 FF 99'
+'F9 99 99 9F 99 9F 99 9F 99 F9 99 F9 98 80 FF 99'
+'F9 99 99 9F 99 9F 99 9F 99 F9 99 F9 98 80 FF 99'
+'F9 99 99 9F 99 9F 99 9F 99 F9 99 F9 98 80 FF 99'
+'9F FF 9F FF FF 99 FF F9 99 FF FF 99 98 80 FF 99'
+'99 99 99 99 99 99 99 99 99 99 99 99 98 80 FF 99'
+'99 99 99 99 99 99 99 99 99 99 99 99 98 80 FF 99'
+'99 99 99 99 99 99 99 99 99 99 99 99 98 00 0F F9'
+'99 99 99 99 99 99 99 99 99 99 99 99 88 00 00 FF'
+'99 99 99 99 99 99 99 99 99 99 99 98 80 00 00 0F'
+'F9 99 99 99 99 99 99 99 99 99 99 88 00 00 00 00'
+'FF 99 99 99 99 99 99 99 99 99 98 80 00 00 00 00'
+'0F F9 99 99 99 99 99 99 99 99 88 00 00 00 00 00'
+'00 FF 99 99 99 99 99 99 99 98 80 00 00 00 00 00'
+'00 0F FF FF FF FF FF FF FF F8 00 00 00 00 00 00'
+'00 00 FF FF FF FF FF FF FF F0 00 00 00 00 FF FF'
+'FF FF FF 00 01 FF FE 00 00 FF FC 00 00 7F F8 00'
+'00 3F F0 00 00 1F E0 00 00 0F C0 00 00 07 80 00'
+'00 03 00 00 00 01 00 00 00 01 00 00 00 01 00 00'
+'00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00'
+'00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00'
+'00 01 00 00 00 01 00 00 00 01 00 00 00 03 80 00'
+'00 03 C0 00 00 07 E0 00 00 0F F0 00 00 1F F8 00'
+'00 3F FC 00 00 7F FE 00 00 FF FF 00 01 FF'
+
+}
+
+
+32514 ICON 
+{
+'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 BF 00 00 BF 00 00 00 BF BF 00 BF 00'
+'00 00 BF 00 BF 00 BF BF 00 00 C0 C0 C0 00 80 80'
+'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 FF FF'
+'FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF'
+'FF FF F0 00 BB BB BB BB 00 0F FF FF FF FF FF FF'
+'FF F0 0B BB BB B8 8B BB BB B0 0F FF FF FF FF FF'
+'FF 0B BB BB B7 88 88 8B BB BB B0 FF FF FF FF FF'
+'F0 BB BB BB B7 11 11 8B BB BB BB 0F FF FF FF FF'
+'0B BB BB BB 77 11 11 88 BB BB BB B0 FF FF FF F0'
+'BB BB BB BB 77 11 11 88 BB BB BB BB 0F FF FF 0B'
+'BB BB BB BB B7 11 11 8B BB BB BB BB B0 FF FF 0B'
+'BB BB BB BB B7 77 77 8B BB BB BB BB B0 FF F0 BB'
+'BB BB BB BB BB B7 7B BB BB BB BB BB BB 0F F0 BB'
+'BB BB BB BB BB BB BB BB BB BB BB BB BB 0F F0 BB'
+'BB BB BB BB 78 88 88 88 BB BB BB BB BB 0F 0B BB'
+'BB BB BB BB 77 88 88 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 8B BB BB BB BB B0 0B BB'
+'BB BB BB BB B7 71 11 18 8B BB BB BB BB B0 0B BB'
+'BB BB BB BB B7 71 11 18 88 BB BB BB BB B0 0B BB'
+'BB BB BB BB B7 77 11 11 88 8B BB BB BB B0 0B BB'
+'BB BB BB BB BB 77 11 11 18 88 BB BB BB B0 0B BB'
+'BB BB BB BB BB 77 71 11 11 88 8B BB BB B0 F0 BB'
+'BB BB BB BB BB B7 77 71 11 18 88 BB BB 0F F0 BB'
+'BB B7 88 88 88 BB B7 77 11 11 88 BB BB 0F F0 BB'
+'BB B7 78 88 88 8B BB 77 11 11 88 BB BB 0F FF 0B'
+'BB B7 71 11 18 88 88 77 11 11 88 BB B0 FF FF 0B'
+'BB B7 77 11 11 88 88 71 11 18 88 BB B0 FF FF F0'
+'BB BB 77 71 11 11 11 11 11 88 8B BB 0F FF FF FF'
+'0B BB B7 77 11 11 11 11 88 88 BB B0 FF FF FF FF'
+'F0 BB BB 77 77 77 77 77 88 8B BB 0F FF FF FF FF'
+'FF 0B BB B7 77 77 77 77 7B BB B0 FF FF FF FF FF'
+'FF F0 0B BB BB BB BB BB BB B0 0F FF FF FF FF FF'
+'FF FF F0 00 BB BB BB BB 00 0F FF FF FF FF FF FF'
+'FF FF FF FF 00 00 00 00 FF FF FF FF FF FF 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32515 ICON 
+{
+'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 BF 00 00 BF 00 00 00 BF BF 00 BF 00'
+'00 00 BF 00 BF 00 BF BF 00 00 C0 C0 C0 00 80 80'
+'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 FF FF'
+'FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF'
+'FF FF F0 00 BB BB BB BB 00 0F FF FF FF FF FF FF'
+'FF F0 0B BB BB B8 8B BB BB B0 0F FF FF FF FF FF'
+'FF 0B BB BB B7 88 88 8B BB BB B0 FF FF FF FF FF'
+'F0 BB BB BB B7 11 11 8B BB BB BB 0F FF FF FF FF'
+'0B BB BB BB 77 11 11 88 BB BB BB B0 FF FF FF F0'
+'BB BB BB BB 77 11 11 88 BB BB BB BB 0F FF FF 0B'
+'BB BB BB BB B7 11 11 8B BB BB BB BB B0 FF FF 0B'
+'BB BB BB BB B7 77 77 8B BB BB BB BB B0 FF F0 BB'
+'BB BB BB BB BB B7 7B BB BB BB BB BB BB 0F F0 BB'
+'BB BB BB BB BB BB BB BB BB BB BB BB BB 0F F0 BB'
+'BB BB BB BB 78 88 88 88 BB BB BB BB BB 0F 0B BB'
+'BB BB BB BB 77 88 88 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 0B BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB B0 F0 BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB 0F F0 BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB 0F F0 BB'
+'BB BB BB BB 77 11 11 88 BB BB BB BB BB 0F FF 0B'
+'BB BB BB BB 77 11 11 88 BB BB BB BB B0 FF FF 0B'
+'BB BB BB BB 77 11 11 88 BB BB BB BB B0 FF FF F0'
+'BB BB BB BB 77 11 11 88 BB BB BB BB 0F FF FF FF'
+'0B BB BB BB 77 11 11 88 BB BB BB B0 FF FF FF FF'
+'F0 BB BB BB 77 77 77 88 BB BB BB 0F FF FF FF FF'
+'FF 0B BB BB 77 77 77 78 BB BB B0 FF FF FF FF FF'
+'FF F0 0B BB BB BB BB BB BB B0 0F FF FF FF FF FF'
+'FF FF F0 00 BB BB BB BB 00 0F FF FF FF FF FF FF'
+'FF FF FF FF 00 00 00 00 FF FF FF FF FF FF 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32516 ICON 
+{
+'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 BF 00 00 BF 00 00 00 BF BF 00 BF 00'
+'00 00 BF 00 BF 00 BF BF 00 00 C0 C0 C0 00 80 80'
+'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 FF FF'
+'FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF'
+'FF FF F0 00 EE EE EE EE 00 0F FF FF FF FF FF FF'
+'FF F0 0E EE EE EE EE EE EE E0 0F FF FF FF FF FF'
+'FF 0E EE EE 78 88 88 88 EE EE E0 FF FF FF FF FF'
+'F0 EE EE EE 77 88 88 88 EE EE EE 0F FF FF FF FF'
+'0E EE EE EE 77 11 11 88 EE EE EE E0 FF FF FF F0'
+'EE EE EE EE 77 11 11 88 EE EE EE EE 0F FF FF 0E'
+'EE EE EE EE 77 11 11 88 EE EE EE EE E0 FF FF 0E'
+'EE EE EE EE 77 11 11 88 EE EE EE EE E0 FF F0 EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE 0F F0 EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE 0F F0 EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE 0F 0E EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE E0 0E EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE E0 0E EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE E0 0E EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE E0 0E EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE E0 0E EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE E0 0E EE'
+'EE EE EE EE 77 11 11 88 EE EE EE EE EE E0 0E EE'
+'EE EE EE EE 77 77 77 88 EE EE EE EE EE E0 F0 EE'
+'EE EE EE EE 77 77 77 78 EE EE EE EE EE 0F F0 EE'
+'EE EE EE EE EE EE EE EE EE EE EE EE EE 0F F0 EE'
+'EE EE EE EE EE E8 8E EE EE EE EE EE EE 0F FF 0E'
+'EE EE EE EE E7 88 88 8E EE EE EE EE E0 FF FF 0E'
+'EE EE EE EE E7 11 11 8E EE EE EE EE E0 FF FF F0'
+'EE EE EE EE 77 11 11 88 EE EE EE EE 0F FF FF FF'
+'0E EE EE EE 77 11 11 88 EE EE EE E0 FF FF FF FF'
+'F0 EE EE EE E7 11 11 8E EE EE EE 0F FF FF FF FF'
+'FF 0E EE EE E7 77 77 8E EE EE E0 FF FF FF FF FF'
+'FF F0 0E EE EE E7 7E EE EE E0 0F FF FF FF FF FF'
+'FF FF F0 00 EE EE EE EE 00 0F FF FF FF FF FF FF'
+'FF FF FF FF 00 00 00 00 FF FF FF FF FF FF 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+SYSIDI_HANDHAND ICON 
+{
+'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 BF 00 00 BF 00 00 00 BF BF 00 BF 00'
+'00 00 BF 00 BF 00 BF BF 00 00 C0 C0 C0 00 80 80'
+'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 FF FF FF FF F0 00 00 00 00 00 00 00 00'
+'00 00 00 FF FF FF FF F0 00 00 00 00 00 00 00 00'
+'00 00 00 FF FF FF FF F0 00 00 00 00 00 00 00 00'
+'00 00 0F FF FF FF FF FF 00 00 00 00 00 00 00 00'
+'00 00 FF FF FF FF FF FF F0 00 00 00 00 00 00 00'
+'00 00 FF FF FF FF FF FF FF 00 00 00 00 00 00 00'
+'00 0F FF FF FF FF FF FF FF F0 00 00 00 00 00 00'
+'00 FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00'
+'0F FF FF FF FF FF FF FF FF FF F0 00 00 00 00 00'
+'FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 0F'
+'FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 0F'
+'FF 00 FF FF FF FF FF FF FF FF FF F0 00 00 00 0F'
+'F0 00 0F FF FF FF FF FF FF FF FF F0 00 00 00 0F'
+'F0 00 0F FF FF FF FF FF FF F0 0F F0 00 00 00 0F'
+'F0 00 00 FF FF FF FF FF FF F0 00 F0 00 00 00 0F'
+'F0 00 00 FF FF FF FF FF FF F0 00 F0 00 00 00 0F'
+'F0 00 00 FF F0 0F FF FF 0F FF 00 00 00 00 00 00'
+'00 00 00 FF F0 00 FF F0 00 FF 00 00 00 00 00 00'
+'00 00 00 FF 00 00 0F F0 00 FF 00 00 00 00 00 00'
+'00 00 00 FF 00 00 0F F0 00 FF 00 00 00 00 00 00'
+'00 00 00 FF 00 00 0F F0 00 0F 00 00 00 00 00 00'
+'00 00 00 FF 00 00 0F F0 00 0F 00 00 00 00 00 00'
+'00 00 00 FF 00 00 0F F0 00 00 00 00 00 00 00 00'
+'00 00 00 FF 00 00 0F F0 00 00 00 00 00 00 00 00'
+'00 00 00 FF 00 00 0F F0 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 07 FF FF 00 07 FF FF 00'
+'07 FF FE 00 03 FF FC 00 01 FF FC 00 00 FF F8 00'
+'00 FF F0 00 00 7F F0 00 00 3F E0 00 00 1F C0 00'
+'00 0F 80 00 00 0F 80 00 00 07 80 00 00 07 80 00'
+'00 07 82 00 00 07 83 00 00 07 83 00 00 07 83 00'
+'00 0F C7 00 00 3F FF 02 00 3F FF 02 00 3F FF 02'
+'00 3F FF 02 04 7F FF 02 04 FF FF 02 07 FF FF 06'
+'0F FF FF 8F 1F FF FF FF FF FF FF FF FF FF'
+
+}
+
+
+WINEICON ICON 
+{
+'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
+'00 00 80 00 80 00 80 80 00 00 80 80 80 00 40 40'
+'40 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 03 33 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 03 33 99 55 00 00 00 00 00 00 00 00'
+'00 00 00 00 33 39 99 95 30 00 00 00 00 00 00 00'
+'00 00 00 03 33 33 99 35 53 00 00 00 00 00 00 00'
+'00 00 00 33 33 33 33 33 55 30 00 00 00 00 00 00'
+'00 00 03 33 33 33 33 33 55 33 00 00 00 00 00 00'
+'00 00 33 33 33 33 33 33 35 53 30 00 00 00 00 00'
+'00 03 33 33 33 33 33 33 35 53 33 00 00 00 00 00'
+'00 33 3B BB BB BB BB BB BB 55 33 30 00 00 00 00'
+'00 00 33 BB BE BB BB BB EB B5 50 00 00 00 00 00'
+'00 00 E0 00 00 00 00 00 00 05 50 00 00 00 00 00'
+'00 00 00 00 E0 00 00 0E 00 00 55 00 00 00 00 00'
+'00 00 0E 00 00 00 0E 00 00 00 05 50 00 00 00 00'
+'00 0E 00 00 00 0E 00 00 00 0E 05 55 50 00 00 00'
+'00 00 00 E0 00 00 00 0E 00 00 55 55 00 00 00 00'
+'00 00 00 00 00 E0 00 00 00 00 00 55 00 00 00 00'
+'00 00 E0 0E 00 00 0E 00 0E 00 0E 05 50 00 FF E0'
+'03 FF FC 1F FC 1F FB FF FF EF FB FB EF EF FC 1D'
+'DC 1F FF E0 83 FF FF FE BF FF FF FE BF FF FF FE'
+'BF FF FF FE BF FF FF FE BF FF FF FE BF FF FF FE'
+'BF FF FF FE BF FF FF FE 3F FF FF F8 0F FF FF F0'
+'07 FF FF E0 03 FF FF C0 01 FF FF 80 00 FF FF 00'
+'00 7F FE 00 00 3F FC 00 00 1F F8 00 00 0F F7 00'
+'00 77 EE 00 00 3B C1 F7 EF 01 FE 00 00 1F FE FE'
+'FE 87 FF DF EF 0F FF FD FF CF FF 6F BB A7'
+
+}
+
+
+32514 CURSOR 
+{
+'00 00 02 00 01 00 20 20 00 00 00 00 00 00 30 01'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 01 00 00 00 00 00 80 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 3F FF'
+'F8 00 1F FF F0 00 0F FF E0 00 07 FF C0 00 03 FF'
+'80 00 01 FF 00 00 00 FE 00 00 00 7C 00 00 00 38'
+'00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10'
+'00 00 00 10 00 00 00 38 00 00 00 38 00 00 00 7C'
+'00 00 00 FE 00 00 01 FF 00 00 03 FF 80 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 01 FF 00 00 01 FF 80 00'
+'03 FF A0 00 0B FF B0 00 1B FF B8 00 3B FF BC 00'
+'7B FF 9E 00 F3 FF CF 01 E7 FF E7 83 CF FF F3 C7'
+'9F FF F9 EF 3F FF FC EE 7F FF FE 6C FF FF FF 6D'
+'FF FF FF 6D FF FF FF 45 FF FF FF 01 FF FF FE 00'
+'FF FF FC 00 7F FF F8 00 3F FF F0 00 1F FF E7 FF'
+'CF FF CF FF E7 FF 9F FF F3 FF BF FF FB FF BF FF'
+'FB FF BF FF FB FF BF FF FB FF BF FF FB FF 00 00'
+'01 FF 00 00 01 FF'
+
+}
+
+
+32648 CURSOR 
+{
+'00 00 02 00 01 00 20 20 00 00 0A 00 09 00 30 01'
+'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+'00 00 01 00 01 00 00 00 00 00 80 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 FC 00 00 01 FE'
+'00 00 03 FF 00 00 07 FF 80 00 07 FF 80 00 07 FF'
+'80 00 07 FF 80 00 07 FF 80 00 03 FF 00 00 01 FE'
+'00 00 00 FC 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF EF FF FF FF E7 FF FF'
+'FF C3 FF FF FF 8F FF FF FF 1F FF FF FE 3F FF FF'
+'FC 7F FF FF F8 FF FF FF F1 FF FF FF E3 FF FF FF'
+'C7 FF FF 03 8F FF FC 00 1F FF F8 FC 3F FF F1 FE'
+'3F FF F3 FF 3F FF E7 FF 9F FF E7 FF 9F FF E7 FF'
+'9F FF E7 FF 9F FF E7 FF 9F FF F3 FF 3F FF F1 FE'
+'3F FF F8 FC 7F FF FC 00 FF FF FF 03 FF FF FF FF'
+'FF FF FF FF FF FF'
+
+}
+
+
+32734 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 80 00 00 00 0F 88'
+'88 88 88 88 88 88 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F 77 77 70 77 77 77 78 80 00'
+'00 00 0F 77 77 00 77 77 77 78 80 00 00 00 0F 77'
+'70 00 00 00 00 78 80 00 00 00 0F 77 00 00 00 00'
+'00 78 80 00 00 00 0F 70 00 00 00 00 07 78 80 00'
+'00 00 0F 70 00 00 00 00 07 78 80 00 00 00 0F 77'
+'00 00 00 00 00 78 80 00 00 00 0F 77 70 00 00 00'
+'00 78 80 00 00 00 0F 77 77 00 77 77 77 78 80 00'
+'00 00 0F 77 77 70 77 77 77 78 80 00 00 00 0F 77'
+'77 77 77 77 77 78 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F FF FF FF FF FF FF FF 80 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32735 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 80 00 00 00 0F 87'
+'77 77 77 77 77 78 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F 77 77 77 70 77 77 78 80 00'
+'00 00 0F 77 77 77 70 07 77 78 80 00 00 00 0F 77'
+'00 00 00 00 77 78 80 00 00 00 0F 77 00 00 00 00'
+'07 78 80 00 00 00 0F 77 70 00 00 00 00 78 80 00'
+'00 00 0F 77 70 00 00 00 00 78 80 00 00 00 0F 77'
+'00 00 00 00 07 78 80 00 00 00 0F 77 00 00 00 00'
+'77 78 80 00 00 00 0F 77 77 77 70 07 77 78 80 00'
+'00 00 0F 77 77 77 70 77 77 78 80 00 00 00 0F 77'
+'77 77 77 77 77 78 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F FF FF FF FF FF FF FF 80 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32736 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 80 00 00 00 0F 88'
+'88 88 88 88 88 88 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F 77 77 77 00 77 77 78 80 00'
+'00 00 0F 77 77 70 00 07 77 78 80 00 00 00 0F 77'
+'77 00 00 00 77 78 80 00 00 00 0F 77 70 00 00 00'
+'07 78 80 00 00 00 0F 77 00 00 00 00 00 78 80 00'
+'00 00 0F 77 77 00 00 00 77 78 80 00 00 00 0F 77'
+'77 00 00 00 77 78 80 00 00 00 0F 77 77 00 00 00'
+'77 78 80 00 00 00 0F 77 77 00 00 00 77 78 80 00'
+'00 00 0F 77 77 00 77 00 77 78 80 00 00 00 0F 77'
+'77 77 77 77 77 78 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F FF FF FF FF FF FF FF 80 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32737 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 80 00 00 00 0F 88'
+'88 88 88 88 88 88 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F 77 77 00 77 00 77 78 80 00'
+'00 00 0F 77 77 00 00 00 77 78 80 00 00 00 0F 77'
+'77 00 00 00 77 78 80 00 00 00 0F 77 77 00 00 00'
+'77 78 80 00 00 00 0F 77 77 00 00 00 77 78 80 00'
+'00 00 0F 77 00 00 00 00 00 78 80 00 00 00 0F 77'
+'70 00 00 00 07 78 80 00 00 00 0F 77 77 00 00 00'
+'77 78 80 00 00 00 0F 77 77 70 00 07 77 78 80 00'
+'00 00 0F 77 77 77 00 77 77 78 80 00 00 00 0F 77'
+'77 77 77 77 77 78 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F FF FF FF FF FF FF FF 80 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32738 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 80 00 00 00 0F 88'
+'88 88 88 88 88 88 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F 77 00 00 00 00 00 78 80 00'
+'00 00 0F 77 77 77 77 77 77 78 80 00 00 00 0F 77'
+'77 77 00 77 77 78 80 00 00 00 0F 77 77 70 00 07'
+'77 78 80 00 00 00 0F 77 77 00 CC 00 77 78 80 00'
+'00 00 0F 77 70 0C CC C0 07 78 80 00 00 00 0F 77'
+'00 0C CC C0 00 78 80 00 00 00 0F 77 77 0C CC C0'
+'77 78 80 00 00 00 0F 77 77 0C CC C0 77 78 80 00'
+'00 00 0F 77 77 00 00 00 77 78 80 00 00 00 0F 77'
+'77 00 77 00 77 78 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F FF FF FF FF FF FF FF 80 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32739 BITMAP 
+{
+'42 4D 7E 00 00 00 00 00 00 00 3E 00 00 00 28 00'
+'00 00 10 00 00 00 10 00 00 00 01 00 01 00 00 00'
+'00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 FF FF FF 00 FF FF'
+'4C 00 FF FF 40 00 FD FF 00 00 FC FF 7C 00 FC 7F'
+'00 00 FE 3F 40 00 FE 1F 94 03 FE 0F 01 10 FE 0F'
+'00 00 FE 1F FA 00 FE 3F 41 8A FC 7F E2 8D FC FF'
+'00 00 FD FF BE 00 FF FF 00 00 FF FF F4 00'
+
+}
+
+
+32740 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 0F FF FF FF FF FF FF FF F0 00 00 00 08 FF'
+'FF FF FF FF FF FF F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 77 77 70 77 77 77 7F F0 00'
+'00 00 08 77 77 00 77 77 77 7F F0 00 00 00 08 77'
+'70 00 00 00 00 7F F0 00 00 00 08 77 00 00 00 00'
+'00 7F F0 00 00 00 08 70 00 00 00 00 07 7F F0 00'
+'00 00 08 70 00 00 00 00 07 7F F0 00 00 00 08 77'
+'00 00 00 00 00 7F F0 00 00 00 08 77 70 00 00 00'
+'00 7F F0 00 00 00 08 77 77 00 77 77 77 7F F0 00'
+'00 00 08 77 77 70 77 77 77 7F F0 00 00 00 08 77'
+'77 77 77 77 77 7F F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 88 88 88 88 88 88 88 F0 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32741 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 0F FF FF FF FF FF FF FF F0 00 00 00 08 FF'
+'FF FF FF FF FF FF F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 77 77 77 70 77 77 7F F0 00'
+'00 00 08 77 77 77 70 07 77 7F F0 00 00 00 08 77'
+'00 00 00 00 77 7F F0 00 00 00 08 77 00 00 00 00'
+'07 7F F0 00 00 00 08 77 70 00 00 00 00 7F F0 00'
+'00 00 08 77 70 00 00 00 00 7F F0 00 00 00 08 77'
+'00 00 00 00 07 7F F0 00 00 00 08 77 00 00 00 00'
+'77 7F F0 00 00 00 08 77 77 77 70 07 77 7F F0 00'
+'00 00 08 77 77 77 70 77 77 7F F0 00 00 00 08 77'
+'77 77 77 77 77 7F F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 88 88 88 88 88 88 88 F0 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32742 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 0F FF FF FF FF FF FF FF F0 00 00 00 08 FF'
+'FF FF FF FF FF FF F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 77 77 77 00 77 77 7F F0 00'
+'00 00 08 77 77 70 00 07 77 7F F0 00 00 00 08 77'
+'77 00 00 00 77 7F F0 00 00 00 08 77 70 00 00 00'
+'07 7F F0 00 00 00 08 77 00 00 00 00 00 7F F0 00'
+'00 00 08 77 77 00 00 00 77 7F F0 00 00 00 08 77'
+'77 00 00 00 77 7F F0 00 00 00 08 77 77 00 00 00'
+'77 7F F0 00 00 00 08 77 77 00 00 00 77 7F F0 00'
+'00 00 08 77 77 00 77 00 77 7F F0 00 00 00 08 77'
+'77 77 77 77 77 7F F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 88 88 88 88 88 88 88 F0 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32743 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 0F FF FF FF FF FF FF FF F0 00 00 00 08 FF'
+'FF FF FF FF FF FF F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 77 77 00 77 00 77 7F F0 00'
+'00 00 08 77 77 00 00 00 77 7F F0 00 00 00 08 77'
+'77 00 00 00 77 7F F0 00 00 00 08 77 77 00 00 00'
+'77 7F F0 00 00 00 08 77 77 00 00 00 77 7F F0 00'
+'00 00 08 77 00 00 00 00 00 7F F0 00 00 00 08 77'
+'70 00 00 00 07 7F F0 00 00 00 08 77 77 00 00 00'
+'77 7F F0 00 00 00 08 77 77 70 00 07 77 7F F0 00'
+'00 00 08 77 77 77 00 77 77 7F F0 00 00 00 08 77'
+'77 77 77 77 77 7F F0 00 00 00 08 77 77 77 77 77'
+'77 7F F0 00 00 00 08 88 88 88 88 88 88 88 F0 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32744 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 70 07 77 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 70 08 80'
+'07 77 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 70 00 00 00 00 07 78 80 00 00 0F 77'
+'77 77 77 77 77 77 78 80 00 00 0F 77 70 00 00 00'
+'00 07 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 77 70 08 80 07 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 77 70 07'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32745 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 0F FF FF FF FF FF FF FF FF F0 00 00 08 FF'
+'FF FF FF FF FF FF FF F0 00 00 08 77 77 77 77 77'
+'77 77 7F F0 00 00 08 77 77 77 77 77 77 77 7F F0'
+'00 00 08 77 77 77 77 77 77 77 7F F0 00 00 08 77'
+'77 77 77 77 77 77 7F F0 00 00 08 77 77 77 77 77'
+'77 77 7F F0 00 00 08 77 70 00 00 00 00 07 7F F0'
+'00 00 08 77 77 00 00 00 00 77 7F F0 00 00 08 77'
+'77 70 00 00 07 77 7F F0 00 00 08 77 77 77 00 00'
+'77 77 7F F0 00 00 08 77 77 77 70 07 77 77 7F F0'
+'00 00 08 77 77 77 77 77 77 77 7F F0 00 00 08 77'
+'77 77 77 77 77 77 7F F0 00 00 08 77 77 77 77 77'
+'77 77 7F F0 00 00 08 77 77 77 77 77 77 77 7F F0'
+'00 00 08 77 77 77 77 77 77 77 7F F0 00 00 08 88'
+'88 88 88 88 88 88 88 F0 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32746 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 FF FF FF FF FF FF FF FF F0 00 00 08 FF'
+'FF FF FF FF FF FF FF F0 00 00 08 77 77 77 77 77'
+'77 77 7F F0 00 00 08 77 77 77 77 77 77 77 7F F0'
+'00 00 08 77 77 77 70 07 77 77 7F F0 00 00 08 77'
+'77 77 00 00 77 77 7F F0 00 00 08 77 77 70 08 80'
+'07 77 7F F0 00 00 08 77 77 00 88 88 00 77 7F F0'
+'00 00 08 77 70 00 88 88 00 07 7F F0 00 00 08 77'
+'77 70 88 88 07 77 7F F0 00 00 08 77 77 70 88 88'
+'07 77 7F F0 00 00 08 77 77 70 88 88 07 77 7F F0'
+'00 00 08 77 77 70 00 00 07 77 7F F0 00 00 08 77'
+'77 70 07 70 07 77 7F F0 00 00 08 77 77 77 77 77'
+'77 77 7F F0 00 00 08 77 77 77 77 77 77 77 7F F0'
+'00 00 08 77 77 77 77 77 77 77 7F F0 00 00 08 88'
+'88 88 88 88 88 88 88 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32747 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 70 07 77 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 70 08 80'
+'07 77 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 70 00 00 00 00 07 78 80 00 00 0F 77'
+'77 77 77 77 77 77 78 80 00 00 0F 77 70 00 00 00'
+'00 07 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 77 70 08 80 07 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 77 70 07'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32748 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F 77'
+'77 77 77 77 77 77 78 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 70 00 00 00 00 07 78 80'
+'00 00 0F 77 77 00 00 00 00 77 78 80 00 00 0F 77'
+'77 70 00 00 07 77 78 80 00 00 0F 77 77 77 00 00'
+'77 77 78 80 00 00 0F 77 77 77 70 07 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F 77'
+'77 77 77 77 77 77 78 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32749 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 70 07 77 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 70 08 80'
+'07 77 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 70 00 88 88 00 07 78 80 00 00 0F 77'
+'77 70 88 88 07 77 78 80 00 00 0F 77 77 70 88 88'
+'07 77 78 80 00 00 0F 77 77 70 88 88 07 77 78 80'
+'00 00 0F 77 77 70 00 00 07 77 78 80 00 00 0F 77'
+'77 70 07 70 07 77 78 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32750 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF F0 FF FF FF FF FF 00'
+'00 00 FF FF FF 00 FF FF FF FF FF 00 00 00 FF FF'
+'F0 00 00 00 00 FF FF 00 00 00 FF FF 00 00 00 00'
+'00 FF FF 00 00 00 FF F0 00 00 00 00 0F FF FF 00'
+'00 00 FF F0 00 00 00 00 0F FF FF 00 00 00 FF FF'
+'00 00 00 00 00 FF FF 00 00 00 FF FF F0 00 00 00'
+'00 FF FF 00 00 00 FF FF FF 00 FF FF FF FF FF 00'
+'00 00 FF FF FF F0 FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32751 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF F0 FF FF FF FF 00'
+'00 00 FF FF FF FF F0 0F FF FF FF 00 00 00 FF FF'
+'00 00 00 00 FF FF FF 00 00 00 FF FF 00 00 00 00'
+'0F FF FF 00 00 00 FF FF F0 00 00 00 00 FF FF 00'
+'00 00 FF FF F0 00 00 00 00 FF FF 00 00 00 FF FF'
+'00 00 00 00 0F FF FF 00 00 00 FF FF 00 00 00 00'
+'FF FF FF 00 00 00 FF FF FF FF F0 0F FF FF FF 00'
+'00 00 FF FF FF FF F0 FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32752 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF 00 FF FF FF FF 00'
+'00 00 FF FF FF F0 00 0F FF FF FF 00 00 00 FF FF'
+'FF 00 00 00 FF FF FF 00 00 00 FF FF F0 00 00 00'
+'0F FF FF 00 00 00 FF FF 00 00 00 00 00 FF FF 00'
+'00 00 FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF'
+'FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00 00 00'
+'FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00'
+'00 00 FF FF FF 00 FF 00 FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32753 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF 00 FF 00 FF FF FF 00'
+'00 00 FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF'
+'FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00 00 00'
+'FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00'
+'00 00 FF FF 00 00 00 00 00 FF FF 00 00 00 FF FF'
+'F0 00 00 00 0F FF FF 00 00 00 FF FF FF 00 00 00'
+'FF FF FF 00 00 00 FF FF FF F0 00 0F FF FF FF 00'
+'00 00 FF FF FF FF 00 FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32754 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 7F FF FF 77 77 78 80 00 00 0F 77'
+'77 FF FF FF F7 77 78 80 00 00 0F 77 7F F9 99 99'
+'FF 77 78 80 00 00 0F 77 88 99 99 99 9F F7 78 80'
+'00 00 0F 77 88 99 99 99 9F F7 78 80 00 00 0F 77'
+'88 99 99 99 9F F7 78 80 00 00 0F 77 88 99 99 99'
+'9F F7 78 80 00 00 0F 77 88 99 99 99 9F F7 78 80'
+'00 00 0F 77 78 89 99 99 FF 77 78 80 00 00 0F 77'
+'77 88 88 88 F7 77 78 80 00 00 0F 77 77 78 88 88'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32755 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 70 07 77 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 70 08 80'
+'07 77 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 70 00 00 00 00 07 78 80 00 00 0F 77'
+'77 77 77 77 77 77 78 80 00 00 0F 77 70 00 00 00'
+'00 07 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 77 70 08 80 07 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 77 70 07'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32756 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F 77'
+'77 77 77 77 77 77 78 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 70 00 00 00 00 07 78 80'
+'00 00 0F 77 77 00 00 00 00 77 78 80 00 00 0F 77'
+'77 70 00 00 07 77 78 80 00 00 0F 77 77 77 00 00'
+'77 77 78 80 00 00 0F 77 77 77 70 07 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F 77'
+'77 77 77 77 77 77 78 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32757 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 70 07 77 77 78 80 00 00 0F 77'
+'77 77 00 00 77 77 78 80 00 00 0F 77 77 70 08 80'
+'07 77 78 80 00 00 0F 77 77 00 88 88 00 77 78 80'
+'00 00 0F 77 70 00 88 88 00 07 78 80 00 00 0F 77'
+'77 70 88 88 07 77 78 80 00 00 0F 77 77 70 88 88'
+'07 77 78 80 00 00 0F 77 77 70 88 88 07 77 78 80'
+'00 00 0F 77 77 70 00 00 07 77 78 80 00 00 0F 77'
+'77 70 07 70 07 77 78 80 00 00 0F 77 77 77 77 77'
+'77 77 78 80 00 00 0F 77 77 77 77 77 77 77 78 80'
+'00 00 0F 77 77 77 77 77 77 77 78 80 00 00 0F FF'
+'FF FF FF FF FF FF FF 80 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32758 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF F0 00 FF FF FF FF FF FF 00 00 00 FF 0F'
+'FF 0F FF FF FF FF FF 00 00 00 F0 FF FF F0 FF FF'
+'00 00 FF 00 00 00 0F FF FF FF 0F F0 00 00 0F 00'
+'00 00 0F FF FF FF 0F F0 00 00 0F 00 00 00 0F FF'
+'FF FF 0F F0 00 00 0F 00 00 00 F0 FF FF F0 FF F0'
+'00 00 0F 00 00 00 FF 0F FF 0F FF FF 00 00 FF 00'
+'00 00 FF F0 00 FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32759 BITMAP 
+{
+'42 4D 36 02 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 1C 00 00 00 1C 00 00 00 01 00 04 00 00 00'
+'00 00 C0 01 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF 00 00 0F FF FF FF FF 00'
+'00 0F FF FF 00 00 FF F0 FF FF F0 FF FF FF F0 FF'
+'FF F0 FF FF 00 00 FF 0F FF FF FF 0F FF FF 0F FF'
+'FF FF 0F FF 00 00 F0 FF FF FF FF F0 FF F0 FF F0'
+'00 FF F0 FF 00 00 0F FF FF FF FF FF 0F 0F FF 00'
+'00 0F FF 0F 00 00 0F FF FF FF FF FF 0F 0F F0 00'
+'00 00 FF 0F 00 00 0F FF FF FF FF FF 0F 0F F0 00'
+'00 00 FF 0F 00 00 0F FF FF FF FF FF 0F 0F F0 00'
+'00 00 FF 0F 00 00 0F FF FF FF FF FF 0F 0F FF 00'
+'00 0F FF 0F 00 00 F0 FF FF FF FF F0 FF F0 FF F0'
+'00 FF F0 FF 00 00 FF 0F FF FF FF 0F FF FF 0F FF'
+'FF FF 0F FF 00 00 FF F0 FF FF F0 FF FF FF F0 FF'
+'FF F0 FF FF 00 00 FF FF 00 00 0F FF FF FF FF 00'
+'00 0F FF FF 00 00 FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 0F FF FF FF FF FF F0 00 FF FF'
+'FF FF FF 00 00 00 0F FF FF FF FF FF F0 0F 0F FF'
+'FF FF F0 F0 00 00 0F FF FF FF FF FF F0 0F F0 FF'
+'FF FF 0F F0 00 00 0F FF FF FF FF FF F0 0F FF 0F'
+'FF F0 FF F0 00 00 0F FF FF FF FF FF F0 0F FF F0'
+'FF 0F FF F0 00 00 0F FF FF FF FF FF F0 0F FF FF'
+'00 FF FF F0 00 00 0F FF FF FF FF FF F0 0F FF FF'
+'00 FF FF F0 00 00 0F FF FF FF FF FF F0 0F FF F0'
+'FF 0F FF F0 00 00 0F FF FF FF FF FF F0 0F FF 0F'
+'FF F0 FF F0 00 00 0F FF FF FF FF FF F0 0F F0 FF'
+'FF FF 0F F0 00 00 0F FF FF FF FF FF F0 0F 0F FF'
+'FF FF F0 F0 00 00 0F FF FF FF FF FF F0 00 FF FF'
+'FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+32760 BITMAP 
+{
+'42 4D 36 05 00 00 00 00 00 00 36 04 00 00 28 00'
+'00 00 10 00 00 00 10 00 00 00 01 00 08 00 00 00'
+'00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 C0 DC C0 00 F0 CA A6 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 FB'
+'FF 00 A4 A0 A0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF 00 FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 FF'
+'FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00'
+'FF FF FF FF FF FF FF 00 00 00 00 00 FF FF 00 00'
+'00 FF FF FF FF FF FF FF FF 00 00 FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF 00 00 FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF 00 FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF'
+
+}
+
+
+32761 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 80 00 00 00 0F 88'
+'88 88 88 88 88 88 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F 77 77 77 00 00 00 78 80 00'
+'00 00 0F 77 77 77 77 00 00 78 80 00 00 00 0F 77'
+'77 77 70 00 00 78 80 00 00 00 0F 77 77 77 00 00'
+'00 78 80 00 00 00 0F 77 77 77 70 00 70 78 80 00'
+'00 00 0F 70 77 07 77 07 70 78 80 00 00 00 0F 70'
+'70 00 77 77 77 78 80 00 00 00 0F 70 00 00 07 77'
+'77 78 80 00 00 00 0F 70 00 00 77 77 77 78 80 00'
+'00 00 0F 70 00 07 77 77 77 78 80 00 00 00 0F 70'
+'00 00 07 77 77 78 80 00 00 00 0F 77 77 77 77 77'
+'77 78 80 00 00 00 0F FF FF FF FF FF FF FF 80 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+
+}
+
+
+32762 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF F0 FF FF FF FF FF 00'
+'00 00 FF FF FF 00 FF FF FF FF FF 00 00 00 FF FF'
+'F0 00 00 00 00 FF FF 00 00 00 FF FF 00 00 00 00'
+'00 FF FF 00 00 00 FF F0 00 00 00 00 0F FF FF 00'
+'00 00 FF F0 00 00 00 00 0F FF FF 00 00 00 FF FF'
+'00 00 00 00 00 FF FF 00 00 00 FF FF F0 00 00 00'
+'00 FF FF 00 00 00 FF FF FF 00 FF FF FF FF FF 00'
+'00 00 FF FF FF F0 FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32763 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF F0 FF FF FF FF 00'
+'00 00 FF FF FF FF F0 0F FF FF FF 00 00 00 FF FF'
+'00 00 00 00 FF FF FF 00 00 00 FF FF 00 00 00 00'
+'0F FF FF 00 00 00 FF FF F0 00 00 00 00 FF FF 00'
+'00 00 FF FF F0 00 00 00 00 FF FF 00 00 00 FF FF'
+'00 00 00 00 0F FF FF 00 00 00 FF FF 00 00 00 00'
+'FF FF FF 00 00 00 FF FF FF FF F0 0F FF FF FF 00'
+'00 00 FF FF FF FF F0 FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32764 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF 00 FF FF FF FF 00'
+'00 00 FF FF FF F0 00 0F FF FF FF 00 00 00 FF FF'
+'FF 00 00 00 FF FF FF 00 00 00 FF FF F0 00 00 00'
+'0F FF FF 00 00 00 FF FF 00 00 00 00 00 FF FF 00'
+'00 00 FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF'
+'FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00 00 00'
+'FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00'
+'00 00 FF FF FF 00 FF 00 FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32765 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF 00 FF 00 FF FF FF 00'
+'00 00 FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF'
+'FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00 00 00'
+'FF FF FF 00 00 00 FF FF FF 00 00 00 FF FF FF 00'
+'00 00 FF FF 00 00 00 00 00 FF FF 00 00 00 FF FF'
+'F0 00 00 00 0F FF FF 00 00 00 FF FF FF 00 00 00'
+'FF FF FF 00 00 00 FF FF FF F0 00 0F FF FF FF 00'
+'00 00 FF FF FF FF 00 FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32766 BITMAP 
+{
+'42 4D 4E 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 12 00 00 00 12 00 00 00 01 00 04 00 00 00'
+'00 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF F0 0F FF FF 00 00 00 FF FF'
+'FF FF FF F0 0F FF FF 00 00 00 FF FF FF FF FF F0'
+'0F FF FF 00 00 00 FF FF FF FF FF F0 0F FF FF 00'
+'00 00 FF FF FF FF FF F0 0F FF FF 00 00 00 FF FF'
+'FF FF FF F0 0F FF FF 00 00 00 FF FF F0 00 00 00'
+'0F FF FF 00 00 00 FF FF F0 00 00 00 0F FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00 FF FF'
+'FF FF FF FF FF FF FF 00 00 00 FF FF FF FF FF FF'
+'FF FF FF 00 00 00 FF FF FF FF FF FF FF FF FF 00'
+'00 00 FF FF FF FF FF FF FF FF FF 00 00 00'
+
+}
+
+
+32767 BITMAP 
+{
+'42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00'
+'00 00 14 00 00 00 14 00 00 00 01 00 04 00 00 00'
+'00 00 F0 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 08 88 88 88 88 88 88 88 88 80 00 00 0F 88'
+'88 88 88 88 88 88 88 80 F8 F8 0F 77 77 77 77 77'
+'77 77 78 80 F8 F8 0F 77 77 77 77 77 77 77 78 80'
+'F8 F8 0F 77 77 77 77 77 77 77 78 80 F8 F8 0F 77'
+'77 7F FF FF 77 77 78 80 F8 F8 0F 77 77 8F FF FF'
+'F7 77 78 80 F8 F8 0F 77 78 88 99 9F FF 77 78 80'
+'4E 04 0F 77 78 89 99 99 FF 77 78 80 4D 00 0F 77'
+'78 89 99 99 FF 77 78 80 06 03 0F 77 78 89 99 99'
+'FF 77 78 80 27 00 0F 77 78 88 99 9F FF 77 78 80'
+'C9 0B 0F 77 77 88 88 88 F7 77 78 80 34 00 0F 77'
+'77 78 88 88 77 77 78 80 45 09 0F 77 77 77 77 77'
+'77 77 78 80 D9 00 0F 77 77 77 77 77 77 77 78 80'
+'0E 0C 0F 77 77 77 77 77 77 77 78 80 38 00 0F FF'
+'FF FF FF FF FF FF FF 80 69 03 00 00 00 00 00 00'
+'00 00 00 00 44 00'
+
+}
+
+
+SMILE BITMAP 
+{
+'42 4D E6 08 00 00 00 00 00 00 36 04 00 00 28 00'
+'00 00 3C 00 00 00 14 00 00 00 01 00 08 00 00 00'
+'00 00 B0 04 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 BF 00 00 BF'
+'00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF'
+'00 00 C0 C0 C0 00 C0 DC C0 00 F0 CA A6 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 FB'
+'FF 00 A4 A0 A0 00 80 80 80 00 00 00 FF 00 00 FF'
+'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 FF F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8'
+'F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8'
+'F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8'
+'F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 00 00 FF'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 F8 00 00 FF 07 F8 FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF 07 F8 00 00 FF 07 F8 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 FF 07'
+'F8 00 00 FF 07 F8 07 07 07 07 07 07 F9 F9 F9 F9'
+'F9 F9 07 07 07 07 07 07 07 07 07 07 07 07 00 00'
+'00 00 00 00 00 00 00 00 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 FF 07 F8 00 00 FF'
+'07 F8 07 07 07 07 07 F9 07 07 07 07 07 07 F9 07'
+'07 07 07 07 07 07 07 07 07 07 00 FF FF FF FF FF'
+'FF FF FF 00 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 FF 07 F8 00 00 FF 07 F8 07 07'
+'07 07 F9 07 07 FA FA FA FA 07 07 F9 07 07 07 07'
+'07 07 07 07 07 07 00 FF 00 00 00 00 00 00 FF 00'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 FF 07 F8 00 00 FF 07 F8 07 07 07 07 F9 07'
+'FA 07 07 07 07 FA 07 F9 07 07 07 07 07 07 07 07'
+'07 07 00 FF 00 00 00 00 00 00 FF 00 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 FF 07'
+'F8 00 00 FF 07 F8 07 07 07 07 F9 07 07 07 FB FB'
+'07 07 07 F9 07 07 07 07 07 07 07 07 07 07 00 FF'
+'FF FF FF FF FF FF FF 00 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 FF 07 F8 00 00 FF'
+'07 F8 07 07 07 07 F9 07 07 07 FB FB 07 07 07 F9'
+'07 07 07 07 07 07 07 07 07 07 00 FF FF FF FF FF'
+'FF FF FF 00 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 FF 07 F8 00 00 FF 07 F8 07 07'
+'07 07 F9 07 FC 07 07 07 07 FC 07 F9 07 07 07 07'
+'07 07 07 07 07 07 00 FF 00 00 00 00 00 00 FF 00'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 FF 07 F8 00 00 FF 07 F8 07 07 07 07 F9 07'
+'FC FC 07 07 FC FC 07 F9 07 07 07 07 07 07 07 07'
+'07 07 00 FF 00 00 00 00 00 00 FF 00 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 FF 07'
+'F8 00 00 FF 07 F8 07 07 07 07 07 F9 07 07 07 07'
+'07 07 F9 07 07 07 07 07 07 07 07 07 07 07 00 FF'
+'FF FF FF FF FF FF FF 00 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 FF 07 F8 00 00 FF'
+'07 F8 07 07 07 07 07 07 F9 F9 F9 F9 F9 F9 07 07'
+'07 07 07 07 07 07 07 07 07 07 00 00 00 00 00 00'
+'00 00 00 00 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 FF 07 F8 00 00 FF 07 F8 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 FF 07 F8 00 00 FF 07 F8 F8 F8 F8 F8 F8 F8'
+'F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8'
+'F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8'
+'F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 07'
+'F8 00 00 FF 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07'
+'07 07 07 07 07 07 07 07 07 07 07 07 F8 00 00 FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
+'FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+'00 00 00 00 00 00'
+
+}
+
+
+WINELOGO BITMAP "winelogo.bmp"
+
+
+SYSMENU MENU 
+{
+ MENUITEM "&Restore", 61728
+ MENUITEM "&Move", 61456
+ MENUITEM "&Size", 61440
+ MENUITEM "Mi&nimize", 61472
+ MENUITEM "Ma&ximize", 61488
+ MENUITEM SEPARATOR
+ MENUITEM "&Close\tAlt-F4", 61536
+ MENUITEM SEPARATOR
+ MENUITEM "&Switch to ...\tCtrl-Esc", 61744
+ MENUITEM SEPARATOR
+ MENUITEM "&About WINE ...", 61761
+}
+
+
+2 DIALOG 80, 80, 150, 170
+STYLE WS_POPUP | WS_VISIBLE | WS_DLGFRAME
+{
+ PUSHBUTTON "Credit & License", 6, 30, 150, 40, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Cancel", 2, 60, 250, 40, 14, WS_GROUP | WS_TABSTOP
+ DEFPUSHBUTTON "Ok", 1, 80, 150, 40, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+}
+
+
+SHELL_ABOUT_MSGBOX DIALOG 50, 44, 213, 149
+STYLE DS_LOCALEDIT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "about X"
+FONT 10, "System"
+{
+ DEFPUSHBUTTON "OK", 1, 86, 130, 40, 14
+ CONTROL "", -1, "STATIC", SS_BLACKFRAME | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 35, 205, 90
+ LTEXT "Text", 100, 11, 40, 190, 80, SS_NOPREFIX | WS_GROUP
+ ICON "WINEICON", -1, 185, 10, 18, 20
+}
+
diff --git a/rc/systest.c b/rc/systest.c
new file mode 100644
index 0000000..3939e1d
--- /dev/null
+++ b/rc/systest.c
@@ -0,0 +1,109 @@
+#include <windows.h>
+
+LRESULT CALLBACK  _export WndProc(HWND hWnd, UINT message,
+              WPARAM wParam, LPARAM lParam);
+
+BOOL CALLBACK _export DlgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
+
+HINSTANCE hInst;
+HMENU hMenu,dummy;
+extern char sysres_MENU_SYSMENU[],sysres_BITMAP_WINELOGO[],sysres_DIALOG_2[];
+
+int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
+                   LPSTR lpszCmdLine, int cmdShow)
+{
+    MSG   msg;
+    WNDCLASS wcHdumpClass;
+    HWND hWndMain;
+
+    hInst=hInstance;
+
+    // Define the window class for this application.
+    wcHdumpClass.lpszClassName = "WrcTestClass";
+    wcHdumpClass.hInstance     = hInstance;
+    wcHdumpClass.lpfnWndProc   = WndProc;
+    wcHdumpClass.hCursor       = 0;
+    wcHdumpClass.hIcon         = 0;
+    wcHdumpClass.lpszMenuName  = 0;
+    wcHdumpClass.hbrBackground = GetStockObject(WHITE_BRUSH);
+    wcHdumpClass.style         = CS_HREDRAW | CS_VREDRAW;
+    wcHdumpClass.cbClsExtra    = 0;
+    wcHdumpClass.cbWndExtra    = 0;
+    RegisterClass(&wcHdumpClass);
+
+    hWndMain = CreateWindow("WrcTestClass","WrcTest",
+                  WS_OVERLAPPEDWINDOW,
+                  CW_USEDEFAULT,           // x  window location
+                  CW_USEDEFAULT,           // y
+                  CW_USEDEFAULT,           // cx and size
+                  CW_USEDEFAULT,           // cy
+                  NULL,                    // no parent for this window
+                  NULL,                    // use the class menu
+                  hInstance,               // who created this window
+                  NULL                     // no parms to pass on
+                  );
+    ShowWindow(hWndMain,SW_SHOW);
+    UpdateWindow(hWndMain);
+    hMenu=LoadMenuIndirect(sysres_MENU_SYSMENU);
+
+    /* see Q75254 on how to create a popup menu via LoadMenuIndirect */
+    dummy=CreateMenu();
+    InsertMenu(dummy,0,MF_POPUP,hMenu,NULL);
+    hMenu=GetSubMenu(dummy,0);
+
+    while (GetMessage(&msg, NULL, NULL, NULL))
+    {
+        TranslateMessage(&msg);
+        DispatchMessage(&msg);
+    }
+
+    return(msg.wParam);
+}
+
+LRESULT CALLBACK  _export WndProc(HWND hWnd, UINT message,
+              WPARAM wParam, LPARAM lParam)
+{
+    POINT ptCurrent;
+    switch(message)
+    {
+        case WM_LBUTTONDOWN:
+                ptCurrent=MAKEPOINT(lParam);
+                ClientToScreen(hWnd,&ptCurrent);
+                TrackPopupMenu(hMenu,0,ptCurrent.x,ptCurrent.y,0,hWnd,0);
+                break;
+        case WM_PAINT:
+        {       PAINTSTRUCT ps;
+                BITMAPINFO *bm=sysres_BITMAP_WINELOGO;
+                char *bits=bm;
+                bits+=bm->bmiHeader.biSize;
+                bits+=(1<<bm->bmiHeader.biBitCount)*sizeof(RGBQUAD);
+                BeginPaint(hWnd,&ps);
+                SetDIBitsToDevice(ps.hdc,0,0,bm->bmiHeader.biWidth,
+                bm->bmiHeader.biHeight,0,0,0,bm->bmiHeader.biHeight,
+                bits,bm,DIB_RGB_COLORS);
+                EndPaint(hWnd,&ps);
+                break;
+        }
+        case WM_COMMAND:
+                CreateDialogIndirect(hInst,sysres_DIALOG_2,hWnd,DlgProc);
+                break;
+        case WM_DESTROY:
+                 PostQuitMessage(0);
+                 break;     
+    default:return DefWindowProc(hWnd,message,wParam,lParam);
+    }
+    return 0L;
+}
+
+BOOL CALLBACK _export DlgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+    switch(msg)
+    {
+        case WM_INITDIALOG:
+                return 1;
+        case WM_COMMAND:
+                DestroyWindow(hWnd);
+                return 0;        
+    }
+    return 0;
+}        
diff --git a/rc/winelogo.bmp b/rc/winelogo.bmp
new file mode 100644
index 0000000..dbac0e6
--- /dev/null
+++ b/rc/winelogo.bmp
Binary files differ
diff --git a/rc/winerc.c b/rc/winerc.c
new file mode 100644
index 0000000..13f37ee
--- /dev/null
+++ b/rc/winerc.c
@@ -0,0 +1,574 @@
+/*
+ *
+ * Copyright  Martin von Loewis, 1994
+ *
+ */
+
+static char Copyright[] = "Copyright Martin von Loewis, 1994";
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/fcntl.h>
+#include <sys/types.h>
+#include <windows.h>
+#include <neexe.h>
+#include "rc.h"
+#include "rc.tab.h"
+
+char usage[]="winerc -dv -p <prefix> < infile > outfile\n";
+
+/*might be overwritten by command line*/
+char *prefix="_Resource";
+int verbose;
+gen_res* g_start;
+
+main(int argc,char *argv[])
+{  
+	extern int yydebug;
+	extern char* optarg;
+	int optc,lose;
+	lose=0;
+	while((optc=getopt(argc,argv,"dp:v",0))!=EOF)
+		switch(optc)
+		{
+			/* bison will print state transitions on stderr */
+			case 'd':yydebug=1;
+					 setbuf(stdout,0);
+					 setbuf(stderr,0);
+					break;
+			case 'p':prefix=optarg;break;
+			case 'v':verbose=1;
+					 setbuf(stderr,0);
+					break;
+			default: lose++;break;
+		}
+	if(lose)return fprintf(stderr,usage),1;
+	yyparse();
+	return 0;
+}
+
+/* SunOS' memcpy is wrong for overlapping arrays */
+char *save_memcpy(char *d,char* s,int l)
+{
+	if(d<s)
+		for(;l;l--)*d++=*s++;
+	else
+		for(d+=l-1,s+=l-1;l;l--)*d--=*s--;
+	return d;
+}
+
+/*allow unaligned access*/
+void put_WORD(unsigned char* p,WORD w)
+{
+	*p=w&0xFF;
+	*(p+1)=w>>8;
+}
+
+void put_DWORD(unsigned char* p,DWORD d)
+{
+	put_WORD(p,d&0xFFFF);
+	put_WORD(p+2,d>>16);
+}
+
+WORD get_WORD(unsigned char* p)
+{
+	return *p|(*(p+1)<<8);
+}
+
+DWORD get_DWORD(unsigned char* p)
+{
+	return get_WORD(p)|(get_WORD(p+2)<<16);
+}
+
+
+/*create a new gen_res, initial size 100*/
+gen_res *new_res()
+{	gen_res* ret=malloc(sizeof(gen_res)+100);
+	int i;
+	if(!ret)
+		fprintf(stderr,"Out of memory\n"),exit(1);
+	for(i=0;i<sizeof(gen_res)+100;i++)*((char*)ret+i)='\0';
+	ret->g_next=g_start;
+	ret->g_prev=0;
+	g_start=ret;
+	ret->space=100;
+	return ret;
+}
+
+/*double the space*/
+gen_res* grow(gen_res* res)
+{
+	res=realloc(res,sizeof(gen_res)+2*res->space);
+	if(!res)
+		fprintf(stderr,"Out of memory\n"),exit(1);
+	if(!res->g_prev)g_start=res;
+	else res->g_prev->g_next=res;
+	if(res->g_next)res->g_next->g_prev=res;
+	res->space=2*res->space;
+	return res;
+}
+
+
+/* insert bytes at offset 0, increase num_entries */
+gen_res* insert_at_beginning(gen_res* res,char* entry,int size)
+{
+	while(res->size+size>res->space)res=grow(res);
+	save_memcpy(res->res+size,res->res,res->size);
+	save_memcpy(res->res,entry,size);
+	res->size+=size;
+	res->num_entries++;
+	return res;
+}
+
+/* insert length characters from bytes into res, starting at start */
+gen_res* insert_bytes(gen_res* res,char* bytes,int start,int length)
+{
+	while(res->size+length>res->space)res=grow(res);
+	save_memcpy(res->res+start+length,res->res+start,res->size-start);
+	save_memcpy(res->res+start,bytes,length);
+	res->size+=length;
+	return res;
+}
+
+/*delete len bytes from res, starting at start*/
+gen_res* delete_bytes(gen_res* res,int start,int len)
+{
+	save_memcpy(res->res+start,res->res+start+len,res->size-start-len);
+	res->size-=len;
+	return res;
+}
+
+/*create a new style*/
+rc_style *new_style()
+{
+	rc_style *ret=malloc(sizeof(rc_style));
+	/*initially, no bits have to be reset*/
+	ret->and=-1;
+	/*initially, no bits are set*/
+	ret->or=0;
+	return ret;
+}
+
+/* entries are inserted at the beginning, starting from the last one */
+gen_res* add_accelerator(int ev, int id, int flags, gen_res* prev)
+{
+	char accel_entry[5];
+	if(prev->num_entries==0)flags|=0x80; /* last entry */
+	accel_entry[0]=flags;
+	put_WORD(accel_entry+1,ev);
+	put_WORD(accel_entry+3,id);
+	return insert_at_beginning(prev,accel_entry,5);
+}
+
+
+/* create an integer from the event, taking things as "^c" into account
+   add this as new entry */
+gen_res* add_string_accelerator(char *ev, int id, int flags, gen_res* prev)
+{
+	int event;
+	if(*ev=='^')
+		event=ev[1]-'a';
+	else
+		event=ev[0];
+	return add_accelerator(event,id,flags,prev);
+}
+
+/*is there a difference between ASCII and VIRTKEY accelerators? */
+
+gen_res* add_ascii_accelerator(int ev, int id, int flags, gen_res* prev)
+{
+	return add_accelerator(ev,id,flags,prev);
+}
+
+gen_res* add_vk_accelerator(int ev, int id, int flags, gen_res* prev)
+{
+	return add_accelerator(ev,id,flags,prev);
+}
+
+/* create a new dialog header, set all items to 0 */
+gen_res* new_dialog()
+{	gen_res* ret=new_res();
+	ret->size=16; /*all strings "\0", no font*/
+	return ret;
+}
+
+/* the STYLE option was specified */
+gen_res* dialog_style(rc_style* style, gen_res* attr)
+{
+	/* default dialog styles? Do we need style->and? */
+	/* DS_SETFONT might have been specified before */
+	put_DWORD(attr->res,get_DWORD(attr->res)|style->or);
+	return attr;
+}
+
+/* menu name is at offset 13 */
+int dialog_get_menu(gen_res* attr)
+{
+	return 13;
+}
+
+/* the class is after the menu name */
+int dialog_get_class(gen_res* attr)
+{
+	int offs=dialog_get_menu(attr);
+	while(attr->res[offs])offs++;
+	offs++;
+	return offs;
+}
+
+/* the caption is after the class */
+int dialog_get_caption(gen_res* attr)
+{
+	int offs=dialog_get_class(attr);
+	while(attr->res[offs])offs++;
+	offs++;
+	return offs;
+}
+
+/* the fontsize, if present, is after the caption, followed by the font name */
+int dialog_get_fontsize(gen_res* attr)
+{
+	int offs=dialog_get_caption(attr);
+	while(attr->res[offs])offs++;
+	offs++;
+	return offs;
+}
+
+
+/* the CAPTION option was specified */
+gen_res* dialog_caption(char* cap, gen_res*attr)
+{
+	/* we don't need the terminating 0 as it's already there */
+	return insert_bytes(attr,cap,dialog_get_caption(attr),strlen(cap));
+}
+
+
+/* the FONT option was specified, set the DS_SETFONT flag */
+gen_res* dialog_font(short size,char* font,gen_res *attr)
+{
+	char c_size[2];
+	int offs=dialog_get_fontsize(attr);
+	put_DWORD(attr->res,get_DWORD(attr->res)|DS_SETFONT);
+	put_WORD(c_size,size);
+	attr=insert_bytes(attr,c_size,offs,2);
+	offs+=2;
+	/* as there is no font name by default, copy the '\0' */
+	return insert_bytes(attr,font,offs,strlen(font)+1);
+}
+
+gen_res* dialog_class(char* cap, gen_res*attr)
+{
+	return insert_bytes(attr,cap,dialog_get_class(attr),strlen(cap));
+}
+
+gen_res* dialog_menu(char* cap, gen_res*attr)
+{
+	return insert_bytes(attr,cap,dialog_get_menu(attr),strlen(cap));
+}
+
+/* set the dialogs id, position, extent, and style */
+gen_res* create_control_desc(int id,int x,int y,int cx, int cy,rc_style *style)
+{	gen_res* ret=new_res();
+	int s=WS_VISIBLE|WS_CHILD; /*defaults styles for any control*/
+	put_WORD(ret->res+0,x);
+	put_WORD(ret->res+2,y);
+	put_WORD(ret->res+4,cx);
+	put_WORD(ret->res+6,cy);
+	put_WORD(ret->res+8,id);
+	if(style)s=(s|style->or)&style->and;
+	put_DWORD(ret->res+10,s);
+	ret->size=17; /*empty strings, unused byte*/
+	return ret;
+}
+
+/* insert the control's label */
+gen_res* label_control_desc(char* label,gen_res* cd)
+{
+	int offs;
+	if(cd->res[14]&0x80)offs=15; /* one-character class */
+	else {
+		for(offs=14;cd->res[offs];offs++);
+		offs++;
+	}
+	return insert_bytes(cd,label,offs,strlen(label));
+}
+
+/* a CONTROL was specified */
+gen_res* create_generic_control(char* label,int id,char* class,
+	rc_style*style,int x,int y,int cx,int cy)
+{	char cl;
+	gen_res* ret=new_res();
+	put_WORD(ret->res+0,x);
+    put_WORD(ret->res+2,y);
+    put_WORD(ret->res+4,cx);
+    put_WORD(ret->res+6,cy);
+    put_WORD(ret->res+8,id);
+	put_DWORD(ret->res+10,style->or);
+	ret->size=17;
+	ret=insert_bytes(ret,label,15,strlen(label));
+	/* is it a predefined class? */
+	cl=0;
+	if(!strcmp(class,"BUTTON"))cl=CT_BUTTON;
+	if(!strcmp(class,"EDIT"))cl=CT_EDIT;
+	if(!strcmp(class,"STATIC"))cl=CT_STATIC;
+	if(!strcmp(class,"LISTBOX"))cl=CT_LISTBOX;
+	if(!strcmp(class,"SCROLLBAR"))cl=CT_SCROLLBAR;
+	if(!strcmp(class,"COMBOBOX"))cl=CT_COMBOBOX;
+	if(cl)ret->res[14]=cl;
+	else ret=insert_bytes(ret,class,14,strlen(class));
+	return ret;
+}
+
+/* insert cd into rest, set the type, add flags */
+gen_res* add_control(int type,int flags,gen_res*cd,gen_res* rest)
+{
+	put_DWORD(cd->res+10,get_DWORD(cd->res+10)|flags);
+	cd->res[14]=type;
+	return insert_at_beginning(rest,cd->res,cd->size);
+}
+
+/* an ICON control was specified, whf contains width, height, and flags */
+gen_res* add_icon(char* name,int id,int x,int y,gen_res* whf,gen_res* rest)
+{
+	put_WORD(whf->res+0,x);
+	put_WORD(whf->res+2,y);
+	put_WORD(whf->res+8,id);
+	whf=label_control_desc(name,whf);
+	return add_control(CT_STATIC,SS_ICON,whf,rest);
+}
+
+/* insert the generic control into rest */
+gen_res* add_generic_control(gen_res* ctl, gen_res* rest)
+{
+	return insert_at_beginning(rest,ctl->res,ctl->size);
+}
+
+/* create a dialog resource by inserting the header into the controls.
+   Set position and extent */
+gen_res* make_dialog(gen_res* header,int x,int y,int cx,int cy,gen_res* ctls)
+{
+	header->res[4]=ctls->num_entries;
+	header->type=dlg;
+	put_WORD(header->res+5,x);
+	put_WORD(header->res+7,y);
+	put_WORD(header->res+9,cx);
+	put_WORD(header->res+11,cy);
+	return insert_bytes(header,ctls->res,header->size,ctls->size);
+}
+
+/* create {0x15,0x16,0xFF} from '15 16 FF' */
+gen_res *hex_to_raw(char *hex, gen_res*rest)
+{
+	char r2[16];
+    int i;
+	for(i=0;*hex!='\'';i++)r2[i]=strtoul(hex,&hex,16);
+	return insert_bytes(rest,r2,0,i);
+}
+
+/* create a bitmap resource */
+gen_res *make_bitmap(gen_res* res)
+{
+	res=delete_bytes(res,0,14); /* skip bitmap file header*/
+	res->type=bmp;
+	return res;
+}
+
+gen_res *make_icon(gen_res* res)
+{
+	res->type=ico;
+	return res;
+}
+
+gen_res *make_cursor(gen_res* res)
+{
+	res->type=cur;
+	return res;
+}
+
+/* load resource bytes from the file name */
+gen_res *load_file(char* name)
+{
+	gen_res *res;
+	struct stat st;
+	int f=open(name,O_RDONLY);
+	if(!f)perror(name);
+	fstat(f,&st);
+	res=new_res();
+	while(res->space<st.st_size)res=grow(res);
+	read(f,res->res,st.st_size);
+	res->size=st.st_size;
+	close(f);
+	return res;
+}
+
+/* insert a normal menu item into res, starting from the last item */
+gen_res *add_menuitem(char* name,int id,int flags,gen_res *res)
+{
+	char item[4];
+	if(res->num_entries==0)flags|=MF_END;
+	put_WORD(item,flags);
+	put_WORD(item+2,id);
+	res=insert_at_beginning(res,name,strlen(name)+1);
+	res=insert_bytes(res,item,0,4);
+	return res;
+}
+
+/* insert a popup item into res */
+gen_res *add_popup(char *name,short flags, gen_res* body, gen_res*res)
+{
+	char c_flags[2];
+	if(res->num_entries==0)flags|=MF_END;
+	put_WORD(c_flags,flags);
+	res=insert_at_beginning(res,body->res,body->size);
+	res=insert_bytes(res,name,0,strlen(name)+1);
+	res=insert_bytes(res,c_flags,0,2);
+	return res;
+}
+
+/* prefix the menu header into res */
+gen_res *make_menu(gen_res* res)
+{
+	static char header[4]={0,0,0,0};
+	res=insert_at_beginning(res,header,4);
+	res->type=men;
+	return res;
+}
+
+/* link top-level resources */
+gen_res *add_resource(gen_res* first,gen_res *rest)
+{
+	first->next=rest;
+	return first;
+}
+
+char *get_typename(gen_res* t)
+{
+	switch(t->type){
+	case acc:return "ACCELERATOR";
+	case bmp:return "BITMAP";
+	case cur:return "CURSOR";
+	case dlg:return "DIALOG";
+	case fnt:return "FONT";
+	case ico:return "ICON";
+	case men:return "MENU";
+	case rdt:return "RCDATA";
+	case str:return "STRINGTABLE";
+	default: return "UNKNOWN";
+	}
+}
+
+/* create strings like _Sysres_DIALOG_2 */
+char *get_resource_name(gen_res*it)
+{
+	static char buf[1000];
+	if(it->n_type)
+		sprintf(buf,"%s_%s_%s",prefix,get_typename(it),it->n.s_name);
+	else
+		sprintf(buf,"%s_%s_%d",prefix,get_typename(it),it->n.i_name);
+	return buf;
+}
+
+/* create the final output */
+void create_output(gen_res* top)
+{
+	gen_res *it;
+	/* print the type */
+	printf("struct ResourceTable{\n\tint id,type;\n\t"
+		"char *name;\n\tconst unsigned char* value;\n};\n\n");
+	/* declare the resources */
+	for(it=top;it;it=it->next)
+		printf("const unsigned char %s[];\n",get_resource_name(it));
+
+	/* print the resource table (0 terminated) */
+	printf("\nconst struct ResourceTable %sTable[]={\n",prefix);
+	for(it=top;it;it=it->next)
+	{	int type;
+		switch(it->type)
+		{case acc:type=NE_RSCTYPE_ACCELERATOR;break;
+		 case bmp:type=NE_RSCTYPE_BITMAP;break;
+		 case cur:type=NE_RSCTYPE_CURSOR;break;
+		 case dlg:type=NE_RSCTYPE_DIALOG;break;
+		 case fnt:type=NE_RSCTYPE_FONT;break;
+		 case ico:type=NE_RSCTYPE_ICON;break;
+		 case men:type=NE_RSCTYPE_MENU;break;
+		 case rdt:type=NE_RSCTYPE_RCDATA;break;
+		 case str:type=NE_RSCTYPE_STRING;break;
+		 default:fprintf(stderr,"Unknown restype\n");type=-1;break;
+		}
+		if(it->n_type)
+			printf("{0,%d,\"%s\",%s},\n",
+			type,it->n.s_name,get_resource_name(it));
+		else
+			printf("{%d,%d,\"@%d\",%s},\n",
+			it->n.i_name,type,it->n.i_name,get_resource_name(it));
+	}
+	printf("{0,0,0,0}};\n\n");
+
+	/* print the resources */
+	for(it=top;it;it=it->next)
+	{	int i;
+		printf("const unsigned char %s[]={\n",get_resource_name(it));
+		for(i=0;i<it->size-1;i++)
+		{
+			printf("%#4x,",it->res[i]);
+			if((i&7)==7)putchar('\n');
+        }
+		printf("%#4x};\n",it->res[i]);
+	}
+}
+
+void make_font()
+{
+	fprintf(stderr,"Fonts not supported\n");
+}
+
+void make_raw()
+{
+	fprintf(stderr,"RCData not supported\n");
+}
+
+void int_to_raw()
+{
+	fprintf(stderr,"IntToRaw not supported\n");
+}
+
+/* translate "Hello,\\tworld!\\10" to "Hello,\tworld!\n" */
+char *parse_c_string(char *in)
+{
+	char *out=malloc(strlen(in)-1);
+	char *it;
+	char tmp[5],*tend;
+	for(it=out,in++;*in;in++)
+	if(*in=='\\')
+		switch(*++in)
+		{case 't':*it++='\t';break;
+		 case 'r':*it++='\r';break;
+		 case 'n':*it++='\n';break;
+		 case 'a':*it++='\a';break;
+		 case '0':
+			memset(tmp,0,5);/*make sure it doesn't use more than 4 chars*/
+			memcpy(tmp,in,4);
+			*it++=strtoul(tmp,&tend,0);
+			in+=tend-tmp-1;
+			break;
+		 case '1':case '2':case '3':case '4':case '5':
+		 case '6':case '7':case '8':case '9':
+			memset(tmp,0,5);
+			memcpy(tmp,in,3);
+			*it++=strtoul(tmp,&tend,10);
+			in+=tend-tmp-1;
+			break;
+		 case 'x':
+			memset(tmp,0,5);
+			memcpy(tmp,++in,2);
+			*it++=strtoul(tmp,&tend,16);
+			in+=tend-tmp-1;
+			break;
+		 default:*it++=*in;
+		}
+	else
+		*it++=*in;
+	*(it-1)='\0';
+	return out;
+}
diff --git a/tools/build.c b/tools/build.c
index 160d0fb..b375036 100644
--- a/tools/build.c
+++ b/tools/build.c
@@ -14,6 +14,13 @@
 #define UTEXTSEL 0x1f
 #endif
 
+/* ELF symbols do not have an underscore in front */
+#ifdef __ELF__
+#define PREFIX
+#else
+#define PREFIX "_"
+#endif
+
 #define VARTYPE_BYTE	0
 #define VARTYPE_SIGNEDWORD	0
 #define VARTYPE_WORD	1
@@ -671,7 +678,7 @@
     ORDVARDEF *vdp;
     int i;
 
-    fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+    fprintf(fp, PREFIX "%s_Ordinal_%d:\n", UpperDLLName, i);
 
     vdp = odp->additional_data;
     for (i = 0; i < vdp->n_values; i++)
@@ -752,31 +759,31 @@
     sprintf(filename, "dll_%s.S", LowerDLLName);
     fp = fopen(filename, "w");
 
-    fprintf(fp, "\t.globl _%s_Dispatch\n", UpperDLLName);
-    fprintf(fp, "_%s_Dispatch:\n", UpperDLLName);
+    fprintf(fp, "\t.globl " PREFIX "%s_Dispatch\n", UpperDLLName);
+    fprintf(fp, PREFIX "%s_Dispatch:\n", UpperDLLName);
     fprintf(fp, "\tandl\t$0x0000ffff,%%esp\n");
     fprintf(fp, "\tandl\t$0x0000ffff,%%ebp\n");
     fprintf(fp, "\torl\t$0x%08x,%%eax\n", DLLId << 16);
-    fprintf(fp, "\tjmp\t_CallTo32\n\n");
+    fprintf(fp, "\tjmp\t" PREFIX "CallTo32\n\n");
 
-    fprintf(fp, "\t.globl _%s_Dispatch_16\n", UpperDLLName);
-    fprintf(fp, "_%s_Dispatch_16:\n", UpperDLLName);
+    fprintf(fp, "\t.globl " PREFIX "%s_Dispatch_16\n", UpperDLLName);
+    fprintf(fp, PREFIX "%s_Dispatch_16:\n", UpperDLLName);
     fprintf(fp, "\tandl\t$0x0000ffff,%%esp\n");
     fprintf(fp, "\tandl\t$0x0000ffff,%%ebp\n");
     fprintf(fp, "\torl\t$0x%08x,%%eax\n", DLLId << 16);
-    fprintf(fp, "\tjmp\t_CallTo32_16\n\n");
+    fprintf(fp, "\tjmp\t" PREFIX "CallTo32_16\n\n");
 
     odp = OrdinalDefinitions;
     for (i = 0; i <= Limit; i++, odp++)
     {
-	fprintf(fp, "\t.globl _%s_Ordinal_%d\n", UpperDLLName, i);
+	fprintf(fp, "\t.globl " PREFIX "%s_Ordinal_%d\n", UpperDLLName, i);
 
 	if (!odp->valid)
 	{
-	    fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+	    fprintf(fp, PREFIX "%s_Ordinal_%d:\n", UpperDLLName, i);
 	    fprintf(fp, "\tmovl\t$%d,%%eax\n", i);
 	    fprintf(fp, "\tpushw\t$0\n");
-	    fprintf(fp, "\tjmp\t_%s_Dispatch\n\n", UpperDLLName);
+	    fprintf(fp, "\tjmp\t" PREFIX "%s_Dispatch\n\n", UpperDLLName);
 	}
 	else
 	{
@@ -786,7 +793,7 @@
 	    switch (odp->type)
 	    {
 	      case EQUATETYPE_ABS:
-		fprintf(fp, "_%s_Ordinal_%d = %d\n\n", 
+		fprintf(fp, PREFIX "%s_Ordinal_%d = %d\n\n", 
 			UpperDLLName, i, (int) odp->additional_data);
 		break;
 
@@ -803,7 +810,7 @@
 		break;
 
 	      case TYPE_RETURN:
-		fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+		fprintf(fp, PREFIX "%s_Ordinal_%d:\n", UpperDLLName, i);
 		fprintf(fp, "\tmovw\t$%d,%%ax\n", rdp->ret_value & 0xffff);
 		fprintf(fp, "\tmovw\t$%d,%%dx\n", 
 			(rdp->ret_value >> 16) & 0xffff);
@@ -815,7 +822,7 @@
 		break;
 
 	      case FUNCTYPE_REG:
-		fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+		fprintf(fp, PREFIX "%s_Ordinal_%d:\n", UpperDLLName, i);
 		fprintf(fp, "\tandl\t$0x0000ffff,%%esp\n");
 		fprintf(fp, "\tandl\t$0x0000ffff,%%ebp\n");
 
@@ -830,29 +837,29 @@
 		fprintf(fp, "\tmovl\t$%d,%%eax\n", i);
 		fprintf(fp, "\tpushw\t$%d\n", 
 			sizeof(struct sigcontext_struct) + 4);
-		fprintf(fp, "\tjmp\t_%s_Dispatch\n\n", UpperDLLName);
+		fprintf(fp, "\tjmp\t" PREFIX "%s_Dispatch\n\n", UpperDLLName);
 		break;
 
 	      case FUNCTYPE_PASCAL:
-		fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+		fprintf(fp, PREFIX "%s_Ordinal_%d:\n", UpperDLLName, i);
 		fprintf(fp, "\tmovl\t$%d,%%eax\n", i);
 		fprintf(fp, "\tpushw\t$%d\n", fdp->arg_16_size);
-		fprintf(fp, "\tjmp\t_%s_Dispatch\n\n", UpperDLLName);
+		fprintf(fp, "\tjmp\t" PREFIX "%s_Dispatch\n\n", UpperDLLName);
 		break;
 		
 	      case FUNCTYPE_PASCAL_16:
-		fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+		fprintf(fp, PREFIX "%s_Ordinal_%d:\n", UpperDLLName, i);
 		fprintf(fp, "\tmovl\t$%d,%%eax\n", i);
 		fprintf(fp, "\tpushw\t$%d\n", fdp->arg_16_size);
-		fprintf(fp, "\tjmp\t_%s_Dispatch_16\n\n", UpperDLLName);
+		fprintf(fp, "\tjmp\t" PREFIX "%s_Dispatch_16\n\n", UpperDLLName);
 		break;
 		
 	      case FUNCTYPE_C:
 	      default:
-		fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+		fprintf(fp, PREFIX "%s_Ordinal_%d:\n", UpperDLLName, i);
 		fprintf(fp, "\tmovl\t$%d,%%eax\n", i);
 		fprintf(fp, "\tpushw\t$0\n");
-		fprintf(fp, "\tjmp\t_%s_Dispatch\n\n", UpperDLLName);
+		fprintf(fp, "\tjmp\t" PREFIX "%s_Dispatch\n\n", UpperDLLName);
 		break;
 	    }
 	}
diff --git a/tools/make_debug b/tools/make_debug
index 09a63f9..1d0ee5a 100755
--- a/tools/make_debug
+++ b/tools/make_debug
@@ -9,8 +9,8 @@
 #
 makedepend -s"# /* Do not remove this line or change anything below this line */" -finclude/debug.h
 echo " " >> include/debug.h
-grep -h dprintf_ */*.c | tr -d '[:blank:]' | cut -d"(" -f1 | sort | uniq | \
-	cut -d"_" -f2 > temp.$$
+grep -h dprintf_ */*.c | tr -d '[:blank:]' | cut -d"(" -f1 | \
+	cut -d"_" -f2 | sort | uniq > temp.$$
 echo " " >> include/debug.h
 echo "#ifdef DEBUG_NONE_EXT" >> include/debug.h
 cat temp.$$ |
diff --git a/windows/caret.c b/windows/caret.c
index ae835b4..f567fc3 100644
--- a/windows/caret.c
+++ b/windows/caret.c
@@ -8,8 +8,8 @@
 
 #include "windows.h"
 #include "stddebug.h"
-/* #define DEBUG_CARET /* */
-/* #undef  DEBUG_CARET /* */
+/* #define DEBUG_CARET */
+/* #undef  DEBUG_CARET */
 #include "debug.h"
 
 
@@ -167,10 +167,6 @@
 
 void SetCaretPos(short x, short y)
 {
-    HDC hdc;
-    HBRUSH hBrush;
-    HRGN rgn;
-
     if (!Caret.hwnd) return;
 
     dprintf_caret(stddeb,"SetCaretPos: x=%d, y=%d\n", x, y);
@@ -237,8 +233,7 @@
 
 WORD GetCaretBlinkTime()
 {
-    if (!Caret.hwnd) return;
-
+    if (!Caret.hwnd) return 0;
     return Caret.timeout;
 }
 
diff --git a/windows/class.c b/windows/class.c
index 639d2da..5999d69 100644
--- a/windows/class.c
+++ b/windows/class.c
@@ -14,8 +14,8 @@
 #include "win.h"
 #include "dce.h"
 #include "stddebug.h"
-/* #define DEBUG_CLASS /* */
-/* #undef  DEBUG_CLASS /* */
+/* #define DEBUG_CLASS */
+/* #undef  DEBUG_CLASS */
 #include "debug.h"
 
 
@@ -95,7 +95,7 @@
     HCLASS handle, prevClass;
     int classExtra;
 
-    dprintf_class(stddeb, "RegisterClass: wndproc=%08x hinst=%d name='%s' background %x\n", 
+    dprintf_class(stddeb, "RegisterClass: wndproc=%p hinst=%d name='%s' background %x\n", 
 	    class->lpfnWndProc, class->hInstance, class->lpszClassName,
 	    class->hbrBackground );
 
diff --git a/windows/cursor.c b/windows/cursor.c
index 1c866d1..ec9fadd 100644
--- a/windows/cursor.c
+++ b/windows/cursor.c
@@ -19,10 +19,10 @@
 #include "wine.h"
 #include "cursor.h"
 #include "stddebug.h"
-/* #define DEBUG_CURSOR   /* */
-/* #undef  DEBUG_CURSOR   /* */
-/* #define DEBUG_RESOURCE /* */
-/* #undef  DEBUG_RESOURCE /* */
+/* #define DEBUG_CURSOR   */
+/* #undef  DEBUG_CURSOR   */
+/* #define DEBUG_RESOURCE */
+/* #undef  DEBUG_RESOURCE */
 #include "debug.h"
 
 static int ShowCursCount = 0;
@@ -65,7 +65,7 @@
     HDC 	hdc;
     int i, j, image_size;
 
-    dprintf_resource(stddeb,"LoadCursor: instance = %04x, name = %08x\n",
+    dprintf_resource(stddeb,"LoadCursor: instance = %04x, name = %p\n",
 	   instance, cursor_name);
     if (!instance)
     {
@@ -132,7 +132,7 @@
     rsc_mem = RSC_LoadResource(instance, cursor_name, NE_RSCTYPE_GROUP_CURSOR, 
 			       &image_size);
     if (rsc_mem == (HANDLE)NULL) {
-    fprintf(stderr,"LoadCursor / Cursor %08X not Found !\n", cursor_name);
+    fprintf(stderr,"LoadCursor / Cursor %p not Found !\n", cursor_name);
 	ReleaseDC(GetDesktopWindow(), hdc); 
 	return 0;
 	}
@@ -167,7 +167,7 @@
     	NE_RSCTYPE_CURSOR, &image_size);
     if (rsc_mem == (HANDLE)NULL) {
     	fprintf(stderr,
-		"LoadCursor / Cursor %08X Bitmap not Found !\n", cursor_name);
+		"LoadCursor / Cursor %p Bitmap not Found !\n", cursor_name);
 	ReleaseDC(GetDesktopWindow(), hdc); 
 	return 0;
 	}
@@ -240,14 +240,11 @@
     XColor	fgcolor;
     HCURSOR 	hCursor;
     CURSORALLOC	  *lpcur;
-    BITMAP 	BitMap;
-    HBITMAP 	hBitMap;
-    HDC 	hMemDC;
     HDC 	hdc;
 
     dprintf_resource(stddeb,"CreateCursor: inst=%04x nXhotspot=%d  nYhotspot=%d nWidth=%d nHeight=%d\n",  
        instance, nXhotspot, nYhotspot, nWidth, nHeight);
-    dprintf_resource(stddeb,"CreateCursor: inst=%04x lpANDbitPlane=%08X lpXORbitPlane=%08X\n",
+    dprintf_resource(stddeb,"CreateCursor: inst=%04x lpANDbitPlane=%p lpXORbitPlane=%p\n",
 	instance, lpANDbitPlane, lpXORbitPlane);
 
     if (!(hdc = GetDC(GetDesktopWindow()))) return 0;
@@ -308,7 +305,7 @@
  *
  * Internal helper function for SetCursor() and ShowCursor().
  */
-static BOOL CURSOR_SetCursor( HCURSOR hCursor )
+static void CURSOR_SetCursor( HCURSOR hCursor )
 {
     CURSORALLOC	*lpcur;
 
@@ -397,8 +394,6 @@
  */
 int ShowCursor(BOOL bShow)
 {
-    HCURSOR	hCursor;
-
     dprintf_cursor(stddeb, "ShowCursor(%d), count=%d\n", bShow, ShowCursCount);
 
     if (bShow)
diff --git a/windows/dce.c b/windows/dce.c
index 4508fcb..9ddc1f4 100644
--- a/windows/dce.c
+++ b/windows/dce.c
@@ -13,8 +13,8 @@
 #include "user.h"
 #include "sysmetrics.h"
 #include "stddebug.h"
-/* #define DEBUG_DC /* */
-/* #undef  DEBUG_DC /* */
+/* #define DEBUG_DC */
+/* #undef  DEBUG_DC */
 #include "debug.h"
 
 
@@ -264,8 +264,6 @@
     {
         dc->w.DCOrgX = 0;
         dc->w.DCOrgY = 0;
-        dc->w.DCSizeX = SYSMETRICS_CXSCREEN;
-        dc->w.DCSizeY = SYSMETRICS_CYSCREEN;
         dc->u.x.drawable = rootWindow;
         XSetSubwindowMode( display, dc->u.x.gc, IncludeInferiors );
     }
@@ -275,15 +273,11 @@
         {
             dc->w.DCOrgX  = wndPtr->rectWindow.left;
             dc->w.DCOrgY  = wndPtr->rectWindow.top;
-            dc->w.DCSizeX = wndPtr->rectWindow.right - wndPtr->rectWindow.left;
-            dc->w.DCSizeY = wndPtr->rectWindow.bottom - wndPtr->rectWindow.top;
         }
         else
         {
             dc->w.DCOrgX  = wndPtr->rectClient.left;
             dc->w.DCOrgY  = wndPtr->rectClient.top;
-            dc->w.DCSizeX = wndPtr->rectClient.right - wndPtr->rectClient.left;
-            dc->w.DCSizeY = wndPtr->rectClient.bottom - wndPtr->rectClient.top;
         }
         while (!wndPtr->window)
         {
@@ -338,8 +332,8 @@
       /* Can only use PARENTCLIP on child windows */
     if (!wndPtr || !(wndPtr->dwStyle & WS_CHILD)) flags &= ~DCX_PARENTCLIP;
 
-      /* Whole window DC implies children are not clipped */
-    if (flags & DCX_WINDOW) flags &= ~DCX_CLIPCHILDREN;
+      /* Whole window DC implies using cache DC and not clipping children */
+    if (flags & DCX_WINDOW) flags = (flags & ~DCX_CLIPCHILDREN) | DCX_CACHE;
 
     if (flags & DCX_CACHE)
     {
@@ -402,7 +396,7 @@
     SelectVisRgn( hdc, hrgnVisible );
     DeleteObject( hrgnVisible );
 
-    dprintf_dc(stddeb, "GetDCEx(%d,%d,0x%x): returning %d\n", 
+    dprintf_dc(stddeb, "GetDCEx(%d,%d,0x%lx): returning %d\n", 
 	       hwnd, hrgnClip, flags, hdc);
     return hdc;
 }
diff --git a/windows/defwnd.c b/windows/defwnd.c
index 501ad78..2022e635 100644
--- a/windows/defwnd.c
+++ b/windows/defwnd.c
@@ -84,7 +84,6 @@
     case WM_NCPAINT:
 	return NC_HandleNCPaint( hwnd, (HRGN)wParam );
 
-
     case WM_NCHITTEST:
 	return NC_HandleNCHitTest( hwnd, MAKEPOINT(lParam) );
 
@@ -239,7 +238,11 @@
 
     case WM_SYSKEYDOWN:
 	if (wParam == VK_MENU)
-	    SendMessage( hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0L );
+	{   /* Send to WS_OVERLAPPED parent. TODO: Handle MDI */
+	    HWND top;
+            for(top=hwnd;GetParent(top)!=0;top=GetParent(top));
+	    SendMessage( top, WM_SYSCOMMAND, SC_KEYMENU, 0L );
+	}
 	break;
 
     case WM_SYSKEYUP:
diff --git a/windows/dialog.c b/windows/dialog.c
index fed61e0..688f560 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -17,8 +17,8 @@
 #include "message.h"
 #include "heap.h"
 #include "stddebug.h"
-/* #define DEBUG_DIALOG /* */
-/* #undef  DEBUG_DIALOG /* */
+/* #define DEBUG_DIALOG */
+/* #undef  DEBUG_DIALOG */
 #include "debug.h"
 
 
@@ -189,7 +189,7 @@
     HANDLE hres, hmem;
     LPCSTR data;
 
-    dprintf_dialog(stddeb, "CreateDialogParam: %d,'%x',%d,%p,%d\n",
+    dprintf_dialog(stddeb, "CreateDialogParam: %d,'%p',%d,%p,%ld\n",
 	    hInst, dlgTemplate, owner, dlgProc, param );
      
       /* FIXME: MAKEINTRESOURCE should be replaced by RT_DIALOG */
@@ -231,8 +231,6 @@
     DWORD exStyle = 0;
     WORD xUnit = xBaseUnit;
     WORD yUnit = yBaseUnit;
-    void *dlgHeapBase;
-    MDESC *dlgHeap;
 
       /* Parse dialog template */
 
@@ -326,7 +324,7 @@
 	  dprintf_dialog(stddeb,"'%s'", text);
 	else 
 	  dprintf_dialog(stddeb,"%4X", (int)text & 0xffff);
-	dprintf_dialog(stddeb," %d, %d, %d, %d, %d, %08x\n", 
+	dprintf_dialog(stddeb," %d, %d, %d, %d, %d, %08lx\n", 
 		header->id, header->x, header->y, 
 		header->cx, header->cy, header->style );
 
@@ -335,12 +333,10 @@
 	    if (!dlgInfo->hDialogHeap) {
 		dlgInfo->hDialogHeap = GlobalAlloc(GMEM_FIXED, 0x10000);
 		if (!dlgInfo->hDialogHeap) {
-		    fprintf(stderr,"CreateDialogIndirectParam: Insufficient memory ",
-			   "to create heap for edit control\n");
+		    fprintf(stderr,"CreateDialogIndirectParam: Insufficient memory to create heap for edit control\n");
 		    continue;
 		}
-		dlgHeapBase = GlobalLock(dlgInfo->hDialogHeap);
-		HEAP_Init(dlgHeapBase,dlgHeapBase+sizeof(char*), 0x10000-sizeof(char*));
+		HEAP_LocalInit(dlgInfo->hDialogHeap, GlobalLock(dlgInfo->hDialogHeap), 0x10000);
 	    }
 	    header->style |= WS_CHILD;
 	    hwndCtrl = CreateWindowEx( WS_EX_NOPARENTNOTIFY, 
diff --git a/windows/event.c b/windows/event.c
index 9da6617..b1efb40 100644
--- a/windows/event.c
+++ b/windows/event.c
@@ -11,6 +11,7 @@
 #include <X11/Xlib.h>
 #include <X11/Xresource.h>
 #include <X11/Xutil.h>
+#include <X11/Xatom.h>
 
 #include "windows.h"
 #include "win.h"
@@ -140,6 +141,9 @@
 static void EVENT_FocusOut( HWND hwnd, XFocusChangeEvent *event );
 static void EVENT_Expose( HWND hwnd, XExposeEvent *event );
 static void EVENT_ConfigureNotify( HWND hwnd, XConfigureEvent *event );
+static void EVENT_SelectionRequest( HWND hwnd, XSelectionRequestEvent *event);
+static void EVENT_SelectionNotify( HWND hwnd, XSelectionEvent *event);
+static void EVENT_SelectionClear( HWND hwnd, XSelectionClearEvent *event);
 
 
 /***********************************************************************
@@ -199,6 +203,18 @@
 	EVENT_ConfigureNotify( hwnd, (XConfigureEvent*)event );
 	break;
 
+    case SelectionRequest:
+	EVENT_SelectionRequest( hwnd, (XSelectionRequestEvent*)event );
+	break;
+
+    case SelectionNotify:
+	EVENT_SelectionNotify( hwnd, (XSelectionEvent*)event );
+	break;
+
+    case SelectionClear:
+	EVENT_SelectionClear( hwnd, (XSelectionClearEvent*) event );
+	break;
+
     default:    
 	dprintf_event(stddeb, "Unprocessed event %s for hwnd %d\n",
 	        event_names[event->type], hwnd );
@@ -444,6 +460,65 @@
 }
 
 
+/***********************************************************************
+ *           EVENT_SelectionRequest
+ */
+static void EVENT_SelectionRequest( HWND hwnd, XSelectionRequestEvent *event )
+{
+    XSelectionEvent result;
+    Atom rprop;
+    Window request=event->requestor;
+    rprop=None;
+    if(event->target == XA_STRING)
+    {
+	HANDLE hText;
+	LPSTR text;
+        rprop=event->property;
+	if(rprop == None)rprop=event->target;
+        if(event->selection!=XA_PRIMARY)rprop=None;
+        else if(!IsClipboardFormatAvailable(CF_TEXT))rprop=None;
+	else{
+            /* don't open the clipboard, just get the data */
+	    hText=GetClipboardData(CF_TEXT);
+	    text=GlobalLock(hText);
+	    XChangeProperty(display,request,rprop,XA_STRING,
+		8,PropModeReplace,text,strlen(text));
+	    GlobalUnlock(hText);
+	}
+    }
+    if(rprop==None) dprintf_event(stddeb,"Request for %s ignored\n",
+	XGetAtomName(display,event->target));
+    result.type=SelectionNotify;
+    result.display=display;
+    result.requestor=request;
+    result.selection=event->selection;
+    result.property=rprop;
+    result.target=event->target;
+    result.time=event->time;
+    XSendEvent(display,event->requestor,False,NoEventMask,(XEvent*)&result);
+}
+
+
+/***********************************************************************
+ *           EVENT_SelectionNotify
+ */
+static void EVENT_SelectionNotify(HWND hwnd, XSelectionEvent *event)
+{
+    if(event->selection!=XA_PRIMARY)return;
+    if(event->target!=XA_STRING)CLIPBOARD_ReadSelection(0,None);
+    CLIPBOARD_ReadSelection(event->requestor,event->property);
+}
+
+
+/***********************************************************************
+ *           EVENT_SelectionClear
+ */
+static void EVENT_SelectionClear(HWND hwnd, XSelectionClearEvent *event)
+{
+    if(event->selection!=XA_PRIMARY)return;
+    CLIPBOARD_ReleaseSelection(); 
+}
+
 /**********************************************************************
  *		SetCapture 	(USER.18)
  */
diff --git a/windows/graphics.c b/windows/graphics.c
index 4f69b02..500f4a1 100644
--- a/windows/graphics.c
+++ b/windows/graphics.c
@@ -318,10 +318,8 @@
 		      ell_width, ell_height);
 	return TRUE;
     }
-/*
-    printf("RoundRect(%d %d %d %d  %d %d\n", 
+    dprintf_graphics(stddeb, "RoundRect(%d %d %d %d  %d %d\n", 
     	left, top, right, bottom, ell_width, ell_height);
-*/
     x1 = XLPTODP(dc, left);
     y1 = YLPTODP(dc, top);
     x2 = XLPTODP(dc, right - ell_width);
@@ -518,19 +516,15 @@
 
       /* Modify visible region */
 
-    prevVisRgn = SaveVisRgn( hdc );
-    if (prevVisRgn)
+    if (!(prevVisRgn = SaveVisRgn( hdc ))) return FALSE;
+    if (!(tmpVisRgn = CreateRectRgn( 0, 0, 0, 0 )))
     {
-	if (!(tmpVisRgn = CreateRectRgn( 0, 0, 0, 0 )))
-	{
-	    RestoreVisRgn( hdc );
-	    return FALSE;
-	}
-	CombineRgn( tmpVisRgn, prevVisRgn, hrgn, RGN_AND );
-	SelectVisRgn( hdc, tmpVisRgn );
-	DeleteObject( tmpVisRgn );
+        RestoreVisRgn( hdc );
+        return FALSE;
     }
-    else SelectVisRgn( hdc, hrgn );
+    CombineRgn( tmpVisRgn, prevVisRgn, hrgn, RGN_AND );
+    SelectVisRgn( hdc, tmpVisRgn );
+    DeleteObject( tmpVisRgn );
 
       /* Fill the region */
 
@@ -542,8 +536,7 @@
 
       /* Restore the visible region */
 
-    if (prevVisRgn) RestoreVisRgn( hdc );
-    else SelectVisRgn( hdc, 0 );
+    RestoreVisRgn( hdc );
     return TRUE;
 }
 
diff --git a/windows/message.c b/windows/message.c
index 137ffe0..6a6f90a 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -641,7 +641,7 @@
  * Return TRUE if an event is pending, FALSE on timeout or error
  * (for instance lost connection with the server).
  */
-static BOOL MSG_WaitXEvent( LONG maxWait )
+BOOL MSG_WaitXEvent( LONG maxWait )
 {
     fd_set read_set;
     struct timeval timeout;
@@ -854,7 +854,7 @@
 /*				{
 				char	str[128];
 				GetWindowText(hwnd, str, sizeof(str));
-				printf("BROADCAST GetWindowText()='%s' !\n", str); 
+				dprintf_msg(stddeb, "BROADCAST GetWindowText()='%s' !\n", str); 
 				}*/
 			hwnd = wndPtr->hwndNext;
 			}
diff --git a/windows/nonclient.c b/windows/nonclient.c
index b0c71ef..e76e79c 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -112,7 +112,7 @@
 	style |= WS_CAPTION;
     if (exStyle & WS_EX_DLGMODALFRAME) style &= ~WS_THICKFRAME;
 
-    dprintf_nonclient(stddeb, "AdjustWindowRectEx: (%d,%d)-(%d,%d) %08x %d %08x\n",
+    dprintf_nonclient(stddeb, "AdjustWindowRectEx: (%d,%d)-(%d,%d) %08lx %d %08lx\n",
       rect->left, rect->top, rect->right, rect->bottom, style, menu, exStyle );
 
     NC_AdjustRect( rect, style, menu, exStyle );
@@ -587,8 +587,6 @@
         if (hIcon)  
         {
             SendMessage(hwnd, WM_ICONERASEBKGND, hdc, 0);
-            Rectangle(hdc, wndPtr->rectWindow.left, wndPtr->rectWindow.top,
-                     wndPtr->rectWindow.right, wndPtr->rectWindow.bottom);
             DrawIcon(hdc, 0, 0, hIcon);
         }
         ReleaseDC(hwnd, hdc);
@@ -1265,7 +1263,7 @@
     case SC_SCREENSAVE:
 	if (wParam == SC_ABOUTWINE)
 	    DialogBox( hSysRes, MAKEINTRESOURCE(2), 
-		       hwnd, (FARPROC)AboutWine_Proc );
+		       hwnd, (WNDPROC)AboutWine_Proc );
 	break;
     }
     return 0;
diff --git a/windows/painting.c b/windows/painting.c
index 878e9d8..f1ffd3f 100644
--- a/windows/painting.c
+++ b/windows/painting.c
@@ -100,14 +100,6 @@
     if (!(wndPtr->dwStyle & WS_VISIBLE) || (wndPtr->flags & WIN_NO_REDRAW))
         return TRUE;  /* No redraw needed */
 
-    /* 
-     *	I can't help but feel that this belongs somewhere upstream...
-     *
-     *  Don't redraw the window if it is iconified and we have an
-     *  icon to draw for it
-     */
-/*    if (IsIconic(hwnd) && wndPtr->hIcon) return FALSE; */
-
     GetClientRect( hwnd, &rectClient );
     rectWindow = wndPtr->rectWindow;
     OffsetRect(&rectWindow, -wndPtr->rectClient.left, -wndPtr->rectClient.top);
@@ -240,8 +232,13 @@
 			   DCX_INTERSECTRGN | DCX_USESTYLE );
 	if (hdc)
 	{
-	    SendMessage( hwnd, WM_NCPAINT, wndPtr->hrgnUpdate, 0 );
-	    SendMessage( hwnd, WM_ERASEBKGND, hdc, 0 );
+            SendMessage( hwnd, WM_NCPAINT, wndPtr->hrgnUpdate, 0 );
+
+              /* Don't send WM_ERASEBKGND to icons */
+              /* (WM_ICONERASEBKGND is sent during processing of WM_NCPAINT) */
+            if (!(wndPtr->dwStyle & WS_MINIMIZE)
+                || !WIN_CLASS_INFO(wndPtr).hIcon)
+                SendMessage( hwnd, WM_ERASEBKGND, hdc, 0 );
 	    ReleaseDC( hwnd, hdc );
 	}
     }
@@ -400,7 +397,7 @@
  */
 int ExcludeUpdateRgn( HDC hdc, HWND hwnd )
 {
-    int retval;
+    int retval = ERROR;
     HRGN hrgn;
     WND * wndPtr;
 
@@ -414,3 +411,5 @@
     }
     return retval;
 }
+
+
diff --git a/windows/scroll.c b/windows/scroll.c
index 5afef8e..e472a16 100644
--- a/windows/scroll.c
+++ b/windows/scroll.c
@@ -35,11 +35,11 @@
     hdc = GetDC(hwnd);
 
     if (rect == NULL)
-	GetWindowRect(hwnd, &rc);
+	GetClientRect(hwnd, &rc);
     else
 	CopyRect(&rc, rect);
     if (clipRect == NULL)
-	GetWindowRect(hwnd, &cliprc);
+	GetClientRect(hwnd, &cliprc);
     else
 	CopyRect(&cliprc, clipRect);
 
@@ -143,11 +143,11 @@
     hdc = GetDC(hwnd);
 
     if (rect == NULL)
-	GetWindowRect(hwnd, &rc);
+	GetClientRect(hwnd, &rc);
     else
 	CopyRect(&rc, rect);
     if (clipRect == NULL)
-	GetWindowRect(hwnd, &cliprc);
+	GetClientRect(hwnd, &cliprc);
     else
 	CopyRect(&cliprc, clipRect);
 
diff --git a/windows/win.c b/windows/win.c
index 9e90dcc..10236e0 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -20,6 +20,7 @@
 #include "icon.h"
 #include "cursor.h"
 #include "stddebug.h"
+#include "callback.h"
 /* #define DEBUG_WIN  /* */ 
 /* #undef  DEBUG_WIN  /* */
 /* #define DEBUG_MENU /* */
@@ -54,6 +55,7 @@
     
     if (!hwnd) return NULL;
     ptr = (WND *) USER_HEAP_ADDR( hwnd );
+    if (IsBadReadPtr(ptr, sizeof *ptr)) return NULL;
     if (ptr->dwMagic != WND_MAGIC) return NULL;
     return ptr;
 }
@@ -153,6 +155,8 @@
 	if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
         if (!(wndPtr->dwStyle & WS_VISIBLE) || (wndPtr->flags & WIN_NO_REDRAW))
             continue;
+        if ((wndPtr->dwStyle & WS_MINIMIZE) && (WIN_CLASS_INFO(wndPtr).hIcon))
+            continue;
 	if (wndPtr->hrgnUpdate || (wndPtr->flags & WIN_INTERNAL_PAINT))
 	    return hwnd;
 	if (wndPtr->hwndChild)
@@ -253,7 +257,7 @@
     wndPtr->ptMaxPos.y        = -1;
     wndPtr->hmemTaskQ         = 0;  /* Desktop does not belong to a task */
     wndPtr->hrgnUpdate        = 0;
-    wndPtr->hwndLastActive    = 0;
+    wndPtr->hwndLastActive    = hwndDesktop;
     wndPtr->lpfnWndProc       = classPtr->wc.lpfnWndProc;
     wndPtr->dwStyle           = WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
     wndPtr->dwExStyle         = 0;
@@ -374,7 +378,7 @@
     wndPtr->hmemTaskQ         = GetTaskQueue(0);
     wndPtr->hrgnUpdate        = 0;
     wndPtr->hwndPrevActive    = 0;
-    wndPtr->hwndLastActive    = 0;
+    wndPtr->hwndLastActive    = hwnd;
     wndPtr->lpfnWndProc       = classPtr->wc.lpfnWndProc;
     wndPtr->dwStyle           = style;
     wndPtr->dwExStyle         = exStyle;
@@ -526,6 +530,8 @@
 {
     WND * wndPtr;
     CLASS * classPtr;
+
+    dprintf_win(stddeb, "DestroyWindow (%04x)\n", hwnd);
     
       /* Initialisation */
 
@@ -933,6 +939,17 @@
 
 
 
+/*******************************************************************
+ *         GetLastActivePopup    (USER.287)
+ */
+HWND GetLastActivePopup(HWND hwnd)
+{
+    WND *wndPtr;
+    wndPtr = WIN_FindWndPtr(hwnd);
+    if (wndPtr == NULL) return hwnd;
+    return wndPtr->hwndLastActive;
+}
+
 
 /*******************************************************************
  *    EnumWindows             (USER.54)
@@ -966,7 +983,9 @@
 #ifdef WINELIB
       (*wndenumprc)(hwnd, lParam);
 #else
-      result = CallBack16(wndenumprc, 2, lParam, (int) hwnd);
+      result = CallBack16(wndenumprc, 2,
+		CALLBACK_SIZE_WORD, (int) hwnd,
+		CALLBACK_SIZE_LONG, lParam);
 #endif
       if ( ! result )  {
               return 0;
@@ -1001,7 +1020,9 @@
 #ifdef WINELIB
         if (!(*wndenumprc)( 2, lParam, (int) hwnd)) {
 #else
-        if (!CallBack16(wndenumprc, 2, lParam, (int) hwnd)) {
+        if (!CallBack16(wndenumprc, 2,
+		CALLBACK_SIZE_WORD, (int) hwnd,
+		CALLBACK_SIZE_LONG, lParam)) {
 #endif
                 return 0;
       }
diff --git a/windows/winpos.c b/windows/winpos.c
index f9b274d..7d1c574 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -1,10 +1,10 @@
 /*
  * Window position related functions.
  *
- * Copyright 1993 Alexandre Julliard
+ * Copyright 1993, 1994 Alexandre Julliard
  */
 
-static char Copyright[] = "Copyright  Alexandre Julliard, 1993";
+static char Copyright[] = "Copyright  Alexandre Julliard, 1993, 1994";
 
 #include "sysmetrics.h"
 #include "user.h"
@@ -12,8 +12,8 @@
 #include "message.h"
 #include "winpos.h"
 #include "stddebug.h"
-/* #define DEBUG_WIN /* */
-/* #undef  DEBUG_WIN /* */
+/* #define DEBUG_WIN */
+/* #undef  DEBUG_WIN */
 #include "debug.h"
 
 static HWND hwndActive = 0;  /* Currently active window */
@@ -90,9 +90,11 @@
 	    (wndPtr->dwStyle & WS_VISIBLE) &&
 	    !(wndPtr->dwExStyle & WS_EX_TRANSPARENT))
 	{
+	    hwndRet = hwnd;
+              /* If window is minimized, ignore its children */
+            if (wndPtr->dwStyle & WS_MINIMIZE) break;
 	    pt.x -= wndPtr->rectClient.left;
 	    pt.y -= wndPtr->rectClient.top;
-	    hwndRet = hwnd;
 	    hwnd = wndPtr->hwndChild;
 	}
 	else hwnd = wndPtr->hwndNext;
@@ -224,47 +226,6 @@
 }
 
 
-#if 0
-/*
- * hwnd is the handle to the first child window to hide
- */
-static void WINPOS_hideChildren(HWND hwnd)
-{
-    WND *wndPtr;
-
-    while (hwnd) {
-	ShowWindow(hwnd, SW_HIDE);
-	wndPtr = WIN_FindWndPtr(hwnd);
-	assert(wndPtr);
-	WINPOS_hideChildren(wndPtr->hwndChild); 
-	hwnd = wndPtr->hwndNext;
-    }
-}
-
-
-static void WINPOS_ChildrenComeOutToPlay(HWND hwnd)
-{
-    WND *wndPtr;
-    
-    while (hwnd) {
-	/*
-	 * we shouldn't really be calling SW_SHOWNOACTIVATE
-	 * here because we wake up all windows, even the ones
-	 * the user has decided to iconify or hide
-	 *
-	 * have to use SHOWNOACTIVATE instead of SHOWNORMAL
-	 * since we are traversing the window tree and don't
-	 * want windows linked/unlined under us
-	 */
-	ShowWindow(hwnd, SW_SHOWNOACTIVATE);
-	wndPtr = WIN_FindWndPtr(hwnd);
-	assert(wndPtr);
-	WINPOS_ChildrenComeOutToPlay(wndPtr->hwndChild); 
-	hwnd = wndPtr->hwndNext;
-    }
-}
-#endif
-
 /***********************************************************************
  *           ShowWindow   (USER.42)
  */
@@ -305,13 +266,6 @@
 	    swpflags |= SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE | 
 		        SWP_NOACTIVATE | SWP_NOZORDER;
 
-#if 0
-	    /*
-	     *	tell children that they are getting hidden
-	     */
-	    WINPOS_hideChildren(wndPtr->hwndChild);
-#endif
-
 	    /* store the size and position of the window, so we can
 	     *	deiconify it to the same size and position	
 	     */
@@ -323,10 +277,9 @@
 	     */
             MoveWindow(hwnd, wndPtr->ptIconPos.x, wndPtr->ptIconPos.y,
                        SYSMETRICS_CXICON, SYSMETRICS_CYICON, FALSE);
-            SendMessage(hwnd, WM_PAINTICON, 0, 0);
+            RedrawWindow( hwnd, NULL, 0, RDW_FRAME | RDW_ERASENOW );
 	    break;
 
-
 	case SW_SHOWNA:
 	case SW_SHOWMAXIMIZED: /* same as SW_MAXIMIZE: */
 	case SW_SHOW:
@@ -353,9 +306,6 @@
 			   wndPtr->rectNormal.bottom - wndPtr->rectNormal.top, 
 			   FALSE);
 	    }
-#if 0
-	    WINPOS_ChildrenComeOutToPlay(wndPtr->hwndChild);
-#endif
 	    break;
     }
 
@@ -894,6 +844,7 @@
     pDWP->suggestedCount = count;
     pDWP->valid          = TRUE;
     pDWP->wMagic         = DWP_MAGIC;
+    pDWP->hwndParent     = 0;
     return handle;
 }
 
@@ -910,6 +861,16 @@
 
     pDWP = (DWP *) USER_HEAP_ADDR( hdwp );
     if (!pDWP) return 0;
+
+      /* All the windows of a DeferWindowPos() must have the same parent */
+
+    if (pDWP->actualCount == 0) pDWP->hwndParent = GetParent( hwnd );
+    else if (GetParent( hwnd ) != pDWP->hwndParent)
+    {
+        USER_HEAP_FREE( hdwp );
+        return 0;
+    }
+
     for (i = 0; i < pDWP->actualCount; i++)
     {
         if (pDWP->winPos[i].hwnd == hwnd)
@@ -986,12 +947,35 @@
 {
     HDWP hdwp;
 
-#ifdef DEBUG_WIN
-    printf( "SetWindowPos: %04X %d %d,%d %dx%d 0x%x\n",
+    dprintf_win(stddeb, "SetWindowPos: %04X %d %d,%d %dx%d 0x%x\n",
             hwnd, hwndInsertAfter, x, y, cx, cy, flags );
-#endif
     if (!(hdwp = BeginDeferWindowPos( 1 ))) return FALSE;
     if (!(hdwp = DeferWindowPos( hdwp, hwnd, hwndInsertAfter,
                                  x, y, cx, cy, flags ))) return FALSE;
     return EndDeferWindowPos( hdwp );
 }
+
+/***********************************************************************
+ *           TileChildWindows   (USER.199)
+ */
+void TileChildWindows( HWND parent, WORD action )
+{
+    printf("STUB TileChildWindows(%04X, %d)\n", parent, action);
+}
+
+/***********************************************************************
+ *           CascageChildWindows   (USER.198)
+ */
+void CascadeChildWindows( HWND parent, WORD action )
+{
+    printf("STUB CascadeChildWindows(%04X, %d)\n", parent, action);
+}
+
+/***********************************************************************
+ *           ArrangeIconicWindows   (USER.170)
+ */
+WORD ArrangeIconicWindows( HWND parent )
+{
+    printf("STUB ArrangeIconicWindows(%04X)\n", parent);
+    return 0;
+}
diff --git a/wine.ini b/wine.ini
index b791ef8..b9139b8 100644
--- a/wine.ini
+++ b/wine.ini
@@ -12,9 +12,21 @@
 Temp=c:\temp
 Path=c:\windows;c:\windows\system;e:\;e:\test;f:\
 
+[fonts]
+system=bitstream-courier
+mssansserif=*-helvetica
+msserif=*-times
+fixedsys=*-fixed
+arial=*-helvetica
+helv=*-helvetica
+roman=*-times
+default=*-*
+
 [serialports]
 Com1=/dev/cua0
 Com2=/dev/cua1
+Com3=/dev/modem,38400
+Com4=/dev/modem
 
 [parallelports]
 Lpt1=/dev/lp0
