| 12345678910111213141516171819202122232425262728293031323334353637 |
- static struct termios told;
- struct termios tnew;
- mch_tcgetattr(read_cmd_fd, &told);
- tnew = told;
- if (tmode == TMODE_RAW)
- {
- tnew.c_iflag &= ~(ICRNL | (T_XON == NULL || *T_XON == NUL ? IXON : 0));
- tnew.c_lflag &= ~(ICANON | ECHO | ISIG | ECHOE | IEXTEN);
- //
- tnew.c_oflag &= ~(ONLCR | XTABS);
-
- tnew.c_oflag &= ~(ONLCR | TAB3);
-
- tnew.c_oflag &= ~ONLCR;
- //
-
- tnew.c_cc[VMIN] = 1; // return after 1 char
- tnew.c_cc[VTIME] = 0; // don't wait
- }
- else if (tmode == TMODE_SLEEP)
- {
- tnew.c_lflag &= ~(ICANON | ECHO);
- tnew.c_cc[VMIN] = 1; // return after 1 char
- tnew.c_cc[VTIME] = 0; // don't wait
- }
- {
- int n = 10;
- // A signal may cause tcsetattr() to fail (e.g., SIGCONT). Retry a
- // few times.
- while (tcsetattr(read_cmd_fd, TCSANOW, &tnew) == -1
- && errno == EINTR && n > 0)
- --n;
- }
|