Redesign of the server communication protocol to allow arbitrary sized
data to be exchanged.
Split request and reply structures to make backwards compatibility
easier.
Moved many console functions to dlls/kernel, added code page support,
changed a few requests to behave properly with the new protocol.

diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c
index 12b761c..78b65c2 100644
--- a/dlls/winsock/socket.c
+++ b/dlls/winsock/socket.c
@@ -233,7 +233,7 @@
         req->mask   = event;
         req->sstate = sstate;
         req->cstate = cstate;
-        SERVER_CALL();
+        wine_server_call( req );
     }
     SERVER_END_REQ;
 }
@@ -247,8 +247,8 @@
         req->service = FALSE;
         req->s_event = 0;
         req->c_event = 0;
-        SERVER_CALL();
-        ret = (req->state & FD_WINE_NONBLOCKING) == 0;
+        wine_server_call( req );
+        ret = (reply->state & FD_WINE_NONBLOCKING) == 0;
     }
     SERVER_END_REQ;
     return ret;
@@ -263,8 +263,8 @@
         req->service = FALSE;
         req->s_event = 0;
         req->c_event = 0;
-        SERVER_CALL();
-        ret = req->mask;
+        wine_server_call( req );
+        ret = reply->mask;
     }
     SERVER_END_REQ;
     return ret;
@@ -279,18 +279,19 @@
 
 static int _get_sock_error(SOCKET s, unsigned int bit)
 {
-    int ret;
-    SERVER_START_VAR_REQ( get_socket_event, FD_MAX_EVENTS*sizeof(int) )
+    int events[FD_MAX_EVENTS];
+
+    SERVER_START_REQ( get_socket_event )
     {
         req->handle  = s;
         req->service = FALSE;
         req->s_event = 0;
         req->c_event = 0;
-        SERVER_CALL();
-        ret = *((int *)server_data_ptr(req) + bit);
+        wine_server_set_reply( req, events, sizeof(events) );
+        wine_server_call( req );
     }
-    SERVER_END_VAR_REQ;
-    return ret;
+    SERVER_END_REQ;
+    return events[bit];
 }
 
 static void WINSOCK_DeleteIData(void)
@@ -900,8 +901,8 @@
             req->lhandle = s;
             req->access  = GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE;
             req->inherit = TRUE;
-            set_error( SERVER_CALL() );
-            as = (SOCKET)req->handle;
+            set_error( wine_server_call( req ) );
+            as = (SOCKET)reply->handle;
         }
         SERVER_END_REQ;
 	if (as)
@@ -2318,8 +2319,8 @@
         req->protocol = protocol;
         req->access   = GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE;
         req->inherit  = TRUE;
-        set_error( SERVER_CALL() );
-        ret = (SOCKET)req->handle;
+        set_error( wine_server_call( req ) );
+        ret = (SOCKET)reply->handle;
     }
     SERVER_END_REQ;
     if (ret)
@@ -2718,19 +2719,16 @@
 
     TRACE("%08x, hEvent %08x, lpEvent %08x\n", s, hEvent, (unsigned)lpEvent );
 
-    SERVER_START_VAR_REQ( get_socket_event, sizeof(lpEvent->iErrorCode) )
+    SERVER_START_REQ( get_socket_event )
     {
         req->handle  = s;
         req->service = TRUE;
         req->s_event = 0;
         req->c_event = hEvent;
-        if (!(ret = SERVER_CALL()))
-        {
-            lpEvent->lNetworkEvents = req->pmask & req->mask;
-            memcpy(lpEvent->iErrorCode, server_data_ptr(req), server_data_size(req) );
-        }
+        wine_server_set_reply( req, lpEvent->iErrorCode, sizeof(lpEvent->iErrorCode) );
+        if (!(ret = wine_server_call(req))) lpEvent->lNetworkEvents = reply->pmask & reply->mask;
     }
-    SERVER_END_VAR_REQ;
+    SERVER_END_REQ;
     if (!ret) return 0;
     SetLastError(WSAEINVAL);
     return SOCKET_ERROR;
@@ -2750,7 +2748,7 @@
         req->handle = s;
         req->mask   = lEvent;
         req->event  = hEvent;
-        ret = SERVER_CALL();
+        ret = wine_server_call( req );
     }
     SERVER_END_REQ;
     if (!ret) return 0;
@@ -2769,17 +2767,17 @@
 
     TRACE("socket %08x, event %08x\n", info->sock, info->event);
     SetLastError(0);
-    SERVER_START_VAR_REQ( get_socket_event, sizeof(errors) )
+    SERVER_START_REQ( get_socket_event )
     {
         req->handle  = info->sock;
         req->service = TRUE;
         req->s_event = info->event; /* <== avoid race conditions */
         req->c_event = info->event;
-        set_error( SERVER_CALL() );
-        pmask = req->pmask;
-        memcpy( errors, server_data_ptr(req), server_data_size(req) );
+        wine_server_set_reply( req, errors, sizeof(errors) );
+        set_error( wine_server_call(req) );
+        pmask = reply->pmask;
     }
-    SERVER_END_VAR_REQ;
+    SERVER_END_REQ;
     if ( (GetLastError() == WSAENOTSOCK) || (GetLastError() == WSAEINVAL) )
     {
 	/* orphaned event (socket closed or something) */