blob: a4f56d6c3189b393d4ac293d4a740bba499c341a [file] [log] [blame]
Guido van Rossum17448e21995-01-30 11:53:55 +00001
2/* =========================== Module AE ============================ */
3
4#include "Python.h"
5
6
7
8#define SystemSevenOrLater 1
9
10#include "macglue.h"
11#include <Memory.h>
12#include <Dialogs.h>
13#include <Menus.h>
14#include <Controls.h>
15
16extern PyObject *ResObj_New(Handle);
17extern int ResObj_Convert(PyObject *, Handle *);
18
19extern PyObject *WinObj_New(WindowPtr);
20extern int WinObj_Convert(PyObject *, WindowPtr *);
21
22extern PyObject *DlgObj_New(DialogPtr);
23extern int DlgObj_Convert(PyObject *, DialogPtr *);
24extern PyTypeObject Dialog_Type;
25#define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
26
27extern PyObject *MenuObj_New(MenuHandle);
28extern int MenuObj_Convert(PyObject *, MenuHandle *);
29
30extern PyObject *CtlObj_New(ControlHandle);
31extern int CtlObj_Convert(PyObject *, ControlHandle *);
32
Guido van Rossumb19a6451995-02-05 16:58:33 +000033extern PyObject *WinObj_WhichWindow(WindowPtr);
34
Guido van Rossum17448e21995-01-30 11:53:55 +000035#include <AppleEvents.h>
36
Guido van Rossum3075b321995-02-14 09:48:02 +000037#ifndef HAVE_UNIVERSAL_HEADERS
Guido van Rossumb19a6451995-02-05 16:58:33 +000038#define AEIdleProcPtr IdleProcPtr
Guido van Rossum17448e21995-01-30 11:53:55 +000039#define AEFilterProcPtr EventFilterProcPtr
40#define AEEventHandlerProcPtr EventHandlerProcPtr
41#endif
42
Guido van Rossum3075b321995-02-14 09:48:02 +000043#ifndef HAVE_UNIVERSAL_HEADERS
44/* I'm trying to setup the code here so that is easily automated,
Guido van Rossumb19a6451995-02-05 16:58:33 +000045** as follows:
46** - Use the UPP in the source
47** - for pre-universal headers, #define each UPP as the corresponding ProcPtr
48** - for each routine we pass we declare a upp_xxx that
49** we initialize to the correct value in the init routine.
50*/
51#define AEIdleUPP AEIdleProcPtr
52#define AEFilterUPP AEFilterProcPtr
53#define AEEventHandlerUPP AEEventHandlerProcPtr
54#define NewAEIdleProc(x) (x)
55#define NewAEFilterProc(x) (x)
56#define NewAEEventHandlerProc(x) (x)
57#endif
58
Guido van Rossum17448e21995-01-30 11:53:55 +000059static pascal OSErr GenericEventHandler(); /* Forward */
60
Guido van Rossumb19a6451995-02-05 16:58:33 +000061AEEventHandlerUPP upp_GenericEventHandler;
62
Guido van Rossum17448e21995-01-30 11:53:55 +000063static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
64{
Jack Jansenc7cfb951995-06-05 22:34:12 +000065 PyMac_Yield();
Guido van Rossum17448e21995-01-30 11:53:55 +000066 return 0;
67}
68
Guido van Rossumb19a6451995-02-05 16:58:33 +000069AEIdleUPP upp_AEIdleProc;
70
Guido van Rossum17448e21995-01-30 11:53:55 +000071static PyObject *AE_Error;
72
73/* ----------------------- Object type AEDesc ----------------------- */
74
75staticforward PyTypeObject AEDesc_Type;
76
77#define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type)
78
79typedef struct AEDescObject {
80 PyObject_HEAD
81 AEDesc ob_itself;
82} AEDescObject;
83
84static PyObject *AEDesc_New(itself)
Guido van Rossum97842951995-02-19 15:59:49 +000085 AEDesc *itself;
Guido van Rossum17448e21995-01-30 11:53:55 +000086{
87 AEDescObject *it;
88 it = PyObject_NEW(AEDescObject, &AEDesc_Type);
89 if (it == NULL) return NULL;
90 it->ob_itself = *itself;
91 return (PyObject *)it;
92}
93static AEDesc_Convert(v, p_itself)
94 PyObject *v;
95 AEDesc *p_itself;
96{
97 if (!AEDesc_Check(v))
98 {
99 PyErr_SetString(PyExc_TypeError, "AEDesc required");
100 return 0;
101 }
102 *p_itself = ((AEDescObject *)v)->ob_itself;
103 return 1;
104}
105
106static void AEDesc_dealloc(self)
107 AEDescObject *self;
108{
109 AEDisposeDesc(&self->ob_itself);
110 PyMem_DEL(self);
111}
112
113static PyObject *AEDesc_AECoerceDesc(_self, _args)
114 AEDescObject *_self;
115 PyObject *_args;
116{
117 PyObject *_res = NULL;
118 OSErr _err;
119 DescType toType;
120 AEDesc result;
121 if (!PyArg_ParseTuple(_args, "O&",
122 PyMac_GetOSType, &toType))
123 return NULL;
124 _err = AECoerceDesc(&_self->ob_itself,
125 toType,
126 &result);
127 if (_err != noErr) return PyMac_Error(_err);
128 _res = Py_BuildValue("O&",
129 AEDesc_New, &result);
130 return _res;
131}
132
133static PyObject *AEDesc_AEDuplicateDesc(_self, _args)
134 AEDescObject *_self;
135 PyObject *_args;
136{
137 PyObject *_res = NULL;
138 OSErr _err;
139 AEDesc result;
140 if (!PyArg_ParseTuple(_args, ""))
141 return NULL;
142 _err = AEDuplicateDesc(&_self->ob_itself,
143 &result);
144 if (_err != noErr) return PyMac_Error(_err);
145 _res = Py_BuildValue("O&",
146 AEDesc_New, &result);
147 return _res;
148}
149
150static PyObject *AEDesc_AECountItems(_self, _args)
151 AEDescObject *_self;
152 PyObject *_args;
153{
154 PyObject *_res = NULL;
155 OSErr _err;
156 long theCount;
157 if (!PyArg_ParseTuple(_args, ""))
158 return NULL;
159 _err = AECountItems(&_self->ob_itself,
160 &theCount);
161 if (_err != noErr) return PyMac_Error(_err);
162 _res = Py_BuildValue("l",
163 theCount);
164 return _res;
165}
166
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000167static PyObject *AEDesc_AEPutPtr(_self, _args)
168 AEDescObject *_self;
169 PyObject *_args;
170{
171 PyObject *_res = NULL;
172 OSErr _err;
173 long index;
174 DescType typeCode;
175 char *dataPtr__in__;
176 long dataPtr__len__;
177 int dataPtr__in_len__;
178 if (!PyArg_ParseTuple(_args, "lO&s#",
179 &index,
180 PyMac_GetOSType, &typeCode,
181 &dataPtr__in__, &dataPtr__in_len__))
182 return NULL;
183 dataPtr__len__ = dataPtr__in_len__;
184 _err = AEPutPtr(&_self->ob_itself,
185 index,
186 typeCode,
187 dataPtr__in__, dataPtr__len__);
188 if (_err != noErr) return PyMac_Error(_err);
189 Py_INCREF(Py_None);
190 _res = Py_None;
191 dataPtr__error__: ;
192 return _res;
193}
194
195static PyObject *AEDesc_AEPutDesc(_self, _args)
196 AEDescObject *_self;
197 PyObject *_args;
198{
199 PyObject *_res = NULL;
200 OSErr _err;
201 long index;
202 AEDesc theAEDesc;
203 if (!PyArg_ParseTuple(_args, "lO&",
204 &index,
205 AEDesc_Convert, &theAEDesc))
206 return NULL;
207 _err = AEPutDesc(&_self->ob_itself,
208 index,
209 &theAEDesc);
210 if (_err != noErr) return PyMac_Error(_err);
211 Py_INCREF(Py_None);
212 _res = Py_None;
213 return _res;
214}
215
Guido van Rossum17448e21995-01-30 11:53:55 +0000216static PyObject *AEDesc_AEGetNthPtr(_self, _args)
217 AEDescObject *_self;
218 PyObject *_args;
219{
220 PyObject *_res = NULL;
221 OSErr _err;
222 long index;
223 DescType desiredType;
224 AEKeyword theAEKeyword;
225 DescType typeCode;
226 char *dataPtr__out__;
227 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000228 int dataPtr__in_len__;
229 if (!PyArg_ParseTuple(_args, "lO&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000230 &index,
231 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000232 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000233 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000234 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000235 {
236 PyErr_NoMemory();
237 goto dataPtr__error__;
238 }
Guido van Rossum97842951995-02-19 15:59:49 +0000239 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000240 _err = AEGetNthPtr(&_self->ob_itself,
241 index,
242 desiredType,
243 &theAEKeyword,
244 &typeCode,
245 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
246 if (_err != noErr) return PyMac_Error(_err);
247 _res = Py_BuildValue("O&O&s#",
248 PyMac_BuildOSType, theAEKeyword,
249 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000250 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000251 free(dataPtr__out__);
252 dataPtr__error__: ;
253 return _res;
254}
255
256static PyObject *AEDesc_AEGetNthDesc(_self, _args)
257 AEDescObject *_self;
258 PyObject *_args;
259{
260 PyObject *_res = NULL;
261 OSErr _err;
262 long index;
263 DescType desiredType;
264 AEKeyword theAEKeyword;
265 AEDesc result;
266 if (!PyArg_ParseTuple(_args, "lO&",
267 &index,
268 PyMac_GetOSType, &desiredType))
269 return NULL;
270 _err = AEGetNthDesc(&_self->ob_itself,
271 index,
272 desiredType,
273 &theAEKeyword,
274 &result);
275 if (_err != noErr) return PyMac_Error(_err);
276 _res = Py_BuildValue("O&O&",
277 PyMac_BuildOSType, theAEKeyword,
278 AEDesc_New, &result);
279 return _res;
280}
281
282static PyObject *AEDesc_AESizeOfNthItem(_self, _args)
283 AEDescObject *_self;
284 PyObject *_args;
285{
286 PyObject *_res = NULL;
287 OSErr _err;
288 long index;
289 DescType typeCode;
290 Size dataSize;
291 if (!PyArg_ParseTuple(_args, "l",
292 &index))
293 return NULL;
294 _err = AESizeOfNthItem(&_self->ob_itself,
295 index,
296 &typeCode,
297 &dataSize);
298 if (_err != noErr) return PyMac_Error(_err);
299 _res = Py_BuildValue("O&l",
300 PyMac_BuildOSType, typeCode,
301 dataSize);
302 return _res;
303}
304
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000305static PyObject *AEDesc_AEDeleteItem(_self, _args)
306 AEDescObject *_self;
307 PyObject *_args;
308{
309 PyObject *_res = NULL;
310 OSErr _err;
311 long index;
312 if (!PyArg_ParseTuple(_args, "l",
313 &index))
314 return NULL;
315 _err = AEDeleteItem(&_self->ob_itself,
316 index);
317 if (_err != noErr) return PyMac_Error(_err);
318 Py_INCREF(Py_None);
319 _res = Py_None;
320 return _res;
321}
322
Guido van Rossum17448e21995-01-30 11:53:55 +0000323static PyObject *AEDesc_AEPutParamPtr(_self, _args)
324 AEDescObject *_self;
325 PyObject *_args;
326{
327 PyObject *_res = NULL;
328 OSErr _err;
329 AEKeyword theAEKeyword;
330 DescType typeCode;
331 char *dataPtr__in__;
332 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000333 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000334 if (!PyArg_ParseTuple(_args, "O&O&s#",
335 PyMac_GetOSType, &theAEKeyword,
336 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000337 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000338 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000339 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000340 _err = AEPutParamPtr(&_self->ob_itself,
341 theAEKeyword,
342 typeCode,
343 dataPtr__in__, dataPtr__len__);
344 if (_err != noErr) return PyMac_Error(_err);
345 Py_INCREF(Py_None);
346 _res = Py_None;
347 dataPtr__error__: ;
348 return _res;
349}
350
351static PyObject *AEDesc_AEPutParamDesc(_self, _args)
352 AEDescObject *_self;
353 PyObject *_args;
354{
355 PyObject *_res = NULL;
356 OSErr _err;
357 AEKeyword theAEKeyword;
358 AEDesc theAEDesc;
359 if (!PyArg_ParseTuple(_args, "O&O&",
360 PyMac_GetOSType, &theAEKeyword,
361 AEDesc_Convert, &theAEDesc))
362 return NULL;
363 _err = AEPutParamDesc(&_self->ob_itself,
364 theAEKeyword,
365 &theAEDesc);
366 if (_err != noErr) return PyMac_Error(_err);
367 Py_INCREF(Py_None);
368 _res = Py_None;
369 return _res;
370}
371
372static PyObject *AEDesc_AEGetParamPtr(_self, _args)
373 AEDescObject *_self;
374 PyObject *_args;
375{
376 PyObject *_res = NULL;
377 OSErr _err;
378 AEKeyword theAEKeyword;
379 DescType desiredType;
380 DescType typeCode;
381 char *dataPtr__out__;
382 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000383 int dataPtr__in_len__;
384 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000385 PyMac_GetOSType, &theAEKeyword,
386 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000387 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000388 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000389 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000390 {
391 PyErr_NoMemory();
392 goto dataPtr__error__;
393 }
Guido van Rossum97842951995-02-19 15:59:49 +0000394 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000395 _err = AEGetParamPtr(&_self->ob_itself,
396 theAEKeyword,
397 desiredType,
398 &typeCode,
399 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
400 if (_err != noErr) return PyMac_Error(_err);
401 _res = Py_BuildValue("O&s#",
402 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000403 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000404 free(dataPtr__out__);
405 dataPtr__error__: ;
406 return _res;
407}
408
409static PyObject *AEDesc_AEGetParamDesc(_self, _args)
410 AEDescObject *_self;
411 PyObject *_args;
412{
413 PyObject *_res = NULL;
414 OSErr _err;
415 AEKeyword theAEKeyword;
416 DescType desiredType;
417 AEDesc result;
418 if (!PyArg_ParseTuple(_args, "O&O&",
419 PyMac_GetOSType, &theAEKeyword,
420 PyMac_GetOSType, &desiredType))
421 return NULL;
422 _err = AEGetParamDesc(&_self->ob_itself,
423 theAEKeyword,
424 desiredType,
425 &result);
426 if (_err != noErr) return PyMac_Error(_err);
427 _res = Py_BuildValue("O&",
428 AEDesc_New, &result);
429 return _res;
430}
431
432static PyObject *AEDesc_AESizeOfParam(_self, _args)
433 AEDescObject *_self;
434 PyObject *_args;
435{
436 PyObject *_res = NULL;
437 OSErr _err;
438 AEKeyword theAEKeyword;
439 DescType typeCode;
440 Size dataSize;
441 if (!PyArg_ParseTuple(_args, "O&",
442 PyMac_GetOSType, &theAEKeyword))
443 return NULL;
444 _err = AESizeOfParam(&_self->ob_itself,
445 theAEKeyword,
446 &typeCode,
447 &dataSize);
448 if (_err != noErr) return PyMac_Error(_err);
449 _res = Py_BuildValue("O&l",
450 PyMac_BuildOSType, typeCode,
451 dataSize);
452 return _res;
453}
454
455static PyObject *AEDesc_AEDeleteParam(_self, _args)
456 AEDescObject *_self;
457 PyObject *_args;
458{
459 PyObject *_res = NULL;
460 OSErr _err;
461 AEKeyword theAEKeyword;
462 if (!PyArg_ParseTuple(_args, "O&",
463 PyMac_GetOSType, &theAEKeyword))
464 return NULL;
465 _err = AEDeleteParam(&_self->ob_itself,
466 theAEKeyword);
467 if (_err != noErr) return PyMac_Error(_err);
468 Py_INCREF(Py_None);
469 _res = Py_None;
470 return _res;
471}
472
473static PyObject *AEDesc_AEGetAttributePtr(_self, _args)
474 AEDescObject *_self;
475 PyObject *_args;
476{
477 PyObject *_res = NULL;
478 OSErr _err;
479 AEKeyword theAEKeyword;
480 DescType desiredType;
481 DescType typeCode;
482 char *dataPtr__out__;
483 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000484 int dataPtr__in_len__;
485 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000486 PyMac_GetOSType, &theAEKeyword,
487 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000488 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000489 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000490 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000491 {
492 PyErr_NoMemory();
493 goto dataPtr__error__;
494 }
Guido van Rossum97842951995-02-19 15:59:49 +0000495 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000496 _err = AEGetAttributePtr(&_self->ob_itself,
497 theAEKeyword,
498 desiredType,
499 &typeCode,
500 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
501 if (_err != noErr) return PyMac_Error(_err);
502 _res = Py_BuildValue("O&s#",
503 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000504 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000505 free(dataPtr__out__);
506 dataPtr__error__: ;
507 return _res;
508}
509
510static PyObject *AEDesc_AEGetAttributeDesc(_self, _args)
511 AEDescObject *_self;
512 PyObject *_args;
513{
514 PyObject *_res = NULL;
515 OSErr _err;
516 AEKeyword theAEKeyword;
517 DescType desiredType;
518 AEDesc result;
519 if (!PyArg_ParseTuple(_args, "O&O&",
520 PyMac_GetOSType, &theAEKeyword,
521 PyMac_GetOSType, &desiredType))
522 return NULL;
523 _err = AEGetAttributeDesc(&_self->ob_itself,
524 theAEKeyword,
525 desiredType,
526 &result);
527 if (_err != noErr) return PyMac_Error(_err);
528 _res = Py_BuildValue("O&",
529 AEDesc_New, &result);
530 return _res;
531}
532
533static PyObject *AEDesc_AESizeOfAttribute(_self, _args)
534 AEDescObject *_self;
535 PyObject *_args;
536{
537 PyObject *_res = NULL;
538 OSErr _err;
539 AEKeyword theAEKeyword;
540 DescType typeCode;
541 Size dataSize;
542 if (!PyArg_ParseTuple(_args, "O&",
543 PyMac_GetOSType, &theAEKeyword))
544 return NULL;
545 _err = AESizeOfAttribute(&_self->ob_itself,
546 theAEKeyword,
547 &typeCode,
548 &dataSize);
549 if (_err != noErr) return PyMac_Error(_err);
550 _res = Py_BuildValue("O&l",
551 PyMac_BuildOSType, typeCode,
552 dataSize);
553 return _res;
554}
555
556static PyObject *AEDesc_AEPutAttributePtr(_self, _args)
557 AEDescObject *_self;
558 PyObject *_args;
559{
560 PyObject *_res = NULL;
561 OSErr _err;
562 AEKeyword theAEKeyword;
563 DescType typeCode;
564 char *dataPtr__in__;
565 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000566 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000567 if (!PyArg_ParseTuple(_args, "O&O&s#",
568 PyMac_GetOSType, &theAEKeyword,
569 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000570 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000571 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000572 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000573 _err = AEPutAttributePtr(&_self->ob_itself,
574 theAEKeyword,
575 typeCode,
576 dataPtr__in__, dataPtr__len__);
577 if (_err != noErr) return PyMac_Error(_err);
578 Py_INCREF(Py_None);
579 _res = Py_None;
580 dataPtr__error__: ;
581 return _res;
582}
583
584static PyObject *AEDesc_AEPutAttributeDesc(_self, _args)
585 AEDescObject *_self;
586 PyObject *_args;
587{
588 PyObject *_res = NULL;
589 OSErr _err;
590 AEKeyword theAEKeyword;
591 AEDesc theAEDesc;
592 if (!PyArg_ParseTuple(_args, "O&O&",
593 PyMac_GetOSType, &theAEKeyword,
594 AEDesc_Convert, &theAEDesc))
595 return NULL;
596 _err = AEPutAttributeDesc(&_self->ob_itself,
597 theAEKeyword,
598 &theAEDesc);
599 if (_err != noErr) return PyMac_Error(_err);
600 Py_INCREF(Py_None);
601 _res = Py_None;
602 return _res;
603}
604
605static PyObject *AEDesc_AESend(_self, _args)
606 AEDescObject *_self;
607 PyObject *_args;
608{
609 PyObject *_res = NULL;
610 OSErr _err;
611 AppleEvent reply;
612 AESendMode sendMode;
613 AESendPriority sendPriority;
614 long timeOutInTicks;
615 if (!PyArg_ParseTuple(_args, "lhl",
616 &sendMode,
617 &sendPriority,
618 &timeOutInTicks))
619 return NULL;
620 _err = AESend(&_self->ob_itself,
621 &reply,
622 sendMode,
623 sendPriority,
624 timeOutInTicks,
Guido van Rossumb19a6451995-02-05 16:58:33 +0000625 upp_AEIdleProc,
626 (AEFilterUPP)0);
Guido van Rossum17448e21995-01-30 11:53:55 +0000627 if (_err != noErr) return PyMac_Error(_err);
628 _res = Py_BuildValue("O&",
629 AEDesc_New, &reply);
630 return _res;
631}
632
633static PyObject *AEDesc_AEResetTimer(_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 = AEResetTimer(&_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_AESuspendTheCurrentEvent(_self, _args)
649 AEDescObject *_self;
650 PyObject *_args;
651{
652 PyObject *_res = NULL;
653 OSErr _err;
654 if (!PyArg_ParseTuple(_args, ""))
655 return NULL;
656 _err = AESuspendTheCurrentEvent(&_self->ob_itself);
657 if (_err != noErr) return PyMac_Error(_err);
658 Py_INCREF(Py_None);
659 _res = Py_None;
660 return _res;
661}
662
663static PyObject *AEDesc_AEResumeTheCurrentEvent(_self, _args)
664 AEDescObject *_self;
665 PyObject *_args;
666{
667 PyObject *_res = NULL;
668 OSErr _err;
669 AppleEvent reply;
Jack Jansen50501991995-07-29 13:58:41 +0000670 AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler;
671 PyObject *dispatcher;
672 if (!PyArg_ParseTuple(_args, "O&O",
Guido van Rossum17448e21995-01-30 11:53:55 +0000673 AEDesc_Convert, &reply,
Jack Jansen50501991995-07-29 13:58:41 +0000674 &dispatcher))
Guido van Rossum17448e21995-01-30 11:53:55 +0000675 return NULL;
676 _err = AEResumeTheCurrentEvent(&_self->ob_itself,
677 &reply,
Jack Jansen50501991995-07-29 13:58:41 +0000678 dispatcher__proc__, (long)dispatcher);
Guido van Rossum17448e21995-01-30 11:53:55 +0000679 if (_err != noErr) return PyMac_Error(_err);
680 Py_INCREF(Py_None);
681 _res = Py_None;
Jack Jansen50501991995-07-29 13:58:41 +0000682 Py_INCREF(dispatcher); /* XXX leak, but needed */
Jack Jansenc7cfb951995-06-05 22:34:12 +0000683 return _res;
684}
685
686static PyObject *AEDesc_AEGetTheCurrentEvent(_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 = AEGetTheCurrentEvent(&_self->ob_itself);
695 if (_err != noErr) return PyMac_Error(_err);
696 Py_INCREF(Py_None);
697 _res = Py_None;
Guido van Rossum17448e21995-01-30 11:53:55 +0000698 return _res;
699}
700
701static PyObject *AEDesc_AESetTheCurrentEvent(_self, _args)
702 AEDescObject *_self;
703 PyObject *_args;
704{
705 PyObject *_res = NULL;
706 OSErr _err;
707 if (!PyArg_ParseTuple(_args, ""))
708 return NULL;
709 _err = AESetTheCurrentEvent(&_self->ob_itself);
710 if (_err != noErr) return PyMac_Error(_err);
711 Py_INCREF(Py_None);
712 _res = Py_None;
713 return _res;
714}
715
716static PyMethodDef AEDesc_methods[] = {
717 {"AECoerceDesc", (PyCFunction)AEDesc_AECoerceDesc, 1,
718 "(DescType toType) -> (AEDesc result)"},
719 {"AEDuplicateDesc", (PyCFunction)AEDesc_AEDuplicateDesc, 1,
720 "() -> (AEDesc result)"},
721 {"AECountItems", (PyCFunction)AEDesc_AECountItems, 1,
722 "() -> (long theCount)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000723 {"AEPutPtr", (PyCFunction)AEDesc_AEPutPtr, 1,
724 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
725 {"AEPutDesc", (PyCFunction)AEDesc_AEPutDesc, 1,
726 "(long index, AEDesc theAEDesc) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000727 {"AEGetNthPtr", (PyCFunction)AEDesc_AEGetNthPtr, 1,
728 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
729 {"AEGetNthDesc", (PyCFunction)AEDesc_AEGetNthDesc, 1,
730 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
731 {"AESizeOfNthItem", (PyCFunction)AEDesc_AESizeOfNthItem, 1,
732 "(long index) -> (DescType typeCode, Size dataSize)"},
Jack Jansen5ae5fdf1995-07-17 11:40:10 +0000733 {"AEDeleteItem", (PyCFunction)AEDesc_AEDeleteItem, 1,
734 "(long index) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000735 {"AEPutParamPtr", (PyCFunction)AEDesc_AEPutParamPtr, 1,
736 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
737 {"AEPutParamDesc", (PyCFunction)AEDesc_AEPutParamDesc, 1,
738 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
739 {"AEGetParamPtr", (PyCFunction)AEDesc_AEGetParamPtr, 1,
740 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
741 {"AEGetParamDesc", (PyCFunction)AEDesc_AEGetParamDesc, 1,
742 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
743 {"AESizeOfParam", (PyCFunction)AEDesc_AESizeOfParam, 1,
744 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
745 {"AEDeleteParam", (PyCFunction)AEDesc_AEDeleteParam, 1,
746 "(AEKeyword theAEKeyword) -> None"},
747 {"AEGetAttributePtr", (PyCFunction)AEDesc_AEGetAttributePtr, 1,
748 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
749 {"AEGetAttributeDesc", (PyCFunction)AEDesc_AEGetAttributeDesc, 1,
750 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
751 {"AESizeOfAttribute", (PyCFunction)AEDesc_AESizeOfAttribute, 1,
752 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
753 {"AEPutAttributePtr", (PyCFunction)AEDesc_AEPutAttributePtr, 1,
754 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
755 {"AEPutAttributeDesc", (PyCFunction)AEDesc_AEPutAttributeDesc, 1,
756 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
757 {"AESend", (PyCFunction)AEDesc_AESend, 1,
758 "(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)"},
759 {"AEResetTimer", (PyCFunction)AEDesc_AEResetTimer, 1,
760 "() -> None"},
761 {"AESuspendTheCurrentEvent", (PyCFunction)AEDesc_AESuspendTheCurrentEvent, 1,
762 "() -> None"},
763 {"AEResumeTheCurrentEvent", (PyCFunction)AEDesc_AEResumeTheCurrentEvent, 1,
Jack Jansen50501991995-07-29 13:58:41 +0000764 "(AppleEvent reply, EventHandler dispatcher) -> None"},
Jack Jansenc7cfb951995-06-05 22:34:12 +0000765 {"AEGetTheCurrentEvent", (PyCFunction)AEDesc_AEGetTheCurrentEvent, 1,
766 "() -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000767 {"AESetTheCurrentEvent", (PyCFunction)AEDesc_AESetTheCurrentEvent, 1,
768 "() -> None"},
769 {NULL, NULL, 0}
770};
771
772static PyMethodChain AEDesc_chain = { AEDesc_methods, NULL };
773
774static PyObject *AEDesc_getattr(self, name)
775 AEDescObject *self;
776 char *name;
777{
778
779 if (strcmp(name, "type") == 0)
780 return PyMac_BuildOSType(self->ob_itself.descriptorType);
781 if (strcmp(name, "data") == 0) {
782 PyObject *res;
783 char state;
784 state = HGetState(self->ob_itself.dataHandle);
785 HLock(self->ob_itself.dataHandle);
786 res = PyString_FromStringAndSize(
787 *self->ob_itself.dataHandle,
788 GetHandleSize(self->ob_itself.dataHandle));
789 HUnlock(self->ob_itself.dataHandle);
790 HSetState(self->ob_itself.dataHandle, state);
791 return res;
792 }
793 if (strcmp(name, "__members__") == 0)
794 return Py_BuildValue("[ss]", "data", "type");
795
796 return Py_FindMethodInChain(&AEDesc_chain, (PyObject *)self, name);
797}
798
799#define AEDesc_setattr NULL
800
Guido van Rossum97842951995-02-19 15:59:49 +0000801staticforward PyTypeObject AEDesc_Type = {
Guido van Rossum17448e21995-01-30 11:53:55 +0000802 PyObject_HEAD_INIT(&PyType_Type)
803 0, /*ob_size*/
804 "AEDesc", /*tp_name*/
805 sizeof(AEDescObject), /*tp_basicsize*/
806 0, /*tp_itemsize*/
807 /* methods */
808 (destructor) AEDesc_dealloc, /*tp_dealloc*/
809 0, /*tp_print*/
810 (getattrfunc) AEDesc_getattr, /*tp_getattr*/
811 (setattrfunc) AEDesc_setattr, /*tp_setattr*/
812};
813
814/* --------------------- End object type AEDesc --------------------- */
815
816
817static PyObject *AE_AECreateDesc(_self, _args)
818 PyObject *_self;
819 PyObject *_args;
820{
821 PyObject *_res = NULL;
822 OSErr _err;
823 DescType typeCode;
824 char *dataPtr__in__;
825 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000826 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000827 AEDesc result;
828 if (!PyArg_ParseTuple(_args, "O&s#",
829 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000830 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000831 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000832 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000833 _err = AECreateDesc(typeCode,
834 dataPtr__in__, dataPtr__len__,
835 &result);
836 if (_err != noErr) return PyMac_Error(_err);
837 _res = Py_BuildValue("O&",
838 AEDesc_New, &result);
839 dataPtr__error__: ;
840 return _res;
841}
842
843static PyObject *AE_AECoercePtr(_self, _args)
844 PyObject *_self;
845 PyObject *_args;
846{
847 PyObject *_res = NULL;
848 OSErr _err;
849 DescType typeCode;
850 char *dataPtr__in__;
851 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000852 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000853 DescType toType;
854 AEDesc result;
855 if (!PyArg_ParseTuple(_args, "O&s#O&",
856 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000857 &dataPtr__in__, &dataPtr__in_len__,
Guido van Rossum17448e21995-01-30 11:53:55 +0000858 PyMac_GetOSType, &toType))
859 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000860 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000861 _err = AECoercePtr(typeCode,
862 dataPtr__in__, dataPtr__len__,
863 toType,
864 &result);
865 if (_err != noErr) return PyMac_Error(_err);
866 _res = Py_BuildValue("O&",
867 AEDesc_New, &result);
868 dataPtr__error__: ;
869 return _res;
870}
871
872static PyObject *AE_AECreateList(_self, _args)
873 PyObject *_self;
874 PyObject *_args;
875{
876 PyObject *_res = NULL;
877 OSErr _err;
878 char *factoringPtr__in__;
879 long factoringPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000880 int factoringPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000881 Boolean isRecord;
882 AEDescList resultList;
883 if (!PyArg_ParseTuple(_args, "s#b",
Guido van Rossum97842951995-02-19 15:59:49 +0000884 &factoringPtr__in__, &factoringPtr__in_len__,
Guido van Rossum17448e21995-01-30 11:53:55 +0000885 &isRecord))
886 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000887 factoringPtr__len__ = factoringPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000888 _err = AECreateList(factoringPtr__in__, factoringPtr__len__,
889 isRecord,
890 &resultList);
891 if (_err != noErr) return PyMac_Error(_err);
892 _res = Py_BuildValue("O&",
893 AEDesc_New, &resultList);
894 factoringPtr__error__: ;
895 return _res;
896}
897
898static PyObject *AE_AECreateAppleEvent(_self, _args)
899 PyObject *_self;
900 PyObject *_args;
901{
902 PyObject *_res = NULL;
903 OSErr _err;
904 AEEventClass theAEEventClass;
905 AEEventID theAEEventID;
906 AEAddressDesc target;
907 short returnID;
908 long transactionID;
909 AppleEvent result;
910 if (!PyArg_ParseTuple(_args, "O&O&O&hl",
911 PyMac_GetOSType, &theAEEventClass,
912 PyMac_GetOSType, &theAEEventID,
913 AEDesc_Convert, &target,
914 &returnID,
915 &transactionID))
916 return NULL;
917 _err = AECreateAppleEvent(theAEEventClass,
918 theAEEventID,
919 &target,
920 returnID,
921 transactionID,
922 &result);
923 if (_err != noErr) return PyMac_Error(_err);
924 _res = Py_BuildValue("O&",
925 AEDesc_New, &result);
926 return _res;
927}
928
929static PyObject *AE_AEProcessAppleEvent(_self, _args)
930 PyObject *_self;
931 PyObject *_args;
932{
933 PyObject *_res = NULL;
934 OSErr _err;
935 EventRecord theEventRecord;
936 if (!PyArg_ParseTuple(_args, "O&",
937 PyMac_GetEventRecord, &theEventRecord))
938 return NULL;
939 _err = AEProcessAppleEvent(&theEventRecord);
940 if (_err != noErr) return PyMac_Error(_err);
941 Py_INCREF(Py_None);
942 _res = Py_None;
943 return _res;
944}
945
Guido van Rossum17448e21995-01-30 11:53:55 +0000946static PyObject *AE_AEGetInteractionAllowed(_self, _args)
947 PyObject *_self;
948 PyObject *_args;
949{
950 PyObject *_res = NULL;
951 OSErr _err;
952 AEInteractAllowed level;
953 if (!PyArg_ParseTuple(_args, ""))
954 return NULL;
955 _err = AEGetInteractionAllowed(&level);
956 if (_err != noErr) return PyMac_Error(_err);
957 _res = Py_BuildValue("b",
958 level);
959 return _res;
960}
961
962static PyObject *AE_AESetInteractionAllowed(_self, _args)
963 PyObject *_self;
964 PyObject *_args;
965{
966 PyObject *_res = NULL;
967 OSErr _err;
968 AEInteractAllowed level;
969 if (!PyArg_ParseTuple(_args, "b",
970 &level))
971 return NULL;
972 _err = AESetInteractionAllowed(level);
973 if (_err != noErr) return PyMac_Error(_err);
974 Py_INCREF(Py_None);
975 _res = Py_None;
976 return _res;
977}
978
979static PyObject *AE_AEInteractWithUser(_self, _args)
980 PyObject *_self;
981 PyObject *_args;
982{
983 PyObject *_res = NULL;
984 OSErr _err;
985 long timeOutInTicks;
986 if (!PyArg_ParseTuple(_args, "l",
987 &timeOutInTicks))
988 return NULL;
989 _err = AEInteractWithUser(timeOutInTicks,
990 (NMRecPtr)0,
Guido van Rossumb19a6451995-02-05 16:58:33 +0000991 upp_AEIdleProc);
Guido van Rossum17448e21995-01-30 11:53:55 +0000992 if (_err != noErr) return PyMac_Error(_err);
993 Py_INCREF(Py_None);
994 _res = Py_None;
995 return _res;
996}
997
998static PyObject *AE_AEInstallEventHandler(_self, _args)
999 PyObject *_self;
1000 PyObject *_args;
1001{
1002 PyObject *_res = NULL;
1003 OSErr _err;
1004 AEEventClass theAEEventClass;
1005 AEEventID theAEEventID;
Jack Jansen50501991995-07-29 13:58:41 +00001006 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
1007 PyObject *handler;
1008 if (!PyArg_ParseTuple(_args, "O&O&O",
Guido van Rossum17448e21995-01-30 11:53:55 +00001009 PyMac_GetOSType, &theAEEventClass,
1010 PyMac_GetOSType, &theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +00001011 &handler))
Guido van Rossum17448e21995-01-30 11:53:55 +00001012 return NULL;
1013 _err = AEInstallEventHandler(theAEEventClass,
1014 theAEEventID,
Jack Jansen50501991995-07-29 13:58:41 +00001015 handler__proc__, (long)handler,
Guido van Rossum17448e21995-01-30 11:53:55 +00001016 0);
1017 if (_err != noErr) return PyMac_Error(_err);
1018 Py_INCREF(Py_None);
1019 _res = Py_None;
Jack Jansen50501991995-07-29 13:58:41 +00001020 Py_INCREF(handler); /* XXX leak, but needed */
Guido van Rossum17448e21995-01-30 11:53:55 +00001021 return _res;
1022}
1023
1024static PyObject *AE_AERemoveEventHandler(_self, _args)
1025 PyObject *_self;
1026 PyObject *_args;
1027{
1028 PyObject *_res = NULL;
1029 OSErr _err;
1030 AEEventClass theAEEventClass;
1031 AEEventID theAEEventID;
1032 if (!PyArg_ParseTuple(_args, "O&O&",
1033 PyMac_GetOSType, &theAEEventClass,
1034 PyMac_GetOSType, &theAEEventID))
1035 return NULL;
1036 _err = AERemoveEventHandler(theAEEventClass,
1037 theAEEventID,
Guido van Rossumb19a6451995-02-05 16:58:33 +00001038 upp_GenericEventHandler,
Guido van Rossum17448e21995-01-30 11:53:55 +00001039 0);
1040 if (_err != noErr) return PyMac_Error(_err);
1041 Py_INCREF(Py_None);
1042 _res = Py_None;
1043 return _res;
1044}
1045
Jack Jansen50501991995-07-29 13:58:41 +00001046static PyObject *AE_AEGetEventHandler(_self, _args)
1047 PyObject *_self;
1048 PyObject *_args;
1049{
1050 PyObject *_res = NULL;
1051 OSErr _err;
1052 AEEventClass theAEEventClass;
1053 AEEventID theAEEventID;
1054 long procptr, handlerptr;
1055
1056 if (!PyArg_ParseTuple(_args, "O&O&",
1057 PyMac_GetOSType, &theAEEventClass,
1058 PyMac_GetOSType, &theAEEventID))
1059 return NULL;
1060 _err = AEGetEventHandler(theAEEventClass,
1061 theAEEventID,
1062 (AEEventHandlerUPP *)&procptr, &handlerptr,
1063 0);
1064 if (_err != noErr) return PyMac_Error(_err);
1065 _res = Py_BuildValue("ll",
1066 (long)procptr, (long)handlerptr);
1067 return _res;
1068}
1069
Guido van Rossum17448e21995-01-30 11:53:55 +00001070static PyObject *AE_AEManagerInfo(_self, _args)
1071 PyObject *_self;
1072 PyObject *_args;
1073{
1074 PyObject *_res = NULL;
1075 OSErr _err;
1076 AEKeyword keyWord;
1077 long result;
1078 if (!PyArg_ParseTuple(_args, "O&",
1079 PyMac_GetOSType, &keyWord))
1080 return NULL;
1081 _err = AEManagerInfo(keyWord,
1082 &result);
1083 if (_err != noErr) return PyMac_Error(_err);
1084 _res = Py_BuildValue("l",
1085 result);
1086 return _res;
1087}
1088
1089static PyMethodDef AE_methods[] = {
1090 {"AECreateDesc", (PyCFunction)AE_AECreateDesc, 1,
1091 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1092 {"AECoercePtr", (PyCFunction)AE_AECoercePtr, 1,
1093 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1094 {"AECreateList", (PyCFunction)AE_AECreateList, 1,
1095 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1096 {"AECreateAppleEvent", (PyCFunction)AE_AECreateAppleEvent, 1,
1097 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, short returnID, long transactionID) -> (AppleEvent result)"},
1098 {"AEProcessAppleEvent", (PyCFunction)AE_AEProcessAppleEvent, 1,
1099 "(EventRecord theEventRecord) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001100 {"AEGetInteractionAllowed", (PyCFunction)AE_AEGetInteractionAllowed, 1,
1101 "() -> (AEInteractAllowed level)"},
1102 {"AESetInteractionAllowed", (PyCFunction)AE_AESetInteractionAllowed, 1,
1103 "(AEInteractAllowed level) -> None"},
1104 {"AEInteractWithUser", (PyCFunction)AE_AEInteractWithUser, 1,
1105 "(long timeOutInTicks) -> None"},
1106 {"AEInstallEventHandler", (PyCFunction)AE_AEInstallEventHandler, 1,
Jack Jansen50501991995-07-29 13:58:41 +00001107 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001108 {"AERemoveEventHandler", (PyCFunction)AE_AERemoveEventHandler, 1,
1109 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
Jack Jansen50501991995-07-29 13:58:41 +00001110 {"AEGetEventHandler", (PyCFunction)AE_AEGetEventHandler, 1,
1111 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001112 {"AEManagerInfo", (PyCFunction)AE_AEManagerInfo, 1,
1113 "(AEKeyword keyWord) -> (long result)"},
1114 {NULL, NULL, 0}
1115};
1116
1117
1118
1119static pascal OSErr
Guido van Rossum97842951995-02-19 15:59:49 +00001120GenericEventHandler(AppleEvent *request, AppleEvent *reply, long refcon)
Guido van Rossum17448e21995-01-30 11:53:55 +00001121{
1122 PyObject *handler = (PyObject *)refcon;
1123 AEDescObject *requestObject, *replyObject;
1124 PyObject *args, *res;
1125 if ((requestObject = (AEDescObject *)AEDesc_New(request)) == NULL) {
1126 return -1;
1127 }
1128 if ((replyObject = (AEDescObject *)AEDesc_New(reply)) == NULL) {
1129 Py_DECREF(requestObject);
1130 return -1;
1131 }
1132 if ((args = Py_BuildValue("OO", requestObject, replyObject)) == NULL) {
1133 Py_DECREF(requestObject);
1134 Py_DECREF(replyObject);
1135 return -1;
1136 }
1137 res = PyEval_CallObject(handler, args);
1138 requestObject->ob_itself.descriptorType = 'null';
1139 requestObject->ob_itself.dataHandle = NULL;
1140 replyObject->ob_itself.descriptorType = 'null';
1141 replyObject->ob_itself.dataHandle = NULL;
1142 Py_DECREF(args);
1143 if (res == NULL)
1144 return -1;
1145 Py_DECREF(res);
1146 return noErr;
1147}
1148
1149
1150void initAE()
1151{
1152 PyObject *m;
1153 PyObject *d;
1154
1155
1156
Guido van Rossumb19a6451995-02-05 16:58:33 +00001157 upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
1158 upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
1159
Guido van Rossum17448e21995-01-30 11:53:55 +00001160
1161 m = Py_InitModule("AE", AE_methods);
1162 d = PyModule_GetDict(m);
1163 AE_Error = PyMac_GetOSErrException();
1164 if (AE_Error == NULL ||
1165 PyDict_SetItemString(d, "Error", AE_Error) != 0)
1166 Py_FatalError("can't initialize AE.Error");
1167}
1168
1169/* ========================= End module AE ========================== */
1170