| 1 | /* -------------------------------- pktdef.h -------------------------------- */ | 
|---|
| 2 | /* Combined 16 & 32-bit version. */ | 
|---|
| 3 |  | 
|---|
| 4 | /*------------------------------------------------------------------------------ | 
|---|
| 5 | The text and information contained in this file may be freely used, | 
|---|
| 6 | copied, or distributed without compensation or licensing restrictions. | 
|---|
| 7 |  | 
|---|
| 8 | This file is copyright 1991-1998 by LCS/Telegraphics. | 
|---|
| 9 | ------------------------------------------------------------------------------*/ | 
|---|
| 10 | /*------------------------------------------------------------------------------ | 
|---|
| 11 |  | 
|---|
| 12 | How to use pktdef.h: | 
|---|
| 13 |  | 
|---|
| 14 | 1. Include wintab.h | 
|---|
| 15 | 2. if using just one packet format: | 
|---|
| 16 | a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits | 
|---|
| 17 | (use the PK_* identifiers). | 
|---|
| 18 | b. Include pktdef.h. | 
|---|
| 19 | c. The generated structure typedef will be called PACKET.  Use PACKETDATA | 
|---|
| 20 | and PACKETMODE to fill in the LOGCONTEXT structure. | 
|---|
| 21 | 3. If using multiple packet formats, for each one: | 
|---|
| 22 | a. Define PACKETNAME. Its text value will be a prefix for this packet's | 
|---|
| 23 | parameters and names. | 
|---|
| 24 | b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to | 
|---|
| 25 | 2.a. above. | 
|---|
| 26 | c. Include pktdef.h. | 
|---|
| 27 | d. The generated structure typedef will be called | 
|---|
| 28 | <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below. | 
|---|
| 29 | 4. If using extension packet data, do the following additional steps | 
|---|
| 30 | for each extension: | 
|---|
| 31 | a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION> | 
|---|
| 32 | as either PKEXT_ABSOLUTE or PKEXT_RELATIVE. | 
|---|
| 33 | b. The generated structure typedef will contain a field for the | 
|---|
| 34 | extension data. | 
|---|
| 35 | c. Scan the WTI_EXTENSION categories to find the extension's | 
|---|
| 36 | packet mask bit. | 
|---|
| 37 | d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the | 
|---|
| 38 | result in the lcPktData field of the LOGCONTEXT structure. | 
|---|
| 39 | e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the | 
|---|
| 40 | packet mask bit with <PACKETNAME>PACKETMODE and use the result | 
|---|
| 41 | in the lcPktMode field of the LOGCONTEXT structure. | 
|---|
| 42 |  | 
|---|
| 43 |  | 
|---|
| 44 | Example #1.     -- single packet format | 
|---|
| 45 |  | 
|---|
| 46 | #include <wintab.h> | 
|---|
| 47 | #define PACKETDATA      PK_X | PK_Y | PK_BUTTONS        /@ x, y, buttons @/ | 
|---|
| 48 | #define PACKETMODE      PK_BUTTONS                                      /@ buttons relative mode @/ | 
|---|
| 49 | #include <pktdef.h> | 
|---|
| 50 | ... | 
|---|
| 51 | lc.lcPktData = PACKETDATA; | 
|---|
| 52 | lc.lcPktMode = PACKETMODE; | 
|---|
| 53 |  | 
|---|
| 54 | Example #2. -- multiple formats | 
|---|
| 55 |  | 
|---|
| 56 | #include <wintab.h> | 
|---|
| 57 | #define PACKETNAME              MOE | 
|---|
| 58 | #define MOEPACKETDATA   PK_X | PK_Y | PK_BUTTONS        /@ x, y, buttons @/ | 
|---|
| 59 | #define MOEPACKETMODE   PK_BUTTONS                                      /@ buttons relative mode @/ | 
|---|
| 60 | #include <pktdef.h> | 
|---|
| 61 | #define PACKETNAME              LARRY | 
|---|
| 62 | #define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS        /@ y, z, buttons @/ | 
|---|
| 63 | #define LARRYPACKETMODE PK_BUTTONS                                      /@ buttons relative mode @/ | 
|---|
| 64 | #include <pktdef.h> | 
|---|
| 65 | #define PACKETNAME              CURLY | 
|---|
| 66 | #define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS        /@ x, z, buttons @/ | 
|---|
| 67 | #define CURLYPACKETMODE PK_BUTTONS                                      /@ buttons relative mode @/ | 
|---|
| 68 | #include <pktdef.h> | 
|---|
| 69 | ... | 
|---|
| 70 | lcMOE.lcPktData = MOEPACKETDATA; | 
|---|
| 71 | lcMOE.lcPktMode = MOEPACKETMODE; | 
|---|
| 72 | ... | 
|---|
| 73 | lcLARRY.lcPktData = LARRYPACKETDATA; | 
|---|
| 74 | lcLARRY.lcPktMode = LARRYPACKETMODE; | 
|---|
| 75 | ... | 
|---|
| 76 | lcCURLY.lcPktData = CURLYPACKETDATA; | 
|---|
| 77 | lcCURLY.lcPktMode = CURLYPACKETMODE; | 
|---|
| 78 |  | 
|---|
| 79 | Example #3. -- extension packet data "XFOO". | 
|---|
| 80 |  | 
|---|
| 81 | #include <wintab.h> | 
|---|
| 82 | #define PACKETDATA      PK_X | PK_Y | PK_BUTTONS        /@ x, y, buttons @/ | 
|---|
| 83 | #define PACKETMODE      PK_BUTTONS                                      /@ buttons relative mode @/ | 
|---|
| 84 | #define PACKETXFOO      PKEXT_ABSOLUTE                          /@ XFOO absolute mode @/ | 
|---|
| 85 | #include <pktdef.h> | 
|---|
| 86 | ... | 
|---|
| 87 | UINT ScanExts(UINT wTag) | 
|---|
| 88 | { | 
|---|
| 89 | UINT i; | 
|---|
| 90 | UINT wScanTag; | 
|---|
| 91 |  | 
|---|
| 92 | /@ scan for wTag's info category. @/ | 
|---|
| 93 | for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) { | 
|---|
| 94 | if (wTag == wScanTag) { | 
|---|
| 95 | /@ return category offset from WTI_EXTENSIONS. @/ | 
|---|
| 96 | return i; | 
|---|
| 97 | } | 
|---|
| 98 | } | 
|---|
| 99 | /@ return error code. @/ | 
|---|
| 100 | return 0xFFFF; | 
|---|
| 101 | } | 
|---|
| 102 | ... | 
|---|
| 103 | lc.lcPktData = PACKETDATA; | 
|---|
| 104 | lc.lcPktMode = PACKETMODE; | 
|---|
| 105 | #ifdef PACKETXFOO | 
|---|
| 106 | categoryXFOO = ScanExts(WTX_XFOO); | 
|---|
| 107 | WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO); | 
|---|
| 108 | lc.lcPktData |= maskXFOO; | 
|---|
| 109 | #if PACKETXFOO == PKEXT_RELATIVE | 
|---|
| 110 | lc.lcPktMode |= maskXFOO; | 
|---|
| 111 | #endif | 
|---|
| 112 | #endif | 
|---|
| 113 | WTOpen(hWnd, &lc, TRUE); | 
|---|
| 114 |  | 
|---|
| 115 |  | 
|---|
| 116 | ------------------------------------------------------------------------------*/ | 
|---|
| 117 | #ifdef __cplusplus | 
|---|
| 118 | extern "C" { | 
|---|
| 119 | #endif  /* __cplusplus */ | 
|---|
| 120 |  | 
|---|
| 121 | #ifndef PACKETNAME | 
|---|
| 122 | /* if no packet name prefix */ | 
|---|
| 123 | #define __PFX(x)        x | 
|---|
| 124 | #define __IFX(x,y)      x ## y | 
|---|
| 125 | #else | 
|---|
| 126 | /* add prefixes and infixes to packet format names */ | 
|---|
| 127 | #define __PFX(x)                __PFX2(PACKETNAME,x) | 
|---|
| 128 | #define __PFX2(p,x)             __PFX3(p,x) | 
|---|
| 129 | #define __PFX3(p,x)             p ## x | 
|---|
| 130 | #define __IFX(x,y)              __IFX2(x,PACKETNAME,y) | 
|---|
| 131 | #define __IFX2(x,i,y)   __IFX3(x,i,y) | 
|---|
| 132 | #define __IFX3(x,i,y)   x ## i ## y | 
|---|
| 133 | #endif | 
|---|
| 134 |  | 
|---|
| 135 | #define __SFX2(x,s)             __SFX3(x,s) | 
|---|
| 136 | #define __SFX3(x,s)             x ## s | 
|---|
| 137 |  | 
|---|
| 138 | #define __TAG   __IFX(tag,PACKET) | 
|---|
| 139 | #define __TYPES __PFX(PACKET), * __IFX(P,PACKET), NEAR * __IFX(NP,PACKET), \ | 
|---|
| 140 | FAR * __IFX(LP,PACKET) | 
|---|
| 141 |  | 
|---|
| 142 | #define __DATA          (__PFX(PACKETDATA)) | 
|---|
| 143 | #define __MODE          (__PFX(PACKETMODE)) | 
|---|
| 144 | #define __EXT(x)        __SFX2(__PFX(PACKET),x) | 
|---|
| 145 |  | 
|---|
| 146 |  | 
|---|
| 147 | typedef struct __TAG { | 
|---|
| 148 | #if (__DATA & PK_CONTEXT) | 
|---|
| 149 | HCTX                    pkContext; | 
|---|
| 150 | #endif | 
|---|
| 151 | #if (__DATA & PK_STATUS) | 
|---|
| 152 | UINT                    pkStatus; | 
|---|
| 153 | #endif | 
|---|
| 154 | #if (__DATA & PK_TIME) | 
|---|
| 155 | DWORD                   pkTime; | 
|---|
| 156 | #endif | 
|---|
| 157 | #if (__DATA & PK_CHANGED) | 
|---|
| 158 | WTPKT                   pkChanged; | 
|---|
| 159 | #endif | 
|---|
| 160 | #if (__DATA & PK_SERIAL_NUMBER) | 
|---|
| 161 | UINT                    pkSerialNumber; | 
|---|
| 162 | #endif | 
|---|
| 163 | #if (__DATA & PK_CURSOR) | 
|---|
| 164 | UINT                    pkCursor; | 
|---|
| 165 | #endif | 
|---|
| 166 | #if (__DATA & PK_BUTTONS) | 
|---|
| 167 | DWORD                   pkButtons; | 
|---|
| 168 | #endif | 
|---|
| 169 | #if (__DATA & PK_X) | 
|---|
| 170 | LONG                    pkX; | 
|---|
| 171 | #endif | 
|---|
| 172 | #if (__DATA & PK_Y) | 
|---|
| 173 | LONG                    pkY; | 
|---|
| 174 | #endif | 
|---|
| 175 | #if (__DATA & PK_Z) | 
|---|
| 176 | LONG                    pkZ; | 
|---|
| 177 | #endif | 
|---|
| 178 | #if (__DATA & PK_NORMAL_PRESSURE) | 
|---|
| 179 | #if (__MODE & PK_NORMAL_PRESSURE) | 
|---|
| 180 | /* relative */ | 
|---|
| 181 | int                     pkNormalPressure; | 
|---|
| 182 | #else | 
|---|
| 183 | /* absolute */ | 
|---|
| 184 | UINT            pkNormalPressure; | 
|---|
| 185 | #endif | 
|---|
| 186 | #endif | 
|---|
| 187 | #if (__DATA & PK_TANGENT_PRESSURE) | 
|---|
| 188 | #if (__MODE & PK_TANGENT_PRESSURE) | 
|---|
| 189 | /* relative */ | 
|---|
| 190 | int                     pkTangentPressure; | 
|---|
| 191 | #else | 
|---|
| 192 | /* absolute */ | 
|---|
| 193 | UINT            pkTangentPressure; | 
|---|
| 194 | #endif | 
|---|
| 195 | #endif | 
|---|
| 196 | #if (__DATA & PK_ORIENTATION) | 
|---|
| 197 | ORIENTATION             pkOrientation; | 
|---|
| 198 | #endif | 
|---|
| 199 | #if (__DATA & PK_ROTATION) | 
|---|
| 200 | ROTATION                pkRotation; /* 1.1 */ | 
|---|
| 201 | #endif | 
|---|
| 202 |  | 
|---|
| 203 | #ifndef NOWTEXTENSIONS | 
|---|
| 204 | /* extensions begin here. */ | 
|---|
| 205 | #if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE) | 
|---|
| 206 | UINT                    pkFKeys; | 
|---|
| 207 | #endif | 
|---|
| 208 | #if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE) | 
|---|
| 209 | TILT                    pkTilt; | 
|---|
| 210 | #endif | 
|---|
| 211 | #endif | 
|---|
| 212 |  | 
|---|
| 213 | } __TYPES ; | 
|---|
| 214 |  | 
|---|
| 215 | #undef PACKETNAME | 
|---|
| 216 | #undef __TAG | 
|---|
| 217 | #undef __TAG2 | 
|---|
| 218 | #undef __TYPES | 
|---|
| 219 | #undef __TYPES2 | 
|---|
| 220 | #undef __DATA | 
|---|
| 221 | #undef __MODE | 
|---|
| 222 | #undef __PFX | 
|---|
| 223 | #undef __PFX2 | 
|---|
| 224 | #undef __PFX3 | 
|---|
| 225 | #undef __IFX | 
|---|
| 226 | #undef __IFX2 | 
|---|
| 227 | #undef __IFX3 | 
|---|
| 228 | #undef __SFX2 | 
|---|
| 229 | #undef __SFX3 | 
|---|
| 230 |  | 
|---|
| 231 | #ifdef __cplusplus | 
|---|
| 232 | } | 
|---|
| 233 | #endif  /* __cplusplus */ | 
|---|