[aseprite] 282/308: Add minimal Wacom support

Tobias Hansen thansen at moszumanska.debian.org
Tue Mar 8 02:45:20 UTC 2016


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository aseprite.

commit d58773756e6edcf981629a518bba9be6bf35835d
Author: David Capello <davidcapello at gmail.com>
Date:   Mon Feb 29 08:32:10 2016 -0300

    Add minimal Wacom support
    
    This should fix the lag on Windows platform when we click with the pen.
---
 src/CMakeLists.txt        |   7 +-
 src/app/CMakeLists.txt    |   1 +
 src/app/app.cpp           |   5 +
 src/pen/CMakeLists.txt    |   8 +
 src/pen/pen.cpp           |  31 ++
 src/pen/pen.h             |  25 ++
 src/pen/pen_none.h        |  15 +
 src/pen/pen_win.h         |  66 ++++
 src/wacom/MIT-license.txt |  16 +
 src/wacom/msgpack.h       |  28 ++
 src/wacom/pktdef.h        | 262 +++++++++++++
 src/wacom/wintab.h        | 919 ++++++++++++++++++++++++++++++++++++++++++++++
 12 files changed, 1380 insertions(+), 3 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b7e6d43..b3647ea 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -94,19 +94,20 @@ add_subdirectory(base)
 include_directories(${BASE_INCLUDE_DIR})
 
 add_subdirectory(cfg)
-add_subdirectory(flic)
 add_subdirectory(css)
 add_subdirectory(doc)
-add_subdirectory(render)
 add_subdirectory(filters)
 add_subdirectory(fixmath)
+add_subdirectory(flic)
 add_subdirectory(gen)
 add_subdirectory(gfx)
+add_subdirectory(net)
+add_subdirectory(pen)
+add_subdirectory(render)
 add_subdirectory(scripting)
 add_subdirectory(she)
 add_subdirectory(ui)
 add_subdirectory(undo)
-add_subdirectory(net)
 
 if(ENABLE_UPDATER)
   add_subdirectory(updater)
diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index f301f8c..a302b20 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -435,6 +435,7 @@ target_link_libraries(app-lib
   flic-lib
   gfx-lib
   net-lib
+  pen-lib
   render-lib
   scripting-lib
   she
diff --git a/src/app/app.cpp b/src/app/app.cpp
index c781b78..b91cf37 100644
--- a/src/app/app.cpp
+++ b/src/app/app.cpp
@@ -66,6 +66,7 @@
 #include "doc/palette.h"
 #include "doc/site.h"
 #include "doc/sprite.h"
+#include "pen/pen.h"
 #include "render/render.h"
 #include "scripting/engine_delegate.h"
 #include "she/display.h"
@@ -617,6 +618,10 @@ void App::run()
 {
   // Run the GUI
   if (isGui()) {
+    // Initialize Wacom tablet API
+    pen::PenAPI pen(she::instance()->defaultDisplay()->nativeHandle());
+
+    // Initialize Steam API
 #ifdef ENABLE_STEAM
     steam::SteamAPI steam;
 #endif
diff --git a/src/pen/CMakeLists.txt b/src/pen/CMakeLists.txt
new file mode 100644
index 0000000..52e21c9
--- /dev/null
+++ b/src/pen/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Aseprite Pen Library
+# Copyright (C) 2016 David Capello
+
+add_library(pen-lib
+  pen.cpp)
+
+target_link_libraries(pen-lib
+  base-lib)
diff --git a/src/pen/pen.cpp b/src/pen/pen.cpp
new file mode 100644
index 0000000..21148a0
--- /dev/null
+++ b/src/pen/pen.cpp
@@ -0,0 +1,31 @@
+// Aseprite Pen Library
+// Copyright (c) 2016 David Capello
+//
+// This file is released under the terms of the MIT license.
+// Read LICENSE.txt for more information.
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "pen/pen.h"
+
+#ifdef _WIN32
+  #include "pen/pen_win.h"
+#else
+  #include "pen/pen_none.h"
+#endif
+
+namespace pen {
+
+PenAPI::PenAPI(void* nativeDisplayHandle)
+  : m_impl(new Impl(nativeDisplayHandle))
+{
+}
+
+PenAPI::~PenAPI()
+{
+  delete m_impl;
+}
+
+} // namespace pen
diff --git a/src/pen/pen.h b/src/pen/pen.h
new file mode 100644
index 0000000..1308de5
--- /dev/null
+++ b/src/pen/pen.h
@@ -0,0 +1,25 @@
+// Aseprite Pen Library
+// Copyright (c) 2016 David Capello
+//
+// This file is released under the terms of the MIT license.
+// Read LICENSE.txt for more information.
+
+#ifndef PEN_PEN_H_INCLUDED
+#define PEN_PEN_H_INCLUDED
+#pragma once
+
+namespace pen {
+
+class PenAPI {
+public:
+  PenAPI(void* nativeDisplayHandle);
+  ~PenAPI();
+
+private:
+  class Impl;
+  Impl* m_impl;
+};
+
+} // namespace pen
+
+#endif
diff --git a/src/pen/pen_none.h b/src/pen/pen_none.h
new file mode 100644
index 0000000..88dcc86
--- /dev/null
+++ b/src/pen/pen_none.h
@@ -0,0 +1,15 @@
+// Aseprite Pen Library
+// Copyright (c) 2016 David Capello
+//
+// This file is released under the terms of the MIT license.
+// Read LICENSE.txt for more information.
+
+namespace pen {
+
+class PenAPI::Impl {
+public:
+  Impl() { }
+  ~Impl() { }
+};
+
+} // namespace pen
diff --git a/src/pen/pen_win.h b/src/pen/pen_win.h
new file mode 100644
index 0000000..8399b6a
--- /dev/null
+++ b/src/pen/pen_win.h
@@ -0,0 +1,66 @@
+// Aseprite Pen Library
+// Copyright (c) 2016 David Capello
+//
+// This file is released under the terms of the MIT license.
+// Read LICENSE.txt for more information.
+
+#include "base/dll.h"
+#include "base/fs.h"
+#include "base/path.h"
+#include "base/string.h"
+
+#include <windows.h>
+#include "wacom/wintab.h"
+
+typedef UINT (API* WTInfoW_Func)(UINT, UINT, LPVOID);
+typedef HCTX (API* WTOpenW_Func)(HWND, LPLOGCONTEXTW, BOOL);
+typedef BOOL (API* WTClose_Func)(HCTX);
+
+class pen::PenAPI::Impl {
+public:
+  Impl(void* nativeDisplayHandle) : m_ctx(nullptr) {
+    m_wintabLib = base::load_dll("wintab32.dll");
+    if (!m_wintabLib)
+      return;
+
+    auto WTInfoW = base::get_dll_proc<WTInfoW_Func>(m_wintabLib, "WTInfoW");
+    auto WTOpenW = base::get_dll_proc<WTOpenW_Func>(m_wintabLib, "WTOpenW");
+    if (!WTInfoW || !WTOpenW)
+      return;
+
+    LOGCONTEXTW logctx;
+    memset(&logctx, 0, sizeof(LOGCONTEXTW));
+    logctx.lcOptions |= CXO_SYSTEM;
+    UINT infoRes = WTInfo(WTI_DEFSYSCTX, 0, &logctx);
+    ASSERT(infoRes == sizeof(LOGCONTEXTW));
+    ASSERT(logctx.lcOptions & CXO_SYSTEM);
+
+    logctx.lcOptions |= CXO_SYSTEM;
+    m_ctx = WTOpenW((HWND)nativeDisplayHandle, &logctx, TRUE);
+    if (!m_ctx) {
+      LOG("Pen library is not initialized...\n");
+      return;
+    }
+
+    LOG("Pen initialized...\n");
+  }
+
+  ~Impl() {
+    if (!m_wintabLib)
+      return;
+
+    if (m_ctx) {
+      auto WTClose = base::get_dll_proc<WTClose_Func>(m_wintabLib, "WTClose");
+      if (WTClose) {
+        LOG("Pen shutdown...\n");
+        WTClose(m_ctx);
+      }
+    }
+
+    base::unload_dll(m_wintabLib);
+  }
+
+private:
+  base::dll m_wintabLib;
+  HCTX m_ctx;
+};
diff --git a/src/wacom/MIT-license.txt b/src/wacom/MIT-license.txt
new file mode 100644
index 0000000..4e5a5cc
--- /dev/null
+++ b/src/wacom/MIT-license.txt
@@ -0,0 +1,16 @@
+// Copyright (c) 2010, Wacom Technology Corporation
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
diff --git a/src/wacom/msgpack.h b/src/wacom/msgpack.h
new file mode 100644
index 0000000..f27e615
--- /dev/null
+++ b/src/wacom/msgpack.h
@@ -0,0 +1,28 @@
+/* ------------------------------- msgpack.h -------------------------------- */
+/*------------------------------------------------------------------------------
+Selected message unpacking macros from windowsx.h
+to circumvent compile-time memory headaches.
+
+The text and information contained in this file may be freely used,
+copied, or distributed without compensation or licensing restrictions.
+
+This file is Copyright (c) Wacom Company, Ltd. 2010 All Rights Reserved
+with portions copyright 1991-1998 by LCS/Telegraphics.
+------------------------------------------------------------------------------*/
+#ifdef WIN32
+#define GET_WM_ACTIVATE_STATE(wp, lp)           LOWORD(wp)
+#define GET_WM_COMMAND_ID(wp, lp)               LOWORD(wp)
+#define GET_WM_COMMAND_HWND(wp, lp)             (HWND)(lp)
+#define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(wp)
+#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
+    (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl))
+/* -------------------------------------------------------------------------- */
+#else
+#define GET_WM_ACTIVATE_STATE(wp, lp)               (wp)
+#define GET_WM_COMMAND_ID(wp, lp)                   (wp)
+#define GET_WM_COMMAND_HWND(wp, lp)                 (HWND)LOWORD(lp)
+#define GET_WM_COMMAND_CMD(wp, lp)                  HIWORD(lp)
+#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
+    (void)(fn)((hwnd), WM_COMMAND, (WPARAM)(int)(id), MAKELPARAM((UINT)(hwndCtl), (codeNotify)))
+/* -------------------------------------------------------------------------- */
+#endif
diff --git a/src/wacom/pktdef.h b/src/wacom/pktdef.h
new file mode 100644
index 0000000..bebf2b9
--- /dev/null
+++ b/src/wacom/pktdef.h
@@ -0,0 +1,262 @@
+/* -------------------------------- 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 (c) Wacom Company, Ltd. 2010 All Rights Reserved
+with portions 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 data for extensions that report thier data in the packet,
+   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.
+5. If using extension data for extensions that report thier data in the extensions packet,
+   do the following additional steps for each extension:
+	a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION> as PKEXT_ABSOLUTE.
+	b. The generated extension structure typedef will contain a field for the
+	   extension data.
+	c. Call WTExtSet to activate the extention.  Use the context id in the WT_PACKETEXT
+	   message to retrieve the extension data <PACKETNAME>PACKETEXT.
+
+
+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 __TAGE  	__IFX(tag,PACKETEXT)
+#define __TYPESE	__PFX(PACKETEXT), * __IFX(P,PACKETEXT), NEAR * __IFX(NP,PACKETEXT), FAR * __IFX(LP,PACKETEXT)
+
+#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
+#endif
+
+} __TYPES ;
+
+#ifndef NOWTEXTENSIONS
+typedef struct __TAGE {
+	EXTENSIONBASE	pkBase;
+
+	#if (__EXT(EXPKEYS) == PKEXT_RELATIVE) || (__EXT(EXPKEYS) == PKEXT_ABSOLUTE)
+		EXPKEYSDATA pkExpKeys; /* 1.4 */
+	#endif
+	#if (__EXT(TOUCHSTRIP) == PKEXT_RELATIVE) || (__EXT(TOUCHSTRIP) == PKEXT_ABSOLUTE)
+		SLIDERDATA	pkTouchStrip; /* 1.4 */
+	#endif
+	#if (__EXT(TOUCHRING) == PKEXT_RELATIVE) || (__EXT(TOUCHRING) == PKEXT_ABSOLUTE)
+		SLIDERDATA	pkTouchRing; /* 1.4 */
+	#endif
+
+} __TYPESE ;
+#endif
+
+#undef PACKETNAME
+#undef __TAG
+#undef __TAGE
+#undef __TAG2
+#undef __TYPES
+#undef __TYPESE
+#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/wacom/wintab.h b/src/wacom/wintab.h
new file mode 100644
index 0000000..8aca310
--- /dev/null
+++ b/src/wacom/wintab.h
@@ -0,0 +1,919 @@
+/* -------------------------------- 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 (c) Wacom Company, Ltd. 2010 All Rights Reserved
+with portions 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_PACKETEXT(b)	((b)+8) /* 1.4 */
+	#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_PACKETEXT			_WT_PACKETEXT(WT_DEFBASE) /* 1.4 */
+	#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_DEVICES     110 /* Allow 100 cursors */
+	#define EXT_MAX			210 /* Allow 100 devices */
+
+#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 - DEPRECATED: see WTX_EXPKEYS2 */
+#define WTX_TOUCHSTRIP		6	/* TouchStrips; 1.4 */
+#define WTX_TOUCHRING		7	/* TouchRings; 1.4 */
+#define WTX_EXPKEYS2			8	/* ExpressKeys; 1.4 */
+
+typedef struct tagXBTNMASK {
+	BYTE xBtnDnMask[32];
+	BYTE xBtnUpMask[32];
+} XBTNMASK;
+
+typedef struct tagTILT { /* 1.1 */
+	int tiltX;
+	int tiltY;
+} TILT;
+
+typedef struct tagEXTENSIONBASE { /* 1.4 */
+	HCTX		nContext;
+	UINT		nStatus;
+	DWORD		nTime;
+	UINT		nSerialNumber;
+} EXTENSIONBASE;
+
+typedef struct tagEXPKEYSDATA { /* 1.4 */
+	BYTE		nTablet;
+	BYTE		nControl;
+	BYTE		nLocation;
+	BYTE		nReserved;
+	DWORD		nState;
+} EXPKEYSDATA;
+
+typedef struct tagSLIDERDATA { /* 1.4 */
+	BYTE		nTablet;
+	BYTE		nControl;
+	BYTE		nMode;
+	BYTE		nReserved;
+	DWORD		nPosition;
+} SLIDERDATA;
+
+typedef struct tagEXTPROPERTY { /* 1.4 */
+	BYTE		version;				// Structure version, 0 for now
+	BYTE		tabletIndex;		// 0-based index for tablet
+	BYTE		controlIndex;		// 0-based index for control
+	BYTE		functionIndex;		// 0-based index for control's sub-function
+	WORD		propertyID;			// property ID
+	WORD		reserved;			// DWORD-alignment filler
+	DWORD		dataSize;			// number of bytes in data[] buffer
+	BYTE		data[1];				// raw data
+} EXTPROPERTY;
+
+#define TABLET_PROPERTY_CONTROLCOUNT	 0			// UINT32: number of physical controls on tablet
+#define TABLET_PROPERTY_FUNCCOUNT		 1			// UINT32: number of functions of control
+#define TABLET_PROPERTY_AVAILABLE		 2			// BOOL: control/mode is available for override
+#define TABLET_PROPERTY_MIN				 3			// UINT32: minimum value
+#define TABLET_PROPERTY_MAX				 4			// UINT32: maximum value
+#define TABLET_PROPERTY_OVERRIDE			 5			// BOOL: control is overridden
+#define TABLET_PROPERTY_OVERRIDE_NAME	 6			// UTF-8: Displayable name when control is overridden
+#define TABLET_PROPERTY_LOCATION			 11		// UINT32: Physical location of control (see TABLET_LOC_*)
+
+#define TABLET_LOC_LEFT				0
+#define TABLET_LOC_RIGHT			1
+#define TABLET_LOC_TOP				2
+#define TABLET_LOC_BOTTOM			3
+#define TABLET_LOC_TRANSDUCER		4
+
+#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 */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git



More information about the Pkg-games-commits mailing list