2 /* =========================== Module Res =========================== */
8 #define SystemSevenOrLater 1
16 extern PyObject
*ResObj_New(Handle
);
17 extern int ResObj_Convert(PyObject
*, Handle
*);
18 extern PyObject
*OptResObj_New(Handle
);
19 extern int OptResObj_Convert(PyObject
*, Handle
*);
21 extern PyObject
*WinObj_New(WindowPtr
);
22 extern int WinObj_Convert(PyObject
*, WindowPtr
*);
23 extern PyTypeObject Window_Type
;
24 #define WinObj_Check(x) ((x)->ob_type == &Window_Type)
26 extern PyObject
*DlgObj_New(DialogPtr
);
27 extern int DlgObj_Convert(PyObject
*, DialogPtr
*);
28 extern PyTypeObject Dialog_Type
;
29 #define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
31 extern PyObject
*MenuObj_New(MenuHandle
);
32 extern int MenuObj_Convert(PyObject
*, MenuHandle
*);
34 extern PyObject
*CtlObj_New(ControlHandle
);
35 extern int CtlObj_Convert(PyObject
*, ControlHandle
*);
37 extern PyObject
*GrafObj_New(GrafPtr
);
38 extern int GrafObj_Convert(PyObject
*, GrafPtr
*);
40 extern PyObject
*BMObj_New(BitMapPtr
);
41 extern int BMObj_Convert(PyObject
*, BitMapPtr
*);
43 extern PyObject
*WinObj_WhichWindow(WindowPtr
);
45 #include <Resources.h>
48 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
50 static PyObject
*Res_Error
;
52 /* ---------------------- Object type Resource ---------------------- */
54 PyTypeObject Resource_Type
;
56 #define ResObj_Check(x) ((x)->ob_type == &Resource_Type)
58 typedef struct ResourceObject
{
63 PyObject
*ResObj_New(itself
)
67 if (itself
== NULL
) return PyMac_Error(resNotFound
);
68 it
= PyObject_NEW(ResourceObject
, &Resource_Type
);
69 if (it
== NULL
) return NULL
;
70 it
->ob_itself
= itself
;
71 return (PyObject
*)it
;
73 ResObj_Convert(v
, p_itself
)
80 if ( (tmp
=PyObject_CallMethod(v
, "as_Resource", "")) )
82 *p_itself
= ((ResourceObject
*)tmp
)->ob_itself
;
90 PyErr_SetString(PyExc_TypeError
, "Resource required");
93 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
97 static void ResObj_dealloc(self
)
100 /* Cleanup of self->ob_itself goes here */
104 static PyObject
*ResObj_HomeResFile(_self
, _args
)
105 ResourceObject
*_self
;
108 PyObject
*_res
= NULL
;
110 if (!PyArg_ParseTuple(_args
, ""))
112 _rv
= HomeResFile(_self
->ob_itself
);
114 OSErr _err
= ResError();
115 if (_err
!= noErr
) return PyMac_Error(_err
);
117 _res
= Py_BuildValue("h",
122 static PyObject
*ResObj_MacLoadResource(_self
, _args
)
123 ResourceObject
*_self
;
126 PyObject
*_res
= NULL
;
127 if (!PyArg_ParseTuple(_args
, ""))
129 MacLoadResource(_self
->ob_itself
);
131 OSErr _err
= ResError();
132 if (_err
!= noErr
) return PyMac_Error(_err
);
139 static PyObject
*ResObj_ReleaseResource(_self
, _args
)
140 ResourceObject
*_self
;
143 PyObject
*_res
= NULL
;
144 if (!PyArg_ParseTuple(_args
, ""))
146 ReleaseResource(_self
->ob_itself
);
148 OSErr _err
= ResError();
149 if (_err
!= noErr
) return PyMac_Error(_err
);
156 static PyObject
*ResObj_DetachResource(_self
, _args
)
157 ResourceObject
*_self
;
160 PyObject
*_res
= NULL
;
161 if (!PyArg_ParseTuple(_args
, ""))
163 DetachResource(_self
->ob_itself
);
165 OSErr _err
= ResError();
166 if (_err
!= noErr
) return PyMac_Error(_err
);
173 static PyObject
*ResObj_GetResAttrs(_self
, _args
)
174 ResourceObject
*_self
;
177 PyObject
*_res
= NULL
;
179 if (!PyArg_ParseTuple(_args
, ""))
181 _rv
= GetResAttrs(_self
->ob_itself
);
183 OSErr _err
= ResError();
184 if (_err
!= noErr
) return PyMac_Error(_err
);
186 _res
= Py_BuildValue("h",
191 static PyObject
*ResObj_GetResInfo(_self
, _args
)
192 ResourceObject
*_self
;
195 PyObject
*_res
= NULL
;
199 if (!PyArg_ParseTuple(_args
, ""))
201 GetResInfo(_self
->ob_itself
,
206 OSErr _err
= ResError();
207 if (_err
!= noErr
) return PyMac_Error(_err
);
209 _res
= Py_BuildValue("hO&O&",
211 PyMac_BuildOSType
, theType
,
212 PyMac_BuildStr255
, name
);
216 static PyObject
*ResObj_SetResInfo(_self
, _args
)
217 ResourceObject
*_self
;
220 PyObject
*_res
= NULL
;
223 if (!PyArg_ParseTuple(_args
, "hO&",
225 PyMac_GetStr255
, name
))
227 SetResInfo(_self
->ob_itself
,
231 OSErr _err
= ResError();
232 if (_err
!= noErr
) return PyMac_Error(_err
);
239 static PyObject
*ResObj_AddResource(_self
, _args
)
240 ResourceObject
*_self
;
243 PyObject
*_res
= NULL
;
247 if (!PyArg_ParseTuple(_args
, "O&hO&",
248 PyMac_GetOSType
, &theType
,
250 PyMac_GetStr255
, name
))
252 AddResource(_self
->ob_itself
,
257 OSErr _err
= ResError();
258 if (_err
!= noErr
) return PyMac_Error(_err
);
265 static PyObject
*ResObj_GetResourceSizeOnDisk(_self
, _args
)
266 ResourceObject
*_self
;
269 PyObject
*_res
= NULL
;
271 if (!PyArg_ParseTuple(_args
, ""))
273 _rv
= GetResourceSizeOnDisk(_self
->ob_itself
);
275 OSErr _err
= ResError();
276 if (_err
!= noErr
) return PyMac_Error(_err
);
278 _res
= Py_BuildValue("l",
283 static PyObject
*ResObj_GetMaxResourceSize(_self
, _args
)
284 ResourceObject
*_self
;
287 PyObject
*_res
= NULL
;
289 if (!PyArg_ParseTuple(_args
, ""))
291 _rv
= GetMaxResourceSize(_self
->ob_itself
);
293 OSErr _err
= ResError();
294 if (_err
!= noErr
) return PyMac_Error(_err
);
296 _res
= Py_BuildValue("l",
301 static PyObject
*ResObj_RsrcMapEntry(_self
, _args
)
302 ResourceObject
*_self
;
305 PyObject
*_res
= NULL
;
307 if (!PyArg_ParseTuple(_args
, ""))
309 _rv
= RsrcMapEntry(_self
->ob_itself
);
311 OSErr _err
= ResError();
312 if (_err
!= noErr
) return PyMac_Error(_err
);
314 _res
= Py_BuildValue("l",
319 static PyObject
*ResObj_SetResAttrs(_self
, _args
)
320 ResourceObject
*_self
;
323 PyObject
*_res
= NULL
;
325 if (!PyArg_ParseTuple(_args
, "h",
328 SetResAttrs(_self
->ob_itself
,
331 OSErr _err
= ResError();
332 if (_err
!= noErr
) return PyMac_Error(_err
);
339 static PyObject
*ResObj_ChangedResource(_self
, _args
)
340 ResourceObject
*_self
;
343 PyObject
*_res
= NULL
;
344 if (!PyArg_ParseTuple(_args
, ""))
346 ChangedResource(_self
->ob_itself
);
348 OSErr _err
= ResError();
349 if (_err
!= noErr
) return PyMac_Error(_err
);
356 static PyObject
*ResObj_RemoveResource(_self
, _args
)
357 ResourceObject
*_self
;
360 PyObject
*_res
= NULL
;
361 if (!PyArg_ParseTuple(_args
, ""))
363 RemoveResource(_self
->ob_itself
);
365 OSErr _err
= ResError();
366 if (_err
!= noErr
) return PyMac_Error(_err
);
373 static PyObject
*ResObj_WriteResource(_self
, _args
)
374 ResourceObject
*_self
;
377 PyObject
*_res
= NULL
;
378 if (!PyArg_ParseTuple(_args
, ""))
380 WriteResource(_self
->ob_itself
);
382 OSErr _err
= ResError();
383 if (_err
!= noErr
) return PyMac_Error(_err
);
390 static PyObject
*ResObj_SetResourceSize(_self
, _args
)
391 ResourceObject
*_self
;
394 PyObject
*_res
= NULL
;
396 if (!PyArg_ParseTuple(_args
, "l",
399 SetResourceSize(_self
->ob_itself
,
402 OSErr _err
= ResError();
403 if (_err
!= noErr
) return PyMac_Error(_err
);
410 static PyObject
*ResObj_GetNextFOND(_self
, _args
)
411 ResourceObject
*_self
;
414 PyObject
*_res
= NULL
;
416 if (!PyArg_ParseTuple(_args
, ""))
418 _rv
= GetNextFOND(_self
->ob_itself
);
420 OSErr _err
= ResError();
421 if (_err
!= noErr
) return PyMac_Error(_err
);
423 _res
= Py_BuildValue("O&",
428 static PyObject
*ResObj_as_Control(_self
, _args
)
429 ResourceObject
*_self
;
432 PyObject
*_res
= NULL
;
434 return CtlObj_New((ControlHandle
)_self
->ob_itself
);
438 static PyObject
*ResObj_as_Menu(_self
, _args
)
439 ResourceObject
*_self
;
442 PyObject
*_res
= NULL
;
444 return MenuObj_New((MenuHandle
)_self
->ob_itself
);
448 static PyObject
*ResObj_LoadResource(_self
, _args
)
449 ResourceObject
*_self
;
452 PyObject
*_res
= NULL
;
453 if (!PyArg_ParseTuple(_args
, ""))
455 LoadResource(_self
->ob_itself
);
457 OSErr _err
= ResError();
458 if (_err
!= noErr
) return PyMac_Error(_err
);
465 static PyMethodDef ResObj_methods
[] = {
466 {"HomeResFile", (PyCFunction
)ResObj_HomeResFile
, 1,
467 "() -> (short _rv)"},
468 {"MacLoadResource", (PyCFunction
)ResObj_MacLoadResource
, 1,
470 {"ReleaseResource", (PyCFunction
)ResObj_ReleaseResource
, 1,
472 {"DetachResource", (PyCFunction
)ResObj_DetachResource
, 1,
474 {"GetResAttrs", (PyCFunction
)ResObj_GetResAttrs
, 1,
475 "() -> (short _rv)"},
476 {"GetResInfo", (PyCFunction
)ResObj_GetResInfo
, 1,
477 "() -> (short theID, ResType theType, Str255 name)"},
478 {"SetResInfo", (PyCFunction
)ResObj_SetResInfo
, 1,
479 "(short theID, Str255 name) -> None"},
480 {"AddResource", (PyCFunction
)ResObj_AddResource
, 1,
481 "(ResType theType, short theID, Str255 name) -> None"},
482 {"GetResourceSizeOnDisk", (PyCFunction
)ResObj_GetResourceSizeOnDisk
, 1,
484 {"GetMaxResourceSize", (PyCFunction
)ResObj_GetMaxResourceSize
, 1,
486 {"RsrcMapEntry", (PyCFunction
)ResObj_RsrcMapEntry
, 1,
488 {"SetResAttrs", (PyCFunction
)ResObj_SetResAttrs
, 1,
489 "(short attrs) -> None"},
490 {"ChangedResource", (PyCFunction
)ResObj_ChangedResource
, 1,
492 {"RemoveResource", (PyCFunction
)ResObj_RemoveResource
, 1,
494 {"WriteResource", (PyCFunction
)ResObj_WriteResource
, 1,
496 {"SetResourceSize", (PyCFunction
)ResObj_SetResourceSize
, 1,
497 "(long newSize) -> None"},
498 {"GetNextFOND", (PyCFunction
)ResObj_GetNextFOND
, 1,
499 "() -> (Handle _rv)"},
500 {"as_Control", (PyCFunction
)ResObj_as_Control
, 1,
501 "Return this resource/handle as a Control"},
502 {"as_Menu", (PyCFunction
)ResObj_as_Menu
, 1,
503 "Return this resource/handle as a Menu"},
504 {"LoadResource", (PyCFunction
)ResObj_LoadResource
, 1,
509 PyMethodChain ResObj_chain
= { ResObj_methods
, NULL
};
511 static PyObject
*ResObj_getattr(self
, name
)
512 ResourceObject
*self
;
516 if (strcmp(name
, "size") == 0)
517 return PyInt_FromLong(GetHandleSize(self
->ob_itself
));
518 if (strcmp(name
, "data") == 0) {
521 state
= HGetState(self
->ob_itself
);
522 HLock(self
->ob_itself
);
523 res
= PyString_FromStringAndSize(
525 GetHandleSize(self
->ob_itself
));
526 HUnlock(self
->ob_itself
);
527 HSetState(self
->ob_itself
, state
);
530 if (strcmp(name
, "__members__") == 0)
531 return Py_BuildValue("[ss]", "data", "size");
533 return Py_FindMethodInChain(&ResObj_chain
, (PyObject
*)self
, name
);
537 ResObj_setattr(self
, name
, value
)
538 ResourceObject
*self
;
545 if (strcmp(name
, "data") != 0 || value
== NULL
)
547 if ( !PyString_Check(value
) )
549 size
= PyString_Size(value
);
550 data
= PyString_AsString(value
);
551 /* XXXX Do I need the GetState/SetState calls? */
552 SetHandleSize(self
->ob_itself
, size
);
555 HLock(self
->ob_itself
);
556 memcpy((char *)*self
->ob_itself
, data
, size
);
557 HUnlock(self
->ob_itself
);
558 /* XXXX Should I do the Changed call immedeately? */
563 #define ResObj_compare NULL
565 #define ResObj_repr NULL
567 #define ResObj_hash NULL
569 PyTypeObject Resource_Type
= {
570 PyObject_HEAD_INIT(&PyType_Type
)
572 "Resource", /*tp_name*/
573 sizeof(ResourceObject
), /*tp_basicsize*/
576 (destructor
) ResObj_dealloc
, /*tp_dealloc*/
578 (getattrfunc
) ResObj_getattr
, /*tp_getattr*/
579 (setattrfunc
) ResObj_setattr
, /*tp_setattr*/
580 (cmpfunc
) ResObj_compare
, /*tp_compare*/
581 (reprfunc
) ResObj_repr
, /*tp_repr*/
582 (PyNumberMethods
*)0, /* tp_as_number */
583 (PySequenceMethods
*)0, /* tp_as_sequence */
584 (PyMappingMethods
*)0, /* tp_as_mapping */
585 (hashfunc
) ResObj_hash
, /*tp_hash*/
588 /* -------------------- End object type Resource -------------------- */
591 static PyObject
*Res_InitResources(_self
, _args
)
595 PyObject
*_res
= NULL
;
597 if (!PyArg_ParseTuple(_args
, ""))
599 _rv
= InitResources();
601 OSErr _err
= ResError();
602 if (_err
!= noErr
) return PyMac_Error(_err
);
604 _res
= Py_BuildValue("h",
609 static PyObject
*Res_RsrcZoneInit(_self
, _args
)
613 PyObject
*_res
= NULL
;
614 if (!PyArg_ParseTuple(_args
, ""))
618 OSErr _err
= ResError();
619 if (_err
!= noErr
) return PyMac_Error(_err
);
626 static PyObject
*Res_CloseResFile(_self
, _args
)
630 PyObject
*_res
= NULL
;
632 if (!PyArg_ParseTuple(_args
, "h",
635 CloseResFile(refNum
);
637 OSErr _err
= ResError();
638 if (_err
!= noErr
) return PyMac_Error(_err
);
645 static PyObject
*Res_ResError(_self
, _args
)
649 PyObject
*_res
= NULL
;
651 if (!PyArg_ParseTuple(_args
, ""))
655 OSErr _err
= ResError();
656 if (_err
!= noErr
) return PyMac_Error(_err
);
658 _res
= Py_BuildValue("h",
663 static PyObject
*Res_CurResFile(_self
, _args
)
667 PyObject
*_res
= NULL
;
669 if (!PyArg_ParseTuple(_args
, ""))
673 OSErr _err
= ResError();
674 if (_err
!= noErr
) return PyMac_Error(_err
);
676 _res
= Py_BuildValue("h",
681 static PyObject
*Res_CreateResFile(_self
, _args
)
685 PyObject
*_res
= NULL
;
687 if (!PyArg_ParseTuple(_args
, "O&",
688 PyMac_GetStr255
, fileName
))
690 CreateResFile(fileName
);
692 OSErr _err
= ResError();
693 if (_err
!= noErr
) return PyMac_Error(_err
);
700 static PyObject
*Res_OpenResFile(_self
, _args
)
704 PyObject
*_res
= NULL
;
707 if (!PyArg_ParseTuple(_args
, "O&",
708 PyMac_GetStr255
, fileName
))
710 _rv
= OpenResFile(fileName
);
712 OSErr _err
= ResError();
713 if (_err
!= noErr
) return PyMac_Error(_err
);
715 _res
= Py_BuildValue("h",
720 static PyObject
*Res_UseResFile(_self
, _args
)
724 PyObject
*_res
= NULL
;
726 if (!PyArg_ParseTuple(_args
, "h",
731 OSErr _err
= ResError();
732 if (_err
!= noErr
) return PyMac_Error(_err
);
739 static PyObject
*Res_CountTypes(_self
, _args
)
743 PyObject
*_res
= NULL
;
745 if (!PyArg_ParseTuple(_args
, ""))
749 OSErr _err
= ResError();
750 if (_err
!= noErr
) return PyMac_Error(_err
);
752 _res
= Py_BuildValue("h",
757 static PyObject
*Res_Count1Types(_self
, _args
)
761 PyObject
*_res
= NULL
;
763 if (!PyArg_ParseTuple(_args
, ""))
767 OSErr _err
= ResError();
768 if (_err
!= noErr
) return PyMac_Error(_err
);
770 _res
= Py_BuildValue("h",
775 static PyObject
*Res_GetIndType(_self
, _args
)
779 PyObject
*_res
= NULL
;
782 if (!PyArg_ParseTuple(_args
, "h",
788 OSErr _err
= ResError();
789 if (_err
!= noErr
) return PyMac_Error(_err
);
791 _res
= Py_BuildValue("O&",
792 PyMac_BuildOSType
, theType
);
796 static PyObject
*Res_Get1IndType(_self
, _args
)
800 PyObject
*_res
= NULL
;
803 if (!PyArg_ParseTuple(_args
, "h",
806 Get1IndType(&theType
,
809 OSErr _err
= ResError();
810 if (_err
!= noErr
) return PyMac_Error(_err
);
812 _res
= Py_BuildValue("O&",
813 PyMac_BuildOSType
, theType
);
817 static PyObject
*Res_SetResLoad(_self
, _args
)
821 PyObject
*_res
= NULL
;
823 if (!PyArg_ParseTuple(_args
, "b",
828 OSErr _err
= ResError();
829 if (_err
!= noErr
) return PyMac_Error(_err
);
836 static PyObject
*Res_CountResources(_self
, _args
)
840 PyObject
*_res
= NULL
;
843 if (!PyArg_ParseTuple(_args
, "O&",
844 PyMac_GetOSType
, &theType
))
846 _rv
= CountResources(theType
);
848 OSErr _err
= ResError();
849 if (_err
!= noErr
) return PyMac_Error(_err
);
851 _res
= Py_BuildValue("h",
856 static PyObject
*Res_Count1Resources(_self
, _args
)
860 PyObject
*_res
= NULL
;
863 if (!PyArg_ParseTuple(_args
, "O&",
864 PyMac_GetOSType
, &theType
))
866 _rv
= Count1Resources(theType
);
868 OSErr _err
= ResError();
869 if (_err
!= noErr
) return PyMac_Error(_err
);
871 _res
= Py_BuildValue("h",
876 static PyObject
*Res_GetIndResource(_self
, _args
)
880 PyObject
*_res
= NULL
;
884 if (!PyArg_ParseTuple(_args
, "O&h",
885 PyMac_GetOSType
, &theType
,
888 _rv
= GetIndResource(theType
,
891 OSErr _err
= ResError();
892 if (_err
!= noErr
) return PyMac_Error(_err
);
894 _res
= Py_BuildValue("O&",
899 static PyObject
*Res_Get1IndResource(_self
, _args
)
903 PyObject
*_res
= NULL
;
907 if (!PyArg_ParseTuple(_args
, "O&h",
908 PyMac_GetOSType
, &theType
,
911 _rv
= Get1IndResource(theType
,
914 OSErr _err
= ResError();
915 if (_err
!= noErr
) return PyMac_Error(_err
);
917 _res
= Py_BuildValue("O&",
922 static PyObject
*Res_GetResource(_self
, _args
)
926 PyObject
*_res
= NULL
;
930 if (!PyArg_ParseTuple(_args
, "O&h",
931 PyMac_GetOSType
, &theType
,
934 _rv
= GetResource(theType
,
937 OSErr _err
= ResError();
938 if (_err
!= noErr
) return PyMac_Error(_err
);
940 _res
= Py_BuildValue("O&",
945 static PyObject
*Res_Get1Resource(_self
, _args
)
949 PyObject
*_res
= NULL
;
953 if (!PyArg_ParseTuple(_args
, "O&h",
954 PyMac_GetOSType
, &theType
,
957 _rv
= Get1Resource(theType
,
960 OSErr _err
= ResError();
961 if (_err
!= noErr
) return PyMac_Error(_err
);
963 _res
= Py_BuildValue("O&",
968 static PyObject
*Res_GetNamedResource(_self
, _args
)
972 PyObject
*_res
= NULL
;
976 if (!PyArg_ParseTuple(_args
, "O&O&",
977 PyMac_GetOSType
, &theType
,
978 PyMac_GetStr255
, name
))
980 _rv
= GetNamedResource(theType
,
983 OSErr _err
= ResError();
984 if (_err
!= noErr
) return PyMac_Error(_err
);
986 _res
= Py_BuildValue("O&",
991 static PyObject
*Res_Get1NamedResource(_self
, _args
)
995 PyObject
*_res
= NULL
;
999 if (!PyArg_ParseTuple(_args
, "O&O&",
1000 PyMac_GetOSType
, &theType
,
1001 PyMac_GetStr255
, name
))
1003 _rv
= Get1NamedResource(theType
,
1006 OSErr _err
= ResError();
1007 if (_err
!= noErr
) return PyMac_Error(_err
);
1009 _res
= Py_BuildValue("O&",
1014 static PyObject
*Res_UniqueID(_self
, _args
)
1018 PyObject
*_res
= NULL
;
1021 if (!PyArg_ParseTuple(_args
, "O&",
1022 PyMac_GetOSType
, &theType
))
1024 _rv
= UniqueID(theType
);
1026 OSErr _err
= ResError();
1027 if (_err
!= noErr
) return PyMac_Error(_err
);
1029 _res
= Py_BuildValue("h",
1034 static PyObject
*Res_Unique1ID(_self
, _args
)
1038 PyObject
*_res
= NULL
;
1041 if (!PyArg_ParseTuple(_args
, "O&",
1042 PyMac_GetOSType
, &theType
))
1044 _rv
= Unique1ID(theType
);
1046 OSErr _err
= ResError();
1047 if (_err
!= noErr
) return PyMac_Error(_err
);
1049 _res
= Py_BuildValue("h",
1054 static PyObject
*Res_UpdateResFile(_self
, _args
)
1058 PyObject
*_res
= NULL
;
1060 if (!PyArg_ParseTuple(_args
, "h",
1063 UpdateResFile(refNum
);
1065 OSErr _err
= ResError();
1066 if (_err
!= noErr
) return PyMac_Error(_err
);
1073 static PyObject
*Res_SetResPurge(_self
, _args
)
1077 PyObject
*_res
= NULL
;
1079 if (!PyArg_ParseTuple(_args
, "b",
1082 SetResPurge(install
);
1084 OSErr _err
= ResError();
1085 if (_err
!= noErr
) return PyMac_Error(_err
);
1092 static PyObject
*Res_GetResFileAttrs(_self
, _args
)
1096 PyObject
*_res
= NULL
;
1099 if (!PyArg_ParseTuple(_args
, "h",
1102 _rv
= GetResFileAttrs(refNum
);
1104 OSErr _err
= ResError();
1105 if (_err
!= noErr
) return PyMac_Error(_err
);
1107 _res
= Py_BuildValue("h",
1112 static PyObject
*Res_SetResFileAttrs(_self
, _args
)
1116 PyObject
*_res
= NULL
;
1119 if (!PyArg_ParseTuple(_args
, "hh",
1123 SetResFileAttrs(refNum
,
1126 OSErr _err
= ResError();
1127 if (_err
!= noErr
) return PyMac_Error(_err
);
1134 static PyObject
*Res_OpenRFPerm(_self
, _args
)
1138 PyObject
*_res
= NULL
;
1142 SignedByte permission
;
1143 if (!PyArg_ParseTuple(_args
, "O&hb",
1144 PyMac_GetStr255
, fileName
,
1148 _rv
= OpenRFPerm(fileName
,
1152 OSErr _err
= ResError();
1153 if (_err
!= noErr
) return PyMac_Error(_err
);
1155 _res
= Py_BuildValue("h",
1160 static PyObject
*Res_RGetResource(_self
, _args
)
1164 PyObject
*_res
= NULL
;
1168 if (!PyArg_ParseTuple(_args
, "O&h",
1169 PyMac_GetOSType
, &theType
,
1172 _rv
= RGetResource(theType
,
1175 OSErr _err
= ResError();
1176 if (_err
!= noErr
) return PyMac_Error(_err
);
1178 _res
= Py_BuildValue("O&",
1183 static PyObject
*Res_HOpenResFile(_self
, _args
)
1187 PyObject
*_res
= NULL
;
1192 SignedByte permission
;
1193 if (!PyArg_ParseTuple(_args
, "hlO&b",
1196 PyMac_GetStr255
, fileName
,
1199 _rv
= HOpenResFile(vRefNum
,
1204 OSErr _err
= ResError();
1205 if (_err
!= noErr
) return PyMac_Error(_err
);
1207 _res
= Py_BuildValue("h",
1212 static PyObject
*Res_HCreateResFile(_self
, _args
)
1216 PyObject
*_res
= NULL
;
1220 if (!PyArg_ParseTuple(_args
, "hlO&",
1223 PyMac_GetStr255
, fileName
))
1225 HCreateResFile(vRefNum
,
1229 OSErr _err
= ResError();
1230 if (_err
!= noErr
) return PyMac_Error(_err
);
1237 static PyObject
*Res_FSpOpenResFile(_self
, _args
)
1241 PyObject
*_res
= NULL
;
1244 SignedByte permission
;
1245 if (!PyArg_ParseTuple(_args
, "O&b",
1246 PyMac_GetFSSpec
, &spec
,
1249 _rv
= FSpOpenResFile(&spec
,
1252 OSErr _err
= ResError();
1253 if (_err
!= noErr
) return PyMac_Error(_err
);
1255 _res
= Py_BuildValue("h",
1260 static PyObject
*Res_FSpCreateResFile(_self
, _args
)
1264 PyObject
*_res
= NULL
;
1268 ScriptCode scriptTag
;
1269 if (!PyArg_ParseTuple(_args
, "O&O&O&h",
1270 PyMac_GetFSSpec
, &spec
,
1271 PyMac_GetOSType
, &creator
,
1272 PyMac_GetOSType
, &fileType
,
1275 FSpCreateResFile(&spec
,
1280 OSErr _err
= ResError();
1281 if (_err
!= noErr
) return PyMac_Error(_err
);
1288 static PyObject
*Res_Resource(_self
, _args
)
1292 PyObject
*_res
= NULL
;
1298 if (!PyArg_ParseTuple(_args
, "s#", &buf
, &len
))
1306 memcpy(*h
, buf
, len
);
1308 return (PyObject
*)ResObj_New(h
);
1312 static PyMethodDef Res_methods
[] = {
1313 {"InitResources", (PyCFunction
)Res_InitResources
, 1,
1314 "() -> (short _rv)"},
1315 {"RsrcZoneInit", (PyCFunction
)Res_RsrcZoneInit
, 1,
1317 {"CloseResFile", (PyCFunction
)Res_CloseResFile
, 1,
1318 "(short refNum) -> None"},
1319 {"ResError", (PyCFunction
)Res_ResError
, 1,
1320 "() -> (OSErr _rv)"},
1321 {"CurResFile", (PyCFunction
)Res_CurResFile
, 1,
1322 "() -> (short _rv)"},
1323 {"CreateResFile", (PyCFunction
)Res_CreateResFile
, 1,
1324 "(Str255 fileName) -> None"},
1325 {"OpenResFile", (PyCFunction
)Res_OpenResFile
, 1,
1326 "(Str255 fileName) -> (short _rv)"},
1327 {"UseResFile", (PyCFunction
)Res_UseResFile
, 1,
1328 "(short refNum) -> None"},
1329 {"CountTypes", (PyCFunction
)Res_CountTypes
, 1,
1330 "() -> (short _rv)"},
1331 {"Count1Types", (PyCFunction
)Res_Count1Types
, 1,
1332 "() -> (short _rv)"},
1333 {"GetIndType", (PyCFunction
)Res_GetIndType
, 1,
1334 "(short index) -> (ResType theType)"},
1335 {"Get1IndType", (PyCFunction
)Res_Get1IndType
, 1,
1336 "(short index) -> (ResType theType)"},
1337 {"SetResLoad", (PyCFunction
)Res_SetResLoad
, 1,
1338 "(Boolean load) -> None"},
1339 {"CountResources", (PyCFunction
)Res_CountResources
, 1,
1340 "(ResType theType) -> (short _rv)"},
1341 {"Count1Resources", (PyCFunction
)Res_Count1Resources
, 1,
1342 "(ResType theType) -> (short _rv)"},
1343 {"GetIndResource", (PyCFunction
)Res_GetIndResource
, 1,
1344 "(ResType theType, short index) -> (Handle _rv)"},
1345 {"Get1IndResource", (PyCFunction
)Res_Get1IndResource
, 1,
1346 "(ResType theType, short index) -> (Handle _rv)"},
1347 {"GetResource", (PyCFunction
)Res_GetResource
, 1,
1348 "(ResType theType, short theID) -> (Handle _rv)"},
1349 {"Get1Resource", (PyCFunction
)Res_Get1Resource
, 1,
1350 "(ResType theType, short theID) -> (Handle _rv)"},
1351 {"GetNamedResource", (PyCFunction
)Res_GetNamedResource
, 1,
1352 "(ResType theType, Str255 name) -> (Handle _rv)"},
1353 {"Get1NamedResource", (PyCFunction
)Res_Get1NamedResource
, 1,
1354 "(ResType theType, Str255 name) -> (Handle _rv)"},
1355 {"UniqueID", (PyCFunction
)Res_UniqueID
, 1,
1356 "(ResType theType) -> (short _rv)"},
1357 {"Unique1ID", (PyCFunction
)Res_Unique1ID
, 1,
1358 "(ResType theType) -> (short _rv)"},
1359 {"UpdateResFile", (PyCFunction
)Res_UpdateResFile
, 1,
1360 "(short refNum) -> None"},
1361 {"SetResPurge", (PyCFunction
)Res_SetResPurge
, 1,
1362 "(Boolean install) -> None"},
1363 {"GetResFileAttrs", (PyCFunction
)Res_GetResFileAttrs
, 1,
1364 "(short refNum) -> (short _rv)"},
1365 {"SetResFileAttrs", (PyCFunction
)Res_SetResFileAttrs
, 1,
1366 "(short refNum, short attrs) -> None"},
1367 {"OpenRFPerm", (PyCFunction
)Res_OpenRFPerm
, 1,
1368 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
1369 {"RGetResource", (PyCFunction
)Res_RGetResource
, 1,
1370 "(ResType theType, short theID) -> (Handle _rv)"},
1371 {"HOpenResFile", (PyCFunction
)Res_HOpenResFile
, 1,
1372 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
1373 {"HCreateResFile", (PyCFunction
)Res_HCreateResFile
, 1,
1374 "(short vRefNum, long dirID, Str255 fileName) -> None"},
1375 {"FSpOpenResFile", (PyCFunction
)Res_FSpOpenResFile
, 1,
1376 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
1377 {"FSpCreateResFile", (PyCFunction
)Res_FSpCreateResFile
, 1,
1378 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
1379 {"Resource", (PyCFunction
)Res_Resource
, 1,
1380 "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.\n"},
1387 /* Alternative version of ResObj_New, which returns None for null argument */
1388 PyObject
*OptResObj_New(itself
)
1391 if (itself
== NULL
) {
1395 return ResObj_New(itself
);
1398 OptResObj_Convert(v
, p_itself
)
1404 if ( v
== Py_None
) {
1408 if (ResObj_Check(v
))
1410 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
1413 /* If it isn't a resource yet see whether it is convertible */
1414 if ( (tmp
=PyObject_CallMethod(v
, "as_Resource", "")) ) {
1415 *p_itself
= ((ResourceObject
*)tmp
)->ob_itself
;
1420 PyErr_SetString(PyExc_TypeError
, "Resource required");
1435 m
= Py_InitModule("Res", Res_methods
);
1436 d
= PyModule_GetDict(m
);
1437 Res_Error
= PyMac_GetOSErrException();
1438 if (Res_Error
== NULL
||
1439 PyDict_SetItemString(d
, "Error", Res_Error
) != 0)
1440 Py_FatalError("can't initialize Res.Error");
1441 Resource_Type
.ob_type
= &PyType_Type
;
1442 Py_INCREF(&Resource_Type
);
1443 if (PyDict_SetItemString(d
, "ResourceType", (PyObject
*)&Resource_Type
) != 0)
1444 Py_FatalError("can't initialize ResourceType");
1447 /* ========================= End module Res ========================= */