| |
| /* =========================== Module _AE =========================== */ |
| |
| #include "Python.h" |
| |
| |
| |
| #ifdef _WIN32 |
| #include "pywintoolbox.h" |
| #else |
| #include "macglue.h" |
| #include "pymactoolbox.h" |
| #endif |
| |
| /* Macro to test whether a weak-loaded CFM function exists */ |
| #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\ |
| PyErr_SetString(PyExc_NotImplementedError, \ |
| "Not available in this shared library/OS version"); \ |
| return NULL; \ |
| }} while(0) |
| |
| |
| #ifndef PyDoc_STR |
| #define PyDoc_STR(x) (x) |
| #endif |
| #ifdef WITHOUT_FRAMEWORKS |
| #include <AppleEvents.h> |
| #include <AEObjects.h> |
| #else |
| #include <Carbon/Carbon.h> |
| #endif |
| |
| #ifdef USE_TOOLBOX_OBJECT_GLUE |
| extern PyObject *_AEDesc_New(AEDesc *); |
| extern int _AEDesc_Convert(PyObject *, AEDesc *); |
| |
| #define AEDesc_New _AEDesc_New |
| #define AEDesc_Convert _AEDesc_Convert |
| #endif |
| |
| #if UNIVERSAL_INTERFACES_VERSION >= 0x0340 |
| typedef long refcontype; |
| #else |
| typedef unsigned long refcontype; |
| #endif |
| |
| static pascal OSErr GenericEventHandler(const AppleEvent *request, AppleEvent *reply, refcontype refcon); /* Forward */ |
| |
| AEEventHandlerUPP upp_GenericEventHandler; |
| |
| static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn) |
| { |
| if ( PyOS_InterruptOccurred() ) |
| return 1; |
| #if !TARGET_API_MAC_OSX |
| if ( PyMac_HandleEvent(theEvent) < 0 ) { |
| PySys_WriteStderr("Exception in user event handler during AE processing\n"); |
| PyErr_Clear(); |
| } |
| #endif |
| return 0; |
| } |
| |
| AEIdleUPP upp_AEIdleProc; |
| |
| static PyObject *AE_Error; |
| |
| /* ----------------------- Object type AEDesc ----------------------- */ |
| |
| PyTypeObject AEDesc_Type; |
| |
| #define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type) |
| |
| typedef struct AEDescObject { |
| PyObject_HEAD |
| AEDesc ob_itself; |
| } AEDescObject; |
| |
| PyObject *AEDesc_New(AEDesc *itself) |
| { |
| AEDescObject *it; |
| it = PyObject_NEW(AEDescObject, &AEDesc_Type); |
| if (it == NULL) return NULL; |
| it->ob_itself = *itself; |
| return (PyObject *)it; |
| } |
| int AEDesc_Convert(PyObject *v, AEDesc *p_itself) |
| { |
| if (!AEDesc_Check(v)) |
| { |
| PyErr_SetString(PyExc_TypeError, "AEDesc required"); |
| return 0; |
| } |
| *p_itself = ((AEDescObject *)v)->ob_itself; |
| return 1; |
| } |
| |
| static void AEDesc_dealloc(AEDescObject *self) |
| { |
| AEDisposeDesc(&self->ob_itself); |
| PyObject_Del(self); |
| } |
| |
| static PyObject *AEDesc_AECoerceDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| DescType toType; |
| AEDesc result; |
| #ifndef AECoerceDesc |
| PyMac_PRECHECK(AECoerceDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetOSType, &toType)) |
| return NULL; |
| _err = AECoerceDesc(&_self->ob_itself, |
| toType, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEDuplicateDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEDesc result; |
| #ifndef AEDuplicateDesc |
| PyMac_PRECHECK(AEDuplicateDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AEDuplicateDesc(&_self->ob_itself, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AECountItems(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long theCount; |
| #ifndef AECountItems |
| PyMac_PRECHECK(AECountItems); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AECountItems(&_self->ob_itself, |
| &theCount); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("l", |
| theCount); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEPutPtr(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long index; |
| DescType typeCode; |
| char *dataPtr__in__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| #ifndef AEPutPtr |
| PyMac_PRECHECK(AEPutPtr); |
| #endif |
| if (!PyArg_ParseTuple(_args, "lO&s#", |
| &index, |
| PyMac_GetOSType, &typeCode, |
| &dataPtr__in__, &dataPtr__in_len__)) |
| return NULL; |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AEPutPtr(&_self->ob_itself, |
| index, |
| typeCode, |
| dataPtr__in__, dataPtr__len__); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEPutDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long index; |
| AEDesc theAEDesc; |
| #ifndef AEPutDesc |
| PyMac_PRECHECK(AEPutDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "lO&", |
| &index, |
| AEDesc_Convert, &theAEDesc)) |
| return NULL; |
| _err = AEPutDesc(&_self->ob_itself, |
| index, |
| &theAEDesc); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEGetNthPtr(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long index; |
| DescType desiredType; |
| AEKeyword theAEKeyword; |
| DescType typeCode; |
| char *dataPtr__out__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| #ifndef AEGetNthPtr |
| PyMac_PRECHECK(AEGetNthPtr); |
| #endif |
| if (!PyArg_ParseTuple(_args, "lO&i", |
| &index, |
| PyMac_GetOSType, &desiredType, |
| &dataPtr__in_len__)) |
| return NULL; |
| if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL) |
| { |
| PyErr_NoMemory(); |
| goto dataPtr__error__; |
| } |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AEGetNthPtr(&_self->ob_itself, |
| index, |
| desiredType, |
| &theAEKeyword, |
| &typeCode, |
| dataPtr__out__, dataPtr__len__, &dataPtr__len__); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&O&s#", |
| PyMac_BuildOSType, theAEKeyword, |
| PyMac_BuildOSType, typeCode, |
| dataPtr__out__, (int)dataPtr__len__); |
| free(dataPtr__out__); |
| dataPtr__error__: ; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEGetNthDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long index; |
| DescType desiredType; |
| AEKeyword theAEKeyword; |
| AEDesc result; |
| #ifndef AEGetNthDesc |
| PyMac_PRECHECK(AEGetNthDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "lO&", |
| &index, |
| PyMac_GetOSType, &desiredType)) |
| return NULL; |
| _err = AEGetNthDesc(&_self->ob_itself, |
| index, |
| desiredType, |
| &theAEKeyword, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&O&", |
| PyMac_BuildOSType, theAEKeyword, |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AESizeOfNthItem(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long index; |
| DescType typeCode; |
| Size dataSize; |
| #ifndef AESizeOfNthItem |
| PyMac_PRECHECK(AESizeOfNthItem); |
| #endif |
| if (!PyArg_ParseTuple(_args, "l", |
| &index)) |
| return NULL; |
| _err = AESizeOfNthItem(&_self->ob_itself, |
| index, |
| &typeCode, |
| &dataSize); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&l", |
| PyMac_BuildOSType, typeCode, |
| dataSize); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEDeleteItem(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long index; |
| #ifndef AEDeleteItem |
| PyMac_PRECHECK(AEDeleteItem); |
| #endif |
| if (!PyArg_ParseTuple(_args, "l", |
| &index)) |
| return NULL; |
| _err = AEDeleteItem(&_self->ob_itself, |
| index); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEPutParamPtr(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType typeCode; |
| char *dataPtr__in__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| #ifndef AEPutParamPtr |
| PyMac_PRECHECK(AEPutParamPtr); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&s#", |
| PyMac_GetOSType, &theAEKeyword, |
| PyMac_GetOSType, &typeCode, |
| &dataPtr__in__, &dataPtr__in_len__)) |
| return NULL; |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AEPutParamPtr(&_self->ob_itself, |
| theAEKeyword, |
| typeCode, |
| dataPtr__in__, dataPtr__len__); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEPutParamDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| AEDesc theAEDesc; |
| #ifndef AEPutParamDesc |
| PyMac_PRECHECK(AEPutParamDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&", |
| PyMac_GetOSType, &theAEKeyword, |
| AEDesc_Convert, &theAEDesc)) |
| return NULL; |
| _err = AEPutParamDesc(&_self->ob_itself, |
| theAEKeyword, |
| &theAEDesc); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEGetParamPtr(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType desiredType; |
| DescType typeCode; |
| char *dataPtr__out__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| #ifndef AEGetParamPtr |
| PyMac_PRECHECK(AEGetParamPtr); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&i", |
| PyMac_GetOSType, &theAEKeyword, |
| PyMac_GetOSType, &desiredType, |
| &dataPtr__in_len__)) |
| return NULL; |
| if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL) |
| { |
| PyErr_NoMemory(); |
| goto dataPtr__error__; |
| } |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AEGetParamPtr(&_self->ob_itself, |
| theAEKeyword, |
| desiredType, |
| &typeCode, |
| dataPtr__out__, dataPtr__len__, &dataPtr__len__); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&s#", |
| PyMac_BuildOSType, typeCode, |
| dataPtr__out__, (int)dataPtr__len__); |
| free(dataPtr__out__); |
| dataPtr__error__: ; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEGetParamDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType desiredType; |
| AEDesc result; |
| #ifndef AEGetParamDesc |
| PyMac_PRECHECK(AEGetParamDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&", |
| PyMac_GetOSType, &theAEKeyword, |
| PyMac_GetOSType, &desiredType)) |
| return NULL; |
| _err = AEGetParamDesc(&_self->ob_itself, |
| theAEKeyword, |
| desiredType, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AESizeOfParam(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType typeCode; |
| Size dataSize; |
| #ifndef AESizeOfParam |
| PyMac_PRECHECK(AESizeOfParam); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetOSType, &theAEKeyword)) |
| return NULL; |
| _err = AESizeOfParam(&_self->ob_itself, |
| theAEKeyword, |
| &typeCode, |
| &dataSize); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&l", |
| PyMac_BuildOSType, typeCode, |
| dataSize); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEDeleteParam(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| #ifndef AEDeleteParam |
| PyMac_PRECHECK(AEDeleteParam); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetOSType, &theAEKeyword)) |
| return NULL; |
| _err = AEDeleteParam(&_self->ob_itself, |
| theAEKeyword); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEGetAttributePtr(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType desiredType; |
| DescType typeCode; |
| char *dataPtr__out__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| #ifndef AEGetAttributePtr |
| PyMac_PRECHECK(AEGetAttributePtr); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&i", |
| PyMac_GetOSType, &theAEKeyword, |
| PyMac_GetOSType, &desiredType, |
| &dataPtr__in_len__)) |
| return NULL; |
| if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL) |
| { |
| PyErr_NoMemory(); |
| goto dataPtr__error__; |
| } |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AEGetAttributePtr(&_self->ob_itself, |
| theAEKeyword, |
| desiredType, |
| &typeCode, |
| dataPtr__out__, dataPtr__len__, &dataPtr__len__); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&s#", |
| PyMac_BuildOSType, typeCode, |
| dataPtr__out__, (int)dataPtr__len__); |
| free(dataPtr__out__); |
| dataPtr__error__: ; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEGetAttributeDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType desiredType; |
| AEDesc result; |
| #ifndef AEGetAttributeDesc |
| PyMac_PRECHECK(AEGetAttributeDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&", |
| PyMac_GetOSType, &theAEKeyword, |
| PyMac_GetOSType, &desiredType)) |
| return NULL; |
| _err = AEGetAttributeDesc(&_self->ob_itself, |
| theAEKeyword, |
| desiredType, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AESizeOfAttribute(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType typeCode; |
| Size dataSize; |
| #ifndef AESizeOfAttribute |
| PyMac_PRECHECK(AESizeOfAttribute); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetOSType, &theAEKeyword)) |
| return NULL; |
| _err = AESizeOfAttribute(&_self->ob_itself, |
| theAEKeyword, |
| &typeCode, |
| &dataSize); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&l", |
| PyMac_BuildOSType, typeCode, |
| dataSize); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEPutAttributePtr(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| DescType typeCode; |
| char *dataPtr__in__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| #ifndef AEPutAttributePtr |
| PyMac_PRECHECK(AEPutAttributePtr); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&s#", |
| PyMac_GetOSType, &theAEKeyword, |
| PyMac_GetOSType, &typeCode, |
| &dataPtr__in__, &dataPtr__in_len__)) |
| return NULL; |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AEPutAttributePtr(&_self->ob_itself, |
| theAEKeyword, |
| typeCode, |
| dataPtr__in__, dataPtr__len__); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEPutAttributeDesc(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword theAEKeyword; |
| AEDesc theAEDesc; |
| #ifndef AEPutAttributeDesc |
| PyMac_PRECHECK(AEPutAttributeDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&", |
| PyMac_GetOSType, &theAEKeyword, |
| AEDesc_Convert, &theAEDesc)) |
| return NULL; |
| _err = AEPutAttributeDesc(&_self->ob_itself, |
| theAEKeyword, |
| &theAEDesc); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| #if TARGET_API_MAC_CARBON |
| |
| static PyObject *AEDesc_AEGetDescDataSize(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| Size _rv; |
| #ifndef AEGetDescDataSize |
| PyMac_PRECHECK(AEGetDescDataSize); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _rv = AEGetDescDataSize(&_self->ob_itself); |
| _res = Py_BuildValue("l", |
| _rv); |
| return _res; |
| } |
| #endif |
| |
| static PyObject *AEDesc_AESend(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AppleEvent reply; |
| AESendMode sendMode; |
| AESendPriority sendPriority; |
| long timeOutInTicks; |
| #ifndef AESend |
| PyMac_PRECHECK(AESend); |
| #endif |
| if (!PyArg_ParseTuple(_args, "lhl", |
| &sendMode, |
| &sendPriority, |
| &timeOutInTicks)) |
| return NULL; |
| _err = AESend(&_self->ob_itself, |
| &reply, |
| sendMode, |
| sendPriority, |
| timeOutInTicks, |
| upp_AEIdleProc, |
| (AEFilterUPP)0); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &reply); |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEResetTimer(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| #ifndef AEResetTimer |
| PyMac_PRECHECK(AEResetTimer); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AEResetTimer(&_self->ob_itself); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AESuspendTheCurrentEvent(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| #ifndef AESuspendTheCurrentEvent |
| PyMac_PRECHECK(AESuspendTheCurrentEvent); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AESuspendTheCurrentEvent(&_self->ob_itself); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEResumeTheCurrentEvent(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AppleEvent reply; |
| AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler; |
| PyObject *dispatcher; |
| #ifndef AEResumeTheCurrentEvent |
| PyMac_PRECHECK(AEResumeTheCurrentEvent); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O", |
| AEDesc_Convert, &reply, |
| &dispatcher)) |
| return NULL; |
| _err = AEResumeTheCurrentEvent(&_self->ob_itself, |
| &reply, |
| dispatcher__proc__, (long)dispatcher); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| Py_INCREF(dispatcher); /* XXX leak, but needed */ |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEGetTheCurrentEvent(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| #ifndef AEGetTheCurrentEvent |
| PyMac_PRECHECK(AEGetTheCurrentEvent); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AEGetTheCurrentEvent(&_self->ob_itself); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AESetTheCurrentEvent(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| #ifndef AESetTheCurrentEvent |
| PyMac_PRECHECK(AESetTheCurrentEvent); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AESetTheCurrentEvent(&_self->ob_itself); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AEDesc_AEResolve(AEDescObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| short callbackFlags; |
| AEDesc theToken; |
| #ifndef AEResolve |
| PyMac_PRECHECK(AEResolve); |
| #endif |
| if (!PyArg_ParseTuple(_args, "h", |
| &callbackFlags)) |
| return NULL; |
| _err = AEResolve(&_self->ob_itself, |
| callbackFlags, |
| &theToken); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &theToken); |
| return _res; |
| } |
| |
| static PyMethodDef AEDesc_methods[] = { |
| {"AECoerceDesc", (PyCFunction)AEDesc_AECoerceDesc, 1, |
| PyDoc_STR("(DescType toType) -> (AEDesc result)")}, |
| {"AEDuplicateDesc", (PyCFunction)AEDesc_AEDuplicateDesc, 1, |
| PyDoc_STR("() -> (AEDesc result)")}, |
| {"AECountItems", (PyCFunction)AEDesc_AECountItems, 1, |
| PyDoc_STR("() -> (long theCount)")}, |
| {"AEPutPtr", (PyCFunction)AEDesc_AEPutPtr, 1, |
| PyDoc_STR("(long index, DescType typeCode, Buffer dataPtr) -> None")}, |
| {"AEPutDesc", (PyCFunction)AEDesc_AEPutDesc, 1, |
| PyDoc_STR("(long index, AEDesc theAEDesc) -> None")}, |
| {"AEGetNthPtr", (PyCFunction)AEDesc_AEGetNthPtr, 1, |
| PyDoc_STR("(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)")}, |
| {"AEGetNthDesc", (PyCFunction)AEDesc_AEGetNthDesc, 1, |
| PyDoc_STR("(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)")}, |
| {"AESizeOfNthItem", (PyCFunction)AEDesc_AESizeOfNthItem, 1, |
| PyDoc_STR("(long index) -> (DescType typeCode, Size dataSize)")}, |
| {"AEDeleteItem", (PyCFunction)AEDesc_AEDeleteItem, 1, |
| PyDoc_STR("(long index) -> None")}, |
| {"AEPutParamPtr", (PyCFunction)AEDesc_AEPutParamPtr, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None")}, |
| {"AEPutParamDesc", (PyCFunction)AEDesc_AEPutParamDesc, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None")}, |
| {"AEGetParamPtr", (PyCFunction)AEDesc_AEGetParamPtr, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)")}, |
| {"AEGetParamDesc", (PyCFunction)AEDesc_AEGetParamDesc, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)")}, |
| {"AESizeOfParam", (PyCFunction)AEDesc_AESizeOfParam, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)")}, |
| {"AEDeleteParam", (PyCFunction)AEDesc_AEDeleteParam, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword) -> None")}, |
| {"AEGetAttributePtr", (PyCFunction)AEDesc_AEGetAttributePtr, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)")}, |
| {"AEGetAttributeDesc", (PyCFunction)AEDesc_AEGetAttributeDesc, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)")}, |
| {"AESizeOfAttribute", (PyCFunction)AEDesc_AESizeOfAttribute, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)")}, |
| {"AEPutAttributePtr", (PyCFunction)AEDesc_AEPutAttributePtr, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None")}, |
| {"AEPutAttributeDesc", (PyCFunction)AEDesc_AEPutAttributeDesc, 1, |
| PyDoc_STR("(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None")}, |
| |
| #if TARGET_API_MAC_CARBON |
| {"AEGetDescDataSize", (PyCFunction)AEDesc_AEGetDescDataSize, 1, |
| PyDoc_STR("() -> (Size _rv)")}, |
| #endif |
| {"AESend", (PyCFunction)AEDesc_AESend, 1, |
| PyDoc_STR("(AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks) -> (AppleEvent reply)")}, |
| {"AEResetTimer", (PyCFunction)AEDesc_AEResetTimer, 1, |
| PyDoc_STR("() -> None")}, |
| {"AESuspendTheCurrentEvent", (PyCFunction)AEDesc_AESuspendTheCurrentEvent, 1, |
| PyDoc_STR("() -> None")}, |
| {"AEResumeTheCurrentEvent", (PyCFunction)AEDesc_AEResumeTheCurrentEvent, 1, |
| PyDoc_STR("(AppleEvent reply, EventHandler dispatcher) -> None")}, |
| {"AEGetTheCurrentEvent", (PyCFunction)AEDesc_AEGetTheCurrentEvent, 1, |
| PyDoc_STR("() -> None")}, |
| {"AESetTheCurrentEvent", (PyCFunction)AEDesc_AESetTheCurrentEvent, 1, |
| PyDoc_STR("() -> None")}, |
| {"AEResolve", (PyCFunction)AEDesc_AEResolve, 1, |
| PyDoc_STR("(short callbackFlags) -> (AEDesc theToken)")}, |
| {NULL, NULL, 0} |
| }; |
| |
| static PyObject *AEDesc_get_type(AEDescObject *self, void *closure) |
| { |
| return PyMac_BuildOSType(self->ob_itself.descriptorType); |
| } |
| |
| #define AEDesc_set_type NULL |
| |
| static PyObject *AEDesc_get_data(AEDescObject *self, void *closure) |
| { |
| |
| PyObject *res; |
| Size size; |
| char *ptr; |
| OSErr err; |
| |
| size = AEGetDescDataSize(&self->ob_itself); |
| if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL ) |
| return NULL; |
| if ( (ptr = PyString_AsString(res)) == NULL ) |
| return NULL; |
| if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 ) |
| return PyMac_Error(err); |
| return res; |
| |
| } |
| |
| #define AEDesc_set_data NULL |
| |
| static PyGetSetDef AEDesc_getsetlist[] = { |
| {"type", (getter)AEDesc_get_type, (setter)AEDesc_set_type, "Type of this AEDesc"}, |
| {"data", (getter)AEDesc_get_data, (setter)AEDesc_set_data, "The raw data in this AEDesc"}, |
| {NULL, NULL, NULL, NULL}, |
| }; |
| |
| |
| #define AEDesc_compare NULL |
| |
| #define AEDesc_repr NULL |
| |
| #define AEDesc_hash NULL |
| #define AEDesc_tp_init 0 |
| |
| #define AEDesc_tp_alloc PyType_GenericAlloc |
| |
| static PyObject *AEDesc_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
| { |
| PyObject *self; |
| AEDesc itself; |
| char *kw[] = {"itself", 0}; |
| |
| if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&", kw, AEDesc_Convert, &itself)) return NULL; |
| if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; |
| ((AEDescObject *)self)->ob_itself = itself; |
| return self; |
| } |
| |
| #define AEDesc_tp_free PyObject_Del |
| |
| |
| PyTypeObject AEDesc_Type = { |
| PyObject_HEAD_INIT(NULL) |
| 0, /*ob_size*/ |
| "_AE.AEDesc", /*tp_name*/ |
| sizeof(AEDescObject), /*tp_basicsize*/ |
| 0, /*tp_itemsize*/ |
| /* methods */ |
| (destructor) AEDesc_dealloc, /*tp_dealloc*/ |
| 0, /*tp_print*/ |
| (getattrfunc)0, /*tp_getattr*/ |
| (setattrfunc)0, /*tp_setattr*/ |
| (cmpfunc) AEDesc_compare, /*tp_compare*/ |
| (reprfunc) AEDesc_repr, /*tp_repr*/ |
| (PyNumberMethods *)0, /* tp_as_number */ |
| (PySequenceMethods *)0, /* tp_as_sequence */ |
| (PyMappingMethods *)0, /* tp_as_mapping */ |
| (hashfunc) AEDesc_hash, /*tp_hash*/ |
| 0, /*tp_call*/ |
| 0, /*tp_str*/ |
| PyObject_GenericGetAttr, /*tp_getattro*/ |
| PyObject_GenericSetAttr, /*tp_setattro */ |
| 0, /*tp_as_buffer*/ |
| Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ |
| 0, /*tp_doc*/ |
| 0, /*tp_traverse*/ |
| 0, /*tp_clear*/ |
| 0, /*tp_richcompare*/ |
| 0, /*tp_weaklistoffset*/ |
| 0, /*tp_iter*/ |
| 0, /*tp_iternext*/ |
| AEDesc_methods, /* tp_methods */ |
| 0, /*tp_members*/ |
| AEDesc_getsetlist, /*tp_getset*/ |
| 0, /*tp_base*/ |
| 0, /*tp_dict*/ |
| 0, /*tp_descr_get*/ |
| 0, /*tp_descr_set*/ |
| 0, /*tp_dictoffset*/ |
| AEDesc_tp_init, /* tp_init */ |
| AEDesc_tp_alloc, /* tp_alloc */ |
| AEDesc_tp_new, /* tp_new */ |
| AEDesc_tp_free, /* tp_free */ |
| }; |
| |
| /* --------------------- End object type AEDesc --------------------- */ |
| |
| |
| static PyObject *AE_AECoercePtr(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| DescType typeCode; |
| char *dataPtr__in__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| DescType toType; |
| AEDesc result; |
| #ifndef AECoercePtr |
| PyMac_PRECHECK(AECoercePtr); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&s#O&", |
| PyMac_GetOSType, &typeCode, |
| &dataPtr__in__, &dataPtr__in_len__, |
| PyMac_GetOSType, &toType)) |
| return NULL; |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AECoercePtr(typeCode, |
| dataPtr__in__, dataPtr__len__, |
| toType, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| static PyObject *AE_AECreateDesc(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| DescType typeCode; |
| char *dataPtr__in__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| AEDesc result; |
| #ifndef AECreateDesc |
| PyMac_PRECHECK(AECreateDesc); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&s#", |
| PyMac_GetOSType, &typeCode, |
| &dataPtr__in__, &dataPtr__in_len__)) |
| return NULL; |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AECreateDesc(typeCode, |
| dataPtr__in__, dataPtr__len__, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| static PyObject *AE_AECreateList(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| char *factoringPtr__in__; |
| long factoringPtr__len__; |
| int factoringPtr__in_len__; |
| Boolean isRecord; |
| AEDescList resultList; |
| #ifndef AECreateList |
| PyMac_PRECHECK(AECreateList); |
| #endif |
| if (!PyArg_ParseTuple(_args, "s#b", |
| &factoringPtr__in__, &factoringPtr__in_len__, |
| &isRecord)) |
| return NULL; |
| factoringPtr__len__ = factoringPtr__in_len__; |
| _err = AECreateList(factoringPtr__in__, factoringPtr__len__, |
| isRecord, |
| &resultList); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &resultList); |
| return _res; |
| } |
| |
| static PyObject *AE_AECreateAppleEvent(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEEventClass theAEEventClass; |
| AEEventID theAEEventID; |
| AEAddressDesc target; |
| AEReturnID returnID; |
| AETransactionID transactionID; |
| AppleEvent result; |
| #ifndef AECreateAppleEvent |
| PyMac_PRECHECK(AECreateAppleEvent); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&O&hl", |
| PyMac_GetOSType, &theAEEventClass, |
| PyMac_GetOSType, &theAEEventID, |
| AEDesc_Convert, &target, |
| &returnID, |
| &transactionID)) |
| return NULL; |
| _err = AECreateAppleEvent(theAEEventClass, |
| theAEEventID, |
| &target, |
| returnID, |
| transactionID, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &result); |
| return _res; |
| } |
| |
| #if TARGET_API_MAC_CARBON |
| |
| static PyObject *AE_AEReplaceDescData(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| DescType typeCode; |
| char *dataPtr__in__; |
| long dataPtr__len__; |
| int dataPtr__in_len__; |
| AEDesc theAEDesc; |
| #ifndef AEReplaceDescData |
| PyMac_PRECHECK(AEReplaceDescData); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&s#", |
| PyMac_GetOSType, &typeCode, |
| &dataPtr__in__, &dataPtr__in_len__)) |
| return NULL; |
| dataPtr__len__ = dataPtr__in_len__; |
| _err = AEReplaceDescData(typeCode, |
| dataPtr__in__, dataPtr__len__, |
| &theAEDesc); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &theAEDesc); |
| return _res; |
| } |
| #endif |
| |
| static PyObject *AE_AEProcessAppleEvent(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| EventRecord theEventRecord; |
| #ifndef AEProcessAppleEvent |
| PyMac_PRECHECK(AEProcessAppleEvent); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetEventRecord, &theEventRecord)) |
| return NULL; |
| _err = AEProcessAppleEvent(&theEventRecord); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AE_AEGetInteractionAllowed(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEInteractAllowed level; |
| #ifndef AEGetInteractionAllowed |
| PyMac_PRECHECK(AEGetInteractionAllowed); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AEGetInteractionAllowed(&level); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("b", |
| level); |
| return _res; |
| } |
| |
| static PyObject *AE_AESetInteractionAllowed(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEInteractAllowed level; |
| #ifndef AESetInteractionAllowed |
| PyMac_PRECHECK(AESetInteractionAllowed); |
| #endif |
| if (!PyArg_ParseTuple(_args, "b", |
| &level)) |
| return NULL; |
| _err = AESetInteractionAllowed(level); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AE_AEInteractWithUser(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| long timeOutInTicks; |
| #ifndef AEInteractWithUser |
| PyMac_PRECHECK(AEInteractWithUser); |
| #endif |
| if (!PyArg_ParseTuple(_args, "l", |
| &timeOutInTicks)) |
| return NULL; |
| _err = AEInteractWithUser(timeOutInTicks, |
| (NMRecPtr)0, |
| upp_AEIdleProc); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AE_AEInstallEventHandler(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEEventClass theAEEventClass; |
| AEEventID theAEEventID; |
| AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler; |
| PyObject *handler; |
| #ifndef AEInstallEventHandler |
| PyMac_PRECHECK(AEInstallEventHandler); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&O", |
| PyMac_GetOSType, &theAEEventClass, |
| PyMac_GetOSType, &theAEEventID, |
| &handler)) |
| return NULL; |
| _err = AEInstallEventHandler(theAEEventClass, |
| theAEEventID, |
| handler__proc__, (long)handler, |
| 0); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| Py_INCREF(handler); /* XXX leak, but needed */ |
| return _res; |
| } |
| |
| static PyObject *AE_AERemoveEventHandler(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEEventClass theAEEventClass; |
| AEEventID theAEEventID; |
| #ifndef AERemoveEventHandler |
| PyMac_PRECHECK(AERemoveEventHandler); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&", |
| PyMac_GetOSType, &theAEEventClass, |
| PyMac_GetOSType, &theAEEventID)) |
| return NULL; |
| _err = AERemoveEventHandler(theAEEventClass, |
| theAEEventID, |
| upp_GenericEventHandler, |
| 0); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AE_AEGetEventHandler(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEEventClass theAEEventClass; |
| AEEventID theAEEventID; |
| AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler; |
| PyObject *handler; |
| #ifndef AEGetEventHandler |
| PyMac_PRECHECK(AEGetEventHandler); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&", |
| PyMac_GetOSType, &theAEEventClass, |
| PyMac_GetOSType, &theAEEventID)) |
| return NULL; |
| _err = AEGetEventHandler(theAEEventClass, |
| theAEEventID, |
| &handler__proc__, (long *)&handler, |
| 0); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O", |
| handler); |
| Py_INCREF(handler); /* XXX leak, but needed */ |
| return _res; |
| } |
| |
| static PyObject *AE_AEInstallSpecialHandler(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword functionClass; |
| #ifndef AEInstallSpecialHandler |
| PyMac_PRECHECK(AEInstallSpecialHandler); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetOSType, &functionClass)) |
| return NULL; |
| _err = AEInstallSpecialHandler(functionClass, |
| upp_GenericEventHandler, |
| 0); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AE_AERemoveSpecialHandler(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword functionClass; |
| #ifndef AERemoveSpecialHandler |
| PyMac_PRECHECK(AERemoveSpecialHandler); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetOSType, &functionClass)) |
| return NULL; |
| _err = AERemoveSpecialHandler(functionClass, |
| upp_GenericEventHandler, |
| 0); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AE_AEManagerInfo(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEKeyword keyWord; |
| long result; |
| #ifndef AEManagerInfo |
| PyMac_PRECHECK(AEManagerInfo); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&", |
| PyMac_GetOSType, &keyWord)) |
| return NULL; |
| _err = AEManagerInfo(keyWord, |
| &result); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("l", |
| result); |
| return _res; |
| } |
| |
| static PyObject *AE_AEObjectInit(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| #ifndef AEObjectInit |
| PyMac_PRECHECK(AEObjectInit); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AEObjectInit(); |
| if (_err != noErr) return PyMac_Error(_err); |
| Py_INCREF(Py_None); |
| _res = Py_None; |
| return _res; |
| } |
| |
| static PyObject *AE_AEDisposeToken(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| AEDesc theToken; |
| #ifndef AEDisposeToken |
| PyMac_PRECHECK(AEDisposeToken); |
| #endif |
| if (!PyArg_ParseTuple(_args, "")) |
| return NULL; |
| _err = AEDisposeToken(&theToken); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &theToken); |
| return _res; |
| } |
| |
| static PyObject *AE_AECallObjectAccessor(PyObject *_self, PyObject *_args) |
| { |
| PyObject *_res = NULL; |
| OSErr _err; |
| DescType desiredClass; |
| AEDesc containerToken; |
| DescType containerClass; |
| DescType keyForm; |
| AEDesc keyData; |
| AEDesc token; |
| #ifndef AECallObjectAccessor |
| PyMac_PRECHECK(AECallObjectAccessor); |
| #endif |
| if (!PyArg_ParseTuple(_args, "O&O&O&O&O&", |
| PyMac_GetOSType, &desiredClass, |
| AEDesc_Convert, &containerToken, |
| PyMac_GetOSType, &containerClass, |
| PyMac_GetOSType, &keyForm, |
| AEDesc_Convert, &keyData)) |
| return NULL; |
| _err = AECallObjectAccessor(desiredClass, |
| &containerToken, |
| containerClass, |
| keyForm, |
| &keyData, |
| &token); |
| if (_err != noErr) return PyMac_Error(_err); |
| _res = Py_BuildValue("O&", |
| AEDesc_New, &token); |
| return _res; |
| } |
| |
| static PyMethodDef AE_methods[] = { |
| {"AECoercePtr", (PyCFunction)AE_AECoercePtr, 1, |
| PyDoc_STR("(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)")}, |
| {"AECreateDesc", (PyCFunction)AE_AECreateDesc, 1, |
| PyDoc_STR("(DescType typeCode, Buffer dataPtr) -> (AEDesc result)")}, |
| {"AECreateList", (PyCFunction)AE_AECreateList, 1, |
| PyDoc_STR("(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)")}, |
| {"AECreateAppleEvent", (PyCFunction)AE_AECreateAppleEvent, 1, |
| PyDoc_STR("(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result)")}, |
| |
| #if TARGET_API_MAC_CARBON |
| {"AEReplaceDescData", (PyCFunction)AE_AEReplaceDescData, 1, |
| PyDoc_STR("(DescType typeCode, Buffer dataPtr) -> (AEDesc theAEDesc)")}, |
| #endif |
| {"AEProcessAppleEvent", (PyCFunction)AE_AEProcessAppleEvent, 1, |
| PyDoc_STR("(EventRecord theEventRecord) -> None")}, |
| {"AEGetInteractionAllowed", (PyCFunction)AE_AEGetInteractionAllowed, 1, |
| PyDoc_STR("() -> (AEInteractAllowed level)")}, |
| {"AESetInteractionAllowed", (PyCFunction)AE_AESetInteractionAllowed, 1, |
| PyDoc_STR("(AEInteractAllowed level) -> None")}, |
| {"AEInteractWithUser", (PyCFunction)AE_AEInteractWithUser, 1, |
| PyDoc_STR("(long timeOutInTicks) -> None")}, |
| {"AEInstallEventHandler", (PyCFunction)AE_AEInstallEventHandler, 1, |
| PyDoc_STR("(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None")}, |
| {"AERemoveEventHandler", (PyCFunction)AE_AERemoveEventHandler, 1, |
| PyDoc_STR("(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None")}, |
| {"AEGetEventHandler", (PyCFunction)AE_AEGetEventHandler, 1, |
| PyDoc_STR("(AEEventClass theAEEventClass, AEEventID theAEEventID) -> (EventHandler handler)")}, |
| {"AEInstallSpecialHandler", (PyCFunction)AE_AEInstallSpecialHandler, 1, |
| PyDoc_STR("(AEKeyword functionClass) -> None")}, |
| {"AERemoveSpecialHandler", (PyCFunction)AE_AERemoveSpecialHandler, 1, |
| PyDoc_STR("(AEKeyword functionClass) -> None")}, |
| {"AEManagerInfo", (PyCFunction)AE_AEManagerInfo, 1, |
| PyDoc_STR("(AEKeyword keyWord) -> (long result)")}, |
| {"AEObjectInit", (PyCFunction)AE_AEObjectInit, 1, |
| PyDoc_STR("() -> None")}, |
| {"AEDisposeToken", (PyCFunction)AE_AEDisposeToken, 1, |
| PyDoc_STR("() -> (AEDesc theToken)")}, |
| {"AECallObjectAccessor", (PyCFunction)AE_AECallObjectAccessor, 1, |
| PyDoc_STR("(DescType desiredClass, AEDesc containerToken, DescType containerClass, DescType keyForm, AEDesc keyData) -> (AEDesc token)")}, |
| {NULL, NULL, 0} |
| }; |
| |
| |
| |
| static pascal OSErr |
| GenericEventHandler(const AppleEvent *request, AppleEvent *reply, refcontype refcon) |
| { |
| PyObject *handler = (PyObject *)refcon; |
| AEDescObject *requestObject, *replyObject; |
| PyObject *args, *res; |
| if ((requestObject = (AEDescObject *)AEDesc_New((AppleEvent *)request)) == NULL) { |
| return -1; |
| } |
| if ((replyObject = (AEDescObject *)AEDesc_New(reply)) == NULL) { |
| Py_DECREF(requestObject); |
| return -1; |
| } |
| if ((args = Py_BuildValue("OO", requestObject, replyObject)) == NULL) { |
| Py_DECREF(requestObject); |
| Py_DECREF(replyObject); |
| return -1; |
| } |
| res = PyEval_CallObject(handler, args); |
| requestObject->ob_itself.descriptorType = 'null'; |
| requestObject->ob_itself.dataHandle = NULL; |
| replyObject->ob_itself.descriptorType = 'null'; |
| replyObject->ob_itself.dataHandle = NULL; |
| Py_DECREF(args); |
| if (res == NULL) { |
| PySys_WriteStderr("Exception in AE event handler function\n"); |
| PyErr_Print(); |
| return -1; |
| } |
| Py_DECREF(res); |
| return noErr; |
| } |
| |
| |
| void init_AE(void) |
| { |
| PyObject *m; |
| PyObject *d; |
| |
| |
| |
| upp_AEIdleProc = NewAEIdleUPP(AEIdleProc); |
| #if UNIVERSAL_INTERFACES_VERSION >= 0x03400 |
| upp_GenericEventHandler = NewAEEventHandlerUPP(&GenericEventHandler); |
| #else |
| upp_GenericEventHandler = NewAEEventHandlerUPP(GenericEventHandler); |
| #endif |
| PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_New); |
| PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc, AEDesc_Convert); |
| |
| |
| m = Py_InitModule("_AE", AE_methods); |
| d = PyModule_GetDict(m); |
| AE_Error = PyMac_GetOSErrException(); |
| if (AE_Error == NULL || |
| PyDict_SetItemString(d, "Error", AE_Error) != 0) |
| return; |
| AEDesc_Type.ob_type = &PyType_Type; |
| Py_INCREF(&AEDesc_Type); |
| PyModule_AddObject(m, "AEDesc", (PyObject *)&AEDesc_Type); |
| /* Backward-compatible name */ |
| Py_INCREF(&AEDesc_Type); |
| PyModule_AddObject(m, "AEDescType", (PyObject *)&AEDesc_Type); |
| } |
| |
| /* ========================= End module _AE ========================= */ |
| |