# 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: ...
