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 _Launch ========================= */
#include "Python.h"
#include "pymactoolbox.h"
/* 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)
#if PY_VERSION_HEX < 0x02040000
PyObject *PyMac_GetOSErrException(void);
#endif
#include <ApplicationServices/ApplicationServices.h>
/*
** Optional CFStringRef. None will pass NULL
*/
static int
OptCFStringRefObj_Convert(PyObject *v, CFStringRef *spec)
{
if (v == Py_None) {
*spec = NULL;
return 1;
}
return CFStringRefObj_Convert(v, spec);
}
PyObject *
OptCFStringRefObj_New(CFStringRef it)
{
if (it == NULL) {
Py_INCREF(Py_None);
return Py_None;
}
return CFStringRefObj_New(it);
}
/*
** Convert LSItemInfoRecord to Python.
*/
PyObject *
LSItemInfoRecord_New(LSItemInfoRecord *it)
{
#ifndef __LP64__
return Py_BuildValue("{s:is:O&s:O&s:O&s:O&s:i}",
"flags", it->flags,
"filetype", PyMac_BuildOSType, it->filetype,
"creator", PyMac_BuildOSType, it->creator,
"extension", OptCFStringRefObj_New, it->extension,
"iconFileName", OptCFStringRefObj_New, it->iconFileName,
"kindID", it->kindID);
#else
return Py_BuildValue("{s:is:O&s:O&s:O&}",
"flags", it->flags,
"filetype", PyMac_BuildOSType, it->filetype,
"creator", PyMac_BuildOSType, it->creator,
"extension", OptCFStringRefObj_New, it->extension);
#endif
}
static PyObject *Launch_Error;
static PyObject *Launch_LSCopyItemInfoForRef(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
FSRef inItemRef;
LSRequestedInfo inWhichInfo;
LSItemInfoRecord outItemInfo;
if (!PyArg_ParseTuple(_args, "O&l",
PyMac_GetFSRef, &inItemRef,
&inWhichInfo))
return NULL;
_err = LSCopyItemInfoForRef(&inItemRef,
inWhichInfo,
&outItemInfo);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
LSItemInfoRecord_New, &outItemInfo);
return _res;
}
static PyObject *Launch_LSCopyItemInfoForURL(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
CFURLRef inURL;
LSRequestedInfo inWhichInfo;
LSItemInfoRecord outItemInfo;
if (!PyArg_ParseTuple(_args, "O&l",
CFURLRefObj_Convert, &inURL,
&inWhichInfo))
return NULL;
_err = LSCopyItemInfoForURL(inURL,
inWhichInfo,
&outItemInfo);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
LSItemInfoRecord_New, &outItemInfo);
return _res;
}
static PyObject *Launch_LSGetExtensionInfo(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
UniChar *inNameLen__in__;
UniCharCount inNameLen__len__;
int inNameLen__in_len__;
UniCharCount outExtStartIndex;
if (!PyArg_ParseTuple(_args, "u#",
&inNameLen__in__, &inNameLen__in_len__))
return NULL;
inNameLen__len__ = inNameLen__in_len__;
_err = LSGetExtensionInfo(inNameLen__len__, inNameLen__in__,
&outExtStartIndex);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("l",
outExtStartIndex);
return _res;
}
static PyObject *Launch_LSCopyDisplayNameForRef(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
FSRef inRef;
CFStringRef outDisplayName;
if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetFSRef, &inRef))
return NULL;
_err = LSCopyDisplayNameForRef(&inRef,
&outDisplayName);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CFStringRefObj_New, outDisplayName);
return _res;
}
static PyObject *Launch_LSCopyDisplayNameForURL(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
CFURLRef inURL;
CFStringRef outDisplayName;
if (!PyArg_ParseTuple(_args, "O&",
CFURLRefObj_Convert, &inURL))
return NULL;
_err = LSCopyDisplayNameForURL(inURL,
&outDisplayName);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CFStringRefObj_New, outDisplayName);
return _res;
}
static PyObject *Launch_LSSetExtensionHiddenForRef(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
FSRef inRef;
Boolean inHide;
if (!PyArg_ParseTuple(_args, "O&b",
PyMac_GetFSRef, &inRef,
&inHide))
return NULL;
_err = LSSetExtensionHiddenForRef(&inRef,
inHide);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Launch_LSSetExtensionHiddenForURL(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
CFURLRef inURL;
Boolean inHide;
if (!PyArg_ParseTuple(_args, "O&b",
CFURLRefObj_Convert, &inURL,
&inHide))
return NULL;
_err = LSSetExtensionHiddenForURL(inURL,
inHide);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Launch_LSCopyKindStringForRef(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
FSRef inFSRef;
CFStringRef outKindString;
if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetFSRef, &inFSRef))
return NULL;
_err = LSCopyKindStringForRef(&inFSRef,
&outKindString);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CFStringRefObj_New, outKindString);
return _res;
}
static PyObject *Launch_LSCopyKindStringForURL(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
CFURLRef inURL;
CFStringRef outKindString;
if (!PyArg_ParseTuple(_args, "O&",
CFURLRefObj_Convert, &inURL))
return NULL;
_err = LSCopyKindStringForURL(inURL,
&outKindString);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CFStringRefObj_New, outKindString);
return _res;
}
static PyObject *Launch_LSGetApplicationForItem(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
FSRef inItemRef;
LSRolesMask inRoleMask;
FSRef outAppRef;
CFURLRef outAppURL;
if (!PyArg_ParseTuple(_args, "O&l",
PyMac_GetFSRef, &inItemRef,
&inRoleMask))
return NULL;
_err = LSGetApplicationForItem(&inItemRef,
inRoleMask,
&outAppRef,
&outAppURL);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&O&",
PyMac_BuildFSRef, &outAppRef,
CFURLRefObj_New, outAppURL);
return _res;
}
static PyObject *Launch_LSGetApplicationForInfo(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
OSType inType;
OSType inCreator;
CFStringRef inExtension;
LSRolesMask inRoleMask;
FSRef outAppRef;
CFURLRef outAppURL;
if (!PyArg_ParseTuple(_args, "O&O&O&l",
PyMac_GetOSType, &inType,
PyMac_GetOSType, &inCreator,
OptCFStringRefObj_Convert, &inExtension,
&inRoleMask))
return NULL;
_err = LSGetApplicationForInfo(inType,
inCreator,
inExtension,
inRoleMask,
&outAppRef,
&outAppURL);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&O&",
PyMac_BuildFSRef, &outAppRef,
CFURLRefObj_New, outAppURL);
return _res;
}
static PyObject *Launch_LSGetApplicationForURL(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
CFURLRef inURL;
LSRolesMask inRoleMask;
FSRef outAppRef;
CFURLRef outAppURL;
if (!PyArg_ParseTuple(_args, "O&l",
CFURLRefObj_Convert, &inURL,
&inRoleMask))
return NULL;
_err = LSGetApplicationForURL(inURL,
inRoleMask,
&outAppRef,
&outAppURL);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&O&",
PyMac_BuildFSRef, &outAppRef,
CFURLRefObj_New, outAppURL);
return _res;
}
static PyObject *Launch_LSFindApplicationForInfo(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
OSType inCreator;
CFStringRef inBundleID;
CFStringRef inName;
FSRef outAppRef;
CFURLRef outAppURL;
if (!PyArg_ParseTuple(_args, "O&O&O&",
PyMac_GetOSType, &inCreator,
OptCFStringRefObj_Convert, &inBundleID,
OptCFStringRefObj_Convert, &inName))
return NULL;
_err = LSFindApplicationForInfo(inCreator,
inBundleID,
inName,
&outAppRef,
&outAppURL);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&O&",
PyMac_BuildFSRef, &outAppRef,
CFURLRefObj_New, outAppURL);
return _res;
}
static PyObject *Launch_LSCanRefAcceptItem(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
FSRef inItemFSRef;
FSRef inTargetRef;
LSRolesMask inRoleMask;
LSAcceptanceFlags inFlags;
Boolean outAcceptsItem;
if (!PyArg_ParseTuple(_args, "O&O&ll",
PyMac_GetFSRef, &inItemFSRef,
PyMac_GetFSRef, &inTargetRef,
&inRoleMask,
&inFlags))
return NULL;
_err = LSCanRefAcceptItem(&inItemFSRef,
&inTargetRef,
inRoleMask,
inFlags,
&outAcceptsItem);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("b",
outAcceptsItem);
return _res;
}
static PyObject *Launch_LSCanURLAcceptURL(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
CFURLRef inItemURL;
CFURLRef inTargetURL;
LSRolesMask inRoleMask;
LSAcceptanceFlags inFlags;
Boolean outAcceptsItem;
if (!PyArg_ParseTuple(_args, "O&O&ll",
CFURLRefObj_Convert, &inItemURL,
CFURLRefObj_Convert, &inTargetURL,
&inRoleMask,
&inFlags))
return NULL;
_err = LSCanURLAcceptURL(inItemURL,
inTargetURL,
inRoleMask,
inFlags,
&outAcceptsItem);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("b",
outAcceptsItem);
return _res;
}
static PyObject *Launch_LSOpenFSRef(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
FSRef inRef;
FSRef outLaunchedRef;
if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetFSRef, &inRef))
return NULL;
_err = LSOpenFSRef(&inRef,
&outLaunchedRef);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
PyMac_BuildFSRef, &outLaunchedRef);
return _res;
}
static PyObject *Launch_LSOpenCFURLRef(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
CFURLRef inURL;
CFURLRef outLaunchedURL;
if (!PyArg_ParseTuple(_args, "O&",
CFURLRefObj_Convert, &inURL))
return NULL;
_err = LSOpenCFURLRef(inURL,
&outLaunchedURL);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CFURLRefObj_New, outLaunchedURL);
return _res;
}
static PyMethodDef Launch_methods[] = {
{"LSCopyItemInfoForRef", (PyCFunction)Launch_LSCopyItemInfoForRef, 1,
PyDoc_STR("(FSRef inItemRef, LSRequestedInfo inWhichInfo) -> (LSItemInfoRecord outItemInfo)")},
{"LSCopyItemInfoForURL", (PyCFunction)Launch_LSCopyItemInfoForURL, 1,
PyDoc_STR("(CFURLRef inURL, LSRequestedInfo inWhichInfo) -> (LSItemInfoRecord outItemInfo)")},
{"LSGetExtensionInfo", (PyCFunction)Launch_LSGetExtensionInfo, 1,
PyDoc_STR("(Buffer inNameLen) -> (UniCharCount outExtStartIndex)")},
{"LSCopyDisplayNameForRef", (PyCFunction)Launch_LSCopyDisplayNameForRef, 1,
PyDoc_STR("(FSRef inRef) -> (CFStringRef outDisplayName)")},
{"LSCopyDisplayNameForURL", (PyCFunction)Launch_LSCopyDisplayNameForURL, 1,
PyDoc_STR("(CFURLRef inURL) -> (CFStringRef outDisplayName)")},
{"LSSetExtensionHiddenForRef", (PyCFunction)Launch_LSSetExtensionHiddenForRef, 1,
PyDoc_STR("(FSRef inRef, Boolean inHide) -> None")},
{"LSSetExtensionHiddenForURL", (PyCFunction)Launch_LSSetExtensionHiddenForURL, 1,
PyDoc_STR("(CFURLRef inURL, Boolean inHide) -> None")},
{"LSCopyKindStringForRef", (PyCFunction)Launch_LSCopyKindStringForRef, 1,
PyDoc_STR("(FSRef inFSRef) -> (CFStringRef outKindString)")},
{"LSCopyKindStringForURL", (PyCFunction)Launch_LSCopyKindStringForURL, 1,
PyDoc_STR("(CFURLRef inURL) -> (CFStringRef outKindString)")},
{"LSGetApplicationForItem", (PyCFunction)Launch_LSGetApplicationForItem, 1,
PyDoc_STR("(FSRef inItemRef, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
{"LSGetApplicationForInfo", (PyCFunction)Launch_LSGetApplicationForInfo, 1,
PyDoc_STR("(OSType inType, OSType inCreator, CFStringRef inExtension, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
{"LSGetApplicationForURL", (PyCFunction)Launch_LSGetApplicationForURL, 1,
PyDoc_STR("(CFURLRef inURL, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
{"LSFindApplicationForInfo", (PyCFunction)Launch_LSFindApplicationForInfo, 1,
PyDoc_STR("(OSType inCreator, CFStringRef inBundleID, CFStringRef inName) -> (FSRef outAppRef, CFURLRef outAppURL)")},
{"LSCanRefAcceptItem", (PyCFunction)Launch_LSCanRefAcceptItem, 1,
PyDoc_STR("(FSRef inItemFSRef, FSRef inTargetRef, LSRolesMask inRoleMask, LSAcceptanceFlags inFlags) -> (Boolean outAcceptsItem)")},
{"LSCanURLAcceptURL", (PyCFunction)Launch_LSCanURLAcceptURL, 1,
PyDoc_STR("(CFURLRef inItemURL, CFURLRef inTargetURL, LSRolesMask inRoleMask, LSAcceptanceFlags inFlags) -> (Boolean outAcceptsItem)")},
{"LSOpenFSRef", (PyCFunction)Launch_LSOpenFSRef, 1,
PyDoc_STR("(FSRef inRef) -> (FSRef outLaunchedRef)")},
{"LSOpenCFURLRef", (PyCFunction)Launch_LSOpenCFURLRef, 1,
PyDoc_STR("(CFURLRef inURL) -> (CFURLRef outLaunchedURL)")},
{NULL, NULL, 0}
};
void init_Launch(void)
{
PyObject *m;
PyObject *d;
m = Py_InitModule("_Launch", Launch_methods);
d = PyModule_GetDict(m);
Launch_Error = PyMac_GetOSErrException();
if (Launch_Error == NULL ||
PyDict_SetItemString(d, "Error", Launch_Error) != 0)
return;
}
/* ======================= End module _Launch ======================= */