Release 980927

Sun Sep 27 14:25:38 1998  Petter Reinholdtsen <pere@td.org.uit.no>

	* [files/drive.c]
	Make sure GetDriveType32A() handles param NULL.  Added some
	doc on function.

Sun Sep 27 14:07:26 1998  Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>

	* [controls/edit.c] [windows/win.c]
	Don't call SetWindowLong() in EDIT_WM_NCREATE.
	Fix SetWindowLong(GWL_[EX]STYLE) to work for 16bit windows. Remove
	UpdateWindow() call. 

Sun Sep 27 13:41:22 1998  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [scheduler/*.c] [server/event.c] [server/mutex.c]
	  [server/semaphore.c]
	Implemented server-side synchronisation objects.

Sun Sep 27 01:13:35 1998  Alex Priem <alexp@sci.kun.nl>

	* [dlls/comctl32/treeview.c] [include/treeview.h] [include/comctl.h]
	Treeview implementation.

	* [dlls/comctl32/trackbar.c] [include/trackbar.h] 
	Trackbar implementation.

Sat Sep 26 20:49:13 1998  Ulrich Weigand <weigand@informatik.uni-erlangen.de>

	* [if1632/thunk.c] [tools/build.c] [win32/kernel32.c]
	Bugfix: several problems with flat thunks fixed.

	* [memory/selector.c]
	Bugfix: IsBad...Ptr16 didn't work for limit_in_pages segments.

	* [scheduler/thread.c]
	Bugfix: CreateThread: Allow id parameter == NULL.

	* [objects/gdiobj.c]
	Bugfix: IsGDIObject: Return correct object type for stock objects.

	* [msdos/dpmi.c]
	Bugfix: fixed typo in INT_DoRealModeInt.

	* [msdos/int21.c]
	Bugfix: int21 READ *must* use WIN16_hread, not _hread16.

	* [if1632/kernel.spec] [if1632/dummy.c] [if1632/thunk.c]
	  [loader/ne/module.c] [scheduler/event.c] [scheduler/synchro.c]
	  [scheduler/thread.c] [win32/kernel32.c] [win32/ordinals.c]
	Added names/stubs for all undocumented KERNEL routines (Win95).
	Added the following undoc. 16-bit equivalents to Win32 routines:
	KERNEL.441-443,449-453,456-462,471-476,479-486,488.
	Added stubs for some other KERNEL routines.

	* [memory/heap.c] [memory/global.c] [include/global.h]
	Implemented Local32... 32-bit local heap routines (KERNEL.208-215, 229).

	* [miscemu/instr.c] [loader/module.c] [include/module.h]
	Implemented __GP fault handling and HasGPHandler (KERNEL.338).

	* [misc/error.c]
	Implemented LogParamErrorRegs (KERNEL.327).

	* [loader/task.c] [include/windows.h]
	Implemented GetCodeInfo (KERNEL.104).

	* [loader/task.c] [scheduler/thread.c] [include/thread.h]
	Implemented [GS]etThreadQueue and [GS]etFastQueue (KERNEL.463/4, 624/5).

	* [if1632/gdi.spec] [objects/dc.c] [objects/dib.c]
	  [objects/bitmap.c] [include/windows.h]
	Bugfix: fixed wrong parameter for CreateDIBSection16.
	Added [GS]etDIBColorTable16, stub for GetBoundsRect16.
	Partially implemented BITMAP_GetObject16 for DIBs.

	* [if1632/gdi.spec] [relay32/gdi32.spec] [objects/palette.c]
	Added some GDI stubs.

	* [if1632/Makefile.in] [if1632/display.spec] [if1632/mouse.spec]
	  [if1632/keyboard.spec] [if1632/builtin.c] [windows/keyboard.c]
	Added some stubs for Win16 drivers: KEYBOARD, MOUSE, DISPLAY.

	* [if1632/wprocs.spec] [msdos/vxd.c]
	Added some stubs for VxDs: VMM, ConfigMG, TimerAPI.

	* [msdos/int2f.c]
	Added some stubs for real-mode network drivers.

Sat Sep 26 18:18:18 1998  Marcus Meissner <marcus@jet.franken.de>

	* [configure.in]
	Merged in some more of the FreeBSD ports/emulators/wine patches. 
	(Maintainer(s) of this port: You can just submit these
	patches to Alexandre directly.)

	 * [loader/pe_image.c]
	Check filesize of image against size derived from header
	to spot truncated executeables without crashing.

	* [files/directory.c]
	Set envvar "COMSPEC". One win32(!!) program crashes without it.

	* [multimedia/mmio.c]
	Added mmioSetInfo32.

	* [include/file.h]
	Return STD_ERROR_HANDLE for AUX and PRT dos handles.

	* [loader/module.c]
	Handle executeables with spaces in their names a bit better in
	CreateProcess.

	* [relay32/msvfw32.spec][if1632/msvideo.spec][multimedia/msvideo.c][include/vfw.h]
	Started on MS Video support (can load Win32 ICMs).

	* [tools/testrun]
	A bit smarter use of ps.

	* [memory/virtual.c]
	Report PAGE_GUARDed pages as PAGE_PROTECTED (AutoCAD LT R17 fails
	without that check (since Win95 doesn't know about PAGE_GUARD)).

Sat Sep 26 15:04:05 1998  Ove Kaaven <ovek@arcticnet.no>

	* [include/miscemu.h] [if1632/builtin.c] [loader/task.c]
	  [miscemu/instr.c] [msdos/dpmi.c] [msdos/int21.c]
	  [msdos/interrupts.c] [windows/user.c]
	INT_[S|G]etHandler was renamed to INT_[S|G]etPMHandler.
	Added handlers to deal with real-mode interrupts; DOS
	programs are now able to hook real-mode interrupts.

	* [loader/dos/module.c] [msdos/dosmem.c] [msdos/int21.c]
	Moved real-mode interrupt table initialization to
	msdos/dosmem.c, and made new V86 tasks get a full copy
	of the existing "system memory" instead of almost empty
	space. Misc fixes.

	* [include/dosexe.h] [loader/dos/module.c] [msdos/dpmi.c]
	  [msdos/int2f.c]
	First shot at letting DOS programs start up DPMI (but DPMI
	is still disabled for DOS programs, for pkunzip's sake).

	* [include/debugger.h] [debugger/break.c] [debugger/dbg.y]
	  [debugger/registers.c] [debugger/memory.c] [debugger/info.c]
	  [loader/dos/dosvm.c]
	First shot at making Wine's debugger work for DOS programs.
	The -debug flag works, as do "nexti" and "stepi".

Sat Sep 26 13:13:13 1998  Juergen Schmied <juergen.schmied@metronet.de>

	* [dlls/shell32/dataobject.c]
	New classes IEnumFORMATETC implemented, IDataObject stubs.
	
	* [dlls/shell32/*.*][relay32/shell32.spec]
	Bugfixes.
	New: ICM_InsertItem(), ILCreateFromPath().
	Implemented: ILCloneFirst().
	Stubs: ILIsEqual(), ILFindChild(), SHLogILFromFSIL(),
	  PathMatchSpec(), PathIsExe().
	Changed: ILGetSize(), _ILIsDesktop(), PathCombine().

	* [include/shlobj.h]
	New SHLGUID's
	New structures: DVTARGETDEVICE32, STGMEDIUM32, FORMATETC32,
	CLIPFORMAT32.
	New interfaces: IEnumFORMATETC, IDataObject, ICommDlgBrowser
	IDockingWindowFrame, IServiceProvider.

	* [dlls/shell32/folders.c]
	Stubs for IShellLink.

	* [loader/resource.c]
	Small fixes.

	* [misc/crtdll.c][relay32/crtdll.spec]
	New __dllonexit().

	* [windows/message.c]
	SendNotifyMessageA, SendMessageCallBack32A half implemented.

	* [controls/edit.c]
	EDIT_WM_SetText set EF_UPDATE flag not for ES_MULTILINE.

	* [files/file.c]
	Handling of fileposition fixed.

Fri Sep 25 18:13:30 1998  Patrik Stridvall <ps@leissner.se>

	* [include/windows.h] [include/wintypes.h]
	  [ole/ole2nls.h] [relay32/kernel32.spec]
	Implemented EnumDateFormats and EnumTimeFormats.
	Only adds US English support.

	* [Makefile.in] [configure.in] 
	  [dlls/Makefile.in] [dlls/psapi/Makefile.in] 
	  [dlls/psapi/psapi_main.c] 
	New files to implement stubs for PSAPI.DLL (NT only).

	* [relay32/Makefile.in] [relay32/builtin32.c] 
	  [relay32/psapi.spec]
	New spec file for PSAPI.DLL (NT only).

	* [scheduler/handle.c]
	HANDLE_GetObjPtr should only interpret the pseudo handles as the
	current thread or the current process if a thread or a process is
	requested.

	* [include/winversion.h] [misc/version.c]
	Adds the global function VERSION_GetVersion() so functions can
	have different behavior depending on the -winver flag.

	* [include/oledlg.h] [ole/oledlg.c]
	Minor fixes. 

	* [windows/winproc.c]
	Minor changes.

	* [include/imm.h] [misc/imm.c]
	Now returns correct values under both Windows 95 and NT 4.0.

Thu Sep 24 22:11:44 1998  Kristian Nielsen  <kristian.nielsen@risoe.dk>

	* [configure.in] [include/acconfig.h] [include/thread.h]
	  [scheduler/sysdeps.c]
	Autoconfig test for non-reentrant libc.

Wed Sep 23 19:52:12 1998  Matthew Becker <mbecker@glasscity.net>

	* [*/*.c]
	Miscellaneous documentation updates and debugging output 
	standardizations.

	* [objects/clipping.c]
	Added ExtSelectClipRgn.

Wed Sep 23 00:03:28 EDT 1998  Pete Ratzlaff <pratzlaff@cfa.harvard.edu>

	* [include/windows.h] [if1632/user.spec] [relay32/user32.spec]
	  [windows/keyboard.c]
	Added, marginally implemented, GetKeyboardLayoutName().
	Only returns US English keyboard name.

Tue Sep 22 16:32:41 1998  Marcel Baur <mbaur@iiic.ethz.ch>

	* [programs/control/*]
	New Winelib application.

Mon Sep 21 00:29:18 1998  Peter Hunnisett <hunnise@nortel.ca>

	* [include/dplay.h][multimedia/dplay.c][ole/compobj.c]
	Added all DirectPlayLobby interfaces and enhanced DirectPlay
	and DirectPlayLobby support. Still not all that much. Useful
	enough if you just need to start a program, don't try any
	real dplay/lobby stuff.

	* [documentation/status/directplay]
	Added a very little bit.

	* [graphics/ddraw.c]
	- Call to SetWindowLong32A wasn't working because there was no
	  memory set aside when the window class was registered.
	- Fixed some xlib reference counting and change the behaviour
	  of DirectDrawSurface3_SetPalette to mimic observed behaviour
	  (palette is associated will all backbuffers)
	- Also stored all palette colour fields and spit back our saved
	  colour fields rather than query X for them.
	- Added plenty of AddRef and Release traces.
	- Added Xlib support for using -desktop option.
	- Fixed Xlib message handling. Messages weren't being passed to
	  the application. Fixes mouse movements in some xlib DDraw games.
	- Added a few stubs.

	* [windows/win.c][include/winerror.h]
	Fixed up some error handling in WIN_SetWindowLong. SetLastError
	wasn't being used. Could cause problems with 0 return codes.
	Added new error in winerror (1400).

	* [AUTHORS] [include/authors.h]
	Added myself as a Wine author.

Sun Sep 20 21:22:44 1998  Alexander Larsson  <alla@lysator.liu.se>

	* [loader/module.c]
	Changed GetModuleFileName32A so that is returns the
	long version of the filename. Note that just the name
	is long, not the directories.

Sat Sep 19 20:05:30 1998 Per Ångström <pang@mind.nu> 

	* [controls/menu.c]
	Made a couple of fixes to make life easier for applications that alter
	their menus at runtime.

	* [windows/defdlg.c]
	Removed the cast of the return value from dialog procedures to a 16-bit
	bool. The return value needs to retain all its 32 bits, since it is not 
	always a bool, such as when responding to the WM_NCHITTEST message.

Fri Sep 18 11:30:38 1998  Sergey Turchanov <turchanov@usa.net>

	* [loader/resource.c]
	Fixed very funny bug (though gravely affecting further excecution)
	with FindResource[Ex]32 functions.

	* [include/multimon.h] [windows/multimon.c] [relay32/user32.spec]
	  [include/windows.h] [windows/sysmetrics.c]
	Default implementation for Multimonitor API.

	* [include/windows.h] [windows/winpos.c]
	Fixed incorrect declaration (and behaviour) of GetWindowRect32.

Wed Sep 16 10:21:15 1998  Gerard Patel <G.Patel@Wanadoo.fr>

	* [controls/edit.c]
	Fixed EDIT_EM_GetLine to use correctly length of lines.

Tue Sep 15 20:40:16 1998  Eric Kohl <ekohl@abo.rhein-zeitung.de>

	* [misc/tweak.c][include/tweak.h][controls/menu.c]
	Replaced the tweak graphic routines by calls to DrawEdge32().

	* [misc/tweak.c][include/tweak.h][documentation/win95look]
	  [wine.ini][*/*]
	Changed "look and feel" selection. Allows Win3.1, Win95 and
	Win98 (no GUI code implemented) look and feel.

	* [dlls/comctl32/header.c][include/header.h][include/commctrl.h]
	Started callback item support and did some minor improvements.

	* [dlls/comctl32/imagelist.c]
	Fixed bug in transparent image display.
	ImageList_GetIcon is still buggy :-(

	* [dlls/comctl32/toolbar.c]
	Fixed button drawing (partial hack).

	* [dlls/comctl32/commctrl.c]
	Fixed MenuHelp().

	* [controls/button.c]
	Added 3d effect for groupbox.

	* [windows/msgbox.c]
	Added font support for message boxes.

	* [windows/nonclient.c]
	Fixed window moving bug.

	* [dlls/comctl32/*.c]
	Various improvements.

	* [dlls/comctl32/listview.c][dlls/comctl32/rebar.c]
	  [include/commctrl.h]
	More messages.

	* [windows/syscolor.c][include/windows.h]
	Introduced new Win98 system colors.

Tue Sep 15 18:29:45 1998 Wesley Filardo <eightknots@aol.com>

	* [files/profile.c]
	Added support in PROFILE_LoadWineIni for -config option

	* [misc/main.c] [include/options.h]
	Added -config option.

Tue Sep 15 18:22:26 1998  Petter Reinholdtsen <pere@td.org.uit.no>

	* [documentation/Makefile.in]
	Make sure directory exists before installing into it.

Tue Sep 15 01:47:33 1998  Pablo Saratxaga <pablo.sarachaga@ping.be>

	* [ole/nls/*] [ole/ole2nls.c] [include/winnls.h]
	Fixed a few errors and completed some NLS files.

Mon Sep 14 01:23:45 1998  Joseph Pranevich <knight@baltimore.wwaves.com>

	* [include/miscemu.h] [msdos/interrupts.c]
	Removed a compilation warning, added INT 25 to the list of interrupts
	callable from DOS applications, added a debug message when unsupported
	interrupts are used.

Sun Sep 13 19:55:22 1998  Lawson Whitney <lawson_whitney@juno.com>

	* [if1632/relay.c]
	CallProcEx32W should not reverse arguments.

Sun Aug 17 21:18:12 1998  Eric Pouech  <eric.pouech@lemel.fr>

	* [multimedia/midi.c] [multimedia/init.c] [multimedia/mmsys.c] 
	  [include/multimedia.h] [include/mmsystem.h] 
	  [multimedia/Makefile.in] [multimedia/midipatch.c]
	  [if1632/multimedia.spec]
	Made MIDI input and output functional on OSS capable systems.

	* [multimedia/timer.c]
	Changes to trigger callbacks at the accurate pace even when
	fake timers are used.
diff --git a/graphics/ddraw.c b/graphics/ddraw.c
index 3e00742..7670832 100644
--- a/graphics/ddraw.c
+++ b/graphics/ddraw.c
@@ -18,6 +18,9 @@
  *	  running X clients, even though I am polling X events and answering
  *	  them. But you can switch to another console (ctrl-alt-fx) and
  *	  "killall wine" processes. Any help on this one appreciated. -Marcus
+ *        NOTE: The hanging only seems to happen with -managed. I have 
+ *              implemented support for the -desktop option. This seems
+ *              to not have the hanging problems. - Peter Hunnisett
  */
 
 #include "config.h"
@@ -359,8 +362,12 @@
 	Xlib_MessagePump(this->s.ddraw->e.xlib.window);
 
 	TRACE(ddraw,"(%p)->Unlock(%p)\n",this,surface);
+
 	if (!this->s.ddraw->e.xlib.paintable)
-		return 0;
+        {
+		return DD_OK;
+        }
+
 	TSXPutImage(		display,
 				this->s.ddraw->e.xlib.drawable,
 				DefaultGCOfScreen(screen),
@@ -370,7 +377,8 @@
 				this->t.xlib.image->height
 	);
 	TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
-	return 0;
+
+	return DD_OK;
 }
 
 static HRESULT WINAPI DGA_IDirectDrawSurface3_Flip(
@@ -423,6 +431,7 @@
 		else
 			flipto = this;
 	}
+  
 	TSXPutImage(display,
 				this->s.ddraw->e.xlib.drawable,
 				DefaultGCOfScreen(screen),
@@ -444,11 +453,49 @@
 	return 0;
 }
 
+/* The IDirectDrawSurface3::SetPalette method attaches the specified
+ * DirectDrawPalette object to a surface. The surface uses this palette for all
+ * subsequent operations. The palette change takes place immediately.
+ */
 static HRESULT WINAPI IDirectDrawSurface3_SetPalette(
 	LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWPALETTE pal
 ) {
 	TRACE(ddraw,"(%p)->SetPalette(%p)\n",this,pal);
-	this->s.palette = pal; /* probably addref it too */
+
+        /* According to spec, we are only supposed to 
+         * AddRef if this is not the same palette.
+         */
+        if( this->s.palette != pal )
+        {
+          if( pal != NULL )
+          {
+            pal->lpvtbl->fnAddRef( pal );
+          }
+          if( this->s.palette != NULL )
+          {
+            this->s.palette->lpvtbl->fnRelease( this->s.palette );
+          }
+	  this->s.palette = pal; 
+
+          /* I think that we need to attach it to all backbuffers...*/
+          if( this->s.backbuffer )
+          {
+             if( this->s.backbuffer->s.palette )
+             {
+               this->s.backbuffer->s.palette->lpvtbl->fnRelease(
+                 this->s.backbuffer->s.palette );
+             } 
+             this->s.backbuffer->s.palette = pal;
+             if( pal )
+             { 	
+                pal->lpvtbl->fnAddRef( pal );
+             } 
+           }
+      
+          /* Perform the refresh */
+          TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
+        }
+
 	return 0;
 }
 
@@ -583,12 +630,14 @@
 }
 
 static ULONG WINAPI IDirectDrawSurface3_AddRef(LPDIRECTDRAWSURFACE3 this) {
-	TRACE(ddraw,"(%p)->AddRef()\n",this);
+        TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref );
+
 	return ++(this->ref);
 }
 
 static ULONG WINAPI DGA_IDirectDrawSurface3_Release(LPDIRECTDRAWSURFACE3 this) {
-	TRACE(ddraw,"(%p)->Release()\n",this);
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
 #ifdef HAVE_LIBXXF86DGA
 	if (!--(this->ref)) {
 		this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw);
@@ -606,13 +655,23 @@
 }
 
 static ULONG WINAPI Xlib_IDirectDrawSurface3_Release(LPDIRECTDRAWSURFACE3 this) {
-	TRACE(ddraw,"(%p)->Release()\n",this);
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
 	if (!--(this->ref)) {
 		this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw);
 		HeapFree(GetProcessHeap(),0,this->s.surface);
+
+                if( this->s.backbuffer )
+ 		{
+		  this->s.backbuffer->lpvtbl->fnRelease(this->s.backbuffer);
+ 		}
+
 		this->t.xlib.image->data = NULL;
 		TSXDestroyImage(this->t.xlib.image);
 		this->t.xlib.image = 0;
+
+                this->s.palette->lpvtbl->fnRelease(this->s.palette);
+
 		HeapFree(GetProcessHeap(),0,this);
 		return 0;
 	}
@@ -624,16 +683,25 @@
 ) {
         TRACE(ddraw, "(%p)->GetAttachedSurface(%p,%p)\n",
 		     this, lpddsd, lpdsf);
+
 	if (TRACE_ON(ddraw)) {
 		TRACE(ddraw,"	caps ");
 		_dump_DDSCAPS(lpddsd->dwCaps);
 	}
+
 	if (!(lpddsd->dwCaps & DDSCAPS_BACKBUFFER)) {
 		FIXME(ddraw,"whoops, can only handle backbuffers for now\n");
 		return E_FAIL;
 	}
+
 	/* FIXME: should handle more than one backbuffer */
 	*lpdsf = this->s.backbuffer;
+ 
+        if( this->s.backbuffer )
+        {
+          this->s.backbuffer->lpvtbl->fnAddRef( this->s.backbuffer );
+        }
+
 	return 0;
 }
 
@@ -727,10 +795,21 @@
 }
 
 static HRESULT WINAPI IDirectDrawSurface3_SetColorKey(
-	LPDIRECTDRAWSURFACE3 this,DWORD x,LPDDCOLORKEY ckey
+	LPDIRECTDRAWSURFACE3 this, DWORD dwFlags, LPDDCOLORKEY ckey
 ) {
-	FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n",this,x,ckey);
-	return 0;
+	FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n",this,dwFlags,ckey);
+
+        if( dwFlags & DDCKEY_SRCBLT )
+        {
+           dwFlags &= ~DDCKEY_SRCBLT;
+        } 
+
+        if( dwFlags )
+        {
+          TRACE( ddraw, "unhandled dwFlags: %08lx\n", dwFlags );
+        }
+
+	return DD_OK;
 }
 
 static struct IDirectDrawSurface3_VTable dga_dds3vt = {
@@ -830,6 +909,8 @@
 }
 
 static ULONG WINAPI IDirectDrawClipper_Release(LPDIRECTDRAWCLIPPER this) {
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
 	this->ref--;
 	if (this->ref)
 		return this->ref;
@@ -878,11 +959,20 @@
 		return DDERR_GENERIC;
 	}
 	for (i=0;i<count;i++) {
+#if 0
+PH
 		xc.pixel = i+start;
 		TSXQueryColor(display,this->cm,&xc);
 		palent[i].peRed = xc.red>>8;
 		palent[i].peGreen = xc.green>>8;
 		palent[i].peBlue = xc.blue>>8;
+#endif
+
+                palent[i].peRed   = this->palents[start+i].peRed;
+                palent[i].peBlue  = this->palents[start+i].peBlue;
+                palent[i].peGreen = this->palents[start+i].peGreen;
+                palent[i].peFlags = this->palents[start+i].peFlags;
+
 	}
 	return 0;
 }
@@ -908,10 +998,13 @@
 		xc.green = palent[i].peGreen<<8;
 		xc.flags = DoRed|DoBlue|DoGreen;
 		xc.pixel = start+i;
+
 		TSXStoreColor(display,this->cm,&xc);
+
 		this->palents[start+i].peRed = palent[i].peRed;
 		this->palents[start+i].peBlue = palent[i].peBlue;
 		this->palents[start+i].peGreen = palent[i].peGreen;
+                this->palents[start+i].peFlags = palent[i].peFlags;
 	}
 	return 0;
 }
@@ -942,10 +1035,13 @@
 		xc.green = palent[i].peGreen<<8;
 		xc.flags = DoRed|DoBlue|DoGreen;
 		xc.pixel = i+start;
+
 		TSXStoreColor(display,this->cm,&xc);
+
 		this->palents[start+i].peRed = palent[i].peRed;
 		this->palents[start+i].peBlue = palent[i].peBlue;
 		this->palents[start+i].peGreen = palent[i].peGreen;
+                this->palents[start+i].peFlags = palent[i].peFlags;
 	}
 	TSXF86DGAInstallColormap(display,DefaultScreen(display),this->cm);
 	return 0;
@@ -955,6 +1051,7 @@
 }
 
 static ULONG WINAPI IDirectDrawPalette_Release(LPDIRECTDRAWPALETTE this) {
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
 	if (!--(this->ref)) {
 		if (this->cm) {
 			TSXFreeColormap(display,this->cm);
@@ -967,6 +1064,8 @@
 }
 
 static ULONG WINAPI IDirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE this) {
+
+        TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref );
 	return ++(this->ref);
 }
 
@@ -976,21 +1075,39 @@
 	return DDERR_ALREADYINITIALIZED;
 }
 
+static HRESULT WINAPI IDirectDrawPalette_GetCaps(
+         LPDIRECTDRAWPALETTE this, LPDWORD lpdwCaps )
+{
+   FIXME( ddraw, "(%p)->(%p) stub.\n", this, lpdwCaps );
+   return DD_OK;
+} 
+
+static HRESULT WINAPI IDirectDrawPalette_QueryInterface(
+        LPDIRECTDRAWPALETTE this,REFIID refiid,LPVOID *obj ) 
+{
+  char    xrefiid[50];
+
+  WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
+  FIXME(ddraw,"(%p)->(%s,%p) stub.\n",this,xrefiid,obj);
+
+  return S_OK;
+}
+
 static struct IDirectDrawPalette_VTable dga_ddpalvt = {
-	(void*)1,
+	IDirectDrawPalette_QueryInterface,
 	IDirectDrawPalette_AddRef,
 	IDirectDrawPalette_Release,
-	(void*)4,
+	IDirectDrawPalette_GetCaps,
 	IDirectDrawPalette_GetEntries,
 	IDirectDrawPalette_Initialize,
 	DGA_IDirectDrawPalette_SetEntries
 };
 
 static struct IDirectDrawPalette_VTable xlib_ddpalvt = {
-	(void*)1,
+	IDirectDrawPalette_QueryInterface,
 	IDirectDrawPalette_AddRef,
 	IDirectDrawPalette_Release,
-	(void*)4,
+	IDirectDrawPalette_GetCaps,
 	IDirectDrawPalette_GetEntries,
 	IDirectDrawPalette_Initialize,
 	Xlib_IDirectDrawPalette_SetEntries
@@ -1036,12 +1153,15 @@
 }
 
 static ULONG WINAPI IDirect3D_AddRef(LPDIRECT3D this) {
+        TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref );
+
         return ++(this->ref);
 }
 
 static ULONG WINAPI IDirect3D_Release(LPDIRECT3D this)
 {
-        TRACE(ddraw,"(%p)->Release()\n",this);
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
         if (!--(this->ref)) {
                 this->ddraw->lpvtbl->fnRelease(this->ddraw);
                 HeapFree(GetProcessHeap(),0,this);
@@ -1050,6 +1170,18 @@
         return this->ref;
 }
 
+static HRESULT WINAPI IDirect3D_Initialize(
+         LPDIRECT3D this, REFIID refiid )
+{
+  /* FIXME: Not sure if this is correct */
+  char    xrefiid[50];
+
+  WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
+  FIXME(ddraw,"(%p)->(%s):stub.\n",this,xrefiid);
+  
+  return DDERR_ALREADYINITIALIZED;
+}
+
 /*******************************************************************************
  *				IDirect3D
  */
@@ -1057,7 +1189,7 @@
 	(void*)IDirect3D_QueryInterface,
 	(void*)IDirect3D_AddRef,
 	(void*)IDirect3D_Release,
-	(void*)4,
+	IDirect3D_Initialize,
 	(void*)5,
 	(void*)6,
 	(void*)7,
@@ -1069,6 +1201,8 @@
  *				IDirect3D2
  */
 static ULONG WINAPI IDirect3D2_Release(LPDIRECT3D2 this) {
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
 	if (!--(this->ref)) {
 		this->ddraw->lpvtbl->fnRelease(this->ddraw);
 		HeapFree(GetProcessHeap(),0,this);
@@ -1107,6 +1241,12 @@
 /*******************************************************************************
  *				IDirectDraw
  */
+
+/* Used in conjunction with cbWndExtra for storage of the this ptr for the window.
+ * Please adjust allocation in Xlib_DirectDrawCreate if you store more data here.
+ */
+static INT32 ddrawXlibThisOffset = 0;
+
 static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface(
 	LPDIRECTDRAW2 this,LPDDSURFACEDESC lpddsd,LPDIRECTDRAWSURFACE *lpdsf,IUnknown *lpunk
 ) {
@@ -1191,8 +1331,10 @@
 	LPDIRECTDRAW2 this,LPDDSURFACEDESC lpddsd,LPDIRECTDRAWSURFACE *lpdsf,IUnknown *lpunk
 ) {
 	XImage *img;
+
 	TRACE(ddraw, "(%p)->CreateSurface(%p,%p,%p)\n",
 		     this,lpddsd,lpdsf,lpunk);
+
 	if (TRACE_ON(ddraw)) {
 		fprintf(stderr,"[w=%ld,h=%ld,flags ",lpddsd->dwWidth,lpddsd->dwHeight);
 		_dump_DDSD(lpddsd->dwFlags);
@@ -1202,9 +1344,12 @@
 	}
 
 	*lpdsf = (LPDIRECTDRAWSURFACE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface));
+
 	this->lpvtbl->fnAddRef(this);
-	(*lpdsf)->ref = 1;
-	(*lpdsf)->lpvtbl = (LPDIRECTDRAWSURFACE_VTABLE)&xlib_dds3vt;
+	(*lpdsf)->s.ddraw             = this;
+	(*lpdsf)->ref                 = 1;
+	(*lpdsf)->lpvtbl              = (LPDIRECTDRAWSURFACE_VTABLE)&xlib_dds3vt;
+
 	if (	(lpddsd->dwFlags & DDSD_CAPS) && 
 		(lpddsd->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
 	) {
@@ -1225,7 +1370,6 @@
 		(*lpdsf)->s.width	= lpddsd->dwWidth;
 		(*lpdsf)->s.height	= lpddsd->dwHeight;
 	}
-	(*lpdsf)->s.ddraw = this;
 
 	{
 	(*lpdsf)->t.xlib.image = img =
@@ -1251,7 +1395,10 @@
 			FIXME(ddraw,"urks, wants to have more than one backbuffer (%ld)!\n",lpddsd->dwBackBufferCount);
 
 		(*lpdsf)->s.backbuffer = back = (LPDIRECTDRAWSURFACE3)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface3));
+
 		this->lpvtbl->fnAddRef(this);
+		back->s.ddraw = this;
+
 		back->ref = 1;
 		back->lpvtbl = (LPDIRECTDRAWSURFACE3_VTABLE)&xlib_dds3vt;
 		/* FIXME: !8 bit images */
@@ -1273,7 +1420,6 @@
 		);
 		back->s.width = this->d.width;
 		back->s.height = this->d.height;
-		back->s.ddraw = this;
 		back->s.lpitch = back->t.xlib.image->bytes_per_line;
 		back->s.backbuffer = NULL; /* does not have a backbuffer, it is
 					    * one! */
@@ -1316,7 +1462,7 @@
 	      dsprintf(ddraw, "%s ", flagmap[i].name);
 	  TRACE(ddraw,"	cooperative level %s\n", dbg_str(ddraw));
 	}
-/*	this->d.mainwindow = hwnd;*/
+        this->d.mainWindow = hwnd;
 	return 0;
 }
 
@@ -1404,12 +1550,25 @@
 		0,
 		NULL
 	);
-	SetWindowLong32A(this->e.xlib.window,0,(LONG)this);
+
+        /* Store this with the window. We'll use it for the window procedure */
+	SetWindowLong32A(this->e.xlib.window,ddrawXlibThisOffset,(LONG)this);
+
 	this->e.xlib.paintable = 1;
+
 	ShowWindow32(this->e.xlib.window,TRUE);
 	UpdateWindow32(this->e.xlib.window);
+
 	assert(this->e.xlib.window);
-	this->e.xlib.drawable = WIN_FindWndPtr(this->e.xlib.window)->window;
+
+        this->e.xlib.drawable  = WIN_FindWndPtr(this->e.xlib.window)->window;  
+
+        /* We don't have a context for this window. Host off the desktop */
+        if( !this->e.xlib.drawable )
+        {
+           this->e.xlib.drawable = WIN_GetDesktop()->window;
+        }
+
 	this->d.width	= width;
 	this->d.height	= height;
 	/* adjust fb_height, so we don't overlap */
@@ -1503,16 +1662,23 @@
 	if (*lpddpal == NULL) return E_OUTOFMEMORY;
 	(*lpddpal)->ref = 1;
 	(*lpddpal)->installed = 0;
+
 	(*lpddpal)->ddraw = (LPDIRECTDRAW)this;
+        this->lpvtbl->fnAddRef(this);
+
 	if (this->d.depth<=8) {
 		(*lpddpal)->cm = TSXCreateColormap(display,this->e.xlib.drawable,DefaultVisualOfScreen(screen),AllocAll);
 		/* later installed ... 
 		 * TSXInstallColormap(display,(*lpddpal)->cm);
 		 * TSXSetWindowColormap(display,this->e.xlib.drawable,(*lpddpal)->cm);
 		 */
-	} else
+	} 
+        else
+        {
 		/* we don't want palettes in hicolor or truecolor */
 		(*lpddpal)->cm = 0;
+        }
+
 	(*lpddpal)->lpvtbl = &xlib_ddpalvt;
 	return 0;
 }
@@ -1545,10 +1711,14 @@
 }
 
 static ULONG WINAPI IDirectDraw2_AddRef(LPDIRECTDRAW2 this) {
+        TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref );
+
 	return ++(this->ref);
 }
 
 static ULONG WINAPI DGA_IDirectDraw2_Release(LPDIRECTDRAW2 this) {
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
 #ifdef HAVE_LIBXXF86DGA
 	if (!--(this->ref)) {
 		TSXF86DGADirectVideo(display,DefaultScreen(display),0);
@@ -1563,6 +1733,8 @@
 }
 
 static ULONG WINAPI Xlib_IDirectDraw2_Release(LPDIRECTDRAW2 this) {
+        TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
 	if (!--(this->ref)) {
 		HeapFree(GetProcessHeap(),0,this);
 		return 0;
@@ -1779,6 +1951,15 @@
 	return 0;
 }
 
+static HRESULT WINAPI IDirectDraw2_Compact(
+          LPDIRECTDRAW2 this )
+{
+  FIXME(ddraw,"(%p)->()\n", this );
+ 
+  return DD_OK;
+}
+
+
 /* Note: Hack so we can reuse the old functions without compiler warnings */
 #ifdef __GNUC__
 # define XCAST(fun)	(typeof(dga_ddvt.fn##fun))
@@ -1790,7 +1971,7 @@
 	XCAST(QueryInterface)DGA_IDirectDraw2_QueryInterface,
 	XCAST(AddRef)IDirectDraw2_AddRef,
 	XCAST(Release)DGA_IDirectDraw2_Release,
-	XCAST(Compact)4,
+	XCAST(Compact)IDirectDraw2_Compact,
 	XCAST(CreateClipper)IDirectDraw2_CreateClipper,
 	XCAST(CreatePalette)DGA_IDirectDraw2_CreatePalette,
 	XCAST(CreateSurface)DGA_IDirectDraw2_CreateSurface,
@@ -1816,7 +1997,7 @@
 	XCAST(QueryInterface)Xlib_IDirectDraw2_QueryInterface,
 	XCAST(AddRef)IDirectDraw2_AddRef,
 	XCAST(Release)Xlib_IDirectDraw2_Release,
-	XCAST(Compact)4,
+	XCAST(Compact)IDirectDraw2_Compact,
 	XCAST(CreateClipper)IDirectDraw2_CreateClipper,
 	XCAST(CreatePalette)Xlib_IDirectDraw2_CreatePalette,
 	XCAST(CreateSurface)Xlib_IDirectDraw2_CreateSurface,
@@ -1843,6 +2024,7 @@
  *
  */
 
+
 static HRESULT WINAPI DGA_IDirectDraw2_SetDisplayMode(
 	LPDIRECTDRAW2 this,DWORD width,DWORD height,DWORD depth,DWORD xx,DWORD yy
 ) {
@@ -1881,7 +2063,7 @@
 	DGA_IDirectDraw2_QueryInterface,
 	IDirectDraw2_AddRef,
 	DGA_IDirectDraw2_Release,
-	(void*)4,
+	IDirectDraw2_Compact,
 	IDirectDraw2_CreateClipper,
 	DGA_IDirectDraw2_CreatePalette,
 	DGA_IDirectDraw2_CreateSurface,
@@ -1908,7 +2090,7 @@
 	Xlib_IDirectDraw2_QueryInterface,
 	IDirectDraw2_AddRef,
 	Xlib_IDirectDraw2_Release,
-	(void*)4,
+	IDirectDraw2_Compact,
 	IDirectDraw2_CreateClipper,
 	Xlib_IDirectDraw2_CreatePalette,
 	Xlib_IDirectDraw2_CreateSurface,
@@ -1987,22 +2169,65 @@
 #endif /* defined(HAVE_LIBXXF86DGA) */
 }
 
-LRESULT WINAPI Xlib_DDWndProc(HWND32 hwnd,UINT32 msg,WPARAM32 wParam,LPARAM lParam) {
-	LRESULT	ret;
-	/*FIXME(ddraw,"(0x%04x,%s,0x%08lx,0x%08lx),stub!\n",(int)hwnd,SPY_GetMsgName(msg),(long)wParam,(long)lParam); */
-	if (msg==WM_PAINT){
-		LPDIRECTDRAW ddraw = (LPDIRECTDRAW)GetWindowLong32A(hwnd,0);
+LRESULT WINAPI Xlib_DDWndProc(HWND32 hwnd,UINT32 msg,WPARAM32 wParam,LPARAM lParam)
+{
+   LRESULT ret;
+   LPDIRECTDRAW ddraw = NULL;
+   DWORD lastError;
 
-		if (ddraw)
-			ddraw->e.xlib.paintable = 1;
-	}
+   /*FIXME(ddraw,"(0x%04x,%s,0x%08lx,0x%08lx),stub!\n",(int)hwnd,SPY_GetMsgName(msg),(long)wParam,(long)lParam); */
+
+   SetLastError( ERROR_SUCCESS );
+   ddraw  = (LPDIRECTDRAW)GetWindowLong32A( hwnd, ddrawXlibThisOffset );
+   if( (!ddraw)  &&
+       ( ( lastError = GetLastError() ) != ERROR_SUCCESS )
+     ) 
+   {
+     ERR( ddraw, "Unable to retrieve this ptr from window. Error %08lx\n", lastError );
+   }
+
+   if( ddraw )
+   {
+      /* Perform any special direct draw functions */
+      if (msg==WM_PAINT)
+      {
+        ddraw->e.xlib.paintable = 1;
+      } 
+
+      /* Now let the application deal with the rest of this */
+      if( ddraw->d.mainWindow )
+      {
+    
+        /* Don't think that we actually need to call this but... 
+           might as well be on the safe side of things... */
+        ret = DefWindowProc32A( hwnd, msg, wParam, lParam );
+
+        if( !ret )
+        {
+          /* We didn't handle the message - give it to the application */
+          ret = CallWindowProc32A( WIN_FindWndPtr( ddraw->d.mainWindow )->winproc,
+                                  ddraw->d.mainWindow, msg, wParam, lParam );
+        }
+        
+      }
+      else
+      {
+        ret = DefWindowProc32A( ddraw->d.mainWindow, msg, wParam, lParam );
+      } 
+
+    }
+    else
+    {
 	ret = DefWindowProc32A(hwnd,msg,wParam,lParam);
-	return ret;
+    }
+
+    return ret;
 }
 
 HRESULT WINAPI Xlib_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) {
 	WNDCLASS32A	wc;
 	int		have_xshm = 0;
+        WND*            pParentWindow; 
 
 	*lplpDD = (LPDIRECTDRAW)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDraw));
 	(*lplpDD)->lpvtbl = &xlib_ddvt;
@@ -2012,8 +2237,14 @@
 	wc.style	= CS_GLOBALCLASS;
 	wc.lpfnWndProc	= Xlib_DDWndProc;
 	wc.cbClsExtra	= 0;
-	wc.cbWndExtra	= 0;
-	wc.hInstance	= 0;
+	wc.cbWndExtra	= /* Defines extra mem for window. This is used for storing this */
+                          sizeof( LPDIRECTDRAW ); /*  ddrawXlibThisOffset */
+
+        /* We can be a child of the desktop since we're really important */
+        pParentWindow   = WIN_GetDesktop();
+	wc.hInstance	= pParentWindow ? pParentWindow->hwndSelf : 0;
+        wc.hInstance    = 0; 
+
 	wc.hIcon	= 0;
 	wc.hCursor	= (HCURSOR32)IDC_ARROW32A;
 	wc.hbrBackground= NULL_BRUSH;
diff --git a/graphics/escape.c b/graphics/escape.c
index c7bac2c..d3f54f2 100644
--- a/graphics/escape.c
+++ b/graphics/escape.c
@@ -116,9 +116,27 @@
     return ret;
 }
 
-INT32 WINAPI ExtEscape32(HDC32 hdc,INT32 nEscape,INT32 cbInput,LPCSTR x,INT32 cbOutput,LPSTR out) {
-	FIXME(driver,"(0x%04x,0x%x,%d,%s,%d,%p),stub!\n",
-		hdc,nEscape,cbInput,x,cbOutput,out
-	);
-	return 1;
+/******************************************************************************
+ *		ExtEscape32	[GDI32.95]
+ *
+ * PARAMS
+ *    hdc         [I] Handle to device context
+ *    nEscape     [I] Escape function
+ *    cbInput     [I] Number of bytes in input structure
+ *    lpszInData  [I] Pointer to input structure
+ *    cbOutput    [I] Number of bytes in output structure
+ *    lpszOutData [O] Pointer to output structure
+ *
+ * RETURNS
+ *    Success: >0
+ *    Not implemented: 0
+ *    Failure: <0
+ */
+INT32 WINAPI ExtEscape32( HDC32 hdc, INT32 nEscape, INT32 cbInput, 
+                          LPCSTR lpszInData, INT32 cbOutput, LPSTR lpszOutData )
+{
+    FIXME(driver,"(0x%04x,0x%x,%d,%s,%d,%p):stub\n",
+          hdc,nEscape,cbInput,debugstr_a(lpszInData),cbOutput,lpszOutData);
+    return 0;
 }
+
diff --git a/graphics/painting.c b/graphics/painting.c
index 57b3316..0c7d3a9 100644
--- a/graphics/painting.c
+++ b/graphics/painting.c
@@ -812,8 +812,7 @@
                                    const LPRECT32 lprcFrom,
                                    const LPRECT32 lprcTo )
 {
-    FIXME(gdi,"(%x,%d,%p,%p): empty stub!\n",
-	  hwnd, idAni, lprcFrom, lprcTo );
+    FIXME(gdi,"(0x%x,%d,%p,%p): stub\n",hwnd,idAni,lprcFrom,lprcTo);
     return TRUE;
 }
 
diff --git a/graphics/path.c b/graphics/path.c
index 9fd23ca..bd5dffd 100644
--- a/graphics/path.c
+++ b/graphics/path.c
@@ -239,7 +239,7 @@
 INT16 WINAPI GetPath16(HDC16 hdc, LPPOINT16 pPoints, LPBYTE pTypes,
    INT16 nSize)
 {
-   FIXME(gdi, "Unimplemented stub\n");
+   FIXME(gdi, "(%d,%p,%p): stub\n",hdc,pPoints,pTypes);
 
    return 0;
 }
diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index 27c5009..ac86022 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -73,18 +73,18 @@
 			  { "-adobe-helvetica-", "Arial" }
 			  };
 
-/* Charset translation table, cp125-.. encoded fonts are produced by
- * the fnt2bdf */
+/* Charset translation table, microsoft-cp125.. encoded fonts are produced by
+ * the fnt2bdf or the True Type X11 font servers */
 
 static int	 numCPTranslation = 8;
-static BYTE	 CPTranslation[] = { EE_CHARSET,	/* cp125-0 */
-				     RUSSIAN_CHARSET,	/* cp125-1 */
-				     ANSI_CHARSET,	/* cp125-2 */
-				     GREEK_CHARSET,	/* cp125-3 */
-				     TURKISH_CHARSET,	/* cp125-4 */
-				     HEBREW_CHARSET,	/* cp125-5 */
-				     ARABIC_CHARSET,	/* cp125-6 */
-				     BALTIC_CHARSET	/* cp125-7 */
+static BYTE	 CPTranslation[] = { EE_CHARSET,	/* cp1250 */
+				     RUSSIAN_CHARSET,	/* cp1251 */
+				     ANSI_CHARSET,	/* cp1252 */
+				     GREEK_CHARSET,	/* cp1253 */
+				     TURKISH_CHARSET,	/* cp1254 */
+				     HEBREW_CHARSET,	/* cp1255 */
+				     ARABIC_CHARSET,	/* cp1256 */
+				     BALTIC_CHARSET	/* cp1257 */
 				   }; 
 
 UINT16			XTextCaps = TC_OP_CHARACTER | TC_OP_STROKE |
@@ -104,7 +104,7 @@
 static const char*	INIGlobalMetrics = "FontMetrics";
 
 static const char*	LFDSeparator = "*-";
-static const char*	localMSEncoding = "cp125-";
+static const char*	localMSEncoding = "microsoft-cp125";
 static const char*	iso8859Encoding = "iso8859-";
 static const char*	iso646Encoding = "iso646.1991-";
 static const char*	ansiEncoding = "ansi-";
@@ -372,7 +372,7 @@
      fi->fi_flags |= FI_ENC_ISO646;
    else if( strstr(lpch, ansiEncoding) )	/* fnt2bdf produces -ansi-0 LFD */
      fi->fi_flags |= FI_ENC_ANSI;
-   else						/* ... and -cp125-x */
+   else						/* ... and -microsoft-cp125x */
    {
 	fi->df.dfCharSet = OEM_CHARSET;
 	if( !strncasecmp(lpch, localMSEncoding, 6) )
@@ -384,7 +384,8 @@
 		fi->df.dfCharSet = CPTranslation[i];
 	    }
 	}
-	else if( strstr(lpch, "fontspecific") )
+	else if( strstr(lpch, "fontspecific") ||
+		 strstr(lpch, "microsoft-symbol") )
 	    fi->df.dfCharSet = SYMBOL_CHARSET;
    }
    return TRUE;					
@@ -1993,14 +1994,14 @@
   int i;
   char *cp, *start;
 
-  XGetFontProperty( pfo->fs, XA_FONT, &nameAtom );
-  fontName = XGetAtomName( display, nameAtom );
+  TSXGetFontProperty( pfo->fs, XA_FONT, &nameAtom );
+  fontName = TSXGetAtomName( display, nameAtom );
   for(i = 0, cp = fontName; i < 7; i++) {
     cp = strchr(cp, '-');
     cp++;
   }
   if(*cp != '[') {
-    XFree(fontName);
+    TSXFree(fontName);
     return FALSE;
   }
   start = cp;
@@ -2010,10 +2011,10 @@
 #define PX pfo->lpX11Trans
 
   sscanf(start, "[%f%f%f%f]", &PX->a, &PX->b, &PX->c, &PX->d);
-  XFree(fontName);
+  TSXFree(fontName);
 
-  XGetFontProperty( pfo->fs, RAW_ASCENT, &PX->RAW_ASCENT );
-  XGetFontProperty( pfo->fs, RAW_DESCENT, &PX->RAW_DESCENT );
+  TSXGetFontProperty( pfo->fs, RAW_ASCENT, &PX->RAW_ASCENT );
+  TSXGetFontProperty( pfo->fs, RAW_DESCENT, &PX->RAW_DESCENT );
 
   PX->pixelsize = hypot(PX->a, PX->b);
   PX->ascent = PX->pixelsize / 1000.0 * PX->RAW_ASCENT;