/* do not edit automatically generated by mc from termios.  */
/* termios.def provides a procedural interface to termios.

Copyright (C) 2005-2023 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/>.  */


#if !defined (_termios_H)
#   define _termios_H

#include "config.h"
#include "system.h"
#   ifdef __cplusplus
extern "C" {
#   endif
#include <stdbool.h>
#   if !defined (PROC_D)
#      define PROC_D
       typedef void (*PROC_t) (void);
       typedef struct { PROC_t proc; } PROC;
#   endif

#   include "GSYSTEM.h"

#   if defined (_termios_C)
#      define EXTERN
#   else
#      define EXTERN extern
#   endif

typedef void *termios_TERMIOS;

typedef enum {termios_vintr, termios_vquit, termios_verase, termios_vkill, termios_veof, termios_vtime, termios_vmin, termios_vswtc, termios_vstart, termios_vstop, termios_vsusp, termios_veol, termios_vreprint, termios_vdiscard, termios_vwerase, termios_vlnext, termios_veol2} termios_ControlChar;

typedef enum {termios_ignbrk, termios_ibrkint, termios_ignpar, termios_iparmrk, termios_inpck, termios_istrip, termios_inlcr, termios_igncr, termios_icrnl, termios_iuclc, termios_ixon, termios_ixany, termios_ixoff, termios_imaxbel, termios_opost, termios_olcuc, termios_onlcr, termios_ocrnl, termios_onocr, termios_onlret, termios_ofill, termios_ofdel, termios_onl0, termios_onl1, termios_ocr0, termios_ocr1, termios_ocr2, termios_ocr3, termios_otab0, termios_otab1, termios_otab2, termios_otab3, termios_obs0, termios_obs1, termios_off0, termios_off1, termios_ovt0, termios_ovt1, termios_b0, termios_b50, termios_b75, termios_b110, termios_b135, termios_b150, termios_b200, termios_b300, termios_b600, termios_b1200, termios_b1800, termios_b2400, termios_b4800, termios_b9600, termios_b19200, termios_b38400, termios_b57600, termios_b115200, termios_b240400, termios_b460800, termios_b500000, termios_b576000, termios_b921600, termios_b1000000, termios_b1152000, termios_b1500000, termios_b2000000, termios_b2500000, termios_b3000000, termios_b3500000, termios_b4000000, termios_maxbaud, termios_crtscts, termios_cs5, termios_cs6, termios_cs7, termios_cs8, termios_cstopb, termios_cread, termios_parenb, termios_parodd, termios_hupcl, termios_clocal, termios_lisig, termios_licanon, termios_lxcase, termios_lecho, termios_lechoe, termios_lechok, termios_lechonl, termios_lnoflsh, termios_ltopstop, termios_lechoctl, termios_lechoprt, termios_lechoke, termios_lflusho, termios_lpendin, termios_liexten} termios_Flag;


/*
   InitTermios - new data structure.
*/

EXTERN termios_TERMIOS termios_InitTermios (void);

/*
   KillTermios - delete data structure.
*/

EXTERN termios_TERMIOS termios_KillTermios (termios_TERMIOS t);

/*
   cfgetospeed - return output baud rate.
*/

EXTERN int termios_cfgetospeed (termios_TERMIOS t);

/*
   cfgetispeed - return input baud rate.
*/

EXTERN int termios_cfgetispeed (termios_TERMIOS t);

/*
   cfsetospeed - set output baud rate.
*/

EXTERN int termios_cfsetospeed (termios_TERMIOS t, unsigned int b);

/*
   cfsetispeed - set input baud rate.
*/

EXTERN int termios_cfsetispeed (termios_TERMIOS t, unsigned int b);

/*
   cfsetspeed - set input and output baud rate.
*/

EXTERN int termios_cfsetspeed (termios_TERMIOS t, unsigned int b);

/*
   tcgetattr - get state of, fd, into, t.
*/

EXTERN int termios_tcgetattr (int fd, termios_TERMIOS t);
EXTERN int termios_tcsnow (void);
EXTERN int termios_tcsdrain (void);
EXTERN int termios_tcsflush (void);

/*
   tcsetattr - set state of, fd, to, t, using option.
*/

EXTERN int termios_tcsetattr (int fd, int option, termios_TERMIOS t);

/*
   cfmakeraw - sets, t, to raw mode.
*/

EXTERN void termios_cfmakeraw (termios_TERMIOS t);

/*
   tcsendbreak - send zero bits for duration.
*/

EXTERN int termios_tcsendbreak (int fd, int duration);

/*
   tcdrain - waits for pending output to be written on, fd.
*/

EXTERN int termios_tcdrain (int fd);

/*
   tcflushi - flush input.
*/

EXTERN int termios_tcflushi (int fd);

/*
   tcflusho - flush output.
*/

EXTERN int termios_tcflusho (int fd);

/*
   tcflushio - flush input and output.
*/

EXTERN int termios_tcflushio (int fd);

/*
   tcflowoni - restart input on, fd.
*/

EXTERN int termios_tcflowoni (int fd);

/*
   tcflowoffi - stop input on, fd.
*/

EXTERN int termios_tcflowoffi (int fd);

/*
   tcflowono - restart output on, fd.
*/

EXTERN int termios_tcflowono (int fd);

/*
   tcflowoffo - stop output on, fd.
*/

EXTERN int termios_tcflowoffo (int fd);

/*
   GetFlag - sets a flag value from, t, in, b, and returns TRUE
             if, t, supports, f.
*/

EXTERN bool termios_GetFlag (termios_TERMIOS t, termios_Flag f, bool *b);

/*
   SetFlag - sets a flag value in, t, to, b, and returns TRUE if
             this flag value is supported.
*/

EXTERN bool termios_SetFlag (termios_TERMIOS t, termios_Flag f, bool b);

/*
   GetChar - sets a CHAR, ch, value from, t, and returns TRUE if
             this value is supported.
*/

EXTERN bool termios_GetChar (termios_TERMIOS t, termios_ControlChar c, char *ch);

/*
   SetChar - sets a CHAR value in, t, and returns TRUE if, c,
             is supported.
*/

EXTERN bool termios_SetChar (termios_TERMIOS t, termios_ControlChar c, char ch);
#   ifdef __cplusplus
}
#   endif

#   undef EXTERN
#endif
