From b836e0a4630c9cf8c098b18bca83a3323e181b7f Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 2 Aug 2023 21:11:57 +0200 Subject: [PATCH] added termsize to main2 --- main2.c | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/main2.c b/main2.c index 51c5ad4..5ea32ef 100644 --- a/main2.c +++ b/main2.c @@ -17,8 +17,10 @@ // getch() #ifdef _WIN32 +#include #include #else +#include #include #include #include @@ -30,21 +32,7 @@ int getch(void) int ch; tcgetattr( STDIN_FILENO, &oldattr ); newattr = oldattr; - newattr.c_lflag &= ~( ICANON | ECHO ); - tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); - ch = getchar(); - tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); - return ch; -} - -/* reads from keypress, echoes */ -int getche(void) -{ - struct termios oldattr, newattr; - int ch; - tcgetattr( STDIN_FILENO, &oldattr ); - newattr = oldattr; - newattr.c_lflag &= ~( ICANON ); + newattr.c_lflag &= ~( ICANON | ECHO ); // no ECHO for echo(?) tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); @@ -91,15 +79,17 @@ void vt100CursorPos(int v, int h) { vt100Escape("[%d;%dH", v, h); } void vt100SaveCursor() { vt100Escape("7"); } void vt100RestoreCursor() { vt100Escape("8"); } void vt100GetScreenSize(int * v, int * h) { - *v = *h = 0; - vt100CursorPos(1000000, 1000000); - printf("\033[6n"); - getch(); getch(); - int c; - while ((c = getch()) != ';') - *v = (10*(*v)+(c-'0')); - while ((c = getch()) != 'R') - *h = (10*(*h)+(c-'0')); +#ifdef _WIN32 + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); + *h = csbi.srWindow.Right - csbi.srWindow.Left + 1; + *v = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +#else + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + *h = w.ws_row; + *v = w.ws_col; +#endif } -- 2.50.1