ยปCore Development>Code coverage>Mac/Modules/scrap/_Scrapmodule.c

Python code coverage for Mac/Modules/scrap/_Scrapmodule.c

#countcontent
1n/a
2n/a/* ========================= Module _Scrap ========================== */
3n/a
4n/a#include "Python.h"
5n/a
6n/a
7n/a#ifndef __LP64__
8n/a
9n/a#include "pymactoolbox.h"
10n/a
11n/a/* Macro to test whether a weak-loaded CFM function exists */
12n/a#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
13n/a PyErr_SetString(PyExc_NotImplementedError, \
14n/a "Not available in this shared library/OS version"); \
15n/a return NULL; \
16n/a }} while(0)
17n/a
18n/a
19n/a#include <Carbon/Carbon.h>
20n/a
21n/astatic PyObject *Scrap_Error;
22n/a
23n/a/* ----------------------- Object type Scrap ------------------------ */
24n/a
25n/aPyTypeObject Scrap_Type;
26n/a
27n/a#define ScrapObj_Check(x) ((x)->ob_type == &Scrap_Type || PyObject_TypeCheck((x), &Scrap_Type))
28n/a
29n/atypedef struct ScrapObject {
30n/a PyObject_HEAD
31n/a ScrapRef ob_itself;
32n/a} ScrapObject;
33n/a
34n/aPyObject *ScrapObj_New(ScrapRef itself)
35n/a{
36n/a ScrapObject *it;
37n/a it = PyObject_NEW(ScrapObject, &Scrap_Type);
38n/a if (it == NULL) return NULL;
39n/a it->ob_itself = itself;
40n/a return (PyObject *)it;
41n/a}
42n/aint ScrapObj_Convert(PyObject *v, ScrapRef *p_itself)
43n/a{
44n/a if (!ScrapObj_Check(v))
45n/a {
46n/a PyErr_SetString(PyExc_TypeError, "Scrap required");
47n/a return 0;
48n/a }
49n/a *p_itself = ((ScrapObject *)v)->ob_itself;
50n/a return 1;
51n/a}
52n/a
53n/astatic void ScrapObj_dealloc(ScrapObject *self)
54n/a{
55n/a /* Cleanup of self->ob_itself goes here */
56n/a self->ob_type->tp_free((PyObject *)self);
57n/a}
58n/a
59n/astatic PyObject *ScrapObj_GetScrapFlavorFlags(ScrapObject *_self, PyObject *_args)
60n/a{
61n/a PyObject *_res = NULL;
62n/a OSStatus _err;
63n/a ScrapFlavorType flavorType;
64n/a ScrapFlavorFlags flavorFlags;
65n/a if (!PyArg_ParseTuple(_args, "O&",
66n/a PyMac_GetOSType, &flavorType))
67n/a return NULL;
68n/a _err = GetScrapFlavorFlags(_self->ob_itself,
69n/a flavorType,
70n/a &flavorFlags);
71n/a if (_err != noErr) return PyMac_Error(_err);
72n/a _res = Py_BuildValue("l",
73n/a flavorFlags);
74n/a return _res;
75n/a}
76n/a
77n/astatic PyObject *ScrapObj_GetScrapFlavorSize(ScrapObject *_self, PyObject *_args)
78n/a{
79n/a PyObject *_res = NULL;
80n/a OSStatus _err;
81n/a ScrapFlavorType flavorType;
82n/a Size byteCount;
83n/a if (!PyArg_ParseTuple(_args, "O&",
84n/a PyMac_GetOSType, &flavorType))
85n/a return NULL;
86n/a _err = GetScrapFlavorSize(_self->ob_itself,
87n/a flavorType,
88n/a &byteCount);
89n/a if (_err != noErr) return PyMac_Error(_err);
90n/a _res = Py_BuildValue("l",
91n/a byteCount);
92n/a return _res;
93n/a}
94n/a
95n/astatic PyObject *ScrapObj_GetScrapFlavorData(ScrapObject *_self, PyObject *_args)
96n/a{
97n/a PyObject *_res = NULL;
98n/a OSStatus _err;
99n/a ScrapFlavorType flavorType;
100n/a Size byteCount;
101n/a
102n/a if (!PyArg_ParseTuple(_args, "O&",
103n/a PyMac_GetOSType, &flavorType))
104n/a return NULL;
105n/a _err = GetScrapFlavorSize(_self->ob_itself,
106n/a flavorType,
107n/a &byteCount);
108n/a if (_err != noErr) return PyMac_Error(_err);
109n/a _res = PyString_FromStringAndSize(NULL, (int)byteCount);
110n/a if ( _res == NULL ) return NULL;
111n/a _err = GetScrapFlavorData(_self->ob_itself,
112n/a flavorType,
113n/a &byteCount,
114n/a PyString_AS_STRING(_res));
115n/a if (_err != noErr) {
116n/a Py_XDECREF(_res);
117n/a return PyMac_Error(_err);
118n/a }
119n/a return _res;
120n/a}
121n/a
122n/astatic PyObject *ScrapObj_PutScrapFlavor(ScrapObject *_self, PyObject *_args)
123n/a{
124n/a PyObject *_res = NULL;
125n/a OSStatus _err;
126n/a ScrapFlavorType flavorType;
127n/a ScrapFlavorFlags flavorFlags;
128n/a char *flavorData__in__;
129n/a int flavorData__in_len__;
130n/a if (!PyArg_ParseTuple(_args, "O&Ks#",
131n/a PyMac_GetOSType, &flavorType,
132n/a &flavorFlags,
133n/a &flavorData__in__, &flavorData__in_len__))
134n/a return NULL;
135n/a _err = PutScrapFlavor(_self->ob_itself,
136n/a flavorType,
137n/a flavorFlags,
138n/a (Size)flavorData__in_len__,
139n/a flavorData__in__);
140n/a if (_err != noErr) return PyMac_Error(_err);
141n/a Py_INCREF(Py_None);
142n/a _res = Py_None;
143n/a return _res;
144n/a}
145n/a
146n/astatic PyObject *ScrapObj_GetScrapFlavorCount(ScrapObject *_self, PyObject *_args)
147n/a{
148n/a PyObject *_res = NULL;
149n/a OSStatus _err;
150n/a UInt32 infoCount;
151n/a if (!PyArg_ParseTuple(_args, ""))
152n/a return NULL;
153n/a _err = GetScrapFlavorCount(_self->ob_itself,
154n/a &infoCount);
155n/a if (_err != noErr) return PyMac_Error(_err);
156n/a _res = Py_BuildValue("l",
157n/a infoCount);
158n/a return _res;
159n/a}
160n/a
161n/astatic PyObject *ScrapObj_GetScrapFlavorInfoList(ScrapObject *_self, PyObject *_args)
162n/a{
163n/a PyObject *_res = NULL;
164n/a PyObject *item;
165n/a OSStatus _err;
166n/a UInt32 infoCount;
167n/a ScrapFlavorInfo *infolist = NULL;
168n/a int i;
169n/a
170n/a if (!PyArg_ParseTuple(_args, ""))
171n/a return NULL;
172n/a _err = GetScrapFlavorCount(_self->ob_itself,
173n/a &infoCount);
174n/a if (_err != noErr) return PyMac_Error(_err);
175n/a if (infoCount == 0) return Py_BuildValue("[]");
176n/a
177n/a if ((infolist = (ScrapFlavorInfo *)malloc(infoCount*sizeof(ScrapFlavorInfo))) == NULL )
178n/a return PyErr_NoMemory();
179n/a
180n/a _err = GetScrapFlavorInfoList(_self->ob_itself, &infoCount, infolist);
181n/a if (_err != noErr) {
182n/a free(infolist);
183n/a return NULL;
184n/a }
185n/a if ((_res = PyList_New(infoCount)) == NULL ) {
186n/a free(infolist);
187n/a return NULL;
188n/a }
189n/a for(i=0; i<infoCount; i++) {
190n/a item = Py_BuildValue("O&l", PyMac_BuildOSType, infolist[i].flavorType,
191n/a infolist[i].flavorFlags);
192n/a if ( !item || PyList_SetItem(_res, i, item) < 0 ) {
193n/a Py_DECREF(_res);
194n/a free(infolist);
195n/a return NULL;
196n/a }
197n/a }
198n/a free(infolist);
199n/a return _res;
200n/a}
201n/a
202n/astatic PyMethodDef ScrapObj_methods[] = {
203n/a {"GetScrapFlavorFlags", (PyCFunction)ScrapObj_GetScrapFlavorFlags, 1,
204n/a PyDoc_STR("(ScrapFlavorType flavorType) -> (ScrapFlavorFlags flavorFlags)")},
205n/a {"GetScrapFlavorSize", (PyCFunction)ScrapObj_GetScrapFlavorSize, 1,
206n/a PyDoc_STR("(ScrapFlavorType flavorType) -> (Size byteCount)")},
207n/a {"GetScrapFlavorData", (PyCFunction)ScrapObj_GetScrapFlavorData, 1,
208n/a PyDoc_STR("(ScrapFlavorType flavorType, Buffer destination) -> (Size byteCount)")},
209n/a {"PutScrapFlavor", (PyCFunction)ScrapObj_PutScrapFlavor, 1,
210n/a PyDoc_STR("(ScrapFlavorType flavorType, ScrapFlavorFlags flavorFlags, Size flavorSize, Buffer flavorData) -> None")},
211n/a {"GetScrapFlavorCount", (PyCFunction)ScrapObj_GetScrapFlavorCount, 1,
212n/a PyDoc_STR("() -> (UInt32 infoCount)")},
213n/a {"GetScrapFlavorInfoList", (PyCFunction)ScrapObj_GetScrapFlavorInfoList, 1,
214n/a PyDoc_STR("() -> ([(ScrapFlavorType, ScrapFlavorInfo), ...])")},
215n/a {NULL, NULL, 0}
216n/a};
217n/a
218n/aPyMethodChain ScrapObj_chain = { ScrapObj_methods, NULL };
219n/a
220n/astatic PyObject *ScrapObj_getattr(ScrapObject *self, char *name)
221n/a{
222n/a return Py_FindMethodInChain(&ScrapObj_chain, (PyObject *)self, name);
223n/a}
224n/a
225n/a#define ScrapObj_setattr NULL
226n/a
227n/a#define ScrapObj_compare NULL
228n/a
229n/a#define ScrapObj_repr NULL
230n/a
231n/a#define ScrapObj_hash NULL
232n/a
233n/aPyTypeObject Scrap_Type = {
234n/a PyObject_HEAD_INIT(NULL)
235n/a 0, /*ob_size*/
236n/a "_Scrap.Scrap", /*tp_name*/
237n/a sizeof(ScrapObject), /*tp_basicsize*/
238n/a 0, /*tp_itemsize*/
239n/a /* methods */
240n/a (destructor) ScrapObj_dealloc, /*tp_dealloc*/
241n/a 0, /*tp_print*/
242n/a (getattrfunc) ScrapObj_getattr, /*tp_getattr*/
243n/a (setattrfunc) ScrapObj_setattr, /*tp_setattr*/
244n/a (cmpfunc) ScrapObj_compare, /*tp_compare*/
245n/a (reprfunc) ScrapObj_repr, /*tp_repr*/
246n/a (PyNumberMethods *)0, /* tp_as_number */
247n/a (PySequenceMethods *)0, /* tp_as_sequence */
248n/a (PyMappingMethods *)0, /* tp_as_mapping */
249n/a (hashfunc) ScrapObj_hash, /*tp_hash*/
250n/a};
251n/a
252n/a/* --------------------- End object type Scrap ---------------------- */
253n/a
254n/astatic PyObject *Scrap_LoadScrap(PyObject *_self, PyObject *_args)
255n/a{
256n/a PyObject *_res = NULL;
257n/a OSStatus _err;
258n/a if (!PyArg_ParseTuple(_args, ""))
259n/a return NULL;
260n/a _err = LoadScrap();
261n/a if (_err != noErr) return PyMac_Error(_err);
262n/a Py_INCREF(Py_None);
263n/a _res = Py_None;
264n/a return _res;
265n/a}
266n/a
267n/astatic PyObject *Scrap_UnloadScrap(PyObject *_self, PyObject *_args)
268n/a{
269n/a PyObject *_res = NULL;
270n/a OSStatus _err;
271n/a if (!PyArg_ParseTuple(_args, ""))
272n/a return NULL;
273n/a _err = UnloadScrap();
274n/a if (_err != noErr) return PyMac_Error(_err);
275n/a Py_INCREF(Py_None);
276n/a _res = Py_None;
277n/a return _res;
278n/a}
279n/a
280n/astatic PyObject *Scrap_GetCurrentScrap(PyObject *_self, PyObject *_args)
281n/a{
282n/a PyObject *_res = NULL;
283n/a OSStatus _err;
284n/a ScrapRef scrap;
285n/a if (!PyArg_ParseTuple(_args, ""))
286n/a return NULL;
287n/a _err = GetCurrentScrap(&scrap);
288n/a if (_err != noErr) return PyMac_Error(_err);
289n/a _res = Py_BuildValue("O&",
290n/a ScrapObj_New, scrap);
291n/a return _res;
292n/a}
293n/a
294n/astatic PyObject *Scrap_ClearCurrentScrap(PyObject *_self, PyObject *_args)
295n/a{
296n/a PyObject *_res = NULL;
297n/a OSStatus _err;
298n/a if (!PyArg_ParseTuple(_args, ""))
299n/a return NULL;
300n/a _err = ClearCurrentScrap();
301n/a if (_err != noErr) return PyMac_Error(_err);
302n/a Py_INCREF(Py_None);
303n/a _res = Py_None;
304n/a return _res;
305n/a}
306n/a
307n/astatic PyObject *Scrap_CallInScrapPromises(PyObject *_self, PyObject *_args)
308n/a{
309n/a PyObject *_res = NULL;
310n/a OSStatus _err;
311n/a if (!PyArg_ParseTuple(_args, ""))
312n/a return NULL;
313n/a _err = CallInScrapPromises();
314n/a if (_err != noErr) return PyMac_Error(_err);
315n/a Py_INCREF(Py_None);
316n/a _res = Py_None;
317n/a return _res;
318n/a}
319n/a#endif /* __LP64__ */
320n/a
321n/astatic PyMethodDef Scrap_methods[] = {
322n/a#ifndef __LP64__
323n/a {"LoadScrap", (PyCFunction)Scrap_LoadScrap, 1,
324n/a PyDoc_STR("() -> None")},
325n/a {"UnloadScrap", (PyCFunction)Scrap_UnloadScrap, 1,
326n/a PyDoc_STR("() -> None")},
327n/a {"GetCurrentScrap", (PyCFunction)Scrap_GetCurrentScrap, 1,
328n/a PyDoc_STR("() -> (ScrapRef scrap)")},
329n/a {"ClearCurrentScrap", (PyCFunction)Scrap_ClearCurrentScrap, 1,
330n/a PyDoc_STR("() -> None")},
331n/a {"CallInScrapPromises", (PyCFunction)Scrap_CallInScrapPromises, 1,
332n/a PyDoc_STR("() -> None")},
333n/a#endif /* __LP64__ */
334n/a {NULL, NULL, 0}
335n/a};
336n/a
337n/a
338n/a
339n/a
340n/avoid init_Scrap(void)
341n/a{
342n/a PyObject *m;
343n/a#ifndef __LP64__
344n/a PyObject *d;
345n/a#endif /* __LP64__ */
346n/a
347n/a
348n/a
349n/a
350n/a m = Py_InitModule("_Scrap", Scrap_methods);
351n/a#ifndef __LP64__
352n/a d = PyModule_GetDict(m);
353n/a Scrap_Error = PyMac_GetOSErrException();
354n/a if (Scrap_Error == NULL ||
355n/a PyDict_SetItemString(d, "Error", Scrap_Error) != 0)
356n/a return;
357n/a Scrap_Type.ob_type = &PyType_Type;
358n/a Py_INCREF(&Scrap_Type);
359n/a if (PyDict_SetItemString(d, "ScrapType", (PyObject *)&Scrap_Type) != 0)
360n/a Py_FatalError("can't initialize ScrapType");
361n/a#endif /* __LP64__ */
362n/a}
363n/a
364n/a/* ======================= End module _Scrap ======================== */
365n/a