mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			225 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			225 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");
 | |
| }
 | |
| 
 | 
