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>
47 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
49 static PyObject
*Res_Error
;
51 /* ---------------------- Object type Resource ---------------------- */
53 PyTypeObject Resource_Type
;
55 #define ResObj_Check(x) ((x)->ob_type == &Resource_Type)
57 typedef struct ResourceObject
{
62 PyObject
*ResObj_New(itself
)
66 if (itself
== NULL
) return PyMac_Error(resNotFound
);
67 it
= PyObject_NEW(ResourceObject
, &Resource_Type
);
68 if (it
== NULL
) return NULL
;
69 it
->ob_itself
= itself
;
70 return (PyObject
*)it
;
72 ResObj_Convert(v
, p_itself
)
78 PyErr_SetString(PyExc_TypeError
, "Resource required");
81 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
85 static void ResObj_dealloc(self
)
88 /* Cleanup of self->ob_itself goes here */
92 static PyObject
*ResObj_HomeResFile(_self
, _args
)
93 ResourceObject
*_self
;
96 PyObject
*_res
= NULL
;
98 if (!PyArg_ParseTuple(_args
, ""))
100 _rv
= HomeResFile(_self
->ob_itself
);
102 OSErr _err
= ResError();
103 if (_err
!= noErr
) return PyMac_Error(_err
);
105 _res
= Py_BuildValue("h",
110 static PyObject
*ResObj_LoadResource(_self
, _args
)
111 ResourceObject
*_self
;
114 PyObject
*_res
= NULL
;
115 if (!PyArg_ParseTuple(_args
, ""))
117 LoadResource(_self
->ob_itself
);
119 OSErr _err
= ResError();
120 if (_err
!= noErr
) return PyMac_Error(_err
);
127 static PyObject
*ResObj_ReleaseResource(_self
, _args
)
128 ResourceObject
*_self
;
131 PyObject
*_res
= NULL
;
132 if (!PyArg_ParseTuple(_args
, ""))
134 ReleaseResource(_self
->ob_itself
);
136 OSErr _err
= ResError();
137 if (_err
!= noErr
) return PyMac_Error(_err
);
144 static PyObject
*ResObj_DetachResource(_self
, _args
)
145 ResourceObject
*_self
;
148 PyObject
*_res
= NULL
;
149 if (!PyArg_ParseTuple(_args
, ""))
151 DetachResource(_self
->ob_itself
);
153 OSErr _err
= ResError();
154 if (_err
!= noErr
) return PyMac_Error(_err
);
161 static PyObject
*ResObj_GetResAttrs(_self
, _args
)
162 ResourceObject
*_self
;
165 PyObject
*_res
= NULL
;
167 if (!PyArg_ParseTuple(_args
, ""))
169 _rv
= GetResAttrs(_self
->ob_itself
);
171 OSErr _err
= ResError();
172 if (_err
!= noErr
) return PyMac_Error(_err
);
174 _res
= Py_BuildValue("h",
179 static PyObject
*ResObj_GetResInfo(_self
, _args
)
180 ResourceObject
*_self
;
183 PyObject
*_res
= NULL
;
187 if (!PyArg_ParseTuple(_args
, ""))
189 GetResInfo(_self
->ob_itself
,
194 OSErr _err
= ResError();
195 if (_err
!= noErr
) return PyMac_Error(_err
);
197 _res
= Py_BuildValue("hO&O&",
199 PyMac_BuildOSType
, theType
,
200 PyMac_BuildStr255
, name
);
204 static PyObject
*ResObj_SetResInfo(_self
, _args
)
205 ResourceObject
*_self
;
208 PyObject
*_res
= NULL
;
211 if (!PyArg_ParseTuple(_args
, "hO&",
213 PyMac_GetStr255
, name
))
215 SetResInfo(_self
->ob_itself
,
219 OSErr _err
= ResError();
220 if (_err
!= noErr
) return PyMac_Error(_err
);
227 static PyObject
*ResObj_AddResource(_self
, _args
)
228 ResourceObject
*_self
;
231 PyObject
*_res
= NULL
;
235 if (!PyArg_ParseTuple(_args
, "O&hO&",
236 PyMac_GetOSType
, &theType
,
238 PyMac_GetStr255
, name
))
240 AddResource(_self
->ob_itself
,
245 OSErr _err
= ResError();
246 if (_err
!= noErr
) return PyMac_Error(_err
);
253 static PyObject
*ResObj_GetResourceSizeOnDisk(_self
, _args
)
254 ResourceObject
*_self
;
257 PyObject
*_res
= NULL
;
259 if (!PyArg_ParseTuple(_args
, ""))
261 _rv
= GetResourceSizeOnDisk(_self
->ob_itself
);
263 OSErr _err
= ResError();
264 if (_err
!= noErr
) return PyMac_Error(_err
);
266 _res
= Py_BuildValue("l",
271 static PyObject
*ResObj_GetMaxResourceSize(_self
, _args
)
272 ResourceObject
*_self
;
275 PyObject
*_res
= NULL
;
277 if (!PyArg_ParseTuple(_args
, ""))
279 _rv
= GetMaxResourceSize(_self
->ob_itself
);
281 OSErr _err
= ResError();
282 if (_err
!= noErr
) return PyMac_Error(_err
);
284 _res
= Py_BuildValue("l",
289 static PyObject
*ResObj_RsrcMapEntry(_self
, _args
)
290 ResourceObject
*_self
;
293 PyObject
*_res
= NULL
;
295 if (!PyArg_ParseTuple(_args
, ""))
297 _rv
= RsrcMapEntry(_self
->ob_itself
);
299 OSErr _err
= ResError();
300 if (_err
!= noErr
) return PyMac_Error(_err
);
302 _res
= Py_BuildValue("l",
307 static PyObject
*ResObj_SetResAttrs(_self
, _args
)
308 ResourceObject
*_self
;
311 PyObject
*_res
= NULL
;
313 if (!PyArg_ParseTuple(_args
, "h",
316 SetResAttrs(_self
->ob_itself
,
319 OSErr _err
= ResError();
320 if (_err
!= noErr
) return PyMac_Error(_err
);
327 static PyObject
*ResObj_ChangedResource(_self
, _args
)
328 ResourceObject
*_self
;
331 PyObject
*_res
= NULL
;
332 if (!PyArg_ParseTuple(_args
, ""))
334 ChangedResource(_self
->ob_itself
);
336 OSErr _err
= ResError();
337 if (_err
!= noErr
) return PyMac_Error(_err
);
344 static PyObject
*ResObj_RemoveResource(_self
, _args
)
345 ResourceObject
*_self
;
348 PyObject
*_res
= NULL
;
349 if (!PyArg_ParseTuple(_args
, ""))
351 RemoveResource(_self
->ob_itself
);
353 OSErr _err
= ResError();
354 if (_err
!= noErr
) return PyMac_Error(_err
);
361 static PyObject
*ResObj_WriteResource(_self
, _args
)
362 ResourceObject
*_self
;
365 PyObject
*_res
= NULL
;
366 if (!PyArg_ParseTuple(_args
, ""))
368 WriteResource(_self
->ob_itself
);
370 OSErr _err
= ResError();
371 if (_err
!= noErr
) return PyMac_Error(_err
);
378 static PyObject
*ResObj_SetResourceSize(_self
, _args
)
379 ResourceObject
*_self
;
382 PyObject
*_res
= NULL
;
384 if (!PyArg_ParseTuple(_args
, "l",
387 SetResourceSize(_self
->ob_itself
,
390 OSErr _err
= ResError();
391 if (_err
!= noErr
) return PyMac_Error(_err
);
398 static PyObject
*ResObj_GetNextFOND(_self
, _args
)
399 ResourceObject
*_self
;
402 PyObject
*_res
= NULL
;
404 if (!PyArg_ParseTuple(_args
, ""))
406 _rv
= GetNextFOND(_self
->ob_itself
);
408 OSErr _err
= ResError();
409 if (_err
!= noErr
) return PyMac_Error(_err
);
411 _res
= Py_BuildValue("O&",
416 static PyObject
*ResObj_as_Control(_self
, _args
)
417 ResourceObject
*_self
;
420 PyObject
*_res
= NULL
;
422 return CtlObj_New((ControlHandle
)_self
->ob_itself
);
426 static PyObject
*ResObj_as_Menu(_self
, _args
)
427 ResourceObject
*_self
;
430 PyObject
*_res
= NULL
;
432 return MenuObj_New((MenuHandle
)_self
->ob_itself
);
436 static PyMethodDef ResObj_methods
[] = {
437 {"HomeResFile", (PyCFunction
)ResObj_HomeResFile
, 1,
438 "() -> (short _rv)"},
439 {"LoadResource", (PyCFunction
)ResObj_LoadResource
, 1,
441 {"ReleaseResource", (PyCFunction
)ResObj_ReleaseResource
, 1,
443 {"DetachResource", (PyCFunction
)ResObj_DetachResource
, 1,
445 {"GetResAttrs", (PyCFunction
)ResObj_GetResAttrs
, 1,
446 "() -> (short _rv)"},
447 {"GetResInfo", (PyCFunction
)ResObj_GetResInfo
, 1,
448 "() -> (short theID, ResType theType, Str255 name)"},
449 {"SetResInfo", (PyCFunction
)ResObj_SetResInfo
, 1,
450 "(short theID, Str255 name) -> None"},
451 {"AddResource", (PyCFunction
)ResObj_AddResource
, 1,
452 "(ResType theType, short theID, Str255 name) -> None"},
453 {"GetResourceSizeOnDisk", (PyCFunction
)ResObj_GetResourceSizeOnDisk
, 1,
455 {"GetMaxResourceSize", (PyCFunction
)ResObj_GetMaxResourceSize
, 1,
457 {"RsrcMapEntry", (PyCFunction
)ResObj_RsrcMapEntry
, 1,
459 {"SetResAttrs", (PyCFunction
)ResObj_SetResAttrs
, 1,
460 "(short attrs) -> None"},
461 {"ChangedResource", (PyCFunction
)ResObj_ChangedResource
, 1,
463 {"RemoveResource", (PyCFunction
)ResObj_RemoveResource
, 1,
465 {"WriteResource", (PyCFunction
)ResObj_WriteResource
, 1,
467 {"SetResourceSize", (PyCFunction
)ResObj_SetResourceSize
, 1,
468 "(long newSize) -> None"},
469 {"GetNextFOND", (PyCFunction
)ResObj_GetNextFOND
, 1,
470 "() -> (Handle _rv)"},
471 {"as_Control", (PyCFunction
)ResObj_as_Control
, 1,
472 "Return this resource/handle as a Control"},
473 {"as_Menu", (PyCFunction
)ResObj_as_Menu
, 1,
474 "Return this resource/handle as a Menu"},
478 PyMethodChain ResObj_chain
= { ResObj_methods
, NULL
};
480 static PyObject
*ResObj_getattr(self
, name
)
481 ResourceObject
*self
;
485 if (strcmp(name
, "size") == 0)
486 return PyInt_FromLong(GetHandleSize(self
->ob_itself
));
487 if (strcmp(name
, "data") == 0) {
490 state
= HGetState(self
->ob_itself
);
491 HLock(self
->ob_itself
);
492 res
= PyString_FromStringAndSize(
494 GetHandleSize(self
->ob_itself
));
495 HUnlock(self
->ob_itself
);
496 HSetState(self
->ob_itself
, state
);
499 if (strcmp(name
, "__members__") == 0)
500 return Py_BuildValue("[ss]", "data", "size");
502 return Py_FindMethodInChain(&ResObj_chain
, (PyObject
*)self
, name
);
506 ResObj_setattr(self
, name
, value
)
507 ResourceObject
*self
;
514 if (strcmp(name
, "data") != 0 || value
== NULL
)
516 if ( !PyString_Check(value
) )
518 size
= PyString_Size(value
);
519 data
= PyString_AsString(value
);
520 /* XXXX Do I need the GetState/SetState calls? */
521 SetHandleSize(self
->ob_itself
, size
);
524 HLock(self
->ob_itself
);
525 memcpy((char *)*self
->ob_itself
, data
, size
);
526 HUnlock(self
->ob_itself
);
527 /* XXXX Should I do the Changed call immedeately? */
532 PyTypeObject Resource_Type
= {
533 PyObject_HEAD_INIT(&PyType_Type
)
535 "Resource", /*tp_name*/
536 sizeof(ResourceObject
), /*tp_basicsize*/
539 (destructor
) ResObj_dealloc
, /*tp_dealloc*/
541 (getattrfunc
) ResObj_getattr
, /*tp_getattr*/
542 (setattrfunc
) ResObj_setattr
, /*tp_setattr*/
545 /* -------------------- End object type Resource -------------------- */
548 static PyObject
*Res_InitResources(_self
, _args
)
552 PyObject
*_res
= NULL
;
554 if (!PyArg_ParseTuple(_args
, ""))
556 _rv
= InitResources();
558 OSErr _err
= ResError();
559 if (_err
!= noErr
) return PyMac_Error(_err
);
561 _res
= Py_BuildValue("h",
566 static PyObject
*Res_RsrcZoneInit(_self
, _args
)
570 PyObject
*_res
= NULL
;
571 if (!PyArg_ParseTuple(_args
, ""))
575 OSErr _err
= ResError();
576 if (_err
!= noErr
) return PyMac_Error(_err
);
583 static PyObject
*Res_CloseResFile(_self
, _args
)
587 PyObject
*_res
= NULL
;
589 if (!PyArg_ParseTuple(_args
, "h",
592 CloseResFile(refNum
);
594 OSErr _err
= ResError();
595 if (_err
!= noErr
) return PyMac_Error(_err
);
602 static PyObject
*Res_ResError(_self
, _args
)
606 PyObject
*_res
= NULL
;
608 if (!PyArg_ParseTuple(_args
, ""))
612 OSErr _err
= ResError();
613 if (_err
!= noErr
) return PyMac_Error(_err
);
615 _res
= Py_BuildValue("h",
620 static PyObject
*Res_CurResFile(_self
, _args
)
624 PyObject
*_res
= NULL
;
626 if (!PyArg_ParseTuple(_args
, ""))
630 OSErr _err
= ResError();
631 if (_err
!= noErr
) return PyMac_Error(_err
);
633 _res
= Py_BuildValue("h",
638 static PyObject
*Res_CreateResFile(_self
, _args
)
642 PyObject
*_res
= NULL
;
644 if (!PyArg_ParseTuple(_args
, "O&",
645 PyMac_GetStr255
, fileName
))
647 CreateResFile(fileName
);
649 OSErr _err
= ResError();
650 if (_err
!= noErr
) return PyMac_Error(_err
);
657 static PyObject
*Res_OpenResFile(_self
, _args
)
661 PyObject
*_res
= NULL
;
664 if (!PyArg_ParseTuple(_args
, "O&",
665 PyMac_GetStr255
, fileName
))
667 _rv
= OpenResFile(fileName
);
669 OSErr _err
= ResError();
670 if (_err
!= noErr
) return PyMac_Error(_err
);
672 _res
= Py_BuildValue("h",
677 static PyObject
*Res_UseResFile(_self
, _args
)
681 PyObject
*_res
= NULL
;
683 if (!PyArg_ParseTuple(_args
, "h",
688 OSErr _err
= ResError();
689 if (_err
!= noErr
) return PyMac_Error(_err
);
696 static PyObject
*Res_CountTypes(_self
, _args
)
700 PyObject
*_res
= NULL
;
702 if (!PyArg_ParseTuple(_args
, ""))
706 OSErr _err
= ResError();
707 if (_err
!= noErr
) return PyMac_Error(_err
);
709 _res
= Py_BuildValue("h",
714 static PyObject
*Res_Count1Types(_self
, _args
)
718 PyObject
*_res
= NULL
;
720 if (!PyArg_ParseTuple(_args
, ""))
724 OSErr _err
= ResError();
725 if (_err
!= noErr
) return PyMac_Error(_err
);
727 _res
= Py_BuildValue("h",
732 static PyObject
*Res_GetIndType(_self
, _args
)
736 PyObject
*_res
= NULL
;
739 if (!PyArg_ParseTuple(_args
, "h",
745 OSErr _err
= ResError();
746 if (_err
!= noErr
) return PyMac_Error(_err
);
748 _res
= Py_BuildValue("O&",
749 PyMac_BuildOSType
, theType
);
753 static PyObject
*Res_Get1IndType(_self
, _args
)
757 PyObject
*_res
= NULL
;
760 if (!PyArg_ParseTuple(_args
, "h",
763 Get1IndType(&theType
,
766 OSErr _err
= ResError();
767 if (_err
!= noErr
) return PyMac_Error(_err
);
769 _res
= Py_BuildValue("O&",
770 PyMac_BuildOSType
, theType
);
774 static PyObject
*Res_SetResLoad(_self
, _args
)
778 PyObject
*_res
= NULL
;
780 if (!PyArg_ParseTuple(_args
, "b",
785 OSErr _err
= ResError();
786 if (_err
!= noErr
) return PyMac_Error(_err
);
793 static PyObject
*Res_CountResources(_self
, _args
)
797 PyObject
*_res
= NULL
;
800 if (!PyArg_ParseTuple(_args
, "O&",
801 PyMac_GetOSType
, &theType
))
803 _rv
= CountResources(theType
);
805 OSErr _err
= ResError();
806 if (_err
!= noErr
) return PyMac_Error(_err
);
808 _res
= Py_BuildValue("h",
813 static PyObject
*Res_Count1Resources(_self
, _args
)
817 PyObject
*_res
= NULL
;
820 if (!PyArg_ParseTuple(_args
, "O&",
821 PyMac_GetOSType
, &theType
))
823 _rv
= Count1Resources(theType
);
825 OSErr _err
= ResError();
826 if (_err
!= noErr
) return PyMac_Error(_err
);
828 _res
= Py_BuildValue("h",
833 static PyObject
*Res_GetIndResource(_self
, _args
)
837 PyObject
*_res
= NULL
;
841 if (!PyArg_ParseTuple(_args
, "O&h",
842 PyMac_GetOSType
, &theType
,
845 _rv
= GetIndResource(theType
,
848 OSErr _err
= ResError();
849 if (_err
!= noErr
) return PyMac_Error(_err
);
851 _res
= Py_BuildValue("O&",
856 static PyObject
*Res_Get1IndResource(_self
, _args
)
860 PyObject
*_res
= NULL
;
864 if (!PyArg_ParseTuple(_args
, "O&h",
865 PyMac_GetOSType
, &theType
,
868 _rv
= Get1IndResource(theType
,
871 OSErr _err
= ResError();
872 if (_err
!= noErr
) return PyMac_Error(_err
);
874 _res
= Py_BuildValue("O&",
879 static PyObject
*Res_GetResource(_self
, _args
)
883 PyObject
*_res
= NULL
;
887 if (!PyArg_ParseTuple(_args
, "O&h",
888 PyMac_GetOSType
, &theType
,
891 _rv
= GetResource(theType
,
894 OSErr _err
= ResError();
895 if (_err
!= noErr
) return PyMac_Error(_err
);
897 _res
= Py_BuildValue("O&",
902 static PyObject
*Res_Get1Resource(_self
, _args
)
906 PyObject
*_res
= NULL
;
910 if (!PyArg_ParseTuple(_args
, "O&h",
911 PyMac_GetOSType
, &theType
,
914 _rv
= Get1Resource(theType
,
917 OSErr _err
= ResError();
918 if (_err
!= noErr
) return PyMac_Error(_err
);
920 _res
= Py_BuildValue("O&",
925 static PyObject
*Res_GetNamedResource(_self
, _args
)
929 PyObject
*_res
= NULL
;
933 if (!PyArg_ParseTuple(_args
, "O&O&",
934 PyMac_GetOSType
, &theType
,
935 PyMac_GetStr255
, name
))
937 _rv
= GetNamedResource(theType
,
940 OSErr _err
= ResError();
941 if (_err
!= noErr
) return PyMac_Error(_err
);
943 _res
= Py_BuildValue("O&",
948 static PyObject
*Res_Get1NamedResource(_self
, _args
)
952 PyObject
*_res
= NULL
;
956 if (!PyArg_ParseTuple(_args
, "O&O&",
957 PyMac_GetOSType
, &theType
,
958 PyMac_GetStr255
, name
))
960 _rv
= Get1NamedResource(theType
,
963 OSErr _err
= ResError();
964 if (_err
!= noErr
) return PyMac_Error(_err
);
966 _res
= Py_BuildValue("O&",
971 static PyObject
*Res_UniqueID(_self
, _args
)
975 PyObject
*_res
= NULL
;
978 if (!PyArg_ParseTuple(_args
, "O&",
979 PyMac_GetOSType
, &theType
))
981 _rv
= UniqueID(theType
);
983 OSErr _err
= ResError();
984 if (_err
!= noErr
) return PyMac_Error(_err
);
986 _res
= Py_BuildValue("h",
991 static PyObject
*Res_Unique1ID(_self
, _args
)
995 PyObject
*_res
= NULL
;
998 if (!PyArg_ParseTuple(_args
, "O&",
999 PyMac_GetOSType
, &theType
))
1001 _rv
= Unique1ID(theType
);
1003 OSErr _err
= ResError();
1004 if (_err
!= noErr
) return PyMac_Error(_err
);
1006 _res
= Py_BuildValue("h",
1011 static PyObject
*Res_UpdateResFile(_self
, _args
)
1015 PyObject
*_res
= NULL
;
1017 if (!PyArg_ParseTuple(_args
, "h",
1020 UpdateResFile(refNum
);
1022 OSErr _err
= ResError();
1023 if (_err
!= noErr
) return PyMac_Error(_err
);
1030 static PyObject
*Res_SetResPurge(_self
, _args
)
1034 PyObject
*_res
= NULL
;
1036 if (!PyArg_ParseTuple(_args
, "b",
1039 SetResPurge(install
);
1041 OSErr _err
= ResError();
1042 if (_err
!= noErr
) return PyMac_Error(_err
);
1049 static PyObject
*Res_GetResFileAttrs(_self
, _args
)
1053 PyObject
*_res
= NULL
;
1056 if (!PyArg_ParseTuple(_args
, "h",
1059 _rv
= GetResFileAttrs(refNum
);
1061 OSErr _err
= ResError();
1062 if (_err
!= noErr
) return PyMac_Error(_err
);
1064 _res
= Py_BuildValue("h",
1069 static PyObject
*Res_SetResFileAttrs(_self
, _args
)
1073 PyObject
*_res
= NULL
;
1076 if (!PyArg_ParseTuple(_args
, "hh",
1080 SetResFileAttrs(refNum
,
1083 OSErr _err
= ResError();
1084 if (_err
!= noErr
) return PyMac_Error(_err
);
1091 static PyObject
*Res_OpenRFPerm(_self
, _args
)
1095 PyObject
*_res
= NULL
;
1099 SignedByte permission
;
1100 if (!PyArg_ParseTuple(_args
, "O&hb",
1101 PyMac_GetStr255
, fileName
,
1105 _rv
= OpenRFPerm(fileName
,
1109 OSErr _err
= ResError();
1110 if (_err
!= noErr
) return PyMac_Error(_err
);
1112 _res
= Py_BuildValue("h",
1117 static PyObject
*Res_RGetResource(_self
, _args
)
1121 PyObject
*_res
= NULL
;
1125 if (!PyArg_ParseTuple(_args
, "O&h",
1126 PyMac_GetOSType
, &theType
,
1129 _rv
= RGetResource(theType
,
1132 OSErr _err
= ResError();
1133 if (_err
!= noErr
) return PyMac_Error(_err
);
1135 _res
= Py_BuildValue("O&",
1140 static PyObject
*Res_HOpenResFile(_self
, _args
)
1144 PyObject
*_res
= NULL
;
1149 SignedByte permission
;
1150 if (!PyArg_ParseTuple(_args
, "hlO&b",
1153 PyMac_GetStr255
, fileName
,
1156 _rv
= HOpenResFile(vRefNum
,
1161 OSErr _err
= ResError();
1162 if (_err
!= noErr
) return PyMac_Error(_err
);
1164 _res
= Py_BuildValue("h",
1169 static PyObject
*Res_HCreateResFile(_self
, _args
)
1173 PyObject
*_res
= NULL
;
1177 if (!PyArg_ParseTuple(_args
, "hlO&",
1180 PyMac_GetStr255
, fileName
))
1182 HCreateResFile(vRefNum
,
1186 OSErr _err
= ResError();
1187 if (_err
!= noErr
) return PyMac_Error(_err
);
1194 static PyObject
*Res_FSpOpenResFile(_self
, _args
)
1198 PyObject
*_res
= NULL
;
1201 SignedByte permission
;
1202 if (!PyArg_ParseTuple(_args
, "O&b",
1203 PyMac_GetFSSpec
, &spec
,
1206 _rv
= FSpOpenResFile(&spec
,
1209 OSErr _err
= ResError();
1210 if (_err
!= noErr
) return PyMac_Error(_err
);
1212 _res
= Py_BuildValue("h",
1217 static PyObject
*Res_FSpCreateResFile(_self
, _args
)
1221 PyObject
*_res
= NULL
;
1225 ScriptCode scriptTag
;
1226 if (!PyArg_ParseTuple(_args
, "O&O&O&h",
1227 PyMac_GetFSSpec
, &spec
,
1228 PyMac_GetOSType
, &creator
,
1229 PyMac_GetOSType
, &fileType
,
1232 FSpCreateResFile(&spec
,
1237 OSErr _err
= ResError();
1238 if (_err
!= noErr
) return PyMac_Error(_err
);
1245 static PyObject
*Res_Resource(_self
, _args
)
1249 PyObject
*_res
= NULL
;
1255 if (!PyArg_ParseTuple(_args
, "s#", &buf
, &len
))
1263 memcpy(*h
, buf
, len
);
1265 return (PyObject
*)ResObj_New(h
);
1269 static PyMethodDef Res_methods
[] = {
1270 {"InitResources", (PyCFunction
)Res_InitResources
, 1,
1271 "() -> (short _rv)"},
1272 {"RsrcZoneInit", (PyCFunction
)Res_RsrcZoneInit
, 1,
1274 {"CloseResFile", (PyCFunction
)Res_CloseResFile
, 1,
1275 "(short refNum) -> None"},
1276 {"ResError", (PyCFunction
)Res_ResError
, 1,
1277 "() -> (short _rv)"},
1278 {"CurResFile", (PyCFunction
)Res_CurResFile
, 1,
1279 "() -> (short _rv)"},
1280 {"CreateResFile", (PyCFunction
)Res_CreateResFile
, 1,
1281 "(Str255 fileName) -> None"},
1282 {"OpenResFile", (PyCFunction
)Res_OpenResFile
, 1,
1283 "(Str255 fileName) -> (short _rv)"},
1284 {"UseResFile", (PyCFunction
)Res_UseResFile
, 1,
1285 "(short refNum) -> None"},
1286 {"CountTypes", (PyCFunction
)Res_CountTypes
, 1,
1287 "() -> (short _rv)"},
1288 {"Count1Types", (PyCFunction
)Res_Count1Types
, 1,
1289 "() -> (short _rv)"},
1290 {"GetIndType", (PyCFunction
)Res_GetIndType
, 1,
1291 "(short index) -> (ResType theType)"},
1292 {"Get1IndType", (PyCFunction
)Res_Get1IndType
, 1,
1293 "(short index) -> (ResType theType)"},
1294 {"SetResLoad", (PyCFunction
)Res_SetResLoad
, 1,
1295 "(Boolean load) -> None"},
1296 {"CountResources", (PyCFunction
)Res_CountResources
, 1,
1297 "(ResType theType) -> (short _rv)"},
1298 {"Count1Resources", (PyCFunction
)Res_Count1Resources
, 1,
1299 "(ResType theType) -> (short _rv)"},
1300 {"GetIndResource", (PyCFunction
)Res_GetIndResource
, 1,
1301 "(ResType theType, short index) -> (Handle _rv)"},
1302 {"Get1IndResource", (PyCFunction
)Res_Get1IndResource
, 1,
1303 "(ResType theType, short index) -> (Handle _rv)"},
1304 {"GetResource", (PyCFunction
)Res_GetResource
, 1,
1305 "(ResType theType, short theID) -> (Handle _rv)"},
1306 {"Get1Resource", (PyCFunction
)Res_Get1Resource
, 1,
1307 "(ResType theType, short theID) -> (Handle _rv)"},
1308 {"GetNamedResource", (PyCFunction
)Res_GetNamedResource
, 1,
1309 "(ResType theType, Str255 name) -> (Handle _rv)"},
1310 {"Get1NamedResource", (PyCFunction
)Res_Get1NamedResource
, 1,
1311 "(ResType theType, Str255 name) -> (Handle _rv)"},
1312 {"UniqueID", (PyCFunction
)Res_UniqueID
, 1,
1313 "(ResType theType) -> (short _rv)"},
1314 {"Unique1ID", (PyCFunction
)Res_Unique1ID
, 1,
1315 "(ResType theType) -> (short _rv)"},
1316 {"UpdateResFile", (PyCFunction
)Res_UpdateResFile
, 1,
1317 "(short refNum) -> None"},
1318 {"SetResPurge", (PyCFunction
)Res_SetResPurge
, 1,
1319 "(Boolean install) -> None"},
1320 {"GetResFileAttrs", (PyCFunction
)Res_GetResFileAttrs
, 1,
1321 "(short refNum) -> (short _rv)"},
1322 {"SetResFileAttrs", (PyCFunction
)Res_SetResFileAttrs
, 1,
1323 "(short refNum, short attrs) -> None"},
1324 {"OpenRFPerm", (PyCFunction
)Res_OpenRFPerm
, 1,
1325 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
1326 {"RGetResource", (PyCFunction
)Res_RGetResource
, 1,
1327 "(ResType theType, short theID) -> (Handle _rv)"},
1328 {"HOpenResFile", (PyCFunction
)Res_HOpenResFile
, 1,
1329 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
1330 {"HCreateResFile", (PyCFunction
)Res_HCreateResFile
, 1,
1331 "(short vRefNum, long dirID, Str255 fileName) -> None"},
1332 {"FSpOpenResFile", (PyCFunction
)Res_FSpOpenResFile
, 1,
1333 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
1334 {"FSpCreateResFile", (PyCFunction
)Res_FSpCreateResFile
, 1,
1335 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
1336 {"Resource", (PyCFunction
)Res_Resource
, 1,
1337 "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"},
1344 /* Alternative version of ResObj_New, which returns None for null argument */
1345 PyObject
*OptResObj_New(itself
)
1348 if (itself
== NULL
) {
1352 return ResObj_New(itself
);
1355 OptResObj_Convert(v
, p_itself
)
1359 if ( v
== Py_None
) {
1363 if (!ResObj_Check(v
))
1365 PyErr_SetString(PyExc_TypeError
, "Resource required");
1368 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
1383 m
= Py_InitModule("Res", Res_methods
);
1384 d
= PyModule_GetDict(m
);
1385 Res_Error
= PyMac_GetOSErrException();
1386 if (Res_Error
== NULL
||
1387 PyDict_SetItemString(d
, "Error", Res_Error
) != 0)
1388 Py_FatalError("can't initialize Res.Error");
1391 /* ========================= End module Res ========================= */