diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2017-09-27 12:38:11 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2017-09-29 10:36:33 +0200 |
commit | e2f82e924d057935dd4c61c0c53e11b15762eda2 (patch) | |
tree | 32007cf68c19695db0b1dd1e43bc85cb8e8ad6ad | |
parent | ab161529261928ae7f3556e3220829c34b2686ec (diff) |
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
-rw-r--r-- | include/ui/console.h | 23 | ||||
-rw-r--r-- | target/unicore32/helper.c | 6 | ||||
-rw-r--r-- | ui/curses.c | 27 |
3 files changed, 29 insertions, 27 deletions
diff --git a/include/ui/console.h b/include/ui/console.h index 8024878bae..6966e4bd9d 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -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; } diff --git a/target/unicore32/helper.c b/target/unicore32/helper.c index 309dcd1ae1..3393d2c020 100644 --- a/target/unicore32/helper.c +++ b/target/unicore32/helper.c @@ -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 diff --git a/ui/curses.c b/ui/curses.c index 03cefdf470..85503876c0 100644 --- a/ui/curses.c +++ b/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; - - line = ((chtype *) screen) + y * width; - for (h += y; y < h; y ++, line += width) - mvwaddchnstr(screenpad, y, 0, line, width); + console_ch_t *line; + chtype curses_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(); |