18 BRKINT = tcflag_t (0000002)
19 ICRNL = tcflag_t (0000400)
20 INPCK = tcflag_t (0000020)
21 ISTRIP = tcflag_t (0000040)
22 IXON = tcflag_t (0002000)
23 OPOST = tcflag_t (0000001)
24 CS8 = tcflag_t (0000060)
25 ECHO = tcflag_t (0000010)
26 ICANON = tcflag_t (0000002)
27 IEXTEN = tcflag_t (0100000)
28 ISIG = tcflag_t (0000001)
34 B0 = speed_t(0000000) /* hang up */
35 B50 = speed_t(0000001)
36 B75 = speed_t(0000002)
37 B110 = speed_t(0000003)
38 B134 = speed_t(0000004)
39 B150 = speed_t(0000005)
40 B200 = speed_t(0000006)
41 B300 = speed_t(0000007)
42 B600 = speed_t(0000010)
43 B1200 = speed_t(0000011)
44 B1800 = speed_t(0000012)
45 B2400 = speed_t(0000013)
46 B4800 = speed_t(0000014)
47 B9600 = speed_t(0000015)
48 B19200 = speed_t(0000016)
49 B38400 = speed_t(0000017)
50 B57600 = speed_t(0010001)
51 B115200 = speed_t(0010002)
52 B230400 = speed_t(0010003)
53 B460800 = speed_t(0010004)
54 B500000 = speed_t(0010005)
55 B576000 = speed_t(0010006)
56 B921600 = speed_t(0010007)
57 B1000000 = speed_t(0010010)
58 B1152000 = speed_t(0010011)
59 B1500000 = speed_t(0010012)
60 B2000000 = speed_t(0010013)
61 B2500000 = speed_t(0010014)
62 B3000000 = speed_t(0010015)
63 B3500000 = speed_t(0010016)
64 B4000000 = speed_t(0010017)
69 c_iflag, c_oflag, c_cflag, c_lflag tcflag_t;
72 c_ispeed, c_ospeed speed_t
83 ttyfd uintptr = 0 // STDIN_FILENO
86 func Ttyfd(fd uintptr) {
90 func getTermios (dst *termios) error {
91 r1, _, errno := syscall.Syscall (syscall.SYS_IOCTL,
92 uintptr (ttyfd), uintptr (TCGETS),
93 uintptr (unsafe.Pointer (dst)));
95 if err := os.NewSyscallError ("SYS_IOCTL", errno); errno!=0 && err != nil {
100 // return errors.New("Error")
106 func setTermios (src *termios) error {
107 r1, _, errno := syscall.Syscall (syscall.SYS_IOCTL,
108 uintptr (ttyfd), uintptr (TCSETS),
109 uintptr (unsafe.Pointer (src)));
111 if err := os.NewSyscallError ("SYS_IOCTL", errno); errno!=0 &&err != nil {
116 return errors.New ("Error")
122 func tty_raw () error {
125 raw.c_iflag &= ^(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
126 raw.c_oflag &= ^(OPOST);
127 raw.c_cflag |= (CS8);
128 raw.c_lflag &= ^(ECHO | ICANON | IEXTEN | ISIG);
133 if err := setTermios (&raw); err != nil { return err }
144 if err != nil { fmt.Printf ("SetRaw Error: %v\n",err) }
147 if err = getTermios (&orig_termios); err != nil { return }
150 // err = setTermios (&orig_termios)
153 if err = tty_raw (); err != nil { return }
154 //if err = screenio (); err != nil { return }
157 func SetSpeed (speed speed_t) {
161 if err != nil { fmt.Printf ("SetSpeed Error: %v\n",err) }
164 if err = getTermios (&orig_termios); err != nil { return }
165 orig_termios.c_ispeed = speed
166 orig_termios.c_ospeed = speed
167 err = setTermios (&orig_termios)