X-Git-Url: https://gitweb.ps.run/iftint/blobdiff_plain/43e389670ff0950611c61f19a4399b0eb441f04f..4732c7322c4af189232d5faee94e43fe71b175d2:/main2.c diff --git a/main2.c b/main2.c index 12f99d4..104c2a4 100644 --- a/main2.c +++ b/main2.c @@ -14,11 +14,13 @@ #define NEWARR(TYPE, NUM) ((TYPE *)calloc(NUM, sizeof(TYPE))) -// getch() +// 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 } @@ -289,14 +279,15 @@ GetChar() { int PeekChar() { - int c = GetChar(); - ungetch(c); + Draw(); + int c = peekch(); return c; } int GetInt() { static char intStr[16]; + intStr[0] = '\0'; int intStrLen = 0; int result = 0; int c;