From c9ef1643b31c7a566b962c95a6dc4d0b134b6701 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 26 Aug 2008 05:26:28 +0000 Subject: [PATCH] Added Wacom API headers. FIXME: Dynamically load the Wacom API functions from wintab32.dll --- src/video/win32/SDL_win32events.c | 21 +- src/video/win32/SDL_win32keyboard.c | 14 +- src/video/win32/SDL_win32mouse.c | 5 - src/video/win32/SDL_win32video.c | 2 - src/video/win32/SDL_win32video.h | 5 + src/video/win32/SDL_win32window.c | 7 - src/video/win32/wactab/pktdef.h | 236 ++++++++ src/video/win32/wactab/wintab.h | 865 ++++++++++++++++++++++++++++ src/video/win32/wactab/wintabx.h | 135 +++++ 9 files changed, 1257 insertions(+), 33 deletions(-) create mode 100644 src/video/win32/wactab/pktdef.h create mode 100644 src/video/win32/wactab/wintab.h create mode 100644 src/video/win32/wactab/wintabx.h diff --git a/src/video/win32/SDL_win32events.c b/src/video/win32/SDL_win32events.c index fc17564b5..90a3e18b4 100644 --- a/src/video/win32/SDL_win32events.c +++ b/src/video/win32/SDL_win32events.c @@ -32,11 +32,6 @@ #include "SDL_vkeys.h" #include "../../events/SDL_events_c.h" -#include -#define PACKETDATA ( PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_CURSOR) -#define PACKETMODE 0 -#include - /*#define WMMSG_DEBUG*/ #ifdef WMMSG_DEBUG #include @@ -152,17 +147,15 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { /* 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 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 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 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) /* 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) { diff --git a/src/video/win32/SDL_win32keyboard.c b/src/video/win32/SDL_win32keyboard.c index b050d89bc..2b06e45b5 100644 --- a/src/video/win32/SDL_win32keyboard.c +++ b/src/video/win32/SDL_win32keyboard.c @@ -54,20 +54,26 @@ WIN_InitKeyboard(_THIS) /* 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 , 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 , 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 , 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 , 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 } } diff --git a/src/video/win32/SDL_win32mouse.c b/src/video/win32/SDL_win32mouse.c index 52f7adcb4..b43fedb77 100644 --- a/src/video/win32/SDL_win32mouse.c +++ b/src/video/win32/SDL_win32mouse.c @@ -33,11 +33,6 @@ #include "../../events/SDL_mouse_c.h" -#include - -#define PACKETDATA ( PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_CURSOR) -#define PACKETMODE 0 -#include extern HANDLE *mice; extern int total_mice; extern int tablet; diff --git a/src/video/win32/SDL_win32video.c b/src/video/win32/SDL_win32video.c index f77a54065..215093473 100644 --- a/src/video/win32/SDL_win32video.c +++ b/src/video/win32/SDL_win32video.c @@ -31,8 +31,6 @@ #include "SDL_d3drender.h" #include "SDL_gdirender.h" -#include - /* Initialization/Query functions */ static int WIN_VideoInit(_THIS); static void WIN_VideoQuit(_THIS); diff --git a/src/video/win32/SDL_win32video.h b/src/video/win32/SDL_win32video.h index 35a455224..ff449fdf6 100644 --- a/src/video/win32/SDL_win32video.h +++ b/src/video/win32/SDL_win32video.h @@ -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" diff --git a/src/video/win32/SDL_win32window.c b/src/video/win32/SDL_win32window.c index 48694eddd..c1683803a 100644 --- a/src/video/win32/SDL_win32window.c +++ b/src/video/win32/SDL_win32window.c @@ -37,13 +37,6 @@ /* This is included after SDL_win32video.h, which includes windows.h */ #include "SDL_syswm.h" -#include - -/* 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 - 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 */ diff --git a/src/video/win32/wactab/pktdef.h b/src/video/win32/wactab/pktdef.h new file mode 100644 index 000000000..2c352b1e2 --- /dev/null +++ b/src/video/win32/wactab/pktdef.h @@ -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 PACKETDATA and PACKETMODE similar to + 2.a. above. + c. Include pktdef.h. + d. The generated structure typedef will be called + 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 PACKET + 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 PACKETDATA and use the + result in the lcPktData field of the LOGCONTEXT structure. + e. If PACKET was PKEXT_RELATIVE, OR the + packet mask bit with PACKETMODE and use the result + in the lcPktMode field of the LOGCONTEXT structure. + + +Example #1. -- single packet format + +#include +#define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ +#define PACKETMODE PK_BUTTONS /@ buttons relative mode @/ +#include +... + lc.lcPktData = PACKETDATA; + lc.lcPktMode = PACKETMODE; + +Example #2. -- multiple formats + +#include +#define PACKETNAME MOE +#define MOEPACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ +#define MOEPACKETMODE PK_BUTTONS /@ buttons relative mode @/ +#include +#define PACKETNAME LARRY +#define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS /@ y, z, buttons @/ +#define LARRYPACKETMODE PK_BUTTONS /@ buttons relative mode @/ +#include +#define PACKETNAME CURLY +#define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS /@ x, z, buttons @/ +#define CURLYPACKETMODE PK_BUTTONS /@ buttons relative mode @/ +#include +... + 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 +#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 +... +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 */ diff --git a/src/video/win32/wactab/wintab.h b/src/video/win32/wactab/wintab.h new file mode 100644 index 000000000..e94e50d4b --- /dev/null +++ b/src/video/win32/wactab/wintab.h @@ -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 */ + diff --git a/src/video/win32/wactab/wintabx.h b/src/video/win32/wactab/wintabx.h new file mode 100644 index 000000000..b913ba670 --- /dev/null +++ b/src/video/win32/wactab/wintabx.h @@ -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 */ +