package main

import (
	"golang.org/x/sys/unix"
)

type tty struct {
	fd      int
	termios *unix.Termios
}

func newTTY(fd uintptr) *tty {
	termios, _ := unix.IoctlGetTermios(int(fd), unix.TCGETS)
	return &tty{int(fd), termios}
}

func (t *tty) EchoOff() {
	if t.termios == nil {
		return
	}

	newState := *t.termios
	newState.Lflag &^= unix.ECHO
	newState.Lflag |= unix.ICANON | unix.ISIG
	newState.Iflag |= unix.ICRNL
	unix.IoctlSetTermios(t.fd, unix.TCSETS, &newState)
}

func (t *tty) Restore() {
	if t.termios == nil {
		return
	}

	unix.IoctlSetTermios(t.fd, unix.TCSETS, t.termios)
}
