blob: d4aab79be7e0a612de50e772bc663602ff234816 [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
Jack Jansen0e04eec2001-05-17 21:58:34 +000014#ifdef USE_TOOLBOX_OBJECT_GLUE
15extern PyObject *_AEDesc_New(AEDesc *);
16extern int _AEDesc_Convert(PyObject *, AEDesc *);
17
18#define AEDesc_New _AEDesc_New
19#define AEDesc_Convert _AEDesc_Convert
20#endif
21
Guido van Rossum17448e21995-01-30 11:53:55 +000022static pascal OSErr GenericEventHandler(); /* Forward */
23
Guido van Rossumb19a6451995-02-05 16:58:33 +000024AEEventHandlerUPP upp_GenericEventHandler;
25
Guido van Rossum17448e21995-01-30 11:53:55 +000026static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
27{
Jack Jansen37575231997-06-20 16:19:14 +000028 if ( PyOS_InterruptOccurred() )
29 return 1;
30 if ( PyMac_HandleEvent(theEvent) < 0 ) {
Jack Jansendeff89c1998-10-12 20:53:15 +000031 PySys_WriteStderr("Exception in user event handler during AE processing\n");
Jack Jansen37575231997-06-20 16:19:14 +000032 PyErr_Clear();
33 }
Guido van Rossum17448e21995-01-30 11:53:55 +000034 return 0;
35}
36
Guido van Rossumb19a6451995-02-05 16:58:33 +000037AEIdleUPP upp_AEIdleProc;
38
Guido van Rossum17448e21995-01-30 11:53:55 +000039static PyObject *AE_Error;
40
41/* ----------------------- Object type AEDesc ----------------------- */
42
Jack Jansenf69633e1997-08-15 14:31:13 +000043PyTypeObject AEDesc_Type;
Guido van Rossum17448e21995-01-30 11:53:55 +000044
45#define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type)
46
47typedef struct AEDescObject {
48 PyObject_HEAD
49 AEDesc ob_itself;
50} AEDescObject;
51
Jack Jansenf69633e1997-08-15 14:31:13 +000052PyObject *AEDesc_New(itself)
Guido van Rossum97842951995-02-19 15:59:49 +000053 AEDesc *itself;
Guido van Rossum17448e21995-01-30 11:53:55 +000054{
55 AEDescObject *it;
56 it = PyObject_NEW(AEDescObject, &AEDesc_Type);
57 if (it == NULL) return NULL;
58 it->ob_itself = *itself;
59 return (PyObject *)it;
60}
Jack Jansenf69633e1997-08-15 14:31:13 +000061AEDesc_Convert(v, p_itself)
Guido van Rossum17448e21995-01-30 11:53:55 +000062 PyObject *v;
63 AEDesc *p_itself;
64{
65 if (!AEDesc_Check(v))
66 {
67 PyErr_SetString(PyExc_TypeError, "AEDesc required");
68 return 0;
69 }
70 *p_itself = ((AEDescObject *)v)->ob_itself;
71 return 1;
72}
73
74static void AEDesc_dealloc(self)
75 AEDescObject *self;
76{
77 AEDisposeDesc(&self->ob_itself);
78 PyMem_DEL(self);
79}
80
81static PyObject *AEDesc_AECoerceDesc(_self, _args)
82 AEDescObject *_self;
83 PyObject *_args;
84{
85 PyObject *_res = NULL;
86 OSErr _err;
87 DescType toType;
88 AEDesc result;
89 if (!PyArg_ParseTuple(_args, "O&",
90 PyMac_GetOSType, &toType))
91 return NULL;
92 _err = AECoerceDesc(&_self->ob_itself,
93 toType,
94 &result);
95 if (_err != noErr) return PyMac_Error(_err);
96 _res = Py_BuildValue("O&",
97 AEDesc_New, &result);
98 return _res;
99}
100
101static PyObject *AEDesc_AEDuplicateDesc(_self, _args)
102 AEDescObject *_self;
103 PyObject *_args;
104{
105 PyObject *_res = NULL;
106 OSErr _err;
107 AEDesc result;
108 if (!PyArg_ParseTuple(_args, ""))
109 return NULL;
110 _err = AEDuplicateDesc(&_self->ob_itself,
111 &result);
112 if (_err != noErr) return PyMac_Error(_err);
113 _res = Py_BuildValue("O&",
114 AEDesc_New, &result);
115 return _res;
116}
117
118static PyObject *AEDesc_AECountItems(_self, _args)
119 AEDescObject *_self;
120 PyObject *_args;
121{
122 PyObject *_res = NULL;
123 OSErr _err;
124 long theCount;
125 if (!PyArg_ParseTuple(_args, ""))
126 return NULL;
127 _err = AECountItems(&_self->ob_itself,
128 &theCount);
129 if (_err != noErr) return PyMac_Error(_err);
130 _res = Py_BuildValue("l",
131 theCount);
132 return _res;
133}
134
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000135static PyObject *AEDesc_AEPutPtr(_self, _args)
136 AEDescObject *_self;
137 PyObject *_args;
138{
139 PyObject *_res = NULL;
140 OSErr _err;
141 long index;
142 DescType typeCode;
143 char *dataPtr__in__;
144 long dataPtr__len__;
145 int dataPtr__in_len__;
146 if (!PyArg_ParseTuple(_args, "lO&s#",
147 &index,
148 PyMac_GetOSType, &typeCode,
149 &dataPtr__in__, &dataPtr__in_len__))
150 return NULL;
151 dataPtr__len__ = dataPtr__in_len__;
152 _err = AEPutPtr(&_self->ob_itself,
153 index,
154 typeCode,
155 dataPtr__in__, dataPtr__len__);
156 if (_err != noErr) return PyMac_Error(_err);
157 Py_INCREF(Py_None);
158 _res = Py_None;
159 dataPtr__error__: ;
160 return _res;
161}
162
163static PyObject *AEDesc_AEPutDesc(_self, _args)
164 AEDescObject *_self;
165 PyObject *_args;
166{
167 PyObject *_res = NULL;
168 OSErr _err;
169 long index;
170 AEDesc theAEDesc;
171 if (!PyArg_ParseTuple(_args, "lO&",
172 &index,
173 AEDesc_Convert, &theAEDesc))
174 return NULL;
175 _err = AEPutDesc(&_self->ob_itself,
176 index,
177 &theAEDesc);
178 if (_err != noErr) return PyMac_Error(_err);
179 Py_INCREF(Py_None);
180 _res = Py_None;
181 return _res;
182}
183
Guido van Rossum17448e21995-01-30 11:53:55 +0000184static PyObject *AEDesc_AEGetNthPtr(_self, _args)
185 AEDescObject *_self;
186 PyObject *_args;
187{
188 PyObject *_res = NULL;
189 OSErr _err;
190 long index;
191 DescType desiredType;
192 AEKeyword theAEKeyword;
193 DescType typeCode;
194 char *dataPtr__out__;
195 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000196 int dataPtr__in_len__;
197 if (!PyArg_ParseTuple(_args, "lO&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000198 &index,
199 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000200 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000201 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000202 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000203 {
204 PyErr_NoMemory();
205 goto dataPtr__error__;
206 }
Guido van Rossum97842951995-02-19 15:59:49 +0000207 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000208 _err = AEGetNthPtr(&_self->ob_itself,
209 index,
210 desiredType,
211 &theAEKeyword,
212 &typeCode,
213 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
214 if (_err != noErr) return PyMac_Error(_err);
215 _res = Py_BuildValue("O&O&s#",
216 PyMac_BuildOSType, theAEKeyword,
217 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000218 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000219 free(dataPtr__out__);
220 dataPtr__error__: ;
221 return _res;
222}
223
224static PyObject *AEDesc_AEGetNthDesc(_self, _args)
225 AEDescObject *_self;
226 PyObject *_args;
227{
228 PyObject *_res = NULL;
229 OSErr _err;
230 long index;
231 DescType desiredType;
232 AEKeyword theAEKeyword;
233 AEDesc result;
234 if (!PyArg_ParseTuple(_args, "lO&",
235 &index,
236 PyMac_GetOSType, &desiredType))
237 return NULL;
238 _err = AEGetNthDesc(&_self->ob_itself,
239 index,
240 desiredType,
241 &theAEKeyword,
242 &result);
243 if (_err != noErr) return PyMac_Error(_err);
244 _res = Py_BuildValue("O&O&",
245 PyMac_BuildOSType, theAEKeyword,
246 AEDesc_New, &result);
247 return _res;
248}
249
250static PyObject *AEDesc_AESizeOfNthItem(_self, _args)
251 AEDescObject *_self;
252 PyObject *_args;
253{
254 PyObject *_res = NULL;
255 OSErr _err;
256 long index;
257 DescType typeCode;
258 Size dataSize;
259 if (!PyArg_ParseTuple(_args, "l",
260 &index))
261 return NULL;
262 _err = AESizeOfNthItem(&_self->ob_itself,
263 index,
264 &typeCode,
265 &dataSize);
266 if (_err != noErr) return PyMac_Error(_err);
267 _res = Py_BuildValue("O&l",
268 PyMac_BuildOSType, typeCode,
269 dataSize);
270 return _res;
271}
272
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000273static PyObject *AEDesc_AEDeleteItem(_self, _args)
274 AEDescObject *_self;
275 PyObject *_args;
276{
277 PyObject *_res = NULL;
278 OSErr _err;
279 long index;
280 if (!PyArg_ParseTuple(_args, "l",
281 &index))
282 return NULL;
283 _err = AEDeleteItem(&_self->ob_itself,
284 index);
285 if (_err != noErr) return PyMac_Error(_err);
286 Py_INCREF(Py_None);
287 _res = Py_None;
288 return _res;
289}
290
Guido van Rossum17448e21995-01-30 11:53:55 +0000291static PyObject *AEDesc_AEPutParamPtr(_self, _args)
292 AEDescObject *_self;
293 PyObject *_args;
294{
295 PyObject *_res = NULL;
296 OSErr _err;
297 AEKeyword theAEKeyword;
298 DescType typeCode;
299 char *dataPtr__in__;
300 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000301 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000302 if (!PyArg_ParseTuple(_args, "O&O&s#",
303 PyMac_GetOSType, &theAEKeyword,
304 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000305 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000306 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000307 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000308 _err = AEPutParamPtr(&_self->ob_itself,
309 theAEKeyword,
310 typeCode,
311 dataPtr__in__, dataPtr__len__);
312 if (_err != noErr) return PyMac_Error(_err);
313 Py_INCREF(Py_None);
314 _res = Py_None;
315 dataPtr__error__: ;
316 return _res;
317}
318
319static PyObject *AEDesc_AEPutParamDesc(_self, _args)
320 AEDescObject *_self;
321 PyObject *_args;
322{
323 PyObject *_res = NULL;
324 OSErr _err;
325 AEKeyword theAEKeyword;
326 AEDesc theAEDesc;
327 if (!PyArg_ParseTuple(_args, "O&O&",
328 PyMac_GetOSType, &theAEKeyword,
329 AEDesc_Convert, &theAEDesc))
330 return NULL;
331 _err = AEPutParamDesc(&_self->ob_itself,
332 theAEKeyword,
333 &theAEDesc);
334 if (_err != noErr) return PyMac_Error(_err);
335 Py_INCREF(Py_None);
336 _res = Py_None;
337 return _res;
338}
339
340static PyObject *AEDesc_AEGetParamPtr(_self, _args)
341 AEDescObject *_self;
342 PyObject *_args;
343{
344 PyObject *_res = NULL;
345 OSErr _err;
346 AEKeyword theAEKeyword;
347 DescType desiredType;
348 DescType typeCode;
349 char *dataPtr__out__;
350 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000351 int dataPtr__in_len__;
352 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000353 PyMac_GetOSType, &theAEKeyword,
354 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000355 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000356 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000357 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000358 {
359 PyErr_NoMemory();
360 goto dataPtr__error__;
361 }
Guido van Rossum97842951995-02-19 15:59:49 +0000362 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000363 _err = AEGetParamPtr(&_self->ob_itself,
364 theAEKeyword,
365 desiredType,
366 &typeCode,
367 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
368 if (_err != noErr) return PyMac_Error(_err);
369 _res = Py_BuildValue("O&s#",
370 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000371 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000372 free(dataPtr__out__);
373 dataPtr__error__: ;
374 return _res;
375}
376
377static PyObject *AEDesc_AEGetParamDesc(_self, _args)
378 AEDescObject *_self;
379 PyObject *_args;
380{
381 PyObject *_res = NULL;
382 OSErr _err;
383 AEKeyword theAEKeyword;
384 DescType desiredType;
385 AEDesc result;
386 if (!PyArg_ParseTuple(_args, "O&O&",
387 PyMac_GetOSType, &theAEKeyword,
388 PyMac_GetOSType, &desiredType))
389 return NULL;
390 _err = AEGetParamDesc(&_self->ob_itself,
391 theAEKeyword,
392 desiredType,
393 &result);
394 if (_err != noErr) return PyMac_Error(_err);
395 _res = Py_BuildValue("O&",
396 AEDesc_New, &result);
397 return _res;
398}
399
400static PyObject *AEDesc_AESizeOfParam(_self, _args)
401 AEDescObject *_self;
402 PyObject *_args;
403{
404 PyObject *_res = NULL;
405 OSErr _err;
406 AEKeyword theAEKeyword;
407 DescType typeCode;
408 Size dataSize;
409 if (!PyArg_ParseTuple(_args, "O&",
410 PyMac_GetOSType, &theAEKeyword))
411 return NULL;
412 _err = AESizeOfParam(&_self->ob_itself,
413 theAEKeyword,
414 &typeCode,
415 &dataSize);
416 if (_err != noErr) return PyMac_Error(_err);
417 _res = Py_BuildValue("O&l",
418 PyMac_BuildOSType, typeCode,
419 dataSize);
420 return _res;
421}
422
423static PyObject *AEDesc_AEDeleteParam(_self, _args)
424 AEDescObject *_self;
425 PyObject *_args;
426{
427 PyObject *_res = NULL;
428 OSErr _err;
429 AEKeyword theAEKeyword;
430 if (!PyArg_ParseTuple(_args, "O&",
431 PyMac_GetOSType, &theAEKeyword))
432 return NULL;
433 _err = AEDeleteParam(&_self->ob_itself,
434 theAEKeyword);
435 if (_err != noErr) return PyMac_Error(_err);
436 Py_INCREF(Py_None);
437 _res = Py_None;
438 return _res;
439}
440
441static PyObject *AEDesc_AEGetAttributePtr(_self, _args)
442 AEDescObject *_self;
443 PyObject *_args;
444{
445 PyObject *_res = NULL;
446 OSErr _err;
447 AEKeyword theAEKeyword;
448 DescType desiredType;
449 DescType typeCode;
450 char *dataPtr__out__;
451 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000452 int dataPtr__in_len__;
453 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000454 PyMac_GetOSType, &theAEKeyword,
455 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000456 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000457 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000458 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000459 {
460 PyErr_NoMemory();
461 goto dataPtr__error__;
462 }
Guido van Rossum97842951995-02-19 15:59:49 +0000463 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000464 _err = AEGetAttributePtr(&_self->ob_itself,
465 theAEKeyword,
466 desiredType,
467 &typeCode,
468 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
469 if (_err != noErr) return PyMac_Error(_err);
470 _res = Py_BuildValue("O&s#",
471 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000472 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000473 free(dataPtr__out__);
474 dataPtr__error__: ;
475 return _res;
476}
477
478static PyObject *AEDesc_AEGetAttributeDesc(_self, _args)
479 AEDescObject *_self;
480 PyObject *_args;
481{
482 PyObject *_res = NULL;
483 OSErr _err;
484 AEKeyword theAEKeyword;
485 DescType desiredType;
486 AEDesc result;
487 if (!PyArg_ParseTuple(_args, "O&O&",
488 PyMac_GetOSType, &theAEKeyword,
489 PyMac_GetOSType, &desiredType))
490 return NULL;
491 _err = AEGetAttributeDesc(&_self->ob_itself,
492 theAEKeyword,
493 desiredType,
494 &result);
495 if (_err != noErr) return PyMac_Error(_err);
496 _res = Py_BuildValue("O&",
497 AEDesc_New, &result);
498 return _res;
499}
500
501static PyObject *AEDesc_AESizeOfAttribute(_self, _args)
502 AEDescObject *_self;
503 PyObject *_args;
504{
505 PyObject *_res = NULL;
506 OSErr _err;
507 AEKeyword theAEKeyword;
508 DescType typeCode;
509 Size dataSize;
510 if (!PyArg_ParseTuple(_args, "O&",
511 PyMac_GetOSType, &theAEKeyword))
512 return NULL;
513 _err = AESizeOfAttribute(&_self->ob_itself,
514 theAEKeyword,
515 &typeCode,
516 &dataSize);
517 if (_err != noErr) return PyMac_Error(_err);
518 _res = Py_BuildValue("O&l",
519 PyMac_BuildOSType, typeCode,
520 dataSize);
521 return _res;
522}
523
524static PyObject *AEDesc_AEPutAttributePtr(_self, _args)
525 AEDescObject *_self;
526 PyObject *_args;
527{
528 PyObject *_res = NULL;
529 OSErr _err;
530 AEKeyword theAEKeyword;
531 DescType typeCode;
532 char *dataPtr__in__;
533 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000534 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000535 if (!PyArg_ParseTuple(_args, "O&O&s#",
536 PyMac_GetOSType, &theAEKeyword,
537 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000538 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000539 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000540 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000541 _err = AEPutAttributePtr(&_self->ob_itself,
542 theAEKeyword,
543 typeCode,
544 dataPtr__in__, dataPtr__len__);
545 if (_err != noErr) return PyMac_Error(_err);
546 Py_INCREF(Py_None);
547 _res = Py_None;
548 dataPtr__error__: ;
549 return _res;
550}
551
552static PyObject *AEDesc_AEPutAttributeDesc(_self, _args)
553 AEDescObject *_self;
554 PyObject *_args;
555{
556 PyObject *_res = NULL;
557 OSErr _err;
558 AEKeyword theAEKeyword;
559 AEDesc theAEDesc;
560 if (!PyArg_ParseTuple(_args, "O&O&",
561 PyMac_GetOSType, &theAEKeyword,
562 AEDesc_Convert, &theAEDesc))
563 return NULL;
564 _err = AEPutAttributeDesc(&_self->ob_itself,
565 theAEKeyword,
566 &theAEDesc);
567 if (_err != noErr) return PyMac_Error(_err);
568 Py_INCREF(Py_None);
569 _res = Py_None;
570 return _res;
571}
572
Jack Jansenf7d5aa62000-12-10 23:43:49 +0000573#if TARGET_API_MAC_CARBON
574
575static PyObject *AEDesc_AEGetDescDataSize(_self, _args)
576 AEDescObject *_self;
577 PyObject *_args;
578{
579 PyObject *_res = NULL;
580 Size _rv;
581 if (!PyArg_ParseTuple(_args, ""))
582 return NULL;
583 _rv = AEGetDescDataSize(&_self->ob_itself);
584 _res = Py_BuildValue("l",
585 _rv);
586 return _res;
587}
588#endif
589
Jack Jansen8ed81302000-12-12 22:09:11 +0000590static PyObject *AEDesc_AESend(_self, _args)
591 AEDescObject *_self;
592 PyObject *_args;
593{
594 PyObject *_res = NULL;
595 OSErr _err;
596 AppleEvent reply;
597 AESendMode sendMode;
598 AESendPriority sendPriority;
599 long timeOutInTicks;
600 if (!PyArg_ParseTuple(_args, "lhl",
601 &sendMode,
602 &sendPriority,
603 &timeOutInTicks))
604 return NULL;
605 _err = AESend(&_self->ob_itself,
606 &reply,
607 sendMode,
608 sendPriority,
609 timeOutInTicks,
610 upp_AEIdleProc,
611 (AEFilterUPP)0);
612 if (_err != noErr) return PyMac_Error(_err);
613 _res = Py_BuildValue("O&",
614 AEDesc_New, &reply);
615 return _res;
616}
617
618static PyObject *AEDesc_AEResetTimer(_self, _args)
619 AEDescObject *_self;
620 PyObject *_args;
621{
622 PyObject *_res = NULL;
623 OSErr _err;
624 if (!PyArg_ParseTuple(_args, ""))
625 return NULL;
626 _err = AEResetTimer(&_self->ob_itself);
627 if (_err != noErr) return PyMac_Error(_err);
628 Py_INCREF(Py_None);
629 _res = Py_None;
630 return _res;
631}
632
633static PyObject *AEDesc_AESuspendTheCurrentEvent(_self, _args)
634 AEDescObject *_self;
635 PyObject *_args;
636{
637 PyObject *_res = NULL;
638 OSErr _err;
639 if (!PyArg_ParseTuple(_args, ""))
640 return NULL;
641 _err = AESuspendTheCurrentEvent(&_self->ob_itself);
642 if (_err != noErr) return PyMac_Error(_err);
643 Py_INCREF(Py_None);
644 _res = Py_None;
645 return _res;
646}
647
648static PyObject *AEDesc_AEResumeTheCurrentEvent(_self, _args)
649 AEDescObject *_self;
650 PyObject *_args;
651{
652 PyObject *_res = NULL;
653 OSErr _err;
654 AppleEvent reply;
655 AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler;
656 PyObject *dispatcher;
657 if (!PyArg_ParseTuple(_args, "O&O",
658 AEDesc_Convert, &reply,
659 &dispatcher))
660 return NULL;
661 _err = AEResumeTheCurrentEvent(&_self->ob_itself,
662 &reply,
663 dispatcher__proc__, (long)dispatcher);
664 if (_err != noErr) return PyMac_Error(_err);
665 Py_INCREF(Py_None);
666 _res = Py_None;
667 Py_INCREF(dispatcher); /* XXX leak, but needed */
668 return _res;
669}
670
671static PyObject *AEDesc_AEGetTheCurrentEvent(_self, _args)
672 AEDescObject *_self;
673 PyObject *_args;
674{
675 PyObject *_res = NULL;
676 OSErr _err;
677 if (!PyArg_ParseTuple(_args, ""))
678 return NULL;
679 _err = AEGetTheCurrentEvent(&_self->ob_itself);
680 if (_err != noErr) return PyMac_Error(_err);
681 Py_INCREF(Py_None);
682 _res = Py_None;
683 return _res;
684}
685
686static PyObject *AEDesc_AESetTheCurrentEvent(_self, _args)
687 AEDescObject *_self;
688 PyObject *_args;
689{
690 PyObject *_res = NULL;
691 OSErr _err;
692 if (!PyArg_ParseTuple(_args, ""))
693 return NULL;
694 _err = AESetTheCurrentEvent(&_self->ob_itself);
695 if (_err != noErr) return PyMac_Error(_err);
696 Py_INCREF(Py_None);
697 _res = Py_None;
698 return _res;
699}
700
701static PyObject *AEDesc_AEResolve(_self, _args)
702 AEDescObject *_self;
703 PyObject *_args;
704{
705 PyObject *_res = NULL;
706 OSErr _err;
707 short callbackFlags;
708 AEDesc theToken;
709 if (!PyArg_ParseTuple(_args, "h",
710 &callbackFlags))
711 return NULL;
712 _err = AEResolve(&_self->ob_itself,
713 callbackFlags,
714 &theToken);
715 if (_err != noErr) return PyMac_Error(_err);
716 _res = Py_BuildValue("O&",
717 AEDesc_New, &theToken);
718 return _res;
719}
720
Guido van Rossum17448e21995-01-30 11:53:55 +0000721static PyMethodDef AEDesc_methods[] = {
722 {"AECoerceDesc", (PyCFunction)AEDesc_AECoerceDesc, 1,
723 "(DescType toType) -> (AEDesc result)"},
724 {"AEDuplicateDesc", (PyCFunction)AEDesc_AEDuplicateDesc, 1,
725 "() -> (AEDesc result)"},
726 {"AECountItems", (PyCFunction)AEDesc_AECountItems, 1,
727 "() -> (long theCount)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000728 {"AEPutPtr", (PyCFunction)AEDesc_AEPutPtr, 1,
729 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
730 {"AEPutDesc", (PyCFunction)AEDesc_AEPutDesc, 1,
731 "(long index, AEDesc theAEDesc) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000732 {"AEGetNthPtr", (PyCFunction)AEDesc_AEGetNthPtr, 1,
733 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
734 {"AEGetNthDesc", (PyCFunction)AEDesc_AEGetNthDesc, 1,
735 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
736 {"AESizeOfNthItem", (PyCFunction)AEDesc_AESizeOfNthItem, 1,
737 "(long index) -> (DescType typeCode, Size dataSize)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000738 {"AEDeleteItem", (PyCFunction)AEDesc_AEDeleteItem, 1,
739 "(long index) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000740 {"AEPutParamPtr", (PyCFunction)AEDesc_AEPutParamPtr, 1,
741 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
742 {"AEPutParamDesc", (PyCFunction)AEDesc_AEPutParamDesc, 1,
743 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
744 {"AEGetParamPtr", (PyCFunction)AEDesc_AEGetParamPtr, 1,
745 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
746 {"AEGetParamDesc", (PyCFunction)AEDesc_AEGetParamDesc, 1,
747 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
748 {"AESizeOfParam", (PyCFunction)AEDesc_AESizeOfParam, 1,
749 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
750 {"AEDeleteParam", (PyCFunction)AEDesc_AEDeleteParam, 1,
751 "(AEKeyword theAEKeyword) -> None"},
752 {"AEGetAttributePtr", (PyCFunction)AEDesc_AEGetAttributePtr, 1,
753 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
754 {"AEGetAttributeDesc", (PyCFunction)AEDesc_AEGetAttributeDesc, 1,
755 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
756 {"AESizeOfAttribute", (PyCFunction)AEDesc_AESizeOfAttribute, 1,
757 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
758 {"AEPutAttributePtr", (PyCFunction)AEDesc_AEPutAttributePtr, 1,
759 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
760 {"AEPutAttributeDesc", (PyCFunction)AEDesc_AEPutAttributeDesc, 1,
761 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
Jack Jansenf7d5aa62000-12-10 23:43:49 +0000762
763#if TARGET_API_MAC_CARBON
764 {"AEGetDescDataSize", (PyCFunction)AEDesc_AEGetDescDataSize, 1,
765 "() -> (Size _rv)"},
766#endif
Jack Jansen8ed81302000-12-12 22:09:11 +0000767 {"AESend", (PyCFunction)AEDesc_AESend, 1,
768 "(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)"},
769 {"AEResetTimer", (PyCFunction)AEDesc_AEResetTimer, 1,
770 "() -> None"},
771 {"AESuspendTheCurrentEvent", (PyCFunction)AEDesc_AESuspendTheCurrentEvent, 1,
772 "() -> None"},
773 {"AEResumeTheCurrentEvent", (PyCFunction)AEDesc_AEResumeTheCurrentEvent, 1,
774 "(AppleEvent reply, EventHandler dispatcher) -> None"},
775 {"AEGetTheCurrentEvent", (PyCFunction)AEDesc_AEGetTheCurrentEvent, 1,
776 "() -> None"},
777 {"AESetTheCurrentEvent", (PyCFunction)AEDesc_AESetTheCurrentEvent, 1,
778 "() -> None"},
779 {"AEResolve", (PyCFunction)AEDesc_AEResolve, 1,
780 "(short callbackFlags) -> (AEDesc theToken)"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000781 {NULL, NULL, 0}
782};
783
Jack Jansenf69633e1997-08-15 14:31:13 +0000784PyMethodChain AEDesc_chain = { AEDesc_methods, NULL };
Guido van Rossum17448e21995-01-30 11:53:55 +0000785
786static PyObject *AEDesc_getattr(self, name)
787 AEDescObject *self;
788 char *name;
789{
790
791 if (strcmp(name, "type") == 0)
792 return PyMac_BuildOSType(self->ob_itself.descriptorType);
793 if (strcmp(name, "data") == 0) {
794 PyObject *res;
Jack Jansen74a1e632000-07-14 22:37:27 +0000795#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +0000796 char state;
797 state = HGetState(self->ob_itself.dataHandle);
798 HLock(self->ob_itself.dataHandle);
799 res = PyString_FromStringAndSize(
800 *self->ob_itself.dataHandle,
801 GetHandleSize(self->ob_itself.dataHandle));
802 HUnlock(self->ob_itself.dataHandle);
803 HSetState(self->ob_itself.dataHandle, state);
Jack Jansene79dc762000-06-02 21:35:07 +0000804#else
805 Size size;
806 char *ptr;
807 OSErr err;
808
809 size = AEGetDescDataSize(&self->ob_itself);
810 if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
811 return NULL;
812 if ( (ptr = PyString_AsString(res)) == NULL )
813 return NULL;
814 if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
815 return PyMac_Error(err);
816#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000817 return res;
818 }
819 if (strcmp(name, "__members__") == 0)
820 return Py_BuildValue("[ss]", "data", "type");
821
822 return Py_FindMethodInChain(&AEDesc_chain, (PyObject *)self, name);
823}
824
825#define AEDesc_setattr NULL
826
Jack Jansenb1b78d81999-12-14 15:47:01 +0000827#define AEDesc_compare NULL
828
829#define AEDesc_repr NULL
830
831#define AEDesc_hash NULL
832
Jack Jansenf69633e1997-08-15 14:31:13 +0000833PyTypeObject AEDesc_Type = {
Guido van Rossum17448e21995-01-30 11:53:55 +0000834 PyObject_HEAD_INIT(&PyType_Type)
835 0, /*ob_size*/
836 "AEDesc", /*tp_name*/
837 sizeof(AEDescObject), /*tp_basicsize*/
838 0, /*tp_itemsize*/
839 /* methods */
840 (destructor) AEDesc_dealloc, /*tp_dealloc*/
841 0, /*tp_print*/
842 (getattrfunc) AEDesc_getattr, /*tp_getattr*/
843 (setattrfunc) AEDesc_setattr, /*tp_setattr*/
Jack Jansenb1b78d81999-12-14 15:47:01 +0000844 (cmpfunc) AEDesc_compare, /*tp_compare*/
845 (reprfunc) AEDesc_repr, /*tp_repr*/
846 (PyNumberMethods *)0, /* tp_as_number */
847 (PySequenceMethods *)0, /* tp_as_sequence */
848 (PyMappingMethods *)0, /* tp_as_mapping */
849 (hashfunc) AEDesc_hash, /*tp_hash*/
Guido van Rossum17448e21995-01-30 11:53:55 +0000850};
851
852/* --------------------- End object type AEDesc --------------------- */
853
854
Jack Jansen8ed81302000-12-12 22:09:11 +0000855static PyObject *AE_AECoercePtr(_self, _args)
856 PyObject *_self;
857 PyObject *_args;
858{
859 PyObject *_res = NULL;
860 OSErr _err;
861 DescType typeCode;
862 char *dataPtr__in__;
863 long dataPtr__len__;
864 int dataPtr__in_len__;
865 DescType toType;
866 AEDesc result;
867 if (!PyArg_ParseTuple(_args, "O&s#O&",
868 PyMac_GetOSType, &typeCode,
869 &dataPtr__in__, &dataPtr__in_len__,
870 PyMac_GetOSType, &toType))
871 return NULL;
872 dataPtr__len__ = dataPtr__in_len__;
873 _err = AECoercePtr(typeCode,
874 dataPtr__in__, dataPtr__len__,
875 toType,
876 &result);
877 if (_err != noErr) return PyMac_Error(_err);
878 _res = Py_BuildValue("O&",
879 AEDesc_New, &result);
880 dataPtr__error__: ;
881 return _res;
882}
883
884static PyObject *AE_AECreateDesc(_self, _args)
885 PyObject *_self;
886 PyObject *_args;
887{
888 PyObject *_res = NULL;
889 OSErr _err;
890 DescType typeCode;
891 char *dataPtr__in__;
892 long dataPtr__len__;
893 int dataPtr__in_len__;
894 AEDesc result;
895 if (!PyArg_ParseTuple(_args, "O&s#",
896 PyMac_GetOSType, &typeCode,
897 &dataPtr__in__, &dataPtr__in_len__))
898 return NULL;
899 dataPtr__len__ = dataPtr__in_len__;
900 _err = AECreateDesc(typeCode,
901 dataPtr__in__, dataPtr__len__,
902 &result);
903 if (_err != noErr) return PyMac_Error(_err);
904 _res = Py_BuildValue("O&",
905 AEDesc_New, &result);
906 dataPtr__error__: ;
907 return _res;
908}
909
910static PyObject *AE_AECreateList(_self, _args)
911 PyObject *_self;
912 PyObject *_args;
913{
914 PyObject *_res = NULL;
915 OSErr _err;
916 char *factoringPtr__in__;
917 long factoringPtr__len__;
918 int factoringPtr__in_len__;
919 Boolean isRecord;
920 AEDescList resultList;
921 if (!PyArg_ParseTuple(_args, "s#b",
922 &factoringPtr__in__, &factoringPtr__in_len__,
923 &isRecord))
924 return NULL;
925 factoringPtr__len__ = factoringPtr__in_len__;
926 _err = AECreateList(factoringPtr__in__, factoringPtr__len__,
927 isRecord,
928 &resultList);
929 if (_err != noErr) return PyMac_Error(_err);
930 _res = Py_BuildValue("O&",
931 AEDesc_New, &resultList);
932 factoringPtr__error__: ;
933 return _res;
934}
935
936static PyObject *AE_AECreateAppleEvent(_self, _args)
937 PyObject *_self;
938 PyObject *_args;
939{
940 PyObject *_res = NULL;
941 OSErr _err;
942 AEEventClass theAEEventClass;
943 AEEventID theAEEventID;
944 AEAddressDesc target;
945 AEReturnID returnID;
946 AETransactionID transactionID;
947 AppleEvent result;
948 if (!PyArg_ParseTuple(_args, "O&O&O&hl",
949 PyMac_GetOSType, &theAEEventClass,
950 PyMac_GetOSType, &theAEEventID,
951 AEDesc_Convert, &target,
952 &returnID,
953 &transactionID))
954 return NULL;
955 _err = AECreateAppleEvent(theAEEventClass,
956 theAEEventID,
957 &target,
958 returnID,
959 transactionID,
960 &result);
961 if (_err != noErr) return PyMac_Error(_err);
962 _res = Py_BuildValue("O&",
963 AEDesc_New, &result);
964 return _res;
965}
966
967#if TARGET_API_MAC_CARBON
968
969static PyObject *AE_AEReplaceDescData(_self, _args)
970 PyObject *_self;
971 PyObject *_args;
972{
973 PyObject *_res = NULL;
974 OSErr _err;
975 DescType typeCode;
976 char *dataPtr__in__;
977 long dataPtr__len__;
978 int dataPtr__in_len__;
979 AEDesc theAEDesc;
980 if (!PyArg_ParseTuple(_args, "O&s#",
981 PyMac_GetOSType, &typeCode,
982 &dataPtr__in__, &dataPtr__in_len__))
983 return NULL;
984 dataPtr__len__ = dataPtr__in_len__;
985 _err = AEReplaceDescData(typeCode,
986 dataPtr__in__, dataPtr__len__,
987 &theAEDesc);
988 if (_err != noErr) return PyMac_Error(_err);
989 _res = Py_BuildValue("O&",
990 AEDesc_New, &theAEDesc);
991 dataPtr__error__: ;
992 return _res;
993}
994#endif
995
Guido van Rossum17448e21995-01-30 11:53:55 +0000996static PyObject *AE_AEProcessAppleEvent(_self, _args)
997 PyObject *_self;
998 PyObject *_args;
999{
1000 PyObject *_res = NULL;
1001 OSErr _err;
1002 EventRecord theEventRecord;
1003 if (!PyArg_ParseTuple(_args, "O&",
1004 PyMac_GetEventRecord, &theEventRecord))
1005 return NULL;
1006 _err = AEProcessAppleEvent(&theEventRecord);
1007 if (_err != noErr) return PyMac_Error(_err);
1008 Py_INCREF(Py_None);
1009 _res = Py_None;
1010 return _res;
1011}
1012
Guido van Rossum17448e21995-01-30 11:53:55 +00001013static PyObject *AE_AEGetInteractionAllowed(_self, _args)
1014 PyObject *_self;
1015 PyObject *_args;
1016{
1017 PyObject *_res = NULL;
1018 OSErr _err;
1019 AEInteractAllowed level;
1020 if (!PyArg_ParseTuple(_args, ""))
1021 return NULL;
1022 _err = AEGetInteractionAllowed(&level);
1023 if (_err != noErr) return PyMac_Error(_err);
1024 _res = Py_BuildValue("b",
1025 level);
1026 return _res;
1027}
1028
1029static PyObject *AE_AESetInteractionAllowed(_self, _args)
1030 PyObject *_self;
1031 PyObject *_args;
1032{
1033 PyObject *_res = NULL;
1034 OSErr _err;
1035 AEInteractAllowed level;
1036 if (!PyArg_ParseTuple(_args, "b",
1037 &level))
1038 return NULL;
1039 _err = AESetInteractionAllowed(level);
1040 if (_err != noErr) return PyMac_Error(_err);
1041 Py_INCREF(Py_None);
1042 _res = Py_None;
1043 return _res;
1044}
1045
1046static PyObject *AE_AEInteractWithUser(_self, _args)
1047 PyObject *_self;
1048 PyObject *_args;
1049{
1050 PyObject *_res = NULL;
1051 OSErr _err;
1052 long timeOutInTicks;
1053 if (!PyArg_ParseTuple(_args, "l",
1054 &timeOutInTicks))
1055 return NULL;
1056 _err = AEInteractWithUser(timeOutInTicks,
1057 (NMRecPtr)0,
Guido van Rossumb19a6451995-02-05 16:58:33 +00001058 upp_AEIdleProc);
Guido van Rossum17448e21995-01-30 11:53:55 +00001059 if (_err != noErr) return PyMac_Error(_err);
1060 Py_INCREF(Py_None);
1061 _res = Py_None;
1062 return _res;
1063}
1064
1065static PyObject *AE_AEInstallEventHandler(_self, _args)
1066 PyObject *_self;
1067 PyObject *_args;
1068{
1069 PyObject *_res = NULL;
1070 OSErr _err;
1071 AEEventClass theAEEventClass;
1072 AEEventID theAEEventID;
Jack Jansen50501991995-07-29 13:58:41 +00001073 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
1074 PyObject *handler;
1075 if (!PyArg_ParseTuple(_args, "O&O&O",
Guido van Rossum17448e21995-01-30 11:53:55 +00001076 PyMac_GetOSType, &theAEEventClass,
1077 PyMac_GetOSType, &theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +00001078 &handler))
Guido van Rossum17448e21995-01-30 11:53:55 +00001079 return NULL;
1080 _err = AEInstallEventHandler(theAEEventClass,
1081 theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +00001082 handler__proc__, (long)handler,
Guido van Rossum17448e21995-01-30 11:53:55 +00001083 0);
1084 if (_err != noErr) return PyMac_Error(_err);
1085 Py_INCREF(Py_None);
1086 _res = Py_None;
Jack Jansen50501991995-07-29 13:58:41 +00001087 Py_INCREF(handler); /* XXX leak, but needed */
Guido van Rossum17448e21995-01-30 11:53:55 +00001088 return _res;
1089}
1090
1091static PyObject *AE_AERemoveEventHandler(_self, _args)
1092 PyObject *_self;
1093 PyObject *_args;
1094{
1095 PyObject *_res = NULL;
1096 OSErr _err;
1097 AEEventClass theAEEventClass;
1098 AEEventID theAEEventID;
1099 if (!PyArg_ParseTuple(_args, "O&O&",
1100 PyMac_GetOSType, &theAEEventClass,
1101 PyMac_GetOSType, &theAEEventID))
1102 return NULL;
1103 _err = AERemoveEventHandler(theAEEventClass,
1104 theAEEventID,
Guido van Rossumb19a6451995-02-05 16:58:33 +00001105 upp_GenericEventHandler,
Guido van Rossum17448e21995-01-30 11:53:55 +00001106 0);
1107 if (_err != noErr) return PyMac_Error(_err);
1108 Py_INCREF(Py_None);
1109 _res = Py_None;
1110 return _res;
1111}
1112
Jack Jansen50501991995-07-29 13:58:41 +00001113static PyObject *AE_AEGetEventHandler(_self, _args)
1114 PyObject *_self;
1115 PyObject *_args;
1116{
1117 PyObject *_res = NULL;
1118 OSErr _err;
1119 AEEventClass theAEEventClass;
1120 AEEventID theAEEventID;
Jack Jansen8ce4d511995-08-17 14:24:35 +00001121 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
1122 PyObject *handler;
Jack Jansen50501991995-07-29 13:58:41 +00001123 if (!PyArg_ParseTuple(_args, "O&O&",
1124 PyMac_GetOSType, &theAEEventClass,
1125 PyMac_GetOSType, &theAEEventID))
1126 return NULL;
1127 _err = AEGetEventHandler(theAEEventClass,
1128 theAEEventID,
Jack Jansen8ce4d511995-08-17 14:24:35 +00001129 &handler__proc__, (long *)&handler,
Jack Jansen50501991995-07-29 13:58:41 +00001130 0);
1131 if (_err != noErr) return PyMac_Error(_err);
Jack Jansen8ce4d511995-08-17 14:24:35 +00001132 _res = Py_BuildValue("O",
1133 handler);
1134 Py_INCREF(handler); /* XXX leak, but needed */
Jack Jansen50501991995-07-29 13:58:41 +00001135 return _res;
1136}
1137
Jack Jansenf7d5aa62000-12-10 23:43:49 +00001138static PyObject *AE_AEInstallSpecialHandler(_self, _args)
1139 PyObject *_self;
1140 PyObject *_args;
1141{
1142 PyObject *_res = NULL;
1143 OSErr _err;
1144 AEKeyword functionClass;
1145 if (!PyArg_ParseTuple(_args, "O&",
1146 PyMac_GetOSType, &functionClass))
1147 return NULL;
1148 _err = AEInstallSpecialHandler(functionClass,
1149 upp_GenericEventHandler,
1150 0);
1151 if (_err != noErr) return PyMac_Error(_err);
1152 Py_INCREF(Py_None);
1153 _res = Py_None;
1154 return _res;
1155}
1156
1157static PyObject *AE_AERemoveSpecialHandler(_self, _args)
1158 PyObject *_self;
1159 PyObject *_args;
1160{
1161 PyObject *_res = NULL;
1162 OSErr _err;
1163 AEKeyword functionClass;
1164 if (!PyArg_ParseTuple(_args, "O&",
1165 PyMac_GetOSType, &functionClass))
1166 return NULL;
1167 _err = AERemoveSpecialHandler(functionClass,
1168 upp_GenericEventHandler,
1169 0);
1170 if (_err != noErr) return PyMac_Error(_err);
1171 Py_INCREF(Py_None);
1172 _res = Py_None;
1173 return _res;
1174}
1175
Guido van Rossum17448e21995-01-30 11:53:55 +00001176static PyObject *AE_AEManagerInfo(_self, _args)
1177 PyObject *_self;
1178 PyObject *_args;
1179{
1180 PyObject *_res = NULL;
1181 OSErr _err;
1182 AEKeyword keyWord;
1183 long result;
1184 if (!PyArg_ParseTuple(_args, "O&",
1185 PyMac_GetOSType, &keyWord))
1186 return NULL;
1187 _err = AEManagerInfo(keyWord,
1188 &result);
1189 if (_err != noErr) return PyMac_Error(_err);
1190 _res = Py_BuildValue("l",
1191 result);
1192 return _res;
1193}
1194
Jack Jansen8ed81302000-12-12 22:09:11 +00001195static PyObject *AE_AEObjectInit(_self, _args)
Jack Jansen21f96871998-02-20 16:02:09 +00001196 PyObject *_self;
1197 PyObject *_args;
1198{
1199 PyObject *_res = NULL;
1200 OSErr _err;
Jack Jansen8ed81302000-12-12 22:09:11 +00001201 if (!PyArg_ParseTuple(_args, ""))
Jack Jansen21f96871998-02-20 16:02:09 +00001202 return NULL;
Jack Jansen8ed81302000-12-12 22:09:11 +00001203 _err = AEObjectInit();
Jack Jansen21f96871998-02-20 16:02:09 +00001204 if (_err != noErr) return PyMac_Error(_err);
Jack Jansen8ed81302000-12-12 22:09:11 +00001205 Py_INCREF(Py_None);
1206 _res = Py_None;
Jack Jansen21f96871998-02-20 16:02:09 +00001207 return _res;
1208}
1209
Jack Jansen8ed81302000-12-12 22:09:11 +00001210static PyObject *AE_AEDisposeToken(_self, _args)
Jack Jansen21f96871998-02-20 16:02:09 +00001211 PyObject *_self;
1212 PyObject *_args;
1213{
1214 PyObject *_res = NULL;
1215 OSErr _err;
Jack Jansen8ed81302000-12-12 22:09:11 +00001216 AEDesc theToken;
1217 if (!PyArg_ParseTuple(_args, ""))
Jack Jansen21f96871998-02-20 16:02:09 +00001218 return NULL;
Jack Jansen8ed81302000-12-12 22:09:11 +00001219 _err = AEDisposeToken(&theToken);
Jack Jansen21f96871998-02-20 16:02:09 +00001220 if (_err != noErr) return PyMac_Error(_err);
1221 _res = Py_BuildValue("O&",
Jack Jansen8ed81302000-12-12 22:09:11 +00001222 AEDesc_New, &theToken);
Jack Jansen21f96871998-02-20 16:02:09 +00001223 return _res;
1224}
1225
Jack Jansen8ed81302000-12-12 22:09:11 +00001226static PyObject *AE_AECallObjectAccessor(_self, _args)
Jack Jansen21f96871998-02-20 16:02:09 +00001227 PyObject *_self;
1228 PyObject *_args;
1229{
1230 PyObject *_res = NULL;
1231 OSErr _err;
Jack Jansen8ed81302000-12-12 22:09:11 +00001232 DescType desiredClass;
1233 AEDesc containerToken;
1234 DescType containerClass;
1235 DescType keyForm;
1236 AEDesc keyData;
1237 AEDesc token;
1238 if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
1239 PyMac_GetOSType, &desiredClass,
1240 AEDesc_Convert, &containerToken,
1241 PyMac_GetOSType, &containerClass,
1242 PyMac_GetOSType, &keyForm,
1243 AEDesc_Convert, &keyData))
Jack Jansen21f96871998-02-20 16:02:09 +00001244 return NULL;
Jack Jansen8ed81302000-12-12 22:09:11 +00001245 _err = AECallObjectAccessor(desiredClass,
1246 &containerToken,
1247 containerClass,
1248 keyForm,
1249 &keyData,
1250 &token);
Jack Jansen21f96871998-02-20 16:02:09 +00001251 if (_err != noErr) return PyMac_Error(_err);
1252 _res = Py_BuildValue("O&",
Jack Jansen8ed81302000-12-12 22:09:11 +00001253 AEDesc_New, &token);
Jack Jansen21f96871998-02-20 16:02:09 +00001254 return _res;
1255}
1256
Guido van Rossum17448e21995-01-30 11:53:55 +00001257static PyMethodDef AE_methods[] = {
Jack Jansen8ed81302000-12-12 22:09:11 +00001258 {"AECoercePtr", (PyCFunction)AE_AECoercePtr, 1,
1259 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1260 {"AECreateDesc", (PyCFunction)AE_AECreateDesc, 1,
1261 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1262 {"AECreateList", (PyCFunction)AE_AECreateList, 1,
1263 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1264 {"AECreateAppleEvent", (PyCFunction)AE_AECreateAppleEvent, 1,
1265 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result)"},
1266
1267#if TARGET_API_MAC_CARBON
1268 {"AEReplaceDescData", (PyCFunction)AE_AEReplaceDescData, 1,
1269 "(DescType typeCode, Buffer dataPtr) -> (AEDesc theAEDesc)"},
1270#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001271 {"AEProcessAppleEvent", (PyCFunction)AE_AEProcessAppleEvent, 1,
1272 "(EventRecord theEventRecord) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001273 {"AEGetInteractionAllowed", (PyCFunction)AE_AEGetInteractionAllowed, 1,
1274 "() -> (AEInteractAllowed level)"},
1275 {"AESetInteractionAllowed", (PyCFunction)AE_AESetInteractionAllowed, 1,
1276 "(AEInteractAllowed level) -> None"},
1277 {"AEInteractWithUser", (PyCFunction)AE_AEInteractWithUser, 1,
1278 "(long timeOutInTicks) -> None"},
1279 {"AEInstallEventHandler", (PyCFunction)AE_AEInstallEventHandler, 1,
Jack Jansen50501991995-07-29 13:58:41 +00001280 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001281 {"AERemoveEventHandler", (PyCFunction)AE_AERemoveEventHandler, 1,
1282 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
Jack Jansen50501991995-07-29 13:58:41 +00001283 {"AEGetEventHandler", (PyCFunction)AE_AEGetEventHandler, 1,
1284 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
Jack Jansenf7d5aa62000-12-10 23:43:49 +00001285 {"AEInstallSpecialHandler", (PyCFunction)AE_AEInstallSpecialHandler, 1,
1286 "(AEKeyword functionClass) -> None"},
1287 {"AERemoveSpecialHandler", (PyCFunction)AE_AERemoveSpecialHandler, 1,
1288 "(AEKeyword functionClass) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001289 {"AEManagerInfo", (PyCFunction)AE_AEManagerInfo, 1,
1290 "(AEKeyword keyWord) -> (long result)"},
Jack Jansen8ed81302000-12-12 22:09:11 +00001291 {"AEObjectInit", (PyCFunction)AE_AEObjectInit, 1,
1292 "() -> None"},
1293 {"AEDisposeToken", (PyCFunction)AE_AEDisposeToken, 1,
1294 "() -> (AEDesc theToken)"},
1295 {"AECallObjectAccessor", (PyCFunction)AE_AECallObjectAccessor, 1,
1296 "(DescType desiredClass, AEDesc containerToken, DescType containerClass, DescType keyForm, AEDesc keyData) -> (AEDesc token)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001297 {NULL, NULL, 0}
1298};
1299
1300
1301
1302static pascal OSErr
Jack Jansene79dc762000-06-02 21:35:07 +00001303GenericEventHandler(const AppleEvent *request, AppleEvent *reply, unsigned long refcon)
Guido van Rossum17448e21995-01-30 11:53:55 +00001304{
1305 PyObject *handler = (PyObject *)refcon;
1306 AEDescObject *requestObject, *replyObject;
1307 PyObject *args, *res;
Jack Jansen9d8b96c2000-07-14 22:16:45 +00001308 if ((requestObject = (AEDescObject *)AEDesc_New((AppleEvent *)request)) == NULL) {
Guido van Rossum17448e21995-01-30 11:53:55 +00001309 return -1;
1310 }
1311 if ((replyObject = (AEDescObject *)AEDesc_New(reply)) == NULL) {
1312 Py_DECREF(requestObject);
1313 return -1;
1314 }
1315 if ((args = Py_BuildValue("OO", requestObject, replyObject)) == NULL) {
1316 Py_DECREF(requestObject);
1317 Py_DECREF(replyObject);
1318 return -1;
1319 }
1320 res = PyEval_CallObject(handler, args);
1321 requestObject->ob_itself.descriptorType = 'null';
1322 requestObject->ob_itself.dataHandle = NULL;
1323 replyObject->ob_itself.descriptorType = 'null';
1324 replyObject->ob_itself.dataHandle = NULL;
1325 Py_DECREF(args);
1326 if (res == NULL)
1327 return -1;
1328 Py_DECREF(res);
1329 return noErr;
1330}
1331
1332
1333void initAE()
1334{
1335 PyObject *m;
1336 PyObject *d;
1337
1338
1339
Guido van Rossumb19a6451995-02-05 16:58:33 +00001340 upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
1341 upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
Jack Jansen0e04eec2001-05-17 21:58:34 +00001342 PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc_New);
1343 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc_Convert);
Guido van Rossumb19a6451995-02-05 16:58:33 +00001344
Guido van Rossum17448e21995-01-30 11:53:55 +00001345
1346 m = Py_InitModule("AE", AE_methods);
1347 d = PyModule_GetDict(m);
1348 AE_Error = PyMac_GetOSErrException();
1349 if (AE_Error == NULL ||
1350 PyDict_SetItemString(d, "Error", AE_Error) != 0)
Jack Jansenf7d5aa62000-12-10 23:43:49 +00001351 return;
Jack Jansena755e681997-09-20 17:40:22 +00001352 AEDesc_Type.ob_type = &PyType_Type;
1353 Py_INCREF(&AEDesc_Type);
1354 if (PyDict_SetItemString(d, "AEDescType", (PyObject *)&AEDesc_Type) != 0)
1355 Py_FatalError("can't initialize AEDescType");
Guido van Rossum17448e21995-01-30 11:53:55 +00001356}
1357
1358/* ========================= End module AE ========================== */
1359