| 
									
										
										
										
											2020-08-16 10:51:00 -05:00
										 |  |  | /* termios.c -- POSIX terminal I/O module implementation.  */ | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | // Need limited C API version 3.13 for PyLong_AsInt()
 | 
					
						
							|  |  |  | // in code generated by Argument Clinic.
 | 
					
						
							|  |  |  | #include "pyconfig.h"   // Py_GIL_DISABLED
 | 
					
						
							|  |  |  | #ifndef Py_GIL_DISABLED
 | 
					
						
							|  |  |  | #  define Py_LIMITED_API 0x030d0000
 | 
					
						
							| 
									
										
										
										
											2023-08-26 03:18:09 +02:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-01-14 19:31:42 +00:00
										 |  |  | #include "Python.h"
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | #include <string.h>               // memset()
 | 
					
						
							|  |  |  | #include <sys/ioctl.h>
 | 
					
						
							|  |  |  | #include <termios.h>
 | 
					
						
							|  |  |  | #include <unistd.h>               // _POSIX_VDISABLE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-02 15:46:43 +02:00
										 |  |  | // On QNX 6, struct termio must be declared by including sys/termio.h
 | 
					
						
							|  |  |  | // if TCGETA, TCSETA, TCSETAW, or TCSETAF are used. sys/termio.h must
 | 
					
						
							|  |  |  | // be included before termios.h or it will generate an error.
 | 
					
						
							|  |  |  | #if defined(HAVE_SYS_TERMIO_H) && !defined(__hpux)
 | 
					
						
							|  |  |  | #  include <sys/termio.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Apparently, on SGI, termios.h won't define CTRL if _XOPEN_SOURCE
 | 
					
						
							|  |  |  | // is defined, so we define it here.
 | 
					
						
							| 
									
										
										
										
											2003-10-31 13:01:24 +00:00
										 |  |  | #if defined(__sgi)
 | 
					
						
							| 
									
										
										
										
											2023-09-02 15:46:43 +02:00
										 |  |  | #  define CTRL(c) ((c)&037)
 | 
					
						
							| 
									
										
										
										
											2003-10-31 13:01:24 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | // We could do better. Check bpo-32660
 | 
					
						
							| 
									
										
										
										
											2018-01-28 14:00:48 +01:00
										 |  |  | #if defined(__sun)
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | #  include <sys/filio.h>
 | 
					
						
							|  |  |  | #  include <sys/sockio.h>
 | 
					
						
							| 
									
										
										
										
											2018-01-28 14:00:48 +01:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-05-11 16:14:17 +00:00
										 |  |  | /* HP-UX requires that this be included to pick up MDCD, MCTS, MDSR,
 | 
					
						
							| 
									
										
										
										
											2019-08-31 06:21:19 +10:00
										 |  |  |  * MDTR, MRI, and MRTS (apparently used internally by some things | 
					
						
							| 
									
										
										
										
											2001-05-11 16:14:17 +00:00
										 |  |  |  * defined as macros; these are not used here directly). | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifdef HAVE_SYS_MODEM_H
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | #  include <sys/modem.h>
 | 
					
						
							| 
									
										
										
										
											2001-05-11 16:14:17 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-23 14:35:24 +00:00
										 |  |  | /* HP-UX requires that this be included to pick up TIOCGPGRP and friends */ | 
					
						
							|  |  |  | #ifdef HAVE_SYS_BSDTTY_H
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | #  include <sys/bsdtty.h>
 | 
					
						
							| 
									
										
										
										
											2003-05-23 14:35:24 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-05-11 16:14:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | module termios | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							|  |  |  | /*[clinic end generated code: output=da39a3ee5e6b4b0d input=01105c85d0ca7252]*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "clinic/termios.c.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-13 20:33:02 +00:00
										 |  |  | PyDoc_STRVAR(termios__doc__, | 
					
						
							|  |  |  | "This module provides an interface to the Posix calls for tty I/O control.\n\
 | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 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\ | 
					
						
							| 
									
										
										
										
											2001-05-07 17:55:35 +00:00
										 |  |  | termios style tty I/O control.\n\ | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | \n\ | 
					
						
							|  |  |  | All functions in this module take a file descriptor fd as their first\n\ | 
					
						
							| 
									
										
										
										
											2001-05-07 17:55:35 +00:00
										 |  |  | argument. This can be an integer file descriptor, such as returned by\n\ | 
					
						
							| 
									
										
										
										
											2002-06-13 20:33:02 +00:00
										 |  |  | sys.stdin.fileno(), or a file object, such as sys.stdin itself."); | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  | typedef struct { | 
					
						
							|  |  |  |   PyObject *TermiosError; | 
					
						
							|  |  |  | } termiosmodulestate; | 
					
						
							| 
									
										
										
										
											2020-03-16 21:15:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline termiosmodulestate* | 
					
						
							|  |  |  | get_termios_state(PyObject *module) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     void *state = PyModule_GetState(module); | 
					
						
							|  |  |  |     assert(state != NULL); | 
					
						
							|  |  |  |     return (termiosmodulestate *)state; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  | static struct PyModuleDef termiosmodule; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcgetattr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Get the tty attributes for file descriptor fd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns a list [iflag, oflag, cflag, lflag, ispeed, ospeed, cc] | 
					
						
							|  |  |  | where cc is a list of the tty special characters (each a string of | 
					
						
							|  |  |  | length 1, except the items with indices VMIN and VTIME, which are | 
					
						
							|  |  |  | integers when these fields are defined).  The interpretation of the | 
					
						
							|  |  |  | flags and the speeds as well as the indexing in the cc array must be | 
					
						
							|  |  |  | done using the symbolic constants defined in this module. | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | termios_tcgetattr_impl(PyObject *module, int fd) | 
					
						
							|  |  |  | /*[clinic end generated code: output=2b3da39db870e629 input=54dad9779ebe74b1]*/ | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							|  |  |  |     struct termios mode; | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-23 23:27:04 +02:00
										 |  |  |     /* Alpine Linux can leave some fields uninitialized. */ | 
					
						
							|  |  |  |     memset(&mode, 0, sizeof(mode)); | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							| 
									
										
										
										
											2023-05-08 17:03:52 +03:00
										 |  |  |     r = tcgetattr(fd, &mode); | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     speed_t ispeed = cfgetispeed(&mode); | 
					
						
							|  |  |  |     speed_t ospeed = cfgetospeed(&mode); | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     PyObject *cc = PyList_New(NCCS); | 
					
						
							|  |  |  |     if (cc == NULL) { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |         return NULL; | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PyObject *v; | 
					
						
							|  |  |  |     int i; | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     for (i = 0; i < NCCS; i++) { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         char ch = (char)mode.c_cc[i]; | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |         v = PyBytes_FromStringAndSize(&ch, 1); | 
					
						
							|  |  |  |         if (v == NULL) | 
					
						
							|  |  |  |             goto err; | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  |         PyList_SetItem(cc, i, v); | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* 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 = PyLong_FromLong((long)mode.c_cc[VMIN]); | 
					
						
							| 
									
										
										
										
											2023-10-04 15:42:17 +03:00
										 |  |  |         if (v == NULL) { | 
					
						
							|  |  |  |             goto err; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (PyList_SetItem(cc, VMIN, v) < 0) { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |             goto err; | 
					
						
							| 
									
										
										
										
											2023-10-04 15:42:17 +03:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |         v = PyLong_FromLong((long)mode.c_cc[VTIME]); | 
					
						
							| 
									
										
										
										
											2023-10-04 15:42:17 +03:00
										 |  |  |         if (v == NULL) { | 
					
						
							|  |  |  |             goto err; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (PyList_SetItem(cc, VTIME, v) < 0) { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |             goto err; | 
					
						
							| 
									
										
										
										
											2023-10-04 15:42:17 +03:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-04 15:42:17 +03:00
										 |  |  |     if (!(v = PyList_New(7))) { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |         goto err; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-10-04 15:42:17 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define ADD_LONG_ITEM(index, val) \
 | 
					
						
							|  |  |  |     do { \ | 
					
						
							|  |  |  |         PyObject *l = PyLong_FromLong((long)val); \ | 
					
						
							|  |  |  |         if (l == NULL) { \ | 
					
						
							|  |  |  |             Py_DECREF(v); \ | 
					
						
							|  |  |  |             goto err; \ | 
					
						
							|  |  |  |         } \ | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  |         PyList_SetItem(v, index, l); \ | 
					
						
							| 
									
										
										
										
											2023-10-04 15:42:17 +03:00
										 |  |  |     } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ADD_LONG_ITEM(0, mode.c_iflag); | 
					
						
							|  |  |  |     ADD_LONG_ITEM(1, mode.c_oflag); | 
					
						
							|  |  |  |     ADD_LONG_ITEM(2, mode.c_cflag); | 
					
						
							|  |  |  |     ADD_LONG_ITEM(3, mode.c_lflag); | 
					
						
							|  |  |  |     ADD_LONG_ITEM(4, ispeed); | 
					
						
							|  |  |  |     ADD_LONG_ITEM(5, ospeed); | 
					
						
							|  |  |  | #undef ADD_LONG_ITEM
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  |     PyList_SetItem(v, 6, cc); | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     return v; | 
					
						
							| 
									
										
										
										
											1997-01-10 18:42:18 +00:00
										 |  |  |   err: | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     Py_DECREF(cc); | 
					
						
							|  |  |  |     return NULL; | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcsetattr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     when: int | 
					
						
							|  |  |  |     attributes as term: object | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Set the tty attributes for file descriptor fd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The attributes to be set are taken from the attributes argument, which | 
					
						
							|  |  |  | is a list like the one returned by tcgetattr(). The when argument | 
					
						
							|  |  |  | determines when the attributes are changed: termios.TCSANOW to | 
					
						
							|  |  |  | change immediately, termios.TCSADRAIN to change after transmitting all | 
					
						
							|  |  |  | queued output, or termios.TCSAFLUSH to change after transmitting all | 
					
						
							|  |  |  | queued output and discarding all queued input. | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | termios_tcsetattr_impl(PyObject *module, int fd, int when, PyObject *term) | 
					
						
							|  |  |  | /*[clinic end generated code: output=bcd2b0a7b98a4bf5 input=5dafabdd5a08f018]*/ | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     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... */ | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							|  |  |  |     struct termios mode; | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = tcgetattr(fd, &mode); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-05 14:02:52 +03:00
										 |  |  |     speed_t ispeed, ospeed; | 
					
						
							|  |  |  | #define SET_FROM_LIST(TYPE, VAR, LIST, N) do {  \
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  |     PyObject *item = PyList_GetItem(LIST, N);  \ | 
					
						
							| 
									
										
										
										
											2023-10-05 14:02:52 +03:00
										 |  |  |     long num = PyLong_AsLong(item);             \ | 
					
						
							|  |  |  |     if (num == -1 && PyErr_Occurred()) {        \ | 
					
						
							|  |  |  |         return NULL;                            \ | 
					
						
							|  |  |  |     }                                           \ | 
					
						
							|  |  |  |     VAR = (TYPE)num;                            \ | 
					
						
							|  |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SET_FROM_LIST(tcflag_t, mode.c_iflag, term, 0); | 
					
						
							|  |  |  |     SET_FROM_LIST(tcflag_t, mode.c_oflag, term, 1); | 
					
						
							|  |  |  |     SET_FROM_LIST(tcflag_t, mode.c_cflag, term, 2); | 
					
						
							|  |  |  |     SET_FROM_LIST(tcflag_t, mode.c_lflag, term, 3); | 
					
						
							|  |  |  |     SET_FROM_LIST(speed_t, ispeed, term, 4); | 
					
						
							|  |  |  |     SET_FROM_LIST(speed_t, ospeed, term, 5); | 
					
						
							|  |  |  | #undef SET_FROM_LIST
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 16:12:29 +01:00
										 |  |  |     PyObject *cc = PyList_GetItem(term, 6); | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     if (!PyList_Check(cc) || PyList_Size(cc) != NCCS) { | 
					
						
							|  |  |  |         PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  |             "tcsetattr: attributes[6] must be %d element list", | 
					
						
							|  |  |  |                  NCCS); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     int i; | 
					
						
							|  |  |  |     PyObject *v; | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     for (i = 0; i < NCCS; i++) { | 
					
						
							|  |  |  |         v = PyList_GetItem(cc, i); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (PyBytes_Check(v) && PyBytes_Size(v) == 1) | 
					
						
							|  |  |  |             mode.c_cc[i] = (cc_t) * PyBytes_AsString(v); | 
					
						
							| 
									
										
										
										
											2023-10-05 14:02:52 +03:00
										 |  |  |         else if (PyLong_Check(v)) { | 
					
						
							|  |  |  |             long num = PyLong_AsLong(v); | 
					
						
							|  |  |  |             if (num == -1 && PyErr_Occurred()) { | 
					
						
							|  |  |  |                 return NULL; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             mode.c_cc[i] = (cc_t)num; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |         else { | 
					
						
							|  |  |  |             PyErr_SetString(PyExc_TypeError, | 
					
						
							| 
									
										
										
										
											2024-05-28 12:01:37 +03:00
										 |  |  |      "tcsetattr: elements of attributes must be bytes objects of length 1 or integers"); | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |                         return NULL; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (cfsetispeed(&mode, (speed_t) ispeed) == -1) | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     if (cfsetospeed(&mode, (speed_t) ospeed) == -1) | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = tcsetattr(fd, when, &mode); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-23 09:47:21 +02:00
										 |  |  |     Py_RETURN_NONE; | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcsendbreak | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     duration: int | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Send a break on file descriptor fd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A zero duration sends a break for 0.25-0.5 seconds; a nonzero duration | 
					
						
							|  |  |  | has a system dependent meaning. | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | termios_tcsendbreak_impl(PyObject *module, int fd, int duration) | 
					
						
							|  |  |  | /*[clinic end generated code: output=5945f589b5d3ac66 input=dc2f32417691f8ed]*/ | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = tcsendbreak(fd, duration); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-23 09:47:21 +02:00
										 |  |  |     Py_RETURN_NONE; | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcdrain | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Wait until all output written to file descriptor fd has been transmitted. | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | termios_tcdrain_impl(PyObject *module, int fd) | 
					
						
							|  |  |  | /*[clinic end generated code: output=5fd86944c6255955 input=c99241b140b32447]*/ | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = tcdrain(fd); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-23 09:47:21 +02:00
										 |  |  |     Py_RETURN_NONE; | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcflush | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     queue: int | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Discard queued data on file descriptor fd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The queue selector specifies which queue: termios.TCIFLUSH for the input | 
					
						
							|  |  |  | queue, termios.TCOFLUSH for the output queue, or termios.TCIOFLUSH for | 
					
						
							|  |  |  | both queues. | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | termios_tcflush_impl(PyObject *module, int fd, int queue) | 
					
						
							|  |  |  | /*[clinic end generated code: output=2424f80312ec2f21 input=0f7d08122ddc07b5]*/ | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = tcflush(fd, queue); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-23 09:47:21 +02:00
										 |  |  |     Py_RETURN_NONE; | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcflow | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     action: int | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Suspend or resume input or output on file descriptor fd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The action argument can be termios.TCOOFF to suspend output, | 
					
						
							|  |  |  | termios.TCOON to restart output, termios.TCIOFF to suspend input, | 
					
						
							|  |  |  | or termios.TCION to restart input. | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							| 
									
										
										
										
											1998-03-03 22:10:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  | termios_tcflow_impl(PyObject *module, int fd, int action) | 
					
						
							|  |  |  | /*[clinic end generated code: output=afd10928e6ea66eb input=c6aff0640b6efd9c]*/ | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = tcflow(fd, action); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-23 09:47:21 +02:00
										 |  |  |     Py_RETURN_NONE; | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcgetwinsize | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Get the tty winsize for file descriptor fd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Returns a tuple (ws_row, ws_col). | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject * | 
					
						
							|  |  |  | termios_tcgetwinsize_impl(PyObject *module, int fd) | 
					
						
							|  |  |  | /*[clinic end generated code: output=31825977d5325fb6 input=5706c379d7fd984d]*/ | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #if defined(TIOCGWINSZ)
 | 
					
						
							|  |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							|  |  |  |     struct winsize w; | 
					
						
							| 
									
										
										
										
											2023-05-08 17:03:52 +03:00
										 |  |  |     int r; | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = ioctl(fd, TIOCGWINSZ, &w); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PyObject *v; | 
					
						
							|  |  |  |     if (!(v = PyTuple_New(2))) { | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PyTuple_SetItem(v, 0, PyLong_FromLong((long)w.ws_row)); | 
					
						
							|  |  |  |     PyTuple_SetItem(v, 1, PyLong_FromLong((long)w.ws_col)); | 
					
						
							|  |  |  |     if (PyErr_Occurred()) { | 
					
						
							|  |  |  |         Py_DECREF(v); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return v; | 
					
						
							|  |  |  | #elif defined(TIOCGSIZE)
 | 
					
						
							|  |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							|  |  |  |     struct ttysize s; | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = ioctl(fd, TIOCGSIZE, &s); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PyObject *v; | 
					
						
							|  |  |  |     if (!(v = PyTuple_New(2))) { | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PyTuple_SetItem(v, 0, PyLong_FromLong((long)s.ts_lines)); | 
					
						
							|  |  |  |     PyTuple_SetItem(v, 1, PyLong_FromLong((long)s.ts_cols)); | 
					
						
							|  |  |  |     if (PyErr_Occurred()) { | 
					
						
							|  |  |  |         Py_DECREF(v); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return v; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     PyErr_SetString(PyExc_NotImplementedError, | 
					
						
							|  |  |  |                     "requires termios.TIOCGWINSZ and/or termios.TIOCGSIZE"); | 
					
						
							|  |  |  |     return NULL; | 
					
						
							|  |  |  | #endif /* defined(TIOCGWINSZ) */
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*[clinic input]
 | 
					
						
							|  |  |  | termios.tcsetwinsize | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fd: fildes | 
					
						
							|  |  |  |     winsize as winsz: object | 
					
						
							|  |  |  |     / | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Set the tty winsize for file descriptor fd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The winsize to be set is taken from the winsize argument, which | 
					
						
							|  |  |  | is a two-item tuple (ws_row, ws_col) like the one returned by tcgetwinsize(). | 
					
						
							|  |  |  | [clinic start generated code]*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject * | 
					
						
							|  |  |  | termios_tcsetwinsize_impl(PyObject *module, int fd, PyObject *winsz) | 
					
						
							|  |  |  | /*[clinic end generated code: output=2ac3c9bb6eda83e1 input=4a06424465b24aee]*/ | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!PySequence_Check(winsz) || PySequence_Size(winsz) != 2) { | 
					
						
							|  |  |  |         PyErr_SetString(PyExc_TypeError, | 
					
						
							|  |  |  |                      "tcsetwinsize, arg 2: must be a two-item sequence"); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     PyObject *tmp_item; | 
					
						
							|  |  |  |     long winsz_0, winsz_1; | 
					
						
							|  |  |  |     tmp_item = PySequence_GetItem(winsz, 0); | 
					
						
							|  |  |  |     winsz_0 = PyLong_AsLong(tmp_item); | 
					
						
							|  |  |  |     if (winsz_0 == -1 && PyErr_Occurred()) { | 
					
						
							|  |  |  |         Py_XDECREF(tmp_item); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     Py_XDECREF(tmp_item); | 
					
						
							|  |  |  |     tmp_item = PySequence_GetItem(winsz, 1); | 
					
						
							| 
									
										
										
										
											2021-10-03 16:58:14 +03:00
										 |  |  |     winsz_1 = PyLong_AsLong(tmp_item); | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |     if (winsz_1 == -1 && PyErr_Occurred()) { | 
					
						
							|  |  |  |         Py_XDECREF(tmp_item); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     Py_XDECREF(tmp_item); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     termiosmodulestate *state = PyModule_GetState(module); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(TIOCGWINSZ) && defined(TIOCSWINSZ)
 | 
					
						
							|  |  |  |     struct winsize w; | 
					
						
							|  |  |  |     /* Get the old winsize because it might have
 | 
					
						
							|  |  |  |        more fields such as xpixel, ypixel. */ | 
					
						
							|  |  |  |     if (ioctl(fd, TIOCGWINSZ, &w) == -1) { | 
					
						
							|  |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     w.ws_row = (unsigned short) winsz_0; | 
					
						
							|  |  |  |     w.ws_col = (unsigned short) winsz_1; | 
					
						
							|  |  |  |     if ((((long)w.ws_row) != winsz_0) || (((long)w.ws_col) != winsz_1)) { | 
					
						
							|  |  |  |         PyErr_SetString(PyExc_OverflowError, | 
					
						
							|  |  |  |                         "winsize value(s) out of range."); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							|  |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = ioctl(fd, TIOCSWINSZ, &w); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_RETURN_NONE; | 
					
						
							|  |  |  | #elif defined(TIOCGSIZE) && defined(TIOCSSIZE)
 | 
					
						
							|  |  |  |     struct ttysize s; | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     int r; | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |     /* Get the old ttysize because it might have more fields. */ | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = ioctl(fd, TIOCGSIZE, &s); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     s.ts_lines = (int) winsz_0; | 
					
						
							|  |  |  |     s.ts_cols = (int) winsz_1; | 
					
						
							|  |  |  |     if ((((long)s.ts_lines) != winsz_0) || (((long)s.ts_cols) != winsz_1)) { | 
					
						
							|  |  |  |         PyErr_SetString(PyExc_OverflowError, | 
					
						
							|  |  |  |                         "winsize value(s) out of range."); | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-22 11:14:23 +01:00
										 |  |  |     Py_BEGIN_ALLOW_THREADS | 
					
						
							|  |  |  |     r = ioctl(fd, TIOCSSIZE, &s); | 
					
						
							|  |  |  |     Py_END_ALLOW_THREADS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (r == -1) { | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |         return PyErr_SetFromErrno(state->TermiosError); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Py_RETURN_NONE; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     PyErr_SetString(PyExc_NotImplementedError, | 
					
						
							|  |  |  |                     "requires termios.TIOCGWINSZ, termios.TIOCSWINSZ and/or termios.TIOCGSIZE, termios.TIOCSSIZE"); | 
					
						
							|  |  |  |     return NULL; | 
					
						
							|  |  |  | #endif /* defined(TIOCGWINSZ) && defined(TIOCSWINSZ) */
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | static PyMethodDef termios_methods[] = | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-10-18 17:54:06 +03:00
										 |  |  |     TERMIOS_TCGETATTR_METHODDEF | 
					
						
							|  |  |  |     TERMIOS_TCSETATTR_METHODDEF | 
					
						
							|  |  |  |     TERMIOS_TCSENDBREAK_METHODDEF | 
					
						
							|  |  |  |     TERMIOS_TCDRAIN_METHODDEF | 
					
						
							|  |  |  |     TERMIOS_TCFLUSH_METHODDEF | 
					
						
							|  |  |  |     TERMIOS_TCFLOW_METHODDEF | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  |     TERMIOS_TCGETWINSIZE_METHODDEF | 
					
						
							|  |  |  |     TERMIOS_TCSETWINSIZE_METHODDEF | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {NULL, NULL} | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-01 21:54:49 +00:00
										 |  |  | #if defined(VSWTCH) && !defined(VSWTC)
 | 
					
						
							|  |  |  | #define VSWTC VSWTCH
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(VSWTC) && !defined(VSWTCH)
 | 
					
						
							|  |  |  | #define VSWTCH VSWTC
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | static struct constant { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     char *name; | 
					
						
							|  |  |  |     long value; | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | } termios_constants[] = { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* 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}, | 
					
						
							| 
									
										
										
										
											2001-04-11 20:58:20 +00:00
										 |  |  | #ifdef B57600
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"B57600", B57600}, | 
					
						
							| 
									
										
										
										
											2001-04-11 20:58:20 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B115200
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"B115200", B115200}, | 
					
						
							| 
									
										
										
										
											2001-04-11 20:58:20 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #ifdef B230400
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"B230400", B230400}, | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-11-20 20:03:08 +00:00
										 |  |  | #ifdef B460800
 | 
					
						
							|  |  |  |     {"B460800", B460800}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B500000
 | 
					
						
							|  |  |  |     {"B500000", B500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B576000
 | 
					
						
							|  |  |  |     {"B576000", B576000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B921600
 | 
					
						
							|  |  |  |     {"B921600", B921600}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B1000000
 | 
					
						
							|  |  |  |     {"B1000000", B1000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B1152000
 | 
					
						
							|  |  |  |     {"B1152000", B1152000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B1500000
 | 
					
						
							|  |  |  |     {"B1500000", B1500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B2000000
 | 
					
						
							|  |  |  |     {"B2000000", B2000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B2500000
 | 
					
						
							|  |  |  |     {"B2500000", B2500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B3000000
 | 
					
						
							|  |  |  |     {"B3000000", B3000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B3500000
 | 
					
						
							|  |  |  |     {"B3500000", B3500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B4000000
 | 
					
						
							|  |  |  |     {"B4000000", B4000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-01 21:54:49 +00:00
										 |  |  | #ifdef CBAUDEX
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CBAUDEX", CBAUDEX}, | 
					
						
							| 
									
										
										
										
											2001-03-01 21:54:49 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* tcsetattr() constants */ | 
					
						
							|  |  |  |     {"TCSANOW", TCSANOW}, | 
					
						
							|  |  |  |     {"TCSADRAIN", TCSADRAIN}, | 
					
						
							|  |  |  |     {"TCSAFLUSH", TCSAFLUSH}, | 
					
						
							| 
									
										
										
										
											2009-11-01 19:24:18 +00:00
										 |  |  | #ifdef TCSASOFT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSASOFT", TCSASOFT}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* 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}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #ifdef IUCLC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"IUCLC", IUCLC}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"IXON", IXON}, | 
					
						
							|  |  |  |     {"IXANY", IXANY}, | 
					
						
							|  |  |  |     {"IXOFF", IXOFF}, | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #ifdef IMAXBEL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"IMAXBEL", IMAXBEL}, | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef IUTF8
 | 
					
						
							|  |  |  |     {"IUTF8", IUTF8}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* struct termios.c_oflag constants */ | 
					
						
							|  |  |  |     {"OPOST", OPOST}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #ifdef OLCUC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"OLCUC", OLCUC}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-03-03 02:59:16 +00:00
										 |  |  | #ifdef ONLCR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ONLCR", ONLCR}, | 
					
						
							| 
									
										
										
										
											2002-03-03 02:59:16 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #ifdef OCRNL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"OCRNL", OCRNL}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef ONOCR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ONOCR", ONOCR}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef ONLRET
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ONLRET", ONLRET}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef OFILL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"OFILL", OFILL}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef OFDEL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"OFDEL", OFDEL}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef OXTABS
 | 
					
						
							|  |  |  |     {"OXTABS", OXTABS}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef ONOEOT
 | 
					
						
							|  |  |  |     {"ONOEOT", ONOEOT}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #ifdef NLDLY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"NLDLY", NLDLY}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CRDLY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CRDLY", CRDLY}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TABDLY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TABDLY", TABDLY}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef BSDLY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"BSDLY", BSDLY}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef VTDLY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VTDLY", VTDLY}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FFDLY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FFDLY", FFDLY}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* struct termios.c_oflag-related values (delay mask) */ | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #ifdef NL0
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"NL0", NL0}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef NL1
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"NL1", NL1}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef NL2
 | 
					
						
							|  |  |  |     {"NL2", NL2}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef NL3
 | 
					
						
							|  |  |  |     {"NL3", NL3}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #ifdef CR0
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CR0", CR0}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CR1
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CR1", CR1}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CR2
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CR2", CR2}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CR3
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CR3", CR3}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TAB0
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TAB0", TAB0}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TAB1
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TAB1", TAB1}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TAB2
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TAB2", TAB2}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TAB3
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TAB3", TAB3}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-02 06:50:58 +00:00
										 |  |  | #ifdef XTABS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"XTABS", XTABS}, | 
					
						
							| 
									
										
										
										
											2001-03-02 06:50:58 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #ifdef BS0
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"BS0", BS0}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef BS1
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"BS1", BS1}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef VT0
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VT0", VT0}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef VT1
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VT1", VT1}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FF0
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FF0", FF0}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FF1
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FF1", FF1}, | 
					
						
							| 
									
										
										
										
											2001-03-03 18:08:52 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* struct termios.c_cflag constants */ | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef CIGNORE
 | 
					
						
							|  |  |  |     {"CIGNORE", CIGNORE}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CSIZE", CSIZE}, | 
					
						
							|  |  |  |     {"CSTOPB", CSTOPB}, | 
					
						
							|  |  |  |     {"CREAD", CREAD}, | 
					
						
							|  |  |  |     {"PARENB", PARENB}, | 
					
						
							|  |  |  |     {"PARODD", PARODD}, | 
					
						
							|  |  |  |     {"HUPCL", HUPCL}, | 
					
						
							|  |  |  |     {"CLOCAL", CLOCAL}, | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #ifdef CIBAUD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CIBAUD", CIBAUD}, | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-02 06:50:58 +00:00
										 |  |  | #ifdef CRTSCTS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CRTSCTS", (long)CRTSCTS}, | 
					
						
							| 
									
										
										
										
											2001-03-02 06:50:58 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef CRTS_IFLOW
 | 
					
						
							|  |  |  |     {"CRTS_IFLOW", CRTS_IFLOW}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CDTR_IFLOW
 | 
					
						
							|  |  |  |     {"CDTR_IFLOW", CDTR_IFLOW}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CDSR_OFLOW
 | 
					
						
							|  |  |  |     {"CDSR_OFLOW", CDSR_OFLOW}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2023-12-12 13:57:45 +01:00
										 |  |  | #ifdef CCTS_OFLOW
 | 
					
						
							|  |  |  |     {"CCTS_OFLOW", CCTS_OFLOW}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef CCAR_OFLOW
 | 
					
						
							|  |  |  |     {"CCAR_OFLOW", CCAR_OFLOW}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef MDMBUF
 | 
					
						
							|  |  |  |     {"MDMBUF", MDMBUF}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* struct termios.c_cflag-related values (character size) */ | 
					
						
							|  |  |  |     {"CS5", CS5}, | 
					
						
							|  |  |  |     {"CS6", CS6}, | 
					
						
							|  |  |  |     {"CS7", CS7}, | 
					
						
							|  |  |  |     {"CS8", CS8}, | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* struct termios.c_lflag constants */ | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef ALTWERASE
 | 
					
						
							|  |  |  |     {"ALTWERASE", ALTWERASE}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ISIG", ISIG}, | 
					
						
							|  |  |  |     {"ICANON", ICANON}, | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #ifdef XCASE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"XCASE", XCASE}, | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ECHO", ECHO}, | 
					
						
							|  |  |  |     {"ECHOE", ECHOE}, | 
					
						
							|  |  |  |     {"ECHOK", ECHOK}, | 
					
						
							|  |  |  |     {"ECHONL", ECHONL}, | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #ifdef ECHOCTL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ECHOCTL", ECHOCTL}, | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #ifdef ECHOPRT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ECHOPRT", ECHOPRT}, | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #ifdef ECHOKE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"ECHOKE", ECHOKE}, | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FLUSHO
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FLUSHO", FLUSHO}, | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef NOKERNINFO
 | 
					
						
							|  |  |  |     {"NOKERNINFO", NOKERNINFO}, | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"NOFLSH", NOFLSH}, | 
					
						
							|  |  |  |     {"TOSTOP", TOSTOP}, | 
					
						
							| 
									
										
										
										
											2001-03-01 03:28:08 +00:00
										 |  |  | #ifdef PENDIN
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"PENDIN", PENDIN}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  |     {"IEXTEN", IEXTEN}, | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef EXTPROC
 | 
					
						
							|  |  |  |     {"EXTPROC", EXTPROC}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* indexes into the control chars array returned by tcgetattr() */ | 
					
						
							|  |  |  |     {"VINTR", VINTR}, | 
					
						
							|  |  |  |     {"VQUIT", VQUIT}, | 
					
						
							|  |  |  |     {"VERASE", VERASE}, | 
					
						
							|  |  |  |     {"VKILL", VKILL}, | 
					
						
							|  |  |  |     {"VEOF", VEOF}, | 
					
						
							|  |  |  |     {"VTIME", VTIME}, | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef VSTATUS
 | 
					
						
							|  |  |  |     {"VSTATUS", VSTATUS}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VMIN", VMIN}, | 
					
						
							| 
									
										
										
										
											2001-03-02 06:50:58 +00:00
										 |  |  | #ifdef VSWTC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* 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}, | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef VDSUSP
 | 
					
						
							| 
									
										
										
										
											2023-12-12 13:57:45 +01:00
										 |  |  |     {"VDSUSP", VDSUSP}, | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VEOL", VEOL}, | 
					
						
							| 
									
										
										
										
											2001-05-22 15:44:15 +00:00
										 |  |  | #ifdef VREPRINT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VREPRINT", VREPRINT}, | 
					
						
							| 
									
										
										
										
											2001-05-11 16:14:17 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-05-22 15:44:15 +00:00
										 |  |  | #ifdef VDISCARD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VDISCARD", VDISCARD}, | 
					
						
							| 
									
										
										
										
											2001-05-11 16:14:17 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-06-11 15:25:16 +00:00
										 |  |  | #ifdef VWERASE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VWERASE", VWERASE}, | 
					
						
							| 
									
										
										
										
											2001-06-11 15:25:16 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #ifdef VLNEXT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VLNEXT", VLNEXT}, | 
					
						
							| 
									
										
										
										
											2001-06-15 12:05:44 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-03-03 02:59:16 +00:00
										 |  |  | #ifdef VEOL2
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"VEOL2", VEOL2}, | 
					
						
							| 
									
										
										
										
											2002-03-03 02:59:16 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-07 11:27:30 +01:00
										 |  |  | #ifdef B7200
 | 
					
						
							|  |  |  |     {"B7200", B7200}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B14400
 | 
					
						
							|  |  |  |     {"B14400", B14400}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B28800
 | 
					
						
							|  |  |  |     {"B28800", B28800}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B76800
 | 
					
						
							|  |  |  |     {"B76800", B76800}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #ifdef B460800
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"B460800", B460800}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2020-01-04 23:56:31 +11:00
										 |  |  | #ifdef B500000
 | 
					
						
							|  |  |  |     {"B500000", B500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B576000
 | 
					
						
							|  |  |  |     { "B576000", B576000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B921600
 | 
					
						
							|  |  |  |     { "B921600", B921600}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B1000000
 | 
					
						
							|  |  |  |     { "B1000000", B1000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B1152000
 | 
					
						
							|  |  |  |     { "B1152000", B1152000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B1500000
 | 
					
						
							|  |  |  |     { "B1500000", B1500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B2000000
 | 
					
						
							|  |  |  |     { "B2000000", B2000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B2500000
 | 
					
						
							|  |  |  |     { "B2500000", B2500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B3000000
 | 
					
						
							|  |  |  |     { "B3000000", B3000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B3500000
 | 
					
						
							|  |  |  |     { "B3500000", B3500000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef B4000000
 | 
					
						
							|  |  |  |     { "B4000000", B4000000}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #ifdef CBAUD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CBAUD", CBAUD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CDEL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CDEL", CDEL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CDSUSP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CDSUSP", CDSUSP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CEOF
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CEOF", CEOF}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CEOL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CEOL", CEOL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CEOL2
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CEOL2", CEOL2}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CEOT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CEOT", CEOT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CERASE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CERASE", CERASE}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CESC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CESC", CESC}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CFLUSH
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CFLUSH", CFLUSH}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CINTR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CINTR", CINTR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CKILL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CKILL", CKILL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CLNEXT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CLNEXT", CLNEXT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CNUL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CNUL", CNUL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef COMMON
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"COMMON", COMMON}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CQUIT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CQUIT", CQUIT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CRPRNT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CRPRNT", CRPRNT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CSTART
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CSTART", CSTART}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CSTOP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CSTOP", CSTOP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CSUSP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CSUSP", CSUSP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CSWTCH
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CSWTCH", CSWTCH}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CWERASE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"CWERASE", CWERASE}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef EXTA
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"EXTA", EXTA}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef EXTB
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"EXTB", EXTB}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FIOASYNC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FIOASYNC", FIOASYNC}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FIOCLEX
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FIOCLEX", FIOCLEX}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FIONBIO
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FIONBIO", FIONBIO}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FIONCLEX
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FIONCLEX", FIONCLEX}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef FIONREAD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"FIONREAD", FIONREAD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef IBSHIFT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"IBSHIFT", IBSHIFT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef INIT_C_CC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"INIT_C_CC", INIT_C_CC}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef IOCSIZE_MASK
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"IOCSIZE_MASK", IOCSIZE_MASK}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef IOCSIZE_SHIFT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"IOCSIZE_SHIFT", IOCSIZE_SHIFT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef NCC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"NCC", NCC}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef NCCS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"NCCS", NCCS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef NSWTCH
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"NSWTCH", NSWTCH}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef N_MOUSE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"N_MOUSE", N_MOUSE}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef N_PPP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"N_PPP", N_PPP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef N_SLIP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"N_SLIP", N_SLIP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef N_STRIP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"N_STRIP", N_STRIP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef N_TTY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"N_TTY", N_TTY}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCFLSH
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCFLSH", TCFLSH}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCGETA
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCGETA", TCGETA}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCGETS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCGETS", TCGETS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSBRK
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSBRK", TCSBRK}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSBRKP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSBRKP", TCSBRKP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSETA
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSETA", TCSETA}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSETAF
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSETAF", TCSETAF}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSETAW
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSETAW", TCSETAW}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSETS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSETS", TCSETS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSETSF
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSETSF", TCSETSF}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCSETSW
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCSETSW", TCSETSW}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TCXONC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TCXONC", TCXONC}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCCONS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCCONS", TIOCCONS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCEXCL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCEXCL", TIOCEXCL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCGETD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCGETD", TIOCGETD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCGICOUNT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCGICOUNT", TIOCGICOUNT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCGLCKTRMIOS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCGLCKTRMIOS", TIOCGLCKTRMIOS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCGPGRP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCGPGRP", TIOCGPGRP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCGSERIAL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCGSERIAL", TIOCGSERIAL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  | #ifdef TIOCGSIZE
 | 
					
						
							|  |  |  |     {"TIOCGSIZE", TIOCGSIZE}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #ifdef TIOCGSOFTCAR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCGSOFTCAR", TIOCGSOFTCAR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCGWINSZ
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCGWINSZ", TIOCGWINSZ}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCINQ
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCINQ", TIOCINQ}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCLINUX
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCLINUX", TIOCLINUX}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCMBIC
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCMBIC", TIOCMBIC}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCMBIS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCMBIS", TIOCMBIS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCMGET
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCMGET", TIOCMGET}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCMIWAIT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCMIWAIT", TIOCMIWAIT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCMSET
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCMSET", TIOCMSET}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_CAR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_CAR", TIOCM_CAR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_CD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_CD", TIOCM_CD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_CTS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_CTS", TIOCM_CTS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_DSR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_DSR", TIOCM_DSR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_DTR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_DTR", TIOCM_DTR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_LE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_LE", TIOCM_LE}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_RI
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_RI", TIOCM_RI}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_RNG
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_RNG", TIOCM_RNG}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_RTS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_RTS", TIOCM_RTS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_SR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_SR", TIOCM_SR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCM_ST
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCM_ST", TIOCM_ST}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCNOTTY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCNOTTY", TIOCNOTTY}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCNXCL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCNXCL", TIOCNXCL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCOUTQ
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCOUTQ", TIOCOUTQ}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT", TIOCPKT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT_DATA
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT_DATA", TIOCPKT_DATA}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT_DOSTOP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT_DOSTOP", TIOCPKT_DOSTOP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT_FLUSHREAD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT_FLUSHREAD", TIOCPKT_FLUSHREAD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT_FLUSHWRITE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT_FLUSHWRITE", TIOCPKT_FLUSHWRITE}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT_NOSTOP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT_NOSTOP", TIOCPKT_NOSTOP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT_START
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT_START", TIOCPKT_START}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCPKT_STOP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCPKT_STOP", TIOCPKT_STOP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSCTTY
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSCTTY", TIOCSCTTY}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSERCONFIG
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSERCONFIG", TIOCSERCONFIG}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSERGETLSR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSERGETLSR", TIOCSERGETLSR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSERGETMULTI
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSERGETMULTI", TIOCSERGETMULTI}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSERGSTRUCT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSERGSTRUCT", TIOCSERGSTRUCT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSERGWILD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSERGWILD", TIOCSERGWILD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSERSETMULTI
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSERSETMULTI", TIOCSERSETMULTI}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSERSWILD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSERSWILD", TIOCSERSWILD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSER_TEMT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSER_TEMT", TIOCSER_TEMT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSETD
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSETD", TIOCSETD}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSLCKTRMIOS
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSLCKTRMIOS", TIOCSLCKTRMIOS}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSPGRP
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSPGRP", TIOCSPGRP}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSSERIAL
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSSERIAL", TIOCSSERIAL}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2021-08-26 21:56:26 -05:00
										 |  |  | #ifdef TIOCSSIZE
 | 
					
						
							|  |  |  |     {"TIOCSSIZE", TIOCSSIZE}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #ifdef TIOCSSOFTCAR
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSSOFTCAR", TIOCSSOFTCAR}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSTI
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSTI", TIOCSTI}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCSWINSZ
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCSWINSZ", TIOCSWINSZ}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TIOCTTYGSTRUCT
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     {"TIOCTTYGSTRUCT", TIOCTTYGSTRUCT}, | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2024-02-11 11:29:44 +01:00
										 |  |  | #ifdef _POSIX_VDISABLE
 | 
					
						
							|  |  |  |     {"_POSIX_VDISABLE", _POSIX_VDISABLE}, | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-03-26 17:14:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     /* sentinel */ | 
					
						
							|  |  |  |     {NULL, 0} | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  | static int termiosmodule_traverse(PyObject *m, visitproc visit, void *arg) { | 
					
						
							| 
									
										
										
										
											2020-03-16 21:15:01 +08:00
										 |  |  |     Py_VISIT(get_termios_state(m)->TermiosError); | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int termiosmodule_clear(PyObject *m) { | 
					
						
							| 
									
										
										
										
											2020-03-16 21:15:01 +08:00
										 |  |  |     Py_CLEAR(get_termios_state(m)->TermiosError); | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void termiosmodule_free(void *m) { | 
					
						
							|  |  |  |     termiosmodule_clear((PyObject *)m); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-02-27 21:22:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-09 21:32:54 +03:00
										 |  |  | static int | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  | termios_exec(PyObject *mod) | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |     struct constant *constant = termios_constants; | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     termiosmodulestate *state = get_termios_state(mod); | 
					
						
							| 
									
										
										
										
											2019-09-10 11:33:30 +01:00
										 |  |  |     state->TermiosError = PyErr_NewException("termios.error", NULL, NULL); | 
					
						
							| 
									
										
										
										
											2023-07-25 14:34:49 +03:00
										 |  |  |     if (PyModule_AddObjectRef(mod, "error", state->TermiosError) < 0) { | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         return -1; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     while (constant->name != NULL) { | 
					
						
							| 
									
										
										
										
											2024-05-31 17:18:40 +02:00
										 |  |  |         if (strncmp(constant->name, "TIO", 3) == 0) { | 
					
						
							|  |  |  |             // gh-119770: Convert value to unsigned int for ioctl() constants,
 | 
					
						
							|  |  |  |             // constants can be negative on macOS whereas ioctl() expects an
 | 
					
						
							|  |  |  |             // unsigned long 'request'.
 | 
					
						
							|  |  |  |             unsigned int value = constant->value & UINT_MAX; | 
					
						
							|  |  |  |             if (PyModule_Add(mod, constant->name, | 
					
						
							|  |  |  |                              PyLong_FromUnsignedLong(value)) < 0) { | 
					
						
							|  |  |  |                 return -1; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							|  |  |  |             if (PyModule_AddIntConstant( | 
					
						
							|  |  |  |                 mod, constant->name, constant->value) < 0) { | 
					
						
							|  |  |  |                 return -1; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-05-09 15:52:27 +00:00
										 |  |  |         ++constant; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyModuleDef_Slot termios_slots[] = { | 
					
						
							|  |  |  |     {Py_mod_exec, termios_exec}, | 
					
						
							| 
									
										
										
										
											2023-05-05 15:11:27 -06:00
										 |  |  |     {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED}, | 
					
						
							| 
									
										
										
										
											2024-05-03 08:30:55 -07:00
										 |  |  |     {Py_mod_gil, Py_MOD_GIL_NOT_USED}, | 
					
						
							| 
									
										
										
										
											2020-09-08 03:59:15 -05:00
										 |  |  |     {0, NULL} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyModuleDef termiosmodule = { | 
					
						
							|  |  |  |     PyModuleDef_HEAD_INIT, | 
					
						
							|  |  |  |     .m_name = "termios", | 
					
						
							|  |  |  |     .m_doc = termios__doc__, | 
					
						
							|  |  |  |     .m_size = sizeof(termiosmodulestate), | 
					
						
							|  |  |  |     .m_methods = termios_methods, | 
					
						
							|  |  |  |     .m_slots = termios_slots, | 
					
						
							|  |  |  |     .m_traverse = termiosmodule_traverse, | 
					
						
							|  |  |  |     .m_clear = termiosmodule_clear, | 
					
						
							|  |  |  |     .m_free = termiosmodule_free, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PyMODINIT_FUNC PyInit_termios(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return PyModuleDef_Init(&termiosmodule); | 
					
						
							| 
									
										
										
										
											1994-09-12 10:41:22 +00:00
										 |  |  | } |