From 96ac4dc17b53f5bec3c4dd31b9b9a3c3e5fe3582 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sun, 7 Apr 2019 12:28:04 +0100 Subject: winansi: code shrink Add a common function to clear a section of the screen buffer. --- win32/winansi.c | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) (limited to 'win32') diff --git a/win32/winansi.c b/win32/winansi.c index a2c49b7e7..38bd6824f 100644 --- a/win32/winansi.c +++ b/win32/winansi.c @@ -104,52 +104,45 @@ static void set_console_attr(void) SetConsoleTextAttribute(console, attributes); } +static void clear_buffer(DWORD len, COORD pos) +{ + DWORD dummy; + + FillConsoleOutputCharacterA(console, ' ', len, pos, &dummy); + FillConsoleOutputAttribute(console, plain_attr, len, pos, &dummy); +} + static void erase_in_line(void) { CONSOLE_SCREEN_BUFFER_INFO sbi; - DWORD dummy; /* Needed for Windows 7 (or Vista) regression */ if (!GetConsoleScreenBufferInfo(console, &sbi)) return; - FillConsoleOutputCharacterA(console, ' ', - sbi.dwSize.X - sbi.dwCursorPosition.X, sbi.dwCursorPosition, - &dummy); - FillConsoleOutputAttribute(console, plain_attr, - sbi.dwSize.X - sbi.dwCursorPosition.X, sbi.dwCursorPosition, - &dummy); + clear_buffer(sbi.dwSize.X - sbi.dwCursorPosition.X, sbi.dwCursorPosition); } static void erase_till_end_of_screen(void) { CONSOLE_SCREEN_BUFFER_INFO sbi; - DWORD dummy, len; + DWORD len; if(!GetConsoleScreenBufferInfo(console, &sbi)) return; len = sbi.dwSize.X - sbi.dwCursorPosition.X + sbi.dwSize.X * (sbi.srWindow.Bottom - sbi.dwCursorPosition.Y); - - FillConsoleOutputCharacterA(console, ' ', len, sbi.dwCursorPosition, - &dummy); - FillConsoleOutputAttribute(console, plain_attr, len, sbi.dwCursorPosition, - &dummy); + clear_buffer(len, sbi.dwCursorPosition); } void reset_screen(void) { CONSOLE_SCREEN_BUFFER_INFO sbi; - COORD pos; - DWORD dummy, len; + COORD pos = { 0, 0 }; /* move to start of screen buffer and clear it all */ if (!GetConsoleScreenBufferInfo(console, &sbi)) return; - pos.X = 0; - pos.Y = 0; SetConsoleCursorPosition(console, pos); - len = sbi.dwSize.X * sbi.dwSize.Y; - FillConsoleOutputCharacterA(console, ' ', len, pos, &dummy); - FillConsoleOutputAttribute(console, plain_attr, len, pos, &dummy); + clear_buffer(sbi.dwSize.X * sbi.dwSize.Y, pos); } void move_cursor_row(int n) -- cgit v1.2.3-55-g6feb