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
##resource_body = """
##char *buf;
##int len;
##Handle h;
##
##if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
## return NULL;
##h = NewHandle(len);
##if ( h == NULL ) {
## PyErr_NoMemory();
## return NULL;
##}
##HLock(h);
##memcpy(*h, buf, len);
##HUnlock(h);
##_res = ResObj_New(h);
##return _res;
##"""
##
##f = ManualGenerator("Resource", resource_body)
##f.docstring = lambda: """Convert a string to a resource object.
##
##The created resource object is actually just a handle,
##apply AddResource() to write it to a resource file.
##See also the Handle() docstring.
##"""
##functions.append(f)
handle_body = """
char *buf;
int len;
Handle h;
ResourceObject *rv;
if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
return NULL;
h = NewHandle(len);
if ( h == NULL ) {
PyErr_NoMemory();
return NULL;
}
HLock(h);
memcpy(*h, buf, len);
HUnlock(h);
rv = (ResourceObject *)ResObj_New(h);
rv->ob_freeit = PyMac_AutoDisposeHandle;
_res = (PyObject *)rv;
return _res;
"""
f = ManualGenerator("Handle", handle_body)
f.docstring = lambda: """Convert a string to a Handle object.
Resource() and Handle() are very similar, but objects created with Handle() are
by default automatically DisposeHandle()d upon object cleanup. Use AutoDispose()
to change this.
"""
functions.append(f)
# Convert resources to other things.
as_xxx_body = """
_res = %sObj_New((%sHandle)_self->ob_itself);
return _res;
"""
def genresconverter(longname, shortname):
f = ManualGenerator("as_%s"%longname, as_xxx_body%(shortname, longname))
docstring = "Return this resource/handle as a %s"%longname
f.docstring = lambda docstring=docstring: docstring
return f
resmethods.append(genresconverter("Control", "Ctl"))
resmethods.append(genresconverter("Menu", "Menu"))
# The definition of this one is MacLoadResource, so we do it by hand...
f = ResMethod(void, 'LoadResource',
(Handle, 'theResource', InMode),
)
resmethods.append(f)
#
# A method to set the auto-dispose flag
#
AutoDispose_body = """
int onoff, old = 0;
if (!PyArg_ParseTuple(_args, "i", &onoff))
return NULL;
if ( _self->ob_freeit )
old = 1;
if ( onoff )
_self->ob_freeit = PyMac_AutoDisposeHandle;
else
_self->ob_freeit = NULL;
_res = Py_BuildValue("i", old);
return _res;
"""
f = ManualGenerator("AutoDispose", AutoDispose_body)
f.docstring = lambda: "(int)->int. Automatically DisposeHandle the object on Python object cleanup"
resmethods.append(f)