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 <[email protected]>
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

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to