2 /* =========================== Module AE ============================ */
9 #include "pymactoolbox.h"
11 #ifdef WITHOUT_FRAMEWORKS
12 #include <AppleEvents.h>
13 #include <AEObjects.h>
15 #include <Carbon/Carbon.h>
18 #ifdef USE_TOOLBOX_OBJECT_GLUE
19 extern PyObject
*_AEDesc_New(AEDesc
*);
20 extern int _AEDesc_Convert(PyObject
*, AEDesc
*);
22 #define AEDesc_New _AEDesc_New
23 #define AEDesc_Convert _AEDesc_Convert
26 static pascal OSErr
GenericEventHandler(); /* Forward */
28 AEEventHandlerUPP upp_GenericEventHandler
;
30 static pascal Boolean
AEIdleProc(EventRecord
*theEvent
, long *sleepTime
, RgnHandle
*mouseRgn
)
32 if ( PyOS_InterruptOccurred() )
34 if ( PyMac_HandleEvent(theEvent
) < 0 ) {
35 PySys_WriteStderr("Exception in user event handler during AE processing\n");
41 AEIdleUPP upp_AEIdleProc
;
43 static PyObject
*AE_Error
;
45 /* ----------------------- Object type AEDesc ----------------------- */
47 PyTypeObject AEDesc_Type
;
49 #define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type)
51 typedef struct AEDescObject
{
56 PyObject
*AEDesc_New(AEDesc
*itself
)
59 it
= PyObject_NEW(AEDescObject
, &AEDesc_Type
);
60 if (it
== NULL
) return NULL
;
61 it
->ob_itself
= *itself
;
62 return (PyObject
*)it
;
64 AEDesc_Convert(PyObject
*v
, AEDesc
*p_itself
)
68 PyErr_SetString(PyExc_TypeError
, "AEDesc required");
71 *p_itself
= ((AEDescObject
*)v
)->ob_itself
;
75 static void AEDesc_dealloc(AEDescObject
*self
)
77 AEDisposeDesc(&self
->ob_itself
);
81 static PyObject
*AEDesc_AECoerceDesc(AEDescObject
*_self
, PyObject
*_args
)
83 PyObject
*_res
= NULL
;
87 if (!PyArg_ParseTuple(_args
, "O&",
88 PyMac_GetOSType
, &toType
))
90 _err
= AECoerceDesc(&_self
->ob_itself
,
93 if (_err
!= noErr
) return PyMac_Error(_err
);
94 _res
= Py_BuildValue("O&",
99 static PyObject
*AEDesc_AEDuplicateDesc(AEDescObject
*_self
, PyObject
*_args
)
101 PyObject
*_res
= NULL
;
104 if (!PyArg_ParseTuple(_args
, ""))
106 _err
= AEDuplicateDesc(&_self
->ob_itself
,
108 if (_err
!= noErr
) return PyMac_Error(_err
);
109 _res
= Py_BuildValue("O&",
110 AEDesc_New
, &result
);
114 static PyObject
*AEDesc_AECountItems(AEDescObject
*_self
, PyObject
*_args
)
116 PyObject
*_res
= NULL
;
119 if (!PyArg_ParseTuple(_args
, ""))
121 _err
= AECountItems(&_self
->ob_itself
,
123 if (_err
!= noErr
) return PyMac_Error(_err
);
124 _res
= Py_BuildValue("l",
129 static PyObject
*AEDesc_AEPutPtr(AEDescObject
*_self
, PyObject
*_args
)
131 PyObject
*_res
= NULL
;
137 int dataPtr__in_len__
;
138 if (!PyArg_ParseTuple(_args
, "lO&s#",
140 PyMac_GetOSType
, &typeCode
,
141 &dataPtr__in__
, &dataPtr__in_len__
))
143 dataPtr__len__
= dataPtr__in_len__
;
144 _err
= AEPutPtr(&_self
->ob_itself
,
147 dataPtr__in__
, dataPtr__len__
);
148 if (_err
!= noErr
) return PyMac_Error(_err
);
155 static PyObject
*AEDesc_AEPutDesc(AEDescObject
*_self
, PyObject
*_args
)
157 PyObject
*_res
= NULL
;
161 if (!PyArg_ParseTuple(_args
, "lO&",
163 AEDesc_Convert
, &theAEDesc
))
165 _err
= AEPutDesc(&_self
->ob_itself
,
168 if (_err
!= noErr
) return PyMac_Error(_err
);
174 static PyObject
*AEDesc_AEGetNthPtr(AEDescObject
*_self
, PyObject
*_args
)
176 PyObject
*_res
= NULL
;
179 DescType desiredType
;
180 AEKeyword theAEKeyword
;
182 char *dataPtr__out__
;
184 int dataPtr__in_len__
;
185 if (!PyArg_ParseTuple(_args
, "lO&i",
187 PyMac_GetOSType
, &desiredType
,
190 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
193 goto dataPtr__error__
;
195 dataPtr__len__
= dataPtr__in_len__
;
196 _err
= AEGetNthPtr(&_self
->ob_itself
,
201 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
202 if (_err
!= noErr
) return PyMac_Error(_err
);
203 _res
= Py_BuildValue("O&O&s#",
204 PyMac_BuildOSType
, theAEKeyword
,
205 PyMac_BuildOSType
, typeCode
,
206 dataPtr__out__
, (int)dataPtr__len__
);
207 free(dataPtr__out__
);
212 static PyObject
*AEDesc_AEGetNthDesc(AEDescObject
*_self
, PyObject
*_args
)
214 PyObject
*_res
= NULL
;
217 DescType desiredType
;
218 AEKeyword theAEKeyword
;
220 if (!PyArg_ParseTuple(_args
, "lO&",
222 PyMac_GetOSType
, &desiredType
))
224 _err
= AEGetNthDesc(&_self
->ob_itself
,
229 if (_err
!= noErr
) return PyMac_Error(_err
);
230 _res
= Py_BuildValue("O&O&",
231 PyMac_BuildOSType
, theAEKeyword
,
232 AEDesc_New
, &result
);
236 static PyObject
*AEDesc_AESizeOfNthItem(AEDescObject
*_self
, PyObject
*_args
)
238 PyObject
*_res
= NULL
;
243 if (!PyArg_ParseTuple(_args
, "l",
246 _err
= AESizeOfNthItem(&_self
->ob_itself
,
250 if (_err
!= noErr
) return PyMac_Error(_err
);
251 _res
= Py_BuildValue("O&l",
252 PyMac_BuildOSType
, typeCode
,
257 static PyObject
*AEDesc_AEDeleteItem(AEDescObject
*_self
, PyObject
*_args
)
259 PyObject
*_res
= NULL
;
262 if (!PyArg_ParseTuple(_args
, "l",
265 _err
= AEDeleteItem(&_self
->ob_itself
,
267 if (_err
!= noErr
) return PyMac_Error(_err
);
273 static PyObject
*AEDesc_AEPutParamPtr(AEDescObject
*_self
, PyObject
*_args
)
275 PyObject
*_res
= NULL
;
277 AEKeyword theAEKeyword
;
281 int dataPtr__in_len__
;
282 if (!PyArg_ParseTuple(_args
, "O&O&s#",
283 PyMac_GetOSType
, &theAEKeyword
,
284 PyMac_GetOSType
, &typeCode
,
285 &dataPtr__in__
, &dataPtr__in_len__
))
287 dataPtr__len__
= dataPtr__in_len__
;
288 _err
= AEPutParamPtr(&_self
->ob_itself
,
291 dataPtr__in__
, dataPtr__len__
);
292 if (_err
!= noErr
) return PyMac_Error(_err
);
299 static PyObject
*AEDesc_AEPutParamDesc(AEDescObject
*_self
, PyObject
*_args
)
301 PyObject
*_res
= NULL
;
303 AEKeyword theAEKeyword
;
305 if (!PyArg_ParseTuple(_args
, "O&O&",
306 PyMac_GetOSType
, &theAEKeyword
,
307 AEDesc_Convert
, &theAEDesc
))
309 _err
= AEPutParamDesc(&_self
->ob_itself
,
312 if (_err
!= noErr
) return PyMac_Error(_err
);
318 static PyObject
*AEDesc_AEGetParamPtr(AEDescObject
*_self
, PyObject
*_args
)
320 PyObject
*_res
= NULL
;
322 AEKeyword theAEKeyword
;
323 DescType desiredType
;
325 char *dataPtr__out__
;
327 int dataPtr__in_len__
;
328 if (!PyArg_ParseTuple(_args
, "O&O&i",
329 PyMac_GetOSType
, &theAEKeyword
,
330 PyMac_GetOSType
, &desiredType
,
333 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
336 goto dataPtr__error__
;
338 dataPtr__len__
= dataPtr__in_len__
;
339 _err
= AEGetParamPtr(&_self
->ob_itself
,
343 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
344 if (_err
!= noErr
) return PyMac_Error(_err
);
345 _res
= Py_BuildValue("O&s#",
346 PyMac_BuildOSType
, typeCode
,
347 dataPtr__out__
, (int)dataPtr__len__
);
348 free(dataPtr__out__
);
353 static PyObject
*AEDesc_AEGetParamDesc(AEDescObject
*_self
, PyObject
*_args
)
355 PyObject
*_res
= NULL
;
357 AEKeyword theAEKeyword
;
358 DescType desiredType
;
360 if (!PyArg_ParseTuple(_args
, "O&O&",
361 PyMac_GetOSType
, &theAEKeyword
,
362 PyMac_GetOSType
, &desiredType
))
364 _err
= AEGetParamDesc(&_self
->ob_itself
,
368 if (_err
!= noErr
) return PyMac_Error(_err
);
369 _res
= Py_BuildValue("O&",
370 AEDesc_New
, &result
);
374 static PyObject
*AEDesc_AESizeOfParam(AEDescObject
*_self
, PyObject
*_args
)
376 PyObject
*_res
= NULL
;
378 AEKeyword theAEKeyword
;
381 if (!PyArg_ParseTuple(_args
, "O&",
382 PyMac_GetOSType
, &theAEKeyword
))
384 _err
= AESizeOfParam(&_self
->ob_itself
,
388 if (_err
!= noErr
) return PyMac_Error(_err
);
389 _res
= Py_BuildValue("O&l",
390 PyMac_BuildOSType
, typeCode
,
395 static PyObject
*AEDesc_AEDeleteParam(AEDescObject
*_self
, PyObject
*_args
)
397 PyObject
*_res
= NULL
;
399 AEKeyword theAEKeyword
;
400 if (!PyArg_ParseTuple(_args
, "O&",
401 PyMac_GetOSType
, &theAEKeyword
))
403 _err
= AEDeleteParam(&_self
->ob_itself
,
405 if (_err
!= noErr
) return PyMac_Error(_err
);
411 static PyObject
*AEDesc_AEGetAttributePtr(AEDescObject
*_self
, PyObject
*_args
)
413 PyObject
*_res
= NULL
;
415 AEKeyword theAEKeyword
;
416 DescType desiredType
;
418 char *dataPtr__out__
;
420 int dataPtr__in_len__
;
421 if (!PyArg_ParseTuple(_args
, "O&O&i",
422 PyMac_GetOSType
, &theAEKeyword
,
423 PyMac_GetOSType
, &desiredType
,
426 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
429 goto dataPtr__error__
;
431 dataPtr__len__
= dataPtr__in_len__
;
432 _err
= AEGetAttributePtr(&_self
->ob_itself
,
436 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
437 if (_err
!= noErr
) return PyMac_Error(_err
);
438 _res
= Py_BuildValue("O&s#",
439 PyMac_BuildOSType
, typeCode
,
440 dataPtr__out__
, (int)dataPtr__len__
);
441 free(dataPtr__out__
);
446 static PyObject
*AEDesc_AEGetAttributeDesc(AEDescObject
*_self
, PyObject
*_args
)
448 PyObject
*_res
= NULL
;
450 AEKeyword theAEKeyword
;
451 DescType desiredType
;
453 if (!PyArg_ParseTuple(_args
, "O&O&",
454 PyMac_GetOSType
, &theAEKeyword
,
455 PyMac_GetOSType
, &desiredType
))
457 _err
= AEGetAttributeDesc(&_self
->ob_itself
,
461 if (_err
!= noErr
) return PyMac_Error(_err
);
462 _res
= Py_BuildValue("O&",
463 AEDesc_New
, &result
);
467 static PyObject
*AEDesc_AESizeOfAttribute(AEDescObject
*_self
, PyObject
*_args
)
469 PyObject
*_res
= NULL
;
471 AEKeyword theAEKeyword
;
474 if (!PyArg_ParseTuple(_args
, "O&",
475 PyMac_GetOSType
, &theAEKeyword
))
477 _err
= AESizeOfAttribute(&_self
->ob_itself
,
481 if (_err
!= noErr
) return PyMac_Error(_err
);
482 _res
= Py_BuildValue("O&l",
483 PyMac_BuildOSType
, typeCode
,
488 static PyObject
*AEDesc_AEPutAttributePtr(AEDescObject
*_self
, PyObject
*_args
)
490 PyObject
*_res
= NULL
;
492 AEKeyword theAEKeyword
;
496 int dataPtr__in_len__
;
497 if (!PyArg_ParseTuple(_args
, "O&O&s#",
498 PyMac_GetOSType
, &theAEKeyword
,
499 PyMac_GetOSType
, &typeCode
,
500 &dataPtr__in__
, &dataPtr__in_len__
))
502 dataPtr__len__
= dataPtr__in_len__
;
503 _err
= AEPutAttributePtr(&_self
->ob_itself
,
506 dataPtr__in__
, dataPtr__len__
);
507 if (_err
!= noErr
) return PyMac_Error(_err
);
514 static PyObject
*AEDesc_AEPutAttributeDesc(AEDescObject
*_self
, PyObject
*_args
)
516 PyObject
*_res
= NULL
;
518 AEKeyword theAEKeyword
;
520 if (!PyArg_ParseTuple(_args
, "O&O&",
521 PyMac_GetOSType
, &theAEKeyword
,
522 AEDesc_Convert
, &theAEDesc
))
524 _err
= AEPutAttributeDesc(&_self
->ob_itself
,
527 if (_err
!= noErr
) return PyMac_Error(_err
);
533 #if TARGET_API_MAC_CARBON
535 static PyObject
*AEDesc_AEGetDescDataSize(AEDescObject
*_self
, PyObject
*_args
)
537 PyObject
*_res
= NULL
;
539 if (!PyArg_ParseTuple(_args
, ""))
541 _rv
= AEGetDescDataSize(&_self
->ob_itself
);
542 _res
= Py_BuildValue("l",
548 static PyObject
*AEDesc_AESend(AEDescObject
*_self
, PyObject
*_args
)
550 PyObject
*_res
= NULL
;
554 AESendPriority sendPriority
;
556 if (!PyArg_ParseTuple(_args
, "lhl",
561 _err
= AESend(&_self
->ob_itself
,
568 if (_err
!= noErr
) return PyMac_Error(_err
);
569 _res
= Py_BuildValue("O&",
574 static PyObject
*AEDesc_AEResetTimer(AEDescObject
*_self
, PyObject
*_args
)
576 PyObject
*_res
= NULL
;
578 if (!PyArg_ParseTuple(_args
, ""))
580 _err
= AEResetTimer(&_self
->ob_itself
);
581 if (_err
!= noErr
) return PyMac_Error(_err
);
587 static PyObject
*AEDesc_AESuspendTheCurrentEvent(AEDescObject
*_self
, PyObject
*_args
)
589 PyObject
*_res
= NULL
;
591 if (!PyArg_ParseTuple(_args
, ""))
593 _err
= AESuspendTheCurrentEvent(&_self
->ob_itself
);
594 if (_err
!= noErr
) return PyMac_Error(_err
);
600 static PyObject
*AEDesc_AEResumeTheCurrentEvent(AEDescObject
*_self
, PyObject
*_args
)
602 PyObject
*_res
= NULL
;
605 AEEventHandlerUPP dispatcher__proc__
= upp_GenericEventHandler
;
606 PyObject
*dispatcher
;
607 if (!PyArg_ParseTuple(_args
, "O&O",
608 AEDesc_Convert
, &reply
,
611 _err
= AEResumeTheCurrentEvent(&_self
->ob_itself
,
613 dispatcher__proc__
, (long)dispatcher
);
614 if (_err
!= noErr
) return PyMac_Error(_err
);
617 Py_INCREF(dispatcher
); /* XXX leak, but needed */
621 static PyObject
*AEDesc_AEGetTheCurrentEvent(AEDescObject
*_self
, PyObject
*_args
)
623 PyObject
*_res
= NULL
;
625 if (!PyArg_ParseTuple(_args
, ""))
627 _err
= AEGetTheCurrentEvent(&_self
->ob_itself
);
628 if (_err
!= noErr
) return PyMac_Error(_err
);
634 static PyObject
*AEDesc_AESetTheCurrentEvent(AEDescObject
*_self
, PyObject
*_args
)
636 PyObject
*_res
= NULL
;
638 if (!PyArg_ParseTuple(_args
, ""))
640 _err
= AESetTheCurrentEvent(&_self
->ob_itself
);
641 if (_err
!= noErr
) return PyMac_Error(_err
);
647 static PyObject
*AEDesc_AEResolve(AEDescObject
*_self
, PyObject
*_args
)
649 PyObject
*_res
= NULL
;
653 if (!PyArg_ParseTuple(_args
, "h",
656 _err
= AEResolve(&_self
->ob_itself
,
659 if (_err
!= noErr
) return PyMac_Error(_err
);
660 _res
= Py_BuildValue("O&",
661 AEDesc_New
, &theToken
);
665 static PyMethodDef AEDesc_methods
[] = {
666 {"AECoerceDesc", (PyCFunction
)AEDesc_AECoerceDesc
, 1,
667 "(DescType toType) -> (AEDesc result)"},
668 {"AEDuplicateDesc", (PyCFunction
)AEDesc_AEDuplicateDesc
, 1,
669 "() -> (AEDesc result)"},
670 {"AECountItems", (PyCFunction
)AEDesc_AECountItems
, 1,
671 "() -> (long theCount)"},
672 {"AEPutPtr", (PyCFunction
)AEDesc_AEPutPtr
, 1,
673 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
674 {"AEPutDesc", (PyCFunction
)AEDesc_AEPutDesc
, 1,
675 "(long index, AEDesc theAEDesc) -> None"},
676 {"AEGetNthPtr", (PyCFunction
)AEDesc_AEGetNthPtr
, 1,
677 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
678 {"AEGetNthDesc", (PyCFunction
)AEDesc_AEGetNthDesc
, 1,
679 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
680 {"AESizeOfNthItem", (PyCFunction
)AEDesc_AESizeOfNthItem
, 1,
681 "(long index) -> (DescType typeCode, Size dataSize)"},
682 {"AEDeleteItem", (PyCFunction
)AEDesc_AEDeleteItem
, 1,
683 "(long index) -> None"},
684 {"AEPutParamPtr", (PyCFunction
)AEDesc_AEPutParamPtr
, 1,
685 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
686 {"AEPutParamDesc", (PyCFunction
)AEDesc_AEPutParamDesc
, 1,
687 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
688 {"AEGetParamPtr", (PyCFunction
)AEDesc_AEGetParamPtr
, 1,
689 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
690 {"AEGetParamDesc", (PyCFunction
)AEDesc_AEGetParamDesc
, 1,
691 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
692 {"AESizeOfParam", (PyCFunction
)AEDesc_AESizeOfParam
, 1,
693 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
694 {"AEDeleteParam", (PyCFunction
)AEDesc_AEDeleteParam
, 1,
695 "(AEKeyword theAEKeyword) -> None"},
696 {"AEGetAttributePtr", (PyCFunction
)AEDesc_AEGetAttributePtr
, 1,
697 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
698 {"AEGetAttributeDesc", (PyCFunction
)AEDesc_AEGetAttributeDesc
, 1,
699 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
700 {"AESizeOfAttribute", (PyCFunction
)AEDesc_AESizeOfAttribute
, 1,
701 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
702 {"AEPutAttributePtr", (PyCFunction
)AEDesc_AEPutAttributePtr
, 1,
703 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
704 {"AEPutAttributeDesc", (PyCFunction
)AEDesc_AEPutAttributeDesc
, 1,
705 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
707 #if TARGET_API_MAC_CARBON
708 {"AEGetDescDataSize", (PyCFunction
)AEDesc_AEGetDescDataSize
, 1,
711 {"AESend", (PyCFunction
)AEDesc_AESend
, 1,
712 "(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)"},
713 {"AEResetTimer", (PyCFunction
)AEDesc_AEResetTimer
, 1,
715 {"AESuspendTheCurrentEvent", (PyCFunction
)AEDesc_AESuspendTheCurrentEvent
, 1,
717 {"AEResumeTheCurrentEvent", (PyCFunction
)AEDesc_AEResumeTheCurrentEvent
, 1,
718 "(AppleEvent reply, EventHandler dispatcher) -> None"},
719 {"AEGetTheCurrentEvent", (PyCFunction
)AEDesc_AEGetTheCurrentEvent
, 1,
721 {"AESetTheCurrentEvent", (PyCFunction
)AEDesc_AESetTheCurrentEvent
, 1,
723 {"AEResolve", (PyCFunction
)AEDesc_AEResolve
, 1,
724 "(short callbackFlags) -> (AEDesc theToken)"},
728 PyMethodChain AEDesc_chain
= { AEDesc_methods
, NULL
};
730 static PyObject
*AEDesc_getattr(AEDescObject
*self
, char *name
)
733 if (strcmp(name
, "type") == 0)
734 return PyMac_BuildOSType(self
->ob_itself
.descriptorType
);
735 if (strcmp(name
, "data") == 0) {
737 #if !TARGET_API_MAC_CARBON
739 state
= HGetState(self
->ob_itself
.dataHandle
);
740 HLock(self
->ob_itself
.dataHandle
);
741 res
= PyString_FromStringAndSize(
742 *self
->ob_itself
.dataHandle
,
743 GetHandleSize(self
->ob_itself
.dataHandle
));
744 HUnlock(self
->ob_itself
.dataHandle
);
745 HSetState(self
->ob_itself
.dataHandle
, state
);
751 size
= AEGetDescDataSize(&self
->ob_itself
);
752 if ( (res
= PyString_FromStringAndSize(NULL
, size
)) == NULL
)
754 if ( (ptr
= PyString_AsString(res
)) == NULL
)
756 if ( (err
=AEGetDescData(&self
->ob_itself
, ptr
, size
)) < 0 )
757 return PyMac_Error(err
);
761 if (strcmp(name
, "__members__") == 0)
762 return Py_BuildValue("[ss]", "data", "type");
764 return Py_FindMethodInChain(&AEDesc_chain
, (PyObject
*)self
, name
);
767 #define AEDesc_setattr NULL
769 #define AEDesc_compare NULL
771 #define AEDesc_repr NULL
773 #define AEDesc_hash NULL
775 PyTypeObject AEDesc_Type
= {
776 PyObject_HEAD_INIT(&PyType_Type
)
778 "AEDesc", /*tp_name*/
779 sizeof(AEDescObject
), /*tp_basicsize*/
782 (destructor
) AEDesc_dealloc
, /*tp_dealloc*/
784 (getattrfunc
) AEDesc_getattr
, /*tp_getattr*/
785 (setattrfunc
) AEDesc_setattr
, /*tp_setattr*/
786 (cmpfunc
) AEDesc_compare
, /*tp_compare*/
787 (reprfunc
) AEDesc_repr
, /*tp_repr*/
788 (PyNumberMethods
*)0, /* tp_as_number */
789 (PySequenceMethods
*)0, /* tp_as_sequence */
790 (PyMappingMethods
*)0, /* tp_as_mapping */
791 (hashfunc
) AEDesc_hash
, /*tp_hash*/
794 /* --------------------- End object type AEDesc --------------------- */
797 static PyObject
*AE_AECoercePtr(PyObject
*_self
, PyObject
*_args
)
799 PyObject
*_res
= NULL
;
804 int dataPtr__in_len__
;
807 if (!PyArg_ParseTuple(_args
, "O&s#O&",
808 PyMac_GetOSType
, &typeCode
,
809 &dataPtr__in__
, &dataPtr__in_len__
,
810 PyMac_GetOSType
, &toType
))
812 dataPtr__len__
= dataPtr__in_len__
;
813 _err
= AECoercePtr(typeCode
,
814 dataPtr__in__
, dataPtr__len__
,
817 if (_err
!= noErr
) return PyMac_Error(_err
);
818 _res
= Py_BuildValue("O&",
819 AEDesc_New
, &result
);
824 static PyObject
*AE_AECreateDesc(PyObject
*_self
, PyObject
*_args
)
826 PyObject
*_res
= NULL
;
831 int dataPtr__in_len__
;
833 if (!PyArg_ParseTuple(_args
, "O&s#",
834 PyMac_GetOSType
, &typeCode
,
835 &dataPtr__in__
, &dataPtr__in_len__
))
837 dataPtr__len__
= dataPtr__in_len__
;
838 _err
= AECreateDesc(typeCode
,
839 dataPtr__in__
, dataPtr__len__
,
841 if (_err
!= noErr
) return PyMac_Error(_err
);
842 _res
= Py_BuildValue("O&",
843 AEDesc_New
, &result
);
848 static PyObject
*AE_AECreateList(PyObject
*_self
, PyObject
*_args
)
850 PyObject
*_res
= NULL
;
852 char *factoringPtr__in__
;
853 long factoringPtr__len__
;
854 int factoringPtr__in_len__
;
856 AEDescList resultList
;
857 if (!PyArg_ParseTuple(_args
, "s#b",
858 &factoringPtr__in__
, &factoringPtr__in_len__
,
861 factoringPtr__len__
= factoringPtr__in_len__
;
862 _err
= AECreateList(factoringPtr__in__
, factoringPtr__len__
,
865 if (_err
!= noErr
) return PyMac_Error(_err
);
866 _res
= Py_BuildValue("O&",
867 AEDesc_New
, &resultList
);
868 factoringPtr__error__
: ;
872 static PyObject
*AE_AECreateAppleEvent(PyObject
*_self
, PyObject
*_args
)
874 PyObject
*_res
= NULL
;
876 AEEventClass theAEEventClass
;
877 AEEventID theAEEventID
;
878 AEAddressDesc target
;
880 AETransactionID transactionID
;
882 if (!PyArg_ParseTuple(_args
, "O&O&O&hl",
883 PyMac_GetOSType
, &theAEEventClass
,
884 PyMac_GetOSType
, &theAEEventID
,
885 AEDesc_Convert
, &target
,
889 _err
= AECreateAppleEvent(theAEEventClass
,
895 if (_err
!= noErr
) return PyMac_Error(_err
);
896 _res
= Py_BuildValue("O&",
897 AEDesc_New
, &result
);
901 #if TARGET_API_MAC_CARBON
903 static PyObject
*AE_AEReplaceDescData(PyObject
*_self
, PyObject
*_args
)
905 PyObject
*_res
= NULL
;
910 int dataPtr__in_len__
;
912 if (!PyArg_ParseTuple(_args
, "O&s#",
913 PyMac_GetOSType
, &typeCode
,
914 &dataPtr__in__
, &dataPtr__in_len__
))
916 dataPtr__len__
= dataPtr__in_len__
;
917 _err
= AEReplaceDescData(typeCode
,
918 dataPtr__in__
, dataPtr__len__
,
920 if (_err
!= noErr
) return PyMac_Error(_err
);
921 _res
= Py_BuildValue("O&",
922 AEDesc_New
, &theAEDesc
);
928 static PyObject
*AE_AEProcessAppleEvent(PyObject
*_self
, PyObject
*_args
)
930 PyObject
*_res
= NULL
;
932 EventRecord theEventRecord
;
933 if (!PyArg_ParseTuple(_args
, "O&",
934 PyMac_GetEventRecord
, &theEventRecord
))
936 _err
= AEProcessAppleEvent(&theEventRecord
);
937 if (_err
!= noErr
) return PyMac_Error(_err
);
943 static PyObject
*AE_AEGetInteractionAllowed(PyObject
*_self
, PyObject
*_args
)
945 PyObject
*_res
= NULL
;
947 AEInteractAllowed level
;
948 if (!PyArg_ParseTuple(_args
, ""))
950 _err
= AEGetInteractionAllowed(&level
);
951 if (_err
!= noErr
) return PyMac_Error(_err
);
952 _res
= Py_BuildValue("b",
957 static PyObject
*AE_AESetInteractionAllowed(PyObject
*_self
, PyObject
*_args
)
959 PyObject
*_res
= NULL
;
961 AEInteractAllowed level
;
962 if (!PyArg_ParseTuple(_args
, "b",
965 _err
= AESetInteractionAllowed(level
);
966 if (_err
!= noErr
) return PyMac_Error(_err
);
972 static PyObject
*AE_AEInteractWithUser(PyObject
*_self
, PyObject
*_args
)
974 PyObject
*_res
= NULL
;
977 if (!PyArg_ParseTuple(_args
, "l",
980 _err
= AEInteractWithUser(timeOutInTicks
,
983 if (_err
!= noErr
) return PyMac_Error(_err
);
989 static PyObject
*AE_AEInstallEventHandler(PyObject
*_self
, PyObject
*_args
)
991 PyObject
*_res
= NULL
;
993 AEEventClass theAEEventClass
;
994 AEEventID theAEEventID
;
995 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
997 if (!PyArg_ParseTuple(_args
, "O&O&O",
998 PyMac_GetOSType
, &theAEEventClass
,
999 PyMac_GetOSType
, &theAEEventID
,
1002 _err
= AEInstallEventHandler(theAEEventClass
,
1004 handler__proc__
, (long)handler
,
1006 if (_err
!= noErr
) return PyMac_Error(_err
);
1009 Py_INCREF(handler
); /* XXX leak, but needed */
1013 static PyObject
*AE_AERemoveEventHandler(PyObject
*_self
, PyObject
*_args
)
1015 PyObject
*_res
= NULL
;
1017 AEEventClass theAEEventClass
;
1018 AEEventID theAEEventID
;
1019 if (!PyArg_ParseTuple(_args
, "O&O&",
1020 PyMac_GetOSType
, &theAEEventClass
,
1021 PyMac_GetOSType
, &theAEEventID
))
1023 _err
= AERemoveEventHandler(theAEEventClass
,
1025 upp_GenericEventHandler
,
1027 if (_err
!= noErr
) return PyMac_Error(_err
);
1033 static PyObject
*AE_AEGetEventHandler(PyObject
*_self
, PyObject
*_args
)
1035 PyObject
*_res
= NULL
;
1037 AEEventClass theAEEventClass
;
1038 AEEventID theAEEventID
;
1039 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
1041 if (!PyArg_ParseTuple(_args
, "O&O&",
1042 PyMac_GetOSType
, &theAEEventClass
,
1043 PyMac_GetOSType
, &theAEEventID
))
1045 _err
= AEGetEventHandler(theAEEventClass
,
1047 &handler__proc__
, (long *)&handler
,
1049 if (_err
!= noErr
) return PyMac_Error(_err
);
1050 _res
= Py_BuildValue("O",
1052 Py_INCREF(handler
); /* XXX leak, but needed */
1056 static PyObject
*AE_AEInstallSpecialHandler(PyObject
*_self
, PyObject
*_args
)
1058 PyObject
*_res
= NULL
;
1060 AEKeyword functionClass
;
1061 if (!PyArg_ParseTuple(_args
, "O&",
1062 PyMac_GetOSType
, &functionClass
))
1064 _err
= AEInstallSpecialHandler(functionClass
,
1065 upp_GenericEventHandler
,
1067 if (_err
!= noErr
) return PyMac_Error(_err
);
1073 static PyObject
*AE_AERemoveSpecialHandler(PyObject
*_self
, PyObject
*_args
)
1075 PyObject
*_res
= NULL
;
1077 AEKeyword functionClass
;
1078 if (!PyArg_ParseTuple(_args
, "O&",
1079 PyMac_GetOSType
, &functionClass
))
1081 _err
= AERemoveSpecialHandler(functionClass
,
1082 upp_GenericEventHandler
,
1084 if (_err
!= noErr
) return PyMac_Error(_err
);
1090 static PyObject
*AE_AEManagerInfo(PyObject
*_self
, PyObject
*_args
)
1092 PyObject
*_res
= NULL
;
1096 if (!PyArg_ParseTuple(_args
, "O&",
1097 PyMac_GetOSType
, &keyWord
))
1099 _err
= AEManagerInfo(keyWord
,
1101 if (_err
!= noErr
) return PyMac_Error(_err
);
1102 _res
= Py_BuildValue("l",
1107 static PyObject
*AE_AEObjectInit(PyObject
*_self
, PyObject
*_args
)
1109 PyObject
*_res
= NULL
;
1111 if (!PyArg_ParseTuple(_args
, ""))
1113 _err
= AEObjectInit();
1114 if (_err
!= noErr
) return PyMac_Error(_err
);
1120 static PyObject
*AE_AEDisposeToken(PyObject
*_self
, PyObject
*_args
)
1122 PyObject
*_res
= NULL
;
1125 if (!PyArg_ParseTuple(_args
, ""))
1127 _err
= AEDisposeToken(&theToken
);
1128 if (_err
!= noErr
) return PyMac_Error(_err
);
1129 _res
= Py_BuildValue("O&",
1130 AEDesc_New
, &theToken
);
1134 static PyObject
*AE_AECallObjectAccessor(PyObject
*_self
, PyObject
*_args
)
1136 PyObject
*_res
= NULL
;
1138 DescType desiredClass
;
1139 AEDesc containerToken
;
1140 DescType containerClass
;
1144 if (!PyArg_ParseTuple(_args
, "O&O&O&O&O&",
1145 PyMac_GetOSType
, &desiredClass
,
1146 AEDesc_Convert
, &containerToken
,
1147 PyMac_GetOSType
, &containerClass
,
1148 PyMac_GetOSType
, &keyForm
,
1149 AEDesc_Convert
, &keyData
))
1151 _err
= AECallObjectAccessor(desiredClass
,
1157 if (_err
!= noErr
) return PyMac_Error(_err
);
1158 _res
= Py_BuildValue("O&",
1159 AEDesc_New
, &token
);
1163 static PyMethodDef AE_methods
[] = {
1164 {"AECoercePtr", (PyCFunction
)AE_AECoercePtr
, 1,
1165 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1166 {"AECreateDesc", (PyCFunction
)AE_AECreateDesc
, 1,
1167 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1168 {"AECreateList", (PyCFunction
)AE_AECreateList
, 1,
1169 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1170 {"AECreateAppleEvent", (PyCFunction
)AE_AECreateAppleEvent
, 1,
1171 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result)"},
1173 #if TARGET_API_MAC_CARBON
1174 {"AEReplaceDescData", (PyCFunction
)AE_AEReplaceDescData
, 1,
1175 "(DescType typeCode, Buffer dataPtr) -> (AEDesc theAEDesc)"},
1177 {"AEProcessAppleEvent", (PyCFunction
)AE_AEProcessAppleEvent
, 1,
1178 "(EventRecord theEventRecord) -> None"},
1179 {"AEGetInteractionAllowed", (PyCFunction
)AE_AEGetInteractionAllowed
, 1,
1180 "() -> (AEInteractAllowed level)"},
1181 {"AESetInteractionAllowed", (PyCFunction
)AE_AESetInteractionAllowed
, 1,
1182 "(AEInteractAllowed level) -> None"},
1183 {"AEInteractWithUser", (PyCFunction
)AE_AEInteractWithUser
, 1,
1184 "(long timeOutInTicks) -> None"},
1185 {"AEInstallEventHandler", (PyCFunction
)AE_AEInstallEventHandler
, 1,
1186 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
1187 {"AERemoveEventHandler", (PyCFunction
)AE_AERemoveEventHandler
, 1,
1188 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
1189 {"AEGetEventHandler", (PyCFunction
)AE_AEGetEventHandler
, 1,
1190 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
1191 {"AEInstallSpecialHandler", (PyCFunction
)AE_AEInstallSpecialHandler
, 1,
1192 "(AEKeyword functionClass) -> None"},
1193 {"AERemoveSpecialHandler", (PyCFunction
)AE_AERemoveSpecialHandler
, 1,
1194 "(AEKeyword functionClass) -> None"},
1195 {"AEManagerInfo", (PyCFunction
)AE_AEManagerInfo
, 1,
1196 "(AEKeyword keyWord) -> (long result)"},
1197 {"AEObjectInit", (PyCFunction
)AE_AEObjectInit
, 1,
1199 {"AEDisposeToken", (PyCFunction
)AE_AEDisposeToken
, 1,
1200 "() -> (AEDesc theToken)"},
1201 {"AECallObjectAccessor", (PyCFunction
)AE_AECallObjectAccessor
, 1,
1202 "(DescType desiredClass, AEDesc containerToken, DescType containerClass, DescType keyForm, AEDesc keyData) -> (AEDesc token)"},
1207 #if UNIVERSAL_INTERFACES_VERSION >= 0x0340
1208 typedef long refcontype
;
1210 typedef unsigned long refcontype
;
1214 GenericEventHandler(const AppleEvent
*request
, AppleEvent
*reply
, refcontype refcon
)
1216 PyObject
*handler
= (PyObject
*)refcon
;
1217 AEDescObject
*requestObject
, *replyObject
;
1218 PyObject
*args
, *res
;
1219 if ((requestObject
= (AEDescObject
*)AEDesc_New((AppleEvent
*)request
)) == NULL
) {
1222 if ((replyObject
= (AEDescObject
*)AEDesc_New(reply
)) == NULL
) {
1223 Py_DECREF(requestObject
);
1226 if ((args
= Py_BuildValue("OO", requestObject
, replyObject
)) == NULL
) {
1227 Py_DECREF(requestObject
);
1228 Py_DECREF(replyObject
);
1231 res
= PyEval_CallObject(handler
, args
);
1232 requestObject
->ob_itself
.descriptorType
= 'null';
1233 requestObject
->ob_itself
.dataHandle
= NULL
;
1234 replyObject
->ob_itself
.descriptorType
= 'null';
1235 replyObject
->ob_itself
.dataHandle
= NULL
;
1251 upp_AEIdleProc
= NewAEIdleUPP(AEIdleProc
);
1252 upp_GenericEventHandler
= NewAEEventHandlerUPP(&GenericEventHandler
);
1253 PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc
*, AEDesc_New
);
1254 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc
, AEDesc_Convert
);
1257 m
= Py_InitModule("AE", AE_methods
);
1258 d
= PyModule_GetDict(m
);
1259 AE_Error
= PyMac_GetOSErrException();
1260 if (AE_Error
== NULL
||
1261 PyDict_SetItemString(d
, "Error", AE_Error
) != 0)
1263 AEDesc_Type
.ob_type
= &PyType_Type
;
1264 Py_INCREF(&AEDesc_Type
);
1265 if (PyDict_SetItemString(d
, "AEDescType", (PyObject
*)&AEDesc_Type
) != 0)
1266 Py_FatalError("can't initialize AEDescType");
1269 /* ========================= End module AE ========================== */