getty: document bits we don't set - maybe we should set some of them?
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d7c25e98bf
commit
3ff9be31be
@ -264,10 +264,17 @@ static void termios_init(int speed)
|
|||||||
if (option_mask32 & F_RTSCTS)
|
if (option_mask32 & F_RTSCTS)
|
||||||
G.termios.c_cflag |= CRTSCTS; /* flow control using RTS/CTS pins */
|
G.termios.c_cflag |= CRTSCTS; /* flow control using RTS/CTS pins */
|
||||||
#endif
|
#endif
|
||||||
|
/* Other bits in c_cflag:
|
||||||
|
* CSTOPB 2 stop bits (1 otherwise)
|
||||||
|
* PARENB Enable parity bit
|
||||||
|
* PARODD Use odd parity (else even)
|
||||||
|
* LOBLK Block job control output (??)
|
||||||
|
*/
|
||||||
G.termios.c_iflag = 0;
|
G.termios.c_iflag = 0;
|
||||||
G.termios.c_lflag = 0;
|
G.termios.c_lflag = 0;
|
||||||
/* non-raw output; add CR to each NL */
|
/* non-raw output; add CR to each NL */
|
||||||
G.termios.c_oflag = OPOST | ONLCR;
|
G.termios.c_oflag = OPOST | ONLCR;
|
||||||
|
|
||||||
G.termios.c_cc[VMIN] = 1; /* block reads if < 1 char is available */
|
G.termios.c_cc[VMIN] = 1; /* block reads if < 1 char is available */
|
||||||
G.termios.c_cc[VTIME] = 0; /* no timeout (reads block forever) */
|
G.termios.c_cc[VTIME] = 0; /* no timeout (reads block forever) */
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
@ -281,18 +288,55 @@ static void termios_init(int speed)
|
|||||||
|
|
||||||
static void termios_final(void)
|
static void termios_final(void)
|
||||||
{
|
{
|
||||||
/* software flow control on output; and on input */
|
/* software flow control on output (stop sending if XOFF is recvd);
|
||||||
|
* and on input (send XOFF when buffer is full)
|
||||||
|
*/
|
||||||
G.termios.c_iflag |= IXON | IXOFF;
|
G.termios.c_iflag |= IXON | IXOFF;
|
||||||
if (G.eol == '\r') {
|
if (G.eol == '\r') {
|
||||||
G.termios.c_iflag |= ICRNL; /* map CR on input to NL */
|
G.termios.c_iflag |= ICRNL; /* map CR on input to NL */
|
||||||
}
|
}
|
||||||
/* non-raw input; enable SIGINT/QUIT/etc sigs; echo;
|
/* Other bits in c_iflag:
|
||||||
* echo erase character as BS-space-BS;
|
* IXANY Any recvd char enables output (any char is also a XON)
|
||||||
* echo NL on kill char;
|
* INPCK Enable parity check
|
||||||
* erase entire line via BS-space-BS on kill char */
|
* IGNPAR Ignore parity errors (drop bad bytes)
|
||||||
|
* PARMRK Mark parity errors with 0xff, 0x00 prefix
|
||||||
|
* (else bad byte is received as 0x00)
|
||||||
|
* ISTRIP Strip parity bit
|
||||||
|
* IGNBRK Ignore break condition
|
||||||
|
* BRKINT Send SIGINT on break - maybe set this?
|
||||||
|
* INLCR Map NL to CR
|
||||||
|
* IGNCR Ignore CR
|
||||||
|
* ICRNL Map CR to NL
|
||||||
|
* IUCLC Map uppercase to lowercase
|
||||||
|
* IMAXBEL Echo BEL on input line too long
|
||||||
|
* IUTF8 [Appears to affect tty's idea of char widths,
|
||||||
|
* observed to improve backspacing through Unicode chars]
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* line buffered input (NL or EOL or EOF chars end a line);
|
||||||
|
* recognize INT/QUIT/SUSP chars;
|
||||||
|
* echo input chars;
|
||||||
|
* echo BS-SP-BS on erase character;
|
||||||
|
* echo kill char specially, not as ^c (ECHOKE controls how exactly);
|
||||||
|
* erase all input via BS-SP-BS on kill char (else go to next line)
|
||||||
|
*/
|
||||||
G.termios.c_lflag |= ICANON | ISIG | ECHO | ECHOE | ECHOK | ECHOKE;
|
G.termios.c_lflag |= ICANON | ISIG | ECHO | ECHOE | ECHOK | ECHOKE;
|
||||||
/* echo ctrl chars as ^c; (what is ECHOPRT?) */
|
/* Other bits in c_lflag:
|
||||||
/* no longer in c_lflag: | ECHOCTL | ECHOPRT */
|
* XCASE Map uppercase to \lowercase [tried, doesn't work]
|
||||||
|
* ECHONL Echo NL even if ECHO is not set
|
||||||
|
* NOFLSH Don't flush input buffer after interrupt or quit chars
|
||||||
|
* IEXTEN Enable extended functions (??)
|
||||||
|
* [glibc says it enables c_cc[LNEXT] "enter literal char"
|
||||||
|
* and c_cc[VDISCARD] "toggle discard buffered output" chars]
|
||||||
|
* ECHOCTL Echo ctrl chars as ^c (else don't echo) - maybe set this?
|
||||||
|
* ECHOPRT On erase, echo erased chars
|
||||||
|
* [qwe<BS><BS><BS> input looks like "qwe\ewq/" on screen]
|
||||||
|
* FLUSHO Output being flushed (c_cc[VDISCARD] is in effect)
|
||||||
|
* PENDIN Retype pending input at next read or input char
|
||||||
|
* (c_cc[VREPRINT] is being processes)
|
||||||
|
* TOSTOP Send SIGTTOU for background output
|
||||||
|
* (why "stty sane" unsets this bit?)
|
||||||
|
*/
|
||||||
|
|
||||||
G.termios.c_cc[VINTR] = DEF_INTR;
|
G.termios.c_cc[VINTR] = DEF_INTR;
|
||||||
G.termios.c_cc[VQUIT] = DEF_QUIT;
|
G.termios.c_cc[VQUIT] = DEF_QUIT;
|
||||||
@ -305,6 +349,14 @@ static void termios_final(void)
|
|||||||
G.termios.c_cc[VSWTCH] = DEF_SWITCH;
|
G.termios.c_cc[VSWTCH] = DEF_SWITCH;
|
||||||
#endif
|
#endif
|
||||||
G.termios.c_cc[VKILL] = DEF_KILL;
|
G.termios.c_cc[VKILL] = DEF_KILL;
|
||||||
|
/* Other control chars:
|
||||||
|
* VEOL2
|
||||||
|
* VERASE, VWERASE - (word) erase. we may set VERASE in get_logname
|
||||||
|
* VREPRINT - reprint current input buffer
|
||||||
|
* VLNEXT, VDISCARD, VSTATUS
|
||||||
|
* VSUSP, VDSUSP - send (delayed) SIGTSTP
|
||||||
|
* VSTART, VSTOP - chars used for IXON/IXOFF
|
||||||
|
*/
|
||||||
|
|
||||||
if (tcsetattr_stdin_TCSANOW(&G.termios) < 0)
|
if (tcsetattr_stdin_TCSANOW(&G.termios) < 0)
|
||||||
bb_perror_msg_and_die("tcsetattr");
|
bb_perror_msg_and_die("tcsetattr");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user