src/3rdparty/wintab/pktdef.h
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     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 */