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/loader/main.c b/loader/main.c
index 1c1ee9c..64854d6 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -148,7 +148,7 @@
     if (!QUEUE_CreateSysMsgQueue( queueSize )) return 0;
 
     /* Set double click time */
-    SetDoubleClickTime( GetProfileInt32A("windows","DoubleClickSpeed",452) );
+    SetDoubleClickTime32( GetProfileInt32A("windows","DoubleClickSpeed",452) );
 
     return 1;
 }
diff --git a/loader/pe_image.c b/loader/pe_image.c
index d30b09b..59d15cb 100644
--- a/loader/pe_image.c
+++ b/loader/pe_image.c
@@ -37,7 +37,7 @@
 
 void dump_exports(IMAGE_EXPORT_DIRECTORY * pe_exports, unsigned int load_addr)
 { 
-  char		*Module;
+  char		*Module,*s;
   int		i;
   u_short	*ordinal;
   u_long	*function,*functions;
@@ -73,6 +73,7 @@
 	  daddr.off=RVA(*functions);
 	  function++;
       }
+      while ((s=strchr(buffer,'.'))) *s='_';
       DEBUG_AddSymbol(buffer,&daddr, NULL, SYM_WIN32 | SYM_FUNC);
   }
 }
@@ -536,6 +537,8 @@
 	if(pe->pe_export) dump_exports(pe->pe_export,load_addr);
   		
 	if (pe->pe_export) {
+		char	*s;
+
 		/* add start of sections as debugsymbols */
 		for(i=0;i<pe->pe_header->FileHeader.NumberOfSections;i++) {
 			sprintf(buffer,"%s_%s",
@@ -543,11 +546,13 @@
 				pe->pe_seg[i].Name
 			);
 			daddr.off= RVA(pe->pe_seg[i].VirtualAddress);
+      			while ((s=strchr(buffer,'.'))) *s='_';
 			DEBUG_AddSymbol(buffer,&daddr, NULL, SYM_WIN32 | SYM_FUNC);
 		}
 		/* add entry point */
 		sprintf(buffer,"%s_EntryPoint",(char*)RVA(pe->pe_export->Name));
 		daddr.off=RVA(pe->pe_header->OptionalHeader.AddressOfEntryPoint);
+      		while ((s=strchr(buffer,'.'))) *s='_';
 		DEBUG_AddSymbol(buffer,&daddr, NULL, SYM_WIN32 | SYM_FUNC);
 		/* add start of DLL */
 		daddr.off=load_addr;
diff --git a/loader/signal.c b/loader/signal.c
index 769b510..e1fba1f 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -99,7 +99,7 @@
  */
 static void SIGNAL_child(void)
 {
-#ifdef __svr4__
+#if defined(__svr4__) || defined(__EMX__)
     wait(NULL);
 #else
     wait4( 0, NULL, WNOHANG, NULL);
@@ -195,6 +195,15 @@
     ret = sigaction( sig, &sig_act, NULL );
 #endif  /* __svr4__ || _SCO_DS */
 
+#if defined(__EMX__)
+    sigset_t sig_mask;
+    sigemptyset(&sig_mask);
+    sig_act.sa_handler = func;
+    sig_act.sa_flags = 0; /* FIXME: EMX has only SA_ACK and SA_SYSV */
+    sig_act.sa_mask = sig_mask;
+    ret = sigaction( sig, &sig_act, NULL );
+#endif  /* __EMX__ */
+
     if (ret < 0)
     {
         perror( "sigaction" );
diff --git a/loader/task.c b/loader/task.c
index 864abad..d9a666f 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -833,7 +833,8 @@
   if( pTask )
   {
     pQ = (MESSAGEQUEUE*)GlobalLock16(pTask->hQueue);
-    if( pQ && pQ->flags & QUEUE_FLAG_XEVENT )
+    if( pQ && pQ->flags & QUEUE_FLAG_XEVENT &&
+	    !(pQ->wakeBits & (QS_SENDMESSAGE | QS_SMRESULT)) )
     {
       pQ->flags &= ~QUEUE_FLAG_XEVENT;
       EVENT_WaitXEvent( FALSE, FALSE );