blob: bd6a42dd6fd596d7f69a94249e0fc54d13c1bb6f [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
Guido van Rossum17448e21995-01-30 11:53:55 +000011#include <Resources.h>
Jack Janseneaf3c9b1997-08-15 14:36:45 +000012#include <string.h>
Guido van Rossum17448e21995-01-30 11:53:55 +000013
Jack Jansenadd03b62000-03-08 16:58:15 +000014/* Function to dispose a resource, with a "normal" calling sequence */
15static void
16PyMac_AutoDisposeHandle(Handle h)
17{
18 DisposeHandle(h);
19}
20
Guido van Rossum17448e21995-01-30 11:53:55 +000021static PyObject *Res_Error;
22
23/* ---------------------- Object type Resource ---------------------- */
24
25PyTypeObject Resource_Type;
26
27#define ResObj_Check(x) ((x)->ob_type == &Resource_Type)
28
29typedef struct ResourceObject {
30 PyObject_HEAD
31 Handle ob_itself;
Jack Jansenadd03b62000-03-08 16:58:15 +000032 void (*ob_freeit)(Handle ptr);
Guido van Rossum17448e21995-01-30 11:53:55 +000033} ResourceObject;
34
35PyObject *ResObj_New(itself)
Guido van Rossum227a4231995-03-10 14:42:57 +000036 Handle itself;
Guido van Rossum17448e21995-01-30 11:53:55 +000037{
38 ResourceObject *it;
39 if (itself == NULL) return PyMac_Error(resNotFound);
40 it = PyObject_NEW(ResourceObject, &Resource_Type);
41 if (it == NULL) return NULL;
42 it->ob_itself = itself;
Jack Jansenadd03b62000-03-08 16:58:15 +000043 it->ob_freeit = NULL;
Guido van Rossum17448e21995-01-30 11:53:55 +000044 return (PyObject *)it;
45}
46ResObj_Convert(v, p_itself)
47 PyObject *v;
48 Handle *p_itself;
49{
50 if (!ResObj_Check(v))
51 {
Jack Jansen2d76c251999-12-12 22:57:29 +000052 PyObject *tmp;
53 if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) )
54 {
55 *p_itself = ((ResourceObject *)tmp)->ob_itself;
56 Py_DECREF(tmp);
57 return 1;
58 }
59 PyErr_Clear();
60 }
61 if (!ResObj_Check(v))
62 {
Guido van Rossum17448e21995-01-30 11:53:55 +000063 PyErr_SetString(PyExc_TypeError, "Resource required");
64 return 0;
65 }
66 *p_itself = ((ResourceObject *)v)->ob_itself;
67 return 1;
68}
69
70static void ResObj_dealloc(self)
71 ResourceObject *self;
72{
Jack Jansenadd03b62000-03-08 16:58:15 +000073 if (self->ob_freeit && self->ob_itself)
74 {
75 self->ob_freeit(self->ob_itself);
76 }
77 self->ob_itself = NULL;
Guido van Rossum17448e21995-01-30 11:53:55 +000078 PyMem_DEL(self);
79}
80
81static PyObject *ResObj_HomeResFile(_self, _args)
82 ResourceObject *_self;
83 PyObject *_args;
84{
85 PyObject *_res = NULL;
86 short _rv;
87 if (!PyArg_ParseTuple(_args, ""))
88 return NULL;
89 _rv = HomeResFile(_self->ob_itself);
90 {
91 OSErr _err = ResError();
92 if (_err != noErr) return PyMac_Error(_err);
93 }
94 _res = Py_BuildValue("h",
95 _rv);
96 return _res;
97}
98
Jack Jansen1c4e6141998-04-21 15:23:55 +000099static PyObject *ResObj_MacLoadResource(_self, _args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000100 ResourceObject *_self;
101 PyObject *_args;
102{
103 PyObject *_res = NULL;
104 if (!PyArg_ParseTuple(_args, ""))
105 return NULL;
Jack Jansen1c4e6141998-04-21 15:23:55 +0000106 MacLoadResource(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000107 {
108 OSErr _err = ResError();
109 if (_err != noErr) return PyMac_Error(_err);
110 }
111 Py_INCREF(Py_None);
112 _res = Py_None;
113 return _res;
114}
115
116static PyObject *ResObj_ReleaseResource(_self, _args)
117 ResourceObject *_self;
118 PyObject *_args;
119{
120 PyObject *_res = NULL;
121 if (!PyArg_ParseTuple(_args, ""))
122 return NULL;
123 ReleaseResource(_self->ob_itself);
124 {
125 OSErr _err = ResError();
126 if (_err != noErr) return PyMac_Error(_err);
127 }
128 Py_INCREF(Py_None);
129 _res = Py_None;
130 return _res;
131}
132
133static PyObject *ResObj_DetachResource(_self, _args)
134 ResourceObject *_self;
135 PyObject *_args;
136{
137 PyObject *_res = NULL;
138 if (!PyArg_ParseTuple(_args, ""))
139 return NULL;
140 DetachResource(_self->ob_itself);
141 {
142 OSErr _err = ResError();
143 if (_err != noErr) return PyMac_Error(_err);
144 }
145 Py_INCREF(Py_None);
146 _res = Py_None;
147 return _res;
148}
149
150static PyObject *ResObj_GetResAttrs(_self, _args)
151 ResourceObject *_self;
152 PyObject *_args;
153{
154 PyObject *_res = NULL;
155 short _rv;
156 if (!PyArg_ParseTuple(_args, ""))
157 return NULL;
158 _rv = GetResAttrs(_self->ob_itself);
159 {
160 OSErr _err = ResError();
161 if (_err != noErr) return PyMac_Error(_err);
162 }
163 _res = Py_BuildValue("h",
164 _rv);
165 return _res;
166}
167
168static PyObject *ResObj_GetResInfo(_self, _args)
169 ResourceObject *_self;
170 PyObject *_args;
171{
172 PyObject *_res = NULL;
173 short theID;
174 ResType theType;
175 Str255 name;
176 if (!PyArg_ParseTuple(_args, ""))
177 return NULL;
178 GetResInfo(_self->ob_itself,
179 &theID,
180 &theType,
181 name);
182 {
183 OSErr _err = ResError();
184 if (_err != noErr) return PyMac_Error(_err);
185 }
186 _res = Py_BuildValue("hO&O&",
187 theID,
188 PyMac_BuildOSType, theType,
189 PyMac_BuildStr255, name);
190 return _res;
191}
192
193static PyObject *ResObj_SetResInfo(_self, _args)
194 ResourceObject *_self;
195 PyObject *_args;
196{
197 PyObject *_res = NULL;
198 short theID;
199 Str255 name;
200 if (!PyArg_ParseTuple(_args, "hO&",
201 &theID,
202 PyMac_GetStr255, name))
203 return NULL;
204 SetResInfo(_self->ob_itself,
205 theID,
206 name);
207 {
208 OSErr _err = ResError();
209 if (_err != noErr) return PyMac_Error(_err);
210 }
211 Py_INCREF(Py_None);
212 _res = Py_None;
213 return _res;
214}
215
216static PyObject *ResObj_AddResource(_self, _args)
217 ResourceObject *_self;
218 PyObject *_args;
219{
220 PyObject *_res = NULL;
221 ResType theType;
222 short theID;
223 Str255 name;
224 if (!PyArg_ParseTuple(_args, "O&hO&",
225 PyMac_GetOSType, &theType,
226 &theID,
227 PyMac_GetStr255, name))
228 return NULL;
229 AddResource(_self->ob_itself,
230 theType,
231 theID,
232 name);
233 {
234 OSErr _err = ResError();
235 if (_err != noErr) return PyMac_Error(_err);
236 }
237 Py_INCREF(Py_None);
238 _res = Py_None;
239 return _res;
240}
241
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000242static PyObject *ResObj_GetResourceSizeOnDisk(_self, _args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000243 ResourceObject *_self;
244 PyObject *_args;
245{
246 PyObject *_res = NULL;
247 long _rv;
248 if (!PyArg_ParseTuple(_args, ""))
249 return NULL;
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000250 _rv = GetResourceSizeOnDisk(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000251 {
252 OSErr _err = ResError();
253 if (_err != noErr) return PyMac_Error(_err);
254 }
255 _res = Py_BuildValue("l",
256 _rv);
257 return _res;
258}
259
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000260static PyObject *ResObj_GetMaxResourceSize(_self, _args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000261 ResourceObject *_self;
262 PyObject *_args;
263{
264 PyObject *_res = NULL;
265 long _rv;
266 if (!PyArg_ParseTuple(_args, ""))
267 return NULL;
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000268 _rv = GetMaxResourceSize(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000269 {
270 OSErr _err = ResError();
271 if (_err != noErr) return PyMac_Error(_err);
272 }
273 _res = Py_BuildValue("l",
274 _rv);
275 return _res;
276}
277
Jack Jansen74a1e632000-07-14 22:37:27 +0000278#if !TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +0000279
Guido van Rossum17448e21995-01-30 11:53:55 +0000280static PyObject *ResObj_RsrcMapEntry(_self, _args)
281 ResourceObject *_self;
282 PyObject *_args;
283{
284 PyObject *_res = NULL;
285 long _rv;
286 if (!PyArg_ParseTuple(_args, ""))
287 return NULL;
288 _rv = RsrcMapEntry(_self->ob_itself);
289 {
290 OSErr _err = ResError();
291 if (_err != noErr) return PyMac_Error(_err);
292 }
293 _res = Py_BuildValue("l",
294 _rv);
295 return _res;
296}
Jack Jansene79dc762000-06-02 21:35:07 +0000297#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000298
299static PyObject *ResObj_SetResAttrs(_self, _args)
300 ResourceObject *_self;
301 PyObject *_args;
302{
303 PyObject *_res = NULL;
304 short attrs;
305 if (!PyArg_ParseTuple(_args, "h",
306 &attrs))
307 return NULL;
308 SetResAttrs(_self->ob_itself,
309 attrs);
310 {
311 OSErr _err = ResError();
312 if (_err != noErr) return PyMac_Error(_err);
313 }
314 Py_INCREF(Py_None);
315 _res = Py_None;
316 return _res;
317}
318
319static PyObject *ResObj_ChangedResource(_self, _args)
320 ResourceObject *_self;
321 PyObject *_args;
322{
323 PyObject *_res = NULL;
324 if (!PyArg_ParseTuple(_args, ""))
325 return NULL;
326 ChangedResource(_self->ob_itself);
327 {
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 Jansenb81cf9d1995-06-06 13:08:40 +0000336static PyObject *ResObj_RemoveResource(_self, _args)
Guido van Rossum17448e21995-01-30 11:53:55 +0000337 ResourceObject *_self;
338 PyObject *_args;
339{
340 PyObject *_res = NULL;
341 if (!PyArg_ParseTuple(_args, ""))
342 return NULL;
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000343 RemoveResource(_self->ob_itself);
Guido van Rossum17448e21995-01-30 11:53:55 +0000344 {
345 OSErr _err = ResError();
346 if (_err != noErr) return PyMac_Error(_err);
347 }
348 Py_INCREF(Py_None);
349 _res = Py_None;
350 return _res;
351}
352
353static PyObject *ResObj_WriteResource(_self, _args)
354 ResourceObject *_self;
355 PyObject *_args;
356{
357 PyObject *_res = NULL;
358 if (!PyArg_ParseTuple(_args, ""))
359 return NULL;
360 WriteResource(_self->ob_itself);
361 {
362 OSErr _err = ResError();
363 if (_err != noErr) return PyMac_Error(_err);
364 }
365 Py_INCREF(Py_None);
366 _res = Py_None;
367 return _res;
368}
369
370static PyObject *ResObj_SetResourceSize(_self, _args)
371 ResourceObject *_self;
372 PyObject *_args;
373{
374 PyObject *_res = NULL;
375 long newSize;
376 if (!PyArg_ParseTuple(_args, "l",
377 &newSize))
378 return NULL;
379 SetResourceSize(_self->ob_itself,
380 newSize);
381 {
382 OSErr _err = ResError();
383 if (_err != noErr) return PyMac_Error(_err);
384 }
385 Py_INCREF(Py_None);
386 _res = Py_None;
387 return _res;
388}
389
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000390static PyObject *ResObj_GetNextFOND(_self, _args)
391 ResourceObject *_self;
392 PyObject *_args;
393{
394 PyObject *_res = NULL;
395 Handle _rv;
396 if (!PyArg_ParseTuple(_args, ""))
397 return NULL;
398 _rv = GetNextFOND(_self->ob_itself);
399 {
400 OSErr _err = ResError();
401 if (_err != noErr) return PyMac_Error(_err);
402 }
403 _res = Py_BuildValue("O&",
404 ResObj_New, _rv);
405 return _res;
406}
407
Jack Jansen1e054021995-06-18 20:20:27 +0000408static PyObject *ResObj_as_Control(_self, _args)
409 ResourceObject *_self;
410 PyObject *_args;
411{
412 PyObject *_res = NULL;
413
414 return CtlObj_New((ControlHandle)_self->ob_itself);
415
416}
417
418static PyObject *ResObj_as_Menu(_self, _args)
419 ResourceObject *_self;
420 PyObject *_args;
421{
422 PyObject *_res = NULL;
423
424 return MenuObj_New((MenuHandle)_self->ob_itself);
425
426}
427
Jack Jansene180d991998-04-24 10:28:20 +0000428static PyObject *ResObj_LoadResource(_self, _args)
429 ResourceObject *_self;
430 PyObject *_args;
431{
432 PyObject *_res = NULL;
433 if (!PyArg_ParseTuple(_args, ""))
434 return NULL;
435 LoadResource(_self->ob_itself);
436 {
437 OSErr _err = ResError();
438 if (_err != noErr) return PyMac_Error(_err);
439 }
440 Py_INCREF(Py_None);
441 _res = Py_None;
442 return _res;
443}
444
Jack Jansenadd03b62000-03-08 16:58:15 +0000445static PyObject *ResObj_AutoDispose(_self, _args)
446 ResourceObject *_self;
447 PyObject *_args;
448{
449 PyObject *_res = NULL;
450
451 int onoff, old = 0;
452 if (!PyArg_ParseTuple(_args, "i", &onoff))
453 return NULL;
454 if ( _self->ob_freeit )
455 old = 1;
456 if ( onoff )
457 _self->ob_freeit = PyMac_AutoDisposeHandle;
458 else
459 _self->ob_freeit = NULL;
460 return Py_BuildValue("i", old);
461
462}
463
Guido van Rossum17448e21995-01-30 11:53:55 +0000464static PyMethodDef ResObj_methods[] = {
465 {"HomeResFile", (PyCFunction)ResObj_HomeResFile, 1,
466 "() -> (short _rv)"},
Jack Jansen1c4e6141998-04-21 15:23:55 +0000467 {"MacLoadResource", (PyCFunction)ResObj_MacLoadResource, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000468 "() -> None"},
469 {"ReleaseResource", (PyCFunction)ResObj_ReleaseResource, 1,
470 "() -> None"},
471 {"DetachResource", (PyCFunction)ResObj_DetachResource, 1,
472 "() -> None"},
473 {"GetResAttrs", (PyCFunction)ResObj_GetResAttrs, 1,
474 "() -> (short _rv)"},
475 {"GetResInfo", (PyCFunction)ResObj_GetResInfo, 1,
476 "() -> (short theID, ResType theType, Str255 name)"},
477 {"SetResInfo", (PyCFunction)ResObj_SetResInfo, 1,
478 "(short theID, Str255 name) -> None"},
479 {"AddResource", (PyCFunction)ResObj_AddResource, 1,
480 "(ResType theType, short theID, Str255 name) -> None"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000481 {"GetResourceSizeOnDisk", (PyCFunction)ResObj_GetResourceSizeOnDisk, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000482 "() -> (long _rv)"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000483 {"GetMaxResourceSize", (PyCFunction)ResObj_GetMaxResourceSize, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000484 "() -> (long _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +0000485
Jack Jansen74a1e632000-07-14 22:37:27 +0000486#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +0000487 {"RsrcMapEntry", (PyCFunction)ResObj_RsrcMapEntry, 1,
488 "() -> (long _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +0000489#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000490 {"SetResAttrs", (PyCFunction)ResObj_SetResAttrs, 1,
491 "(short attrs) -> None"},
492 {"ChangedResource", (PyCFunction)ResObj_ChangedResource, 1,
493 "() -> None"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000494 {"RemoveResource", (PyCFunction)ResObj_RemoveResource, 1,
Guido van Rossum17448e21995-01-30 11:53:55 +0000495 "() -> None"},
496 {"WriteResource", (PyCFunction)ResObj_WriteResource, 1,
497 "() -> None"},
498 {"SetResourceSize", (PyCFunction)ResObj_SetResourceSize, 1,
499 "(long newSize) -> None"},
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000500 {"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1,
501 "() -> (Handle _rv)"},
Jack Jansen1e054021995-06-18 20:20:27 +0000502 {"as_Control", (PyCFunction)ResObj_as_Control, 1,
503 "Return this resource/handle as a Control"},
504 {"as_Menu", (PyCFunction)ResObj_as_Menu, 1,
505 "Return this resource/handle as a Menu"},
Jack Jansene180d991998-04-24 10:28:20 +0000506 {"LoadResource", (PyCFunction)ResObj_LoadResource, 1,
507 "() -> None"},
Jack Jansenadd03b62000-03-08 16:58:15 +0000508 {"AutoDispose", (PyCFunction)ResObj_AutoDispose, 1,
509 "(int)->int. Automatically DisposeHandle the object on Python object cleanup"},
Guido van Rossum17448e21995-01-30 11:53:55 +0000510 {NULL, NULL, 0}
511};
512
513PyMethodChain ResObj_chain = { ResObj_methods, NULL };
514
515static PyObject *ResObj_getattr(self, name)
516 ResourceObject *self;
517 char *name;
518{
519
520 if (strcmp(name, "size") == 0)
521 return PyInt_FromLong(GetHandleSize(self->ob_itself));
522 if (strcmp(name, "data") == 0) {
523 PyObject *res;
524 char state;
525 state = HGetState(self->ob_itself);
526 HLock(self->ob_itself);
527 res = PyString_FromStringAndSize(
528 *self->ob_itself,
529 GetHandleSize(self->ob_itself));
530 HUnlock(self->ob_itself);
531 HSetState(self->ob_itself, state);
532 return res;
533 }
534 if (strcmp(name, "__members__") == 0)
535 return Py_BuildValue("[ss]", "data", "size");
536
537 return Py_FindMethodInChain(&ResObj_chain, (PyObject *)self, name);
538}
539
Jack Jansen1e054021995-06-18 20:20:27 +0000540static int
541ResObj_setattr(self, name, value)
542 ResourceObject *self;
543 char *name;
544 PyObject *value;
545{
546 char *data;
547 long size;
548
549 if (strcmp(name, "data") != 0 || value == NULL )
550 return -1;
551 if ( !PyString_Check(value) )
552 return -1;
553 size = PyString_Size(value);
554 data = PyString_AsString(value);
555 /* XXXX Do I need the GetState/SetState calls? */
556 SetHandleSize(self->ob_itself, size);
557 if ( MemError())
558 return -1;
559 HLock(self->ob_itself);
560 memcpy((char *)*self->ob_itself, data, size);
561 HUnlock(self->ob_itself);
562 /* XXXX Should I do the Changed call immedeately? */
563 return 0;
564}
565
Guido van Rossum17448e21995-01-30 11:53:55 +0000566
Jack Jansena05ac601999-12-12 21:41:51 +0000567#define ResObj_compare NULL
568
569#define ResObj_repr NULL
570
571#define ResObj_hash NULL
572
Guido van Rossum17448e21995-01-30 11:53:55 +0000573PyTypeObject Resource_Type = {
574 PyObject_HEAD_INIT(&PyType_Type)
575 0, /*ob_size*/
576 "Resource", /*tp_name*/
577 sizeof(ResourceObject), /*tp_basicsize*/
578 0, /*tp_itemsize*/
579 /* methods */
580 (destructor) ResObj_dealloc, /*tp_dealloc*/
581 0, /*tp_print*/
582 (getattrfunc) ResObj_getattr, /*tp_getattr*/
583 (setattrfunc) ResObj_setattr, /*tp_setattr*/
Jack Jansena05ac601999-12-12 21:41:51 +0000584 (cmpfunc) ResObj_compare, /*tp_compare*/
585 (reprfunc) ResObj_repr, /*tp_repr*/
586 (PyNumberMethods *)0, /* tp_as_number */
587 (PySequenceMethods *)0, /* tp_as_sequence */
588 (PyMappingMethods *)0, /* tp_as_mapping */
589 (hashfunc) ResObj_hash, /*tp_hash*/
Guido van Rossum17448e21995-01-30 11:53:55 +0000590};
591
592/* -------------------- End object type Resource -------------------- */
593
594
Jack Jansen74a1e632000-07-14 22:37:27 +0000595#if !TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +0000596
Guido van Rossum17448e21995-01-30 11:53:55 +0000597static PyObject *Res_InitResources(_self, _args)
598 PyObject *_self;
599 PyObject *_args;
600{
601 PyObject *_res = NULL;
602 short _rv;
603 if (!PyArg_ParseTuple(_args, ""))
604 return NULL;
605 _rv = InitResources();
606 {
607 OSErr _err = ResError();
608 if (_err != noErr) return PyMac_Error(_err);
609 }
610 _res = Py_BuildValue("h",
611 _rv);
612 return _res;
613}
Jack Jansene79dc762000-06-02 21:35:07 +0000614#endif
615
Jack Jansen74a1e632000-07-14 22:37:27 +0000616#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +0000617
618static PyObject *Res_RsrcZoneInit(_self, _args)
619 PyObject *_self;
620 PyObject *_args;
621{
622 PyObject *_res = NULL;
623 if (!PyArg_ParseTuple(_args, ""))
624 return NULL;
625 RsrcZoneInit();
626 {
627 OSErr _err = ResError();
628 if (_err != noErr) return PyMac_Error(_err);
629 }
630 Py_INCREF(Py_None);
631 _res = Py_None;
632 return _res;
633}
Jack Jansene79dc762000-06-02 21:35:07 +0000634#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000635
636static PyObject *Res_CloseResFile(_self, _args)
637 PyObject *_self;
638 PyObject *_args;
639{
640 PyObject *_res = NULL;
641 short refNum;
642 if (!PyArg_ParseTuple(_args, "h",
643 &refNum))
644 return NULL;
645 CloseResFile(refNum);
646 {
647 OSErr _err = ResError();
648 if (_err != noErr) return PyMac_Error(_err);
649 }
650 Py_INCREF(Py_None);
651 _res = Py_None;
652 return _res;
653}
654
655static PyObject *Res_ResError(_self, _args)
656 PyObject *_self;
657 PyObject *_args;
658{
659 PyObject *_res = NULL;
Jack Jansen21f96871998-02-20 16:02:09 +0000660 OSErr _rv;
Guido van Rossum17448e21995-01-30 11:53:55 +0000661 if (!PyArg_ParseTuple(_args, ""))
662 return NULL;
663 _rv = ResError();
664 {
665 OSErr _err = ResError();
666 if (_err != noErr) return PyMac_Error(_err);
667 }
668 _res = Py_BuildValue("h",
669 _rv);
670 return _res;
671}
672
673static PyObject *Res_CurResFile(_self, _args)
674 PyObject *_self;
675 PyObject *_args;
676{
677 PyObject *_res = NULL;
678 short _rv;
679 if (!PyArg_ParseTuple(_args, ""))
680 return NULL;
681 _rv = CurResFile();
682 {
683 OSErr _err = ResError();
684 if (_err != noErr) return PyMac_Error(_err);
685 }
686 _res = Py_BuildValue("h",
687 _rv);
688 return _res;
689}
690
Jack Jansen74a1e632000-07-14 22:37:27 +0000691#if !TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +0000692
Guido van Rossum17448e21995-01-30 11:53:55 +0000693static PyObject *Res_CreateResFile(_self, _args)
694 PyObject *_self;
695 PyObject *_args;
696{
697 PyObject *_res = NULL;
698 Str255 fileName;
699 if (!PyArg_ParseTuple(_args, "O&",
700 PyMac_GetStr255, fileName))
701 return NULL;
702 CreateResFile(fileName);
703 {
704 OSErr _err = ResError();
705 if (_err != noErr) return PyMac_Error(_err);
706 }
707 Py_INCREF(Py_None);
708 _res = Py_None;
709 return _res;
710}
Jack Jansene79dc762000-06-02 21:35:07 +0000711#endif
712
Jack Jansen74a1e632000-07-14 22:37:27 +0000713#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +0000714
715static PyObject *Res_OpenResFile(_self, _args)
716 PyObject *_self;
717 PyObject *_args;
718{
719 PyObject *_res = NULL;
720 short _rv;
721 Str255 fileName;
722 if (!PyArg_ParseTuple(_args, "O&",
723 PyMac_GetStr255, fileName))
724 return NULL;
725 _rv = OpenResFile(fileName);
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}
Jack Jansene79dc762000-06-02 21:35:07 +0000734#endif
Guido van Rossum17448e21995-01-30 11:53:55 +0000735
736static PyObject *Res_UseResFile(_self, _args)
737 PyObject *_self;
738 PyObject *_args;
739{
740 PyObject *_res = NULL;
741 short refNum;
742 if (!PyArg_ParseTuple(_args, "h",
743 &refNum))
744 return NULL;
745 UseResFile(refNum);
746 {
747 OSErr _err = ResError();
748 if (_err != noErr) return PyMac_Error(_err);
749 }
750 Py_INCREF(Py_None);
751 _res = Py_None;
752 return _res;
753}
754
755static PyObject *Res_CountTypes(_self, _args)
756 PyObject *_self;
757 PyObject *_args;
758{
759 PyObject *_res = NULL;
760 short _rv;
761 if (!PyArg_ParseTuple(_args, ""))
762 return NULL;
763 _rv = CountTypes();
764 {
765 OSErr _err = ResError();
766 if (_err != noErr) return PyMac_Error(_err);
767 }
768 _res = Py_BuildValue("h",
769 _rv);
770 return _res;
771}
772
773static PyObject *Res_Count1Types(_self, _args)
774 PyObject *_self;
775 PyObject *_args;
776{
777 PyObject *_res = NULL;
778 short _rv;
779 if (!PyArg_ParseTuple(_args, ""))
780 return NULL;
781 _rv = Count1Types();
782 {
783 OSErr _err = ResError();
784 if (_err != noErr) return PyMac_Error(_err);
785 }
786 _res = Py_BuildValue("h",
787 _rv);
788 return _res;
789}
790
791static PyObject *Res_GetIndType(_self, _args)
792 PyObject *_self;
793 PyObject *_args;
794{
795 PyObject *_res = NULL;
796 ResType theType;
797 short index;
798 if (!PyArg_ParseTuple(_args, "h",
799 &index))
800 return NULL;
801 GetIndType(&theType,
802 index);
803 {
804 OSErr _err = ResError();
805 if (_err != noErr) return PyMac_Error(_err);
806 }
807 _res = Py_BuildValue("O&",
808 PyMac_BuildOSType, theType);
809 return _res;
810}
811
812static PyObject *Res_Get1IndType(_self, _args)
813 PyObject *_self;
814 PyObject *_args;
815{
816 PyObject *_res = NULL;
817 ResType theType;
818 short index;
819 if (!PyArg_ParseTuple(_args, "h",
820 &index))
821 return NULL;
822 Get1IndType(&theType,
823 index);
824 {
825 OSErr _err = ResError();
826 if (_err != noErr) return PyMac_Error(_err);
827 }
828 _res = Py_BuildValue("O&",
829 PyMac_BuildOSType, theType);
830 return _res;
831}
832
833static PyObject *Res_SetResLoad(_self, _args)
834 PyObject *_self;
835 PyObject *_args;
836{
837 PyObject *_res = NULL;
838 Boolean load;
839 if (!PyArg_ParseTuple(_args, "b",
840 &load))
841 return NULL;
842 SetResLoad(load);
843 {
844 OSErr _err = ResError();
845 if (_err != noErr) return PyMac_Error(_err);
846 }
847 Py_INCREF(Py_None);
848 _res = Py_None;
849 return _res;
850}
851
852static PyObject *Res_CountResources(_self, _args)
853 PyObject *_self;
854 PyObject *_args;
855{
856 PyObject *_res = NULL;
857 short _rv;
858 ResType theType;
859 if (!PyArg_ParseTuple(_args, "O&",
860 PyMac_GetOSType, &theType))
861 return NULL;
862 _rv = CountResources(theType);
863 {
864 OSErr _err = ResError();
865 if (_err != noErr) return PyMac_Error(_err);
866 }
867 _res = Py_BuildValue("h",
868 _rv);
869 return _res;
870}
871
872static PyObject *Res_Count1Resources(_self, _args)
873 PyObject *_self;
874 PyObject *_args;
875{
876 PyObject *_res = NULL;
877 short _rv;
878 ResType theType;
879 if (!PyArg_ParseTuple(_args, "O&",
880 PyMac_GetOSType, &theType))
881 return NULL;
882 _rv = Count1Resources(theType);
883 {
884 OSErr _err = ResError();
885 if (_err != noErr) return PyMac_Error(_err);
886 }
887 _res = Py_BuildValue("h",
888 _rv);
889 return _res;
890}
891
892static PyObject *Res_GetIndResource(_self, _args)
893 PyObject *_self;
894 PyObject *_args;
895{
896 PyObject *_res = NULL;
897 Handle _rv;
898 ResType theType;
899 short index;
900 if (!PyArg_ParseTuple(_args, "O&h",
901 PyMac_GetOSType, &theType,
902 &index))
903 return NULL;
904 _rv = GetIndResource(theType,
905 index);
906 {
907 OSErr _err = ResError();
908 if (_err != noErr) return PyMac_Error(_err);
909 }
910 _res = Py_BuildValue("O&",
911 ResObj_New, _rv);
912 return _res;
913}
914
915static PyObject *Res_Get1IndResource(_self, _args)
916 PyObject *_self;
917 PyObject *_args;
918{
919 PyObject *_res = NULL;
920 Handle _rv;
921 ResType theType;
922 short index;
923 if (!PyArg_ParseTuple(_args, "O&h",
924 PyMac_GetOSType, &theType,
925 &index))
926 return NULL;
927 _rv = Get1IndResource(theType,
928 index);
929 {
930 OSErr _err = ResError();
931 if (_err != noErr) return PyMac_Error(_err);
932 }
933 _res = Py_BuildValue("O&",
934 ResObj_New, _rv);
935 return _res;
936}
937
938static PyObject *Res_GetResource(_self, _args)
939 PyObject *_self;
940 PyObject *_args;
941{
942 PyObject *_res = NULL;
943 Handle _rv;
944 ResType theType;
945 short theID;
946 if (!PyArg_ParseTuple(_args, "O&h",
947 PyMac_GetOSType, &theType,
948 &theID))
949 return NULL;
950 _rv = GetResource(theType,
951 theID);
952 {
953 OSErr _err = ResError();
954 if (_err != noErr) return PyMac_Error(_err);
955 }
956 _res = Py_BuildValue("O&",
957 ResObj_New, _rv);
958 return _res;
959}
960
961static PyObject *Res_Get1Resource(_self, _args)
962 PyObject *_self;
963 PyObject *_args;
964{
965 PyObject *_res = NULL;
966 Handle _rv;
967 ResType theType;
968 short theID;
969 if (!PyArg_ParseTuple(_args, "O&h",
970 PyMac_GetOSType, &theType,
971 &theID))
972 return NULL;
973 _rv = Get1Resource(theType,
974 theID);
975 {
976 OSErr _err = ResError();
977 if (_err != noErr) return PyMac_Error(_err);
978 }
979 _res = Py_BuildValue("O&",
980 ResObj_New, _rv);
981 return _res;
982}
983
984static PyObject *Res_GetNamedResource(_self, _args)
985 PyObject *_self;
986 PyObject *_args;
987{
988 PyObject *_res = NULL;
989 Handle _rv;
990 ResType theType;
991 Str255 name;
992 if (!PyArg_ParseTuple(_args, "O&O&",
993 PyMac_GetOSType, &theType,
994 PyMac_GetStr255, name))
995 return NULL;
996 _rv = GetNamedResource(theType,
997 name);
998 {
999 OSErr _err = ResError();
1000 if (_err != noErr) return PyMac_Error(_err);
1001 }
1002 _res = Py_BuildValue("O&",
1003 ResObj_New, _rv);
1004 return _res;
1005}
1006
1007static PyObject *Res_Get1NamedResource(_self, _args)
1008 PyObject *_self;
1009 PyObject *_args;
1010{
1011 PyObject *_res = NULL;
1012 Handle _rv;
1013 ResType theType;
1014 Str255 name;
1015 if (!PyArg_ParseTuple(_args, "O&O&",
1016 PyMac_GetOSType, &theType,
1017 PyMac_GetStr255, name))
1018 return NULL;
1019 _rv = Get1NamedResource(theType,
1020 name);
1021 {
1022 OSErr _err = ResError();
1023 if (_err != noErr) return PyMac_Error(_err);
1024 }
1025 _res = Py_BuildValue("O&",
1026 ResObj_New, _rv);
1027 return _res;
1028}
1029
1030static PyObject *Res_UniqueID(_self, _args)
1031 PyObject *_self;
1032 PyObject *_args;
1033{
1034 PyObject *_res = NULL;
1035 short _rv;
1036 ResType theType;
1037 if (!PyArg_ParseTuple(_args, "O&",
1038 PyMac_GetOSType, &theType))
1039 return NULL;
1040 _rv = UniqueID(theType);
1041 {
1042 OSErr _err = ResError();
1043 if (_err != noErr) return PyMac_Error(_err);
1044 }
1045 _res = Py_BuildValue("h",
1046 _rv);
1047 return _res;
1048}
1049
1050static PyObject *Res_Unique1ID(_self, _args)
1051 PyObject *_self;
1052 PyObject *_args;
1053{
1054 PyObject *_res = NULL;
1055 short _rv;
1056 ResType theType;
1057 if (!PyArg_ParseTuple(_args, "O&",
1058 PyMac_GetOSType, &theType))
1059 return NULL;
1060 _rv = Unique1ID(theType);
1061 {
1062 OSErr _err = ResError();
1063 if (_err != noErr) return PyMac_Error(_err);
1064 }
1065 _res = Py_BuildValue("h",
1066 _rv);
1067 return _res;
1068}
1069
1070static PyObject *Res_UpdateResFile(_self, _args)
1071 PyObject *_self;
1072 PyObject *_args;
1073{
1074 PyObject *_res = NULL;
1075 short refNum;
1076 if (!PyArg_ParseTuple(_args, "h",
1077 &refNum))
1078 return NULL;
1079 UpdateResFile(refNum);
1080 {
1081 OSErr _err = ResError();
1082 if (_err != noErr) return PyMac_Error(_err);
1083 }
1084 Py_INCREF(Py_None);
1085 _res = Py_None;
1086 return _res;
1087}
1088
1089static PyObject *Res_SetResPurge(_self, _args)
1090 PyObject *_self;
1091 PyObject *_args;
1092{
1093 PyObject *_res = NULL;
1094 Boolean install;
1095 if (!PyArg_ParseTuple(_args, "b",
1096 &install))
1097 return NULL;
1098 SetResPurge(install);
1099 {
1100 OSErr _err = ResError();
1101 if (_err != noErr) return PyMac_Error(_err);
1102 }
1103 Py_INCREF(Py_None);
1104 _res = Py_None;
1105 return _res;
1106}
1107
1108static PyObject *Res_GetResFileAttrs(_self, _args)
1109 PyObject *_self;
1110 PyObject *_args;
1111{
1112 PyObject *_res = NULL;
1113 short _rv;
1114 short refNum;
1115 if (!PyArg_ParseTuple(_args, "h",
1116 &refNum))
1117 return NULL;
1118 _rv = GetResFileAttrs(refNum);
1119 {
1120 OSErr _err = ResError();
1121 if (_err != noErr) return PyMac_Error(_err);
1122 }
1123 _res = Py_BuildValue("h",
1124 _rv);
1125 return _res;
1126}
1127
1128static PyObject *Res_SetResFileAttrs(_self, _args)
1129 PyObject *_self;
1130 PyObject *_args;
1131{
1132 PyObject *_res = NULL;
1133 short refNum;
1134 short attrs;
1135 if (!PyArg_ParseTuple(_args, "hh",
1136 &refNum,
1137 &attrs))
1138 return NULL;
1139 SetResFileAttrs(refNum,
1140 attrs);
1141 {
1142 OSErr _err = ResError();
1143 if (_err != noErr) return PyMac_Error(_err);
1144 }
1145 Py_INCREF(Py_None);
1146 _res = Py_None;
1147 return _res;
1148}
1149
1150static PyObject *Res_OpenRFPerm(_self, _args)
1151 PyObject *_self;
1152 PyObject *_args;
1153{
1154 PyObject *_res = NULL;
1155 short _rv;
1156 Str255 fileName;
1157 short vRefNum;
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001158 SignedByte permission;
1159 if (!PyArg_ParseTuple(_args, "O&hb",
Guido van Rossum17448e21995-01-30 11:53:55 +00001160 PyMac_GetStr255, fileName,
1161 &vRefNum,
1162 &permission))
1163 return NULL;
1164 _rv = OpenRFPerm(fileName,
1165 vRefNum,
1166 permission);
1167 {
1168 OSErr _err = ResError();
1169 if (_err != noErr) return PyMac_Error(_err);
1170 }
1171 _res = Py_BuildValue("h",
1172 _rv);
1173 return _res;
1174}
1175
Jack Jansen74a1e632000-07-14 22:37:27 +00001176#if !TARGET_API_MAC_CARBON
Jack Jansene79dc762000-06-02 21:35:07 +00001177
Guido van Rossum17448e21995-01-30 11:53:55 +00001178static PyObject *Res_RGetResource(_self, _args)
1179 PyObject *_self;
1180 PyObject *_args;
1181{
1182 PyObject *_res = NULL;
1183 Handle _rv;
1184 ResType theType;
1185 short theID;
1186 if (!PyArg_ParseTuple(_args, "O&h",
1187 PyMac_GetOSType, &theType,
1188 &theID))
1189 return NULL;
1190 _rv = RGetResource(theType,
1191 theID);
1192 {
1193 OSErr _err = ResError();
1194 if (_err != noErr) return PyMac_Error(_err);
1195 }
1196 _res = Py_BuildValue("O&",
1197 ResObj_New, _rv);
1198 return _res;
1199}
Jack Jansene79dc762000-06-02 21:35:07 +00001200#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001201
1202static PyObject *Res_HOpenResFile(_self, _args)
1203 PyObject *_self;
1204 PyObject *_args;
1205{
1206 PyObject *_res = NULL;
1207 short _rv;
1208 short vRefNum;
1209 long dirID;
1210 Str255 fileName;
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001211 SignedByte permission;
1212 if (!PyArg_ParseTuple(_args, "hlO&b",
Guido van Rossum17448e21995-01-30 11:53:55 +00001213 &vRefNum,
1214 &dirID,
1215 PyMac_GetStr255, fileName,
1216 &permission))
1217 return NULL;
1218 _rv = HOpenResFile(vRefNum,
1219 dirID,
1220 fileName,
1221 permission);
1222 {
1223 OSErr _err = ResError();
1224 if (_err != noErr) return PyMac_Error(_err);
1225 }
1226 _res = Py_BuildValue("h",
1227 _rv);
1228 return _res;
1229}
1230
1231static PyObject *Res_HCreateResFile(_self, _args)
1232 PyObject *_self;
1233 PyObject *_args;
1234{
1235 PyObject *_res = NULL;
1236 short vRefNum;
1237 long dirID;
1238 Str255 fileName;
1239 if (!PyArg_ParseTuple(_args, "hlO&",
1240 &vRefNum,
1241 &dirID,
1242 PyMac_GetStr255, fileName))
1243 return NULL;
1244 HCreateResFile(vRefNum,
1245 dirID,
1246 fileName);
1247 {
1248 OSErr _err = ResError();
1249 if (_err != noErr) return PyMac_Error(_err);
1250 }
1251 Py_INCREF(Py_None);
1252 _res = Py_None;
1253 return _res;
1254}
1255
1256static PyObject *Res_FSpOpenResFile(_self, _args)
1257 PyObject *_self;
1258 PyObject *_args;
1259{
1260 PyObject *_res = NULL;
1261 short _rv;
1262 FSSpec spec;
1263 SignedByte permission;
1264 if (!PyArg_ParseTuple(_args, "O&b",
1265 PyMac_GetFSSpec, &spec,
1266 &permission))
1267 return NULL;
1268 _rv = FSpOpenResFile(&spec,
1269 permission);
1270 {
1271 OSErr _err = ResError();
1272 if (_err != noErr) return PyMac_Error(_err);
1273 }
1274 _res = Py_BuildValue("h",
1275 _rv);
1276 return _res;
1277}
1278
1279static PyObject *Res_FSpCreateResFile(_self, _args)
1280 PyObject *_self;
1281 PyObject *_args;
1282{
1283 PyObject *_res = NULL;
1284 FSSpec spec;
1285 OSType creator;
1286 OSType fileType;
1287 ScriptCode scriptTag;
1288 if (!PyArg_ParseTuple(_args, "O&O&O&h",
1289 PyMac_GetFSSpec, &spec,
1290 PyMac_GetOSType, &creator,
1291 PyMac_GetOSType, &fileType,
1292 &scriptTag))
1293 return NULL;
1294 FSpCreateResFile(&spec,
1295 creator,
1296 fileType,
1297 scriptTag);
1298 {
1299 OSErr _err = ResError();
1300 if (_err != noErr) return PyMac_Error(_err);
1301 }
1302 Py_INCREF(Py_None);
1303 _res = Py_None;
1304 return _res;
1305}
1306
Jack Jansen723ad8a2000-12-12 22:10:21 +00001307#if TARGET_API_MAC_CARBON
1308
1309static PyObject *Res_InsertResourceFile(_self, _args)
1310 PyObject *_self;
1311 PyObject *_args;
1312{
1313 PyObject *_res = NULL;
1314 OSErr _rv;
1315 SInt16 refNum;
1316 RsrcChainLocation where;
1317 if (!PyArg_ParseTuple(_args, "hh",
1318 &refNum,
1319 &where))
1320 return NULL;
1321 _rv = InsertResourceFile(refNum,
1322 where);
1323 {
1324 OSErr _err = ResError();
1325 if (_err != noErr) return PyMac_Error(_err);
1326 }
1327 _res = Py_BuildValue("h",
1328 _rv);
1329 return _res;
1330}
1331#endif
1332
1333#if TARGET_API_MAC_CARBON
1334
1335static PyObject *Res_DetachResourceFile(_self, _args)
1336 PyObject *_self;
1337 PyObject *_args;
1338{
1339 PyObject *_res = NULL;
1340 OSErr _rv;
1341 SInt16 refNum;
1342 if (!PyArg_ParseTuple(_args, "h",
1343 &refNum))
1344 return NULL;
1345 _rv = DetachResourceFile(refNum);
1346 {
1347 OSErr _err = ResError();
1348 if (_err != noErr) return PyMac_Error(_err);
1349 }
1350 _res = Py_BuildValue("h",
1351 _rv);
1352 return _res;
1353}
1354#endif
1355
Jack Jansen043732e2001-03-02 16:32:03 +00001356#if TARGET_API_MAC_CARBON
1357
Jack Jansen723ad8a2000-12-12 22:10:21 +00001358static PyObject *Res_FSpResourceFileAlreadyOpen(_self, _args)
1359 PyObject *_self;
1360 PyObject *_args;
1361{
1362 PyObject *_res = NULL;
1363 Boolean _rv;
1364 FSSpec resourceFile;
1365 Boolean inChain;
1366 SInt16 refNum;
1367 if (!PyArg_ParseTuple(_args, "O&",
1368 PyMac_GetFSSpec, &resourceFile))
1369 return NULL;
1370 _rv = FSpResourceFileAlreadyOpen(&resourceFile,
1371 &inChain,
1372 &refNum);
1373 {
1374 OSErr _err = ResError();
1375 if (_err != noErr) return PyMac_Error(_err);
1376 }
1377 _res = Py_BuildValue("bbh",
1378 _rv,
1379 inChain,
1380 refNum);
1381 return _res;
1382}
Jack Jansen043732e2001-03-02 16:32:03 +00001383#endif
Jack Jansen723ad8a2000-12-12 22:10:21 +00001384
1385#if TARGET_API_MAC_CARBON
1386
1387static PyObject *Res_FSpOpenOrphanResFile(_self, _args)
1388 PyObject *_self;
1389 PyObject *_args;
1390{
1391 PyObject *_res = NULL;
1392 OSErr _rv;
1393 FSSpec spec;
1394 SignedByte permission;
1395 SInt16 refNum;
1396 if (!PyArg_ParseTuple(_args, "O&b",
1397 PyMac_GetFSSpec, &spec,
1398 &permission))
1399 return NULL;
1400 _rv = FSpOpenOrphanResFile(&spec,
1401 permission,
1402 &refNum);
1403 {
1404 OSErr _err = ResError();
1405 if (_err != noErr) return PyMac_Error(_err);
1406 }
1407 _res = Py_BuildValue("hh",
1408 _rv,
1409 refNum);
1410 return _res;
1411}
1412#endif
1413
1414#if TARGET_API_MAC_CARBON
1415
1416static PyObject *Res_GetTopResourceFile(_self, _args)
1417 PyObject *_self;
1418 PyObject *_args;
1419{
1420 PyObject *_res = NULL;
1421 OSErr _rv;
1422 SInt16 refNum;
1423 if (!PyArg_ParseTuple(_args, ""))
1424 return NULL;
1425 _rv = GetTopResourceFile(&refNum);
1426 {
1427 OSErr _err = ResError();
1428 if (_err != noErr) return PyMac_Error(_err);
1429 }
1430 _res = Py_BuildValue("hh",
1431 _rv,
1432 refNum);
1433 return _res;
1434}
1435#endif
1436
1437#if TARGET_API_MAC_CARBON
1438
1439static PyObject *Res_GetNextResourceFile(_self, _args)
1440 PyObject *_self;
1441 PyObject *_args;
1442{
1443 PyObject *_res = NULL;
1444 OSErr _rv;
1445 SInt16 curRefNum;
1446 SInt16 nextRefNum;
1447 if (!PyArg_ParseTuple(_args, "h",
1448 &curRefNum))
1449 return NULL;
1450 _rv = GetNextResourceFile(curRefNum,
1451 &nextRefNum);
1452 {
1453 OSErr _err = ResError();
1454 if (_err != noErr) return PyMac_Error(_err);
1455 }
1456 _res = Py_BuildValue("hh",
1457 _rv,
1458 nextRefNum);
1459 return _res;
1460}
1461#endif
1462
Guido van Rossum9bcb6411995-02-05 16:54:27 +00001463static PyObject *Res_Resource(_self, _args)
1464 PyObject *_self;
1465 PyObject *_args;
1466{
1467 PyObject *_res = NULL;
1468
1469 char *buf;
1470 int len;
1471 Handle h;
1472
1473 if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
1474 return NULL;
1475 h = NewHandle(len);
1476 if ( h == NULL ) {
1477 PyErr_NoMemory();
1478 return NULL;
1479 }
1480 HLock(h);
1481 memcpy(*h, buf, len);
1482 HUnlock(h);
Jack Jansenadd03b62000-03-08 16:58:15 +00001483 return ResObj_New(h);
1484
1485}
1486
1487static PyObject *Res_Handle(_self, _args)
1488 PyObject *_self;
1489 PyObject *_args;
1490{
1491 PyObject *_res = NULL;
1492
1493 char *buf;
1494 int len;
1495 Handle h;
1496 ResourceObject *rv;
1497
1498 if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
1499 return NULL;
1500 h = NewHandle(len);
1501 if ( h == NULL ) {
1502 PyErr_NoMemory();
1503 return NULL;
1504 }
1505 HLock(h);
1506 memcpy(*h, buf, len);
1507 HUnlock(h);
1508 rv = (ResourceObject *)ResObj_New(h);
1509 rv->ob_freeit = PyMac_AutoDisposeHandle;
1510 return (PyObject *)rv;
Guido van Rossum9bcb6411995-02-05 16:54:27 +00001511
1512}
1513
Guido van Rossum17448e21995-01-30 11:53:55 +00001514static PyMethodDef Res_methods[] = {
Jack Jansene79dc762000-06-02 21:35:07 +00001515
Jack Jansen74a1e632000-07-14 22:37:27 +00001516#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +00001517 {"InitResources", (PyCFunction)Res_InitResources, 1,
1518 "() -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001519#endif
1520
Jack Jansen74a1e632000-07-14 22:37:27 +00001521#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +00001522 {"RsrcZoneInit", (PyCFunction)Res_RsrcZoneInit, 1,
1523 "() -> None"},
Jack Jansene79dc762000-06-02 21:35:07 +00001524#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001525 {"CloseResFile", (PyCFunction)Res_CloseResFile, 1,
1526 "(short refNum) -> None"},
1527 {"ResError", (PyCFunction)Res_ResError, 1,
Jack Jansen21f96871998-02-20 16:02:09 +00001528 "() -> (OSErr _rv)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001529 {"CurResFile", (PyCFunction)Res_CurResFile, 1,
1530 "() -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001531
Jack Jansen74a1e632000-07-14 22:37:27 +00001532#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +00001533 {"CreateResFile", (PyCFunction)Res_CreateResFile, 1,
1534 "(Str255 fileName) -> None"},
Jack Jansene79dc762000-06-02 21:35:07 +00001535#endif
1536
Jack Jansen74a1e632000-07-14 22:37:27 +00001537#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +00001538 {"OpenResFile", (PyCFunction)Res_OpenResFile, 1,
1539 "(Str255 fileName) -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001540#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001541 {"UseResFile", (PyCFunction)Res_UseResFile, 1,
1542 "(short refNum) -> None"},
1543 {"CountTypes", (PyCFunction)Res_CountTypes, 1,
1544 "() -> (short _rv)"},
1545 {"Count1Types", (PyCFunction)Res_Count1Types, 1,
1546 "() -> (short _rv)"},
1547 {"GetIndType", (PyCFunction)Res_GetIndType, 1,
1548 "(short index) -> (ResType theType)"},
1549 {"Get1IndType", (PyCFunction)Res_Get1IndType, 1,
1550 "(short index) -> (ResType theType)"},
1551 {"SetResLoad", (PyCFunction)Res_SetResLoad, 1,
1552 "(Boolean load) -> None"},
1553 {"CountResources", (PyCFunction)Res_CountResources, 1,
1554 "(ResType theType) -> (short _rv)"},
1555 {"Count1Resources", (PyCFunction)Res_Count1Resources, 1,
1556 "(ResType theType) -> (short _rv)"},
1557 {"GetIndResource", (PyCFunction)Res_GetIndResource, 1,
1558 "(ResType theType, short index) -> (Handle _rv)"},
1559 {"Get1IndResource", (PyCFunction)Res_Get1IndResource, 1,
1560 "(ResType theType, short index) -> (Handle _rv)"},
1561 {"GetResource", (PyCFunction)Res_GetResource, 1,
1562 "(ResType theType, short theID) -> (Handle _rv)"},
1563 {"Get1Resource", (PyCFunction)Res_Get1Resource, 1,
1564 "(ResType theType, short theID) -> (Handle _rv)"},
1565 {"GetNamedResource", (PyCFunction)Res_GetNamedResource, 1,
1566 "(ResType theType, Str255 name) -> (Handle _rv)"},
1567 {"Get1NamedResource", (PyCFunction)Res_Get1NamedResource, 1,
1568 "(ResType theType, Str255 name) -> (Handle _rv)"},
1569 {"UniqueID", (PyCFunction)Res_UniqueID, 1,
1570 "(ResType theType) -> (short _rv)"},
1571 {"Unique1ID", (PyCFunction)Res_Unique1ID, 1,
1572 "(ResType theType) -> (short _rv)"},
1573 {"UpdateResFile", (PyCFunction)Res_UpdateResFile, 1,
1574 "(short refNum) -> None"},
1575 {"SetResPurge", (PyCFunction)Res_SetResPurge, 1,
1576 "(Boolean install) -> None"},
1577 {"GetResFileAttrs", (PyCFunction)Res_GetResFileAttrs, 1,
1578 "(short refNum) -> (short _rv)"},
1579 {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1,
1580 "(short refNum, short attrs) -> None"},
1581 {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1,
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001582 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001583
Jack Jansen74a1e632000-07-14 22:37:27 +00001584#if !TARGET_API_MAC_CARBON
Guido van Rossum17448e21995-01-30 11:53:55 +00001585 {"RGetResource", (PyCFunction)Res_RGetResource, 1,
1586 "(ResType theType, short theID) -> (Handle _rv)"},
Jack Jansene79dc762000-06-02 21:35:07 +00001587#endif
Guido van Rossum17448e21995-01-30 11:53:55 +00001588 {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1,
Jack Jansenb81cf9d1995-06-06 13:08:40 +00001589 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
Guido van Rossum17448e21995-01-30 11:53:55 +00001590 {"HCreateResFile", (PyCFunction)Res_HCreateResFile, 1,
1591 "(short vRefNum, long dirID, Str255 fileName) -> None"},
1592 {"FSpOpenResFile", (PyCFunction)Res_FSpOpenResFile, 1,
1593 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
1594 {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1,
1595 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
Jack Jansen723ad8a2000-12-12 22:10:21 +00001596
1597#if TARGET_API_MAC_CARBON
1598 {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1,
1599 "(SInt16 refNum, RsrcChainLocation where) -> (OSErr _rv)"},
1600#endif
1601
1602#if TARGET_API_MAC_CARBON
1603 {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1,
1604 "(SInt16 refNum) -> (OSErr _rv)"},
1605#endif
Jack Jansen043732e2001-03-02 16:32:03 +00001606
1607#if TARGET_API_MAC_CARBON
Jack Jansen723ad8a2000-12-12 22:10:21 +00001608 {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1,
1609 "(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)"},
Jack Jansen043732e2001-03-02 16:32:03 +00001610#endif
Jack Jansen723ad8a2000-12-12 22:10:21 +00001611
1612#if TARGET_API_MAC_CARBON
1613 {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1,
1614 "(FSSpec spec, SignedByte permission) -> (OSErr _rv, SInt16 refNum)"},
1615#endif
1616
1617#if TARGET_API_MAC_CARBON
1618 {"GetTopResourceFile", (PyCFunction)Res_GetTopResourceFile, 1,
1619 "() -> (OSErr _rv, SInt16 refNum)"},
1620#endif
1621
1622#if TARGET_API_MAC_CARBON
1623 {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1,
1624 "(SInt16 curRefNum) -> (OSErr _rv, SInt16 nextRefNum)"},
1625#endif
Guido van Rossum9bcb6411995-02-05 16:54:27 +00001626 {"Resource", (PyCFunction)Res_Resource, 1,
Jack Jansenadd03b62000-03-08 16:58:15 +00001627 "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"},
1628 {"Handle", (PyCFunction)Res_Handle, 1,
1629 "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 +00001630 {NULL, NULL, 0}
1631};
1632
1633
1634
1635
Jack Jansend4c26461995-08-17 14:35:56 +00001636/* Alternative version of ResObj_New, which returns None for null argument */
Jack Jansen425e9eb1995-12-12 15:02:03 +00001637PyObject *OptResObj_New(itself)
Jack Jansend4c26461995-08-17 14:35:56 +00001638 Handle itself;
1639{
Jack Jansend4c26461995-08-17 14:35:56 +00001640 if (itself == NULL) {
1641 Py_INCREF(Py_None);
1642 return Py_None;
1643 }
1644 return ResObj_New(itself);
1645}
1646
Jack Jansen425e9eb1995-12-12 15:02:03 +00001647OptResObj_Convert(v, p_itself)
1648 PyObject *v;
1649 Handle *p_itself;
1650{
Jack Jansen2d76c251999-12-12 22:57:29 +00001651 PyObject *tmp;
1652
Jack Jansen425e9eb1995-12-12 15:02:03 +00001653 if ( v == Py_None ) {
1654 *p_itself = NULL;
1655 return 1;
1656 }
Jack Jansen2d76c251999-12-12 22:57:29 +00001657 if (ResObj_Check(v))
Jack Jansen425e9eb1995-12-12 15:02:03 +00001658 {
Jack Jansen2d76c251999-12-12 22:57:29 +00001659 *p_itself = ((ResourceObject *)v)->ob_itself;
1660 return 1;
Jack Jansen425e9eb1995-12-12 15:02:03 +00001661 }
Jack Jansen2d76c251999-12-12 22:57:29 +00001662 /* If it isn't a resource yet see whether it is convertible */
1663 if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) ) {
1664 *p_itself = ((ResourceObject *)tmp)->ob_itself;
1665 Py_DECREF(tmp);
1666 return 1;
1667 }
1668 PyErr_Clear();
1669 PyErr_SetString(PyExc_TypeError, "Resource required");
1670 return 0;
Jack Jansen425e9eb1995-12-12 15:02:03 +00001671}
1672
Jack Jansend4c26461995-08-17 14:35:56 +00001673
Guido van Rossum17448e21995-01-30 11:53:55 +00001674void initRes()
1675{
1676 PyObject *m;
1677 PyObject *d;
1678
1679
1680
1681
1682
1683 m = Py_InitModule("Res", Res_methods);
1684 d = PyModule_GetDict(m);
1685 Res_Error = PyMac_GetOSErrException();
1686 if (Res_Error == NULL ||
1687 PyDict_SetItemString(d, "Error", Res_Error) != 0)
Jack Jansen723ad8a2000-12-12 22:10:21 +00001688 return;
Jack Jansena755e681997-09-20 17:40:22 +00001689 Resource_Type.ob_type = &PyType_Type;
1690 Py_INCREF(&Resource_Type);
1691 if (PyDict_SetItemString(d, "ResourceType", (PyObject *)&Resource_Type) != 0)
1692 Py_FatalError("can't initialize ResourceType");
Guido van Rossum17448e21995-01-30 11:53:55 +00001693}
1694
1695/* ========================= End module Res ========================= */
1696