topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-InputSprocket.h / h



  /*
       File:       InputSprocket.h
   
       Contains:   Games Sprockets: InputSprocket interfaaces
   
       Version:    Technology: InputSprocket 1.7
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1996-2001 by Apple Computer, Inc., all rights reserved.
   
       Bugs?:      For bug reports, consult the following page on
                   the World Wide Web:
   
                       http://developer.apple.com/bugreporter/
   
  */
  ifndef __INPUTSPROCKET__
  define __INPUTSPROCKET__
  
  ifndef __DESKBUS__
  include <DeskBus.h>
  endif
  
  ifndef __DIALOGS__
  include <Dialogs.h>
  endif
  
  ifndef __EVENTS__
  include <Events.h>
  endif
  
  ifndef __ICONS__
  include <Icons.h>
  endif
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __MACERRORS__
  include <MacErrors.h>
  endif
  
  if PRAGMA_ONCE
  #pragma once
  endif
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  if PRAGMA_IMPORT
  #pragma import on
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=power
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  ifndef USE_OLD_INPUT_SPROCKET_LABELS
  define USE_OLD_INPUT_SPROCKET_LABELS 0
  endif  /* !defined(USE_OLD_INPUT_SPROCKET_LABELS) */
  
  ifndef USE_OLD_ISPNEED_STRUCT
  define USE_OLD_ISPNEED_STRUCT 0
  endif  /* !defined(USE_OLD_ISPNEED_STRUCT) */
  
  /* ********************* data types ********************* */
  typedef struct OpaqueISpDeviceReference*  ISpDeviceReference;
  typedef struct OpaqueISpElementReference*  ISpElementReference;
  typedef struct OpaqueISpElementListReference*  ISpElementListReference;
  /* ISpDeviceClass is a general classs of device, example: keyboard, mouse, joystick */
  typedef OSType                          ISpDeviceClass;
  /* ISpDeviceIdentifier is a specific device,  example: standard 1-button mouse, 105key ext. kbd. */
  typedef OSType                          ISpDeviceIdentifier;
  typedef OSType                          ISpElementLabel;
  typedef OSType                          ISpElementKind;
  
  /* *************** resources **************** */
  enum {
      kISpApplicationResourceType = FOUR_CHAR_CODE('isap'),
      kISpSetListResourceType     = FOUR_CHAR_CODE('setl'),
      kISpSetDataResourceType     = FOUR_CHAR_CODE('setd')
  };
  
  struct ISpApplicationResourceStruct {
      UInt32                          flags;
      UInt32                          reserved1;
      UInt32                          reserved2;
      UInt32                          reserved3;
  };
  typedef struct ISpApplicationResourceStruct ISpApplicationResourceStruct;
  enum {
      kISpAppResFlag_UsesInputSprocket = 0x00000001,              /* true if the application uses InputSprocket*/
      kISpAppResFlag_UsesISpInit  = 0x00000002                    /* true if the calls ISpInit (ie, uses the high level interface, calls ISpConfigure, has a needs list, etc...)*/
  };
  
  /*
   * ISpDeviceDefinition
   *
   * This structure provides all the available
   * information for an input device within the system
   *
   */
  
  struct ISpDeviceDefinition {
      Str63                           deviceName;                 /* a human readable name of the device */
      ISpDeviceClass                  theDeviceClass;             /* general classs of device example : keyboard, mouse, joystick */
      ISpDeviceIdentifier             theDeviceIdentifier;        /* every distinguishable device should have an OSType */
      UInt32                          permanentID;                /* a cross reboot id unique within that deviceType, 0 if not possible */
      UInt32                          flags;                      /* status flags */
      UInt32                          permanentIDExtend;          /* extension of permanentID, so 64 bits total are now significant */
      UInt32                          reserved2;
      UInt32                          reserved3;
  };
  typedef struct ISpDeviceDefinition      ISpDeviceDefinition;
  enum {
      kISpDeviceFlag_HandleOwnEmulation = 1
  };
  
  /*
   * ISpElementEvent, ISpElementEventPtr
   *
   * This is the structure that event data is passed in.
   *
   */
  
  struct ISpElementEvent {
      AbsoluteTime                    when;                       /* this is absolute time on PCI or later, otherwise it is */
                                                                  /* 0 for the hi 32 bits and TickCount for the low 32 bits */
      ISpElementReference             element;                    /* a reference to the element that generated this event */
      UInt32                          refCon;                     /* for application usage, 0 on the global list */
      UInt32                          data;                       /* the data for this event */
  };
  typedef struct ISpElementEvent          ISpElementEvent;
  typedef ISpElementEvent *               ISpElementEventPtr;
  /*
   * ISpElementInfo, ISpElementInfoPtr
   *
   * This is the generic definition of an element.
   * Every element must contain this information.
   *
   */
  
  struct ISpElementInfo {
      ISpElementLabel                 theLabel;
      ISpElementKind                  theKind;
      Str63                           theString;
      UInt32                          reserved1;
      UInt32                          reserved2;
  };
  typedef struct ISpElementInfo           ISpElementInfo;
  typedef ISpElementInfo *                ISpElementInfoPtr;
  
  typedef UInt32                          ISpNeedFlagBits;
  if USE_OLD_ISPNEED_STRUCT
  
  struct ISpNeed {
      Str63                           name;
      short                           iconSuiteResourceId;        /* resource id of the icon suite */
      short                           reserved;
      ISpElementKind                  theKind;
      ISpElementLabel                 theLabel;
      ISpNeedFlagBits                 flags;
      UInt32                          reserved1;
      UInt32                          reserved2;
      UInt32                          reserved3;
  };
  typedef struct ISpNeed                  ISpNeed;
  else
  
  struct ISpNeed {
      Str63                           name;                       /* human-readable string */
      short                           iconSuiteResourceId;        /* resource id of the icon suite */
      UInt8                           playerNum;                  /* used for multi-player support */
      UInt8                           group;                      /* used to group related needs (eg, look left and look right button needs) */
      ISpElementKind                  theKind;
      ISpElementLabel                 theLabel;
      ISpNeedFlagBits                 flags;
      UInt32                          reserved1;
      UInt32                          reserved2;
      UInt32                          reserved3;
  };
  typedef struct ISpNeed                  ISpNeed;
  endif  /* USE_OLD_ISPNEED_STRUCT */
  
  enum {
      kISpNeedFlag_NoMultiConfig  = 0x00000001,                   /* once this need is autoconfigured to one device dont autoconfigure to anything else*/
      kISpNeedFlag_Utility        = 0x00000002,                   /* this need is a utility function (like show framerate) which would not typically be assigned to anything but the keyboard*/
      kISpNeedFlag_PolledOnly     = 0x00000004,
      kISpNeedFlag_EventsOnly     = 0x00000008,
      kISpNeedFlag_NoAutoConfig   = 0x00000010,                   /* this need can be set normally, but will not ever be auto configured*/
      kISpNeedFlag_NoConfig       = 0x00000020,                   /* this need can not be changed by the user*/
      kISpNeedFlag_Invisible      = 0x00000040,                   /* this need can not be seen by the user*/
                                                                  /* *** kISpElementKind specific flags ****/
                                                                  /* these are flags specific to kISpElementKind_Button*/
      kISpNeedFlag_Button_AlreadyAxis = 0x10000000,               /* there is a axis version of this button need*/
      kISpNeedFlag_Button_ClickToggles = 0x20000000,
      kISpNeedFlag_Button_ActiveWhenDown = 0x40000000,
      kISpNeedFlag_Button_AlreadyDelta = (long)0x80000000,        /* there is a delta version of this button need*/
                                                                  /* these are flags specific to kISpElementKind_DPad*/
                                                                  /* these are flags specific to kISpElementKind_Axis*/
      kISpNeedFlag_Axis_AlreadyButton = 0x10000000,               /* there is a button version of this axis need*/
      kISpNeedFlag_Axis_Asymetric = 0x20000000,                   /* this axis need is asymetric    */
      kISpNeedFlag_Axis_AlreadyDelta = 0x40000000,                /* there is a delta version of this axis need*/
                                                                  /* these are flags specific to kISpElementKind_Delta*/
      kISpNeedFlag_Delta_AlreadyAxis = 0x10000000,                /* there is a axis version of this delta need*/
      kISpNeedFlag_Delta_AlreadyButton = 0x20000000               /* there is a button version of this delta need*/
  };
  
  /*
   *
   * These are the current built values for ISpDeviceClass
   *
   */
  enum {
      kISpDeviceClass_SpeechRecognition = FOUR_CHAR_CODE('talk'),
      kISpDeviceClass_Mouse       = FOUR_CHAR_CODE('mous'),
      kISpDeviceClass_Keyboard    = FOUR_CHAR_CODE('keyd'),
      kISpDeviceClass_Joystick    = FOUR_CHAR_CODE('joys'),
      kISpDeviceClass_Gamepad     = FOUR_CHAR_CODE('gmpd'),
      kISpDeviceClass_Wheel       = FOUR_CHAR_CODE('whel'),
      kISpDeviceClass_Pedals      = FOUR_CHAR_CODE('pedl'),
      kISpDeviceClass_Levers      = FOUR_CHAR_CODE('levr'),
      kISpDeviceClass_Tickle      = FOUR_CHAR_CODE('tckl'),       /* a device of this class requires ISpTickle*/
      kISpDeviceClass_Unknown     = FOUR_CHAR_CODE('????')
  };
  
  /*
   * These are the current built in ISpElementKind's
   * 
   * These are all OSTypes.
   *
   */
  enum {
      kISpElementKind_Button      = FOUR_CHAR_CODE('butn'),
      kISpElementKind_DPad        = FOUR_CHAR_CODE('dpad'),
      kISpElementKind_Axis        = FOUR_CHAR_CODE('axis'),
      kISpElementKind_Delta       = FOUR_CHAR_CODE('dlta'),
      kISpElementKind_Movement    = FOUR_CHAR_CODE('move'),
      kISpElementKind_Virtual     = FOUR_CHAR_CODE('virt')
  };
  
  /*
   *
   * These are the current built in ISpElementLabel's
   *
   * These are all OSTypes.
   *
   */
  if USE_OLD_INPUT_SPROCKET_LABELS
  enum {
                                                                  /* axis */
      kISpElementLabel_XAxis      = FOUR_CHAR_CODE('xaxi'),
      kISpElementLabel_YAxis      = FOUR_CHAR_CODE('yaxi'),
      kISpElementLabel_ZAxis      = FOUR_CHAR_CODE('zaxi'),
      kISpElementLabel_Rx         = FOUR_CHAR_CODE('rxax'),
      kISpElementLabel_Ry         = FOUR_CHAR_CODE('ryax'),
      kISpElementLabel_Rz         = FOUR_CHAR_CODE('rzax'),
      kISpElementLabel_Gas        = FOUR_CHAR_CODE('gasp'),
      kISpElementLabel_Brake      = FOUR_CHAR_CODE('brak'),
      kISpElementLabel_Clutch     = FOUR_CHAR_CODE('cltc'),
      kISpElementLabel_Throttle   = FOUR_CHAR_CODE('thrt'),
      kISpElementLabel_Trim       = FOUR_CHAR_CODE('trim'),       /* direction pad */
      kISpElementLabel_POVHat     = FOUR_CHAR_CODE('povh'),
      kISpElementLabel_PadMove    = FOUR_CHAR_CODE('move'),       /* buttons */
      kISpElementLabel_Fire       = FOUR_CHAR_CODE('fire'),
      kISpElementLabel_Start      = FOUR_CHAR_CODE('strt'),
      kISpElementLabel_Select     = FOUR_CHAR_CODE('optn'),       /* Pause/Resume was changed into 2 needs: Quit and start/pause */
      kISpElementLabel_Btn_PauseResume = FOUR_CHAR_CODE('strt')
  };
  
  endif  /* USE_OLD_INPUT_SPROCKET_LABELS */
  
  enum {
                                                                  /* generic */
      kISpElementLabel_None       = FOUR_CHAR_CODE('none'),       /* axis */
      kISpElementLabel_Axis_XAxis = FOUR_CHAR_CODE('xaxi'),
      kISpElementLabel_Axis_YAxis = FOUR_CHAR_CODE('yaxi'),
      kISpElementLabel_Axis_ZAxis = FOUR_CHAR_CODE('zaxi'),
      kISpElementLabel_Axis_Rx    = FOUR_CHAR_CODE('rxax'),
      kISpElementLabel_Axis_Ry    = FOUR_CHAR_CODE('ryax'),
      kISpElementLabel_Axis_Rz    = FOUR_CHAR_CODE('rzax'),
      kISpElementLabel_Axis_Roll  = kISpElementLabel_Axis_Rz,
      kISpElementLabel_Axis_Pitch = kISpElementLabel_Axis_Rx,
      kISpElementLabel_Axis_Yaw   = kISpElementLabel_Axis_Ry,
      kISpElementLabel_Axis_RollTrim = FOUR_CHAR_CODE('rxtm'),
      kISpElementLabel_Axis_PitchTrim = FOUR_CHAR_CODE('trim'),
      kISpElementLabel_Axis_YawTrim = FOUR_CHAR_CODE('rytm'),
      kISpElementLabel_Axis_Gas   = FOUR_CHAR_CODE('gasp'),
      kISpElementLabel_Axis_Brake = FOUR_CHAR_CODE('brak'),
      kISpElementLabel_Axis_Clutch = FOUR_CHAR_CODE('cltc'),
      kISpElementLabel_Axis_Throttle = FOUR_CHAR_CODE('thrt'),
      kISpElementLabel_Axis_Trim  = kISpElementLabel_Axis_PitchTrim,
      kISpElementLabel_Axis_Rudder = FOUR_CHAR_CODE('rudd'),
      kISpElementLabel_Axis_ToeBrake = FOUR_CHAR_CODE('toeb'),    /* delta */
      kISpElementLabel_Delta_X    = FOUR_CHAR_CODE('xdlt'),
      kISpElementLabel_Delta_Y    = FOUR_CHAR_CODE('ydlt'),
      kISpElementLabel_Delta_Z    = FOUR_CHAR_CODE('zdlt'),
      kISpElementLabel_Delta_Rx   = FOUR_CHAR_CODE('rxdl'),
      kISpElementLabel_Delta_Ry   = FOUR_CHAR_CODE('rydl'),
      kISpElementLabel_Delta_Rz   = FOUR_CHAR_CODE('rzdl'),
      kISpElementLabel_Delta_Roll = kISpElementLabel_Delta_Rz,
      kISpElementLabel_Delta_Pitch = kISpElementLabel_Delta_Rx,
      kISpElementLabel_Delta_Yaw  = kISpElementLabel_Delta_Ry,
      kISpElementLabel_Delta_Cursor_X = FOUR_CHAR_CODE('curx'),
      kISpElementLabel_Delta_Cursor_Y = FOUR_CHAR_CODE('cury'),   /* direction pad */
      kISpElementLabel_Pad_POV    = FOUR_CHAR_CODE('povh'),       /* up/down/left/right*/
      kISpElementLabel_Pad_Move   = FOUR_CHAR_CODE('move'),       /* up/down/left/right*/
      kISpElementLabel_Pad_POV_Horiz = FOUR_CHAR_CODE('hpov'),    /* forward/back/left/right*/
      kISpElementLabel_Pad_Move_Horiz = FOUR_CHAR_CODE('hmov'),   /* forward/back/left/right*/
                                                                  /* buttons */
      kISpElementLabel_Btn_Fire   = FOUR_CHAR_CODE('fire'),
      kISpElementLabel_Btn_SecondaryFire = FOUR_CHAR_CODE('sfir'),
      kISpElementLabel_Btn_Jump   = FOUR_CHAR_CODE('jump'),
      kISpElementLabel_Btn_Quit   = FOUR_CHAR_CODE('strt'),       /* kISpElementLabel_Btn_Quit automatically binds to escape */
      kISpElementLabel_Btn_StartPause = FOUR_CHAR_CODE('paus'),
      kISpElementLabel_Btn_Select = FOUR_CHAR_CODE('optn'),
      kISpElementLabel_Btn_SlideLeft = FOUR_CHAR_CODE('blft'),
      kISpElementLabel_Btn_SlideRight = FOUR_CHAR_CODE('brgt'),
      kISpElementLabel_Btn_MoveForward = FOUR_CHAR_CODE('btmf'),
      kISpElementLabel_Btn_MoveBackward = FOUR_CHAR_CODE('btmb'),
      kISpElementLabel_Btn_TurnLeft = FOUR_CHAR_CODE('bttl'),
      kISpElementLabel_Btn_TurnRight = FOUR_CHAR_CODE('bttr'),
      kISpElementLabel_Btn_LookLeft = FOUR_CHAR_CODE('btll'),
      kISpElementLabel_Btn_LookRight = FOUR_CHAR_CODE('btlr'),
      kISpElementLabel_Btn_LookUp = FOUR_CHAR_CODE('btlu'),
      kISpElementLabel_Btn_LookDown = FOUR_CHAR_CODE('btld'),
      kISpElementLabel_Btn_Next   = FOUR_CHAR_CODE('btnx'),
      kISpElementLabel_Btn_Previous = FOUR_CHAR_CODE('btpv'),
      kISpElementLabel_Btn_SideStep = FOUR_CHAR_CODE('side'),
      kISpElementLabel_Btn_Run    = FOUR_CHAR_CODE('quik'),
      kISpElementLabel_Btn_Look   = FOUR_CHAR_CODE('blok'),
      kISpElementLabel_Btn_Minimum = FOUR_CHAR_CODE('min '),
      kISpElementLabel_Btn_Decrement = FOUR_CHAR_CODE('decr'),
      kISpElementLabel_Btn_Center = FOUR_CHAR_CODE('cent'),
      kISpElementLabel_Btn_Increment = FOUR_CHAR_CODE('incr'),
      kISpElementLabel_Btn_Maximum = FOUR_CHAR_CODE('max '),
      kISpElementLabel_Btn_10Percent = FOUR_CHAR_CODE(' 10 '),
      kISpElementLabel_Btn_20Percent = FOUR_CHAR_CODE(' 20 '),
      kISpElementLabel_Btn_30Percent = FOUR_CHAR_CODE(' 30 '),
      kISpElementLabel_Btn_40Percent = FOUR_CHAR_CODE(' 40 '),
      kISpElementLabel_Btn_50Percent = FOUR_CHAR_CODE(' 50 '),
      kISpElementLabel_Btn_60Percent = FOUR_CHAR_CODE(' 60 '),
      kISpElementLabel_Btn_70Percent = FOUR_CHAR_CODE(' 70 '),
      kISpElementLabel_Btn_80Percent = FOUR_CHAR_CODE(' 80 '),
      kISpElementLabel_Btn_90Percent = FOUR_CHAR_CODE(' 90 '),
      kISpElementLabel_Btn_MouseOne = FOUR_CHAR_CODE('mou1'),
      kISpElementLabel_Btn_MouseTwo = FOUR_CHAR_CODE('mou2'),
      kISpElementLabel_Btn_MouseThree = FOUR_CHAR_CODE('mou3')
  };
  
  /*
   *
   * direction pad data & configuration information
   *
   */
  
  typedef UInt32 ISpDPadData;
  enum {
      kISpPadIdle                 = 0,
      kISpPadLeft                 = 1,
      kISpPadUpLeft               = 2,
      kISpPadUp                   = 3,
      kISpPadUpRight              = 4,
      kISpPadRight                = 5,
      kISpPadDownRight            = 6,
      kISpPadDown                 = 7,
      kISpPadDownLeft             = 8
  };
  
  struct ISpDPadConfigurationInfo {
      UInt32                          id;                         /* ordering 1..n, 0 = no relavent ordering of direction pads */
      Boolean                         fourWayPad;                 /* true if this pad can only produce idle + four directions */
  };
  typedef struct ISpDPadConfigurationInfo ISpDPadConfigurationInfo;
  /*
   *
   * button data & configuration information
   *
   */
  
  typedef UInt32 ISpButtonData;
  enum {
      kISpButtonUp                = 0,
      kISpButtonDown              = 1
  };
  
  struct ISpButtonConfigurationInfo {
      UInt32                          id;                         /* ordering 1..n, 0 = no relavent ordering of buttons */
  };
  typedef struct ISpButtonConfigurationInfo ISpButtonConfigurationInfo;
  /*
   *
   * axis data & configuration information 
   *
   */
  
  typedef UInt32                          ISpAxisData;
  
  define    kISpAxisMinimum  0x00000000U
  define    kISpAxisMiddle   0x7FFFFFFFU
  define    kISpAxisMaximum  0xFFFFFFFFU
  
  struct ISpAxisConfigurationInfo {
      Boolean                         symetricAxis;               /* axis is symetric, i.e. a joystick is symetric and a gas pedal is not */
  };
  typedef struct ISpAxisConfigurationInfo ISpAxisConfigurationInfo;
  
  typedef Fixed                           ISpDeltaData;
  
  struct ISpDeltaConfigurationInfo {
      UInt32                          reserved1;
      UInt32                          reserved2;
  };
  typedef struct ISpDeltaConfigurationInfo ISpDeltaConfigurationInfo;
  
  struct ISpMovementData {
      ISpAxisData                     xAxis;
      ISpAxisData                     yAxis;
      ISpDPadData                     direction;                  /* ISpDPadData version of the movement */
  };
  typedef struct ISpMovementData          ISpMovementData;
  
  struct ISpMovementConfigurationInfo {
      UInt32                          reserved1;
      UInt32                          reserved2;
  };
  typedef struct ISpMovementConfigurationInfo ISpMovementConfigurationInfo;
  enum {
      kISpVirtualElementFlag_UseTempMem = 1
  };
  
  enum {
      kISpElementListFlag_UseTempMem = 1
  };
  
  enum {
      kISpFirstIconSuite          = 30000,
      kISpLastIconSuite           = 30100,
      kISpNoneIconSuite           = 30000
  };
  
  /* ********************* user level functions ********************* */
  /*
   *
   * startup / shutdown
   *
   */
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  ISpStartup                      (void);
  
  /* 1.1 or later*/
  EXTERN_API_C( OSStatus )
  ISpShutdown                     (void);
  
  /* 1.1 or later*/
  /*
   *
   * polling
   *
   */
  EXTERN_API_C( OSStatus )
  ISpTickle                       (void);
  
  /* 1.1 or later*/
  
******** user interface functions *********

  
  
  EXTERN_API_C( NumVersion )
  ISpGetVersion                   (void);
  
  /*
   *
   * ISpElement_NewVirtual(ISpElementReference *outElement);
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_NewVirtual           (UInt32                 dataSize,
                                   ISpElementReference *  outElement,
                                   UInt32                 flags);
  
  /*
   *
   * ISpElement_NewVirtualFromNeeds(UInt32 count, ISpNeeds *needs, ISpElementReference *outElements);
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_NewVirtualFromNeeds  (UInt32                 count,
                                   ISpNeed *              needs,
                                   ISpElementReference *  outElements,
                                   UInt32                 flags);
  
  /*
   *
   * ISpElement_DisposeVirtual(inElement);
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_DisposeVirtual       (UInt32                 count,
                                   ISpElementReference *  inElements);
  
  /*
   * ISpInit
   *
   */
  EXTERN_API_C( OSStatus )
  ISpInit                         (UInt32                 count,
                                   ISpNeed *              needs,
                                   ISpElementReference *  inReferences,
                                   OSType                 appCreatorCode,
                                   OSType                 subCreatorCode,
                                   UInt32                 flags,
                                   short                  setListResourceId,
                                   UInt32                 reserved);
  
  /*
   * ISpConfigure
   *
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( Boolean , ISpEventProcPtr )(EventRecord *inEvent);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  ISpConfigure                    (ISpEventProcPtr        inEventProcPtr);
  
  /*
   *
   * ISpStop
   *
   */
  EXTERN_API_C( OSStatus )
  ISpStop                         (void);
  
  /*
   *
   * ISpSuspend, ISpResume
   *
   * ISpSuspend turns all devices off and allocates memory so that the state may be later resumed.
   * ISpResume resumes to the previous state of the system after a suspend call.
   * 
   * Return Codes
   * memFullErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpSuspend                      (void);
  
  EXTERN_API_C( OSStatus )
  ISpResume                       (void);
  
  /*
   * ISpDevices_Extract, ISpDevices_ExtractByClass, ISpDevices_ExtractByIdentifier
   *
   * These will extract as many device references from the system wide list as will fit in your buffer.  
   *
   * inBufferCount - the size of your buffer (in units of sizeof(ISpDeviceReference)) this may be zero
   * buffer - a pointer to your buffer
   * outCount - contains the number of devices in the system
   *
   * ISpDevices_ExtractByClass extracts and counts devices of the specified ISpDeviceClass
   * ISpDevices_ExtractByIdentifier extracts and counts devices of the specified ISpDeviceIdentifier
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpDevices_Extract              (UInt32                 inBufferCount,
                                   UInt32 *               outCount,
                                   ISpDeviceReference *   buffer);
  
  EXTERN_API_C( OSStatus )
  ISpDevices_ExtractByClass       (ISpDeviceClass         inClass,
                                   UInt32                 inBufferCount,
                                   UInt32 *               outCount,
                                   ISpDeviceReference *   buffer);
  
  EXTERN_API_C( OSStatus )
  ISpDevices_ExtractByIdentifier  (ISpDeviceIdentifier    inIdentifier,
                                   UInt32                 inBufferCount,
                                   UInt32 *               outCount,
                                   ISpDeviceReference *   buffer);
  
  /*
   * ISpDevices_ActivateClass, ISpDevices_DeactivateClass, ISpDevices_Activate, ISpDevices_Deactivate, ISpDevice_IsActive
   *
   * ISpDevices_Activate, ISpDevices_Deactivate
   *
   * This will activate/deactivate a block of devices.
   * inDeviceCount - the number of devices to activate / deactivate
   * inDevicesToActivate/inDevicesToDeactivate - a pointer to a block of memory contains the devices references
   *
   * ISpDevices_ActivateClass, ISpDevices_DeactivateClass
   * inClass - the class of devices to activate or deactivate
   *
   * ISpDevice_IsActive
   * inDevice - the device reference that you wish to 
   * outIsActive - a boolean value that is true when the device is active
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpDevices_ActivateClass        (ISpDeviceClass         inClass);
  
  /* 1.1 or later*/
  EXTERN_API_C( OSStatus )
  ISpDevices_DeactivateClass      (ISpDeviceClass         inClass);
  
  /* 1.1 or later*/
  EXTERN_API_C( OSStatus )
  ISpDevices_Activate             (UInt32                 inDeviceCount,
                                   ISpDeviceReference *   inDevicesToActivate);
  
  EXTERN_API_C( OSStatus )
  ISpDevices_Deactivate           (UInt32                 inDeviceCount,
                                   ISpDeviceReference *   inDevicesToDeactivate);
  
  EXTERN_API_C( OSStatus )
  ISpDevice_IsActive              (ISpDeviceReference     inDevice,
                                   Boolean *              outIsActive);
  
  /*
   * ISpDevice_GetDefinition
   *
   *
   * inDevice - the device you want to get the definition for
   * inBuflen - the size of the structure (sizeof(ISpDeviceDefinition))
   * outStruct - a pointer to where you want the structure copied
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpDevice_GetDefinition         (ISpDeviceReference     inDevice,
                                   UInt32                 inBuflen,
                                   ISpDeviceDefinition *  outStruct);
  
  /*
   *
   * ISpDevice_GetElementList
   *
   * inDevice - the device whose element list you wish to get
   * outElementList - a pointer to where you want a reference to that list stored
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpDevice_GetElementList        (ISpDeviceReference     inDevice,
                                   ISpElementListReference * outElementList);
  
  /*
   *
   * takes an ISpElementReference and returns the group that it is in or 0 if there is
   * no group
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_GetGroup             (ISpElementReference    inElement,
                                   UInt32 *               outGroup);
  
  /*
   *
   * takes an ISpElementReference and returns the device that the element belongs 
   * to.
   *
   * Return Codes
   * paramErr if inElement is 0 or outDevice is nil
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_GetDevice            (ISpElementReference    inElement,
                                   ISpDeviceReference *   outDevice);
  
  /*
   *
   * takes an ISpElementReference and gives the ISpElementInfo for that Element.  This is the
   * the set of standard information.  You get ISpElementKind specific information
   * through ISpElement_GetConfigurationInfo.
   *
   * Return Codes
   * paramErr if inElement is 0 or outInfo is nil
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_GetInfo              (ISpElementReference    inElement,
                                   ISpElementInfoPtr      outInfo);
  
  /*
   *
   *      
   *
   * takes an ISpElementReference and gives the ISpElementKind specific configuration information
   * 
   * if buflen is not long enough to hold the information ISpElement_GetConfigurationInfo will
   * copy buflen bytes of the data into the block of memory pointed to by configInfo and
   * will return something error.
   *
   * Return Codes
   * paramErr if inElement or configInfo is nil
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_GetConfigurationInfo (ISpElementReference    inElement,
                                   UInt32                 buflen,
                                   void *                 configInfo);
  
  /*
   *
   * ISpElement_GetSimpleState
   *
   * Takes an ISpElementReference and returns the current state of that element.  This is a 
   * specialized version of ISpElement_GetComplexState that is only appropriate for elements
   * whose data fits in a signed 32 bit integer.
   *
   *
   *
   * Return Codes
   * paramErr if inElement is 0 or state is nil
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_GetSimpleState       (ISpElementReference    inElement,
                                   UInt32 *               state);
  
  /*
   *
   * ISpElement_GetComplexState
   *
   * Takes an ISpElementReference and returns the current state of that element.  
   * Will copy up to buflen bytes of the current state of the device into
   * state.
   *
   *
   * Return Codes
   * paramErr if inElement is 0 or state is nil
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_GetComplexState      (ISpElementReference    inElement,
                                   UInt32                 buflen,
                                   void *                 state);
  
  /*
   * ISpElement_GetNextEvent
   *
   * It takes in an element  reference and the buffer size of the ISpElementEventPtr
   * it will set wasEvent to true if there was an event and false otherwise.  If there
   * was not enough space to fill in the whole event structure that event will be
   * dequed, as much of the event as will fit in the buffer will by copied and
   * ISpElement_GetNextEvent will return an error.
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_GetNextEvent         (ISpElementReference    inElement,
                                   UInt32                 bufSize,
                                   ISpElementEventPtr     event,
                                   Boolean *              wasEvent);
  
  /*
   *
   * ISpElement_Flush
   *
   * It takes an ISpElementReference and flushes all the events on that element.  All it guaruntees is
   * that any events that made it to this layer before the time of the flush call will be flushed and
   * it will not flush any events that make it to this layer after the time when the call has returned.
   * What happens to events that occur during the flush is undefined.
   *
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_Flush                (ISpElementReference    inElement);
  
  /*
   * ISpElementList_New
   *
   * Creates a new element list and returns it in outElementList.  In count specifies 
   * the number of element references in the list pointed to by inElements.  If inCount
   * is non zero the list is created with inCount elements in at as specified by the 
   * inElements parameter.  Otherwise the list is created empty.
   *
   *
   * Return Codes
   * out of memory - If it failed to allocate the list because it was out of memory
                     it will also set outElementList to 0
   * paramErr if outElementList was nil
   *
   *
   * Special Concerns
   *
   * interrupt unsafe
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElementList_New              (UInt32                 inCount,
                                   ISpElementReference *  inElements,
                                   ISpElementListReference * outElementList,
                                   UInt32                 flags);
  
  /*
   * ISpElementList_Dispose
   *
   * Deletes an already existing memory list.  
   *
   *
   * Return Codes
   * paramErr if inElementList was 0
   *
   *
   * Special Concerns
   *
   * interrupt unsafe
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElementList_Dispose          (ISpElementListReference  inElementList);
  
  /*
   * ISpGetGlobalElementList
   *
   * returns the global element list
   *
   * Return Codes
   * paramErr if outElementList is nil
   *
   */
  EXTERN_API_C( OSStatus )
  ISpGetGlobalElementList         (ISpElementListReference * outElementList);
  
  /*
   * ISpElementList_AddElement
   *
   * adds an element to the element list
   *
   * Return Codes
   * paramErr if inElementList is 0 or newElement is 0
   * memory error if the system is unable to allocate enough memory
   *
   * Special Concerns
   * interrupt Unsafe
   * 
   */
  EXTERN_API_C( OSStatus )
  ISpElementList_AddElements      (ISpElementListReference  inElementList,
                                   UInt32                 refCon,
                                   UInt32                 count,
                                   ISpElementReference *  newElements);
  
  /*
   * ISpElementList_RemoveElement
   *
   * removes the specified element from the element list
   *
   * Return Codes
   * paramErr if inElementList is 0 or oldElement is 0
   * memory error if the system is unable to allocate enough memory
   *
   * Special Concerns
   * interrupt Unsafe
   * 
   */
  EXTERN_API_C( OSStatus )
  ISpElementList_RemoveElements   (ISpElementListReference  inElementList,
                                   UInt32                 count,
                                   ISpElementReference *  oldElement);
  
  /*
   * ISpElementList_Extract
   *
   * ISpElementList_Extract will extract as many of the elements from an element list as possible.  You pass
   * in an element list, a pointer to an array of element references and the number of elements in that array.
   * It will return how many items are in the element list in the outCount parameter and copy the minimum of 
   * that number and the size of the array into the buffer.
   *
   * ByKind and ByLabel are the same except that they will only count and copy element references to elements
   * that have the specified kind and label.
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElementList_Extract          (ISpElementListReference  inElementList,
                                   UInt32                 inBufferCount,
                                   UInt32 *               outCount,
                                   ISpElementReference *  buffer);
  
  EXTERN_API_C( OSStatus )
  ISpElementList_ExtractByKind    (ISpElementListReference  inElementList,
                                   ISpElementKind         inKind,
                                   UInt32                 inBufferCount,
                                   UInt32 *               outCount,
                                   ISpElementReference *  buffer);
  
  EXTERN_API_C( OSStatus )
  ISpElementList_ExtractByLabel   (ISpElementListReference  inElementList,
                                   ISpElementLabel        inLabel,
                                   UInt32                 inBufferCount,
                                   UInt32 *               outCount,
                                   ISpElementReference *  buffer);
  
  /*
   * ISpElementList_GetNextEvent
   *
   * It takes in an element list reference and the buffer size of the ISpElementEventPtr
   * it will set wasEvent to true if there was an event and false otherwise.  If there
   * was not enough space to fill in the whole event structure that event will be
   * dequed, as much of the event as will fit in the buffer will by copied and
   * ISpElementList_GetNextEvent will return an error.
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElementList_GetNextEvent     (ISpElementListReference  inElementList,
                                   UInt32                 bufSize,
                                   ISpElementEventPtr     event,
                                   Boolean *              wasEvent);
  
  /*
   *
   * ISpElementList_Flush
   *
   * It takes an ISpElementListReference and flushes all the events on that list.  All it guaruntees is
   * that any events that made it to this layer before the time of the flush call will be flushed and
   * it will not flush any events that make it to this layer after the time when the call has returned.
   * What happens to events that occur during the flush is undefined.
   *
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElementList_Flush            (ISpElementListReference  inElementList);
  
  /*
   *
   * ISpTimeToMicroseconds
   *
   *
   * This function takes time from an input sprocket event and converts it
   * into microseconds. (Version 1.2 or later of InputSprocket.)
   *
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpTimeToMicroseconds           (const AbsoluteTime *   inTime,
                                   UnsignedWide *         outMicroseconds);
  
  /*
   *
   * ISpUptime
   *
   *
   * This funtion returns the current machine dependant time, identical in form
   * to that in an InputSprocket event. (Version 1.1 or later of InputSprocket).
   *
   *
   */
  EXTERN_API_C( AbsoluteTime )
  ISpUptime                       (void);
  
  
*************************************************************************

  
  /*  Interfaces for InputSprocket Drivers                                    */
  /*                                                                          */
  /*  These APIs should be called only from InputSprocket drivers             */
  /*                                                                          */
  /*  (Moved from InputSprocketDriver.h, which is now obsolete.               */
  
*************************************************************************

  
  
  /*
  
  Resource File Concerns
  
  1. All resource ids of a driver should be in the range of 256 to 2048
  and the res file should only be open while the drivers panel is visable.
  
  */
  endif  /* CALL_NOT_IN_CARBON */
  
  enum {
      kOSType_ISpDriverFileType   = FOUR_CHAR_CODE('shlb'),
      kOSType_ISpDriverCreator    = FOUR_CHAR_CODE('insp')
  };
  
  /*
   *
   * this function will plot an icon suite of the application (usually for a need)
   *
   */
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSErr )
  ISpPlotAppIconSuite             (const Rect *           theRect,
                                   IconAlignmentType      align,
                                   IconTransformType      transform,
                                   short                  iconSuiteResourceId);
  
  /* label2,5,6,7, disabled and offline are reserved*/
  
  endif  /* CALL_NOT_IN_CARBON */
  
  enum {
      kISpIconTransform_Selected  = kTransformSelected,           /* choose one of these (optionally) (these all erase what is behind them to the dialog color)*/
      kISpIconTransform_PlotIcon  = kTransformLabel1,
      kISpIconTransform_PlotPopupButton = kTransformLabel3,
      kISpIconTransform_PlotButton = kTransformLabel4,            /* use this is you want to plot the icon while the devices button is pressed*/
                                                                  /* or the devices axis is activated and so on*/
      kISpIconTransform_DeviceActive = kTransformOpen
  };
  
  typedef UInt32 ISpMetaHandlerSelector;
  enum {
      kISpSelector_Init           = 1,
      kISpSelector_Stop           = 2,
      kISpSelector_GetSize        = 3,
      kISpSelector_HandleEvent    = 4,
      kISpSelector_Show           = 5,
      kISpSelector_Hide           = 6,
      kISpSelector_BeginConfiguration = 7,
      kISpSelector_EndConfiguration = 8,
      kISpSelector_GetIcon        = 9,
      kISpSelector_GetState       = 10,
      kISpSelector_SetState       = 11,
      kISpSelector_Dirty          = 12,
      kISpSelector_SetActive      = 13,
      kISpSelector_DialogItemHit  = 14,
      kISpSelector_Tickle         = 15,                           /* 1.03 and later*/
      kISpSelector_InterruptTickle = 16,
      kISpSelector_Draw           = 17,
      kISpSelector_Click          = 18,
      kISpSelector_ADBReInit      = 19,                           /* 1.2 and later*/
      kISpSelector_GetCalibration = 20,                           /* 1.7 and later*/
      kISpSelector_SetCalibration = 21,
      kISpSelector_CalibrateDialog = 22
  };
  
  /*
   *
   * typedefs for the function pointers the metahandler may return 
   *
   */
  /* a generic driver function pointer */
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Generic )(UInt32 refCon,  ...);
  /* the meta handler pointer */
  typedef CALLBACK_API_C( ISpDriverFunctionPtr_Generic , ISpDriverFunctionPtr_MetaHandler )(UInt32 refCon, ISpMetaHandlerSelector metaHandlerSelector);
  /* the pointers you get through the meta handler */
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Init )(UInt32 refCon, UInt32 count, ISpNeed needs[], ISpElementReference virtualElements[], Boolean used[], OSType appCreatorCode, OSType subCreatorCode, UInt32 reserved, void *reserved2);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Stop )(UInt32 refCon);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetSize )(UInt32 refCon, Point *minimum, Point *best);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_HandleEvent )(UInt32 refCon, EventRecord *theEvent, Boolean *handled);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Show )(UInt32 refCon, DialogPtr theDialog, short dialogItemNumber, Rect *r);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Hide )(UInt32 refCon);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_BeginConfiguration )(UInt32 refCon, UInt32 count, ISpNeed needs[]);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_EndConfiguration )(UInt32 refCon, Boolean accept);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetIcon )(UInt32 refCon, short *iconSuiteResourceId);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetState )(UInt32 refCon, UInt32 buflen, void *buffer, UInt32 *length);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_SetState )(UInt32 refCon, UInt32 length, void *buffer);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Dirty )(UInt32 refCon, Boolean *dirty);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_SetActive )(UInt32 refCon, Boolean active);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_DialogItemHit )(UInt32 refCon, short itemHit);
  /* 1.03 and later*/
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Tickle )(UInt32 refCon);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_InterruptTickle )(UInt32 refCon);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Draw )(UInt32 refCon);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Click )(UInt32 refCon, const EventRecord *event);
  /* 1.2 and later*/
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_ADBReInit )(UInt32 refCon, Boolean inPostProcess);
  /* 1.7 and later*/
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetCalibration )(UInt32 refCon, void *calibration, Size *calibrationSize);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_SetCalibration )(UInt32 refCon, void *calibration, Size calibrationSize);
  typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_CalibrateDialog )(UInt32 refCon, Boolean *changed);
  /* these functions are exported in the driver's pef container (1.7 or later)*/
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  ISpDriver_CheckConfiguration    (Boolean *              validConfiguration);
  
  EXTERN_API_C( OSStatus )
  ISpDriver_FindAndLoadDevices    (Boolean *              keepDriverLoaded);
  
  EXTERN_API_C( OSStatus )
  ISpDriver_DisposeDevices        (void);
  
  EXTERN_API_C( void )
  ISpDriver_Tickle                (void);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( OSStatus , ISpDriver_CheckConfigurationPtr )(Boolean *validConfiguration);
  typedef CALLBACK_API_C( OSStatus , ISpDriver_FindAndLoadDevicesPtr )(Boolean *keepDriverLoaded);
  typedef CALLBACK_API_C( OSStatus , ISpDriver_DisposeDevicesPtr )(void );
  typedef CALLBACK_API_C( void , ISpDriver_TicklePtr )(void );
  /* ********************* driver level functions ********************* */
  
  /*
   *
   * ISpDevice_New
   *
   * This creates a new device from the device definition structure and returns
   * the result into the device reference.
   *
   * Returns Codes
   * paramErr
   * out of memory
   * 
   * Specical Considerations
   * may not be done at interrupt time
   */
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  ISpDevice_New                   (const ISpDeviceDefinition * inStruct,
                                   ISpDriverFunctionPtr_MetaHandler  metaHandler,
                                   UInt32                 refCon,
                                   ISpDeviceReference *   outReference);
  
  /*
   * ISpDevice_Dispose
   *
   * This disposes an existing device.
   *
   * Returns Codes
   * paramErr
   *
   * Special Considerations
   * May not be done at interrupt time
   *
   */
  EXTERN_API_C( OSStatus )
  ISpDevice_Dispose               (ISpDeviceReference     inReference);
  
  /*
   *
   * ISpElementDefinitionStruct
   *
   * This is the structure that defines everything static about this
   * element.  For each element on your device you will need to 
   * fill in one of these structures when your driver loads.
   *
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  struct ISpElementDefinitionStruct
  {
      ISpDeviceReference device;  /* device this element belongs to */
      UInt32 group;               /* group this element belongs to or 0 */
  
      Str63 theString;         /* a string that is a human readable identifier for this element, internationalization ? */
  
      ISpElementKind kind;
      ISpElementLabel label;
  
      void *configInfo;        /* a pointer to the buffer containing the configuration information for this element */
      UInt32 configInfoLength; /* length of that configuration info */
  
      UInt32 dataSize;         /* the size of the data, so we can generate an appropriate buffer */
  
      UInt32 reserved1;
      UInt32 reserved2;
      UInt32 reserved3;
  };
  typedef struct ISpElementDefinitionStruct ISpElementDefinitionStruct;
  /*
   *
   * ISpElement_New
   *
   * ISpElement_New takes an element definition struct and gives you back a element reference.
   * When you produce data you use that element reference to give the data to the system.
   * 
   * Return Codes
   * paramErr
   * memory error
   *
   * Special Considerations
   * The ISpElement_New function may move or purge memory.  Your application should not call this function 
   * at interrupt time.
   * 
   */
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  ISpElement_New                  (const ISpElementDefinitionStruct * inStruct,
                                   ISpElementReference *  outElement);
  
  /*
   *
   * ISpElement_Dispose
   *
   * ISpElement_Dispose takes an element reference and deletes it.
   * You should call this function when your driver unloads.
   *
   * Return Codes
   * paramErr
   * memory error
   *
   * Special Considerations
   * The ISpElement_Dispose function may move or purge memory.  Your application should not call this function 
   * at interrupt time.
   * 
   */
  EXTERN_API_C( OSStatus )
  ISpElement_Dispose              (ISpElementReference    inElement);
  
  /*
   *
   * ISpElement_PushSimpleData
   *
   * ISpElement_PushSimpleData is the appropriate way to give the system data if your data fits exactly into
   * a 32 bit signed number.  You pass the element reference that goes with the data, the data and the 
   * AbsoluteTime that data was produced.  If UpTime is not available you should fill time.lo with the
   * TickCount time and time.hi with 0.
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_PushSimpleData       (ISpElementReference    inElement,
                                   UInt32                 data,
                                   const AbsoluteTime *   time);
  
  /*
   *
   * ISpElement_PushComplexData
   *
   * ISpElement_PushComplexData is exactly like ISpElement_PushSimpleData except that it is appropriate for times
   * when your data does not fit into a signed 32 bit integer.
   *
   * Instead it takes the length of your data (which must match the datasize field of your ISpElementDefinitionStruct)
   * and a ptr to the devices state.
   *
   * Return Codes
   * paramErr
   *
   */
  EXTERN_API_C( OSStatus )
  ISpElement_PushComplexData      (ISpElementReference    inElement,
                                   UInt32                 buflen,
                                   void *                 state,
                                   const AbsoluteTime *   time);
  
  /*  ***********************************************************************************  */
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef UInt32                          ISpADBDeferRef;
  typedef CALLBACK_API_C( void , ISpADBDeferCallbackProcPtr )(UInt8 adbCommand, void *adbBuffer, UInt32 refcon);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSErr )
  ISpAllocateADBDeferBlock        (ISpADBDeferRef *       createBlock);
  
  EXTERN_API_C( OSErr )
  ISpDisposeADBDeferBlock         (ISpADBDeferRef         disposeBlock);
  
  EXTERN_API_C( OSErr )
  ISpInstallADBDefer              (ISpADBDeferRef         refBlock,
                                   ADBAddress             reqAddress,
                                   ISpADBDeferCallbackProcPtr  installProc,
                                   UInt32                 clientRefCon,
                                   ADBServiceRoutineUPP * prevRoutine,
                                   Ptr *                  prevDataArea);
  
  EXTERN_API_C( OSErr )
  ISpRemoveADBDefer               (ISpADBDeferRef         refBlock);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=reset
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(pop)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack()
  endif
  
  ifdef PRAGMA_IMPORT_OFF
  #pragma import off
  #elif PRAGMA_IMPORT
  #pragma import reset
  endif
  
  ifdef __cplusplus
  }
  endif
  
  endif /* __INPUTSPROCKET__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.