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