]>
Commit | Line | Data |
---|---|---|
0b6198ec DR |
1 | #ifndef UTIL_LINUX_TTYUTILS_H |
2 | #define UTIL_LINUX_TTYUTILS_H | |
879a7ab4 | 3 | |
e872e320 | 4 | #include <stdlib.h> |
879a7ab4 | 5 | #include <termios.h> |
7e9a9af1 | 6 | #include <limits.h> |
e872e320 PU |
7 | #ifdef HAVE_SYS_IOCTL_H |
8 | #include <sys/ioctl.h> | |
9 | #endif | |
879a7ab4 | 10 | |
4e76adb0 KZ |
11 | extern int get_terminal_width(void); |
12 | ||
13 | ||
879a7ab4 KZ |
14 | #define UL_TTY_KEEPCFLAGS (1 << 1) |
15 | #define UL_TTY_UTF8 (1 << 2) | |
16 | ||
17 | static inline void reset_virtual_console(struct termios *tp, int flags) | |
18 | { | |
19 | /* Use defaults of <sys/ttydefaults.h> for base settings */ | |
20 | tp->c_iflag |= TTYDEF_IFLAG; | |
21 | tp->c_oflag |= TTYDEF_OFLAG; | |
22 | tp->c_lflag |= TTYDEF_LFLAG; | |
23 | ||
24 | if ((flags & UL_TTY_KEEPCFLAGS) == 0) { | |
25 | #ifdef CBAUD | |
26 | tp->c_lflag &= ~CBAUD; | |
27 | #endif | |
28 | tp->c_cflag |= (B38400 | TTYDEF_CFLAG); | |
29 | } | |
30 | ||
31 | /* Sane setting, allow eight bit characters, no carriage return delay | |
32 | * the same result as `stty sane cr0 pass8' | |
33 | */ | |
34 | tp->c_iflag |= (BRKINT | ICRNL | IMAXBEL); | |
35 | tp->c_iflag &= ~(IGNBRK | INLCR | IGNCR | IXOFF | IUCLC | IXANY | ISTRIP); | |
36 | tp->c_oflag |= (OPOST | ONLCR | NL0 | CR0 | TAB0 | BS0 | VT0 | FF0); | |
37 | tp->c_oflag &= ~(OLCUC | OCRNL | ONOCR | ONLRET | OFILL | \ | |
38 | NLDLY|CRDLY|TABDLY|BSDLY|VTDLY|FFDLY); | |
39 | tp->c_lflag |= (ISIG | ICANON | IEXTEN | ECHO|ECHOE|ECHOK|ECHOKE); | |
40 | tp->c_lflag &= ~(ECHONL|ECHOCTL|ECHOPRT | NOFLSH | TOSTOP); | |
41 | ||
42 | if ((flags & UL_TTY_KEEPCFLAGS) == 0) { | |
43 | tp->c_cflag |= (CREAD | CS8 | HUPCL); | |
44 | tp->c_cflag &= ~(PARODD | PARENB); | |
45 | } | |
46 | #ifdef OFDEL | |
47 | tp->c_oflag &= ~OFDEL; | |
48 | #endif | |
49 | #ifdef XCASE | |
50 | tp->c_lflag &= ~XCASE; | |
51 | #endif | |
52 | #ifdef IUTF8 | |
53 | if (flags & UL_TTY_UTF8) | |
54 | tp->c_iflag |= IUTF8; /* Set UTF-8 input flag */ | |
55 | else | |
56 | tp->c_iflag &= ~IUTF8; | |
57 | #endif | |
58 | /* VTIME and VMIN can overlap with VEOF and VEOL since they are | |
59 | * only used for non-canonical mode. We just set the at the | |
60 | * beginning, so nothing bad should happen. | |
61 | */ | |
62 | tp->c_cc[VTIME] = 0; | |
63 | tp->c_cc[VMIN] = 1; | |
64 | tp->c_cc[VINTR] = CINTR; | |
65 | tp->c_cc[VQUIT] = CQUIT; | |
66 | tp->c_cc[VERASE] = CERASE; /* ASCII DEL (0177) */ | |
67 | tp->c_cc[VKILL] = CKILL; | |
68 | tp->c_cc[VEOF] = CEOF; | |
69 | #ifdef VSWTC | |
70 | tp->c_cc[VSWTC] = _POSIX_VDISABLE; | |
71 | #elif defined(VSWTCH) | |
72 | tp->c_cc[VSWTCH] = _POSIX_VDISABLE; | |
73 | #endif | |
74 | tp->c_cc[VSTART] = CSTART; | |
75 | tp->c_cc[VSTOP] = CSTOP; | |
76 | tp->c_cc[VSUSP] = CSUSP; | |
77 | tp->c_cc[VEOL] = _POSIX_VDISABLE; | |
78 | tp->c_cc[VREPRINT] = CREPRINT; | |
79 | tp->c_cc[VDISCARD] = CDISCARD; | |
80 | tp->c_cc[VWERASE] = CWERASE; | |
81 | tp->c_cc[VLNEXT] = CLNEXT; | |
82 | tp->c_cc[VEOL2] = _POSIX_VDISABLE; | |
83 | } | |
0b6198ec | 84 | |
e872e320 PU |
85 | |
86 | ||
0b6198ec | 87 | #endif /* UTIL_LINUX_TTYUTILS_H */ |