doc1.txt~ 839 B

1234567891011121314151617181920212223242526272829303132
  1. static struct termios told;
  2. struct termios tnew;
  3. mch_tcgetattr(read_cmd_fd, &told);
  4. tnew = told;
  5. if (tmode == TMODE_RAW)
  6. {
  7. tnew.c_iflag &= ~(ICRNL | (T_XON == NULL || *T_XON == NUL ? IXON : 0));
  8. tnew.c_lflag &= ~(ICANON | ECHO | ISIG | ECHOE | IEXTEN);
  9. tnew.c_oflag &= ~(ONLCR | XTABS);
  10. tnew.c_oflag &= ~(ONLCR | TAB3);
  11. tnew.c_oflag &= ~ONLCR;
  12. tnew.c_cc[VMIN] = 1; // return after 1 char
  13. tnew.c_cc[VTIME] = 0; // don't wait
  14. }
  15. else if (tmode == TMODE_SLEEP)
  16. {
  17. tnew.c_lflag &= ~(ICANON | ECHO);
  18. tnew.c_cc[VMIN] = 1; // return after 1 char
  19. tnew.c_cc[VTIME] = 0; // don't wait
  20. }
  21. {
  22. int n = 10;
  23. // A signal may cause tcsetattr() to fail (e.g., SIGCONT). Retry a
  24. // few times.
  25. while (tcsetattr(read_cmd_fd, TCSANOW, &tnew) == -1
  26. && errno == EINTR && n > 0)
  27. --n;
  28. }