summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaius Mulley <gaius.mulley@southwales.ac.uk>2022-07-05 14:49:05 +0100
committerGaius Mulley <gaius.mulley@southwales.ac.uk>2022-07-05 14:49:05 +0100
commit7f67199f509ccef894f65f968468c8f13f2bafec (patch)
tree6d28432f28b0fb66a5f9ddf3c0890f47147c9596
parent33abd43d4cac0e932f64e5dcce0c5ddf338bf625 (diff)
downloadgcc-devel/m2link.tar.gz
Added gcc/m2/mc-boot-ch/Gtermios.cc.devel/m2link
gcc/m2/ChangeLog: * mc-boot-ch/Gtermios.cc (New file). Replacing Gtermios.c. Signed-off-by: Gaius Mulley <gaius.mulley@southwales.ac.uk>
-rw-r--r--gcc/m2/mc-boot-ch/Gtermios.cc1947
1 files changed, 1947 insertions, 0 deletions
diff --git a/gcc/m2/mc-boot-ch/Gtermios.cc b/gcc/m2/mc-boot-ch/Gtermios.cc
new file mode 100644
index 00000000000..5982b5f9ea2
--- /dev/null
+++ b/gcc/m2/mc-boot-ch/Gtermios.cc
@@ -0,0 +1,1947 @@
+/* Gtermios.c handwritten module for mc.
+
+Copyright (C) 2010-2022 Free Software Foundation, Inc.
+Contributed by Gaius Mulley <gaius@glam.ac.uk>.
+
+This file is part of GNU Modula-2.
+
+GNU Modula-2 is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GNU Modula-2 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
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Modula-2; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+
+#include "gm2-libs-host.h"
+
+#ifdef HAVE_TERMIOS_H
+# include <termios.h>
+#endif
+
+#ifdef TERMIOS_NEEDS_XOPEN_SOURCE
+#define _XOPEN_SOURCE
+#endif
+
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+#else
+#define EXTERN
+#endif
+
+#define EXPORT(X) termios##_##X
+
+typedef enum {
+ vintr,
+ vquit,
+ verase,
+ vkill,
+ veof,
+ vtime,
+ vmin,
+ vswtc,
+ vstart,
+ vstop,
+ vsusp,
+ veol,
+ vreprint,
+ vdiscard,
+ vwerase,
+ vlnext,
+ veol2
+} ControlChar;
+
+typedef enum {
+ /* input flag bits. */
+ ignbrk,
+ ibrkint,
+ ignpar,
+ iparmrk,
+ inpck,
+ istrip,
+ inlcr,
+ igncr,
+ icrnl,
+ iuclc,
+ ixon,
+ ixany,
+ ixoff,
+ imaxbel,
+ /* output flag bits. */
+ opost,
+ olcuc,
+ onlcr,
+ ocrnl,
+ onocr,
+ onlret,
+ ofill,
+ ofdel,
+ onl0,
+ onl1,
+ ocr0,
+ ocr1,
+ ocr2,
+ ocr3,
+ otab0,
+ otab1,
+ otab2,
+ otab3,
+ obs0,
+ obs1,
+ off0,
+ off1,
+ ovt0,
+ ovt1,
+ /* baud rate. */
+ b0,
+ b50,
+ b75,
+ b110,
+ b135,
+ b150,
+ b200,
+ b300,
+ b600,
+ b1200,
+ b1800,
+ b2400,
+ b4800,
+ b9600,
+ b19200,
+ b38400,
+ b57600,
+ b115200,
+ b240400,
+ b460800,
+ b500000,
+ b576000,
+ b921600,
+ b1000000,
+ b1152000,
+ b1500000,
+ b2000000,
+ b2500000,
+ b3000000,
+ b3500000,
+ b4000000,
+ maxbaud,
+ crtscts,
+ /* character size. */
+ cs5,
+ cs6,
+ cs7,
+ cs8,
+ cstopb,
+ cread,
+ parenb,
+ parodd,
+ hupcl,
+ clocal,
+ /* local flags. */
+ lisig,
+ licanon,
+ lxcase,
+ lecho,
+ lechoe,
+ lechok,
+ lechonl,
+ lnoflsh,
+ ltopstop,
+ lechoctl,
+ lechoprt,
+ lechoke,
+ lflusho,
+ lpendin,
+ liexten
+} Flag;
+
+int
+doSetUnset (unsigned int *bitset, unsigned int mask, int value)
+{
+ if (value)
+ (*bitset) |= mask;
+ else
+ (*bitset) &= (~mask);
+ return 1;
+}
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* InitTermios - new data structure. */
+
+void *
+EXPORT (InitTermios) (void)
+{
+ struct termios *p = (struct termios *)malloc (sizeof (struct termios));
+
+ memset (p, 0, sizeof (struct termios));
+ return p;
+}
+
+/* KillTermios - delete data structure. */
+
+void *
+EXPORT (KillTermios) (struct termios *p)
+{
+ free (p);
+ return NULL;
+}
+
+/* tcsnow - return the value of TCSANOW. */
+
+int
+EXPORT (tcsnow) (void)
+{
+ return TCSANOW;
+}
+
+/* tcsdrain - return the value of TCSADRAIN. */
+
+int
+EXPORT (tcsdrain) (void)
+{
+ return TCSADRAIN;
+}
+
+/* tcsflush - return the value of TCSAFLUSH. */
+
+int
+EXPORT (tcsflush) (void)
+{
+ return TCSAFLUSH;
+}
+
+/* cfgetospeed - return output baud rate. */
+
+int
+EXPORT (cfgetospeed) (struct termios *t)
+{
+ return cfgetospeed (t);
+}
+
+/* cfgetispeed - return input baud rate. */
+
+int
+EXPORT (cfgetispeed) (struct termios *t)
+{
+ return cfgetispeed (t);
+}
+
+/* cfsetospeed - set output baud rate. */
+
+int
+EXPORT (cfsetospeed) (struct termios *t, unsigned int b)
+{
+ return cfsetospeed (t, b);
+}
+
+/* cfsetispeed - set input baud rate. */
+
+int
+EXPORT (cfsetispeed) (struct termios *t, unsigned int b)
+{
+ return cfsetispeed (t, b);
+}
+
+/* cfsetspeed - set input and output baud rate. */
+
+int
+EXPORT (cfsetspeed) (struct termios *t, unsigned int b)
+{
+ int val = cfsetispeed (t, b);
+ if (val == 0)
+ return cfsetospeed (t, b);
+ cfsetospeed (t, b);
+ return val;
+}
+
+/* tcgetattr - get state of, fd, into, t. */
+
+int
+EXPORT (tcgetattr) (int fd, struct termios *t)
+{
+ return tcgetattr (fd, t);
+}
+
+/* tcsetattr - set state of, fd, to, t, using option. */
+
+int
+EXPORT (tcsetattr) (int fd, int option, struct termios *t)
+{
+ return tcsetattr (fd, option, t);
+}
+
+/* cfmakeraw - sets the terminal to raw mode. */
+
+void
+EXPORT (cfmakeraw) (struct termios *t)
+{
+#if defined(HAVE_CFMAKERAW)
+ return cfmakeraw (t);
+#endif
+}
+
+/* tcsendbreak - send zero bits for duration. */
+
+int
+EXPORT (tcsendbreak) (int fd, int duration)
+{
+ return tcsendbreak (fd, duration);
+}
+
+/* tcdrain - waits for pending output to be written on, fd. */
+
+int
+EXPORT (tcdrain) (int fd)
+{
+ return tcdrain (fd);
+}
+
+/* tcflushi - flush input. */
+
+int
+EXPORT (tcflushi) (int fd)
+{
+#if defined(TCIFLUSH)
+ return tcflush (fd, TCIFLUSH);
+#else
+ return 1;
+#endif
+}
+
+/* tcflusho - flush output. */
+
+int
+EXPORT (tcflusho) (int fd)
+{
+#if defined(TCOFLUSH)
+ return tcflush (fd, TCOFLUSH);
+#else
+ return 1;
+#endif
+}
+
+/* tcflushio - flush input and output. */
+
+int
+EXPORT (tcflushio) (int fd)
+{
+#if defined(TCIOFLUSH)
+ return tcflush (fd, TCIOFLUSH);
+#else
+ return 1;
+#endif
+}
+
+/* tcflowoni - restart input on, fd. */
+
+int
+EXPORT (tcflowoni) (int fd)
+{
+#if defined(TCION)
+ return tcflow (fd, TCION);
+#else
+ return 1;
+#endif
+}
+
+/* tcflowoffi - stop input on, fd. */
+
+int
+EXPORT (tcflowoffi) (int fd)
+{
+#if defined(TCIOFF)
+ return tcflow (fd, TCIOFF);
+#else
+ return 1;
+#endif
+}
+
+/* tcflowono - restart output on, fd. */
+
+int
+EXPORT (tcflowono) (int fd)
+{
+#if defined(TCOON)
+ return tcflow (fd, TCOON);
+#else
+ return 1;
+#endif
+}
+
+/* tcflowoffo - stop output on, fd. */
+
+int
+EXPORT (tcflowoffo) (int fd)
+{
+#if defined(TCOOFF)
+ return tcflow (fd, TCOOFF);
+#else
+ return 1;
+#endif
+}
+
+/* GetFlag - sets a flag value from, t, in, b, and returns TRUE if,
+ t, supports, f. */
+
+int
+EXPORT (GetFlag) (struct termios *t, Flag f, int *b)
+{
+ switch (f)
+ {
+
+ case ignbrk:
+#if defined(IGNBRK)
+ *b = ((t->c_iflag & IGNBRK) == IGNBRK);
+ return 1;
+#else
+ return 0;
+#endif
+ case ibrkint:
+#if defined(BRKINT)
+ *b = ((t->c_iflag & BRKINT) == BRKINT);
+ return 1;
+#else
+ return 0;
+#endif
+ case ignpar:
+#if defined(IGNPAR)
+ *b = ((t->c_iflag & IGNPAR) == IGNPAR);
+ return 1;
+#else
+ return 0;
+#endif
+ case iparmrk:
+#if defined(PARMRK)
+ *b = ((t->c_iflag & PARMRK) == PARMRK);
+ return 1;
+#else
+ return 0;
+#endif
+ case inpck:
+#if defined(INPCK)
+ *b = ((t->c_iflag & INPCK) == INPCK);
+ return 1;
+#else
+ return 0;
+#endif
+ case istrip:
+#if defined(ISTRIP)
+ *b = ((t->c_iflag & ISTRIP) == ISTRIP);
+ return 1;
+#else
+ return 0;
+#endif
+ case inlcr:
+#if defined(INLCR)
+ *b = ((t->c_iflag & INLCR) == INLCR);
+ return 1;
+#else
+ return 0;
+#endif
+ case igncr:
+#if defined(IGNCR)
+ *b = ((t->c_iflag & IGNCR) == IGNCR);
+ return 1;
+#else
+ return 0;
+#endif
+ case icrnl:
+#if defined(ICRNL)
+ *b = ((t->c_iflag & ICRNL) == ICRNL);
+ return 1;
+#else
+ return 0;
+#endif
+ case iuclc:
+#if defined(IUCLC)
+ *b = ((t->c_iflag & IUCLC) == IUCLC);
+ return 1;
+#else
+ return 0;
+#endif
+ case ixon:
+#if defined(IXON)
+ *b = ((t->c_iflag & IXON) == IXON);
+ return 1;
+#else
+ return 0;
+#endif
+ case ixany:
+#if defined(IXANY)
+ *b = ((t->c_iflag & IXANY) == IXANY);
+ return 1;
+#else
+ return 0;
+#endif
+ case ixoff:
+#if defined(IXOFF)
+ *b = ((t->c_iflag & IXOFF) == IXOFF);
+ return 1;
+#else
+ return 0;
+#endif
+ case imaxbel:
+#if defined(IMAXBEL)
+ *b = ((t->c_iflag & IMAXBEL) == IMAXBEL);
+ return 1;
+#else
+ return 0;
+#endif
+ case opost:
+#if defined(OPOST)
+ *b = ((t->c_oflag & OPOST) == OPOST);
+ return 1;
+#else
+ return 0;
+#endif
+ case olcuc:
+#if defined(OLCUC)
+ *b = ((t->c_oflag & OLCUC) == OLCUC);
+ return 1;
+#else
+ return 0;
+#endif
+ case onlcr:
+#if defined(ONLCR)
+ *b = ((t->c_oflag & ONLCR) == ONLCR);
+ return 1;
+#else
+ return 0;
+#endif
+ case ocrnl:
+#if defined(OCRNL)
+ *b = ((t->c_oflag & OCRNL) == OCRNL);
+ return 1;
+#else
+ return 0;
+#endif
+ case onocr:
+#if defined(ONOCR)
+ *b = ((t->c_oflag & ONOCR) == ONOCR);
+ return 1;
+#else
+ return 0;
+#endif
+ case onlret:
+#if defined(ONLRET)
+ *b = ((t->c_oflag & ONLRET) == ONLRET);
+ return 1;
+#else
+ return 0;
+#endif
+ case ofill:
+#if defined(OFILL)
+ *b = ((t->c_oflag & OFILL) == OFILL);
+ return 1;
+#else
+ return 0;
+#endif
+ case ofdel:
+#if defined(OFDEL)
+ *b = ((t->c_oflag & OFDEL) == OFDEL);
+ return 1;
+#else
+ return 0;
+#endif
+ case onl0:
+#if defined(NL0)
+ *b = ((t->c_oflag & NL0) == NL0);
+ return 1;
+#else
+ return 0;
+#endif
+ case onl1:
+#if defined(NL1)
+ *b = ((t->c_oflag & NL1) == NL1);
+ return 1;
+#else
+ return 0;
+#endif
+ case ocr0:
+#if defined(CR0)
+ *b = ((t->c_oflag & CR0) == CR0);
+ return 1;
+#else
+ return 0;
+#endif
+ case ocr1:
+#if defined(CR1)
+ *b = ((t->c_oflag & CR1) == CR1);
+ return 1;
+#else
+ return 0;
+#endif
+ case ocr2:
+#if defined(CR2)
+ *b = ((t->c_oflag & CR2) == CR2);
+ return 1;
+#else
+ return 0;
+#endif
+ case ocr3:
+#if defined(CR3)
+ *b = ((t->c_oflag & CR3) == CR3);
+ return 1;
+#else
+ return 0;
+#endif
+ case otab0:
+#if defined(TAB0)
+ *b = ((t->c_oflag & TAB0) == TAB0);
+ return 1;
+#else
+ return 0;
+#endif
+ case otab1:
+#if defined(TAB1)
+ *b = ((t->c_oflag & TAB1) == TAB1);
+ return 1;
+#else
+ return 0;
+#endif
+ case otab2:
+#if defined(TAB2)
+ *b = ((t->c_oflag & TAB2) == TAB2);
+ return 1;
+#else
+ return 0;
+#endif
+ case otab3:
+#if defined(TAB3)
+ *b = ((t->c_oflag & TAB3) == TAB3);
+ return 1;
+#else
+ return 0;
+#endif
+ case obs0:
+#if defined(BS0)
+ *b = ((t->c_oflag & BS0) == BS0);
+ return 1;
+#else
+ return 0;
+#endif
+ case obs1:
+#if defined(BS1)
+ *b = ((t->c_oflag & BS1) == BS1);
+ return 1;
+#else
+ return 0;
+#endif
+ case off0:
+#if defined(FF0)
+ *b = ((t->c_oflag & FF0) == FF0);
+ return 1;
+#else
+ return 0;
+#endif
+ case off1:
+#if defined(FF1)
+ *b = ((t->c_oflag & FF1) == FF1);
+ return 1;
+#else
+ return 0;
+#endif
+ case ovt0:
+#if defined(VT0)
+ *b = ((t->c_oflag & VT0) == VT0);
+ return 1;
+#else
+ return 0;
+#endif
+ case ovt1:
+#if defined(VT1)
+ *b = ((t->c_oflag & VT1) == VT1);
+ return 1;
+#else
+ return 0;
+#endif
+ case b0:
+#if defined(B0)
+ *b = ((t->c_cflag & B0) == B0);
+ return 1;
+#else
+ return 0;
+#endif
+ case b50:
+#if defined(B50)
+ *b = ((t->c_cflag & B50) == B50);
+ return 1;
+#else
+ return 0;
+#endif
+ case b75:
+#if defined(B75)
+ *b = ((t->c_cflag & B75) == B75);
+ return 1;
+#else
+ return 0;
+#endif
+ case b110:
+#if defined(B110)
+ *b = ((t->c_cflag & B110) == B110);
+ return 1;
+#else
+ return 0;
+#endif
+ case b135:
+#if defined(B134)
+ *b = ((t->c_cflag & B134) == B134);
+ return 1;
+#else
+ return 0;
+#endif
+ case b150:
+#if defined(B150)
+ *b = ((t->c_cflag & B150) == B150);
+ return 1;
+#else
+ return 0;
+#endif
+ case b200:
+#if defined(B200)
+ *b = ((t->c_cflag & B200) == B200);
+ return 1;
+#else
+ return 0;
+#endif
+ case b300:
+#if defined(B300)
+ *b = ((t->c_cflag & B300) == B300);
+ return 1;
+#else
+ return 0;
+#endif
+ case b600:
+#if defined(B600)
+ *b = ((t->c_cflag & B600) == B600);
+ return 1;
+#else
+ return 0;
+#endif
+ case b1200:
+#if defined(B1200)
+ *b = ((t->c_cflag & B1200) == B1200);
+ return 1;
+#else
+ return 0;
+#endif
+ case b1800:
+#if defined(B1800)
+ *b = ((t->c_cflag & B1800) == B1800);
+ return 1;
+#else
+ return 0;
+#endif
+ case b2400:
+#if defined(B2400)
+ *b = ((t->c_cflag & B2400) == B2400);
+ return 1;
+#else
+ return 0;
+#endif
+ case b4800:
+#if defined(B4800)
+ *b = ((t->c_cflag & B4800) == B4800);
+ return 1;
+#else
+ return 0;
+#endif
+ case b9600:
+#if defined(B9600)
+ *b = ((t->c_cflag & B9600) == B9600);
+ return 1;
+#else
+ return 0;
+#endif
+ case b19200:
+#if defined(B19200)
+ *b = ((t->c_cflag & B19200) == B19200);
+ return 1;
+#else
+ return 0;
+#endif
+ case b38400:
+#if defined(B38400)
+ *b = ((t->c_cflag & B38400) == B38400);
+ return 1;
+#else
+ return 0;
+#endif
+ case b57600:
+#if defined(B57600)
+ *b = ((t->c_cflag & B57600) == B57600);
+ return 1;
+#else
+ return 0;
+#endif
+ case b115200:
+#if defined(B115200)
+ *b = ((t->c_cflag & B115200) == B115200);
+ return 1;
+#else
+ return 0;
+#endif
+ case b240400:
+#if defined(B230400)
+ *b = ((t->c_cflag & B230400) == B230400);
+ return 1;
+#else
+ return 0;
+#endif
+ case b460800:
+#if defined(B460800)
+ *b = ((t->c_cflag & B460800) == B460800);
+ return 1;
+#else
+ return 0;
+#endif
+ case b500000:
+#if defined(B500000)
+ *b = ((t->c_cflag & B500000) == B500000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b576000:
+#if defined(B576000)
+ *b = ((t->c_cflag & B576000) == B576000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b921600:
+#if defined(B921600)
+ *b = ((t->c_cflag & B921600) == B921600);
+ return 1;
+#else
+ return 0;
+#endif
+ case b1000000:
+#if defined(B1000000)
+ *b = ((t->c_cflag & B1000000) == B1000000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b1152000:
+#if defined(B1152000)
+ *b = ((t->c_cflag & B1152000) == B1152000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b1500000:
+#if defined(B1500000)
+ *b = ((t->c_cflag & B1500000) == B1500000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b2000000:
+#if defined(B2000000)
+ *b = ((t->c_cflag & B2000000) == B2000000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b2500000:
+#if defined(B2500000)
+ *b = ((t->c_cflag & B2500000) == B2500000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b3000000:
+#if defined(B3000000)
+ *b = ((t->c_cflag & B3000000) == B3000000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b3500000:
+#if defined(B3500000)
+ *b = ((t->c_cflag & B3500000) == B3500000);
+ return 1;
+#else
+ return 0;
+#endif
+ case b4000000:
+#if defined(B4000000)
+ *b = ((t->c_cflag & B4000000) == B4000000);
+ return 1;
+#else
+ return 0;
+#endif
+ case maxbaud:
+#if defined(__MAX_BAUD)
+ *b = ((t->c_cflag & __MAX_BAUD) == __MAX_BAUD);
+ return 1;
+#else
+ return 0;
+#endif
+ case crtscts:
+#if defined(CRTSCTS)
+ *b = ((t->c_cflag & CRTSCTS) == CRTSCTS);
+ return 1;
+#else
+ return 0;
+#endif
+ case cs5:
+#if defined(CS5)
+ *b = ((t->c_cflag & CS5) == CS5);
+ return 1;
+#else
+ return 0;
+#endif
+ case cs6:
+#if defined(CS6)
+ *b = ((t->c_cflag & CS6) == CS6);
+ return 1;
+#else
+ return 0;
+#endif
+ case cs7:
+#if defined(CS7)
+ *b = ((t->c_cflag & CS7) == CS7);
+ return 1;
+#else
+ return 0;
+#endif
+ case cs8:
+#if defined(CS8)
+ *b = ((t->c_cflag & CS8) == CS8);
+ return 1;
+#else
+ return 0;
+#endif
+ case cstopb:
+#if defined(CSTOPB)
+ *b = ((t->c_cflag & CSTOPB) == CSTOPB);
+ return 1;
+#else
+ return 0;
+#endif
+ case cread:
+#if defined(CREAD)
+ *b = ((t->c_cflag & CREAD) == CREAD);
+ return 1;
+#else
+ return 0;
+#endif
+ case parenb:
+#if defined(PARENB)
+ *b = ((t->c_cflag & PARENB) == PARENB);
+ return 1;
+#else
+ return 0;
+#endif
+ case parodd:
+#if defined(PARODD)
+ *b = ((t->c_cflag & PARODD) == PARODD);
+ return 1;
+#else
+ return 0;
+#endif
+ case hupcl:
+#if defined(HUPCL)
+ *b = ((t->c_cflag & HUPCL) == HUPCL);
+ return 1;
+#else
+ return 0;
+#endif
+ case clocal:
+#if defined(CLOCAL)
+ *b = ((t->c_cflag & CLOCAL) == CLOCAL);
+ return 1;
+#else
+ return 0;
+#endif
+ case lisig:
+#if defined(ISIG)
+ *b = ((t->c_lflag & ISIG) == ISIG);
+ return 1;
+#else
+ return 0;
+#endif
+ case licanon:
+#if defined(ICANON)
+ *b = ((t->c_lflag & ICANON) == ICANON);
+ return 1;
+#else
+ return 0;
+#endif
+ case lxcase:
+#if defined(XCASE)
+ *b = ((t->c_lflag & XCASE) == XCASE);
+ return 1;
+#else
+ return 0;
+#endif
+ case lecho:
+#if defined(ECHO)
+ *b = ((t->c_lflag & ECHO) == ECHO);
+ return 1;
+#else
+ return 0;
+#endif
+ case lechoe:
+#if defined(ECHOE)
+ *b = ((t->c_lflag & ECHOE) == ECHOE);
+ return 1;
+#else
+ return 0;
+#endif
+ case lechok:
+#if defined(ECHOK)
+ *b = ((t->c_lflag & ECHOK) == ECHOK);
+ return 1;
+#else
+ return 0;
+#endif
+ case lechonl:
+#if defined(ECHONL)
+ *b = ((t->c_lflag & ECHONL) == ECHONL);
+ return 1;
+#else
+ return 0;
+#endif
+ case lnoflsh:
+#if defined(NOFLSH)
+ *b = ((t->c_lflag & NOFLSH) == NOFLSH);
+ return 1;
+#else
+ return 0;
+#endif
+ case ltopstop:
+#if defined(TOSTOP)
+ *b = ((t->c_lflag & TOSTOP) == TOSTOP);
+ return 1;
+#else
+ return 0;
+#endif
+ case lechoctl:
+#if defined(ECHOCTL)
+ *b = ((t->c_lflag & ECHOCTL) == ECHOCTL);
+ return 1;
+#else
+ return 0;
+#endif
+ case lechoprt:
+#if defined(ECHOPRT)
+ *b = ((t->c_lflag & ECHOPRT) == ECHOPRT);
+ return 1;
+#else
+ return 0;
+#endif
+ case lechoke:
+#if defined(ECHOKE)
+ *b = ((t->c_lflag & ECHOKE) == ECHOKE);
+ return 1;
+#else
+ return 0;
+#endif
+ case lflusho:
+#if defined(FLUSHO)
+ *b = ((t->c_lflag & FLUSHO) == FLUSHO);
+ return 1;
+#else
+ return 0;
+#endif
+ case lpendin:
+#if defined(PENDIN)
+ *b = ((t->c_lflag & PENDIN) == PENDIN);
+ return 1;
+#else
+ return 0;
+#endif
+ case liexten:
+#if defined(IEXTEN)
+ *b = ((t->c_lflag & IEXTEN) == IEXTEN);
+ return 1;
+#else
+ return 0;
+#endif
+ }
+ return 0;
+}
+
+/* SetFlag - sets a flag value in, t, to, b, and returns TRUE if this
+ flag value is supported. */
+
+int
+EXPORT (SetFlag) (struct termios *t, Flag f, int b)
+{
+ switch (f)
+ {
+ case ignbrk:
+#if defined(IGNBRK)
+ return doSetUnset (&t->c_iflag, IGNBRK, b);
+#else
+ return 0;
+#endif
+ case ibrkint:
+#if defined(BRKINT)
+ return doSetUnset (&t->c_iflag, BRKINT, b);
+#else
+ return 0;
+#endif
+ case ignpar:
+#if defined(IGNPAR)
+ return doSetUnset (&t->c_iflag, IGNPAR, b);
+#else
+ return 0;
+#endif
+ case iparmrk:
+#if defined(PARMRK)
+ return doSetUnset (&t->c_iflag, PARMRK, b);
+#else
+ return 0;
+#endif
+ case inpck:
+#if defined(INPCK)
+ return doSetUnset (&t->c_iflag, INPCK, b);
+#else
+ return 0;
+#endif
+ case istrip:
+#if defined(ISTRIP)
+ return doSetUnset (&t->c_iflag, ISTRIP, b);
+#else
+ return 0;
+#endif
+ case inlcr:
+#if defined(INLCR)
+ return doSetUnset (&t->c_iflag, INLCR, b);
+#else
+ return 0;
+#endif
+ case igncr:
+#if defined(IGNCR)
+ return doSetUnset (&t->c_iflag, IGNCR, b);
+#else
+ return 0;
+#endif
+ case icrnl:
+#if defined(ICRNL)
+ return doSetUnset (&t->c_iflag, ICRNL, b);
+#else
+ return 0;
+#endif
+ case iuclc:
+#if defined(IUCLC)
+ return doSetUnset (&t->c_iflag, IUCLC, b);
+#else
+ return 0;
+#endif
+ case ixon:
+#if defined(IXON)
+ return doSetUnset (&t->c_iflag, IXON, b);
+#else
+ return 0;
+#endif
+ case ixany:
+#if defined(IXANY)
+ return doSetUnset (&t->c_iflag, IXANY, b);
+#else
+ return 0;
+#endif
+ case ixoff:
+#if defined(IXOFF)
+ return doSetUnset (&t->c_iflag, IXOFF, b);
+#else
+ return 0;
+#endif
+ case imaxbel:
+#if defined(IMAXBEL)
+ return doSetUnset (&t->c_iflag, IMAXBEL, b);
+#else
+ return 0;
+#endif
+ case opost:
+#if defined(OPOST)
+ return doSetUnset (&t->c_oflag, OPOST, b);
+#else
+ return 0;
+#endif
+ case olcuc:
+#if defined(OLCUC)
+ return doSetUnset (&t->c_oflag, OLCUC, b);
+#else
+ return 0;
+#endif
+ case onlcr:
+#if defined(ONLCR)
+ return doSetUnset (&t->c_oflag, ONLCR, b);
+#else
+ return 0;
+#endif
+ case ocrnl:
+#if defined(OCRNL)
+ return doSetUnset (&t->c_oflag, OCRNL, b);
+#else
+ return 0;
+#endif
+ case onocr:
+#if defined(ONOCR)
+ return doSetUnset (&t->c_oflag, ONOCR, b);
+#else
+ return 0;
+#endif
+ case onlret:
+#if defined(ONLRET)
+ return doSetUnset (&t->c_oflag, ONLRET, b);
+#else
+ return 0;
+#endif
+ case ofill:
+#if defined(OFILL)
+ return doSetUnset (&t->c_oflag, OFILL, b);
+#else
+ return 0;
+#endif
+ case ofdel:
+#if defined(OFDEL)
+ return doSetUnset (&t->c_oflag, OFDEL, b);
+#else
+ return 0;
+#endif
+ case onl0:
+#if defined(NL0)
+ return doSetUnset (&t->c_oflag, NL0, b);
+#else
+ return 0;
+#endif
+ case onl1:
+#if defined(NL1)
+ return doSetUnset (&t->c_oflag, NL1, b);
+#else
+ return 0;
+#endif
+ case ocr0:
+#if defined(CR0)
+ return doSetUnset (&t->c_oflag, CR0, b);
+#else
+ return 0;
+#endif
+ case ocr1:
+#if defined(CR1)
+ return doSetUnset (&t->c_oflag, CR1, b);
+#else
+ return 0;
+#endif
+ case ocr2:
+#if defined(CR2)
+ return doSetUnset (&t->c_oflag, CR2, b);
+#else
+ return 0;
+#endif
+ case ocr3:
+#if defined(CR3)
+ return doSetUnset (&t->c_oflag, CR3, b);
+#else
+ return 0;
+#endif
+ case otab0:
+#if defined(TAB0)
+ return doSetUnset (&t->c_oflag, TAB0, b);
+#else
+ return 0;
+#endif
+ case otab1:
+#if defined(TAB1)
+ return doSetUnset (&t->c_oflag, TAB1, b);
+#else
+ return 0;
+#endif
+ case otab2:
+#if defined(TAB2)
+ return doSetUnset (&t->c_oflag, TAB2, b);
+#else
+ return 0;
+#endif
+ case otab3:
+#if defined(TAB3)
+ return doSetUnset (&t->c_oflag, TAB3, b);
+#else
+ return 0;
+#endif
+ case obs0:
+#if defined(BS0)
+ return doSetUnset (&t->c_oflag, BS0, b);
+#else
+ return 0;
+#endif
+ case obs1:
+#if defined(BS1)
+ return doSetUnset (&t->c_oflag, BS1, b);
+#else
+ return 0;
+#endif
+ case off0:
+#if defined(FF0)
+ return doSetUnset (&t->c_oflag, FF0, b);
+#else
+ return 0;
+#endif
+ case off1:
+#if defined(FF1)
+ return doSetUnset (&t->c_oflag, FF1, b);
+#else
+ return 0;
+#endif
+ case ovt0:
+#if defined(VT0)
+ return doSetUnset (&t->c_oflag, VT0, b);
+#else
+ return 0;
+#endif
+ case ovt1:
+#if defined(VT1)
+ return doSetUnset (&t->c_oflag, VT1, b);
+#else
+ return 0;
+#endif
+ case b0:
+#if defined(B0)
+ return doSetUnset (&t->c_cflag, B0, b);
+#else
+ return 0;
+#endif
+ case b50:
+#if defined(B50)
+ return doSetUnset (&t->c_cflag, B50, b);
+#else
+ return 0;
+#endif
+ case b75:
+#if defined(B75)
+ return doSetUnset (&t->c_cflag, B75, b);
+#else
+ return 0;
+#endif
+ case b110:
+#if defined(B110)
+ return doSetUnset (&t->c_cflag, B110, b);
+#else
+ return 0;
+#endif
+ case b135:
+#if defined(B134)
+ return doSetUnset (&t->c_cflag, B134, b);
+#else
+ return 0;
+#endif
+ case b150:
+#if defined(B150)
+ return doSetUnset (&t->c_cflag, B150, b);
+#else
+ return 0;
+#endif
+ case b200:
+#if defined(B200)
+ return doSetUnset (&t->c_cflag, B200, b);
+#else
+ return 0;
+#endif
+ case b300:
+#if defined(B300)
+ return doSetUnset (&t->c_cflag, B300, b);
+#else
+ return 0;
+#endif
+ case b600:
+#if defined(B600)
+ return doSetUnset (&t->c_cflag, B600, b);
+#else
+ return 0;
+#endif
+ case b1200:
+#if defined(B1200)
+ return doSetUnset (&t->c_cflag, B1200, b);
+#else
+ return 0;
+#endif
+ case b1800:
+#if defined(B1800)
+ return doSetUnset (&t->c_cflag, B1800, b);
+#else
+ return 0;
+#endif
+ case b2400:
+#if defined(B2400)
+ return doSetUnset (&t->c_cflag, B2400, b);
+#else
+ return 0;
+#endif
+ case b4800:
+#if defined(B4800)
+ return doSetUnset (&t->c_cflag, B4800, b);
+#else
+ return 0;
+#endif
+ case b9600:
+#if defined(B9600)
+ return doSetUnset (&t->c_cflag, B9600, b);
+#else
+ return 0;
+#endif
+ case b19200:
+#if defined(B19200)
+ return doSetUnset (&t->c_cflag, B19200, b);
+#else
+ return 0;
+#endif
+ case b38400:
+#if defined(B38400)
+ return doSetUnset (&t->c_cflag, B38400, b);
+#else
+ return 0;
+#endif
+ case b57600:
+#if defined(B57600)
+ return doSetUnset (&t->c_cflag, B57600, b);
+#else
+ return 0;
+#endif
+ case b115200:
+#if defined(B115200)
+ return doSetUnset (&t->c_cflag, B115200, b);
+#else
+ return 0;
+#endif
+ case b240400:
+#if defined(B230400)
+ return doSetUnset (&t->c_cflag, B230400, b);
+#else
+ return 0;
+#endif
+ case b460800:
+#if defined(B460800)
+ return doSetUnset (&t->c_cflag, B460800, b);
+#else
+ return 0;
+#endif
+ case b500000:
+#if defined(B500000)
+ return doSetUnset (&t->c_cflag, B500000, b);
+#else
+ return 0;
+#endif
+ case b576000:
+#if defined(B576000)
+ return doSetUnset (&t->c_cflag, B576000, b);
+#else
+ return 0;
+#endif
+ case b921600:
+#if defined(B921600)
+ return doSetUnset (&t->c_cflag, B921600, b);
+#else
+ return 0;
+#endif
+ case b1000000:
+#if defined(B1000000)
+ return doSetUnset (&t->c_cflag, B1000000, b);
+#else
+ return 0;
+#endif
+ case b1152000:
+#if defined(B1152000)
+ return doSetUnset (&t->c_cflag, B1152000, b);
+#else
+ return 0;
+#endif
+ case b1500000:
+#if defined(B1500000)
+ return doSetUnset (&t->c_cflag, B1500000, b);
+#else
+ return 0;
+#endif
+ case b2000000:
+#if defined(B2000000)
+ return doSetUnset (&t->c_cflag, B2000000, b);
+#else
+ return 0;
+#endif
+ case b2500000:
+#if defined(B2500000)
+ return doSetUnset (&t->c_cflag, B2500000, b);
+#else
+ return 0;
+#endif
+ case b3000000:
+#if defined(B3000000)
+ return doSetUnset (&t->c_cflag, B3000000, b);
+#else
+ return 0;
+#endif
+ case b3500000:
+#if defined(B3500000)
+ return doSetUnset (&t->c_cflag, B3500000, b);
+#else
+ return 0;
+#endif
+ case b4000000:
+#if defined(B4000000)
+ return doSetUnset (&t->c_cflag, B4000000, b);
+#else
+ return 0;
+#endif
+ case maxbaud:
+#if defined(__MAX_BAUD)
+ return doSetUnset (&t->c_cflag, __MAX_BAUD, b);
+#else
+ return 0;
+#endif
+ case crtscts:
+#if defined(CRTSCTS)
+ return doSetUnset (&t->c_cflag, CRTSCTS, b);
+#else
+ return 0;
+#endif
+ case cs5:
+#if defined(CS5)
+ return doSetUnset (&t->c_cflag, CS5, b);
+#else
+ return 0;
+#endif
+ case cs6:
+#if defined(CS6)
+ return doSetUnset (&t->c_cflag, CS6, b);
+#else
+ return 0;
+#endif
+ case cs7:
+#if defined(CS7)
+ return doSetUnset (&t->c_cflag, CS7, b);
+#else
+ return 0;
+#endif
+ case cs8:
+#if defined(CS8)
+ return doSetUnset (&t->c_cflag, CS8, b);
+#else
+ return 0;
+#endif
+ case cstopb:
+#if defined(CSTOPB)
+ return doSetUnset (&t->c_cflag, CSTOPB, b);
+#else
+ return 0;
+#endif
+ case cread:
+#if defined(CREAD)
+ return doSetUnset (&t->c_cflag, CREAD, b);
+#else
+ return 0;
+#endif
+ case parenb:
+#if defined(PARENB)
+ return doSetUnset (&t->c_cflag, PARENB, b);
+#else
+ return 0;
+#endif
+ case parodd:
+#if defined(PARODD)
+ return doSetUnset (&t->c_cflag, PARODD, b);
+#else
+ return 0;
+#endif
+ case hupcl:
+#if defined(HUPCL)
+ return doSetUnset (&t->c_cflag, HUPCL, b);
+#else
+ return 0;
+#endif
+ case clocal:
+#if defined(CLOCAL)
+ return doSetUnset (&t->c_cflag, CLOCAL, b);
+#else
+ return 0;
+#endif
+ case lisig:
+#if defined(ISIG)
+ return doSetUnset (&t->c_lflag, ISIG, b);
+#else
+ return 0;
+#endif
+ case licanon:
+#if defined(ICANON)
+ return doSetUnset (&t->c_lflag, ICANON, b);
+#else
+ return 0;
+#endif
+ case lxcase:
+#if defined(XCASE)
+ return doSetUnset (&t->c_lflag, XCASE, b);
+#else
+ return 0;
+#endif
+ case lecho:
+#if defined(ECHO)
+ return doSetUnset (&t->c_lflag, ECHO, b);
+#else
+ return 0;
+#endif
+ case lechoe:
+#if defined(ECHOE)
+ return doSetUnset (&t->c_lflag, ECHOE, b);
+#else
+ return 0;
+#endif
+ case lechok:
+#if defined(ECHOK)
+ return doSetUnset (&t->c_lflag, ECHOK, b);
+#else
+ return 0;
+#endif
+ case lechonl:
+#if defined(ECHONL)
+ return doSetUnset (&t->c_lflag, ECHONL, b);
+#else
+ return 0;
+#endif
+ case lnoflsh:
+#if defined(NOFLSH)
+ return doSetUnset (&t->c_lflag, NOFLSH, b);
+#else
+ return 0;
+#endif
+ case ltopstop:
+#if defined(TOSTOP)
+ return doSetUnset (&t->c_lflag, TOSTOP, b);
+#else
+ return 0;
+#endif
+ case lechoctl:
+#if defined(ECHOCTL)
+ return doSetUnset (&t->c_lflag, ECHOCTL, b);
+#else
+ return 0;
+#endif
+ case lechoprt:
+#if defined(ECHOPRT)
+ return doSetUnset (&t->c_lflag, ECHOPRT, b);
+#else
+ return 0;
+#endif
+ case lechoke:
+#if defined(ECHOKE)
+ return doSetUnset (&t->c_lflag, ECHOKE, b);
+#else
+ return 0;
+#endif
+ case lflusho:
+#if defined(FLUSHO)
+ return doSetUnset (&t->c_lflag, FLUSHO, b);
+#else
+ return 0;
+#endif
+ case lpendin:
+#if defined(PENDIN)
+ return doSetUnset (&t->c_lflag, PENDIN, b);
+#else
+ return 0;
+#endif
+ case liexten:
+#if defined(IEXTEN)
+ return doSetUnset (&t->c_lflag, IEXTEN, b);
+#else
+ return 0;
+#endif
+ }
+ return 0;
+}
+
+/* GetChar - sets a CHAR, ch, value from, t, and returns TRUE if this
+ value is supported. */
+
+int
+EXPORT (GetChar) (struct termios *t, ControlChar c, char *ch)
+{
+ switch (c)
+ {
+
+ case vintr:
+#if defined(VINTR)
+ *ch = t->c_cc[VINTR];
+ return 1;
+#else
+ return 0;
+#endif
+ case vquit:
+#if defined(VQUIT)
+ *ch = t->c_cc[VQUIT];
+ return 1;
+#else
+ return 0;
+#endif
+ case verase:
+#if defined(VERASE)
+ *ch = t->c_cc[VERASE];
+ return 1;
+#else
+ return 0;
+#endif
+ case vkill:
+#if defined(VKILL)
+ *ch = t->c_cc[VKILL];
+ return 1;
+#else
+ return 0;
+#endif
+ case veof:
+#if defined(VEOF)
+ *ch = t->c_cc[VEOF];
+ return 1;
+#else
+ return 0;
+#endif
+ case vtime:
+#if defined(VTIME)
+ *ch = t->c_cc[VTIME];
+ return 1;
+#else
+ return 0;
+#endif
+ case vmin:
+#if defined(VMIN)
+ *ch = t->c_cc[VMIN];
+ return 1;
+#else
+ return 0;
+#endif
+ case vswtc:
+#if defined(VSWTC)
+ *ch = t->c_cc[VSWTC];
+ return 1;
+#else
+ return 0;
+#endif
+ case vstart:
+#if defined(VSTART)
+ *ch = t->c_cc[VSTART];
+ return 1;
+#else
+ return 0;
+#endif
+ case vstop:
+#if defined(VSTOP)
+ *ch = t->c_cc[VSTOP];
+ return 1;
+#else
+ return 0;
+#endif
+ case vsusp:
+#if defined(VSUSP)
+ *ch = t->c_cc[VSUSP];
+ return 1;
+#else
+ return 0;
+#endif
+ case veol:
+#if defined(VEOL)
+ *ch = t->c_cc[VEOL];
+ return 1;
+#else
+ return 0;
+#endif
+ case vreprint:
+#if defined(VREPRINT)
+ *ch = t->c_cc[VREPRINT];
+ return 1;
+#else
+ return 0;
+#endif
+ case vdiscard:
+#if defined(VDISCARD)
+ *ch = t->c_cc[VDISCARD];
+ return 1;
+#else
+ return 0;
+#endif
+ case vwerase:
+#if defined(VWERASE)
+ *ch = t->c_cc[VWERASE];
+ return 1;
+#else
+ return 0;
+#endif
+ case vlnext:
+#if defined(VLNEXT)
+ *ch = t->c_cc[VLNEXT];
+ return 1;
+#else
+ return 0;
+#endif
+ case veol2:
+#if defined(VEOL2)
+ *ch = t->c_cc[VEOL2];
+ return 1;
+#else
+ return 0;
+#endif
+ default:
+ return 0;
+ }
+}
+
+/* SetChar - sets a CHAR value in, t, and returns TRUE if, c, is
+ supported. */
+
+int
+EXPORT (SetChar) (struct termios *t, ControlChar c, char ch)
+{
+ switch (c)
+ {
+
+ case vintr:
+#if defined(VINTR)
+ t->c_cc[VINTR] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vquit:
+#if defined(VQUIT)
+ t->c_cc[VQUIT] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case verase:
+#if defined(VERASE)
+ t->c_cc[VERASE] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vkill:
+#if defined(VKILL)
+ t->c_cc[VKILL] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case veof:
+#if defined(VEOF)
+ t->c_cc[VEOF] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vtime:
+#if defined(VTIME)
+ t->c_cc[VTIME] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vmin:
+#if defined(VMIN)
+ t->c_cc[VMIN] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vswtc:
+#if defined(VSWTC)
+ t->c_cc[VSWTC] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vstart:
+#if defined(VSTART)
+ t->c_cc[VSTART] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vstop:
+#if defined(VSTOP)
+ t->c_cc[VSTOP] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vsusp:
+#if defined(VSUSP)
+ t->c_cc[VSUSP] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case veol:
+#if defined(VEOL)
+ t->c_cc[VEOL] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vreprint:
+#if defined(VREPRINT)
+ t->c_cc[VREPRINT] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vdiscard:
+#if defined(VDISCARD)
+ t->c_cc[VDISCARD] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vwerase:
+#if defined(VWERASE)
+ t->c_cc[VWERASE] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case vlnext:
+#if defined(VLNEXT)
+ t->c_cc[VLNEXT] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ case veol2:
+#if defined(VEOL2)
+ t->c_cc[VEOL2] = ch;
+ return 1;
+#else
+ return 0;
+#endif
+ default:
+ return 0;
+ }
+}
+
+void
+_M2_termios_init (void)
+{
+}
+
+void
+_M2_termios_finish (void)
+{
+}
+
+#ifdef __cplusplus
+}
+#endif