1/* 2 * Some code that deals with HFSTypeCodes. 3 * 4 * Needed for backward compatiblity with earlier versions of PyObjC. 5 */ 6#include "Python.h" 7 8 9 10#include "pyobjc-api.h" 11 12#include <Foundation/Foundation.h> 13 14/* inline definition of PyMac_GetOSType pymactoolbox.h doesn't work in 64-bit mode */ 15extern int PyMac_GetOSType(PyObject *v, OSType *pr); 16extern PyObject * PyMac_BuildOSType(OSType t); 17 18 19 20 21PyDoc_STRVAR(objc_NSFileTypeForHFSTypeCode_doc, 22 "NSString *NSFileTypeForHFSTypeCode(OSType hfsTypeCode);"); 23static PyObject* 24objc_NSFileTypeForHFSTypeCode( 25 PyObject* self __attribute__((__unused__)), 26 PyObject* args, 27 PyObject* kwds) 28{ 29static char* keywords[] = { "hfsTypeCode", NULL }; 30 PyObject* result; 31 NSString* oc_result; 32 OSType hfsTypeCode; 33 34 if (!PyArg_ParseTupleAndKeywords(args, kwds, 35 "i:NSFileTypeForHFSTypeCode", 36 keywords, &hfsTypeCode)) { 37 PyErr_Clear(); 38 if (!PyArg_ParseTupleAndKeywords(args, kwds, 39 "O&:NSFileTypeForHFSTypeCode", 40 keywords, PyMac_GetOSType, &hfsTypeCode)) { 41 return NULL; 42 } 43 } 44 45 PyObjC_DURING 46 oc_result = NSFileTypeForHFSTypeCode(hfsTypeCode); 47 PyObjC_HANDLER 48 PyObjCErr_FromObjC(localException); 49 oc_result = NULL; 50 PyObjC_ENDHANDLER 51 52 if (PyErr_Occurred()) return NULL; 53 54 result = PyObjC_IdToPython(oc_result); 55 return result; 56} 57 58PyDoc_STRVAR(objc_NSHFSTypeCodeFromFileType_doc, 59 "OSType NSHFSTypeCodeFromFileType(NSString *fileType);"); 60static PyObject* 61objc_NSHFSTypeCodeFromFileType( 62 PyObject* self __attribute__((__unused__)), 63 PyObject* args, 64 PyObject* kwds) 65{ 66static char* keywords[] = { "hfsTypeCode", NULL }; 67 NSString* fileType; 68 OSType hfsTypeCode; 69 70 if (!PyArg_ParseTupleAndKeywords(args, kwds, 71 "O&:NSHFSTypeCodeFromFileType", 72 keywords, PyObjCObject_Convert, &fileType)) { 73 return NULL; 74 } 75 76 PyObjC_DURING 77 hfsTypeCode = NSHFSTypeCodeFromFileType(fileType); 78 PyObjC_HANDLER 79 hfsTypeCode = 0; 80 PyObjCErr_FromObjC(localException); 81 PyObjC_ENDHANDLER 82 83 if (PyErr_Occurred()) return NULL; 84 85 return PyMac_BuildOSType(hfsTypeCode); 86} 87 88PyDoc_STRVAR(mod_doc, ""); 89 90static PyMethodDef mod_methods[] = { 91 { 92 "NSFileTypeForHFSTypeCode", 93 (PyCFunction)objc_NSFileTypeForHFSTypeCode, 94 METH_VARARGS|METH_KEYWORDS, 95 objc_NSFileTypeForHFSTypeCode_doc 96 }, 97 { 98 "NSHFSFTypeCodeFromFileType", 99 (PyCFunction)objc_NSHFSTypeCodeFromFileType, 100 METH_VARARGS|METH_KEYWORDS, 101 objc_NSHFSTypeCodeFromFileType_doc 102 }, 103 { 0, 0, 0, 0 } /* sentinel */ 104}; 105 106void init_typecode(void); 107 108void 109init_typecode(void) 110{ 111 PyObject* m = Py_InitModule4("_typecode", mod_methods, 112 mod_doc, NULL, PYTHON_API_VERSION); 113 114 if (PyObjC_ImportAPI(m) < 0) { return; } 115} 116