about summary refs log tree commit diff
path: root/REORG.TODO/termios
diff options
context:
space:
mode:
Diffstat (limited to 'REORG.TODO/termios')
-rw-r--r--REORG.TODO/termios/Makefile33
-rw-r--r--REORG.TODO/termios/Versions14
-rw-r--r--REORG.TODO/termios/cfmakeraw.c31
-rw-r--r--REORG.TODO/termios/cfsetspeed.c161
-rw-r--r--REORG.TODO/termios/speed.c65
-rw-r--r--REORG.TODO/termios/sys/termios.h4
-rw-r--r--REORG.TODO/termios/sys/ttychars.h61
-rw-r--r--REORG.TODO/termios/tcdrain.c37
-rw-r--r--REORG.TODO/termios/tcflow.c49
-rw-r--r--REORG.TODO/termios/tcflush.c42
-rw-r--r--REORG.TODO/termios/tcgetattr.c42
-rw-r--r--REORG.TODO/termios/tcgetpgrp.c36
-rw-r--r--REORG.TODO/termios/tcgetsid.c62
-rw-r--r--REORG.TODO/termios/tcsendbrk.c36
-rw-r--r--REORG.TODO/termios/tcsetattr.c106
-rw-r--r--REORG.TODO/termios/tcsetpgrp.c37
-rw-r--r--REORG.TODO/termios/termios.h109
17 files changed, 925 insertions, 0 deletions
diff --git a/REORG.TODO/termios/Makefile b/REORG.TODO/termios/Makefile
new file mode 100644
index 0000000000..ac14a854df
--- /dev/null
+++ b/REORG.TODO/termios/Makefile
@@ -0,0 +1,33 @@
+# Copyright (C) 1991-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+#
+#	Makefile for the terminal I/O functions.
+#
+subdir	:= termios
+
+include ../Makeconfig
+
+headers	:= termios.h bits/termios.h sys/ttydefaults.h sys/termios.h \
+	   sys/ttychars.h
+
+routines	:= speed cfsetspeed tcsetattr tcgetattr tcgetpgrp tcsetpgrp \
+		   tcdrain tcflow tcflush tcsendbrk cfmakeraw tcgetsid
+
+include ../Rules
+
+CFLAGS-tcdrain.c = -fexceptions -fasynchronous-unwind-tables
diff --git a/REORG.TODO/termios/Versions b/REORG.TODO/termios/Versions
new file mode 100644
index 0000000000..711ed0334b
--- /dev/null
+++ b/REORG.TODO/termios/Versions
@@ -0,0 +1,14 @@
+libc {
+  GLIBC_2.0 {
+    # c*
+    cfgetispeed; cfgetospeed; cfmakeraw; cfsetispeed; cfsetospeed; cfsetspeed;
+
+    # t*
+    tcdrain; tcflow; tcflush; tcgetattr; tcgetpgrp; tcsendbreak; tcsetattr;
+    tcsetpgrp;
+  }
+  GLIBC_2.1 {
+    # t*
+    tcgetsid;
+  }
+}
diff --git a/REORG.TODO/termios/cfmakeraw.c b/REORG.TODO/termios/cfmakeraw.c
new file mode 100644
index 0000000000..0f97ce66d2
--- /dev/null
+++ b/REORG.TODO/termios/cfmakeraw.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <termios.h>
+
+/* Set *T to indicate raw mode.  */
+void
+cfmakeraw (struct termios *t)
+{
+  t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
+  t->c_oflag &= ~OPOST;
+  t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
+  t->c_cflag &= ~(CSIZE|PARENB);
+  t->c_cflag |= CS8;
+  t->c_cc[VMIN] = 1;		/* read returns when one char is available.  */
+  t->c_cc[VTIME] = 0;
+}
diff --git a/REORG.TODO/termios/cfsetspeed.c b/REORG.TODO/termios/cfsetspeed.c
new file mode 100644
index 0000000000..c836e8d3cd
--- /dev/null
+++ b/REORG.TODO/termios/cfsetspeed.c
@@ -0,0 +1,161 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <termios.h>
+#include <errno.h>
+#include <stddef.h>
+
+struct speed_struct
+{
+  speed_t value;
+  speed_t internal;
+};
+
+static const struct speed_struct speeds[] =
+  {
+#ifdef B0
+    { 0, B0 },
+#endif
+#ifdef B50
+    { 50, B50 },
+#endif
+#ifdef B75
+    { 75, B75 },
+#endif
+#ifdef B110
+    { 110, B110 },
+#endif
+#ifdef B134
+    { 134, B134 },
+#endif
+#ifdef B150
+    { 150, B150 },
+#endif
+#ifdef B200
+    { 200, B200 },
+#endif
+#ifdef B300
+    { 300, B300 },
+#endif
+#ifdef B600
+    { 600, B600 },
+#endif
+#ifdef B1200
+    { 1200, B1200 },
+#endif
+#ifdef B1200
+    { 1200, B1200 },
+#endif
+#ifdef B1800
+    { 1800, B1800 },
+#endif
+#ifdef B2400
+    { 2400, B2400 },
+#endif
+#ifdef B4800
+    { 4800, B4800 },
+#endif
+#ifdef B9600
+    { 9600, B9600 },
+#endif
+#ifdef B19200
+    { 19200, B19200 },
+#endif
+#ifdef B38400
+    { 38400, B38400 },
+#endif
+#ifdef B57600
+    { 57600, B57600 },
+#endif
+#ifdef B76800
+    { 76800, B76800 },
+#endif
+#ifdef B115200
+    { 115200, B115200 },
+#endif
+#ifdef B153600
+    { 153600, B153600 },
+#endif
+#ifdef B230400
+    { 230400, B230400 },
+#endif
+#ifdef B307200
+    { 307200, B307200 },
+#endif
+#ifdef B460800
+    { 460800, B460800 },
+#endif
+#ifdef B500000
+    { 500000, B500000 },
+#endif
+#ifdef B576000
+    { 576000, B576000 },
+#endif
+#ifdef B921600
+    { 921600, B921600 },
+#endif
+#ifdef B1000000
+    { 1000000, B1000000 },
+#endif
+#ifdef B1152000
+    { 1152000, B1152000 },
+#endif
+#ifdef B1500000
+    { 1500000, B1500000 },
+#endif
+#ifdef B2000000
+    { 2000000, B2000000 },
+#endif
+#ifdef B2500000
+    { 2500000, B2500000 },
+#endif
+#ifdef B3000000
+    { 3000000, B3000000 },
+#endif
+#ifdef B3500000
+    { 3500000, B3500000 },
+#endif
+#ifdef B4000000
+    { 4000000, B4000000 },
+#endif
+  };
+
+
+/* Set both the input and output baud rates stored in *TERMIOS_P to SPEED.  */
+int
+cfsetspeed (struct termios *termios_p, speed_t speed)
+{
+  size_t cnt;
+
+  for (cnt = 0; cnt < sizeof (speeds) / sizeof (speeds[0]); ++cnt)
+    if (speed == speeds[cnt].internal)
+      {
+	cfsetispeed (termios_p, speed);
+	cfsetospeed (termios_p, speed);
+	return 0;
+      }
+    else if (speed == speeds[cnt].value)
+      {
+	cfsetispeed (termios_p, speeds[cnt].internal);
+	cfsetospeed (termios_p, speeds[cnt].internal);
+	return 0;
+      }
+
+  __set_errno (EINVAL);
+
+  return -1;
+}
diff --git a/REORG.TODO/termios/speed.c b/REORG.TODO/termios/speed.c
new file mode 100644
index 0000000000..e5e4acaa87
--- /dev/null
+++ b/REORG.TODO/termios/speed.c
@@ -0,0 +1,65 @@
+/* `struct termios' speed frobnication functions.  4.4 BSD/generic GNU version.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>
+#include <errno.h>
+#include <termios.h>
+
+/* Return the output baud rate stored in *TERMIOS_P.  */
+speed_t
+cfgetospeed (const struct termios *termios_p)
+{
+  return termios_p->__ospeed;
+}
+
+/* Return the input baud rate stored in *TERMIOS_P.  */
+speed_t
+cfgetispeed (const struct termios *termios_p)
+{
+  return termios_p->__ispeed;
+}
+
+/* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
+int
+cfsetospeed (struct termios *termios_p, speed_t speed)
+{
+  if (termios_p == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  termios_p->__ospeed = speed;
+  return 0;
+}
+libc_hidden_def (cfsetospeed)
+
+/* Set the input baud rate stored in *TERMIOS_P to SPEED.  */
+int
+cfsetispeed (struct termios *termios_p, speed_t speed)
+{
+  if (termios_p == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  termios_p->__ispeed = speed;
+  return 0;
+}
+libc_hidden_def (cfsetispeed)
diff --git a/REORG.TODO/termios/sys/termios.h b/REORG.TODO/termios/sys/termios.h
new file mode 100644
index 0000000000..3e18805ab4
--- /dev/null
+++ b/REORG.TODO/termios/sys/termios.h
@@ -0,0 +1,4 @@
+#ifndef _SYS_TERMIOS_H
+#define _SYS_TERMIOS_H
+#include <termios.h>
+#endif
diff --git a/REORG.TODO/termios/sys/ttychars.h b/REORG.TODO/termios/sys/ttychars.h
new file mode 100644
index 0000000000..7043f60f81
--- /dev/null
+++ b/REORG.TODO/termios/sys/ttychars.h
@@ -0,0 +1,61 @@
+/*-
+ * Copyright (c) 1982, 1986, 1990, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)ttychars.h	8.2 (Berkeley) 1/4/94
+ */
+
+/*
+ * 4.3 COMPATIBILITY FILE
+ *
+ * User visible structures and constants related to terminal handling.
+ */
+#ifndef _SYS_TTYCHARS_H
+#define	_SYS_TTYCHARS_H 1
+
+struct ttychars {
+	char	tc_erase;	/* erase last character */
+	char	tc_kill;	/* erase entire line */
+	char	tc_intrc;	/* interrupt */
+	char	tc_quitc;	/* quit */
+	char	tc_startc;	/* start output */
+	char	tc_stopc;	/* stop output */
+	char	tc_eofc;	/* end-of-file */
+	char	tc_brkc;	/* input delimiter (like nl) */
+	char	tc_suspc;	/* stop process signal */
+	char	tc_dsuspc;	/* delayed stop process signal */
+	char	tc_rprntc;	/* reprint line */
+	char	tc_flushc;	/* flush output (toggles) */
+	char	tc_werasc;	/* word erase */
+	char	tc_lnextc;	/* literal next character */
+};
+
+#ifdef __USE_OLD_TTY
+#include <sys/ttydefaults.h>	/* to pick up character defaults */
+#endif
+
+#endif /* sys/ttychars.h */
diff --git a/REORG.TODO/termios/tcdrain.c b/REORG.TODO/termios/tcdrain.c
new file mode 100644
index 0000000000..edd892decb
--- /dev/null
+++ b/REORG.TODO/termios/tcdrain.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <termios.h>
+
+/* Wait for pending output to be written on FD.  */
+int
+__libc_tcdrain (int fd)
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+weak_alias (__libc_tcdrain, tcdrain)
+
+
+stub_warning (tcdrain)
diff --git a/REORG.TODO/termios/tcflow.c b/REORG.TODO/termios/tcflow.c
new file mode 100644
index 0000000000..728112d8e2
--- /dev/null
+++ b/REORG.TODO/termios/tcflow.c
@@ -0,0 +1,49 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <termios.h>
+
+/* Suspend or restart transmission on FD.  */
+int
+tcflow (int fd, int action)
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+
+  switch (action)
+    {
+    case TCOOFF:
+    case TCOON:
+    case TCIOFF:
+    case TCION:
+      break;
+
+    default:
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+
+stub_warning (tcflow)
diff --git a/REORG.TODO/termios/tcflush.c b/REORG.TODO/termios/tcflush.c
new file mode 100644
index 0000000000..9d0c1fb912
--- /dev/null
+++ b/REORG.TODO/termios/tcflush.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <termios.h>
+
+/* Flush pending data on FD.  */
+int
+tcflush (int fd, int queue_selector)
+{
+  switch (queue_selector)
+    {
+    case TCIFLUSH:
+    case TCOFLUSH:
+    case TCIOFLUSH:
+      break;
+
+    default:
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+
+stub_warning(tcflush);
diff --git a/REORG.TODO/termios/tcgetattr.c b/REORG.TODO/termios/tcgetattr.c
new file mode 100644
index 0000000000..a5c076b1b0
--- /dev/null
+++ b/REORG.TODO/termios/tcgetattr.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stddef.h>
+#include <termios.h>
+
+/* Put the state of FD into *TERMIOS_P.  */
+int
+__tcgetattr (int fd, struct termios *termios_p)
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  if (termios_p == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (tcgetattr)
+
+weak_alias (__tcgetattr, tcgetattr)
diff --git a/REORG.TODO/termios/tcgetpgrp.c b/REORG.TODO/termios/tcgetpgrp.c
new file mode 100644
index 0000000000..94a1c751ec
--- /dev/null
+++ b/REORG.TODO/termios/tcgetpgrp.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+/* Return the foreground process group ID of FD.  */
+pid_t
+tcgetpgrp (int fd)
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return (pid_t) -1;
+    }
+
+  __set_errno (ENOSYS);
+  return (pid_t) -1;
+}
+libc_hidden_def (tcgetpgrp)
+stub_warning (tcgetpgrp)
diff --git a/REORG.TODO/termios/tcgetsid.c b/REORG.TODO/termios/tcgetsid.c
new file mode 100644
index 0000000000..e49e6b12dd
--- /dev/null
+++ b/REORG.TODO/termios/tcgetsid.c
@@ -0,0 +1,62 @@
+/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <termios.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+/* Return the session ID of FD.  */
+pid_t
+tcgetsid (int fd)
+{
+  pid_t pgrp;
+  pid_t sid;
+#ifdef TIOCGSID
+  static int tiocgsid_does_not_work;
+
+  if (! tiocgsid_does_not_work)
+    {
+      int serrno = errno;
+      int sid;
+
+      if (__ioctl (fd, TIOCGSID, &sid) < 0)
+	{
+	  if (errno == EINVAL)
+	    {
+	      tiocgsid_does_not_work = 1;
+	      __set_errno (serrno);
+	    }
+	  else
+	    return (pid_t) -1;
+	}
+      else
+	return (pid_t) sid;
+    }
+#endif
+
+  pgrp = tcgetpgrp (fd);
+  if (pgrp == -1)
+    return (pid_t) -1;
+
+  sid = getsid (pgrp);
+  if (sid == -1 && errno == ESRCH)
+    __set_errno (ENOTTY);
+
+  return sid;
+}
diff --git a/REORG.TODO/termios/tcsendbrk.c b/REORG.TODO/termios/tcsendbrk.c
new file mode 100644
index 0000000000..4e8fb3fed4
--- /dev/null
+++ b/REORG.TODO/termios/tcsendbrk.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <termios.h>
+
+/* Send zero bits on FD.  */
+int
+tcsendbreak (int fd, int duration)
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+
+stub_warning (tcsendbreak)
diff --git a/REORG.TODO/termios/tcsetattr.c b/REORG.TODO/termios/tcsetattr.c
new file mode 100644
index 0000000000..7dd709046b
--- /dev/null
+++ b/REORG.TODO/termios/tcsetattr.c
@@ -0,0 +1,106 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stddef.h>
+#include <termios.h>
+
+static int bad_speed (speed_t speed);
+
+/* Set the state of FD to *TERMIOS_P.  */
+int
+tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+  if (termios_p == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+  switch (optional_actions)
+    {
+    case TCSANOW:
+    case TCSADRAIN:
+    case TCSAFLUSH:
+      break;
+    default:
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  if (bad_speed(termios_p->__ospeed) ||
+      bad_speed(termios_p->__ispeed == 0 ?
+		termios_p->__ospeed : termios_p->__ispeed))
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+libc_hidden_def (tcsetattr)
+
+/* Strychnine checking.  */
+static int
+bad_speed (speed_t speed)
+{
+  switch (speed)
+    {
+    case B0:
+    case B50:
+    case B75:
+    case B110:
+    case B134:
+    case B150:
+    case B200:
+    case B300:
+    case B600:
+    case B1200:
+    case B1800:
+    case B2400:
+    case B4800:
+    case B9600:
+    case B19200:
+    case B38400:
+    case B57600:
+    case B115200:
+    case B230400:
+    case B460800:
+    case B500000:
+    case B576000:
+    case B921600:
+    case B1000000:
+    case B1152000:
+    case B1500000:
+    case B2000000:
+    case B2500000:
+    case B3000000:
+    case B3500000:
+    case B4000000:
+      return 0;
+    default:
+      return 1;
+    }
+}
+
+
+stub_warning (tcsetattr)
diff --git a/REORG.TODO/termios/tcsetpgrp.c b/REORG.TODO/termios/tcsetpgrp.c
new file mode 100644
index 0000000000..44e61b2a8a
--- /dev/null
+++ b/REORG.TODO/termios/tcsetpgrp.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+/* Set the foreground process group ID of FD set PGRP_ID.  */
+int
+tcsetpgrp (int fd, pid_t pgrp_id)
+{
+  if (fd < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+
+
+stub_warning (tcsetpgrp)
diff --git a/REORG.TODO/termios/termios.h b/REORG.TODO/termios/termios.h
new file mode 100644
index 0000000000..c0f7780cff
--- /dev/null
+++ b/REORG.TODO/termios/termios.h
@@ -0,0 +1,109 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *	POSIX Standard: 7.1-2 General Terminal Interface	<termios.h>
+ */
+
+#ifndef	_TERMIOS_H
+#define	_TERMIOS_H	1
+
+#include <features.h>
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* We need `pid_t'.  */
+# include <bits/types.h>
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+# endif
+#endif
+
+__BEGIN_DECLS
+
+/* Get the system-dependent definitions of `struct termios', `tcflag_t',
+   `cc_t', `speed_t', and all the macros specifying the flag bits.  */
+#include <bits/termios.h>
+
+#ifdef __USE_MISC
+/* Compare a character C to a value VAL from the `c_cc' array in a
+   `struct termios'.  If VAL is _POSIX_VDISABLE, no character can match it.  */
+# define CCEQ(val, c)	((c) == (val) && (val) != _POSIX_VDISABLE)
+#endif
+
+/* Return the output baud rate stored in *TERMIOS_P.  */
+extern speed_t cfgetospeed (const struct termios *__termios_p) __THROW;
+
+/* Return the input baud rate stored in *TERMIOS_P.  */
+extern speed_t cfgetispeed (const struct termios *__termios_p) __THROW;
+
+/* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
+extern int cfsetospeed (struct termios *__termios_p, speed_t __speed) __THROW;
+
+/* Set the input baud rate stored in *TERMIOS_P to SPEED.  */
+extern int cfsetispeed (struct termios *__termios_p, speed_t __speed) __THROW;
+
+#ifdef	__USE_MISC
+/* Set both the input and output baud rates in *TERMIOS_OP to SPEED.  */
+extern int cfsetspeed (struct termios *__termios_p, speed_t __speed) __THROW;
+#endif
+
+
+/* Put the state of FD into *TERMIOS_P.  */
+extern int tcgetattr (int __fd, struct termios *__termios_p) __THROW;
+
+/* Set the state of FD to *TERMIOS_P.
+   Values for OPTIONAL_ACTIONS (TCSA*) are in <bits/termios.h>.  */
+extern int tcsetattr (int __fd, int __optional_actions,
+		      const struct termios *__termios_p) __THROW;
+
+
+#ifdef	__USE_MISC
+/* Set *TERMIOS_P to indicate raw mode.  */
+extern void cfmakeraw (struct termios *__termios_p) __THROW;
+#endif
+
+/* Send zero bits on FD.  */
+extern int tcsendbreak (int __fd, int __duration) __THROW;
+
+/* Wait for pending output to be written on FD.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int tcdrain (int __fd);
+
+/* Flush pending data on FD.
+   Values for QUEUE_SELECTOR (TC{I,O,IO}FLUSH) are in <bits/termios.h>.  */
+extern int tcflush (int __fd, int __queue_selector) __THROW;
+
+/* Suspend or restart transmission on FD.
+   Values for ACTION (TC[IO]{OFF,ON}) are in <bits/termios.h>.  */
+extern int tcflow (int __fd, int __action) __THROW;
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Get process group ID for session leader for controlling terminal FD.  */
+extern __pid_t tcgetsid (int __fd) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+# include <sys/ttydefaults.h>
+#endif
+
+__END_DECLS
+
+#endif /* termios.h  */