gm2
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Woe with doSetUnset


From: Gaius Mulley
Subject: Re: Woe with doSetUnset
Date: Sun, 03 Jul 2022 17:36:25 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)

john o goyo <jog37@riddermarkfarm.ca> writes:

>>     <jog37@riddermarkfarm.ca> wrote:
>>
>>         Gaius:
>>
>>         I will not be setting up my Sparc box for another few weeks,
>>         so I am
>>         concentrating on mc.  To obtain the required header files, I
>>         am building
>>         a cross-compiler on my M1 Mini for aarch64-unknown-freebsd10.1
>>         and
>>         encountering a strange error.
>>
>>         /usr/bin/g++ -std=gnu++11 -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs
>>         -I../../../src/gcc-git-devel-modula2/gcc/../include
>>         -I../../../src/gcc-git-devel-modula2/gcc -I. -Im2/mc-boot-ch
>>         -I../../../src/gcc-git-devel-modula2/gcc
>>         -I../../../src/gcc-git-devel-modula2/gcc/m2/mc-boot-ch
>>         -I../../../src/gcc-git-devel-modula2/gcc/../include
>>         -I../../../src/gcc-git-devel-modula2/gcc/../libcpp/include
>>         -I../../../src/gcc-git-devel-modula2/gcc/../libcody
>>         -I/usr/local/include
>>         -I/usr/local/include -I/usr/local/include
>>         -I../../../src/gcc-git-devel-modula2/gcc/../libdecnumber
>>         -I../../../src/gcc-git-devel-modula2/gcc/../libdecnumber/bid
>>         -I../libdecnumber
>>         -I../../../src/gcc-git-devel-modula2/gcc/../libbacktrace
>>         -Im2/gm2-libs
>>         ../../../src/gcc-git-devel-modula2/gcc/m2/mc-boot-ch/Gtermios.c
>>         -o
>>         m2/mc-boot-ch/Gtermios.o
>>         clang: warning: treating 'c' input as 'c++' when in C++ mode,
>>         this
>>         behavior is deprecated [-Wdeprecated]
>>         
>> ../../../src/gcc-git-devel-modula2/gcc/m2/mc-boot-ch/Gtermios.c:1103:14:
>>
>>         error: no matching function for call to 'doSetUnset'
>>                return doSetUnset (&t->c_iflag, IGNBRK, b);
>>
>>         But doSetUnset is defined at ll. 394+ in the same file Gtermios.c.
>>
>>         I am somewhat stumped by this one.
>>
>>         john


> Greetings, Gaius.
>
> No joy -- I removed EXTERN and the error results.
>
> Sincerely,
> john

Hi John,

very odd - I've made the following changes on my debian box with clang:

clang++ --version
Debian clang version 11.0.1-2
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

and it now compiles without any warnings with g++ and also clang++.
Here is the complete source file - I had to rename it to .cc (to get
rid of the c c++ deprecated warning).

/* 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
I also had to change the appropriate build rule in gcc/m2/Make-lang.in.
I'll git commit/git push the changes tomorrow (on devel/m2link).  It
would be interesting to see if this works on the m1?

regards,
Gaius

reply via email to

[Prev in Thread] Current Thread [Next in Thread]