-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAEMach.h
195 lines (163 loc) · 5 KB
/
AEMach.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/*
File: AEMach.h
Contains: AppleEvent over mach_msg interfaces
Version: Technology: For Mac OS X
Release: Universal Interfaces 3.4
Copyright: © 2000-2001 by Apple Computer, Inc., all rights reserved.
Bugs?: For bug reports, consult the following page on
the World Wide Web:
http://developer.apple.com/bugreporter/
*/
#ifndef __AEMACH__
#define __AEMACH__
#ifndef __MACTYPES__
#include <MacTypes.h>
#endif
#ifndef __MIXEDMODE__
#include <MixedMode.h>
#endif
#ifndef __AEDATAMODEL__
#include <AEDataModel.h>
#endif
#if PRAGMA_ONCE
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if PRAGMA_IMPORT
#pragma import on
#endif
#if PRAGMA_STRUCT_ALIGN
#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
#endif
/*-
* AE Mach API --
*
* AppleEvents on OS X are implemented in terms of mach messages.
* To facilitate writing server processes that can send and receive
* AppleEvents, the following APIs are provided.
*
* AppleEvents are directed to a well known port uniquely tied to a
* process. The AE framework will discover this port based on the
* keyAddressAttr of the event (as specifed in AECreateAppleEvent by
* the target parameter.) If a port cannot be found,
* procNotFound (-600) will be returned on AESend.
*
* Of note is a new attribute for an AppleEvent, typeReplyPortAttr.
* This specifies the mach_port_t to which an AppleEvent reply
* should be directed. By default, replies are sent to the
* processes registered port where they are culled from the normal
* event stream if there is an outstanding AESend + kAEWaitReply.
* But it may be desirable for a client to specify their own port to
* receive quued replies.
* (In the case of AESendMessage with kAEWaitReply specified, an
* anonymous port will be used to block until the reply is received.)
*
* Not supplied is a convenience routine to block a server and
* process AppleEvents. This implementation will be detailed in a
* tech note.
**/
enum {
typeReplyPortAttr = FOUR_CHAR_CODE('repp')
};
#if TARGET_RT_MAC_MACHO
/*-
* Return the mach_port_t that was registered with the bootstrap
* server for this process. This port is considered public, and
* will be used by other applications to target your process. You
* are free to use this mach_port_t to add to a port set, if and
* only if, you are not also using routines from HIToolbox. In that
* case, HIToolbox retains control of this port and AppleEvents are
* dispatched through the main event loop.
**/
/*
* AEGetRegisteredMachPort()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 or later
*/
EXTERN_API_C( mach_port_t )
AEGetRegisteredMachPort(void);
/*-
* Decode a mach_msg into an AppleEvent and its related reply. (The
* reply is set up from fields of the event.) You can call this
* routine if you wish to dispatch or handle the event yourself. To
* return a reply to the sender, you should call:
*
* AESendMessage(reply, NULL, kAENoReply, kAENormalPriority, kAEDefaultTimeout);
*
* The contents of the header are invalid after this call.
**/
/*
* AEDecodeMessage()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 or later
*/
EXTERN_API_C( OSStatus )
AEDecodeMessage(
mach_msg_header_t * header,
AppleEvent * event,
AppleEvent * reply); /* can be NULL */
/*-
* Decodes and dispatches an event to an event handler. Handles
* packaging and returning the reply to the sender.
*
* The contents of the header are invalid after this call.
**/
/*
* AEProcessMessage()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 or later
*/
EXTERN_API_C( OSStatus )
AEProcessMessage(mach_msg_header_t * header);
/*-
* Send an AppleEvent to a target process. If the target is the
* current process (as specified by using typeProcessSerialNumber of
* { 0, kCurrentProcess } it is dispatched directly to the
* appropriate event handler in your process and not serialized.
**/
/*
* AESendMessage()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 or later
*/
EXTERN_API_C( OSStatus )
AESendMessage(
const AppleEvent * event,
AppleEvent * reply, /* can be NULL */
AESendMode sendMode,
long timeOutInTicks);
#endif /* TARGET_RT_MAC_MACHO */
#if PRAGMA_STRUCT_ALIGN
#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
#pragma pack()
#endif
#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif
#ifdef __cplusplus
}
#endif
#endif /* __AEMACH__ */