Release 960309

Fri Mar  8 19:07:18 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [configure.in]
	Quote '[' and ']' in the test program for the strength-reduce
	bug. This should work much better...

	* [files/file.c]
	Augmented DOS_FILE structure. Most internal functions now return a
	DOS_FILE* instead of a Unix handle.
	Added a local file array to replace the PDB list upon startup, to
	allow using file I/O functions before the first task is created.
	Added FILE_SetDateTime() and FILE_Sync() functions.
	
	* [loader/module.c]
	Use the DOS file I/O functions in MODULE_LoadExeHeader().

	* [objects/bitblt.c]
	Use visible region instead of GC clip region to clip source
	area. This fixes the card drawing bug in freecell.

	* [objects/region.c]
	Fixed CombineRgn() to allow src and dest regions to be the same.

Fri Mar  8 16:32:23 1996  Frans van Dorsselaer <dorssel@rulhm1.leidenuniv.nl>

	* [controls/EDIT.TODO]
	Updated so it reflects the current status.

	* [controls/edit.c]
	Implemented internal EDIT_WordBreakProc().
	Implemented ES_READONLY.
	Implemented WM_LBUTTONDBLCLK to select whole words.
	Fixed a lot of types in the function definitions.

Wed Mar  6 19:55:00 1996  Alex Korobka <alex@phm30.pharm.sunysb.edu>

	* [debugger/info.c]
	Added "walk window" command to walk window list. 

	* [windows/mdi.c]
	Added proper(?) WM_MDISETMENU message handling.

Wed Mar  6 09:27:12 1996  Martin von Loewis <loewis@informatik.hu-berlin.de>

	* [if1632/callback.c][if1632/relay32.c]
	RELAY32_CallWindowProcConvStruct: new function.

	* [win32/struct32.c][win32/Makefile.in][win32/param.c][win32/user32.c]
	struct32.c: new file. Moved all structure conversions into that file
	PARAM32_POINT32to16,MSG16to32,USER32_RECT32to16: 
	renamed to STRUCT32_POINT32to16, ...
	WIN32_POINT,WIN32_MSG,WIN32_RECT,WIN32_PAINTSTRUCT: renamed to
	POINT32, ...
	New conversion functions for NCCALCSIZE_PARAMS, WINDOWPOS,
 	CREATESTRUCT.

	* [include/windows.h][misc/exec.c]
	WINHELP, MULTIKEYHELP, HELPWININFO: new structures
	WinHelp: Reimplemented. Thanks to Peter Balch
 	(100710.2566@compuserve.com) for his valuable research.

	* [win32/winprocs.c]
	WIN32_CallWindowProcTo16: new function, call in
 	USER32_DefWindowProcA,...

Mon Mar  4 23:22:40 1996  Jim Peterson <jspeter@birch.ee.vt.edu>

	* [include/wintypes.h]
	Added "#define __export".

	* [objects/bitblt.c]
	Put in a few hacks to make bitblt-ing work when upside-down and/or
	mirrored.  BITBLT_StretchImage should really be checked over
	thoroughly.

	* [programs/progman/main.c]
	Added "#include <resource.h>" for definition of HAVE_WINE_CONSTRUCTOR.

	* [rc/parser.h] [rc/parser.l] [rc/parser.y] [rc/winerc.c]
	Eliminated shift/reduce conflict in style definition.
	Added crude error message support: "stdin:%d: parse error before '%s'".
	Implemented string table support to the best of my ability (it works
	with LoadString() calls).

	* [windows/nonclient.c]
	Fixed bug in NC_DoSizeMove() that made system menu pop up when title
	bar of non-iconized window was clicked (checked for iconization).

Mon Mar 04 20:55:19 1996  Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>

	* [if1632/lzexpand.spec] [if1632/relay.c]
	  [include/lzexpand.h][misc/lzexpand.c]
	LZEXPAND.DLL added.

Sun Mar 03 18:10:22 1996  Albrecht Kleine  <kleine@ak.sax.de>

	* [windows/win.c]
	Prevent usage of invalid HWNDs in WIN_EnumChildWin(),
	this prevents too early termination of EnumChildWindows().
diff --git a/win32/struct32.c b/win32/struct32.c
new file mode 100644
index 0000000..4a70c17
--- /dev/null
+++ b/win32/struct32.c
@@ -0,0 +1,150 @@
+/*
+ * Win32 structure conversion functions
+ *
+ * Copyright 1996 Martin von Loewis
+ */
+
+#include <stdio.h>
+#include "windows.h"
+#include "winerror.h"
+#include "struct32.h"
+#include "stddebug.h"
+#include "debug.h"
+
+void STRUCT32_POINT32to16(const POINT32* p32,POINT* p16)
+{
+	p16->x = p32->x;
+	p16->y = p32->y;
+}
+
+void STRUCT32_POINT16to32(const POINT* p16,POINT32* p32)
+{
+	p32->x = p16->x;
+	p32->y = p16->y;
+}
+
+void STRUCT32_SIZE16to32(const SIZE* p16, SIZE32* p32) 
+  
+{
+        p32->cx = p16->cx;
+        p32->cy = p16->cy;
+}
+
+void STRUCT32_MSG16to32(MSG *msg16,MSG32 *msg32)
+{
+	msg32->hwnd=(DWORD)msg16->hwnd;
+	msg32->message=msg16->message;
+	msg32->wParam=msg16->wParam;
+	msg32->lParam=msg16->lParam;
+	msg32->time=msg16->time;
+	msg32->pt.x=msg16->pt.x;
+	msg32->pt.y=msg16->pt.y;
+}
+
+void STRUCT32_MSG32to16(MSG32 *msg32,MSG *msg16)
+{
+	msg16->hwnd=(HWND)msg32->hwnd;
+	msg16->message=msg32->message;
+	msg16->wParam=msg32->wParam;
+	msg16->lParam=msg32->lParam;
+	msg16->time=msg32->time;
+	msg16->pt.x=msg32->pt.x;
+	msg16->pt.y=msg32->pt.y;
+}
+
+void STRUCT32_RECT32to16(const RECT32* r32,RECT *r16)
+{
+	r16->left = r32->left;
+	r16->right = r32->right;
+	r16->top = r32->top;
+	r16->bottom = r32->bottom;
+}
+
+void STRUCT32_RECT16to32(const RECT* r16,RECT32 *r32)
+{
+	r32->left = r16->left;
+	r32->right = r16->right;
+	r32->top = r16->top;
+	r32->bottom = r16->bottom;
+}
+
+void STRUCT32_MINMAXINFO32to16(const MINMAXINFO32 *from,MINMAXINFO *to)
+{
+	STRUCT32_POINT32to16(&from->ptReserved,&to->ptReserved);
+	STRUCT32_POINT32to16(&from->ptMaxSize,&to->ptMaxSize);
+	STRUCT32_POINT32to16(&from->ptMaxPosition,&to->ptMaxPosition);
+	STRUCT32_POINT32to16(&from->ptMinTrackSize,&to->ptMinTrackSize);
+	STRUCT32_POINT32to16(&from->ptMaxTrackSize,&to->ptMaxTrackSize);
+}
+
+void STRUCT32_MINMAXINFO16to32(const MINMAXINFO *from,MINMAXINFO32 *to)
+{
+	STRUCT32_POINT16to32(&from->ptReserved,&to->ptReserved);
+	STRUCT32_POINT16to32(&from->ptMaxSize,&to->ptMaxSize);
+	STRUCT32_POINT16to32(&from->ptMaxPosition,&to->ptMaxPosition);
+	STRUCT32_POINT16to32(&from->ptMinTrackSize,&to->ptMinTrackSize);
+	STRUCT32_POINT16to32(&from->ptMaxTrackSize,&to->ptMaxTrackSize);
+}
+
+void STRUCT32_WINDOWPOS32to16(const WINDOWPOS32* from,WINDOWPOS* to)
+{
+	to->hwnd=from->hwnd;
+	to->hwndInsertAfter=from->hwndInsertAfter;
+	to->x=from->x;
+	to->y=from->y;
+	to->cx=from->cx;
+	to->flags=from->flags;
+}
+
+void STRUCT32_WINDOWPOS16to32(const WINDOWPOS* from,WINDOWPOS32* to)
+{
+	to->hwnd=from->hwnd;
+	to->hwndInsertAfter=from->hwndInsertAfter;
+	to->x=from->x;
+	to->y=from->y;
+	to->cx=from->cx;
+	to->flags=from->flags;
+}
+
+void STRUCT32_NCCALCSIZE32to16Flat(const NCCALCSIZE_PARAMS32* from,
+	NCCALCSIZE_PARAMS* to)
+{
+	STRUCT32_RECT32to16(from->rgrc,to->rgrc);
+	STRUCT32_RECT32to16(from->rgrc+1,to->rgrc+1);
+	STRUCT32_RECT32to16(from->rgrc+2,to->rgrc+2);
+}
+
+void STRUCT32_NCCALCSIZE16to32Flat(const NCCALCSIZE_PARAMS* from,
+	NCCALCSIZE_PARAMS32* to)
+{
+	STRUCT32_RECT16to32(from->rgrc,to->rgrc);
+	STRUCT32_RECT16to32(from->rgrc+1,to->rgrc+1);
+	STRUCT32_RECT16to32(from->rgrc+2,to->rgrc+2);
+}
+
+/* The strings are not copied */
+void STRUCT32_CREATESTRUCT32to16(const CREATESTRUCT32* from,CREATESTRUCT* to)
+{
+	to->lpCreateParams = (LPVOID)from->lpCreateParams;
+	to->hInstance = from->hInstance;
+	to->hMenu = from->hMenu;
+	to->hwndParent = from->hwndParent;
+	to->cy = from->cy;
+	to->cx = from->cx;
+	to->y = from->y;
+	to->style = from->style;
+	to->dwExStyle = from->dwExStyle;
+}
+
+void STRUCT32_CREATESTRUCT16to32(const CREATESTRUCT* from,CREATESTRUCT32 *to)
+{
+	to->lpCreateParams = (DWORD)from->lpCreateParams;
+	to->hInstance = from->hInstance;
+	to->hMenu = from->hMenu;
+	to->hwndParent = from->hwndParent;
+	to->cy = from->cy;
+	to->cx = from->cx;
+	to->y = from->y;
+	to->style = from->style;
+	to->dwExStyle = from->dwExStyle;
+}