blob: 8790080b57100ce3ef193bfe59c69cfaec4c4c7b [file] [log] [blame]
Guido van Rossum17448e21995-01-30 11:53:55 +00001
2/* =========================== Module Res =========================== */
3
4#include "Python.h"
5
6
7
Guido van Rossum17448e21995-01-30 11:53:55 +00008#include "macglue.h"
Jack Jansen9d8b96c2000-07-14 22:16:45 +00009#include "pymactoolbox.h"
Guido van Rossum9bcb6411995-02-05 16:54:27 +000010
Jack Jansenfa77e1a2001-05-22 21:56:42 +000011#ifdef WITHOUT_FRAMEWORKS
Guido van Rossum17448e21995-01-30 11:53:55 +000012#include <Resources.h>
Jack Janseneaf3c9b1997-08-15 14:36:45 +000013#include <string.h>
Jack Jansenfa77e1a2001-05-22 21:56:42 +000014#else
15#include <Carbon/Carbon.h>
16#endif
Guido van Rossum17448e21995-01-30 11:53:55 +000017
Jack Jansen0e04eec2001-05-17 21:58:34 +000018#ifdef USE_TOOLBOX_OBJECT_GLUE
19extern PyObject *_ResObj_New(Handle);
20extern int _ResObj_Convert(PyObject *, Handle *);
21extern PyObject *_OptResObj_New(Handle);
22extern int _OptResObj_Convert(PyObject *, Handle *);
23#define ResObj_New _ResObj_New
24#define ResObj_Convert _ResObj_Convert
25#define OptResObj_New _OptResObj_New
26#define OptResObj_Convert _OptResObj_Convert
27#endif
28
Jack Jansenadd03b62000-03-08 16:58:15 +000029/* Function to dispose a resource, with a "normal" calling sequence */
30static void
31PyMac_AutoDisposeHandle(Handle h)
32{
33 DisposeHandle(h);
34}
35
Guido van Rossum17448e21995-01-30 11:53:55 +000036static PyObject *Res_Error;
37
38/* ---------------------- Object type Resource ---------------------- */
39
40PyTypeObject Resource_Type;
41
42#define ResObj_Check(x) ((x)->ob_type == &Resource_Type)
43
44typedef struct ResourceObject {
45 PyObject_HEAD
46 Handle ob_itself;
Jack Jansenadd03b62000-03-08 16:58:15 +000047 void (*ob_freeit)(Handle ptr);
Guido van Rossum17448e21995-01-30 11:53:55 +000048} ResourceObject;
49
Jack Jansenfa77e1a2001-05-22 21:56:42 +000050PyObject *ResObj_New(Handle itself)
Guido van Rossum17448e21995-01-30 11:53:55 +000051{
52 ResourceObject *it;
53 if (itself == NULL) return PyMac_Error(resNotFound);
54 it = PyObject_NEW(ResourceObject, &Resource_Type);
55 if (it == NULL) return NULL;
56 it->ob_itself = itself;
Jack Jansenadd03b62000-03-08 16:58:15 +000057 it->ob_freeit = NULL;
Guido van Rossum17448e21995-01-30 11:53:55 +000058 return (PyObject *)it;
59}
Jack Jansenfa77e1a2001-05-22 21:56:42 +000060ResObj_Convert(PyObject *v, Handle *p_itself)
Guido van Rossum17448e21995-01-30 11:53:55 +000061{
62 if (!ResObj_Check(v))
63 {
Jack Jansen2d76c251999-12-12 22:57:29 +000064 PyObject *tmp;
65 if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) )
66 {
67 *p_itself = ((ResourceObject *)tmp)->ob_itself;
68 Py_DECREF(tmp);
69 return 1;
70 }
71 PyErr_Clear();
72 }
73 if (!ResObj_Check(v))
74 {
Guido van Rossum17448e21995-01-30 11:53:55 +000075 PyErr_SetString(PyExc_TypeError, "Resource required");
76 return 0;
77 }
78 *p_itself = ((ResourceObject *)v)->ob_itself;
79 return 1;
80}
81
Jack Jansenfa77e1a2001-05-22 21:56:42 +000082static void ResObj_dealloc(ResourceObject *self)
Guido van Rossum17448e21995-01-30 11:53:55 +000083{
Jack Jansenadd03b62000-03-08 16:58:15 +000084 if (self->ob_freeit && self->ob_itself)
85 {
86 self->ob_freeit(self->ob_itself);
87 }
88 self->ob_itself = NULL;
Guido van Rossum17448e21995-01-30 11:53:55 +000089 PyMem_DEL(self);
90}
91
Jack Jansenfa77e1a2001-05-22 21:56:42 +000092static PyObject *ResObj_HomeResFile(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +000093{
94 PyObject *_res = NULL;
95 short _rv;
96 if (!PyArg_ParseTuple(_args, ""))
97 return NULL;
98 _rv = HomeResFile(_self->ob_itself);
99 {
100 OSErr _err = ResError();
101 if (_err != noErr) return PyMac_Error(_err);
102 }
103 _res = Py_BuildValue("h",
104 _rv);
105 return _res;
106}
107
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000108static PyObject *ResObj_MacLoadResource(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000109{
110 PyObject *_res = NULL;
111 if (!PyArg_ParseTuple(_args, ""))
112 return NULL;
Jack Jansen1c4e6141998-04-21 15:23:55 +0000113 MacLoadResource(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000114 {
115 OSErr _err = ResError();
116 if (_err != noErr) return PyMac_Error(_err);
117 }
118 Py_INCREF(Py_None);
119 _res = Py_None;
120 return _res;
121}
122
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000123static PyObject *ResObj_ReleaseResource(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000124{
125 PyObject *_res = NULL;
126 if (!PyArg_ParseTuple(_args, ""))
127 return NULL;
128 ReleaseResource(_self->ob_itself);
129 {
130 OSErr _err = ResError();
131 if (_err != noErr) return PyMac_Error(_err);
132 }
133 Py_INCREF(Py_None);
134 _res = Py_None;
135 return _res;
136}
137
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000138static PyObject *ResObj_DetachResource(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000139{
140 PyObject *_res = NULL;
141 if (!PyArg_ParseTuple(_args, ""))
142 return NULL;
143 DetachResource(_self->ob_itself);
144 {
145 OSErr _err = ResError();
146 if (_err != noErr) return PyMac_Error(_err);
147 }
148 Py_INCREF(Py_None);
149 _res = Py_None;
150 return _res;
151}
152
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000153static PyObject *ResObj_GetResAttrs(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000154{
155 PyObject *_res = NULL;
156 short _rv;
157 if (!PyArg_ParseTuple(_args, ""))
158 return NULL;
159 _rv = GetResAttrs(_self->ob_itself);
160 {
161 OSErr _err = ResError();
162 if (_err != noErr) return PyMac_Error(_err);
163 }
164 _res = Py_BuildValue("h",
165 _rv);
166 return _res;
167}
168
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000169static PyObject *ResObj_GetResInfo(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000170{
171 PyObject *_res = NULL;
172 short theID;
173 ResType theType;
174 Str255 name;
175 if (!PyArg_ParseTuple(_args, ""))
176 return NULL;
177 GetResInfo(_self->ob_itself,
178 &theID,
179 &theType,
180 name);
181 {
182 OSErr _err = ResError();
183 if (_err != noErr) return PyMac_Error(_err);
184 }
185 _res = Py_BuildValue("hO&O&",
186 theID,
187 PyMac_BuildOSType, theType,
188 PyMac_BuildStr255, name);
189 return _res;
190}
191
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000192static PyObject *ResObj_SetResInfo(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000193{
194 PyObject *_res = NULL;
195 short theID;
196 Str255 name;
197 if (!PyArg_ParseTuple(_args, "hO&",
198 &theID,
199 PyMac_GetStr255, name))
200 return NULL;
201 SetResInfo(_self->ob_itself,
202 theID,
203 name);
204 {
205 OSErr _err = ResError();
206 if (_err != noErr) return PyMac_Error(_err);
207 }
208 Py_INCREF(Py_None);
209 _res = Py_None;
210 return _res;
211}
212
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000213static PyObject *ResObj_AddResource(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000214{
215 PyObject *_res = NULL;
216 ResType theType;
217 short theID;
218 Str255 name;
219 if (!PyArg_ParseTuple(_args, "O&hO&",
220 PyMac_GetOSType, &theType,
221 &theID,
222 PyMac_GetStr255, name))
223 return NULL;
224 AddResource(_self->ob_itself,
225 theType,
226 theID,
227 name);
228 {
229 OSErr _err = ResError();
230 if (_err != noErr) return PyMac_Error(_err);
231 }
232 Py_INCREF(Py_None);
233 _res = Py_None;
234 return _res;
235}
236
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000237static PyObject *ResObj_GetResourceSizeOnDisk(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000238{
239 PyObject *_res = NULL;
240 long _rv;
241 if (!PyArg_ParseTuple(_args, ""))
242 return NULL;
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000243 _rv = GetResourceSizeOnDisk(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000244 {
245 OSErr _err = ResError();
246 if (_err != noErr) return PyMac_Error(_err);
247 }
248 _res = Py_BuildValue("l",
249 _rv);
250 return _res;
251}
252
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000253static PyObject *ResObj_GetMaxResourceSize(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000254{
255 PyObject *_res = NULL;
256 long _rv;
257 if (!PyArg_ParseTuple(_args, ""))
258 return NULL;
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000259 _rv = GetMaxResourceSize(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000260 {
261 OSErr _err = ResError();
262 if (_err != noErr) return PyMac_Error(_err);
263 }
264 _res = Py_BuildValue("l",
265 _rv);
266 return _res;
267}
268
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000269#if TARGET_API_MAC_OS8
Jack Jansene79dc762000-06-02 21:35:07 +0000270
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000271static PyObject *ResObj_RsrcMapEntry(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000272{
273 PyObject *_res = NULL;
274 long _rv;
275 if (!PyArg_ParseTuple(_args, ""))
276 return NULL;
277 _rv = RsrcMapEntry(_self->ob_itself);
278 {
279 OSErr _err = ResError();
280 if (_err != noErr) return PyMac_Error(_err);
281 }
282 _res = Py_BuildValue("l",
283 _rv);
284 return _res;
285}
Jack Jansene79dc762000-06-02 21:35:07 +0000286#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000287
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000288static PyObject *ResObj_SetResAttrs(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000289{
290 PyObject *_res = NULL;
291 short attrs;
292 if (!PyArg_ParseTuple(_args, "h",
293 &attrs))
294 return NULL;
295 SetResAttrs(_self->ob_itself,
296 attrs);
297 {
298 OSErr _err = ResError();
299 if (_err != noErr) return PyMac_Error(_err);
300 }
301 Py_INCREF(Py_None);
302 _res = Py_None;
303 return _res;
304}
305
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000306static PyObject *ResObj_ChangedResource(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000307{
308 PyObject *_res = NULL;
309 if (!PyArg_ParseTuple(_args, ""))
310 return NULL;
311 ChangedResource(_self->ob_itself);
312 {
313 OSErr _err = ResError();
314 if (_err != noErr) return PyMac_Error(_err);
315 }
316 Py_INCREF(Py_None);
317 _res = Py_None;
318 return _res;
319}
320
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000321static PyObject *ResObj_RemoveResource(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000322{
323 PyObject *_res = NULL;
324 if (!PyArg_ParseTuple(_args, ""))
325 return NULL;
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000326 RemoveResource(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000327 {
328 OSErr _err = ResError();
329 if (_err != noErr) return PyMac_Error(_err);
330 }
331 Py_INCREF(Py_None);
332 _res = Py_None;
333 return _res;
334}
335
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000336static PyObject *ResObj_WriteResource(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000337{
338 PyObject *_res = NULL;
339 if (!PyArg_ParseTuple(_args, ""))
340 return NULL;
341 WriteResource(_self->ob_itself);
342 {
343 OSErr _err = ResError();
344 if (_err != noErr) return PyMac_Error(_err);
345 }
346 Py_INCREF(Py_None);
347 _res = Py_None;
348 return _res;
349}
350
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000351static PyObject *ResObj_SetResourceSize(ResourceObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000352{
353 PyObject *_res = NULL;
354 long newSize;
355 if (!PyArg_ParseTuple(_args, "l",
356 &newSize))
357 return NULL;
358 SetResourceSize(_self->ob_itself,
359 newSize);
360 {
361 OSErr _err = ResError();
362 if (_err != noErr) return PyMac_Error(_err);
363 }
364 Py_INCREF(Py_None);
365 _res = Py_None;
366 return _res;
367}
368
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000369static PyObject *ResObj_GetNextFOND(ResourceObject *_self, PyObject *_args)
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000370{
371 PyObject *_res = NULL;
372 Handle _rv;
373 if (!PyArg_ParseTuple(_args, ""))
374 return NULL;
375 _rv = GetNextFOND(_self->ob_itself);
376 {
377 OSErr _err = ResError();
378 if (_err != noErr) return PyMac_Error(_err);
379 }
380 _res = Py_BuildValue("O&",
381 ResObj_New, _rv);
382 return _res;
383}
384
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000385static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args)
Jack Jansen1e054021995-06-18 20:20:27 +0000386{
387 PyObject *_res = NULL;
388
389 return CtlObj_New((ControlHandle)_self->ob_itself);
390
391}
392
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000393static PyObject *ResObj_as_Menu(ResourceObject *_self, PyObject *_args)
Jack Jansen1e054021995-06-18 20:20:27 +0000394{
395 PyObject *_res = NULL;
396
397 return MenuObj_New((MenuHandle)_self->ob_itself);
398
399}
400
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000401static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args)
Jack Jansene180d991998-04-24 10:28:20 +0000402{
403 PyObject *_res = NULL;
404 if (!PyArg_ParseTuple(_args, ""))
405 return NULL;
406 LoadResource(_self->ob_itself);
407 {
408 OSErr _err = ResError();
409 if (_err != noErr) return PyMac_Error(_err);
410 }
411 Py_INCREF(Py_None);
412 _res = Py_None;
413 return _res;
414}
415
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000416static PyObject *ResObj_AutoDispose(ResourceObject *_self, PyObject *_args)
Jack Jansenadd03b62000-03-08 16:58:15 +0000417{
418 PyObject *_res = NULL;
419
420 int onoff, old = 0;
421 if (!PyArg_ParseTuple(_args, "i", &onoff))
422 return NULL;
423 if ( _self->ob_freeit )
424 old = 1;
425 if ( onoff )
426 _self->ob_freeit = PyMac_AutoDisposeHandle;
427 else
428 _self->ob_freeit = NULL;
429 return Py_BuildValue("i", old);
430
431}
432
Guido van Rossum17448e21995-01-30 11:53:55 +0000433static PyMethodDef ResObj_methods[] = {
434 {"HomeResFile", (PyCFunction)ResObj_HomeResFile, 1,
435 "() -> (short _rv)"},
Jack Jansen1c4e6141998-04-21 15:23:55 +0000436 {"MacLoadResource", (PyCFunction)ResObj_MacLoadResource, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000437 "() -> None"},
438 {"ReleaseResource", (PyCFunction)ResObj_ReleaseResource, 1,
439 "() -> None"},
440 {"DetachResource", (PyCFunction)ResObj_DetachResource, 1,
441 "() -> None"},
442 {"GetResAttrs", (PyCFunction)ResObj_GetResAttrs, 1,
443 "() -> (short _rv)"},
444 {"GetResInfo", (PyCFunction)ResObj_GetResInfo, 1,
445 "() -> (short theID, ResType theType, Str255 name)"},
446 {"SetResInfo", (PyCFunction)ResObj_SetResInfo, 1,
447 "(short theID, Str255 name) -> None"},
448 {"AddResource", (PyCFunction)ResObj_AddResource, 1,
449 "(ResType theType, short theID, Str255 name) -> None"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000450 {"GetResourceSizeOnDisk", (PyCFunction)ResObj_GetResourceSizeOnDisk, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000451 "() -> (long _rv)"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000452 {"GetMaxResourceSize", (PyCFunction)ResObj_GetMaxResourceSize, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000453 "() -> (long _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +0000454
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000455#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +0000456 {"RsrcMapEntry", (PyCFunction)ResObj_RsrcMapEntry, 1,
457 "() -> (long _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +0000458#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000459 {"SetResAttrs", (PyCFunction)ResObj_SetResAttrs, 1,
460 "(short attrs) -> None"},
461 {"ChangedResource", (PyCFunction)ResObj_ChangedResource, 1,
462 "() -> None"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000463 {"RemoveResource", (PyCFunction)ResObj_RemoveResource, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000464 "() -> None"},
465 {"WriteResource", (PyCFunction)ResObj_WriteResource, 1,
466 "() -> None"},
467 {"SetResourceSize", (PyCFunction)ResObj_SetResourceSize, 1,
468 "(long newSize) -> None"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000469 {"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1,
470 "() -> (Handle _rv)"},
Jack Jansen1e054021995-06-18 20:20:27 +0000471 {"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"},
Jack Jansene180d991998-04-24 10:28:20 +0000475 {"LoadResource", (PyCFunction)ResObj_LoadResource, 1,
476 "() -> None"},
Jack Jansenadd03b62000-03-08 16:58:15 +0000477 {"AutoDispose", (PyCFunction)ResObj_AutoDispose, 1,
478 "(int)->int. Automatically DisposeHandle the object on Python object cleanup"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000479 {NULL, NULL, 0}
480};
481
482PyMethodChain ResObj_chain = { ResObj_methods, NULL };
483
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000484static PyObject *ResObj_getattr(ResourceObject *self, char *name)
Guido van Rossum17448e21995-01-30 11:53:55 +0000485{
486
487 if (strcmp(name, "size") == 0)
488 return PyInt_FromLong(GetHandleSize(self->ob_itself));
489 if (strcmp(name, "data") == 0) {
490 PyObject *res;
491 char state;
492 state = HGetState(self->ob_itself);
493 HLock(self->ob_itself);
494 res = PyString_FromStringAndSize(
495 *self->ob_itself,
496 GetHandleSize(self->ob_itself));
497 HUnlock(self->ob_itself);
498 HSetState(self->ob_itself, state);
499 return res;
500 }
501 if (strcmp(name, "__members__") == 0)
502 return Py_BuildValue("[ss]", "data", "size");
503
504 return Py_FindMethodInChain(&ResObj_chain, (PyObject *)self, name);
505}
506
Jack Jansen1e054021995-06-18 20:20:27 +0000507static int
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000508ResObj_setattr(ResourceObject *self, char *name, PyObject *value)
Jack Jansen1e054021995-06-18 20:20:27 +0000509{
510 char *data;
511 long size;
512
513 if (strcmp(name, "data") != 0 || value == NULL )
514 return -1;
515 if ( !PyString_Check(value) )
516 return -1;
517 size = PyString_Size(value);
518 data = PyString_AsString(value);
519 /* XXXX Do I need the GetState/SetState calls? */
520 SetHandleSize(self->ob_itself, size);
521 if ( MemError())
522 return -1;
523 HLock(self->ob_itself);
524 memcpy((char *)*self->ob_itself, data, size);
525 HUnlock(self->ob_itself);
526 /* XXXX Should I do the Changed call immedeately? */
527 return 0;
528}
529
Guido van Rossum17448e21995-01-30 11:53:55 +0000530
Jack Jansena05ac601999-12-12 21:41:51 +0000531#define ResObj_compare NULL
532
533#define ResObj_repr NULL
534
535#define ResObj_hash NULL
536
Guido van Rossum17448e21995-01-30 11:53:55 +0000537PyTypeObject Resource_Type = {
538 PyObject_HEAD_INIT(&PyType_Type)
539 0, /*ob_size*/
540 "Resource", /*tp_name*/
541 sizeof(ResourceObject), /*tp_basicsize*/
542 0, /*tp_itemsize*/
543 /* methods */
544 (destructor) ResObj_dealloc, /*tp_dealloc*/
545 0, /*tp_print*/
546 (getattrfunc) ResObj_getattr, /*tp_getattr*/
547 (setattrfunc) ResObj_setattr, /*tp_setattr*/
Jack Jansena05ac601999-12-12 21:41:51 +0000548 (cmpfunc) ResObj_compare, /*tp_compare*/
549 (reprfunc) ResObj_repr, /*tp_repr*/
550 (PyNumberMethods *)0, /* tp_as_number */
551 (PySequenceMethods *)0, /* tp_as_sequence */
552 (PyMappingMethods *)0, /* tp_as_mapping */
553 (hashfunc) ResObj_hash, /*tp_hash*/
Guido van Rossum17448e21995-01-30 11:53:55 +0000554};
555
556/* -------------------- End object type Resource -------------------- */
557
558
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000559#if TARGET_API_MAC_OS8
Jack Jansene79dc762000-06-02 21:35:07 +0000560
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000561static PyObject *Res_InitResources(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000562{
563 PyObject *_res = NULL;
564 short _rv;
565 if (!PyArg_ParseTuple(_args, ""))
566 return NULL;
567 _rv = InitResources();
568 {
569 OSErr _err = ResError();
570 if (_err != noErr) return PyMac_Error(_err);
571 }
572 _res = Py_BuildValue("h",
573 _rv);
574 return _res;
575}
Jack Jansene79dc762000-06-02 21:35:07 +0000576#endif
577
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000578#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +0000579
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000580static PyObject *Res_RsrcZoneInit(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000581{
582 PyObject *_res = NULL;
583 if (!PyArg_ParseTuple(_args, ""))
584 return NULL;
585 RsrcZoneInit();
586 {
587 OSErr _err = ResError();
588 if (_err != noErr) return PyMac_Error(_err);
589 }
590 Py_INCREF(Py_None);
591 _res = Py_None;
592 return _res;
593}
Jack Jansene79dc762000-06-02 21:35:07 +0000594#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000595
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000596static PyObject *Res_CloseResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000597{
598 PyObject *_res = NULL;
599 short refNum;
600 if (!PyArg_ParseTuple(_args, "h",
601 &refNum))
602 return NULL;
603 CloseResFile(refNum);
604 {
605 OSErr _err = ResError();
606 if (_err != noErr) return PyMac_Error(_err);
607 }
608 Py_INCREF(Py_None);
609 _res = Py_None;
610 return _res;
611}
612
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000613static PyObject *Res_ResError(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000614{
615 PyObject *_res = NULL;
Jack Jansen21f96871998-02-20 16:02:09 +0000616 OSErr _rv;
Guido van Rossum17448e21995-01-30 11:53:55 +0000617 if (!PyArg_ParseTuple(_args, ""))
618 return NULL;
619 _rv = ResError();
620 {
621 OSErr _err = ResError();
622 if (_err != noErr) return PyMac_Error(_err);
623 }
624 _res = Py_BuildValue("h",
625 _rv);
626 return _res;
627}
628
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000629static PyObject *Res_CurResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000630{
631 PyObject *_res = NULL;
632 short _rv;
633 if (!PyArg_ParseTuple(_args, ""))
634 return NULL;
635 _rv = CurResFile();
636 {
637 OSErr _err = ResError();
638 if (_err != noErr) return PyMac_Error(_err);
639 }
640 _res = Py_BuildValue("h",
641 _rv);
642 return _res;
643}
644
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000645#if TARGET_API_MAC_OS8
Jack Jansene79dc762000-06-02 21:35:07 +0000646
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000647static PyObject *Res_CreateResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000648{
649 PyObject *_res = NULL;
650 Str255 fileName;
651 if (!PyArg_ParseTuple(_args, "O&",
652 PyMac_GetStr255, fileName))
653 return NULL;
654 CreateResFile(fileName);
655 {
656 OSErr _err = ResError();
657 if (_err != noErr) return PyMac_Error(_err);
658 }
659 Py_INCREF(Py_None);
660 _res = Py_None;
661 return _res;
662}
Jack Jansene79dc762000-06-02 21:35:07 +0000663#endif
664
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000665#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +0000666
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000667static PyObject *Res_OpenResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000668{
669 PyObject *_res = NULL;
670 short _rv;
671 Str255 fileName;
672 if (!PyArg_ParseTuple(_args, "O&",
673 PyMac_GetStr255, fileName))
674 return NULL;
675 _rv = OpenResFile(fileName);
676 {
677 OSErr _err = ResError();
678 if (_err != noErr) return PyMac_Error(_err);
679 }
680 _res = Py_BuildValue("h",
681 _rv);
682 return _res;
683}
Jack Jansene79dc762000-06-02 21:35:07 +0000684#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000685
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000686static PyObject *Res_UseResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000687{
688 PyObject *_res = NULL;
689 short refNum;
690 if (!PyArg_ParseTuple(_args, "h",
691 &refNum))
692 return NULL;
693 UseResFile(refNum);
694 {
695 OSErr _err = ResError();
696 if (_err != noErr) return PyMac_Error(_err);
697 }
698 Py_INCREF(Py_None);
699 _res = Py_None;
700 return _res;
701}
702
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000703static PyObject *Res_CountTypes(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000704{
705 PyObject *_res = NULL;
706 short _rv;
707 if (!PyArg_ParseTuple(_args, ""))
708 return NULL;
709 _rv = CountTypes();
710 {
711 OSErr _err = ResError();
712 if (_err != noErr) return PyMac_Error(_err);
713 }
714 _res = Py_BuildValue("h",
715 _rv);
716 return _res;
717}
718
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000719static PyObject *Res_Count1Types(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000720{
721 PyObject *_res = NULL;
722 short _rv;
723 if (!PyArg_ParseTuple(_args, ""))
724 return NULL;
725 _rv = Count1Types();
726 {
727 OSErr _err = ResError();
728 if (_err != noErr) return PyMac_Error(_err);
729 }
730 _res = Py_BuildValue("h",
731 _rv);
732 return _res;
733}
734
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000735static PyObject *Res_GetIndType(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000736{
737 PyObject *_res = NULL;
738 ResType theType;
739 short index;
740 if (!PyArg_ParseTuple(_args, "h",
741 &index))
742 return NULL;
743 GetIndType(&theType,
744 index);
745 {
746 OSErr _err = ResError();
747 if (_err != noErr) return PyMac_Error(_err);
748 }
749 _res = Py_BuildValue("O&",
750 PyMac_BuildOSType, theType);
751 return _res;
752}
753
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000754static PyObject *Res_Get1IndType(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000755{
756 PyObject *_res = NULL;
757 ResType theType;
758 short index;
759 if (!PyArg_ParseTuple(_args, "h",
760 &index))
761 return NULL;
762 Get1IndType(&theType,
763 index);
764 {
765 OSErr _err = ResError();
766 if (_err != noErr) return PyMac_Error(_err);
767 }
768 _res = Py_BuildValue("O&",
769 PyMac_BuildOSType, theType);
770 return _res;
771}
772
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000773static PyObject *Res_SetResLoad(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000774{
775 PyObject *_res = NULL;
776 Boolean load;
777 if (!PyArg_ParseTuple(_args, "b",
778 &load))
779 return NULL;
780 SetResLoad(load);
781 {
782 OSErr _err = ResError();
783 if (_err != noErr) return PyMac_Error(_err);
784 }
785 Py_INCREF(Py_None);
786 _res = Py_None;
787 return _res;
788}
789
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000790static PyObject *Res_CountResources(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000791{
792 PyObject *_res = NULL;
793 short _rv;
794 ResType theType;
795 if (!PyArg_ParseTuple(_args, "O&",
796 PyMac_GetOSType, &theType))
797 return NULL;
798 _rv = CountResources(theType);
799 {
800 OSErr _err = ResError();
801 if (_err != noErr) return PyMac_Error(_err);
802 }
803 _res = Py_BuildValue("h",
804 _rv);
805 return _res;
806}
807
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000808static PyObject *Res_Count1Resources(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000809{
810 PyObject *_res = NULL;
811 short _rv;
812 ResType theType;
813 if (!PyArg_ParseTuple(_args, "O&",
814 PyMac_GetOSType, &theType))
815 return NULL;
816 _rv = Count1Resources(theType);
817 {
818 OSErr _err = ResError();
819 if (_err != noErr) return PyMac_Error(_err);
820 }
821 _res = Py_BuildValue("h",
822 _rv);
823 return _res;
824}
825
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000826static PyObject *Res_GetIndResource(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000827{
828 PyObject *_res = NULL;
829 Handle _rv;
830 ResType theType;
831 short index;
832 if (!PyArg_ParseTuple(_args, "O&h",
833 PyMac_GetOSType, &theType,
834 &index))
835 return NULL;
836 _rv = GetIndResource(theType,
837 index);
838 {
839 OSErr _err = ResError();
840 if (_err != noErr) return PyMac_Error(_err);
841 }
842 _res = Py_BuildValue("O&",
843 ResObj_New, _rv);
844 return _res;
845}
846
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000847static PyObject *Res_Get1IndResource(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000848{
849 PyObject *_res = NULL;
850 Handle _rv;
851 ResType theType;
852 short index;
853 if (!PyArg_ParseTuple(_args, "O&h",
854 PyMac_GetOSType, &theType,
855 &index))
856 return NULL;
857 _rv = Get1IndResource(theType,
858 index);
859 {
860 OSErr _err = ResError();
861 if (_err != noErr) return PyMac_Error(_err);
862 }
863 _res = Py_BuildValue("O&",
864 ResObj_New, _rv);
865 return _res;
866}
867
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000868static PyObject *Res_GetResource(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000869{
870 PyObject *_res = NULL;
871 Handle _rv;
872 ResType theType;
873 short theID;
874 if (!PyArg_ParseTuple(_args, "O&h",
875 PyMac_GetOSType, &theType,
876 &theID))
877 return NULL;
878 _rv = GetResource(theType,
879 theID);
880 {
881 OSErr _err = ResError();
882 if (_err != noErr) return PyMac_Error(_err);
883 }
884 _res = Py_BuildValue("O&",
885 ResObj_New, _rv);
886 return _res;
887}
888
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000889static PyObject *Res_Get1Resource(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000890{
891 PyObject *_res = NULL;
892 Handle _rv;
893 ResType theType;
894 short theID;
895 if (!PyArg_ParseTuple(_args, "O&h",
896 PyMac_GetOSType, &theType,
897 &theID))
898 return NULL;
899 _rv = Get1Resource(theType,
900 theID);
901 {
902 OSErr _err = ResError();
903 if (_err != noErr) return PyMac_Error(_err);
904 }
905 _res = Py_BuildValue("O&",
906 ResObj_New, _rv);
907 return _res;
908}
909
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000910static PyObject *Res_GetNamedResource(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000911{
912 PyObject *_res = NULL;
913 Handle _rv;
914 ResType theType;
915 Str255 name;
916 if (!PyArg_ParseTuple(_args, "O&O&",
917 PyMac_GetOSType, &theType,
918 PyMac_GetStr255, name))
919 return NULL;
920 _rv = GetNamedResource(theType,
921 name);
922 {
923 OSErr _err = ResError();
924 if (_err != noErr) return PyMac_Error(_err);
925 }
926 _res = Py_BuildValue("O&",
927 ResObj_New, _rv);
928 return _res;
929}
930
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000931static PyObject *Res_Get1NamedResource(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000932{
933 PyObject *_res = NULL;
934 Handle _rv;
935 ResType theType;
936 Str255 name;
937 if (!PyArg_ParseTuple(_args, "O&O&",
938 PyMac_GetOSType, &theType,
939 PyMac_GetStr255, name))
940 return NULL;
941 _rv = Get1NamedResource(theType,
942 name);
943 {
944 OSErr _err = ResError();
945 if (_err != noErr) return PyMac_Error(_err);
946 }
947 _res = Py_BuildValue("O&",
948 ResObj_New, _rv);
949 return _res;
950}
951
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000952static PyObject *Res_UniqueID(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000953{
954 PyObject *_res = NULL;
955 short _rv;
956 ResType theType;
957 if (!PyArg_ParseTuple(_args, "O&",
958 PyMac_GetOSType, &theType))
959 return NULL;
960 _rv = UniqueID(theType);
961 {
962 OSErr _err = ResError();
963 if (_err != noErr) return PyMac_Error(_err);
964 }
965 _res = Py_BuildValue("h",
966 _rv);
967 return _res;
968}
969
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000970static PyObject *Res_Unique1ID(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000971{
972 PyObject *_res = NULL;
973 short _rv;
974 ResType theType;
975 if (!PyArg_ParseTuple(_args, "O&",
976 PyMac_GetOSType, &theType))
977 return NULL;
978 _rv = Unique1ID(theType);
979 {
980 OSErr _err = ResError();
981 if (_err != noErr) return PyMac_Error(_err);
982 }
983 _res = Py_BuildValue("h",
984 _rv);
985 return _res;
986}
987
Jack Jansenfa77e1a2001-05-22 21:56:42 +0000988static PyObject *Res_UpdateResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000989{
990 PyObject *_res = NULL;
991 short refNum;
992 if (!PyArg_ParseTuple(_args, "h",
993 &refNum))
994 return NULL;
995 UpdateResFile(refNum);
996 {
997 OSErr _err = ResError();
998 if (_err != noErr) return PyMac_Error(_err);
999 }
1000 Py_INCREF(Py_None);
1001 _res = Py_None;
1002 return _res;
1003}
1004
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001005static PyObject *Res_SetResPurge(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001006{
1007 PyObject *_res = NULL;
1008 Boolean install;
1009 if (!PyArg_ParseTuple(_args, "b",
1010 &install))
1011 return NULL;
1012 SetResPurge(install);
1013 {
1014 OSErr _err = ResError();
1015 if (_err != noErr) return PyMac_Error(_err);
1016 }
1017 Py_INCREF(Py_None);
1018 _res = Py_None;
1019 return _res;
1020}
1021
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001022static PyObject *Res_GetResFileAttrs(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001023{
1024 PyObject *_res = NULL;
1025 short _rv;
1026 short refNum;
1027 if (!PyArg_ParseTuple(_args, "h",
1028 &refNum))
1029 return NULL;
1030 _rv = GetResFileAttrs(refNum);
1031 {
1032 OSErr _err = ResError();
1033 if (_err != noErr) return PyMac_Error(_err);
1034 }
1035 _res = Py_BuildValue("h",
1036 _rv);
1037 return _res;
1038}
1039
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001040static PyObject *Res_SetResFileAttrs(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001041{
1042 PyObject *_res = NULL;
1043 short refNum;
1044 short attrs;
1045 if (!PyArg_ParseTuple(_args, "hh",
1046 &refNum,
1047 &attrs))
1048 return NULL;
1049 SetResFileAttrs(refNum,
1050 attrs);
1051 {
1052 OSErr _err = ResError();
1053 if (_err != noErr) return PyMac_Error(_err);
1054 }
1055 Py_INCREF(Py_None);
1056 _res = Py_None;
1057 return _res;
1058}
1059
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001060static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001061{
1062 PyObject *_res = NULL;
1063 short _rv;
1064 Str255 fileName;
1065 short vRefNum;
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001066 SignedByte permission;
1067 if (!PyArg_ParseTuple(_args, "O&hb",
Guido van Rossum17448e21995-01-30 11:53:55 +00001068 PyMac_GetStr255, fileName,
1069 &vRefNum,
1070 &permission))
1071 return NULL;
1072 _rv = OpenRFPerm(fileName,
1073 vRefNum,
1074 permission);
1075 {
1076 OSErr _err = ResError();
1077 if (_err != noErr) return PyMac_Error(_err);
1078 }
1079 _res = Py_BuildValue("h",
1080 _rv);
1081 return _res;
1082}
1083
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001084#if TARGET_API_MAC_OS8
Jack Jansene79dc762000-06-02 21:35:07 +00001085
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001086static PyObject *Res_RGetResource(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001087{
1088 PyObject *_res = NULL;
1089 Handle _rv;
1090 ResType theType;
1091 short theID;
1092 if (!PyArg_ParseTuple(_args, "O&h",
1093 PyMac_GetOSType, &theType,
1094 &theID))
1095 return NULL;
1096 _rv = RGetResource(theType,
1097 theID);
1098 {
1099 OSErr _err = ResError();
1100 if (_err != noErr) return PyMac_Error(_err);
1101 }
1102 _res = Py_BuildValue("O&",
1103 ResObj_New, _rv);
1104 return _res;
1105}
Jack Jansene79dc762000-06-02 21:35:07 +00001106#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001107
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001108static PyObject *Res_HOpenResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001109{
1110 PyObject *_res = NULL;
1111 short _rv;
1112 short vRefNum;
1113 long dirID;
1114 Str255 fileName;
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001115 SignedByte permission;
1116 if (!PyArg_ParseTuple(_args, "hlO&b",
Guido van Rossum17448e21995-01-30 11:53:55 +00001117 &vRefNum,
1118 &dirID,
1119 PyMac_GetStr255, fileName,
1120 &permission))
1121 return NULL;
1122 _rv = HOpenResFile(vRefNum,
1123 dirID,
1124 fileName,
1125 permission);
1126 {
1127 OSErr _err = ResError();
1128 if (_err != noErr) return PyMac_Error(_err);
1129 }
1130 _res = Py_BuildValue("h",
1131 _rv);
1132 return _res;
1133}
1134
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001135static PyObject *Res_HCreateResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001136{
1137 PyObject *_res = NULL;
1138 short vRefNum;
1139 long dirID;
1140 Str255 fileName;
1141 if (!PyArg_ParseTuple(_args, "hlO&",
1142 &vRefNum,
1143 &dirID,
1144 PyMac_GetStr255, fileName))
1145 return NULL;
1146 HCreateResFile(vRefNum,
1147 dirID,
1148 fileName);
1149 {
1150 OSErr _err = ResError();
1151 if (_err != noErr) return PyMac_Error(_err);
1152 }
1153 Py_INCREF(Py_None);
1154 _res = Py_None;
1155 return _res;
1156}
1157
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001158static PyObject *Res_FSpOpenResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001159{
1160 PyObject *_res = NULL;
1161 short _rv;
1162 FSSpec spec;
1163 SignedByte permission;
1164 if (!PyArg_ParseTuple(_args, "O&b",
1165 PyMac_GetFSSpec, &spec,
1166 &permission))
1167 return NULL;
1168 _rv = FSpOpenResFile(&spec,
1169 permission);
1170 {
1171 OSErr _err = ResError();
1172 if (_err != noErr) return PyMac_Error(_err);
1173 }
1174 _res = Py_BuildValue("h",
1175 _rv);
1176 return _res;
1177}
1178
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001179static PyObject *Res_FSpCreateResFile(PyObject *_self, PyObject *_args)
Guido van Rossum17448e21995-01-30 11:53:55 +00001180{
1181 PyObject *_res = NULL;
1182 FSSpec spec;
1183 OSType creator;
1184 OSType fileType;
1185 ScriptCode scriptTag;
1186 if (!PyArg_ParseTuple(_args, "O&O&O&h",
1187 PyMac_GetFSSpec, &spec,
1188 PyMac_GetOSType, &creator,
1189 PyMac_GetOSType, &fileType,
1190 &scriptTag))
1191 return NULL;
1192 FSpCreateResFile(&spec,
1193 creator,
1194 fileType,
1195 scriptTag);
1196 {
1197 OSErr _err = ResError();
1198 if (_err != noErr) return PyMac_Error(_err);
1199 }
1200 Py_INCREF(Py_None);
1201 _res = Py_None;
1202 return _res;
1203}
1204
Jack Jansen723ad8a2000-12-12 22:10:21 +00001205#if TARGET_API_MAC_CARBON
1206
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001207static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001208{
1209 PyObject *_res = NULL;
1210 OSErr _rv;
1211 SInt16 refNum;
1212 RsrcChainLocation where;
1213 if (!PyArg_ParseTuple(_args, "hh",
1214 &refNum,
1215 &where))
1216 return NULL;
1217 _rv = InsertResourceFile(refNum,
1218 where);
1219 {
1220 OSErr _err = ResError();
1221 if (_err != noErr) return PyMac_Error(_err);
1222 }
1223 _res = Py_BuildValue("h",
1224 _rv);
1225 return _res;
1226}
1227#endif
1228
1229#if TARGET_API_MAC_CARBON
1230
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001231static PyObject *Res_DetachResourceFile(PyObject *_self, PyObject *_args)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001232{
1233 PyObject *_res = NULL;
1234 OSErr _rv;
1235 SInt16 refNum;
1236 if (!PyArg_ParseTuple(_args, "h",
1237 &refNum))
1238 return NULL;
1239 _rv = DetachResourceFile(refNum);
1240 {
1241 OSErr _err = ResError();
1242 if (_err != noErr) return PyMac_Error(_err);
1243 }
1244 _res = Py_BuildValue("h",
1245 _rv);
1246 return _res;
1247}
1248#endif
1249
Jack Jansen043732e2001-03-02 16:32:03 +00001250#if TARGET_API_MAC_CARBON
1251
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001252static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001253{
1254 PyObject *_res = NULL;
1255 Boolean _rv;
1256 FSSpec resourceFile;
1257 Boolean inChain;
1258 SInt16 refNum;
1259 if (!PyArg_ParseTuple(_args, "O&",
1260 PyMac_GetFSSpec, &resourceFile))
1261 return NULL;
1262 _rv = FSpResourceFileAlreadyOpen(&resourceFile,
1263 &inChain,
1264 &refNum);
1265 {
1266 OSErr _err = ResError();
1267 if (_err != noErr) return PyMac_Error(_err);
1268 }
1269 _res = Py_BuildValue("bbh",
1270 _rv,
1271 inChain,
1272 refNum);
1273 return _res;
1274}
Jack Jansen043732e2001-03-02 16:32:03 +00001275#endif
Jack Jansen723ad8a2000-12-12 22:10:21 +00001276
1277#if TARGET_API_MAC_CARBON
1278
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001279static PyObject *Res_FSpOpenOrphanResFile(PyObject *_self, PyObject *_args)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001280{
1281 PyObject *_res = NULL;
1282 OSErr _rv;
1283 FSSpec spec;
1284 SignedByte permission;
1285 SInt16 refNum;
1286 if (!PyArg_ParseTuple(_args, "O&b",
1287 PyMac_GetFSSpec, &spec,
1288 &permission))
1289 return NULL;
1290 _rv = FSpOpenOrphanResFile(&spec,
1291 permission,
1292 &refNum);
1293 {
1294 OSErr _err = ResError();
1295 if (_err != noErr) return PyMac_Error(_err);
1296 }
1297 _res = Py_BuildValue("hh",
1298 _rv,
1299 refNum);
1300 return _res;
1301}
1302#endif
1303
1304#if TARGET_API_MAC_CARBON
1305
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001306static PyObject *Res_GetTopResourceFile(PyObject *_self, PyObject *_args)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001307{
1308 PyObject *_res = NULL;
1309 OSErr _rv;
1310 SInt16 refNum;
1311 if (!PyArg_ParseTuple(_args, ""))
1312 return NULL;
1313 _rv = GetTopResourceFile(&refNum);
1314 {
1315 OSErr _err = ResError();
1316 if (_err != noErr) return PyMac_Error(_err);
1317 }
1318 _res = Py_BuildValue("hh",
1319 _rv,
1320 refNum);
1321 return _res;
1322}
1323#endif
1324
1325#if TARGET_API_MAC_CARBON
1326
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001327static PyObject *Res_GetNextResourceFile(PyObject *_self, PyObject *_args)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001328{
1329 PyObject *_res = NULL;
1330 OSErr _rv;
1331 SInt16 curRefNum;
1332 SInt16 nextRefNum;
1333 if (!PyArg_ParseTuple(_args, "h",
1334 &curRefNum))
1335 return NULL;
1336 _rv = GetNextResourceFile(curRefNum,
1337 &nextRefNum);
1338 {
1339 OSErr _err = ResError();
1340 if (_err != noErr) return PyMac_Error(_err);
1341 }
1342 _res = Py_BuildValue("hh",
1343 _rv,
1344 nextRefNum);
1345 return _res;
1346}
1347#endif
1348
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001349static PyObject *Res_Resource(PyObject *_self, PyObject *_args)
Guido van Rossum9bcb6411995-02-05 16:54:27 +00001350{
1351 PyObject *_res = NULL;
1352
1353 char *buf;
1354 int len;
1355 Handle h;
1356
1357 if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
1358 return NULL;
1359 h = NewHandle(len);
1360 if ( h == NULL ) {
1361 PyErr_NoMemory();
1362 return NULL;
1363 }
1364 HLock(h);
1365 memcpy(*h, buf, len);
1366 HUnlock(h);
Jack Jansenadd03b62000-03-08 16:58:15 +00001367 return ResObj_New(h);
1368
1369}
1370
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001371static PyObject *Res_Handle(PyObject *_self, PyObject *_args)
Jack Jansenadd03b62000-03-08 16:58:15 +00001372{
1373 PyObject *_res = NULL;
1374
1375 char *buf;
1376 int len;
1377 Handle h;
1378 ResourceObject *rv;
1379
1380 if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
1381 return NULL;
1382 h = NewHandle(len);
1383 if ( h == NULL ) {
1384 PyErr_NoMemory();
1385 return NULL;
1386 }
1387 HLock(h);
1388 memcpy(*h, buf, len);
1389 HUnlock(h);
1390 rv = (ResourceObject *)ResObj_New(h);
1391 rv->ob_freeit = PyMac_AutoDisposeHandle;
1392 return (PyObject *)rv;
Guido van Rossum9bcb6411995-02-05 16:54:27 +00001393
1394}
1395
Guido van Rossum17448e21995-01-30 11:53:55 +00001396static PyMethodDef Res_methods[] = {
Jack Jansene79dc762000-06-02 21:35:07 +00001397
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001398#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +00001399 {"InitResources", (PyCFunction)Res_InitResources, 1,
1400 "() -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001401#endif
1402
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001403#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +00001404 {"RsrcZoneInit", (PyCFunction)Res_RsrcZoneInit, 1,
1405 "() -> None"},
Jack Jansene79dc762000-06-02 21:35:07 +00001406#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001407 {"CloseResFile", (PyCFunction)Res_CloseResFile, 1,
1408 "(short refNum) -> None"},
1409 {"ResError", (PyCFunction)Res_ResError, 1,
Jack Jansen21f96871998-02-20 16:02:09 +00001410 "() -> (OSErr _rv)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001411 {"CurResFile", (PyCFunction)Res_CurResFile, 1,
1412 "() -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001413
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001414#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +00001415 {"CreateResFile", (PyCFunction)Res_CreateResFile, 1,
1416 "(Str255 fileName) -> None"},
Jack Jansene79dc762000-06-02 21:35:07 +00001417#endif
1418
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001419#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +00001420 {"OpenResFile", (PyCFunction)Res_OpenResFile, 1,
1421 "(Str255 fileName) -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001422#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001423 {"UseResFile", (PyCFunction)Res_UseResFile, 1,
1424 "(short refNum) -> None"},
1425 {"CountTypes", (PyCFunction)Res_CountTypes, 1,
1426 "() -> (short _rv)"},
1427 {"Count1Types", (PyCFunction)Res_Count1Types, 1,
1428 "() -> (short _rv)"},
1429 {"GetIndType", (PyCFunction)Res_GetIndType, 1,
1430 "(short index) -> (ResType theType)"},
1431 {"Get1IndType", (PyCFunction)Res_Get1IndType, 1,
1432 "(short index) -> (ResType theType)"},
1433 {"SetResLoad", (PyCFunction)Res_SetResLoad, 1,
1434 "(Boolean load) -> None"},
1435 {"CountResources", (PyCFunction)Res_CountResources, 1,
1436 "(ResType theType) -> (short _rv)"},
1437 {"Count1Resources", (PyCFunction)Res_Count1Resources, 1,
1438 "(ResType theType) -> (short _rv)"},
1439 {"GetIndResource", (PyCFunction)Res_GetIndResource, 1,
1440 "(ResType theType, short index) -> (Handle _rv)"},
1441 {"Get1IndResource", (PyCFunction)Res_Get1IndResource, 1,
1442 "(ResType theType, short index) -> (Handle _rv)"},
1443 {"GetResource", (PyCFunction)Res_GetResource, 1,
1444 "(ResType theType, short theID) -> (Handle _rv)"},
1445 {"Get1Resource", (PyCFunction)Res_Get1Resource, 1,
1446 "(ResType theType, short theID) -> (Handle _rv)"},
1447 {"GetNamedResource", (PyCFunction)Res_GetNamedResource, 1,
1448 "(ResType theType, Str255 name) -> (Handle _rv)"},
1449 {"Get1NamedResource", (PyCFunction)Res_Get1NamedResource, 1,
1450 "(ResType theType, Str255 name) -> (Handle _rv)"},
1451 {"UniqueID", (PyCFunction)Res_UniqueID, 1,
1452 "(ResType theType) -> (short _rv)"},
1453 {"Unique1ID", (PyCFunction)Res_Unique1ID, 1,
1454 "(ResType theType) -> (short _rv)"},
1455 {"UpdateResFile", (PyCFunction)Res_UpdateResFile, 1,
1456 "(short refNum) -> None"},
1457 {"SetResPurge", (PyCFunction)Res_SetResPurge, 1,
1458 "(Boolean install) -> None"},
1459 {"GetResFileAttrs", (PyCFunction)Res_GetResFileAttrs, 1,
1460 "(short refNum) -> (short _rv)"},
1461 {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1,
1462 "(short refNum, short attrs) -> None"},
1463 {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1,
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001464 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001465
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001466#if TARGET_API_MAC_OS8
Guido van Rossum17448e21995-01-30 11:53:55 +00001467 {"RGetResource", (PyCFunction)Res_RGetResource, 1,
1468 "(ResType theType, short theID) -> (Handle _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001469#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001470 {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1,
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001471 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001472 {"HCreateResFile", (PyCFunction)Res_HCreateResFile, 1,
1473 "(short vRefNum, long dirID, Str255 fileName) -> None"},
1474 {"FSpOpenResFile", (PyCFunction)Res_FSpOpenResFile, 1,
1475 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
1476 {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1,
1477 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
Jack Jansen723ad8a2000-12-12 22:10:21 +00001478
1479#if TARGET_API_MAC_CARBON
1480 {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1,
1481 "(SInt16 refNum, RsrcChainLocation where) -> (OSErr _rv)"},
1482#endif
1483
1484#if TARGET_API_MAC_CARBON
1485 {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1,
1486 "(SInt16 refNum) -> (OSErr _rv)"},
1487#endif
Jack Jansen043732e2001-03-02 16:32:03 +00001488
1489#if TARGET_API_MAC_CARBON
Jack Jansen723ad8a2000-12-12 22:10:21 +00001490 {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1,
1491 "(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)"},
Jack Jansen043732e2001-03-02 16:32:03 +00001492#endif
Jack Jansen723ad8a2000-12-12 22:10:21 +00001493
1494#if TARGET_API_MAC_CARBON
1495 {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1,
1496 "(FSSpec spec, SignedByte permission) -> (OSErr _rv, SInt16 refNum)"},
1497#endif
1498
1499#if TARGET_API_MAC_CARBON
1500 {"GetTopResourceFile", (PyCFunction)Res_GetTopResourceFile, 1,
1501 "() -> (OSErr _rv, SInt16 refNum)"},
1502#endif
1503
1504#if TARGET_API_MAC_CARBON
1505 {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1,
1506 "(SInt16 curRefNum) -> (OSErr _rv, SInt16 nextRefNum)"},
1507#endif
Guido van Rossum9bcb6411995-02-05 16:54:27 +00001508 {"Resource", (PyCFunction)Res_Resource, 1,
Jack Jansenadd03b62000-03-08 16:58:15 +00001509 "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"},
1510 {"Handle", (PyCFunction)Res_Handle, 1,
1511 "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"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001512 {NULL, NULL, 0}
1513};
1514
1515
1516
1517
Jack Jansend4c26461995-08-17 14:35:56 +00001518/* Alternative version of ResObj_New, which returns None for null argument */
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001519PyObject *OptResObj_New(Handle itself)
Jack Jansend4c26461995-08-17 14:35:56 +00001520{
Jack Jansend4c26461995-08-17 14:35:56 +00001521 if (itself == NULL) {
1522 Py_INCREF(Py_None);
1523 return Py_None;
1524 }
1525 return ResObj_New(itself);
1526}
1527
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001528OptResObj_Convert(PyObject *v, Handle *p_itself)
Jack Jansen425e9eb1995-12-12 15:02:03 +00001529{
Jack Jansen2d76c251999-12-12 22:57:29 +00001530 PyObject *tmp;
1531
Jack Jansen425e9eb1995-12-12 15:02:03 +00001532 if ( v == Py_None ) {
1533 *p_itself = NULL;
1534 return 1;
1535 }
Jack Jansen2d76c251999-12-12 22:57:29 +00001536 if (ResObj_Check(v))
Jack Jansen425e9eb1995-12-12 15:02:03 +00001537 {
Jack Jansen2d76c251999-12-12 22:57:29 +00001538 *p_itself = ((ResourceObject *)v)->ob_itself;
1539 return 1;
Jack Jansen425e9eb1995-12-12 15:02:03 +00001540 }
Jack Jansen2d76c251999-12-12 22:57:29 +00001541 /* If it isn't a resource yet see whether it is convertible */
1542 if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) ) {
1543 *p_itself = ((ResourceObject *)tmp)->ob_itself;
1544 Py_DECREF(tmp);
1545 return 1;
1546 }
1547 PyErr_Clear();
1548 PyErr_SetString(PyExc_TypeError, "Resource required");
1549 return 0;
Jack Jansen425e9eb1995-12-12 15:02:03 +00001550}
1551
Jack Jansend4c26461995-08-17 14:35:56 +00001552
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001553void initRes(void)
Guido van Rossum17448e21995-01-30 11:53:55 +00001554{
1555 PyObject *m;
1556 PyObject *d;
1557
1558
1559
Jack Jansenfa77e1a2001-05-22 21:56:42 +00001560 PyMac_INIT_TOOLBOX_OBJECT_NEW(Handle, ResObj_New);
1561 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(Handle, ResObj_Convert);
1562 PyMac_INIT_TOOLBOX_OBJECT_NEW(Handle, OptResObj_New);
1563 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(Handle, OptResObj_Convert);
Guido van Rossum17448e21995-01-30 11:53:55 +00001564
1565
1566 m = Py_InitModule("Res", Res_methods);
1567 d = PyModule_GetDict(m);
1568 Res_Error = PyMac_GetOSErrException();
1569 if (Res_Error == NULL ||
1570 PyDict_SetItemString(d, "Error", Res_Error) != 0)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001571 return;
Jack Jansena755e681997-09-20 17:40:22 +00001572 Resource_Type.ob_type = &PyType_Type;
1573 Py_INCREF(&Resource_Type);
1574 if (PyDict_SetItemString(d, "ResourceType", (PyObject *)&Resource_Type) != 0)
1575 Py_FatalError("can't initialize ResourceType");
Guido van Rossum17448e21995-01-30 11:53:55 +00001576}
1577
1578/* ========================= End module Res ========================= */
1579