2 /* =========================== Module AE ============================ */
8 #define SystemSevenOrLater 1
16 extern PyObject
*ResObj_New(Handle
);
17 extern int ResObj_Convert(PyObject
*, Handle
*);
18 extern PyObject
*OptResObj_New(Handle
);
19 extern int OptResObj_Convert(PyObject
*, Handle
*);
21 extern PyObject
*WinObj_New(WindowPtr
);
22 extern int WinObj_Convert(PyObject
*, WindowPtr
*);
23 extern PyTypeObject Window_Type
;
24 #define WinObj_Check(x) ((x)->ob_type == &Window_Type)
26 extern PyObject
*DlgObj_New(DialogPtr
);
27 extern int DlgObj_Convert(PyObject
*, DialogPtr
*);
28 extern PyTypeObject Dialog_Type
;
29 #define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
31 extern PyObject
*MenuObj_New(MenuHandle
);
32 extern int MenuObj_Convert(PyObject
*, MenuHandle
*);
34 extern PyObject
*CtlObj_New(ControlHandle
);
35 extern int CtlObj_Convert(PyObject
*, ControlHandle
*);
37 extern PyObject
*GrafObj_New(GrafPtr
);
38 extern int GrafObj_Convert(PyObject
*, GrafPtr
*);
40 extern PyObject
*BMObj_New(BitMapPtr
);
41 extern int BMObj_Convert(PyObject
*, BitMapPtr
*);
43 extern PyObject
*WinObj_WhichWindow(WindowPtr
);
45 #include <AppleEvents.h>
47 #ifndef HAVE_UNIVERSAL_HEADERS
48 #define AEIdleProcPtr IdleProcPtr
49 #define AEFilterProcPtr EventFilterProcPtr
50 #define AEEventHandlerProcPtr EventHandlerProcPtr
53 #ifndef HAVE_UNIVERSAL_HEADERS
54 /* I'm trying to setup the code here so that is easily automated,
56 ** - Use the UPP in the source
57 ** - for pre-universal headers, #define each UPP as the corresponding ProcPtr
58 ** - for each routine we pass we declare a upp_xxx that
59 ** we initialize to the correct value in the init routine.
61 #define AEIdleUPP AEIdleProcPtr
62 #define AEFilterUPP AEFilterProcPtr
63 #define AEEventHandlerUPP AEEventHandlerProcPtr
64 #define NewAEIdleProc(x) (x)
65 #define NewAEFilterProc(x) (x)
66 #define NewAEEventHandlerProc(x) (x)
69 static pascal OSErr
GenericEventHandler(); /* Forward */
71 AEEventHandlerUPP upp_GenericEventHandler
;
73 static pascal Boolean
AEIdleProc(EventRecord
*theEvent
, long *sleepTime
, RgnHandle
*mouseRgn
)
75 if ( PyOS_InterruptOccurred() )
77 if ( PyMac_HandleEvent(theEvent
) < 0 ) {
78 fprintf(stderr
, "Exception in user event handler during AE processing\n");
84 AEIdleUPP upp_AEIdleProc
;
86 static PyObject
*AE_Error
;
88 /* ----------------------- Object type AEDesc ----------------------- */
90 PyTypeObject AEDesc_Type
;
92 #define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type)
94 typedef struct AEDescObject
{
99 PyObject
*AEDesc_New(itself
)
103 it
= PyObject_NEW(AEDescObject
, &AEDesc_Type
);
104 if (it
== NULL
) return NULL
;
105 it
->ob_itself
= *itself
;
106 return (PyObject
*)it
;
108 AEDesc_Convert(v
, p_itself
)
112 if (!AEDesc_Check(v
))
114 PyErr_SetString(PyExc_TypeError
, "AEDesc required");
117 *p_itself
= ((AEDescObject
*)v
)->ob_itself
;
121 static void AEDesc_dealloc(self
)
124 AEDisposeDesc(&self
->ob_itself
);
128 static PyObject
*AEDesc_AESend(_self
, _args
)
132 PyObject
*_res
= NULL
;
136 AESendPriority sendPriority
;
138 if (!PyArg_ParseTuple(_args
, "lhl",
143 _err
= AESend(&_self
->ob_itself
,
150 if (_err
!= noErr
) return PyMac_Error(_err
);
151 _res
= Py_BuildValue("O&",
156 static PyObject
*AEDesc_AEResetTimer(_self
, _args
)
160 PyObject
*_res
= NULL
;
162 if (!PyArg_ParseTuple(_args
, ""))
164 _err
= AEResetTimer(&_self
->ob_itself
);
165 if (_err
!= noErr
) return PyMac_Error(_err
);
171 static PyObject
*AEDesc_AESuspendTheCurrentEvent(_self
, _args
)
175 PyObject
*_res
= NULL
;
177 if (!PyArg_ParseTuple(_args
, ""))
179 _err
= AESuspendTheCurrentEvent(&_self
->ob_itself
);
180 if (_err
!= noErr
) return PyMac_Error(_err
);
186 static PyObject
*AEDesc_AEResumeTheCurrentEvent(_self
, _args
)
190 PyObject
*_res
= NULL
;
193 AEEventHandlerUPP dispatcher__proc__
= upp_GenericEventHandler
;
194 PyObject
*dispatcher
;
195 if (!PyArg_ParseTuple(_args
, "O&O",
196 AEDesc_Convert
, &reply
,
199 _err
= AEResumeTheCurrentEvent(&_self
->ob_itself
,
201 dispatcher__proc__
, (long)dispatcher
);
202 if (_err
!= noErr
) return PyMac_Error(_err
);
205 Py_INCREF(dispatcher
); /* XXX leak, but needed */
209 static PyObject
*AEDesc_AEGetTheCurrentEvent(_self
, _args
)
213 PyObject
*_res
= NULL
;
215 if (!PyArg_ParseTuple(_args
, ""))
217 _err
= AEGetTheCurrentEvent(&_self
->ob_itself
);
218 if (_err
!= noErr
) return PyMac_Error(_err
);
224 static PyObject
*AEDesc_AESetTheCurrentEvent(_self
, _args
)
228 PyObject
*_res
= NULL
;
230 if (!PyArg_ParseTuple(_args
, ""))
232 _err
= AESetTheCurrentEvent(&_self
->ob_itself
);
233 if (_err
!= noErr
) return PyMac_Error(_err
);
239 static PyObject
*AEDesc_AECoerceDesc(_self
, _args
)
243 PyObject
*_res
= NULL
;
247 if (!PyArg_ParseTuple(_args
, "O&",
248 PyMac_GetOSType
, &toType
))
250 _err
= AECoerceDesc(&_self
->ob_itself
,
253 if (_err
!= noErr
) return PyMac_Error(_err
);
254 _res
= Py_BuildValue("O&",
255 AEDesc_New
, &result
);
259 static PyObject
*AEDesc_AEDuplicateDesc(_self
, _args
)
263 PyObject
*_res
= NULL
;
266 if (!PyArg_ParseTuple(_args
, ""))
268 _err
= AEDuplicateDesc(&_self
->ob_itself
,
270 if (_err
!= noErr
) return PyMac_Error(_err
);
271 _res
= Py_BuildValue("O&",
272 AEDesc_New
, &result
);
276 static PyObject
*AEDesc_AECountItems(_self
, _args
)
280 PyObject
*_res
= NULL
;
283 if (!PyArg_ParseTuple(_args
, ""))
285 _err
= AECountItems(&_self
->ob_itself
,
287 if (_err
!= noErr
) return PyMac_Error(_err
);
288 _res
= Py_BuildValue("l",
293 static PyObject
*AEDesc_AEPutPtr(_self
, _args
)
297 PyObject
*_res
= NULL
;
303 int dataPtr__in_len__
;
304 if (!PyArg_ParseTuple(_args
, "lO&s#",
306 PyMac_GetOSType
, &typeCode
,
307 &dataPtr__in__
, &dataPtr__in_len__
))
309 dataPtr__len__
= dataPtr__in_len__
;
310 _err
= AEPutPtr(&_self
->ob_itself
,
313 dataPtr__in__
, dataPtr__len__
);
314 if (_err
!= noErr
) return PyMac_Error(_err
);
321 static PyObject
*AEDesc_AEPutDesc(_self
, _args
)
325 PyObject
*_res
= NULL
;
329 if (!PyArg_ParseTuple(_args
, "lO&",
331 AEDesc_Convert
, &theAEDesc
))
333 _err
= AEPutDesc(&_self
->ob_itself
,
336 if (_err
!= noErr
) return PyMac_Error(_err
);
342 static PyObject
*AEDesc_AEGetNthPtr(_self
, _args
)
346 PyObject
*_res
= NULL
;
349 DescType desiredType
;
350 AEKeyword theAEKeyword
;
352 char *dataPtr__out__
;
354 int dataPtr__in_len__
;
355 if (!PyArg_ParseTuple(_args
, "lO&i",
357 PyMac_GetOSType
, &desiredType
,
360 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
363 goto dataPtr__error__
;
365 dataPtr__len__
= dataPtr__in_len__
;
366 _err
= AEGetNthPtr(&_self
->ob_itself
,
371 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
372 if (_err
!= noErr
) return PyMac_Error(_err
);
373 _res
= Py_BuildValue("O&O&s#",
374 PyMac_BuildOSType
, theAEKeyword
,
375 PyMac_BuildOSType
, typeCode
,
376 dataPtr__out__
, (int)dataPtr__len__
);
377 free(dataPtr__out__
);
382 static PyObject
*AEDesc_AEGetNthDesc(_self
, _args
)
386 PyObject
*_res
= NULL
;
389 DescType desiredType
;
390 AEKeyword theAEKeyword
;
392 if (!PyArg_ParseTuple(_args
, "lO&",
394 PyMac_GetOSType
, &desiredType
))
396 _err
= AEGetNthDesc(&_self
->ob_itself
,
401 if (_err
!= noErr
) return PyMac_Error(_err
);
402 _res
= Py_BuildValue("O&O&",
403 PyMac_BuildOSType
, theAEKeyword
,
404 AEDesc_New
, &result
);
408 static PyObject
*AEDesc_AESizeOfNthItem(_self
, _args
)
412 PyObject
*_res
= NULL
;
417 if (!PyArg_ParseTuple(_args
, "l",
420 _err
= AESizeOfNthItem(&_self
->ob_itself
,
424 if (_err
!= noErr
) return PyMac_Error(_err
);
425 _res
= Py_BuildValue("O&l",
426 PyMac_BuildOSType
, typeCode
,
431 static PyObject
*AEDesc_AEDeleteItem(_self
, _args
)
435 PyObject
*_res
= NULL
;
438 if (!PyArg_ParseTuple(_args
, "l",
441 _err
= AEDeleteItem(&_self
->ob_itself
,
443 if (_err
!= noErr
) return PyMac_Error(_err
);
449 static PyObject
*AEDesc_AEPutParamPtr(_self
, _args
)
453 PyObject
*_res
= NULL
;
455 AEKeyword theAEKeyword
;
459 int dataPtr__in_len__
;
460 if (!PyArg_ParseTuple(_args
, "O&O&s#",
461 PyMac_GetOSType
, &theAEKeyword
,
462 PyMac_GetOSType
, &typeCode
,
463 &dataPtr__in__
, &dataPtr__in_len__
))
465 dataPtr__len__
= dataPtr__in_len__
;
466 _err
= AEPutParamPtr(&_self
->ob_itself
,
469 dataPtr__in__
, dataPtr__len__
);
470 if (_err
!= noErr
) return PyMac_Error(_err
);
477 static PyObject
*AEDesc_AEPutParamDesc(_self
, _args
)
481 PyObject
*_res
= NULL
;
483 AEKeyword theAEKeyword
;
485 if (!PyArg_ParseTuple(_args
, "O&O&",
486 PyMac_GetOSType
, &theAEKeyword
,
487 AEDesc_Convert
, &theAEDesc
))
489 _err
= AEPutParamDesc(&_self
->ob_itself
,
492 if (_err
!= noErr
) return PyMac_Error(_err
);
498 static PyObject
*AEDesc_AEGetParamPtr(_self
, _args
)
502 PyObject
*_res
= NULL
;
504 AEKeyword theAEKeyword
;
505 DescType desiredType
;
507 char *dataPtr__out__
;
509 int dataPtr__in_len__
;
510 if (!PyArg_ParseTuple(_args
, "O&O&i",
511 PyMac_GetOSType
, &theAEKeyword
,
512 PyMac_GetOSType
, &desiredType
,
515 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
518 goto dataPtr__error__
;
520 dataPtr__len__
= dataPtr__in_len__
;
521 _err
= AEGetParamPtr(&_self
->ob_itself
,
525 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
526 if (_err
!= noErr
) return PyMac_Error(_err
);
527 _res
= Py_BuildValue("O&s#",
528 PyMac_BuildOSType
, typeCode
,
529 dataPtr__out__
, (int)dataPtr__len__
);
530 free(dataPtr__out__
);
535 static PyObject
*AEDesc_AEGetParamDesc(_self
, _args
)
539 PyObject
*_res
= NULL
;
541 AEKeyword theAEKeyword
;
542 DescType desiredType
;
544 if (!PyArg_ParseTuple(_args
, "O&O&",
545 PyMac_GetOSType
, &theAEKeyword
,
546 PyMac_GetOSType
, &desiredType
))
548 _err
= AEGetParamDesc(&_self
->ob_itself
,
552 if (_err
!= noErr
) return PyMac_Error(_err
);
553 _res
= Py_BuildValue("O&",
554 AEDesc_New
, &result
);
558 static PyObject
*AEDesc_AESizeOfParam(_self
, _args
)
562 PyObject
*_res
= NULL
;
564 AEKeyword theAEKeyword
;
567 if (!PyArg_ParseTuple(_args
, "O&",
568 PyMac_GetOSType
, &theAEKeyword
))
570 _err
= AESizeOfParam(&_self
->ob_itself
,
574 if (_err
!= noErr
) return PyMac_Error(_err
);
575 _res
= Py_BuildValue("O&l",
576 PyMac_BuildOSType
, typeCode
,
581 static PyObject
*AEDesc_AEDeleteParam(_self
, _args
)
585 PyObject
*_res
= NULL
;
587 AEKeyword theAEKeyword
;
588 if (!PyArg_ParseTuple(_args
, "O&",
589 PyMac_GetOSType
, &theAEKeyword
))
591 _err
= AEDeleteParam(&_self
->ob_itself
,
593 if (_err
!= noErr
) return PyMac_Error(_err
);
599 static PyObject
*AEDesc_AEGetAttributePtr(_self
, _args
)
603 PyObject
*_res
= NULL
;
605 AEKeyword theAEKeyword
;
606 DescType desiredType
;
608 char *dataPtr__out__
;
610 int dataPtr__in_len__
;
611 if (!PyArg_ParseTuple(_args
, "O&O&i",
612 PyMac_GetOSType
, &theAEKeyword
,
613 PyMac_GetOSType
, &desiredType
,
616 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
619 goto dataPtr__error__
;
621 dataPtr__len__
= dataPtr__in_len__
;
622 _err
= AEGetAttributePtr(&_self
->ob_itself
,
626 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
627 if (_err
!= noErr
) return PyMac_Error(_err
);
628 _res
= Py_BuildValue("O&s#",
629 PyMac_BuildOSType
, typeCode
,
630 dataPtr__out__
, (int)dataPtr__len__
);
631 free(dataPtr__out__
);
636 static PyObject
*AEDesc_AEGetAttributeDesc(_self
, _args
)
640 PyObject
*_res
= NULL
;
642 AEKeyword theAEKeyword
;
643 DescType desiredType
;
645 if (!PyArg_ParseTuple(_args
, "O&O&",
646 PyMac_GetOSType
, &theAEKeyword
,
647 PyMac_GetOSType
, &desiredType
))
649 _err
= AEGetAttributeDesc(&_self
->ob_itself
,
653 if (_err
!= noErr
) return PyMac_Error(_err
);
654 _res
= Py_BuildValue("O&",
655 AEDesc_New
, &result
);
659 static PyObject
*AEDesc_AESizeOfAttribute(_self
, _args
)
663 PyObject
*_res
= NULL
;
665 AEKeyword theAEKeyword
;
668 if (!PyArg_ParseTuple(_args
, "O&",
669 PyMac_GetOSType
, &theAEKeyword
))
671 _err
= AESizeOfAttribute(&_self
->ob_itself
,
675 if (_err
!= noErr
) return PyMac_Error(_err
);
676 _res
= Py_BuildValue("O&l",
677 PyMac_BuildOSType
, typeCode
,
682 static PyObject
*AEDesc_AEPutAttributePtr(_self
, _args
)
686 PyObject
*_res
= NULL
;
688 AEKeyword theAEKeyword
;
692 int dataPtr__in_len__
;
693 if (!PyArg_ParseTuple(_args
, "O&O&s#",
694 PyMac_GetOSType
, &theAEKeyword
,
695 PyMac_GetOSType
, &typeCode
,
696 &dataPtr__in__
, &dataPtr__in_len__
))
698 dataPtr__len__
= dataPtr__in_len__
;
699 _err
= AEPutAttributePtr(&_self
->ob_itself
,
702 dataPtr__in__
, dataPtr__len__
);
703 if (_err
!= noErr
) return PyMac_Error(_err
);
710 static PyObject
*AEDesc_AEPutAttributeDesc(_self
, _args
)
714 PyObject
*_res
= NULL
;
716 AEKeyword theAEKeyword
;
718 if (!PyArg_ParseTuple(_args
, "O&O&",
719 PyMac_GetOSType
, &theAEKeyword
,
720 AEDesc_Convert
, &theAEDesc
))
722 _err
= AEPutAttributeDesc(&_self
->ob_itself
,
725 if (_err
!= noErr
) return PyMac_Error(_err
);
731 static PyMethodDef AEDesc_methods
[] = {
732 {"AESend", (PyCFunction
)AEDesc_AESend
, 1,
733 "(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)"},
734 {"AEResetTimer", (PyCFunction
)AEDesc_AEResetTimer
, 1,
736 {"AESuspendTheCurrentEvent", (PyCFunction
)AEDesc_AESuspendTheCurrentEvent
, 1,
738 {"AEResumeTheCurrentEvent", (PyCFunction
)AEDesc_AEResumeTheCurrentEvent
, 1,
739 "(AppleEvent reply, EventHandler dispatcher) -> None"},
740 {"AEGetTheCurrentEvent", (PyCFunction
)AEDesc_AEGetTheCurrentEvent
, 1,
742 {"AESetTheCurrentEvent", (PyCFunction
)AEDesc_AESetTheCurrentEvent
, 1,
744 {"AECoerceDesc", (PyCFunction
)AEDesc_AECoerceDesc
, 1,
745 "(DescType toType) -> (AEDesc result)"},
746 {"AEDuplicateDesc", (PyCFunction
)AEDesc_AEDuplicateDesc
, 1,
747 "() -> (AEDesc result)"},
748 {"AECountItems", (PyCFunction
)AEDesc_AECountItems
, 1,
749 "() -> (long theCount)"},
750 {"AEPutPtr", (PyCFunction
)AEDesc_AEPutPtr
, 1,
751 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
752 {"AEPutDesc", (PyCFunction
)AEDesc_AEPutDesc
, 1,
753 "(long index, AEDesc theAEDesc) -> None"},
754 {"AEGetNthPtr", (PyCFunction
)AEDesc_AEGetNthPtr
, 1,
755 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
756 {"AEGetNthDesc", (PyCFunction
)AEDesc_AEGetNthDesc
, 1,
757 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
758 {"AESizeOfNthItem", (PyCFunction
)AEDesc_AESizeOfNthItem
, 1,
759 "(long index) -> (DescType typeCode, Size dataSize)"},
760 {"AEDeleteItem", (PyCFunction
)AEDesc_AEDeleteItem
, 1,
761 "(long index) -> None"},
762 {"AEPutParamPtr", (PyCFunction
)AEDesc_AEPutParamPtr
, 1,
763 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
764 {"AEPutParamDesc", (PyCFunction
)AEDesc_AEPutParamDesc
, 1,
765 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
766 {"AEGetParamPtr", (PyCFunction
)AEDesc_AEGetParamPtr
, 1,
767 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
768 {"AEGetParamDesc", (PyCFunction
)AEDesc_AEGetParamDesc
, 1,
769 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
770 {"AESizeOfParam", (PyCFunction
)AEDesc_AESizeOfParam
, 1,
771 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
772 {"AEDeleteParam", (PyCFunction
)AEDesc_AEDeleteParam
, 1,
773 "(AEKeyword theAEKeyword) -> None"},
774 {"AEGetAttributePtr", (PyCFunction
)AEDesc_AEGetAttributePtr
, 1,
775 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
776 {"AEGetAttributeDesc", (PyCFunction
)AEDesc_AEGetAttributeDesc
, 1,
777 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
778 {"AESizeOfAttribute", (PyCFunction
)AEDesc_AESizeOfAttribute
, 1,
779 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
780 {"AEPutAttributePtr", (PyCFunction
)AEDesc_AEPutAttributePtr
, 1,
781 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
782 {"AEPutAttributeDesc", (PyCFunction
)AEDesc_AEPutAttributeDesc
, 1,
783 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
787 PyMethodChain AEDesc_chain
= { AEDesc_methods
, NULL
};
789 static PyObject
*AEDesc_getattr(self
, name
)
794 if (strcmp(name
, "type") == 0)
795 return PyMac_BuildOSType(self
->ob_itself
.descriptorType
);
796 if (strcmp(name
, "data") == 0) {
799 state
= HGetState(self
->ob_itself
.dataHandle
);
800 HLock(self
->ob_itself
.dataHandle
);
801 res
= PyString_FromStringAndSize(
802 *self
->ob_itself
.dataHandle
,
803 GetHandleSize(self
->ob_itself
.dataHandle
));
804 HUnlock(self
->ob_itself
.dataHandle
);
805 HSetState(self
->ob_itself
.dataHandle
, state
);
808 if (strcmp(name
, "__members__") == 0)
809 return Py_BuildValue("[ss]", "data", "type");
811 return Py_FindMethodInChain(&AEDesc_chain
, (PyObject
*)self
, name
);
814 #define AEDesc_setattr NULL
816 PyTypeObject AEDesc_Type
= {
817 PyObject_HEAD_INIT(&PyType_Type
)
819 "AEDesc", /*tp_name*/
820 sizeof(AEDescObject
), /*tp_basicsize*/
823 (destructor
) AEDesc_dealloc
, /*tp_dealloc*/
825 (getattrfunc
) AEDesc_getattr
, /*tp_getattr*/
826 (setattrfunc
) AEDesc_setattr
, /*tp_setattr*/
829 /* --------------------- End object type AEDesc --------------------- */
832 static PyObject
*AE_AEProcessAppleEvent(_self
, _args
)
836 PyObject
*_res
= NULL
;
838 EventRecord theEventRecord
;
839 if (!PyArg_ParseTuple(_args
, "O&",
840 PyMac_GetEventRecord
, &theEventRecord
))
842 _err
= AEProcessAppleEvent(&theEventRecord
);
843 if (_err
!= noErr
) return PyMac_Error(_err
);
849 static PyObject
*AE_AEGetInteractionAllowed(_self
, _args
)
853 PyObject
*_res
= NULL
;
855 AEInteractAllowed level
;
856 if (!PyArg_ParseTuple(_args
, ""))
858 _err
= AEGetInteractionAllowed(&level
);
859 if (_err
!= noErr
) return PyMac_Error(_err
);
860 _res
= Py_BuildValue("b",
865 static PyObject
*AE_AESetInteractionAllowed(_self
, _args
)
869 PyObject
*_res
= NULL
;
871 AEInteractAllowed level
;
872 if (!PyArg_ParseTuple(_args
, "b",
875 _err
= AESetInteractionAllowed(level
);
876 if (_err
!= noErr
) return PyMac_Error(_err
);
882 static PyObject
*AE_AEInteractWithUser(_self
, _args
)
886 PyObject
*_res
= NULL
;
889 if (!PyArg_ParseTuple(_args
, "l",
892 _err
= AEInteractWithUser(timeOutInTicks
,
895 if (_err
!= noErr
) return PyMac_Error(_err
);
901 static PyObject
*AE_AEInstallEventHandler(_self
, _args
)
905 PyObject
*_res
= NULL
;
907 AEEventClass theAEEventClass
;
908 AEEventID theAEEventID
;
909 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
911 if (!PyArg_ParseTuple(_args
, "O&O&O",
912 PyMac_GetOSType
, &theAEEventClass
,
913 PyMac_GetOSType
, &theAEEventID
,
916 _err
= AEInstallEventHandler(theAEEventClass
,
918 handler__proc__
, (long)handler
,
920 if (_err
!= noErr
) return PyMac_Error(_err
);
923 Py_INCREF(handler
); /* XXX leak, but needed */
927 static PyObject
*AE_AERemoveEventHandler(_self
, _args
)
931 PyObject
*_res
= NULL
;
933 AEEventClass theAEEventClass
;
934 AEEventID theAEEventID
;
935 if (!PyArg_ParseTuple(_args
, "O&O&",
936 PyMac_GetOSType
, &theAEEventClass
,
937 PyMac_GetOSType
, &theAEEventID
))
939 _err
= AERemoveEventHandler(theAEEventClass
,
941 upp_GenericEventHandler
,
943 if (_err
!= noErr
) return PyMac_Error(_err
);
949 static PyObject
*AE_AEGetEventHandler(_self
, _args
)
953 PyObject
*_res
= NULL
;
955 AEEventClass theAEEventClass
;
956 AEEventID theAEEventID
;
957 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
959 if (!PyArg_ParseTuple(_args
, "O&O&",
960 PyMac_GetOSType
, &theAEEventClass
,
961 PyMac_GetOSType
, &theAEEventID
))
963 _err
= AEGetEventHandler(theAEEventClass
,
965 &handler__proc__
, (long *)&handler
,
967 if (_err
!= noErr
) return PyMac_Error(_err
);
968 _res
= Py_BuildValue("O",
970 Py_INCREF(handler
); /* XXX leak, but needed */
974 static PyObject
*AE_AEManagerInfo(_self
, _args
)
978 PyObject
*_res
= NULL
;
982 if (!PyArg_ParseTuple(_args
, "O&",
983 PyMac_GetOSType
, &keyWord
))
985 _err
= AEManagerInfo(keyWord
,
987 if (_err
!= noErr
) return PyMac_Error(_err
);
988 _res
= Py_BuildValue("l",
993 static PyObject
*AE_AECoercePtr(_self
, _args
)
997 PyObject
*_res
= NULL
;
1000 char *dataPtr__in__
;
1001 long dataPtr__len__
;
1002 int dataPtr__in_len__
;
1005 if (!PyArg_ParseTuple(_args
, "O&s#O&",
1006 PyMac_GetOSType
, &typeCode
,
1007 &dataPtr__in__
, &dataPtr__in_len__
,
1008 PyMac_GetOSType
, &toType
))
1010 dataPtr__len__
= dataPtr__in_len__
;
1011 _err
= AECoercePtr(typeCode
,
1012 dataPtr__in__
, dataPtr__len__
,
1015 if (_err
!= noErr
) return PyMac_Error(_err
);
1016 _res
= Py_BuildValue("O&",
1017 AEDesc_New
, &result
);
1022 static PyObject
*AE_AECreateDesc(_self
, _args
)
1026 PyObject
*_res
= NULL
;
1029 char *dataPtr__in__
;
1030 long dataPtr__len__
;
1031 int dataPtr__in_len__
;
1033 if (!PyArg_ParseTuple(_args
, "O&s#",
1034 PyMac_GetOSType
, &typeCode
,
1035 &dataPtr__in__
, &dataPtr__in_len__
))
1037 dataPtr__len__
= dataPtr__in_len__
;
1038 _err
= AECreateDesc(typeCode
,
1039 dataPtr__in__
, dataPtr__len__
,
1041 if (_err
!= noErr
) return PyMac_Error(_err
);
1042 _res
= Py_BuildValue("O&",
1043 AEDesc_New
, &result
);
1048 static PyObject
*AE_AECreateList(_self
, _args
)
1052 PyObject
*_res
= NULL
;
1054 char *factoringPtr__in__
;
1055 long factoringPtr__len__
;
1056 int factoringPtr__in_len__
;
1058 AEDescList resultList
;
1059 if (!PyArg_ParseTuple(_args
, "s#b",
1060 &factoringPtr__in__
, &factoringPtr__in_len__
,
1063 factoringPtr__len__
= factoringPtr__in_len__
;
1064 _err
= AECreateList(factoringPtr__in__
, factoringPtr__len__
,
1067 if (_err
!= noErr
) return PyMac_Error(_err
);
1068 _res
= Py_BuildValue("O&",
1069 AEDesc_New
, &resultList
);
1070 factoringPtr__error__
: ;
1074 static PyObject
*AE_AECreateAppleEvent(_self
, _args
)
1078 PyObject
*_res
= NULL
;
1080 AEEventClass theAEEventClass
;
1081 AEEventID theAEEventID
;
1082 AEAddressDesc target
;
1083 AEReturnID returnID
;
1084 AETransactionID transactionID
;
1086 if (!PyArg_ParseTuple(_args
, "O&O&O&hh",
1087 PyMac_GetOSType
, &theAEEventClass
,
1088 PyMac_GetOSType
, &theAEEventID
,
1089 AEDesc_Convert
, &target
,
1093 _err
= AECreateAppleEvent(theAEEventClass
,
1099 if (_err
!= noErr
) return PyMac_Error(_err
);
1100 _res
= Py_BuildValue("O&",
1101 AEDesc_New
, &result
);
1105 static PyMethodDef AE_methods
[] = {
1106 {"AEProcessAppleEvent", (PyCFunction
)AE_AEProcessAppleEvent
, 1,
1107 "(EventRecord theEventRecord) -> None"},
1108 {"AEGetInteractionAllowed", (PyCFunction
)AE_AEGetInteractionAllowed
, 1,
1109 "() -> (AEInteractAllowed level)"},
1110 {"AESetInteractionAllowed", (PyCFunction
)AE_AESetInteractionAllowed
, 1,
1111 "(AEInteractAllowed level) -> None"},
1112 {"AEInteractWithUser", (PyCFunction
)AE_AEInteractWithUser
, 1,
1113 "(long timeOutInTicks) -> None"},
1114 {"AEInstallEventHandler", (PyCFunction
)AE_AEInstallEventHandler
, 1,
1115 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
1116 {"AERemoveEventHandler", (PyCFunction
)AE_AERemoveEventHandler
, 1,
1117 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
1118 {"AEGetEventHandler", (PyCFunction
)AE_AEGetEventHandler
, 1,
1119 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
1120 {"AEManagerInfo", (PyCFunction
)AE_AEManagerInfo
, 1,
1121 "(AEKeyword keyWord) -> (long result)"},
1122 {"AECoercePtr", (PyCFunction
)AE_AECoercePtr
, 1,
1123 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1124 {"AECreateDesc", (PyCFunction
)AE_AECreateDesc
, 1,
1125 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1126 {"AECreateList", (PyCFunction
)AE_AECreateList
, 1,
1127 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1128 {"AECreateAppleEvent", (PyCFunction
)AE_AECreateAppleEvent
, 1,
1129 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result)"},
1136 GenericEventHandler(AppleEvent
*request
, AppleEvent
*reply
, long refcon
)
1138 PyObject
*handler
= (PyObject
*)refcon
;
1139 AEDescObject
*requestObject
, *replyObject
;
1140 PyObject
*args
, *res
;
1141 if ((requestObject
= (AEDescObject
*)AEDesc_New(request
)) == NULL
) {
1144 if ((replyObject
= (AEDescObject
*)AEDesc_New(reply
)) == NULL
) {
1145 Py_DECREF(requestObject
);
1148 if ((args
= Py_BuildValue("OO", requestObject
, replyObject
)) == NULL
) {
1149 Py_DECREF(requestObject
);
1150 Py_DECREF(replyObject
);
1153 res
= PyEval_CallObject(handler
, args
);
1154 requestObject
->ob_itself
.descriptorType
= 'null';
1155 requestObject
->ob_itself
.dataHandle
= NULL
;
1156 replyObject
->ob_itself
.descriptorType
= 'null';
1157 replyObject
->ob_itself
.dataHandle
= NULL
;
1173 upp_AEIdleProc
= NewAEIdleProc(AEIdleProc
);
1174 upp_GenericEventHandler
= NewAEEventHandlerProc(GenericEventHandler
);
1177 m
= Py_InitModule("AE", AE_methods
);
1178 d
= PyModule_GetDict(m
);
1179 AE_Error
= PyMac_GetOSErrException();
1180 if (AE_Error
== NULL
||
1181 PyDict_SetItemString(d
, "Error", AE_Error
) != 0)
1182 Py_FatalError("can't initialize AE.Error");
1183 AEDesc_Type
.ob_type
= &PyType_Type
;
1184 Py_INCREF(&AEDesc_Type
);
1185 if (PyDict_SetItemString(d
, "AEDescType", (PyObject
*)&AEDesc_Type
) != 0)
1186 Py_FatalError("can't initialize AEDescType");
1189 /* ========================= End module AE ========================== */