| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | /***********************************************************
 | 
					
						
							| 
									
										
										
										
											1997-01-31 16:15:11 +00:00
										 |  |  | Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam, | 
					
						
							| 
									
										
										
										
											1995-01-08 14:33:34 +00:00
										 |  |  | The Netherlands. | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                         All Rights Reserved | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Permission to use, copy, modify, and distribute this software and its  | 
					
						
							|  |  |  | documentation for any purpose and without fee is hereby granted,  | 
					
						
							|  |  |  | provided that the above copyright notice appear in all copies and that | 
					
						
							|  |  |  | both that copyright notice and this permission notice appear in  | 
					
						
							|  |  |  | supporting documentation, and that the names of Stichting Mathematisch | 
					
						
							|  |  |  | Centrum or CWI not be used in advertising or publicity pertaining to | 
					
						
							|  |  |  | distribution of the software without specific, written prior permission. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO | 
					
						
							|  |  |  | THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | 
					
						
							|  |  |  | FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE | 
					
						
							|  |  |  | FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
					
						
							|  |  |  | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | 
					
						
							|  |  |  | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | 
					
						
							|  |  |  | OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ******************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | #include "Python.h"
 | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-02-24 13:56:59 +00:00
										 |  |  | #include <Gestalt.h>
 | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | #include "Speech.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | #ifdef __MWERKS__
 | 
					
						
							| 
									
										
										
										
											2000-06-02 21:35:07 +00:00
										 |  |  | #define OLDP2C 1
 | 
					
						
							| 
									
										
										
										
											1997-05-07 15:46:31 +00:00
										 |  |  | #include <TextUtils.h>
 | 
					
						
							| 
									
										
										
										
											2000-06-02 21:35:07 +00:00
										 |  |  | #ifndef c2pstr
 | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | #define c2pstr C2PStr
 | 
					
						
							| 
									
										
										
										
											2000-06-02 21:35:07 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef p2cstr
 | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | #define p2cstr P2CStr
 | 
					
						
							| 
									
										
										
										
											2000-06-02 21:35:07 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | #else
 | 
					
						
							|  |  |  | #include "pascal.h"
 | 
					
						
							|  |  |  | #endif /* __MWERKS__ */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __powerc
 | 
					
						
							| 
									
										
										
										
											1997-02-24 13:56:59 +00:00
										 |  |  | #include <CodeFragments.h>
 | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | int lib_available; | 
					
						
							|  |  |  | #endif /* __powerc */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | /* Somehow the Apple Fix2X and X2Fix don't do what I expect */ | 
					
						
							|  |  |  | #define fixed2double(x) (((double)(x))/32768.0)
 | 
					
						
							|  |  |  | #define double2fixed(x) ((Fixed)((x)*32768.0))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | char *CurrentSpeech; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | PyObject *ms_error_object; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | int speech_available; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | static | 
					
						
							|  |  |  | init_available() { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	long result; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __powerc
 | 
					
						
							|  |  |  | 	lib_available = ((ProcPtr)SpeakString != (ProcPtr)0); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	err = Gestalt(gestaltSpeechAttr, &result); | 
					
						
							|  |  |  | 	if ( err == noErr && (result & (1<<gestaltSpeechMgrPresent))) | 
					
						
							|  |  |  | 		return 1; | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static | 
					
						
							|  |  |  | check_available() { | 
					
						
							|  |  |  | 	if ( !speech_available ) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		PyErr_SetString(ms_error_object, "Speech Mgr not available"); | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #ifdef __powerc
 | 
					
						
							|  |  |  | 	if ( !lib_available ) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		PyErr_SetString(ms_error_object, "Speech Mgr available, but shared lib missing"); | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	return 1; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* -------------
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Part one - the speech channel object | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject_HEAD | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	SpeechChannel chan; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *curtext;	/* If non-NULL current text being spoken */ | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } scobject; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | staticforward PyTypeObject sctype; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define is_scobject(v)		((v)->ob_type == &sctype)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static scobject * | 
					
						
							|  |  |  | newscobject(arg) | 
					
						
							|  |  |  | 	VoiceSpec *arg; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	self = PyObject_NEW(scobject, &sctype); | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if (self == NULL) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ( (err=NewSpeechChannel(arg, &self->chan)) != 0) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		Py_DECREF(self); | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 		return (scobject *)PyErr_Mac(ms_error_object, err); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	self->curtext = NULL; | 
					
						
							|  |  |  | 	return self; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* sc methods */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | sc_dealloc(self) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	DisposeSpeechChannel(self->chan); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyMem_DEL(self); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | sc_Stop(self, args) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ((err=StopSpeech(self->chan)) != 0) { | 
					
						
							|  |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	if ( self->curtext ) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		Py_DECREF(self->curtext); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		self->curtext = NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | sc_SpeakText(self, args) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	char *str; | 
					
						
							|  |  |  | 	int len; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-05-07 15:46:31 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "s#", &str, &len)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if ( self->curtext ) { | 
					
						
							|  |  |  | 		StopSpeech(self->chan); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		Py_DECREF(self->curtext); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		self->curtext = NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ((err=SpeakText(self->chan, (Ptr)str, (long)len)) != 0) { | 
					
						
							|  |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	(void)PyArg_Parse(args, "O", &self->curtext);	/* Or should I check this? */ | 
					
						
							|  |  |  | 	Py_INCREF(self->curtext); | 
					
						
							|  |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | sc_GetRate(self, args) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	Fixed farg; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ((err=GetSpeechRate(self->chan, &farg)) != 0) { | 
					
						
							|  |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyFloat_FromDouble(fixed2double(farg)); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | sc_GetPitch(self, args) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	Fixed farg; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ((err=GetSpeechPitch(self->chan, &farg)) != 0) { | 
					
						
							|  |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyFloat_FromDouble(fixed2double(farg)); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | sc_SetRate(self, args) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	double darg; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "d", &darg)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ((err=SetSpeechRate(self->chan, double2fixed(darg))) != 0) { | 
					
						
							|  |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | sc_SetPitch(self, args) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	double darg; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "d", &darg)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ((err=SetSpeechPitch(self->chan, double2fixed(darg))) != 0) { | 
					
						
							|  |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static struct PyMethodDef sc_methods[] = { | 
					
						
							|  |  |  | 	{"Stop",		(PyCFunction)sc_Stop}, | 
					
						
							|  |  |  | 	{"SetRate",		(PyCFunction)sc_SetRate}, | 
					
						
							|  |  |  | 	{"GetRate",		(PyCFunction)sc_GetRate}, | 
					
						
							|  |  |  | 	{"SetPitch",	(PyCFunction)sc_SetPitch}, | 
					
						
							|  |  |  | 	{"GetPitch",	(PyCFunction)sc_GetPitch}, | 
					
						
							|  |  |  | 	{"SpeakText",	(PyCFunction)sc_SpeakText}, | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	{NULL,			NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | sc_getattr(self, name) | 
					
						
							|  |  |  | 	scobject *self; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_FindMethod(sc_methods, (PyObject *)self, name); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyTypeObject sctype = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	0,			/*ob_size*/ | 
					
						
							|  |  |  | 	"MacSpeechChannel",			/*tp_name*/ | 
					
						
							|  |  |  | 	sizeof(scobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  | 	0,			/*tp_itemsize*/ | 
					
						
							|  |  |  | 	/* methods */ | 
					
						
							|  |  |  | 	(destructor)sc_dealloc, /*tp_dealloc*/ | 
					
						
							|  |  |  | 	0,			/*tp_print*/ | 
					
						
							|  |  |  | 	(getattrfunc)sc_getattr, /*tp_getattr*/ | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	0, 			/*tp_setattr*/ | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	0,			/*tp_compare*/ | 
					
						
							|  |  |  | 	0,			/*tp_repr*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_number*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_sequence*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_mapping*/ | 
					
						
							|  |  |  | 	0,			/*tp_hash*/ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* -------------
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Part two - the voice object | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject_HEAD | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	int		initialized; | 
					
						
							|  |  |  | 	VoiceSpec	vs; | 
					
						
							|  |  |  | 	VoiceDescription vd; | 
					
						
							|  |  |  | } mvobject; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | staticforward PyTypeObject mvtype; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define is_mvobject(v)		((v)->ob_type == &mvtype)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static mvobject * | 
					
						
							|  |  |  | newmvobject() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	mvobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	self = PyObject_NEW(mvobject, &mvtype); | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if (self == NULL) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	self->initialized = 0; | 
					
						
							|  |  |  | 	return self; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | initmvobject(self, ind) | 
					
						
							|  |  |  | 	mvobject *self; | 
					
						
							|  |  |  | 	int ind; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if ( (err=GetIndVoice((short)ind, &self->vs)) != 0 ) { | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if ( (err=GetVoiceDescription(&self->vs, &self->vd, sizeof self->vd)) != 0) { | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	self->initialized = 1; | 
					
						
							|  |  |  | 	return 1; | 
					
						
							|  |  |  | }  | 
					
						
							|  |  |  | /* mv methods */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | mv_dealloc(self) | 
					
						
							|  |  |  | 	mvobject *self; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyMem_DEL(self); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | mv_getgender(self, args) | 
					
						
							|  |  |  | 	mvobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *rv; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if (!self->initialized) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		PyErr_SetString(ms_error_object, "Uninitialized voice"); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	rv = PyInt_FromLong(self->vd.gender); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	return rv; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | mv_newchannel(self, args) | 
					
						
							|  |  |  | 	mvobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | {	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if (!self->initialized) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		PyErr_SetString(ms_error_object, "Uninitialized voice"); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newscobject(&self->vs); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static struct PyMethodDef mv_methods[] = { | 
					
						
							|  |  |  | 	{"GetGender",	(PyCFunction)mv_getgender}, | 
					
						
							|  |  |  | 	{"NewChannel",	(PyCFunction)mv_newchannel}, | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	{NULL,		NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | mv_getattr(self, name) | 
					
						
							|  |  |  | 	mvobject *self; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_FindMethod(mv_methods, (PyObject *)self, name); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyTypeObject mvtype = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	0,			/*ob_size*/ | 
					
						
							|  |  |  | 	"MacVoice",			/*tp_name*/ | 
					
						
							|  |  |  | 	sizeof(mvobject),	/*tp_basicsize*/ | 
					
						
							|  |  |  | 	0,			/*tp_itemsize*/ | 
					
						
							|  |  |  | 	/* methods */ | 
					
						
							|  |  |  | 	(destructor)mv_dealloc, /*tp_dealloc*/ | 
					
						
							|  |  |  | 	0,			/*tp_print*/ | 
					
						
							|  |  |  | 	(getattrfunc)mv_getattr, /*tp_getattr*/ | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	0,			/*tp_setattr*/ | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	0,			/*tp_compare*/ | 
					
						
							|  |  |  | 	0,			/*tp_repr*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_number*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_sequence*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_mapping*/ | 
					
						
							|  |  |  | 	0,			/*tp_hash*/ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* -------------
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Part three - The module interface | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* See if Speech manager available */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | ms_Available(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; /* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyInt_FromLong(speech_available); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Count number of busy speeches */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | ms_Busy(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; /* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	short result; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ( !check_available() ) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	result = SpeechBusy(); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyInt_FromLong(result); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Say something */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | ms_SpeakString(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; /* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	char *str; | 
					
						
							|  |  |  | 	int len; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "s", &str)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ( !check_available()) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	if (CurrentSpeech) { | 
					
						
							|  |  |  | 		/* Free the old speech, after killing it off
 | 
					
						
							|  |  |  | 		** (note that speach is async and c2pstr works inplace) | 
					
						
							|  |  |  | 		*/ | 
					
						
							|  |  |  | 		SpeakString("\p"); | 
					
						
							|  |  |  | 		free(CurrentSpeech); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	len = strlen(str); | 
					
						
							|  |  |  | 	CurrentSpeech = malloc(len+1); | 
					
						
							|  |  |  | 	strcpy(CurrentSpeech, str); | 
					
						
							|  |  |  | 	err = SpeakString(c2pstr(CurrentSpeech)); | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ms_error_object, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Count number of available voices */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | ms_CountVoices(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; /* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	short result; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	if ( !check_available()) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	CountVoices(&result); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyInt_FromLong(result); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | ms_GetIndVoice(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; /* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	mvobject *rv; | 
					
						
							|  |  |  | 	long ind; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if( !PyArg_Parse(args, "i", &ind)) | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if ( !check_available() ) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	rv = newmvobject(); | 
					
						
							|  |  |  | 	if ( !initmvobject(rv, ind) ) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		Py_DECREF(rv); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)rv; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | ms_Version(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; /* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	NumVersion v; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_NoArgs(args)) | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if ( !check_available()) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	v = SpeechManagerVersion(); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyInt_FromLong(*(int *)&v); | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* List of functions defined in the module */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static struct PyMethodDef ms_methods[] = { | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	{"Available",	ms_Available}, | 
					
						
							|  |  |  | 	{"CountVoices",	ms_CountVoices}, | 
					
						
							|  |  |  | 	{"Busy",		ms_Busy}, | 
					
						
							|  |  |  | 	{"SpeakString",	ms_SpeakString}, | 
					
						
							|  |  |  | 	{"GetIndVoice", ms_GetIndVoice}, | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	{"Version",		ms_Version}, | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	{NULL,		NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Initialization function for the module (*must* be called initmacspeech) */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | initmacspeech() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *m, *d; | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-12-14 13:34:35 +00:00
										 |  |  | 	speech_available = init_available(); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 	/* Create the module and add the functions */ | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	m = Py_InitModule("macspeech", ms_methods); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Add some symbolic constants to the module */ | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	d = PyModule_GetDict(m); | 
					
						
							| 
									
										
										
										
											1997-10-07 21:47:25 +00:00
										 |  |  | 	ms_error_object = PyErr_NewException("macspeech.error", NULL, NULL); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyDict_SetItemString(d, "error", ms_error_object); | 
					
						
							| 
									
										
										
										
											1994-10-02 11:33:59 +00:00
										 |  |  | } |