xref: /openbmc/linux/tools/perf/util/term.c (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2b0742e90SArnaldo Carvalho de Melo #include "term.h"
3b0742e90SArnaldo Carvalho de Melo #include <stdlib.h>
4b0742e90SArnaldo Carvalho de Melo #include <termios.h>
5b0742e90SArnaldo Carvalho de Melo #include <unistd.h>
6b0742e90SArnaldo Carvalho de Melo #include <sys/ioctl.h>
71fe143c5SJosh Poimboeuf 
get_term_dimensions(struct winsize * ws)81fe143c5SJosh Poimboeuf void get_term_dimensions(struct winsize *ws)
91fe143c5SJosh Poimboeuf {
101fe143c5SJosh Poimboeuf 	char *s = getenv("LINES");
111fe143c5SJosh Poimboeuf 
121fe143c5SJosh Poimboeuf 	if (s != NULL) {
131fe143c5SJosh Poimboeuf 		ws->ws_row = atoi(s);
141fe143c5SJosh Poimboeuf 		s = getenv("COLUMNS");
151fe143c5SJosh Poimboeuf 		if (s != NULL) {
161fe143c5SJosh Poimboeuf 			ws->ws_col = atoi(s);
171fe143c5SJosh Poimboeuf 			if (ws->ws_row && ws->ws_col)
181fe143c5SJosh Poimboeuf 				return;
191fe143c5SJosh Poimboeuf 		}
201fe143c5SJosh Poimboeuf 	}
211fe143c5SJosh Poimboeuf #ifdef TIOCGWINSZ
221fe143c5SJosh Poimboeuf 	if (ioctl(1, TIOCGWINSZ, ws) == 0 &&
231fe143c5SJosh Poimboeuf 	    ws->ws_row && ws->ws_col)
241fe143c5SJosh Poimboeuf 		return;
251fe143c5SJosh Poimboeuf #endif
261fe143c5SJosh Poimboeuf 	ws->ws_row = 25;
271fe143c5SJosh Poimboeuf 	ws->ws_col = 80;
281fe143c5SJosh Poimboeuf }
291fe143c5SJosh Poimboeuf 
set_term_quiet_input(struct termios * old)301fe143c5SJosh Poimboeuf void set_term_quiet_input(struct termios *old)
311fe143c5SJosh Poimboeuf {
321fe143c5SJosh Poimboeuf 	struct termios tc;
331fe143c5SJosh Poimboeuf 
341fe143c5SJosh Poimboeuf 	tcgetattr(0, old);
351fe143c5SJosh Poimboeuf 	tc = *old;
361fe143c5SJosh Poimboeuf 	tc.c_lflag &= ~(ICANON | ECHO);
371fe143c5SJosh Poimboeuf 	tc.c_cc[VMIN] = 0;
381fe143c5SJosh Poimboeuf 	tc.c_cc[VTIME] = 0;
391fe143c5SJosh Poimboeuf 	tcsetattr(0, TCSANOW, &tc);
401fe143c5SJosh Poimboeuf }
41