initscr(): Use stdout, not stderr, just like other conio.h macros

A program's stderr may have been redirected by the operator.  We want to
query the size of stdout, even though it is buffered, so add fflush() to
handle that.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson committed 2017-10-24 08:33:02 +02:00
1 parent 3691044007
commit 2534c398ea
1 file changed
+7 -5
+7 -5
View File
@@ -103,11 +103,11 @@ static inline void initscr(int *row, int *col)
}
/* Disable echo to terminal while probing */
tcgetattr(STDERR_FILENO, &tc);
tcgetattr(STDOUT_FILENO, &tc);
saved = tc;
tc.c_cflag |= (CLOCAL | CREAD);
tc.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
tcsetattr(STDERR_FILENO, TCSANOW, &tc);
tcsetattr(STDOUT_FILENO, TCSANOW, &tc);
/*
* Save cursor pos+attr
@@ -115,7 +115,8 @@ static inline void initscr(int *row, int *col)
* Set cursor at the far bottom,right pos
* Query term for resulting pos
*/
fprintf(stderr, "\e7" "\e[r" "\e[999;999H" "\e[6n");
fprintf(stdout, "\e7" "\e[r" "\e[999;999H" "\e[6n");
fflush(stdout);
/*
* Wait here for terminal to echo back \e[row,lineR ...
@@ -128,10 +129,11 @@ static inline void initscr(int *row, int *col)
/*
* Restore above saved cursor pos+attr
*/
fprintf(stderr, "\e8");
fprintf(stdout, "\e8");
fflush(stdout);
/* Restore terminal */
tcsetattr(STDERR_FILENO, TCSANOW, &saved);
tcsetattr(STDOUT_FILENO, TCSANOW, &saved);
return;
#else