#ifndef _h_el_tty
#define _h_el_tty
#include "sys.h"
#include "histedit.h"
#include <termios.h>
#include <unistd.h>
#define CONTROL(A) ((A) & 037)
# if defined(VWERSE) && !defined(VWERASE)
# define VWERASE VWERSE
# endif
# if defined(VDISCRD) && !defined(VDISCARD)
# define VDISCARD VDISCRD
# endif
# if defined(VFLUSHO) && !defined(VDISCARD)
# define VDISCARD VFLUSHO
# endif
# if defined(VSTRT) && !defined(VSTART)
# define VSTART VSTRT
# endif
# if defined(VSTAT) && !defined(VSTATUS)
# define VSTATUS VSTAT
# endif
# ifndef ONLRET
# define ONLRET 0
# endif
# ifndef TAB3
# ifdef OXTABS
# define TAB3 OXTABS
# else
# define TAB3 0
# endif
# endif
# if defined(OXTABS) && !defined(XTABS)
# define XTABS OXTABS
# endif
# ifndef ONLCR
# define ONLCR 0
# endif
# ifndef IEXTEN
# define IEXTEN 0
# endif
# ifndef ECHOCTL
# define ECHOCTL 0
# endif
# ifndef PARENB
# define PARENB 0
# endif
# ifndef EXTPROC
# define EXTPROC 0
# endif
# ifndef FLUSHO
# define FLUSHO 0
# endif
# if defined(VDISABLE) && !defined(_POSIX_VDISABLE)
# define _POSIX_VDISABLE VDISABLE
# endif
# ifdef ISC
# if defined(IEXTEN) && defined(XCASE)
# if IEXTEN == XCASE
# undef IEXTEN
# define IEXTEN 0
# endif
# endif
# if defined(IEXTEN) && !defined(XCASE)
# define XCASE IEXTEN
# undef IEXTEN
# define IEXTEN 0
# endif
# endif
#if defined(convex) || defined(__convex__)
# if defined(IEXTEN) && IEXTEN != 0
# undef IEXTEN
# define IEXTEN 0
# endif
#endif
#ifdef __SVR4
# undef CSWTCH
#endif
#ifndef _POSIX_VDISABLE
# define _POSIX_VDISABLE ((unsigned char) -1)
#endif
#if !defined(CREPRINT) && defined(CRPRNT)
# define CREPRINT CRPRNT
#endif
#if !defined(CDISCARD) && defined(CFLUSH)
# define CDISCARD CFLUSH
#endif
#ifndef CINTR
# define CINTR CONTROL('c')
#endif
#ifndef CQUIT
# define CQUIT 034
#endif
#ifndef CERASE
# define CERASE 0177
#endif
#ifndef CKILL
# define CKILL CONTROL('u')
#endif
#ifndef CEOF
# define CEOF CONTROL('d')
#endif
#ifndef CEOL
# define CEOL _POSIX_VDISABLE
#endif
#ifndef CEOL2
# define CEOL2 _POSIX_VDISABLE
#endif
#ifndef CSWTCH
# define CSWTCH _POSIX_VDISABLE
#endif
#ifndef CDSWTCH
# define CDSWTCH _POSIX_VDISABLE
#endif
#ifndef CERASE2
# define CERASE2 _POSIX_VDISABLE
#endif
#ifndef CSTART
# define CSTART CONTROL('q')
#endif
#ifndef CSTOP
# define CSTOP CONTROL('s')
#endif
#ifndef CSUSP
# define CSUSP CONTROL('z')
#endif
#ifndef CDSUSP
# define CDSUSP CONTROL('y')
#endif
#ifdef hpux
# ifndef CREPRINT
# define CREPRINT _POSIX_VDISABLE
# endif
# ifndef CDISCARD
# define CDISCARD _POSIX_VDISABLE
# endif
# ifndef CLNEXT
# define CLNEXT _POSIX_VDISABLE
# endif
# ifndef CWERASE
# define CWERASE _POSIX_VDISABLE
# endif
#else
# ifndef CREPRINT
# define CREPRINT CONTROL('r')
# endif
# ifndef CDISCARD
# define CDISCARD CONTROL('o')
# endif
# ifndef CLNEXT
# define CLNEXT CONTROL('v')
# endif
# ifndef CWERASE
# define CWERASE CONTROL('w')
# endif
#endif
#ifndef CSTATUS
# define CSTATUS CONTROL('t')
#endif
#ifndef CPAGE
# define CPAGE ' '
#endif
#ifndef CPGOFF
# define CPGOFF CONTROL('m')
#endif
#ifndef CKILL2
# define CKILL2 _POSIX_VDISABLE
#endif
#ifndef CBRK
# ifndef masscomp
# define CBRK 0377
# else
# define CBRK '\0'
# endif
#endif
#ifndef CMIN
# define CMIN CEOF
#endif
#ifndef CTIME
# define CTIME CEOL
#endif
#if defined(TERMIO) || defined(POSIX)
# if defined(POSIX) && defined(NCCS)
# define NUMCC NCCS
# else
# ifdef NCC
# define NUMCC NCC
# endif
# endif
# ifdef NUMCC
# ifdef VINTR
# if NUMCC <= VINTR
# undef VINTR
# endif
# endif
# ifdef VQUIT
# if NUMCC <= VQUIT
# undef VQUIT
# endif
# endif
# ifdef VERASE
# if NUMCC <= VERASE
# undef VERASE
# endif
# endif
# ifdef VKILL
# if NUMCC <= VKILL
# undef VKILL
# endif
# endif
# ifdef VEOF
# if NUMCC <= VEOF
# undef VEOF
# endif
# endif
# ifdef VEOL
# if NUMCC <= VEOL
# undef VEOL
# endif
# endif
# ifdef VEOL2
# if NUMCC <= VEOL2
# undef VEOL2
# endif
# endif
# ifdef VSWTCH
# if NUMCC <= VSWTCH
# undef VSWTCH
# endif
# endif
# ifdef VDSWTCH
# if NUMCC <= VDSWTCH
# undef VDSWTCH
# endif
# endif
# ifdef VERASE2
# if NUMCC <= VERASE2
# undef VERASE2
# endif
# endif
# ifdef VSTART
# if NUMCC <= VSTART
# undef VSTART
# endif
# endif
# ifdef VSTOP
# if NUMCC <= VSTOP
# undef VSTOP
# endif
# endif
# ifdef VWERASE
# if NUMCC <= VWERASE
# undef VWERASE
# endif
# endif
# ifdef VSUSP
# if NUMCC <= VSUSP
# undef VSUSP
# endif
# endif
# ifdef VDSUSP
# if NUMCC <= VDSUSP
# undef VDSUSP
# endif
# endif
# ifdef VREPRINT
# if NUMCC <= VREPRINT
# undef VREPRINT
# endif
# endif
# ifdef VDISCARD
# if NUMCC <= VDISCARD
# undef VDISCARD
# endif
# endif
# ifdef VLNEXT
# if NUMCC <= VLNEXT
# undef VLNEXT
# endif
# endif
# ifdef VSTATUS
# if NUMCC <= VSTATUS
# undef VSTATUS
# endif
# endif
# ifdef VPAGE
# if NUMCC <= VPAGE
# undef VPAGE
# endif
# endif
# ifdef VPGOFF
# if NUMCC <= VPGOFF
# undef VPGOFF
# endif
# endif
# ifdef VKILL2
# if NUMCC <= VKILL2
# undef VKILL2
# endif
# endif
# ifdef VBRK
# if NUMCC <= VBRK
# undef VBRK
# endif
# endif
# ifdef VMIN
# if NUMCC <= VMIN
# undef VMIN
# endif
# endif
# ifdef VTIME
# if NUMCC <= VTIME
# undef VTIME
# endif
# endif
# endif
#endif
#define C_INTR 0
#define C_QUIT 1
#define C_ERASE 2
#define C_KILL 3
#define C_EOF 4
#define C_EOL 5
#define C_EOL2 6
#define C_SWTCH 7
#define C_DSWTCH 8
#define C_ERASE2 9
#define C_START 10
#define C_STOP 11
#define C_WERASE 12
#define C_SUSP 13
#define C_DSUSP 14
#define C_REPRINT 15
#define C_DISCARD 16
#define C_LNEXT 17
#define C_STATUS 18
#define C_PAGE 19
#define C_PGOFF 20
#define C_KILL2 21
#define C_BRK 22
#define C_MIN 23
#define C_TIME 24
#define C_NCC 25
#define C_SH(A) ((unsigned int)(1 << (A)))
#define EX_IO 0
#define ED_IO 1
#define TS_IO 2
#define QU_IO 2
#define NN_IO 3
#define MD_INP 0
#define MD_OUT 1
#define MD_CTL 2
#define MD_LIN 3
#define MD_CHAR 4
#define MD_NN 5
typedef struct {
const char *t_name;
unsigned int t_setmask;
unsigned int t_clrmask;
} ttyperm_t[NN_IO][MD_NN];
typedef unsigned char ttychar_t[NN_IO][C_NCC];
protected int tty_init(EditLine *);
protected void tty_end(EditLine *);
protected int tty_stty(EditLine *, int, const Char **);
protected int tty_rawmode(EditLine *);
protected int tty_cookedmode(EditLine *);
protected int tty_quotemode(EditLine *);
protected int tty_noquotemode(EditLine *);
protected void tty_bind_char(EditLine *, int);
typedef struct {
ttyperm_t t_t;
ttychar_t t_c;
struct termios t_or, t_ex, t_ed, t_ts;
int t_tabs;
int t_eight;
speed_t t_speed;
int t_mode;
unsigned char t_vdisable;
} el_tty_t;
#endif