Modify framebuffer and NGA framebuffer to read screen size from board model dtb file. Optimise memory usuage of frame buffer
Add example minigui application with hooks to profiler (which writes results to S:\). Modified NGA framebuffer to run its own dfc queue at high priority
/* =========================== Module _AE =========================== */
#include "Python.h"
#include "pymactoolbox.h"
#ifndef HAVE_OSX105_SDK
typedef SInt32 SRefCon;
#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)
#include <Carbon/Carbon.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_AEDesc_New(AEDesc *);
extern int _AEDesc_Convert(PyObject *, AEDesc *);
#define AEDesc_New _AEDesc_New
#define AEDesc_NewBorrowed _AEDesc_NewBorrowed
#define AEDesc_Convert _AEDesc_Convert
#endif
typedef long refcontype;
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;
return 0;
}
AEIdleUPP upp_AEIdleProc;
static PyObject *AE_Error;
/* ----------------------- Object type AEDesc ----------------------- */
PyTypeObject AEDesc_Type;
#define AEDesc_Check(x) ((x)->ob_type == &AEDesc_Type || PyObject_TypeCheck((x), &AEDesc_Type))
typedef struct AEDescObject {
PyObject_HEAD
AEDesc ob_itself;
int ob_owned;
} AEDescObject;
PyObject *AEDesc_New(AEDesc *itself)
{
AEDescObject *it;
it = PyObject_NEW(AEDescObject, &AEDesc_Type);
if (it == NULL) return NULL;
it->ob_itself = *itself;
it->ob_owned = 1;
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)
{
if (self->ob_owned) AEDisposeDesc(&self->ob_itself);
self->ob_type->tp_free((PyObject *)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;
}
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;
}
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__,
(SRefCon)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 PyObject *AEDesc_AutoDispose(AEDescObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
int onoff, old;
if (!PyArg_ParseTuple(_args, "i", &onoff))
return NULL;
old = _self->ob_owned;
_self->ob_owned = onoff;
_res = Py_BuildValue("i", old);
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")},
{"AEGetDescDataSize", (PyCFunction)AEDesc_AEGetDescDataSize, 1,
PyDoc_STR("() -> (Size _rv)")},
{"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)")},
{"AutoDispose", (PyCFunction)AEDesc_AutoDispose, 1,
PyDoc_STR("(int)->int. Automatically AEDisposeDesc the object on Python object cleanup")},
{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;
}
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;
}
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__, (SRefCon)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__, (SRefCon *)&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)")},
{"AEReplaceDescData", (PyCFunction)AE_AEReplaceDescData, 1,
PyDoc_STR("(DescType typeCode, Buffer dataPtr) -> (AEDesc theAEDesc)")},
{"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;
}
PyObject *AEDesc_NewBorrowed(AEDesc *itself)
{
PyObject *it;
it = AEDesc_New(itself);
if (it)
((AEDescObject *)it)->ob_owned = 0;
return (PyObject *)it;
}
void init_AE(void)
{
PyObject *m;
PyObject *d;
upp_AEIdleProc = NewAEIdleUPP(AEIdleProc);
upp_GenericEventHandler = NewAEEventHandlerUPP(GenericEventHandler);
PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_New);
PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_NewBorrowed);
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;
if (PyType_Ready(&AEDesc_Type) < 0) return;
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 ========================= */