Release 980215

Sun Feb 15 12:02:59 1998  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [graphics/x11drv/*.c] [objects/*.c]
	A few X11 critical section optimizations, mostly with XGet/PutPixel.

	* [scheduler/sysdeps.c] [misc/main.c]
	Make sure X11 critical section is available before any Xlib call.

	* [if1632/relay.c] [tools/build.c]
	Yet another attempt at fixing Catch/Throw.

	* [loader/pe_image.c]
	Fixed broken PE DLL loading.

	* [include/winnt.h] [scheduler/handle.c] [scheduler/*.c]
	Implemented handle access rights.
	Added Get/SetHandleInformation.

Sun Feb 15 09:45:23 1997  Andreas Mohr <100.30936@germany.net>

	* [misc/winsock.c]
	Fixed bug in WSACleanup which lead to crashes in WINSOCK_HandleIO.

	* [graphics/fontengine.c] [include/font.h]
	Minor improvements.

	* [memory/global.c]
	Implemented GlobalEntryHandle.

	* [misc/toolhelp.c]
	Fixed a memory bug in Notify*register.

	* [misc/w32scomb.c]
	Improved Get16DLLAddress.

	* [objects/gdiobj.c]
	Implemented GdiSeeGdiDo.


Sat Feb 14 14:57:39 1998  John Richardson <jrichard@zko.dec.com>

	* [win32/console.c]
	Added the console implementation, AllocConsole, FreeConsole,
	CONSOLE_InheritConsole.

	* [documentation/console]
	Some documentation on the console.

	* [include/winerror.h]
	Added some error defines.

	* [scheduler/k32obj.c]
	Registered the scheduler ops.

Fri Feb 13 19:35:35 1998  James Moody  <013263m@dragon.acadiau.ca>

	* [ole/ole2nls.c]
	Some English language fixes for missing values.

	* [controls/listbox.c]
	Fix to allow an empty listbox to deselect all items.

	* [relay32/user32.spec] [windows/keyboard.c]
	CreateAcceleratorTableA stub method.

	* [windows/sysmetrics.c]
	Added missing SM_CXCURSOR & SM_CYCURSOR initializers.

	* [windows/message.c]
	PostThreadMessage32A stub method.

Fri Feb 13 17:12:24 1998  Jim Peterson <jspeter@roanoke.infi.net>

	* [libtest/hello3res.rc] [libtest/hello3.c] [libtest/Makefile.in]
	Updated the 'hello3' test so that it functions properly again.

Fri Feb 13 14:08:07 1998  Martin Boehme  <boehme@informatik.mu-luebeck.de>
	
	* [graphics/mapping.c]
	Fixed the embarrassing bugs I introduced into DPtoLP and
	LPtoDP.

	* [windows/scroll.c]
	Prevent ScrollWindow32 from sending WM_ERASEBKGND.

Thu Feb 12 22:46:53 1998  Huw D M Davies <h.davies1@physics.oxford.ac.uk>

	* [objects/metafile] [include/ldt.h]
	Fix to cope with records longer than 64K.

	* [windows/clipboard.c]
	Clean up bitmaps and metapicts properly.

Mon Feb  3 21:52:18 1998  Karl Backström <karl_b@geocities.com>

	* [programs/winhelp/Sw.rc] [resources/sysres_Sw.rc]
	Minor update of Swedish language support.
diff --git a/tsx11/Makefile.in b/tsx11/Makefile.in
index 4f935a1..2f20d13 100644
--- a/tsx11/Makefile.in
+++ b/tsx11/Makefile.in
@@ -10,8 +10,7 @@
 	ts_xlib.c \
 	ts_xresource.c \
 	ts_xutil.c \
-	ts_xpm.c \
-	tsx11defs.c
+	ts_xpm.c
 
 all: $(MODULE).o
 
diff --git a/tsx11/X11_calls b/tsx11/X11_calls
index 4b442df..856ddf7 100644
--- a/tsx11/X11_calls
+++ b/tsx11/X11_calls
@@ -2,7 +2,7 @@
 # protected by a critical section for multi-threaded use.
 #
 # To add a new call, put it on this list and run tools/make_X11wrappers.
-# Also read the comments at the top of tools_make_X11wrappers.
+# Also read the comments at the top of tools/make_X11wrappers.
 #
 XActivateScreenSaver
 XAddPixel
@@ -53,6 +53,7 @@
 XFindContext
 XFlush
 XFree
+XFreeColormap
 XFreeColors
 XFreeCursor
 XFreeFont
@@ -68,9 +69,9 @@
 XGetKeyboardControl
 XGetKeyboardMapping
 XGetModifierMapping
-XGetPixel
 XGetScreenSaver
 XGetSelectionOwner
+XGetVisualInfo
 XGetWMSizeHints
 XGetWindowAttributes
 XGetWindowProperty
@@ -98,7 +99,6 @@
 XPolygonRegion
 XPutBackEvent
 XPutImage
-XPutPixel
 XQueryColor
 XQueryPointer
 XQueryTree
diff --git a/tsx11/ts_xlib.c b/tsx11/ts_xlib.c
index 6ae7f4f..765e52d 100644
--- a/tsx11/ts_xlib.c
+++ b/tsx11/ts_xlib.c
@@ -1,12 +1,11 @@
 /*
  * Thread safe wrappers around Xlib calls.
  * This file was generated automatically by tools/make_X11wrappers
- *
- * Copyright 1998 Kristian Nielsen
+ * DO NOT EDIT!
  */
 
 #include <X11/Xlib.h>
-#include "tsx11defs.h"
+#include "x11drv.h"
 #include "stddebug.h"
 #include "debug.h"
 
@@ -14,9 +13,9 @@
 {
   XFontStruct * r;
   dprintf_x11(stddeb, "Call XLoadQueryFont\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XLoadQueryFont(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XLoadQueryFont\n");
   return r;
 }
@@ -25,9 +24,9 @@
 {
   XModifierKeymap	* r;
   dprintf_x11(stddeb, "Call XGetModifierMapping\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetModifierMapping(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetModifierMapping\n");
   return r;
 }
@@ -36,9 +35,9 @@
 {
   XImage * r;
   dprintf_x11(stddeb, "Call XCreateImage\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreateImage(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreateImage\n");
   return r;
 }
@@ -47,9 +46,9 @@
 {
   XImage * r;
   dprintf_x11(stddeb, "Call XGetImage\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetImage(a0, a1, a2, a3, a4, a5, a6, a7);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetImage\n");
   return r;
 }
@@ -58,9 +57,9 @@
 {
   Display * r;
   dprintf_x11(stddeb, "Call XOpenDisplay\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XOpenDisplay(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XOpenDisplay\n");
   return r;
 }
@@ -68,9 +67,9 @@
 void  TSXrmInitialize(void)
 {
   dprintf_x11(stddeb, "Call XrmInitialize\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   XrmInitialize();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XrmInitialize\n");
 }
 
@@ -78,9 +77,9 @@
 {
   char * r;
   dprintf_x11(stddeb, "Call XGetAtomName\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetAtomName(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetAtomName\n");
   return r;
 }
@@ -89,9 +88,9 @@
 {
   char * r;
   dprintf_x11(stddeb, "Call XKeysymToString\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XKeysymToString(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XKeysymToString\n");
   return r;
 }
@@ -100,9 +99,9 @@
 {
   Atom  r;
   dprintf_x11(stddeb, "Call XInternAtom\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XInternAtom(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XInternAtom\n");
   return r;
 }
@@ -111,9 +110,9 @@
 {
   Colormap  r;
   dprintf_x11(stddeb, "Call XCreateColormap\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreateColormap(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreateColormap\n");
   return r;
 }
@@ -122,9 +121,9 @@
 {
   Cursor  r;
   dprintf_x11(stddeb, "Call XCreatePixmapCursor\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreatePixmapCursor(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreatePixmapCursor\n");
   return r;
 }
@@ -133,9 +132,9 @@
 {
   Cursor  r;
   dprintf_x11(stddeb, "Call XCreateFontCursor\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreateFontCursor(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreateFontCursor\n");
   return r;
 }
@@ -144,9 +143,9 @@
 {
   GC  r;
   dprintf_x11(stddeb, "Call XCreateGC\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreateGC(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreateGC\n");
   return r;
 }
@@ -155,9 +154,9 @@
 {
   Pixmap  r;
   dprintf_x11(stddeb, "Call XCreatePixmap\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreatePixmap(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreatePixmap\n");
   return r;
 }
@@ -166,9 +165,9 @@
 {
   Pixmap  r;
   dprintf_x11(stddeb, "Call XCreateBitmapFromData\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreateBitmapFromData(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreateBitmapFromData\n");
   return r;
 }
@@ -177,9 +176,9 @@
 {
   Window  r;
   dprintf_x11(stddeb, "Call XGetSelectionOwner\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetSelectionOwner(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetSelectionOwner\n");
   return r;
 }
@@ -188,9 +187,9 @@
 {
   Window  r;
   dprintf_x11(stddeb, "Call XCreateWindow\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreateWindow(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreateWindow\n");
   return r;
 }
@@ -199,9 +198,9 @@
 {
   char ** r;
   dprintf_x11(stddeb, "Call XListFonts\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XListFonts(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XListFonts\n");
   return r;
 }
@@ -210,9 +209,9 @@
 {
   KeySym  r;
   dprintf_x11(stddeb, "Call XKeycodeToKeysym\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XKeycodeToKeysym(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XKeycodeToKeysym\n");
   return r;
 }
@@ -221,9 +220,9 @@
 {
   KeySym  r;
   dprintf_x11(stddeb, "Call XLookupKeysym\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XLookupKeysym(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XLookupKeysym\n");
   return r;
 }
@@ -232,9 +231,9 @@
 {
   KeySym * r;
   dprintf_x11(stddeb, "Call XGetKeyboardMapping\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetKeyboardMapping(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetKeyboardMapping\n");
   return r;
 }
@@ -243,9 +242,9 @@
 {
   char * r;
   dprintf_x11(stddeb, "Call XResourceManagerString\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XResourceManagerString(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XResourceManagerString\n");
   return r;
 }
@@ -254,9 +253,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XInitThreads\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XInitThreads();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XInitThreads\n");
   return r;
 }
@@ -265,9 +264,9 @@
 {
   int * r;
   dprintf_x11(stddeb, "Call XListDepths\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XListDepths(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XListDepths\n");
   return r;
 }
@@ -276,9 +275,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XReconfigureWMWindow\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XReconfigureWMWindow(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XReconfigureWMWindow\n");
   return r;
 }
@@ -287,9 +286,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XSetWMProtocols\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetWMProtocols(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetWMProtocols\n");
   return r;
 }
@@ -298,9 +297,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetTransientForHint\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetTransientForHint(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetTransientForHint\n");
   return r;
 }
@@ -309,9 +308,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XActivateScreenSaver\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XActivateScreenSaver(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XActivateScreenSaver\n");
   return r;
 }
@@ -320,9 +319,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XAllocColor\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XAllocColor(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XAllocColor\n");
   return r;
 }
@@ -331,9 +330,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XAllocColorCells\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XAllocColorCells(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XAllocColorCells\n");
   return r;
 }
@@ -342,9 +341,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XBell\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XBell(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XBell\n");
   return r;
 }
@@ -353,9 +352,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XChangeGC\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XChangeGC(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XChangeGC\n");
   return r;
 }
@@ -364,9 +363,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XChangeKeyboardControl\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XChangeKeyboardControl(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XChangeKeyboardControl\n");
   return r;
 }
@@ -375,9 +374,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XChangeProperty\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XChangeProperty(a0, a1, a2, a3, a4, a5, a6, a7);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XChangeProperty\n");
   return r;
 }
@@ -386,9 +385,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XChangeWindowAttributes\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XChangeWindowAttributes(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XChangeWindowAttributes\n");
   return r;
 }
@@ -397,9 +396,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XCheckTypedWindowEvent\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCheckTypedWindowEvent(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCheckTypedWindowEvent\n");
   return r;
 }
@@ -408,9 +407,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XCheckWindowEvent\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCheckWindowEvent(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCheckWindowEvent\n");
   return r;
 }
@@ -419,9 +418,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XConvertSelection\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XConvertSelection(a0, a1, a2, a3, a4, a5);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XConvertSelection\n");
   return r;
 }
@@ -430,9 +429,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XCopyArea\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCopyArea(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCopyArea\n");
   return r;
 }
@@ -441,9 +440,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XCopyPlane\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCopyPlane(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCopyPlane\n");
   return r;
 }
@@ -452,9 +451,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDefineCursor\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDefineCursor(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDefineCursor\n");
   return r;
 }
@@ -463,9 +462,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDestroyWindow\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDestroyWindow(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDestroyWindow\n");
   return r;
 }
@@ -474,9 +473,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDisplayKeycodes\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDisplayKeycodes(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDisplayKeycodes\n");
   return r;
 }
@@ -485,9 +484,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawArc\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawArc(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawArc\n");
   return r;
 }
@@ -496,9 +495,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawLine\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawLine(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawLine\n");
   return r;
 }
@@ -507,9 +506,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawLines\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawLines(a0, a1, a2, a3, a4, a5);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawLines\n");
   return r;
 }
@@ -518,9 +517,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawPoint\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawPoint(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawPoint\n");
   return r;
 }
@@ -529,9 +528,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawRectangle\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawRectangle(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawRectangle\n");
   return r;
 }
@@ -540,9 +539,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawSegments\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawSegments(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawSegments\n");
   return r;
 }
@@ -551,9 +550,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawString\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawString(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawString\n");
   return r;
 }
@@ -562,9 +561,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDrawText\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDrawText(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDrawText\n");
   return r;
 }
@@ -573,9 +572,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFillArc\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFillArc(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFillArc\n");
   return r;
 }
@@ -584,9 +583,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFillPolygon\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFillPolygon(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFillPolygon\n");
   return r;
 }
@@ -595,9 +594,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFillRectangle\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFillRectangle(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFillRectangle\n");
   return r;
 }
@@ -606,9 +605,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFlush\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFlush(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFlush\n");
   return r;
 }
@@ -617,20 +616,31 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFree\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFree(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFree\n");
   return r;
 }
 
+int  TSXFreeColormap(Display* a0, Colormap a1)
+{
+  int  r;
+  dprintf_x11(stddeb, "Call XFreeColormap\n");
+  EnterCriticalSection( &X11DRV_CritSection );
+  r = XFreeColormap(a0, a1);
+  LeaveCriticalSection( &X11DRV_CritSection );
+  dprintf_x11(stddeb, "Ret XFreeColormap\n");
+  return r;
+}
+
 int  TSXFreeColors(Display* a0, Colormap a1, unsigned long* a2, int a3, unsigned long a4)
 {
   int  r;
   dprintf_x11(stddeb, "Call XFreeColors\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFreeColors(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFreeColors\n");
   return r;
 }
@@ -639,9 +649,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFreeCursor\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFreeCursor(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFreeCursor\n");
   return r;
 }
@@ -650,9 +660,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFreeFont\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFreeFont(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFreeFont\n");
   return r;
 }
@@ -661,9 +671,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFreeFontNames\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFreeFontNames(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFreeFontNames\n");
   return r;
 }
@@ -672,9 +682,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFreeGC\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFreeGC(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFreeGC\n");
   return r;
 }
@@ -683,9 +693,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFreeModifiermap\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFreeModifiermap(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFreeModifiermap\n");
   return r;
 }
@@ -694,9 +704,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFreePixmap\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFreePixmap(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFreePixmap\n");
   return r;
 }
@@ -705,9 +715,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XGetFontProperty\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetFontProperty(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetFontProperty\n");
   return r;
 }
@@ -716,9 +726,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XGetGeometry\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetGeometry(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetGeometry\n");
   return r;
 }
@@ -727,9 +737,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XGetInputFocus\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetInputFocus(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetInputFocus\n");
   return r;
 }
@@ -738,9 +748,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XGetKeyboardControl\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetKeyboardControl(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetKeyboardControl\n");
   return r;
 }
@@ -749,9 +759,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XGetScreenSaver\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetScreenSaver(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetScreenSaver\n");
   return r;
 }
@@ -760,9 +770,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XGetWindowProperty\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetWindowProperty(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetWindowProperty\n");
   return r;
 }
@@ -771,9 +781,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XGetWindowAttributes\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetWindowAttributes(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetWindowAttributes\n");
   return r;
 }
@@ -782,9 +792,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XGrabPointer\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGrabPointer(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGrabPointer\n");
   return r;
 }
@@ -793,9 +803,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XGrabServer\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGrabServer(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGrabServer\n");
   return r;
 }
@@ -804,9 +814,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XInstallColormap\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XInstallColormap(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XInstallColormap\n");
   return r;
 }
@@ -815,9 +825,9 @@
 {
   KeyCode  r;
   dprintf_x11(stddeb, "Call XKeysymToKeycode\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XKeysymToKeycode(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XKeysymToKeycode\n");
   return r;
 }
@@ -826,9 +836,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XMapWindow\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XMapWindow(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XMapWindow\n");
   return r;
 }
@@ -837,9 +847,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XNextEvent\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XNextEvent(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XNextEvent\n");
   return r;
 }
@@ -848,9 +858,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XParseGeometry\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XParseGeometry(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XParseGeometry\n");
   return r;
 }
@@ -859,9 +869,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XPending\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XPending(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XPending\n");
   return r;
 }
@@ -870,9 +880,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XPutBackEvent\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XPutBackEvent(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XPutBackEvent\n");
   return r;
 }
@@ -881,9 +891,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XPutImage\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XPutImage(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XPutImage\n");
   return r;
 }
@@ -892,9 +902,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XQueryColor\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XQueryColor(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XQueryColor\n");
   return r;
 }
@@ -903,9 +913,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XQueryPointer\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XQueryPointer(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XQueryPointer\n");
   return r;
 }
@@ -914,9 +924,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XQueryTree\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XQueryTree(a0, a1, a2, a3, a4, a5);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XQueryTree\n");
   return r;
 }
@@ -925,9 +935,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XResetScreenSaver\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XResetScreenSaver(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XResetScreenSaver\n");
   return r;
 }
@@ -936,9 +946,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XRestackWindows\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XRestackWindows(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XRestackWindows\n");
   return r;
 }
@@ -947,9 +957,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XSendEvent\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSendEvent(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSendEvent\n");
   return r;
 }
@@ -958,9 +968,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetArcMode\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetArcMode(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetArcMode\n");
   return r;
 }
@@ -969,9 +979,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetBackground\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetBackground(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetBackground\n");
   return r;
 }
@@ -980,9 +990,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetClipMask\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetClipMask(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetClipMask\n");
   return r;
 }
@@ -991,9 +1001,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetClipOrigin\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetClipOrigin(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetClipOrigin\n");
   return r;
 }
@@ -1002,9 +1012,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetClipRectangles\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetClipRectangles(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetClipRectangles\n");
   return r;
 }
@@ -1013,9 +1023,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetDashes\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetDashes(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetDashes\n");
   return r;
 }
@@ -1024,9 +1034,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetFillStyle\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetFillStyle(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetFillStyle\n");
   return r;
 }
@@ -1035,9 +1045,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetForeground\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetForeground(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetForeground\n");
   return r;
 }
@@ -1046,9 +1056,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetFunction\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetFunction(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetFunction\n");
   return r;
 }
@@ -1057,9 +1067,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetGraphicsExposures\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetGraphicsExposures(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetGraphicsExposures\n");
   return r;
 }
@@ -1068,9 +1078,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetIconName\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetIconName(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetIconName\n");
   return r;
 }
@@ -1079,9 +1089,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetInputFocus\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetInputFocus(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetInputFocus\n");
   return r;
 }
@@ -1090,9 +1100,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetLineAttributes\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetLineAttributes(a0, a1, a2, a3, a4, a5);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetLineAttributes\n");
   return r;
 }
@@ -1101,9 +1111,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetScreenSaver\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetScreenSaver(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetScreenSaver\n");
   return r;
 }
@@ -1112,9 +1122,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetSelectionOwner\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetSelectionOwner(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetSelectionOwner\n");
   return r;
 }
@@ -1123,9 +1133,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetSubwindowMode\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetSubwindowMode(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetSubwindowMode\n");
   return r;
 }
@@ -1134,9 +1144,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XStoreColor\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XStoreColor(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XStoreColor\n");
   return r;
 }
@@ -1145,9 +1155,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XStoreName\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XStoreName(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XStoreName\n");
   return r;
 }
@@ -1156,9 +1166,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSync\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSync(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSync\n");
   return r;
 }
@@ -1167,9 +1177,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XTextExtents\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XTextExtents(a0, a1, a2, a3, a4, a5, a6);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XTextExtents\n");
   return r;
 }
@@ -1178,9 +1188,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XTextWidth\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XTextWidth(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XTextWidth\n");
   return r;
 }
@@ -1189,9 +1199,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XUngrabPointer\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XUngrabPointer(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XUngrabPointer\n");
   return r;
 }
@@ -1200,9 +1210,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XUngrabServer\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XUngrabServer(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XUngrabServer\n");
   return r;
 }
@@ -1211,9 +1221,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XUninstallColormap\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XUninstallColormap(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XUninstallColormap\n");
   return r;
 }
@@ -1222,9 +1232,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XUnmapWindow\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XUnmapWindow(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XUnmapWindow\n");
   return r;
 }
@@ -1233,9 +1243,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XWarpPointer\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XWarpPointer(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XWarpPointer\n");
   return r;
 }
@@ -1244,9 +1254,9 @@
 {
   int (*r)(Display *);
   dprintf_x11(stddeb, "Call XSynchronize\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSynchronize(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSynchronize\n");
   return r;
 }
@@ -1256,8 +1266,8 @@
 void TS_XInitImageFuncPtrs(XImage *a0)
 {
   dprintf_x11(stddeb, "Call _XInitImageFuncPtrs\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   _XInitImageFuncPtrs(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret _XInitImageFuncPtrs\n");
 }
diff --git a/tsx11/ts_xpm.c b/tsx11/ts_xpm.c
index 10cb12f..26b2dc9 100644
--- a/tsx11/ts_xpm.c
+++ b/tsx11/ts_xpm.c
@@ -1,12 +1,11 @@
 /*
  * Thread safe wrappers around xpm calls.
  * This file was generated automatically by tools/make_X11wrappers
- *
- * Copyright 1998 Kristian Nielsen
+ * DO NOT EDIT!
  */
 
 #include <X11/xpm.h>
-#include "tsx11defs.h"
+#include "x11drv.h"
 #include "stddebug.h"
 #include "debug.h"
 
@@ -14,9 +13,9 @@
 {
   int r;
   dprintf_x11(stddeb, "Call XpmCreatePixmapFromData\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XpmCreatePixmapFromData(a0, a1, a2, a3, a4, a5);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XpmCreatePixmapFromData\n");
   return r;
 }
@@ -25,9 +24,9 @@
 {
   int r;
   dprintf_x11(stddeb, "Call XpmAttributesSize\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XpmAttributesSize();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XpmAttributesSize\n");
   return r;
 }
diff --git a/tsx11/ts_xresource.c b/tsx11/ts_xresource.c
index cb173d0..4eda899 100644
--- a/tsx11/ts_xresource.c
+++ b/tsx11/ts_xresource.c
@@ -1,13 +1,12 @@
 /*
  * Thread safe wrappers around Xresource calls.
  * This file was generated automatically by tools/make_X11wrappers
- *
- * Copyright 1998 Kristian Nielsen
+ * DO NOT EDIT!
  */
 
 #include <X11/Xlib.h>
 #include <X11/Xresource.h>
-#include "tsx11defs.h"
+#include "x11drv.h"
 #include "stddebug.h"
 #include "debug.h"
 
@@ -15,9 +14,9 @@
 {
   XrmQuark  r;
   dprintf_x11(stddeb, "Call XrmUniqueQuark\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XrmUniqueQuark();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XrmUniqueQuark\n");
   return r;
 }
@@ -26,9 +25,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XrmGetResource\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XrmGetResource(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XrmGetResource\n");
   return r;
 }
@@ -37,9 +36,9 @@
 {
   XrmDatabase  r;
   dprintf_x11(stddeb, "Call XrmGetFileDatabase\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XrmGetFileDatabase(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XrmGetFileDatabase\n");
   return r;
 }
@@ -48,9 +47,9 @@
 {
   XrmDatabase  r;
   dprintf_x11(stddeb, "Call XrmGetStringDatabase\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XrmGetStringDatabase(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XrmGetStringDatabase\n");
   return r;
 }
@@ -58,17 +57,17 @@
 void  TSXrmMergeDatabases(XrmDatabase a0, XrmDatabase* a1)
 {
   dprintf_x11(stddeb, "Call XrmMergeDatabases\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   XrmMergeDatabases(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XrmMergeDatabases\n");
 }
 
 void  TSXrmParseCommand(XrmDatabase* a0, XrmOptionDescList a1, int a2, const  char* a3, int* a4, char** a5)
 {
   dprintf_x11(stddeb, "Call XrmParseCommand\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   XrmParseCommand(a0, a1, a2, a3, a4, a5);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XrmParseCommand\n");
 }
diff --git a/tsx11/ts_xshm.c b/tsx11/ts_xshm.c
index 0071cb5..ff5ee60 100644
--- a/tsx11/ts_xshm.c
+++ b/tsx11/ts_xshm.c
@@ -1,13 +1,12 @@
 /*
  * Thread safe wrappers around XShm calls.
  * This file was generated automatically by tools/make_X11wrappers
- *
- * Copyright 1998 Kristian Nielsen
+ * DO NOT EDIT!
  */
 
 #include <X11/Xlib.h>
 #include <X11/extensions/XShm.h>
-#include "tsx11defs.h"
+#include "x11drv.h"
 #include "stddebug.h"
 #include "debug.h"
 
@@ -15,9 +14,9 @@
 {
   Bool r;
   dprintf_x11(stddeb, "Call XShmQueryExtension\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XShmQueryExtension(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XShmQueryExtension\n");
   return r;
 }
@@ -26,9 +25,9 @@
 {
   int r;
   dprintf_x11(stddeb, "Call XShmPixmapFormat\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XShmPixmapFormat(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XShmPixmapFormat\n");
   return r;
 }
@@ -37,9 +36,9 @@
 {
   Status r;
   dprintf_x11(stddeb, "Call XShmDetach\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XShmDetach(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XShmDetach\n");
   return r;
 }
@@ -48,9 +47,9 @@
 {
   Status r;
   dprintf_x11(stddeb, "Call XShmAttach\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XShmAttach(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XShmAttach\n");
   return r;
 }
diff --git a/tsx11/ts_xutil.c b/tsx11/ts_xutil.c
index d2ea0d3..cd499bb 100644
--- a/tsx11/ts_xutil.c
+++ b/tsx11/ts_xutil.c
@@ -1,14 +1,13 @@
 /*
  * Thread safe wrappers around Xutil calls.
  * This file was generated automatically by tools/make_X11wrappers
- *
- * Copyright 1998 Kristian Nielsen
+ * DO NOT EDIT!
  */
 
 #include <X11/Xlib.h>
 #include <X11/Xresource.h>
 #include <X11/Xutil.h>
-#include "tsx11defs.h"
+#include "x11drv.h"
 #include "stddebug.h"
 #include "debug.h"
 
@@ -16,9 +15,9 @@
 {
   XClassHint * r;
   dprintf_x11(stddeb, "Call XAllocClassHint\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XAllocClassHint();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XAllocClassHint\n");
   return r;
 }
@@ -27,9 +26,9 @@
 {
   XSizeHints * r;
   dprintf_x11(stddeb, "Call XAllocSizeHints\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XAllocSizeHints();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XAllocSizeHints\n");
   return r;
 }
@@ -38,9 +37,9 @@
 {
   XWMHints * r;
   dprintf_x11(stddeb, "Call XAllocWMHints\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XAllocWMHints();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XAllocWMHints\n");
   return r;
 }
@@ -49,9 +48,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XClipBox\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XClipBox(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XClipBox\n");
   return r;
 }
@@ -60,9 +59,9 @@
 {
   Region  r;
   dprintf_x11(stddeb, "Call XCreateRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XCreateRegion();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XCreateRegion\n");
   return r;
 }
@@ -71,9 +70,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDeleteContext\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDeleteContext(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDeleteContext\n");
   return r;
 }
@@ -82,9 +81,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XDestroyRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDestroyRegion(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDestroyRegion\n");
   return r;
 }
@@ -93,9 +92,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XEmptyRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XEmptyRegion(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XEmptyRegion\n");
   return r;
 }
@@ -104,9 +103,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XEqualRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XEqualRegion(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XEqualRegion\n");
   return r;
 }
@@ -115,20 +114,31 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XFindContext\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XFindContext(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XFindContext\n");
   return r;
 }
 
+XVisualInfo * TSXGetVisualInfo(Display* a0, long a1, XVisualInfo* a2, int* a3)
+{
+  XVisualInfo * r;
+  dprintf_x11(stddeb, "Call XGetVisualInfo\n");
+  EnterCriticalSection( &X11DRV_CritSection );
+  r = XGetVisualInfo(a0, a1, a2, a3);
+  LeaveCriticalSection( &X11DRV_CritSection );
+  dprintf_x11(stddeb, "Ret XGetVisualInfo\n");
+  return r;
+}
+
 int   TSXGetWMSizeHints(Display* a0, Window a1, XSizeHints* a2, long* a3, Atom a4)
 {
   int   r;
   dprintf_x11(stddeb, "Call XGetWMSizeHints\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XGetWMSizeHints(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XGetWMSizeHints\n");
   return r;
 }
@@ -137,9 +147,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XIntersectRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XIntersectRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XIntersectRegion\n");
   return r;
 }
@@ -148,9 +158,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XLookupString\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XLookupString(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XLookupString\n");
   return r;
 }
@@ -159,9 +169,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XOffsetRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XOffsetRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XOffsetRegion\n");
   return r;
 }
@@ -170,9 +180,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XPointInRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XPointInRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XPointInRegion\n");
   return r;
 }
@@ -181,9 +191,9 @@
 {
   Region  r;
   dprintf_x11(stddeb, "Call XPolygonRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XPolygonRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XPolygonRegion\n");
   return r;
 }
@@ -192,9 +202,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XRectInRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XRectInRegion(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XRectInRegion\n");
   return r;
 }
@@ -203,9 +213,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSaveContext\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSaveContext(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSaveContext\n");
   return r;
 }
@@ -213,18 +223,18 @@
 void  TSXSetWMProperties(Display* a0, Window a1, XTextProperty* a2, XTextProperty* a3, char** a4, int a5, XSizeHints* a6, XWMHints* a7, XClassHint* a8)
 {
   dprintf_x11(stddeb, "Call XSetWMProperties\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   XSetWMProperties(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetWMProperties\n");
 }
 
 void  TSXSetWMSizeHints(Display* a0, Window a1, XSizeHints* a2, Atom a3)
 {
   dprintf_x11(stddeb, "Call XSetWMSizeHints\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   XSetWMSizeHints(a0, a1, a2, a3);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetWMSizeHints\n");
 }
 
@@ -232,9 +242,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSetRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSetRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSetRegion\n");
   return r;
 }
@@ -243,9 +253,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XShrinkRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XShrinkRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XShrinkRegion\n");
   return r;
 }
@@ -254,9 +264,9 @@
 {
   int   r;
   dprintf_x11(stddeb, "Call XStringListToTextProperty\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XStringListToTextProperty(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XStringListToTextProperty\n");
   return r;
 }
@@ -265,9 +275,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XSubtractRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSubtractRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSubtractRegion\n");
   return r;
 }
@@ -276,9 +286,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XUnionRectWithRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XUnionRectWithRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XUnionRectWithRegion\n");
   return r;
 }
@@ -287,9 +297,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XUnionRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XUnionRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XUnionRegion\n");
   return r;
 }
@@ -298,9 +308,9 @@
 {
   int  r;
   dprintf_x11(stddeb, "Call XXorRegion\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XXorRegion(a0, a1, a2);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XXorRegion\n");
   return r;
 }
@@ -309,42 +319,20 @@
 {
   int r;
   dprintf_x11(stddeb, "Call XDestroyImage\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XDestroyImage(a0);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XDestroyImage\n");
   return r;
 }
 
-unsigned long TSXGetPixel(struct _XImage *a0, int a1, int a2)
-{
-  unsigned long r;
-  dprintf_x11(stddeb, "Call XGetPixel\n");
-  X11_LOCK();
-  r = XGetPixel(a0, a1, a2);
-  X11_UNLOCK();
-  dprintf_x11(stddeb, "Ret XGetPixel\n");
-  return r;
-}
-
-int TSXPutPixel(struct _XImage *a0, int a1, int a2, unsigned long a3)
-{
-  int r;
-  dprintf_x11(stddeb, "Call XPutPixel\n");
-  X11_LOCK();
-  r = XPutPixel(a0, a1, a2, a3);
-  X11_UNLOCK();
-  dprintf_x11(stddeb, "Ret XPutPixel\n");
-  return r;
-}
-
 struct _XImage * TSXSubImage(struct _XImage *a0, int a1, int a2, unsigned int a3, unsigned int a4)
 {
   struct _XImage * r;
   dprintf_x11(stddeb, "Call XSubImage\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XSubImage(a0, a1, a2, a3, a4);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XSubImage\n");
   return r;
 }
@@ -353,9 +341,9 @@
 {
   int r;
   dprintf_x11(stddeb, "Call XAddPixel\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XAddPixel(a0, a1);
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XAddPixel\n");
   return r;
 }
@@ -364,9 +352,9 @@
 {
   XContext r;
   dprintf_x11(stddeb, "Call XUniqueContext\n");
-  X11_LOCK();
+  EnterCriticalSection( &X11DRV_CritSection );
   r = XUniqueContext();
-  X11_UNLOCK();
+  LeaveCriticalSection( &X11DRV_CritSection );
   dprintf_x11(stddeb, "Ret XUniqueContext\n");
   return r;
 }
diff --git a/tsx11/tsx11defs.c b/tsx11/tsx11defs.c
deleted file mode 100644
index 3713852..0000000
--- a/tsx11/tsx11defs.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Thread safe wrappers around XShm calls.
- *
- * Copyright 1998 Kristian Nielsen
- */
-
-#include "tsx11defs.h"
-#include "stddebug.h"
-#include "debug.h"
-
-CRITICAL_SECTION *TSX11_SectionPtr = NULL;
-static CRITICAL_SECTION TSX11_Section;
-
-int TSX11_Init(void)
-{
-    InitializeCriticalSection( &TSX11_Section );
-    dprintf_x11(stddeb, "TSX11_Init: X11 critical section is %p\n",
-                &TSX11_Section);
-    TSX11_SectionPtr = &TSX11_Section;
-    return TRUE;
-}