console: purge curses bits from console.h
Handle the translation from vga chars to curses chars in curses_update() instead of console_write_ch(). Purge any curses support bits from ui/console.h include file. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 20170927103811.19249-1-kraxel@redhat.com
This commit is contained in:
		| @@ -336,29 +336,10 @@ static inline pixman_format_code_t surface_format(DisplaySurface *s) | ||||
|     return s->format; | ||||
| } | ||||
|  | ||||
| #ifdef CONFIG_CURSES | ||||
| /* KEY_EVENT is defined in wincon.h and in curses.h. Avoid redefinition. */ | ||||
| #undef KEY_EVENT | ||||
| #include <curses.h> | ||||
| #undef KEY_EVENT | ||||
| typedef chtype console_ch_t; | ||||
| extern chtype vga_to_curses[]; | ||||
| #else | ||||
| typedef unsigned long console_ch_t; | ||||
| #endif | ||||
| typedef uint32_t console_ch_t; | ||||
|  | ||||
| static inline void console_write_ch(console_ch_t *dest, uint32_t ch) | ||||
| { | ||||
|     uint8_t c = ch; | ||||
| #ifdef CONFIG_CURSES | ||||
|     if (vga_to_curses[c]) { | ||||
|         ch &= ~(console_ch_t)0xff; | ||||
|         ch |= vga_to_curses[c]; | ||||
|     } | ||||
| #else | ||||
|     if (c == '\0') { | ||||
|         ch |= ' '; | ||||
|     } | ||||
| #endif | ||||
|     *dest = ch; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -163,6 +163,12 @@ uint32_t helper_cp0_get(CPUUniCore32State *env, uint32_t creg, uint32_t cop) | ||||
| } | ||||
|  | ||||
| #ifdef CONFIG_CURSES | ||||
|  | ||||
| /* KEY_EVENT is defined in wincon.h and in curses.h. Avoid redefinition. */ | ||||
| #undef KEY_EVENT | ||||
| #include <curses.h> | ||||
| #undef KEY_EVENT | ||||
|  | ||||
| /* | ||||
|  * FIXME: | ||||
|  *     1. curses windows will be blank when switching back | ||||
|   | ||||
							
								
								
									
										25
									
								
								ui/curses.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								ui/curses.c
									
									
									
									
									
								
							| @@ -33,6 +33,11 @@ | ||||
| #include "ui/input.h" | ||||
| #include "sysemu/sysemu.h" | ||||
|  | ||||
| /* KEY_EVENT is defined in wincon.h and in curses.h. Avoid redefinition. */ | ||||
| #undef KEY_EVENT | ||||
| #include <curses.h> | ||||
| #undef KEY_EVENT | ||||
|  | ||||
| #define FONT_HEIGHT 16 | ||||
| #define FONT_WIDTH 8 | ||||
|  | ||||
| @@ -42,16 +47,26 @@ static WINDOW *screenpad = NULL; | ||||
| static int width, height, gwidth, gheight, invalidate; | ||||
| static int px, py, sminx, sminy, smaxx, smaxy; | ||||
|  | ||||
| chtype vga_to_curses[256]; | ||||
| static chtype vga_to_curses[256]; | ||||
|  | ||||
| static void curses_update(DisplayChangeListener *dcl, | ||||
|                           int x, int y, int w, int h) | ||||
| { | ||||
|     chtype *line; | ||||
|     console_ch_t *line; | ||||
|     chtype curses_line[width]; | ||||
|  | ||||
|     line = ((chtype *) screen) + y * width; | ||||
|     for (h += y; y < h; y ++, line += width) | ||||
|         mvwaddchnstr(screenpad, y, 0, line, width); | ||||
|     line = screen + y * width; | ||||
|     for (h += y; y < h; y ++, line += width) { | ||||
|         for (x = 0; x < width; x++) { | ||||
|             chtype ch = line[x] & 0xff; | ||||
|             chtype at = line[x] & ~0xff; | ||||
|             if (vga_to_curses[ch]) { | ||||
|                 ch = vga_to_curses[ch]; | ||||
|             } | ||||
|             curses_line[x] = ch | at; | ||||
|         } | ||||
|         mvwaddchnstr(screenpad, y, 0, curses_line, width); | ||||
|     } | ||||
|  | ||||
|     pnoutrefresh(screenpad, py, px, sminy, sminx, smaxy - 1, smaxx - 1); | ||||
|     refresh(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user