/* termiosmodule.c -- POSIX terminal I/O module implementation.  */

#include "Python.h"

#define PyInit_termios inittermios

#include <termios.h>
#ifdef __osf__
/* On OSF, sys/ioctl.h requires that struct termio already be defined,
 * so this needs to be included first on that platform. */
#include <termio.h>
#endif
#include <sys/ioctl.h>

/* HP-UX requires that this be included to pick up MDCD, MCTS, MDSR,
 * MDTR, MRI, and MRTS (appearantly used internally by some things
 * defined as macros; these are not used here directly).
 */
#ifdef HAVE_SYS_MODEM_H
#include <sys/modem.h>
#endif

PyDoc_STRVAR(termios__doc__,
"This module provides an interface to the Posix calls for tty I/O control.\n\
For a complete description of these calls, see the Posix or Unix manual\n\
pages. It is only available for those Unix versions that support Posix\n\
termios style tty I/O control.\n\
\n\
All functions in this module take a file descriptor fd as their first\n\
argument. This can be an integer file descriptor, such as returned by\n\
sys.stdin.fileno(), or a file object, such as sys.stdin itself.");

static PyObject *TermiosError;

static int fdconv(PyObject* obj, void* p)
{
	int fd;

	fd = PyObject_AsFileDescriptor(obj);
	if (fd >= 0) {
		*(int*)p = fd;
		return 1;
	}
	return 0;
}

PyDoc_STRVAR(termios_tcgetattr__doc__,
"tcgetattr(fd) -> list_of_attrs\n\
\n\
Get the tty attributes for file descriptor fd, as follows:\n\
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc] where cc is a list\n\
of the tty special characters (each a string of length 1, except the items\n\
with indices VMIN and VTIME, which are integers when these fields are\n\
defined).  The interpretation of the flags and the speeds as well as the\n\
indexing in the cc array must be done using the symbolic constants defined\n\
in this module.");

static PyObject *
termios_tcgetattr(PyObject *self, PyObject *args)
{
	int fd;
	struct termios mode;
	PyObject *cc;
	speed_t ispeed, ospeed;
	PyObject *v;
	int i;
	char ch;

	if (!PyArg_ParseTuple(args, "O&:tcgetattr", 
			      fdconv, (void*)&fd))
		return NULL;

	if (tcgetattr(fd, &mode) == -1)
		return PyErr_SetFromErrno(TermiosError);

	ispeed = cfgetispeed(&mode);
	ospeed = cfgetospeed(&mode);

	cc = PyList_New(NCCS);
	if (cc == NULL)
		return NULL;
	for (i = 0; i < NCCS; i++) {
		ch = (char)mode.c_cc[i];
		v = PyString_FromStringAndSize(&ch, 1);
		if (v == NULL)
			goto err;
		PyList_SetItem(cc, i, v);
	}

	/* Convert the MIN and TIME slots to integer.  On some systems, the
	   MIN and TIME slots are the same as the EOF and EOL slots.  So we
	   only do this in noncanonical input mode.  */
	if ((mode.c_lflag & ICANON) == 0) {
		v = PyInt_FromLong((long)mode.c_cc[VMIN]);
		if (v == NULL)
			goto err;
		PyList_SetItem(cc, VMIN, v);
		v = PyInt_FromLong((long)mode.c_cc[VTIME]);
		if (v == NULL)
			goto err;
		PyList_SetItem(cc, VTIME, v);
	}

	if (!(v = PyList_New(7)))
		goto err;

	PyList_SetItem(v, 0, PyInt_FromLong((long)mode.c_iflag));
	PyList_SetItem(v, 1, PyInt_FromLong((long)mode.c_oflag));
	PyList_SetItem(v, 2, PyInt_FromLong((long)mode.c_cflag));
	PyList_SetItem(v, 3, PyInt_FromLong((long)mode.c_lflag));
	PyList_SetItem(v, 4, PyInt_FromLong((long)ispeed));
	PyList_SetItem(v, 5, PyInt_FromLong((long)ospeed));
	PyList_SetItem(v, 6, cc);
	if (PyErr_Occurred()){
		Py_DECREF(v);
		goto err;
	}
	return v;
  err:
	Py_DECREF(cc);
	return NULL;
}

PyDoc_STRVAR(termios_tcsetattr__doc__,
"tcsetattr(fd, when, attributes) -> None\n\
\n\
Set the tty attributes for file descriptor fd.\n\
The attributes to be set are taken from the attributes argument, which\n\
is a list like the one returned by tcgetattr(). The when argument\n\
determines when the attributes are changed: termios.TCSANOW to\n\
change immediately, termios.TCSADRAIN to change after transmitting all\n\
queued output, or termios.TCSAFLUSH to change after transmitting all\n\
queued output and discarding all queued input. ");

static PyObject *
termios_tcsetattr(PyObject *self, PyObject *args)
{
	int fd, when;
	struct termios mode;
	speed_t ispeed, ospeed;
	PyObject *term, *cc, *v;
	int i;

	if (!PyArg_ParseTuple(args, "O&iO:tcsetattr", 
			      fdconv, &fd, &when, &term))
		return NULL;
	if (!PyList_Check(term) || PyList_Size(term) != 7) {
		PyErr_SetString(PyExc_TypeError, 
			     "tcsetattr, arg 3: must be 7 element list");
		return NULL;
	}

	/* Get the old mode, in case there are any hidden fields... */
	if (tcgetattr(fd, &mode) == -1)
		return PyErr_SetFromErrno(TermiosError);
	mode.c_iflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 0));
	mode.c_oflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 1));
	mode.c_cflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 2));
	mode.c_lflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 3));
	ispeed = (speed_t) PyInt_AsLong(PyList_GetItem(term, 4));
	ospeed = (speed_t) PyInt_AsLong(PyList_GetItem(term, 5));
	cc = PyList_GetItem(term, 6);
	if (PyErr_Occurred())
		return NULL;

	if (!PyList_Check(cc) || PyList_Size(cc) != NCCS) {
		PyErr_Format(PyExc_TypeError, 
			"tcsetattr: attributes[6] must be %d element list",
			     NCCS);
		return NULL;
	}

	for (i = 0; i < NCCS; i++) {
		v = PyList_GetItem(cc, i);

		if (PyString_Check(v) && PyString_Size(v) == 1)
			mode.c_cc[i] = (cc_t) * PyString_AsString(v);
		else if (PyInt_Check(v))
			mode.c_cc[i] = (cc_t) PyInt_AsLong(v);
		else {
			PyErr_SetString(PyExc_TypeError, 
     "tcsetattr: elements of attributes must be characters or integers");
			return NULL;
		}
	}

	if (cfsetispeed(&mode, (speed_t) ispeed) == -1)
		return PyErr_SetFromErrno(TermiosError);
	if (cfsetospeed(&mode, (speed_t) ospeed) == -1)
		return PyErr_SetFromErrno(TermiosError);
	if (tcsetattr(fd, when, &mode) == -1)
		return PyErr_SetFromErrno(TermiosError);

	Py_INCREF(Py_None);
	return Py_None;
}

PyDoc_STRVAR(termios_tcsendbreak__doc__,
"tcsendbreak(fd, duration) -> None\n\
\n\
Send a break on file descriptor fd.\n\
A zero duration sends a break for 0.25-0.5 seconds; a nonzero duration\n\
has a system dependent meaning.");

static PyObject *
termios_tcsendbreak(PyObject *self, PyObject *args)
{
	int fd, duration;

	if (!PyArg_ParseTuple(args, "O&i:tcsendbreak", 
			      fdconv, &fd, &duration))
		return NULL;
	if (tcsendbreak(fd, duration) == -1)
		return PyErr_SetFromErrno(TermiosError);

	Py_INCREF(Py_None);
	return Py_None;
}

PyDoc_STRVAR(termios_tcdrain__doc__,
"tcdrain(fd) -> None\n\
\n\
Wait until all output written to file descriptor fd has been transmitted.");

static PyObject *
termios_tcdrain(PyObject *self, PyObject *args)
{
	int fd;

	if (!PyArg_ParseTuple(args, "O&:tcdrain", 
			      fdconv, &fd))
		return NULL;
	if (tcdrain(fd) == -1)
		return PyErr_SetFromErrno(TermiosError);

	Py_INCREF(Py_None);
	return Py_None;
}

PyDoc_STRVAR(termios_tcflush__doc__,
"tcflush(fd, queue) -> None\n\
\n\
Discard queued data on file descriptor fd.\n\
The queue selector specifies which queue: termios.TCIFLUSH for the input\n\
queue, termios.TCOFLUSH for the output queue, or termios.TCIOFLUSH for\n\
both queues. ");

static PyObject *
termios_tcflush(PyObject *self, PyObject *args)
{
	int fd, queue;

	if (!PyArg_ParseTuple(args, "O&i:tcflush", 
			      fdconv, &fd, &queue))
		return NULL;
	if (tcflush(fd, queue) == -1)
		return PyErr_SetFromErrno(TermiosError);

	Py_INCREF(Py_None);
	return Py_None;
}

PyDoc_STRVAR(termios_tcflow__doc__,
"tcflow(fd, action) -> None\n\
\n\
Suspend or resume input or output on file descriptor fd.\n\
The action argument can be termios.TCOOFF to suspend output,\n\
termios.TCOON to restart output, termios.TCIOFF to suspend input,\n\
or termios.TCION to restart input.");

static PyObject *
termios_tcflow(PyObject *self, PyObject *args)
{
	int fd, action;

	if (!PyArg_ParseTuple(args, "O&i:tcflow", 
			      fdconv, &fd, &action))
		return NULL;
	if (tcflow(fd, action) == -1)
		return PyErr_SetFromErrno(TermiosError);

	Py_INCREF(Py_None);
	return Py_None;
}

static PyMethodDef termios_methods[] =
{
	{"tcgetattr", termios_tcgetattr, 
	 METH_VARARGS, termios_tcgetattr__doc__},
	{"tcsetattr", termios_tcsetattr, 
	 METH_VARARGS, termios_tcsetattr__doc__},
	{"tcsendbreak", termios_tcsendbreak, 
	 METH_VARARGS, termios_tcsendbreak__doc__},
	{"tcdrain", termios_tcdrain, 
	 METH_VARARGS, termios_tcdrain__doc__},
	{"tcflush", termios_tcflush, 
	 METH_VARARGS, termios_tcflush__doc__},
	{"tcflow", termios_tcflow, 
	 METH_VARARGS, termios_tcflow__doc__},
	{NULL, NULL}
};


#if defined(VSWTCH) && !defined(VSWTC)
#define VSWTC VSWTCH
#endif

#if defined(VSWTC) && !defined(VSWTCH)
#define VSWTCH VSWTC
#endif

static struct constant {
	char *name;
	long value;
} termios_constants[] = {
	/* cfgetospeed(), cfsetospeed() constants */
	{"B0", B0},
	{"B50", B50},
	{"B75", B75},
	{"B110", B110},
	{"B134", B134},
	{"B150", B150},
	{"B200", B200},
	{"B300", B300},
	{"B600", B600},
	{"B1200", B1200},
	{"B1800", B1800},
	{"B2400", B2400},
	{"B4800", B4800},
	{"B9600", B9600},
	{"B19200", B19200},
	{"B38400", B38400},
#ifdef B57600
	{"B57600", B57600},
#endif
#ifdef B115200
	{"B115200", B115200},
#endif
#ifdef B230400
	{"B230400", B230400},
#endif
#ifdef CBAUDEX
	{"CBAUDEX", CBAUDEX},
#endif

	/* tcsetattr() constants */
	{"TCSANOW", TCSANOW},
	{"TCSADRAIN", TCSADRAIN},
	{"TCSAFLUSH", TCSAFLUSH},

	/* tcflush() constants */
	{"TCIFLUSH", TCIFLUSH},
	{"TCOFLUSH", TCOFLUSH},
	{"TCIOFLUSH", TCIOFLUSH},

	/* tcflow() constants */
	{"TCOOFF", TCOOFF},
	{"TCOON", TCOON},
	{"TCIOFF", TCIOFF},
	{"TCION", TCION},

	/* struct termios.c_iflag constants */
	{"IGNBRK", IGNBRK},
	{"BRKINT", BRKINT},
	{"IGNPAR", IGNPAR},
	{"PARMRK", PARMRK},
	{"INPCK", INPCK},
	{"ISTRIP", ISTRIP},
	{"INLCR", INLCR},
	{"IGNCR", IGNCR},
	{"ICRNL", ICRNL},
#ifdef IUCLC
	{"IUCLC", IUCLC},
#endif
	{"IXON", IXON},
	{"IXANY", IXANY},
	{"IXOFF", IXOFF},
#ifdef IMAXBEL
	{"IMAXBEL", IMAXBEL},
#endif

	/* struct termios.c_oflag constants */
	{"OPOST", OPOST},
#ifdef OLCUC
	{"OLCUC", OLCUC},
#endif
#ifdef ONLCR
	{"ONLCR", ONLCR},
#endif
#ifdef OCRNL
	{"OCRNL", OCRNL},
#endif
#ifdef ONOCR
	{"ONOCR", ONOCR},
#endif
#ifdef ONLRET
	{"ONLRET", ONLRET},
#endif
#ifdef OFILL
	{"OFILL", OFILL},
#endif
#ifdef OFDEL
	{"OFDEL", OFDEL},
#endif
#ifdef NLDLY
	{"NLDLY", NLDLY},
#endif
#ifdef CRDLY
	{"CRDLY", CRDLY},
#endif
#ifdef TABDLY
	{"TABDLY", TABDLY},
#endif
#ifdef BSDLY
	{"BSDLY", BSDLY},
#endif
#ifdef VTDLY
	{"VTDLY", VTDLY},
#endif
#ifdef FFDLY
	{"FFDLY", FFDLY},
#endif

	/* struct termios.c_oflag-related values (delay mask) */
#ifdef NL0
	{"NL0", NL0},
#endif
#ifdef NL1
	{"NL1", NL1},
#endif
#ifdef CR0
	{"CR0", CR0},
#endif
#ifdef CR1
	{"CR1", CR1},
#endif
#ifdef CR2
	{"CR2", CR2},
#endif
#ifdef CR3
	{"CR3", CR3},
#endif
#ifdef TAB0
	{"TAB0", TAB0},
#endif
#ifdef TAB1
	{"TAB1", TAB1},
#endif
#ifdef TAB2
	{"TAB2", TAB2},
#endif
#ifdef TAB3
	{"TAB3", TAB3},
#endif
#ifdef XTABS
	{"XTABS", XTABS},
#endif
#ifdef BS0
	{"BS0", BS0},
#endif
#ifdef BS1
	{"BS1", BS1},
#endif
#ifdef VT0
	{"VT0", VT0},
#endif
#ifdef VT1
	{"VT1", VT1},
#endif
#ifdef FF0
	{"FF0", FF0},
#endif
#ifdef FF1
	{"FF1", FF1},
#endif

	/* struct termios.c_cflag constants */
	{"CSIZE", CSIZE},
	{"CSTOPB", CSTOPB},
	{"CREAD", CREAD},
	{"PARENB", PARENB},
	{"PARODD", PARODD},
	{"HUPCL", HUPCL},
	{"CLOCAL", CLOCAL},
#ifdef CIBAUD
	{"CIBAUD", CIBAUD},
#endif
#ifdef CRTSCTS
	{"CRTSCTS", (long)CRTSCTS},
#endif

	/* struct termios.c_cflag-related values (character size) */
	{"CS5", CS5},
	{"CS6", CS6},
	{"CS7", CS7},
	{"CS8", CS8},

	/* struct termios.c_lflag constants */
	{"ISIG", ISIG},
	{"ICANON", ICANON},
#ifdef XCASE
	{"XCASE", XCASE},
#endif
	{"ECHO", ECHO},
	{"ECHOE", ECHOE},
	{"ECHOK", ECHOK},
	{"ECHONL", ECHONL},
#ifdef ECHOCTL
	{"ECHOCTL", ECHOCTL},
#endif
#ifdef ECHOPRT
	{"ECHOPRT", ECHOPRT},
#endif
#ifdef ECHOKE
	{"ECHOKE", ECHOKE},
#endif
#ifdef FLUSHO
	{"FLUSHO", FLUSHO},
#endif
	{"NOFLSH", NOFLSH},
	{"TOSTOP", TOSTOP},
#ifdef PENDIN
	{"PENDIN", PENDIN},
#endif
	{"IEXTEN", IEXTEN},

	/* indexes into the control chars array returned by tcgetattr() */
	{"VINTR", VINTR},
	{"VQUIT", VQUIT},
	{"VERASE", VERASE},
	{"VKILL", VKILL},
	{"VEOF", VEOF},
	{"VTIME", VTIME},
	{"VMIN", VMIN},
#ifdef VSWTC
	/* The #defines above ensure that if either is defined, both are,
         * but both may be omitted by the system headers.  ;-(  */
	{"VSWTC", VSWTC},
	{"VSWTCH", VSWTCH},
#endif
	{"VSTART", VSTART},
	{"VSTOP", VSTOP},
	{"VSUSP", VSUSP},
	{"VEOL", VEOL},
#ifdef VREPRINT
	{"VREPRINT", VREPRINT},
#endif
#ifdef VDISCARD
	{"VDISCARD", VDISCARD},
#endif
#ifdef VWERASE
	{"VWERASE", VWERASE},
#endif
#ifdef VLNEXT
	{"VLNEXT", VLNEXT},
#endif
#ifdef VEOL2
	{"VEOL2", VEOL2},
#endif


#ifdef B460800
	{"B460800", B460800},
#endif
#ifdef CBAUD
	{"CBAUD", CBAUD},
#endif
#ifdef CDEL
	{"CDEL", CDEL},
#endif
#ifdef CDSUSP
	{"CDSUSP", CDSUSP},
#endif
#ifdef CEOF
	{"CEOF", CEOF},
#endif
#ifdef CEOL
	{"CEOL", CEOL},
#endif
#ifdef CEOL2
	{"CEOL2", CEOL2},
#endif
#ifdef CEOT
	{"CEOT", CEOT},
#endif
#ifdef CERASE
	{"CERASE", CERASE},
#endif
#ifdef CESC
	{"CESC", CESC},
#endif
#ifdef CFLUSH
	{"CFLUSH", CFLUSH},
#endif
#ifdef CINTR
	{"CINTR", CINTR},
#endif
#ifdef CKILL
	{"CKILL", CKILL},
#endif
#ifdef CLNEXT
	{"CLNEXT", CLNEXT},
#endif
#ifdef CNUL
	{"CNUL", CNUL},
#endif
#ifdef COMMON
	{"COMMON", COMMON},
#endif
#ifdef CQUIT
	{"CQUIT", CQUIT},
#endif
#ifdef CRPRNT
	{"CRPRNT", CRPRNT},
#endif
#ifdef CSTART
	{"CSTART", CSTART},
#endif
#ifdef CSTOP
	{"CSTOP", CSTOP},
#endif
#ifdef CSUSP
	{"CSUSP", CSUSP},
#endif
#ifdef CSWTCH
	{"CSWTCH", CSWTCH},
#endif
#ifdef CWERASE
	{"CWERASE", CWERASE},
#endif
#ifdef EXTA
	{"EXTA", EXTA},
#endif
#ifdef EXTB
	{"EXTB", EXTB},
#endif
#ifdef FIOASYNC
	{"FIOASYNC", FIOASYNC},
#endif
#ifdef FIOCLEX
	{"FIOCLEX", FIOCLEX},
#endif
#ifdef FIONBIO
	{"FIONBIO", FIONBIO},
#endif
#ifdef FIONCLEX
	{"FIONCLEX", FIONCLEX},
#endif
#ifdef FIONREAD
	{"FIONREAD", FIONREAD},
#endif
#ifdef IBSHIFT
	{"IBSHIFT", IBSHIFT},
#endif
#ifdef INIT_C_CC
	{"INIT_C_CC", INIT_C_CC},
#endif
#ifdef IOCSIZE_MASK
	{"IOCSIZE_MASK", IOCSIZE_MASK},
#endif
#ifdef IOCSIZE_SHIFT
	{"IOCSIZE_SHIFT", IOCSIZE_SHIFT},
#endif
#ifdef NCC
	{"NCC", NCC},
#endif
#ifdef NCCS
	{"NCCS", NCCS},
#endif
#ifdef NSWTCH
	{"NSWTCH", NSWTCH},
#endif
#ifdef N_MOUSE
	{"N_MOUSE", N_MOUSE},
#endif
#ifdef N_PPP
	{"N_PPP", N_PPP},
#endif
#ifdef N_SLIP
	{"N_SLIP", N_SLIP},
#endif
#ifdef N_STRIP
	{"N_STRIP", N_STRIP},
#endif
#ifdef N_TTY
	{"N_TTY", N_TTY},
#endif
#ifdef TCFLSH
	{"TCFLSH", TCFLSH},
#endif
#ifdef TCGETA
	{"TCGETA", TCGETA},
#endif
#ifdef TCGETS
	{"TCGETS", TCGETS},
#endif
#ifdef TCSBRK
	{"TCSBRK", TCSBRK},
#endif
#ifdef TCSBRKP
	{"TCSBRKP", TCSBRKP},
#endif
#ifdef TCSETA
	{"TCSETA", TCSETA},
#endif
#ifdef TCSETAF
	{"TCSETAF", TCSETAF},
#endif
#ifdef TCSETAW
	{"TCSETAW", TCSETAW},
#endif
#ifdef TCSETS
	{"TCSETS", TCSETS},
#endif
#ifdef TCSETSF
	{"TCSETSF", TCSETSF},
#endif
#ifdef TCSETSW
	{"TCSETSW", TCSETSW},
#endif
#ifdef TCXONC
	{"TCXONC", TCXONC},
#endif
#ifdef TIOCCONS
	{"TIOCCONS", TIOCCONS},
#endif
#ifdef TIOCEXCL
	{"TIOCEXCL", TIOCEXCL},
#endif
#ifdef TIOCGETD
	{"TIOCGETD", TIOCGETD},
#endif
#ifdef TIOCGICOUNT
	{"TIOCGICOUNT", TIOCGICOUNT},
#endif
#ifdef TIOCGLCKTRMIOS
	{"TIOCGLCKTRMIOS", TIOCGLCKTRMIOS},
#endif
#ifdef TIOCGPGRP
	{"TIOCGPGRP", TIOCGPGRP},
#endif
#ifdef TIOCGSERIAL
	{"TIOCGSERIAL", TIOCGSERIAL},
#endif
#ifdef TIOCGSOFTCAR
	{"TIOCGSOFTCAR", TIOCGSOFTCAR},
#endif
#ifdef TIOCGWINSZ
	{"TIOCGWINSZ", TIOCGWINSZ},
#endif
#ifdef TIOCINQ
	{"TIOCINQ", TIOCINQ},
#endif
#ifdef TIOCLINUX
	{"TIOCLINUX", TIOCLINUX},
#endif
#ifdef TIOCMBIC
	{"TIOCMBIC", TIOCMBIC},
#endif
#ifdef TIOCMBIS
	{"TIOCMBIS", TIOCMBIS},
#endif
#ifdef TIOCMGET
	{"TIOCMGET", TIOCMGET},
#endif
#ifdef TIOCMIWAIT
	{"TIOCMIWAIT", TIOCMIWAIT},
#endif
#ifdef TIOCMSET
	{"TIOCMSET", TIOCMSET},
#endif
#ifdef TIOCM_CAR
	{"TIOCM_CAR", TIOCM_CAR},
#endif
#ifdef TIOCM_CD
	{"TIOCM_CD", TIOCM_CD},
#endif
#ifdef TIOCM_CTS
	{"TIOCM_CTS", TIOCM_CTS},
#endif
#ifdef TIOCM_DSR
	{"TIOCM_DSR", TIOCM_DSR},
#endif
#ifdef TIOCM_DTR
	{"TIOCM_DTR", TIOCM_DTR},
#endif
#ifdef TIOCM_LE
	{"TIOCM_LE", TIOCM_LE},
#endif
#ifdef TIOCM_RI
	{"TIOCM_RI", TIOCM_RI},
#endif
#ifdef TIOCM_RNG
	{"TIOCM_RNG", TIOCM_RNG},
#endif
#ifdef TIOCM_RTS
	{"TIOCM_RTS", TIOCM_RTS},
#endif
#ifdef TIOCM_SR
	{"TIOCM_SR", TIOCM_SR},
#endif
#ifdef TIOCM_ST
	{"TIOCM_ST", TIOCM_ST},
#endif
#ifdef TIOCNOTTY
	{"TIOCNOTTY", TIOCNOTTY},
#endif
#ifdef TIOCNXCL
	{"TIOCNXCL", TIOCNXCL},
#endif
#ifdef TIOCOUTQ
	{"TIOCOUTQ", TIOCOUTQ},
#endif
#ifdef TIOCPKT
	{"TIOCPKT", TIOCPKT},
#endif
#ifdef TIOCPKT_DATA
	{"TIOCPKT_DATA", TIOCPKT_DATA},
#endif
#ifdef TIOCPKT_DOSTOP
	{"TIOCPKT_DOSTOP", TIOCPKT_DOSTOP},
#endif
#ifdef TIOCPKT_FLUSHREAD
	{"TIOCPKT_FLUSHREAD", TIOCPKT_FLUSHREAD},
#endif
#ifdef TIOCPKT_FLUSHWRITE
	{"TIOCPKT_FLUSHWRITE", TIOCPKT_FLUSHWRITE},
#endif
#ifdef TIOCPKT_NOSTOP
	{"TIOCPKT_NOSTOP", TIOCPKT_NOSTOP},
#endif
#ifdef TIOCPKT_START
	{"TIOCPKT_START", TIOCPKT_START},
#endif
#ifdef TIOCPKT_STOP
	{"TIOCPKT_STOP", TIOCPKT_STOP},
#endif
#ifdef TIOCSCTTY
	{"TIOCSCTTY", TIOCSCTTY},
#endif
#ifdef TIOCSERCONFIG
	{"TIOCSERCONFIG", TIOCSERCONFIG},
#endif
#ifdef TIOCSERGETLSR
	{"TIOCSERGETLSR", TIOCSERGETLSR},
#endif
#ifdef TIOCSERGETMULTI
	{"TIOCSERGETMULTI", TIOCSERGETMULTI},
#endif
#ifdef TIOCSERGSTRUCT
	{"TIOCSERGSTRUCT", TIOCSERGSTRUCT},
#endif
#ifdef TIOCSERGWILD
	{"TIOCSERGWILD", TIOCSERGWILD},
#endif
#ifdef TIOCSERSETMULTI
	{"TIOCSERSETMULTI", TIOCSERSETMULTI},
#endif
#ifdef TIOCSERSWILD
	{"TIOCSERSWILD", TIOCSERSWILD},
#endif
#ifdef TIOCSER_TEMT
	{"TIOCSER_TEMT", TIOCSER_TEMT},
#endif
#ifdef TIOCSETD
	{"TIOCSETD", TIOCSETD},
#endif
#ifdef TIOCSLCKTRMIOS
	{"TIOCSLCKTRMIOS", TIOCSLCKTRMIOS},
#endif
#ifdef TIOCSPGRP
	{"TIOCSPGRP", TIOCSPGRP},
#endif
#ifdef TIOCSSERIAL
	{"TIOCSSERIAL", TIOCSSERIAL},
#endif
#ifdef TIOCSSOFTCAR
	{"TIOCSSOFTCAR", TIOCSSOFTCAR},
#endif
#ifdef TIOCSTI
	{"TIOCSTI", TIOCSTI},
#endif
#ifdef TIOCSWINSZ
	{"TIOCSWINSZ", TIOCSWINSZ},
#endif
#ifdef TIOCTTYGSTRUCT
	{"TIOCTTYGSTRUCT", TIOCTTYGSTRUCT},
#endif

	/* sentinel */
	{NULL, 0}
};


PyMODINIT_FUNC
PyInit_termios(void)
{
	PyObject *m;
	struct constant *constant = termios_constants;

	m = Py_InitModule4("termios", termios_methods, termios__doc__,
                           (PyObject *)NULL, PYTHON_API_VERSION);

	if (TermiosError == NULL) {
		TermiosError = PyErr_NewException("termios.error", NULL, NULL);
	}
	Py_INCREF(TermiosError);
	PyModule_AddObject(m, "error", TermiosError);

	while (constant->name != NULL) {
		PyModule_AddIntConstant(m, constant->name, constant->value);
		++constant;
	}
}
