Logo Search packages:      
Sourcecode: qt4-x11 version File versions  Download package

pktdef.h

/* -------------------------------- 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 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 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      /* __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 __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
}
#endif      /* __cplusplus */

Generated by  Doxygen 1.6.0   Back to index