xref: /OK3568_Linux_fs/kernel/tools/perf/util/term.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun #include "term.h"
3*4882a593Smuzhiyun #include <stdlib.h>
4*4882a593Smuzhiyun #include <termios.h>
5*4882a593Smuzhiyun #include <unistd.h>
6*4882a593Smuzhiyun #include <sys/ioctl.h>
7*4882a593Smuzhiyun 
get_term_dimensions(struct winsize * ws)8*4882a593Smuzhiyun void get_term_dimensions(struct winsize *ws)
9*4882a593Smuzhiyun {
10*4882a593Smuzhiyun 	char *s = getenv("LINES");
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun 	if (s != NULL) {
13*4882a593Smuzhiyun 		ws->ws_row = atoi(s);
14*4882a593Smuzhiyun 		s = getenv("COLUMNS");
15*4882a593Smuzhiyun 		if (s != NULL) {
16*4882a593Smuzhiyun 			ws->ws_col = atoi(s);
17*4882a593Smuzhiyun 			if (ws->ws_row && ws->ws_col)
18*4882a593Smuzhiyun 				return;
19*4882a593Smuzhiyun 		}
20*4882a593Smuzhiyun 	}
21*4882a593Smuzhiyun #ifdef TIOCGWINSZ
22*4882a593Smuzhiyun 	if (ioctl(1, TIOCGWINSZ, ws) == 0 &&
23*4882a593Smuzhiyun 	    ws->ws_row && ws->ws_col)
24*4882a593Smuzhiyun 		return;
25*4882a593Smuzhiyun #endif
26*4882a593Smuzhiyun 	ws->ws_row = 25;
27*4882a593Smuzhiyun 	ws->ws_col = 80;
28*4882a593Smuzhiyun }
29*4882a593Smuzhiyun 
set_term_quiet_input(struct termios * old)30*4882a593Smuzhiyun void set_term_quiet_input(struct termios *old)
31*4882a593Smuzhiyun {
32*4882a593Smuzhiyun 	struct termios tc;
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun 	tcgetattr(0, old);
35*4882a593Smuzhiyun 	tc = *old;
36*4882a593Smuzhiyun 	tc.c_lflag &= ~(ICANON | ECHO);
37*4882a593Smuzhiyun 	tc.c_cc[VMIN] = 0;
38*4882a593Smuzhiyun 	tc.c_cc[VTIME] = 0;
39*4882a593Smuzhiyun 	tcsetattr(0, TCSANOW, &tc);
40*4882a593Smuzhiyun }
41