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*4882a593Smuzhiyunvoid 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*4882a593Smuzhiyunvoid 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