2 /* ========================== Module _Res =========================== */
9 #include "pywintoolbox.h"
12 #include "pymactoolbox.h"
15 /* Macro to test whether a weak-loaded CFM function exists */
16 #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
17 PyErr_SetString(PyExc_NotImplementedError, \
18 "Not available in this shared library/OS version"); \
23 #ifdef WITHOUT_FRAMEWORKS
24 #include <Resources.h>
27 #include <Carbon/Carbon.h>
30 #ifdef USE_TOOLBOX_OBJECT_GLUE
31 extern PyObject
*_ResObj_New(Handle
);
32 extern int _ResObj_Convert(PyObject
*, Handle
*);
33 extern PyObject
*_OptResObj_New(Handle
);
34 extern int _OptResObj_Convert(PyObject
*, Handle
*);
35 #define ResObj_New _ResObj_New
36 #define ResObj_Convert _ResObj_Convert
37 #define OptResObj_New _OptResObj_New
38 #define OptResObj_Convert _OptResObj_Convert
41 /* Function to dispose a resource, with a "normal" calling sequence */
43 PyMac_AutoDisposeHandle(Handle h
)
48 static PyObject
*Res_Error
;
50 /* ---------------------- Object type Resource ---------------------- */
52 PyTypeObject Resource_Type
;
54 #define ResObj_Check(x) ((x)->ob_type == &Resource_Type)
56 typedef struct ResourceObject
{
59 void (*ob_freeit
)(Handle ptr
);
62 PyObject
*ResObj_New(Handle itself
)
65 if (itself
== NULL
) return PyMac_Error(resNotFound
);
66 it
= PyObject_NEW(ResourceObject
, &Resource_Type
);
67 if (it
== NULL
) return NULL
;
68 it
->ob_itself
= itself
;
70 return (PyObject
*)it
;
72 int ResObj_Convert(PyObject
*v
, Handle
*p_itself
)
77 if ( (tmp
=PyObject_CallMethod(v
, "as_Resource", "")) )
79 *p_itself
= ((ResourceObject
*)tmp
)->ob_itself
;
87 PyErr_SetString(PyExc_TypeError
, "Resource required");
90 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
94 static void ResObj_dealloc(ResourceObject
*self
)
96 if (self
->ob_freeit
&& self
->ob_itself
)
98 self
->ob_freeit(self
->ob_itself
);
100 self
->ob_itself
= NULL
;
104 static PyObject
*ResObj_HomeResFile(ResourceObject
*_self
, PyObject
*_args
)
106 PyObject
*_res
= NULL
;
109 PyMac_PRECHECK(HomeResFile
);
111 if (!PyArg_ParseTuple(_args
, ""))
113 _rv
= HomeResFile(_self
->ob_itself
);
115 OSErr _err
= ResError();
116 if (_err
!= noErr
) return PyMac_Error(_err
);
118 _res
= Py_BuildValue("h",
123 static PyObject
*ResObj_MacLoadResource(ResourceObject
*_self
, PyObject
*_args
)
125 PyObject
*_res
= NULL
;
126 #ifndef MacLoadResource
127 PyMac_PRECHECK(MacLoadResource
);
129 if (!PyArg_ParseTuple(_args
, ""))
131 MacLoadResource(_self
->ob_itself
);
133 OSErr _err
= ResError();
134 if (_err
!= noErr
) return PyMac_Error(_err
);
141 static PyObject
*ResObj_ReleaseResource(ResourceObject
*_self
, PyObject
*_args
)
143 PyObject
*_res
= NULL
;
144 #ifndef ReleaseResource
145 PyMac_PRECHECK(ReleaseResource
);
147 if (!PyArg_ParseTuple(_args
, ""))
149 ReleaseResource(_self
->ob_itself
);
151 OSErr _err
= ResError();
152 if (_err
!= noErr
) return PyMac_Error(_err
);
159 static PyObject
*ResObj_DetachResource(ResourceObject
*_self
, PyObject
*_args
)
161 PyObject
*_res
= NULL
;
162 #ifndef DetachResource
163 PyMac_PRECHECK(DetachResource
);
165 if (!PyArg_ParseTuple(_args
, ""))
167 DetachResource(_self
->ob_itself
);
169 OSErr _err
= ResError();
170 if (_err
!= noErr
) return PyMac_Error(_err
);
177 static PyObject
*ResObj_GetResAttrs(ResourceObject
*_self
, PyObject
*_args
)
179 PyObject
*_res
= NULL
;
182 PyMac_PRECHECK(GetResAttrs
);
184 if (!PyArg_ParseTuple(_args
, ""))
186 _rv
= GetResAttrs(_self
->ob_itself
);
188 OSErr _err
= ResError();
189 if (_err
!= noErr
) return PyMac_Error(_err
);
191 _res
= Py_BuildValue("h",
196 static PyObject
*ResObj_GetResInfo(ResourceObject
*_self
, PyObject
*_args
)
198 PyObject
*_res
= NULL
;
203 PyMac_PRECHECK(GetResInfo
);
205 if (!PyArg_ParseTuple(_args
, ""))
207 GetResInfo(_self
->ob_itself
,
212 OSErr _err
= ResError();
213 if (_err
!= noErr
) return PyMac_Error(_err
);
215 _res
= Py_BuildValue("hO&O&",
217 PyMac_BuildOSType
, theType
,
218 PyMac_BuildStr255
, name
);
222 static PyObject
*ResObj_SetResInfo(ResourceObject
*_self
, PyObject
*_args
)
224 PyObject
*_res
= NULL
;
228 PyMac_PRECHECK(SetResInfo
);
230 if (!PyArg_ParseTuple(_args
, "hO&",
232 PyMac_GetStr255
, name
))
234 SetResInfo(_self
->ob_itself
,
238 OSErr _err
= ResError();
239 if (_err
!= noErr
) return PyMac_Error(_err
);
246 static PyObject
*ResObj_AddResource(ResourceObject
*_self
, PyObject
*_args
)
248 PyObject
*_res
= NULL
;
253 PyMac_PRECHECK(AddResource
);
255 if (!PyArg_ParseTuple(_args
, "O&hO&",
256 PyMac_GetOSType
, &theType
,
258 PyMac_GetStr255
, name
))
260 AddResource(_self
->ob_itself
,
265 OSErr _err
= ResError();
266 if (_err
!= noErr
) return PyMac_Error(_err
);
273 static PyObject
*ResObj_GetResourceSizeOnDisk(ResourceObject
*_self
, PyObject
*_args
)
275 PyObject
*_res
= NULL
;
277 #ifndef GetResourceSizeOnDisk
278 PyMac_PRECHECK(GetResourceSizeOnDisk
);
280 if (!PyArg_ParseTuple(_args
, ""))
282 _rv
= GetResourceSizeOnDisk(_self
->ob_itself
);
284 OSErr _err
= ResError();
285 if (_err
!= noErr
) return PyMac_Error(_err
);
287 _res
= Py_BuildValue("l",
292 static PyObject
*ResObj_GetMaxResourceSize(ResourceObject
*_self
, PyObject
*_args
)
294 PyObject
*_res
= NULL
;
296 #ifndef GetMaxResourceSize
297 PyMac_PRECHECK(GetMaxResourceSize
);
299 if (!PyArg_ParseTuple(_args
, ""))
301 _rv
= GetMaxResourceSize(_self
->ob_itself
);
303 OSErr _err
= ResError();
304 if (_err
!= noErr
) return PyMac_Error(_err
);
306 _res
= Py_BuildValue("l",
311 #if TARGET_API_MAC_OS8
313 static PyObject
*ResObj_RsrcMapEntry(ResourceObject
*_self
, PyObject
*_args
)
315 PyObject
*_res
= NULL
;
318 PyMac_PRECHECK(RsrcMapEntry
);
320 if (!PyArg_ParseTuple(_args
, ""))
322 _rv
= RsrcMapEntry(_self
->ob_itself
);
324 OSErr _err
= ResError();
325 if (_err
!= noErr
) return PyMac_Error(_err
);
327 _res
= Py_BuildValue("l",
333 static PyObject
*ResObj_SetResAttrs(ResourceObject
*_self
, PyObject
*_args
)
335 PyObject
*_res
= NULL
;
338 PyMac_PRECHECK(SetResAttrs
);
340 if (!PyArg_ParseTuple(_args
, "h",
343 SetResAttrs(_self
->ob_itself
,
346 OSErr _err
= ResError();
347 if (_err
!= noErr
) return PyMac_Error(_err
);
354 static PyObject
*ResObj_ChangedResource(ResourceObject
*_self
, PyObject
*_args
)
356 PyObject
*_res
= NULL
;
357 #ifndef ChangedResource
358 PyMac_PRECHECK(ChangedResource
);
360 if (!PyArg_ParseTuple(_args
, ""))
362 ChangedResource(_self
->ob_itself
);
364 OSErr _err
= ResError();
365 if (_err
!= noErr
) return PyMac_Error(_err
);
372 static PyObject
*ResObj_RemoveResource(ResourceObject
*_self
, PyObject
*_args
)
374 PyObject
*_res
= NULL
;
375 #ifndef RemoveResource
376 PyMac_PRECHECK(RemoveResource
);
378 if (!PyArg_ParseTuple(_args
, ""))
380 RemoveResource(_self
->ob_itself
);
382 OSErr _err
= ResError();
383 if (_err
!= noErr
) return PyMac_Error(_err
);
390 static PyObject
*ResObj_WriteResource(ResourceObject
*_self
, PyObject
*_args
)
392 PyObject
*_res
= NULL
;
393 #ifndef WriteResource
394 PyMac_PRECHECK(WriteResource
);
396 if (!PyArg_ParseTuple(_args
, ""))
398 WriteResource(_self
->ob_itself
);
400 OSErr _err
= ResError();
401 if (_err
!= noErr
) return PyMac_Error(_err
);
408 static PyObject
*ResObj_SetResourceSize(ResourceObject
*_self
, PyObject
*_args
)
410 PyObject
*_res
= NULL
;
412 #ifndef SetResourceSize
413 PyMac_PRECHECK(SetResourceSize
);
415 if (!PyArg_ParseTuple(_args
, "l",
418 SetResourceSize(_self
->ob_itself
,
421 OSErr _err
= ResError();
422 if (_err
!= noErr
) return PyMac_Error(_err
);
429 static PyObject
*ResObj_GetNextFOND(ResourceObject
*_self
, PyObject
*_args
)
431 PyObject
*_res
= NULL
;
434 PyMac_PRECHECK(GetNextFOND
);
436 if (!PyArg_ParseTuple(_args
, ""))
438 _rv
= GetNextFOND(_self
->ob_itself
);
440 OSErr _err
= ResError();
441 if (_err
!= noErr
) return PyMac_Error(_err
);
443 _res
= Py_BuildValue("O&",
448 static PyObject
*ResObj_as_Control(ResourceObject
*_self
, PyObject
*_args
)
450 PyObject
*_res
= NULL
;
452 _res
= CtlObj_New((ControlHandle
)_self
->ob_itself
);
457 static PyObject
*ResObj_as_Menu(ResourceObject
*_self
, PyObject
*_args
)
459 PyObject
*_res
= NULL
;
461 _res
= MenuObj_New((MenuHandle
)_self
->ob_itself
);
466 static PyObject
*ResObj_LoadResource(ResourceObject
*_self
, PyObject
*_args
)
468 PyObject
*_res
= NULL
;
470 PyMac_PRECHECK(LoadResource
);
472 if (!PyArg_ParseTuple(_args
, ""))
474 LoadResource(_self
->ob_itself
);
476 OSErr _err
= ResError();
477 if (_err
!= noErr
) return PyMac_Error(_err
);
484 static PyObject
*ResObj_AutoDispose(ResourceObject
*_self
, PyObject
*_args
)
486 PyObject
*_res
= NULL
;
489 if (!PyArg_ParseTuple(_args
, "i", &onoff
))
491 if ( _self
->ob_freeit
)
494 _self
->ob_freeit
= PyMac_AutoDisposeHandle
;
496 _self
->ob_freeit
= NULL
;
497 _res
= Py_BuildValue("i", old
);
502 static PyMethodDef ResObj_methods
[] = {
503 {"HomeResFile", (PyCFunction
)ResObj_HomeResFile
, 1,
504 "() -> (short _rv)"},
505 {"MacLoadResource", (PyCFunction
)ResObj_MacLoadResource
, 1,
507 {"ReleaseResource", (PyCFunction
)ResObj_ReleaseResource
, 1,
509 {"DetachResource", (PyCFunction
)ResObj_DetachResource
, 1,
511 {"GetResAttrs", (PyCFunction
)ResObj_GetResAttrs
, 1,
512 "() -> (short _rv)"},
513 {"GetResInfo", (PyCFunction
)ResObj_GetResInfo
, 1,
514 "() -> (short theID, ResType theType, Str255 name)"},
515 {"SetResInfo", (PyCFunction
)ResObj_SetResInfo
, 1,
516 "(short theID, Str255 name) -> None"},
517 {"AddResource", (PyCFunction
)ResObj_AddResource
, 1,
518 "(ResType theType, short theID, Str255 name) -> None"},
519 {"GetResourceSizeOnDisk", (PyCFunction
)ResObj_GetResourceSizeOnDisk
, 1,
521 {"GetMaxResourceSize", (PyCFunction
)ResObj_GetMaxResourceSize
, 1,
524 #if TARGET_API_MAC_OS8
525 {"RsrcMapEntry", (PyCFunction
)ResObj_RsrcMapEntry
, 1,
528 {"SetResAttrs", (PyCFunction
)ResObj_SetResAttrs
, 1,
529 "(short attrs) -> None"},
530 {"ChangedResource", (PyCFunction
)ResObj_ChangedResource
, 1,
532 {"RemoveResource", (PyCFunction
)ResObj_RemoveResource
, 1,
534 {"WriteResource", (PyCFunction
)ResObj_WriteResource
, 1,
536 {"SetResourceSize", (PyCFunction
)ResObj_SetResourceSize
, 1,
537 "(long newSize) -> None"},
538 {"GetNextFOND", (PyCFunction
)ResObj_GetNextFOND
, 1,
539 "() -> (Handle _rv)"},
540 {"as_Control", (PyCFunction
)ResObj_as_Control
, 1,
541 "Return this resource/handle as a Control"},
542 {"as_Menu", (PyCFunction
)ResObj_as_Menu
, 1,
543 "Return this resource/handle as a Menu"},
544 {"LoadResource", (PyCFunction
)ResObj_LoadResource
, 1,
546 {"AutoDispose", (PyCFunction
)ResObj_AutoDispose
, 1,
547 "(int)->int. Automatically DisposeHandle the object on Python object cleanup"},
551 PyMethodChain ResObj_chain
= { ResObj_methods
, NULL
};
553 static PyObject
*ResObj_getattr(ResourceObject
*self
, char *name
)
556 if (strcmp(name
, "size") == 0)
557 return PyInt_FromLong(GetHandleSize(self
->ob_itself
));
558 if (strcmp(name
, "data") == 0) {
561 state
= HGetState(self
->ob_itself
);
562 HLock(self
->ob_itself
);
563 res
= PyString_FromStringAndSize(
565 GetHandleSize(self
->ob_itself
));
566 HUnlock(self
->ob_itself
);
567 HSetState(self
->ob_itself
, state
);
570 if (strcmp(name
, "__members__") == 0)
571 return Py_BuildValue("[ss]", "data", "size");
573 return Py_FindMethodInChain(&ResObj_chain
, (PyObject
*)self
, name
);
577 ResObj_setattr(ResourceObject
*self
, char *name
, PyObject
*value
)
582 if (strcmp(name
, "data") != 0 || value
== NULL
)
584 if ( !PyString_Check(value
) )
586 size
= PyString_Size(value
);
587 data
= PyString_AsString(value
);
588 /* XXXX Do I need the GetState/SetState calls? */
589 SetHandleSize(self
->ob_itself
, size
);
592 HLock(self
->ob_itself
);
593 memcpy((char *)*self
->ob_itself
, data
, size
);
594 HUnlock(self
->ob_itself
);
595 /* XXXX Should I do the Changed call immedeately? */
600 #define ResObj_compare NULL
602 #define ResObj_repr NULL
604 #define ResObj_hash NULL
606 PyTypeObject Resource_Type
= {
607 PyObject_HEAD_INIT(NULL
)
609 "_Res.Resource", /*tp_name*/
610 sizeof(ResourceObject
), /*tp_basicsize*/
613 (destructor
) ResObj_dealloc
, /*tp_dealloc*/
615 (getattrfunc
) ResObj_getattr
, /*tp_getattr*/
616 (setattrfunc
) ResObj_setattr
, /*tp_setattr*/
617 (cmpfunc
) ResObj_compare
, /*tp_compare*/
618 (reprfunc
) ResObj_repr
, /*tp_repr*/
619 (PyNumberMethods
*)0, /* tp_as_number */
620 (PySequenceMethods
*)0, /* tp_as_sequence */
621 (PyMappingMethods
*)0, /* tp_as_mapping */
622 (hashfunc
) ResObj_hash
, /*tp_hash*/
625 /* -------------------- End object type Resource -------------------- */
628 #if TARGET_API_MAC_OS8
630 static PyObject
*Res_InitResources(PyObject
*_self
, PyObject
*_args
)
632 PyObject
*_res
= NULL
;
634 #ifndef InitResources
635 PyMac_PRECHECK(InitResources
);
637 if (!PyArg_ParseTuple(_args
, ""))
639 _rv
= InitResources();
641 OSErr _err
= ResError();
642 if (_err
!= noErr
) return PyMac_Error(_err
);
644 _res
= Py_BuildValue("h",
650 #if TARGET_API_MAC_OS8
652 static PyObject
*Res_RsrcZoneInit(PyObject
*_self
, PyObject
*_args
)
654 PyObject
*_res
= NULL
;
656 PyMac_PRECHECK(RsrcZoneInit
);
658 if (!PyArg_ParseTuple(_args
, ""))
662 OSErr _err
= ResError();
663 if (_err
!= noErr
) return PyMac_Error(_err
);
671 static PyObject
*Res_CloseResFile(PyObject
*_self
, PyObject
*_args
)
673 PyObject
*_res
= NULL
;
676 PyMac_PRECHECK(CloseResFile
);
678 if (!PyArg_ParseTuple(_args
, "h",
681 CloseResFile(refNum
);
683 OSErr _err
= ResError();
684 if (_err
!= noErr
) return PyMac_Error(_err
);
691 static PyObject
*Res_ResError(PyObject
*_self
, PyObject
*_args
)
693 PyObject
*_res
= NULL
;
696 PyMac_PRECHECK(ResError
);
698 if (!PyArg_ParseTuple(_args
, ""))
701 if (_err
!= noErr
) return PyMac_Error(_err
);
707 static PyObject
*Res_CurResFile(PyObject
*_self
, PyObject
*_args
)
709 PyObject
*_res
= NULL
;
712 PyMac_PRECHECK(CurResFile
);
714 if (!PyArg_ParseTuple(_args
, ""))
718 OSErr _err
= ResError();
719 if (_err
!= noErr
) return PyMac_Error(_err
);
721 _res
= Py_BuildValue("h",
726 #if TARGET_API_MAC_OS8
728 static PyObject
*Res_CreateResFile(PyObject
*_self
, PyObject
*_args
)
730 PyObject
*_res
= NULL
;
732 #ifndef CreateResFile
733 PyMac_PRECHECK(CreateResFile
);
735 if (!PyArg_ParseTuple(_args
, "O&",
736 PyMac_GetStr255
, fileName
))
738 CreateResFile(fileName
);
740 OSErr _err
= ResError();
741 if (_err
!= noErr
) return PyMac_Error(_err
);
749 #if TARGET_API_MAC_OS8
751 static PyObject
*Res_OpenResFile(PyObject
*_self
, PyObject
*_args
)
753 PyObject
*_res
= NULL
;
757 PyMac_PRECHECK(OpenResFile
);
759 if (!PyArg_ParseTuple(_args
, "O&",
760 PyMac_GetStr255
, fileName
))
762 _rv
= OpenResFile(fileName
);
764 OSErr _err
= ResError();
765 if (_err
!= noErr
) return PyMac_Error(_err
);
767 _res
= Py_BuildValue("h",
773 static PyObject
*Res_UseResFile(PyObject
*_self
, PyObject
*_args
)
775 PyObject
*_res
= NULL
;
778 PyMac_PRECHECK(UseResFile
);
780 if (!PyArg_ParseTuple(_args
, "h",
785 OSErr _err
= ResError();
786 if (_err
!= noErr
) return PyMac_Error(_err
);
793 static PyObject
*Res_CountTypes(PyObject
*_self
, PyObject
*_args
)
795 PyObject
*_res
= NULL
;
798 PyMac_PRECHECK(CountTypes
);
800 if (!PyArg_ParseTuple(_args
, ""))
804 OSErr _err
= ResError();
805 if (_err
!= noErr
) return PyMac_Error(_err
);
807 _res
= Py_BuildValue("h",
812 static PyObject
*Res_Count1Types(PyObject
*_self
, PyObject
*_args
)
814 PyObject
*_res
= NULL
;
817 PyMac_PRECHECK(Count1Types
);
819 if (!PyArg_ParseTuple(_args
, ""))
823 OSErr _err
= ResError();
824 if (_err
!= noErr
) return PyMac_Error(_err
);
826 _res
= Py_BuildValue("h",
831 static PyObject
*Res_GetIndType(PyObject
*_self
, PyObject
*_args
)
833 PyObject
*_res
= NULL
;
837 PyMac_PRECHECK(GetIndType
);
839 if (!PyArg_ParseTuple(_args
, "h",
845 OSErr _err
= ResError();
846 if (_err
!= noErr
) return PyMac_Error(_err
);
848 _res
= Py_BuildValue("O&",
849 PyMac_BuildOSType
, theType
);
853 static PyObject
*Res_Get1IndType(PyObject
*_self
, PyObject
*_args
)
855 PyObject
*_res
= NULL
;
859 PyMac_PRECHECK(Get1IndType
);
861 if (!PyArg_ParseTuple(_args
, "h",
864 Get1IndType(&theType
,
867 OSErr _err
= ResError();
868 if (_err
!= noErr
) return PyMac_Error(_err
);
870 _res
= Py_BuildValue("O&",
871 PyMac_BuildOSType
, theType
);
875 static PyObject
*Res_SetResLoad(PyObject
*_self
, PyObject
*_args
)
877 PyObject
*_res
= NULL
;
880 PyMac_PRECHECK(SetResLoad
);
882 if (!PyArg_ParseTuple(_args
, "b",
887 OSErr _err
= ResError();
888 if (_err
!= noErr
) return PyMac_Error(_err
);
895 static PyObject
*Res_CountResources(PyObject
*_self
, PyObject
*_args
)
897 PyObject
*_res
= NULL
;
900 #ifndef CountResources
901 PyMac_PRECHECK(CountResources
);
903 if (!PyArg_ParseTuple(_args
, "O&",
904 PyMac_GetOSType
, &theType
))
906 _rv
= CountResources(theType
);
908 OSErr _err
= ResError();
909 if (_err
!= noErr
) return PyMac_Error(_err
);
911 _res
= Py_BuildValue("h",
916 static PyObject
*Res_Count1Resources(PyObject
*_self
, PyObject
*_args
)
918 PyObject
*_res
= NULL
;
921 #ifndef Count1Resources
922 PyMac_PRECHECK(Count1Resources
);
924 if (!PyArg_ParseTuple(_args
, "O&",
925 PyMac_GetOSType
, &theType
))
927 _rv
= Count1Resources(theType
);
929 OSErr _err
= ResError();
930 if (_err
!= noErr
) return PyMac_Error(_err
);
932 _res
= Py_BuildValue("h",
937 static PyObject
*Res_GetIndResource(PyObject
*_self
, PyObject
*_args
)
939 PyObject
*_res
= NULL
;
943 #ifndef GetIndResource
944 PyMac_PRECHECK(GetIndResource
);
946 if (!PyArg_ParseTuple(_args
, "O&h",
947 PyMac_GetOSType
, &theType
,
950 _rv
= GetIndResource(theType
,
953 OSErr _err
= ResError();
954 if (_err
!= noErr
) return PyMac_Error(_err
);
956 _res
= Py_BuildValue("O&",
961 static PyObject
*Res_Get1IndResource(PyObject
*_self
, PyObject
*_args
)
963 PyObject
*_res
= NULL
;
967 #ifndef Get1IndResource
968 PyMac_PRECHECK(Get1IndResource
);
970 if (!PyArg_ParseTuple(_args
, "O&h",
971 PyMac_GetOSType
, &theType
,
974 _rv
= Get1IndResource(theType
,
977 OSErr _err
= ResError();
978 if (_err
!= noErr
) return PyMac_Error(_err
);
980 _res
= Py_BuildValue("O&",
985 static PyObject
*Res_GetResource(PyObject
*_self
, PyObject
*_args
)
987 PyObject
*_res
= NULL
;
992 PyMac_PRECHECK(GetResource
);
994 if (!PyArg_ParseTuple(_args
, "O&h",
995 PyMac_GetOSType
, &theType
,
998 _rv
= GetResource(theType
,
1001 OSErr _err
= ResError();
1002 if (_err
!= noErr
) return PyMac_Error(_err
);
1004 _res
= Py_BuildValue("O&",
1009 static PyObject
*Res_Get1Resource(PyObject
*_self
, PyObject
*_args
)
1011 PyObject
*_res
= NULL
;
1015 #ifndef Get1Resource
1016 PyMac_PRECHECK(Get1Resource
);
1018 if (!PyArg_ParseTuple(_args
, "O&h",
1019 PyMac_GetOSType
, &theType
,
1022 _rv
= Get1Resource(theType
,
1025 OSErr _err
= ResError();
1026 if (_err
!= noErr
) return PyMac_Error(_err
);
1028 _res
= Py_BuildValue("O&",
1033 static PyObject
*Res_GetNamedResource(PyObject
*_self
, PyObject
*_args
)
1035 PyObject
*_res
= NULL
;
1039 #ifndef GetNamedResource
1040 PyMac_PRECHECK(GetNamedResource
);
1042 if (!PyArg_ParseTuple(_args
, "O&O&",
1043 PyMac_GetOSType
, &theType
,
1044 PyMac_GetStr255
, name
))
1046 _rv
= GetNamedResource(theType
,
1049 OSErr _err
= ResError();
1050 if (_err
!= noErr
) return PyMac_Error(_err
);
1052 _res
= Py_BuildValue("O&",
1057 static PyObject
*Res_Get1NamedResource(PyObject
*_self
, PyObject
*_args
)
1059 PyObject
*_res
= NULL
;
1063 #ifndef Get1NamedResource
1064 PyMac_PRECHECK(Get1NamedResource
);
1066 if (!PyArg_ParseTuple(_args
, "O&O&",
1067 PyMac_GetOSType
, &theType
,
1068 PyMac_GetStr255
, name
))
1070 _rv
= Get1NamedResource(theType
,
1073 OSErr _err
= ResError();
1074 if (_err
!= noErr
) return PyMac_Error(_err
);
1076 _res
= Py_BuildValue("O&",
1081 static PyObject
*Res_UniqueID(PyObject
*_self
, PyObject
*_args
)
1083 PyObject
*_res
= NULL
;
1087 PyMac_PRECHECK(UniqueID
);
1089 if (!PyArg_ParseTuple(_args
, "O&",
1090 PyMac_GetOSType
, &theType
))
1092 _rv
= UniqueID(theType
);
1094 OSErr _err
= ResError();
1095 if (_err
!= noErr
) return PyMac_Error(_err
);
1097 _res
= Py_BuildValue("h",
1102 static PyObject
*Res_Unique1ID(PyObject
*_self
, PyObject
*_args
)
1104 PyObject
*_res
= NULL
;
1108 PyMac_PRECHECK(Unique1ID
);
1110 if (!PyArg_ParseTuple(_args
, "O&",
1111 PyMac_GetOSType
, &theType
))
1113 _rv
= Unique1ID(theType
);
1115 OSErr _err
= ResError();
1116 if (_err
!= noErr
) return PyMac_Error(_err
);
1118 _res
= Py_BuildValue("h",
1123 static PyObject
*Res_UpdateResFile(PyObject
*_self
, PyObject
*_args
)
1125 PyObject
*_res
= NULL
;
1127 #ifndef UpdateResFile
1128 PyMac_PRECHECK(UpdateResFile
);
1130 if (!PyArg_ParseTuple(_args
, "h",
1133 UpdateResFile(refNum
);
1135 OSErr _err
= ResError();
1136 if (_err
!= noErr
) return PyMac_Error(_err
);
1143 static PyObject
*Res_SetResPurge(PyObject
*_self
, PyObject
*_args
)
1145 PyObject
*_res
= NULL
;
1148 PyMac_PRECHECK(SetResPurge
);
1150 if (!PyArg_ParseTuple(_args
, "b",
1153 SetResPurge(install
);
1155 OSErr _err
= ResError();
1156 if (_err
!= noErr
) return PyMac_Error(_err
);
1163 static PyObject
*Res_GetResFileAttrs(PyObject
*_self
, PyObject
*_args
)
1165 PyObject
*_res
= NULL
;
1168 #ifndef GetResFileAttrs
1169 PyMac_PRECHECK(GetResFileAttrs
);
1171 if (!PyArg_ParseTuple(_args
, "h",
1174 _rv
= GetResFileAttrs(refNum
);
1176 OSErr _err
= ResError();
1177 if (_err
!= noErr
) return PyMac_Error(_err
);
1179 _res
= Py_BuildValue("h",
1184 static PyObject
*Res_SetResFileAttrs(PyObject
*_self
, PyObject
*_args
)
1186 PyObject
*_res
= NULL
;
1189 #ifndef SetResFileAttrs
1190 PyMac_PRECHECK(SetResFileAttrs
);
1192 if (!PyArg_ParseTuple(_args
, "hh",
1196 SetResFileAttrs(refNum
,
1199 OSErr _err
= ResError();
1200 if (_err
!= noErr
) return PyMac_Error(_err
);
1207 static PyObject
*Res_OpenRFPerm(PyObject
*_self
, PyObject
*_args
)
1209 PyObject
*_res
= NULL
;
1213 SignedByte permission
;
1215 PyMac_PRECHECK(OpenRFPerm
);
1217 if (!PyArg_ParseTuple(_args
, "O&hb",
1218 PyMac_GetStr255
, fileName
,
1222 _rv
= OpenRFPerm(fileName
,
1226 OSErr _err
= ResError();
1227 if (_err
!= noErr
) return PyMac_Error(_err
);
1229 _res
= Py_BuildValue("h",
1234 #if TARGET_API_MAC_OS8
1236 static PyObject
*Res_RGetResource(PyObject
*_self
, PyObject
*_args
)
1238 PyObject
*_res
= NULL
;
1242 #ifndef RGetResource
1243 PyMac_PRECHECK(RGetResource
);
1245 if (!PyArg_ParseTuple(_args
, "O&h",
1246 PyMac_GetOSType
, &theType
,
1249 _rv
= RGetResource(theType
,
1252 OSErr _err
= ResError();
1253 if (_err
!= noErr
) return PyMac_Error(_err
);
1255 _res
= Py_BuildValue("O&",
1261 static PyObject
*Res_HOpenResFile(PyObject
*_self
, PyObject
*_args
)
1263 PyObject
*_res
= NULL
;
1268 SignedByte permission
;
1269 #ifndef HOpenResFile
1270 PyMac_PRECHECK(HOpenResFile
);
1272 if (!PyArg_ParseTuple(_args
, "hlO&b",
1275 PyMac_GetStr255
, fileName
,
1278 _rv
= HOpenResFile(vRefNum
,
1283 OSErr _err
= ResError();
1284 if (_err
!= noErr
) return PyMac_Error(_err
);
1286 _res
= Py_BuildValue("h",
1291 static PyObject
*Res_HCreateResFile(PyObject
*_self
, PyObject
*_args
)
1293 PyObject
*_res
= NULL
;
1297 #ifndef HCreateResFile
1298 PyMac_PRECHECK(HCreateResFile
);
1300 if (!PyArg_ParseTuple(_args
, "hlO&",
1303 PyMac_GetStr255
, fileName
))
1305 HCreateResFile(vRefNum
,
1309 OSErr _err
= ResError();
1310 if (_err
!= noErr
) return PyMac_Error(_err
);
1317 static PyObject
*Res_FSpOpenResFile(PyObject
*_self
, PyObject
*_args
)
1319 PyObject
*_res
= NULL
;
1322 SignedByte permission
;
1323 #ifndef FSpOpenResFile
1324 PyMac_PRECHECK(FSpOpenResFile
);
1326 if (!PyArg_ParseTuple(_args
, "O&b",
1327 PyMac_GetFSSpec
, &spec
,
1330 _rv
= FSpOpenResFile(&spec
,
1333 OSErr _err
= ResError();
1334 if (_err
!= noErr
) return PyMac_Error(_err
);
1336 _res
= Py_BuildValue("h",
1341 static PyObject
*Res_FSpCreateResFile(PyObject
*_self
, PyObject
*_args
)
1343 PyObject
*_res
= NULL
;
1347 ScriptCode scriptTag
;
1348 #ifndef FSpCreateResFile
1349 PyMac_PRECHECK(FSpCreateResFile
);
1351 if (!PyArg_ParseTuple(_args
, "O&O&O&h",
1352 PyMac_GetFSSpec
, &spec
,
1353 PyMac_GetOSType
, &creator
,
1354 PyMac_GetOSType
, &fileType
,
1357 FSpCreateResFile(&spec
,
1362 OSErr _err
= ResError();
1363 if (_err
!= noErr
) return PyMac_Error(_err
);
1370 #if TARGET_API_MAC_CARBON
1372 static PyObject
*Res_InsertResourceFile(PyObject
*_self
, PyObject
*_args
)
1374 PyObject
*_res
= NULL
;
1377 RsrcChainLocation where
;
1378 #ifndef InsertResourceFile
1379 PyMac_PRECHECK(InsertResourceFile
);
1381 if (!PyArg_ParseTuple(_args
, "hh",
1385 _err
= InsertResourceFile(refNum
,
1387 if (_err
!= noErr
) return PyMac_Error(_err
);
1394 #if TARGET_API_MAC_CARBON
1396 static PyObject
*Res_DetachResourceFile(PyObject
*_self
, PyObject
*_args
)
1398 PyObject
*_res
= NULL
;
1401 #ifndef DetachResourceFile
1402 PyMac_PRECHECK(DetachResourceFile
);
1404 if (!PyArg_ParseTuple(_args
, "h",
1407 _err
= DetachResourceFile(refNum
);
1408 if (_err
!= noErr
) return PyMac_Error(_err
);
1415 #if TARGET_API_MAC_CARBON
1417 static PyObject
*Res_FSpResourceFileAlreadyOpen(PyObject
*_self
, PyObject
*_args
)
1419 PyObject
*_res
= NULL
;
1421 FSSpec resourceFile
;
1424 #ifndef FSpResourceFileAlreadyOpen
1425 PyMac_PRECHECK(FSpResourceFileAlreadyOpen
);
1427 if (!PyArg_ParseTuple(_args
, "O&",
1428 PyMac_GetFSSpec
, &resourceFile
))
1430 _rv
= FSpResourceFileAlreadyOpen(&resourceFile
,
1434 OSErr _err
= ResError();
1435 if (_err
!= noErr
) return PyMac_Error(_err
);
1437 _res
= Py_BuildValue("bbh",
1445 #if TARGET_API_MAC_CARBON
1447 static PyObject
*Res_FSpOpenOrphanResFile(PyObject
*_self
, PyObject
*_args
)
1449 PyObject
*_res
= NULL
;
1452 SignedByte permission
;
1454 #ifndef FSpOpenOrphanResFile
1455 PyMac_PRECHECK(FSpOpenOrphanResFile
);
1457 if (!PyArg_ParseTuple(_args
, "O&b",
1458 PyMac_GetFSSpec
, &spec
,
1461 _err
= FSpOpenOrphanResFile(&spec
,
1464 if (_err
!= noErr
) return PyMac_Error(_err
);
1465 _res
= Py_BuildValue("h",
1471 #if TARGET_API_MAC_CARBON
1473 static PyObject
*Res_GetTopResourceFile(PyObject
*_self
, PyObject
*_args
)
1475 PyObject
*_res
= NULL
;
1478 #ifndef GetTopResourceFile
1479 PyMac_PRECHECK(GetTopResourceFile
);
1481 if (!PyArg_ParseTuple(_args
, ""))
1483 _err
= GetTopResourceFile(&refNum
);
1484 if (_err
!= noErr
) return PyMac_Error(_err
);
1485 _res
= Py_BuildValue("h",
1491 #if TARGET_API_MAC_CARBON
1493 static PyObject
*Res_GetNextResourceFile(PyObject
*_self
, PyObject
*_args
)
1495 PyObject
*_res
= NULL
;
1499 #ifndef GetNextResourceFile
1500 PyMac_PRECHECK(GetNextResourceFile
);
1502 if (!PyArg_ParseTuple(_args
, "h",
1505 _err
= GetNextResourceFile(curRefNum
,
1507 if (_err
!= noErr
) return PyMac_Error(_err
);
1508 _res
= Py_BuildValue("h",
1514 static PyObject
*Res_FSOpenResFile(PyObject
*_self
, PyObject
*_args
)
1516 PyObject
*_res
= NULL
;
1519 SignedByte permission
;
1520 #ifndef FSOpenResFile
1521 PyMac_PRECHECK(FSOpenResFile
);
1523 if (!PyArg_ParseTuple(_args
, "O&b",
1524 PyMac_GetFSRef
, &ref
,
1527 _rv
= FSOpenResFile(&ref
,
1530 OSErr _err
= ResError();
1531 if (_err
!= noErr
) return PyMac_Error(_err
);
1533 _res
= Py_BuildValue("h",
1538 static PyObject
*Res_FSCreateResFile(PyObject
*_self
, PyObject
*_args
)
1540 PyObject
*_res
= NULL
;
1542 UniChar
*nameLength__in__
;
1543 UniCharCount nameLength__len__
;
1544 int nameLength__in_len__
;
1547 #ifndef FSCreateResFile
1548 PyMac_PRECHECK(FSCreateResFile
);
1550 if (!PyArg_ParseTuple(_args
, "O&u#",
1551 PyMac_GetFSRef
, &parentRef
,
1552 &nameLength__in__
, &nameLength__in_len__
))
1554 nameLength__len__
= nameLength__in_len__
;
1555 FSCreateResFile(&parentRef
,
1556 nameLength__len__
, nameLength__in__
,
1562 OSErr _err
= ResError();
1563 if (_err
!= noErr
) return PyMac_Error(_err
);
1565 _res
= Py_BuildValue("O&O&",
1566 PyMac_BuildFSRef
, &newRef
,
1567 PyMac_BuildFSSpec
, &newSpec
);
1571 static PyObject
*Res_FSResourceFileAlreadyOpen(PyObject
*_self
, PyObject
*_args
)
1573 PyObject
*_res
= NULL
;
1575 FSRef resourceFileRef
;
1578 #ifndef FSResourceFileAlreadyOpen
1579 PyMac_PRECHECK(FSResourceFileAlreadyOpen
);
1581 if (!PyArg_ParseTuple(_args
, "O&",
1582 PyMac_GetFSRef
, &resourceFileRef
))
1584 _rv
= FSResourceFileAlreadyOpen(&resourceFileRef
,
1588 OSErr _err
= ResError();
1589 if (_err
!= noErr
) return PyMac_Error(_err
);
1591 _res
= Py_BuildValue("bbh",
1598 #if TARGET_API_MAC_CARBON
1600 static PyObject
*Res_FSCreateResourceFile(PyObject
*_self
, PyObject
*_args
)
1602 PyObject
*_res
= NULL
;
1605 UniChar
*nameLength__in__
;
1606 UniCharCount nameLength__len__
;
1607 int nameLength__in_len__
;
1608 UniChar
*forkNameLength__in__
;
1609 UniCharCount forkNameLength__len__
;
1610 int forkNameLength__in_len__
;
1613 #ifndef FSCreateResourceFile
1614 PyMac_PRECHECK(FSCreateResourceFile
);
1616 if (!PyArg_ParseTuple(_args
, "O&u#u#",
1617 PyMac_GetFSRef
, &parentRef
,
1618 &nameLength__in__
, &nameLength__in_len__
,
1619 &forkNameLength__in__
, &forkNameLength__in_len__
))
1621 nameLength__len__
= nameLength__in_len__
;
1622 forkNameLength__len__
= forkNameLength__in_len__
;
1623 _err
= FSCreateResourceFile(&parentRef
,
1624 nameLength__len__
, nameLength__in__
,
1627 forkNameLength__len__
, forkNameLength__in__
,
1630 if (_err
!= noErr
) return PyMac_Error(_err
);
1631 _res
= Py_BuildValue("O&O&",
1632 PyMac_BuildFSRef
, &newRef
,
1633 PyMac_BuildFSSpec
, &newSpec
);
1638 #if TARGET_API_MAC_CARBON
1640 static PyObject
*Res_FSOpenResourceFile(PyObject
*_self
, PyObject
*_args
)
1642 PyObject
*_res
= NULL
;
1645 UniChar
*forkNameLength__in__
;
1646 UniCharCount forkNameLength__len__
;
1647 int forkNameLength__in_len__
;
1648 SignedByte permissions
;
1650 #ifndef FSOpenResourceFile
1651 PyMac_PRECHECK(FSOpenResourceFile
);
1653 if (!PyArg_ParseTuple(_args
, "O&u#b",
1654 PyMac_GetFSRef
, &ref
,
1655 &forkNameLength__in__
, &forkNameLength__in_len__
,
1658 forkNameLength__len__
= forkNameLength__in_len__
;
1659 _err
= FSOpenResourceFile(&ref
,
1660 forkNameLength__len__
, forkNameLength__in__
,
1663 if (_err
!= noErr
) return PyMac_Error(_err
);
1664 _res
= Py_BuildValue("h",
1670 static PyObject
*Res_Resource(PyObject
*_self
, PyObject
*_args
)
1672 PyObject
*_res
= NULL
;
1678 if (!PyArg_ParseTuple(_args
, "s#", &buf
, &len
))
1686 memcpy(*h
, buf
, len
);
1688 _res
= ResObj_New(h
);
1693 static PyObject
*Res_Handle(PyObject
*_self
, PyObject
*_args
)
1695 PyObject
*_res
= NULL
;
1702 if (!PyArg_ParseTuple(_args
, "s#", &buf
, &len
))
1710 memcpy(*h
, buf
, len
);
1712 rv
= (ResourceObject
*)ResObj_New(h
);
1713 rv
->ob_freeit
= PyMac_AutoDisposeHandle
;
1714 _res
= (PyObject
*)rv
;
1719 static PyMethodDef Res_methods
[] = {
1721 #if TARGET_API_MAC_OS8
1722 {"InitResources", (PyCFunction
)Res_InitResources
, 1,
1723 "() -> (short _rv)"},
1726 #if TARGET_API_MAC_OS8
1727 {"RsrcZoneInit", (PyCFunction
)Res_RsrcZoneInit
, 1,
1730 {"CloseResFile", (PyCFunction
)Res_CloseResFile
, 1,
1731 "(short refNum) -> None"},
1732 {"ResError", (PyCFunction
)Res_ResError
, 1,
1734 {"CurResFile", (PyCFunction
)Res_CurResFile
, 1,
1735 "() -> (short _rv)"},
1737 #if TARGET_API_MAC_OS8
1738 {"CreateResFile", (PyCFunction
)Res_CreateResFile
, 1,
1739 "(Str255 fileName) -> None"},
1742 #if TARGET_API_MAC_OS8
1743 {"OpenResFile", (PyCFunction
)Res_OpenResFile
, 1,
1744 "(Str255 fileName) -> (short _rv)"},
1746 {"UseResFile", (PyCFunction
)Res_UseResFile
, 1,
1747 "(short refNum) -> None"},
1748 {"CountTypes", (PyCFunction
)Res_CountTypes
, 1,
1749 "() -> (short _rv)"},
1750 {"Count1Types", (PyCFunction
)Res_Count1Types
, 1,
1751 "() -> (short _rv)"},
1752 {"GetIndType", (PyCFunction
)Res_GetIndType
, 1,
1753 "(short index) -> (ResType theType)"},
1754 {"Get1IndType", (PyCFunction
)Res_Get1IndType
, 1,
1755 "(short index) -> (ResType theType)"},
1756 {"SetResLoad", (PyCFunction
)Res_SetResLoad
, 1,
1757 "(Boolean load) -> None"},
1758 {"CountResources", (PyCFunction
)Res_CountResources
, 1,
1759 "(ResType theType) -> (short _rv)"},
1760 {"Count1Resources", (PyCFunction
)Res_Count1Resources
, 1,
1761 "(ResType theType) -> (short _rv)"},
1762 {"GetIndResource", (PyCFunction
)Res_GetIndResource
, 1,
1763 "(ResType theType, short index) -> (Handle _rv)"},
1764 {"Get1IndResource", (PyCFunction
)Res_Get1IndResource
, 1,
1765 "(ResType theType, short index) -> (Handle _rv)"},
1766 {"GetResource", (PyCFunction
)Res_GetResource
, 1,
1767 "(ResType theType, short theID) -> (Handle _rv)"},
1768 {"Get1Resource", (PyCFunction
)Res_Get1Resource
, 1,
1769 "(ResType theType, short theID) -> (Handle _rv)"},
1770 {"GetNamedResource", (PyCFunction
)Res_GetNamedResource
, 1,
1771 "(ResType theType, Str255 name) -> (Handle _rv)"},
1772 {"Get1NamedResource", (PyCFunction
)Res_Get1NamedResource
, 1,
1773 "(ResType theType, Str255 name) -> (Handle _rv)"},
1774 {"UniqueID", (PyCFunction
)Res_UniqueID
, 1,
1775 "(ResType theType) -> (short _rv)"},
1776 {"Unique1ID", (PyCFunction
)Res_Unique1ID
, 1,
1777 "(ResType theType) -> (short _rv)"},
1778 {"UpdateResFile", (PyCFunction
)Res_UpdateResFile
, 1,
1779 "(short refNum) -> None"},
1780 {"SetResPurge", (PyCFunction
)Res_SetResPurge
, 1,
1781 "(Boolean install) -> None"},
1782 {"GetResFileAttrs", (PyCFunction
)Res_GetResFileAttrs
, 1,
1783 "(short refNum) -> (short _rv)"},
1784 {"SetResFileAttrs", (PyCFunction
)Res_SetResFileAttrs
, 1,
1785 "(short refNum, short attrs) -> None"},
1786 {"OpenRFPerm", (PyCFunction
)Res_OpenRFPerm
, 1,
1787 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
1789 #if TARGET_API_MAC_OS8
1790 {"RGetResource", (PyCFunction
)Res_RGetResource
, 1,
1791 "(ResType theType, short theID) -> (Handle _rv)"},
1793 {"HOpenResFile", (PyCFunction
)Res_HOpenResFile
, 1,
1794 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
1795 {"HCreateResFile", (PyCFunction
)Res_HCreateResFile
, 1,
1796 "(short vRefNum, long dirID, Str255 fileName) -> None"},
1797 {"FSpOpenResFile", (PyCFunction
)Res_FSpOpenResFile
, 1,
1798 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
1799 {"FSpCreateResFile", (PyCFunction
)Res_FSpCreateResFile
, 1,
1800 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
1802 #if TARGET_API_MAC_CARBON
1803 {"InsertResourceFile", (PyCFunction
)Res_InsertResourceFile
, 1,
1804 "(SInt16 refNum, RsrcChainLocation where) -> None"},
1807 #if TARGET_API_MAC_CARBON
1808 {"DetachResourceFile", (PyCFunction
)Res_DetachResourceFile
, 1,
1809 "(SInt16 refNum) -> None"},
1812 #if TARGET_API_MAC_CARBON
1813 {"FSpResourceFileAlreadyOpen", (PyCFunction
)Res_FSpResourceFileAlreadyOpen
, 1,
1814 "(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)"},
1817 #if TARGET_API_MAC_CARBON
1818 {"FSpOpenOrphanResFile", (PyCFunction
)Res_FSpOpenOrphanResFile
, 1,
1819 "(FSSpec spec, SignedByte permission) -> (SInt16 refNum)"},
1822 #if TARGET_API_MAC_CARBON
1823 {"GetTopResourceFile", (PyCFunction
)Res_GetTopResourceFile
, 1,
1824 "() -> (SInt16 refNum)"},
1827 #if TARGET_API_MAC_CARBON
1828 {"GetNextResourceFile", (PyCFunction
)Res_GetNextResourceFile
, 1,
1829 "(SInt16 curRefNum) -> (SInt16 nextRefNum)"},
1831 {"FSOpenResFile", (PyCFunction
)Res_FSOpenResFile
, 1,
1832 "(FSRef ref, SignedByte permission) -> (short _rv)"},
1833 {"FSCreateResFile", (PyCFunction
)Res_FSCreateResFile
, 1,
1834 "(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)"},
1835 {"FSResourceFileAlreadyOpen", (PyCFunction
)Res_FSResourceFileAlreadyOpen
, 1,
1836 "(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)"},
1838 #if TARGET_API_MAC_CARBON
1839 {"FSCreateResourceFile", (PyCFunction
)Res_FSCreateResourceFile
, 1,
1840 "(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)"},
1843 #if TARGET_API_MAC_CARBON
1844 {"FSOpenResourceFile", (PyCFunction
)Res_FSOpenResourceFile
, 1,
1845 "(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)"},
1847 {"Resource", (PyCFunction
)Res_Resource
, 1,
1848 "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"},
1849 {"Handle", (PyCFunction
)Res_Handle
, 1,
1850 "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"},
1857 /* Alternative version of ResObj_New, which returns None for null argument */
1858 PyObject
*OptResObj_New(Handle itself
)
1860 if (itself
== NULL
) {
1864 return ResObj_New(itself
);
1867 int OptResObj_Convert(PyObject
*v
, Handle
*p_itself
)
1871 if ( v
== Py_None
) {
1875 if (ResObj_Check(v
))
1877 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
1880 /* If it isn't a resource yet see whether it is convertible */
1881 if ( (tmp
=PyObject_CallMethod(v
, "as_Resource", "")) ) {
1882 *p_itself
= ((ResourceObject
*)tmp
)->ob_itself
;
1887 PyErr_SetString(PyExc_TypeError
, "Resource required");
1899 PyMac_INIT_TOOLBOX_OBJECT_NEW(Handle
, ResObj_New
);
1900 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(Handle
, ResObj_Convert
);
1901 PyMac_INIT_TOOLBOX_OBJECT_NEW(Handle
, OptResObj_New
);
1902 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(Handle
, OptResObj_Convert
);
1905 m
= Py_InitModule("_Res", Res_methods
);
1906 d
= PyModule_GetDict(m
);
1907 Res_Error
= PyMac_GetOSErrException();
1908 if (Res_Error
== NULL
||
1909 PyDict_SetItemString(d
, "Error", Res_Error
) != 0)
1911 Resource_Type
.ob_type
= &PyType_Type
;
1912 Py_INCREF(&Resource_Type
);
1913 if (PyDict_SetItemString(d
, "ResourceType", (PyObject
*)&Resource_Type
) != 0)
1914 Py_FatalError("can't initialize ResourceType");
1917 /* ======================== End module _Res ========================= */