mirror of
https://github.com/python/cpython.git
synced 2024-11-28 08:20:55 +01:00
add03b62fd
Also added a Handle() function which is like Resource() but has auto-dispose on by default.
99 lines
2.2 KiB
Python
99 lines
2.2 KiB
Python
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);
|
|
return ResObj_New(h);
|
|
"""
|
|
|
|
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;
|
|
return (PyObject *)rv;
|
|
"""
|
|
|
|
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 = """
|
|
return %sObj_New((%sHandle)_self->ob_itself);
|
|
"""
|
|
|
|
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;
|
|
return Py_BuildValue("i", old);
|
|
"""
|
|
f = ManualGenerator("AutoDispose", AutoDispose_body)
|
|
f.docstring = lambda: "(int)->int. Automatically DisposeHandle the object on Python object cleanup"
|
|
resmethods.append(f)
|