Rewrote hook support to store the hook chain in the server.
Split off 16-bit hook functions and re-implemented them on top of the
32-bit ones; system-wide 16-bit hooks are no longer supported at this
point.

diff --git a/server/trace.c b/server/trace.c
index f06d2b6..9d89ef7 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -2282,6 +2282,57 @@
     fprintf( stderr, " old_state=%d", req->old_state );
 }
 
+static void dump_set_hook_request( const struct set_hook_request *req )
+{
+    fprintf( stderr, " id=%d,", req->id );
+    fprintf( stderr, " tid=%08x,", req->tid );
+    fprintf( stderr, " proc=%p,", req->proc );
+    fprintf( stderr, " unicode=%d", req->unicode );
+}
+
+static void dump_set_hook_reply( const struct set_hook_reply *req )
+{
+    fprintf( stderr, " handle=%p", req->handle );
+}
+
+static void dump_remove_hook_request( const struct remove_hook_request *req )
+{
+    fprintf( stderr, " handle=%p,", req->handle );
+    fprintf( stderr, " id=%d,", req->id );
+    fprintf( stderr, " proc=%p", req->proc );
+}
+
+static void dump_start_hook_chain_request( const struct start_hook_chain_request *req )
+{
+    fprintf( stderr, " id=%d", req->id );
+}
+
+static void dump_start_hook_chain_reply( const struct start_hook_chain_reply *req )
+{
+    fprintf( stderr, " handle=%p,", req->handle );
+    fprintf( stderr, " proc=%p,", req->proc );
+    fprintf( stderr, " unicode=%d", req->unicode );
+}
+
+static void dump_finish_hook_chain_request( const struct finish_hook_chain_request *req )
+{
+    fprintf( stderr, " id=%d", req->id );
+}
+
+static void dump_get_next_hook_request( const struct get_next_hook_request *req )
+{
+    fprintf( stderr, " handle=%p", req->handle );
+}
+
+static void dump_get_next_hook_reply( const struct get_next_hook_reply *req )
+{
+    fprintf( stderr, " next=%p,", req->next );
+    fprintf( stderr, " id=%d,", req->id );
+    fprintf( stderr, " proc=%p,", req->proc );
+    fprintf( stderr, " prev_unicode=%d,", req->prev_unicode );
+    fprintf( stderr, " next_unicode=%d", req->next_unicode );
+}
+
 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
     (dump_func)dump_new_process_request,
     (dump_func)dump_get_new_process_info_request,
@@ -2447,6 +2498,11 @@
     (dump_func)dump_set_capture_window_request,
     (dump_func)dump_set_caret_window_request,
     (dump_func)dump_set_caret_info_request,
+    (dump_func)dump_set_hook_request,
+    (dump_func)dump_remove_hook_request,
+    (dump_func)dump_start_hook_chain_request,
+    (dump_func)dump_finish_hook_chain_request,
+    (dump_func)dump_get_next_hook_request,
 };
 
 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
@@ -2614,6 +2670,11 @@
     (dump_func)dump_set_capture_window_reply,
     (dump_func)dump_set_caret_window_reply,
     (dump_func)dump_set_caret_info_reply,
+    (dump_func)dump_set_hook_reply,
+    (dump_func)0,
+    (dump_func)dump_start_hook_chain_reply,
+    (dump_func)0,
+    (dump_func)dump_get_next_hook_reply,
 };
 
 static const char * const req_names[REQ_NB_REQUESTS] = {
@@ -2781,6 +2842,11 @@
     "set_capture_window",
     "set_caret_window",
     "set_caret_info",
+    "set_hook",
+    "remove_hook",
+    "start_hook_chain",
+    "finish_hook_chain",
+    "get_next_hook",
 };
 
 /* ### make_requests end ### */