2 /* =========================== Module AE ============================ */
8 #define SystemSevenOrLater 1
16 extern PyObject
*ResObj_New(Handle
);
17 extern PyObject
*ResObj_OptNew(Handle
);
18 extern int ResObj_Convert(PyObject
*, Handle
*);
20 extern PyObject
*WinObj_New(WindowPtr
);
21 extern int WinObj_Convert(PyObject
*, WindowPtr
*);
23 extern PyObject
*DlgObj_New(DialogPtr
);
24 extern int DlgObj_Convert(PyObject
*, DialogPtr
*);
25 extern PyTypeObject Dialog_Type
;
26 #define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
28 extern PyObject
*MenuObj_New(MenuHandle
);
29 extern int MenuObj_Convert(PyObject
*, MenuHandle
*);
31 extern PyObject
*CtlObj_New(ControlHandle
);
32 extern int CtlObj_Convert(PyObject
*, ControlHandle
*);
34 extern PyObject
*WinObj_WhichWindow(WindowPtr
);
36 #include <AppleEvents.h>
38 #ifndef HAVE_UNIVERSAL_HEADERS
39 #define AEIdleProcPtr IdleProcPtr
40 #define AEFilterProcPtr EventFilterProcPtr
41 #define AEEventHandlerProcPtr EventHandlerProcPtr
44 #ifndef HAVE_UNIVERSAL_HEADERS
45 /* I'm trying to setup the code here so that is easily automated,
47 ** - Use the UPP in the source
48 ** - for pre-universal headers, #define each UPP as the corresponding ProcPtr
49 ** - for each routine we pass we declare a upp_xxx that
50 ** we initialize to the correct value in the init routine.
52 #define AEIdleUPP AEIdleProcPtr
53 #define AEFilterUPP AEFilterProcPtr
54 #define AEEventHandlerUPP AEEventHandlerProcPtr
55 #define NewAEIdleProc(x) (x)
56 #define NewAEFilterProc(x) (x)
57 #define NewAEEventHandlerProc(x) (x)
60 static pascal OSErr
GenericEventHandler(); /* Forward */
62 AEEventHandlerUPP upp_GenericEventHandler
;
64 static pascal Boolean
AEIdleProc(EventRecord
*theEvent
, long *sleepTime
, RgnHandle
*mouseRgn
)
70 AEIdleUPP upp_AEIdleProc
;
72 static PyObject
*AE_Error
;
74 /* ----------------------- Object type AEDesc ----------------------- */
76 staticforward PyTypeObject AEDesc_Type
;
78 #define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type)
80 typedef struct AEDescObject
{
85 static PyObject
*AEDesc_New(itself
)
89 it
= PyObject_NEW(AEDescObject
, &AEDesc_Type
);
90 if (it
== NULL
) return NULL
;
91 it
->ob_itself
= *itself
;
92 return (PyObject
*)it
;
94 static AEDesc_Convert(v
, p_itself
)
100 PyErr_SetString(PyExc_TypeError
, "AEDesc required");
103 *p_itself
= ((AEDescObject
*)v
)->ob_itself
;
107 static void AEDesc_dealloc(self
)
110 AEDisposeDesc(&self
->ob_itself
);
114 static PyObject
*AEDesc_AECoerceDesc(_self
, _args
)
118 PyObject
*_res
= NULL
;
122 if (!PyArg_ParseTuple(_args
, "O&",
123 PyMac_GetOSType
, &toType
))
125 _err
= AECoerceDesc(&_self
->ob_itself
,
128 if (_err
!= noErr
) return PyMac_Error(_err
);
129 _res
= Py_BuildValue("O&",
130 AEDesc_New
, &result
);
134 static PyObject
*AEDesc_AEDuplicateDesc(_self
, _args
)
138 PyObject
*_res
= NULL
;
141 if (!PyArg_ParseTuple(_args
, ""))
143 _err
= AEDuplicateDesc(&_self
->ob_itself
,
145 if (_err
!= noErr
) return PyMac_Error(_err
);
146 _res
= Py_BuildValue("O&",
147 AEDesc_New
, &result
);
151 static PyObject
*AEDesc_AECountItems(_self
, _args
)
155 PyObject
*_res
= NULL
;
158 if (!PyArg_ParseTuple(_args
, ""))
160 _err
= AECountItems(&_self
->ob_itself
,
162 if (_err
!= noErr
) return PyMac_Error(_err
);
163 _res
= Py_BuildValue("l",
168 static PyObject
*AEDesc_AEPutPtr(_self
, _args
)
172 PyObject
*_res
= NULL
;
178 int dataPtr__in_len__
;
179 if (!PyArg_ParseTuple(_args
, "lO&s#",
181 PyMac_GetOSType
, &typeCode
,
182 &dataPtr__in__
, &dataPtr__in_len__
))
184 dataPtr__len__
= dataPtr__in_len__
;
185 _err
= AEPutPtr(&_self
->ob_itself
,
188 dataPtr__in__
, dataPtr__len__
);
189 if (_err
!= noErr
) return PyMac_Error(_err
);
196 static PyObject
*AEDesc_AEPutDesc(_self
, _args
)
200 PyObject
*_res
= NULL
;
204 if (!PyArg_ParseTuple(_args
, "lO&",
206 AEDesc_Convert
, &theAEDesc
))
208 _err
= AEPutDesc(&_self
->ob_itself
,
211 if (_err
!= noErr
) return PyMac_Error(_err
);
217 static PyObject
*AEDesc_AEGetNthPtr(_self
, _args
)
221 PyObject
*_res
= NULL
;
224 DescType desiredType
;
225 AEKeyword theAEKeyword
;
227 char *dataPtr__out__
;
229 int dataPtr__in_len__
;
230 if (!PyArg_ParseTuple(_args
, "lO&i",
232 PyMac_GetOSType
, &desiredType
,
235 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
238 goto dataPtr__error__
;
240 dataPtr__len__
= dataPtr__in_len__
;
241 _err
= AEGetNthPtr(&_self
->ob_itself
,
246 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
247 if (_err
!= noErr
) return PyMac_Error(_err
);
248 _res
= Py_BuildValue("O&O&s#",
249 PyMac_BuildOSType
, theAEKeyword
,
250 PyMac_BuildOSType
, typeCode
,
251 dataPtr__out__
, (int)dataPtr__len__
);
252 free(dataPtr__out__
);
257 static PyObject
*AEDesc_AEGetNthDesc(_self
, _args
)
261 PyObject
*_res
= NULL
;
264 DescType desiredType
;
265 AEKeyword theAEKeyword
;
267 if (!PyArg_ParseTuple(_args
, "lO&",
269 PyMac_GetOSType
, &desiredType
))
271 _err
= AEGetNthDesc(&_self
->ob_itself
,
276 if (_err
!= noErr
) return PyMac_Error(_err
);
277 _res
= Py_BuildValue("O&O&",
278 PyMac_BuildOSType
, theAEKeyword
,
279 AEDesc_New
, &result
);
283 static PyObject
*AEDesc_AESizeOfNthItem(_self
, _args
)
287 PyObject
*_res
= NULL
;
292 if (!PyArg_ParseTuple(_args
, "l",
295 _err
= AESizeOfNthItem(&_self
->ob_itself
,
299 if (_err
!= noErr
) return PyMac_Error(_err
);
300 _res
= Py_BuildValue("O&l",
301 PyMac_BuildOSType
, typeCode
,
306 static PyObject
*AEDesc_AEDeleteItem(_self
, _args
)
310 PyObject
*_res
= NULL
;
313 if (!PyArg_ParseTuple(_args
, "l",
316 _err
= AEDeleteItem(&_self
->ob_itself
,
318 if (_err
!= noErr
) return PyMac_Error(_err
);
324 static PyObject
*AEDesc_AEPutParamPtr(_self
, _args
)
328 PyObject
*_res
= NULL
;
330 AEKeyword theAEKeyword
;
334 int dataPtr__in_len__
;
335 if (!PyArg_ParseTuple(_args
, "O&O&s#",
336 PyMac_GetOSType
, &theAEKeyword
,
337 PyMac_GetOSType
, &typeCode
,
338 &dataPtr__in__
, &dataPtr__in_len__
))
340 dataPtr__len__
= dataPtr__in_len__
;
341 _err
= AEPutParamPtr(&_self
->ob_itself
,
344 dataPtr__in__
, dataPtr__len__
);
345 if (_err
!= noErr
) return PyMac_Error(_err
);
352 static PyObject
*AEDesc_AEPutParamDesc(_self
, _args
)
356 PyObject
*_res
= NULL
;
358 AEKeyword theAEKeyword
;
360 if (!PyArg_ParseTuple(_args
, "O&O&",
361 PyMac_GetOSType
, &theAEKeyword
,
362 AEDesc_Convert
, &theAEDesc
))
364 _err
= AEPutParamDesc(&_self
->ob_itself
,
367 if (_err
!= noErr
) return PyMac_Error(_err
);
373 static PyObject
*AEDesc_AEGetParamPtr(_self
, _args
)
377 PyObject
*_res
= NULL
;
379 AEKeyword theAEKeyword
;
380 DescType desiredType
;
382 char *dataPtr__out__
;
384 int dataPtr__in_len__
;
385 if (!PyArg_ParseTuple(_args
, "O&O&i",
386 PyMac_GetOSType
, &theAEKeyword
,
387 PyMac_GetOSType
, &desiredType
,
390 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
393 goto dataPtr__error__
;
395 dataPtr__len__
= dataPtr__in_len__
;
396 _err
= AEGetParamPtr(&_self
->ob_itself
,
400 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
401 if (_err
!= noErr
) return PyMac_Error(_err
);
402 _res
= Py_BuildValue("O&s#",
403 PyMac_BuildOSType
, typeCode
,
404 dataPtr__out__
, (int)dataPtr__len__
);
405 free(dataPtr__out__
);
410 static PyObject
*AEDesc_AEGetParamDesc(_self
, _args
)
414 PyObject
*_res
= NULL
;
416 AEKeyword theAEKeyword
;
417 DescType desiredType
;
419 if (!PyArg_ParseTuple(_args
, "O&O&",
420 PyMac_GetOSType
, &theAEKeyword
,
421 PyMac_GetOSType
, &desiredType
))
423 _err
= AEGetParamDesc(&_self
->ob_itself
,
427 if (_err
!= noErr
) return PyMac_Error(_err
);
428 _res
= Py_BuildValue("O&",
429 AEDesc_New
, &result
);
433 static PyObject
*AEDesc_AESizeOfParam(_self
, _args
)
437 PyObject
*_res
= NULL
;
439 AEKeyword theAEKeyword
;
442 if (!PyArg_ParseTuple(_args
, "O&",
443 PyMac_GetOSType
, &theAEKeyword
))
445 _err
= AESizeOfParam(&_self
->ob_itself
,
449 if (_err
!= noErr
) return PyMac_Error(_err
);
450 _res
= Py_BuildValue("O&l",
451 PyMac_BuildOSType
, typeCode
,
456 static PyObject
*AEDesc_AEDeleteParam(_self
, _args
)
460 PyObject
*_res
= NULL
;
462 AEKeyword theAEKeyword
;
463 if (!PyArg_ParseTuple(_args
, "O&",
464 PyMac_GetOSType
, &theAEKeyword
))
466 _err
= AEDeleteParam(&_self
->ob_itself
,
468 if (_err
!= noErr
) return PyMac_Error(_err
);
474 static PyObject
*AEDesc_AEGetAttributePtr(_self
, _args
)
478 PyObject
*_res
= NULL
;
480 AEKeyword theAEKeyword
;
481 DescType desiredType
;
483 char *dataPtr__out__
;
485 int dataPtr__in_len__
;
486 if (!PyArg_ParseTuple(_args
, "O&O&i",
487 PyMac_GetOSType
, &theAEKeyword
,
488 PyMac_GetOSType
, &desiredType
,
491 if ((dataPtr__out__
= malloc(dataPtr__in_len__
)) == NULL
)
494 goto dataPtr__error__
;
496 dataPtr__len__
= dataPtr__in_len__
;
497 _err
= AEGetAttributePtr(&_self
->ob_itself
,
501 dataPtr__out__
, dataPtr__len__
, &dataPtr__len__
);
502 if (_err
!= noErr
) return PyMac_Error(_err
);
503 _res
= Py_BuildValue("O&s#",
504 PyMac_BuildOSType
, typeCode
,
505 dataPtr__out__
, (int)dataPtr__len__
);
506 free(dataPtr__out__
);
511 static PyObject
*AEDesc_AEGetAttributeDesc(_self
, _args
)
515 PyObject
*_res
= NULL
;
517 AEKeyword theAEKeyword
;
518 DescType desiredType
;
520 if (!PyArg_ParseTuple(_args
, "O&O&",
521 PyMac_GetOSType
, &theAEKeyword
,
522 PyMac_GetOSType
, &desiredType
))
524 _err
= AEGetAttributeDesc(&_self
->ob_itself
,
528 if (_err
!= noErr
) return PyMac_Error(_err
);
529 _res
= Py_BuildValue("O&",
530 AEDesc_New
, &result
);
534 static PyObject
*AEDesc_AESizeOfAttribute(_self
, _args
)
538 PyObject
*_res
= NULL
;
540 AEKeyword theAEKeyword
;
543 if (!PyArg_ParseTuple(_args
, "O&",
544 PyMac_GetOSType
, &theAEKeyword
))
546 _err
= AESizeOfAttribute(&_self
->ob_itself
,
550 if (_err
!= noErr
) return PyMac_Error(_err
);
551 _res
= Py_BuildValue("O&l",
552 PyMac_BuildOSType
, typeCode
,
557 static PyObject
*AEDesc_AEPutAttributePtr(_self
, _args
)
561 PyObject
*_res
= NULL
;
563 AEKeyword theAEKeyword
;
567 int dataPtr__in_len__
;
568 if (!PyArg_ParseTuple(_args
, "O&O&s#",
569 PyMac_GetOSType
, &theAEKeyword
,
570 PyMac_GetOSType
, &typeCode
,
571 &dataPtr__in__
, &dataPtr__in_len__
))
573 dataPtr__len__
= dataPtr__in_len__
;
574 _err
= AEPutAttributePtr(&_self
->ob_itself
,
577 dataPtr__in__
, dataPtr__len__
);
578 if (_err
!= noErr
) return PyMac_Error(_err
);
585 static PyObject
*AEDesc_AEPutAttributeDesc(_self
, _args
)
589 PyObject
*_res
= NULL
;
591 AEKeyword theAEKeyword
;
593 if (!PyArg_ParseTuple(_args
, "O&O&",
594 PyMac_GetOSType
, &theAEKeyword
,
595 AEDesc_Convert
, &theAEDesc
))
597 _err
= AEPutAttributeDesc(&_self
->ob_itself
,
600 if (_err
!= noErr
) return PyMac_Error(_err
);
606 static PyObject
*AEDesc_AESend(_self
, _args
)
610 PyObject
*_res
= NULL
;
614 AESendPriority sendPriority
;
616 if (!PyArg_ParseTuple(_args
, "lhl",
621 _err
= AESend(&_self
->ob_itself
,
628 if (_err
!= noErr
) return PyMac_Error(_err
);
629 _res
= Py_BuildValue("O&",
634 static PyObject
*AEDesc_AEResetTimer(_self
, _args
)
638 PyObject
*_res
= NULL
;
640 if (!PyArg_ParseTuple(_args
, ""))
642 _err
= AEResetTimer(&_self
->ob_itself
);
643 if (_err
!= noErr
) return PyMac_Error(_err
);
649 static PyObject
*AEDesc_AESuspendTheCurrentEvent(_self
, _args
)
653 PyObject
*_res
= NULL
;
655 if (!PyArg_ParseTuple(_args
, ""))
657 _err
= AESuspendTheCurrentEvent(&_self
->ob_itself
);
658 if (_err
!= noErr
) return PyMac_Error(_err
);
664 static PyObject
*AEDesc_AEResumeTheCurrentEvent(_self
, _args
)
668 PyObject
*_res
= NULL
;
671 AEEventHandlerUPP dispatcher__proc__
= upp_GenericEventHandler
;
672 PyObject
*dispatcher
;
673 if (!PyArg_ParseTuple(_args
, "O&O",
674 AEDesc_Convert
, &reply
,
677 _err
= AEResumeTheCurrentEvent(&_self
->ob_itself
,
679 dispatcher__proc__
, (long)dispatcher
);
680 if (_err
!= noErr
) return PyMac_Error(_err
);
683 Py_INCREF(dispatcher
); /* XXX leak, but needed */
687 static PyObject
*AEDesc_AEGetTheCurrentEvent(_self
, _args
)
691 PyObject
*_res
= NULL
;
693 if (!PyArg_ParseTuple(_args
, ""))
695 _err
= AEGetTheCurrentEvent(&_self
->ob_itself
);
696 if (_err
!= noErr
) return PyMac_Error(_err
);
702 static PyObject
*AEDesc_AESetTheCurrentEvent(_self
, _args
)
706 PyObject
*_res
= NULL
;
708 if (!PyArg_ParseTuple(_args
, ""))
710 _err
= AESetTheCurrentEvent(&_self
->ob_itself
);
711 if (_err
!= noErr
) return PyMac_Error(_err
);
717 static PyMethodDef AEDesc_methods
[] = {
718 {"AECoerceDesc", (PyCFunction
)AEDesc_AECoerceDesc
, 1,
719 "(DescType toType) -> (AEDesc result)"},
720 {"AEDuplicateDesc", (PyCFunction
)AEDesc_AEDuplicateDesc
, 1,
721 "() -> (AEDesc result)"},
722 {"AECountItems", (PyCFunction
)AEDesc_AECountItems
, 1,
723 "() -> (long theCount)"},
724 {"AEPutPtr", (PyCFunction
)AEDesc_AEPutPtr
, 1,
725 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
726 {"AEPutDesc", (PyCFunction
)AEDesc_AEPutDesc
, 1,
727 "(long index, AEDesc theAEDesc) -> None"},
728 {"AEGetNthPtr", (PyCFunction
)AEDesc_AEGetNthPtr
, 1,
729 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
730 {"AEGetNthDesc", (PyCFunction
)AEDesc_AEGetNthDesc
, 1,
731 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
732 {"AESizeOfNthItem", (PyCFunction
)AEDesc_AESizeOfNthItem
, 1,
733 "(long index) -> (DescType typeCode, Size dataSize)"},
734 {"AEDeleteItem", (PyCFunction
)AEDesc_AEDeleteItem
, 1,
735 "(long index) -> None"},
736 {"AEPutParamPtr", (PyCFunction
)AEDesc_AEPutParamPtr
, 1,
737 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
738 {"AEPutParamDesc", (PyCFunction
)AEDesc_AEPutParamDesc
, 1,
739 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
740 {"AEGetParamPtr", (PyCFunction
)AEDesc_AEGetParamPtr
, 1,
741 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
742 {"AEGetParamDesc", (PyCFunction
)AEDesc_AEGetParamDesc
, 1,
743 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
744 {"AESizeOfParam", (PyCFunction
)AEDesc_AESizeOfParam
, 1,
745 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
746 {"AEDeleteParam", (PyCFunction
)AEDesc_AEDeleteParam
, 1,
747 "(AEKeyword theAEKeyword) -> None"},
748 {"AEGetAttributePtr", (PyCFunction
)AEDesc_AEGetAttributePtr
, 1,
749 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
750 {"AEGetAttributeDesc", (PyCFunction
)AEDesc_AEGetAttributeDesc
, 1,
751 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
752 {"AESizeOfAttribute", (PyCFunction
)AEDesc_AESizeOfAttribute
, 1,
753 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
754 {"AEPutAttributePtr", (PyCFunction
)AEDesc_AEPutAttributePtr
, 1,
755 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
756 {"AEPutAttributeDesc", (PyCFunction
)AEDesc_AEPutAttributeDesc
, 1,
757 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
758 {"AESend", (PyCFunction
)AEDesc_AESend
, 1,
759 "(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)"},
760 {"AEResetTimer", (PyCFunction
)AEDesc_AEResetTimer
, 1,
762 {"AESuspendTheCurrentEvent", (PyCFunction
)AEDesc_AESuspendTheCurrentEvent
, 1,
764 {"AEResumeTheCurrentEvent", (PyCFunction
)AEDesc_AEResumeTheCurrentEvent
, 1,
765 "(AppleEvent reply, EventHandler dispatcher) -> None"},
766 {"AEGetTheCurrentEvent", (PyCFunction
)AEDesc_AEGetTheCurrentEvent
, 1,
768 {"AESetTheCurrentEvent", (PyCFunction
)AEDesc_AESetTheCurrentEvent
, 1,
773 static PyMethodChain AEDesc_chain
= { AEDesc_methods
, NULL
};
775 static PyObject
*AEDesc_getattr(self
, name
)
780 if (strcmp(name
, "type") == 0)
781 return PyMac_BuildOSType(self
->ob_itself
.descriptorType
);
782 if (strcmp(name
, "data") == 0) {
785 state
= HGetState(self
->ob_itself
.dataHandle
);
786 HLock(self
->ob_itself
.dataHandle
);
787 res
= PyString_FromStringAndSize(
788 *self
->ob_itself
.dataHandle
,
789 GetHandleSize(self
->ob_itself
.dataHandle
));
790 HUnlock(self
->ob_itself
.dataHandle
);
791 HSetState(self
->ob_itself
.dataHandle
, state
);
794 if (strcmp(name
, "__members__") == 0)
795 return Py_BuildValue("[ss]", "data", "type");
797 return Py_FindMethodInChain(&AEDesc_chain
, (PyObject
*)self
, name
);
800 #define AEDesc_setattr NULL
802 staticforward PyTypeObject AEDesc_Type
= {
803 PyObject_HEAD_INIT(&PyType_Type
)
805 "AEDesc", /*tp_name*/
806 sizeof(AEDescObject
), /*tp_basicsize*/
809 (destructor
) AEDesc_dealloc
, /*tp_dealloc*/
811 (getattrfunc
) AEDesc_getattr
, /*tp_getattr*/
812 (setattrfunc
) AEDesc_setattr
, /*tp_setattr*/
815 /* --------------------- End object type AEDesc --------------------- */
818 static PyObject
*AE_AECreateDesc(_self
, _args
)
822 PyObject
*_res
= NULL
;
827 int dataPtr__in_len__
;
829 if (!PyArg_ParseTuple(_args
, "O&s#",
830 PyMac_GetOSType
, &typeCode
,
831 &dataPtr__in__
, &dataPtr__in_len__
))
833 dataPtr__len__
= dataPtr__in_len__
;
834 _err
= AECreateDesc(typeCode
,
835 dataPtr__in__
, dataPtr__len__
,
837 if (_err
!= noErr
) return PyMac_Error(_err
);
838 _res
= Py_BuildValue("O&",
839 AEDesc_New
, &result
);
844 static PyObject
*AE_AECoercePtr(_self
, _args
)
848 PyObject
*_res
= NULL
;
853 int dataPtr__in_len__
;
856 if (!PyArg_ParseTuple(_args
, "O&s#O&",
857 PyMac_GetOSType
, &typeCode
,
858 &dataPtr__in__
, &dataPtr__in_len__
,
859 PyMac_GetOSType
, &toType
))
861 dataPtr__len__
= dataPtr__in_len__
;
862 _err
= AECoercePtr(typeCode
,
863 dataPtr__in__
, dataPtr__len__
,
866 if (_err
!= noErr
) return PyMac_Error(_err
);
867 _res
= Py_BuildValue("O&",
868 AEDesc_New
, &result
);
873 static PyObject
*AE_AECreateList(_self
, _args
)
877 PyObject
*_res
= NULL
;
879 char *factoringPtr__in__
;
880 long factoringPtr__len__
;
881 int factoringPtr__in_len__
;
883 AEDescList resultList
;
884 if (!PyArg_ParseTuple(_args
, "s#b",
885 &factoringPtr__in__
, &factoringPtr__in_len__
,
888 factoringPtr__len__
= factoringPtr__in_len__
;
889 _err
= AECreateList(factoringPtr__in__
, factoringPtr__len__
,
892 if (_err
!= noErr
) return PyMac_Error(_err
);
893 _res
= Py_BuildValue("O&",
894 AEDesc_New
, &resultList
);
895 factoringPtr__error__
: ;
899 static PyObject
*AE_AECreateAppleEvent(_self
, _args
)
903 PyObject
*_res
= NULL
;
905 AEEventClass theAEEventClass
;
906 AEEventID theAEEventID
;
907 AEAddressDesc target
;
911 if (!PyArg_ParseTuple(_args
, "O&O&O&hl",
912 PyMac_GetOSType
, &theAEEventClass
,
913 PyMac_GetOSType
, &theAEEventID
,
914 AEDesc_Convert
, &target
,
918 _err
= AECreateAppleEvent(theAEEventClass
,
924 if (_err
!= noErr
) return PyMac_Error(_err
);
925 _res
= Py_BuildValue("O&",
926 AEDesc_New
, &result
);
930 static PyObject
*AE_AEProcessAppleEvent(_self
, _args
)
934 PyObject
*_res
= NULL
;
936 EventRecord theEventRecord
;
937 if (!PyArg_ParseTuple(_args
, "O&",
938 PyMac_GetEventRecord
, &theEventRecord
))
940 _err
= AEProcessAppleEvent(&theEventRecord
);
941 if (_err
!= noErr
) return PyMac_Error(_err
);
947 static PyObject
*AE_AEGetInteractionAllowed(_self
, _args
)
951 PyObject
*_res
= NULL
;
953 AEInteractAllowed level
;
954 if (!PyArg_ParseTuple(_args
, ""))
956 _err
= AEGetInteractionAllowed(&level
);
957 if (_err
!= noErr
) return PyMac_Error(_err
);
958 _res
= Py_BuildValue("b",
963 static PyObject
*AE_AESetInteractionAllowed(_self
, _args
)
967 PyObject
*_res
= NULL
;
969 AEInteractAllowed level
;
970 if (!PyArg_ParseTuple(_args
, "b",
973 _err
= AESetInteractionAllowed(level
);
974 if (_err
!= noErr
) return PyMac_Error(_err
);
980 static PyObject
*AE_AEInteractWithUser(_self
, _args
)
984 PyObject
*_res
= NULL
;
987 if (!PyArg_ParseTuple(_args
, "l",
990 _err
= AEInteractWithUser(timeOutInTicks
,
993 if (_err
!= noErr
) return PyMac_Error(_err
);
999 static PyObject
*AE_AEInstallEventHandler(_self
, _args
)
1003 PyObject
*_res
= NULL
;
1005 AEEventClass theAEEventClass
;
1006 AEEventID theAEEventID
;
1007 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
1009 if (!PyArg_ParseTuple(_args
, "O&O&O",
1010 PyMac_GetOSType
, &theAEEventClass
,
1011 PyMac_GetOSType
, &theAEEventID
,
1014 _err
= AEInstallEventHandler(theAEEventClass
,
1016 handler__proc__
, (long)handler
,
1018 if (_err
!= noErr
) return PyMac_Error(_err
);
1021 Py_INCREF(handler
); /* XXX leak, but needed */
1025 static PyObject
*AE_AERemoveEventHandler(_self
, _args
)
1029 PyObject
*_res
= NULL
;
1031 AEEventClass theAEEventClass
;
1032 AEEventID theAEEventID
;
1033 if (!PyArg_ParseTuple(_args
, "O&O&",
1034 PyMac_GetOSType
, &theAEEventClass
,
1035 PyMac_GetOSType
, &theAEEventID
))
1037 _err
= AERemoveEventHandler(theAEEventClass
,
1039 upp_GenericEventHandler
,
1041 if (_err
!= noErr
) return PyMac_Error(_err
);
1047 static PyObject
*AE_AEGetEventHandler(_self
, _args
)
1051 PyObject
*_res
= NULL
;
1053 AEEventClass theAEEventClass
;
1054 AEEventID theAEEventID
;
1055 AEEventHandlerUPP handler__proc__
= upp_GenericEventHandler
;
1057 if (!PyArg_ParseTuple(_args
, "O&O&",
1058 PyMac_GetOSType
, &theAEEventClass
,
1059 PyMac_GetOSType
, &theAEEventID
))
1061 _err
= AEGetEventHandler(theAEEventClass
,
1063 &handler__proc__
, (long *)&handler
,
1065 if (_err
!= noErr
) return PyMac_Error(_err
);
1066 _res
= Py_BuildValue("O",
1068 Py_INCREF(handler
); /* XXX leak, but needed */
1072 static PyObject
*AE_AEManagerInfo(_self
, _args
)
1076 PyObject
*_res
= NULL
;
1080 if (!PyArg_ParseTuple(_args
, "O&",
1081 PyMac_GetOSType
, &keyWord
))
1083 _err
= AEManagerInfo(keyWord
,
1085 if (_err
!= noErr
) return PyMac_Error(_err
);
1086 _res
= Py_BuildValue("l",
1091 static PyMethodDef AE_methods
[] = {
1092 {"AECreateDesc", (PyCFunction
)AE_AECreateDesc
, 1,
1093 "(DescType typeCode, Buffer dataPtr) -> (AEDesc result)"},
1094 {"AECoercePtr", (PyCFunction
)AE_AECoercePtr
, 1,
1095 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
1096 {"AECreateList", (PyCFunction
)AE_AECreateList
, 1,
1097 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
1098 {"AECreateAppleEvent", (PyCFunction
)AE_AECreateAppleEvent
, 1,
1099 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, short returnID, long transactionID) -> (AppleEvent result)"},
1100 {"AEProcessAppleEvent", (PyCFunction
)AE_AEProcessAppleEvent
, 1,
1101 "(EventRecord theEventRecord) -> None"},
1102 {"AEGetInteractionAllowed", (PyCFunction
)AE_AEGetInteractionAllowed
, 1,
1103 "() -> (AEInteractAllowed level)"},
1104 {"AESetInteractionAllowed", (PyCFunction
)AE_AESetInteractionAllowed
, 1,
1105 "(AEInteractAllowed level) -> None"},
1106 {"AEInteractWithUser", (PyCFunction
)AE_AEInteractWithUser
, 1,
1107 "(long timeOutInTicks) -> None"},
1108 {"AEInstallEventHandler", (PyCFunction
)AE_AEInstallEventHandler
, 1,
1109 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
1110 {"AERemoveEventHandler", (PyCFunction
)AE_AERemoveEventHandler
, 1,
1111 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
1112 {"AEGetEventHandler", (PyCFunction
)AE_AEGetEventHandler
, 1,
1113 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)"},
1114 {"AEManagerInfo", (PyCFunction
)AE_AEManagerInfo
, 1,
1115 "(AEKeyword keyWord) -> (long result)"},
1122 GenericEventHandler(AppleEvent
*request
, AppleEvent
*reply
, long refcon
)
1124 PyObject
*handler
= (PyObject
*)refcon
;
1125 AEDescObject
*requestObject
, *replyObject
;
1126 PyObject
*args
, *res
;
1127 if ((requestObject
= (AEDescObject
*)AEDesc_New(request
)) == NULL
) {
1130 if ((replyObject
= (AEDescObject
*)AEDesc_New(reply
)) == NULL
) {
1131 Py_DECREF(requestObject
);
1134 if ((args
= Py_BuildValue("OO", requestObject
, replyObject
)) == NULL
) {
1135 Py_DECREF(requestObject
);
1136 Py_DECREF(replyObject
);
1139 res
= PyEval_CallObject(handler
, args
);
1140 requestObject
->ob_itself
.descriptorType
= 'null';
1141 requestObject
->ob_itself
.dataHandle
= NULL
;
1142 replyObject
->ob_itself
.descriptorType
= 'null';
1143 replyObject
->ob_itself
.dataHandle
= NULL
;
1159 upp_AEIdleProc
= NewAEIdleProc(AEIdleProc
);
1160 upp_GenericEventHandler
= NewAEEventHandlerProc(GenericEventHandler
);
1163 m
= Py_InitModule("AE", AE_methods
);
1164 d
= PyModule_GetDict(m
);
1165 AE_Error
= PyMac_GetOSErrException();
1166 if (AE_Error
== NULL
||
1167 PyDict_SetItemString(d
, "Error", AE_Error
) != 0)
1168 Py_FatalError("can't initialize AE.Error");
1171 /* ========================= End module AE ========================== */