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:
Gerd Hoffmann 2017-09-27 12:38:11 +02:00
parent ab16152926
commit e2f82e924d
3 changed files with 28 additions and 26 deletions

View File

@ -336,29 +336,10 @@ static inline pixman_format_code_t surface_format(DisplaySurface *s)
return s->format; return s->format;
} }
#ifdef CONFIG_CURSES typedef uint32_t console_ch_t;
/* 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
static inline void console_write_ch(console_ch_t *dest, uint32_t ch) 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; *dest = ch;
} }

View File

@ -163,6 +163,12 @@ uint32_t helper_cp0_get(CPUUniCore32State *env, uint32_t creg, uint32_t cop)
} }
#ifdef CONFIG_CURSES #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: * FIXME:
* 1. curses windows will be blank when switching back * 1. curses windows will be blank when switching back

View File

@ -33,6 +33,11 @@
#include "ui/input.h" #include "ui/input.h"
#include "sysemu/sysemu.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_HEIGHT 16
#define FONT_WIDTH 8 #define FONT_WIDTH 8
@ -42,16 +47,26 @@ static WINDOW *screenpad = NULL;
static int width, height, gwidth, gheight, invalidate; static int width, height, gwidth, gheight, invalidate;
static int px, py, sminx, sminy, smaxx, smaxy; 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, static void curses_update(DisplayChangeListener *dcl,
int x, int y, int w, int h) int x, int y, int w, int h)
{ {
chtype *line; console_ch_t *line;
chtype curses_line[width];
line = ((chtype *) screen) + y * width; line = screen + y * width;
for (h += y; y < h; y ++, line += width) for (h += y; y < h; y ++, line += width) {
mvwaddchnstr(screenpad, y, 0, 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); pnoutrefresh(screenpad, py, px, sminy, sminx, smaxy - 1, smaxx - 1);
refresh(); refresh();