"""Terminal utilities."""



# Author: Steen Lumholt.



from termios import *



__all__ = ["setraw", "setcbreak"]



# Indexes for termios list.

IFLAG = 0

OFLAG = 1

CFLAG = 2

LFLAG = 3

ISPEED = 4

OSPEED = 5

CC = 6



def setraw(fd, when=TCSAFLUSH):

    """Put terminal into a raw mode."""

    mode = tcgetattr(fd)

    mode[IFLAG] = mode[IFLAG] & ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON)

    mode[OFLAG] = mode[OFLAG] & ~(OPOST)

    mode[CFLAG] = mode[CFLAG] & ~(CSIZE | PARENB)

    mode[CFLAG] = mode[CFLAG] | CS8

    mode[LFLAG] = mode[LFLAG] & ~(ECHO | ICANON | IEXTEN | ISIG)

    mode[CC][VMIN] = 1

    mode[CC][VTIME] = 0

    tcsetattr(fd, when, mode)



def setcbreak(fd, when=TCSAFLUSH):

    """Put terminal into a cbreak mode."""

    mode = tcgetattr(fd)

    mode[LFLAG] = mode[LFLAG] & ~(ECHO | ICANON)

    mode[CC][VMIN] = 1

    mode[CC][VTIME] = 0

    tcsetattr(fd, when, mode)

