226 lines
5.7 KiB
C
226 lines
5.7 KiB
C
|
/***********************************************************
|
||
|
Copyright 1991-1995 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 "InterslipLib.h"
|
||
|
#include "macglue.h"
|
||
|
|
||
|
static PyObject *ErrorObject;
|
||
|
|
||
|
/* ----------------------------------------------------- */
|
||
|
|
||
|
static char pyis_open__doc__[] =
|
||
|
"Load the interslip driver (optional)"
|
||
|
;
|
||
|
|
||
|
static PyObject *
|
||
|
pyis_open(self, args)
|
||
|
PyObject *self; /* Not used */
|
||
|
PyObject *args;
|
||
|
{
|
||
|
OSErr err;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args, ""))
|
||
|
return NULL;
|
||
|
err = is_open();
|
||
|
if ( err ) {
|
||
|
PyErr_Mac(ErrorObject, err);
|
||
|
return NULL;
|
||
|
}
|
||
|
Py_INCREF(Py_None);
|
||
|
return Py_None;
|
||
|
}
|
||
|
|
||
|
static char pyis_connect__doc__[] =
|
||
|
"Tell the driver to start a connect"
|
||
|
;
|
||
|
|
||
|
static PyObject *
|
||
|
pyis_connect(self, args)
|
||
|
PyObject *self; /* Not used */
|
||
|
PyObject *args;
|
||
|
{
|
||
|
OSErr err;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args, ""))
|
||
|
return NULL;
|
||
|
err = is_connect();
|
||
|
if ( err ) {
|
||
|
PyErr_Mac(ErrorObject, err);
|
||
|
return NULL;
|
||
|
}
|
||
|
Py_INCREF(Py_None);
|
||
|
return Py_None;
|
||
|
}
|
||
|
|
||
|
static char pyis_disconnect__doc__[] =
|
||
|
"Tell the interslip driver to start a disconnect"
|
||
|
;
|
||
|
|
||
|
static PyObject *
|
||
|
pyis_disconnect(self, args)
|
||
|
PyObject *self; /* Not used */
|
||
|
PyObject *args;
|
||
|
{
|
||
|
OSErr err;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args, ""))
|
||
|
return NULL;
|
||
|
err = is_disconnect();
|
||
|
if ( err ) {
|
||
|
PyErr_Mac(ErrorObject, err);
|
||
|
return NULL;
|
||
|
}
|
||
|
Py_INCREF(Py_None);
|
||
|
return Py_None;
|
||
|
}
|
||
|
|
||
|
static char pyis_status__doc__[] =
|
||
|
"Return (numeric_status, message_seqnum, message_string) status tuple"
|
||
|
;
|
||
|
|
||
|
static PyObject *
|
||
|
pyis_status(self, args)
|
||
|
PyObject *self; /* Not used */
|
||
|
PyObject *args;
|
||
|
{
|
||
|
long status, seqnum;
|
||
|
StringPtr message;
|
||
|
OSErr err;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args, ""))
|
||
|
return NULL;
|
||
|
err = is_status(&status, &seqnum, &message);
|
||
|
if ( err ) {
|
||
|
PyErr_Mac(ErrorObject, err);
|
||
|
return NULL;
|
||
|
}
|
||
|
return Py_BuildValue("iiO&", (int)status, (int)seqnum, PyMac_BuildStr255, message);
|
||
|
}
|
||
|
|
||
|
static char pyis_getconfig__doc__[] =
|
||
|
"Return configuration data (ibaud, obaud, flags, idrvname, odrvname, cfgname)"
|
||
|
;
|
||
|
|
||
|
static PyObject *
|
||
|
pyis_getconfig(self, args)
|
||
|
PyObject *self; /* Not used */
|
||
|
PyObject *args;
|
||
|
{
|
||
|
long baudrate, flags;
|
||
|
Str255 idrvname, odrvname, cfgname;
|
||
|
OSErr err;
|
||
|
int ibaud, obaud;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args, ""))
|
||
|
return NULL;
|
||
|
err = is_getconfig(&baudrate, &flags, idrvname, odrvname, cfgname);
|
||
|
if ( err ) {
|
||
|
PyErr_Mac(ErrorObject, err);
|
||
|
return NULL;
|
||
|
}
|
||
|
ibaud = (baudrate >> 16) & 0xffff;
|
||
|
obaud = baudrate & 0xffff;
|
||
|
return Py_BuildValue("iiiO&O&O&", ibaud, obaud, (int)flags, PyMac_BuildStr255, idrvname,
|
||
|
PyMac_BuildStr255, odrvname, PyMac_BuildStr255, cfgname);
|
||
|
}
|
||
|
|
||
|
static char pyis_setconfig__doc__[] =
|
||
|
"Set configuration data (ibaud, obaud, flags, idrvname, odrvname, cfgname)"
|
||
|
;
|
||
|
|
||
|
static PyObject *
|
||
|
pyis_setconfig(self, args)
|
||
|
PyObject *self; /* Not used */
|
||
|
PyObject *args;
|
||
|
{
|
||
|
long baudrate;
|
||
|
int flags;
|
||
|
Str255 idrvname, odrvname, cfgname;
|
||
|
OSErr err;
|
||
|
int ibaud, obaud;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args, "iiiO&O&O&", &ibaud, &obaud, &flags, PyMac_GetStr255, idrvname,
|
||
|
PyMac_GetStr255, odrvname, PyMac_GetStr255, cfgname))
|
||
|
return NULL;
|
||
|
baudrate = (ibaud << 16) | obaud;
|
||
|
err = is_setconfig(baudrate, (long)flags, idrvname, odrvname, cfgname);
|
||
|
if ( err ) {
|
||
|
PyErr_Mac(ErrorObject, err);
|
||
|
return NULL;
|
||
|
}
|
||
|
Py_INCREF(Py_None);
|
||
|
return Py_None;
|
||
|
}
|
||
|
|
||
|
/* List of methods defined in the module */
|
||
|
|
||
|
static struct PyMethodDef pyis_methods[] = {
|
||
|
{"open", pyis_open, 1, pyis_open__doc__},
|
||
|
{"connect", pyis_connect, 1, pyis_connect__doc__},
|
||
|
{"disconnect", pyis_disconnect, 1, pyis_disconnect__doc__},
|
||
|
{"status", pyis_status, 1, pyis_status__doc__},
|
||
|
{"getconfig", pyis_getconfig, 1, pyis_getconfig__doc__},
|
||
|
{"setconfig", pyis_setconfig, 1, pyis_setconfig__doc__},
|
||
|
|
||
|
{NULL, NULL} /* sentinel */
|
||
|
};
|
||
|
|
||
|
|
||
|
/* Initialization function for the module (*must* be called initinterslip) */
|
||
|
|
||
|
static char interslip_module_documentation[] =
|
||
|
""
|
||
|
;
|
||
|
|
||
|
void
|
||
|
initinterslip()
|
||
|
{
|
||
|
PyObject *m, *d;
|
||
|
|
||
|
/* Create the module and add the functions */
|
||
|
m = Py_InitModule4("interslip", pyis_methods,
|
||
|
interslip_module_documentation,
|
||
|
(PyObject*)NULL,PYTHON_API_VERSION);
|
||
|
|
||
|
/* Add some symbolic constants to the module */
|
||
|
d = PyModule_GetDict(m);
|
||
|
ErrorObject = PyString_FromString("interslip.error");
|
||
|
PyDict_SetItemString(d, "error", ErrorObject);
|
||
|
|
||
|
/* XXXX Add constants here */
|
||
|
|
||
|
PyDict_SetItemString(d, "IDLE", PyInt_FromLong(IS_IDLE));
|
||
|
PyDict_SetItemString(d, "WMODEM", PyInt_FromLong(IS_WMODEM));
|
||
|
PyDict_SetItemString(d, "DIAL", PyInt_FromLong(IS_DIAL));
|
||
|
PyDict_SetItemString(d, "LOGIN", PyInt_FromLong(IS_LOGIN));
|
||
|
PyDict_SetItemString(d, "RUN", PyInt_FromLong(IS_RUN));
|
||
|
PyDict_SetItemString(d, "DISC", PyInt_FromLong(IS_DISC));
|
||
|
|
||
|
/* Check for errors */
|
||
|
if (PyErr_Occurred())
|
||
|
Py_FatalError("can't initialize module interslip");
|
||
|
}
|
||
|
|