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
)
79 PyErr_SetString(PyExc_TypeError
, "Resource required");
82 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
86 static void ResObj_dealloc(self
)
89 /* Cleanup of self->ob_itself goes here */
93 static PyObject
*ResObj_HomeResFile(_self
, _args
)
94 ResourceObject
*_self
;
97 PyObject
*_res
= NULL
;
99 if (!PyArg_ParseTuple(_args
, ""))
101 _rv
= HomeResFile(_self
->ob_itself
);
103 OSErr _err
= ResError();
104 if (_err
!= noErr
) return PyMac_Error(_err
);
106 _res
= Py_BuildValue("h",
111 static PyObject
*ResObj_MacLoadResource(_self
, _args
)
112 ResourceObject
*_self
;
115 PyObject
*_res
= NULL
;
116 if (!PyArg_ParseTuple(_args
, ""))
118 MacLoadResource(_self
->ob_itself
);
120 OSErr _err
= ResError();
121 if (_err
!= noErr
) return PyMac_Error(_err
);
128 static PyObject
*ResObj_ReleaseResource(_self
, _args
)
129 ResourceObject
*_self
;
132 PyObject
*_res
= NULL
;
133 if (!PyArg_ParseTuple(_args
, ""))
135 ReleaseResource(_self
->ob_itself
);
137 OSErr _err
= ResError();
138 if (_err
!= noErr
) return PyMac_Error(_err
);
145 static PyObject
*ResObj_DetachResource(_self
, _args
)
146 ResourceObject
*_self
;
149 PyObject
*_res
= NULL
;
150 if (!PyArg_ParseTuple(_args
, ""))
152 DetachResource(_self
->ob_itself
);
154 OSErr _err
= ResError();
155 if (_err
!= noErr
) return PyMac_Error(_err
);
162 static PyObject
*ResObj_GetResAttrs(_self
, _args
)
163 ResourceObject
*_self
;
166 PyObject
*_res
= NULL
;
168 if (!PyArg_ParseTuple(_args
, ""))
170 _rv
= GetResAttrs(_self
->ob_itself
);
172 OSErr _err
= ResError();
173 if (_err
!= noErr
) return PyMac_Error(_err
);
175 _res
= Py_BuildValue("h",
180 static PyObject
*ResObj_GetResInfo(_self
, _args
)
181 ResourceObject
*_self
;
184 PyObject
*_res
= NULL
;
188 if (!PyArg_ParseTuple(_args
, ""))
190 GetResInfo(_self
->ob_itself
,
195 OSErr _err
= ResError();
196 if (_err
!= noErr
) return PyMac_Error(_err
);
198 _res
= Py_BuildValue("hO&O&",
200 PyMac_BuildOSType
, theType
,
201 PyMac_BuildStr255
, name
);
205 static PyObject
*ResObj_SetResInfo(_self
, _args
)
206 ResourceObject
*_self
;
209 PyObject
*_res
= NULL
;
212 if (!PyArg_ParseTuple(_args
, "hO&",
214 PyMac_GetStr255
, name
))
216 SetResInfo(_self
->ob_itself
,
220 OSErr _err
= ResError();
221 if (_err
!= noErr
) return PyMac_Error(_err
);
228 static PyObject
*ResObj_AddResource(_self
, _args
)
229 ResourceObject
*_self
;
232 PyObject
*_res
= NULL
;
236 if (!PyArg_ParseTuple(_args
, "O&hO&",
237 PyMac_GetOSType
, &theType
,
239 PyMac_GetStr255
, name
))
241 AddResource(_self
->ob_itself
,
246 OSErr _err
= ResError();
247 if (_err
!= noErr
) return PyMac_Error(_err
);
254 static PyObject
*ResObj_GetResourceSizeOnDisk(_self
, _args
)
255 ResourceObject
*_self
;
258 PyObject
*_res
= NULL
;
260 if (!PyArg_ParseTuple(_args
, ""))
262 _rv
= GetResourceSizeOnDisk(_self
->ob_itself
);
264 OSErr _err
= ResError();
265 if (_err
!= noErr
) return PyMac_Error(_err
);
267 _res
= Py_BuildValue("l",
272 static PyObject
*ResObj_GetMaxResourceSize(_self
, _args
)
273 ResourceObject
*_self
;
276 PyObject
*_res
= NULL
;
278 if (!PyArg_ParseTuple(_args
, ""))
280 _rv
= GetMaxResourceSize(_self
->ob_itself
);
282 OSErr _err
= ResError();
283 if (_err
!= noErr
) return PyMac_Error(_err
);
285 _res
= Py_BuildValue("l",
290 static PyObject
*ResObj_RsrcMapEntry(_self
, _args
)
291 ResourceObject
*_self
;
294 PyObject
*_res
= NULL
;
296 if (!PyArg_ParseTuple(_args
, ""))
298 _rv
= RsrcMapEntry(_self
->ob_itself
);
300 OSErr _err
= ResError();
301 if (_err
!= noErr
) return PyMac_Error(_err
);
303 _res
= Py_BuildValue("l",
308 static PyObject
*ResObj_SetResAttrs(_self
, _args
)
309 ResourceObject
*_self
;
312 PyObject
*_res
= NULL
;
314 if (!PyArg_ParseTuple(_args
, "h",
317 SetResAttrs(_self
->ob_itself
,
320 OSErr _err
= ResError();
321 if (_err
!= noErr
) return PyMac_Error(_err
);
328 static PyObject
*ResObj_ChangedResource(_self
, _args
)
329 ResourceObject
*_self
;
332 PyObject
*_res
= NULL
;
333 if (!PyArg_ParseTuple(_args
, ""))
335 ChangedResource(_self
->ob_itself
);
337 OSErr _err
= ResError();
338 if (_err
!= noErr
) return PyMac_Error(_err
);
345 static PyObject
*ResObj_RemoveResource(_self
, _args
)
346 ResourceObject
*_self
;
349 PyObject
*_res
= NULL
;
350 if (!PyArg_ParseTuple(_args
, ""))
352 RemoveResource(_self
->ob_itself
);
354 OSErr _err
= ResError();
355 if (_err
!= noErr
) return PyMac_Error(_err
);
362 static PyObject
*ResObj_WriteResource(_self
, _args
)
363 ResourceObject
*_self
;
366 PyObject
*_res
= NULL
;
367 if (!PyArg_ParseTuple(_args
, ""))
369 WriteResource(_self
->ob_itself
);
371 OSErr _err
= ResError();
372 if (_err
!= noErr
) return PyMac_Error(_err
);
379 static PyObject
*ResObj_SetResourceSize(_self
, _args
)
380 ResourceObject
*_self
;
383 PyObject
*_res
= NULL
;
385 if (!PyArg_ParseTuple(_args
, "l",
388 SetResourceSize(_self
->ob_itself
,
391 OSErr _err
= ResError();
392 if (_err
!= noErr
) return PyMac_Error(_err
);
399 static PyObject
*ResObj_GetNextFOND(_self
, _args
)
400 ResourceObject
*_self
;
403 PyObject
*_res
= NULL
;
405 if (!PyArg_ParseTuple(_args
, ""))
407 _rv
= GetNextFOND(_self
->ob_itself
);
409 OSErr _err
= ResError();
410 if (_err
!= noErr
) return PyMac_Error(_err
);
412 _res
= Py_BuildValue("O&",
417 static PyObject
*ResObj_as_Control(_self
, _args
)
418 ResourceObject
*_self
;
421 PyObject
*_res
= NULL
;
423 return CtlObj_New((ControlHandle
)_self
->ob_itself
);
427 static PyObject
*ResObj_as_Menu(_self
, _args
)
428 ResourceObject
*_self
;
431 PyObject
*_res
= NULL
;
433 return MenuObj_New((MenuHandle
)_self
->ob_itself
);
437 static PyObject
*ResObj_LoadResource(_self
, _args
)
438 ResourceObject
*_self
;
441 PyObject
*_res
= NULL
;
442 if (!PyArg_ParseTuple(_args
, ""))
444 LoadResource(_self
->ob_itself
);
446 OSErr _err
= ResError();
447 if (_err
!= noErr
) return PyMac_Error(_err
);
454 static PyMethodDef ResObj_methods
[] = {
455 {"HomeResFile", (PyCFunction
)ResObj_HomeResFile
, 1,
456 "() -> (short _rv)"},
457 {"MacLoadResource", (PyCFunction
)ResObj_MacLoadResource
, 1,
459 {"ReleaseResource", (PyCFunction
)ResObj_ReleaseResource
, 1,
461 {"DetachResource", (PyCFunction
)ResObj_DetachResource
, 1,
463 {"GetResAttrs", (PyCFunction
)ResObj_GetResAttrs
, 1,
464 "() -> (short _rv)"},
465 {"GetResInfo", (PyCFunction
)ResObj_GetResInfo
, 1,
466 "() -> (short theID, ResType theType, Str255 name)"},
467 {"SetResInfo", (PyCFunction
)ResObj_SetResInfo
, 1,
468 "(short theID, Str255 name) -> None"},
469 {"AddResource", (PyCFunction
)ResObj_AddResource
, 1,
470 "(ResType theType, short theID, Str255 name) -> None"},
471 {"GetResourceSizeOnDisk", (PyCFunction
)ResObj_GetResourceSizeOnDisk
, 1,
473 {"GetMaxResourceSize", (PyCFunction
)ResObj_GetMaxResourceSize
, 1,
475 {"RsrcMapEntry", (PyCFunction
)ResObj_RsrcMapEntry
, 1,
477 {"SetResAttrs", (PyCFunction
)ResObj_SetResAttrs
, 1,
478 "(short attrs) -> None"},
479 {"ChangedResource", (PyCFunction
)ResObj_ChangedResource
, 1,
481 {"RemoveResource", (PyCFunction
)ResObj_RemoveResource
, 1,
483 {"WriteResource", (PyCFunction
)ResObj_WriteResource
, 1,
485 {"SetResourceSize", (PyCFunction
)ResObj_SetResourceSize
, 1,
486 "(long newSize) -> None"},
487 {"GetNextFOND", (PyCFunction
)ResObj_GetNextFOND
, 1,
488 "() -> (Handle _rv)"},
489 {"as_Control", (PyCFunction
)ResObj_as_Control
, 1,
490 "Return this resource/handle as a Control"},
491 {"as_Menu", (PyCFunction
)ResObj_as_Menu
, 1,
492 "Return this resource/handle as a Menu"},
493 {"LoadResource", (PyCFunction
)ResObj_LoadResource
, 1,
498 PyMethodChain ResObj_chain
= { ResObj_methods
, NULL
};
500 static PyObject
*ResObj_getattr(self
, name
)
501 ResourceObject
*self
;
505 if (strcmp(name
, "size") == 0)
506 return PyInt_FromLong(GetHandleSize(self
->ob_itself
));
507 if (strcmp(name
, "data") == 0) {
510 state
= HGetState(self
->ob_itself
);
511 HLock(self
->ob_itself
);
512 res
= PyString_FromStringAndSize(
514 GetHandleSize(self
->ob_itself
));
515 HUnlock(self
->ob_itself
);
516 HSetState(self
->ob_itself
, state
);
519 if (strcmp(name
, "__members__") == 0)
520 return Py_BuildValue("[ss]", "data", "size");
522 return Py_FindMethodInChain(&ResObj_chain
, (PyObject
*)self
, name
);
526 ResObj_setattr(self
, name
, value
)
527 ResourceObject
*self
;
534 if (strcmp(name
, "data") != 0 || value
== NULL
)
536 if ( !PyString_Check(value
) )
538 size
= PyString_Size(value
);
539 data
= PyString_AsString(value
);
540 /* XXXX Do I need the GetState/SetState calls? */
541 SetHandleSize(self
->ob_itself
, size
);
544 HLock(self
->ob_itself
);
545 memcpy((char *)*self
->ob_itself
, data
, size
);
546 HUnlock(self
->ob_itself
);
547 /* XXXX Should I do the Changed call immedeately? */
552 PyTypeObject Resource_Type
= {
553 PyObject_HEAD_INIT(&PyType_Type
)
555 "Resource", /*tp_name*/
556 sizeof(ResourceObject
), /*tp_basicsize*/
559 (destructor
) ResObj_dealloc
, /*tp_dealloc*/
561 (getattrfunc
) ResObj_getattr
, /*tp_getattr*/
562 (setattrfunc
) ResObj_setattr
, /*tp_setattr*/
565 /* -------------------- End object type Resource -------------------- */
568 static PyObject
*Res_InitResources(_self
, _args
)
572 PyObject
*_res
= NULL
;
574 if (!PyArg_ParseTuple(_args
, ""))
576 _rv
= InitResources();
578 OSErr _err
= ResError();
579 if (_err
!= noErr
) return PyMac_Error(_err
);
581 _res
= Py_BuildValue("h",
586 static PyObject
*Res_RsrcZoneInit(_self
, _args
)
590 PyObject
*_res
= NULL
;
591 if (!PyArg_ParseTuple(_args
, ""))
595 OSErr _err
= ResError();
596 if (_err
!= noErr
) return PyMac_Error(_err
);
603 static PyObject
*Res_CloseResFile(_self
, _args
)
607 PyObject
*_res
= NULL
;
609 if (!PyArg_ParseTuple(_args
, "h",
612 CloseResFile(refNum
);
614 OSErr _err
= ResError();
615 if (_err
!= noErr
) return PyMac_Error(_err
);
622 static PyObject
*Res_ResError(_self
, _args
)
626 PyObject
*_res
= NULL
;
628 if (!PyArg_ParseTuple(_args
, ""))
632 OSErr _err
= ResError();
633 if (_err
!= noErr
) return PyMac_Error(_err
);
635 _res
= Py_BuildValue("h",
640 static PyObject
*Res_CurResFile(_self
, _args
)
644 PyObject
*_res
= NULL
;
646 if (!PyArg_ParseTuple(_args
, ""))
650 OSErr _err
= ResError();
651 if (_err
!= noErr
) return PyMac_Error(_err
);
653 _res
= Py_BuildValue("h",
658 static PyObject
*Res_CreateResFile(_self
, _args
)
662 PyObject
*_res
= NULL
;
664 if (!PyArg_ParseTuple(_args
, "O&",
665 PyMac_GetStr255
, fileName
))
667 CreateResFile(fileName
);
669 OSErr _err
= ResError();
670 if (_err
!= noErr
) return PyMac_Error(_err
);
677 static PyObject
*Res_OpenResFile(_self
, _args
)
681 PyObject
*_res
= NULL
;
684 if (!PyArg_ParseTuple(_args
, "O&",
685 PyMac_GetStr255
, fileName
))
687 _rv
= OpenResFile(fileName
);
689 OSErr _err
= ResError();
690 if (_err
!= noErr
) return PyMac_Error(_err
);
692 _res
= Py_BuildValue("h",
697 static PyObject
*Res_UseResFile(_self
, _args
)
701 PyObject
*_res
= NULL
;
703 if (!PyArg_ParseTuple(_args
, "h",
708 OSErr _err
= ResError();
709 if (_err
!= noErr
) return PyMac_Error(_err
);
716 static PyObject
*Res_CountTypes(_self
, _args
)
720 PyObject
*_res
= NULL
;
722 if (!PyArg_ParseTuple(_args
, ""))
726 OSErr _err
= ResError();
727 if (_err
!= noErr
) return PyMac_Error(_err
);
729 _res
= Py_BuildValue("h",
734 static PyObject
*Res_Count1Types(_self
, _args
)
738 PyObject
*_res
= NULL
;
740 if (!PyArg_ParseTuple(_args
, ""))
744 OSErr _err
= ResError();
745 if (_err
!= noErr
) return PyMac_Error(_err
);
747 _res
= Py_BuildValue("h",
752 static PyObject
*Res_GetIndType(_self
, _args
)
756 PyObject
*_res
= NULL
;
759 if (!PyArg_ParseTuple(_args
, "h",
765 OSErr _err
= ResError();
766 if (_err
!= noErr
) return PyMac_Error(_err
);
768 _res
= Py_BuildValue("O&",
769 PyMac_BuildOSType
, theType
);
773 static PyObject
*Res_Get1IndType(_self
, _args
)
777 PyObject
*_res
= NULL
;
780 if (!PyArg_ParseTuple(_args
, "h",
783 Get1IndType(&theType
,
786 OSErr _err
= ResError();
787 if (_err
!= noErr
) return PyMac_Error(_err
);
789 _res
= Py_BuildValue("O&",
790 PyMac_BuildOSType
, theType
);
794 static PyObject
*Res_SetResLoad(_self
, _args
)
798 PyObject
*_res
= NULL
;
800 if (!PyArg_ParseTuple(_args
, "b",
805 OSErr _err
= ResError();
806 if (_err
!= noErr
) return PyMac_Error(_err
);
813 static PyObject
*Res_CountResources(_self
, _args
)
817 PyObject
*_res
= NULL
;
820 if (!PyArg_ParseTuple(_args
, "O&",
821 PyMac_GetOSType
, &theType
))
823 _rv
= CountResources(theType
);
825 OSErr _err
= ResError();
826 if (_err
!= noErr
) return PyMac_Error(_err
);
828 _res
= Py_BuildValue("h",
833 static PyObject
*Res_Count1Resources(_self
, _args
)
837 PyObject
*_res
= NULL
;
840 if (!PyArg_ParseTuple(_args
, "O&",
841 PyMac_GetOSType
, &theType
))
843 _rv
= Count1Resources(theType
);
845 OSErr _err
= ResError();
846 if (_err
!= noErr
) return PyMac_Error(_err
);
848 _res
= Py_BuildValue("h",
853 static PyObject
*Res_GetIndResource(_self
, _args
)
857 PyObject
*_res
= NULL
;
861 if (!PyArg_ParseTuple(_args
, "O&h",
862 PyMac_GetOSType
, &theType
,
865 _rv
= GetIndResource(theType
,
868 OSErr _err
= ResError();
869 if (_err
!= noErr
) return PyMac_Error(_err
);
871 _res
= Py_BuildValue("O&",
876 static PyObject
*Res_Get1IndResource(_self
, _args
)
880 PyObject
*_res
= NULL
;
884 if (!PyArg_ParseTuple(_args
, "O&h",
885 PyMac_GetOSType
, &theType
,
888 _rv
= Get1IndResource(theType
,
891 OSErr _err
= ResError();
892 if (_err
!= noErr
) return PyMac_Error(_err
);
894 _res
= Py_BuildValue("O&",
899 static PyObject
*Res_GetResource(_self
, _args
)
903 PyObject
*_res
= NULL
;
907 if (!PyArg_ParseTuple(_args
, "O&h",
908 PyMac_GetOSType
, &theType
,
911 _rv
= GetResource(theType
,
914 OSErr _err
= ResError();
915 if (_err
!= noErr
) return PyMac_Error(_err
);
917 _res
= Py_BuildValue("O&",
922 static PyObject
*Res_Get1Resource(_self
, _args
)
926 PyObject
*_res
= NULL
;
930 if (!PyArg_ParseTuple(_args
, "O&h",
931 PyMac_GetOSType
, &theType
,
934 _rv
= Get1Resource(theType
,
937 OSErr _err
= ResError();
938 if (_err
!= noErr
) return PyMac_Error(_err
);
940 _res
= Py_BuildValue("O&",
945 static PyObject
*Res_GetNamedResource(_self
, _args
)
949 PyObject
*_res
= NULL
;
953 if (!PyArg_ParseTuple(_args
, "O&O&",
954 PyMac_GetOSType
, &theType
,
955 PyMac_GetStr255
, name
))
957 _rv
= GetNamedResource(theType
,
960 OSErr _err
= ResError();
961 if (_err
!= noErr
) return PyMac_Error(_err
);
963 _res
= Py_BuildValue("O&",
968 static PyObject
*Res_Get1NamedResource(_self
, _args
)
972 PyObject
*_res
= NULL
;
976 if (!PyArg_ParseTuple(_args
, "O&O&",
977 PyMac_GetOSType
, &theType
,
978 PyMac_GetStr255
, name
))
980 _rv
= Get1NamedResource(theType
,
983 OSErr _err
= ResError();
984 if (_err
!= noErr
) return PyMac_Error(_err
);
986 _res
= Py_BuildValue("O&",
991 static PyObject
*Res_UniqueID(_self
, _args
)
995 PyObject
*_res
= NULL
;
998 if (!PyArg_ParseTuple(_args
, "O&",
999 PyMac_GetOSType
, &theType
))
1001 _rv
= UniqueID(theType
);
1003 OSErr _err
= ResError();
1004 if (_err
!= noErr
) return PyMac_Error(_err
);
1006 _res
= Py_BuildValue("h",
1011 static PyObject
*Res_Unique1ID(_self
, _args
)
1015 PyObject
*_res
= NULL
;
1018 if (!PyArg_ParseTuple(_args
, "O&",
1019 PyMac_GetOSType
, &theType
))
1021 _rv
= Unique1ID(theType
);
1023 OSErr _err
= ResError();
1024 if (_err
!= noErr
) return PyMac_Error(_err
);
1026 _res
= Py_BuildValue("h",
1031 static PyObject
*Res_UpdateResFile(_self
, _args
)
1035 PyObject
*_res
= NULL
;
1037 if (!PyArg_ParseTuple(_args
, "h",
1040 UpdateResFile(refNum
);
1042 OSErr _err
= ResError();
1043 if (_err
!= noErr
) return PyMac_Error(_err
);
1050 static PyObject
*Res_SetResPurge(_self
, _args
)
1054 PyObject
*_res
= NULL
;
1056 if (!PyArg_ParseTuple(_args
, "b",
1059 SetResPurge(install
);
1061 OSErr _err
= ResError();
1062 if (_err
!= noErr
) return PyMac_Error(_err
);
1069 static PyObject
*Res_GetResFileAttrs(_self
, _args
)
1073 PyObject
*_res
= NULL
;
1076 if (!PyArg_ParseTuple(_args
, "h",
1079 _rv
= GetResFileAttrs(refNum
);
1081 OSErr _err
= ResError();
1082 if (_err
!= noErr
) return PyMac_Error(_err
);
1084 _res
= Py_BuildValue("h",
1089 static PyObject
*Res_SetResFileAttrs(_self
, _args
)
1093 PyObject
*_res
= NULL
;
1096 if (!PyArg_ParseTuple(_args
, "hh",
1100 SetResFileAttrs(refNum
,
1103 OSErr _err
= ResError();
1104 if (_err
!= noErr
) return PyMac_Error(_err
);
1111 static PyObject
*Res_OpenRFPerm(_self
, _args
)
1115 PyObject
*_res
= NULL
;
1119 SignedByte permission
;
1120 if (!PyArg_ParseTuple(_args
, "O&hb",
1121 PyMac_GetStr255
, fileName
,
1125 _rv
= OpenRFPerm(fileName
,
1129 OSErr _err
= ResError();
1130 if (_err
!= noErr
) return PyMac_Error(_err
);
1132 _res
= Py_BuildValue("h",
1137 static PyObject
*Res_RGetResource(_self
, _args
)
1141 PyObject
*_res
= NULL
;
1145 if (!PyArg_ParseTuple(_args
, "O&h",
1146 PyMac_GetOSType
, &theType
,
1149 _rv
= RGetResource(theType
,
1152 OSErr _err
= ResError();
1153 if (_err
!= noErr
) return PyMac_Error(_err
);
1155 _res
= Py_BuildValue("O&",
1160 static PyObject
*Res_HOpenResFile(_self
, _args
)
1164 PyObject
*_res
= NULL
;
1169 SignedByte permission
;
1170 if (!PyArg_ParseTuple(_args
, "hlO&b",
1173 PyMac_GetStr255
, fileName
,
1176 _rv
= HOpenResFile(vRefNum
,
1181 OSErr _err
= ResError();
1182 if (_err
!= noErr
) return PyMac_Error(_err
);
1184 _res
= Py_BuildValue("h",
1189 static PyObject
*Res_HCreateResFile(_self
, _args
)
1193 PyObject
*_res
= NULL
;
1197 if (!PyArg_ParseTuple(_args
, "hlO&",
1200 PyMac_GetStr255
, fileName
))
1202 HCreateResFile(vRefNum
,
1206 OSErr _err
= ResError();
1207 if (_err
!= noErr
) return PyMac_Error(_err
);
1214 static PyObject
*Res_FSpOpenResFile(_self
, _args
)
1218 PyObject
*_res
= NULL
;
1221 SignedByte permission
;
1222 if (!PyArg_ParseTuple(_args
, "O&b",
1223 PyMac_GetFSSpec
, &spec
,
1226 _rv
= FSpOpenResFile(&spec
,
1229 OSErr _err
= ResError();
1230 if (_err
!= noErr
) return PyMac_Error(_err
);
1232 _res
= Py_BuildValue("h",
1237 static PyObject
*Res_FSpCreateResFile(_self
, _args
)
1241 PyObject
*_res
= NULL
;
1245 ScriptCode scriptTag
;
1246 if (!PyArg_ParseTuple(_args
, "O&O&O&h",
1247 PyMac_GetFSSpec
, &spec
,
1248 PyMac_GetOSType
, &creator
,
1249 PyMac_GetOSType
, &fileType
,
1252 FSpCreateResFile(&spec
,
1257 OSErr _err
= ResError();
1258 if (_err
!= noErr
) return PyMac_Error(_err
);
1265 static PyObject
*Res_Resource(_self
, _args
)
1269 PyObject
*_res
= NULL
;
1275 if (!PyArg_ParseTuple(_args
, "s#", &buf
, &len
))
1283 memcpy(*h
, buf
, len
);
1285 return (PyObject
*)ResObj_New(h
);
1289 static PyMethodDef Res_methods
[] = {
1290 {"InitResources", (PyCFunction
)Res_InitResources
, 1,
1291 "() -> (short _rv)"},
1292 {"RsrcZoneInit", (PyCFunction
)Res_RsrcZoneInit
, 1,
1294 {"CloseResFile", (PyCFunction
)Res_CloseResFile
, 1,
1295 "(short refNum) -> None"},
1296 {"ResError", (PyCFunction
)Res_ResError
, 1,
1297 "() -> (OSErr _rv)"},
1298 {"CurResFile", (PyCFunction
)Res_CurResFile
, 1,
1299 "() -> (short _rv)"},
1300 {"CreateResFile", (PyCFunction
)Res_CreateResFile
, 1,
1301 "(Str255 fileName) -> None"},
1302 {"OpenResFile", (PyCFunction
)Res_OpenResFile
, 1,
1303 "(Str255 fileName) -> (short _rv)"},
1304 {"UseResFile", (PyCFunction
)Res_UseResFile
, 1,
1305 "(short refNum) -> None"},
1306 {"CountTypes", (PyCFunction
)Res_CountTypes
, 1,
1307 "() -> (short _rv)"},
1308 {"Count1Types", (PyCFunction
)Res_Count1Types
, 1,
1309 "() -> (short _rv)"},
1310 {"GetIndType", (PyCFunction
)Res_GetIndType
, 1,
1311 "(short index) -> (ResType theType)"},
1312 {"Get1IndType", (PyCFunction
)Res_Get1IndType
, 1,
1313 "(short index) -> (ResType theType)"},
1314 {"SetResLoad", (PyCFunction
)Res_SetResLoad
, 1,
1315 "(Boolean load) -> None"},
1316 {"CountResources", (PyCFunction
)Res_CountResources
, 1,
1317 "(ResType theType) -> (short _rv)"},
1318 {"Count1Resources", (PyCFunction
)Res_Count1Resources
, 1,
1319 "(ResType theType) -> (short _rv)"},
1320 {"GetIndResource", (PyCFunction
)Res_GetIndResource
, 1,
1321 "(ResType theType, short index) -> (Handle _rv)"},
1322 {"Get1IndResource", (PyCFunction
)Res_Get1IndResource
, 1,
1323 "(ResType theType, short index) -> (Handle _rv)"},
1324 {"GetResource", (PyCFunction
)Res_GetResource
, 1,
1325 "(ResType theType, short theID) -> (Handle _rv)"},
1326 {"Get1Resource", (PyCFunction
)Res_Get1Resource
, 1,
1327 "(ResType theType, short theID) -> (Handle _rv)"},
1328 {"GetNamedResource", (PyCFunction
)Res_GetNamedResource
, 1,
1329 "(ResType theType, Str255 name) -> (Handle _rv)"},
1330 {"Get1NamedResource", (PyCFunction
)Res_Get1NamedResource
, 1,
1331 "(ResType theType, Str255 name) -> (Handle _rv)"},
1332 {"UniqueID", (PyCFunction
)Res_UniqueID
, 1,
1333 "(ResType theType) -> (short _rv)"},
1334 {"Unique1ID", (PyCFunction
)Res_Unique1ID
, 1,
1335 "(ResType theType) -> (short _rv)"},
1336 {"UpdateResFile", (PyCFunction
)Res_UpdateResFile
, 1,
1337 "(short refNum) -> None"},
1338 {"SetResPurge", (PyCFunction
)Res_SetResPurge
, 1,
1339 "(Boolean install) -> None"},
1340 {"GetResFileAttrs", (PyCFunction
)Res_GetResFileAttrs
, 1,
1341 "(short refNum) -> (short _rv)"},
1342 {"SetResFileAttrs", (PyCFunction
)Res_SetResFileAttrs
, 1,
1343 "(short refNum, short attrs) -> None"},
1344 {"OpenRFPerm", (PyCFunction
)Res_OpenRFPerm
, 1,
1345 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
1346 {"RGetResource", (PyCFunction
)Res_RGetResource
, 1,
1347 "(ResType theType, short theID) -> (Handle _rv)"},
1348 {"HOpenResFile", (PyCFunction
)Res_HOpenResFile
, 1,
1349 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
1350 {"HCreateResFile", (PyCFunction
)Res_HCreateResFile
, 1,
1351 "(short vRefNum, long dirID, Str255 fileName) -> None"},
1352 {"FSpOpenResFile", (PyCFunction
)Res_FSpOpenResFile
, 1,
1353 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
1354 {"FSpCreateResFile", (PyCFunction
)Res_FSpCreateResFile
, 1,
1355 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
1356 {"Resource", (PyCFunction
)Res_Resource
, 1,
1357 "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"},
1364 /* Alternative version of ResObj_New, which returns None for null argument */
1365 PyObject
*OptResObj_New(itself
)
1368 if (itself
== NULL
) {
1372 return ResObj_New(itself
);
1375 OptResObj_Convert(v
, p_itself
)
1379 if ( v
== Py_None
) {
1383 if (!ResObj_Check(v
))
1385 PyErr_SetString(PyExc_TypeError
, "Resource required");
1388 *p_itself
= ((ResourceObject
*)v
)->ob_itself
;
1403 m
= Py_InitModule("Res", Res_methods
);
1404 d
= PyModule_GetDict(m
);
1405 Res_Error
= PyMac_GetOSErrException();
1406 if (Res_Error
== NULL
||
1407 PyDict_SetItemString(d
, "Error", Res_Error
) != 0)
1408 Py_FatalError("can't initialize Res.Error");
1409 Resource_Type
.ob_type
= &PyType_Type
;
1410 Py_INCREF(&Resource_Type
);
1411 if (PyDict_SetItemString(d
, "ResourceType", (PyObject
*)&Resource_Type
) != 0)
1412 Py_FatalError("can't initialize ResourceType");
1415 /* ========================= End module Res ========================= */