blob: dc2fc7de2eb4cc5b7ea7b97a32fbba8e9501da80 [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{
65 (void) PyMac_Idle();
66 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
167static 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__;
Guido van Rossum97842951995-02-19 15:59:49 +0000177 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000178 if (!PyArg_ParseTuple(_args, "lO&s#",
179 &index,
180 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000181 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000182 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000183 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000184 _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
216static 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
305static 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
323static PyObject *AEDesc_AEPutKeyPtr(_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 = AEPutKeyPtr(&_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_AEPutKeyDesc(_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 = AEPutKeyDesc(&_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_AEGetKeyPtr(_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 = AEGetKeyPtr(&_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_AEGetKeyDesc(_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 = AEGetKeyDesc(&_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_AESizeOfKeyDesc(_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 = AESizeOfKeyDesc(&_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_AEDeleteKeyDesc(_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 = AEDeleteKeyDesc(&_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_AEPutParamPtr(_self, _args)
474 AEDescObject *_self;
475 PyObject *_args;
476{
477 PyObject *_res = NULL;
478 OSErr _err;
479 AEKeyword theAEKeyword;
480 DescType typeCode;
481 char *dataPtr__in__;
482 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000483 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000484 if (!PyArg_ParseTuple(_args, "O&O&s#",
485 PyMac_GetOSType, &theAEKeyword,
486 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000487 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000488 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000489 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000490 _err = AEPutParamPtr(&_self->ob_itself,
491 theAEKeyword,
492 typeCode,
493 dataPtr__in__, dataPtr__len__);
494 if (_err != noErr) return PyMac_Error(_err);
495 Py_INCREF(Py_None);
496 _res = Py_None;
497 dataPtr__error__: ;
498 return _res;
499}
500
501static PyObject *AEDesc_AEPutParamDesc(_self, _args)
502 AEDescObject *_self;
503 PyObject *_args;
504{
505 PyObject *_res = NULL;
506 OSErr _err;
507 AEKeyword theAEKeyword;
508 AEDesc theAEDesc;
509 if (!PyArg_ParseTuple(_args, "O&O&",
510 PyMac_GetOSType, &theAEKeyword,
511 AEDesc_Convert, &theAEDesc))
512 return NULL;
513 _err = AEPutParamDesc(&_self->ob_itself,
514 theAEKeyword,
515 &theAEDesc);
516 if (_err != noErr) return PyMac_Error(_err);
517 Py_INCREF(Py_None);
518 _res = Py_None;
519 return _res;
520}
521
522static PyObject *AEDesc_AEGetParamPtr(_self, _args)
523 AEDescObject *_self;
524 PyObject *_args;
525{
526 PyObject *_res = NULL;
527 OSErr _err;
528 AEKeyword theAEKeyword;
529 DescType desiredType;
530 DescType typeCode;
531 char *dataPtr__out__;
532 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000533 int dataPtr__in_len__;
534 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000535 PyMac_GetOSType, &theAEKeyword,
536 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000537 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000538 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000539 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000540 {
541 PyErr_NoMemory();
542 goto dataPtr__error__;
543 }
Guido van Rossum97842951995-02-19 15:59:49 +0000544 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000545 _err = AEGetParamPtr(&_self->ob_itself,
546 theAEKeyword,
547 desiredType,
548 &typeCode,
549 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
550 if (_err != noErr) return PyMac_Error(_err);
551 _res = Py_BuildValue("O&s#",
552 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000553 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000554 free(dataPtr__out__);
555 dataPtr__error__: ;
556 return _res;
557}
558
559static PyObject *AEDesc_AEGetParamDesc(_self, _args)
560 AEDescObject *_self;
561 PyObject *_args;
562{
563 PyObject *_res = NULL;
564 OSErr _err;
565 AEKeyword theAEKeyword;
566 DescType desiredType;
567 AEDesc result;
568 if (!PyArg_ParseTuple(_args, "O&O&",
569 PyMac_GetOSType, &theAEKeyword,
570 PyMac_GetOSType, &desiredType))
571 return NULL;
572 _err = AEGetParamDesc(&_self->ob_itself,
573 theAEKeyword,
574 desiredType,
575 &result);
576 if (_err != noErr) return PyMac_Error(_err);
577 _res = Py_BuildValue("O&",
578 AEDesc_New, &result);
579 return _res;
580}
581
582static PyObject *AEDesc_AESizeOfParam(_self, _args)
583 AEDescObject *_self;
584 PyObject *_args;
585{
586 PyObject *_res = NULL;
587 OSErr _err;
588 AEKeyword theAEKeyword;
589 DescType typeCode;
590 Size dataSize;
591 if (!PyArg_ParseTuple(_args, "O&",
592 PyMac_GetOSType, &theAEKeyword))
593 return NULL;
594 _err = AESizeOfParam(&_self->ob_itself,
595 theAEKeyword,
596 &typeCode,
597 &dataSize);
598 if (_err != noErr) return PyMac_Error(_err);
599 _res = Py_BuildValue("O&l",
600 PyMac_BuildOSType, typeCode,
601 dataSize);
602 return _res;
603}
604
605static PyObject *AEDesc_AEDeleteParam(_self, _args)
606 AEDescObject *_self;
607 PyObject *_args;
608{
609 PyObject *_res = NULL;
610 OSErr _err;
611 AEKeyword theAEKeyword;
612 if (!PyArg_ParseTuple(_args, "O&",
613 PyMac_GetOSType, &theAEKeyword))
614 return NULL;
615 _err = AEDeleteParam(&_self->ob_itself,
616 theAEKeyword);
617 if (_err != noErr) return PyMac_Error(_err);
618 Py_INCREF(Py_None);
619 _res = Py_None;
620 return _res;
621}
622
623static PyObject *AEDesc_AEGetAttributePtr(_self, _args)
624 AEDescObject *_self;
625 PyObject *_args;
626{
627 PyObject *_res = NULL;
628 OSErr _err;
629 AEKeyword theAEKeyword;
630 DescType desiredType;
631 DescType typeCode;
632 char *dataPtr__out__;
633 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000634 int dataPtr__in_len__;
635 if (!PyArg_ParseTuple(_args, "O&O&i",
Guido van Rossum17448e21995-01-30 11:53:55 +0000636 PyMac_GetOSType, &theAEKeyword,
637 PyMac_GetOSType, &desiredType,
Guido van Rossum97842951995-02-19 15:59:49 +0000638 &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000639 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000640 if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
Guido van Rossum17448e21995-01-30 11:53:55 +0000641 {
642 PyErr_NoMemory();
643 goto dataPtr__error__;
644 }
Guido van Rossum97842951995-02-19 15:59:49 +0000645 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000646 _err = AEGetAttributePtr(&_self->ob_itself,
647 theAEKeyword,
648 desiredType,
649 &typeCode,
650 dataPtr__out__, dataPtr__len__, &dataPtr__len__);
651 if (_err != noErr) return PyMac_Error(_err);
652 _res = Py_BuildValue("O&s#",
653 PyMac_BuildOSType, typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000654 dataPtr__out__, (int)dataPtr__len__);
Guido van Rossum17448e21995-01-30 11:53:55 +0000655 free(dataPtr__out__);
656 dataPtr__error__: ;
657 return _res;
658}
659
660static PyObject *AEDesc_AEGetAttributeDesc(_self, _args)
661 AEDescObject *_self;
662 PyObject *_args;
663{
664 PyObject *_res = NULL;
665 OSErr _err;
666 AEKeyword theAEKeyword;
667 DescType desiredType;
668 AEDesc result;
669 if (!PyArg_ParseTuple(_args, "O&O&",
670 PyMac_GetOSType, &theAEKeyword,
671 PyMac_GetOSType, &desiredType))
672 return NULL;
673 _err = AEGetAttributeDesc(&_self->ob_itself,
674 theAEKeyword,
675 desiredType,
676 &result);
677 if (_err != noErr) return PyMac_Error(_err);
678 _res = Py_BuildValue("O&",
679 AEDesc_New, &result);
680 return _res;
681}
682
683static PyObject *AEDesc_AESizeOfAttribute(_self, _args)
684 AEDescObject *_self;
685 PyObject *_args;
686{
687 PyObject *_res = NULL;
688 OSErr _err;
689 AEKeyword theAEKeyword;
690 DescType typeCode;
691 Size dataSize;
692 if (!PyArg_ParseTuple(_args, "O&",
693 PyMac_GetOSType, &theAEKeyword))
694 return NULL;
695 _err = AESizeOfAttribute(&_self->ob_itself,
696 theAEKeyword,
697 &typeCode,
698 &dataSize);
699 if (_err != noErr) return PyMac_Error(_err);
700 _res = Py_BuildValue("O&l",
701 PyMac_BuildOSType, typeCode,
702 dataSize);
703 return _res;
704}
705
706static PyObject *AEDesc_AEPutAttributePtr(_self, _args)
707 AEDescObject *_self;
708 PyObject *_args;
709{
710 PyObject *_res = NULL;
711 OSErr _err;
712 AEKeyword theAEKeyword;
713 DescType typeCode;
714 char *dataPtr__in__;
715 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000716 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000717 if (!PyArg_ParseTuple(_args, "O&O&s#",
718 PyMac_GetOSType, &theAEKeyword,
719 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000720 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000721 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000722 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000723 _err = AEPutAttributePtr(&_self->ob_itself,
724 theAEKeyword,
725 typeCode,
726 dataPtr__in__, dataPtr__len__);
727 if (_err != noErr) return PyMac_Error(_err);
728 Py_INCREF(Py_None);
729 _res = Py_None;
730 dataPtr__error__: ;
731 return _res;
732}
733
734static PyObject *AEDesc_AEPutAttributeDesc(_self, _args)
735 AEDescObject *_self;
736 PyObject *_args;
737{
738 PyObject *_res = NULL;
739 OSErr _err;
740 AEKeyword theAEKeyword;
741 AEDesc theAEDesc;
742 if (!PyArg_ParseTuple(_args, "O&O&",
743 PyMac_GetOSType, &theAEKeyword,
744 AEDesc_Convert, &theAEDesc))
745 return NULL;
746 _err = AEPutAttributeDesc(&_self->ob_itself,
747 theAEKeyword,
748 &theAEDesc);
749 if (_err != noErr) return PyMac_Error(_err);
750 Py_INCREF(Py_None);
751 _res = Py_None;
752 return _res;
753}
754
755static PyObject *AEDesc_AESend(_self, _args)
756 AEDescObject *_self;
757 PyObject *_args;
758{
759 PyObject *_res = NULL;
760 OSErr _err;
761 AppleEvent reply;
762 AESendMode sendMode;
763 AESendPriority sendPriority;
764 long timeOutInTicks;
765 if (!PyArg_ParseTuple(_args, "lhl",
766 &sendMode,
767 &sendPriority,
768 &timeOutInTicks))
769 return NULL;
770 _err = AESend(&_self->ob_itself,
771 &reply,
772 sendMode,
773 sendPriority,
774 timeOutInTicks,
Guido van Rossumb19a6451995-02-05 16:58:33 +0000775 upp_AEIdleProc,
776 (AEFilterUPP)0);
Guido van Rossum17448e21995-01-30 11:53:55 +0000777 if (_err != noErr) return PyMac_Error(_err);
778 _res = Py_BuildValue("O&",
779 AEDesc_New, &reply);
780 return _res;
781}
782
783static PyObject *AEDesc_AEResetTimer(_self, _args)
784 AEDescObject *_self;
785 PyObject *_args;
786{
787 PyObject *_res = NULL;
788 OSErr _err;
789 if (!PyArg_ParseTuple(_args, ""))
790 return NULL;
791 _err = AEResetTimer(&_self->ob_itself);
792 if (_err != noErr) return PyMac_Error(_err);
793 Py_INCREF(Py_None);
794 _res = Py_None;
795 return _res;
796}
797
798static PyObject *AEDesc_AESuspendTheCurrentEvent(_self, _args)
799 AEDescObject *_self;
800 PyObject *_args;
801{
802 PyObject *_res = NULL;
803 OSErr _err;
804 if (!PyArg_ParseTuple(_args, ""))
805 return NULL;
806 _err = AESuspendTheCurrentEvent(&_self->ob_itself);
807 if (_err != noErr) return PyMac_Error(_err);
808 Py_INCREF(Py_None);
809 _res = Py_None;
810 return _res;
811}
812
813static PyObject *AEDesc_AEResumeTheCurrentEvent(_self, _args)
814 AEDescObject *_self;
815 PyObject *_args;
816{
817 PyObject *_res = NULL;
818 OSErr _err;
819 AppleEvent reply;
Guido van Rossumb19a6451995-02-05 16:58:33 +0000820 AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler;
Guido van Rossum17448e21995-01-30 11:53:55 +0000821 PyObject *dispatcher;
822 if (!PyArg_ParseTuple(_args, "O&O",
823 AEDesc_Convert, &reply,
824 &dispatcher))
825 return NULL;
826 _err = AEResumeTheCurrentEvent(&_self->ob_itself,
827 &reply,
828 dispatcher__proc__, (long)dispatcher);
829 if (_err != noErr) return PyMac_Error(_err);
830 Py_INCREF(Py_None);
831 _res = Py_None;
Guido van Rossumb19a6451995-02-05 16:58:33 +0000832 Py_INCREF(dispatcher); /* XXX leak, but needed */
Guido van Rossum17448e21995-01-30 11:53:55 +0000833 return _res;
834}
835
836static PyObject *AEDesc_AESetTheCurrentEvent(_self, _args)
837 AEDescObject *_self;
838 PyObject *_args;
839{
840 PyObject *_res = NULL;
841 OSErr _err;
842 if (!PyArg_ParseTuple(_args, ""))
843 return NULL;
844 _err = AESetTheCurrentEvent(&_self->ob_itself);
845 if (_err != noErr) return PyMac_Error(_err);
846 Py_INCREF(Py_None);
847 _res = Py_None;
848 return _res;
849}
850
851static PyMethodDef AEDesc_methods[] = {
852 {"AECoerceDesc", (PyCFunction)AEDesc_AECoerceDesc, 1,
853 "(DescType toType) -> (AEDesc result)"},
854 {"AEDuplicateDesc", (PyCFunction)AEDesc_AEDuplicateDesc, 1,
855 "() -> (AEDesc result)"},
856 {"AECountItems", (PyCFunction)AEDesc_AECountItems, 1,
857 "() -> (long theCount)"},
858 {"AEPutPtr", (PyCFunction)AEDesc_AEPutPtr, 1,
859 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
860 {"AEPutDesc", (PyCFunction)AEDesc_AEPutDesc, 1,
861 "(long index, AEDesc theAEDesc) -> None"},
862 {"AEGetNthPtr", (PyCFunction)AEDesc_AEGetNthPtr, 1,
863 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
864 {"AEGetNthDesc", (PyCFunction)AEDesc_AEGetNthDesc, 1,
865 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
866 {"AESizeOfNthItem", (PyCFunction)AEDesc_AESizeOfNthItem, 1,
867 "(long index) -> (DescType typeCode, Size dataSize)"},
868 {"AEDeleteItem", (PyCFunction)AEDesc_AEDeleteItem, 1,
869 "(long index) -> None"},
870 {"AEPutKeyPtr", (PyCFunction)AEDesc_AEPutKeyPtr, 1,
871 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
872 {"AEPutKeyDesc", (PyCFunction)AEDesc_AEPutKeyDesc, 1,
873 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
874 {"AEGetKeyPtr", (PyCFunction)AEDesc_AEGetKeyPtr, 1,
875 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
876 {"AEGetKeyDesc", (PyCFunction)AEDesc_AEGetKeyDesc, 1,
877 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
878 {"AESizeOfKeyDesc", (PyCFunction)AEDesc_AESizeOfKeyDesc, 1,
879 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
880 {"AEDeleteKeyDesc", (PyCFunction)AEDesc_AEDeleteKeyDesc, 1,
881 "(AEKeyword theAEKeyword) -> None"},
882 {"AEPutParamPtr", (PyCFunction)AEDesc_AEPutParamPtr, 1,
883 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
884 {"AEPutParamDesc", (PyCFunction)AEDesc_AEPutParamDesc, 1,
885 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
886 {"AEGetParamPtr", (PyCFunction)AEDesc_AEGetParamPtr, 1,
887 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
888 {"AEGetParamDesc", (PyCFunction)AEDesc_AEGetParamDesc, 1,
889 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
890 {"AESizeOfParam", (PyCFunction)AEDesc_AESizeOfParam, 1,
891 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
892 {"AEDeleteParam", (PyCFunction)AEDesc_AEDeleteParam, 1,
893 "(AEKeyword theAEKeyword) -> None"},
894 {"AEGetAttributePtr", (PyCFunction)AEDesc_AEGetAttributePtr, 1,
895 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
896 {"AEGetAttributeDesc", (PyCFunction)AEDesc_AEGetAttributeDesc, 1,
897 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
898 {"AESizeOfAttribute", (PyCFunction)AEDesc_AESizeOfAttribute, 1,
899 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
900 {"AEPutAttributePtr", (PyCFunction)AEDesc_AEPutAttributePtr, 1,
901 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
902 {"AEPutAttributeDesc", (PyCFunction)AEDesc_AEPutAttributeDesc, 1,
903 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
904 {"AESend", (PyCFunction)AEDesc_AESend, 1,
905 "(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)"},
906 {"AEResetTimer", (PyCFunction)AEDesc_AEResetTimer, 1,
907 "() -> None"},
908 {"AESuspendTheCurrentEvent", (PyCFunction)AEDesc_AESuspendTheCurrentEvent, 1,
909 "() -> None"},
910 {"AEResumeTheCurrentEvent", (PyCFunction)AEDesc_AEResumeTheCurrentEvent, 1,
911 "(AppleEvent reply, EventHandler dispatcher) -> None"},
912 {"AESetTheCurrentEvent", (PyCFunction)AEDesc_AESetTheCurrentEvent, 1,
913 "() -> None"},
914 {NULL, NULL, 0}
915};
916
917static PyMethodChain AEDesc_chain = { AEDesc_methods, NULL };
918
919static PyObject *AEDesc_getattr(self, name)
920 AEDescObject *self;
921 char *name;
922{
923
924 if (strcmp(name, "type") == 0)
925 return PyMac_BuildOSType(self->ob_itself.descriptorType);
926 if (strcmp(name, "data") == 0) {
927 PyObject *res;
928 char state;
929 state = HGetState(self->ob_itself.dataHandle);
930 HLock(self->ob_itself.dataHandle);
931 res = PyString_FromStringAndSize(
932 *self->ob_itself.dataHandle,
933 GetHandleSize(self->ob_itself.dataHandle));
934 HUnlock(self->ob_itself.dataHandle);
935 HSetState(self->ob_itself.dataHandle, state);
936 return res;
937 }
938 if (strcmp(name, "__members__") == 0)
939 return Py_BuildValue("[ss]", "data", "type");
940
941 return Py_FindMethodInChain(&AEDesc_chain, (PyObject *)self, name);
942}
943
944#define AEDesc_setattr NULL
945
Guido van Rossum97842951995-02-19 15:59:49 +0000946staticforward PyTypeObject AEDesc_Type = {
Guido van Rossum17448e21995-01-30 11:53:55 +0000947 PyObject_HEAD_INIT(&PyType_Type)
948 0, /*ob_size*/
949 "AEDesc", /*tp_name*/
950 sizeof(AEDescObject), /*tp_basicsize*/
951 0, /*tp_itemsize*/
952 /* methods */
953 (destructor) AEDesc_dealloc, /*tp_dealloc*/
954 0, /*tp_print*/
955 (getattrfunc) AEDesc_getattr, /*tp_getattr*/
956 (setattrfunc) AEDesc_setattr, /*tp_setattr*/
957};
958
959/* --------------------- End object type AEDesc --------------------- */
960
961
962static PyObject *AE_AECreateDesc(_self, _args)
963 PyObject *_self;
964 PyObject *_args;
965{
966 PyObject *_res = NULL;
967 OSErr _err;
968 DescType typeCode;
969 char *dataPtr__in__;
970 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000971 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000972 AEDesc result;
973 if (!PyArg_ParseTuple(_args, "O&s#",
974 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +0000975 &dataPtr__in__, &dataPtr__in_len__))
Guido van Rossum17448e21995-01-30 11:53:55 +0000976 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +0000977 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000978 _err = AECreateDesc(typeCode,
979 dataPtr__in__, dataPtr__len__,
980 &result);
981 if (_err != noErr) return PyMac_Error(_err);
982 _res = Py_BuildValue("O&",
983 AEDesc_New, &result);
984 dataPtr__error__: ;
985 return _res;
986}
987
988static PyObject *AE_AECoercePtr(_self, _args)
989 PyObject *_self;
990 PyObject *_args;
991{
992 PyObject *_res = NULL;
993 OSErr _err;
994 DescType typeCode;
995 char *dataPtr__in__;
996 long dataPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +0000997 int dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +0000998 DescType toType;
999 AEDesc result;
1000 if (!PyArg_ParseTuple(_args, "O&s#O&",
1001 PyMac_GetOSType, &typeCode,
Guido van Rossum97842951995-02-19 15:59:49 +00001002 &dataPtr__in__, &dataPtr__in_len__,
Guido van Rossum17448e21995-01-30 11:53:55 +00001003 PyMac_GetOSType, &toType))
1004 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +00001005 dataPtr__len__ = dataPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +00001006 _err = AECoercePtr(typeCode,
1007 dataPtr__in__, dataPtr__len__,
1008 toType,
1009 &result);
1010 if (_err != noErr) return PyMac_Error(_err);
1011 _res = Py_BuildValue("O&",
1012 AEDesc_New, &result);
1013 dataPtr__error__: ;
1014 return _res;
1015}
1016
1017static PyObject *AE_AECreateList(_self, _args)
1018 PyObject *_self;
1019 PyObject *_args;
1020{
1021 PyObject *_res = NULL;
1022 OSErr _err;
1023 char *factoringPtr__in__;
1024 long factoringPtr__len__;
Guido van Rossum97842951995-02-19 15:59:49 +00001025 int factoringPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +00001026 Boolean isRecord;
1027 AEDescList resultList;
1028 if (!PyArg_ParseTuple(_args, "s#b",
Guido van Rossum97842951995-02-19 15:59:49 +00001029 &factoringPtr__in__, &factoringPtr__in_len__,
Guido van Rossum17448e21995-01-30 11:53:55 +00001030 &isRecord))
1031 return NULL;
Guido van Rossum97842951995-02-19 15:59:49 +00001032 factoringPtr__len__ = factoringPtr__in_len__;
Guido van Rossum17448e21995-01-30 11:53:55 +00001033 _err = AECreateList(factoringPtr__in__, factoringPtr__len__,
1034 isRecord,
1035 &resultList);
1036 if (_err != noErr) return PyMac_Error(_err);
1037 _res = Py_BuildValue("O&",
1038 AEDesc_New, &resultList);
1039 factoringPtr__error__: ;
1040 return _res;
1041}
1042
1043static PyObject *AE_AECreateAppleEvent(_self, _args)
1044 PyObject *_self;
1045 PyObject *_args;
1046{
1047 PyObject *_res = NULL;
1048 OSErr _err;
1049 AEEventClass theAEEventClass;
1050 AEEventID theAEEventID;
1051 AEAddressDesc target;
1052 short returnID;
1053 long transactionID;
1054 AppleEvent result;
1055 if (!PyArg_ParseTuple(_args, "O&O&O&hl",
1056 PyMac_GetOSType, &theAEEventClass,
1057 PyMac_GetOSType, &theAEEventID,
1058 AEDesc_Convert, &target,
1059 &returnID,
1060 &transactionID))
1061 return NULL;
1062 _err = AECreateAppleEvent(theAEEventClass,
1063 theAEEventID,
1064 &target,
1065 returnID,
1066 transactionID,
1067 &result);
1068 if (_err != noErr) return PyMac_Error(_err);
1069 _res = Py_BuildValue("O&",
1070 AEDesc_New, &result);
1071 return _res;
1072}
1073
1074static PyObject *AE_AEProcessAppleEvent(_self, _args)
1075 PyObject *_self;
1076 PyObject *_args;
1077{
1078 PyObject *_res = NULL;
1079 OSErr _err;
1080 EventRecord theEventRecord;
1081 if (!PyArg_ParseTuple(_args, "O&",
1082 PyMac_GetEventRecord, &theEventRecord))
1083 return NULL;
1084 _err = AEProcessAppleEvent(&theEventRecord);
1085 if (_err != noErr) return PyMac_Error(_err);
1086 Py_INCREF(Py_None);
1087 _res = Py_None;
1088 return _res;
1089}
1090
1091static PyObject *AE_AEGetTheCurrentEvent(_self, _args)
1092 PyObject *_self;
1093 PyObject *_args;
1094{
1095 PyObject *_res = NULL;
1096 OSErr _err;
1097 AppleEvent theAppleEvent;
1098 if (!PyArg_ParseTuple(_args, ""))
1099 return NULL;
1100 _err = AEGetTheCurrentEvent(&theAppleEvent);
1101 if (_err != noErr) return PyMac_Error(_err);
1102 _res = Py_BuildValue("O&",
1103 AEDesc_New, &theAppleEvent);
1104 return _res;
1105}
1106
1107static PyObject *AE_AEGetInteractionAllowed(_self, _args)
1108 PyObject *_self;
1109 PyObject *_args;
1110{
1111 PyObject *_res = NULL;
1112 OSErr _err;
1113 AEInteractAllowed level;
1114 if (!PyArg_ParseTuple(_args, ""))
1115 return NULL;
1116 _err = AEGetInteractionAllowed(&level);
1117 if (_err != noErr) return PyMac_Error(_err);
1118 _res = Py_BuildValue("b",
1119 level);
1120 return _res;
1121}
1122
1123static PyObject *AE_AESetInteractionAllowed(_self, _args)
1124 PyObject *_self;
1125 PyObject *_args;
1126{
1127 PyObject *_res = NULL;
1128 OSErr _err;
1129 AEInteractAllowed level;
1130 if (!PyArg_ParseTuple(_args, "b",
1131 &level))
1132 return NULL;
1133 _err = AESetInteractionAllowed(level);
1134 if (_err != noErr) return PyMac_Error(_err);
1135 Py_INCREF(Py_None);
1136 _res = Py_None;
1137 return _res;
1138}
1139
1140static PyObject *AE_AEInteractWithUser(_self, _args)
1141 PyObject *_self;
1142 PyObject *_args;
1143{
1144 PyObject *_res = NULL;
1145 OSErr _err;
1146 long timeOutInTicks;
1147 if (!PyArg_ParseTuple(_args, "l",
1148 &timeOutInTicks))
1149 return NULL;
1150 _err = AEInteractWithUser(timeOutInTicks,
1151 (NMRecPtr)0,
Guido van Rossumb19a6451995-02-05 16:58:33 +00001152 upp_AEIdleProc);
Guido van Rossum17448e21995-01-30 11:53:55 +00001153 if (_err != noErr) return PyMac_Error(_err);
1154 Py_INCREF(Py_None);
1155 _res = Py_None;
1156 return _res;
1157}
1158
1159static PyObject *AE_AEInstallEventHandler(_self, _args)
1160 PyObject *_self;
1161 PyObject *_args;
1162{
1163 PyObject *_res = NULL;
1164 OSErr _err;
1165 AEEventClass theAEEventClass;
1166 AEEventID theAEEventID;
Guido van Rossumb19a6451995-02-05 16:58:33 +00001167 AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
Guido van Rossum17448e21995-01-30 11:53:55 +00001168 PyObject *handler;
1169 if (!PyArg_ParseTuple(_args, "O&O&O",
1170 PyMac_GetOSType, &theAEEventClass,
1171 PyMac_GetOSType, &theAEEventID,
1172 &handler))
1173 return NULL;
1174 _err = AEInstallEventHandler(theAEEventClass,
1175 theAEEventID,
1176 handler__proc__, (long)handler,
1177 0);
1178 if (_err != noErr) return PyMac_Error(_err);
1179 Py_INCREF(Py_None);
1180 _res = Py_None;
Guido van Rossumb19a6451995-02-05 16:58:33 +00001181 Py_INCREF(handler); /* XXX leak, but needed */
Guido van Rossum17448e21995-01-30 11:53:55 +00001182 return _res;
1183}
1184
1185static PyObject *AE_AERemoveEventHandler(_self, _args)
1186 PyObject *_self;
1187 PyObject *_args;
1188{
1189 PyObject *_res = NULL;
1190 OSErr _err;
1191 AEEventClass theAEEventClass;
1192 AEEventID theAEEventID;
1193 if (!PyArg_ParseTuple(_args, "O&O&",
1194 PyMac_GetOSType, &theAEEventClass,
1195 PyMac_GetOSType, &theAEEventID))
1196 return NULL;
1197 _err = AERemoveEventHandler(theAEEventClass,
1198 theAEEventID,
Guido van Rossumb19a6451995-02-05 16:58:33 +00001199 upp_GenericEventHandler,
Guido van Rossum17448e21995-01-30 11:53:55 +00001200 0);
1201 if (_err != noErr) return PyMac_Error(_err);
1202 Py_INCREF(Py_None);
1203 _res = Py_None;
1204 return _res;
1205}
1206
1207static PyObject *AE_AEManagerInfo(_self, _args)
1208 PyObject *_self;
1209 PyObject *_args;
1210{
1211 PyObject *_res = NULL;
1212 OSErr _err;
1213 AEKeyword keyWord;
1214 long result;
1215 if (!PyArg_ParseTuple(_args, "O&",
1216 PyMac_GetOSType, &keyWord))
1217 return NULL;
1218 _err = AEManagerInfo(keyWord,
1219 &result);
1220 if (_err != noErr) return PyMac_Error(_err);
1221 _res = Py_BuildValue("l",
1222 result);
1223 return _res;
1224}
1225
1226static PyMethodDef AE_methods[] = {
1227 {"AECreateDesc", (PyCFunction)AE_AECreateDesc, 1,
1228 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1229 {"AECoercePtr", (PyCFunction)AE_AECoercePtr, 1,
1230 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1231 {"AECreateList", (PyCFunction)AE_AECreateList, 1,
1232 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1233 {"AECreateAppleEvent", (PyCFunction)AE_AECreateAppleEvent, 1,
1234 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, short returnID, long transactionID) -> (AppleEvent result)"},
1235 {"AEProcessAppleEvent", (PyCFunction)AE_AEProcessAppleEvent, 1,
1236 "(EventRecord theEventRecord) -> None"},
1237 {"AEGetTheCurrentEvent", (PyCFunction)AE_AEGetTheCurrentEvent, 1,
1238 "() -> (AppleEvent theAppleEvent)"},
1239 {"AEGetInteractionAllowed", (PyCFunction)AE_AEGetInteractionAllowed, 1,
1240 "() -> (AEInteractAllowed level)"},
1241 {"AESetInteractionAllowed", (PyCFunction)AE_AESetInteractionAllowed, 1,
1242 "(AEInteractAllowed level) -> None"},
1243 {"AEInteractWithUser", (PyCFunction)AE_AEInteractWithUser, 1,
1244 "(long timeOutInTicks) -> None"},
1245 {"AEInstallEventHandler", (PyCFunction)AE_AEInstallEventHandler, 1,
1246 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
1247 {"AERemoveEventHandler", (PyCFunction)AE_AERemoveEventHandler, 1,
1248 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
1249 {"AEManagerInfo", (PyCFunction)AE_AEManagerInfo, 1,
1250 "(AEKeyword keyWord) -> (long result)"},
1251 {NULL, NULL, 0}
1252};
1253
1254
1255
1256static pascal OSErr
Guido van Rossum97842951995-02-19 15:59:49 +00001257GenericEventHandler(AppleEvent *request, AppleEvent *reply, long refcon)
Guido van Rossum17448e21995-01-30 11:53:55 +00001258{
1259 PyObject *handler = (PyObject *)refcon;
1260 AEDescObject *requestObject, *replyObject;
1261 PyObject *args, *res;
1262 if ((requestObject = (AEDescObject *)AEDesc_New(request)) == NULL) {
1263 return -1;
1264 }
1265 if ((replyObject = (AEDescObject *)AEDesc_New(reply)) == NULL) {
1266 Py_DECREF(requestObject);
1267 return -1;
1268 }
1269 if ((args = Py_BuildValue("OO", requestObject, replyObject)) == NULL) {
1270 Py_DECREF(requestObject);
1271 Py_DECREF(replyObject);
1272 return -1;
1273 }
1274 res = PyEval_CallObject(handler, args);
1275 requestObject->ob_itself.descriptorType = 'null';
1276 requestObject->ob_itself.dataHandle = NULL;
1277 replyObject->ob_itself.descriptorType = 'null';
1278 replyObject->ob_itself.dataHandle = NULL;
1279 Py_DECREF(args);
1280 if (res == NULL)
1281 return -1;
1282 Py_DECREF(res);
1283 return noErr;
1284}
1285
1286
1287void initAE()
1288{
1289 PyObject *m;
1290 PyObject *d;
1291
1292
1293
Guido van Rossumb19a6451995-02-05 16:58:33 +00001294 upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
1295 upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
1296
Guido van Rossum17448e21995-01-30 11:53:55 +00001297
1298 m = Py_InitModule("AE", AE_methods);
1299 d = PyModule_GetDict(m);
1300 AE_Error = PyMac_GetOSErrException();
1301 if (AE_Error == NULL ||
1302 PyDict_SetItemString(d, "Error", AE_Error) != 0)
1303 Py_FatalError("can't initialize AE.Error");
1304}
1305
1306/* ========================= End module AE ========================== */
1307