InputSprocket.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:48k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.      File:       InputSprocket.h
  3.  
  4.      Contains:   Games Sprockets: InputSprocket interfaaces
  5.  
  6.      Version:    Technology: InputSprocket 1.7
  7.                  Release:    QuickTime 6.0.2
  8.  
  9.      Copyright:  (c) 1996-2001 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:      For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __INPUTSPROCKET__
  18. #define __INPUTSPROCKET__
  19. #ifndef __DESKBUS__
  20. #include "DeskBus.h"
  21. #endif
  22. #ifndef __DIALOGS__
  23. #include "Dialogs.h"
  24. #endif
  25. #ifndef __EVENTS__
  26. #include "Events.h"
  27. #endif
  28. #ifndef __ICONS__
  29. #include "Icons.h"
  30. #endif
  31. #ifndef __MACTYPES__
  32. #include "MacTypes.h"
  33. #endif
  34. #ifndef __MACERRORS__
  35. #include "MacErrors.h"
  36. #endif
  37. #if PRAGMA_ONCE
  38. #pragma once
  39. #endif
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. #if PRAGMA_IMPORT
  44. #pragma import on
  45. #endif
  46. #if PRAGMA_STRUCT_ALIGN
  47.     #pragma options align=power
  48. #elif PRAGMA_STRUCT_PACKPUSH
  49.     #pragma pack(push, 2)
  50. #elif PRAGMA_STRUCT_PACK
  51.     #pragma pack(2)
  52. #endif
  53. #ifndef USE_OLD_INPUT_SPROCKET_LABELS
  54. #define USE_OLD_INPUT_SPROCKET_LABELS 0
  55. #endif  /* !defined(USE_OLD_INPUT_SPROCKET_LABELS) */
  56. #ifndef USE_OLD_ISPNEED_STRUCT
  57. #define USE_OLD_ISPNEED_STRUCT 0
  58. #endif  /* !defined(USE_OLD_ISPNEED_STRUCT) */
  59. /* ********************* data types ********************* */
  60. typedef struct OpaqueISpDeviceReference*  ISpDeviceReference;
  61. typedef struct OpaqueISpElementReference*  ISpElementReference;
  62. typedef struct OpaqueISpElementListReference*  ISpElementListReference;
  63. /* ISpDeviceClass is a general classs of device, example: keyboard, mouse, joystick */
  64. typedef OSType                          ISpDeviceClass;
  65. /* ISpDeviceIdentifier is a specific device,  example: standard 1-button mouse, 105key ext. kbd. */
  66. typedef OSType                          ISpDeviceIdentifier;
  67. typedef OSType                          ISpElementLabel;
  68. typedef OSType                          ISpElementKind;
  69. /* *************** resources **************** */
  70. enum {
  71.     kISpApplicationResourceType = FOUR_CHAR_CODE('isap'),
  72.     kISpSetListResourceType     = FOUR_CHAR_CODE('setl'),
  73.     kISpSetDataResourceType     = FOUR_CHAR_CODE('setd')
  74. };
  75. struct ISpApplicationResourceStruct {
  76.     UInt32                          flags;
  77.     UInt32                          reserved1;
  78.     UInt32                          reserved2;
  79.     UInt32                          reserved3;
  80. };
  81. typedef struct ISpApplicationResourceStruct ISpApplicationResourceStruct;
  82. enum {
  83.     kISpAppResFlag_UsesInputSprocket = 0x00000001,              /* true if the application uses InputSprocket*/
  84.     kISpAppResFlag_UsesISpInit  = 0x00000002                    /* true if the calls ISpInit (ie, uses the high level interface, calls ISpConfigure, has a needs list, etc...)*/
  85. };
  86. /*
  87.  * ISpDeviceDefinition
  88.  *
  89.  * This structure provides all the available
  90.  * information for an input device within the system
  91.  *
  92.  */
  93. struct ISpDeviceDefinition {
  94.     Str63                           deviceName;                 /* a human readable name of the device */
  95.     ISpDeviceClass                  theDeviceClass;             /* general classs of device example : keyboard, mouse, joystick */
  96.     ISpDeviceIdentifier             theDeviceIdentifier;        /* every distinguishable device should have an OSType */
  97.     UInt32                          permanentID;                /* a cross reboot id unique within that deviceType, 0 if not possible */
  98.     UInt32                          flags;                      /* status flags */
  99.     UInt32                          permanentIDExtend;          /* extension of permanentID, so 64 bits total are now significant */
  100.     UInt32                          reserved2;
  101.     UInt32                          reserved3;
  102. };
  103. typedef struct ISpDeviceDefinition      ISpDeviceDefinition;
  104. enum {
  105.     kISpDeviceFlag_HandleOwnEmulation = 1
  106. };
  107. /*
  108.  * ISpElementEvent, ISpElementEventPtr
  109.  *
  110.  * This is the structure that event data is passed in.
  111.  *
  112.  */
  113. struct ISpElementEvent {
  114.     AbsoluteTime                    when;                       /* this is absolute time on PCI or later, otherwise it is */
  115.                                                                 /* 0 for the hi 32 bits and TickCount for the low 32 bits */
  116.     ISpElementReference             element;                    /* a reference to the element that generated this event */
  117.     UInt32                          refCon;                     /* for application usage, 0 on the global list */
  118.     UInt32                          data;                       /* the data for this event */
  119. };
  120. typedef struct ISpElementEvent          ISpElementEvent;
  121. typedef ISpElementEvent *               ISpElementEventPtr;
  122. /*
  123.  * ISpElementInfo, ISpElementInfoPtr
  124.  *
  125.  * This is the generic definition of an element.
  126.  * Every element must contain this information.
  127.  *
  128.  */
  129. struct ISpElementInfo {
  130.     ISpElementLabel                 theLabel;
  131.     ISpElementKind                  theKind;
  132.     Str63                           theString;
  133.     UInt32                          reserved1;
  134.     UInt32                          reserved2;
  135. };
  136. typedef struct ISpElementInfo           ISpElementInfo;
  137. typedef ISpElementInfo *                ISpElementInfoPtr;
  138. typedef UInt32                          ISpNeedFlagBits;
  139. #if USE_OLD_ISPNEED_STRUCT
  140. struct ISpNeed {
  141.     Str63                           name;
  142.     short                           iconSuiteResourceId;        /* resource id of the icon suite */
  143.     short                           reserved;
  144.     ISpElementKind                  theKind;
  145.     ISpElementLabel                 theLabel;
  146.     ISpNeedFlagBits                 flags;
  147.     UInt32                          reserved1;
  148.     UInt32                          reserved2;
  149.     UInt32                          reserved3;
  150. };
  151. typedef struct ISpNeed                  ISpNeed;
  152. #else
  153. struct ISpNeed {
  154.     Str63                           name;                       /* human-readable string */
  155.     short                           iconSuiteResourceId;        /* resource id of the icon suite */
  156.     UInt8                           playerNum;                  /* used for multi-player support */
  157.     UInt8                           group;                      /* used to group related needs (eg, look left and look right button needs) */
  158.     ISpElementKind                  theKind;
  159.     ISpElementLabel                 theLabel;
  160.     ISpNeedFlagBits                 flags;
  161.     UInt32                          reserved1;
  162.     UInt32                          reserved2;
  163.     UInt32                          reserved3;
  164. };
  165. typedef struct ISpNeed                  ISpNeed;
  166. #endif  /* USE_OLD_ISPNEED_STRUCT */
  167. enum {
  168.     kISpNeedFlag_NoMultiConfig  = 0x00000001,                   /* once this need is autoconfigured to one device dont autoconfigure to anything else*/
  169.     kISpNeedFlag_Utility        = 0x00000002,                   /* this need is a utility function (like show framerate) which would not typically be assigned to anything but the keyboard*/
  170.     kISpNeedFlag_PolledOnly     = 0x00000004,
  171.     kISpNeedFlag_EventsOnly     = 0x00000008,
  172.     kISpNeedFlag_NoAutoConfig   = 0x00000010,                   /* this need can be set normally, but will not ever be auto configured*/
  173.     kISpNeedFlag_NoConfig       = 0x00000020,                   /* this need can not be changed by the user*/
  174.     kISpNeedFlag_Invisible      = 0x00000040,                   /* this need can not be seen by the user*/
  175.                                                                 /* *** kISpElementKind specific flags ****/
  176.                                                                 /* these are flags specific to kISpElementKind_Button*/
  177.     kISpNeedFlag_Button_AlreadyAxis = 0x10000000,               /* there is a axis version of this button need*/
  178.     kISpNeedFlag_Button_ClickToggles = 0x20000000,
  179.     kISpNeedFlag_Button_ActiveWhenDown = 0x40000000,
  180.     kISpNeedFlag_Button_AlreadyDelta = (long)0x80000000,        /* there is a delta version of this button need*/
  181.                                                                 /* these are flags specific to kISpElementKind_DPad*/
  182.                                                                 /* these are flags specific to kISpElementKind_Axis*/
  183.     kISpNeedFlag_Axis_AlreadyButton = 0x10000000,               /* there is a button version of this axis need*/
  184.     kISpNeedFlag_Axis_Asymetric = 0x20000000,                   /* this axis need is asymetric    */
  185.     kISpNeedFlag_Axis_AlreadyDelta = 0x40000000,                /* there is a delta version of this axis need*/
  186.                                                                 /* these are flags specific to kISpElementKind_Delta*/
  187.     kISpNeedFlag_Delta_AlreadyAxis = 0x10000000,                /* there is a axis version of this delta need*/
  188.     kISpNeedFlag_Delta_AlreadyButton = 0x20000000               /* there is a button version of this delta need*/
  189. };
  190. /*
  191.  *
  192.  * These are the current built values for ISpDeviceClass
  193.  *
  194.  */
  195. enum {
  196.     kISpDeviceClass_SpeechRecognition = FOUR_CHAR_CODE('talk'),
  197.     kISpDeviceClass_Mouse       = FOUR_CHAR_CODE('mous'),
  198.     kISpDeviceClass_Keyboard    = FOUR_CHAR_CODE('keyd'),
  199.     kISpDeviceClass_Joystick    = FOUR_CHAR_CODE('joys'),
  200.     kISpDeviceClass_Gamepad     = FOUR_CHAR_CODE('gmpd'),
  201.     kISpDeviceClass_Wheel       = FOUR_CHAR_CODE('whel'),
  202.     kISpDeviceClass_Pedals      = FOUR_CHAR_CODE('pedl'),
  203.     kISpDeviceClass_Levers      = FOUR_CHAR_CODE('levr'),
  204.     kISpDeviceClass_Tickle      = FOUR_CHAR_CODE('tckl'),       /* a device of this class requires ISpTickle*/
  205.     kISpDeviceClass_Unknown     = FOUR_CHAR_CODE('????')
  206. };
  207. /*
  208.  * These are the current built in ISpElementKind's
  209.  * 
  210.  * These are all OSTypes.
  211.  *
  212.  */
  213. enum {
  214.     kISpElementKind_Button      = FOUR_CHAR_CODE('butn'),
  215.     kISpElementKind_DPad        = FOUR_CHAR_CODE('dpad'),
  216.     kISpElementKind_Axis        = FOUR_CHAR_CODE('axis'),
  217.     kISpElementKind_Delta       = FOUR_CHAR_CODE('dlta'),
  218.     kISpElementKind_Movement    = FOUR_CHAR_CODE('move'),
  219.     kISpElementKind_Virtual     = FOUR_CHAR_CODE('virt')
  220. };
  221. /*
  222.  *
  223.  * These are the current built in ISpElementLabel's
  224.  *
  225.  * These are all OSTypes.
  226.  *
  227.  */
  228. #if USE_OLD_INPUT_SPROCKET_LABELS
  229. enum {
  230.                                                                 /* axis */
  231.     kISpElementLabel_XAxis      = FOUR_CHAR_CODE('xaxi'),
  232.     kISpElementLabel_YAxis      = FOUR_CHAR_CODE('yaxi'),
  233.     kISpElementLabel_ZAxis      = FOUR_CHAR_CODE('zaxi'),
  234.     kISpElementLabel_Rx         = FOUR_CHAR_CODE('rxax'),
  235.     kISpElementLabel_Ry         = FOUR_CHAR_CODE('ryax'),
  236.     kISpElementLabel_Rz         = FOUR_CHAR_CODE('rzax'),
  237.     kISpElementLabel_Gas        = FOUR_CHAR_CODE('gasp'),
  238.     kISpElementLabel_Brake      = FOUR_CHAR_CODE('brak'),
  239.     kISpElementLabel_Clutch     = FOUR_CHAR_CODE('cltc'),
  240.     kISpElementLabel_Throttle   = FOUR_CHAR_CODE('thrt'),
  241.     kISpElementLabel_Trim       = FOUR_CHAR_CODE('trim'),       /* direction pad */
  242.     kISpElementLabel_POVHat     = FOUR_CHAR_CODE('povh'),
  243.     kISpElementLabel_PadMove    = FOUR_CHAR_CODE('move'),       /* buttons */
  244.     kISpElementLabel_Fire       = FOUR_CHAR_CODE('fire'),
  245.     kISpElementLabel_Start      = FOUR_CHAR_CODE('strt'),
  246.     kISpElementLabel_Select     = FOUR_CHAR_CODE('optn'),       /* Pause/Resume was changed into 2 needs: Quit and start/pause */
  247.     kISpElementLabel_Btn_PauseResume = FOUR_CHAR_CODE('strt')
  248. };
  249. #endif  /* USE_OLD_INPUT_SPROCKET_LABELS */
  250. enum {
  251.                                                                 /* generic */
  252.     kISpElementLabel_None       = FOUR_CHAR_CODE('none'),       /* axis */
  253.     kISpElementLabel_Axis_XAxis = FOUR_CHAR_CODE('xaxi'),
  254.     kISpElementLabel_Axis_YAxis = FOUR_CHAR_CODE('yaxi'),
  255.     kISpElementLabel_Axis_ZAxis = FOUR_CHAR_CODE('zaxi'),
  256.     kISpElementLabel_Axis_Rx    = FOUR_CHAR_CODE('rxax'),
  257.     kISpElementLabel_Axis_Ry    = FOUR_CHAR_CODE('ryax'),
  258.     kISpElementLabel_Axis_Rz    = FOUR_CHAR_CODE('rzax'),
  259.     kISpElementLabel_Axis_Roll  = kISpElementLabel_Axis_Rz,
  260.     kISpElementLabel_Axis_Pitch = kISpElementLabel_Axis_Rx,
  261.     kISpElementLabel_Axis_Yaw   = kISpElementLabel_Axis_Ry,
  262.     kISpElementLabel_Axis_RollTrim = FOUR_CHAR_CODE('rxtm'),
  263.     kISpElementLabel_Axis_PitchTrim = FOUR_CHAR_CODE('trim'),
  264.     kISpElementLabel_Axis_YawTrim = FOUR_CHAR_CODE('rytm'),
  265.     kISpElementLabel_Axis_Gas   = FOUR_CHAR_CODE('gasp'),
  266.     kISpElementLabel_Axis_Brake = FOUR_CHAR_CODE('brak'),
  267.     kISpElementLabel_Axis_Clutch = FOUR_CHAR_CODE('cltc'),
  268.     kISpElementLabel_Axis_Throttle = FOUR_CHAR_CODE('thrt'),
  269.     kISpElementLabel_Axis_Trim  = kISpElementLabel_Axis_PitchTrim,
  270.     kISpElementLabel_Axis_Rudder = FOUR_CHAR_CODE('rudd'),
  271.     kISpElementLabel_Axis_ToeBrake = FOUR_CHAR_CODE('toeb'),    /* delta */
  272.     kISpElementLabel_Delta_X    = FOUR_CHAR_CODE('xdlt'),
  273.     kISpElementLabel_Delta_Y    = FOUR_CHAR_CODE('ydlt'),
  274.     kISpElementLabel_Delta_Z    = FOUR_CHAR_CODE('zdlt'),
  275.     kISpElementLabel_Delta_Rx   = FOUR_CHAR_CODE('rxdl'),
  276.     kISpElementLabel_Delta_Ry   = FOUR_CHAR_CODE('rydl'),
  277.     kISpElementLabel_Delta_Rz   = FOUR_CHAR_CODE('rzdl'),
  278.     kISpElementLabel_Delta_Roll = kISpElementLabel_Delta_Rz,
  279.     kISpElementLabel_Delta_Pitch = kISpElementLabel_Delta_Rx,
  280.     kISpElementLabel_Delta_Yaw  = kISpElementLabel_Delta_Ry,
  281.     kISpElementLabel_Delta_Cursor_X = FOUR_CHAR_CODE('curx'),
  282.     kISpElementLabel_Delta_Cursor_Y = FOUR_CHAR_CODE('cury'),   /* direction pad */
  283.     kISpElementLabel_Pad_POV    = FOUR_CHAR_CODE('povh'),       /* up/down/left/right*/
  284.     kISpElementLabel_Pad_Move   = FOUR_CHAR_CODE('move'),       /* up/down/left/right*/
  285.     kISpElementLabel_Pad_POV_Horiz = FOUR_CHAR_CODE('hpov'),    /* forward/back/left/right*/
  286.     kISpElementLabel_Pad_Move_Horiz = FOUR_CHAR_CODE('hmov'),   /* forward/back/left/right*/
  287.                                                                 /* buttons */
  288.     kISpElementLabel_Btn_Fire   = FOUR_CHAR_CODE('fire'),
  289.     kISpElementLabel_Btn_SecondaryFire = FOUR_CHAR_CODE('sfir'),
  290.     kISpElementLabel_Btn_Jump   = FOUR_CHAR_CODE('jump'),
  291.     kISpElementLabel_Btn_Quit   = FOUR_CHAR_CODE('strt'),       /* kISpElementLabel_Btn_Quit automatically binds to escape */
  292.     kISpElementLabel_Btn_StartPause = FOUR_CHAR_CODE('paus'),
  293.     kISpElementLabel_Btn_Select = FOUR_CHAR_CODE('optn'),
  294.     kISpElementLabel_Btn_SlideLeft = FOUR_CHAR_CODE('blft'),
  295.     kISpElementLabel_Btn_SlideRight = FOUR_CHAR_CODE('brgt'),
  296.     kISpElementLabel_Btn_MoveForward = FOUR_CHAR_CODE('btmf'),
  297.     kISpElementLabel_Btn_MoveBackward = FOUR_CHAR_CODE('btmb'),
  298.     kISpElementLabel_Btn_TurnLeft = FOUR_CHAR_CODE('bttl'),
  299.     kISpElementLabel_Btn_TurnRight = FOUR_CHAR_CODE('bttr'),
  300.     kISpElementLabel_Btn_LookLeft = FOUR_CHAR_CODE('btll'),
  301.     kISpElementLabel_Btn_LookRight = FOUR_CHAR_CODE('btlr'),
  302.     kISpElementLabel_Btn_LookUp = FOUR_CHAR_CODE('btlu'),
  303.     kISpElementLabel_Btn_LookDown = FOUR_CHAR_CODE('btld'),
  304.     kISpElementLabel_Btn_Next   = FOUR_CHAR_CODE('btnx'),
  305.     kISpElementLabel_Btn_Previous = FOUR_CHAR_CODE('btpv'),
  306.     kISpElementLabel_Btn_SideStep = FOUR_CHAR_CODE('side'),
  307.     kISpElementLabel_Btn_Run    = FOUR_CHAR_CODE('quik'),
  308.     kISpElementLabel_Btn_Look   = FOUR_CHAR_CODE('blok'),
  309.     kISpElementLabel_Btn_Minimum = FOUR_CHAR_CODE('min '),
  310.     kISpElementLabel_Btn_Decrement = FOUR_CHAR_CODE('decr'),
  311.     kISpElementLabel_Btn_Center = FOUR_CHAR_CODE('cent'),
  312.     kISpElementLabel_Btn_Increment = FOUR_CHAR_CODE('incr'),
  313.     kISpElementLabel_Btn_Maximum = FOUR_CHAR_CODE('max '),
  314.     kISpElementLabel_Btn_10Percent = FOUR_CHAR_CODE(' 10 '),
  315.     kISpElementLabel_Btn_20Percent = FOUR_CHAR_CODE(' 20 '),
  316.     kISpElementLabel_Btn_30Percent = FOUR_CHAR_CODE(' 30 '),
  317.     kISpElementLabel_Btn_40Percent = FOUR_CHAR_CODE(' 40 '),
  318.     kISpElementLabel_Btn_50Percent = FOUR_CHAR_CODE(' 50 '),
  319.     kISpElementLabel_Btn_60Percent = FOUR_CHAR_CODE(' 60 '),
  320.     kISpElementLabel_Btn_70Percent = FOUR_CHAR_CODE(' 70 '),
  321.     kISpElementLabel_Btn_80Percent = FOUR_CHAR_CODE(' 80 '),
  322.     kISpElementLabel_Btn_90Percent = FOUR_CHAR_CODE(' 90 '),
  323.     kISpElementLabel_Btn_MouseOne = FOUR_CHAR_CODE('mou1'),
  324.     kISpElementLabel_Btn_MouseTwo = FOUR_CHAR_CODE('mou2'),
  325.     kISpElementLabel_Btn_MouseThree = FOUR_CHAR_CODE('mou3')
  326. };
  327. /*
  328.  *
  329.  * direction pad data & configuration information
  330.  *
  331.  */
  332. typedef UInt32 ISpDPadData;
  333. enum {
  334.     kISpPadIdle                 = 0,
  335.     kISpPadLeft                 = 1,
  336.     kISpPadUpLeft               = 2,
  337.     kISpPadUp                   = 3,
  338.     kISpPadUpRight              = 4,
  339.     kISpPadRight                = 5,
  340.     kISpPadDownRight            = 6,
  341.     kISpPadDown                 = 7,
  342.     kISpPadDownLeft             = 8
  343. };
  344. struct ISpDPadConfigurationInfo {
  345.     UInt32                          id;                         /* ordering 1..n, 0 = no relavent ordering of direction pads */
  346.     Boolean                         fourWayPad;                 /* true if this pad can only produce idle + four directions */
  347. };
  348. typedef struct ISpDPadConfigurationInfo ISpDPadConfigurationInfo;
  349. /*
  350.  *
  351.  * button data & configuration information
  352.  *
  353.  */
  354. typedef UInt32 ISpButtonData;
  355. enum {
  356.     kISpButtonUp                = 0,
  357.     kISpButtonDown              = 1
  358. };
  359. struct ISpButtonConfigurationInfo {
  360.     UInt32                          id;                         /* ordering 1..n, 0 = no relavent ordering of buttons */
  361. };
  362. typedef struct ISpButtonConfigurationInfo ISpButtonConfigurationInfo;
  363. /*
  364.  *
  365.  * axis data & configuration information 
  366.  *
  367.  */
  368. typedef UInt32                          ISpAxisData;
  369. #define    kISpAxisMinimum  0x00000000U
  370. #define    kISpAxisMiddle   0x7FFFFFFFU
  371. #define    kISpAxisMaximum  0xFFFFFFFFU
  372. struct ISpAxisConfigurationInfo {
  373.     Boolean                         symetricAxis;               /* axis is symetric, i.e. a joystick is symetric and a gas pedal is not */
  374. };
  375. typedef struct ISpAxisConfigurationInfo ISpAxisConfigurationInfo;
  376. typedef Fixed                           ISpDeltaData;
  377. struct ISpDeltaConfigurationInfo {
  378.     UInt32                          reserved1;
  379.     UInt32                          reserved2;
  380. };
  381. typedef struct ISpDeltaConfigurationInfo ISpDeltaConfigurationInfo;
  382. struct ISpMovementData {
  383.     ISpAxisData                     xAxis;
  384.     ISpAxisData                     yAxis;
  385.     ISpDPadData                     direction;                  /* ISpDPadData version of the movement */
  386. };
  387. typedef struct ISpMovementData          ISpMovementData;
  388. struct ISpMovementConfigurationInfo {
  389.     UInt32                          reserved1;
  390.     UInt32                          reserved2;
  391. };
  392. typedef struct ISpMovementConfigurationInfo ISpMovementConfigurationInfo;
  393. enum {
  394.     kISpVirtualElementFlag_UseTempMem = 1
  395. };
  396. enum {
  397.     kISpElementListFlag_UseTempMem = 1
  398. };
  399. enum {
  400.     kISpFirstIconSuite          = 30000,
  401.     kISpLastIconSuite           = 30100,
  402.     kISpNoneIconSuite           = 30000
  403. };
  404. /* ********************* user level functions ********************* */
  405. /*
  406.  *
  407.  * startup / shutdown
  408.  *
  409.  */
  410. #if CALL_NOT_IN_CARBON
  411. EXTERN_API_C( OSStatus )
  412. ISpStartup                      (void);
  413. /* 1.1 or later*/
  414. EXTERN_API_C( OSStatus )
  415. ISpShutdown                     (void);
  416. /* 1.1 or later*/
  417. /*
  418.  *
  419.  * polling
  420.  *
  421.  */
  422. EXTERN_API_C( OSStatus )
  423. ISpTickle                       (void);
  424. /* 1.1 or later*/
  425. /********** user interface functions **********/
  426. EXTERN_API_C( NumVersion )
  427. ISpGetVersion                   (void);
  428. /*
  429.  *
  430.  * ISpElement_NewVirtual(ISpElementReference *outElement);
  431.  *
  432.  */
  433. EXTERN_API_C( OSStatus )
  434. ISpElement_NewVirtual           (UInt32                 dataSize,
  435.                                  ISpElementReference *  outElement,
  436.                                  UInt32                 flags);
  437. /*
  438.  *
  439.  * ISpElement_NewVirtualFromNeeds(UInt32 count, ISpNeeds *needs, ISpElementReference *outElements);
  440.  *
  441.  */
  442. EXTERN_API_C( OSStatus )
  443. ISpElement_NewVirtualFromNeeds  (UInt32                 count,
  444.                                  ISpNeed *              needs,
  445.                                  ISpElementReference *  outElements,
  446.                                  UInt32                 flags);
  447. /*
  448.  *
  449.  * ISpElement_DisposeVirtual(inElement);
  450.  *
  451.  */
  452. EXTERN_API_C( OSStatus )
  453. ISpElement_DisposeVirtual       (UInt32                 count,
  454.                                  ISpElementReference *  inElements);
  455. /*
  456.  * ISpInit
  457.  *
  458.  */
  459. EXTERN_API_C( OSStatus )
  460. ISpInit                         (UInt32                 count,
  461.                                  ISpNeed *              needs,
  462.                                  ISpElementReference *  inReferences,
  463.                                  OSType                 appCreatorCode,
  464.                                  OSType                 subCreatorCode,
  465.                                  UInt32                 flags,
  466.                                  short                  setListResourceId,
  467.                                  UInt32                 reserved);
  468. /*
  469.  * ISpConfigure
  470.  *
  471.  */
  472. #endif  /* CALL_NOT_IN_CARBON */
  473. typedef CALLBACK_API_C( Boolean , ISpEventProcPtr )(EventRecord *inEvent);
  474. #if CALL_NOT_IN_CARBON
  475. EXTERN_API_C( OSStatus )
  476. ISpConfigure                    (ISpEventProcPtr        inEventProcPtr);
  477. /*
  478.  *
  479.  * ISpStop
  480.  *
  481.  */
  482. EXTERN_API_C( OSStatus )
  483. ISpStop                         (void);
  484. /*
  485.  *
  486.  * ISpSuspend, ISpResume
  487.  *
  488.  * ISpSuspend turns all devices off and allocates memory so that the state may be later resumed.
  489.  * ISpResume resumes to the previous state of the system after a suspend call.
  490.  * 
  491.  * Return Codes
  492.  * memFullErr
  493.  *
  494.  */
  495. EXTERN_API_C( OSStatus )
  496. ISpSuspend                      (void);
  497. EXTERN_API_C( OSStatus )
  498. ISpResume                       (void);
  499. /*
  500.  * ISpDevices_Extract, ISpDevices_ExtractByClass, ISpDevices_ExtractByIdentifier
  501.  *
  502.  * These will extract as many device references from the system wide list as will fit in your buffer.  
  503.  *
  504.  * inBufferCount - the size of your buffer (in units of sizeof(ISpDeviceReference)) this may be zero
  505.  * buffer - a pointer to your buffer
  506.  * outCount - contains the number of devices in the system
  507.  *
  508.  * ISpDevices_ExtractByClass extracts and counts devices of the specified ISpDeviceClass
  509.  * ISpDevices_ExtractByIdentifier extracts and counts devices of the specified ISpDeviceIdentifier
  510.  *
  511.  * Return Codes
  512.  * paramErr
  513.  *
  514.  */
  515. EXTERN_API_C( OSStatus )
  516. ISpDevices_Extract              (UInt32                 inBufferCount,
  517.                                  UInt32 *               outCount,
  518.                                  ISpDeviceReference *   buffer);
  519. EXTERN_API_C( OSStatus )
  520. ISpDevices_ExtractByClass       (ISpDeviceClass         inClass,
  521.                                  UInt32                 inBufferCount,
  522.                                  UInt32 *               outCount,
  523.                                  ISpDeviceReference *   buffer);
  524. EXTERN_API_C( OSStatus )
  525. ISpDevices_ExtractByIdentifier  (ISpDeviceIdentifier    inIdentifier,
  526.                                  UInt32                 inBufferCount,
  527.                                  UInt32 *               outCount,
  528.                                  ISpDeviceReference *   buffer);
  529. /*
  530.  * ISpDevices_ActivateClass, ISpDevices_DeactivateClass, ISpDevices_Activate, ISpDevices_Deactivate, ISpDevice_IsActive
  531.  *
  532.  * ISpDevices_Activate, ISpDevices_Deactivate
  533.  *
  534.  * This will activate/deactivate a block of devices.
  535.  * inDeviceCount - the number of devices to activate / deactivate
  536.  * inDevicesToActivate/inDevicesToDeactivate - a pointer to a block of memory contains the devices references
  537.  *
  538.  * ISpDevices_ActivateClass, ISpDevices_DeactivateClass
  539.  * inClass - the class of devices to activate or deactivate
  540.  *
  541.  * ISpDevice_IsActive
  542.  * inDevice - the device reference that you wish to 
  543.  * outIsActive - a boolean value that is true when the device is active
  544.  *
  545.  * Return Codes
  546.  * paramErr
  547.  *
  548.  */
  549. EXTERN_API_C( OSStatus )
  550. ISpDevices_ActivateClass        (ISpDeviceClass         inClass);
  551. /* 1.1 or later*/
  552. EXTERN_API_C( OSStatus )
  553. ISpDevices_DeactivateClass      (ISpDeviceClass         inClass);
  554. /* 1.1 or later*/
  555. EXTERN_API_C( OSStatus )
  556. ISpDevices_Activate             (UInt32                 inDeviceCount,
  557.                                  ISpDeviceReference *   inDevicesToActivate);
  558. EXTERN_API_C( OSStatus )
  559. ISpDevices_Deactivate           (UInt32                 inDeviceCount,
  560.                                  ISpDeviceReference *   inDevicesToDeactivate);
  561. EXTERN_API_C( OSStatus )
  562. ISpDevice_IsActive              (ISpDeviceReference     inDevice,
  563.                                  Boolean *              outIsActive);
  564. /*
  565.  * ISpDevice_GetDefinition
  566.  *
  567.  *
  568.  * inDevice - the device you want to get the definition for
  569.  * inBuflen - the size of the structure (sizeof(ISpDeviceDefinition))
  570.  * outStruct - a pointer to where you want the structure copied
  571.  *
  572.  * Return Codes
  573.  * paramErr
  574.  *
  575.  */
  576. EXTERN_API_C( OSStatus )
  577. ISpDevice_GetDefinition         (ISpDeviceReference     inDevice,
  578.                                  UInt32                 inBuflen,
  579.                                  ISpDeviceDefinition *  outStruct);
  580. /*
  581.  *
  582.  * ISpDevice_GetElementList
  583.  *
  584.  * inDevice - the device whose element list you wish to get
  585.  * outElementList - a pointer to where you want a reference to that list stored
  586.  *
  587.  * Return Codes
  588.  * paramErr
  589.  *
  590.  */
  591. EXTERN_API_C( OSStatus )
  592. ISpDevice_GetElementList        (ISpDeviceReference     inDevice,
  593.                                  ISpElementListReference * outElementList);
  594. /*
  595.  *
  596.  * takes an ISpElementReference and returns the group that it is in or 0 if there is
  597.  * no group
  598.  *
  599.  * Return Codes
  600.  * paramErr
  601.  *
  602.  */
  603. EXTERN_API_C( OSStatus )
  604. ISpElement_GetGroup             (ISpElementReference    inElement,
  605.                                  UInt32 *               outGroup);
  606. /*
  607.  *
  608.  * takes an ISpElementReference and returns the device that the element belongs 
  609.  * to.
  610.  *
  611.  * Return Codes
  612.  * paramErr if inElement is 0 or outDevice is nil
  613.  *
  614.  */
  615. EXTERN_API_C( OSStatus )
  616. ISpElement_GetDevice            (ISpElementReference    inElement,
  617.                                  ISpDeviceReference *   outDevice);
  618. /*
  619.  *
  620.  * takes an ISpElementReference and gives the ISpElementInfo for that Element.  This is the
  621.  * the set of standard information.  You get ISpElementKind specific information
  622.  * through ISpElement_GetConfigurationInfo.
  623.  *
  624.  * Return Codes
  625.  * paramErr if inElement is 0 or outInfo is nil
  626.  *
  627.  */
  628. EXTERN_API_C( OSStatus )
  629. ISpElement_GetInfo              (ISpElementReference    inElement,
  630.                                  ISpElementInfoPtr      outInfo);
  631. /*
  632.  *
  633.  *      
  634.  *
  635.  * takes an ISpElementReference and gives the ISpElementKind specific configuration information
  636.  * 
  637.  * if buflen is not long enough to hold the information ISpElement_GetConfigurationInfo will
  638.  * copy buflen bytes of the data into the block of memory pointed to by configInfo and
  639.  * will return something error.
  640.  *
  641.  * Return Codes
  642.  * paramErr if inElement or configInfo is nil
  643.  *
  644.  */
  645. EXTERN_API_C( OSStatus )
  646. ISpElement_GetConfigurationInfo (ISpElementReference    inElement,
  647.                                  UInt32                 buflen,
  648.                                  void *                 configInfo);
  649. /*
  650.  *
  651.  * ISpElement_GetSimpleState
  652.  *
  653.  * Takes an ISpElementReference and returns the current state of that element.  This is a 
  654.  * specialized version of ISpElement_GetComplexState that is only appropriate for elements
  655.  * whose data fits in a signed 32 bit integer.
  656.  *
  657.  *
  658.  *
  659.  * Return Codes
  660.  * paramErr if inElement is 0 or state is nil
  661.  *
  662.  */
  663. EXTERN_API_C( OSStatus )
  664. ISpElement_GetSimpleState       (ISpElementReference    inElement,
  665.                                  UInt32 *               state);
  666. /*
  667.  *
  668.  * ISpElement_GetComplexState
  669.  *
  670.  * Takes an ISpElementReference and returns the current state of that element.  
  671.  * Will copy up to buflen bytes of the current state of the device into
  672.  * state.
  673.  *
  674.  *
  675.  * Return Codes
  676.  * paramErr if inElement is 0 or state is nil
  677.  *
  678.  */
  679. EXTERN_API_C( OSStatus )
  680. ISpElement_GetComplexState      (ISpElementReference    inElement,
  681.                                  UInt32                 buflen,
  682.                                  void *                 state);
  683. /*
  684.  * ISpElement_GetNextEvent
  685.  *
  686.  * It takes in an element  reference and the buffer size of the ISpElementEventPtr
  687.  * it will set wasEvent to true if there was an event and false otherwise.  If there
  688.  * was not enough space to fill in the whole event structure that event will be
  689.  * dequed, as much of the event as will fit in the buffer will by copied and
  690.  * ISpElement_GetNextEvent will return an error.
  691.  *
  692.  * Return Codes
  693.  * paramErr
  694.  *
  695.  */
  696. EXTERN_API_C( OSStatus )
  697. ISpElement_GetNextEvent         (ISpElementReference    inElement,
  698.                                  UInt32                 bufSize,
  699.                                  ISpElementEventPtr     event,
  700.                                  Boolean *              wasEvent);
  701. /*
  702.  *
  703.  * ISpElement_Flush
  704.  *
  705.  * It takes an ISpElementReference and flushes all the events on that element.  All it guaruntees is
  706.  * that any events that made it to this layer before the time of the flush call will be flushed and
  707.  * it will not flush any events that make it to this layer after the time when the call has returned.
  708.  * What happens to events that occur during the flush is undefined.
  709.  *
  710.  *
  711.  * Return Codes
  712.  * paramErr
  713.  *
  714.  */
  715. EXTERN_API_C( OSStatus )
  716. ISpElement_Flush                (ISpElementReference    inElement);
  717. /*
  718.  * ISpElementList_New
  719.  *
  720.  * Creates a new element list and returns it in outElementList.  In count specifies 
  721.  * the number of element references in the list pointed to by inElements.  If inCount
  722.  * is non zero the list is created with inCount elements in at as specified by the 
  723.  * inElements parameter.  Otherwise the list is created empty.
  724.  *
  725.  *
  726.  * Return Codes
  727.  * out of memory - If it failed to allocate the list because it was out of memory
  728.                    it will also set outElementList to 0
  729.  * paramErr if outElementList was nil
  730.  *
  731.  *
  732.  * Special Concerns
  733.  *
  734.  * interrupt unsafe
  735.  *
  736.  */
  737. EXTERN_API_C( OSStatus )
  738. ISpElementList_New              (UInt32                 inCount,
  739.                                  ISpElementReference *  inElements,
  740.                                  ISpElementListReference * outElementList,
  741.                                  UInt32                 flags);
  742. /*
  743.  * ISpElementList_Dispose
  744.  *
  745.  * Deletes an already existing memory list.  
  746.  *
  747.  *
  748.  * Return Codes
  749.  * paramErr if inElementList was 0
  750.  *
  751.  *
  752.  * Special Concerns
  753.  *
  754.  * interrupt unsafe
  755.  *
  756.  */
  757. EXTERN_API_C( OSStatus )
  758. ISpElementList_Dispose          (ISpElementListReference  inElementList);
  759. /*
  760.  * ISpGetGlobalElementList
  761.  *
  762.  * returns the global element list
  763.  *
  764.  * Return Codes
  765.  * paramErr if outElementList is nil
  766.  *
  767.  */
  768. EXTERN_API_C( OSStatus )
  769. ISpGetGlobalElementList         (ISpElementListReference * outElementList);
  770. /*
  771.  * ISpElementList_AddElement
  772.  *
  773.  * adds an element to the element list
  774.  *
  775.  * Return Codes
  776.  * paramErr if inElementList is 0 or newElement is 0
  777.  * memory error if the system is unable to allocate enough memory
  778.  *
  779.  * Special Concerns
  780.  * interrupt Unsafe
  781.  * 
  782.  */
  783. EXTERN_API_C( OSStatus )
  784. ISpElementList_AddElements      (ISpElementListReference  inElementList,
  785.                                  UInt32                 refCon,
  786.                                  UInt32                 count,
  787.                                  ISpElementReference *  newElements);
  788. /*
  789.  * ISpElementList_RemoveElement
  790.  *
  791.  * removes the specified element from the element list
  792.  *
  793.  * Return Codes
  794.  * paramErr if inElementList is 0 or oldElement is 0
  795.  * memory error if the system is unable to allocate enough memory
  796.  *
  797.  * Special Concerns
  798.  * interrupt Unsafe
  799.  * 
  800.  */
  801. EXTERN_API_C( OSStatus )
  802. ISpElementList_RemoveElements   (ISpElementListReference  inElementList,
  803.                                  UInt32                 count,
  804.                                  ISpElementReference *  oldElement);
  805. /*
  806.  * ISpElementList_Extract
  807.  *
  808.  * ISpElementList_Extract will extract as many of the elements from an element list as possible.  You pass
  809.  * in an element list, a pointer to an array of element references and the number of elements in that array.
  810.  * It will return how many items are in the element list in the outCount parameter and copy the minimum of 
  811.  * that number and the size of the array into the buffer.
  812.  *
  813.  * ByKind and ByLabel are the same except that they will only count and copy element references to elements
  814.  * that have the specified kind and label.
  815.  *
  816.  * Return Codes
  817.  * paramErr
  818.  *
  819.  */
  820. EXTERN_API_C( OSStatus )
  821. ISpElementList_Extract          (ISpElementListReference  inElementList,
  822.                                  UInt32                 inBufferCount,
  823.                                  UInt32 *               outCount,
  824.                                  ISpElementReference *  buffer);
  825. EXTERN_API_C( OSStatus )
  826. ISpElementList_ExtractByKind    (ISpElementListReference  inElementList,
  827.                                  ISpElementKind         inKind,
  828.                                  UInt32                 inBufferCount,
  829.                                  UInt32 *               outCount,
  830.                                  ISpElementReference *  buffer);
  831. EXTERN_API_C( OSStatus )
  832. ISpElementList_ExtractByLabel   (ISpElementListReference  inElementList,
  833.                                  ISpElementLabel        inLabel,
  834.                                  UInt32                 inBufferCount,
  835.                                  UInt32 *               outCount,
  836.                                  ISpElementReference *  buffer);
  837. /*
  838.  * ISpElementList_GetNextEvent
  839.  *
  840.  * It takes in an element list reference and the buffer size of the ISpElementEventPtr
  841.  * it will set wasEvent to true if there was an event and false otherwise.  If there
  842.  * was not enough space to fill in the whole event structure that event will be
  843.  * dequed, as much of the event as will fit in the buffer will by copied and
  844.  * ISpElementList_GetNextEvent will return an error.
  845.  *
  846.  * Return Codes
  847.  * paramErr
  848.  *
  849.  */
  850. EXTERN_API_C( OSStatus )
  851. ISpElementList_GetNextEvent     (ISpElementListReference  inElementList,
  852.                                  UInt32                 bufSize,
  853.                                  ISpElementEventPtr     event,
  854.                                  Boolean *              wasEvent);
  855. /*
  856.  *
  857.  * ISpElementList_Flush
  858.  *
  859.  * It takes an ISpElementListReference and flushes all the events on that list.  All it guaruntees is
  860.  * that any events that made it to this layer before the time of the flush call will be flushed and
  861.  * it will not flush any events that make it to this layer after the time when the call has returned.
  862.  * What happens to events that occur during the flush is undefined.
  863.  *
  864.  *
  865.  * Return Codes
  866.  * paramErr
  867.  *
  868.  */
  869. EXTERN_API_C( OSStatus )
  870. ISpElementList_Flush            (ISpElementListReference  inElementList);
  871. /*
  872.  *
  873.  * ISpTimeToMicroseconds
  874.  *
  875.  *
  876.  * This function takes time from an input sprocket event and converts it
  877.  * into microseconds. (Version 1.2 or later of InputSprocket.)
  878.  *
  879.  *
  880.  * Return Codes
  881.  * paramErr
  882.  *
  883.  */
  884. EXTERN_API_C( OSStatus )
  885. ISpTimeToMicroseconds           (const AbsoluteTime *   inTime,
  886.                                  UnsignedWide *         outMicroseconds);
  887. /*
  888.  *
  889.  * ISpUptime
  890.  *
  891.  *
  892.  * This funtion returns the current machine dependant time, identical in form
  893.  * to that in an InputSprocket event. (Version 1.1 or later of InputSprocket).
  894.  *
  895.  *
  896.  */
  897. EXTERN_API_C( AbsoluteTime )
  898. ISpUptime                       (void);
  899. /****************************************************************************/
  900. /*  Interfaces for InputSprocket Drivers                                    */
  901. /*                                                                          */
  902. /*  These APIs should be called only from InputSprocket drivers             */
  903. /*                                                                          */
  904. /*  (Moved from InputSprocketDriver.h, which is now obsolete.               */
  905. /****************************************************************************/
  906. /*
  907. Resource File Concerns
  908. 1. All resource ids of a driver should be in the range of 256 to 2048
  909. and the res file should only be open while the drivers panel is visable.
  910. */
  911. #endif  /* CALL_NOT_IN_CARBON */
  912. enum {
  913.     kOSType_ISpDriverFileType   = FOUR_CHAR_CODE('shlb'),
  914.     kOSType_ISpDriverCreator    = FOUR_CHAR_CODE('insp')
  915. };
  916. /*
  917.  *
  918.  * this function will plot an icon suite of the application (usually for a need)
  919.  *
  920.  */
  921. #if CALL_NOT_IN_CARBON
  922. EXTERN_API_C( OSErr )
  923. ISpPlotAppIconSuite             (const Rect *           theRect,
  924.                                  IconAlignmentType      align,
  925.                                  IconTransformType      transform,
  926.                                  short                  iconSuiteResourceId);
  927. /* label2,5,6,7, disabled and offline are reserved*/
  928. #endif  /* CALL_NOT_IN_CARBON */
  929. enum {
  930.     kISpIconTransform_Selected  = kTransformSelected,           /* choose one of these (optionally) (these all erase what is behind them to the dialog color)*/
  931.     kISpIconTransform_PlotIcon  = kTransformLabel1,
  932.     kISpIconTransform_PlotPopupButton = kTransformLabel3,
  933.     kISpIconTransform_PlotButton = kTransformLabel4,            /* use this is you want to plot the icon while the devices button is pressed*/
  934.                                                                 /* or the devices axis is activated and so on*/
  935.     kISpIconTransform_DeviceActive = kTransformOpen
  936. };
  937. typedef UInt32 ISpMetaHandlerSelector;
  938. enum {
  939.     kISpSelector_Init           = 1,
  940.     kISpSelector_Stop           = 2,
  941.     kISpSelector_GetSize        = 3,
  942.     kISpSelector_HandleEvent    = 4,
  943.     kISpSelector_Show           = 5,
  944.     kISpSelector_Hide           = 6,
  945.     kISpSelector_BeginConfiguration = 7,
  946.     kISpSelector_EndConfiguration = 8,
  947.     kISpSelector_GetIcon        = 9,
  948.     kISpSelector_GetState       = 10,
  949.     kISpSelector_SetState       = 11,
  950.     kISpSelector_Dirty          = 12,
  951.     kISpSelector_SetActive      = 13,
  952.     kISpSelector_DialogItemHit  = 14,
  953.     kISpSelector_Tickle         = 15,                           /* 1.03 and later*/
  954.     kISpSelector_InterruptTickle = 16,
  955.     kISpSelector_Draw           = 17,
  956.     kISpSelector_Click          = 18,
  957.     kISpSelector_ADBReInit      = 19,                           /* 1.2 and later*/
  958.     kISpSelector_GetCalibration = 20,                           /* 1.7 and later*/
  959.     kISpSelector_SetCalibration = 21,
  960.     kISpSelector_CalibrateDialog = 22
  961. };
  962. /*
  963.  *
  964.  * typedefs for the function pointers the metahandler may return 
  965.  *
  966.  */
  967. /* a generic driver function pointer */
  968. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Generic )(UInt32 refCon,  ...);
  969. /* the meta handler pointer */
  970. typedef CALLBACK_API_C( ISpDriverFunctionPtr_Generic , ISpDriverFunctionPtr_MetaHandler )(UInt32 refCon, ISpMetaHandlerSelector metaHandlerSelector);
  971. /* the pointers you get through the meta handler */
  972. 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);
  973. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Stop )(UInt32 refCon);
  974. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetSize )(UInt32 refCon, Point *minimum, Point *best);
  975. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_HandleEvent )(UInt32 refCon, EventRecord *theEvent, Boolean *handled);
  976. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Show )(UInt32 refCon, DialogPtr theDialog, short dialogItemNumber, Rect *r);
  977. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Hide )(UInt32 refCon);
  978. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_BeginConfiguration )(UInt32 refCon, UInt32 count, ISpNeed needs[]);
  979. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_EndConfiguration )(UInt32 refCon, Boolean accept);
  980. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetIcon )(UInt32 refCon, short *iconSuiteResourceId);
  981. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetState )(UInt32 refCon, UInt32 buflen, void *buffer, UInt32 *length);
  982. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_SetState )(UInt32 refCon, UInt32 length, void *buffer);
  983. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Dirty )(UInt32 refCon, Boolean *dirty);
  984. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_SetActive )(UInt32 refCon, Boolean active);
  985. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_DialogItemHit )(UInt32 refCon, short itemHit);
  986. /* 1.03 and later*/
  987. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Tickle )(UInt32 refCon);
  988. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_InterruptTickle )(UInt32 refCon);
  989. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Draw )(UInt32 refCon);
  990. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_Click )(UInt32 refCon, const EventRecord *event);
  991. /* 1.2 and later*/
  992. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_ADBReInit )(UInt32 refCon, Boolean inPostProcess);
  993. /* 1.7 and later*/
  994. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_GetCalibration )(UInt32 refCon, void *calibration, Size *calibrationSize);
  995. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_SetCalibration )(UInt32 refCon, void *calibration, Size calibrationSize);
  996. typedef CALLBACK_API_C( OSStatus , ISpDriverFunctionPtr_CalibrateDialog )(UInt32 refCon, Boolean *changed);
  997. /* these functions are exported in the driver's pef container (1.7 or later)*/
  998. #if CALL_NOT_IN_CARBON
  999. EXTERN_API_C( OSStatus )
  1000. ISpDriver_CheckConfiguration    (Boolean *              validConfiguration);
  1001. EXTERN_API_C( OSStatus )
  1002. ISpDriver_FindAndLoadDevices    (Boolean *              keepDriverLoaded);
  1003. EXTERN_API_C( OSStatus )
  1004. ISpDriver_DisposeDevices        (void);
  1005. EXTERN_API_C( void )
  1006. ISpDriver_Tickle                (void);
  1007. #endif  /* CALL_NOT_IN_CARBON */
  1008. typedef CALLBACK_API_C( OSStatus , ISpDriver_CheckConfigurationPtr )(Boolean *validConfiguration);
  1009. typedef CALLBACK_API_C( OSStatus , ISpDriver_FindAndLoadDevicesPtr )(Boolean *keepDriverLoaded);
  1010. typedef CALLBACK_API_C( OSStatus , ISpDriver_DisposeDevicesPtr )(void );
  1011. typedef CALLBACK_API_C( void , ISpDriver_TicklePtr )(void );
  1012. /* ********************* driver level functions ********************* */
  1013. /*
  1014.  *
  1015.  * ISpDevice_New
  1016.  *
  1017.  * This creates a new device from the device definition structure and returns
  1018.  * the result into the device reference.
  1019.  *
  1020.  * Returns Codes
  1021.  * paramErr
  1022.  * out of memory
  1023.  * 
  1024.  * Specical Considerations
  1025.  * may not be done at interrupt time
  1026.  */
  1027. #if CALL_NOT_IN_CARBON
  1028. EXTERN_API_C( OSStatus )
  1029. ISpDevice_New                   (const ISpDeviceDefinition * inStruct,
  1030.                                  ISpDriverFunctionPtr_MetaHandler  metaHandler,
  1031.                                  UInt32                 refCon,
  1032.                                  ISpDeviceReference *   outReference);
  1033. /*
  1034.  * ISpDevice_Dispose
  1035.  *
  1036.  * This disposes an existing device.
  1037.  *
  1038.  * Returns Codes
  1039.  * paramErr
  1040.  *
  1041.  * Special Considerations
  1042.  * May not be done at interrupt time
  1043.  *
  1044.  */
  1045. EXTERN_API_C( OSStatus )
  1046. ISpDevice_Dispose               (ISpDeviceReference     inReference);
  1047. /*
  1048.  *
  1049.  * ISpElementDefinitionStruct
  1050.  *
  1051.  * This is the structure that defines everything static about this
  1052.  * element.  For each element on your device you will need to 
  1053.  * fill in one of these structures when your driver loads.
  1054.  *
  1055.  */
  1056. #endif  /* CALL_NOT_IN_CARBON */
  1057. struct ISpElementDefinitionStruct
  1058. {
  1059.     ISpDeviceReference device;  /* device this element belongs to */
  1060.     UInt32 group;               /* group this element belongs to or 0 */
  1061.     Str63 theString;         /* a string that is a human readable identifier for this element, internationalization ? */
  1062.     ISpElementKind kind;
  1063.     ISpElementLabel label;
  1064.     void *configInfo;        /* a pointer to the buffer containing the configuration information for this element */
  1065.     UInt32 configInfoLength; /* length of that configuration info */
  1066.     UInt32 dataSize;         /* the size of the data, so we can generate an appropriate buffer */
  1067.     UInt32 reserved1;
  1068.     UInt32 reserved2;
  1069.     UInt32 reserved3;
  1070. };
  1071. typedef struct ISpElementDefinitionStruct ISpElementDefinitionStruct;
  1072. /*
  1073.  *
  1074.  * ISpElement_New
  1075.  *
  1076.  * ISpElement_New takes an element definition struct and gives you back a element reference.
  1077.  * When you produce data you use that element reference to give the data to the system.
  1078.  * 
  1079.  * Return Codes
  1080.  * paramErr
  1081.  * memory error
  1082.  *
  1083.  * Special Considerations
  1084.  * The ISpElement_New function may move or purge memory.  Your application should not call this function 
  1085.  * at interrupt time.
  1086.  * 
  1087.  */
  1088. #if CALL_NOT_IN_CARBON
  1089. EXTERN_API_C( OSStatus )
  1090. ISpElement_New                  (const ISpElementDefinitionStruct * inStruct,
  1091.                                  ISpElementReference *  outElement);
  1092. /*
  1093.  *
  1094.  * ISpElement_Dispose
  1095.  *
  1096.  * ISpElement_Dispose takes an element reference and deletes it.
  1097.  * You should call this function when your driver unloads.
  1098.  *
  1099.  * Return Codes
  1100.  * paramErr
  1101.  * memory error
  1102.  *
  1103.  * Special Considerations
  1104.  * The ISpElement_Dispose function may move or purge memory.  Your application should not call this function 
  1105.  * at interrupt time.
  1106.  * 
  1107.  */
  1108. EXTERN_API_C( OSStatus )
  1109. ISpElement_Dispose              (ISpElementReference    inElement);
  1110. /*
  1111.  *
  1112.  * ISpElement_PushSimpleData
  1113.  *
  1114.  * ISpElement_PushSimpleData is the appropriate way to give the system data if your data fits exactly into
  1115.  * a 32 bit signed number.  You pass the element reference that goes with the data, the data and the 
  1116.  * AbsoluteTime that data was produced.  If UpTime is not available you should fill time.lo with the
  1117.  * TickCount time and time.hi with 0.
  1118.  *
  1119.  * Return Codes
  1120.  * paramErr
  1121.  *
  1122.  */
  1123. EXTERN_API_C( OSStatus )
  1124. ISpElement_PushSimpleData       (ISpElementReference    inElement,
  1125.                                  UInt32                 data,
  1126.                                  const AbsoluteTime *   time);
  1127. /*
  1128.  *
  1129.  * ISpElement_PushComplexData
  1130.  *
  1131.  * ISpElement_PushComplexData is exactly like ISpElement_PushSimpleData except that it is appropriate for times
  1132.  * when your data does not fit into a signed 32 bit integer.
  1133.  *
  1134.  * Instead it takes the length of your data (which must match the datasize field of your ISpElementDefinitionStruct)
  1135.  * and a ptr to the devices state.
  1136.  *
  1137.  * Return Codes
  1138.  * paramErr
  1139.  *
  1140.  */
  1141. EXTERN_API_C( OSStatus )
  1142. ISpElement_PushComplexData      (ISpElementReference    inElement,
  1143.                                  UInt32                 buflen,
  1144.                                  void *                 state,
  1145.                                  const AbsoluteTime *   time);
  1146. /*  ***********************************************************************************  */
  1147. #endif  /* CALL_NOT_IN_CARBON */
  1148. typedef UInt32                          ISpADBDeferRef;
  1149. typedef CALLBACK_API_C( void , ISpADBDeferCallbackProcPtr )(UInt8 adbCommand, void *adbBuffer, UInt32 refcon);
  1150. #if CALL_NOT_IN_CARBON
  1151. EXTERN_API_C( OSErr )
  1152. ISpAllocateADBDeferBlock        (ISpADBDeferRef *       createBlock);
  1153. EXTERN_API_C( OSErr )
  1154. ISpDisposeADBDeferBlock         (ISpADBDeferRef         disposeBlock);
  1155. EXTERN_API_C( OSErr )
  1156. ISpInstallADBDefer              (ISpADBDeferRef         refBlock,
  1157.                                  ADBAddress             reqAddress,
  1158.                                  ISpADBDeferCallbackProcPtr  installProc,
  1159.                                  UInt32                 clientRefCon,
  1160.                                  ADBServiceRoutineUPP * prevRoutine,
  1161.                                  Ptr *                  prevDataArea);
  1162. EXTERN_API_C( OSErr )
  1163. ISpRemoveADBDefer               (ISpADBDeferRef         refBlock);
  1164. #endif  /* CALL_NOT_IN_CARBON */
  1165. #if PRAGMA_STRUCT_ALIGN
  1166.     #pragma options align=reset
  1167. #elif PRAGMA_STRUCT_PACKPUSH
  1168.     #pragma pack(pop)
  1169. #elif PRAGMA_STRUCT_PACK
  1170.     #pragma pack()
  1171. #endif
  1172. #ifdef PRAGMA_IMPORT_OFF
  1173. #pragma import off
  1174. #elif PRAGMA_IMPORT
  1175. #pragma import reset
  1176. #endif
  1177. #ifdef __cplusplus
  1178. }
  1179. #endif
  1180. #endif /* __INPUTSPROCKET__ */