
13 regression failures seen on sparc SIGBUS in m2pim_ldtoa_ldtoa. This patch fixes int bool parameter mismatches between the definition modules and their C/C++ implementations. gcc/m2/ChangeLog: PR modula2/109125 * gm2-libs-ch/cgetopt.c (cgetopt_SetOption): Replace int for bool. * gm2-libs-ch/termios.c (doSetUnset): Replace int for bool. * gm2-libs/Builtins.mod (isfinitef): Correct typo in return statement. libgm2/ChangeLog: PR modula2/109125 * libm2iso/ErrnoCategory.cc (FALSE): Remove. (TRUE): Remove. * libm2iso/wrapsock.c (TRUE): Remove. (FALSE): Remove. * libm2iso/wraptime.cc (TRUE): Remove. (FALSE): Remove. * libm2pim/cgetopt.cc: Replace int for bool for every BOOLEAN parameter in the definition module. * libm2pim/dtoa.cc: Ditto. * libm2pim/ldtoa.cc: Ditto. * libm2pim/termios.cc: Ditto. (doSetUnset): Replace int for bool. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
1987 lines
36 KiB
C++
1987 lines
36 KiB
C++
/* termios.cc provide access to the terminal.
|
|
|
|
Copyright (C) 2010-2022 Free Software Foundation, Inc.
|
|
Contributed by Gaius Mulley <gaius.mulley@southwales.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.
|
|
|
|
Under Section 7 of GPL version 3, you are granted additional
|
|
permissions described in the GCC Runtime Library Exception, version
|
|
3.1, as published by the Free Software Foundation.
|
|
|
|
You should have received a copy of the GNU General Public License and
|
|
a copy of the GCC Runtime Library Exception along with this program;
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#include <config.h>
|
|
#include <m2rts.h>
|
|
|
|
#define EXPORT(FUNC) m2pim ## _termios_ ## FUNC
|
|
#define M2EXPORT(FUNC) m2pim ## _M2_termios_ ## FUNC
|
|
#define M2LIBNAME "m2pim"
|
|
|
|
#if defined(HAVE_STDIO_H)
|
|
#include <stdio.h>
|
|
#endif
|
|
#if defined(HAVE_STDARG_H)
|
|
#include <stdarg.h>
|
|
#endif
|
|
#if defined(HAVE_STDLIB_H)
|
|
#include <stdlib.h>
|
|
#endif
|
|
#if defined(HAVE_STRING_H)
|
|
#include <string.h>
|
|
#endif
|
|
#if defined(HAVE_STRINGS_H)
|
|
#include <strings.h>
|
|
#endif
|
|
|
|
#ifdef TERMIOS_NEEDS_XOPEN_SOURCE
|
|
#define _XOPEN_SOURCE
|
|
#endif
|
|
|
|
#if defined(HAVE_SYS_TYPES_H)
|
|
#include <sys/types.h>
|
|
#endif
|
|
|
|
#if defined(HAVE_TERMIOS_H)
|
|
#include <termios.h>
|
|
#endif
|
|
|
|
void _M2_termios_init (void);
|
|
void _M2_termios_finish (void);
|
|
|
|
#if defined(HAVE_TERMIOS_H)
|
|
|
|
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;
|
|
|
|
/* Prototypes. */
|
|
extern "C" void *EXPORT (InitTermios) (void);
|
|
extern "C" void *EXPORT (KillTermios) (struct termios *p);
|
|
extern "C" int EXPORT (cfgetospeed) (struct termios *t);
|
|
extern "C" int EXPORT (cfgetispeed) (struct termios *t);
|
|
extern "C" int EXPORT (cfsetospeed) (struct termios *t, unsigned int b);
|
|
extern "C" int EXPORT (cfsetispeed) (struct termios *t, unsigned int b);
|
|
extern "C" int EXPORT (cfsetspeed) (struct termios *t, unsigned int b);
|
|
extern "C" int EXPORT (tcgetattr) (int fd, struct termios *t);
|
|
extern "C" int EXPORT (tcsetattr) (int fd, int option, struct termios *t);
|
|
extern "C" void EXPORT (cfmakeraw) (struct termios *t);
|
|
extern "C" int EXPORT (tcsendbreak) (int fd, int duration);
|
|
extern "C" int EXPORT (tcdrain) (int fd);
|
|
extern "C" int EXPORT (tcflushi) (int fd);
|
|
extern "C" int EXPORT (tcflusho) (int fd);
|
|
extern "C" int EXPORT (tcflushio) (int fd);
|
|
extern "C" int EXPORT (tcflowoni) (int fd);
|
|
extern "C" int EXPORT (tcflowoffi) (int fd);
|
|
extern "C" int EXPORT (tcflowono) (int fd);
|
|
extern "C" int EXPORT (tcflowoffo) (int fd);
|
|
extern "C" bool EXPORT (GetFlag) (struct termios *t, Flag f, bool *b);
|
|
extern "C" bool EXPORT (SetFlag) (struct termios *t, Flag f, bool b);
|
|
extern "C" bool EXPORT (GetChar) (struct termios *t, ControlChar c, char *ch);
|
|
extern "C" bool EXPORT (SetChar) (struct termios *t, ControlChar c, char ch);
|
|
extern "C" int EXPORT (tcsnow) (void);
|
|
extern "C" int EXPORT (tcsflush) (void);
|
|
extern "C" int EXPORT (tcsdrain) (void);
|
|
extern "C" bool doSetUnset (tcflag_t *bitset, unsigned int mask, bool value);
|
|
|
|
/* InitTermios new data structure. */
|
|
|
|
extern "C" 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. */
|
|
|
|
extern "C" void*
|
|
EXPORT (KillTermios) (struct termios *p)
|
|
{
|
|
free (p);
|
|
return NULL;
|
|
}
|
|
|
|
/* tcsnow return the value of TCSANOW. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcsnow) (void) { return TCSANOW; }
|
|
|
|
/* tcsdrain return the value of TCSADRAIN. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcsdrain) (void) { return TCSADRAIN; }
|
|
|
|
/* tcsflush return the value of TCSAFLUSH. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcsflush) (void) { return TCSAFLUSH; }
|
|
|
|
/* cfgetospeed return output baud rate. */
|
|
|
|
extern "C" int
|
|
EXPORT (cfgetospeed) (struct termios *t) { return cfgetospeed (t); }
|
|
|
|
/* cfgetispeed return input baud rate. */
|
|
|
|
extern "C" int
|
|
EXPORT (cfgetispeed) (struct termios *t) { return cfgetispeed (t); }
|
|
|
|
/* cfsetospeed set output baud rate. */
|
|
|
|
extern "C" int
|
|
EXPORT (cfsetospeed) (struct termios *t, unsigned int b)
|
|
{
|
|
return cfsetospeed (t, b);
|
|
}
|
|
|
|
/* cfsetispeed set input baud rate. */
|
|
|
|
extern "C" int
|
|
EXPORT (cfsetispeed) (struct termios *t, unsigned int b)
|
|
{
|
|
return cfsetispeed (t, b);
|
|
}
|
|
|
|
/* cfsetspeed set input and output baud rate. */
|
|
|
|
extern "C" 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. */
|
|
|
|
extern "C" 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. */
|
|
|
|
extern "C" void
|
|
EXPORT (cfmakeraw) (struct termios *t)
|
|
{
|
|
#if defined(HAVE_CFMAKERAW)
|
|
return cfmakeraw (t);
|
|
#endif
|
|
}
|
|
|
|
/* tcsendbreak send zero bits for duration. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcsendbreak) (int fd, int duration)
|
|
{
|
|
return tcsendbreak (fd, duration);
|
|
}
|
|
|
|
/* tcdrain waits for pending output to be written on, fd. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcdrain) (int fd) { return tcdrain (fd); }
|
|
|
|
/* tcflushi flush input. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcflushi) (int fd)
|
|
{
|
|
#if defined(TCIFLUSH)
|
|
return tcflush (fd, TCIFLUSH);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
/* tcflusho flush output. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcflusho) (int fd)
|
|
{
|
|
#if defined(TCOFLUSH)
|
|
return tcflush (fd, TCOFLUSH);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
/* tcflushio flush input and output. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcflushio) (int fd)
|
|
{
|
|
#if defined(TCIOFLUSH)
|
|
return tcflush (fd, TCIOFLUSH);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
/* tcflowoni restart input on, fd. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcflowoni) (int fd)
|
|
{
|
|
#if defined(TCION)
|
|
return tcflow (fd, TCION);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
/* tcflowoffi stop input on, fd. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcflowoffi) (int fd)
|
|
{
|
|
#if defined(TCIOFF)
|
|
return tcflow (fd, TCIOFF);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
/* tcflowono restart output on, fd. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcflowono) (int fd)
|
|
{
|
|
#if defined(TCOON)
|
|
return tcflow (fd, TCOON);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
/* tcflowoffo stop output on, fd. */
|
|
|
|
extern "C" int
|
|
EXPORT (tcflowoffo) (int fd)
|
|
{
|
|
#if defined(TCOOFF)
|
|
return tcflow (fd, TCOOFF);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
/* doSetUnset applies mask or undoes mask depending upon value and returns true. */
|
|
|
|
extern "C" bool
|
|
doSetUnset (tcflag_t *bitset, unsigned int mask, bool value)
|
|
{
|
|
if (value)
|
|
(*bitset) |= mask;
|
|
else
|
|
(*bitset) &= (~mask);
|
|
return true;
|
|
}
|
|
|
|
/* GetFlag sets a flag value from t in b and returns true if t supports f. */
|
|
|
|
extern "C" bool
|
|
EXPORT (GetFlag) (struct termios *t, Flag f, bool *b)
|
|
{
|
|
switch (f)
|
|
{
|
|
|
|
case ignbrk:
|
|
#if defined(IGNBRK)
|
|
*b = ((t->c_iflag & IGNBRK) == IGNBRK);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ibrkint:
|
|
#if defined(BRKINT)
|
|
*b = ((t->c_iflag & BRKINT) == BRKINT);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ignpar:
|
|
#if defined(IGNPAR)
|
|
*b = ((t->c_iflag & IGNPAR) == IGNPAR);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case iparmrk:
|
|
#if defined(PARMRK)
|
|
*b = ((t->c_iflag & PARMRK) == PARMRK);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case inpck:
|
|
#if defined(INPCK)
|
|
*b = ((t->c_iflag & INPCK) == INPCK);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case istrip:
|
|
#if defined(ISTRIP)
|
|
*b = ((t->c_iflag & ISTRIP) == ISTRIP);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case inlcr:
|
|
#if defined(INLCR)
|
|
*b = ((t->c_iflag & INLCR) == INLCR);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case igncr:
|
|
#if defined(IGNCR)
|
|
*b = ((t->c_iflag & IGNCR) == IGNCR);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case icrnl:
|
|
#if defined(ICRNL)
|
|
*b = ((t->c_iflag & ICRNL) == ICRNL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case iuclc:
|
|
#if defined(IUCLC)
|
|
*b = ((t->c_iflag & IUCLC) == IUCLC);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ixon:
|
|
#if defined(IXON)
|
|
*b = ((t->c_iflag & IXON) == IXON);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ixany:
|
|
#if defined(IXANY)
|
|
*b = ((t->c_iflag & IXANY) == IXANY);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ixoff:
|
|
#if defined(IXOFF)
|
|
*b = ((t->c_iflag & IXOFF) == IXOFF);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case imaxbel:
|
|
#if defined(IMAXBEL)
|
|
*b = ((t->c_iflag & IMAXBEL) == IMAXBEL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case opost:
|
|
#if defined(OPOST)
|
|
*b = ((t->c_oflag & OPOST) == OPOST);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case olcuc:
|
|
#if defined(OLCUC)
|
|
*b = ((t->c_oflag & OLCUC) == OLCUC);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onlcr:
|
|
#if defined(ONLCR)
|
|
*b = ((t->c_oflag & ONLCR) == ONLCR);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocrnl:
|
|
#if defined(OCRNL)
|
|
*b = ((t->c_oflag & OCRNL) == OCRNL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onocr:
|
|
#if defined(ONOCR)
|
|
*b = ((t->c_oflag & ONOCR) == ONOCR);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onlret:
|
|
#if defined(ONLRET)
|
|
*b = ((t->c_oflag & ONLRET) == ONLRET);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ofill:
|
|
#if defined(OFILL)
|
|
*b = ((t->c_oflag & OFILL) == OFILL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ofdel:
|
|
#if defined(OFDEL)
|
|
*b = ((t->c_oflag & OFDEL) == OFDEL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onl0:
|
|
#if defined(NL0)
|
|
*b = ((t->c_oflag & NL0) == NL0);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onl1:
|
|
#if defined(NL1)
|
|
*b = ((t->c_oflag & NL1) == NL1);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr0:
|
|
#if defined(CR0)
|
|
*b = ((t->c_oflag & CR0) == CR0);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr1:
|
|
#if defined(CR1)
|
|
*b = ((t->c_oflag & CR1) == CR1);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr2:
|
|
#if defined(CR2)
|
|
*b = ((t->c_oflag & CR2) == CR2);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr3:
|
|
#if defined(CR3)
|
|
*b = ((t->c_oflag & CR3) == CR3);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab0:
|
|
#if defined(TAB0)
|
|
*b = ((t->c_oflag & TAB0) == TAB0);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab1:
|
|
#if defined(TAB1)
|
|
*b = ((t->c_oflag & TAB1) == TAB1);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab2:
|
|
#if defined(TAB2)
|
|
*b = ((t->c_oflag & TAB2) == TAB2);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab3:
|
|
#if defined(TAB3)
|
|
*b = ((t->c_oflag & TAB3) == TAB3);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case obs0:
|
|
#if defined(BS0)
|
|
*b = ((t->c_oflag & BS0) == BS0);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case obs1:
|
|
#if defined(BS1)
|
|
*b = ((t->c_oflag & BS1) == BS1);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case off0:
|
|
#if defined(FF0)
|
|
*b = ((t->c_oflag & FF0) == FF0);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case off1:
|
|
#if defined(FF1)
|
|
*b = ((t->c_oflag & FF1) == FF1);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ovt0:
|
|
#if defined(VT0)
|
|
*b = ((t->c_oflag & VT0) == VT0);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ovt1:
|
|
#if defined(VT1)
|
|
*b = ((t->c_oflag & VT1) == VT1);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b0:
|
|
#if defined(B0)
|
|
*b = ((t->c_cflag & B0) == B0);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b50:
|
|
#if defined(B50)
|
|
*b = ((t->c_cflag & B50) == B50);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b75:
|
|
#if defined(B75)
|
|
*b = ((t->c_cflag & B75) == B75);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b110:
|
|
#if defined(B110)
|
|
*b = ((t->c_cflag & B110) == B110);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b135:
|
|
#if defined(B134)
|
|
*b = ((t->c_cflag & B134) == B134);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b150:
|
|
#if defined(B150)
|
|
*b = ((t->c_cflag & B150) == B150);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b200:
|
|
#if defined(B200)
|
|
*b = ((t->c_cflag & B200) == B200);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b300:
|
|
#if defined(B300)
|
|
*b = ((t->c_cflag & B300) == B300);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b600:
|
|
#if defined(B600)
|
|
*b = ((t->c_cflag & B600) == B600);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1200:
|
|
#if defined(B1200)
|
|
*b = ((t->c_cflag & B1200) == B1200);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1800:
|
|
#if defined(B1800)
|
|
*b = ((t->c_cflag & B1800) == B1800);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b2400:
|
|
#if defined(B2400)
|
|
*b = ((t->c_cflag & B2400) == B2400);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b4800:
|
|
#if defined(B4800)
|
|
*b = ((t->c_cflag & B4800) == B4800);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b9600:
|
|
#if defined(B9600)
|
|
*b = ((t->c_cflag & B9600) == B9600);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b19200:
|
|
#if defined(B19200)
|
|
*b = ((t->c_cflag & B19200) == B19200);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b38400:
|
|
#if defined(B38400)
|
|
*b = ((t->c_cflag & B38400) == B38400);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b57600:
|
|
#if defined(B57600)
|
|
*b = ((t->c_cflag & B57600) == B57600);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b115200:
|
|
#if defined(B115200)
|
|
*b = ((t->c_cflag & B115200) == B115200);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b240400:
|
|
#if defined(B230400)
|
|
*b = ((t->c_cflag & B230400) == B230400);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b460800:
|
|
#if defined(B460800)
|
|
*b = ((t->c_cflag & B460800) == B460800);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b500000:
|
|
#if defined(B500000)
|
|
*b = ((t->c_cflag & B500000) == B500000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b576000:
|
|
#if defined(B576000)
|
|
*b = ((t->c_cflag & B576000) == B576000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b921600:
|
|
#if defined(B921600)
|
|
*b = ((t->c_cflag & B921600) == B921600);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1000000:
|
|
#if defined(B1000000)
|
|
*b = ((t->c_cflag & B1000000) == B1000000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1152000:
|
|
#if defined(B1152000)
|
|
*b = ((t->c_cflag & B1152000) == B1152000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1500000:
|
|
#if defined(B1500000)
|
|
*b = ((t->c_cflag & B1500000) == B1500000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b2000000:
|
|
#if defined(B2000000)
|
|
*b = ((t->c_cflag & B2000000) == B2000000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b2500000:
|
|
#if defined(B2500000)
|
|
*b = ((t->c_cflag & B2500000) == B2500000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b3000000:
|
|
#if defined(B3000000)
|
|
*b = ((t->c_cflag & B3000000) == B3000000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b3500000:
|
|
#if defined(B3500000)
|
|
*b = ((t->c_cflag & B3500000) == B3500000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b4000000:
|
|
#if defined(B4000000)
|
|
*b = ((t->c_cflag & B4000000) == B4000000);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case maxbaud:
|
|
#if defined(MAX)
|
|
*b = ((t->c_cflag & __MAX_BAUD) == __MAX_BAUD);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case crtscts:
|
|
#if defined(CRTSCTS)
|
|
*b = ((t->c_cflag & CRTSCTS) == CRTSCTS);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs5:
|
|
#if defined(CS5)
|
|
*b = ((t->c_cflag & CS5) == CS5);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs6:
|
|
#if defined(CS6)
|
|
*b = ((t->c_cflag & CS6) == CS6);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs7:
|
|
#if defined(CS7)
|
|
*b = ((t->c_cflag & CS7) == CS7);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs8:
|
|
#if defined(CS8)
|
|
*b = ((t->c_cflag & CS8) == CS8);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cstopb:
|
|
#if defined(CSTOPB)
|
|
*b = ((t->c_cflag & CSTOPB) == CSTOPB);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cread:
|
|
#if defined(CREAD)
|
|
*b = ((t->c_cflag & CREAD) == CREAD);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case parenb:
|
|
#if defined(PARENB)
|
|
*b = ((t->c_cflag & PARENB) == PARENB);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case parodd:
|
|
#if defined(PARODD)
|
|
*b = ((t->c_cflag & PARODD) == PARODD);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case hupcl:
|
|
#if defined(HUPCL)
|
|
*b = ((t->c_cflag & HUPCL) == HUPCL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case clocal:
|
|
#if defined(CLOCAL)
|
|
*b = ((t->c_cflag & CLOCAL) == CLOCAL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lisig:
|
|
#if defined(ISIG)
|
|
*b = ((t->c_lflag & ISIG) == ISIG);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case licanon:
|
|
#if defined(ICANON)
|
|
*b = ((t->c_lflag & ICANON) == ICANON);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lxcase:
|
|
#if defined(XCASE)
|
|
*b = ((t->c_lflag & XCASE) == XCASE);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lecho:
|
|
#if defined(ECHO)
|
|
*b = ((t->c_lflag & ECHO) == ECHO);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoe:
|
|
#if defined(ECHOE)
|
|
*b = ((t->c_lflag & ECHOE) == ECHOE);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechok:
|
|
#if defined(ECHOK)
|
|
*b = ((t->c_lflag & ECHOK) == ECHOK);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechonl:
|
|
#if defined(ECHONL)
|
|
*b = ((t->c_lflag & ECHONL) == ECHONL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lnoflsh:
|
|
#if defined(NOFLSH)
|
|
*b = ((t->c_lflag & NOFLSH) == NOFLSH);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ltopstop:
|
|
#if defined(TOSTOP)
|
|
*b = ((t->c_lflag & TOSTOP) == TOSTOP);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoctl:
|
|
#if defined(ECHOCTL)
|
|
*b = ((t->c_lflag & ECHOCTL) == ECHOCTL);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoprt:
|
|
#if defined(ECHOPRT)
|
|
*b = ((t->c_lflag & ECHOPRT) == ECHOPRT);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoke:
|
|
#if defined(ECHOKE)
|
|
*b = ((t->c_lflag & ECHOKE) == ECHOKE);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lflusho:
|
|
#if defined(FLUSHO)
|
|
*b = ((t->c_lflag & FLUSHO) == FLUSHO);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lpendin:
|
|
#if defined(PENDIN)
|
|
*b = ((t->c_lflag & PENDIN) == PENDIN);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case liexten:
|
|
#if defined(IEXTEN)
|
|
*b = ((t->c_lflag & IEXTEN) == IEXTEN);
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* SetFlag sets a flag value in t to b and returns true if this flag
|
|
value is supported. */
|
|
|
|
extern "C" bool
|
|
EXPORT (SetFlag) (struct termios *t, Flag f, bool b)
|
|
{
|
|
switch (f)
|
|
{
|
|
|
|
case ignbrk:
|
|
#if defined(IGNBRK)
|
|
return doSetUnset (&t->c_iflag, IGNBRK, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ibrkint:
|
|
#if defined(BRKINT)
|
|
return doSetUnset (&t->c_iflag, BRKINT, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ignpar:
|
|
#if defined(IGNPAR)
|
|
return doSetUnset (&t->c_iflag, IGNPAR, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case iparmrk:
|
|
#if defined(PARMRK)
|
|
return doSetUnset (&t->c_iflag, PARMRK, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case inpck:
|
|
#if defined(INPCK)
|
|
return doSetUnset (&t->c_iflag, INPCK, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case istrip:
|
|
#if defined(ISTRIP)
|
|
return doSetUnset (&t->c_iflag, ISTRIP, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case inlcr:
|
|
#if defined(INLCR)
|
|
return doSetUnset (&t->c_iflag, INLCR, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case igncr:
|
|
#if defined(IGNCR)
|
|
return doSetUnset (&t->c_iflag, IGNCR, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case icrnl:
|
|
#if defined(ICRNL)
|
|
return doSetUnset (&t->c_iflag, ICRNL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case iuclc:
|
|
#if defined(IUCLC)
|
|
return doSetUnset (&t->c_iflag, IUCLC, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ixon:
|
|
#if defined(IXON)
|
|
return doSetUnset (&t->c_iflag, IXON, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ixany:
|
|
#if defined(IXANY)
|
|
return doSetUnset (&t->c_iflag, IXANY, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ixoff:
|
|
#if defined(IXOFF)
|
|
return doSetUnset (&t->c_iflag, IXOFF, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case imaxbel:
|
|
#if defined(IMAXBEL)
|
|
return doSetUnset (&t->c_iflag, IMAXBEL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case opost:
|
|
#if defined(OPOST)
|
|
return doSetUnset (&t->c_oflag, OPOST, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case olcuc:
|
|
#if defined(OLCUC)
|
|
return doSetUnset (&t->c_oflag, OLCUC, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onlcr:
|
|
#if defined(ONLCR)
|
|
return doSetUnset (&t->c_oflag, ONLCR, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocrnl:
|
|
#if defined(OCRNL)
|
|
return doSetUnset (&t->c_oflag, OCRNL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onocr:
|
|
#if defined(ONOCR)
|
|
return doSetUnset (&t->c_oflag, ONOCR, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onlret:
|
|
#if defined(ONLRET)
|
|
return doSetUnset (&t->c_oflag, ONLRET, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ofill:
|
|
#if defined(OFILL)
|
|
return doSetUnset (&t->c_oflag, OFILL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ofdel:
|
|
#if defined(OFDEL)
|
|
return doSetUnset (&t->c_oflag, OFDEL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onl0:
|
|
#if defined(NL0)
|
|
return doSetUnset (&t->c_oflag, NL0, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case onl1:
|
|
#if defined(NL1)
|
|
return doSetUnset (&t->c_oflag, NL1, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr0:
|
|
#if defined(CR0)
|
|
return doSetUnset (&t->c_oflag, CR0, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr1:
|
|
#if defined(CR1)
|
|
return doSetUnset (&t->c_oflag, CR1, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr2:
|
|
#if defined(CR2)
|
|
return doSetUnset (&t->c_oflag, CR2, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ocr3:
|
|
#if defined(CR3)
|
|
return doSetUnset (&t->c_oflag, CR3, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab0:
|
|
#if defined(TAB0)
|
|
return doSetUnset (&t->c_oflag, TAB0, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab1:
|
|
#if defined(TAB1)
|
|
return doSetUnset (&t->c_oflag, TAB1, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab2:
|
|
#if defined(TAB2)
|
|
return doSetUnset (&t->c_oflag, TAB2, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case otab3:
|
|
#if defined(TAB3)
|
|
return doSetUnset (&t->c_oflag, TAB3, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case obs0:
|
|
#if defined(BS0)
|
|
return doSetUnset (&t->c_oflag, BS0, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case obs1:
|
|
#if defined(BS1)
|
|
return doSetUnset (&t->c_oflag, BS1, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case off0:
|
|
#if defined(FF0)
|
|
return doSetUnset (&t->c_oflag, FF0, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case off1:
|
|
#if defined(FF1)
|
|
return doSetUnset (&t->c_oflag, FF1, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ovt0:
|
|
#if defined(VT0)
|
|
return doSetUnset (&t->c_oflag, VT0, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ovt1:
|
|
#if defined(VT1)
|
|
return doSetUnset (&t->c_oflag, VT1, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b0:
|
|
#if defined(B0)
|
|
return doSetUnset (&t->c_cflag, B0, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b50:
|
|
#if defined(B50)
|
|
return doSetUnset (&t->c_cflag, B50, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b75:
|
|
#if defined(B75)
|
|
return doSetUnset (&t->c_cflag, B75, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b110:
|
|
#if defined(B110)
|
|
return doSetUnset (&t->c_cflag, B110, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b135:
|
|
#if defined(B134)
|
|
return doSetUnset (&t->c_cflag, B134, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b150:
|
|
#if defined(B150)
|
|
return doSetUnset (&t->c_cflag, B150, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b200:
|
|
#if defined(B200)
|
|
return doSetUnset (&t->c_cflag, B200, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b300:
|
|
#if defined(B300)
|
|
return doSetUnset (&t->c_cflag, B300, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b600:
|
|
#if defined(B600)
|
|
return doSetUnset (&t->c_cflag, B600, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1200:
|
|
#if defined(B1200)
|
|
return doSetUnset (&t->c_cflag, B1200, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1800:
|
|
#if defined(B1800)
|
|
return doSetUnset (&t->c_cflag, B1800, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b2400:
|
|
#if defined(B2400)
|
|
return doSetUnset (&t->c_cflag, B2400, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b4800:
|
|
#if defined(B4800)
|
|
return doSetUnset (&t->c_cflag, B4800, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b9600:
|
|
#if defined(B9600)
|
|
return doSetUnset (&t->c_cflag, B9600, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b19200:
|
|
#if defined(B19200)
|
|
return doSetUnset (&t->c_cflag, B19200, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b38400:
|
|
#if defined(B38400)
|
|
return doSetUnset (&t->c_cflag, B38400, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b57600:
|
|
#if defined(B57600)
|
|
return doSetUnset (&t->c_cflag, B57600, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b115200:
|
|
#if defined(B115200)
|
|
return doSetUnset (&t->c_cflag, B115200, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b240400:
|
|
#if defined(B230400)
|
|
return doSetUnset (&t->c_cflag, B230400, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b460800:
|
|
#if defined(B460800)
|
|
return doSetUnset (&t->c_cflag, B460800, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b500000:
|
|
#if defined(B500000)
|
|
return doSetUnset (&t->c_cflag, B500000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b576000:
|
|
#if defined(B576000)
|
|
return doSetUnset (&t->c_cflag, B576000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b921600:
|
|
#if defined(B921600)
|
|
return doSetUnset (&t->c_cflag, B921600, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1000000:
|
|
#if defined(B1000000)
|
|
return doSetUnset (&t->c_cflag, B1000000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1152000:
|
|
#if defined(B1152000)
|
|
return doSetUnset (&t->c_cflag, B1152000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b1500000:
|
|
#if defined(B1500000)
|
|
return doSetUnset (&t->c_cflag, B1500000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b2000000:
|
|
#if defined(B2000000)
|
|
return doSetUnset (&t->c_cflag, B2000000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b2500000:
|
|
#if defined(B2500000)
|
|
return doSetUnset (&t->c_cflag, B2500000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b3000000:
|
|
#if defined(B3000000)
|
|
return doSetUnset (&t->c_cflag, B3000000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b3500000:
|
|
#if defined(B3500000)
|
|
return doSetUnset (&t->c_cflag, B3500000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case b4000000:
|
|
#if defined(B4000000)
|
|
return doSetUnset (&t->c_cflag, B4000000, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case maxbaud:
|
|
#if defined(__MAX_BAUD)
|
|
return doSetUnset (&t->c_cflag, __MAX_BAUD, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case crtscts:
|
|
#if defined(CRTSCTS)
|
|
return doSetUnset (&t->c_cflag, CRTSCTS, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs5:
|
|
#if defined(CS5)
|
|
return doSetUnset (&t->c_cflag, CS5, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs6:
|
|
#if defined(CS6)
|
|
return doSetUnset (&t->c_cflag, CS6, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs7:
|
|
#if defined(CS7)
|
|
return doSetUnset (&t->c_cflag, CS7, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cs8:
|
|
#if defined(CS8)
|
|
return doSetUnset (&t->c_cflag, CS8, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cstopb:
|
|
#if defined(CSTOPB)
|
|
return doSetUnset (&t->c_cflag, CSTOPB, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case cread:
|
|
#if defined(CREAD)
|
|
return doSetUnset (&t->c_cflag, CREAD, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case parenb:
|
|
#if defined(PARENB)
|
|
return doSetUnset (&t->c_cflag, PARENB, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case parodd:
|
|
#if defined(PARODD)
|
|
return doSetUnset (&t->c_cflag, PARODD, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case hupcl:
|
|
#if defined(HUPCL)
|
|
return doSetUnset (&t->c_cflag, HUPCL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case clocal:
|
|
#if defined(CLOCAL)
|
|
return doSetUnset (&t->c_cflag, CLOCAL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lisig:
|
|
#if defined(ISIG)
|
|
return doSetUnset (&t->c_lflag, ISIG, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case licanon:
|
|
#if defined(ICANON)
|
|
return doSetUnset (&t->c_lflag, ICANON, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lxcase:
|
|
#if defined(XCASE)
|
|
return doSetUnset (&t->c_lflag, XCASE, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lecho:
|
|
#if defined(ECHO)
|
|
return doSetUnset (&t->c_lflag, ECHO, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoe:
|
|
#if defined(ECHOE)
|
|
return doSetUnset (&t->c_lflag, ECHOE, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechok:
|
|
#if defined(ECHOK)
|
|
return doSetUnset (&t->c_lflag, ECHOK, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechonl:
|
|
#if defined(ECHONL)
|
|
return doSetUnset (&t->c_lflag, ECHONL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lnoflsh:
|
|
#if defined(NOFLSH)
|
|
return doSetUnset (&t->c_lflag, NOFLSH, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case ltopstop:
|
|
#if defined(TOSTOP)
|
|
return doSetUnset (&t->c_lflag, TOSTOP, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoctl:
|
|
#if defined(ECHOCTL)
|
|
return doSetUnset (&t->c_lflag, ECHOCTL, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoprt:
|
|
#if defined(ECHOPRT)
|
|
return doSetUnset (&t->c_lflag, ECHOPRT, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lechoke:
|
|
#if defined(ECHOKE)
|
|
return doSetUnset (&t->c_lflag, ECHOKE, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lflusho:
|
|
#if defined(FLUSHO)
|
|
return doSetUnset (&t->c_lflag, FLUSHO, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case lpendin:
|
|
#if defined(PENDIN)
|
|
return doSetUnset (&t->c_lflag, PENDIN, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
case liexten:
|
|
#if defined(IEXTEN)
|
|
return doSetUnset (&t->c_lflag, IEXTEN, b);
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* GetChar sets a CHAR, ch, value from, t, and returns TRUE if
|
|
this value is supported. */
|
|
|
|
extern "C" bool
|
|
EXPORT (GetChar) (struct termios *t, ControlChar c, char *ch)
|
|
{
|
|
switch (c)
|
|
{
|
|
|
|
case vintr:
|
|
#if defined(VINTR)
|
|
*ch = t->c_cc[VINTR];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vquit:
|
|
#if defined(VQUIT)
|
|
*ch = t->c_cc[VQUIT];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case verase:
|
|
#if defined(VERASE)
|
|
*ch = t->c_cc[VERASE];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vkill:
|
|
#if defined(VKILL)
|
|
*ch = t->c_cc[VKILL];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case veof:
|
|
#if defined(VEOF)
|
|
*ch = t->c_cc[VEOF];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vtime:
|
|
#if defined(VTIME)
|
|
*ch = t->c_cc[VTIME];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vmin:
|
|
#if defined(VMIN)
|
|
*ch = t->c_cc[VMIN];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vswtc:
|
|
#if defined(VSWTC)
|
|
*ch = t->c_cc[VSWTC];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vstart:
|
|
#if defined(VSTART)
|
|
*ch = t->c_cc[VSTART];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vstop:
|
|
#if defined(VSTOP)
|
|
*ch = t->c_cc[VSTOP];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vsusp:
|
|
#if defined(VSUSP)
|
|
*ch = t->c_cc[VSUSP];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case veol:
|
|
#if defined(VEOL)
|
|
*ch = t->c_cc[VEOL];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vreprint:
|
|
#if defined(VREPRINT)
|
|
*ch = t->c_cc[VREPRINT];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vdiscard:
|
|
#if defined(VDISCARD)
|
|
*ch = t->c_cc[VDISCARD];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vwerase:
|
|
#if defined(VWERASE)
|
|
*ch = t->c_cc[VWERASE];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vlnext:
|
|
#if defined(VLNEXT)
|
|
*ch = t->c_cc[VLNEXT];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case veol2:
|
|
#if defined(VEOL2)
|
|
*ch = t->c_cc[VEOL2];
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* SetChar sets a CHAR value in, t, and returns TRUE if, c,
|
|
is supported. */
|
|
|
|
extern "C" bool
|
|
EXPORT (SetChar) (struct termios *t, ControlChar c, char ch)
|
|
{
|
|
switch (c)
|
|
{
|
|
|
|
case vintr:
|
|
#if defined(VINTR)
|
|
t->c_cc[VINTR] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vquit:
|
|
#if defined(VQUIT)
|
|
t->c_cc[VQUIT] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case verase:
|
|
#if defined(VERASE)
|
|
t->c_cc[VERASE] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vkill:
|
|
#if defined(VKILL)
|
|
t->c_cc[VKILL] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case veof:
|
|
#if defined(VEOF)
|
|
t->c_cc[VEOF] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vtime:
|
|
#if defined(VTIME)
|
|
t->c_cc[VTIME] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vmin:
|
|
#if defined(VMIN)
|
|
t->c_cc[VMIN] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vswtc:
|
|
#if defined(VSWTC)
|
|
t->c_cc[VSWTC] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vstart:
|
|
#if defined(VSTART)
|
|
t->c_cc[VSTART] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vstop:
|
|
#if defined(VSTOP)
|
|
t->c_cc[VSTOP] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vsusp:
|
|
#if defined(VSUSP)
|
|
t->c_cc[VSUSP] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case veol:
|
|
#if defined(VEOL)
|
|
t->c_cc[VEOL] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vreprint:
|
|
#if defined(VREPRINT)
|
|
t->c_cc[VREPRINT] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vdiscard:
|
|
#if defined(VDISCARD)
|
|
t->c_cc[VDISCARD] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vwerase:
|
|
#if defined(VWERASE)
|
|
t->c_cc[VWERASE] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case vlnext:
|
|
#if defined(VLNEXT)
|
|
t->c_cc[VLNEXT] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
case veol2:
|
|
#if defined(VEOL2)
|
|
t->c_cc[VEOL2] = ch;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
extern "C" void
|
|
M2EXPORT(init) (int, char *argv[], char *env[])
|
|
{
|
|
}
|
|
|
|
extern "C" void
|
|
M2EXPORT(fini) (int, char *argv[], char *env[])
|
|
{
|
|
}
|
|
|
|
extern "C" void
|
|
M2EXPORT(dep) (void)
|
|
{
|
|
}
|
|
|
|
extern "C" void __attribute__((__constructor__))
|
|
M2EXPORT(ctor) (void)
|
|
{
|
|
m2pim_M2RTS_RegisterModule ("termios", M2LIBNAME,
|
|
M2EXPORT(init), M2EXPORT(fini), M2EXPORT(dep));
|
|
}
|