|
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 */ |