Release 961013

Sun Oct 13 15:32:32 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [Make.rules.in] [*/Makefile.in]
	Made it possible to compile from a directory other than the source
	directory.

	* [graphics/metafiledrv/init.c] [include/metafiledrv.h]
	  [objects/metafile.c] [objects/dc.c]
	New graphics driver for metafiles.

	* [if1632/thunk.c]
	Added thunks for SetWindowsHook and SetDCHook.

	* [windows/dialog.c]
	Fixed GetNextDlgGroupItem and GetNextDlgTabItem to skip disabled
	items.

	* [*/*]
	Removed non Win32-clean types HANDLE, HBITMAP, HBRUSH, HFONT,
 	HINSTANCE, HMENU, HRGN and HTASK.

Wed Oct  9 14:59:45 1996  Frans van Dorsselaer  <dorssel@rulhm1.LeidenUniv.nl>

	* [controls/edit.c]
	Fixed EditWndProc() to fall back to DefWndProc() when the
	edit state structure is not available.

Wed Oct  2 14:00:34 1996  Huw D. M. Davies  <h.davies1@physics.oxford.ac.uk>

	* [windows/nonclient.c] [windows/mdi.c]
	AdjustWindowRectEx16() should only take notice of the styles
 	WS_DLGFRAME, WS_BORDER, WS_THICKFRAME and
 	WS_EX_DLGMODALFRAME. Thanks to Alex Korobka.

	* [controls/scroll.c]
	Fixed typo in ShowScrollBar32().

Sun Aug 25 20:18:56 1996  Jukka Iivonen <iivonen@cc.helsinki.fi>

	* [if1632/user32.spec] [if1632/winmm.spec]
	Added SetParent and sndPlaySoundA.
diff --git a/windows/hook.c b/windows/hook.c
index ce58107..4deddf7 100644
--- a/windows/hook.c
+++ b/windows/hook.c
@@ -15,12 +15,28 @@
 
 #define NO_TRANSITION_TYPES  /* This file is Win32-clean */
 #include "hook.h"
-#include "callback.h"
 #include "queue.h"
 #include "user.h"
 #include "stddebug.h"
 #include "debug.h"
 
+#pragma pack(1)
+
+  /* Hook data (pointed to by a HHOOK) */
+typedef struct
+{
+    HANDLE16   next;               /* 00 Next hook in chain */
+    HOOKPROC16 proc WINE_PACKED;   /* 02 Hook procedure */
+    INT16      id;                 /* 06 Hook id (WH_xxx) */
+    HQUEUE16   ownerQueue;         /* 08 Owner queue (0 for system hook) */
+    HMODULE16  ownerModule;        /* 0a Owner module */
+    WORD       inHookProc;         /* 0c TRUE if in this->proc */
+} HOOKDATA;
+
+#pragma pack(4)
+
+#define HOOK_MAGIC  ((int)'H' | (int)'K' << 8)  /* 'HK' */
+
   /* This should probably reside in USER heap */
 static HANDLE16 HOOK_systemHooks[WH_NB_HOOKS] = { 0, };
 
@@ -59,6 +75,16 @@
 
 
 /***********************************************************************
+ *           HOOK_GetProc16
+ */
+HOOKPROC16 HOOK_GetProc16( HHOOK hhook )
+{
+    HOOKDATA *data = (HOOKDATA *)USER_HEAP_LIN_ADDR( hhook );
+    return data ? data->proc : NULL;
+}
+
+
+/***********************************************************************
  *           HOOK_SetHook
  *
  * Install a given hook.
@@ -197,9 +223,9 @@
     queue->hCurHook = hook;
     data->inHookProc = 1;
 
-    dprintf_hook( stddeb, "Calling hook %04x: %d %04lx %08lx\n",
-                  hook, code, (DWORD)wParam, lParam );
-    ret = CallHookProc( data->proc, code, wParam, lParam );
+    dprintf_hook( stddeb, "Calling hook %04x: proc=%p %d %04lx %08lx\n",
+                  hook, data->proc, code, (DWORD)wParam, lParam );
+    ret = data->proc( code, wParam, lParam );
     dprintf_hook( stddeb, "Ret hook %04x = %08lx\n", hook, ret );
 
     data->inHookProc = 0;
@@ -280,23 +306,23 @@
     }
 }
 
+
 /***********************************************************************
- *           SetWindowsHook   (USER.121)
+ *           SetWindowsHook16   (USER.121)
  */
-FARPROC16 SetWindowsHook( INT16 id, HOOKPROC16 proc )
+FARPROC16 SetWindowsHook16( INT16 id, HOOKPROC16 proc )
 {
-    HINSTANCE16 hInst = __winelib ? 0 : FarGetOwner( HIWORD(proc) );
     HTASK16 	hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0;
-    HANDLE16 	handle = HOOK_SetHook( id, proc, hInst, hTask );
+    HANDLE16 	handle = HOOK_SetHook( id, proc, 0, hTask );
 
     return (handle) ? (FARPROC16)MAKELONG( handle, HOOK_MAGIC ) : NULL;
 }
 
 
 /***********************************************************************
- *           UnhookWindowsHook   (USER.234)
+ *           UnhookWindowsHook16   (USER.234)
  */
-BOOL16 UnhookWindowsHook( INT16 id, HOOKPROC16 proc )
+BOOL16 UnhookWindowsHook16( INT16 id, HOOKPROC16 proc )
 {
     HANDLE16 hook = HOOK_GetHook( id , 0 );
 
@@ -341,10 +367,10 @@
 
 
 /***********************************************************************
- *           SetWindowsHookEx   (USER.291)
+ *           SetWindowsHookEx16   (USER.291)
  */
-HHOOK SetWindowsHookEx( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
-                        HTASK16 hTask )
+HHOOK SetWindowsHookEx16( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
+                          HTASK16 hTask )
 {
     HANDLE16 handle = HOOK_SetHook( id, proc, hInst, hTask );
     return (handle) ? MAKELONG( handle, HOOK_MAGIC ) : NULL;
@@ -352,9 +378,9 @@
 
 
 /***********************************************************************
- *           UnhookWindowHookEx   (USER.292)
+ *           UnhookWindowHookEx16   (USER.292)
  */
-BOOL16 UnhookWindowsHookEx( HHOOK hhook )
+BOOL16 UnhookWindowsHookEx16( HHOOK hhook )
 {
     if (HIWORD(hhook) != HOOK_MAGIC) return FALSE;  /* Not a new format hook */
     return HOOK_RemoveHook( LOWORD(hhook) );