diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 1995-11-14 11:34:17 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 1995-11-14 11:34:17 (GMT) |
commit | 1dcbcc3abfb95669b25828557e576c46f03b501a (patch) | |
tree | 26f173ab4ff07ad542d3ec0e02a3a57e7a7480d0 /Mac/Demo | |
parent | 4ac724946a165ac5f7f2a8367f937bac3dd1bdc5 (diff) | |
download | cpython-1dcbcc3abfb95669b25828557e576c46f03b501a.zip cpython-1dcbcc3abfb95669b25828557e576c46f03b501a.tar.gz cpython-1dcbcc3abfb95669b25828557e576c46f03b501a.tar.bz2 |
Sample extension module: InterSLIP control API.
Diffstat (limited to 'Mac/Demo')
-rw-r--r-- | Mac/Demo/interslip/InterslipLib.c | 97 | ||||
-rw-r--r-- | Mac/Demo/interslip/InterslipLib.h | 20 | ||||
-rw-r--r-- | Mac/Demo/interslip/interslipmodule.c | 225 |
3 files changed, 342 insertions, 0 deletions
diff --git a/Mac/Demo/interslip/InterslipLib.c b/Mac/Demo/interslip/InterslipLib.c new file mode 100644 index 0000000..32c9717 --- /dev/null +++ b/Mac/Demo/interslip/InterslipLib.c @@ -0,0 +1,97 @@ +/* +** InterslipLib - Routines to talk to InterSLIP. Version 1.1, 31-Oct-1995. +** +** +** (c) Jack Jansen, CWI, 1995 <jack@cwi.nl> +*/ + +#include <Devices.h> + +#include "InterslipLib.h" + +static CntrlParam iopb; +static short refnum = -1; + +OSErr is_open() +{ + if ( refnum >= 0 ) return 0; + return OpenDriver("\p.InterSLIP", &refnum); +} + +OSErr is_connect() +{ + iopb.ioCRefNum = refnum; + iopb.ioVRefNum = refnum; + iopb.ioCompletion = (UniversalProcPtr) 0; + iopb.csCode = 2; + return PBControlImmed((ParmBlkPtr)&iopb); +} + +OSErr is_disconnect() +{ + iopb.ioCRefNum = refnum; + iopb.ioVRefNum = refnum; + iopb.ioCompletion = (UniversalProcPtr) 0; + iopb.csCode = 3; + return PBControlImmed((ParmBlkPtr)&iopb); +} + +OSErr is_status(long *status, long *msgseqnum, StringPtr *msg) +{ + long *csp; + OSErr err; + + iopb.ioCRefNum = refnum; + iopb.ioVRefNum = refnum; + iopb.ioCompletion = (UniversalProcPtr) 0; + iopb.csCode = 4; + if( err = PBControlImmed((ParmBlkPtr)&iopb) ) + return err; + csp = (long *)&iopb.csParam; + *status = csp[0]; + *msgseqnum = csp[1]; + *msg = (unsigned char *)csp[2]; + return 0; +} + +OSErr is_getconfig(long *baudrate, long *flags, + Str255 idrvnam, Str255 odrvnam, Str255 cfgnam) +{ + long *csp; + OSErr err; + + iopb.ioCRefNum = refnum; + iopb.ioVRefNum = refnum; + iopb.ioCompletion = (UniversalProcPtr) 0; + iopb.csCode = 6; + csp = (long *)&iopb.csParam; + csp[2] = (long)idrvnam; + csp[3] = (long)odrvnam; + csp[4] = (long)cfgnam; + if( err = PBControlImmed((ParmBlkPtr)&iopb) ) + return err; + *baudrate = csp[0]; + *flags = csp[1]; + return 0; +} + +OSErr is_setconfig(long baudrate, long flags, + Str255 idrvnam, Str255 odrvnam, Str255 cfgnam) +{ + long *csp; + OSErr err; + + iopb.ioCRefNum = refnum; + iopb.ioVRefNum = refnum; + iopb.ioCompletion = (UniversalProcPtr) 0; + iopb.csCode = 7; + csp = (long *)&iopb.csParam; + csp[0] = baudrate; + csp[1] = flags; + csp[2] = (long)idrvnam; + csp[3] = (long)odrvnam; + csp[4] = (long)cfgnam; + return PBControlImmed((ParmBlkPtr)&iopb); +} + + diff --git a/Mac/Demo/interslip/InterslipLib.h b/Mac/Demo/interslip/InterslipLib.h new file mode 100644 index 0000000..1ca2276 --- /dev/null +++ b/Mac/Demo/interslip/InterslipLib.h @@ -0,0 +1,20 @@ +/* +** InterSLIP API. +*/ + +#include <Types.h> + +/* States */ +#define IS_IDLE 0 +#define IS_WMODEM 1 +#define IS_DIAL 2 +#define IS_LOGIN 3 +#define IS_RUN 4 +#define IS_DISC 5 + +OSErr is_open(); /* Open InterSLIP driver (optional) */ +OSErr is_connect();/* Connect */ +OSErr is_disconnect(); /* Disconnect */ +OSErr is_status(long *, long *, StringPtr *); /* Get status, msg seq#, msg pointer */ +OSErr is_getconfig(long *, long *, Str255 , Str255 , Str255 ); /* get config */ +OSErr is_setconfig(long , long , Str255 , Str255 , Str255 ); /* set config */ diff --git a/Mac/Demo/interslip/interslipmodule.c b/Mac/Demo/interslip/interslipmodule.c new file mode 100644 index 0000000..dc2c7a8 --- /dev/null +++ b/Mac/Demo/interslip/interslipmodule.c @@ -0,0 +1,225 @@ +/*********************************************************** +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"); +} + |