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