379 lines
7.5 KiB
C
379 lines
7.5 KiB
C
/* Copyright (C) 1986-1994 by Digital Mars. $Revision: 1.1.1.1 $ */
|
|
#if __SC__ || __RCC__
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifndef __SYS_TERMIO_H
|
|
#define __SYS_TERMIO_H 1
|
|
|
|
#if __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#ifndef _POSIX_VDISABLE
|
|
#define _POSIX_VDISABLE 0
|
|
#endif
|
|
|
|
#if !defined(_POSIX_SOURCE)
|
|
#define CTRL(c) ((c)&037)
|
|
#define IBSHIFT 16
|
|
|
|
#define NCC 8
|
|
#endif /* !defined(_POSIX_SOURCE) */
|
|
|
|
#define NCCS 19
|
|
|
|
#include <unistd.h>
|
|
|
|
typedef unsigned char cc_t;
|
|
typedef unsigned long speed_t;
|
|
#if defined(M_ELF)
|
|
typedef unsigned long tcflag_t;
|
|
#else
|
|
typedef unsigned short tcflag_t;
|
|
#endif
|
|
|
|
/* POSIX structure */
|
|
struct termios
|
|
{
|
|
tcflag_t c_iflag;
|
|
tcflag_t c_oflag;
|
|
tcflag_t c_cflag;
|
|
tcflag_t c_lflag;
|
|
cc_t c_cc[NCCS];
|
|
};
|
|
|
|
/* termios option flags */
|
|
|
|
#define TCIFLUSH 0
|
|
#define TCOFLUSH 1
|
|
#define TCIOFLUSH 2
|
|
|
|
#define TCOOFF 0
|
|
#define TCOON 1
|
|
#define TCIOFF 2
|
|
#define TCION 3
|
|
|
|
/* System V structure */
|
|
#if !defined(_POSIX_SOURCE)
|
|
struct termio
|
|
{
|
|
unsigned short c_iflag;
|
|
unsigned short c_oflag;
|
|
unsigned short c_cflag;
|
|
unsigned short c_lflag;
|
|
char c_line;
|
|
unsigned char c_cc[NCC];
|
|
};
|
|
|
|
struct winsize
|
|
{
|
|
unsigned short ws_row;
|
|
unsigned short ws_col;
|
|
unsigned short ws_xpixel;
|
|
unsigned short ws_ypixel;
|
|
};
|
|
|
|
#endif
|
|
|
|
/* input modes */
|
|
#define IGNBRK 0x1
|
|
#define BRKINT 0x2
|
|
#define IGNPAR 0x4
|
|
#define PARMRK 0x8
|
|
#define INPCK 0x10
|
|
#define ISTRIP 0x20
|
|
#define INLCR 0x40
|
|
#define IGNCR 0x80
|
|
#define ICRNL 0x100
|
|
|
|
#if !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
|
|
#define IUCLC 0x200
|
|
#define IXANY 0x800
|
|
#define IMAXBEL 0020000
|
|
#define DOSMODE 0100000
|
|
#endif
|
|
|
|
#define IXON 0x400
|
|
#define IXOFF 0x1000
|
|
|
|
/* output modes */
|
|
#define OPOST 0x1
|
|
|
|
#if !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
|
|
#define OLCUC 0x2
|
|
#define ONLCR 0x4
|
|
#define OCRNL 0x8
|
|
#define ONOCR 0x10
|
|
#define ONLRET 0x20
|
|
#define OFILL 0x40
|
|
#define OFDEL 0x80
|
|
#define NLDLY 0x100
|
|
#define NL0 0
|
|
#define NL1 0x100
|
|
#define CRDLY 0x600
|
|
#define CR0 0
|
|
#define CR1 0x200
|
|
#define CR2 0x400
|
|
#define CR3 0x600
|
|
#define TABDLY 0x1800
|
|
#define TAB0 0
|
|
#define TAB1 0x800
|
|
#define TAB2 0x1000
|
|
#define TAB3 0x1800
|
|
#define XTABS 0x1800
|
|
#define BSDLY 0x2000
|
|
#define BS0 0
|
|
#define BS1 0x2000
|
|
#define VTDLY 0x4000
|
|
#define VT0 0
|
|
#define VT1 0x4000
|
|
#define FFDLY 0x8000
|
|
#define FF0 0
|
|
#define FF1 0x8000
|
|
#endif
|
|
|
|
#if !defined(_POSIX_SOURCE)
|
|
#define PAGEOUT 0x10000
|
|
#define WRAP 0x20000
|
|
|
|
/* control modes */
|
|
#define CBAUD 0xF
|
|
#endif
|
|
#define B0 0
|
|
#define B50 0x1
|
|
#define B75 0x2
|
|
#define B110 0x3
|
|
#define B134 0x4
|
|
#define B150 0x5
|
|
#define B200 0x6
|
|
#define B300 0x7
|
|
#define B600 0x8
|
|
#define B1200 0x9
|
|
#define B1800 0xA
|
|
#define B2400 0xB
|
|
#define B4800 0xC
|
|
#define B9600 0xD
|
|
#define B19200 0xE
|
|
#define B38400 0xF
|
|
#if !defined(_POSIX_SOURCE)
|
|
#define EXTA 0xE
|
|
#define EXTB 0xF
|
|
#endif
|
|
#define CS5 0
|
|
#define CS6 0x10
|
|
#define CS7 0x20
|
|
#define CS8 0x30
|
|
#define CSIZE 0x30
|
|
#define CSTOPB 0x40
|
|
#define CREAD 0x80
|
|
#define PARENB 0x100
|
|
#define PARODD 0x200
|
|
#define HUPCL 0x400
|
|
#define CLOCAL 0x800
|
|
|
|
/* stdin modes */
|
|
#define ISIG 0x1
|
|
#define ICANON 0x2
|
|
|
|
#if !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
|
|
#define XCASE 0x4
|
|
#endif
|
|
|
|
#define ECHO 0x8
|
|
#define ECHOE 0x10
|
|
#define ECHOK 0x20
|
|
#define ECHONL 0x40
|
|
|
|
#define NOFLSH 0x80
|
|
#define TOSTOP 0x100
|
|
|
|
#if !defined(_POSIX_SOURCE)
|
|
#define ECHOCTL 0001000
|
|
#define ECHOPRT 0002000
|
|
#define ECHOKE 0004000
|
|
#define DEFECHO 0010000
|
|
#define FLUSHO 0020000
|
|
#define PENDIN 0040000
|
|
|
|
#define RCV1EN 0x8000
|
|
#define XMT1EN 0x10000
|
|
#define LOBLK 0x20000
|
|
#define XCLUDE 0x8000
|
|
#define CIBAUD 03600000
|
|
#define PAREXT 04000000
|
|
#endif
|
|
|
|
/* control chars indexes */
|
|
#define VINTR 0
|
|
#define VQUIT 1
|
|
#define VERASE 2
|
|
#define VKILL 3
|
|
#define VEOF 4
|
|
#define VMIN 4
|
|
#define VEOL 5
|
|
#define VTIME 5
|
|
#if !defined(_POSIX_SOURCE)
|
|
#define VEOL2 6
|
|
#define VSWTCH 7
|
|
#endif
|
|
#define VSTART 8
|
|
#define VSTOP 9
|
|
#define VSUSP 10
|
|
|
|
#if !defined(_POSIX_SOURCE)
|
|
#define VDSUSP 11
|
|
#define VREPRINT 12
|
|
#define VDISCARD 13
|
|
#define VWERASE 14
|
|
#define VLNEXT 15
|
|
|
|
#define VCEOF NCC
|
|
#define VCEOL (NCC + 1)
|
|
|
|
#define CNUL 0
|
|
#define CDEL 0377
|
|
|
|
/* control char values */
|
|
#define CNSWTCH 0
|
|
#define CEOF 4 /* EOT, cntl D */
|
|
#define CERASE 8 /* BS, cntl H */
|
|
#define CKILL 0x15 /* NAK, cntl U */
|
|
#define CSTART 0x11 /* DC1, cntl Q */
|
|
#define CSTOP 0x13 /* DC3, cntl S */
|
|
#define CSWTCH 0x1A /* SUB, cntl Z */
|
|
#define CSUSP 0x1A /* SUB, cntl Z - POSIX default suspend character */
|
|
#define CDSUSP 0x19
|
|
#define CQUIT 0x1C /* FS, cntl \ */
|
|
#define CINTR 0x7F /* DEL cntl ? */
|
|
#define CESC 0x5C /* escape char ('\\') */
|
|
#define CEOT 04
|
|
#define CEOL 0
|
|
#define CEOL2 0
|
|
#define CRPRNT CTRL('r')
|
|
#define CFLUSH CTRL('o')
|
|
#define CWERASE CTRL('w')
|
|
#define CLNEXT CTRL('v')
|
|
|
|
/* Line discipline IOCTL's. */
|
|
#define LDIOC ('D'<<8)
|
|
#define LDOPEN (LDIOC|0)
|
|
#define LDCLOSE (LDIOC|1)
|
|
#define LDCHG (LDIOC|2)
|
|
#define LDGETT (LDIOC|8)
|
|
#define LDSETT (LDIOC|9)
|
|
#define LDSMAP (LDIOC|10)
|
|
#define LDGMAP (LDIOC|11)
|
|
#define LDNMAP (LDIOC|12)
|
|
|
|
#define DIOC ('d'<<8)
|
|
#define DIOCGETP (DIOC|8)
|
|
#define DIOCSETP (DIOC|9)
|
|
|
|
#define FIORDCHK (('f'<<8)|3)
|
|
|
|
/* mouse ioctls. */
|
|
#define EVLD_IOC (LDIOC)
|
|
#define LDEV_SETTYPE (EVLD_IOC|13)
|
|
#define LDEV_GETEV (EVLD_IOC|14)
|
|
#define LDEV_ATTACHQ (EVLD_IOC|15)
|
|
#define LDEV_SETRATIO (EVLD_IOC|16)
|
|
|
|
/* event driver ioctls */
|
|
#define EQIOC ('Q'<<8)
|
|
#define EQIO_GETQP (EQIOC|1)
|
|
#define EQIO_SETEMASK (EQIOC|2)
|
|
#define EQIO_GETEMASK (EQIOC|3)
|
|
#define EQIO_SUSPEND (EQIOC|4)
|
|
#define EQIO_RESUME (EQIOC|5)
|
|
#define EQIO_BLOCK (EQIOC|6)
|
|
|
|
#define TIOC ('T'<<8)
|
|
#define TCGETA (1|TIOC)
|
|
#define TCSETA (2|TIOC)
|
|
#define TCSETAW (3|TIOC)
|
|
#define TCSETAF (4|TIOC)
|
|
#define TCSBRK (5|TIOC)
|
|
#define TCXONC (6|TIOC)
|
|
#define TCFLSH (7|TIOC)
|
|
|
|
#define TIOCKBON (TIOC|8)
|
|
#define TIOCKBOF (TIOC|9)
|
|
#define KBENABLED (TIOC|10)
|
|
|
|
#define TCGETS (13|TIOC)
|
|
#define TCSETS (14|TIOC)
|
|
|
|
#define TCSETSW (15|TIOC)
|
|
#define TCSETSF (16|TIOC)
|
|
|
|
#if defined(M_ELF)
|
|
#define TCSANOW (14|('T'<<8))
|
|
#define TCSADRAIN (15|('T'<<8))
|
|
#define TCSAFLUSH (16|('T'<<8))
|
|
#else
|
|
#define TCSANOW XCSETA
|
|
#define TCSADRAIN XCSETAW
|
|
#define TCSAFLUSH XCSETAF
|
|
#define TCSADFLUSH XCSETAF
|
|
#endif
|
|
|
|
#define IOCTYPE 0xffffff00
|
|
|
|
#define TCDSET (32|TIOC)
|
|
#define RTS_TOG (33|TIOC)
|
|
|
|
#define TIOCGWINSZ (104|TIOC)
|
|
#define TIOCSWINSZ (103|TIOC)
|
|
|
|
#endif /* !defined(_POSIX_SOURCE) */
|
|
|
|
#define IEXTEN 0100000
|
|
|
|
#if defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
|
|
#define XIOC (('i'<<24) | ('X'<<16))
|
|
#else
|
|
#define XIOC ('x'<<8)
|
|
#endif
|
|
#define O_XIOC ('x'<<8)
|
|
|
|
#define O_XCGETA (O_XIOC|1)
|
|
#define O_XCSETA (O_XIOC|2)
|
|
#define O_XCSETAW (O_XIOC|3)
|
|
#define O_XCSETAF (O_XIOC|4)
|
|
|
|
#define XCGETA (XIOC|1)
|
|
#define XCSETA (XIOC|2)
|
|
#define XCSETAW (XIOC|3)
|
|
#define XCSETAF (XIOC|4)
|
|
|
|
#if !__STDC__
|
|
|
|
speed_t __cdecl cfgetispeed (const struct termios *);
|
|
speed_t __cdecl cfgetospeed (const struct termios *);
|
|
int __cdecl cfsetispeed (struct termios *, speed_t);
|
|
int __cdecl cfsetospeed (struct termios *, speed_t);
|
|
|
|
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE)
|
|
#ifdef M_ELF
|
|
#define tcgetattr(fd, termios_p) ioctl(fd, TCGETS, termios_p)
|
|
#else
|
|
#define tcgetattr(fd, termios_p) ioctl(fd, XCGETA, termios_p)
|
|
#endif
|
|
#define tcsetattr(fd, opt, termios_p) ioctl(fd, opt, termios_p)
|
|
#define tcflow(fd, action) ioctl(fd, TCXONC, action)
|
|
#define tcflush(fd, queue_select) ioctl(fd, TCFLSH, queue_select)
|
|
#define tcdrain(fd) ioctl(fd, TCSBRK, 1)
|
|
#define tcsendbreak(fd, duration) ioctl(fd, TCSBRK, 0, duration)
|
|
#endif
|
|
|
|
#endif /* !__STDC__ */
|
|
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|