Added Wacom API headers.
authorSam Lantinga <slouken@libsdl.org>
Tue, 26 Aug 2008 05:26:28 +0000
changeset 2724 0e2b65f32298
parent 2723 911db724ea24
child 2725 6ce6d56b63bf
Added Wacom API headers. FIXME: Dynamically load the Wacom API functions from wintab32.dll
src/video/win32/SDL_win32events.c
src/video/win32/SDL_win32keyboard.c
src/video/win32/SDL_win32mouse.c
src/video/win32/SDL_win32video.c
src/video/win32/SDL_win32video.h
src/video/win32/SDL_win32window.c
src/video/win32/wactab/pktdef.h
src/video/win32/wactab/wintab.h
src/video/win32/wactab/wintabx.h
--- a/src/video/win32/SDL_win32events.c	Tue Aug 26 02:47:26 2008 +0000
+++ b/src/video/win32/SDL_win32events.c	Tue Aug 26 05:26:28 2008 +0000
@@ -32,11 +32,6 @@
 #include "SDL_vkeys.h"
 #include "../../events/SDL_events_c.h"
 
-#include <wintab.h>
-#define PACKETDATA ( PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_CURSOR)
-#define PACKETMODE 0
-#include <pktdef.h>
-
 /*#define WMMSG_DEBUG*/
 #ifdef WMMSG_DEBUG
 #include <stdio.h>
@@ -152,17 +147,15 @@
         {
             /* checking where the proximity message showed up */
             int h_context = LOWORD(lParam);
-            LPPOINT point;
+            POINT point;
             GetCursorPos(&point);
             ScreenToClient(hwnd, &point);
 
             /* are we in proximity or out of proximity */
             if (h_context == 0) {
-                SDL_SendProximity(tablet, (int) (&point->x),
-                                  (int) (&point->y), SDL_PROXIMITYOUT);
+                SDL_SendProximity(tablet, point.x, point.y, SDL_PROXIMITYOUT);
             } else {
-                SDL_SendProximity(tablet, (int) (&point->x),
-                                  (int) (&point->y), SDL_PROXIMITYIN);
+                SDL_SendProximity(tablet, point.x, point.y, SDL_PROXIMITYIN);
             }
         }
         break;
@@ -222,7 +215,7 @@
             int i;
             int size = 0;
             const RAWMOUSE *raw_mouse = NULL;
-            LPPOINT point;
+            POINT point;
             USHORT flags;
 
             /* we're collecting data from the mouse */
@@ -249,11 +242,9 @@
 
             /* if the message was sent by a tablet we have to send also pressure */
             if (i == tablet) {
-                SDL_SendMouseMotion(index, 0, (int) (&point->x),
-                                    (int) (&point->y), pressure);
+                SDL_SendMouseMotion(index, 0, point.x, point.y, pressure);
             } else {
-                SDL_SendMouseMotion(index, 0, (int) (&point->x),
-                                    (int) (&point->y), 0);
+                SDL_SendMouseMotion(index, 0, point.x, point.y, 0);
             }
             /* we're sending mouse buttons messages to check up if sth changed */
             if (flags & RI_MOUSE_BUTTON_1_DOWN) {
--- a/src/video/win32/SDL_win32keyboard.c	Tue Aug 26 02:47:26 2008 +0000
+++ b/src/video/win32/SDL_win32keyboard.c	Tue Aug 26 05:26:28 2008 +0000
@@ -54,20 +54,26 @@
 
     /* Make sure the alpha scancodes are correct.  T isn't usually remapped */
     if (MapVirtualKey('T', MAPVK_VK_TO_VSC) != alpha_scancodes['T' - 'A']) {
-        printf
-            ("Fixing alpha scancode map, assuming US QWERTY layout!\nPlease send the following 26 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
+#if 0
+        printf("Fixing alpha scancode map, assuming US QWERTY layout!\nPlease send the following 26 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
+#endif
         for (i = 0; i < SDL_arraysize(alpha_scancodes); ++i) {
             alpha_scancodes[i] = MapVirtualKey('A' + i, MAPVK_VK_TO_VSC);
+#if 0
             printf("%d = %d\n", i, alpha_scancodes[i]);
+#endif
         }
     }
     if (MapVirtualKey(VK_NUMPAD0, MAPVK_VK_TO_VSC) != keypad_scancodes[0]) {
-        printf
-            ("Fixing keypad scancode map!\nPlease send the following 10 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
+#if 0
+        printf("Fixing keypad scancode map!\nPlease send the following 10 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
+#endif
         for (i = 0; i < SDL_arraysize(keypad_scancodes); ++i) {
             keypad_scancodes[i] =
                 MapVirtualKey(VK_NUMPAD0 + i, MAPVK_VK_TO_VSC);
+#if 0
             printf("%d = %d\n", i, keypad_scancodes[i]);
+#endif
         }
     }
 
--- a/src/video/win32/SDL_win32mouse.c	Tue Aug 26 02:47:26 2008 +0000
+++ b/src/video/win32/SDL_win32mouse.c	Tue Aug 26 05:26:28 2008 +0000
@@ -33,11 +33,6 @@
 
 #include "../../events/SDL_mouse_c.h"
 
-#include <wintab.h>
-
-#define PACKETDATA ( PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_CURSOR)
-#define PACKETMODE 0
-#include <pktdef.h>
 extern HANDLE *mice;
 extern int total_mice;
 extern int tablet;
--- a/src/video/win32/SDL_win32video.c	Tue Aug 26 02:47:26 2008 +0000
+++ b/src/video/win32/SDL_win32video.c	Tue Aug 26 05:26:28 2008 +0000
@@ -31,8 +31,6 @@
 #include "SDL_d3drender.h"
 #include "SDL_gdirender.h"
 
-#include <wintab.h>
-
 /* Initialization/Query functions */
 static int WIN_VideoInit(_THIS);
 static void WIN_VideoQuit(_THIS);
--- a/src/video/win32/SDL_win32video.h	Tue Aug 26 02:47:26 2008 +0000
+++ b/src/video/win32/SDL_win32video.h	Tue Aug 26 05:26:28 2008 +0000
@@ -37,6 +37,11 @@
 #include "d3d9.h"
 #endif
 
+#include "wactab/wintab.h"
+#define PACKETDATA ( PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_CURSOR)
+#define PACKETMODE 0
+#include "wactab/pktdef.h"
+
 #include "SDL_win32events.h"
 #include "SDL_win32gamma.h"
 #include "SDL_win32keyboard.h"
--- a/src/video/win32/SDL_win32window.c	Tue Aug 26 02:47:26 2008 +0000
+++ b/src/video/win32/SDL_win32window.c	Tue Aug 26 05:26:28 2008 +0000
@@ -37,13 +37,6 @@
 /* This is included after SDL_win32video.h, which includes windows.h */
 #include "SDL_syswm.h"
 
-#include <wintab.h>
-
-/* we're telling wintab that we want to receive movement, button events and pressure information in packets */
-#define PACKETDATA ( PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_CURSOR)
-#define PACKETMODE 0
-#include <pktdef.h>
-
 extern HCTX *g_hCtx;            /* the table of tablet event contexts, each windows has to have it's own tablet context */
 int highestId = 0;              /* the highest id of the tablet context */
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/win32/wactab/pktdef.h	Tue Aug 26 05:26:28 2008 +0000
@@ -0,0 +1,236 @@
+/* -------------------------------- pktdef.h -------------------------------- */
+/* Combined 16 & 32-bit version. */
+
+/*------------------------------------------------------------------------------
+The text and information contained in this file may be freely used,
+copied, or distributed without compensation or licensing restrictions.
+
+This file is copyright 1991-1998 by LCS/Telegraphics.
+------------------------------------------------------------------------------*/
+/*------------------------------------------------------------------------------
+
+How to use pktdef.h:
+
+1. Include wintab.h
+2. if using just one packet format:
+	a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits
+	   (use the PK_* identifiers).
+	b. Include pktdef.h.
+	c. The generated structure typedef will be called PACKET.  Use PACKETDATA
+	   and PACKETMODE to fill in the LOGCONTEXT structure.
+3. If using multiple packet formats, for each one:
+	a. Define PACKETNAME. Its text value will be a prefix for this packet's
+	   parameters and names.
+	b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
+	   2.a. above.
+	c. Include pktdef.h.
+	d. The generated structure typedef will be called
+	   <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.
+4. If using extension packet data, do the following additional steps
+   for each extension:
+	a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
+	   as either PKEXT_ABSOLUTE or PKEXT_RELATIVE.
+	b. The generated structure typedef will contain a field for the
+	   extension data.
+	c. Scan the WTI_EXTENSION categories to find the extension's
+	   packet mask bit.
+	d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the
+	   result in the lcPktData field of the LOGCONTEXT structure.
+	e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
+	   packet mask bit with <PACKETNAME>PACKETMODE and use the result
+	   in the lcPktMode field of the LOGCONTEXT structure.
+
+
+Example #1.	-- single packet format
+
+#include <wintab.h>
+#define PACKETDATA	PK_X | PK_Y | PK_BUTTONS	/@ x, y, buttons @/
+#define PACKETMODE	PK_BUTTONS					/@ buttons relative mode @/
+#include <pktdef.h>
+...
+	lc.lcPktData = PACKETDATA;
+	lc.lcPktMode = PACKETMODE;
+
+Example #2. -- multiple formats
+
+#include <wintab.h>
+#define PACKETNAME		MOE
+#define MOEPACKETDATA	PK_X | PK_Y | PK_BUTTONS	/@ x, y, buttons @/
+#define MOEPACKETMODE	PK_BUTTONS					/@ buttons relative mode @/
+#include <pktdef.h>
+#define PACKETNAME		LARRY
+#define LARRYPACKETDATA	PK_Y | PK_Z | PK_BUTTONS	/@ y, z, buttons @/
+#define LARRYPACKETMODE	PK_BUTTONS					/@ buttons relative mode @/
+#include <pktdef.h>
+#define PACKETNAME		CURLY
+#define CURLYPACKETDATA	PK_X | PK_Z | PK_BUTTONS	/@ x, z, buttons @/
+#define CURLYPACKETMODE	PK_BUTTONS					/@ buttons relative mode @/
+#include <pktdef.h>
+...
+	lcMOE.lcPktData = MOEPACKETDATA;
+	lcMOE.lcPktMode = MOEPACKETMODE;
+...
+	lcLARRY.lcPktData = LARRYPACKETDATA;
+	lcLARRY.lcPktMode = LARRYPACKETMODE;
+...
+	lcCURLY.lcPktData = CURLYPACKETDATA;
+	lcCURLY.lcPktMode = CURLYPACKETMODE;
+
+Example #3. -- extension packet data "XFOO".
+	
+#include <wintab.h>
+#define PACKETDATA	PK_X | PK_Y | PK_BUTTONS	/@ x, y, buttons @/
+#define PACKETMODE	PK_BUTTONS					/@ buttons relative mode @/
+#define PACKETXFOO	PKEXT_ABSOLUTE				/@ XFOO absolute mode @/
+#include <pktdef.h>
+...
+UINT ScanExts(UINT wTag)
+{
+	UINT i;
+	UINT wScanTag;
+
+	/@ scan for wTag's info category. @/
+	for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) {
+		 if (wTag == wScanTag) {
+			/@ return category offset from WTI_EXTENSIONS. @/
+			return i;
+		}
+	}
+	/@ return error code. @/
+	return 0xFFFF;
+}
+...
+	lc.lcPktData = PACKETDATA;
+	lc.lcPktMode = PACKETMODE;
+#ifdef PACKETXFOO
+	categoryXFOO = ScanExts(WTX_XFOO);
+	WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO);
+	lc.lcPktData |= maskXFOO;
+#if PACKETXFOO == PKEXT_RELATIVE
+	lc.lcPktMode |= maskXFOO;
+#endif
+#endif
+	WTOpen(hWnd, &lc, TRUE);
+
+
+------------------------------------------------------------------------------*/
+#ifdef __cplusplus
+extern "C" {
+#endif	/* __cplusplus */
+
+#ifndef PACKETNAME
+	/* if no packet name prefix */
+	#define __PFX(x)	x
+	#define __IFX(x,y)	x ## y
+#else
+	/* add prefixes and infixes to packet format names */
+	#define __PFX(x)		__PFX2(PACKETNAME,x)
+	#define __PFX2(p,x)		__PFX3(p,x)
+	#define __PFX3(p,x)		p ## x
+	#define __IFX(x,y)		__IFX2(x,PACKETNAME,y)
+	#define __IFX2(x,i,y)	__IFX3(x,i,y)
+	#define __IFX3(x,i,y)	x ## i ## y
+#endif
+
+#define __SFX2(x,s)		__SFX3(x,s)
+#define __SFX3(x,s)		x ## s
+
+#define __TAG  	__IFX(tag,PACKET)
+#define __TYPES	__PFX(PACKET), * __IFX(P,PACKET), NEAR * __IFX(NP,PACKET), \
+					FAR * __IFX(LP,PACKET)
+
+#define __DATA		(__PFX(PACKETDATA))
+#define __MODE		(__PFX(PACKETMODE))
+#define __EXT(x)	__SFX2(__PFX(PACKET),x)
+
+	
+typedef struct __TAG {
+	#if (__DATA & PK_CONTEXT)
+		HCTX			pkContext;
+	#endif
+	#if (__DATA & PK_STATUS)
+		UINT			pkStatus;
+	#endif
+	#if (__DATA & PK_TIME)
+		DWORD			pkTime;
+	#endif
+	#if (__DATA & PK_CHANGED)
+		WTPKT			pkChanged;
+	#endif
+	#if (__DATA & PK_SERIAL_NUMBER)
+		UINT			pkSerialNumber;
+	#endif
+	#if (__DATA & PK_CURSOR)
+		UINT			pkCursor;
+	#endif
+	#if (__DATA & PK_BUTTONS)
+		DWORD			pkButtons;
+	#endif
+	#if (__DATA & PK_X)
+		LONG			pkX;
+	#endif
+	#if (__DATA & PK_Y)
+		LONG			pkY;
+	#endif
+	#if (__DATA & PK_Z)
+		LONG			pkZ;
+	#endif
+	#if (__DATA & PK_NORMAL_PRESSURE)
+		#if (__MODE & PK_NORMAL_PRESSURE)
+			/* relative */
+			int			pkNormalPressure;
+		#else
+			/* absolute */
+			UINT		pkNormalPressure;
+		#endif
+	#endif
+	#if (__DATA & PK_TANGENT_PRESSURE)
+		#if (__MODE & PK_TANGENT_PRESSURE)
+			/* relative */
+			int			pkTangentPressure;
+		#else
+			/* absolute */
+			UINT		pkTangentPressure;
+		#endif
+	#endif
+	#if (__DATA & PK_ORIENTATION)
+		ORIENTATION		pkOrientation;
+	#endif
+	#if (__DATA & PK_ROTATION)
+		ROTATION		pkRotation; /* 1.1 */
+	#endif
+
+#ifndef NOWTEXTENSIONS
+	/* extensions begin here. */
+	#if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE)
+		UINT			pkFKeys;
+	#endif
+	#if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE)
+		TILT			pkTilt;
+	#endif
+	#if (__EXT(EXPKEYS) == PKEXT_RELATIVE) || (__EXT(EXPKEYS) == PKEXT_ABSOLUTE)
+		WORD			pkExpKeys[4]; /* 1.3 */
+	#endif
+#endif
+
+} __TYPES ;
+
+#undef PACKETNAME
+#undef __TAG
+#undef __TAG2
+#undef __TYPES
+#undef __TYPES2
+#undef __DATA
+#undef __MODE
+#undef __PFX
+#undef __PFX2
+#undef __PFX3
+#undef __IFX
+#undef __IFX2
+#undef __IFX3
+#undef __SFX2
+#undef __SFX3
+
+#ifdef __cplusplus
+}
+#endif	/* __cplusplus */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/win32/wactab/wintab.h	Tue Aug 26 05:26:28 2008 +0000
@@ -0,0 +1,865 @@
+/* -------------------------------- wintab.h -------------------------------- */
+/* Combined 16 & 32-bit version. */
+
+/*------------------------------------------------------------------------------
+The text and information contained in this file may be freely used,
+copied, or distributed without compensation or licensing restrictions.
+
+This file is copyright 1991-1998 by LCS/Telegraphics.
+------------------------------------------------------------------------------*/
+
+#ifndef _INC_WINTAB     /* prevent multiple includes */
+#define _INC_WINTAB
+
+#ifdef __cplusplus
+extern "C" {
+#endif	/* __cplusplus */
+
+/* -------------------------------------------------------------------------- */
+/* Messages */
+#ifndef NOWTMESSAGES
+
+	#define WT_DEFBASE		0x7FF0
+	#define WT_MAXOFFSET	0xF
+
+	#define _WT_PACKET(b)		((b)+0)
+	#define _WT_CTXOPEN(b)		((b)+1)
+	#define _WT_CTXCLOSE(b)		((b)+2)
+	#define _WT_CTXUPDATE(b)	((b)+3)
+	#define _WT_CTXOVERLAP(b)	((b)+4)
+	#define _WT_PROXIMITY(b)	((b)+5)
+	#define _WT_INFOCHANGE(b)	((b)+6)
+	#define _WT_CSRCHANGE(b)	((b)+7) /* 1.1 */
+	#define _WT_MAX(b)			((b)+WT_MAXOFFSET)
+	
+	#define WT_PACKET			_WT_PACKET(WT_DEFBASE)
+	#define WT_CTXOPEN			_WT_CTXOPEN(WT_DEFBASE)
+	#define WT_CTXCLOSE			_WT_CTXCLOSE(WT_DEFBASE)
+	#define WT_CTXUPDATE		_WT_CTXUPDATE(WT_DEFBASE)
+	#define WT_CTXOVERLAP		_WT_CTXOVERLAP(WT_DEFBASE)
+	#define WT_PROXIMITY		_WT_PROXIMITY(WT_DEFBASE)
+	#define WT_INFOCHANGE		_WT_INFOCHANGE(WT_DEFBASE)
+	#define WT_CSRCHANGE		_WT_CSRCHANGE(WT_DEFBASE) /* 1.1 */
+	#define WT_MAX				_WT_MAX(WT_DEFBASE)
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* -------------------------------------------------------------------------- */
+/* Data Types */
+
+/* -------------------------------------------------------------------------- */
+/* COMMON DATA DEFS */
+
+DECLARE_HANDLE(HMGR);		/* manager handle */
+DECLARE_HANDLE(HCTX);		/* context handle */
+DECLARE_HANDLE(HWTHOOK);	/* hook handle */
+
+typedef DWORD WTPKT;		/* packet mask */
+
+
+#ifndef NOWTPKT
+
+	/* WTPKT bits */
+	#define PK_CONTEXT			0x0001	/* reporting context */
+	#define PK_STATUS			0x0002	/* status bits */
+	#define PK_TIME				0x0004	/* time stamp */
+	#define PK_CHANGED			0x0008	/* change bit vector */
+	#define PK_SERIAL_NUMBER   	0x0010	/* packet serial number */
+	#define PK_CURSOR			0x0020	/* reporting cursor */
+	#define PK_BUTTONS			0x0040	/* button information */
+	#define PK_X				0x0080	/* x axis */
+	#define PK_Y				0x0100	/* y axis */
+	#define PK_Z				0x0200	/* z axis */
+	#define PK_NORMAL_PRESSURE	0x0400	/* normal or tip pressure */
+	#define PK_TANGENT_PRESSURE	0x0800	/* tangential or barrel pressure */
+	#define PK_ORIENTATION		0x1000	/* orientation info: tilts */
+	#define PK_ROTATION			0x2000	/* rotation info; 1.1 */
+
+#endif
+
+typedef DWORD FIX32;				/* fixed-point arithmetic type */
+
+#ifndef NOFIX32
+	#define INT(x)	HIWORD(x)
+	#define FRAC(x)	LOWORD(x)
+
+	#define CASTFIX32(x)	((FIX32)((x)*65536L))
+
+	#define ROUND(x)		(INT(x) + (FRAC(x) > (WORD)0x8000))
+
+	#define FIX_MUL(c, a, b)						\
+		(c = (((DWORD)FRAC(a) * FRAC(b)) >> 16) +	\
+			(DWORD)INT(a) * FRAC(b) +				\
+			(DWORD)INT(b) * FRAC(a) +				\
+			((DWORD)INT(a) * INT(b) << 16))
+
+	#ifdef _WINDLL
+		#define FIX_DIV_SC static
+	#else
+		#define FIX_DIV_SC
+	#endif
+
+	#define FIX_DIV(c, a, b)					\
+		{							   			\
+			FIX_DIV_SC DWORD temp, rem, btemp;	\
+									   			\
+			/* fraction done bytewise */		\
+			temp = ((a / b) << 16);				\
+			rem = a % b;			   			\
+			btemp = b;							\
+			if (INT(btemp) < 256) {				\
+				rem <<= 8;				   		\
+			}									\
+			else {								\
+				btemp >>= 8;					\
+			}									\
+			temp += ((rem / btemp) << 8);  		\
+			rem %= btemp;			   			\
+			rem <<= 8;				   			\
+			temp += rem / btemp;		   		\
+			c = temp;				   			\
+		}
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* INFO DATA DEFS */
+
+#ifndef NOWTINFO
+
+#ifndef NOWTAXIS
+
+typedef struct tagAXIS {
+	LONG	axMin;
+	LONG	axMax;
+	UINT	axUnits;
+	FIX32	axResolution;
+} AXIS, *PAXIS, NEAR *NPAXIS, FAR *LPAXIS;
+
+	/* unit specifiers */
+	#define TU_NONE			0
+	#define TU_INCHES		1
+	#define TU_CENTIMETERS	2
+	#define TU_CIRCLE		3
+
+#endif
+
+#ifndef NOWTSYSBUTTONS
+
+/* system button assignment values */
+#define SBN_NONE		0x00
+#define SBN_LCLICK		0x01
+#define SBN_LDBLCLICK	0x02
+#define SBN_LDRAG		0x03
+#define SBN_RCLICK		0x04
+#define SBN_RDBLCLICK	0x05
+#define SBN_RDRAG		0x06
+#define SBN_MCLICK		0x07
+#define SBN_MDBLCLICK	0x08
+#define SBN_MDRAG		0x09
+/* for Pen Windows */
+#define SBN_PTCLICK		0x10
+#define SBN_PTDBLCLICK	0x20
+#define SBN_PTDRAG		0x30
+#define SBN_PNCLICK		0x40
+#define SBN_PNDBLCLICK	0x50
+#define SBN_PNDRAG		0x60
+#define SBN_P1CLICK		0x70
+#define SBN_P1DBLCLICK	0x80
+#define SBN_P1DRAG		0x90
+#define SBN_P2CLICK		0xA0
+#define SBN_P2DBLCLICK	0xB0
+#define SBN_P2DRAG		0xC0
+#define SBN_P3CLICK		0xD0
+#define SBN_P3DBLCLICK	0xE0
+#define SBN_P3DRAG		0xF0
+
+#endif
+
+#ifndef NOWTCAPABILITIES
+
+/* hardware capabilities */
+#define HWC_INTEGRATED		0x0001
+#define HWC_TOUCH			0x0002
+#define HWC_HARDPROX		0x0004
+#define HWC_PHYSID_CURSORS	0x0008 /* 1.1 */
+#endif
+
+#ifndef NOWTIFC
+
+#ifndef NOWTCURSORS 
+
+/* cursor capabilities */
+#define CRC_MULTIMODE	0x0001 /* 1.1 */
+#define CRC_AGGREGATE	0x0002 /* 1.1 */
+#define CRC_INVERT		0x0004 /* 1.1 */
+
+#endif 
+
+/* info categories */
+#define WTI_INTERFACE		1
+	#define IFC_WINTABID		1
+	#define IFC_SPECVERSION		2
+	#define IFC_IMPLVERSION		3
+	#define IFC_NDEVICES		4
+	#define IFC_NCURSORS		5
+	#define IFC_NCONTEXTS		6
+	#define IFC_CTXOPTIONS		7
+	#define IFC_CTXSAVESIZE		8
+	#define IFC_NEXTENSIONS		9
+	#define IFC_NMANAGERS		10
+	#define IFC_MAX				10
+
+
+#endif
+
+#ifndef NOWTSTATUS
+
+#define WTI_STATUS			2
+	#define STA_CONTEXTS		1
+	#define STA_SYSCTXS			2
+	#define STA_PKTRATE			3
+	#define STA_PKTDATA			4
+	#define STA_MANAGERS		5
+	#define STA_SYSTEM			6
+	#define STA_BUTTONUSE		7
+	#define STA_SYSBTNUSE		8
+	#define STA_MAX				8
+
+#endif
+
+#ifndef NOWTDEFCONTEXT
+
+#define WTI_DEFCONTEXT	3
+#define WTI_DEFSYSCTX	4
+#define WTI_DDCTXS		400 /* 1.1 */
+#define WTI_DSCTXS		500 /* 1.1 */
+	#define CTX_NAME		1
+	#define CTX_OPTIONS		2
+	#define CTX_STATUS		3
+	#define CTX_LOCKS		4
+	#define CTX_MSGBASE		5
+	#define CTX_DEVICE		6
+	#define CTX_PKTRATE		7
+	#define CTX_PKTDATA		8
+	#define CTX_PKTMODE		9
+	#define CTX_MOVEMASK	10
+	#define CTX_BTNDNMASK	11
+	#define CTX_BTNUPMASK	12
+	#define CTX_INORGX		13
+	#define CTX_INORGY		14
+	#define CTX_INORGZ		15
+	#define CTX_INEXTX		16
+	#define CTX_INEXTY		17
+	#define CTX_INEXTZ		18
+	#define CTX_OUTORGX		19
+	#define CTX_OUTORGY		20
+	#define CTX_OUTORGZ		21
+	#define CTX_OUTEXTX		22
+	#define CTX_OUTEXTY		23
+	#define CTX_OUTEXTZ		24
+	#define CTX_SENSX		25
+	#define CTX_SENSY		26
+	#define CTX_SENSZ		27
+	#define CTX_SYSMODE		28
+	#define CTX_SYSORGX		29
+	#define CTX_SYSORGY		30
+	#define CTX_SYSEXTX		31
+	#define CTX_SYSEXTY		32
+	#define CTX_SYSSENSX	33
+	#define CTX_SYSSENSY	34
+	#define CTX_MAX			34
+
+#endif
+
+#ifndef NOWTDEVICES
+
+#define WTI_DEVICES		100
+	#define DVC_NAME			1
+	#define DVC_HARDWARE		2
+	#define DVC_NCSRTYPES		3
+	#define DVC_FIRSTCSR		4
+	#define DVC_PKTRATE			5
+	#define DVC_PKTDATA			6
+	#define DVC_PKTMODE			7
+	#define DVC_CSRDATA			8
+	#define DVC_XMARGIN			9
+	#define DVC_YMARGIN			10
+	#define DVC_ZMARGIN			11
+	#define DVC_X				12
+	#define DVC_Y				13
+	#define DVC_Z				14
+	#define DVC_NPRESSURE		15
+	#define DVC_TPRESSURE		16
+	#define DVC_ORIENTATION		17
+	#define DVC_ROTATION		18 /* 1.1 */
+	#define DVC_PNPID			19 /* 1.1 */
+	#define DVC_MAX				19
+
+#endif
+
+#ifndef NOWTCURSORS
+
+#define WTI_CURSORS		200
+	#define CSR_NAME			1
+	#define CSR_ACTIVE			2
+	#define CSR_PKTDATA			3
+	#define CSR_BUTTONS			4
+	#define CSR_BUTTONBITS		5
+	#define CSR_BTNNAMES		6
+	#define CSR_BUTTONMAP		7
+	#define CSR_SYSBTNMAP		8
+	#define CSR_NPBUTTON		9
+	#define CSR_NPBTNMARKS		10
+	#define CSR_NPRESPONSE		11
+	#define CSR_TPBUTTON		12
+	#define CSR_TPBTNMARKS		13
+	#define CSR_TPRESPONSE		14
+	#define CSR_PHYSID			15 /* 1.1 */
+	#define CSR_MODE			16 /* 1.1 */
+	#define CSR_MINPKTDATA		17 /* 1.1 */
+	#define CSR_MINBUTTONS		18 /* 1.1 */
+	#define CSR_CAPABILITIES	19 /* 1.1 */
+	#define CSR_TYPE				20 /* 1.2 */
+	#define CSR_MAX				20
+
+#endif
+
+#ifndef NOWTEXTENSIONS
+
+#define WTI_EXTENSIONS	300
+	#define EXT_NAME		1
+	#define EXT_TAG			2
+	#define EXT_MASK		3
+	#define EXT_SIZE		4
+	#define EXT_AXES		5
+	#define EXT_DEFAULT		6
+	#define EXT_DEFCONTEXT	7
+	#define EXT_DEFSYSCTX	8
+	#define EXT_CURSORS		9 
+	#define EXT_MAX			109 /* Allow 100 cursors */
+
+#endif
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* CONTEXT DATA DEFS */
+
+#define LCNAMELEN	40
+#define LC_NAMELEN	40
+#ifdef WIN32
+typedef struct tagLOGCONTEXTA {
+	char	lcName[LCNAMELEN];
+	UINT	lcOptions;
+	UINT	lcStatus;
+	UINT	lcLocks;
+	UINT	lcMsgBase;
+	UINT	lcDevice;
+	UINT	lcPktRate;
+	WTPKT	lcPktData;
+	WTPKT	lcPktMode;
+	WTPKT	lcMoveMask;
+	DWORD	lcBtnDnMask;
+	DWORD	lcBtnUpMask;
+	LONG	lcInOrgX;
+	LONG	lcInOrgY;
+	LONG	lcInOrgZ;
+	LONG	lcInExtX;
+	LONG	lcInExtY;
+	LONG	lcInExtZ;
+	LONG	lcOutOrgX;
+	LONG	lcOutOrgY;
+	LONG	lcOutOrgZ;
+	LONG	lcOutExtX;
+	LONG	lcOutExtY;
+	LONG	lcOutExtZ;
+	FIX32	lcSensX;
+	FIX32	lcSensY;
+	FIX32	lcSensZ;
+	BOOL	lcSysMode;
+	int		lcSysOrgX;
+	int		lcSysOrgY;
+	int		lcSysExtX;
+	int		lcSysExtY;
+	FIX32	lcSysSensX;
+	FIX32	lcSysSensY;
+} LOGCONTEXTA, *PLOGCONTEXTA, NEAR *NPLOGCONTEXTA, FAR *LPLOGCONTEXTA;
+typedef struct tagLOGCONTEXTW {
+	WCHAR	lcName[LCNAMELEN];
+	UINT	lcOptions;
+	UINT	lcStatus;
+	UINT	lcLocks;
+	UINT	lcMsgBase;
+	UINT	lcDevice;
+	UINT	lcPktRate;
+	WTPKT	lcPktData;
+	WTPKT	lcPktMode;
+	WTPKT	lcMoveMask;
+	DWORD	lcBtnDnMask;
+	DWORD	lcBtnUpMask;
+	LONG	lcInOrgX;
+	LONG	lcInOrgY;
+	LONG	lcInOrgZ;
+	LONG	lcInExtX;
+	LONG	lcInExtY;
+	LONG	lcInExtZ;
+	LONG	lcOutOrgX;
+	LONG	lcOutOrgY;
+	LONG	lcOutOrgZ;
+	LONG	lcOutExtX;
+	LONG	lcOutExtY;
+	LONG	lcOutExtZ;
+	FIX32	lcSensX;
+	FIX32	lcSensY;
+	FIX32	lcSensZ;
+	BOOL	lcSysMode;
+	int		lcSysOrgX;
+	int		lcSysOrgY;
+	int		lcSysExtX;
+	int		lcSysExtY;
+	FIX32	lcSysSensX;
+	FIX32	lcSysSensY;
+} LOGCONTEXTW, *PLOGCONTEXTW, NEAR *NPLOGCONTEXTW, FAR *LPLOGCONTEXTW;
+#ifdef UNICODE
+typedef LOGCONTEXTW LOGCONTEXT;
+typedef PLOGCONTEXTW PLOGCONTEXT;
+typedef NPLOGCONTEXTW NPLOGCONTEXT;
+typedef LPLOGCONTEXTW LPLOGCONTEXT;
+#else
+typedef LOGCONTEXTA LOGCONTEXT;
+typedef PLOGCONTEXTA PLOGCONTEXT;
+typedef NPLOGCONTEXTA NPLOGCONTEXT;
+typedef LPLOGCONTEXTA LPLOGCONTEXT;
+#endif /* UNICODE */
+#else /* WIN32 */
+typedef struct tagLOGCONTEXT {
+	char	lcName[LCNAMELEN];
+	UINT	lcOptions;
+	UINT	lcStatus;
+	UINT	lcLocks;
+	UINT	lcMsgBase;
+	UINT	lcDevice;
+	UINT	lcPktRate;
+	WTPKT	lcPktData;
+	WTPKT	lcPktMode;
+	WTPKT	lcMoveMask;
+	DWORD	lcBtnDnMask;
+	DWORD	lcBtnUpMask;
+	LONG	lcInOrgX;
+	LONG	lcInOrgY;
+	LONG	lcInOrgZ;
+	LONG	lcInExtX;
+	LONG	lcInExtY;
+	LONG	lcInExtZ;
+	LONG	lcOutOrgX;
+	LONG	lcOutOrgY;
+	LONG	lcOutOrgZ;
+	LONG	lcOutExtX;
+	LONG	lcOutExtY;
+	LONG	lcOutExtZ;
+	FIX32	lcSensX;
+	FIX32	lcSensY;
+	FIX32	lcSensZ;
+	BOOL	lcSysMode;
+	int		lcSysOrgX;
+	int		lcSysOrgY;
+	int		lcSysExtX;
+	int		lcSysExtY;
+	FIX32	lcSysSensX;
+	FIX32	lcSysSensY;
+} LOGCONTEXT, *PLOGCONTEXT, NEAR *NPLOGCONTEXT, FAR *LPLOGCONTEXT;
+#endif /* WIN32 */
+
+	/* context option values */
+	#define CXO_SYSTEM		0x0001
+	#define CXO_PEN			0x0002
+	#define CXO_MESSAGES	0x0004
+	#define CXO_MARGIN		0x8000
+	#define CXO_MGNINSIDE	0x4000
+	#define CXO_CSRMESSAGES	0x0008 /* 1.1 */
+
+	/* context status values */
+	#define CXS_DISABLED	0x0001
+	#define CXS_OBSCURED	0x0002
+	#define CXS_ONTOP		0x0004
+
+	/* context lock values */
+	#define CXL_INSIZE		0x0001
+	#define CXL_INASPECT	0x0002
+	#define CXL_SENSITIVITY	0x0004
+	#define CXL_MARGIN		0x0008
+	#define CXL_SYSOUT		0x0010
+
+/* -------------------------------------------------------------------------- */
+/* EVENT DATA DEFS */
+
+/* For packet structure definition, see pktdef.h */
+
+/* packet status values */
+#define TPS_PROXIMITY		0x0001
+#define TPS_QUEUE_ERR		0x0002
+#define TPS_MARGIN			0x0004
+#define TPS_GRAB			0x0008
+#define TPS_INVERT			0x0010 /* 1.1 */
+
+typedef struct tagORIENTATION {
+	int orAzimuth;
+	int orAltitude;
+	int orTwist;
+} ORIENTATION, *PORIENTATION, NEAR *NPORIENTATION, FAR *LPORIENTATION;
+
+typedef struct tagROTATION { /* 1.1 */
+	int	roPitch;
+	int roRoll;
+	int roYaw;
+} ROTATION, *PROTATION, NEAR *NPROTATION, FAR *LPROTATION;
+// grandfather in obsolete member names.
+#define rotPitch	roPitch
+#define rotRoll		roRoll
+#define rotYaw		roYaw
+
+/* relative buttons */
+#define TBN_NONE	0
+#define TBN_UP		1
+#define TBN_DOWN	2
+
+/* -------------------------------------------------------------------------- */
+/* DEVICE CONFIG CONSTANTS */
+
+#ifndef NOWTDEVCFG
+
+#define WTDC_NONE		0
+#define WTDC_CANCEL		1
+#define WTDC_OK			2
+#define WTDC_RESTART	3
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* HOOK CONSTANTS */
+
+#ifndef NOWTHOOKS
+
+#define WTH_PLAYBACK		1
+#define WTH_RECORD			2
+
+#define WTHC_GETLPLPFN	    (-3)
+#define WTHC_LPLPFNNEXT	    (-2)
+#define WTHC_LPFNNEXT	    (-1)
+#define WTHC_ACTION		    0
+#define WTHC_GETNEXT   	    1
+#define WTHC_SKIP 	   		2
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* PREFERENCE FUNCTION CONSTANTS */
+
+#ifndef NOWTPREF
+
+#define WTP_LPDEFAULT	((LPVOID)-1L)
+#define WTP_DWDEFAULT	((DWORD)-1L)
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* EXTENSION TAGS AND CONSTANTS */
+
+#ifndef NOWTEXTENSIONS
+
+/* constants for use with pktdef.h */
+#define PKEXT_ABSOLUTE	1
+#define PKEXT_RELATIVE	2
+
+/* Extension tags. */
+#define WTX_OBT			0	/* Out of bounds tracking */
+#define WTX_FKEYS		1	/* Function keys */
+#define WTX_TILT		2	/* Raw Cartesian tilt; 1.1 */
+#define WTX_CSRMASK		3	/* select input by cursor type; 1.1 */
+#define WTX_XBTNMASK	4	/* Extended button mask; 1.1 */
+#define WTX_EXPKEYS	5	/* ExpressKeys; 1.3 */
+
+typedef struct tagXBTNMASK {
+	BYTE xBtnDnMask[32];
+	BYTE xBtnUpMask[32];
+} XBTNMASK;
+
+typedef struct tagTILT { /* 1.1 */
+	int tiltX;
+	int tiltY;
+} TILT;
+
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* -------------------------------------------------------------------------- */
+/* Functions */
+
+	#ifndef API
+		#ifndef WINAPI
+			#define API			FAR PASCAL
+		#else
+			#define API			WINAPI
+		#endif
+	#endif
+
+#ifndef NOWTCALLBACKS
+
+	#ifndef CALLBACK
+	#define CALLBACK	FAR PASCAL
+	#endif
+
+	#ifndef NOWTMANAGERFXNS
+	/* callback function types */
+	typedef BOOL (WINAPI * WTENUMPROC)(HCTX, LPARAM); /* changed CALLBACK->WINAPI, 1.1 */
+	typedef BOOL (WINAPI * WTCONFIGPROC)(HCTX, HWND);
+	typedef LRESULT (WINAPI * WTHOOKPROC)(int, WPARAM, LPARAM);
+	typedef WTHOOKPROC FAR *LPWTHOOKPROC;
+	#endif
+
+#endif
+
+
+#ifndef NOWTFUNCTIONS
+
+	#ifndef NOWTBASICFXNS
+	/* BASIC FUNCTIONS */
+#ifdef WIN32
+	UINT API WTInfoA(UINT, UINT, LPVOID);
+	#define ORD_WTInfoA						20
+	UINT API WTInfoW(UINT, UINT, LPVOID);
+	#define ORD_WTInfoW					  1020
+	#ifdef UNICODE
+	#define WTInfo  WTInfoW
+	#define ORD_WTInfo  ORD_WTInfoW
+	#else
+	#define WTInfo  WTInfoA
+	#define ORD_WTInfo  ORD_WTInfoA
+	#endif /* !UNICODE */
+#else
+	UINT API WTInfo(UINT, UINT, LPVOID);
+	#define ORD_WTInfo						20
+#endif
+#ifdef WIN32
+	HCTX API WTOpenA(HWND, LPLOGCONTEXTA, BOOL);
+	#define ORD_WTOpenA						21
+	HCTX API WTOpenW(HWND, LPLOGCONTEXTW, BOOL);
+	#define ORD_WTOpenW					  1021
+	#ifdef UNICODE
+	#define WTOpen  WTOpenW
+	#define ORD_WTOpen  ORD_WTOpenW
+	#else
+	#define WTOpen  WTOpenA
+	#define ORD_WTOpen  ORD_WTOpenA
+	#endif /* !UNICODE */
+#else
+	HCTX API WTOpen(HWND, LPLOGCONTEXT, BOOL);
+	#define ORD_WTOpen						21
+#endif
+	BOOL API WTClose(HCTX);
+	#define ORD_WTClose						22
+	int API WTPacketsGet(HCTX, int, LPVOID);
+	#define ORD_WTPacketsGet				23
+	BOOL API WTPacket(HCTX, UINT, LPVOID);
+	#define ORD_WTPacket					24
+	#endif
+
+	#ifndef NOWTVISIBILITYFXNS
+	/* VISIBILITY FUNCTIONS */
+	BOOL API WTEnable(HCTX, BOOL);
+	#define ORD_WTEnable					40
+	BOOL API WTOverlap(HCTX, BOOL);
+	#define ORD_WTOverlap					41
+	#endif
+
+	#ifndef NOWTCTXEDITFXNS
+	/* CONTEXT EDITING FUNCTIONS */
+	BOOL API WTConfig(HCTX, HWND);
+	#define ORD_WTConfig					60
+#ifdef WIN32
+	BOOL API WTGetA(HCTX, LPLOGCONTEXTA);
+	#define ORD_WTGetA						61
+	BOOL API WTGetW(HCTX, LPLOGCONTEXTW);
+	#define ORD_WTGetW					  1061
+	#ifdef UNICODE
+	#define WTGet  WTGetW
+	#define ORD_WTGet  ORD_WTGetW
+	#else
+	#define WTGet  WTGetA
+	#define ORD_WTGet  ORD_WTGetA
+	#endif /* !UNICODE */
+#else
+	BOOL API WTGet(HCTX, LPLOGCONTEXT);
+	#define ORD_WTGet						61
+#endif
+#ifdef WIN32
+	BOOL API WTSetA(HCTX, LPLOGCONTEXTA);
+	#define ORD_WTSetA						62
+	BOOL API WTSetW(HCTX, LPLOGCONTEXTW);
+	#define ORD_WTSetW					  1062
+	#ifdef UNICODE
+	#define WTSet  WTSetW
+	#define ORD_WTSet  ORD_WTSetW
+	#else
+	#define WTSet  WTSetA
+	#define ORD_WTSet  ORD_WTSetA
+	#endif /* !UNICODE */
+#else
+	BOOL API WTSet(HCTX, LPLOGCONTEXT);
+	#define ORD_WTSet						62
+#endif
+	BOOL API WTExtGet(HCTX, UINT, LPVOID);
+	#define ORD_WTExtGet					63
+	BOOL API WTExtSet(HCTX, UINT, LPVOID);
+	#define ORD_WTExtSet					64
+	BOOL API WTSave(HCTX, LPVOID);
+	#define ORD_WTSave						65
+	HCTX API WTRestore(HWND, LPVOID, BOOL);
+	#define ORD_WTRestore					66
+	#endif
+
+	#ifndef NOWTQUEUEFXNS
+	/* ADVANCED PACKET AND QUEUE FUNCTIONS */
+	int API WTPacketsPeek(HCTX, int, LPVOID);
+	#define ORD_WTPacketsPeek				80
+	int API WTDataGet(HCTX, UINT, UINT, int, LPVOID, LPINT);
+	#define ORD_WTDataGet					81
+	int API WTDataPeek(HCTX, UINT, UINT, int, LPVOID, LPINT);
+	#define ORD_WTDataPeek					82
+#ifndef WIN32
+/* OBSOLETE IN WIN32! */
+	DWORD API WTQueuePackets(HCTX);
+	#define ORD_WTQueuePackets				83
+#endif
+	int API WTQueueSizeGet(HCTX);
+	#define ORD_WTQueueSizeGet				84
+	BOOL API WTQueueSizeSet(HCTX, int);
+	#define ORD_WTQueueSizeSet				85
+	#endif
+
+	#ifndef NOWTHMGRFXNS
+	/* MANAGER HANDLE FUNCTIONS */
+	HMGR API WTMgrOpen(HWND, UINT);
+	#define ORD_WTMgrOpen					100
+	BOOL API WTMgrClose(HMGR);
+	#define ORD_WTMgrClose					101
+	#endif
+
+	#ifndef NOWTMGRCTXFXNS
+	/* MANAGER CONTEXT FUNCTIONS */
+	BOOL API WTMgrContextEnum(HMGR, WTENUMPROC, LPARAM);
+	#define ORD_WTMgrContextEnum			120
+	HWND API WTMgrContextOwner(HMGR, HCTX);
+	#define ORD_WTMgrContextOwner			121
+	HCTX API WTMgrDefContext(HMGR, BOOL);
+	#define ORD_WTMgrDefContext				122
+	HCTX API WTMgrDefContextEx(HMGR, UINT, BOOL); /* 1.1 */
+	#define ORD_WTMgrDefContextEx			206
+	#endif
+	
+	#ifndef NOWTMGRCONFIGFXNS
+	/* MANAGER CONFIG BOX  FUNCTIONS */
+	UINT API WTMgrDeviceConfig(HMGR, UINT, HWND);
+	#define ORD_WTMgrDeviceConfig			140
+#ifndef WIN32
+/* OBSOLETE IN WIN32! */
+	BOOL API WTMgrConfigReplace(HMGR, BOOL, WTCONFIGPROC);
+	#define ORD_WTMgrConfigReplace			141
+#endif
+	#endif
+
+	#ifndef NOWTMGRHOOKFXNS
+	/* MANAGER PACKET HOOK FUNCTIONS */
+#ifndef WIN32
+/* OBSOLETE IN WIN32! */
+	WTHOOKPROC API WTMgrPacketHook(HMGR, BOOL, int, WTHOOKPROC);
+	#define ORD_WTMgrPacketHook				160
+	LRESULT API WTMgrPacketHookDefProc(int, WPARAM, LPARAM, LPWTHOOKPROC);
+	#define ORD_WTMgrPacketHookDefProc		161
+#endif
+	#endif
+
+	#ifndef NOWTMGRPREFFXNS
+	/* MANAGER PREFERENCE DATA FUNCTIONS */
+	BOOL API WTMgrExt(HMGR, UINT, LPVOID);
+	#define ORD_WTMgrExt					180
+	BOOL API WTMgrCsrEnable(HMGR, UINT, BOOL);
+	#define ORD_WTMgrCsrEnable				181
+	BOOL API WTMgrCsrButtonMap(HMGR, UINT, LPBYTE, LPBYTE);
+	#define ORD_WTMgrCsrButtonMap			182
+	BOOL API WTMgrCsrPressureBtnMarks(HMGR, UINT, DWORD, DWORD);
+	#define ORD_WTMgrCsrPressureBtnMarks	183
+	BOOL API WTMgrCsrPressureResponse(HMGR, UINT, UINT FAR *, UINT FAR *);
+	#define ORD_WTMgrCsrPressureResponse	184
+	BOOL API WTMgrCsrExt(HMGR, UINT, UINT, LPVOID);
+	#define ORD_WTMgrCsrExt					185
+	#endif
+
+/* Win32 replacements for non-portable functions. */
+	#ifndef NOWTQUEUEFXNS
+	/* ADVANCED PACKET AND QUEUE FUNCTIONS */
+	BOOL API WTQueuePacketsEx(HCTX, UINT FAR *, UINT FAR *);
+	#define ORD_WTQueuePacketsEx			200
+	#endif
+
+	#ifndef NOWTMGRCONFIGFXNS
+	/* MANAGER CONFIG BOX  FUNCTIONS */
+#ifdef WIN32
+	BOOL API WTMgrConfigReplaceExA(HMGR, BOOL, LPSTR, LPSTR);
+	#define ORD_WTMgrConfigReplaceExA		202
+	BOOL API WTMgrConfigReplaceExW(HMGR, BOOL, LPWSTR, LPSTR);
+	#define ORD_WTMgrConfigReplaceExW		1202
+	#ifdef UNICODE
+	#define WTMgrConfigReplaceEx  WTMgrConfigReplaceExW
+	#define ORD_WTMgrConfigReplaceEx  ORD_WTMgrConfigReplaceExW
+	#else
+	#define WTMgrConfigReplaceEx  WTMgrConfigReplaceExA
+	#define ORD_WTMgrConfigReplaceEx  ORD_WTMgrConfigReplaceExA
+	#endif /* !UNICODE */
+#else
+	BOOL API WTMgrConfigReplaceEx(HMGR, BOOL, LPSTR, LPSTR);
+	#define ORD_WTMgrConfigReplaceEx		202
+#endif
+	#endif
+
+	#ifndef NOWTMGRHOOKFXNS
+	/* MANAGER PACKET HOOK FUNCTIONS */
+#ifdef WIN32
+	HWTHOOK API WTMgrPacketHookExA(HMGR, int, LPSTR, LPSTR);
+	#define ORD_WTMgrPacketHookExA			203
+	HWTHOOK API WTMgrPacketHookExW(HMGR, int, LPWSTR, LPSTR);
+	#define ORD_WTMgrPacketHookExW			1203
+	#ifdef UNICODE
+	#define WTMgrPacketHookEx  WTMgrPacketHookExW
+	#define ORD_WTMgrPacketHookEx  ORD_WTMgrPacketHookExW
+	#else
+	#define WTMgrPacketHookEx  WTMgrPacketHookExA
+	#define ORD_WTMgrPacketHookEx  ORD_WTMgrPacketHookExA
+	#endif /* !UNICODE */
+#else
+	HWTHOOK API WTMgrPacketHookEx(HMGR, int, LPSTR, LPSTR);
+	#define ORD_WTMgrPacketHookEx			203
+#endif
+	BOOL API WTMgrPacketUnhook(HWTHOOK);
+	#define ORD_WTMgrPacketUnhook			204
+	LRESULT API WTMgrPacketHookNext(HWTHOOK, int, WPARAM, LPARAM);
+	#define ORD_WTMgrPacketHookNext			205
+	#endif
+
+	#ifndef NOWTMGRPREFFXNS
+	/* MANAGER PREFERENCE DATA FUNCTIONS */
+	BOOL API WTMgrCsrPressureBtnMarksEx(HMGR, UINT, UINT FAR *, UINT FAR *);
+	#define ORD_WTMgrCsrPressureBtnMarksEx	201
+	#endif
+
+
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif	/* __cplusplus */
+
+#endif /* #define _INC_WINTAB */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/win32/wactab/wintabx.h	Tue Aug 26 05:26:28 2008 +0000
@@ -0,0 +1,135 @@
+/* ------------------------------- wintabx.h -------------------------------- */
+/* Combined 16 & 32-bit version. */
+
+
+/*------------------------------------------------------------------------------
+The text and information contained in this file may be freely used,
+copied, or distributed without compensation or licensing restrictions.
+
+This file is copyright 1991-1998 by LCS/Telegraphics.
+------------------------------------------------------------------------------*/
+
+#ifndef _INC_WINTABX     /* prevent multiple includes */
+#define _INC_WINTABX
+
+#ifdef __cplusplus
+extern "C" {
+#endif	/* __cplusplus */
+
+/* prototype for wintabx.lib. */
+#define _UnlinkWinTab _UnlinkWintab	
+#ifdef WIN32
+	extern WINAPI _UnlinkWintab(void);
+#else
+	extern FAR _UnlinkWintab(void);
+#endif
+
+/****** Wintab message crackers ***********************************************/
+
+#ifndef HANDLE_MSG
+#define HANDLE_MSG(hwnd, message, fn)    \
+    case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
+#endif
+
+/* void Cls_OnWintabPacket(HWND hwnd, HCTX hCtx, UINT sn) */
+#define HANDLE_WT_PACKET(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(lParam), (UINT)(wParam)), 0L)
+#define FORWARD__WT_PACKET(hwnd, bs, hCtx, sn, fn) \
+    (void)(fn)((hwnd), _WT_PACKET(bs), (WPARAM)(UINT)(sn), (LPARAM)(HCTX)(hCtx))
+#define FORWARD_WT_PACKET(hwnd, hCtx, sn, fn) \
+	FORWARD__WT_PACKET(hwnd, WT_DEFBASE, hCtx, sn, fn)
+
+/* void Cls_OnWintabCtxOpen(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXOPEN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXOPEN(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXOPEN(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXOPEN(hwnd, hCtx, sf, fn) \
+	FORWARD__WT_CTXOPEN(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxClose(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXCLOSE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXCLOSE(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXCLOSE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXCLOSE(hwnd, hCtx, sf, fn) \
+	FORWARD__WT_CTXCLOSE(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxUpdate(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXUPDATE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXUPDATE(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXUPDATE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXUPDATE(hwnd, hCtx, sf, fn) \
+	FORWARD__WT_CTXUPDATE(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxOverlap(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXOVERLAP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXOVERLAP(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXOVERLAP(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXOVERLAP(hwnd, hCtx, sf, fn) \
+	FORWARD__WT_CTXOVERLAP(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabProximity(HWND hwnd, HCTX hCtx, BOOL cp, BOOL hp) */
+#define HANDLE_WT_PROXIMITY(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (BOOL)LOWORD(lParam),  (BOOL)HIWORD(lParam)), 0L)
+#define FORWARD__WT_PROXIMITY(hwnd, bs, hCtx, cp, hp, fn) \
+    (void)(fn)((hwnd), _WT_PROXIMITY(bs), (WPARAM)(HCTX)(hCtx), MAKELPARAM((cp), (hp))
+#define FORWARD_WT_PROXIMITY(hwnd, hCtx, sf, fn) \
+	FORWARD__WT_PROXIMITY(hwnd, WT_DEFBASE, hCtx, cp, hp, fn)
+
+/* void Cls_OnWintabInfoChange(HWND hwnd, HMGR hMgr, UINT c, UINT i) */
+#define HANDLE_WT_INFOCHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HMGR)(wParam), (UINT)LOWORD(lParam),  (UINT)HIWORD(lParam)), 0L)
+#define FORWARD__WT_INFOCHANGE(hwnd, bs, hMgr, cp, hp, fn) \
+    (void)(fn)((hwnd), _WT_INFOCHANGE(bs), (WPARAM)(HMGR)(hMgr), MAKELPARAM((c), (i))
+#define FORWARD_WT_INFOCHANGE(hwnd, hMgr, sf, fn) \
+	FORWARD__WT_INFOCHANGE(hwnd, WT_DEFBASE, hMgr, cp, hp, fn)
+
+/****** Alternate porting layer macros ****************************************/
+
+#define GET_WT_PACKET_HCTX(wp, lp)			((HCTX)lp)
+#define GET_WT_PACKET_SERIAL(wp, lp)		(wp)
+#define GET_WT_PACKET_MPS(h, s)				\
+		(s), (LPARAM)(h)
+
+#define GET_WT_CTXOPEN_HCTX(wp, lp)			((HCTX)wp)
+#define GET_WT_CTXOPEN_STATUS(wp, lp)		((UINT)lp)
+#define GET_WT_CTXOPEN_MPS(h, s)			\
+		(WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXCLOSE_HCTX(wp, lp)		((HCTX)wp)
+#define GET_WT_CTXCLOSE_STATUS(wp, lp)		((UINT)lp)
+#define GET_WT_CTXCLOSE_MPS(h, s)			\
+		(WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXUPDATE_HCTX(wp, lp)		((HCTX)wp)
+#define GET_WT_CTXUPDATE_STATUS(wp, lp)		((UINT)lp)
+#define GET_WT_CTXUPDATE_MPS(h, s)			\
+		(WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXOVERLAP_HCTX(wp, lp)		((HCTX)wp)
+#define GET_WT_CTXOVERLAP_STATUS(wp, lp)	((UINT)lp)
+#define GET_WT_CTXOVERLAP_MPS(h, s)			\
+		(WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_PROXIMITY_HCTX(wp, lp)		((HCTX)wp)
+#define GET_WT_PROXIMITY_CTXPROX(wp, lp)	LOWORD(lp)
+#define GET_WT_PROXIMITY_HARDPROX(wp, lp)	HIWORD(lp)
+#define GET_WT_PROXIMITY_MPS(h, fc, fh)		\
+		(WPARAM)(h), MAKELONG(fc, fh)
+
+#define GET_WT_INFOCHANGE_HMGR(wp, lp)		((HMGR)wp)
+#define GET_WT_INFOCHANGE_CATEGORY(wp, lp)	LOWORD(lp)
+#define GET_WT_INFOCHANGE_INDEX(wp, lp)		HIWORD(lp)
+#define GET_WT_INFOCHANGE_MPS(h, c, i)		\
+		(WPARAM)(h), MAKELONG(c, i)
+
+
+#ifdef __cplusplus
+}
+#endif	/* __cplusplus */
+
+#endif /* #define _INC_WINTABX */
+