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:
parent
ab16152926
commit
e2f82e924d
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
25
ui/curses.c
25
ui/curses.c
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user