2001-08-23 11:02:09 -03:00
/* ========================== Module _Res =========================== */
# include "Python.h"
# include "pymactoolbox.h"
/* Macro to test whether a weak-loaded CFM function exists */
# define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
2003-11-19 12:13:35 -04:00
PyErr_SetString ( PyExc_NotImplementedError , \
" Not available in this shared library/OS version " ) ; \
return NULL ; \
2001-08-23 11:02:09 -03:00
} } while ( 0 )
# include <Carbon/Carbon.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 )
{
2005-07-03 17:59:44 -03:00
DisposeHandle ( h ) ;
2001-08-23 11:02:09 -03:00
}
static PyObject * Res_Error ;
/* ---------------------- Object type Resource ---------------------- */
PyTypeObject Resource_Type ;
2007-12-18 22:45:37 -04:00
# define ResObj_Check(x) (Py_TYPE(x) == &Resource_Type || PyObject_TypeCheck((x), &Resource_Type))
2001-08-23 11:02:09 -03:00
typedef struct ResourceObject {
PyObject_HEAD
Handle ob_itself ;
void ( * ob_freeit ) ( Handle ptr ) ;
} ResourceObject ;
PyObject * ResObj_New ( 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 ;
}
2005-07-03 17:59:44 -03:00
2001-09-04 19:19:18 -03:00
int ResObj_Convert ( PyObject * v , Handle * p_itself )
2001-08-23 11:02:09 -03:00
{
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 ( ResourceObject * self )
{
if ( self - > ob_freeit & & self - > ob_itself )
{
self - > ob_freeit ( self - > ob_itself ) ;
}
self - > ob_itself = NULL ;
2007-12-18 22:45:37 -04:00
Py_TYPE ( self ) - > tp_free ( ( PyObject * ) self ) ;
2001-08-23 11:02:09 -03:00
}
static PyObject * ResObj_HomeResFile ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
2002-03-22 10:16:39 -04:00
# ifndef HomeResFile
PyMac_PRECHECK ( HomeResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-22 10:16:39 -04:00
# ifndef MacLoadResource
PyMac_PRECHECK ( MacLoadResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-22 10:16:39 -04:00
# ifndef ReleaseResource
PyMac_PRECHECK ( ReleaseResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-22 10:16:39 -04:00
# ifndef DetachResource
PyMac_PRECHECK ( DetachResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
2002-03-22 10:16:39 -04:00
# ifndef GetResAttrs
PyMac_PRECHECK ( GetResAttrs ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short theID ;
ResType theType ;
Str255 name ;
2002-03-22 10:16:39 -04:00
# ifndef GetResInfo
PyMac_PRECHECK ( GetResInfo ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short theID ;
Str255 name ;
2002-03-22 10:16:39 -04:00
# ifndef SetResInfo
PyMac_PRECHECK ( SetResInfo ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
ResType theType ;
short theID ;
Str255 name ;
2002-03-22 10:16:39 -04:00
# ifndef AddResource
PyMac_PRECHECK ( AddResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
long _rv ;
2002-03-22 10:16:39 -04:00
# ifndef GetResourceSizeOnDisk
PyMac_PRECHECK ( GetResourceSizeOnDisk ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
long _rv ;
2002-03-22 10:16:39 -04:00
# ifndef GetMaxResourceSize
PyMac_PRECHECK ( GetMaxResourceSize ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ;
}
static PyObject * ResObj_SetResAttrs ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short attrs ;
2002-03-22 10:16:39 -04:00
# ifndef SetResAttrs
PyMac_PRECHECK ( SetResAttrs ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-22 10:16:39 -04:00
# ifndef ChangedResource
PyMac_PRECHECK ( ChangedResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-22 10:16:39 -04:00
# ifndef RemoveResource
PyMac_PRECHECK ( RemoveResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-22 10:16:39 -04:00
# ifndef WriteResource
PyMac_PRECHECK ( WriteResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
long newSize ;
2002-03-22 10:16:39 -04:00
# ifndef SetResourceSize
PyMac_PRECHECK ( SetResourceSize ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Handle _rv ;
2002-03-22 10:16:39 -04:00
# ifndef GetNextFOND
PyMac_PRECHECK ( GetNextFOND ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2001-09-05 07:31:52 -03:00
_res = CtlObj_New ( ( ControlHandle ) _self - > ob_itself ) ;
return _res ;
2001-08-23 11:02:09 -03:00
}
static PyObject * ResObj_as_Menu ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2001-09-05 07:31:52 -03:00
_res = MenuObj_New ( ( MenuHandle ) _self - > ob_itself ) ;
return _res ;
2001-08-23 11:02:09 -03:00
}
static PyObject * ResObj_LoadResource ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-22 10:16:39 -04:00
# ifndef LoadResource
PyMac_PRECHECK ( LoadResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( ResourceObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
int onoff , old = 0 ;
if ( ! PyArg_ParseTuple ( _args , " i " , & onoff ) )
2005-07-03 17:59:44 -03:00
return NULL ;
2001-08-23 11:02:09 -03:00
if ( _self - > ob_freeit )
2005-07-03 17:59:44 -03:00
old = 1 ;
2001-08-23 11:02:09 -03:00
if ( onoff )
2005-07-03 17:59:44 -03:00
_self - > ob_freeit = PyMac_AutoDisposeHandle ;
2001-08-23 11:02:09 -03:00
else
2005-07-03 17:59:44 -03:00
_self - > ob_freeit = NULL ;
2001-09-05 12:44:37 -03:00
_res = Py_BuildValue ( " i " , old ) ;
return _res ;
2001-08-23 11:02:09 -03:00
}
static PyMethodDef ResObj_methods [ ] = {
{ " HomeResFile " , ( PyCFunction ) ResObj_HomeResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " MacLoadResource " , ( PyCFunction ) ResObj_MacLoadResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " ReleaseResource " , ( PyCFunction ) ResObj_ReleaseResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " DetachResource " , ( PyCFunction ) ResObj_DetachResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetResAttrs " , ( PyCFunction ) ResObj_GetResAttrs , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetResInfo " , ( PyCFunction ) ResObj_GetResInfo , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (short theID, ResType theType, Str255 name) " ) } ,
2001-08-23 11:02:09 -03:00
{ " SetResInfo " , ( PyCFunction ) ResObj_SetResInfo , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short theID, Str255 name) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " AddResource " , ( PyCFunction ) ResObj_AddResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType, short theID, Str255 name) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetResourceSizeOnDisk " , ( PyCFunction ) ResObj_GetResourceSizeOnDisk , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (long _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetMaxResourceSize " , ( PyCFunction ) ResObj_GetMaxResourceSize , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (long _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " SetResAttrs " , ( PyCFunction ) ResObj_SetResAttrs , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short attrs) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " ChangedResource " , ( PyCFunction ) ResObj_ChangedResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " RemoveResource " , ( PyCFunction ) ResObj_RemoveResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " WriteResource " , ( PyCFunction ) ResObj_WriteResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " SetResourceSize " , ( PyCFunction ) ResObj_SetResourceSize , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (long newSize) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetNextFOND " , ( PyCFunction ) ResObj_GetNextFOND , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (Handle _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " as_Control " , ( PyCFunction ) ResObj_as_Control , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " Return this resource/handle as a Control " ) } ,
2001-08-23 11:02:09 -03:00
{ " as_Menu " , ( PyCFunction ) ResObj_as_Menu , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " Return this resource/handle as a Menu " ) } ,
2001-08-23 11:02:09 -03:00
{ " LoadResource " , ( PyCFunction ) ResObj_LoadResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " AutoDispose " , ( PyCFunction ) ResObj_AutoDispose , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (int)->int. Automatically DisposeHandle the object on Python object cleanup " ) } ,
2001-08-23 11:02:09 -03:00
{ NULL , NULL , 0 }
} ;
2002-11-29 19:40:48 -04:00
static PyObject * ResObj_get_data ( ResourceObject * self , void * closure )
2001-08-23 11:02:09 -03:00
{
2005-07-03 17:59:44 -03:00
PyObject * res ;
char state ;
2002-11-29 19:40:48 -04:00
2005-07-03 17:59:44 -03:00
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 ;
2001-08-23 11:02:09 -03:00
}
2002-11-29 19:40:48 -04:00
static int ResObj_set_data ( ResourceObject * self , PyObject * v , void * closure )
2001-08-23 11:02:09 -03:00
{
2002-11-29 19:40:48 -04:00
2005-07-03 17:59:44 -03:00
char * data ;
long size ;
if ( v = = NULL )
return - 1 ;
if ( ! PyString_Check ( v ) )
return - 1 ;
size = PyString_Size ( v ) ;
data = PyString_AsString ( v ) ;
/* 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 ;
2001-08-23 11:02:09 -03:00
return 0 ;
}
2002-11-29 19:40:48 -04:00
static PyObject * ResObj_get_size ( ResourceObject * self , void * closure )
{
2007-12-02 10:31:20 -04:00
return PyLong_FromLong ( GetHandleSize ( self - > ob_itself ) ) ;
2002-11-29 19:40:48 -04:00
}
# define ResObj_set_size NULL
static PyGetSetDef ResObj_getsetlist [ ] = {
{ " data " , ( getter ) ResObj_get_data , ( setter ) ResObj_set_data , " The resource data " } ,
{ " size " , ( getter ) ResObj_get_size , ( setter ) ResObj_set_size , " The length of the resource data " } ,
{ NULL , NULL , NULL , NULL } ,
} ;
2001-08-23 11:02:09 -03:00
# define ResObj_compare NULL
# define ResObj_repr NULL
# define ResObj_hash NULL
2005-07-03 17:59:44 -03:00
static int ResObj_tp_init ( PyObject * _self , PyObject * _args , PyObject * _kwds )
2002-12-05 19:26:38 -04:00
{
char * srcdata = NULL ;
int srclen = 0 ;
Handle itself ;
char * kw [ ] = { " itself " , 0 } ;
2005-07-03 17:59:44 -03:00
if ( PyArg_ParseTupleAndKeywords ( _args , _kwds , " O& " , kw , ResObj_Convert , & itself ) )
2002-12-05 19:26:38 -04:00
{
2005-07-03 17:59:44 -03:00
( ( ResourceObject * ) _self ) - > ob_itself = itself ;
2002-12-05 19:26:38 -04:00
return 0 ;
}
PyErr_Clear ( ) ;
2005-07-03 17:59:44 -03:00
if ( ! PyArg_ParseTupleAndKeywords ( _args , _kwds , " |s# " , kw , & srcdata , & srclen ) ) return - 1 ;
2002-12-05 19:26:38 -04:00
if ( ( itself = NewHandle ( srclen ) ) = = NULL )
{
PyErr_NoMemory ( ) ;
return 0 ;
}
2005-07-03 17:59:44 -03:00
( ( ResourceObject * ) _self ) - > ob_itself = itself ;
2002-12-05 19:26:38 -04:00
if ( srclen & & srcdata )
{
HLock ( itself ) ;
memcpy ( * itself , srcdata , srclen ) ;
HUnlock ( itself ) ;
}
return 0 ;
}
# define ResObj_tp_alloc PyType_GenericAlloc
2005-07-03 17:59:44 -03:00
static PyObject * ResObj_tp_new ( PyTypeObject * type , PyObject * _args , PyObject * _kwds )
2002-12-05 19:26:38 -04:00
{
PyObject * self ;
if ( ( self = type - > tp_alloc ( type , 0 ) ) = = NULL ) return NULL ;
( ( ResourceObject * ) self ) - > ob_itself = NULL ;
( ( ResourceObject * ) self ) - > ob_freeit = NULL ;
return self ;
}
# define ResObj_tp_free PyObject_Del
2001-08-23 11:02:09 -03:00
PyTypeObject Resource_Type = {
2007-07-22 11:41:55 -03:00
PyVarObject_HEAD_INIT ( NULL , 0 )
2001-12-08 14:02:58 -04:00
" _Res.Resource " , /*tp_name*/
2001-08-23 11:02:09 -03:00
sizeof ( ResourceObject ) , /*tp_basicsize*/
0 , /*tp_itemsize*/
/* methods */
( destructor ) ResObj_dealloc , /*tp_dealloc*/
0 , /*tp_print*/
2002-11-29 19:40:48 -04:00
( getattrfunc ) 0 , /*tp_getattr*/
( setattrfunc ) 0 , /*tp_setattr*/
2001-08-23 11:02:09 -03:00
( 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*/
2002-11-29 19:40:48 -04:00
0 , /*tp_call*/
0 , /*tp_str*/
PyObject_GenericGetAttr , /*tp_getattro*/
PyObject_GenericSetAttr , /*tp_setattro */
2002-12-05 19:26:38 -04:00
0 , /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE , /* tp_flags */
0 , /*tp_doc*/
0 , /*tp_traverse*/
0 , /*tp_clear*/
0 , /*tp_richcompare*/
0 , /*tp_weaklistoffset*/
0 , /*tp_iter*/
0 , /*tp_iternext*/
2002-11-29 19:40:48 -04:00
ResObj_methods , /* tp_methods */
2002-12-05 19:26:38 -04:00
0 , /*tp_members*/
2002-11-29 19:40:48 -04:00
ResObj_getsetlist , /*tp_getset*/
2002-12-05 19:26:38 -04:00
0 , /*tp_base*/
0 , /*tp_dict*/
0 , /*tp_descr_get*/
0 , /*tp_descr_set*/
0 , /*tp_dictoffset*/
ResObj_tp_init , /* tp_init */
ResObj_tp_alloc , /* tp_alloc */
ResObj_tp_new , /* tp_new */
ResObj_tp_free , /* tp_free */
2001-08-23 11:02:09 -03:00
} ;
/* -------------------- End object type Resource -------------------- */
static PyObject * Res_CloseResFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short refNum ;
2002-03-22 10:16:39 -04:00
# ifndef CloseResFile
PyMac_PRECHECK ( CloseResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2002-03-22 10:16:39 -04:00
# ifndef ResError
PyMac_PRECHECK ( ResError ) ;
# endif
2001-08-23 11:02:09 -03:00
if ( ! PyArg_ParseTuple ( _args , " " ) )
return NULL ;
2002-03-18 11:31:08 -04:00
_err = ResError ( ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
Py_INCREF ( Py_None ) ;
_res = Py_None ;
2001-08-23 11:02:09 -03:00
return _res ;
}
static PyObject * Res_CurResFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
2002-03-22 10:16:39 -04:00
# ifndef CurResFile
PyMac_PRECHECK ( CurResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ;
}
static PyObject * Res_UseResFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short refNum ;
2002-03-22 10:16:39 -04:00
# ifndef UseResFile
PyMac_PRECHECK ( UseResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
2002-03-22 10:16:39 -04:00
# ifndef CountTypes
PyMac_PRECHECK ( CountTypes ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
2002-03-22 10:16:39 -04:00
# ifndef Count1Types
PyMac_PRECHECK ( Count1Types ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
ResType theType ;
short index ;
2002-03-22 10:16:39 -04:00
# ifndef GetIndType
PyMac_PRECHECK ( GetIndType ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
ResType theType ;
short index ;
2002-03-22 10:16:39 -04:00
# ifndef Get1IndType
PyMac_PRECHECK ( Get1IndType ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Boolean load ;
2002-03-22 10:16:39 -04:00
# ifndef SetResLoad
PyMac_PRECHECK ( SetResLoad ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
ResType theType ;
2002-03-22 10:16:39 -04:00
# ifndef CountResources
PyMac_PRECHECK ( CountResources ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
ResType theType ;
2002-03-22 10:16:39 -04:00
# ifndef Count1Resources
PyMac_PRECHECK ( Count1Resources ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Handle _rv ;
ResType theType ;
short index ;
2002-03-22 10:16:39 -04:00
# ifndef GetIndResource
PyMac_PRECHECK ( GetIndResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Handle _rv ;
ResType theType ;
short index ;
2002-03-22 10:16:39 -04:00
# ifndef Get1IndResource
PyMac_PRECHECK ( Get1IndResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Handle _rv ;
ResType theType ;
short theID ;
2002-03-22 10:16:39 -04:00
# ifndef GetResource
PyMac_PRECHECK ( GetResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Handle _rv ;
ResType theType ;
short theID ;
2002-03-22 10:16:39 -04:00
# ifndef Get1Resource
PyMac_PRECHECK ( Get1Resource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Handle _rv ;
ResType theType ;
Str255 name ;
2002-03-22 10:16:39 -04:00
# ifndef GetNamedResource
PyMac_PRECHECK ( GetNamedResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Handle _rv ;
ResType theType ;
Str255 name ;
2002-03-22 10:16:39 -04:00
# ifndef Get1NamedResource
PyMac_PRECHECK ( Get1NamedResource ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
ResType theType ;
2002-03-22 10:16:39 -04:00
# ifndef UniqueID
PyMac_PRECHECK ( UniqueID ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
ResType theType ;
2002-03-22 10:16:39 -04:00
# ifndef Unique1ID
PyMac_PRECHECK ( Unique1ID ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short refNum ;
2002-03-22 10:16:39 -04:00
# ifndef UpdateResFile
PyMac_PRECHECK ( UpdateResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Boolean install ;
2002-03-22 10:16:39 -04:00
# ifndef SetResPurge
PyMac_PRECHECK ( SetResPurge ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
short refNum ;
2002-03-22 10:16:39 -04:00
# ifndef GetResFileAttrs
PyMac_PRECHECK ( GetResFileAttrs ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short refNum ;
short attrs ;
2002-03-22 10:16:39 -04:00
# ifndef SetResFileAttrs
PyMac_PRECHECK ( SetResFileAttrs ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
Str255 fileName ;
short vRefNum ;
SignedByte permission ;
2002-03-22 10:16:39 -04:00
# ifndef OpenRFPerm
PyMac_PRECHECK ( OpenRFPerm ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ;
}
static PyObject * Res_HOpenResFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
short vRefNum ;
long dirID ;
Str255 fileName ;
SignedByte permission ;
2002-03-22 10:16:39 -04:00
# ifndef HOpenResFile
PyMac_PRECHECK ( HOpenResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short vRefNum ;
long dirID ;
Str255 fileName ;
2002-03-22 10:16:39 -04:00
# ifndef HCreateResFile
PyMac_PRECHECK ( HCreateResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
FSSpec spec ;
SignedByte permission ;
2002-03-22 10:16:39 -04:00
# ifndef FSpOpenResFile
PyMac_PRECHECK ( FSpOpenResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
FSSpec spec ;
OSType creator ;
OSType fileType ;
ScriptCode scriptTag ;
2002-03-22 10:16:39 -04:00
# ifndef FSpCreateResFile
PyMac_PRECHECK ( FSpCreateResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ;
}
static PyObject * Res_InsertResourceFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2001-08-23 11:02:09 -03:00
SInt16 refNum ;
RsrcChainLocation where ;
2002-03-22 10:16:39 -04:00
# ifndef InsertResourceFile
PyMac_PRECHECK ( InsertResourceFile ) ;
# endif
2001-08-23 11:02:09 -03:00
if ( ! PyArg_ParseTuple ( _args , " hh " ,
& refNum ,
& where ) )
return NULL ;
2002-03-18 11:31:08 -04:00
_err = InsertResourceFile ( refNum ,
where ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
Py_INCREF ( Py_None ) ;
_res = Py_None ;
2001-08-23 11:02:09 -03:00
return _res ;
}
static PyObject * Res_DetachResourceFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2001-08-23 11:02:09 -03:00
SInt16 refNum ;
2002-03-22 10:16:39 -04:00
# ifndef DetachResourceFile
PyMac_PRECHECK ( DetachResourceFile ) ;
# endif
2001-08-23 11:02:09 -03:00
if ( ! PyArg_ParseTuple ( _args , " h " ,
& refNum ) )
return NULL ;
2002-03-18 11:31:08 -04:00
_err = DetachResourceFile ( refNum ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
Py_INCREF ( Py_None ) ;
_res = Py_None ;
2001-08-23 11:02:09 -03:00
return _res ;
}
static PyObject * Res_FSpResourceFileAlreadyOpen ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Boolean _rv ;
FSSpec resourceFile ;
Boolean inChain ;
SInt16 refNum ;
2002-03-22 10:16:39 -04:00
# ifndef FSpResourceFileAlreadyOpen
PyMac_PRECHECK ( FSpResourceFileAlreadyOpen ) ;
# endif
2001-08-23 11:02:09 -03:00
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 ;
}
static PyObject * Res_FSpOpenOrphanResFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2001-08-23 11:02:09 -03:00
FSSpec spec ;
SignedByte permission ;
SInt16 refNum ;
2002-03-22 10:16:39 -04:00
# ifndef FSpOpenOrphanResFile
PyMac_PRECHECK ( FSpOpenOrphanResFile ) ;
# endif
2001-08-23 11:02:09 -03:00
if ( ! PyArg_ParseTuple ( _args , " O&b " ,
PyMac_GetFSSpec , & spec ,
& permission ) )
return NULL ;
2002-03-18 11:31:08 -04:00
_err = FSpOpenOrphanResFile ( & spec ,
permission ,
& refNum ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
_res = Py_BuildValue ( " h " ,
2001-08-23 11:02:09 -03:00
refNum ) ;
return _res ;
}
static PyObject * Res_GetTopResourceFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2001-08-23 11:02:09 -03:00
SInt16 refNum ;
2002-03-22 10:16:39 -04:00
# ifndef GetTopResourceFile
PyMac_PRECHECK ( GetTopResourceFile ) ;
# endif
2001-08-23 11:02:09 -03:00
if ( ! PyArg_ParseTuple ( _args , " " ) )
return NULL ;
2002-03-18 11:31:08 -04:00
_err = GetTopResourceFile ( & refNum ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
_res = Py_BuildValue ( " h " ,
2001-08-23 11:02:09 -03:00
refNum ) ;
return _res ;
}
static PyObject * Res_GetNextResourceFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2001-08-23 11:02:09 -03:00
SInt16 curRefNum ;
SInt16 nextRefNum ;
2002-03-22 10:16:39 -04:00
# ifndef GetNextResourceFile
PyMac_PRECHECK ( GetNextResourceFile ) ;
# endif
2001-08-23 11:02:09 -03:00
if ( ! PyArg_ParseTuple ( _args , " h " ,
& curRefNum ) )
return NULL ;
2002-03-18 11:31:08 -04:00
_err = GetNextResourceFile ( curRefNum ,
& nextRefNum ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
_res = Py_BuildValue ( " h " ,
2001-08-23 11:02:09 -03:00
nextRefNum ) ;
return _res ;
}
2001-12-18 11:39:38 -04:00
static PyObject * Res_FSOpenResFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
short _rv ;
FSRef ref ;
SignedByte permission ;
2002-03-22 10:16:39 -04:00
# ifndef FSOpenResFile
PyMac_PRECHECK ( FSOpenResFile ) ;
# endif
2001-12-18 11:39:38 -04:00
if ( ! PyArg_ParseTuple ( _args , " O&b " ,
PyMac_GetFSRef , & ref ,
& permission ) )
return NULL ;
_rv = FSOpenResFile ( & ref ,
permission ) ;
{
OSErr _err = ResError ( ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
}
_res = Py_BuildValue ( " h " ,
_rv ) ;
return _res ;
}
2002-01-01 18:43:13 -04:00
static PyObject * Res_FSCreateResFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
FSRef parentRef ;
UniChar * nameLength__in__ ;
UniCharCount nameLength__len__ ;
int nameLength__in_len__ ;
FSRef newRef ;
FSSpec newSpec ;
2002-03-22 10:16:39 -04:00
# ifndef FSCreateResFile
PyMac_PRECHECK ( FSCreateResFile ) ;
# endif
2002-01-01 18:43:13 -04:00
if ( ! PyArg_ParseTuple ( _args , " O&u# " ,
PyMac_GetFSRef , & parentRef ,
& nameLength__in__ , & nameLength__in_len__ ) )
return NULL ;
nameLength__len__ = nameLength__in_len__ ;
FSCreateResFile ( & parentRef ,
nameLength__len__ , nameLength__in__ ,
0 ,
( FSCatalogInfo * ) 0 ,
& newRef ,
& newSpec ) ;
{
OSErr _err = ResError ( ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
}
_res = Py_BuildValue ( " O&O& " ,
2002-03-18 11:31:08 -04:00
PyMac_BuildFSRef , & newRef ,
PyMac_BuildFSSpec , & newSpec ) ;
2002-01-01 18:43:13 -04:00
return _res ;
}
2001-12-18 11:39:38 -04:00
static PyObject * Res_FSResourceFileAlreadyOpen ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
Boolean _rv ;
FSRef resourceFileRef ;
Boolean inChain ;
SInt16 refNum ;
2002-03-22 10:16:39 -04:00
# ifndef FSResourceFileAlreadyOpen
PyMac_PRECHECK ( FSResourceFileAlreadyOpen ) ;
# endif
2001-12-18 11:39:38 -04:00
if ( ! PyArg_ParseTuple ( _args , " O& " ,
PyMac_GetFSRef , & resourceFileRef ) )
return NULL ;
_rv = FSResourceFileAlreadyOpen ( & resourceFileRef ,
& inChain ,
& refNum ) ;
{
OSErr _err = ResError ( ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
}
_res = Py_BuildValue ( " bbh " ,
_rv ,
inChain ,
refNum ) ;
return _res ;
}
2002-01-01 18:43:13 -04:00
static PyObject * Res_FSCreateResourceFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2002-01-01 18:43:13 -04:00
FSRef parentRef ;
UniChar * nameLength__in__ ;
UniCharCount nameLength__len__ ;
int nameLength__in_len__ ;
UniChar * forkNameLength__in__ ;
UniCharCount forkNameLength__len__ ;
int forkNameLength__in_len__ ;
FSRef newRef ;
FSSpec newSpec ;
2002-03-22 10:16:39 -04:00
# ifndef FSCreateResourceFile
PyMac_PRECHECK ( FSCreateResourceFile ) ;
# endif
2002-01-01 18:43:13 -04:00
if ( ! PyArg_ParseTuple ( _args , " O&u#u# " ,
PyMac_GetFSRef , & parentRef ,
& nameLength__in__ , & nameLength__in_len__ ,
& forkNameLength__in__ , & forkNameLength__in_len__ ) )
return NULL ;
nameLength__len__ = nameLength__in_len__ ;
forkNameLength__len__ = forkNameLength__in_len__ ;
2002-03-18 11:31:08 -04:00
_err = FSCreateResourceFile ( & parentRef ,
nameLength__len__ , nameLength__in__ ,
0 ,
( FSCatalogInfo * ) 0 ,
forkNameLength__len__ , forkNameLength__in__ ,
& newRef ,
& newSpec ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
_res = Py_BuildValue ( " O&O& " ,
PyMac_BuildFSRef , & newRef ,
PyMac_BuildFSSpec , & newSpec ) ;
2002-01-01 18:43:13 -04:00
return _res ;
}
static PyObject * Res_FSOpenResourceFile ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
2002-03-18 11:31:08 -04:00
OSErr _err ;
2002-01-01 18:43:13 -04:00
FSRef ref ;
UniChar * forkNameLength__in__ ;
UniCharCount forkNameLength__len__ ;
int forkNameLength__in_len__ ;
SignedByte permissions ;
SInt16 refNum ;
2002-03-22 10:16:39 -04:00
# ifndef FSOpenResourceFile
PyMac_PRECHECK ( FSOpenResourceFile ) ;
# endif
2002-01-01 18:43:13 -04:00
if ( ! PyArg_ParseTuple ( _args , " O&u#b " ,
PyMac_GetFSRef , & ref ,
& forkNameLength__in__ , & forkNameLength__in_len__ ,
& permissions ) )
return NULL ;
forkNameLength__len__ = forkNameLength__in_len__ ;
2002-03-18 11:31:08 -04:00
_err = FSOpenResourceFile ( & ref ,
forkNameLength__len__ , forkNameLength__in__ ,
permissions ,
& refNum ) ;
if ( _err ! = noErr ) return PyMac_Error ( _err ) ;
_res = Py_BuildValue ( " h " ,
2002-01-01 18:43:13 -04:00
refNum ) ;
return _res ;
}
2001-08-23 11:02:09 -03:00
static PyObject * Res_Handle ( PyObject * _self , PyObject * _args )
{
PyObject * _res = NULL ;
char * buf ;
int len ;
Handle h ;
ResourceObject * rv ;
if ( ! PyArg_ParseTuple ( _args , " s# " , & buf , & len ) )
2005-07-03 17:59:44 -03:00
return NULL ;
2001-08-23 11:02:09 -03:00
h = NewHandle ( len ) ;
if ( h = = NULL ) {
2005-07-03 17:59:44 -03:00
PyErr_NoMemory ( ) ;
return NULL ;
2001-08-23 11:02:09 -03:00
}
HLock ( h ) ;
memcpy ( * h , buf , len ) ;
HUnlock ( h ) ;
rv = ( ResourceObject * ) ResObj_New ( h ) ;
rv - > ob_freeit = PyMac_AutoDisposeHandle ;
2001-09-05 12:44:37 -03:00
_res = ( PyObject * ) rv ;
return _res ;
2001-08-23 11:02:09 -03:00
}
static PyMethodDef Res_methods [ ] = {
{ " CloseResFile " , ( PyCFunction ) Res_CloseResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short refNum) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " ResError " , ( PyCFunction ) Res_ResError , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " CurResFile " , ( PyCFunction ) Res_CurResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " UseResFile " , ( PyCFunction ) Res_UseResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short refNum) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " CountTypes " , ( PyCFunction ) Res_CountTypes , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Count1Types " , ( PyCFunction ) Res_Count1Types , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetIndType " , ( PyCFunction ) Res_GetIndType , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short index) -> (ResType theType) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Get1IndType " , ( PyCFunction ) Res_Get1IndType , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short index) -> (ResType theType) " ) } ,
2001-08-23 11:02:09 -03:00
{ " SetResLoad " , ( PyCFunction ) Res_SetResLoad , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (Boolean load) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " CountResources " , ( PyCFunction ) Res_CountResources , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Count1Resources " , ( PyCFunction ) Res_Count1Resources , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetIndResource " , ( PyCFunction ) Res_GetIndResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType, short index) -> (Handle _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Get1IndResource " , ( PyCFunction ) Res_Get1IndResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType, short index) -> (Handle _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetResource " , ( PyCFunction ) Res_GetResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType, short theID) -> (Handle _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Get1Resource " , ( PyCFunction ) Res_Get1Resource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType, short theID) -> (Handle _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetNamedResource " , ( PyCFunction ) Res_GetNamedResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType, Str255 name) -> (Handle _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Get1NamedResource " , ( PyCFunction ) Res_Get1NamedResource , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType, Str255 name) -> (Handle _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " UniqueID " , ( PyCFunction ) Res_UniqueID , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Unique1ID " , ( PyCFunction ) Res_Unique1ID , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (ResType theType) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " UpdateResFile " , ( PyCFunction ) Res_UpdateResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short refNum) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " SetResPurge " , ( PyCFunction ) Res_SetResPurge , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (Boolean install) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetResFileAttrs " , ( PyCFunction ) Res_GetResFileAttrs , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short refNum) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " SetResFileAttrs " , ( PyCFunction ) Res_SetResFileAttrs , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short refNum, short attrs) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " OpenRFPerm " , ( PyCFunction ) Res_OpenRFPerm , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " HOpenResFile " , ( PyCFunction ) Res_HOpenResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " HCreateResFile " , ( PyCFunction ) Res_HCreateResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (short vRefNum, long dirID, Str255 fileName) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " FSpOpenResFile " , ( PyCFunction ) Res_FSpOpenResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSSpec spec, SignedByte permission) -> (short _rv) " ) } ,
2001-08-23 11:02:09 -03:00
{ " FSpCreateResFile " , ( PyCFunction ) Res_FSpCreateResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " InsertResourceFile " , ( PyCFunction ) Res_InsertResourceFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (SInt16 refNum, RsrcChainLocation where) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " DetachResourceFile " , ( PyCFunction ) Res_DetachResourceFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (SInt16 refNum) -> None " ) } ,
2001-08-23 11:02:09 -03:00
{ " FSpResourceFileAlreadyOpen " , ( PyCFunction ) Res_FSpResourceFileAlreadyOpen , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum) " ) } ,
2001-08-23 11:02:09 -03:00
{ " FSpOpenOrphanResFile " , ( PyCFunction ) Res_FSpOpenOrphanResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSSpec spec, SignedByte permission) -> (SInt16 refNum) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetTopResourceFile " , ( PyCFunction ) Res_GetTopResourceFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " () -> (SInt16 refNum) " ) } ,
2001-08-23 11:02:09 -03:00
{ " GetNextResourceFile " , ( PyCFunction ) Res_GetNextResourceFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (SInt16 curRefNum) -> (SInt16 nextRefNum) " ) } ,
2001-12-18 11:39:38 -04:00
{ " FSOpenResFile " , ( PyCFunction ) Res_FSOpenResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSRef ref, SignedByte permission) -> (short _rv) " ) } ,
2002-01-01 18:43:13 -04:00
{ " FSCreateResFile " , ( PyCFunction ) Res_FSCreateResFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec) " ) } ,
2001-12-18 11:39:38 -04:00
{ " FSResourceFileAlreadyOpen " , ( PyCFunction ) Res_FSResourceFileAlreadyOpen , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum) " ) } ,
2002-01-01 18:43:13 -04:00
{ " FSCreateResourceFile " , ( PyCFunction ) Res_FSCreateResourceFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec) " ) } ,
2002-01-01 18:43:13 -04:00
{ " FSOpenResourceFile " , ( PyCFunction ) Res_FSOpenResourceFile , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " (FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum) " ) } ,
2001-08-23 11:02:09 -03:00
{ " Handle " , ( PyCFunction ) Res_Handle , 1 ,
2002-08-16 06:09:31 -03:00
PyDoc_STR ( " Convert a string to a Handle object. \n \n Resource() and Handle() are very similar, but objects created with Handle() are \n by default automatically DisposeHandle()d upon object cleanup. Use AutoDispose() \n to change this. \n " ) } ,
2001-08-23 11:02:09 -03:00
{ NULL , NULL , 0 }
} ;
/* Alternative version of ResObj_New, which returns None for null argument */
PyObject * OptResObj_New ( Handle itself )
{
2005-07-03 17:59:44 -03:00
if ( itself = = NULL ) {
Py_INCREF ( Py_None ) ;
return Py_None ;
}
return ResObj_New ( itself ) ;
2001-08-23 11:02:09 -03:00
}
2001-09-05 07:31:52 -03:00
int OptResObj_Convert ( PyObject * v , Handle * p_itself )
2001-08-23 11:02:09 -03:00
{
2005-07-03 17:59:44 -03:00
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 ;
2001-08-23 11:02:09 -03:00
}
void init_Res ( void )
{
PyObject * m ;
PyObject * d ;
2005-07-03 17:59:44 -03:00
PyMac_INIT_TOOLBOX_OBJECT_NEW ( Handle , ResObj_New ) ;
PyMac_INIT_TOOLBOX_OBJECT_CONVERT ( Handle , ResObj_Convert ) ;
PyMac_INIT_TOOLBOX_OBJECT_NEW ( Handle , OptResObj_New ) ;
PyMac_INIT_TOOLBOX_OBJECT_CONVERT ( Handle , OptResObj_Convert ) ;
2001-08-23 11:02:09 -03:00
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 ;
2007-12-18 22:45:37 -04:00
Py_TYPE ( & Resource_Type ) = & PyType_Type ;
2002-12-23 19:16:25 -04:00
if ( PyType_Ready ( & Resource_Type ) < 0 ) return ;
2001-08-23 11:02:09 -03:00
Py_INCREF ( & Resource_Type ) ;
2002-12-05 19:26:38 -04:00
PyModule_AddObject ( m , " Resource " , ( PyObject * ) & Resource_Type ) ;
/* Backward-compatible name */
Py_INCREF ( & Resource_Type ) ;
PyModule_AddObject ( m , " ResourceType " , ( PyObject * ) & Resource_Type ) ;
2001-08-23 11:02:09 -03:00
}
/* ======================== End module _Res ========================= */