1 | /***********************************************************
|
---|
2 | Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
|
---|
3 | The Netherlands.
|
---|
4 |
|
---|
5 | All Rights Reserved
|
---|
6 |
|
---|
7 | Permission to use, copy, modify, and distribute this software and its
|
---|
8 | documentation for any purpose and without fee is hereby granted,
|
---|
9 | provided that the above copyright notice appear in all copies and that
|
---|
10 | both that copyright notice and this permission notice appear in
|
---|
11 | supporting documentation, and that the names of Stichting Mathematisch
|
---|
12 | Centrum or CWI or Corporation for National Research Initiatives or
|
---|
13 | CNRI not be used in advertising or publicity pertaining to
|
---|
14 | distribution of the software without specific, written prior
|
---|
15 | permission.
|
---|
16 |
|
---|
17 | While CWI is the initial source for this software, a modified version
|
---|
18 | is made available by the Corporation for National Research Initiatives
|
---|
19 | (CNRI) at the Internet address ftp://ftp.python.org.
|
---|
20 |
|
---|
21 | STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
|
---|
22 | REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
|
---|
23 | MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
|
---|
24 | CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
---|
25 | DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
---|
26 | PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
---|
27 | TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
---|
28 | PERFORMANCE OF THIS SOFTWARE.
|
---|
29 |
|
---|
30 | ******************************************************************/
|
---|
31 |
|
---|
32 | #include "Python.h"
|
---|
33 | #include "pymactoolbox.h"
|
---|
34 | #include <Sound.h>
|
---|
35 |
|
---|
36 | #pragma options align=mac68k
|
---|
37 | struct SampleRateAvailable_arg {
|
---|
38 | short numrates;
|
---|
39 | Handle rates;
|
---|
40 | };
|
---|
41 |
|
---|
42 | struct SampleSizeAvailable_arg {
|
---|
43 | short numsizes;
|
---|
44 | Handle sizes;
|
---|
45 | };
|
---|
46 |
|
---|
47 | #pragma options align=reset
|
---|
48 |
|
---|
49 | static PyObject *ErrorObject;
|
---|
50 |
|
---|
51 |
|
---|
52 | /* Convert Python object to unsigned Fixed */
|
---|
53 | static int
|
---|
54 | PyMac_GetUFixed(PyObject *v, Fixed *f)
|
---|
55 | {
|
---|
56 | double d;
|
---|
57 | unsigned long uns;
|
---|
58 |
|
---|
59 | if( !PyArg_Parse(v, "d", &d))
|
---|
60 | return 0;
|
---|
61 | uns = (unsigned long)(d * 0x10000);
|
---|
62 | *f = (Fixed)uns;
|
---|
63 | return 1;
|
---|
64 | }
|
---|
65 |
|
---|
66 | /* Convert a Point to a Python object */
|
---|
67 | static PyObject *
|
---|
68 | PyMac_BuildUFixed(Fixed f)
|
---|
69 | {
|
---|
70 | double d;
|
---|
71 | unsigned long funs;
|
---|
72 |
|
---|
73 | funs = (unsigned long)f;
|
---|
74 |
|
---|
75 | d = funs;
|
---|
76 | d = d / 0x10000;
|
---|
77 | return Py_BuildValue("d", d);
|
---|
78 | }
|
---|
79 |
|
---|
80 |
|
---|
81 | /* ----------------------------------------------------- */
|
---|
82 |
|
---|
83 | static char sndih_getChannelAvailable__doc__[] =
|
---|
84 | ""
|
---|
85 | ;
|
---|
86 |
|
---|
87 | static PyObject *
|
---|
88 | sndih_getChannelAvailable(self, args)
|
---|
89 | PyObject *self; /* Not used */
|
---|
90 | PyObject *args;
|
---|
91 | {
|
---|
92 | long inRefNum;
|
---|
93 | short nchannel;
|
---|
94 | OSErr err;
|
---|
95 |
|
---|
96 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
97 | return NULL;
|
---|
98 |
|
---|
99 | if( (err=SPBGetDeviceInfo(inRefNum, siChannelAvailable, (Ptr)&nchannel)) != noErr )
|
---|
100 | return PyMac_Error(err);
|
---|
101 | return Py_BuildValue("h", nchannel);
|
---|
102 | }
|
---|
103 |
|
---|
104 | static char sndih_getNumberChannels__doc__[] =
|
---|
105 | ""
|
---|
106 | ;
|
---|
107 |
|
---|
108 | static PyObject *
|
---|
109 | sndih_getNumberChannels(self, args)
|
---|
110 | PyObject *self; /* Not used */
|
---|
111 | PyObject *args;
|
---|
112 | {
|
---|
113 | long inRefNum;
|
---|
114 | short nchannel;
|
---|
115 | OSErr err;
|
---|
116 |
|
---|
117 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
118 | return NULL;
|
---|
119 |
|
---|
120 | if( (err=SPBGetDeviceInfo(inRefNum, siNumberChannels, (Ptr)&nchannel)) != noErr )
|
---|
121 | return PyMac_Error(err);
|
---|
122 | return Py_BuildValue("h", nchannel);
|
---|
123 | }
|
---|
124 |
|
---|
125 | static char sndih_setNumberChannels__doc__[] =
|
---|
126 | ""
|
---|
127 | ;
|
---|
128 |
|
---|
129 | static PyObject *
|
---|
130 | sndih_setNumberChannels(self, args)
|
---|
131 | PyObject *self; /* Not used */
|
---|
132 | PyObject *args;
|
---|
133 | {
|
---|
134 | long inRefNum;
|
---|
135 | short nchannel;
|
---|
136 | OSErr err;
|
---|
137 |
|
---|
138 | if (!PyArg_ParseTuple(args, "lh", &inRefNum, &nchannel))
|
---|
139 | return NULL;
|
---|
140 |
|
---|
141 | if( (err=SPBSetDeviceInfo(inRefNum, siNumberChannels, (Ptr)&nchannel)) != noErr )
|
---|
142 | return PyMac_Error(err);
|
---|
143 | Py_INCREF(Py_None);
|
---|
144 | return Py_None;
|
---|
145 | }
|
---|
146 |
|
---|
147 | static char sndih_getContinuous__doc__[] =
|
---|
148 | ""
|
---|
149 | ;
|
---|
150 |
|
---|
151 | static PyObject *
|
---|
152 | sndih_getContinuous(self, args)
|
---|
153 | PyObject *self; /* Not used */
|
---|
154 | PyObject *args;
|
---|
155 | {
|
---|
156 | long inRefNum;
|
---|
157 | short onoff;
|
---|
158 | OSErr err;
|
---|
159 |
|
---|
160 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
161 | return NULL;
|
---|
162 |
|
---|
163 | if( (err=SPBGetDeviceInfo(inRefNum, siContinuous, (Ptr)&onoff)) != noErr )
|
---|
164 | return PyMac_Error(err);
|
---|
165 | return Py_BuildValue("h", onoff);
|
---|
166 | }
|
---|
167 |
|
---|
168 | static char sndih_setContinuous__doc__[] =
|
---|
169 | ""
|
---|
170 | ;
|
---|
171 |
|
---|
172 | static PyObject *
|
---|
173 | sndih_setContinuous(self, args)
|
---|
174 | PyObject *self; /* Not used */
|
---|
175 | PyObject *args;
|
---|
176 | {
|
---|
177 | long inRefNum;
|
---|
178 | short onoff;
|
---|
179 | OSErr err;
|
---|
180 |
|
---|
181 | if (!PyArg_ParseTuple(args, "lh", &inRefNum, &onoff))
|
---|
182 | return NULL;
|
---|
183 |
|
---|
184 | if( (err=SPBSetDeviceInfo(inRefNum, siContinuous, (Ptr)&onoff)) != noErr )
|
---|
185 | return PyMac_Error(err);
|
---|
186 | Py_INCREF(Py_None);
|
---|
187 | return Py_None;
|
---|
188 | }
|
---|
189 |
|
---|
190 | static char sndih_getInputSourceNames__doc__[] =
|
---|
191 | ""
|
---|
192 | ;
|
---|
193 |
|
---|
194 | static PyObject *
|
---|
195 | sndih_getInputSourceNames(self, args)
|
---|
196 | PyObject *self; /* Not used */
|
---|
197 | PyObject *args;
|
---|
198 | {
|
---|
199 | long inRefNum;
|
---|
200 | Handle names;
|
---|
201 | OSErr err;
|
---|
202 |
|
---|
203 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
204 | return NULL;
|
---|
205 |
|
---|
206 | if( (err=SPBGetDeviceInfo(inRefNum, siInputSourceNames, (Ptr)&names)) != noErr )
|
---|
207 | return PyMac_Error(err);
|
---|
208 | return Py_BuildValue("O&", ResObj_New, names);
|
---|
209 | }
|
---|
210 |
|
---|
211 | static char sndih_getInputSource__doc__[] =
|
---|
212 | ""
|
---|
213 | ;
|
---|
214 |
|
---|
215 | static PyObject *
|
---|
216 | sndih_getInputSource(self, args)
|
---|
217 | PyObject *self; /* Not used */
|
---|
218 | PyObject *args;
|
---|
219 | {
|
---|
220 | long inRefNum;
|
---|
221 | short source;
|
---|
222 | OSErr err;
|
---|
223 |
|
---|
224 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
225 | return NULL;
|
---|
226 |
|
---|
227 | if( (err=SPBGetDeviceInfo(inRefNum, siInputSource, (Ptr)&source)) != noErr )
|
---|
228 | return PyMac_Error(err);
|
---|
229 | return Py_BuildValue("h", source);
|
---|
230 | }
|
---|
231 |
|
---|
232 | static char sndih_setInputSource__doc__[] =
|
---|
233 | ""
|
---|
234 | ;
|
---|
235 |
|
---|
236 | static PyObject *
|
---|
237 | sndih_setInputSource(self, args)
|
---|
238 | PyObject *self; /* Not used */
|
---|
239 | PyObject *args;
|
---|
240 | {
|
---|
241 | long inRefNum;
|
---|
242 | short source;
|
---|
243 | OSErr err;
|
---|
244 |
|
---|
245 | if (!PyArg_ParseTuple(args, "lh", &inRefNum, &source))
|
---|
246 | return NULL;
|
---|
247 |
|
---|
248 | if( (err=SPBSetDeviceInfo(inRefNum, siInputSource, (Ptr)&source)) != noErr )
|
---|
249 | return PyMac_Error(err);
|
---|
250 | Py_INCREF(Py_None);
|
---|
251 | return Py_None;
|
---|
252 | }
|
---|
253 |
|
---|
254 | static char sndih_getPlayThruOnOff__doc__[] =
|
---|
255 | ""
|
---|
256 | ;
|
---|
257 |
|
---|
258 | static PyObject *
|
---|
259 | sndih_getPlayThruOnOff(self, args)
|
---|
260 | PyObject *self; /* Not used */
|
---|
261 | PyObject *args;
|
---|
262 | {
|
---|
263 | long inRefNum;
|
---|
264 | short onoff;
|
---|
265 | OSErr err;
|
---|
266 |
|
---|
267 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
268 | return NULL;
|
---|
269 |
|
---|
270 | if( (err=SPBGetDeviceInfo(inRefNum, siPlayThruOnOff, (Ptr)&onoff)) != noErr )
|
---|
271 | return PyMac_Error(err);
|
---|
272 | return Py_BuildValue("h", onoff);
|
---|
273 | }
|
---|
274 |
|
---|
275 | static char sndih_setPlayThruOnOff__doc__[] =
|
---|
276 | ""
|
---|
277 | ;
|
---|
278 |
|
---|
279 | static PyObject *
|
---|
280 | sndih_setPlayThruOnOff(self, args)
|
---|
281 | PyObject *self; /* Not used */
|
---|
282 | PyObject *args;
|
---|
283 | {
|
---|
284 | long inRefNum;
|
---|
285 | short onoff;
|
---|
286 | OSErr err;
|
---|
287 |
|
---|
288 | if (!PyArg_ParseTuple(args, "lh", &inRefNum, &onoff))
|
---|
289 | return NULL;
|
---|
290 |
|
---|
291 | if( (err=SPBSetDeviceInfo(inRefNum, siPlayThruOnOff, (Ptr)&onoff)) != noErr )
|
---|
292 | return PyMac_Error(err);
|
---|
293 | Py_INCREF(Py_None);
|
---|
294 | return Py_None;
|
---|
295 | }
|
---|
296 |
|
---|
297 | static char sndih_getSampleRate__doc__[] =
|
---|
298 | ""
|
---|
299 | ;
|
---|
300 |
|
---|
301 | static PyObject *
|
---|
302 | sndih_getSampleRate(self, args)
|
---|
303 | PyObject *self; /* Not used */
|
---|
304 | PyObject *args;
|
---|
305 | {
|
---|
306 | long inRefNum;
|
---|
307 | Fixed sample_rate;
|
---|
308 | OSErr err;
|
---|
309 |
|
---|
310 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
311 | return NULL;
|
---|
312 |
|
---|
313 | if( (err=SPBGetDeviceInfo(inRefNum, siSampleRate, (Ptr)&sample_rate)) != noErr )
|
---|
314 | return PyMac_Error(err);
|
---|
315 | return Py_BuildValue("O&", PyMac_BuildUFixed, sample_rate);
|
---|
316 | }
|
---|
317 |
|
---|
318 | static char sndih_setSampleRate__doc__[] =
|
---|
319 | ""
|
---|
320 | ;
|
---|
321 |
|
---|
322 | static PyObject *
|
---|
323 | sndih_setSampleRate(self, args)
|
---|
324 | PyObject *self; /* Not used */
|
---|
325 | PyObject *args;
|
---|
326 | {
|
---|
327 | long inRefNum;
|
---|
328 | Fixed sample_rate;
|
---|
329 | OSErr err;
|
---|
330 |
|
---|
331 | if (!PyArg_ParseTuple(args, "lO&", &inRefNum, PyMac_GetUFixed, &sample_rate))
|
---|
332 | return NULL;
|
---|
333 |
|
---|
334 | if( (err=SPBSetDeviceInfo(inRefNum, siSampleRate, (Ptr)&sample_rate)) != noErr )
|
---|
335 | return PyMac_Error(err);
|
---|
336 | Py_INCREF(Py_None);
|
---|
337 | return Py_None;
|
---|
338 | }
|
---|
339 |
|
---|
340 | static char sndih_getSampleSize__doc__[] =
|
---|
341 | ""
|
---|
342 | ;
|
---|
343 |
|
---|
344 | static PyObject *
|
---|
345 | sndih_getSampleSize(self, args)
|
---|
346 | PyObject *self; /* Not used */
|
---|
347 | PyObject *args;
|
---|
348 | {
|
---|
349 | long inRefNum;
|
---|
350 | short bits;
|
---|
351 | OSErr err;
|
---|
352 |
|
---|
353 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
354 | return NULL;
|
---|
355 |
|
---|
356 | if( (err=SPBGetDeviceInfo(inRefNum, siSampleSize, (Ptr)&bits)) != noErr )
|
---|
357 | return PyMac_Error(err);
|
---|
358 | return Py_BuildValue("h", bits);
|
---|
359 | }
|
---|
360 |
|
---|
361 | static char sndih_setSampleSize__doc__[] =
|
---|
362 | ""
|
---|
363 | ;
|
---|
364 |
|
---|
365 | static PyObject *
|
---|
366 | sndih_setSampleSize(self, args)
|
---|
367 | PyObject *self; /* Not used */
|
---|
368 | PyObject *args;
|
---|
369 | {
|
---|
370 | long inRefNum;
|
---|
371 | short size;
|
---|
372 | OSErr err;
|
---|
373 |
|
---|
374 | if (!PyArg_ParseTuple(args, "lh", &inRefNum, &size))
|
---|
375 | return NULL;
|
---|
376 |
|
---|
377 | if( (err=SPBSetDeviceInfo(inRefNum, siSampleSize, (Ptr)&size)) != noErr )
|
---|
378 | return PyMac_Error(err);
|
---|
379 | Py_INCREF(Py_None);
|
---|
380 | return Py_None;
|
---|
381 | }
|
---|
382 |
|
---|
383 | static char sndih_getSampleSizeAvailable__doc__[] =
|
---|
384 | ""
|
---|
385 | ;
|
---|
386 |
|
---|
387 | static PyObject *
|
---|
388 | sndih_getSampleSizeAvailable(self, args)
|
---|
389 | PyObject *self; /* Not used */
|
---|
390 | PyObject *args;
|
---|
391 | {
|
---|
392 | long inRefNum;
|
---|
393 | struct SampleSizeAvailable_arg arg;
|
---|
394 | OSErr err;
|
---|
395 | PyObject *rsizes;
|
---|
396 | short *fsizes;
|
---|
397 | int i;
|
---|
398 |
|
---|
399 | arg.sizes = NULL;
|
---|
400 | rsizes = NULL;
|
---|
401 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
402 | return NULL;
|
---|
403 |
|
---|
404 | if( (err=SPBGetDeviceInfo(inRefNum, siSampleSizeAvailable, (Ptr)&arg)) != noErr ) {
|
---|
405 | return PyMac_Error(err);
|
---|
406 | }
|
---|
407 | fsizes = (short *)*(arg.sizes);
|
---|
408 | /* Handle contains a list of rates */
|
---|
409 | if( (rsizes = PyTuple_New(arg.numsizes)) == NULL)
|
---|
410 | return NULL;
|
---|
411 | for( i=0; i<arg.numsizes; i++ )
|
---|
412 | PyTuple_SetItem(rsizes, i, PyInt_FromLong((long)fsizes[i]));
|
---|
413 | return rsizes;
|
---|
414 | }
|
---|
415 |
|
---|
416 | static char sndih_getSampleRateAvailable__doc__[] =
|
---|
417 | ""
|
---|
418 | ;
|
---|
419 |
|
---|
420 | static PyObject *
|
---|
421 | sndih_getSampleRateAvailable(self, args)
|
---|
422 | PyObject *self; /* Not used */
|
---|
423 | PyObject *args;
|
---|
424 | {
|
---|
425 | long inRefNum;
|
---|
426 | struct SampleRateAvailable_arg arg;
|
---|
427 | OSErr err;
|
---|
428 | PyObject *rrates, *obj;
|
---|
429 | Fixed *frates;
|
---|
430 | int i;
|
---|
431 |
|
---|
432 | arg.rates = NULL;
|
---|
433 | rrates = NULL;
|
---|
434 | if (!PyArg_ParseTuple(args, "l", &inRefNum))
|
---|
435 | return NULL;
|
---|
436 |
|
---|
437 | if( (err=SPBGetDeviceInfo(inRefNum, siSampleRateAvailable, (Ptr)&arg)) != noErr ) {
|
---|
438 | return PyMac_Error(err);
|
---|
439 | }
|
---|
440 | frates = (Fixed *)*(arg.rates);
|
---|
441 | if( arg.numrates == 0 ) {
|
---|
442 | /* The handle contains upper and lowerbound */
|
---|
443 | rrates = Py_BuildValue("O&O&", frates[0], frates[1]);
|
---|
444 | if (rrates == NULL) return NULL;
|
---|
445 | } else {
|
---|
446 | /* Handle contains a list of rates */
|
---|
447 | if( (rrates = PyTuple_New(arg.numrates)) == NULL)
|
---|
448 | return NULL;
|
---|
449 | for( i=0; i<arg.numrates; i++ ) {
|
---|
450 | if( (obj = Py_BuildValue("O&", PyMac_BuildUFixed, frates[i]))==NULL)
|
---|
451 | goto out;
|
---|
452 | PyTuple_SetItem(rrates, i, obj);
|
---|
453 | }
|
---|
454 | }
|
---|
455 | return Py_BuildValue("hO", arg.numrates, rrates);
|
---|
456 | out:
|
---|
457 | Py_XDECREF(rrates);
|
---|
458 | return NULL;
|
---|
459 | }
|
---|
460 |
|
---|
461 | /* List of methods defined in the module */
|
---|
462 |
|
---|
463 | static struct PyMethodDef sndih_methods[] = {
|
---|
464 | {"getChannelAvailable", (PyCFunction)sndih_getChannelAvailable, METH_VARARGS, sndih_getChannelAvailable__doc__},
|
---|
465 | {"getNumberChannels", (PyCFunction)sndih_getNumberChannels, METH_VARARGS, sndih_getNumberChannels__doc__},
|
---|
466 | {"setNumberChannels", (PyCFunction)sndih_setNumberChannels, METH_VARARGS, sndih_setNumberChannels__doc__},
|
---|
467 | {"getContinuous", (PyCFunction)sndih_getContinuous, METH_VARARGS, sndih_getContinuous__doc__},
|
---|
468 | {"setContinuous", (PyCFunction)sndih_setContinuous, METH_VARARGS, sndih_setContinuous__doc__},
|
---|
469 | {"getInputSourceNames", (PyCFunction)sndih_getInputSourceNames, METH_VARARGS, sndih_getInputSourceNames__doc__},
|
---|
470 | {"getInputSource", (PyCFunction)sndih_getInputSource, METH_VARARGS, sndih_getInputSource__doc__},
|
---|
471 | {"setInputSource", (PyCFunction)sndih_setInputSource, METH_VARARGS, sndih_setInputSource__doc__},
|
---|
472 | {"getPlayThruOnOff", (PyCFunction)sndih_getPlayThruOnOff, METH_VARARGS, sndih_getPlayThruOnOff__doc__},
|
---|
473 | {"setPlayThruOnOff", (PyCFunction)sndih_setPlayThruOnOff, METH_VARARGS, sndih_setPlayThruOnOff__doc__},
|
---|
474 | {"getSampleRate", (PyCFunction)sndih_getSampleRate, METH_VARARGS, sndih_getSampleRate__doc__},
|
---|
475 | {"setSampleRate", (PyCFunction)sndih_setSampleRate, METH_VARARGS, sndih_setSampleRate__doc__},
|
---|
476 | {"getSampleSize", (PyCFunction)sndih_getSampleSize, METH_VARARGS, sndih_getSampleSize__doc__},
|
---|
477 | {"setSampleSize", (PyCFunction)sndih_setSampleSize, METH_VARARGS, sndih_setSampleSize__doc__},
|
---|
478 | {"getSampleSizeAvailable", (PyCFunction)sndih_getSampleSizeAvailable, METH_VARARGS, sndih_getSampleSizeAvailable__doc__},
|
---|
479 | {"getSampleRateAvailable", (PyCFunction)sndih_getSampleRateAvailable, METH_VARARGS, sndih_getSampleRateAvailable__doc__},
|
---|
480 |
|
---|
481 | {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
|
---|
482 | };
|
---|
483 |
|
---|
484 |
|
---|
485 | /* Initialization function for the module (*must* be called initSndihooks) */
|
---|
486 |
|
---|
487 | static char Sndihooks_module_documentation[] =
|
---|
488 | ""
|
---|
489 | ;
|
---|
490 |
|
---|
491 | void
|
---|
492 | init_Sndihooks()
|
---|
493 | {
|
---|
494 | PyObject *m, *d;
|
---|
495 |
|
---|
496 | /* Create the module and add the functions */
|
---|
497 | m = Py_InitModule4("_Sndihooks", sndih_methods,
|
---|
498 | Sndihooks_module_documentation,
|
---|
499 | (PyObject*)NULL,PYTHON_API_VERSION);
|
---|
500 |
|
---|
501 | /* Add some symbolic constants to the module */
|
---|
502 | d = PyModule_GetDict(m);
|
---|
503 | ErrorObject = PyString_FromString("Sndihooks.error");
|
---|
504 | PyDict_SetItemString(d, "error", ErrorObject);
|
---|
505 |
|
---|
506 | /* XXXX Add constants here */
|
---|
507 |
|
---|
508 | /* Check for errors */
|
---|
509 | if (PyErr_Occurred())
|
---|
510 | Py_FatalError("can't initialize module Sndihooks");
|
---|
511 | }
|
---|
512 |
|
---|