// RawMode places the terminal into raw mode. func RawMode(t *Term) error { var a attr if err := termios.Tcgetattr(uintptr(t.fd), (*syscall.Termios)(&a)); err != nil { return err } termios.Cfmakeraw((*syscall.Termios)(&a)) return termios.Tcsetattr(uintptr(t.fd), termios.TCSANOW, (*syscall.Termios)(&a)) }
func (t *Term) setSpeed(baud int) error { var a attr if err := termios.Tcgetattr(uintptr(t.fd), (*syscall.Termios)(&a)); err != nil { return err } a.setSpeed(baud) return termios.Tcsetattr(uintptr(t.fd), termios.TCSANOW, (*syscall.Termios)(&a)) }
// Open opens an asynchronous communications port. func Open(name string, options ...func(*Term) error) (*Term, error) { fd, e := syscall.Open(name, syscall.O_NOCTTY|syscall.O_CLOEXEC|syscall.O_RDWR, 0666) if e != nil { return nil, &os.PathError{"open", name, e} } t := Term{name: name, fd: fd} if err := termios.Tcgetattr(uintptr(t.fd), &t.orig); err != nil { return nil, err } return &t, t.SetOption(options...) }