blob: ab07544c0e3ea17f1a0cd396385c30f7b2ff443c [file] [log] [blame]
Guido van Rossum17448e21995-01-30 11:53:55 +00001
2/* =========================== Module AE ============================ */
3
4#include "Python.h"
5
6
7
Guido van Rossum17448e21995-01-30 11:53:55 +00008#include "macglue.h"
Jack Jansen9d8b96c2000-07-14 22:16:45 +00009#include "pymactoolbox.h"
Guido van Rossumb19a6451995-02-05 16:58:33 +000010
Guido van Rossum17448e21995-01-30 11:53:55 +000011#include <AppleEvents.h>
12
Guido van Rossum17448e21995-01-30 11:53:55 +000013static pascal OSErr GenericEventHandler(); /* Forward */
14
Guido van Rossumb19a6451995-02-05 16:58:33 +000015AEEventHandlerUPP upp_GenericEventHandler;
16
Guido van Rossum17448e21995-01-30 11:53:55 +000017static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
18{
Jack Jansen37575231997-06-20 16:19:14 +000019 if ( PyOS_InterruptOccurred() )
20 return 1;
21 if ( PyMac_HandleEvent(theEvent) < 0 ) {
Jack Jansendeff89c1998-10-12 20:53:15 +000022 PySys_WriteStderr("Exception in user event handler during AE processing\n");
Jack Jansen37575231997-06-20 16:19:14 +000023 PyErr_Clear();
24 }
Guido van Rossum17448e21995-01-30 11:53:55 +000025 return 0;
26}
27
Guido van Rossumb19a6451995-02-05 16:58:33 +000028AEIdleUPP upp_AEIdleProc;
29
Guido van Rossum17448e21995-01-30 11:53:55 +000030static PyObject *AE_Error;
31
32/* ----------------------- Object type AEDesc ----------------------- */
33
Jack Jansenf69633e1997-08-15 14:31:13 +000034PyTypeObject AEDesc_Type;
Guido van Rossum17448e21995-01-30 11:53:55 +000035
36#define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type)
37
38typedef struct AEDescObject {
39 PyObject_HEAD
40 AEDesc ob_itself;
41} AEDescObject;
42
Jack Jansenf69633e1997-08-15 14:31:13 +000043PyObject *AEDesc_New(itself)
Guido van Rossum97842951995-02-19 15:59:49 +000044 AEDesc *itself;
Guido van Rossum17448e21995-01-30 11:53:55 +000045{
46 AEDescObject *it;
47 it = PyObject_NEW(AEDescObject, &AEDesc_Type);
48 if (it == NULL) return NULL;
49 it->ob_itself = *itself;
50 return (PyObject *)it;
51}
Jack Jansenf69633e1997-08-15 14:31:13 +000052AEDesc_Convert(v, p_itself)
Guido van Rossum17448e21995-01-30 11:53:55 +000053 PyObject *v;
54 AEDesc *p_itself;
55{
56 if (!AEDesc_Check(v))
57 {
58 PyErr_SetString(PyExc_TypeError, "AEDesc required");
59 return 0;
60 }
61 *p_itself = ((AEDescObject *)v)->ob_itself;
62 return 1;
63}
64
65static void AEDesc_dealloc(self)
66 AEDescObject *self;
67{
68 AEDisposeDesc(&self->ob_itself);
69 PyMem_DEL(self);
70}
71
Jack Jansen21f96871998-02-20 16:02:09 +000072static PyObject *AEDesc_AESend(_self, _args)
73 AEDescObject *_self;
74 PyObject *_args;
75{
76 PyObject *_res = NULL;
77 OSErr _err;
78 AppleEvent reply;
79 AESendMode sendMode;
80 AESendPriority sendPriority;
81 long timeOutInTicks;
82 if (!PyArg_ParseTuple(_args, "lhl",
83 &sendMode,
84 &sendPriority,
85 &timeOutInTicks))
86 return NULL;
87 _err = AESend(&_self->ob_itself,
88 &reply,
89 sendMode,
90 sendPriority,
91 timeOutInTicks,
92 upp_AEIdleProc,
93 (AEFilterUPP)0);
94 if (_err != noErr) return PyMac_Error(_err);
95 _res = Py_BuildValue("O&",
96 AEDesc_New, &reply);
97 return _res;
98}
99
100static PyObject *AEDesc_AEResetTimer(_self, _args)
101 AEDescObject *_self;
102 PyObject *_args;
103{
104 PyObject *_res = NULL;
105 OSErr _err;
106 if (!PyArg_ParseTuple(_args, ""))
107 return NULL;
108 _err = AEResetTimer(&_self->ob_itself);
109 if (_err != noErr) return PyMac_Error(_err);
110 Py_INCREF(Py_None);
111 _res = Py_None;
112 return _res;
113}
114
115static PyObject *AEDesc_AESuspendTheCurrentEvent(_self, _args)
116 AEDescObject *_self;
117 PyObject *_args;
118{
119 PyObject *_res = NULL;
120 OSErr _err;
121 if (!PyArg_ParseTuple(_args, ""))
122 return NULL;
123 _err = AESuspendTheCurrentEvent(&_self->ob_itself);
124 if (_err != noErr) return PyMac_Error(_err);
125 Py_INCREF(Py_None);
126 _res = Py_None;
127 return _res;
128}
129
130static PyObject *AEDesc_AEResumeTheCurrentEvent(_self, _args)
131 AEDescObject *_self;
132 PyObject *_args;
133{
134 PyObject *_res = NULL;
135 OSErr _err;
136 AppleEvent reply;
137 AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler;
138 PyObject *dispatcher;
139 if (!PyArg_ParseTuple(_args, "O&O",
140 AEDesc_Convert, &reply,
141 &dispatcher))
142 return NULL;
143 _err = AEResumeTheCurrentEvent(&_self->ob_itself,
144 &reply,
145 dispatcher__proc__, (long)dispatcher);
146 if (_err != noErr) return PyMac_Error(_err);
147 Py_INCREF(Py_None);
148 _res = Py_None;
149 Py_INCREF(dispatcher); /* XXX leak, but needed */
150 return _res;
151}
152
153static PyObject *AEDesc_AEGetTheCurrentEvent(_self, _args)
154 AEDescObject *_self;
155 PyObject *_args;
156{
157 PyObject *_res = NULL;
158 OSErr _err;
159 if (!PyArg_ParseTuple(_args, ""))
160 return NULL;
161 _err = AEGetTheCurrentEvent(&_self->ob_itself);
162 if (_err != noErr) return PyMac_Error(_err);
163 Py_INCREF(Py_None);
164 _res = Py_None;
165 return _res;
166}
167
168static PyObject *AEDesc_AESetTheCurrentEvent(_self, _args)
169 AEDescObject *_self;
170 PyObject *_args;
171{
172 PyObject *_res = NULL;
173 OSErr _err;
174 if (!PyArg_ParseTuple(_args, ""))
175 return NULL;
176 _err = AESetTheCurrentEvent(&_self->ob_itself);
177 if (_err != noErr) return PyMac_Error(_err);
178 Py_INCREF(Py_None);
179 _res = Py_None;
180 return _res;
181}
182
Guido van Rossum17448e21995-01-30 11:53:55 +0000183static PyObject *AEDesc_AECoerceDesc(_self, _args)
184 AEDescObject *_self;
185 PyObject *_args;
186{
187 PyObject *_res = NULL;
188 OSErr _err;
189 DescType toType;
190 AEDesc result;
191 if (!PyArg_ParseTuple(_args, "O&",
192 PyMac_GetOSType, &toType))
193 return NULL;
194 _err = AECoerceDesc(&_self->ob_itself,
195 toType,
196 &result);
197 if (_err != noErr) return PyMac_Error(_err);
198 _res = Py_BuildValue("O&",
199 AEDesc_New, &result);
200 return _res;
201}
202
203static PyObject *AEDesc_AEDuplicateDesc(_self, _args)
204 AEDescObject *_self;
205 PyObject *_args;
206{
207 PyObject *_res = NULL;
208 OSErr _err;
209 AEDesc result;
210 if (!PyArg_ParseTuple(_args, ""))
211 return NULL;
212 _err = AEDuplicateDesc(&_self->ob_itself,
213 &result);
214 if (_err != noErr) return PyMac_Error(_err);
215 _res = Py_BuildValue("O&",
216 AEDesc_New, &result);
217 return _res;
218}
219
220static PyObject *AEDesc_AECountItems(_self, _args)
221 AEDescObject *_self;
222 PyObject *_args;
223{
224 PyObject *_res = NULL;
225 OSErr _err;
226 long theCount;
227 if (!PyArg_ParseTuple(_args, ""))
228 return NULL;
229 _err = AECountItems(&_self->ob_itself,
230 &theCount);
231 if (_err != noErr) return PyMac_Error(_err);
232 _res = Py_BuildValue("l",
233 theCount);
234 return _res;
235}
236
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000237static PyObject *AEDesc_AEPutPtr(_self, _args)
238 AEDescObject *_self;
239 PyObject *_args;
240{
241 PyObject *_res = NULL;
242 OSErr _err;
243 long index;
244 DescType typeCode;
245 char *dataPtr__in__;
246 long dataPtr__len__;
247 int dataPtr__in_len__;
248 if (!PyArg_ParseTuple(_args, "lO&s#",
249 &index,
250 PyMac_GetOSType, &typeCode,
251 &dataPtr__in__, &dataPtr__in_len__))
252 return NULL;
253 dataPtr__len__ = dataPtr__in_len__;
254 _err = AEPutPtr(&_self->ob_itself,
255 index,
256 typeCode,
257 dataPtr__in__, dataPtr__len__);
258 if (_err != noErr) return PyMac_Error(_err);
259 Py_INCREF(Py_None);
260 _res = Py_None;
261 dataPtr__error__: ;
262 return _res;
263}
264
265static PyObject *AEDesc_AEPutDesc(_self, _args)
266 AEDescObject *_self;
267 PyObject *_args;
268{
269 PyObject *_res = NULL;
270 OSErr _err;
271 long index;
272 AEDesc theAEDesc;
273 if (!PyArg_ParseTuple(_args, "lO&",
274 &index,
275 AEDesc_Convert, &theAEDesc))
276 return NULL;
277 _err = AEPutDesc(&_self->ob_itself,
278 index,
279 &theAEDesc);
280 if (_err != noErr) return PyMac_Error(_err);
281 Py_INCREF(Py_None);
282 _res = Py_None;
283 return _res;
284}
285
Guido van Rossum17448e21995-01-30 11:53:55 +0000286static PyObject *AEDesc_AEGetNthPtr(_self, _args)
287 AEDescObject *_self;
288 PyObject *_args;
289{
290 PyObject *_res = NULL;
291 OSErr _err;
292 long index;
293 DescType desiredType;
294 AEKeyword theAEKeyword;
295 DescType typeCode;
296 char *dataPtr__out__;
297 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000298 int dataPtr__in_len__;
299 if (!PyArg_ParseTuple(_args, "lO&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000300 &index,
301 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000302 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000303 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000304 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000305 {
306 PyErr_NoMemory();
307 goto dataPtr__error__;
308 }
Guido van Rossum97842951995-02-19 15:59:49 +0000309 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000310 _err = AEGetNthPtr(&_self->ob_itself,
311 index,
312 desiredType,
313 &theAEKeyword,
314 &typeCode,
315 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
316 if (_err != noErr) return PyMac_Error(_err);
317 _res = Py_BuildValue("O&O&s#",
318 PyMac_BuildOSType, theAEKeyword,
319 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000320 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000321 free(dataPtr__out__);
322 dataPtr__error__: ;
323 return _res;
324}
325
326static PyObject *AEDesc_AEGetNthDesc(_self, _args)
327 AEDescObject *_self;
328 PyObject *_args;
329{
330 PyObject *_res = NULL;
331 OSErr _err;
332 long index;
333 DescType desiredType;
334 AEKeyword theAEKeyword;
335 AEDesc result;
336 if (!PyArg_ParseTuple(_args, "lO&",
337 &index,
338 PyMac_GetOSType, &desiredType))
339 return NULL;
340 _err = AEGetNthDesc(&_self->ob_itself,
341 index,
342 desiredType,
343 &theAEKeyword,
344 &result);
345 if (_err != noErr) return PyMac_Error(_err);
346 _res = Py_BuildValue("O&O&",
347 PyMac_BuildOSType, theAEKeyword,
348 AEDesc_New, &result);
349 return _res;
350}
351
352static PyObject *AEDesc_AESizeOfNthItem(_self, _args)
353 AEDescObject *_self;
354 PyObject *_args;
355{
356 PyObject *_res = NULL;
357 OSErr _err;
358 long index;
359 DescType typeCode;
360 Size dataSize;
361 if (!PyArg_ParseTuple(_args, "l",
362 &index))
363 return NULL;
364 _err = AESizeOfNthItem(&_self->ob_itself,
365 index,
366 &typeCode,
367 &dataSize);
368 if (_err != noErr) return PyMac_Error(_err);
369 _res = Py_BuildValue("O&l",
370 PyMac_BuildOSType, typeCode,
371 dataSize);
372 return _res;
373}
374
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000375static PyObject *AEDesc_AEDeleteItem(_self, _args)
376 AEDescObject *_self;
377 PyObject *_args;
378{
379 PyObject *_res = NULL;
380 OSErr _err;
381 long index;
382 if (!PyArg_ParseTuple(_args, "l",
383 &index))
384 return NULL;
385 _err = AEDeleteItem(&_self->ob_itself,
386 index);
387 if (_err != noErr) return PyMac_Error(_err);
388 Py_INCREF(Py_None);
389 _res = Py_None;
390 return _res;
391}
392
Guido van Rossum17448e21995-01-30 11:53:55 +0000393static PyObject *AEDesc_AEPutParamPtr(_self, _args)
394 AEDescObject *_self;
395 PyObject *_args;
396{
397 PyObject *_res = NULL;
398 OSErr _err;
399 AEKeyword theAEKeyword;
400 DescType typeCode;
401 char *dataPtr__in__;
402 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000403 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000404 if (!PyArg_ParseTuple(_args, "O&O&s#",
405 PyMac_GetOSType, &theAEKeyword,
406 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000407 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000408 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000409 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000410 _err = AEPutParamPtr(&_self->ob_itself,
411 theAEKeyword,
412 typeCode,
413 dataPtr__in__, dataPtr__len__);
414 if (_err != noErr) return PyMac_Error(_err);
415 Py_INCREF(Py_None);
416 _res = Py_None;
417 dataPtr__error__: ;
418 return _res;
419}
420
421static PyObject *AEDesc_AEPutParamDesc(_self, _args)
422 AEDescObject *_self;
423 PyObject *_args;
424{
425 PyObject *_res = NULL;
426 OSErr _err;
427 AEKeyword theAEKeyword;
428 AEDesc theAEDesc;
429 if (!PyArg_ParseTuple(_args, "O&O&",
430 PyMac_GetOSType, &theAEKeyword,
431 AEDesc_Convert, &theAEDesc))
432 return NULL;
433 _err = AEPutParamDesc(&_self->ob_itself,
434 theAEKeyword,
435 &theAEDesc);
436 if (_err != noErr) return PyMac_Error(_err);
437 Py_INCREF(Py_None);
438 _res = Py_None;
439 return _res;
440}
441
442static PyObject *AEDesc_AEGetParamPtr(_self, _args)
443 AEDescObject *_self;
444 PyObject *_args;
445{
446 PyObject *_res = NULL;
447 OSErr _err;
448 AEKeyword theAEKeyword;
449 DescType desiredType;
450 DescType typeCode;
451 char *dataPtr__out__;
452 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000453 int dataPtr__in_len__;
454 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000455 PyMac_GetOSType, &theAEKeyword,
456 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000457 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000458 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000459 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000460 {
461 PyErr_NoMemory();
462 goto dataPtr__error__;
463 }
Guido van Rossum97842951995-02-19 15:59:49 +0000464 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000465 _err = AEGetParamPtr(&_self->ob_itself,
466 theAEKeyword,
467 desiredType,
468 &typeCode,
469 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
470 if (_err != noErr) return PyMac_Error(_err);
471 _res = Py_BuildValue("O&s#",
472 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000473 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000474 free(dataPtr__out__);
475 dataPtr__error__: ;
476 return _res;
477}
478
479static PyObject *AEDesc_AEGetParamDesc(_self, _args)
480 AEDescObject *_self;
481 PyObject *_args;
482{
483 PyObject *_res = NULL;
484 OSErr _err;
485 AEKeyword theAEKeyword;
486 DescType desiredType;
487 AEDesc result;
488 if (!PyArg_ParseTuple(_args, "O&O&",
489 PyMac_GetOSType, &theAEKeyword,
490 PyMac_GetOSType, &desiredType))
491 return NULL;
492 _err = AEGetParamDesc(&_self->ob_itself,
493 theAEKeyword,
494 desiredType,
495 &result);
496 if (_err != noErr) return PyMac_Error(_err);
497 _res = Py_BuildValue("O&",
498 AEDesc_New, &result);
499 return _res;
500}
501
502static PyObject *AEDesc_AESizeOfParam(_self, _args)
503 AEDescObject *_self;
504 PyObject *_args;
505{
506 PyObject *_res = NULL;
507 OSErr _err;
508 AEKeyword theAEKeyword;
509 DescType typeCode;
510 Size dataSize;
511 if (!PyArg_ParseTuple(_args, "O&",
512 PyMac_GetOSType, &theAEKeyword))
513 return NULL;
514 _err = AESizeOfParam(&_self->ob_itself,
515 theAEKeyword,
516 &typeCode,
517 &dataSize);
518 if (_err != noErr) return PyMac_Error(_err);
519 _res = Py_BuildValue("O&l",
520 PyMac_BuildOSType, typeCode,
521 dataSize);
522 return _res;
523}
524
525static PyObject *AEDesc_AEDeleteParam(_self, _args)
526 AEDescObject *_self;
527 PyObject *_args;
528{
529 PyObject *_res = NULL;
530 OSErr _err;
531 AEKeyword theAEKeyword;
532 if (!PyArg_ParseTuple(_args, "O&",
533 PyMac_GetOSType, &theAEKeyword))
534 return NULL;
535 _err = AEDeleteParam(&_self->ob_itself,
536 theAEKeyword);
537 if (_err != noErr) return PyMac_Error(_err);
538 Py_INCREF(Py_None);
539 _res = Py_None;
540 return _res;
541}
542
543static PyObject *AEDesc_AEGetAttributePtr(_self, _args)
544 AEDescObject *_self;
545 PyObject *_args;
546{
547 PyObject *_res = NULL;
548 OSErr _err;
549 AEKeyword theAEKeyword;
550 DescType desiredType;
551 DescType typeCode;
552 char *dataPtr__out__;
553 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000554 int dataPtr__in_len__;
555 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000556 PyMac_GetOSType, &theAEKeyword,
557 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000558 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000559 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000560 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000561 {
562 PyErr_NoMemory();
563 goto dataPtr__error__;
564 }
Guido van Rossum97842951995-02-19 15:59:49 +0000565 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000566 _err = AEGetAttributePtr(&_self->ob_itself,
567 theAEKeyword,
568 desiredType,
569 &typeCode,
570 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
571 if (_err != noErr) return PyMac_Error(_err);
572 _res = Py_BuildValue("O&s#",
573 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000574 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000575 free(dataPtr__out__);
576 dataPtr__error__: ;
577 return _res;
578}
579
580static PyObject *AEDesc_AEGetAttributeDesc(_self, _args)
581 AEDescObject *_self;
582 PyObject *_args;
583{
584 PyObject *_res = NULL;
585 OSErr _err;
586 AEKeyword theAEKeyword;
587 DescType desiredType;
588 AEDesc result;
589 if (!PyArg_ParseTuple(_args, "O&O&",
590 PyMac_GetOSType, &theAEKeyword,
591 PyMac_GetOSType, &desiredType))
592 return NULL;
593 _err = AEGetAttributeDesc(&_self->ob_itself,
594 theAEKeyword,
595 desiredType,
596 &result);
597 if (_err != noErr) return PyMac_Error(_err);
598 _res = Py_BuildValue("O&",
599 AEDesc_New, &result);
600 return _res;
601}
602
603static PyObject *AEDesc_AESizeOfAttribute(_self, _args)
604 AEDescObject *_self;
605 PyObject *_args;
606{
607 PyObject *_res = NULL;
608 OSErr _err;
609 AEKeyword theAEKeyword;
610 DescType typeCode;
611 Size dataSize;
612 if (!PyArg_ParseTuple(_args, "O&",
613 PyMac_GetOSType, &theAEKeyword))
614 return NULL;
615 _err = AESizeOfAttribute(&_self->ob_itself,
616 theAEKeyword,
617 &typeCode,
618 &dataSize);
619 if (_err != noErr) return PyMac_Error(_err);
620 _res = Py_BuildValue("O&l",
621 PyMac_BuildOSType, typeCode,
622 dataSize);
623 return _res;
624}
625
626static PyObject *AEDesc_AEPutAttributePtr(_self, _args)
627 AEDescObject *_self;
628 PyObject *_args;
629{
630 PyObject *_res = NULL;
631 OSErr _err;
632 AEKeyword theAEKeyword;
633 DescType typeCode;
634 char *dataPtr__in__;
635 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000636 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000637 if (!PyArg_ParseTuple(_args, "O&O&s#",
638 PyMac_GetOSType, &theAEKeyword,
639 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000640 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000641 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000642 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000643 _err = AEPutAttributePtr(&_self->ob_itself,
644 theAEKeyword,
645 typeCode,
646 dataPtr__in__, dataPtr__len__);
647 if (_err != noErr) return PyMac_Error(_err);
648 Py_INCREF(Py_None);
649 _res = Py_None;
650 dataPtr__error__: ;
651 return _res;
652}
653
654static PyObject *AEDesc_AEPutAttributeDesc(_self, _args)
655 AEDescObject *_self;
656 PyObject *_args;
657{
658 PyObject *_res = NULL;
659 OSErr _err;
660 AEKeyword theAEKeyword;
661 AEDesc theAEDesc;
662 if (!PyArg_ParseTuple(_args, "O&O&",
663 PyMac_GetOSType, &theAEKeyword,
664 AEDesc_Convert, &theAEDesc))
665 return NULL;
666 _err = AEPutAttributeDesc(&_self->ob_itself,
667 theAEKeyword,
668 &theAEDesc);
669 if (_err != noErr) return PyMac_Error(_err);
670 Py_INCREF(Py_None);
671 _res = Py_None;
672 return _res;
673}
674
Guido van Rossum17448e21995-01-30 11:53:55 +0000675static PyMethodDef AEDesc_methods[] = {
Jack Jansen21f96871998-02-20 16:02:09 +0000676 {"AESend", (PyCFunction)AEDesc_AESend, 1,
677 "(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)"},
678 {"AEResetTimer", (PyCFunction)AEDesc_AEResetTimer, 1,
679 "() -> None"},
680 {"AESuspendTheCurrentEvent", (PyCFunction)AEDesc_AESuspendTheCurrentEvent, 1,
681 "() -> None"},
682 {"AEResumeTheCurrentEvent", (PyCFunction)AEDesc_AEResumeTheCurrentEvent, 1,
683 "(AppleEvent reply, EventHandler dispatcher) -> None"},
684 {"AEGetTheCurrentEvent", (PyCFunction)AEDesc_AEGetTheCurrentEvent, 1,
685 "() -> None"},
686 {"AESetTheCurrentEvent", (PyCFunction)AEDesc_AESetTheCurrentEvent, 1,
687 "() -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000688 {"AECoerceDesc", (PyCFunction)AEDesc_AECoerceDesc, 1,
689 "(DescType toType) -> (AEDesc result)"},
690 {"AEDuplicateDesc", (PyCFunction)AEDesc_AEDuplicateDesc, 1,
691 "() -> (AEDesc result)"},
692 {"AECountItems", (PyCFunction)AEDesc_AECountItems, 1,
693 "() -> (long theCount)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000694 {"AEPutPtr", (PyCFunction)AEDesc_AEPutPtr, 1,
695 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
696 {"AEPutDesc", (PyCFunction)AEDesc_AEPutDesc, 1,
697 "(long index, AEDesc theAEDesc) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000698 {"AEGetNthPtr", (PyCFunction)AEDesc_AEGetNthPtr, 1,
699 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
700 {"AEGetNthDesc", (PyCFunction)AEDesc_AEGetNthDesc, 1,
701 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
702 {"AESizeOfNthItem", (PyCFunction)AEDesc_AESizeOfNthItem, 1,
703 "(long index) -> (DescType typeCode, Size dataSize)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000704 {"AEDeleteItem", (PyCFunction)AEDesc_AEDeleteItem, 1,
705 "(long index) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000706 {"AEPutParamPtr", (PyCFunction)AEDesc_AEPutParamPtr, 1,
707 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
708 {"AEPutParamDesc", (PyCFunction)AEDesc_AEPutParamDesc, 1,
709 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
710 {"AEGetParamPtr", (PyCFunction)AEDesc_AEGetParamPtr, 1,
711 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
712 {"AEGetParamDesc", (PyCFunction)AEDesc_AEGetParamDesc, 1,
713 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
714 {"AESizeOfParam", (PyCFunction)AEDesc_AESizeOfParam, 1,
715 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
716 {"AEDeleteParam", (PyCFunction)AEDesc_AEDeleteParam, 1,
717 "(AEKeyword theAEKeyword) -> None"},
718 {"AEGetAttributePtr", (PyCFunction)AEDesc_AEGetAttributePtr, 1,
719 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
720 {"AEGetAttributeDesc", (PyCFunction)AEDesc_AEGetAttributeDesc, 1,
721 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
722 {"AESizeOfAttribute", (PyCFunction)AEDesc_AESizeOfAttribute, 1,
723 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
724 {"AEPutAttributePtr", (PyCFunction)AEDesc_AEPutAttributePtr, 1,
725 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
726 {"AEPutAttributeDesc", (PyCFunction)AEDesc_AEPutAttributeDesc, 1,
727 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000728 {NULL, NULL, 0}
729};
730
Jack Jansenf69633e1997-08-15 14:31:13 +0000731PyMethodChain AEDesc_chain = { AEDesc_methods, NULL };
Guido van Rossum17448e21995-01-30 11:53:55 +0000732
733static PyObject *AEDesc_getattr(self, name)
734 AEDescObject *self;
735 char *name;
736{
737
738 if (strcmp(name, "type") == 0)
739 return PyMac_BuildOSType(self->ob_itself.descriptorType);
740 if (strcmp(name, "data") == 0) {
741 PyObject *res;
Jack Jansen74a1e632000-07-14 22:37:27 +0000742#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +0000743 char state;
744 state = HGetState(self->ob_itself.dataHandle);
745 HLock(self->ob_itself.dataHandle);
746 res = PyString_FromStringAndSize(
747 *self->ob_itself.dataHandle,
748 GetHandleSize(self->ob_itself.dataHandle));
749 HUnlock(self->ob_itself.dataHandle);
750 HSetState(self->ob_itself.dataHandle, state);
Jack Jansene79dc762000-06-02 21:35:07 +0000751#else
752 Size size;
753 char *ptr;
754 OSErr err;
755
756 size = AEGetDescDataSize(&self->ob_itself);
757 if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
758 return NULL;
759 if ( (ptr = PyString_AsString(res)) == NULL )
760 return NULL;
761 if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
762 return PyMac_Error(err);
763#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000764 return res;
765 }
766 if (strcmp(name, "__members__") == 0)
767 return Py_BuildValue("[ss]", "data", "type");
768
769 return Py_FindMethodInChain(&AEDesc_chain, (PyObject *)self, name);
770}
771
772#define AEDesc_setattr NULL
773
Jack Jansenb1b78d81999-12-14 15:47:01 +0000774#define AEDesc_compare NULL
775
776#define AEDesc_repr NULL
777
778#define AEDesc_hash NULL
779
Jack Jansenf69633e1997-08-15 14:31:13 +0000780PyTypeObject AEDesc_Type = {
Guido van Rossum17448e21995-01-30 11:53:55 +0000781 PyObject_HEAD_INIT(&PyType_Type)
782 0, /*ob_size*/
783 "AEDesc", /*tp_name*/
784 sizeof(AEDescObject), /*tp_basicsize*/
785 0, /*tp_itemsize*/
786 /* methods */
787 (destructor) AEDesc_dealloc, /*tp_dealloc*/
788 0, /*tp_print*/
789 (getattrfunc) AEDesc_getattr, /*tp_getattr*/
790 (setattrfunc) AEDesc_setattr, /*tp_setattr*/
Jack Jansenb1b78d81999-12-14 15:47:01 +0000791 (cmpfunc) AEDesc_compare, /*tp_compare*/
792 (reprfunc) AEDesc_repr, /*tp_repr*/
793 (PyNumberMethods *)0, /* tp_as_number */
794 (PySequenceMethods *)0, /* tp_as_sequence */
795 (PyMappingMethods *)0, /* tp_as_mapping */
796 (hashfunc) AEDesc_hash, /*tp_hash*/
Guido van Rossum17448e21995-01-30 11:53:55 +0000797};
798
799/* --------------------- End object type AEDesc --------------------- */
800
801
Guido van Rossum17448e21995-01-30 11:53:55 +0000802static PyObject *AE_AEProcessAppleEvent(_self, _args)
803 PyObject *_self;
804 PyObject *_args;
805{
806 PyObject *_res = NULL;
807 OSErr _err;
808 EventRecord theEventRecord;
809 if (!PyArg_ParseTuple(_args, "O&",
810 PyMac_GetEventRecord, &theEventRecord))
811 return NULL;
812 _err = AEProcessAppleEvent(&theEventRecord);
813 if (_err != noErr) return PyMac_Error(_err);
814 Py_INCREF(Py_None);
815 _res = Py_None;
816 return _res;
817}
818
Guido van Rossum17448e21995-01-30 11:53:55 +0000819static PyObject *AE_AEGetInteractionAllowed(_self, _args)
820 PyObject *_self;
821 PyObject *_args;
822{
823 PyObject *_res = NULL;
824 OSErr _err;
825 AEInteractAllowed level;
826 if (!PyArg_ParseTuple(_args, ""))
827 return NULL;
828 _err = AEGetInteractionAllowed(&level);
829 if (_err != noErr) return PyMac_Error(_err);
830 _res = Py_BuildValue("b",
831 level);
832 return _res;
833}
834
835static PyObject *AE_AESetInteractionAllowed(_self, _args)
836 PyObject *_self;
837 PyObject *_args;
838{
839 PyObject *_res = NULL;
840 OSErr _err;
841 AEInteractAllowed level;
842 if (!PyArg_ParseTuple(_args, "b",
843 &level))
844 return NULL;
845 _err = AESetInteractionAllowed(level);
846 if (_err != noErr) return PyMac_Error(_err);
847 Py_INCREF(Py_None);
848 _res = Py_None;
849 return _res;
850}
851
852static PyObject *AE_AEInteractWithUser(_self, _args)
853 PyObject *_self;
854 PyObject *_args;
855{
856 PyObject *_res = NULL;
857 OSErr _err;
858 long timeOutInTicks;
859 if (!PyArg_ParseTuple(_args, "l",
860 &timeOutInTicks))
861 return NULL;
862 _err = AEInteractWithUser(timeOutInTicks,
863 (NMRecPtr)0,
Guido van Rossumb19a6451995-02-05 16:58:33 +0000864 upp_AEIdleProc);
Guido van Rossum17448e21995-01-30 11:53:55 +0000865 if (_err != noErr) return PyMac_Error(_err);
866 Py_INCREF(Py_None);
867 _res = Py_None;
868 return _res;
869}
870
871static PyObject *AE_AEInstallEventHandler(_self, _args)
872 PyObject *_self;
873 PyObject *_args;
874{
875 PyObject *_res = NULL;
876 OSErr _err;
877 AEEventClass theAEEventClass;
878 AEEventID theAEEventID;
Jack Jansen50501991995-07-29 13:58:41 +0000879 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
880 PyObject *handler;
881 if (!PyArg_ParseTuple(_args, "O&O&O",
Guido van Rossum17448e21995-01-30 11:53:55 +0000882 PyMac_GetOSType, &theAEEventClass,
883 PyMac_GetOSType, &theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +0000884 &handler))
Guido van Rossum17448e21995-01-30 11:53:55 +0000885 return NULL;
886 _err = AEInstallEventHandler(theAEEventClass,
887 theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +0000888 handler__proc__, (long)handler,
Guido van Rossum17448e21995-01-30 11:53:55 +0000889 0);
890 if (_err != noErr) return PyMac_Error(_err);
891 Py_INCREF(Py_None);
892 _res = Py_None;
Jack Jansen50501991995-07-29 13:58:41 +0000893 Py_INCREF(handler); /* XXX leak, but needed */
Guido van Rossum17448e21995-01-30 11:53:55 +0000894 return _res;
895}
896
897static PyObject *AE_AERemoveEventHandler(_self, _args)
898 PyObject *_self;
899 PyObject *_args;
900{
901 PyObject *_res = NULL;
902 OSErr _err;
903 AEEventClass theAEEventClass;
904 AEEventID theAEEventID;
905 if (!PyArg_ParseTuple(_args, "O&O&",
906 PyMac_GetOSType, &theAEEventClass,
907 PyMac_GetOSType, &theAEEventID))
908 return NULL;
909 _err = AERemoveEventHandler(theAEEventClass,
910 theAEEventID,
Guido van Rossumb19a6451995-02-05 16:58:33 +0000911 upp_GenericEventHandler,
Guido van Rossum17448e21995-01-30 11:53:55 +0000912 0);
913 if (_err != noErr) return PyMac_Error(_err);
914 Py_INCREF(Py_None);
915 _res = Py_None;
916 return _res;
917}
918
Jack Jansen50501991995-07-29 13:58:41 +0000919static PyObject *AE_AEGetEventHandler(_self, _args)
920 PyObject *_self;
921 PyObject *_args;
922{
923 PyObject *_res = NULL;
924 OSErr _err;
925 AEEventClass theAEEventClass;
926 AEEventID theAEEventID;
Jack Jansen8ce4d511995-08-17 14:24:35 +0000927 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
928 PyObject *handler;
Jack Jansen50501991995-07-29 13:58:41 +0000929 if (!PyArg_ParseTuple(_args, "O&O&",
930 PyMac_GetOSType, &theAEEventClass,
931 PyMac_GetOSType, &theAEEventID))
932 return NULL;
933 _err = AEGetEventHandler(theAEEventClass,
934 theAEEventID,
Jack Jansen8ce4d511995-08-17 14:24:35 +0000935 &handler__proc__, (long *)&handler,
Jack Jansen50501991995-07-29 13:58:41 +0000936 0);
937 if (_err != noErr) return PyMac_Error(_err);
Jack Jansen8ce4d511995-08-17 14:24:35 +0000938 _res = Py_BuildValue("O",
939 handler);
940 Py_INCREF(handler); /* XXX leak, but needed */
Jack Jansen50501991995-07-29 13:58:41 +0000941 return _res;
942}
943
Guido van Rossum17448e21995-01-30 11:53:55 +0000944static PyObject *AE_AEManagerInfo(_self, _args)
945 PyObject *_self;
946 PyObject *_args;
947{
948 PyObject *_res = NULL;
949 OSErr _err;
950 AEKeyword keyWord;
951 long result;
952 if (!PyArg_ParseTuple(_args, "O&",
953 PyMac_GetOSType, &keyWord))
954 return NULL;
955 _err = AEManagerInfo(keyWord,
956 &result);
957 if (_err != noErr) return PyMac_Error(_err);
958 _res = Py_BuildValue("l",
959 result);
960 return _res;
961}
962
Jack Jansen21f96871998-02-20 16:02:09 +0000963static PyObject *AE_AECoercePtr(_self, _args)
964 PyObject *_self;
965 PyObject *_args;
966{
967 PyObject *_res = NULL;
968 OSErr _err;
969 DescType typeCode;
970 char *dataPtr__in__;
971 long dataPtr__len__;
972 int dataPtr__in_len__;
973 DescType toType;
974 AEDesc result;
975 if (!PyArg_ParseTuple(_args, "O&s#O&",
976 PyMac_GetOSType, &typeCode,
977 &dataPtr__in__, &dataPtr__in_len__,
978 PyMac_GetOSType, &toType))
979 return NULL;
980 dataPtr__len__ = dataPtr__in_len__;
981 _err = AECoercePtr(typeCode,
982 dataPtr__in__, dataPtr__len__,
983 toType,
984 &result);
985 if (_err != noErr) return PyMac_Error(_err);
986 _res = Py_BuildValue("O&",
987 AEDesc_New, &result);
988 dataPtr__error__: ;
989 return _res;
990}
991
992static PyObject *AE_AECreateDesc(_self, _args)
993 PyObject *_self;
994 PyObject *_args;
995{
996 PyObject *_res = NULL;
997 OSErr _err;
998 DescType typeCode;
999 char *dataPtr__in__;
1000 long dataPtr__len__;
1001 int dataPtr__in_len__;
1002 AEDesc result;
1003 if (!PyArg_ParseTuple(_args, "O&s#",
1004 PyMac_GetOSType, &typeCode,
1005 &dataPtr__in__, &dataPtr__in_len__))
1006 return NULL;
1007 dataPtr__len__ = dataPtr__in_len__;
1008 _err = AECreateDesc(typeCode,
1009 dataPtr__in__, dataPtr__len__,
1010 &result);
1011 if (_err != noErr) return PyMac_Error(_err);
1012 _res = Py_BuildValue("O&",
1013 AEDesc_New, &result);
1014 dataPtr__error__: ;
1015 return _res;
1016}
1017
1018static PyObject *AE_AECreateList(_self, _args)
1019 PyObject *_self;
1020 PyObject *_args;
1021{
1022 PyObject *_res = NULL;
1023 OSErr _err;
1024 char *factoringPtr__in__;
1025 long factoringPtr__len__;
1026 int factoringPtr__in_len__;
1027 Boolean isRecord;
1028 AEDescList resultList;
1029 if (!PyArg_ParseTuple(_args, "s#b",
1030 &factoringPtr__in__, &factoringPtr__in_len__,
1031 &isRecord))
1032 return NULL;
1033 factoringPtr__len__ = factoringPtr__in_len__;
1034 _err = AECreateList(factoringPtr__in__, factoringPtr__len__,
1035 isRecord,
1036 &resultList);
1037 if (_err != noErr) return PyMac_Error(_err);
1038 _res = Py_BuildValue("O&",
1039 AEDesc_New, &resultList);
1040 factoringPtr__error__: ;
1041 return _res;
1042}
1043
1044static PyObject *AE_AECreateAppleEvent(_self, _args)
1045 PyObject *_self;
1046 PyObject *_args;
1047{
1048 PyObject *_res = NULL;
1049 OSErr _err;
1050 AEEventClass theAEEventClass;
1051 AEEventID theAEEventID;
1052 AEAddressDesc target;
1053 AEReturnID returnID;
1054 AETransactionID transactionID;
1055 AppleEvent result;
Jack Jansendef77e52000-03-14 23:29:08 +00001056 if (!PyArg_ParseTuple(_args, "O&O&O&hl",
Jack Jansen21f96871998-02-20 16:02:09 +00001057 PyMac_GetOSType, &theAEEventClass,
1058 PyMac_GetOSType, &theAEEventID,
1059 AEDesc_Convert, &target,
1060 &returnID,
1061 &transactionID))
1062 return NULL;
1063 _err = AECreateAppleEvent(theAEEventClass,
1064 theAEEventID,
1065 &target,
1066 returnID,
1067 transactionID,
1068 &result);
1069 if (_err != noErr) return PyMac_Error(_err);
1070 _res = Py_BuildValue("O&",
1071 AEDesc_New, &result);
1072 return _res;
1073}
1074
Guido van Rossum17448e21995-01-30 11:53:55 +00001075static PyMethodDef AE_methods[] = {
Guido van Rossum17448e21995-01-30 11:53:55 +00001076 {"AEProcessAppleEvent", (PyCFunction)AE_AEProcessAppleEvent, 1,
1077 "(EventRecord theEventRecord) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001078 {"AEGetInteractionAllowed", (PyCFunction)AE_AEGetInteractionAllowed, 1,
1079 "() -> (AEInteractAllowed level)"},
1080 {"AESetInteractionAllowed", (PyCFunction)AE_AESetInteractionAllowed, 1,
1081 "(AEInteractAllowed level) -> None"},
1082 {"AEInteractWithUser", (PyCFunction)AE_AEInteractWithUser, 1,
1083 "(long timeOutInTicks) -> None"},
1084 {"AEInstallEventHandler", (PyCFunction)AE_AEInstallEventHandler, 1,
Jack Jansen50501991995-07-29 13:58:41 +00001085 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001086 {"AERemoveEventHandler", (PyCFunction)AE_AERemoveEventHandler, 1,
1087 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
Jack Jansen50501991995-07-29 13:58:41 +00001088 {"AEGetEventHandler", (PyCFunction)AE_AEGetEventHandler, 1,
1089 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001090 {"AEManagerInfo", (PyCFunction)AE_AEManagerInfo, 1,
1091 "(AEKeyword keyWord) -> (long result)"},
Jack Jansen21f96871998-02-20 16:02:09 +00001092 {"AECoercePtr", (PyCFunction)AE_AECoercePtr, 1,
1093 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1094 {"AECreateDesc", (PyCFunction)AE_AECreateDesc, 1,
1095 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1096 {"AECreateList", (PyCFunction)AE_AECreateList, 1,
1097 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1098 {"AECreateAppleEvent", (PyCFunction)AE_AECreateAppleEvent, 1,
1099 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001100 {NULL, NULL, 0}
1101};
1102
1103
1104
1105static pascal OSErr
Jack Jansene79dc762000-06-02 21:35:07 +00001106GenericEventHandler(const AppleEvent *request, AppleEvent *reply, unsigned long refcon)
Guido van Rossum17448e21995-01-30 11:53:55 +00001107{
1108 PyObject *handler = (PyObject *)refcon;
1109 AEDescObject *requestObject, *replyObject;
1110 PyObject *args, *res;
Jack Jansen9d8b96c2000-07-14 22:16:45 +00001111 if ((requestObject = (AEDescObject *)AEDesc_New((AppleEvent *)request)) == NULL) {
Guido van Rossum17448e21995-01-30 11:53:55 +00001112 return -1;
1113 }
1114 if ((replyObject = (AEDescObject *)AEDesc_New(reply)) == NULL) {
1115 Py_DECREF(requestObject);
1116 return -1;
1117 }
1118 if ((args = Py_BuildValue("OO", requestObject, replyObject)) == NULL) {
1119 Py_DECREF(requestObject);
1120 Py_DECREF(replyObject);
1121 return -1;
1122 }
1123 res = PyEval_CallObject(handler, args);
1124 requestObject->ob_itself.descriptorType = 'null';
1125 requestObject->ob_itself.dataHandle = NULL;
1126 replyObject->ob_itself.descriptorType = 'null';
1127 replyObject->ob_itself.dataHandle = NULL;
1128 Py_DECREF(args);
1129 if (res == NULL)
1130 return -1;
1131 Py_DECREF(res);
1132 return noErr;
1133}
1134
1135
1136void initAE()
1137{
1138 PyObject *m;
1139 PyObject *d;
1140
1141
1142
Guido van Rossumb19a6451995-02-05 16:58:33 +00001143 upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
1144 upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
1145
Guido van Rossum17448e21995-01-30 11:53:55 +00001146
1147 m = Py_InitModule("AE", AE_methods);
1148 d = PyModule_GetDict(m);
1149 AE_Error = PyMac_GetOSErrException();
1150 if (AE_Error == NULL ||
1151 PyDict_SetItemString(d, "Error", AE_Error) != 0)
1152 Py_FatalError("can't initialize AE.Error");
Jack Jansena755e681997-09-20 17:40:22 +00001153 AEDesc_Type.ob_type = &PyType_Type;
1154 Py_INCREF(&AEDesc_Type);
1155 if (PyDict_SetItemString(d, "AEDescType", (PyObject *)&AEDesc_Type) != 0)
1156 Py_FatalError("can't initialize AEDescType");
Guido van Rossum17448e21995-01-30 11:53:55 +00001157}
1158
1159/* ========================= End module AE ========================== */
1160