]> git.ipfire.org Git - thirdparty/util-linux.git/blame - include/ttyutils.h
lib/ttyutils: create .c file
[thirdparty/util-linux.git] / include / ttyutils.h
CommitLineData
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
11extern int get_terminal_width(void);
12
13
879a7ab4
KZ
14#define UL_TTY_KEEPCFLAGS (1 << 1)
15#define UL_TTY_UTF8 (1 << 2)
16
17static 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 */