| ##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) |