mirror of https://github.com/python/cpython
Depracated some non-carbon modules.
This commit is contained in:
parent
9536bcbfd8
commit
a70ab8cd4f
|
@ -0,0 +1,465 @@
|
|||
/******************************************************************
|
||||
Copyright 1998 by Just van Rossum, Den Haag, The Netherlands.
|
||||
|
||||
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 name of Just van Rossum not be
|
||||
used in advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
JUST VAN ROSSUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
EVENT SHALL JUST VAN ROSSUM 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.
|
||||
|
||||
******************************************************************/
|
||||
|
||||
#include "Python.h"
|
||||
#include "macglue.h"
|
||||
#include "pymactoolbox.h"
|
||||
#include <Printing.h>
|
||||
|
||||
static PyObject *ErrorObject;
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
|
||||
static int
|
||||
TPRect_Convert(PyObject *v, TPRect *r)
|
||||
{
|
||||
if (v == Py_None) {
|
||||
*r = NULL;
|
||||
return 1;
|
||||
}
|
||||
return PyArg_Parse(v, "(hhhh)", &(*r)->left, &(*r)->top, &(*r)->right, &(*r)->bottom);
|
||||
}
|
||||
|
||||
|
||||
static char Pr_NewTPrintRecord__doc__[] =
|
||||
"creates a new TPrint handle"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_NewTPrintRecord(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
Handle hPrint;
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
hPrint = NewHandleClear((long) sizeof(TPrint));
|
||||
if ( hPrint == NULL ) {
|
||||
PyErr_NoMemory();
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)ResObj_New(hPrint);
|
||||
}
|
||||
|
||||
static char Pr_PrPurge__doc__[] =
|
||||
"PrPurge() -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrPurge(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
PrPurge();
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrNoPurge__doc__[] =
|
||||
"PrNoPurge() -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrNoPurge(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
PrNoPurge();
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrOpen__doc__[] =
|
||||
"PrOpen() -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrOpen(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
PrOpen();
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrClose__doc__[] =
|
||||
"PrClose() -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrClose(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
PrClose();
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrintDefault__doc__[] =
|
||||
"PrintDefault(THPrint hPrint) -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrintDefault(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
THPrint hPrint;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
|
||||
return NULL;
|
||||
PrintDefault(hPrint);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrValidate__doc__[] =
|
||||
"PrValidate(THPrint hPrint) -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrValidate(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
THPrint hPrint;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
|
||||
return NULL;
|
||||
PrValidate(hPrint);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrStlDialog__doc__[] =
|
||||
"PrStlDialog(THPrint hPrint) -> Boolean"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrStlDialog(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
THPrint hPrint;
|
||||
Boolean rv;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
|
||||
return NULL;
|
||||
rv = PrStlDialog(hPrint);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
return Py_BuildValue("h", rv);
|
||||
}
|
||||
|
||||
static char Pr_PrJobDialog__doc__[] =
|
||||
"PrJobDialog(THPrint hPrint) -> Boolean"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrJobDialog(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
THPrint hPrint;
|
||||
Boolean rv;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
|
||||
return NULL;
|
||||
rv = PrJobDialog(hPrint);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
return Py_BuildValue("h", rv);
|
||||
}
|
||||
|
||||
static char Pr_PrJobMerge__doc__[] =
|
||||
"PrJobMerge(THPrint hPrintSrc, THPrint hPrintDst) -> none"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrJobMerge(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
THPrint hPrintSrc, hPrintDst;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&O&", ResObj_Convert, &hPrintSrc, ResObj_Convert, &hPrintDst))
|
||||
return NULL;
|
||||
PrJobMerge(hPrintSrc, hPrintDst);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrOpenDoc__doc__[] =
|
||||
"PrOpenDoc(THPrint hPrint) -> TPPrPort aTPPort"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrOpenDoc(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
THPrint hPrint;
|
||||
TPPrPort aTPPort;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
|
||||
return NULL;
|
||||
aTPPort = PrOpenDoc(hPrint, NULL, NULL);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
return Py_BuildValue("O&", GrafObj_New, aTPPort);
|
||||
}
|
||||
|
||||
static char Pr_PrCloseDoc__doc__[] =
|
||||
"PrCloseDoc(TPPrPort pPrPort) -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrCloseDoc(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
TPPrPort pPrPort;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", GrafObj_Convert, &pPrPort))
|
||||
return NULL;
|
||||
PrCloseDoc(pPrPort);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrOpenPage__doc__[] =
|
||||
"PrOpenPage(TPPrPort pPrPort, TPRect pPageFrame) -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrOpenPage(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
TPPrPort pPrPort;
|
||||
Rect dummyrect = {0, 0, 0, 0};
|
||||
TPRect pPageFrame = &dummyrect;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&O&", GrafObj_Convert, &pPrPort, TPRect_Convert, &pPageFrame))
|
||||
return NULL;
|
||||
PrOpenPage(pPrPort, pPageFrame);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrClosePage__doc__[] =
|
||||
"PrClosePage(TPPrPort pPrPort) -> None"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrClosePage(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
TPPrPort pPrPort;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", GrafObj_Convert, &pPrPort))
|
||||
return NULL;
|
||||
PrClosePage(pPrPort);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrPicFile__doc__[] =
|
||||
"PrPicFile(THPrint hPrint) -> none"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrPicFile(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
THPrint hPrint;
|
||||
TPrStatus prStatus;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
|
||||
return NULL;
|
||||
PrPicFile(hPrint, NULL, NULL, NULL, &prStatus);
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrGeneral__doc__[] =
|
||||
"not implemented"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrGeneral(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
//PrGeneral();
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static char Pr_PrDrvrVers__doc__[] =
|
||||
"PrDrvrVers() -> version"
|
||||
;
|
||||
|
||||
static PyObject *
|
||||
Pr_PrDrvrVers(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
short rv;
|
||||
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
rv = PrDrvrVers();
|
||||
{
|
||||
OSErr _err = PrError();
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
}
|
||||
return Py_BuildValue("h", rv);
|
||||
}
|
||||
|
||||
/* List of methods defined in the module */
|
||||
|
||||
static struct PyMethodDef Pr_methods[] = {
|
||||
{"NewTPrintRecord", (PyCFunction)Pr_NewTPrintRecord, METH_VARARGS, Pr_NewTPrintRecord__doc__},
|
||||
{"PrPurge", (PyCFunction)Pr_PrPurge, METH_VARARGS, Pr_PrPurge__doc__},
|
||||
{"PrNoPurge", (PyCFunction)Pr_PrNoPurge, METH_VARARGS, Pr_PrNoPurge__doc__},
|
||||
{"PrOpen", (PyCFunction)Pr_PrOpen, METH_VARARGS, Pr_PrOpen__doc__},
|
||||
{"PrClose", (PyCFunction)Pr_PrClose, METH_VARARGS, Pr_PrClose__doc__},
|
||||
{"PrintDefault",(PyCFunction)Pr_PrintDefault, METH_VARARGS, Pr_PrintDefault__doc__},
|
||||
{"PrValidate", (PyCFunction)Pr_PrValidate, METH_VARARGS, Pr_PrValidate__doc__},
|
||||
{"PrStlDialog", (PyCFunction)Pr_PrStlDialog, METH_VARARGS, Pr_PrStlDialog__doc__},
|
||||
{"PrJobDialog", (PyCFunction)Pr_PrJobDialog, METH_VARARGS, Pr_PrJobDialog__doc__},
|
||||
{"PrJobMerge", (PyCFunction)Pr_PrJobMerge, METH_VARARGS, Pr_PrJobMerge__doc__},
|
||||
{"PrOpenDoc", (PyCFunction)Pr_PrOpenDoc, METH_VARARGS, Pr_PrOpenDoc__doc__},
|
||||
{"PrCloseDoc", (PyCFunction)Pr_PrCloseDoc, METH_VARARGS, Pr_PrCloseDoc__doc__},
|
||||
{"PrOpenPage", (PyCFunction)Pr_PrOpenPage, METH_VARARGS, Pr_PrOpenPage__doc__},
|
||||
{"PrClosePage", (PyCFunction)Pr_PrClosePage, METH_VARARGS, Pr_PrClosePage__doc__},
|
||||
{"PrPicFile", (PyCFunction)Pr_PrPicFile, METH_VARARGS, Pr_PrPicFile__doc__},
|
||||
// {"PrGeneral", (PyCFunction)Pr_PrGeneral, METH_VARARGS, Pr_PrGeneral__doc__},
|
||||
{"PrDrvrVers", (PyCFunction)Pr_PrDrvrVers, METH_VARARGS, Pr_PrDrvrVers__doc__},
|
||||
|
||||
{NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
||||
/* Initialization function for the module (*must* be called initPrinting) */
|
||||
|
||||
static char Printing_module_documentation[] =
|
||||
""
|
||||
;
|
||||
|
||||
void initPrinting();
|
||||
|
||||
void
|
||||
initPrinting()
|
||||
{
|
||||
PyObject *m, *d;
|
||||
|
||||
/* Create the module and add the functions */
|
||||
m = Py_InitModule4("Printing", Pr_methods,
|
||||
Printing_module_documentation,
|
||||
(PyObject*)NULL,PYTHON_API_VERSION);
|
||||
|
||||
/* Add some symbolic constants to the module */
|
||||
d = PyModule_GetDict(m);
|
||||
ErrorObject = PyString_FromString("Printing.error");
|
||||
PyDict_SetItemString(d, "error", ErrorObject);
|
||||
|
||||
/* XXXX Add constants here */
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
These modules no longer work under Carbon. If you are trying to revive
|
||||
non-carbon builds of MacPython you may want to revive them.
|
|
@ -0,0 +1,546 @@
|
|||
/***********************************************************
|
||||
Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
|
||||
The Netherlands.
|
||||
|
||||
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.
|
||||
|
||||
******************************************************************/
|
||||
|
||||
|
||||
#include "Python.h"
|
||||
#include "macglue.h"
|
||||
|
||||
#include <Gestalt.h>
|
||||
#include "Speech.h"
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define OLDP2C 1
|
||||
#include <TextUtils.h>
|
||||
#ifndef c2pstr
|
||||
#define c2pstr C2PStr
|
||||
#endif
|
||||
#ifndef p2cstr
|
||||
#define p2cstr P2CStr
|
||||
#endif
|
||||
#else
|
||||
#include "pascal.h"
|
||||
#endif /* __MWERKS__ */
|
||||
|
||||
#include <CodeFragments.h>
|
||||
int lib_available;
|
||||
|
||||
/* 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;
|
||||
PyObject *ms_error_object;
|
||||
int speech_available;
|
||||
|
||||
static
|
||||
init_available() {
|
||||
OSErr err;
|
||||
long result;
|
||||
|
||||
lib_available = ((ProcPtr)SpeakString != (ProcPtr)0);
|
||||
err = Gestalt(gestaltSpeechAttr, &result);
|
||||
if ( err == noErr && (result & (1<<gestaltSpeechMgrPresent)))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static
|
||||
check_available() {
|
||||
if ( !speech_available ) {
|
||||
PyErr_SetString(ms_error_object, "Speech Mgr not available");
|
||||
return 0;
|
||||
}
|
||||
if ( !lib_available ) {
|
||||
PyErr_SetString(ms_error_object, "Speech Mgr available, but shared lib missing");
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* -------------
|
||||
**
|
||||
** Part one - the speech channel object
|
||||
*/
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
SpeechChannel chan;
|
||||
PyObject *curtext; /* If non-NULL current text being spoken */
|
||||
} scobject;
|
||||
|
||||
static PyTypeObject sctype;
|
||||
|
||||
#define is_scobject(v) ((v)->ob_type == &sctype)
|
||||
|
||||
static scobject *
|
||||
newscobject(arg)
|
||||
VoiceSpec *arg;
|
||||
{
|
||||
scobject *self;
|
||||
OSErr err;
|
||||
|
||||
self = PyObject_NEW(scobject, &sctype);
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
if ( (err=NewSpeechChannel(arg, &self->chan)) != 0) {
|
||||
Py_DECREF(self);
|
||||
return (scobject *)PyErr_Mac(ms_error_object, err);
|
||||
}
|
||||
self->curtext = NULL;
|
||||
return self;
|
||||
}
|
||||
|
||||
/* sc methods */
|
||||
|
||||
static void
|
||||
sc_dealloc(self)
|
||||
scobject *self;
|
||||
{
|
||||
DisposeSpeechChannel(self->chan);
|
||||
PyObject_DEL(self);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sc_Stop(self, args)
|
||||
scobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
OSErr err;
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if ((err=StopSpeech(self->chan)) != 0) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return NULL;
|
||||
}
|
||||
if ( self->curtext ) {
|
||||
Py_DECREF(self->curtext);
|
||||
self->curtext = NULL;
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sc_SpeakText(self, args)
|
||||
scobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
OSErr err;
|
||||
char *str;
|
||||
int len;
|
||||
|
||||
if (!PyArg_Parse(args, "s#", &str, &len))
|
||||
return NULL;
|
||||
if ( self->curtext ) {
|
||||
StopSpeech(self->chan);
|
||||
Py_DECREF(self->curtext);
|
||||
self->curtext = NULL;
|
||||
}
|
||||
if ((err=SpeakText(self->chan, (Ptr)str, (long)len)) != 0) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return 0;
|
||||
}
|
||||
(void)PyArg_Parse(args, "O", &self->curtext); /* Or should I check this? */
|
||||
Py_INCREF(self->curtext);
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sc_GetRate(self, args)
|
||||
scobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
OSErr err;
|
||||
Fixed farg;
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if ((err=GetSpeechRate(self->chan, &farg)) != 0) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return 0;
|
||||
}
|
||||
return PyFloat_FromDouble(fixed2double(farg));
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sc_GetPitch(self, args)
|
||||
scobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
OSErr err;
|
||||
Fixed farg;
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if ((err=GetSpeechPitch(self->chan, &farg)) != 0) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return 0;
|
||||
}
|
||||
return PyFloat_FromDouble(fixed2double(farg));
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sc_SetRate(self, args)
|
||||
scobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
OSErr err;
|
||||
double darg;
|
||||
|
||||
if (!PyArg_Parse(args, "d", &darg))
|
||||
return NULL;
|
||||
if ((err=SetSpeechRate(self->chan, double2fixed(darg))) != 0) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return 0;
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sc_SetPitch(self, args)
|
||||
scobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
OSErr err;
|
||||
double darg;
|
||||
|
||||
if (!PyArg_Parse(args, "d", &darg))
|
||||
return NULL;
|
||||
if ((err=SetSpeechPitch(self->chan, double2fixed(darg))) != 0) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return NULL;
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
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},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
sc_getattr(self, name)
|
||||
scobject *self;
|
||||
char *name;
|
||||
{
|
||||
return Py_FindMethod(sc_methods, (PyObject *)self, name);
|
||||
}
|
||||
|
||||
static PyTypeObject sctype = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0, /*ob_size*/
|
||||
"macspeech.MacSpeechChannel", /*tp_name*/
|
||||
sizeof(scobject), /*tp_basicsize*/
|
||||
0, /*tp_itemsize*/
|
||||
/* methods */
|
||||
(destructor)sc_dealloc, /*tp_dealloc*/
|
||||
0, /*tp_print*/
|
||||
(getattrfunc)sc_getattr, /*tp_getattr*/
|
||||
0, /*tp_setattr*/
|
||||
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 {
|
||||
PyObject_HEAD
|
||||
int initialized;
|
||||
VoiceSpec vs;
|
||||
VoiceDescription vd;
|
||||
} mvobject;
|
||||
|
||||
static PyTypeObject mvtype;
|
||||
|
||||
#define is_mvobject(v) ((v)->ob_type == &mvtype)
|
||||
|
||||
static mvobject *
|
||||
newmvobject()
|
||||
{
|
||||
mvobject *self;
|
||||
self = PyObject_NEW(mvobject, &mvtype);
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
self->initialized = 0;
|
||||
return self;
|
||||
}
|
||||
|
||||
static int
|
||||
initmvobject(self, ind)
|
||||
mvobject *self;
|
||||
int ind;
|
||||
{
|
||||
OSErr err;
|
||||
|
||||
if ( (err=GetIndVoice((short)ind, &self->vs)) != 0 ) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return 0;
|
||||
}
|
||||
if ( (err=GetVoiceDescription(&self->vs, &self->vd, sizeof self->vd)) != 0) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return 0;
|
||||
}
|
||||
self->initialized = 1;
|
||||
return 1;
|
||||
}
|
||||
/* mv methods */
|
||||
|
||||
static void
|
||||
mv_dealloc(self)
|
||||
mvobject *self;
|
||||
{
|
||||
PyObject_DEL(self);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
mv_getgender(self, args)
|
||||
mvobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
PyObject *rv;
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if (!self->initialized) {
|
||||
PyErr_SetString(ms_error_object, "Uninitialized voice");
|
||||
return NULL;
|
||||
}
|
||||
rv = PyInt_FromLong(self->vd.gender);
|
||||
return rv;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
mv_newchannel(self, args)
|
||||
mvobject *self;
|
||||
PyObject *args;
|
||||
{
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if (!self->initialized) {
|
||||
PyErr_SetString(ms_error_object, "Uninitialized voice");
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)newscobject(&self->vs);
|
||||
}
|
||||
|
||||
static struct PyMethodDef mv_methods[] = {
|
||||
{"GetGender", (PyCFunction)mv_getgender},
|
||||
{"NewChannel", (PyCFunction)mv_newchannel},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
mv_getattr(self, name)
|
||||
mvobject *self;
|
||||
char *name;
|
||||
{
|
||||
return Py_FindMethod(mv_methods, (PyObject *)self, name);
|
||||
}
|
||||
|
||||
static PyTypeObject mvtype = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0, /*ob_size*/
|
||||
"macspeech.MacVoice", /*tp_name*/
|
||||
sizeof(mvobject), /*tp_basicsize*/
|
||||
0, /*tp_itemsize*/
|
||||
/* methods */
|
||||
(destructor)mv_dealloc, /*tp_dealloc*/
|
||||
0, /*tp_print*/
|
||||
(getattrfunc)mv_getattr, /*tp_getattr*/
|
||||
0, /*tp_setattr*/
|
||||
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 */
|
||||
|
||||
static PyObject *
|
||||
ms_Available(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
return PyInt_FromLong(speech_available);
|
||||
}
|
||||
|
||||
/* Count number of busy speeches */
|
||||
|
||||
static PyObject *
|
||||
ms_Busy(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
short result;
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if ( !check_available() )
|
||||
return NULL;
|
||||
result = SpeechBusy();
|
||||
return PyInt_FromLong(result);
|
||||
}
|
||||
|
||||
/* Say something */
|
||||
|
||||
static PyObject *
|
||||
ms_SpeakString(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
OSErr err;
|
||||
char *str;
|
||||
int len;
|
||||
|
||||
if (!PyArg_Parse(args, "s", &str))
|
||||
return NULL;
|
||||
if ( !check_available())
|
||||
return NULL;
|
||||
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));
|
||||
if ( err ) {
|
||||
PyErr_Mac(ms_error_object, err);
|
||||
return NULL;
|
||||
}
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
|
||||
/* Count number of available voices */
|
||||
|
||||
static PyObject *
|
||||
ms_CountVoices(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
short result;
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if ( !check_available())
|
||||
return NULL;
|
||||
CountVoices(&result);
|
||||
return PyInt_FromLong(result);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
ms_GetIndVoice(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
mvobject *rv;
|
||||
long ind;
|
||||
|
||||
if( !PyArg_Parse(args, "i", &ind))
|
||||
return NULL;
|
||||
if ( !check_available() )
|
||||
return NULL;
|
||||
rv = newmvobject();
|
||||
if ( !initmvobject(rv, ind) ) {
|
||||
Py_DECREF(rv);
|
||||
return NULL;
|
||||
}
|
||||
return (PyObject *)rv;
|
||||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
ms_Version(self, args)
|
||||
PyObject *self; /* Not used */
|
||||
PyObject *args;
|
||||
{
|
||||
NumVersion v;
|
||||
|
||||
if (!PyArg_NoArgs(args))
|
||||
return NULL;
|
||||
if ( !check_available())
|
||||
return NULL;
|
||||
v = SpeechManagerVersion();
|
||||
return PyInt_FromLong(*(int *)&v);
|
||||
}
|
||||
|
||||
|
||||
/* List of functions defined in the module */
|
||||
|
||||
static struct PyMethodDef ms_methods[] = {
|
||||
{"Available", ms_Available},
|
||||
{"CountVoices", ms_CountVoices},
|
||||
{"Busy", ms_Busy},
|
||||
{"SpeakString", ms_SpeakString},
|
||||
{"GetIndVoice", ms_GetIndVoice},
|
||||
{"Version", ms_Version},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
/* Initialization function for the module (*must* be called initmacspeech) */
|
||||
|
||||
void
|
||||
initmacspeech()
|
||||
{
|
||||
PyObject *m, *d;
|
||||
|
||||
speech_available = init_available();
|
||||
/* Create the module and add the functions */
|
||||
m = Py_InitModule("macspeech", ms_methods);
|
||||
|
||||
/* Add some symbolic constants to the module */
|
||||
d = PyModule_GetDict(m);
|
||||
ms_error_object = PyErr_NewException("macspeech.error", NULL, NULL);
|
||||
PyDict_SetItemString(d, "error", ms_error_object);
|
||||
}
|
Loading…
Reference in New Issue