blob: 4d17bf7841f77292f4ecb599e96f789e13ecb46f [file] [log] [blame]
Jack Jansen8ce72f51997-01-07 16:18:32 +00001/***********************************************************
Jack Jansen42218ce1997-01-31 16:15:11 +00002Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
Jack Jansen8ce72f51997-01-07 16:18:32 +00003The Netherlands.
4
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
16
17While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
29
30******************************************************************/
31
32#include "Python.h"
Jack Jansen7107c1a2003-11-20 13:31:00 +000033#include "pymactoolbox.h"
Jack Jansen8ce72f51997-01-07 16:18:32 +000034
35extern int ResObj_Convert(PyObject *, Handle *); /* From Resmodule.c */
36
Jack Jansen6143d532001-05-19 12:34:59 +000037#include <Carbon/Carbon.h>
Jack Jansen8ce72f51997-01-07 16:18:32 +000038
39static PyObject *ErrorObject;
40
Jack Jansen8ce72f51997-01-07 16:18:32 +000041/* ----------------------------------------------------- */
42
43/* Declarations for objects of type ic_instance */
44
45typedef struct {
Antoine Pitrouc83ea132010-05-09 14:46:46 +000046 PyObject_HEAD
47 ICInstance inst;
Jack Jansen8ce72f51997-01-07 16:18:32 +000048} iciobject;
49
Jeremy Hylton938ace62002-07-17 16:30:39 +000050static PyTypeObject Icitype;
Jack Jansen8ce72f51997-01-07 16:18:32 +000051
52
53
54/* ---------------------------------------------------------------- */
55
Jack Jansen8ce72f51997-01-07 16:18:32 +000056
Antoine Pitrouc83ea132010-05-09 14:46:46 +000057static char ici_ICGetSeed__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +000058"()->int; Returns int that changes when configuration does"
59;
60
61static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +000062ici_ICGetSeed(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +000063{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000064 OSStatus err;
65 long seed;
66
67 if (!PyArg_ParseTuple(args, ""))
68 return NULL;
69 if ((err=ICGetSeed(self->inst, &seed)) != 0 )
70 return PyMac_Error(err);
71 return Py_BuildValue("i", (int)seed);
Jack Jansen8ce72f51997-01-07 16:18:32 +000072}
73
74
Antoine Pitrouc83ea132010-05-09 14:46:46 +000075static char ici_ICBegin__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +000076"(perm)->None; Lock config file for read/write"
77;
78
79static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +000080ici_ICBegin(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +000081{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000082 OSStatus err;
83 int perm;
84
85 if (!PyArg_ParseTuple(args, "i", &perm))
86 return NULL;
87 if ((err=ICBegin(self->inst, (ICPerm)perm)) != 0 )
88 return PyMac_Error(err);
89 Py_INCREF(Py_None);
90 return Py_None;
Jack Jansen8ce72f51997-01-07 16:18:32 +000091}
92
93
Antoine Pitrouc83ea132010-05-09 14:46:46 +000094static char ici_ICFindPrefHandle__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +000095"(key, handle)->attrs; Lookup key, store result in handle, return attributes"
96;
97
98static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +000099ici_ICFindPrefHandle(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000100{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000101 OSStatus err;
102 Str255 key;
103 ICAttr attr;
104 Handle h;
105
106 if (!PyArg_ParseTuple(args, "O&O&", PyMac_GetStr255, &key, ResObj_Convert, &h))
107 return NULL;
108 if ((err=ICFindPrefHandle(self->inst, key, &attr, h)) != 0 )
109 return PyMac_Error(err);
110 return Py_BuildValue("i", (int)attr);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000111}
112
113
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000114static char ici_ICSetPref__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000115"(key, attr, data)->None; Set preference key to data with attributes"
116;
117
118static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000119ici_ICSetPref(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000120{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000121 OSStatus err;
122 Str255 key;
123 int attr;
124 char *data;
125 int datalen;
126
127 if (!PyArg_ParseTuple(args, "O&is#", PyMac_GetStr255, &key, &attr,
128 &data, &datalen))
129 return NULL;
130 if ((err=ICSetPref(self->inst, key, (ICAttr)attr, (Ptr)data,
131 (long)datalen)) != 0)
132 return PyMac_Error(err);
133 Py_INCREF(Py_None);
134 return Py_None;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000135}
136
137
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000138static char ici_ICCountPref__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000139"()->int; Return number of preferences"
140;
141
142static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000143ici_ICCountPref(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000144{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000145 OSStatus err;
146 long count;
147
148 if (!PyArg_ParseTuple(args, ""))
149 return NULL;
150 if ((err=ICCountPref(self->inst, &count)) != 0 )
151 return PyMac_Error(err);
152 return Py_BuildValue("i", (int)count);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000153}
154
155
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000156static char ici_ICGetIndPref__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000157"(num)->key; Return key of preference with given index"
158;
159
160static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000161ici_ICGetIndPref(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000162{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000163 OSStatus err;
164 long num;
165 Str255 key;
166
167 if (!PyArg_ParseTuple(args, "l", &num))
168 return NULL;
169 if ((err=ICGetIndPref(self->inst, num, key)) != 0 )
170 return PyMac_Error(err);
171 return Py_BuildValue("O&", PyMac_BuildStr255, key);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000172}
173
174
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000175static char ici_ICDeletePref__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000176"(key)->None; Delete preference"
177;
178
179static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000180ici_ICDeletePref(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000181{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000182 OSStatus err;
183 Str255 key;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000184
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000185 if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, key))
186 return NULL;
187 if ((err=ICDeletePref(self->inst, key)) != 0 )
188 return PyMac_Error(err);
189 Py_INCREF(Py_None);
190 return Py_None;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000191}
192
193
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000194static char ici_ICEnd__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000195"()->None; Unlock file after ICBegin call"
196;
197
198static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000199ici_ICEnd(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000200{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000201 OSStatus err;
202
203 if (!PyArg_ParseTuple(args, ""))
204 return NULL;
205 if ((err=ICEnd(self->inst)) != 0 )
206 return PyMac_Error(err);
207 Py_INCREF(Py_None);
208 return Py_None;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000209}
210
211
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000212static char ici_ICEditPreferences__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000213"(key)->None; Ask user to edit preferences, staring with key"
214;
215
216static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000217ici_ICEditPreferences(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000218{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000219 OSStatus err;
220 Str255 key;
221
222 if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, key))
223 return NULL;
224 if ((err=ICEditPreferences(self->inst, key)) != 0 )
225 return PyMac_Error(err);
226 Py_INCREF(Py_None);
227 return Py_None;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000228}
229
230
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000231static char ici_ICParseURL__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000232"(hint, data, selStart, selEnd, handle)->selStart, selEnd; Find an URL, return in handle"
233;
234
235static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000236ici_ICParseURL(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000237{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000238 OSStatus err;
239 Str255 hint;
240 char *data;
241 int datalen;
242 long selStart, selEnd;
243 Handle h;
244
245 if (!PyArg_ParseTuple(args, "O&s#llO&", PyMac_GetStr255, hint, &data, &datalen,
246 &selStart, &selEnd, ResObj_Convert, &h))
247 return NULL;
248 if ((err=ICParseURL(self->inst, hint, (Ptr)data, (long)datalen,
249 &selStart, &selEnd, h)) != 0 )
250 return PyMac_Error(err);
251 return Py_BuildValue("ii", (int)selStart, (int)selEnd);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000252}
253
254
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000255static char ici_ICLaunchURL__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000256"(hint, data, selStart, selEnd)->None; Find an URL and launch the correct app"
257;
258
259static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000260ici_ICLaunchURL(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000261{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000262 OSStatus err;
263 Str255 hint;
264 char *data;
265 int datalen;
266 long selStart, selEnd;
267
268 if (!PyArg_ParseTuple(args, "O&s#ll", PyMac_GetStr255, hint, &data, &datalen,
269 &selStart, &selEnd))
270 return NULL;
271 if ((err=ICLaunchURL(self->inst, hint, (Ptr)data, (long)datalen,
272 &selStart, &selEnd)) != 0 )
273 return PyMac_Error(err);
274 return Py_BuildValue("ii", (int)selStart, (int)selEnd);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000275}
276
277
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000278static char ici_ICMapFilename__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000279"(filename)->mapinfo; Get filemap info for given filename"
280;
281
282static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000283ici_ICMapFilename(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000284{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000285 OSStatus err;
286 Str255 filename;
287 ICMapEntry entry;
288
289 if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, filename))
290 return NULL;
291 if ((err=ICMapFilename(self->inst, filename, &entry)) != 0 )
292 return PyMac_Error(err);
293 return Py_BuildValue("hO&O&O&lO&O&O&O&O&", entry.version,
294 PyMac_BuildOSType, entry.fileType,
295 PyMac_BuildOSType, entry.fileCreator,
296 PyMac_BuildOSType, entry.postCreator,
297 entry.flags,
298 PyMac_BuildStr255, entry.extension,
299 PyMac_BuildStr255, entry.creatorAppName,
300 PyMac_BuildStr255, entry.postAppName,
301 PyMac_BuildStr255, entry.MIMEType,
302 PyMac_BuildStr255, entry.entryName);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000303}
304
305
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000306static char ici_ICMapTypeCreator__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000307"(type, creator, filename)->mapinfo; Get filemap info for given tp/cr/filename"
308;
309
310static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000311ici_ICMapTypeCreator(iciobject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000312{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000313 OSStatus err;
314 OSType type, creator;
315 Str255 filename;
316 ICMapEntry entry;
317
318 if (!PyArg_ParseTuple(args, "O&O&O&",
319 PyMac_GetOSType, &type,
320 PyMac_GetOSType, &creator,
321 PyMac_GetStr255, filename))
322 return NULL;
323 if ((err=ICMapTypeCreator(self->inst, type, creator, filename, &entry)) != 0 )
324 return PyMac_Error(err);
325 return Py_BuildValue("hO&O&O&lO&O&O&O&O&", entry.version,
326 PyMac_BuildOSType, entry.fileType,
327 PyMac_BuildOSType, entry.fileCreator,
328 PyMac_BuildOSType, entry.postCreator,
329 entry.flags,
330 PyMac_BuildStr255, entry.extension,
331 PyMac_BuildStr255, entry.creatorAppName,
332 PyMac_BuildStr255, entry.postAppName,
333 PyMac_BuildStr255, entry.MIMEType,
334 PyMac_BuildStr255, entry.entryName);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000335}
336
337
338static struct PyMethodDef ici_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000339 {"ICGetSeed", (PyCFunction)ici_ICGetSeed, METH_VARARGS, ici_ICGetSeed__doc__},
340 {"ICBegin", (PyCFunction)ici_ICBegin, METH_VARARGS, ici_ICBegin__doc__},
341 {"ICFindPrefHandle", (PyCFunction)ici_ICFindPrefHandle, METH_VARARGS, ici_ICFindPrefHandle__doc__},
342 {"ICSetPref", (PyCFunction)ici_ICSetPref, METH_VARARGS, ici_ICSetPref__doc__},
343 {"ICCountPref", (PyCFunction)ici_ICCountPref, METH_VARARGS, ici_ICCountPref__doc__},
344 {"ICGetIndPref", (PyCFunction)ici_ICGetIndPref, METH_VARARGS, ici_ICGetIndPref__doc__},
345 {"ICDeletePref", (PyCFunction)ici_ICDeletePref, METH_VARARGS, ici_ICDeletePref__doc__},
346 {"ICEnd", (PyCFunction)ici_ICEnd, METH_VARARGS, ici_ICEnd__doc__},
347 {"ICEditPreferences", (PyCFunction)ici_ICEditPreferences, METH_VARARGS, ici_ICEditPreferences__doc__},
348 {"ICParseURL", (PyCFunction)ici_ICParseURL, METH_VARARGS, ici_ICParseURL__doc__},
349 {"ICLaunchURL", (PyCFunction)ici_ICLaunchURL, METH_VARARGS, ici_ICLaunchURL__doc__},
350 {"ICMapFilename", (PyCFunction)ici_ICMapFilename, METH_VARARGS, ici_ICMapFilename__doc__},
351 {"ICMapTypeCreator", (PyCFunction)ici_ICMapTypeCreator, METH_VARARGS, ici_ICMapTypeCreator__doc__},
352
353 {NULL, NULL} /* sentinel */
Jack Jansen8ce72f51997-01-07 16:18:32 +0000354};
355
356/* ---------- */
357
358
359static iciobject *
360newiciobject(OSType creator)
361{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000362 iciobject *self;
363 OSStatus err;
364
365 self = PyObject_NEW(iciobject, &Icitype);
366 if (self == NULL)
367 return NULL;
368 if ((err=ICStart(&self->inst, creator)) != 0 ) {
369 (void)PyMac_Error(err);
370 PyObject_DEL(self);
371 return NULL;
372 }
373 return self;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000374}
375
376
377static void
Jack Jansen1767f932001-09-04 22:20:39 +0000378ici_dealloc(iciobject *self)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000379{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000380 (void)ICStop(self->inst);
381 PyObject_DEL(self);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000382}
383
384static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000385ici_getattr(iciobject *self, char *name)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000386{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000387 return Py_FindMethod(ici_methods, (PyObject *)self, name);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000388}
389
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000390static char Icitype__doc__[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000391"Internet Config instance"
392;
393
394static PyTypeObject Icitype = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000395 PyObject_HEAD_INIT(&PyType_Type)
396 0, /*ob_size*/
397 "icglue.ic_instance", /*tp_name*/
398 sizeof(iciobject), /*tp_basicsize*/
399 0, /*tp_itemsize*/
400 /* methods */
401 (destructor)ici_dealloc, /*tp_dealloc*/
402 (printfunc)0, /*tp_print*/
403 (getattrfunc)ici_getattr, /*tp_getattr*/
404 (setattrfunc)0, /*tp_setattr*/
405 (cmpfunc)0, /*tp_compare*/
406 (reprfunc)0, /*tp_repr*/
407 0, /*tp_as_number*/
408 0, /*tp_as_sequence*/
409 0, /*tp_as_mapping*/
410 (hashfunc)0, /*tp_hash*/
411 (ternaryfunc)0, /*tp_call*/
412 (reprfunc)0, /*tp_str*/
Jack Jansen8ce72f51997-01-07 16:18:32 +0000413
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000414 /* Space for future expansion */
415 0L,0L,0L,0L,
416 Icitype__doc__ /* Documentation string */
Jack Jansen8ce72f51997-01-07 16:18:32 +0000417};
418
419/* End of code for ic_instance objects */
420/* -------------------------------------------------------- */
421
422
423static char ic_ICStart__doc__[] =
424"(OSType)->ic_instance; Create an Internet Config instance"
425;
426
427static PyObject *
Jack Jansen1767f932001-09-04 22:20:39 +0000428ic_ICStart(PyObject *self, PyObject *args)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000429{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000430 OSType creator;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000431
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000432 if (!PyArg_ParseTuple(args, "O&", PyMac_GetOSType, &creator))
433 return NULL;
434 return (PyObject *)newiciobject(creator);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000435}
436
437/* List of methods defined in the module */
438
439static struct PyMethodDef ic_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000440 {"ICStart", (PyCFunction)ic_ICStart, METH_VARARGS, ic_ICStart__doc__},
441
442 {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
Jack Jansen8ce72f51997-01-07 16:18:32 +0000443};
444
445
446/* Initialization function for the module (*must* be called initicglue) */
447
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000448static char icglue_module_documentation[] =
Jack Jansen8ce72f51997-01-07 16:18:32 +0000449"Implements low-level Internet Config interface"
450;
451
452void
Jack Jansen1767f932001-09-04 22:20:39 +0000453initicglue(void)
Jack Jansen8ce72f51997-01-07 16:18:32 +0000454{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000455 PyObject *m, *d;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000456
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000457 if (PyErr_WarnPy3k("In 3.x, the icglue module is removed.", 1))
458 return;
Jack Jansen8ce72f51997-01-07 16:18:32 +0000459
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000460 /* Create the module and add the functions */
461 m = Py_InitModule4("icglue", ic_methods,
462 icglue_module_documentation,
463 (PyObject*)NULL,PYTHON_API_VERSION);
Jack Jansen8ce72f51997-01-07 16:18:32 +0000464
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000465 /* Add some symbolic constants to the module */
466 d = PyModule_GetDict(m);
467 ErrorObject = PyMac_GetOSErrException();
468 if (ErrorObject == NULL ||
469 PyDict_SetItemString(d, "error", ErrorObject) != 0)
470 return;
471
472 /* XXXX Add constants here */
473
474 /* Check for errors */
475 if (PyErr_Occurred())
476 Py_FatalError("can't initialize module icglue");
Jack Jansen8ce72f51997-01-07 16:18:32 +0000477}
478