123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- /*
- * Copyright (C) 1991-1998 by LCS/Telegraphics
- * Copyright (C) 2002 Patrik Stridvall
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- #ifndef __WINE_PKTDEF_H
- #define __WINE_PKTDEF_H
- /***********************************************************************
- * How to use pktdef.h:
- *
- * 1. Include wintab.h
- * 2. if using just one packet format:
- * a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits
- * (use the PK_* identifiers).
- * b. Include pktdef.h.
- * c. The generated structure typedef will be called PACKET. Use PACKETDATA
- * and PACKETMODE to fill in the LOGCONTEXT structure.
- * 3. If using multiple packet formats, for each one:
- * a. Define PACKETNAME. Its text value will be a prefix for this packet's
- * parameters and names.
- * b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
- * 2.a. above.
- * c. Include pktdef.h.
- * d. The generated structure typedef will be called
- * <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.
- * 4. If using extension packet data, do the following additional steps
- * for each extension:
- * a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
- * as either PKEXT_ABSOLUTE or PKEXT_RELATIVE.
- * b. The generated structure typedef will contain a field for the
- * extension data.
- * c. Scan the WTI_EXTENSION categories to find the extension's
- * packet mask bit.
- * d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the
- * result in the lcPktData field of the LOGCONTEXT structure.
- * e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
- * packet mask bit with <PACKETNAME>PACKETMODE and use the result
- * in the lcPktMode field of the LOGCONTEXT structure.
- *
- *
- * Example #1. -- single packet format
- *
- * #include <wintab.h>
- * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
- * #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
- * #include <pktdef.h>
- * ...
- * lc.lcPktData = PACKETDATA;
- * lc.lcPktMode = PACKETMODE;
- *
- * Example #2. -- multiple formats
- *
- * #include <wintab.h>
- * #define PACKETNAME MOE
- * #define MOEPACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
- * #define MOEPACKETMODE PK_BUTTONS /@ buttons relative mode @/
- * #include <pktdef.h>
- * #define PACKETNAME LARRY
- * #define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS /@ y, z, buttons @/
- * #define LARRYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
- * #include <pktdef.h>
- * #define PACKETNAME CURLY
- * #define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS /@ x, z, buttons @/
- * #define CURLYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
- * #include <pktdef.h>
- * ...
- * lcMOE.lcPktData = MOEPACKETDATA;
- * lcMOE.lcPktMode = MOEPACKETMODE;
- * ...
- * lcLARRY.lcPktData = LARRYPACKETDATA;
- * lcLARRY.lcPktMode = LARRYPACKETMODE;
- * ...
- * lcCURLY.lcPktData = CURLYPACKETDATA;
- * lcCURLY.lcPktMode = CURLYPACKETMODE;
- *
- * Example #3. -- extension packet data "XFOO".
- *
- * #include <wintab.h>
- * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
- * #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
- * #define PACKETXFOO PKEXT_ABSOLUTE /@ XFOO absolute mode @/
- * #include <pktdef.h>
- * ...
- * UINT ScanExts(UINT wTag)
- * {
- * UINT i;
- * UINT wScanTag;
- *
- * /@ scan for wTag's info category. @/
- * for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) {
- * if (wTag == wScanTag) {
- * /@ return category offset from WTI_EXTENSIONS. @/
- * return i;
- * }
- * }
- * /@ return error code. @/
- * return 0xFFFF;
- * }
- * ...
- * lc.lcPktData = PACKETDATA;
- * lc.lcPktMode = PACKETMODE;
- * #ifdef PACKETXFOO
- * categoryXFOO = ScanExts(WTX_XFOO);
- * WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO);
- * lc.lcPktData |= maskXFOO;
- * #if PACKETXFOO == PKEXT_RELATIVE
- * lc.lcPktMode |= maskXFOO;
- * #endif
- * #endif
- * WTOpen(hWnd, &lc, TRUE);
- */
- #ifdef __cplusplus
- extern "C" {
- #endif /* defined(__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), \
- * __IFX(NP,PACKET), * __IFX(LP,PACKET)
- #define __DATA (__PFX(PACKETDATA))
- #define __MODE (__PFX(PACKETMODE))
- #define __EXT(x) __SFX2(__PFX(PACKET),x)
- typedef struct __TAG {
- #if (__DATA & PK_CONTEXT)
- HCTX pkContext;
- #endif
- #if (__DATA & PK_STATUS)
- UINT pkStatus;
- #endif
- #if (__DATA & PK_TIME)
- DWORD pkTime;
- #endif
- #if (__DATA & PK_CHANGED)
- WTPKT pkChanged;
- #endif
- #if (__DATA & PK_SERIAL_NUMBER)
- UINT pkSerialNumber;
- #endif
- #if (__DATA & PK_CURSOR)
- UINT pkCursor;
- #endif
- #if (__DATA & PK_BUTTONS)
- DWORD pkButtons;
- #endif
- #if (__DATA & PK_X)
- LONG pkX;
- #endif
- #if (__DATA & PK_Y)
- LONG pkY;
- #endif
- #if (__DATA & PK_Z)
- LONG pkZ;
- #endif
- #if (__DATA & PK_NORMAL_PRESSURE)
- # if (__MODE & PK_NORMAL_PRESSURE)
- /* relative */
- int pkNormalPressure;
- # else
- /* absolute */
- UINT pkNormalPressure;
- # endif
- #endif
- #if (__DATA & PK_TANGENT_PRESSURE)
- # if (__MODE & PK_TANGENT_PRESSURE)
- /* relative */
- int pkTangentPressure;
- # else
- /* absolute */
- UINT pkTangentPressure;
- # endif
- #endif
- #if (__DATA & PK_ORIENTATION)
- ORIENTATION pkOrientation;
- #endif
- #if (__DATA & PK_ROTATION)
- ROTATION pkRotation; /* 1.1 */
- #endif
- #ifndef NOWTEXTENSIONS
- /* extensions begin here. */
- #if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE)
- UINT pkFKeys;
- #endif
- #if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE)
- TILT pkTilt;
- #endif
- #endif
- } __TYPES;
- #undef PACKETNAME
- #undef __TAG
- #undef __TAG2
- #undef __TYPES
- #undef __TYPES2
- #undef __DATA
- #undef __MODE
- #undef __PFX
- #undef __PFX2
- #undef __PFX3
- #undef __IFX
- #undef __IFX2
- #undef __IFX3
- #undef __SFX2
- #undef __SFX3
- #ifdef __cplusplus
- } /* extern "C" */
- #endif /* defined(__cplusplus) */
- #endif /* defined(__WINE_PKTDEF_H */
|