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 PySys_WriteStderr("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 #define AEDesc_compare NULL
818 #define AEDesc_repr NULL
820 #define AEDesc_hash NULL
822 PyTypeObject AEDesc_Type
= {
823 PyObject_HEAD_INIT(&PyType_Type
)
825 "AEDesc", /*tp_name*/
826 sizeof(AEDescObject
), /*tp_basicsize*/
829 (destructor
) AEDesc_dealloc
, /*tp_dealloc*/
831 (getattrfunc
) AEDesc_getattr
, /*tp_getattr*/
832 (setattrfunc
) AEDesc_setattr
, /*tp_setattr*/
833 (cmpfunc
) AEDesc_compare
, /*tp_compare*/
834 (reprfunc
) AEDesc_repr
, /*tp_repr*/
835 (PyNumberMethods
*)0, /* tp_as_number */
836 (PySequenceMethods
*)0, /* tp_as_sequence */
837 (PyMappingMethods
*)0, /* tp_as_mapping */
838 (hashfunc
) AEDesc_hash
, /*tp_hash*/
841 /* --------------------- End object type AEDesc --------------------- */
844 static PyObject
*AE_AEProcessAppleEvent(_self
, _args
)
848 PyObject
*_res
= NULL
;
850 EventRecord theEventRecord
;
851 if (!PyArg_ParseTuple(_args
, "O&",
852 PyMac_GetEventRecord
, &theEventRecord
))
854 _err
= AEProcessAppleEvent(&theEventRecord
);
855 if (_err
!= noErr
) return PyMac_Error(_err
);
861 static PyObject
*AE_AEGetInteractionAllowed(_self
, _args
)
865 PyObject
*_res
= NULL
;
867 AEInteractAllowed level
;
868 if (!PyArg_ParseTuple(_args
, ""))
870 _err
= AEGetInteractionAllowed(&level
);
871 if (_err
!= noErr
) return PyMac_Error(_err
);
872 _res
= Py_BuildValue("b",
877 static PyObject
*AE_AESetInteractionAllowed(_self
, _args
)
881 PyObject
*_res
= NULL
;
883 AEInteractAllowed level
;
884 if (!PyArg_ParseTuple(_args
, "b",
887 _err
= AESetInteractionAllowed(level
);
888 if (_err
!= noErr
) return PyMac_Error(_err
);
894 static PyObject
*AE_AEInteractWithUser(_self
, _args
)
898 PyObject
*_res
= NULL
;
901 if (!PyArg_ParseTuple(_args
, "l",
904 _err
= AEInteractWithUser(timeOutInTicks
,
907 if (_err
!= noErr
) return PyMac_Error(_err
);
913 static PyObject
*AE_AEInstallEventHandler(_self
, _args
)
917 PyObject
*_res
= NULL
;
919 AEEventClass theAEEventClass
;
920 AEEventID theAEEventID
;
921 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
923 if (!PyArg_ParseTuple(_args
, "O&O&O",
924 PyMac_GetOSType
, &theAEEventClass
,
925 PyMac_GetOSType
, &theAEEventID
,
928 _err
= AEInstallEventHandler(theAEEventClass
,
930 handler__proc__
, (long)handler
,
932 if (_err
!= noErr
) return PyMac_Error(_err
);
935 Py_INCREF(handler
); /* XXX leak, but needed */
939 static PyObject
*AE_AERemoveEventHandler(_self
, _args
)
943 PyObject
*_res
= NULL
;
945 AEEventClass theAEEventClass
;
946 AEEventID theAEEventID
;
947 if (!PyArg_ParseTuple(_args
, "O&O&",
948 PyMac_GetOSType
, &theAEEventClass
,
949 PyMac_GetOSType
, &theAEEventID
))
951 _err
= AERemoveEventHandler(theAEEventClass
,
953 upp_GenericEventHandler
,
955 if (_err
!= noErr
) return PyMac_Error(_err
);
961 static PyObject
*AE_AEGetEventHandler(_self
, _args
)
965 PyObject
*_res
= NULL
;
967 AEEventClass theAEEventClass
;
968 AEEventID theAEEventID
;
969 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
971 if (!PyArg_ParseTuple(_args
, "O&O&",
972 PyMac_GetOSType
, &theAEEventClass
,
973 PyMac_GetOSType
, &theAEEventID
))
975 _err
= AEGetEventHandler(theAEEventClass
,
977 &handler__proc__
, (long *)&handler
,
979 if (_err
!= noErr
) return PyMac_Error(_err
);
980 _res
= Py_BuildValue("O",
982 Py_INCREF(handler
); /* XXX leak, but needed */
986 static PyObject
*AE_AEManagerInfo(_self
, _args
)
990 PyObject
*_res
= NULL
;
994 if (!PyArg_ParseTuple(_args
, "O&",
995 PyMac_GetOSType
, &keyWord
))
997 _err
= AEManagerInfo(keyWord
,
999 if (_err
!= noErr
) return PyMac_Error(_err
);
1000 _res
= Py_BuildValue("l",
1005 static PyObject
*AE_AECoercePtr(_self
, _args
)
1009 PyObject
*_res
= NULL
;
1012 char *dataPtr__in__
;
1013 long dataPtr__len__
;
1014 int dataPtr__in_len__
;
1017 if (!PyArg_ParseTuple(_args
, "O&s#O&",
1018 PyMac_GetOSType
, &typeCode
,
1019 &dataPtr__in__
, &dataPtr__in_len__
,
1020 PyMac_GetOSType
, &toType
))
1022 dataPtr__len__
= dataPtr__in_len__
;
1023 _err
= AECoercePtr(typeCode
,
1024 dataPtr__in__
, dataPtr__len__
,
1027 if (_err
!= noErr
) return PyMac_Error(_err
);
1028 _res
= Py_BuildValue("O&",
1029 AEDesc_New
, &result
);
1034 static PyObject
*AE_AECreateDesc(_self
, _args
)
1038 PyObject
*_res
= NULL
;
1041 char *dataPtr__in__
;
1042 long dataPtr__len__
;
1043 int dataPtr__in_len__
;
1045 if (!PyArg_ParseTuple(_args
, "O&s#",
1046 PyMac_GetOSType
, &typeCode
,
1047 &dataPtr__in__
, &dataPtr__in_len__
))
1049 dataPtr__len__
= dataPtr__in_len__
;
1050 _err
= AECreateDesc(typeCode
,
1051 dataPtr__in__
, dataPtr__len__
,
1053 if (_err
!= noErr
) return PyMac_Error(_err
);
1054 _res
= Py_BuildValue("O&",
1055 AEDesc_New
, &result
);
1060 static PyObject
*AE_AECreateList(_self
, _args
)
1064 PyObject
*_res
= NULL
;
1066 char *factoringPtr__in__
;
1067 long factoringPtr__len__
;
1068 int factoringPtr__in_len__
;
1070 AEDescList resultList
;
1071 if (!PyArg_ParseTuple(_args
, "s#b",
1072 &factoringPtr__in__
, &factoringPtr__in_len__
,
1075 factoringPtr__len__
= factoringPtr__in_len__
;
1076 _err
= AECreateList(factoringPtr__in__
, factoringPtr__len__
,
1079 if (_err
!= noErr
) return PyMac_Error(_err
);
1080 _res
= Py_BuildValue("O&",
1081 AEDesc_New
, &resultList
);
1082 factoringPtr__error__
: ;
1086 static PyObject
*AE_AECreateAppleEvent(_self
, _args
)
1090 PyObject
*_res
= NULL
;
1092 AEEventClass theAEEventClass
;
1093 AEEventID theAEEventID
;
1094 AEAddressDesc target
;
1095 AEReturnID returnID
;
1096 AETransactionID transactionID
;
1098 if (!PyArg_ParseTuple(_args
, "O&O&O&hh",
1099 PyMac_GetOSType
, &theAEEventClass
,
1100 PyMac_GetOSType
, &theAEEventID
,
1101 AEDesc_Convert
, &target
,
1105 _err
= AECreateAppleEvent(theAEEventClass
,
1111 if (_err
!= noErr
) return PyMac_Error(_err
);
1112 _res
= Py_BuildValue("O&",
1113 AEDesc_New
, &result
);
1117 static PyMethodDef AE_methods
[] = {
1118 {"AEProcessAppleEvent", (PyCFunction
)AE_AEProcessAppleEvent
, 1,
1119 "(EventRecord theEventRecord) -> None"},
1120 {"AEGetInteractionAllowed", (PyCFunction
)AE_AEGetInteractionAllowed
, 1,
1121 "() -> (AEInteractAllowed level)"},
1122 {"AESetInteractionAllowed", (PyCFunction
)AE_AESetInteractionAllowed
, 1,
1123 "(AEInteractAllowed level) -> None"},
1124 {"AEInteractWithUser", (PyCFunction
)AE_AEInteractWithUser
, 1,
1125 "(long timeOutInTicks) -> None"},
1126 {"AEInstallEventHandler", (PyCFunction
)AE_AEInstallEventHandler
, 1,
1127 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
1128 {"AERemoveEventHandler", (PyCFunction
)AE_AERemoveEventHandler
, 1,
1129 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
1130 {"AEGetEventHandler", (PyCFunction
)AE_AEGetEventHandler
, 1,
1131 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
1132 {"AEManagerInfo", (PyCFunction
)AE_AEManagerInfo
, 1,
1133 "(AEKeyword keyWord) -> (long result)"},
1134 {"AECoercePtr", (PyCFunction
)AE_AECoercePtr
, 1,
1135 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1136 {"AECreateDesc", (PyCFunction
)AE_AECreateDesc
, 1,
1137 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1138 {"AECreateList", (PyCFunction
)AE_AECreateList
, 1,
1139 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1140 {"AECreateAppleEvent", (PyCFunction
)AE_AECreateAppleEvent
, 1,
1141 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result)"},
1148 GenericEventHandler(AppleEvent
*request
, AppleEvent
*reply
, long refcon
)
1150 PyObject
*handler
= (PyObject
*)refcon
;
1151 AEDescObject
*requestObject
, *replyObject
;
1152 PyObject
*args
, *res
;
1153 if ((requestObject
= (AEDescObject
*)AEDesc_New(request
)) == NULL
) {
1156 if ((replyObject
= (AEDescObject
*)AEDesc_New(reply
)) == NULL
) {
1157 Py_DECREF(requestObject
);
1160 if ((args
= Py_BuildValue("OO", requestObject
, replyObject
)) == NULL
) {
1161 Py_DECREF(requestObject
);
1162 Py_DECREF(replyObject
);
1165 res
= PyEval_CallObject(handler
, args
);
1166 requestObject
->ob_itself
.descriptorType
= 'null';
1167 requestObject
->ob_itself
.dataHandle
= NULL
;
1168 replyObject
->ob_itself
.descriptorType
= 'null';
1169 replyObject
->ob_itself
.dataHandle
= NULL
;
1185 upp_AEIdleProc
= NewAEIdleProc(AEIdleProc
);
1186 upp_GenericEventHandler
= NewAEEventHandlerProc(GenericEventHandler
);
1189 m
= Py_InitModule("AE", AE_methods
);
1190 d
= PyModule_GetDict(m
);
1191 AE_Error
= PyMac_GetOSErrException();
1192 if (AE_Error
== NULL
||
1193 PyDict_SetItemString(d
, "Error", AE_Error
) != 0)
1194 Py_FatalError("can't initialize AE.Error");
1195 AEDesc_Type
.ob_type
= &PyType_Type
;
1196 Py_INCREF(&AEDesc_Type
);
1197 if (PyDict_SetItemString(d
, "AEDescType", (PyObject
*)&AEDesc_Type
) != 0)
1198 Py_FatalError("can't initialize AEDescType");
1201 /* ========================= End module AE ========================== */