/Mac/Modules/res/_Resmodule.c

http://unladen-swallow.googlecode.com/ · C · 1760 lines · 1621 code · 127 blank · 12 comment · 210 complexity · fbbe81d7b48ea18dc2e2ec5b6c033f91 MD5 · raw file

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