diff options
| author | Jakob Kaivo <jkk@ung.org> | 2022-04-18 19:12:52 -0400 |
|---|---|---|
| committer | Jakob Kaivo <jkk@ung.org> | 2022-04-18 19:12:52 -0400 |
| commit | 1fa82850d87a0f5526153655a2368c46ea447a90 (patch) | |
| tree | 5ffd8c628a4a221b93cd68b36ec82b6e182bd314 /tty.c | |
| parent | 344424ffafe5e3b310b5595d897579544abdb90d (diff) | |
switch to curses
Diffstat (limited to 'tty.c')
| -rw-r--r-- | tty.c | 77 |
1 files changed, 0 insertions, 77 deletions
@@ -1,77 +0,0 @@ -#define _XOPEN_SOURCE 700 -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <termios.h> - -#include "more.h" - -static FILE *resetty = NULL; -static struct termios resettings = { 0 }; - -static void resetterm(void) -{ - tcsetattr(fileno(resetty), TCSANOW, &resettings); -} - -static int query_term(const char *cap, const char *variable, int def) -{ - int n = 0; - char cmd[64]; - snprintf(cmd, sizeof(cmd), "tput %s", cap); - FILE *f = popen(cmd, "r"); - if (f) { - if (fscanf(f, "%d", &n) != 1) { - n = 0; - } - pclose(f); - if (n != 0) { - return n; - } - } - - char *value = getenv(variable); - if (value) { - n = atoi(value); - } - return n ? n : def; -} - -struct more_tty more_open_tty(int lines) -{ - struct more_tty mt = { - .tty = stderr, - .lines = query_term("lines", "LINES", 24), - .columns = query_term("cols", "COLUMNS", 80), - }; - - if (lines > 0) { - mt.lines = lines; - } - - /* leave room for prompts */ - lines--; - - /* FIXME: only open /dev/tty if stderr is not readable */ - // if (!(fcntl(fileno(mt.tty), F_GETFL) & (O_WRONLY | O_RDWR))) { - mt.tty = fopen("/dev/tty", "rb+"); - // } - if (mt.tty == NULL) { - perror("Couldn't open tty for reading"); - exit(1); - } - - setbuf(mt.tty, NULL); - - tcgetattr(fileno(mt.tty), &resettings); - struct termios term = resettings; - term.c_lflag &= ~(ECHO | ICANON); - term.c_cc[VMIN] = 1; - term.c_cc[VTIME] = 0; - tcsetattr(fileno(mt.tty), TCSANOW, &term); - - resetty = mt.tty; - atexit(resetterm); - - return mt; -} |
