blob: d15c1d8c732c56a00b59f46c3ac31b0eec30caf3 [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>
Jack Jansenf7d5aa62000-12-10 23:43:49 +000012#include <AEObjects.h>
Guido van Rossum17448e21995-01-30 11:53:55 +000013
Guido van Rossum17448e21995-01-30 11:53:55 +000014static pascal OSErr GenericEventHandler(); /* Forward */
15
Guido van Rossumb19a6451995-02-05 16:58:33 +000016AEEventHandlerUPP upp_GenericEventHandler;
17
Guido van Rossum17448e21995-01-30 11:53:55 +000018static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
19{
Jack Jansen37575231997-06-20 16:19:14 +000020 if ( PyOS_InterruptOccurred() )
21 return 1;
22 if ( PyMac_HandleEvent(theEvent) < 0 ) {
Jack Jansendeff89c1998-10-12 20:53:15 +000023 PySys_WriteStderr("Exception in user event handler during AE processing\n");
Jack Jansen37575231997-06-20 16:19:14 +000024 PyErr_Clear();
25 }
Guido van Rossum17448e21995-01-30 11:53:55 +000026 return 0;
27}
28
Guido van Rossumb19a6451995-02-05 16:58:33 +000029AEIdleUPP upp_AEIdleProc;
30
Guido van Rossum17448e21995-01-30 11:53:55 +000031static PyObject *AE_Error;
32
33/* ----------------------- Object type AEDesc ----------------------- */
34
Jack Jansenf69633e1997-08-15 14:31:13 +000035PyTypeObject AEDesc_Type;
Guido van Rossum17448e21995-01-30 11:53:55 +000036
37#define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type)
38
39typedef struct AEDescObject {
40 PyObject_HEAD
41 AEDesc ob_itself;
42} AEDescObject;
43
Jack Jansenf69633e1997-08-15 14:31:13 +000044PyObject *AEDesc_New(itself)
Guido van Rossum97842951995-02-19 15:59:49 +000045 AEDesc *itself;
Guido van Rossum17448e21995-01-30 11:53:55 +000046{
47 AEDescObject *it;
48 it = PyObject_NEW(AEDescObject, &AEDesc_Type);
49 if (it == NULL) return NULL;
50 it->ob_itself = *itself;
51 return (PyObject *)it;
52}
Jack Jansenf69633e1997-08-15 14:31:13 +000053AEDesc_Convert(v, p_itself)
Guido van Rossum17448e21995-01-30 11:53:55 +000054 PyObject *v;
55 AEDesc *p_itself;
56{
57 if (!AEDesc_Check(v))
58 {
59 PyErr_SetString(PyExc_TypeError, "AEDesc required");
60 return 0;
61 }
62 *p_itself = ((AEDescObject *)v)->ob_itself;
63 return 1;
64}
65
66static void AEDesc_dealloc(self)
67 AEDescObject *self;
68{
69 AEDisposeDesc(&self->ob_itself);
70 PyMem_DEL(self);
71}
72
Jack Jansen21f96871998-02-20 16:02:09 +000073static PyObject *AEDesc_AEResetTimer(_self, _args)
74 AEDescObject *_self;
75 PyObject *_args;
76{
77 PyObject *_res = NULL;
78 OSErr _err;
79 if (!PyArg_ParseTuple(_args, ""))
80 return NULL;
81 _err = AEResetTimer(&_self->ob_itself);
82 if (_err != noErr) return PyMac_Error(_err);
83 Py_INCREF(Py_None);
84 _res = Py_None;
85 return _res;
86}
87
88static PyObject *AEDesc_AESuspendTheCurrentEvent(_self, _args)
89 AEDescObject *_self;
90 PyObject *_args;
91{
92 PyObject *_res = NULL;
93 OSErr _err;
94 if (!PyArg_ParseTuple(_args, ""))
95 return NULL;
96 _err = AESuspendTheCurrentEvent(&_self->ob_itself);
97 if (_err != noErr) return PyMac_Error(_err);
98 Py_INCREF(Py_None);
99 _res = Py_None;
100 return _res;
101}
102
103static PyObject *AEDesc_AEResumeTheCurrentEvent(_self, _args)
104 AEDescObject *_self;
105 PyObject *_args;
106{
107 PyObject *_res = NULL;
108 OSErr _err;
109 AppleEvent reply;
110 AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler;
111 PyObject *dispatcher;
112 if (!PyArg_ParseTuple(_args, "O&O",
113 AEDesc_Convert, &reply,
114 &dispatcher))
115 return NULL;
116 _err = AEResumeTheCurrentEvent(&_self->ob_itself,
117 &reply,
118 dispatcher__proc__, (long)dispatcher);
119 if (_err != noErr) return PyMac_Error(_err);
120 Py_INCREF(Py_None);
121 _res = Py_None;
122 Py_INCREF(dispatcher); /* XXX leak, but needed */
123 return _res;
124}
125
126static PyObject *AEDesc_AEGetTheCurrentEvent(_self, _args)
127 AEDescObject *_self;
128 PyObject *_args;
129{
130 PyObject *_res = NULL;
131 OSErr _err;
132 if (!PyArg_ParseTuple(_args, ""))
133 return NULL;
134 _err = AEGetTheCurrentEvent(&_self->ob_itself);
135 if (_err != noErr) return PyMac_Error(_err);
136 Py_INCREF(Py_None);
137 _res = Py_None;
138 return _res;
139}
140
141static PyObject *AEDesc_AESetTheCurrentEvent(_self, _args)
142 AEDescObject *_self;
143 PyObject *_args;
144{
145 PyObject *_res = NULL;
146 OSErr _err;
147 if (!PyArg_ParseTuple(_args, ""))
148 return NULL;
149 _err = AESetTheCurrentEvent(&_self->ob_itself);
150 if (_err != noErr) return PyMac_Error(_err);
151 Py_INCREF(Py_None);
152 _res = Py_None;
153 return _res;
154}
155
Guido van Rossum17448e21995-01-30 11:53:55 +0000156static PyObject *AEDesc_AECoerceDesc(_self, _args)
157 AEDescObject *_self;
158 PyObject *_args;
159{
160 PyObject *_res = NULL;
161 OSErr _err;
162 DescType toType;
163 AEDesc result;
164 if (!PyArg_ParseTuple(_args, "O&",
165 PyMac_GetOSType, &toType))
166 return NULL;
167 _err = AECoerceDesc(&_self->ob_itself,
168 toType,
169 &result);
170 if (_err != noErr) return PyMac_Error(_err);
171 _res = Py_BuildValue("O&",
172 AEDesc_New, &result);
173 return _res;
174}
175
176static PyObject *AEDesc_AEDuplicateDesc(_self, _args)
177 AEDescObject *_self;
178 PyObject *_args;
179{
180 PyObject *_res = NULL;
181 OSErr _err;
182 AEDesc result;
183 if (!PyArg_ParseTuple(_args, ""))
184 return NULL;
185 _err = AEDuplicateDesc(&_self->ob_itself,
186 &result);
187 if (_err != noErr) return PyMac_Error(_err);
188 _res = Py_BuildValue("O&",
189 AEDesc_New, &result);
190 return _res;
191}
192
193static PyObject *AEDesc_AECountItems(_self, _args)
194 AEDescObject *_self;
195 PyObject *_args;
196{
197 PyObject *_res = NULL;
198 OSErr _err;
199 long theCount;
200 if (!PyArg_ParseTuple(_args, ""))
201 return NULL;
202 _err = AECountItems(&_self->ob_itself,
203 &theCount);
204 if (_err != noErr) return PyMac_Error(_err);
205 _res = Py_BuildValue("l",
206 theCount);
207 return _res;
208}
209
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000210static PyObject *AEDesc_AEPutPtr(_self, _args)
211 AEDescObject *_self;
212 PyObject *_args;
213{
214 PyObject *_res = NULL;
215 OSErr _err;
216 long index;
217 DescType typeCode;
218 char *dataPtr__in__;
219 long dataPtr__len__;
220 int dataPtr__in_len__;
221 if (!PyArg_ParseTuple(_args, "lO&s#",
222 &index,
223 PyMac_GetOSType, &typeCode,
224 &dataPtr__in__, &dataPtr__in_len__))
225 return NULL;
226 dataPtr__len__ = dataPtr__in_len__;
227 _err = AEPutPtr(&_self->ob_itself,
228 index,
229 typeCode,
230 dataPtr__in__, dataPtr__len__);
231 if (_err != noErr) return PyMac_Error(_err);
232 Py_INCREF(Py_None);
233 _res = Py_None;
234 dataPtr__error__: ;
235 return _res;
236}
237
238static PyObject *AEDesc_AEPutDesc(_self, _args)
239 AEDescObject *_self;
240 PyObject *_args;
241{
242 PyObject *_res = NULL;
243 OSErr _err;
244 long index;
245 AEDesc theAEDesc;
246 if (!PyArg_ParseTuple(_args, "lO&",
247 &index,
248 AEDesc_Convert, &theAEDesc))
249 return NULL;
250 _err = AEPutDesc(&_self->ob_itself,
251 index,
252 &theAEDesc);
253 if (_err != noErr) return PyMac_Error(_err);
254 Py_INCREF(Py_None);
255 _res = Py_None;
256 return _res;
257}
258
Guido van Rossum17448e21995-01-30 11:53:55 +0000259static PyObject *AEDesc_AEGetNthPtr(_self, _args)
260 AEDescObject *_self;
261 PyObject *_args;
262{
263 PyObject *_res = NULL;
264 OSErr _err;
265 long index;
266 DescType desiredType;
267 AEKeyword theAEKeyword;
268 DescType typeCode;
269 char *dataPtr__out__;
270 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000271 int dataPtr__in_len__;
272 if (!PyArg_ParseTuple(_args, "lO&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000273 &index,
274 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000275 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000276 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000277 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000278 {
279 PyErr_NoMemory();
280 goto dataPtr__error__;
281 }
Guido van Rossum97842951995-02-19 15:59:49 +0000282 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000283 _err = AEGetNthPtr(&_self->ob_itself,
284 index,
285 desiredType,
286 &theAEKeyword,
287 &typeCode,
288 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
289 if (_err != noErr) return PyMac_Error(_err);
290 _res = Py_BuildValue("O&O&s#",
291 PyMac_BuildOSType, theAEKeyword,
292 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000293 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000294 free(dataPtr__out__);
295 dataPtr__error__: ;
296 return _res;
297}
298
299static PyObject *AEDesc_AEGetNthDesc(_self, _args)
300 AEDescObject *_self;
301 PyObject *_args;
302{
303 PyObject *_res = NULL;
304 OSErr _err;
305 long index;
306 DescType desiredType;
307 AEKeyword theAEKeyword;
308 AEDesc result;
309 if (!PyArg_ParseTuple(_args, "lO&",
310 &index,
311 PyMac_GetOSType, &desiredType))
312 return NULL;
313 _err = AEGetNthDesc(&_self->ob_itself,
314 index,
315 desiredType,
316 &theAEKeyword,
317 &result);
318 if (_err != noErr) return PyMac_Error(_err);
319 _res = Py_BuildValue("O&O&",
320 PyMac_BuildOSType, theAEKeyword,
321 AEDesc_New, &result);
322 return _res;
323}
324
325static PyObject *AEDesc_AESizeOfNthItem(_self, _args)
326 AEDescObject *_self;
327 PyObject *_args;
328{
329 PyObject *_res = NULL;
330 OSErr _err;
331 long index;
332 DescType typeCode;
333 Size dataSize;
334 if (!PyArg_ParseTuple(_args, "l",
335 &index))
336 return NULL;
337 _err = AESizeOfNthItem(&_self->ob_itself,
338 index,
339 &typeCode,
340 &dataSize);
341 if (_err != noErr) return PyMac_Error(_err);
342 _res = Py_BuildValue("O&l",
343 PyMac_BuildOSType, typeCode,
344 dataSize);
345 return _res;
346}
347
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000348static PyObject *AEDesc_AEDeleteItem(_self, _args)
349 AEDescObject *_self;
350 PyObject *_args;
351{
352 PyObject *_res = NULL;
353 OSErr _err;
354 long index;
355 if (!PyArg_ParseTuple(_args, "l",
356 &index))
357 return NULL;
358 _err = AEDeleteItem(&_self->ob_itself,
359 index);
360 if (_err != noErr) return PyMac_Error(_err);
361 Py_INCREF(Py_None);
362 _res = Py_None;
363 return _res;
364}
365
Guido van Rossum17448e21995-01-30 11:53:55 +0000366static PyObject *AEDesc_AEPutParamPtr(_self, _args)
367 AEDescObject *_self;
368 PyObject *_args;
369{
370 PyObject *_res = NULL;
371 OSErr _err;
372 AEKeyword theAEKeyword;
373 DescType typeCode;
374 char *dataPtr__in__;
375 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000376 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000377 if (!PyArg_ParseTuple(_args, "O&O&s#",
378 PyMac_GetOSType, &theAEKeyword,
379 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000380 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000381 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000382 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000383 _err = AEPutParamPtr(&_self->ob_itself,
384 theAEKeyword,
385 typeCode,
386 dataPtr__in__, dataPtr__len__);
387 if (_err != noErr) return PyMac_Error(_err);
388 Py_INCREF(Py_None);
389 _res = Py_None;
390 dataPtr__error__: ;
391 return _res;
392}
393
394static PyObject *AEDesc_AEPutParamDesc(_self, _args)
395 AEDescObject *_self;
396 PyObject *_args;
397{
398 PyObject *_res = NULL;
399 OSErr _err;
400 AEKeyword theAEKeyword;
401 AEDesc theAEDesc;
402 if (!PyArg_ParseTuple(_args, "O&O&",
403 PyMac_GetOSType, &theAEKeyword,
404 AEDesc_Convert, &theAEDesc))
405 return NULL;
406 _err = AEPutParamDesc(&_self->ob_itself,
407 theAEKeyword,
408 &theAEDesc);
409 if (_err != noErr) return PyMac_Error(_err);
410 Py_INCREF(Py_None);
411 _res = Py_None;
412 return _res;
413}
414
415static PyObject *AEDesc_AEGetParamPtr(_self, _args)
416 AEDescObject *_self;
417 PyObject *_args;
418{
419 PyObject *_res = NULL;
420 OSErr _err;
421 AEKeyword theAEKeyword;
422 DescType desiredType;
423 DescType typeCode;
424 char *dataPtr__out__;
425 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000426 int dataPtr__in_len__;
427 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000428 PyMac_GetOSType, &theAEKeyword,
429 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000430 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000431 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000432 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000433 {
434 PyErr_NoMemory();
435 goto dataPtr__error__;
436 }
Guido van Rossum97842951995-02-19 15:59:49 +0000437 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000438 _err = AEGetParamPtr(&_self->ob_itself,
439 theAEKeyword,
440 desiredType,
441 &typeCode,
442 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
443 if (_err != noErr) return PyMac_Error(_err);
444 _res = Py_BuildValue("O&s#",
445 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000446 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000447 free(dataPtr__out__);
448 dataPtr__error__: ;
449 return _res;
450}
451
452static PyObject *AEDesc_AEGetParamDesc(_self, _args)
453 AEDescObject *_self;
454 PyObject *_args;
455{
456 PyObject *_res = NULL;
457 OSErr _err;
458 AEKeyword theAEKeyword;
459 DescType desiredType;
460 AEDesc result;
461 if (!PyArg_ParseTuple(_args, "O&O&",
462 PyMac_GetOSType, &theAEKeyword,
463 PyMac_GetOSType, &desiredType))
464 return NULL;
465 _err = AEGetParamDesc(&_self->ob_itself,
466 theAEKeyword,
467 desiredType,
468 &result);
469 if (_err != noErr) return PyMac_Error(_err);
470 _res = Py_BuildValue("O&",
471 AEDesc_New, &result);
472 return _res;
473}
474
475static PyObject *AEDesc_AESizeOfParam(_self, _args)
476 AEDescObject *_self;
477 PyObject *_args;
478{
479 PyObject *_res = NULL;
480 OSErr _err;
481 AEKeyword theAEKeyword;
482 DescType typeCode;
483 Size dataSize;
484 if (!PyArg_ParseTuple(_args, "O&",
485 PyMac_GetOSType, &theAEKeyword))
486 return NULL;
487 _err = AESizeOfParam(&_self->ob_itself,
488 theAEKeyword,
489 &typeCode,
490 &dataSize);
491 if (_err != noErr) return PyMac_Error(_err);
492 _res = Py_BuildValue("O&l",
493 PyMac_BuildOSType, typeCode,
494 dataSize);
495 return _res;
496}
497
498static PyObject *AEDesc_AEDeleteParam(_self, _args)
499 AEDescObject *_self;
500 PyObject *_args;
501{
502 PyObject *_res = NULL;
503 OSErr _err;
504 AEKeyword theAEKeyword;
505 if (!PyArg_ParseTuple(_args, "O&",
506 PyMac_GetOSType, &theAEKeyword))
507 return NULL;
508 _err = AEDeleteParam(&_self->ob_itself,
509 theAEKeyword);
510 if (_err != noErr) return PyMac_Error(_err);
511 Py_INCREF(Py_None);
512 _res = Py_None;
513 return _res;
514}
515
516static PyObject *AEDesc_AEGetAttributePtr(_self, _args)
517 AEDescObject *_self;
518 PyObject *_args;
519{
520 PyObject *_res = NULL;
521 OSErr _err;
522 AEKeyword theAEKeyword;
523 DescType desiredType;
524 DescType typeCode;
525 char *dataPtr__out__;
526 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000527 int dataPtr__in_len__;
528 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000529 PyMac_GetOSType, &theAEKeyword,
530 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000531 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000532 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000533 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000534 {
535 PyErr_NoMemory();
536 goto dataPtr__error__;
537 }
Guido van Rossum97842951995-02-19 15:59:49 +0000538 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000539 _err = AEGetAttributePtr(&_self->ob_itself,
540 theAEKeyword,
541 desiredType,
542 &typeCode,
543 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
544 if (_err != noErr) return PyMac_Error(_err);
545 _res = Py_BuildValue("O&s#",
546 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000547 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000548 free(dataPtr__out__);
549 dataPtr__error__: ;
550 return _res;
551}
552
553static PyObject *AEDesc_AEGetAttributeDesc(_self, _args)
554 AEDescObject *_self;
555 PyObject *_args;
556{
557 PyObject *_res = NULL;
558 OSErr _err;
559 AEKeyword theAEKeyword;
560 DescType desiredType;
561 AEDesc result;
562 if (!PyArg_ParseTuple(_args, "O&O&",
563 PyMac_GetOSType, &theAEKeyword,
564 PyMac_GetOSType, &desiredType))
565 return NULL;
566 _err = AEGetAttributeDesc(&_self->ob_itself,
567 theAEKeyword,
568 desiredType,
569 &result);
570 if (_err != noErr) return PyMac_Error(_err);
571 _res = Py_BuildValue("O&",
572 AEDesc_New, &result);
573 return _res;
574}
575
576static PyObject *AEDesc_AESizeOfAttribute(_self, _args)
577 AEDescObject *_self;
578 PyObject *_args;
579{
580 PyObject *_res = NULL;
581 OSErr _err;
582 AEKeyword theAEKeyword;
583 DescType typeCode;
584 Size dataSize;
585 if (!PyArg_ParseTuple(_args, "O&",
586 PyMac_GetOSType, &theAEKeyword))
587 return NULL;
588 _err = AESizeOfAttribute(&_self->ob_itself,
589 theAEKeyword,
590 &typeCode,
591 &dataSize);
592 if (_err != noErr) return PyMac_Error(_err);
593 _res = Py_BuildValue("O&l",
594 PyMac_BuildOSType, typeCode,
595 dataSize);
596 return _res;
597}
598
599static PyObject *AEDesc_AEPutAttributePtr(_self, _args)
600 AEDescObject *_self;
601 PyObject *_args;
602{
603 PyObject *_res = NULL;
604 OSErr _err;
605 AEKeyword theAEKeyword;
606 DescType typeCode;
607 char *dataPtr__in__;
608 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000609 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000610 if (!PyArg_ParseTuple(_args, "O&O&s#",
611 PyMac_GetOSType, &theAEKeyword,
612 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000613 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000614 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000615 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000616 _err = AEPutAttributePtr(&_self->ob_itself,
617 theAEKeyword,
618 typeCode,
619 dataPtr__in__, dataPtr__len__);
620 if (_err != noErr) return PyMac_Error(_err);
621 Py_INCREF(Py_None);
622 _res = Py_None;
623 dataPtr__error__: ;
624 return _res;
625}
626
627static PyObject *AEDesc_AEPutAttributeDesc(_self, _args)
628 AEDescObject *_self;
629 PyObject *_args;
630{
631 PyObject *_res = NULL;
632 OSErr _err;
633 AEKeyword theAEKeyword;
634 AEDesc theAEDesc;
635 if (!PyArg_ParseTuple(_args, "O&O&",
636 PyMac_GetOSType, &theAEKeyword,
637 AEDesc_Convert, &theAEDesc))
638 return NULL;
639 _err = AEPutAttributeDesc(&_self->ob_itself,
640 theAEKeyword,
641 &theAEDesc);
642 if (_err != noErr) return PyMac_Error(_err);
643 Py_INCREF(Py_None);
644 _res = Py_None;
645 return _res;
646}
647
Jack Jansenf7d5aa62000-12-10 23:43:49 +0000648#if TARGET_API_MAC_CARBON
649
650static PyObject *AEDesc_AEGetDescDataSize(_self, _args)
651 AEDescObject *_self;
652 PyObject *_args;
653{
654 PyObject *_res = NULL;
655 Size _rv;
656 if (!PyArg_ParseTuple(_args, ""))
657 return NULL;
658 _rv = AEGetDescDataSize(&_self->ob_itself);
659 _res = Py_BuildValue("l",
660 _rv);
661 return _res;
662}
663#endif
664
Guido van Rossum17448e21995-01-30 11:53:55 +0000665static PyMethodDef AEDesc_methods[] = {
Jack Jansen21f96871998-02-20 16:02:09 +0000666 {"AEResetTimer", (PyCFunction)AEDesc_AEResetTimer, 1,
667 "() -> None"},
668 {"AESuspendTheCurrentEvent", (PyCFunction)AEDesc_AESuspendTheCurrentEvent, 1,
669 "() -> None"},
670 {"AEResumeTheCurrentEvent", (PyCFunction)AEDesc_AEResumeTheCurrentEvent, 1,
671 "(AppleEvent reply, EventHandler dispatcher) -> None"},
672 {"AEGetTheCurrentEvent", (PyCFunction)AEDesc_AEGetTheCurrentEvent, 1,
673 "() -> None"},
674 {"AESetTheCurrentEvent", (PyCFunction)AEDesc_AESetTheCurrentEvent, 1,
675 "() -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000676 {"AECoerceDesc", (PyCFunction)AEDesc_AECoerceDesc, 1,
677 "(DescType toType) -> (AEDesc result)"},
678 {"AEDuplicateDesc", (PyCFunction)AEDesc_AEDuplicateDesc, 1,
679 "() -> (AEDesc result)"},
680 {"AECountItems", (PyCFunction)AEDesc_AECountItems, 1,
681 "() -> (long theCount)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000682 {"AEPutPtr", (PyCFunction)AEDesc_AEPutPtr, 1,
683 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
684 {"AEPutDesc", (PyCFunction)AEDesc_AEPutDesc, 1,
685 "(long index, AEDesc theAEDesc) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000686 {"AEGetNthPtr", (PyCFunction)AEDesc_AEGetNthPtr, 1,
687 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
688 {"AEGetNthDesc", (PyCFunction)AEDesc_AEGetNthDesc, 1,
689 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
690 {"AESizeOfNthItem", (PyCFunction)AEDesc_AESizeOfNthItem, 1,
691 "(long index) -> (DescType typeCode, Size dataSize)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000692 {"AEDeleteItem", (PyCFunction)AEDesc_AEDeleteItem, 1,
693 "(long index) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000694 {"AEPutParamPtr", (PyCFunction)AEDesc_AEPutParamPtr, 1,
695 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
696 {"AEPutParamDesc", (PyCFunction)AEDesc_AEPutParamDesc, 1,
697 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
698 {"AEGetParamPtr", (PyCFunction)AEDesc_AEGetParamPtr, 1,
699 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
700 {"AEGetParamDesc", (PyCFunction)AEDesc_AEGetParamDesc, 1,
701 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
702 {"AESizeOfParam", (PyCFunction)AEDesc_AESizeOfParam, 1,
703 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
704 {"AEDeleteParam", (PyCFunction)AEDesc_AEDeleteParam, 1,
705 "(AEKeyword theAEKeyword) -> None"},
706 {"AEGetAttributePtr", (PyCFunction)AEDesc_AEGetAttributePtr, 1,
707 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
708 {"AEGetAttributeDesc", (PyCFunction)AEDesc_AEGetAttributeDesc, 1,
709 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
710 {"AESizeOfAttribute", (PyCFunction)AEDesc_AESizeOfAttribute, 1,
711 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
712 {"AEPutAttributePtr", (PyCFunction)AEDesc_AEPutAttributePtr, 1,
713 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
714 {"AEPutAttributeDesc", (PyCFunction)AEDesc_AEPutAttributeDesc, 1,
715 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
Jack Jansenf7d5aa62000-12-10 23:43:49 +0000716
717#if TARGET_API_MAC_CARBON
718 {"AEGetDescDataSize", (PyCFunction)AEDesc_AEGetDescDataSize, 1,
719 "() -> (Size _rv)"},
720#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000721 {NULL, NULL, 0}
722};
723
Jack Jansenf69633e1997-08-15 14:31:13 +0000724PyMethodChain AEDesc_chain = { AEDesc_methods, NULL };
Guido van Rossum17448e21995-01-30 11:53:55 +0000725
726static PyObject *AEDesc_getattr(self, name)
727 AEDescObject *self;
728 char *name;
729{
730
731 if (strcmp(name, "type") == 0)
732 return PyMac_BuildOSType(self->ob_itself.descriptorType);
733 if (strcmp(name, "data") == 0) {
734 PyObject *res;
Jack Jansen74a1e632000-07-14 22:37:27 +0000735#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +0000736 char state;
737 state = HGetState(self->ob_itself.dataHandle);
738 HLock(self->ob_itself.dataHandle);
739 res = PyString_FromStringAndSize(
740 *self->ob_itself.dataHandle,
741 GetHandleSize(self->ob_itself.dataHandle));
742 HUnlock(self->ob_itself.dataHandle);
743 HSetState(self->ob_itself.dataHandle, state);
Jack Jansene79dc762000-06-02 21:35:07 +0000744#else
745 Size size;
746 char *ptr;
747 OSErr err;
748
749 size = AEGetDescDataSize(&self->ob_itself);
750 if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
751 return NULL;
752 if ( (ptr = PyString_AsString(res)) == NULL )
753 return NULL;
754 if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
755 return PyMac_Error(err);
756#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000757 return res;
758 }
759 if (strcmp(name, "__members__") == 0)
760 return Py_BuildValue("[ss]", "data", "type");
761
762 return Py_FindMethodInChain(&AEDesc_chain, (PyObject *)self, name);
763}
764
765#define AEDesc_setattr NULL
766
Jack Jansenb1b78d81999-12-14 15:47:01 +0000767#define AEDesc_compare NULL
768
769#define AEDesc_repr NULL
770
771#define AEDesc_hash NULL
772
Jack Jansenf69633e1997-08-15 14:31:13 +0000773PyTypeObject AEDesc_Type = {
Guido van Rossum17448e21995-01-30 11:53:55 +0000774 PyObject_HEAD_INIT(&PyType_Type)
775 0, /*ob_size*/
776 "AEDesc", /*tp_name*/
777 sizeof(AEDescObject), /*tp_basicsize*/
778 0, /*tp_itemsize*/
779 /* methods */
780 (destructor) AEDesc_dealloc, /*tp_dealloc*/
781 0, /*tp_print*/
782 (getattrfunc) AEDesc_getattr, /*tp_getattr*/
783 (setattrfunc) AEDesc_setattr, /*tp_setattr*/
Jack Jansenb1b78d81999-12-14 15:47:01 +0000784 (cmpfunc) AEDesc_compare, /*tp_compare*/
785 (reprfunc) AEDesc_repr, /*tp_repr*/
786 (PyNumberMethods *)0, /* tp_as_number */
787 (PySequenceMethods *)0, /* tp_as_sequence */
788 (PyMappingMethods *)0, /* tp_as_mapping */
789 (hashfunc) AEDesc_hash, /*tp_hash*/
Guido van Rossum17448e21995-01-30 11:53:55 +0000790};
791
792/* --------------------- End object type AEDesc --------------------- */
793
794
Guido van Rossum17448e21995-01-30 11:53:55 +0000795static PyObject *AE_AEProcessAppleEvent(_self, _args)
796 PyObject *_self;
797 PyObject *_args;
798{
799 PyObject *_res = NULL;
800 OSErr _err;
801 EventRecord theEventRecord;
802 if (!PyArg_ParseTuple(_args, "O&",
803 PyMac_GetEventRecord, &theEventRecord))
804 return NULL;
805 _err = AEProcessAppleEvent(&theEventRecord);
806 if (_err != noErr) return PyMac_Error(_err);
807 Py_INCREF(Py_None);
808 _res = Py_None;
809 return _res;
810}
811
Guido van Rossum17448e21995-01-30 11:53:55 +0000812static PyObject *AE_AEGetInteractionAllowed(_self, _args)
813 PyObject *_self;
814 PyObject *_args;
815{
816 PyObject *_res = NULL;
817 OSErr _err;
818 AEInteractAllowed level;
819 if (!PyArg_ParseTuple(_args, ""))
820 return NULL;
821 _err = AEGetInteractionAllowed(&level);
822 if (_err != noErr) return PyMac_Error(_err);
823 _res = Py_BuildValue("b",
824 level);
825 return _res;
826}
827
828static PyObject *AE_AESetInteractionAllowed(_self, _args)
829 PyObject *_self;
830 PyObject *_args;
831{
832 PyObject *_res = NULL;
833 OSErr _err;
834 AEInteractAllowed level;
835 if (!PyArg_ParseTuple(_args, "b",
836 &level))
837 return NULL;
838 _err = AESetInteractionAllowed(level);
839 if (_err != noErr) return PyMac_Error(_err);
840 Py_INCREF(Py_None);
841 _res = Py_None;
842 return _res;
843}
844
845static PyObject *AE_AEInteractWithUser(_self, _args)
846 PyObject *_self;
847 PyObject *_args;
848{
849 PyObject *_res = NULL;
850 OSErr _err;
851 long timeOutInTicks;
852 if (!PyArg_ParseTuple(_args, "l",
853 &timeOutInTicks))
854 return NULL;
855 _err = AEInteractWithUser(timeOutInTicks,
856 (NMRecPtr)0,
Guido van Rossumb19a6451995-02-05 16:58:33 +0000857 upp_AEIdleProc);
Guido van Rossum17448e21995-01-30 11:53:55 +0000858 if (_err != noErr) return PyMac_Error(_err);
859 Py_INCREF(Py_None);
860 _res = Py_None;
861 return _res;
862}
863
864static PyObject *AE_AEInstallEventHandler(_self, _args)
865 PyObject *_self;
866 PyObject *_args;
867{
868 PyObject *_res = NULL;
869 OSErr _err;
870 AEEventClass theAEEventClass;
871 AEEventID theAEEventID;
Jack Jansen50501991995-07-29 13:58:41 +0000872 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
873 PyObject *handler;
874 if (!PyArg_ParseTuple(_args, "O&O&O",
Guido van Rossum17448e21995-01-30 11:53:55 +0000875 PyMac_GetOSType, &theAEEventClass,
876 PyMac_GetOSType, &theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +0000877 &handler))
Guido van Rossum17448e21995-01-30 11:53:55 +0000878 return NULL;
879 _err = AEInstallEventHandler(theAEEventClass,
880 theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +0000881 handler__proc__, (long)handler,
Guido van Rossum17448e21995-01-30 11:53:55 +0000882 0);
883 if (_err != noErr) return PyMac_Error(_err);
884 Py_INCREF(Py_None);
885 _res = Py_None;
Jack Jansen50501991995-07-29 13:58:41 +0000886 Py_INCREF(handler); /* XXX leak, but needed */
Guido van Rossum17448e21995-01-30 11:53:55 +0000887 return _res;
888}
889
890static PyObject *AE_AERemoveEventHandler(_self, _args)
891 PyObject *_self;
892 PyObject *_args;
893{
894 PyObject *_res = NULL;
895 OSErr _err;
896 AEEventClass theAEEventClass;
897 AEEventID theAEEventID;
898 if (!PyArg_ParseTuple(_args, "O&O&",
899 PyMac_GetOSType, &theAEEventClass,
900 PyMac_GetOSType, &theAEEventID))
901 return NULL;
902 _err = AERemoveEventHandler(theAEEventClass,
903 theAEEventID,
Guido van Rossumb19a6451995-02-05 16:58:33 +0000904 upp_GenericEventHandler,
Guido van Rossum17448e21995-01-30 11:53:55 +0000905 0);
906 if (_err != noErr) return PyMac_Error(_err);
907 Py_INCREF(Py_None);
908 _res = Py_None;
909 return _res;
910}
911
Jack Jansen50501991995-07-29 13:58:41 +0000912static PyObject *AE_AEGetEventHandler(_self, _args)
913 PyObject *_self;
914 PyObject *_args;
915{
916 PyObject *_res = NULL;
917 OSErr _err;
918 AEEventClass theAEEventClass;
919 AEEventID theAEEventID;
Jack Jansen8ce4d511995-08-17 14:24:35 +0000920 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
921 PyObject *handler;
Jack Jansen50501991995-07-29 13:58:41 +0000922 if (!PyArg_ParseTuple(_args, "O&O&",
923 PyMac_GetOSType, &theAEEventClass,
924 PyMac_GetOSType, &theAEEventID))
925 return NULL;
926 _err = AEGetEventHandler(theAEEventClass,
927 theAEEventID,
Jack Jansen8ce4d511995-08-17 14:24:35 +0000928 &handler__proc__, (long *)&handler,
Jack Jansen50501991995-07-29 13:58:41 +0000929 0);
930 if (_err != noErr) return PyMac_Error(_err);
Jack Jansen8ce4d511995-08-17 14:24:35 +0000931 _res = Py_BuildValue("O",
932 handler);
933 Py_INCREF(handler); /* XXX leak, but needed */
Jack Jansen50501991995-07-29 13:58:41 +0000934 return _res;
935}
936
Jack Jansenf7d5aa62000-12-10 23:43:49 +0000937static PyObject *AE_AEInstallSpecialHandler(_self, _args)
938 PyObject *_self;
939 PyObject *_args;
940{
941 PyObject *_res = NULL;
942 OSErr _err;
943 AEKeyword functionClass;
944 if (!PyArg_ParseTuple(_args, "O&",
945 PyMac_GetOSType, &functionClass))
946 return NULL;
947 _err = AEInstallSpecialHandler(functionClass,
948 upp_GenericEventHandler,
949 0);
950 if (_err != noErr) return PyMac_Error(_err);
951 Py_INCREF(Py_None);
952 _res = Py_None;
953 return _res;
954}
955
956static PyObject *AE_AERemoveSpecialHandler(_self, _args)
957 PyObject *_self;
958 PyObject *_args;
959{
960 PyObject *_res = NULL;
961 OSErr _err;
962 AEKeyword functionClass;
963 if (!PyArg_ParseTuple(_args, "O&",
964 PyMac_GetOSType, &functionClass))
965 return NULL;
966 _err = AERemoveSpecialHandler(functionClass,
967 upp_GenericEventHandler,
968 0);
969 if (_err != noErr) return PyMac_Error(_err);
970 Py_INCREF(Py_None);
971 _res = Py_None;
972 return _res;
973}
974
Guido van Rossum17448e21995-01-30 11:53:55 +0000975static PyObject *AE_AEManagerInfo(_self, _args)
976 PyObject *_self;
977 PyObject *_args;
978{
979 PyObject *_res = NULL;
980 OSErr _err;
981 AEKeyword keyWord;
982 long result;
983 if (!PyArg_ParseTuple(_args, "O&",
984 PyMac_GetOSType, &keyWord))
985 return NULL;
986 _err = AEManagerInfo(keyWord,
987 &result);
988 if (_err != noErr) return PyMac_Error(_err);
989 _res = Py_BuildValue("l",
990 result);
991 return _res;
992}
993
Jack Jansen21f96871998-02-20 16:02:09 +0000994static PyObject *AE_AECoercePtr(_self, _args)
995 PyObject *_self;
996 PyObject *_args;
997{
998 PyObject *_res = NULL;
999 OSErr _err;
1000 DescType typeCode;
1001 char *dataPtr__in__;
1002 long dataPtr__len__;
1003 int dataPtr__in_len__;
1004 DescType toType;
1005 AEDesc result;
1006 if (!PyArg_ParseTuple(_args, "O&s#O&",
1007 PyMac_GetOSType, &typeCode,
1008 &dataPtr__in__, &dataPtr__in_len__,
1009 PyMac_GetOSType, &toType))
1010 return NULL;
1011 dataPtr__len__ = dataPtr__in_len__;
1012 _err = AECoercePtr(typeCode,
1013 dataPtr__in__, dataPtr__len__,
1014 toType,
1015 &result);
1016 if (_err != noErr) return PyMac_Error(_err);
1017 _res = Py_BuildValue("O&",
1018 AEDesc_New, &result);
1019 dataPtr__error__: ;
1020 return _res;
1021}
1022
1023static PyObject *AE_AECreateDesc(_self, _args)
1024 PyObject *_self;
1025 PyObject *_args;
1026{
1027 PyObject *_res = NULL;
1028 OSErr _err;
1029 DescType typeCode;
1030 char *dataPtr__in__;
1031 long dataPtr__len__;
1032 int dataPtr__in_len__;
1033 AEDesc result;
1034 if (!PyArg_ParseTuple(_args, "O&s#",
1035 PyMac_GetOSType, &typeCode,
1036 &dataPtr__in__, &dataPtr__in_len__))
1037 return NULL;
1038 dataPtr__len__ = dataPtr__in_len__;
1039 _err = AECreateDesc(typeCode,
1040 dataPtr__in__, dataPtr__len__,
1041 &result);
1042 if (_err != noErr) return PyMac_Error(_err);
1043 _res = Py_BuildValue("O&",
1044 AEDesc_New, &result);
1045 dataPtr__error__: ;
1046 return _res;
1047}
1048
1049static PyObject *AE_AECreateList(_self, _args)
1050 PyObject *_self;
1051 PyObject *_args;
1052{
1053 PyObject *_res = NULL;
1054 OSErr _err;
1055 char *factoringPtr__in__;
1056 long factoringPtr__len__;
1057 int factoringPtr__in_len__;
1058 Boolean isRecord;
1059 AEDescList resultList;
1060 if (!PyArg_ParseTuple(_args, "s#b",
1061 &factoringPtr__in__, &factoringPtr__in_len__,
1062 &isRecord))
1063 return NULL;
1064 factoringPtr__len__ = factoringPtr__in_len__;
1065 _err = AECreateList(factoringPtr__in__, factoringPtr__len__,
1066 isRecord,
1067 &resultList);
1068 if (_err != noErr) return PyMac_Error(_err);
1069 _res = Py_BuildValue("O&",
1070 AEDesc_New, &resultList);
1071 factoringPtr__error__: ;
1072 return _res;
1073}
1074
1075static PyObject *AE_AECreateAppleEvent(_self, _args)
1076 PyObject *_self;
1077 PyObject *_args;
1078{
1079 PyObject *_res = NULL;
1080 OSErr _err;
1081 AEEventClass theAEEventClass;
1082 AEEventID theAEEventID;
1083 AEAddressDesc target;
1084 AEReturnID returnID;
1085 AETransactionID transactionID;
1086 AppleEvent result;
Jack Jansendef77e52000-03-14 23:29:08 +00001087 if (!PyArg_ParseTuple(_args, "O&O&O&hl",
Jack Jansen21f96871998-02-20 16:02:09 +00001088 PyMac_GetOSType, &theAEEventClass,
1089 PyMac_GetOSType, &theAEEventID,
1090 AEDesc_Convert, &target,
1091 &returnID,
1092 &transactionID))
1093 return NULL;
1094 _err = AECreateAppleEvent(theAEEventClass,
1095 theAEEventID,
1096 &target,
1097 returnID,
1098 transactionID,
1099 &result);
1100 if (_err != noErr) return PyMac_Error(_err);
1101 _res = Py_BuildValue("O&",
1102 AEDesc_New, &result);
1103 return _res;
1104}
1105
Jack Jansenf7d5aa62000-12-10 23:43:49 +00001106#if TARGET_API_MAC_CARBON
1107
1108static PyObject *AE_AEReplaceDescData(_self, _args)
1109 PyObject *_self;
1110 PyObject *_args;
1111{
1112 PyObject *_res = NULL;
1113 OSErr _err;
1114 DescType typeCode;
1115 char *dataPtr__in__;
1116 long dataPtr__len__;
1117 int dataPtr__in_len__;
1118 AEDesc theAEDesc;
1119 if (!PyArg_ParseTuple(_args, "O&s#",
1120 PyMac_GetOSType, &typeCode,
1121 &dataPtr__in__, &dataPtr__in_len__))
1122 return NULL;
1123 dataPtr__len__ = dataPtr__in_len__;
1124 _err = AEReplaceDescData(typeCode,
1125 dataPtr__in__, dataPtr__len__,
1126 &theAEDesc);
1127 if (_err != noErr) return PyMac_Error(_err);
1128 _res = Py_BuildValue("O&",
1129 AEDesc_New, &theAEDesc);
1130 dataPtr__error__: ;
1131 return _res;
1132}
1133#endif
1134
Guido van Rossum17448e21995-01-30 11:53:55 +00001135static PyMethodDef AE_methods[] = {
Guido van Rossum17448e21995-01-30 11:53:55 +00001136 {"AEProcessAppleEvent", (PyCFunction)AE_AEProcessAppleEvent, 1,
1137 "(EventRecord theEventRecord) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001138 {"AEGetInteractionAllowed", (PyCFunction)AE_AEGetInteractionAllowed, 1,
1139 "() -> (AEInteractAllowed level)"},
1140 {"AESetInteractionAllowed", (PyCFunction)AE_AESetInteractionAllowed, 1,
1141 "(AEInteractAllowed level) -> None"},
1142 {"AEInteractWithUser", (PyCFunction)AE_AEInteractWithUser, 1,
1143 "(long timeOutInTicks) -> None"},
1144 {"AEInstallEventHandler", (PyCFunction)AE_AEInstallEventHandler, 1,
Jack Jansen50501991995-07-29 13:58:41 +00001145 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001146 {"AERemoveEventHandler", (PyCFunction)AE_AERemoveEventHandler, 1,
1147 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
Jack Jansen50501991995-07-29 13:58:41 +00001148 {"AEGetEventHandler", (PyCFunction)AE_AEGetEventHandler, 1,
1149 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
Jack Jansenf7d5aa62000-12-10 23:43:49 +00001150 {"AEInstallSpecialHandler", (PyCFunction)AE_AEInstallSpecialHandler, 1,
1151 "(AEKeyword functionClass) -> None"},
1152 {"AERemoveSpecialHandler", (PyCFunction)AE_AERemoveSpecialHandler, 1,
1153 "(AEKeyword functionClass) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001154 {"AEManagerInfo", (PyCFunction)AE_AEManagerInfo, 1,
1155 "(AEKeyword keyWord) -> (long result)"},
Jack Jansen21f96871998-02-20 16:02:09 +00001156 {"AECoercePtr", (PyCFunction)AE_AECoercePtr, 1,
1157 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1158 {"AECreateDesc", (PyCFunction)AE_AECreateDesc, 1,
1159 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1160 {"AECreateList", (PyCFunction)AE_AECreateList, 1,
1161 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1162 {"AECreateAppleEvent", (PyCFunction)AE_AECreateAppleEvent, 1,
1163 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result)"},
Jack Jansenf7d5aa62000-12-10 23:43:49 +00001164
1165#if TARGET_API_MAC_CARBON
1166 {"AEReplaceDescData", (PyCFunction)AE_AEReplaceDescData, 1,
1167 "(DescType typeCode, Buffer dataPtr) -> (AEDesc theAEDesc)"},
1168#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001169 {NULL, NULL, 0}
1170};
1171
1172
1173
1174static pascal OSErr
Jack Jansene79dc762000-06-02 21:35:07 +00001175GenericEventHandler(const AppleEvent *request, AppleEvent *reply, unsigned long refcon)
Guido van Rossum17448e21995-01-30 11:53:55 +00001176{
1177 PyObject *handler = (PyObject *)refcon;
1178 AEDescObject *requestObject, *replyObject;
1179 PyObject *args, *res;
Jack Jansen9d8b96c2000-07-14 22:16:45 +00001180 if ((requestObject = (AEDescObject *)AEDesc_New((AppleEvent *)request)) == NULL) {
Guido van Rossum17448e21995-01-30 11:53:55 +00001181 return -1;
1182 }
1183 if ((replyObject = (AEDescObject *)AEDesc_New(reply)) == NULL) {
1184 Py_DECREF(requestObject);
1185 return -1;
1186 }
1187 if ((args = Py_BuildValue("OO", requestObject, replyObject)) == NULL) {
1188 Py_DECREF(requestObject);
1189 Py_DECREF(replyObject);
1190 return -1;
1191 }
1192 res = PyEval_CallObject(handler, args);
1193 requestObject->ob_itself.descriptorType = 'null';
1194 requestObject->ob_itself.dataHandle = NULL;
1195 replyObject->ob_itself.descriptorType = 'null';
1196 replyObject->ob_itself.dataHandle = NULL;
1197 Py_DECREF(args);
1198 if (res == NULL)
1199 return -1;
1200 Py_DECREF(res);
1201 return noErr;
1202}
1203
1204
1205void initAE()
1206{
1207 PyObject *m;
1208 PyObject *d;
1209
1210
1211
Guido van Rossumb19a6451995-02-05 16:58:33 +00001212 upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
1213 upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
1214
Guido van Rossum17448e21995-01-30 11:53:55 +00001215
1216 m = Py_InitModule("AE", AE_methods);
1217 d = PyModule_GetDict(m);
1218 AE_Error = PyMac_GetOSErrException();
1219 if (AE_Error == NULL ||
1220 PyDict_SetItemString(d, "Error", AE_Error) != 0)
Jack Jansenf7d5aa62000-12-10 23:43:49 +00001221 return;
Jack Jansena755e681997-09-20 17:40:22 +00001222 AEDesc_Type.ob_type = &PyType_Type;
1223 Py_INCREF(&AEDesc_Type);
1224 if (PyDict_SetItemString(d, "AEDescType", (PyObject *)&AEDesc_Type) != 0)
1225 Py_FatalError("can't initialize AEDescType");
Guido van Rossum17448e21995-01-30 11:53:55 +00001226}
1227
1228/* ========================= End module AE ========================== */
1229