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

Python code coverage for Mac/Modules/icgluemodule.c

#countcontent
1n/a/***********************************************************
2n/aCopyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
3n/aThe Netherlands.
4n/a
5n/a All Rights Reserved
6n/a
7n/aPermission to use, copy, modify, and distribute this software and its
8n/adocumentation for any purpose and without fee is hereby granted,
9n/aprovided that the above copyright notice appear in all copies and that
10n/aboth that copyright notice and this permission notice appear in
11n/asupporting documentation, and that the names of Stichting Mathematisch
12n/aCentrum or CWI or Corporation for National Research Initiatives or
13n/aCNRI not be used in advertising or publicity pertaining to
14n/adistribution of the software without specific, written prior
15n/apermission.
16n/a
17n/aWhile CWI is the initial source for this software, a modified version
18n/ais made available by the Corporation for National Research Initiatives
19n/a(CNRI) at the Internet address ftp://ftp.python.org.
20n/a
21n/aSTICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22n/aREGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23n/aMERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24n/aCENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25n/aDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26n/aPROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27n/aTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28n/aPERFORMANCE OF THIS SOFTWARE.
29n/a
30n/a******************************************************************/
31n/a
32n/a#include "Python.h"
33n/a#include "pymactoolbox.h"
34n/a
35n/aextern int ResObj_Convert(PyObject *, Handle *); /* From Resmodule.c */
36n/a
37n/a#include <Carbon/Carbon.h>
38n/a
39n/astatic PyObject *ErrorObject;
40n/a
41n/a/* ----------------------------------------------------- */
42n/a
43n/a/* Declarations for objects of type ic_instance */
44n/a
45n/atypedef struct {
46n/a PyObject_HEAD
47n/a ICInstance inst;
48n/a} iciobject;
49n/a
50n/astatic PyTypeObject Icitype;
51n/a
52n/a
53n/a
54n/a/* ---------------------------------------------------------------- */
55n/a
56n/a
57n/astatic char ici_ICGetSeed__doc__[] =
58n/a"()->int; Returns int that changes when configuration does"
59n/a;
60n/a
61n/astatic PyObject *
62n/aici_ICGetSeed(iciobject *self, PyObject *args)
63n/a{
64n/a OSStatus err;
65n/a long seed;
66n/a
67n/a if (!PyArg_ParseTuple(args, ""))
68n/a return NULL;
69n/a if ((err=ICGetSeed(self->inst, &seed)) != 0 )
70n/a return PyMac_Error(err);
71n/a return Py_BuildValue("i", (int)seed);
72n/a}
73n/a
74n/a
75n/astatic char ici_ICBegin__doc__[] =
76n/a"(perm)->None; Lock config file for read/write"
77n/a;
78n/a
79n/astatic PyObject *
80n/aici_ICBegin(iciobject *self, PyObject *args)
81n/a{
82n/a OSStatus err;
83n/a int perm;
84n/a
85n/a if (!PyArg_ParseTuple(args, "i", &perm))
86n/a return NULL;
87n/a if ((err=ICBegin(self->inst, (ICPerm)perm)) != 0 )
88n/a return PyMac_Error(err);
89n/a Py_INCREF(Py_None);
90n/a return Py_None;
91n/a}
92n/a
93n/a
94n/astatic char ici_ICFindPrefHandle__doc__[] =
95n/a"(key, handle)->attrs; Lookup key, store result in handle, return attributes"
96n/a;
97n/a
98n/astatic PyObject *
99n/aici_ICFindPrefHandle(iciobject *self, PyObject *args)
100n/a{
101n/a OSStatus err;
102n/a Str255 key;
103n/a ICAttr attr;
104n/a Handle h;
105n/a
106n/a if (!PyArg_ParseTuple(args, "O&O&", PyMac_GetStr255, &key, ResObj_Convert, &h))
107n/a return NULL;
108n/a if ((err=ICFindPrefHandle(self->inst, key, &attr, h)) != 0 )
109n/a return PyMac_Error(err);
110n/a return Py_BuildValue("i", (int)attr);
111n/a}
112n/a
113n/a
114n/astatic char ici_ICSetPref__doc__[] =
115n/a"(key, attr, data)->None; Set preference key to data with attributes"
116n/a;
117n/a
118n/astatic PyObject *
119n/aici_ICSetPref(iciobject *self, PyObject *args)
120n/a{
121n/a OSStatus err;
122n/a Str255 key;
123n/a int attr;
124n/a char *data;
125n/a int datalen;
126n/a
127n/a if (!PyArg_ParseTuple(args, "O&is#", PyMac_GetStr255, &key, &attr,
128n/a &data, &datalen))
129n/a return NULL;
130n/a if ((err=ICSetPref(self->inst, key, (ICAttr)attr, (Ptr)data,
131n/a (long)datalen)) != 0)
132n/a return PyMac_Error(err);
133n/a Py_INCREF(Py_None);
134n/a return Py_None;
135n/a}
136n/a
137n/a
138n/astatic char ici_ICCountPref__doc__[] =
139n/a"()->int; Return number of preferences"
140n/a;
141n/a
142n/astatic PyObject *
143n/aici_ICCountPref(iciobject *self, PyObject *args)
144n/a{
145n/a OSStatus err;
146n/a long count;
147n/a
148n/a if (!PyArg_ParseTuple(args, ""))
149n/a return NULL;
150n/a if ((err=ICCountPref(self->inst, &count)) != 0 )
151n/a return PyMac_Error(err);
152n/a return Py_BuildValue("i", (int)count);
153n/a}
154n/a
155n/a
156n/astatic char ici_ICGetIndPref__doc__[] =
157n/a"(num)->key; Return key of preference with given index"
158n/a;
159n/a
160n/astatic PyObject *
161n/aici_ICGetIndPref(iciobject *self, PyObject *args)
162n/a{
163n/a OSStatus err;
164n/a long num;
165n/a Str255 key;
166n/a
167n/a if (!PyArg_ParseTuple(args, "l", &num))
168n/a return NULL;
169n/a if ((err=ICGetIndPref(self->inst, num, key)) != 0 )
170n/a return PyMac_Error(err);
171n/a return Py_BuildValue("O&", PyMac_BuildStr255, key);
172n/a}
173n/a
174n/a
175n/astatic char ici_ICDeletePref__doc__[] =
176n/a"(key)->None; Delete preference"
177n/a;
178n/a
179n/astatic PyObject *
180n/aici_ICDeletePref(iciobject *self, PyObject *args)
181n/a{
182n/a OSStatus err;
183n/a Str255 key;
184n/a
185n/a if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, key))
186n/a return NULL;
187n/a if ((err=ICDeletePref(self->inst, key)) != 0 )
188n/a return PyMac_Error(err);
189n/a Py_INCREF(Py_None);
190n/a return Py_None;
191n/a}
192n/a
193n/a
194n/astatic char ici_ICEnd__doc__[] =
195n/a"()->None; Unlock file after ICBegin call"
196n/a;
197n/a
198n/astatic PyObject *
199n/aici_ICEnd(iciobject *self, PyObject *args)
200n/a{
201n/a OSStatus err;
202n/a
203n/a if (!PyArg_ParseTuple(args, ""))
204n/a return NULL;
205n/a if ((err=ICEnd(self->inst)) != 0 )
206n/a return PyMac_Error(err);
207n/a Py_INCREF(Py_None);
208n/a return Py_None;
209n/a}
210n/a
211n/a
212n/astatic char ici_ICEditPreferences__doc__[] =
213n/a"(key)->None; Ask user to edit preferences, staring with key"
214n/a;
215n/a
216n/astatic PyObject *
217n/aici_ICEditPreferences(iciobject *self, PyObject *args)
218n/a{
219n/a OSStatus err;
220n/a Str255 key;
221n/a
222n/a if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, key))
223n/a return NULL;
224n/a if ((err=ICEditPreferences(self->inst, key)) != 0 )
225n/a return PyMac_Error(err);
226n/a Py_INCREF(Py_None);
227n/a return Py_None;
228n/a}
229n/a
230n/a
231n/astatic char ici_ICParseURL__doc__[] =
232n/a"(hint, data, selStart, selEnd, handle)->selStart, selEnd; Find an URL, return in handle"
233n/a;
234n/a
235n/astatic PyObject *
236n/aici_ICParseURL(iciobject *self, PyObject *args)
237n/a{
238n/a OSStatus err;
239n/a Str255 hint;
240n/a char *data;
241n/a int datalen;
242n/a long selStart, selEnd;
243n/a Handle h;
244n/a
245n/a if (!PyArg_ParseTuple(args, "O&s#llO&", PyMac_GetStr255, hint, &data, &datalen,
246n/a &selStart, &selEnd, ResObj_Convert, &h))
247n/a return NULL;
248n/a if ((err=ICParseURL(self->inst, hint, (Ptr)data, (long)datalen,
249n/a &selStart, &selEnd, h)) != 0 )
250n/a return PyMac_Error(err);
251n/a return Py_BuildValue("ii", (int)selStart, (int)selEnd);
252n/a}
253n/a
254n/a
255n/astatic char ici_ICLaunchURL__doc__[] =
256n/a"(hint, data, selStart, selEnd)->None; Find an URL and launch the correct app"
257n/a;
258n/a
259n/astatic PyObject *
260n/aici_ICLaunchURL(iciobject *self, PyObject *args)
261n/a{
262n/a OSStatus err;
263n/a Str255 hint;
264n/a char *data;
265n/a int datalen;
266n/a long selStart, selEnd;
267n/a
268n/a if (!PyArg_ParseTuple(args, "O&s#ll", PyMac_GetStr255, hint, &data, &datalen,
269n/a &selStart, &selEnd))
270n/a return NULL;
271n/a if ((err=ICLaunchURL(self->inst, hint, (Ptr)data, (long)datalen,
272n/a &selStart, &selEnd)) != 0 )
273n/a return PyMac_Error(err);
274n/a return Py_BuildValue("ii", (int)selStart, (int)selEnd);
275n/a}
276n/a
277n/a
278n/astatic char ici_ICMapFilename__doc__[] =
279n/a"(filename)->mapinfo; Get filemap info for given filename"
280n/a;
281n/a
282n/astatic PyObject *
283n/aici_ICMapFilename(iciobject *self, PyObject *args)
284n/a{
285n/a OSStatus err;
286n/a Str255 filename;
287n/a ICMapEntry entry;
288n/a
289n/a if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, filename))
290n/a return NULL;
291n/a if ((err=ICMapFilename(self->inst, filename, &entry)) != 0 )
292n/a return PyMac_Error(err);
293n/a return Py_BuildValue("hO&O&O&lO&O&O&O&O&", entry.version,
294n/a PyMac_BuildOSType, entry.fileType,
295n/a PyMac_BuildOSType, entry.fileCreator,
296n/a PyMac_BuildOSType, entry.postCreator,
297n/a entry.flags,
298n/a PyMac_BuildStr255, entry.extension,
299n/a PyMac_BuildStr255, entry.creatorAppName,
300n/a PyMac_BuildStr255, entry.postAppName,
301n/a PyMac_BuildStr255, entry.MIMEType,
302n/a PyMac_BuildStr255, entry.entryName);
303n/a}
304n/a
305n/a
306n/astatic char ici_ICMapTypeCreator__doc__[] =
307n/a"(type, creator, filename)->mapinfo; Get filemap info for given tp/cr/filename"
308n/a;
309n/a
310n/astatic PyObject *
311n/aici_ICMapTypeCreator(iciobject *self, PyObject *args)
312n/a{
313n/a OSStatus err;
314n/a OSType type, creator;
315n/a Str255 filename;
316n/a ICMapEntry entry;
317n/a
318n/a if (!PyArg_ParseTuple(args, "O&O&O&",
319n/a PyMac_GetOSType, &type,
320n/a PyMac_GetOSType, &creator,
321n/a PyMac_GetStr255, filename))
322n/a return NULL;
323n/a if ((err=ICMapTypeCreator(self->inst, type, creator, filename, &entry)) != 0 )
324n/a return PyMac_Error(err);
325n/a return Py_BuildValue("hO&O&O&lO&O&O&O&O&", entry.version,
326n/a PyMac_BuildOSType, entry.fileType,
327n/a PyMac_BuildOSType, entry.fileCreator,
328n/a PyMac_BuildOSType, entry.postCreator,
329n/a entry.flags,
330n/a PyMac_BuildStr255, entry.extension,
331n/a PyMac_BuildStr255, entry.creatorAppName,
332n/a PyMac_BuildStr255, entry.postAppName,
333n/a PyMac_BuildStr255, entry.MIMEType,
334n/a PyMac_BuildStr255, entry.entryName);
335n/a}
336n/a
337n/a
338n/astatic struct PyMethodDef ici_methods[] = {
339n/a {"ICGetSeed", (PyCFunction)ici_ICGetSeed, METH_VARARGS, ici_ICGetSeed__doc__},
340n/a {"ICBegin", (PyCFunction)ici_ICBegin, METH_VARARGS, ici_ICBegin__doc__},
341n/a {"ICFindPrefHandle", (PyCFunction)ici_ICFindPrefHandle, METH_VARARGS, ici_ICFindPrefHandle__doc__},
342n/a {"ICSetPref", (PyCFunction)ici_ICSetPref, METH_VARARGS, ici_ICSetPref__doc__},
343n/a {"ICCountPref", (PyCFunction)ici_ICCountPref, METH_VARARGS, ici_ICCountPref__doc__},
344n/a {"ICGetIndPref", (PyCFunction)ici_ICGetIndPref, METH_VARARGS, ici_ICGetIndPref__doc__},
345n/a {"ICDeletePref", (PyCFunction)ici_ICDeletePref, METH_VARARGS, ici_ICDeletePref__doc__},
346n/a {"ICEnd", (PyCFunction)ici_ICEnd, METH_VARARGS, ici_ICEnd__doc__},
347n/a {"ICEditPreferences", (PyCFunction)ici_ICEditPreferences, METH_VARARGS, ici_ICEditPreferences__doc__},
348n/a {"ICParseURL", (PyCFunction)ici_ICParseURL, METH_VARARGS, ici_ICParseURL__doc__},
349n/a {"ICLaunchURL", (PyCFunction)ici_ICLaunchURL, METH_VARARGS, ici_ICLaunchURL__doc__},
350n/a {"ICMapFilename", (PyCFunction)ici_ICMapFilename, METH_VARARGS, ici_ICMapFilename__doc__},
351n/a {"ICMapTypeCreator", (PyCFunction)ici_ICMapTypeCreator, METH_VARARGS, ici_ICMapTypeCreator__doc__},
352n/a
353n/a {NULL, NULL} /* sentinel */
354n/a};
355n/a
356n/a/* ---------- */
357n/a
358n/a
359n/astatic iciobject *
360n/anewiciobject(OSType creator)
361n/a{
362n/a iciobject *self;
363n/a OSStatus err;
364n/a
365n/a self = PyObject_NEW(iciobject, &Icitype);
366n/a if (self == NULL)
367n/a return NULL;
368n/a if ((err=ICStart(&self->inst, creator)) != 0 ) {
369n/a (void)PyMac_Error(err);
370n/a PyObject_DEL(self);
371n/a return NULL;
372n/a }
373n/a return self;
374n/a}
375n/a
376n/a
377n/astatic void
378n/aici_dealloc(iciobject *self)
379n/a{
380n/a (void)ICStop(self->inst);
381n/a PyObject_DEL(self);
382n/a}
383n/a
384n/astatic PyObject *
385n/aici_getattr(iciobject *self, char *name)
386n/a{
387n/a return Py_FindMethod(ici_methods, (PyObject *)self, name);
388n/a}
389n/a
390n/astatic char Icitype__doc__[] =
391n/a"Internet Config instance"
392n/a;
393n/a
394n/astatic PyTypeObject Icitype = {
395n/a PyObject_HEAD_INIT(&PyType_Type)
396n/a 0, /*ob_size*/
397n/a "icglue.ic_instance", /*tp_name*/
398n/a sizeof(iciobject), /*tp_basicsize*/
399n/a 0, /*tp_itemsize*/
400n/a /* methods */
401n/a (destructor)ici_dealloc, /*tp_dealloc*/
402n/a (printfunc)0, /*tp_print*/
403n/a (getattrfunc)ici_getattr, /*tp_getattr*/
404n/a (setattrfunc)0, /*tp_setattr*/
405n/a (cmpfunc)0, /*tp_compare*/
406n/a (reprfunc)0, /*tp_repr*/
407n/a 0, /*tp_as_number*/
408n/a 0, /*tp_as_sequence*/
409n/a 0, /*tp_as_mapping*/
410n/a (hashfunc)0, /*tp_hash*/
411n/a (ternaryfunc)0, /*tp_call*/
412n/a (reprfunc)0, /*tp_str*/
413n/a
414n/a /* Space for future expansion */
415n/a 0L,0L,0L,0L,
416n/a Icitype__doc__ /* Documentation string */
417n/a};
418n/a
419n/a/* End of code for ic_instance objects */
420n/a/* -------------------------------------------------------- */
421n/a
422n/a
423n/astatic char ic_ICStart__doc__[] =
424n/a"(OSType)->ic_instance; Create an Internet Config instance"
425n/a;
426n/a
427n/astatic PyObject *
428n/aic_ICStart(PyObject *self, PyObject *args)
429n/a{
430n/a OSType creator;
431n/a
432n/a if (!PyArg_ParseTuple(args, "O&", PyMac_GetOSType, &creator))
433n/a return NULL;
434n/a return (PyObject *)newiciobject(creator);
435n/a}
436n/a
437n/a/* List of methods defined in the module */
438n/a
439n/astatic struct PyMethodDef ic_methods[] = {
440n/a {"ICStart", (PyCFunction)ic_ICStart, METH_VARARGS, ic_ICStart__doc__},
441n/a
442n/a {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
443n/a};
444n/a
445n/a
446n/a/* Initialization function for the module (*must* be called initicglue) */
447n/a
448n/astatic char icglue_module_documentation[] =
449n/a"Implements low-level Internet Config interface"
450n/a;
451n/a
452n/avoid
453n/ainiticglue(void)
454n/a{
455n/a PyObject *m, *d;
456n/a
457n/a if (PyErr_WarnPy3k("In 3.x, the icglue module is removed.", 1))
458n/a return;
459n/a
460n/a /* Create the module and add the functions */
461n/a m = Py_InitModule4("icglue", ic_methods,
462n/a icglue_module_documentation,
463n/a (PyObject*)NULL,PYTHON_API_VERSION);
464n/a
465n/a /* Add some symbolic constants to the module */
466n/a d = PyModule_GetDict(m);
467n/a ErrorObject = PyMac_GetOSErrException();
468n/a if (ErrorObject == NULL ||
469n/a PyDict_SetItemString(d, "error", ErrorObject) != 0)
470n/a return;
471n/a
472n/a /* XXXX Add constants here */
473n/a
474n/a /* Check for errors */
475n/a if (PyErr_Occurred())
476n/a Py_FatalError("can't initialize module icglue");
477n/a}
478n/a