[Python-checkins] CVS: python/dist/src/Modules termios.c,2.24,2.24.2.1

Fred L. Drake fdrake@users.sourceforge.net
2001年5月11日 09:34:25 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv10999
Modified Files:
 Tag: release21-maint
	termios.c 
Log Message:
Migrate the last few revisions from the head to the bugfix branch -- these
have all been portability fixes and improving the consistency of how file
descriptors and file objects are handled.
Index: termios.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/termios.c,v
retrieving revision 2.24
retrieving revision 2.24.2.1
diff -C2 -r2.24 -r2.24.2.1
*** termios.c	2001年04月11日 20:57:57	2.24
--- termios.c	2001年05月11日 16:34:23	2.24.2.1
***************
*** 6,13 ****
 
 #include <termios.h>
! /* XXX Some systems need this to get all the symbols, while
! this breaks for others.
 #include <sys/ioctl.h>
! */
 
 static char termios__doc__[] = "\
--- 6,27 ----
 
 #include <termios.h>
! #ifdef __osf__
! /* On OSF, sys/ioctl.h requires that struct termio already be defined,
! * so this needs to be included first on that platform. */
! #include <termio.h>
! #endif
 #include <sys/ioctl.h>
! 
! #ifdef __BEOS__
! #include <unistd.h>
! #endif
! 
! /* HP-UX requires that this be included to pick up MDCD, MCTS, MDSR,
! * MDTR, MRI, and MRTS (appearantly used internally by some things
! * defined as macros; these are not used here directly).
! */
! #ifdef HAVE_SYS_MODEM_H
! #include <sys/modem.h>
! #endif
 
 static char termios__doc__[] = "\
***************
*** 15,42 ****
 For a complete description of these calls, see the Posix or Unix manual\n\
 pages. It is only available for those Unix versions that support Posix\n\
! termios style tty I/O control (and then only if configured at installation\n\
! time).\n\
 \n\
 All functions in this module take a file descriptor fd as their first\n\
! argument. This must be an integer file descriptor, such as returned by\n\
! sys.stdin.fileno().";
! 
 
- #ifdef __BEOS__
- #include <unistd.h>
- #endif
- 
- #define BAD "bad termios argument"
- 
 static PyObject *TermiosError;
 
! /* termios = tcgetattr(fd)
! termios is
! [iflag, oflag, cflag, lflag, ispeed, ospeed, [cc[0], ..., cc[NCCS]]] 
 
! Return the attributes of the terminal device. */
 
 static char termios_tcgetattr__doc__[] = "\
 tcgetattr(fd) -> list_of_attrs\n\
 Get the tty attributes for file descriptor fd, as follows:\n\
 [iflag, oflag, cflag, lflag, ispeed, ospeed, cc] where cc is a list\n\
--- 29,55 ----
 For a complete description of these calls, see the Posix or Unix manual\n\
 pages. It is only available for those Unix versions that support Posix\n\
! termios style tty I/O control.\n\
 \n\
 All functions in this module take a file descriptor fd as their first\n\
! argument. This can be an integer file descriptor, such as returned by\n\
! sys.stdin.fileno(), or a file object, such as sys.stdin itself.";
 
 static PyObject *TermiosError;
 
! static int fdconv(PyObject* obj, void* p)
! {
! 	int fd;
 
! 	fd = PyObject_AsFileDescriptor(obj);
! 	if (fd >= 0) {
! 		*(int*)p = fd;
! 		return 1;
! 	}
! 	return 0;
! }
 
 static char termios_tcgetattr__doc__[] = "\
 tcgetattr(fd) -> list_of_attrs\n\
+ \n\
 Get the tty attributes for file descriptor fd, as follows:\n\
 [iflag, oflag, cflag, lflag, ispeed, ospeed, cc] where cc is a list\n\
***************
*** 58,62 ****
 	char ch;
 
! 	if (!PyArg_Parse(args, "i", &fd))
 		return NULL;
 
--- 71,76 ----
 	char ch;
 
! 	if (!PyArg_ParseTuple(args, "O&:tcgetattr", 
! 			 fdconv, (void*)&fd))
 		return NULL;
 
***************
*** 112,120 ****
 }
 
- /* tcsetattr(fd, when, termios)
- Set the attributes of the terminal device. */
- 
 static char termios_tcsetattr__doc__[] = "\
 tcsetattr(fd, when, attributes) -> None\n\
 Set the tty attributes for file descriptor fd.\n\
 The attributes to be set are taken from the attributes argument, which\n\
--- 126,132 ----
 }
 
 static char termios_tcsetattr__doc__[] = "\
 tcsetattr(fd, when, attributes) -> None\n\
+ \n\
 Set the tty attributes for file descriptor fd.\n\
 The attributes to be set are taken from the attributes argument, which\n\
***************
*** 134,141 ****
 	int i;
 
! 	if (!PyArg_Parse(args, "(iiO)", &fd, &when, &term))
 		return NULL;
 	if (!PyList_Check(term) || PyList_Size(term) != 7) {
! 		PyErr_SetString(PyExc_TypeError, BAD);
 		return NULL;
 	}
--- 146,155 ----
 	int i;
 
! 	if (!PyArg_ParseTuple(args, "O&iO:tcsetattr", 
! 			 fdconv, &fd, &when, &term))
 		return NULL;
 	if (!PyList_Check(term) || PyList_Size(term) != 7) {
! 		PyErr_SetString(PyExc_TypeError, 
! 			 "tcsetattr, arg 3: must be 7 element list");
 		return NULL;
 	}
***************
*** 155,159 ****
 
 	if (!PyList_Check(cc) || PyList_Size(cc) != NCCS) {
! 		PyErr_SetString(PyExc_TypeError, BAD);
 		return NULL;
 	}
--- 169,175 ----
 
 	if (!PyList_Check(cc) || PyList_Size(cc) != NCCS) {
! 		PyErr_Format(PyExc_TypeError, 
! 			"tcsetattr: attributes[6] must be %d element list",
! 			 NCCS);
 		return NULL;
 	}
***************
*** 167,171 ****
 			mode.c_cc[i] = (cc_t) PyInt_AsLong(v);
 		else {
! 			PyErr_SetString(PyExc_TypeError, BAD);
 			return NULL;
 		}
--- 183,188 ----
 			mode.c_cc[i] = (cc_t) PyInt_AsLong(v);
 		else {
! 			PyErr_SetString(PyExc_TypeError, 
! "tcsetattr: elements of attributes must be characters or integers");
 			return NULL;
 		}
***************
*** 183,194 ****
 }
 
- /* tcsendbreak(fd, duration)
- Generate a break condition. */
- 
 static char termios_tcsendbreak__doc__[] = "\
 tcsendbreak(fd, duration) -> None\n\
 Send a break on file descriptor fd.\n\
! A zero duration sends a break for 0.25-0.5 seconds; a nonzero duration \n\
! has a system dependent meaning. ";
 
 static PyObject *
--- 200,209 ----
 }
 
 static char termios_tcsendbreak__doc__[] = "\
 tcsendbreak(fd, duration) -> None\n\
+ \n\
 Send a break on file descriptor fd.\n\
! A zero duration sends a break for 0.25-0.5 seconds; a nonzero duration\n\
! has a system dependent meaning.";
 
 static PyObject *
***************
*** 197,201 ****
 	int fd, duration;
 
! 	if (!PyArg_Parse(args, "(ii)", &fd, &duration))
 		return NULL;
 	if (tcsendbreak(fd, duration) == -1)
--- 212,217 ----
 	int fd, duration;
 
! 	if (!PyArg_ParseTuple(args, "O&i:tcsendbreak", 
! 			 fdconv, &fd, &duration))
 		return NULL;
 	if (tcsendbreak(fd, duration) == -1)
***************
*** 206,216 ****
 }
 
- /* tcdrain(fd) 
- Wait until all queued output to the terminal has been 
- transmitted. */
- 
 static char termios_tcdrain__doc__[] = "\
 tcdrain(fd) -> None\n\
! Wait until all output written to file descriptor fd has been transmitted. ";
 
 static PyObject *
--- 222,229 ----
 }
 
 static char termios_tcdrain__doc__[] = "\
 tcdrain(fd) -> None\n\
! \n\
! Wait until all output written to file descriptor fd has been transmitted.";
 
 static PyObject *
***************
*** 219,223 ****
 	int fd;
 
! 	if (!PyArg_Parse(args, "i", &fd))
 		return NULL;
 	if (tcdrain(fd) == -1)
--- 232,237 ----
 	int fd;
 
! 	if (!PyArg_ParseTuple(args, "O&:tcdrain", 
! 			 fdconv, &fd))
 		return NULL;
 	if (tcdrain(fd) == -1)
***************
*** 228,237 ****
 }
 
- /* tcflush(fd, queue) 
- Clear the input and/or output queues associated with 
- the terminal. */
- 
 static char termios_tcflush__doc__[] = "\
 tcflush(fd, queue) -> None\n\
 Discard queued data on file descriptor fd.\n\
 The queue selector specifies which queue: termios.TCIFLUSH for the input\n\
--- 242,248 ----
 }
 
 static char termios_tcflush__doc__[] = "\
 tcflush(fd, queue) -> None\n\
+ \n\
 Discard queued data on file descriptor fd.\n\
 The queue selector specifies which queue: termios.TCIFLUSH for the input\n\
***************
*** 244,248 ****
 	int fd, queue;
 
! 	if (!PyArg_Parse(args, "(ii)", &fd, &queue))
 		return NULL;
 	if (tcflush(fd, queue) == -1)
--- 255,260 ----
 	int fd, queue;
 
! 	if (!PyArg_ParseTuple(args, "O&i:tcflush", 
! 			 fdconv, &fd, &queue))
 		return NULL;
 	if (tcflush(fd, queue) == -1)
***************
*** 253,262 ****
 }
 
- /* tcflow(fd, action) 
- Perform operations relating to XON/XOFF flow control on 
- the terminal. */
- 
 static char termios_tcflow__doc__[] = "\
 tcflow(fd, action) -> None\n\
 Suspend or resume input or output on file descriptor fd.\n\
 The action argument can be termios.TCOOFF to suspend output,\n\
--- 265,271 ----
 }
 
 static char termios_tcflow__doc__[] = "\
 tcflow(fd, action) -> None\n\
+ \n\
 Suspend or resume input or output on file descriptor fd.\n\
 The action argument can be termios.TCOOFF to suspend output,\n\
***************
*** 269,273 ****
 	int fd, action;
 
! 	if (!PyArg_Parse(args, "(ii)", &fd, &action))
 		return NULL;
 	if (tcflow(fd, action) == -1)
--- 278,283 ----
 	int fd, action;
 
! 	if (!PyArg_ParseTuple(args, "O&i:tcflow", 
! 			 fdconv, &fd, &action))
 		return NULL;
 	if (tcflow(fd, action) == -1)
***************
*** 281,295 ****
 {
 	{"tcgetattr", termios_tcgetattr, 
! 	 METH_OLDARGS, termios_tcgetattr__doc__},
 	{"tcsetattr", termios_tcsetattr, 
! 	 METH_OLDARGS, termios_tcsetattr__doc__},
 	{"tcsendbreak", termios_tcsendbreak, 
! 	 METH_OLDARGS, termios_tcsendbreak__doc__},
 	{"tcdrain", termios_tcdrain, 
! 	 METH_OLDARGS, termios_tcdrain__doc__},
 	{"tcflush", termios_tcflush, 
! 	 METH_OLDARGS, termios_tcflush__doc__},
 	{"tcflow", termios_tcflow, 
! 	 METH_OLDARGS, termios_tcflow__doc__},
 	{NULL, NULL}
 };
--- 291,305 ----
 {
 	{"tcgetattr", termios_tcgetattr, 
! 	 METH_VARARGS, termios_tcgetattr__doc__},
 	{"tcsetattr", termios_tcsetattr, 
! 	 METH_VARARGS, termios_tcsetattr__doc__},
 	{"tcsendbreak", termios_tcsendbreak, 
! 	 METH_VARARGS, termios_tcsendbreak__doc__},
 	{"tcdrain", termios_tcdrain, 
! 	 METH_VARARGS, termios_tcdrain__doc__},
 	{"tcflush", termios_tcflush, 
! 	 METH_VARARGS, termios_tcflush__doc__},
 	{"tcflow", termios_tcflow, 
! 	 METH_VARARGS, termios_tcflow__doc__},
 	{NULL, NULL}
 };
***************
*** 527,532 ****
--- 537,546 ----
 	{"VSUSP", VSUSP},
 	{"VEOL", VEOL},
+ #ifndef VREPRINT
 	{"VREPRINT", VREPRINT},
+ #endif
+ #ifndef VDISCARD
 	{"VDISCARD", VDISCARD},
+ #endif
 	{"VWERASE", VWERASE},
 	{"VLNEXT", VLNEXT},

AltStyle によって変換されたページ (->オリジナル) /