Release 970215

Sat Feb 15 11:59:17 1997  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [*/*]
	Converted a lot of functions to Win32 types.
	Removed HWND type.

Fri Feb 14 15:09:19 1997  Onno Hovers <onno@stack.nl>

	* [memory/global.c]
	Implemented GMEM_MOVEABLE blocks for Win32.

Fri Feb 14 00:24:39 1997  Alex Korobka <alex@trantor.pharm.sunysb.edu>

	* [loader/task.c] [windows/queue.c]
	Do not read X events while in the intertask SendMessage().

	* [misc/lstr.c]
	Fixed CharPrev32A().

	* [windows/hook.c] [include/hook.h]
	Restored broken WH_CALLWNDPROC functionality for dialogs, etc...

	* [windows/win.c] [windows/defwnd.c] [windows/mdi.c]
	  [windows/event.c] [controls/edit.c] 
	Added WIN_ISWIN32 flag to windows created by Win32 calls. 
	Several new Win32 messages are sent when this flag is on.
	
	* [msdos/dosmem.c] [memory/global.c]
	Some changes in DOS memory allocation.

Fri Feb  7 21:46:03 1997  Andrew Taylor  <andrew@riscan.com>

	* [win32/security.c]
	Added SID manipulation functions.

	* [include/debug.h]
	Added debugging class "security".

Fri  Feb 7 20:46:33 1997  Robert Pouliot <krynos@clic.net>

	* [debugger/msc.c] [debugger/source.c] 
	  [documentation/wine_os2.txt] [loader/signal.c]
	Some more changes for OS/2. Doesn't work yet.

Fri  Feb 7 09:31:17 1997  Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>

	* [scheduler/process.c]
	Added ExpandEnvironmentStrings*.

	* [misc/ntdll.c] [include/ntdll.h]
	Added some new functions.

	* [objects/cursoricon.c]
	CURSORICON_LoadHandler: check against some bizarre out of memory
	conditions.
	
	* [windows/mdi.c]
	Fixed DefFrameProc32*, added TranslateMDISysAccel32.

Wed Feb  5 01:31:05 1997  John Zero <john@globe.graphisoft.hu>

	* [resources/sysres_Hu.rc] [misc/ole2nls.c] [misc/main.c]
	  [programs/progman/Hu.rc] [programs/winhelp/Hu.rc]
	Added Hungarian language support.
diff --git a/objects/metafile.c b/objects/metafile.c
index 0174c92..d5dcf12 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -55,10 +55,18 @@
 
 
 /******************************************************************
- *         GetMetafile         GDI.124 By Kenny MacDonald 30 Nov 94
+ *         GetMetafile16   (GDI.124)
  */
+HMETAFILE16 GetMetaFile16( LPCSTR lpFilename )
+{
+    return GetMetaFile32A( lpFilename );
+}
 
-HMETAFILE16 GetMetaFile(LPSTR lpFilename)
+
+/******************************************************************
+ *         GetMetafile32A   (GDI32.197)
+ */
+HMETAFILE32 GetMetaFile32A( LPCSTR lpFilename )
 {
   HMETAFILE16 hmf;
   METAHEADER *mh;
@@ -73,17 +81,21 @@
   hmf = GlobalAlloc16(GMEM_MOVEABLE, MFHEADERSIZE);
   mh = (METAHEADER *)GlobalLock16(hmf);
   
-  if (!mh) {
+  if (!mh)
+  {
     GlobalFree16(hmf);
     return 0;
   }
   
-  if ((hFile = _lopen32(lpFilename, OF_READ)) == HFILE_ERROR32) {
+  if ((hFile = _lopen32(lpFilename, OF_READ)) == HFILE_ERROR32)
+  {
     GlobalFree16(hmf);
     return 0;
   }
   
-  if (_lread32(hFile, (char *)mh, MFHEADERSIZE) == HFILE_ERROR32) {
+  if (_lread32(hFile, (char *)mh, MFHEADERSIZE) == HFILE_ERROR32)
+  {
+    _lclose32( hFile );
     GlobalFree16(hmf);
     return 0;
   }
@@ -93,20 +105,25 @@
   hmf = GlobalReAlloc16(hmf,size,GMEM_MOVEABLE);
   mh = (METAHEADER *)GlobalLock16(hmf);
   
-  if (!mh) {
+  if (!mh)
+  {
+    _lclose32( hFile );
     GlobalFree16(hmf);
     return 0;
   }
   
   if (_lread32(hFile, (char*)mh + mh->mtHeaderSize * 2, 
-	        size - mh->mtHeaderSize * 2) == HFILE_ERROR32) {
+	        size - mh->mtHeaderSize * 2) == HFILE_ERROR32)
+  {
+    _lclose32( hFile );
     GlobalFree16(hmf);
     return 0;
   }
   
   _lclose32(hFile);
 
-  if (mh->mtType != 1) {
+  if (mh->mtType != 1)
+  {
     GlobalFree16(hmf);
     return 0;
   }
@@ -118,10 +135,31 @@
 
 
 /******************************************************************
- *         CopyMetafile         GDI.151 Niels de Carpentier, April 1996
+ *         GetMetafile32W   (GDI32.199)
+ */
+HMETAFILE32 GetMetaFile32W( LPCWSTR lpFilename )
+{
+    LPSTR p = HEAP_strdupWtoA( GetProcessHeap(), 0, lpFilename );
+    HMETAFILE32 ret = GetMetaFile32A( p );
+    HeapFree( GetProcessHeap(), 0, p );
+    return ret;
+}
+
+
+/******************************************************************
+ *         CopyMetaFile16   (GDI.151)
  */
 
-HMETAFILE16 CopyMetaFile(HMETAFILE16 hSrcMetaFile, LPCSTR lpFilename)
+HMETAFILE16 CopyMetaFile16( HMETAFILE16 hSrcMetaFile, LPCSTR lpFilename )
+{
+    return CopyMetaFile32A( hSrcMetaFile, lpFilename );
+}
+
+
+/******************************************************************
+ *         CopyMetaFile32A   (GDI32.23)
+ */
+HMETAFILE32 CopyMetaFile32A( HMETAFILE32 hSrcMetaFile, LPCSTR lpFilename )
 {
     HMETAFILE16 handle = 0;
     METAHEADER *mh;
@@ -146,6 +184,7 @@
         _lclose32(hFile);
 	if (i == -1)
 	    return 0;
+        /* FIXME: return value */
         }
     else                     /* memory based metafile */
         {
@@ -158,12 +197,25 @@
     return handle;
 }
 
+
+/******************************************************************
+ *         CopyMetaFile32W   (GDI32.24)
+ */
+HMETAFILE32 CopyMetaFile32W( HMETAFILE32 hSrcMetaFile, LPCWSTR lpFilename )
+{
+    LPSTR p = HEAP_strdupWtoA( GetProcessHeap(), 0, lpFilename );
+    HMETAFILE32 ret = CopyMetaFile32A( hSrcMetaFile, p );
+    HeapFree( GetProcessHeap(), 0, p );
+    return ret;
+}
+
+
 /******************************************************************
  *         IsValidMetaFile   (GDI.410)
  *         (This is not exactly what windows does, see "Undoc Win")
  */
 
-BOOL IsValidMetaFile(HMETAFILE16 hmf)
+BOOL16 IsValidMetaFile(HMETAFILE16 hmf)
 {
     BOOL resu=FALSE;
     METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
@@ -179,82 +231,19 @@
 }
 
 
-#if 0
 /******************************************************************
- *         CloseMetafile         GDI.126
+ *         PlayMetafile16   (GDI.123)
  */
-
-HMETAFILE16 CloseMetaFile(HDC16 hdc)
+BOOL16 PlayMetaFile16( HDC16 hdc, HMETAFILE16 hmf )
 {
-    DC *dc;
-    METAHEADER *mh;
-    HMETAFILE16 hmf;
-    HFILE hFile;
-    METAFILEDRV_PDEVICE *physDev;
-    
-    dprintf_metafile(stddeb,"CloseMetaFile\n");
-
-    if (!(dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC))) return 0;
-
-    physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
-    mh = (METAHEADER *)GlobalLock16( physDev->hMetafile );
-
-    /* Construct the end of metafile record - this is documented
-     * in SDK Knowledgebase Q99334.
-     */
-
-    if (!MF_MetaParam0(dc, META_EOF))
-    {
-        DeleteDC32( hdc );
-	return 0;
-    }	
-
-    if (mh->mtType == 1)        /* disk based metafile */
-    {
-        hFile = mh->mtNoParameters;
-	mh->mtNoParameters = 0;
-        if (_llseek(hFile, 0L, 0) == -1)
-        {
-            DeleteDC32( hdc );
-            return 0;
-        }
-        if (_lwrite32(hFile, (char *)mh, MFHEADERSIZE) == -1)
-        {
-            DeleteDC32( hdc );
-            return 0;
-        }
-        _lclose(hFile);
-    }
-
-    hmf = physDev->hMetafile;
-    GlobalUnlock16( hmf );
-    physDev->hMetafile = 0;  /* So it won't be deleted */
-    DeleteDC32( hdc );
-    return hmf;
+    return PlayMetaFile32( hdc, hmf );
 }
 
 
 /******************************************************************
- *         DeleteMetafile         GDI.127
+ *         PlayMetafile32   (GDI32.265)
  */
-
-BOOL DeleteMetaFile(HMETAFILE16 hmf)
-{
-    METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
-
-    if (!mh)
-	return FALSE;
-
-    GlobalFree16(hmf);
-    return TRUE;
-}
-#endif
-
-/******************************************************************
- *         PlayMetafile         GDI.123
- */
-
-BOOL PlayMetaFile(HDC16 hdc, HMETAFILE16 hmf)
+BOOL32 PlayMetaFile32( HDC32 hdc, HMETAFILE32 hmf )
 {
     METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
     METARECORD *mr;
@@ -592,7 +581,7 @@
     /* W. Magro: Some new metafile operations.  Not all debugged. */
     case META_CREATEPALETTE:
 	MF_AddHandle(ht, nHandles, 
-		     CreatePalette((LPLOGPALETTE)mr->rdParam));
+		     CreatePalette16((LPLOGPALETTE)mr->rdParam));
 	break;
 
     case META_SETTEXTALIGN:
@@ -600,15 +589,15 @@
 	break;
 
     case META_SELECTPALETTE:
-	SelectPalette(hdc, *(ht->objectHandle + *(mr->rdParam+1)),*(mr->rdParam));
+	SelectPalette16(hdc, *(ht->objectHandle + *(mr->rdParam+1)),*(mr->rdParam));
 	break;
 
     case META_SETMAPPERFLAGS:
-	SetMapperFlags(hdc, *(mr->rdParam));
+	SetMapperFlags16(hdc, *(mr->rdParam));
 	break;
 
     case META_REALIZEPALETTE:
-	RealizePalette(hdc);
+	RealizePalette16(hdc);
 	break;
 
     case META_ESCAPE:
@@ -735,7 +724,7 @@
 
 
 /******************************************************************
- *         GetMetaFileBits		by William Magro, 19 Sep 1995
+ *         GetMetaFileBits   (GDI.159)
  *
  * Trade in a meta file object handle for a handle to the meta file memory
  */
@@ -748,11 +737,10 @@
 }
 
 /******************************************************************
- *         SetMetaFileBits		by William Magro, 19 Sep 1995
+ *         SetMetaFileBits   (GDI.160)
  *
  * Trade in a meta file memory handle for a handle to a meta file object
  */
-
 HMETAFILE16 SetMetaFileBits( HGLOBAL16 hMem )
 {
     dprintf_metafile(stddeb,"SetMetaFileBits: hmf out: %04x\n", hMem);