162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include "term.h"
362306a36Sopenharmony_ci#include <stdlib.h>
462306a36Sopenharmony_ci#include <termios.h>
562306a36Sopenharmony_ci#include <unistd.h>
662306a36Sopenharmony_ci#include <sys/ioctl.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_civoid get_term_dimensions(struct winsize *ws)
962306a36Sopenharmony_ci{
1062306a36Sopenharmony_ci	char *s = getenv("LINES");
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci	if (s != NULL) {
1362306a36Sopenharmony_ci		ws->ws_row = atoi(s);
1462306a36Sopenharmony_ci		s = getenv("COLUMNS");
1562306a36Sopenharmony_ci		if (s != NULL) {
1662306a36Sopenharmony_ci			ws->ws_col = atoi(s);
1762306a36Sopenharmony_ci			if (ws->ws_row && ws->ws_col)
1862306a36Sopenharmony_ci				return;
1962306a36Sopenharmony_ci		}
2062306a36Sopenharmony_ci	}
2162306a36Sopenharmony_ci#ifdef TIOCGWINSZ
2262306a36Sopenharmony_ci	if (ioctl(1, TIOCGWINSZ, ws) == 0 &&
2362306a36Sopenharmony_ci	    ws->ws_row && ws->ws_col)
2462306a36Sopenharmony_ci		return;
2562306a36Sopenharmony_ci#endif
2662306a36Sopenharmony_ci	ws->ws_row = 25;
2762306a36Sopenharmony_ci	ws->ws_col = 80;
2862306a36Sopenharmony_ci}
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_civoid set_term_quiet_input(struct termios *old)
3162306a36Sopenharmony_ci{
3262306a36Sopenharmony_ci	struct termios tc;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	tcgetattr(0, old);
3562306a36Sopenharmony_ci	tc = *old;
3662306a36Sopenharmony_ci	tc.c_lflag &= ~(ICANON | ECHO);
3762306a36Sopenharmony_ci	tc.c_cc[VMIN] = 0;
3862306a36Sopenharmony_ci	tc.c_cc[VTIME] = 0;
3962306a36Sopenharmony_ci	tcsetattr(0, TCSANOW, &tc);
4062306a36Sopenharmony_ci}
41