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

多媒体编程

开发平台:

Visual C++

  1. /*
  2.      File:       OCEMessaging.h
  3.  
  4.      Contains:   Apple Open Collaboration Environment Messaging Interfaces.
  5.  
  6.      Version:    Technology: AOCE Toolbox 1.02
  7.                  Release:    QuickTime 6.0.2
  8.  
  9.      Copyright:  (c) 1994-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 __OCEMESSAGING__
  18. #define __OCEMESSAGING__
  19. #ifndef __FILES__
  20. #include "Files.h"
  21. #endif
  22. #ifndef __MACTYPES__
  23. #include "MacTypes.h"
  24. #endif
  25. #ifndef __DIGITALSIGNATURE__
  26. #include "DigitalSignature.h"
  27. #endif
  28. #ifndef __OCE__
  29. #include "OCE.h"
  30. #endif
  31. #ifndef __OCEAUTHDIR__
  32. #include "OCEAuthDir.h"
  33. #endif
  34. #if PRAGMA_ONCE
  35. #pragma once
  36. #endif
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40. #if PRAGMA_IMPORT
  41. #pragma import on
  42. #endif
  43. #if PRAGMA_STRUCT_ALIGN
  44.     #pragma options align=mac68k
  45. #elif PRAGMA_STRUCT_PACKPUSH
  46.     #pragma pack(push, 2)
  47. #elif PRAGMA_STRUCT_PACK
  48.     #pragma pack(2)
  49. #endif
  50. /******************************************************************************/
  51. /* Definitions common to OCEMessaging and to OCEMail. These relate to addressing,
  52. message ids and priorities, etc. */
  53. /* Values of IPMPriority */
  54. enum {
  55.     kIPMAnyPriority             = 0,                            /* FOR FILTER ONLY */
  56.     kIPMNormalPriority          = 1,
  57.     kIPMLowPriority             = 2,
  58.     kIPMHighPriority            = 3
  59. };
  60. typedef Byte                            IPMPriority;
  61. /* Values of IPMAccessMode */
  62. enum {
  63.     kIPMAtMark                  = 0,
  64.     kIPMFromStart               = 1,
  65.     kIPMFromLEOM                = 2,
  66.     kIPMFromMark                = 3
  67. };
  68. typedef unsigned short                  IPMAccessMode;
  69. enum {
  70.     kIPMUpdateMsgBit            = 4,
  71.     kIPMNewMsgBit               = 5,
  72.     kIPMDeleteMsgBit            = 6
  73. };
  74. /* Values of IPMNotificationType */
  75. enum {
  76.     kIPMUpdateMsgMask           = 1 << kIPMUpdateMsgBit,
  77.     kIPMNewMsgMask              = 1 << kIPMNewMsgBit,
  78.     kIPMDeleteMsgMask           = 1 << kIPMDeleteMsgBit
  79. };
  80. typedef Byte                            IPMNotificationType;
  81. /* Values of IPMSenderTag */
  82. enum {
  83.     kIPMSenderRStringTag        = 0,
  84.     kIPMSenderRecordIDTag       = 1
  85. };
  86. typedef unsigned short                  IPMSenderTag;
  87. enum {
  88.     kIPMFromDistListBit         = 0,
  89.     kIPMDummyRecBit             = 1,
  90.     kIPMFeedbackRecBit          = 2,                            /* should be redirected to feedback queue */
  91.     kIPMReporterRecBit          = 3,                            /* should be redirected to reporter original queue */
  92.     kIPMBCCRecBit               = 4                             /* this recipient is blind to all recipients of message */
  93. };
  94. /* Values of OCERecipientOffsetFlags */
  95. enum {
  96.     kIPMFromDistListMask        = 1 << kIPMFromDistListBit,
  97.     kIPMDummyRecMask            = 1 << kIPMDummyRecBit,
  98.     kIPMFeedbackRecMask         = 1 << kIPMFeedbackRecBit,
  99.     kIPMReporterRecMask         = 1 << kIPMReporterRecBit,
  100.     kIPMBCCRecMask              = 1 << kIPMBCCRecBit
  101. };
  102. typedef Byte                            OCERecipientOffsetFlags;
  103. struct OCECreatorType {
  104.     OSType                          msgCreator;
  105.     OSType                          msgType;
  106. };
  107. typedef struct OCECreatorType           OCECreatorType;
  108. enum {
  109.     kIPMTypeWildCard            = FOUR_CHAR_CODE('ipmw'),
  110.     kIPMFamilyUnspecified       = 0,
  111.     kIPMFamilyWildCard          = 0x3F3F3F3F,                   /* '????' * well known signature */
  112.     kIPMSignature               = FOUR_CHAR_CODE('ipms'),       /* base type * well known message types */
  113.     kIPMReportNotify            = FOUR_CHAR_CODE('rptn'),       /* routing feedback * well known message block types */
  114.     kIPMEnclosedMsgType         = FOUR_CHAR_CODE('emsg'),       /* enclosed (nested) message */
  115.     kIPMReportInfo              = FOUR_CHAR_CODE('rpti'),       /* recipient information */
  116.     kIPMDigitalSignature        = FOUR_CHAR_CODE('dsig')        /* digital signature */
  117. };
  118. /* Values of IPMMsgFormat */
  119. enum {
  120.     kIPMOSFormatType            = 1,
  121.     kIPMStringFormatType        = 2
  122. };
  123. typedef unsigned short                  IPMMsgFormat;
  124. typedef Str32                           IPMStringMsgType;
  125. union TheType {
  126.     OCECreatorType                  msgOSType;
  127.     IPMStringMsgType                msgStrType;
  128. };
  129. typedef union TheType                   TheType;
  130. struct IPMMsgType {
  131.     IPMMsgFormat                    format;                     /* IPMMsgFormat*/
  132.     TheType                         theType;
  133. };
  134. typedef struct IPMMsgType               IPMMsgType;
  135. /*
  136. Following are the known extension values for IPM addresses handled by Apple.
  137. We define the definition of the entn extension below.
  138. */
  139. enum {
  140.     kOCEalanXtn                 = FOUR_CHAR_CODE('alan'),
  141.     kOCEentnXtn                 = FOUR_CHAR_CODE('entn'),       /* entn = entity name (aka DSSpec) */
  142.     kOCEaphnXtn                 = FOUR_CHAR_CODE('aphn')
  143. };
  144. /*
  145. Following are the specific definitions for the extension for the standard
  146. OCEMail 'entn' addresses.  [Note, the actual extension is formatted as in
  147. IPMEntityNameExtension.]
  148. */
  149. /* entn extension forms */
  150. enum {
  151.     kOCEAddrXtn                 = FOUR_CHAR_CODE('addr'),
  152.     kOCEQnamXtn                 = FOUR_CHAR_CODE('qnam'),
  153.     kOCEAttrXtn                 = FOUR_CHAR_CODE('attr'),       /* an attribute specification */
  154.     kOCESpAtXtn                 = FOUR_CHAR_CODE('spat')        /* specific attribute */
  155. };
  156. /*
  157. Following are the specific definitions for standard
  158. OCEMail 'aphn' extension value.  
  159. All RStrings here are packed (e.g. truncated to length) and even padded (e.g.
  160. if length odd, then a pad byte (zero) should be introduced before the next field).
  161. The extension value is in the packed form of the following structure:
  162.     RString     phoneNumber;
  163.     RString     modemType;
  164.     Str32       queueuName;
  165. The body of phoneNumber compound RString is in the packed form of the following structure:
  166.     short       subType;
  167.     RString     countryCode;                // used when subType == kOCEUseHandyDial
  168.     RString     areaCode;                   // used when subType == kOCEUseHandyDial
  169.     RString     phone;                      // used when subType == kOCEUseHandyDial
  170.     RString     postFix;                    // used when subType == kOCEUseHandyDial
  171.     RString     nonHandyDialString;         // used when subType == kOCEDontUseHandyDial
  172. */
  173. /* phoneNumber sub type constants */
  174. enum {
  175.     kOCEUseHandyDial            = 1,
  176.     kOCEDontUseHandyDial        = 2
  177. };
  178. /* FORMAT OF A PACKED FORM RECIPIENT */
  179. struct ProtoOCEPackedRecipient {
  180.     unsigned short                  dataLength;
  181. };
  182. typedef struct ProtoOCEPackedRecipient  ProtoOCEPackedRecipient;
  183. enum {
  184.     kOCEPackedRecipientMaxBytes = (4096 - sizeof(ProtoOCEPackedRecipient))
  185. };
  186. struct OCEPackedRecipient {
  187.     unsigned short                  dataLength;
  188.     Byte                            data[4094];
  189. };
  190. typedef struct OCEPackedRecipient       OCEPackedRecipient;
  191. struct IPMEntnQueueExtension {
  192.     Str32                           queueName;
  193. };
  194. typedef struct IPMEntnQueueExtension    IPMEntnQueueExtension;
  195. /* kOCEAttrXtn */
  196. struct IPMEntnAttributeExtension {
  197.     AttributeType                   attributeName;
  198. };
  199. typedef struct IPMEntnAttributeExtension IPMEntnAttributeExtension;
  200. /* kOCESpAtXtn */
  201. struct IPMEntnSpecificAttributeExtension {
  202.     AttributeCreationID             attributeCreationID;
  203.     AttributeType                   attributeName;
  204. };
  205. typedef struct IPMEntnSpecificAttributeExtension IPMEntnSpecificAttributeExtension;
  206. /* All IPM entn extensions fit within the following */
  207. struct IPMEntityNameExtension {
  208.     OSType                          subExtensionType;
  209.     union {
  210.         IPMEntnSpecificAttributeExtension  specificAttribute;
  211.         IPMEntnAttributeExtension       attribute;
  212.         IPMEntnQueueExtension           queue;
  213.     }                                 u;
  214. };
  215. typedef struct IPMEntityNameExtension   IPMEntityNameExtension;
  216. /* addresses with kIPMNBPXtn should specify this nbp type */
  217. #define kIPMWSReceiverNBPType "pMsgReceiver" 
  218. struct IPMMsgID {
  219.     unsigned long                   id[4];
  220. };
  221. typedef struct IPMMsgID                 IPMMsgID;
  222. /* Values of IPMHeaderSelector */
  223. enum {
  224.     kIPMTOC                     = 0,
  225.     kIPMSender                  = 1,
  226.     kIPMProcessHint             = 2,
  227.     kIPMMessageTitle            = 3,
  228.     kIPMMessageType             = 4,
  229.     kIPMFixedInfo               = 7
  230. };
  231. typedef Byte                            IPMHeaderSelector;
  232. union TheSender {
  233.     RString                         rString;
  234.     PackedRecordID                  rid;
  235. };
  236. typedef union TheSender                 TheSender;
  237. struct IPMSender {
  238.     IPMSenderTag                    sendTag;
  239.     TheSender                       theSender;
  240. };
  241. typedef struct IPMSender                IPMSender;
  242. /******************************************************************************/
  243. /* Definitions specific to OCEMessaging */
  244. typedef unsigned long                   IPMContextRef;
  245. typedef unsigned long                   IPMQueueRef;
  246. typedef unsigned long                   IPMMsgRef;
  247. typedef unsigned long                   IPMSeqNum;
  248. typedef Str32                           IPMProcHint;
  249. typedef Str32                           IPMQueueName;
  250. typedef CALLBACK_API( void , IPMNoteProcPtr )(IPMQueueRef queue, IPMSeqNum seqNum, IPMNotificationType notificationType, unsigned long userData);
  251. typedef STACK_UPP_TYPE(IPMNoteProcPtr)                          IPMNoteUPP;
  252. #if OPAQUE_UPP_TYPES
  253. #if CALL_NOT_IN_CARBON
  254.     EXTERN_API(IPMNoteUPP)
  255.     NewIPMNoteUPP                  (IPMNoteProcPtr          userRoutine);
  256.     EXTERN_API(void)
  257.     DisposeIPMNoteUPP              (IPMNoteUPP              userUPP);
  258.     EXTERN_API(void)
  259.     InvokeIPMNoteUPP               (IPMQueueRef             queue,
  260.                                     IPMSeqNum               seqNum,
  261.                                     IPMNotificationType     notificationType,
  262.                                     unsigned long           userData,
  263.                                     IPMNoteUPP              userUPP);
  264. #endif  /* CALL_NOT_IN_CARBON */
  265. #else
  266.     enum { uppIPMNoteProcInfo = 0x000037C0 };                       /* pascal no_return_value Func(4_bytes, 4_bytes, 1_byte, 4_bytes) */
  267.     #define NewIPMNoteUPP(userRoutine)                              (IPMNoteUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppIPMNoteProcInfo, GetCurrentArchitecture())
  268.     #define DisposeIPMNoteUPP(userUPP)                              DisposeRoutineDescriptor(userUPP)
  269.     #define InvokeIPMNoteUPP(queue, seqNum, notificationType, userData, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppIPMNoteProcInfo, (queue), (seqNum), (notificationType), (userData))
  270. #endif
  271. /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  272. #define NewIPMNoteProc(userRoutine)                             NewIPMNoteUPP(userRoutine)
  273. #define CallIPMNoteProc(userRoutine, queue, seqNum, notificationType, userData) InvokeIPMNoteUPP(queue, seqNum, notificationType, userData, userRoutine)
  274. struct IPMFixedHdrInfo {
  275.     unsigned short                  version;
  276.     Boolean                         authenticated;
  277.     Boolean                         signatureEnclosed;          /*  digital signature enclosed */
  278.     unsigned long                   msgSize;
  279.     IPMNotificationType             notification;
  280.     IPMPriority                     priority;
  281.     unsigned short                  blockCount;
  282.     unsigned short                  originalRcptCount;          /*       original number of recipients */
  283.     unsigned long                   refCon;                     /*       Client defined data */
  284.     unsigned short                  reserved;
  285.     UTCTime                         creationTime;               /*       Time when it was created */
  286.     IPMMsgID                        msgID;
  287.     OSType                          family;                     /* family this msg belongs (e.g. mail) */
  288. };
  289. typedef struct IPMFixedHdrInfo          IPMFixedHdrInfo;
  290. enum {
  291.     kIPMDeliveryNotificationBit = 0,
  292.     kIPMNonDeliveryNotificationBit = 1,
  293.     kIPMEncloseOriginalBit      = 2,
  294.     kIPMSummaryReportBit        = 3,                            /* modify enclose original to only on error */
  295.     kIPMOriginalOnlyOnErrorBit  = 4
  296. };
  297. enum {
  298.     kIPMNoNotificationMask      = 0x00,
  299.     kIPMDeliveryNotificationMask = 1 << kIPMDeliveryNotificationBit,
  300.     kIPMNonDeliveryNotificationMask = 1 << kIPMNonDeliveryNotificationBit,
  301.     kIPMDontEncloseOriginalMask = 0x00,
  302.     kIPMEncloseOriginalMask     = 1 << kIPMEncloseOriginalBit,
  303.     kIPMImmediateReportMask     = 0x00,
  304.     kIPMSummaryReportMask       = 1 << kIPMSummaryReportBit,
  305.     kIPMOriginalOnlyOnErrorMask = 1 << kIPMOriginalOnlyOnErrorBit,
  306.     kIPMEncloseOriginalOnErrorMask = (kIPMOriginalOnlyOnErrorMask | kIPMEncloseOriginalMask)
  307. };
  308. /* standard Non delivery codes */
  309. enum {
  310.     kIPMNoSuchRecipient         = 0x0001,
  311.     kIPMRecipientMalformed      = 0x0002,
  312.     kIPMRecipientAmbiguous      = 0x0003,
  313.     kIPMRecipientAccessDenied   = 0x0004,
  314.     kIPMGroupExpansionProblem   = 0x0005,
  315.     kIPMMsgUnreadable           = 0x0006,
  316.     kIPMMsgExpired              = 0x0007,
  317.     kIPMMsgNoTranslatableContent = 0x0008,
  318.     kIPMRecipientReqStdCont     = 0x0009,
  319.     kIPMRecipientReqSnapShot    = 0x000A,
  320.     kIPMNoTransferDiskFull      = 0x000B,
  321.     kIPMNoTransferMsgRejectedbyDest = 0x000C,
  322.     kIPMNoTransferMsgTooLarge   = 0x000D
  323. };
  324. /*************************************************************************/
  325. /*
  326. This is the structure that will be returned by enumerate and getmsginfo
  327. This definition is just to give you a template, the position of msgType
  328. is variable since this is a packed structure.  procHint and msgType are
  329. packed and even length padded.
  330. * master message info */
  331. struct IPMMsgInfo {
  332.     IPMSeqNum                       sequenceNum;
  333.     unsigned long                   userData;
  334.     unsigned short                  respIndex;
  335.     SInt8                           padByte;
  336.     IPMPriority                     priority;
  337.     unsigned long                   msgSize;
  338.     unsigned short                  originalRcptCount;
  339.     unsigned short                  reserved;
  340.     UTCTime                         creationTime;
  341.     IPMMsgID                        msgID;
  342.     OSType                          family;                     /* family this msg belongs (e.g. mail) */
  343.     IPMProcHint                     procHint;
  344.     SInt8                           filler2;
  345.     IPMMsgType                      msgType;
  346. };
  347. typedef struct IPMMsgInfo               IPMMsgInfo;
  348. typedef OCECreatorType                  IPMBlockType;
  349. struct IPMTOC {
  350.     IPMBlockType                    blockType;
  351.     long                            blockOffset;
  352.     unsigned long                   blockSize;
  353.     unsigned long                   blockRefCon;
  354. };
  355. typedef struct IPMTOC                   IPMTOC;
  356. /*
  357. The following structure is just to describe the layout of the SingleFilter.
  358. Each field should be packed and word aligned when passed to the IPM ToolBox.
  359. */
  360. struct IPMSingleFilter {
  361.     IPMPriority                     priority;
  362.     SInt8                           padByte;
  363.     OSType                          family;                     /* family this msg belongs (e.g. mail), '????' for all */
  364.     ScriptCode                      script;                     /* Language Identifier */
  365.     IPMProcHint                     hint;
  366.     SInt8                           filler2;
  367.     IPMMsgType                      msgType;
  368. };
  369. typedef struct IPMSingleFilter          IPMSingleFilter;
  370. struct IPMFilter {
  371.     unsigned short                  count;
  372.     IPMSingleFilter                 sFilters[1];
  373. };
  374. typedef struct IPMFilter                IPMFilter;
  375. /*************************************************************************
  376. Following structures define the "start" of a recipient report block and the
  377. elements of the array respectively.
  378. */
  379. struct IPMReportBlockHeader {
  380.     IPMMsgID                        msgID;                      /* message id of the original */
  381.     UTCTime                         creationTime;               /* creation time of the report */
  382. };
  383. typedef struct IPMReportBlockHeader     IPMReportBlockHeader;
  384. struct OCERecipientReport {
  385.     unsigned short                  rcptIndex;                  /* index of recipient in original message */
  386.     OSErr                           result;                     /* result of sending letter to this recipient*/
  387. };
  388. typedef struct OCERecipientReport       OCERecipientReport;
  389. /*************************************************************************/
  390. typedef union IPMParamBlock             IPMParamBlock;
  391. typedef IPMParamBlock *                 IPMParamBlockPtr;
  392. typedef CALLBACK_API( void , IPMIOCompletionProcPtr )(IPMParamBlockPtr paramBlock);
  393. /*
  394.     WARNING: IPMIOCompletionProcPtr uses register based parameters under classic 68k
  395.              and cannot be written in a high-level language without 
  396.              the help of mixed mode or assembly glue.
  397. */
  398. typedef REGISTER_UPP_TYPE(IPMIOCompletionProcPtr)               IPMIOCompletionUPP;
  399. struct IPMOpenContextPB {
  400.     void *                          qLink;
  401.     long                            reservedH1;
  402.     long                            reservedH2;
  403.     IPMIOCompletionUPP              ioCompletion;
  404.     OSErr                           ioResult;
  405.     long                            saveA5;
  406.     short                           reqCode;
  407.     IPMContextRef                   contextRef;                 /* <--  Context reference to be used in further calls*/
  408. };
  409. typedef struct IPMOpenContextPB         IPMOpenContextPB;
  410. typedef IPMOpenContextPB                IPMCloseContextPB;
  411. struct IPMCreateQueuePB {
  412.     void *                          qLink;
  413.     long                            reservedH1;
  414.     long                            reservedH2;
  415.     IPMIOCompletionUPP              ioCompletion;
  416.     OSErr                           ioResult;
  417.     long                            saveA5;
  418.     short                           reqCode;
  419.     long                            filler1;
  420.     OCERecipient *                  queue;
  421.     AuthIdentity                    identity;                   /* used only if queue is remote */
  422.     PackedRecordID *                owner;                      /* used only if queue is remote */
  423. };
  424. typedef struct IPMCreateQueuePB         IPMCreateQueuePB;
  425. /* For createqueue and deletequeue only queue and identity are used */
  426. typedef IPMCreateQueuePB                IPMDeleteQueuePB;
  427. struct IPMOpenQueuePB {
  428.     void *                          qLink;
  429.     long                            reservedH1;
  430.     long                            reservedH2;
  431.     IPMIOCompletionUPP              ioCompletion;
  432.     OSErr                           ioResult;
  433.     long                            saveA5;
  434.     short                           reqCode;
  435.     IPMContextRef                   contextRef;
  436.     OCERecipient *                  queue;
  437.     AuthIdentity                    identity;
  438.     IPMFilter *                     filter;
  439.     IPMQueueRef                     newQueueRef;
  440.     IPMNoteUPP                      notificationProc;
  441.     unsigned long                   userData;
  442.     IPMNotificationType             noteType;
  443.     Byte                            padByte;
  444.     long                            reserved;
  445.     long                            reserved2;
  446. };
  447. typedef struct IPMOpenQueuePB           IPMOpenQueuePB;
  448. struct IPMCloseQueuePB {
  449.     void *                          qLink;
  450.     long                            reservedH1;
  451.     long                            reservedH2;
  452.     IPMIOCompletionUPP              ioCompletion;
  453.     OSErr                           ioResult;
  454.     long                            saveA5;
  455.     short                           reqCode;
  456.     IPMQueueRef                     queueRef;
  457. };
  458. typedef struct IPMCloseQueuePB          IPMCloseQueuePB;
  459. struct IPMEnumerateQueuePB {
  460.     void *                          qLink;
  461.     long                            reservedH1;
  462.     long                            reservedH2;
  463.     IPMIOCompletionUPP              ioCompletion;
  464.     OSErr                           ioResult;
  465.     long                            saveA5;
  466.     short                           reqCode;
  467.     IPMQueueRef                     queueRef;
  468.     IPMSeqNum                       startSeqNum;
  469.     Boolean                         getProcHint;
  470.     Boolean                         getMsgType;
  471.     short                           filler;
  472.     IPMFilter *                     filter;
  473.     unsigned short                  numToGet;
  474.     unsigned short                  numGotten;
  475.     unsigned long                   enumCount;
  476.     void *                          enumBuffer;                 /* will be packed array of IPMMsgInfo */
  477.     unsigned long                   actEnumCount;
  478. };
  479. typedef struct IPMEnumerateQueuePB      IPMEnumerateQueuePB;
  480. typedef IPMEnumerateQueuePB             IPMChangeQueueFilterPB;
  481. struct IPMDeleteMsgRangePB {
  482.     void *                          qLink;
  483.     long                            reservedH1;
  484.     long                            reservedH2;
  485.     IPMIOCompletionUPP              ioCompletion;
  486.     OSErr                           ioResult;
  487.     long                            saveA5;
  488.     short                           reqCode;
  489.     IPMQueueRef                     queueRef;
  490.     IPMSeqNum                       startSeqNum;
  491.     IPMSeqNum                       endSeqNum;
  492.     IPMSeqNum                       lastSeqNum;
  493. };
  494. typedef struct IPMDeleteMsgRangePB      IPMDeleteMsgRangePB;
  495. struct IPMOpenMsgPB {
  496.     void *                          qLink;
  497.     long                            reservedH1;
  498.     long                            reservedH2;
  499.     IPMIOCompletionUPP              ioCompletion;
  500.     OSErr                           ioResult;
  501.     long                            saveA5;
  502.     short                           reqCode;
  503.     IPMQueueRef                     queueRef;
  504.     IPMSeqNum                       sequenceNum;
  505.     IPMMsgRef                       newMsgRef;
  506.     IPMSeqNum                       actualSeqNum;
  507.     Boolean                         exactMatch;
  508.     Byte                            padByte;
  509.     long                            reserved;
  510. };
  511. typedef struct IPMOpenMsgPB             IPMOpenMsgPB;
  512. struct IPMOpenHFSMsgPB {
  513.     void *                          qLink;
  514.     long                            reservedH1;
  515.     long                            reservedH2;
  516.     IPMIOCompletionUPP              ioCompletion;
  517.     OSErr                           ioResult;
  518.     long                            saveA5;
  519.     short                           reqCode;
  520.     FSSpec *                        hfsPath;
  521.     long                            filler;
  522.     IPMMsgRef                       newMsgRef;
  523.     long                            filler2;
  524.     Byte                            filler3;
  525.     Boolean                         filler4;
  526.     long                            reserved;
  527. };
  528. typedef struct IPMOpenHFSMsgPB          IPMOpenHFSMsgPB;
  529. struct IPMOpenBlockAsMsgPB {
  530.     void *                          qLink;
  531.     long                            reservedH1;
  532.     long                            reservedH2;
  533.     IPMIOCompletionUPP              ioCompletion;
  534.     OSErr                           ioResult;
  535.     long                            saveA5;
  536.     short                           reqCode;
  537.     IPMMsgRef                       msgRef;
  538.     unsigned long                   filler;
  539.     IPMMsgRef                       newMsgRef;
  540.     unsigned short                  filler2[7];
  541.     unsigned short                  blockIndex;
  542. };
  543. typedef struct IPMOpenBlockAsMsgPB      IPMOpenBlockAsMsgPB;
  544. struct IPMCloseMsgPB {
  545.     void *                          qLink;
  546.     long                            reservedH1;
  547.     long                            reservedH2;
  548.     IPMIOCompletionUPP              ioCompletion;
  549.     OSErr                           ioResult;
  550.     long                            saveA5;
  551.     short                           reqCode;
  552.     IPMMsgRef                       msgRef;
  553.     Boolean                         deleteMsg;
  554.     Boolean                         filler1;
  555. };
  556. typedef struct IPMCloseMsgPB            IPMCloseMsgPB;
  557. struct IPMGetMsgInfoPB {
  558.     void *                          qLink;
  559.     long                            reservedH1;
  560.     long                            reservedH2;
  561.     IPMIOCompletionUPP              ioCompletion;
  562.     OSErr                           ioResult;
  563.     long                            saveA5;
  564.     short                           reqCode;
  565.     IPMMsgRef                       msgRef;
  566.     IPMMsgInfo *                    info;
  567. };
  568. typedef struct IPMGetMsgInfoPB          IPMGetMsgInfoPB;
  569. struct IPMReadHeaderPB {
  570.     void *                          qLink;
  571.     long                            reservedH1;
  572.     long                            reservedH2;
  573.     IPMIOCompletionUPP              ioCompletion;
  574.     OSErr                           ioResult;
  575.     long                            saveA5;
  576.     short                           reqCode;
  577.     IPMMsgRef                       msgRef;
  578.     unsigned short                  fieldSelector;
  579.     long                            offset;
  580.     unsigned long                   count;
  581.     void *                          buffer;
  582.     unsigned long                   actualCount;
  583.     unsigned short                  filler;
  584.     unsigned long                   remaining;
  585. };
  586. typedef struct IPMReadHeaderPB          IPMReadHeaderPB;
  587. struct IPMReadRecipientPB {
  588.     void *                          qLink;
  589.     long                            reservedH1;
  590.     long                            reservedH2;
  591.     IPMIOCompletionUPP              ioCompletion;
  592.     OSErr                           ioResult;
  593.     long                            saveA5;
  594.     short                           reqCode;
  595.     IPMMsgRef                       msgRef;
  596.     unsigned short                  rcptIndex;
  597.     long                            offset;
  598.     unsigned long                   count;
  599.     void *                          buffer;
  600.     unsigned long                   actualCount;
  601.     short                           reserved;                   /* must be zero */
  602.     unsigned long                   remaining;
  603.     unsigned short                  originalIndex;
  604.     OCERecipientOffsetFlags         recipientOffsetFlags;
  605.     Boolean                         filler1;
  606. };
  607. typedef struct IPMReadRecipientPB       IPMReadRecipientPB;
  608. /*
  609. replyQueue works like recipient. [can no longer read it via ReadHeader]
  610. OriginalIndex is meaningless, rcptFlags are used seperately and there are
  611. currently none defined.
  612. */
  613. typedef IPMReadRecipientPB              IPMReadReplyQueuePB;
  614. struct IPMGetBlkIndexPB {
  615.     void *                          qLink;
  616.     long                            reservedH1;
  617.     long                            reservedH2;
  618.     IPMIOCompletionUPP              ioCompletion;
  619.     OSErr                           ioResult;
  620.     long                            saveA5;
  621.     short                           reqCode;
  622.     IPMMsgRef                       msgRef;
  623.     IPMBlockType                    blockType;
  624.     unsigned short                  index;
  625.     unsigned short                  startingFrom;
  626.     IPMBlockType                    actualBlockType;
  627.     unsigned short                  actualBlockIndex;
  628. };
  629. typedef struct IPMGetBlkIndexPB         IPMGetBlkIndexPB;
  630. struct IPMReadMsgPB {
  631.     void *                          qLink;
  632.     long                            reservedH1;
  633.     long                            reservedH2;
  634.     IPMIOCompletionUPP              ioCompletion;
  635.     OSErr                           ioResult;
  636.     long                            saveA5;
  637.     short                           reqCode;
  638.     IPMMsgRef                       msgRef;
  639.     IPMAccessMode                   mode;
  640.     long                            offset;
  641.     unsigned long                   count;
  642.     void *                          buffer;
  643.     unsigned long                   actualCount;
  644.     unsigned short                  blockIndex;
  645.     unsigned long                   remaining;
  646. };
  647. typedef struct IPMReadMsgPB             IPMReadMsgPB;
  648. struct IPMVerifySignaturePB {
  649.     void *                          qLink;
  650.     long                            reservedH1;
  651.     long                            reservedH2;
  652.     IPMIOCompletionUPP              ioCompletion;
  653.     OSErr                           ioResult;
  654.     long                            saveA5;
  655.     short                           reqCode;
  656.     IPMMsgRef                       msgRef;
  657.     SIGContextPtr                   signatureContext;
  658. };
  659. typedef struct IPMVerifySignaturePB     IPMVerifySignaturePB;
  660. struct IPMNewMsgPB {
  661.     void *                          qLink;
  662.     long                            reservedH1;
  663.     long                            reservedH2;
  664.     IPMIOCompletionUPP              ioCompletion;
  665.     OSErr                           ioResult;
  666.     long                            saveA5;
  667.     short                           reqCode;
  668.     unsigned long                   filler;
  669.     OCERecipient *                  recipient;
  670.     OCERecipient *                  replyQueue;
  671.     StringPtr                       procHint;
  672.     unsigned short                  filler2;
  673.     IPMMsgType *                    msgType;
  674.     unsigned long                   refCon;
  675.     IPMMsgRef                       newMsgRef;
  676.     unsigned short                  filler3;
  677.     long                            filler4;
  678.     AuthIdentity                    identity;
  679.     IPMSender *                     sender;
  680.     unsigned long                   internalUse;
  681.     unsigned long                   internalUse2;
  682. };
  683. typedef struct IPMNewMsgPB              IPMNewMsgPB;
  684. struct IPMNewHFSMsgPB {
  685.     void *                          qLink;
  686.     long                            reservedH1;
  687.     long                            reservedH2;
  688.     IPMIOCompletionUPP              ioCompletion;
  689.     OSErr                           ioResult;
  690.     long                            saveA5;
  691.     short                           reqCode;
  692.     FSSpec *                        hfsPath;
  693.     OCERecipient *                  recipient;
  694.     OCERecipient *                  replyQueue;
  695.     StringPtr                       procHint;
  696.     unsigned short                  filler2;
  697.     IPMMsgType *                    msgType;
  698.     unsigned long                   refCon;
  699.     IPMMsgRef                       newMsgRef;
  700.     unsigned short                  filler3;
  701.     long                            filler4;
  702.     AuthIdentity                    identity;
  703.     IPMSender *                     sender;
  704.     unsigned long                   internalUse;
  705.     unsigned long                   internalUse2;
  706. };
  707. typedef struct IPMNewHFSMsgPB           IPMNewHFSMsgPB;
  708. struct IPMNestMsgPB {
  709.     void *                          qLink;
  710.     long                            reservedH1;
  711.     long                            reservedH2;
  712.     IPMIOCompletionUPP              ioCompletion;
  713.     OSErr                           ioResult;
  714.     long                            saveA5;
  715.     short                           reqCode;
  716.     IPMMsgRef                       msgRef;
  717.     unsigned short                  filler[9];
  718.     unsigned long                   refCon;
  719.     IPMMsgRef                       msgToNest;
  720.     unsigned short                  filler2;
  721.     long                            startingOffset;
  722. };
  723. typedef struct IPMNestMsgPB             IPMNestMsgPB;
  724. struct IPMNewNestedMsgBlockPB {
  725.     void *                          qLink;
  726.     long                            reservedH1;
  727.     long                            reservedH2;
  728.     IPMIOCompletionUPP              ioCompletion;
  729.     OSErr                           ioResult;
  730.     long                            saveA5;
  731.     short                           reqCode;
  732.     IPMMsgRef                       msgRef;
  733.     OCERecipient *                  recipient;
  734.     OCERecipient *                  replyQueue;
  735.     StringPtr                       procHint;
  736.     unsigned short                  filler1;
  737.     IPMMsgType *                    msgType;
  738.     unsigned long                   refCon;
  739.     IPMMsgRef                       newMsgRef;
  740.     unsigned short                  filler2;
  741.     long                            startingOffset;
  742.     AuthIdentity                    identity;
  743.     IPMSender *                     sender;
  744.     unsigned long                   internalUse;
  745.     unsigned long                   internalUse2;
  746. };
  747. typedef struct IPMNewNestedMsgBlockPB   IPMNewNestedMsgBlockPB;
  748. struct IPMEndMsgPB {
  749.     void *                          qLink;
  750.     long                            reservedH1;
  751.     long                            reservedH2;
  752.     IPMIOCompletionUPP              ioCompletion;
  753.     OSErr                           ioResult;
  754.     long                            saveA5;
  755.     short                           reqCode;
  756.     IPMMsgRef                       msgRef;
  757.     IPMMsgID                        msgID;
  758.     RString *                       msgTitle;
  759.     IPMNotificationType             deliveryNotification;
  760.     IPMPriority                     priority;
  761.     Boolean                         cancel;
  762.     Byte                            padByte;
  763.     long                            reserved;
  764.     SIGSignaturePtr                 signature;
  765.     Size                            signatureSize;
  766.     SIGContextPtr                   signatureContext;
  767.                                                                 /* family this msg belongs (e.g. mail) use kIPMFamilyUnspecified by default */
  768.     OSType                          family;
  769. };
  770. typedef struct IPMEndMsgPB              IPMEndMsgPB;
  771. struct IPMAddRecipientPB {
  772.     void *                          qLink;
  773.     long                            reservedH1;
  774.     long                            reservedH2;
  775.     IPMIOCompletionUPP              ioCompletion;
  776.     OSErr                           ioResult;
  777.     long                            saveA5;
  778.     short                           reqCode;
  779.     IPMMsgRef                       msgRef;
  780.     OCERecipient *                  recipient;
  781.     long                            reserved;
  782. };
  783. typedef struct IPMAddRecipientPB        IPMAddRecipientPB;
  784. struct IPMAddReplyQueuePB {
  785.     void *                          qLink;
  786.     long                            reservedH1;
  787.     long                            reservedH2;
  788.     IPMIOCompletionUPP              ioCompletion;
  789.     OSErr                           ioResult;
  790.     long                            saveA5;
  791.     short                           reqCode;
  792.     IPMMsgRef                       msgRef;
  793.     long                            filler;
  794.     OCERecipient *                  replyQueue;
  795. };
  796. typedef struct IPMAddReplyQueuePB       IPMAddReplyQueuePB;
  797. struct IPMNewBlockPB {
  798.     void *                          qLink;
  799.     long                            reservedH1;
  800.     long                            reservedH2;
  801.     IPMIOCompletionUPP              ioCompletion;
  802.     OSErr                           ioResult;
  803.     long                            saveA5;
  804.     short                           reqCode;
  805.     IPMMsgRef                       msgRef;
  806.     IPMBlockType                    blockType;
  807.     unsigned short                  filler[5];
  808.     unsigned long                   refCon;
  809.     unsigned short                  filler2[3];
  810.     long                            startingOffset;
  811. };
  812. typedef struct IPMNewBlockPB            IPMNewBlockPB;
  813. struct IPMWriteMsgPB {
  814.     void *                          qLink;
  815.     long                            reservedH1;
  816.     long                            reservedH2;
  817.     IPMIOCompletionUPP              ioCompletion;
  818.     OSErr                           ioResult;
  819.     long                            saveA5;
  820.     short                           reqCode;
  821.     IPMMsgRef                       msgRef;
  822.     IPMAccessMode                   mode;
  823.     long                            offset;
  824.     unsigned long                   count;
  825.     void *                          buffer;
  826.     unsigned long                   actualCount;
  827.     Boolean                         currentBlock;
  828.     Boolean                         filler1;
  829. };
  830. typedef struct IPMWriteMsgPB            IPMWriteMsgPB;
  831. union IPMParamBlock {
  832.     struct {
  833.         void *                          qLink;
  834.         long                            reservedH1;
  835.         long                            reservedH2;
  836.         IPMIOCompletionUPP              ioCompletion;
  837.         OSErr                           ioResult;
  838.         long                            saveA5;
  839.         short                           reqCode;
  840.     }                                 header;
  841.     IPMOpenContextPB                openContextPB;
  842.     IPMCloseContextPB               closeContextPB;
  843.     IPMCreateQueuePB                createQueuePB;
  844.     IPMDeleteQueuePB                deleteQueuePB;
  845.     IPMOpenQueuePB                  openQueuePB;
  846.     IPMCloseQueuePB                 closeQueuePB;
  847.     IPMEnumerateQueuePB             enumerateQueuePB;
  848.     IPMChangeQueueFilterPB          changeQueueFilterPB;
  849.     IPMDeleteMsgRangePB             deleteMsgRangePB;
  850.     IPMOpenMsgPB                    openMsgPB;
  851.     IPMOpenHFSMsgPB                 openHFSMsgPB;
  852.     IPMOpenBlockAsMsgPB             openBlockAsMsgPB;
  853.     IPMCloseMsgPB                   closeMsgPB;
  854.     IPMGetMsgInfoPB                 getMsgInfoPB;
  855.     IPMReadHeaderPB                 readHeaderPB;
  856.     IPMReadRecipientPB              readRecipientPB;
  857.     IPMReadReplyQueuePB             readReplyQueuePB;
  858.     IPMGetBlkIndexPB                getBlkIndexPB;
  859.     IPMReadMsgPB                    readMsgPB;
  860.     IPMVerifySignaturePB            verifySignaturePB;
  861.     IPMNewMsgPB                     newMsgPB;
  862.     IPMNewHFSMsgPB                  newHFSMsgPB;
  863.     IPMNestMsgPB                    nestMsgPB;
  864.     IPMNewNestedMsgBlockPB          newNestedMsgBlockPB;
  865.     IPMEndMsgPB                     endMsgPB;
  866.     IPMAddRecipientPB               addRecipientPB;
  867.     IPMAddReplyQueuePB              addReplyQueuePB;
  868.     IPMNewBlockPB                   newBlockPB;
  869.     IPMWriteMsgPB                   writeMsgPB;
  870. };
  871. #if OPAQUE_UPP_TYPES
  872. #if CALL_NOT_IN_CARBON
  873.     EXTERN_API(IPMIOCompletionUPP)
  874.     NewIPMIOCompletionUPP          (IPMIOCompletionProcPtr  userRoutine);
  875.     EXTERN_API(void)
  876.     DisposeIPMIOCompletionUPP      (IPMIOCompletionUPP      userUPP);
  877.     EXTERN_API(void)
  878.     InvokeIPMIOCompletionUPP       (IPMParamBlockPtr        paramBlock,
  879.                                     IPMIOCompletionUPP      userUPP);
  880. #endif  /* CALL_NOT_IN_CARBON */
  881. #else
  882.     enum { uppIPMIOCompletionProcInfo = 0x00009802 };               /* register no_return_value Func(4_bytes:A0) */
  883.     #define NewIPMIOCompletionUPP(userRoutine)                      (IPMIOCompletionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppIPMIOCompletionProcInfo, GetCurrentArchitecture())
  884.     #define DisposeIPMIOCompletionUPP(userUPP)                      DisposeRoutineDescriptor(userUPP)
  885.     #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
  886.     #pragma parameter InvokeIPMIOCompletionUPP(__A0, __A1)
  887.     void InvokeIPMIOCompletionUPP(IPMParamBlockPtr paramBlock, IPMIOCompletionUPP userUPP) = 0x4E91;
  888.     #else
  889.         #define InvokeIPMIOCompletionUPP(paramBlock, userUPP)           CALL_ONE_PARAMETER_UPP((userUPP), uppIPMIOCompletionProcInfo, (paramBlock))
  890.     #endif
  891. #endif
  892. /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  893. #define NewIPMIOCompletionProc(userRoutine)                     NewIPMIOCompletionUPP(userRoutine)
  894. #define CallIPMIOCompletionProc(userRoutine, paramBlock)        InvokeIPMIOCompletionUPP(paramBlock, userRoutine)
  895. #if CALL_NOT_IN_CARBON
  896. EXTERN_API( OSErr )
  897. IPMOpenContext                  (IPMParamBlockPtr       paramBlock,
  898.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0400, 0xAA5E);
  899. EXTERN_API( OSErr )
  900. IPMCloseContext                 (IPMParamBlockPtr       paramBlock,
  901.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0401, 0xAA5E);
  902. EXTERN_API( OSErr )
  903. IPMNewMsg                       (IPMParamBlockPtr       paramBlock,
  904.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0402, 0xAA5E);
  905. EXTERN_API( OSErr )
  906. IPMNewBlock                     (IPMParamBlockPtr       paramBlock,
  907.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0404, 0xAA5E);
  908. EXTERN_API( OSErr )
  909. IPMNewNestedMsgBlock            (IPMParamBlockPtr       paramBlock,
  910.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0405, 0xAA5E);
  911. EXTERN_API( OSErr )
  912. IPMNestMsg                      (IPMParamBlockPtr       paramBlock,
  913.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0406, 0xAA5E);
  914. EXTERN_API( OSErr )
  915. IPMWriteMsg                     (IPMParamBlockPtr       paramBlock,
  916.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0407, 0xAA5E);
  917. EXTERN_API( OSErr )
  918. IPMEndMsg                       (IPMParamBlockPtr       paramBlock,
  919.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0408, 0xAA5E);
  920. EXTERN_API( OSErr )
  921. IPMOpenQueue                    (IPMParamBlockPtr       paramBlock,
  922.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0409, 0xAA5E);
  923. EXTERN_API( OSErr )
  924. IPMCloseQueue                   (IPMParamBlockPtr       paramBlock,
  925.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x040A, 0xAA5E);
  926. /* Always synchronous */
  927. EXTERN_API( OSErr )
  928. IPMVerifySignature              (IPMParamBlockPtr       paramBlock)                         FIVEWORDINLINE(0x7000, 0x1F00, 0x3F3C, 0x0422, 0xAA5E);
  929. EXTERN_API( OSErr )
  930. IPMOpenMsg                      (IPMParamBlockPtr       paramBlock,
  931.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x040B, 0xAA5E);
  932. EXTERN_API( OSErr )
  933. IPMCloseMsg                     (IPMParamBlockPtr       paramBlock,
  934.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x040C, 0xAA5E);
  935. EXTERN_API( OSErr )
  936. IPMReadMsg                      (IPMParamBlockPtr       paramBlock,
  937.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x040D, 0xAA5E);
  938. EXTERN_API( OSErr )
  939. IPMReadHeader                   (IPMParamBlockPtr       paramBlock,
  940.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x040E, 0xAA5E);
  941. EXTERN_API( OSErr )
  942. IPMOpenBlockAsMsg               (IPMParamBlockPtr       paramBlock,
  943.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x040F, 0xAA5E);
  944. EXTERN_API( OSErr )
  945. IPMNewHFSMsg                    (IPMParamBlockPtr       paramBlock,
  946.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x041E, 0xAA5E);
  947. EXTERN_API( OSErr )
  948. IPMReadRecipient                (IPMParamBlockPtr       paramBlock,
  949.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0410, 0xAA5E);
  950. EXTERN_API( OSErr )
  951. IPMReadReplyQueue               (IPMParamBlockPtr       paramBlock,
  952.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0421, 0xAA5E);
  953. EXTERN_API( OSErr )
  954. IPMCreateQueue                  (IPMParamBlockPtr       paramBlock,
  955.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0411, 0xAA5E);
  956. EXTERN_API( OSErr )
  957. IPMDeleteQueue                  (IPMParamBlockPtr       paramBlock,
  958.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0412, 0xAA5E);
  959. EXTERN_API( OSErr )
  960. IPMEnumerateQueue               (IPMParamBlockPtr       paramBlock,
  961.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0413, 0xAA5E);
  962. EXTERN_API( OSErr )
  963. IPMChangeQueueFilter            (IPMParamBlockPtr       paramBlock,
  964.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0414, 0xAA5E);
  965. EXTERN_API( OSErr )
  966. IPMDeleteMsgRange               (IPMParamBlockPtr       paramBlock,
  967.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0415, 0xAA5E);
  968. EXTERN_API( OSErr )
  969. IPMAddRecipient                 (IPMParamBlockPtr       paramBlock,
  970.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0403, 0xAA5E);
  971. EXTERN_API( OSErr )
  972. IPMAddReplyQueue                (IPMParamBlockPtr       paramBlock,
  973.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x041D, 0xAA5E);
  974. EXTERN_API( OSErr )
  975. IPMOpenHFSMsg                   (IPMParamBlockPtr       paramBlock,
  976.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0417, 0xAA5E);
  977. EXTERN_API( OSErr )
  978. IPMGetBlkIndex                  (IPMParamBlockPtr       paramBlock,
  979.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0418, 0xAA5E);
  980. EXTERN_API( OSErr )
  981. IPMGetMsgInfo                   (IPMParamBlockPtr       paramBlock,
  982.                                  Boolean                async)                              THREEWORDINLINE(0x3F3C, 0x0419, 0xAA5E);
  983. #endif  /* CALL_NOT_IN_CARBON */
  984. #if PRAGMA_STRUCT_ALIGN
  985.     #pragma options align=reset
  986. #elif PRAGMA_STRUCT_PACKPUSH
  987.     #pragma pack(pop)
  988. #elif PRAGMA_STRUCT_PACK
  989.     #pragma pack()
  990. #endif
  991. #ifdef PRAGMA_IMPORT_OFF
  992. #pragma import off
  993. #elif PRAGMA_IMPORT
  994. #pragma import reset
  995. #endif
  996. #ifdef __cplusplus
  997. }
  998. #endif
  999. #endif /* __OCEMESSAGING__ */