Am 01.08.2012 05:09, schrieb [email protected]: > From: Guan Xuetao <[email protected]> > > This patch adds a minimal curses screen support for unicore32-softmmu. > We assume 80*30 screen size to minimize the implementation. > Two problems are not solved, but they are innocuous. > 1. curses windows will be blank when switching to monitor screen and back > 2. backspace is not handled yet > > v1->v2: add extra handler for '\r' > > Signed-off-by: Zhang Mengchi <[email protected]> > Signed-off-by: Guan Xuetao <[email protected]> > --- > target-unicore32/helper.c | 45 > +++++++++++++++++++++++++++++++++++++++++++-- > 1 files changed, 43 insertions(+), 2 deletions(-) > > diff --git a/target-unicore32/helper.c b/target-unicore32/helper.c > index d6eb758..d21e7df 100644 > --- a/target-unicore32/helper.c > +++ b/target-unicore32/helper.c > @@ -13,6 +13,7 @@ > #include "gdbstub.h" > #include "helper.h" > #include "host-utils.h" > +#include "console.h" > > #undef DEBUG_UC32 > > @@ -186,10 +187,50 @@ uint32_t helper_cp0_get(CPUUniCore32State *env, > uint32_t creg, uint32_t cop) > return 0; > } > > +#ifdef CONFIG_CURSES > +/* > + * FIXME: > + * 1. curses windows will be blank when switching back > + * 2. backspace is not handled yet > + */ > +static void putc_on_screen(unsigned char ch) > +{ > + static WINDOW *localwin; > + static int init; > + > + if (!init) { > + /* Assume 80 * 30 screen to minimize the implementation */ > + localwin = newwin(30, 80, 0, 0); > + scrollok(localwin, TRUE); > + init = TRUE; > + } > + > + if (isprint(ch)) { > + wprintw(localwin, "%c", ch); > + } else { > + switch (ch) { > + case '\n': > + wprintw(localwin, "%c", ch); > + break; > + case '\r': > + /* If '\r' is put before '\n', the curses window will destroy the > + * last print line. And meanwhile, '\n' implifies '\r' inside. */ > + break; > + default: /* Not handled, so just print it hex code */ > + wprintw(localwin, "-- 0x%h --", ch); > + } > + } > + > + wrefresh(localwin); > +} > +#else > +#define putc_on_screen(c) do { } while (0) > +#endif > + > void helper_cp1_putc(target_ulong x) > { > - /* TODO: curses display should be added here for screen output. */ > - DPRINTF("%c", x); > + putc_on_screen((unsigned char)x); /* Output to screen */ > + DPRINTF("%c", x); /* Output to stdout */ > } > #endif >
Why is a TCG helper missing with curses directly? Shouldn't that use QEMU's console infrastructure and leave it to the user whether to use curses as a backend at runtime? What is the problem you are trying to solve? If you just need scrolling support you can already use -curses, -nographic and friends... Regards, Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
