# Stubs for termios

from typing import IO, List, Union

_FD = Union[int, IO[str]]
_Attr = List[Union[int, List[bytes]]]

# TODO constants not really documented
B0 = ...  # type: int
B1000000 = ...  # type: int
B110 = ...  # type: int
B115200 = ...  # type: int
B1152000 = ...  # type: int
B1200 = ...  # type: int
B134 = ...  # type: int
B150 = ...  # type: int
B1500000 = ...  # type: int
B1800 = ...  # type: int
B19200 = ...  # type: int
B200 = ...  # type: int
B2000000 = ...  # type: int
B230400 = ...  # type: int
B2400 = ...  # type: int
B2500000 = ...  # type: int
B300 = ...  # type: int
B3000000 = ...  # type: int
B3500000 = ...  # type: int
B38400 = ...  # type: int
B4000000 = ...  # type: int
B460800 = ...  # type: int
B4800 = ...  # type: int
B50 = ...  # type: int
B500000 = ...  # type: int
B57600 = ...  # type: int
B576000 = ...  # type: int
B600 = ...  # type: int
B75 = ...  # type: int
B921600 = ...  # type: int
B9600 = ...  # type: int
BRKINT = ...  # type: int
BS0 = ...  # type: int
BS1 = ...  # type: int
BSDLY = ...  # type: int
CBAUD = ...  # type: int
CBAUDEX = ...  # type: int
CDSUSP = ...  # type: int
CEOF = ...  # type: int
CEOL = ...  # type: int
CEOT = ...  # type: int
CERASE = ...  # type: int
CFLUSH = ...  # type: int
CIBAUD = ...  # type: int
CINTR = ...  # type: int
CKILL = ...  # type: int
CLNEXT = ...  # type: int
CLOCAL = ...  # type: int
CQUIT = ...  # type: int
CR0 = ...  # type: int
CR1 = ...  # type: int
CR2 = ...  # type: int
CR3 = ...  # type: int
CRDLY = ...  # type: int
CREAD = ...  # type: int
CRPRNT = ...  # type: int
CRTSCTS = ...  # type: int
CS5 = ...  # type: int
CS6 = ...  # type: int
CS7 = ...  # type: int
CS8 = ...  # type: int
CSIZE = ...  # type: int
CSTART = ...  # type: int
CSTOP = ...  # type: int
CSTOPB = ...  # type: int
CSUSP = ...  # type: int
CWERASE = ...  # type: int
ECHO = ...  # type: int
ECHOCTL = ...  # type: int
ECHOE = ...  # type: int
ECHOK = ...  # type: int
ECHOKE = ...  # type: int
ECHONL = ...  # type: int
ECHOPRT = ...  # type: int
EXTA = ...  # type: int
EXTB = ...  # type: int
FF0 = ...  # type: int
FF1 = ...  # type: int
FFDLY = ...  # type: int
FIOASYNC = ...  # type: int
FIOCLEX = ...  # type: int
FIONBIO = ...  # type: int
FIONCLEX = ...  # type: int
FIONREAD = ...  # type: int
FLUSHO = ...  # type: int
HUPCL = ...  # type: int
ICANON = ...  # type: int
ICRNL = ...  # type: int
IEXTEN = ...  # type: int
IGNBRK = ...  # type: int
IGNCR = ...  # type: int
IGNPAR = ...  # type: int
IMAXBEL = ...  # type: int
INLCR = ...  # type: int
INPCK = ...  # type: int
IOCSIZE_MASK = ...  # type: int
IOCSIZE_SHIFT = ...  # type: int
ISIG = ...  # type: int
ISTRIP = ...  # type: int
IUCLC = ...  # type: int
IXANY = ...  # type: int
IXOFF = ...  # type: int
IXON = ...  # type: int
NCC = ...  # type: int
NCCS = ...  # type: int
NL0 = ...  # type: int
NL1 = ...  # type: int
NLDLY = ...  # type: int
NOFLSH = ...  # type: int
N_MOUSE = ...  # type: int
N_PPP = ...  # type: int
N_SLIP = ...  # type: int
N_STRIP = ...  # type: int
N_TTY = ...  # type: int
OCRNL = ...  # type: int
OFDEL = ...  # type: int
OFILL = ...  # type: int
OLCUC = ...  # type: int
ONLCR = ...  # type: int
ONLRET = ...  # type: int
ONOCR = ...  # type: int
OPOST = ...  # type: int
PARENB = ...  # type: int
PARMRK = ...  # type: int
PARODD = ...  # type: int
PENDIN = ...  # type: int
TAB0 = ...  # type: int
TAB1 = ...  # type: int
TAB2 = ...  # type: int
TAB3 = ...  # type: int
TABDLY = ...  # type: int
TCFLSH = ...  # type: int
TCGETA = ...  # type: int
TCGETS = ...  # type: int
TCIFLUSH = ...  # type: int
TCIOFF = ...  # type: int
TCIOFLUSH = ...  # type: int
TCION = ...  # type: int
TCOFLUSH = ...  # type: int
TCOOFF = ...  # type: int
TCOON = ...  # type: int
TCSADRAIN = ...  # type: int
TCSAFLUSH = ...  # type: int
TCSANOW = ...  # type: int
TCSBRK = ...  # type: int
TCSBRKP = ...  # type: int
TCSETA = ...  # type: int
TCSETAF = ...  # type: int
TCSETAW = ...  # type: int
TCSETS = ...  # type: int
TCSETSF = ...  # type: int
TCSETSW = ...  # type: int
TCXONC = ...  # type: int
TIOCCONS = ...  # type: int
TIOCEXCL = ...  # type: int
TIOCGETD = ...  # type: int
TIOCGICOUNT = ...  # type: int
TIOCGLCKTRMIOS = ...  # type: int
TIOCGPGRP = ...  # type: int
TIOCGSERIAL = ...  # type: int
TIOCGSOFTCAR = ...  # type: int
TIOCGWINSZ = ...  # type: int
TIOCINQ = ...  # type: int
TIOCLINUX = ...  # type: int
TIOCMBIC = ...  # type: int
TIOCMBIS = ...  # type: int
TIOCMGET = ...  # type: int
TIOCMIWAIT = ...  # type: int
TIOCMSET = ...  # type: int
TIOCM_CAR = ...  # type: int
TIOCM_CD = ...  # type: int
TIOCM_CTS = ...  # type: int
TIOCM_DSR = ...  # type: int
TIOCM_DTR = ...  # type: int
TIOCM_LE = ...  # type: int
TIOCM_RI = ...  # type: int
TIOCM_RNG = ...  # type: int
TIOCM_RTS = ...  # type: int
TIOCM_SR = ...  # type: int
TIOCM_ST = ...  # type: int
TIOCNOTTY = ...  # type: int
TIOCNXCL = ...  # type: int
TIOCOUTQ = ...  # type: int
TIOCPKT = ...  # type: int
TIOCPKT_DATA = ...  # type: int
TIOCPKT_DOSTOP = ...  # type: int
TIOCPKT_FLUSHREAD = ...  # type: int
TIOCPKT_FLUSHWRITE = ...  # type: int
TIOCPKT_NOSTOP = ...  # type: int
TIOCPKT_START = ...  # type: int
TIOCPKT_STOP = ...  # type: int
TIOCSCTTY = ...  # type: int
TIOCSERCONFIG = ...  # type: int
TIOCSERGETLSR = ...  # type: int
TIOCSERGETMULTI = ...  # type: int
TIOCSERGSTRUCT = ...  # type: int
TIOCSERGWILD = ...  # type: int
TIOCSERSETMULTI = ...  # type: int
TIOCSERSWILD = ...  # type: int
TIOCSER_TEMT = ...  # type: int
TIOCSETD = ...  # type: int
TIOCSLCKTRMIOS = ...  # type: int
TIOCSPGRP = ...  # type: int
TIOCSSERIAL = ...  # type: int
TIOCSSOFTCAR = ...  # type: int
TIOCSTI = ...  # type: int
TIOCSWINSZ = ...  # type: int
TOSTOP = ...  # type: int
VDISCARD = ...  # type: int
VEOF = ...  # type: int
VEOL = ...  # type: int
VEOL2 = ...  # type: int
VERASE = ...  # type: int
VINTR = ...  # type: int
VKILL = ...  # type: int
VLNEXT = ...  # type: int
VMIN = ...  # type: int
VQUIT = ...  # type: int
VREPRINT = ...  # type: int
VSTART = ...  # type: int
VSTOP = ...  # type: int
VSUSP = ...  # type: int
VSWTC = ...  # type: int
VSWTCH = ...  # type: int
VT0 = ...  # type: int
VT1 = ...  # type: int
VTDLY = ...  # type: int
VTIME = ...  # type: int
VWERASE = ...  # type: int
XCASE = ...  # type: int
XTABS = ...  # type: int

def tcgetattr(fd: _FD) -> _Attr: ...
def tcsetattr(fd: _FD, when: int, attributes: _Attr) -> None: ...
def tcsendbreak(fd: _FD, duration: int) -> None: ...
def tcdrain(fd: _FD) -> None: ...
def tcflush(fd: _FD, queue: int) -> None: ...
def tcflow(fd: _FD, action: int) -> None: ...
