mirror of
https://github.com/python/cpython.git
synced 2024-11-28 08:20:55 +01:00
0e04eecdbf
And these can now be vectored through glue routines (by defining USE_TOOLBOX_OBJECT_GLUE) which will do the necessary imports, whereupon the module's init routine will tell the glue routine about the real conversion routine address and everything is fine again.
1712 lines
38 KiB
C
1712 lines
38 KiB
C
|
|
/* =========================== Module Res =========================== */
|
|
|
|
#include "Python.h"
|
|
|
|
|
|
|
|
#include "macglue.h"
|
|
#include "pymactoolbox.h"
|
|
|
|
#include <Resources.h>
|
|
#include <string.h>
|
|
|
|
#ifdef USE_TOOLBOX_OBJECT_GLUE
|
|
extern PyObject *_ResObj_New(Handle);
|
|
extern int _ResObj_Convert(PyObject *, Handle *);
|
|
extern PyObject *_OptResObj_New(Handle);
|
|
extern int _OptResObj_Convert(PyObject *, Handle *);
|
|
#define ResObj_New _ResObj_New
|
|
#define ResObj_Convert _ResObj_Convert
|
|
#define OptResObj_New _OptResObj_New
|
|
#define OptResObj_Convert _OptResObj_Convert
|
|
#endif
|
|
|
|
/* Function to dispose a resource, with a "normal" calling sequence */
|
|
static void
|
|
PyMac_AutoDisposeHandle(Handle h)
|
|
{
|
|
DisposeHandle(h);
|
|
}
|
|
|
|
static PyObject *Res_Error;
|
|
|
|
/* ---------------------- Object type Resource ---------------------- */
|
|
|
|
PyTypeObject Resource_Type;
|
|
|
|
#define ResObj_Check(x) ((x)->ob_type == &Resource_Type)
|
|
|
|
typedef struct ResourceObject {
|
|
PyObject_HEAD
|
|
Handle ob_itself;
|
|
void (*ob_freeit)(Handle ptr);
|
|
} ResourceObject;
|
|
|
|
PyObject *ResObj_New(itself)
|
|
Handle itself;
|
|
{
|
|
ResourceObject *it;
|
|
if (itself == NULL) return PyMac_Error(resNotFound);
|
|
it = PyObject_NEW(ResourceObject, &Resource_Type);
|
|
if (it == NULL) return NULL;
|
|
it->ob_itself = itself;
|
|
it->ob_freeit = NULL;
|
|
return (PyObject *)it;
|
|
}
|
|
ResObj_Convert(v, p_itself)
|
|
PyObject *v;
|
|
Handle *p_itself;
|
|
{
|
|
if (!ResObj_Check(v))
|
|
{
|
|
PyObject *tmp;
|
|
if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) )
|
|
{
|
|
*p_itself = ((ResourceObject *)tmp)->ob_itself;
|
|
Py_DECREF(tmp);
|
|
return 1;
|
|
}
|
|
PyErr_Clear();
|
|
}
|
|
if (!ResObj_Check(v))
|
|
{
|
|
PyErr_SetString(PyExc_TypeError, "Resource required");
|
|
return 0;
|
|
}
|
|
*p_itself = ((ResourceObject *)v)->ob_itself;
|
|
return 1;
|
|
}
|
|
|
|
static void ResObj_dealloc(self)
|
|
ResourceObject *self;
|
|
{
|
|
if (self->ob_freeit && self->ob_itself)
|
|
{
|
|
self->ob_freeit(self->ob_itself);
|
|
}
|
|
self->ob_itself = NULL;
|
|
PyMem_DEL(self);
|
|
}
|
|
|
|
static PyObject *ResObj_HomeResFile(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = HomeResFile(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_MacLoadResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
MacLoadResource(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_ReleaseResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
ReleaseResource(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_DetachResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
DetachResource(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_GetResAttrs(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetResAttrs(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_GetResInfo(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short theID;
|
|
ResType theType;
|
|
Str255 name;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
GetResInfo(_self->ob_itself,
|
|
&theID,
|
|
&theType,
|
|
name);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("hO&O&",
|
|
theID,
|
|
PyMac_BuildOSType, theType,
|
|
PyMac_BuildStr255, name);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_SetResInfo(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short theID;
|
|
Str255 name;
|
|
if (!PyArg_ParseTuple(_args, "hO&",
|
|
&theID,
|
|
PyMac_GetStr255, name))
|
|
return NULL;
|
|
SetResInfo(_self->ob_itself,
|
|
theID,
|
|
name);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_AddResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
ResType theType;
|
|
short theID;
|
|
Str255 name;
|
|
if (!PyArg_ParseTuple(_args, "O&hO&",
|
|
PyMac_GetOSType, &theType,
|
|
&theID,
|
|
PyMac_GetStr255, name))
|
|
return NULL;
|
|
AddResource(_self->ob_itself,
|
|
theType,
|
|
theID,
|
|
name);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_GetResourceSizeOnDisk(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
long _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetResourceSizeOnDisk(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("l",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_GetMaxResourceSize(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
long _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetMaxResourceSize(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("l",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *ResObj_RsrcMapEntry(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
long _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = RsrcMapEntry(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("l",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
static PyObject *ResObj_SetResAttrs(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short attrs;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&attrs))
|
|
return NULL;
|
|
SetResAttrs(_self->ob_itself,
|
|
attrs);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_ChangedResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
ChangedResource(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_RemoveResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
RemoveResource(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_WriteResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
WriteResource(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_SetResourceSize(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
long newSize;
|
|
if (!PyArg_ParseTuple(_args, "l",
|
|
&newSize))
|
|
return NULL;
|
|
SetResourceSize(_self->ob_itself,
|
|
newSize);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_GetNextFOND(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetNextFOND(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_as_Control(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
|
|
return CtlObj_New((ControlHandle)_self->ob_itself);
|
|
|
|
}
|
|
|
|
static PyObject *ResObj_as_Menu(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
|
|
return MenuObj_New((MenuHandle)_self->ob_itself);
|
|
|
|
}
|
|
|
|
static PyObject *ResObj_LoadResource(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
LoadResource(_self->ob_itself);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ResObj_AutoDispose(_self, _args)
|
|
ResourceObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
static PyMethodDef ResObj_methods[] = {
|
|
{"HomeResFile", (PyCFunction)ResObj_HomeResFile, 1,
|
|
"() -> (short _rv)"},
|
|
{"MacLoadResource", (PyCFunction)ResObj_MacLoadResource, 1,
|
|
"() -> None"},
|
|
{"ReleaseResource", (PyCFunction)ResObj_ReleaseResource, 1,
|
|
"() -> None"},
|
|
{"DetachResource", (PyCFunction)ResObj_DetachResource, 1,
|
|
"() -> None"},
|
|
{"GetResAttrs", (PyCFunction)ResObj_GetResAttrs, 1,
|
|
"() -> (short _rv)"},
|
|
{"GetResInfo", (PyCFunction)ResObj_GetResInfo, 1,
|
|
"() -> (short theID, ResType theType, Str255 name)"},
|
|
{"SetResInfo", (PyCFunction)ResObj_SetResInfo, 1,
|
|
"(short theID, Str255 name) -> None"},
|
|
{"AddResource", (PyCFunction)ResObj_AddResource, 1,
|
|
"(ResType theType, short theID, Str255 name) -> None"},
|
|
{"GetResourceSizeOnDisk", (PyCFunction)ResObj_GetResourceSizeOnDisk, 1,
|
|
"() -> (long _rv)"},
|
|
{"GetMaxResourceSize", (PyCFunction)ResObj_GetMaxResourceSize, 1,
|
|
"() -> (long _rv)"},
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
{"RsrcMapEntry", (PyCFunction)ResObj_RsrcMapEntry, 1,
|
|
"() -> (long _rv)"},
|
|
#endif
|
|
{"SetResAttrs", (PyCFunction)ResObj_SetResAttrs, 1,
|
|
"(short attrs) -> None"},
|
|
{"ChangedResource", (PyCFunction)ResObj_ChangedResource, 1,
|
|
"() -> None"},
|
|
{"RemoveResource", (PyCFunction)ResObj_RemoveResource, 1,
|
|
"() -> None"},
|
|
{"WriteResource", (PyCFunction)ResObj_WriteResource, 1,
|
|
"() -> None"},
|
|
{"SetResourceSize", (PyCFunction)ResObj_SetResourceSize, 1,
|
|
"(long newSize) -> None"},
|
|
{"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1,
|
|
"() -> (Handle _rv)"},
|
|
{"as_Control", (PyCFunction)ResObj_as_Control, 1,
|
|
"Return this resource/handle as a Control"},
|
|
{"as_Menu", (PyCFunction)ResObj_as_Menu, 1,
|
|
"Return this resource/handle as a Menu"},
|
|
{"LoadResource", (PyCFunction)ResObj_LoadResource, 1,
|
|
"() -> None"},
|
|
{"AutoDispose", (PyCFunction)ResObj_AutoDispose, 1,
|
|
"(int)->int. Automatically DisposeHandle the object on Python object cleanup"},
|
|
{NULL, NULL, 0}
|
|
};
|
|
|
|
PyMethodChain ResObj_chain = { ResObj_methods, NULL };
|
|
|
|
static PyObject *ResObj_getattr(self, name)
|
|
ResourceObject *self;
|
|
char *name;
|
|
{
|
|
|
|
if (strcmp(name, "size") == 0)
|
|
return PyInt_FromLong(GetHandleSize(self->ob_itself));
|
|
if (strcmp(name, "data") == 0) {
|
|
PyObject *res;
|
|
char state;
|
|
state = HGetState(self->ob_itself);
|
|
HLock(self->ob_itself);
|
|
res = PyString_FromStringAndSize(
|
|
*self->ob_itself,
|
|
GetHandleSize(self->ob_itself));
|
|
HUnlock(self->ob_itself);
|
|
HSetState(self->ob_itself, state);
|
|
return res;
|
|
}
|
|
if (strcmp(name, "__members__") == 0)
|
|
return Py_BuildValue("[ss]", "data", "size");
|
|
|
|
return Py_FindMethodInChain(&ResObj_chain, (PyObject *)self, name);
|
|
}
|
|
|
|
static int
|
|
ResObj_setattr(self, name, value)
|
|
ResourceObject *self;
|
|
char *name;
|
|
PyObject *value;
|
|
{
|
|
char *data;
|
|
long size;
|
|
|
|
if (strcmp(name, "data") != 0 || value == NULL )
|
|
return -1;
|
|
if ( !PyString_Check(value) )
|
|
return -1;
|
|
size = PyString_Size(value);
|
|
data = PyString_AsString(value);
|
|
/* XXXX Do I need the GetState/SetState calls? */
|
|
SetHandleSize(self->ob_itself, size);
|
|
if ( MemError())
|
|
return -1;
|
|
HLock(self->ob_itself);
|
|
memcpy((char *)*self->ob_itself, data, size);
|
|
HUnlock(self->ob_itself);
|
|
/* XXXX Should I do the Changed call immedeately? */
|
|
return 0;
|
|
}
|
|
|
|
|
|
#define ResObj_compare NULL
|
|
|
|
#define ResObj_repr NULL
|
|
|
|
#define ResObj_hash NULL
|
|
|
|
PyTypeObject Resource_Type = {
|
|
PyObject_HEAD_INIT(&PyType_Type)
|
|
0, /*ob_size*/
|
|
"Resource", /*tp_name*/
|
|
sizeof(ResourceObject), /*tp_basicsize*/
|
|
0, /*tp_itemsize*/
|
|
/* methods */
|
|
(destructor) ResObj_dealloc, /*tp_dealloc*/
|
|
0, /*tp_print*/
|
|
(getattrfunc) ResObj_getattr, /*tp_getattr*/
|
|
(setattrfunc) ResObj_setattr, /*tp_setattr*/
|
|
(cmpfunc) ResObj_compare, /*tp_compare*/
|
|
(reprfunc) ResObj_repr, /*tp_repr*/
|
|
(PyNumberMethods *)0, /* tp_as_number */
|
|
(PySequenceMethods *)0, /* tp_as_sequence */
|
|
(PyMappingMethods *)0, /* tp_as_mapping */
|
|
(hashfunc) ResObj_hash, /*tp_hash*/
|
|
};
|
|
|
|
/* -------------------- End object type Resource -------------------- */
|
|
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_InitResources(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = InitResources();
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_RsrcZoneInit(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
RsrcZoneInit();
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
static PyObject *Res_CloseResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short refNum;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&refNum))
|
|
return NULL;
|
|
CloseResFile(refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_ResError(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
OSErr _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = ResError();
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_CurResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = CurResFile();
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_CreateResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Str255 fileName;
|
|
if (!PyArg_ParseTuple(_args, "O&",
|
|
PyMac_GetStr255, fileName))
|
|
return NULL;
|
|
CreateResFile(fileName);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_OpenResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
Str255 fileName;
|
|
if (!PyArg_ParseTuple(_args, "O&",
|
|
PyMac_GetStr255, fileName))
|
|
return NULL;
|
|
_rv = OpenResFile(fileName);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
static PyObject *Res_UseResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short refNum;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&refNum))
|
|
return NULL;
|
|
UseResFile(refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_CountTypes(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = CountTypes();
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_Count1Types(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = Count1Types();
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_GetIndType(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
ResType theType;
|
|
short index;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&index))
|
|
return NULL;
|
|
GetIndType(&theType,
|
|
index);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
PyMac_BuildOSType, theType);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_Get1IndType(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
ResType theType;
|
|
short index;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&index))
|
|
return NULL;
|
|
Get1IndType(&theType,
|
|
index);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
PyMac_BuildOSType, theType);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_SetResLoad(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean load;
|
|
if (!PyArg_ParseTuple(_args, "b",
|
|
&load))
|
|
return NULL;
|
|
SetResLoad(load);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_CountResources(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
ResType theType;
|
|
if (!PyArg_ParseTuple(_args, "O&",
|
|
PyMac_GetOSType, &theType))
|
|
return NULL;
|
|
_rv = CountResources(theType);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_Count1Resources(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
ResType theType;
|
|
if (!PyArg_ParseTuple(_args, "O&",
|
|
PyMac_GetOSType, &theType))
|
|
return NULL;
|
|
_rv = Count1Resources(theType);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_GetIndResource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
ResType theType;
|
|
short index;
|
|
if (!PyArg_ParseTuple(_args, "O&h",
|
|
PyMac_GetOSType, &theType,
|
|
&index))
|
|
return NULL;
|
|
_rv = GetIndResource(theType,
|
|
index);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_Get1IndResource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
ResType theType;
|
|
short index;
|
|
if (!PyArg_ParseTuple(_args, "O&h",
|
|
PyMac_GetOSType, &theType,
|
|
&index))
|
|
return NULL;
|
|
_rv = Get1IndResource(theType,
|
|
index);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_GetResource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
ResType theType;
|
|
short theID;
|
|
if (!PyArg_ParseTuple(_args, "O&h",
|
|
PyMac_GetOSType, &theType,
|
|
&theID))
|
|
return NULL;
|
|
_rv = GetResource(theType,
|
|
theID);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_Get1Resource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
ResType theType;
|
|
short theID;
|
|
if (!PyArg_ParseTuple(_args, "O&h",
|
|
PyMac_GetOSType, &theType,
|
|
&theID))
|
|
return NULL;
|
|
_rv = Get1Resource(theType,
|
|
theID);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_GetNamedResource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
ResType theType;
|
|
Str255 name;
|
|
if (!PyArg_ParseTuple(_args, "O&O&",
|
|
PyMac_GetOSType, &theType,
|
|
PyMac_GetStr255, name))
|
|
return NULL;
|
|
_rv = GetNamedResource(theType,
|
|
name);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_Get1NamedResource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
ResType theType;
|
|
Str255 name;
|
|
if (!PyArg_ParseTuple(_args, "O&O&",
|
|
PyMac_GetOSType, &theType,
|
|
PyMac_GetStr255, name))
|
|
return NULL;
|
|
_rv = Get1NamedResource(theType,
|
|
name);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_UniqueID(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
ResType theType;
|
|
if (!PyArg_ParseTuple(_args, "O&",
|
|
PyMac_GetOSType, &theType))
|
|
return NULL;
|
|
_rv = UniqueID(theType);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_Unique1ID(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
ResType theType;
|
|
if (!PyArg_ParseTuple(_args, "O&",
|
|
PyMac_GetOSType, &theType))
|
|
return NULL;
|
|
_rv = Unique1ID(theType);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_UpdateResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short refNum;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&refNum))
|
|
return NULL;
|
|
UpdateResFile(refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_SetResPurge(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean install;
|
|
if (!PyArg_ParseTuple(_args, "b",
|
|
&install))
|
|
return NULL;
|
|
SetResPurge(install);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_GetResFileAttrs(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
short refNum;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&refNum))
|
|
return NULL;
|
|
_rv = GetResFileAttrs(refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_SetResFileAttrs(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short refNum;
|
|
short attrs;
|
|
if (!PyArg_ParseTuple(_args, "hh",
|
|
&refNum,
|
|
&attrs))
|
|
return NULL;
|
|
SetResFileAttrs(refNum,
|
|
attrs);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_OpenRFPerm(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
Str255 fileName;
|
|
short vRefNum;
|
|
SignedByte permission;
|
|
if (!PyArg_ParseTuple(_args, "O&hb",
|
|
PyMac_GetStr255, fileName,
|
|
&vRefNum,
|
|
&permission))
|
|
return NULL;
|
|
_rv = OpenRFPerm(fileName,
|
|
vRefNum,
|
|
permission);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_RGetResource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Handle _rv;
|
|
ResType theType;
|
|
short theID;
|
|
if (!PyArg_ParseTuple(_args, "O&h",
|
|
PyMac_GetOSType, &theType,
|
|
&theID))
|
|
return NULL;
|
|
_rv = RGetResource(theType,
|
|
theID);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("O&",
|
|
ResObj_New, _rv);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
static PyObject *Res_HOpenResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
short vRefNum;
|
|
long dirID;
|
|
Str255 fileName;
|
|
SignedByte permission;
|
|
if (!PyArg_ParseTuple(_args, "hlO&b",
|
|
&vRefNum,
|
|
&dirID,
|
|
PyMac_GetStr255, fileName,
|
|
&permission))
|
|
return NULL;
|
|
_rv = HOpenResFile(vRefNum,
|
|
dirID,
|
|
fileName,
|
|
permission);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_HCreateResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short vRefNum;
|
|
long dirID;
|
|
Str255 fileName;
|
|
if (!PyArg_ParseTuple(_args, "hlO&",
|
|
&vRefNum,
|
|
&dirID,
|
|
PyMac_GetStr255, fileName))
|
|
return NULL;
|
|
HCreateResFile(vRefNum,
|
|
dirID,
|
|
fileName);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_FSpOpenResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
short _rv;
|
|
FSSpec spec;
|
|
SignedByte permission;
|
|
if (!PyArg_ParseTuple(_args, "O&b",
|
|
PyMac_GetFSSpec, &spec,
|
|
&permission))
|
|
return NULL;
|
|
_rv = FSpOpenResFile(&spec,
|
|
permission);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Res_FSpCreateResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
FSSpec spec;
|
|
OSType creator;
|
|
OSType fileType;
|
|
ScriptCode scriptTag;
|
|
if (!PyArg_ParseTuple(_args, "O&O&O&h",
|
|
PyMac_GetFSSpec, &spec,
|
|
PyMac_GetOSType, &creator,
|
|
PyMac_GetOSType, &fileType,
|
|
&scriptTag))
|
|
return NULL;
|
|
FSpCreateResFile(&spec,
|
|
creator,
|
|
fileType,
|
|
scriptTag);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_InsertResourceFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
OSErr _rv;
|
|
SInt16 refNum;
|
|
RsrcChainLocation where;
|
|
if (!PyArg_ParseTuple(_args, "hh",
|
|
&refNum,
|
|
&where))
|
|
return NULL;
|
|
_rv = InsertResourceFile(refNum,
|
|
where);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_DetachResourceFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
OSErr _rv;
|
|
SInt16 refNum;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&refNum))
|
|
return NULL;
|
|
_rv = DetachResourceFile(refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_FSpResourceFileAlreadyOpen(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
FSSpec resourceFile;
|
|
Boolean inChain;
|
|
SInt16 refNum;
|
|
if (!PyArg_ParseTuple(_args, "O&",
|
|
PyMac_GetFSSpec, &resourceFile))
|
|
return NULL;
|
|
_rv = FSpResourceFileAlreadyOpen(&resourceFile,
|
|
&inChain,
|
|
&refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("bbh",
|
|
_rv,
|
|
inChain,
|
|
refNum);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_FSpOpenOrphanResFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
OSErr _rv;
|
|
FSSpec spec;
|
|
SignedByte permission;
|
|
SInt16 refNum;
|
|
if (!PyArg_ParseTuple(_args, "O&b",
|
|
PyMac_GetFSSpec, &spec,
|
|
&permission))
|
|
return NULL;
|
|
_rv = FSpOpenOrphanResFile(&spec,
|
|
permission,
|
|
&refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("hh",
|
|
_rv,
|
|
refNum);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_GetTopResourceFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
OSErr _rv;
|
|
SInt16 refNum;
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetTopResourceFile(&refNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("hh",
|
|
_rv,
|
|
refNum);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
|
|
static PyObject *Res_GetNextResourceFile(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
OSErr _rv;
|
|
SInt16 curRefNum;
|
|
SInt16 nextRefNum;
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&curRefNum))
|
|
return NULL;
|
|
_rv = GetNextResourceFile(curRefNum,
|
|
&nextRefNum);
|
|
{
|
|
OSErr _err = ResError();
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
}
|
|
_res = Py_BuildValue("hh",
|
|
_rv,
|
|
nextRefNum);
|
|
return _res;
|
|
}
|
|
#endif
|
|
|
|
static PyObject *Res_Resource(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
static PyObject *Res_Handle(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
static PyMethodDef Res_methods[] = {
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
{"InitResources", (PyCFunction)Res_InitResources, 1,
|
|
"() -> (short _rv)"},
|
|
#endif
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
{"RsrcZoneInit", (PyCFunction)Res_RsrcZoneInit, 1,
|
|
"() -> None"},
|
|
#endif
|
|
{"CloseResFile", (PyCFunction)Res_CloseResFile, 1,
|
|
"(short refNum) -> None"},
|
|
{"ResError", (PyCFunction)Res_ResError, 1,
|
|
"() -> (OSErr _rv)"},
|
|
{"CurResFile", (PyCFunction)Res_CurResFile, 1,
|
|
"() -> (short _rv)"},
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
{"CreateResFile", (PyCFunction)Res_CreateResFile, 1,
|
|
"(Str255 fileName) -> None"},
|
|
#endif
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
{"OpenResFile", (PyCFunction)Res_OpenResFile, 1,
|
|
"(Str255 fileName) -> (short _rv)"},
|
|
#endif
|
|
{"UseResFile", (PyCFunction)Res_UseResFile, 1,
|
|
"(short refNum) -> None"},
|
|
{"CountTypes", (PyCFunction)Res_CountTypes, 1,
|
|
"() -> (short _rv)"},
|
|
{"Count1Types", (PyCFunction)Res_Count1Types, 1,
|
|
"() -> (short _rv)"},
|
|
{"GetIndType", (PyCFunction)Res_GetIndType, 1,
|
|
"(short index) -> (ResType theType)"},
|
|
{"Get1IndType", (PyCFunction)Res_Get1IndType, 1,
|
|
"(short index) -> (ResType theType)"},
|
|
{"SetResLoad", (PyCFunction)Res_SetResLoad, 1,
|
|
"(Boolean load) -> None"},
|
|
{"CountResources", (PyCFunction)Res_CountResources, 1,
|
|
"(ResType theType) -> (short _rv)"},
|
|
{"Count1Resources", (PyCFunction)Res_Count1Resources, 1,
|
|
"(ResType theType) -> (short _rv)"},
|
|
{"GetIndResource", (PyCFunction)Res_GetIndResource, 1,
|
|
"(ResType theType, short index) -> (Handle _rv)"},
|
|
{"Get1IndResource", (PyCFunction)Res_Get1IndResource, 1,
|
|
"(ResType theType, short index) -> (Handle _rv)"},
|
|
{"GetResource", (PyCFunction)Res_GetResource, 1,
|
|
"(ResType theType, short theID) -> (Handle _rv)"},
|
|
{"Get1Resource", (PyCFunction)Res_Get1Resource, 1,
|
|
"(ResType theType, short theID) -> (Handle _rv)"},
|
|
{"GetNamedResource", (PyCFunction)Res_GetNamedResource, 1,
|
|
"(ResType theType, Str255 name) -> (Handle _rv)"},
|
|
{"Get1NamedResource", (PyCFunction)Res_Get1NamedResource, 1,
|
|
"(ResType theType, Str255 name) -> (Handle _rv)"},
|
|
{"UniqueID", (PyCFunction)Res_UniqueID, 1,
|
|
"(ResType theType) -> (short _rv)"},
|
|
{"Unique1ID", (PyCFunction)Res_Unique1ID, 1,
|
|
"(ResType theType) -> (short _rv)"},
|
|
{"UpdateResFile", (PyCFunction)Res_UpdateResFile, 1,
|
|
"(short refNum) -> None"},
|
|
{"SetResPurge", (PyCFunction)Res_SetResPurge, 1,
|
|
"(Boolean install) -> None"},
|
|
{"GetResFileAttrs", (PyCFunction)Res_GetResFileAttrs, 1,
|
|
"(short refNum) -> (short _rv)"},
|
|
{"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1,
|
|
"(short refNum, short attrs) -> None"},
|
|
{"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1,
|
|
"(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
|
|
|
|
#if !TARGET_API_MAC_CARBON
|
|
{"RGetResource", (PyCFunction)Res_RGetResource, 1,
|
|
"(ResType theType, short theID) -> (Handle _rv)"},
|
|
#endif
|
|
{"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1,
|
|
"(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
|
|
{"HCreateResFile", (PyCFunction)Res_HCreateResFile, 1,
|
|
"(short vRefNum, long dirID, Str255 fileName) -> None"},
|
|
{"FSpOpenResFile", (PyCFunction)Res_FSpOpenResFile, 1,
|
|
"(FSSpec spec, SignedByte permission) -> (short _rv)"},
|
|
{"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1,
|
|
"(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
{"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1,
|
|
"(SInt16 refNum, RsrcChainLocation where) -> (OSErr _rv)"},
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
{"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1,
|
|
"(SInt16 refNum) -> (OSErr _rv)"},
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
{"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1,
|
|
"(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)"},
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
{"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1,
|
|
"(FSSpec spec, SignedByte permission) -> (OSErr _rv, SInt16 refNum)"},
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
{"GetTopResourceFile", (PyCFunction)Res_GetTopResourceFile, 1,
|
|
"() -> (OSErr _rv, SInt16 refNum)"},
|
|
#endif
|
|
|
|
#if TARGET_API_MAC_CARBON
|
|
{"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1,
|
|
"(SInt16 curRefNum) -> (OSErr _rv, SInt16 nextRefNum)"},
|
|
#endif
|
|
{"Resource", (PyCFunction)Res_Resource, 1,
|
|
"Convert a string to a resource object.\n\nThe created resource object is actually just a handle,\napply AddResource() to write it to a resource file.\nSee also the Handle() docstring.\n"},
|
|
{"Handle", (PyCFunction)Res_Handle, 1,
|
|
"Convert a string to a Handle object.\n\nResource() and Handle() are very similar, but objects created with Handle() are\nby default automatically DisposeHandle()d upon object cleanup. Use AutoDispose()\nto change this.\n"},
|
|
{NULL, NULL, 0}
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Alternative version of ResObj_New, which returns None for null argument */
|
|
PyObject *OptResObj_New(itself)
|
|
Handle itself;
|
|
{
|
|
if (itself == NULL) {
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
return ResObj_New(itself);
|
|
}
|
|
|
|
OptResObj_Convert(v, p_itself)
|
|
PyObject *v;
|
|
Handle *p_itself;
|
|
{
|
|
PyObject *tmp;
|
|
|
|
if ( v == Py_None ) {
|
|
*p_itself = NULL;
|
|
return 1;
|
|
}
|
|
if (ResObj_Check(v))
|
|
{
|
|
*p_itself = ((ResourceObject *)v)->ob_itself;
|
|
return 1;
|
|
}
|
|
/* If it isn't a resource yet see whether it is convertible */
|
|
if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) ) {
|
|
*p_itself = ((ResourceObject *)tmp)->ob_itself;
|
|
Py_DECREF(tmp);
|
|
return 1;
|
|
}
|
|
PyErr_Clear();
|
|
PyErr_SetString(PyExc_TypeError, "Resource required");
|
|
return 0;
|
|
}
|
|
|
|
|
|
void initRes()
|
|
{
|
|
PyObject *m;
|
|
PyObject *d;
|
|
|
|
|
|
|
|
PyMac_INIT_TOOLBOX_OBJECT_NEW(ResObj_New);
|
|
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ResObj_Convert);
|
|
PyMac_INIT_TOOLBOX_OBJECT_NEW(OptResObj_New);
|
|
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(OptResObj_Convert);
|
|
|
|
|
|
m = Py_InitModule("Res", Res_methods);
|
|
d = PyModule_GetDict(m);
|
|
Res_Error = PyMac_GetOSErrException();
|
|
if (Res_Error == NULL ||
|
|
PyDict_SetItemString(d, "Error", Res_Error) != 0)
|
|
return;
|
|
Resource_Type.ob_type = &PyType_Type;
|
|
Py_INCREF(&Resource_Type);
|
|
if (PyDict_SetItemString(d, "ResourceType", (PyObject *)&Resource_Type) != 0)
|
|
Py_FatalError("can't initialize ResourceType");
|
|
}
|
|
|
|
/* ========================= End module Res ========================= */
|
|
|