aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--win32/winansi.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/win32/winansi.c b/win32/winansi.c
index f5d836bd2..f45970747 100644
--- a/win32/winansi.c
+++ b/win32/winansi.c
@@ -21,22 +21,20 @@
21#undef read 21#undef read
22#undef getc 22#undef getc
23 23
24static HANDLE console = INVALID_HANDLE_VALUE;
25static HANDLE console_in = INVALID_HANDLE_VALUE;
26static WORD plain_attr; 24static WORD plain_attr;
27static WORD attr; 25static WORD attr;
28static int negative; 26static int negative;
29 27
28static HANDLE get_console(void)
29{
30 return GetStdHandle(STD_OUTPUT_HANDLE);
31}
32
30static void init(void) 33static void init(void)
31{ 34{
35 HANDLE console = get_console();
32 CONSOLE_SCREEN_BUFFER_INFO sbi; 36 CONSOLE_SCREEN_BUFFER_INFO sbi;
33 37
34 if (console != INVALID_HANDLE_VALUE || console_in != INVALID_HANDLE_VALUE)
35 return;
36
37 console = GetStdHandle(STD_OUTPUT_HANDLE);
38 console_in = GetStdHandle(STD_INPUT_HANDLE);
39
40 if (GetConsoleScreenBufferInfo(console, &sbi)) { 38 if (GetConsoleScreenBufferInfo(console, &sbi)) {
41 attr = plain_attr = sbi.wAttributes; 39 attr = plain_attr = sbi.wAttributes;
42 negative = 0; 40 negative = 0;
@@ -46,13 +44,13 @@ static void init(void)
46static int is_console(int fd) 44static int is_console(int fd)
47{ 45{
48 init(); 46 init();
49 return isatty(fd) && console != INVALID_HANDLE_VALUE; 47 return isatty(fd) && get_console() != INVALID_HANDLE_VALUE;
50} 48}
51 49
52static int is_console_in(int fd) 50static int is_console_in(int fd)
53{ 51{
54 init(); 52 init();
55 return isatty(fd) && console_in != INVALID_HANDLE_VALUE; 53 return isatty(fd) && GetStdHandle(STD_INPUT_HANDLE) != INVALID_HANDLE_VALUE;
56} 54}
57 55
58static int skip_ansi_emulation(void) 56static int skip_ansi_emulation(void)
@@ -87,20 +85,13 @@ static HANDLE dup_handle(HANDLE h)
87static void use_alt_buffer(int flag) 85static void use_alt_buffer(int flag)
88{ 86{
89 static HANDLE console_orig = INVALID_HANDLE_VALUE; 87 static HANDLE console_orig = INVALID_HANDLE_VALUE;
90 static int initialised = FALSE;
91 CONSOLE_SCREEN_BUFFER_INFO sbi; 88 CONSOLE_SCREEN_BUFFER_INFO sbi;
92 HANDLE h; 89 HANDLE console, h;
93 90
94 init(); 91 init();
95 92
96 if (console == INVALID_HANDLE_VALUE) 93 console = get_console();
97 return; 94 console_orig = dup_handle(console);
98
99 if (!initialised) {
100 console_orig = dup_handle(console);
101 initialised = TRUE;
102 }
103
104 if (console_orig == INVALID_HANDLE_VALUE) 95 if (console_orig == INVALID_HANDLE_VALUE)
105 return; 96 return;
106 97
@@ -120,6 +111,7 @@ static void use_alt_buffer(int flag)
120 if (h == INVALID_HANDLE_VALUE) 111 if (h == INVALID_HANDLE_VALUE)
121 return; 112 return;
122 113
114 console = get_console();
123 if (GetConsoleScreenBufferInfo(console, &sbi)) 115 if (GetConsoleScreenBufferInfo(console, &sbi))
124 SetConsoleScreenBufferSize(h, sbi.dwSize); 116 SetConsoleScreenBufferSize(h, sbi.dwSize);
125 } 117 }
@@ -141,6 +133,7 @@ static void use_alt_buffer(int flag)
141 133
142static void set_console_attr(void) 134static void set_console_attr(void)
143{ 135{
136 HANDLE console = get_console();
144 WORD attributes = attr; 137 WORD attributes = attr;
145 if (negative) { 138 if (negative) {
146 attributes &= ~FOREGROUND_ALL; 139 attributes &= ~FOREGROUND_ALL;
@@ -167,6 +160,7 @@ static void set_console_attr(void)
167 160
168static void clear_buffer(DWORD len, COORD pos) 161static void clear_buffer(DWORD len, COORD pos)
169{ 162{
163 HANDLE console = get_console();
170 DWORD dummy; 164 DWORD dummy;
171 165
172 FillConsoleOutputCharacterA(console, ' ', len, pos, &dummy); 166 FillConsoleOutputCharacterA(console, ' ', len, pos, &dummy);
@@ -175,6 +169,7 @@ static void clear_buffer(DWORD len, COORD pos)
175 169
176static void erase_in_line(void) 170static void erase_in_line(void)
177{ 171{
172 HANDLE console = get_console();
178 CONSOLE_SCREEN_BUFFER_INFO sbi; 173 CONSOLE_SCREEN_BUFFER_INFO sbi;
179 174
180 if (!GetConsoleScreenBufferInfo(console, &sbi)) 175 if (!GetConsoleScreenBufferInfo(console, &sbi))
@@ -184,6 +179,7 @@ static void erase_in_line(void)
184 179
185static void erase_till_end_of_screen(void) 180static void erase_till_end_of_screen(void)
186{ 181{
182 HANDLE console = get_console();
187 CONSOLE_SCREEN_BUFFER_INFO sbi; 183 CONSOLE_SCREEN_BUFFER_INFO sbi;
188 DWORD len; 184 DWORD len;
189 185
@@ -196,6 +192,7 @@ static void erase_till_end_of_screen(void)
196 192
197void reset_screen(void) 193void reset_screen(void)
198{ 194{
195 HANDLE console = get_console();
199 CONSOLE_SCREEN_BUFFER_INFO sbi; 196 CONSOLE_SCREEN_BUFFER_INFO sbi;
200 COORD pos = { 0, 0 }; 197 COORD pos = { 0, 0 };
201 198
@@ -208,6 +205,7 @@ void reset_screen(void)
208 205
209void move_cursor_row(int n) 206void move_cursor_row(int n)
210{ 207{
208 HANDLE console = get_console();
211 CONSOLE_SCREEN_BUFFER_INFO sbi; 209 CONSOLE_SCREEN_BUFFER_INFO sbi;
212 210
213 if(!GetConsoleScreenBufferInfo(console, &sbi)) 211 if(!GetConsoleScreenBufferInfo(console, &sbi))
@@ -218,6 +216,7 @@ void move_cursor_row(int n)
218 216
219static void move_cursor_column(int n) 217static void move_cursor_column(int n)
220{ 218{
219 HANDLE console = get_console();
221 CONSOLE_SCREEN_BUFFER_INFO sbi; 220 CONSOLE_SCREEN_BUFFER_INFO sbi;
222 221
223 if (!GetConsoleScreenBufferInfo(console, &sbi)) 222 if (!GetConsoleScreenBufferInfo(console, &sbi))
@@ -228,6 +227,7 @@ static void move_cursor_column(int n)
228 227
229static void move_cursor(int x, int y) 228static void move_cursor(int x, int y)
230{ 229{
230 HANDLE console = get_console();
231 COORD pos; 231 COORD pos;
232 CONSOLE_SCREEN_BUFFER_INFO sbi; 232 CONSOLE_SCREEN_BUFFER_INFO sbi;
233 233