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