* [Qemu-devel] [PATCH v2] console: purge curses bits from console.h
@ 2017-09-27 10:38 Gerd Hoffmann
2017-09-29 23:44 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 2+ messages in thread
From: Gerd Hoffmann @ 2017-09-27 10:38 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Guan Xuetao
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>
---
include/ui/console.h | 23 ++---------------------
target/unicore32/helper.c | 6 ++++++
ui/curses.c | 25 ++++++++++++++++++++-----
3 files changed, 28 insertions(+), 26 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;
+ 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();
--
2.9.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH v2] console: purge curses bits from console.h
2017-09-27 10:38 [Qemu-devel] [PATCH v2] console: purge curses bits from console.h Gerd Hoffmann
@ 2017-09-29 23:44 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 2+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-29 23:44 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Guan Xuetao
Hi Gerd,
On 09/27/2017 07:38 AM, Gerd Hoffmann wrote:
> 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>
> ---
> include/ui/console.h | 23 ++---------------------
> target/unicore32/helper.c | 6 ++++++
> ui/curses.c | 25 ++++++++++++++++++++-----
> 3 files changed, 28 insertions(+), 26 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') {
I can't figure out why this is no more required (curses disabled),
can you enlighten me?
> - 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;
> + 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();
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-09-30 2:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-27 10:38 [Qemu-devel] [PATCH v2] console: purge curses bits from console.h Gerd Hoffmann
2017-09-29 23:44 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).