]> git.proxmox.com Git - qemu.git/commitdiff
ui: move files to ui/ and include/ui/
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 28 Nov 2012 11:06:30 +0000 (12:06 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 19 Dec 2012 07:31:30 +0000 (08:31 +0100)
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
93 files changed:
Makefile.objs
console.c [deleted file]
console.h [deleted file]
cursor.c [deleted file]
cursor_hidden.xpm [deleted file]
cursor_left_ptr.xpm [deleted file]
hmp.c
hw/adb.c
hw/ads7846.c
hw/applesmc.c
hw/blizzard.c
hw/bt-hid.c
hw/cirrus_vga.c
hw/escc.c
hw/exynos4210_fimd.c
hw/framebuffer.c
hw/g364fb.c
hw/hid.c
hw/hpet.c
hw/jazz_led.c
hw/kvm/pci-assign.c
hw/lm832x.c
hw/milkymist-softusb.c
hw/milkymist-vgafb.c
hw/msmouse.c
hw/musicpal.c
hw/nseries.c
hw/omap_dss.c
hw/omap_lcdc.c
hw/omap_sx1.c
hw/palm.c
hw/pixel_ops.h [deleted file]
hw/pl110.c
hw/ps2.c
hw/puv3.c
hw/pxa2xx_keypad.c
hw/pxa2xx_lcd.c
hw/qxl.h
hw/sm501.c
hw/spitz.c
hw/ssd0303.c
hw/ssd0323.c
hw/stellaris_input.c
hw/tc6393xb.c
hw/tcx.c
hw/tsc2005.c
hw/tsc210x.c
hw/twl92230.c
hw/usb/dev-hid.c
hw/usb/dev-storage.c
hw/usb/dev-wacom.c
hw/usb/host-stub.c
hw/vga-isa-mm.c
hw/vga-isa.c
hw/vga-pci.c
hw/vga.c
hw/vmmouse.c
hw/vmware_vga.c
hw/xenfb.c
hw/z2.c
include/ui/console.h [new file with mode: 0644]
include/ui/pixel_ops.h [new file with mode: 0644]
include/ui/qemu-pixman.h [new file with mode: 0644]
include/ui/qemu-spice.h [new file with mode: 0644]
include/ui/spice-display.h [new file with mode: 0644]
input.c [deleted file]
monitor.c
qemu-char.c
qemu-pixman.c [deleted file]
qemu-pixman.h [deleted file]
qemu-timer.c
qemu-x509.h [deleted file]
target-unicore32/helper.c
ui/Makefile.objs
ui/cocoa.m
ui/console.c [new file with mode: 0644]
ui/curses.c
ui/cursor.c [new file with mode: 0644]
ui/cursor_hidden.xpm [new file with mode: 0644]
ui/cursor_left_ptr.xpm [new file with mode: 0644]
ui/input.c [new file with mode: 0644]
ui/qemu-pixman.c [new file with mode: 0644]
ui/qemu-spice.h [deleted file]
ui/qemu-x509.h [new file with mode: 0644]
ui/sdl.c
ui/spice-core.c
ui/spice-display.c
ui/spice-display.h [deleted file]
ui/spice-input.c
ui/vgafont.h [new file with mode: 0644]
ui/vnc.h
vgafont.h [deleted file]
vl.c

index fe78836fcbbc0ce76679b5c7643c1059e3f6e195..a637a4a8f0adefe151f519a86f78b527598d11d6 100644 (file)
@@ -68,8 +68,7 @@ endif
 common-obj-y = $(block-obj-y) blockdev.o blockdev-nbd.o block/
 common-obj-y += net/
 common-obj-y += qom/
-common-obj-y += readline.o console.o cursor.o
-common-obj-y += qemu-pixman.o
+common-obj-y += readline.o
 common-obj-y += $(oslib-obj-y)
 common-obj-$(CONFIG_WIN32) += os-win32.o
 common-obj-$(CONFIG_POSIX) += os-posix.o
@@ -78,7 +77,6 @@ common-obj-$(CONFIG_LINUX) += fsdev/
 extra-obj-$(CONFIG_LINUX) += fsdev/
 
 common-obj-y += tcg-runtime.o host-utils.o main-loop.o
-common-obj-y += input.o
 common-obj-y += buffered_file.o migration.o migration-tcp.o
 common-obj-y += qemu-char.o #aio.o
 common-obj-y += block-migration.o iohandler.o
diff --git a/console.c b/console.c
deleted file mode 100644 (file)
index 9ac7b28..0000000
--- a/console.c
+++ /dev/null
@@ -1,1724 +0,0 @@
-/*
- * QEMU graphical console
- *
- * Copyright (c) 2004 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-#include "qemu-common.h"
-#include "console.h"
-#include "qemu-timer.h"
-#include "qmp-commands.h"
-#include "qemu-char.h"
-
-//#define DEBUG_CONSOLE
-#define DEFAULT_BACKSCROLL 512
-#define MAX_CONSOLES 12
-#define CONSOLE_CURSOR_PERIOD 500
-
-#define QEMU_RGBA(r, g, b, a) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-#define QEMU_RGB(r, g, b) QEMU_RGBA(r, g, b, 0xff)
-
-typedef struct TextAttributes {
-    uint8_t fgcol:4;
-    uint8_t bgcol:4;
-    uint8_t bold:1;
-    uint8_t uline:1;
-    uint8_t blink:1;
-    uint8_t invers:1;
-    uint8_t unvisible:1;
-} TextAttributes;
-
-typedef struct TextCell {
-    uint8_t ch;
-    TextAttributes t_attrib;
-} TextCell;
-
-#define MAX_ESC_PARAMS 3
-
-enum TTYState {
-    TTY_STATE_NORM,
-    TTY_STATE_ESC,
-    TTY_STATE_CSI,
-};
-
-typedef struct QEMUFIFO {
-    uint8_t *buf;
-    int buf_size;
-    int count, wptr, rptr;
-} QEMUFIFO;
-
-static int qemu_fifo_write(QEMUFIFO *f, const uint8_t *buf, int len1)
-{
-    int l, len;
-
-    l = f->buf_size - f->count;
-    if (len1 > l)
-        len1 = l;
-    len = len1;
-    while (len > 0) {
-        l = f->buf_size - f->wptr;
-        if (l > len)
-            l = len;
-        memcpy(f->buf + f->wptr, buf, l);
-        f->wptr += l;
-        if (f->wptr >= f->buf_size)
-            f->wptr = 0;
-        buf += l;
-        len -= l;
-    }
-    f->count += len1;
-    return len1;
-}
-
-static int qemu_fifo_read(QEMUFIFO *f, uint8_t *buf, int len1)
-{
-    int l, len;
-
-    if (len1 > f->count)
-        len1 = f->count;
-    len = len1;
-    while (len > 0) {
-        l = f->buf_size - f->rptr;
-        if (l > len)
-            l = len;
-        memcpy(buf, f->buf + f->rptr, l);
-        f->rptr += l;
-        if (f->rptr >= f->buf_size)
-            f->rptr = 0;
-        buf += l;
-        len -= l;
-    }
-    f->count -= len1;
-    return len1;
-}
-
-typedef enum {
-    GRAPHIC_CONSOLE,
-    TEXT_CONSOLE,
-    TEXT_CONSOLE_FIXED_SIZE
-} console_type_t;
-
-struct QemuConsole {
-    int index;
-    console_type_t console_type;
-    DisplayState *ds;
-
-    /* Graphic console state.  */
-    vga_hw_update_ptr hw_update;
-    vga_hw_invalidate_ptr hw_invalidate;
-    vga_hw_screen_dump_ptr hw_screen_dump;
-    vga_hw_text_update_ptr hw_text_update;
-    void *hw;
-    int g_width, g_height;
-
-    /* Text console state */
-    int width;
-    int height;
-    int total_height;
-    int backscroll_height;
-    int x, y;
-    int x_saved, y_saved;
-    int y_displayed;
-    int y_base;
-    TextAttributes t_attrib_default; /* default text attributes */
-    TextAttributes t_attrib; /* currently active text attributes */
-    TextCell *cells;
-    int text_x[2], text_y[2], cursor_invalidate;
-    int echo;
-    bool cursor_visible_phase;
-    QEMUTimer *cursor_timer;
-
-    int update_x0;
-    int update_y0;
-    int update_x1;
-    int update_y1;
-
-    enum TTYState state;
-    int esc_params[MAX_ESC_PARAMS];
-    int nb_esc_params;
-
-    CharDriverState *chr;
-    /* fifo for key pressed */
-    QEMUFIFO out_fifo;
-    uint8_t out_fifo_buf[16];
-    QEMUTimer *kbd_timer;
-};
-
-static DisplayState *display_state;
-static QemuConsole *active_console;
-static QemuConsole *consoles[MAX_CONSOLES];
-static int nb_consoles = 0;
-
-void vga_hw_update(void)
-{
-    if (active_console && active_console->hw_update)
-        active_console->hw_update(active_console->hw);
-}
-
-void vga_hw_invalidate(void)
-{
-    if (active_console && active_console->hw_invalidate)
-        active_console->hw_invalidate(active_console->hw);
-}
-
-void qmp_screendump(const char *filename, Error **errp)
-{
-    QemuConsole *previous_active_console;
-    bool cswitch;
-
-    previous_active_console = active_console;
-    cswitch = previous_active_console && previous_active_console->index != 0;
-
-    /* There is currently no way of specifying which screen we want to dump,
-       so always dump the first one.  */
-    if (cswitch) {
-        console_select(0);
-    }
-    if (consoles[0] && consoles[0]->hw_screen_dump) {
-        consoles[0]->hw_screen_dump(consoles[0]->hw, filename, cswitch, errp);
-    } else {
-        error_setg(errp, "device doesn't support screendump\n");
-    }
-
-    if (cswitch) {
-        console_select(previous_active_console->index);
-    }
-}
-
-void vga_hw_text_update(console_ch_t *chardata)
-{
-    if (active_console && active_console->hw_text_update)
-        active_console->hw_text_update(active_console->hw, chardata);
-}
-
-/* convert a RGBA color to a color index usable in graphic primitives */
-static unsigned int vga_get_color(DisplayState *ds, unsigned int rgba)
-{
-    unsigned int r, g, b, color;
-
-    switch(ds_get_bits_per_pixel(ds)) {
-#if 0
-    case 8:
-        r = (rgba >> 16) & 0xff;
-        g = (rgba >> 8) & 0xff;
-        b = (rgba) & 0xff;
-        color = (rgb_to_index[r] * 6 * 6) +
-            (rgb_to_index[g] * 6) +
-            (rgb_to_index[b]);
-        break;
-#endif
-    case 15:
-        r = (rgba >> 16) & 0xff;
-        g = (rgba >> 8) & 0xff;
-        b = (rgba) & 0xff;
-        color = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
-        break;
-    case 16:
-        r = (rgba >> 16) & 0xff;
-        g = (rgba >> 8) & 0xff;
-        b = (rgba) & 0xff;
-        color = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
-        break;
-    case 32:
-    default:
-        color = rgba;
-        break;
-    }
-    return color;
-}
-
-static void vga_fill_rect (DisplayState *ds,
-                           int posx, int posy, int width, int height, uint32_t color)
-{
-    uint8_t *d, *d1;
-    int x, y, bpp;
-
-    bpp = (ds_get_bits_per_pixel(ds) + 7) >> 3;
-    d1 = ds_get_data(ds) +
-        ds_get_linesize(ds) * posy + bpp * posx;
-    for (y = 0; y < height; y++) {
-        d = d1;
-        switch(bpp) {
-        case 1:
-            for (x = 0; x < width; x++) {
-                *((uint8_t *)d) = color;
-                d++;
-            }
-            break;
-        case 2:
-            for (x = 0; x < width; x++) {
-                *((uint16_t *)d) = color;
-                d += 2;
-            }
-            break;
-        case 4:
-            for (x = 0; x < width; x++) {
-                *((uint32_t *)d) = color;
-                d += 4;
-            }
-            break;
-        }
-        d1 += ds_get_linesize(ds);
-    }
-}
-
-/* copy from (xs, ys) to (xd, yd) a rectangle of size (w, h) */
-static void vga_bitblt(DisplayState *ds, int xs, int ys, int xd, int yd, int w, int h)
-{
-    const uint8_t *s;
-    uint8_t *d;
-    int wb, y, bpp;
-
-    bpp = (ds_get_bits_per_pixel(ds) + 7) >> 3;
-    wb = w * bpp;
-    if (yd <= ys) {
-        s = ds_get_data(ds) +
-            ds_get_linesize(ds) * ys + bpp * xs;
-        d = ds_get_data(ds) +
-            ds_get_linesize(ds) * yd + bpp * xd;
-        for (y = 0; y < h; y++) {
-            memmove(d, s, wb);
-            d += ds_get_linesize(ds);
-            s += ds_get_linesize(ds);
-        }
-    } else {
-        s = ds_get_data(ds) +
-            ds_get_linesize(ds) * (ys + h - 1) + bpp * xs;
-        d = ds_get_data(ds) +
-            ds_get_linesize(ds) * (yd + h - 1) + bpp * xd;
-       for (y = 0; y < h; y++) {
-            memmove(d, s, wb);
-            d -= ds_get_linesize(ds);
-            s -= ds_get_linesize(ds);
-        }
-    }
-}
-
-/***********************************************************/
-/* basic char display */
-
-#define FONT_HEIGHT 16
-#define FONT_WIDTH 8
-
-#include "vgafont.h"
-
-#define cbswap_32(__x) \
-((uint32_t)( \
-               (((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \
-               (((uint32_t)(__x) & (uint32_t)0x0000ff00UL) <<  8) | \
-               (((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >>  8) | \
-               (((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) ))
-
-#ifdef HOST_WORDS_BIGENDIAN
-#define PAT(x) x
-#else
-#define PAT(x) cbswap_32(x)
-#endif
-
-static const uint32_t dmask16[16] = {
-    PAT(0x00000000),
-    PAT(0x000000ff),
-    PAT(0x0000ff00),
-    PAT(0x0000ffff),
-    PAT(0x00ff0000),
-    PAT(0x00ff00ff),
-    PAT(0x00ffff00),
-    PAT(0x00ffffff),
-    PAT(0xff000000),
-    PAT(0xff0000ff),
-    PAT(0xff00ff00),
-    PAT(0xff00ffff),
-    PAT(0xffff0000),
-    PAT(0xffff00ff),
-    PAT(0xffffff00),
-    PAT(0xffffffff),
-};
-
-static const uint32_t dmask4[4] = {
-    PAT(0x00000000),
-    PAT(0x0000ffff),
-    PAT(0xffff0000),
-    PAT(0xffffffff),
-};
-
-static uint32_t color_table[2][8];
-
-#ifndef CONFIG_CURSES
-enum color_names {
-    COLOR_BLACK   = 0,
-    COLOR_RED     = 1,
-    COLOR_GREEN   = 2,
-    COLOR_YELLOW  = 3,
-    COLOR_BLUE    = 4,
-    COLOR_MAGENTA = 5,
-    COLOR_CYAN    = 6,
-    COLOR_WHITE   = 7
-};
-#endif
-
-static const uint32_t color_table_rgb[2][8] = {
-    {   /* dark */
-        QEMU_RGB(0x00, 0x00, 0x00),  /* black */
-        QEMU_RGB(0xaa, 0x00, 0x00),  /* red */
-        QEMU_RGB(0x00, 0xaa, 0x00),  /* green */
-        QEMU_RGB(0xaa, 0xaa, 0x00),  /* yellow */
-        QEMU_RGB(0x00, 0x00, 0xaa),  /* blue */
-        QEMU_RGB(0xaa, 0x00, 0xaa),  /* magenta */
-        QEMU_RGB(0x00, 0xaa, 0xaa),  /* cyan */
-        QEMU_RGB(0xaa, 0xaa, 0xaa),  /* white */
-    },
-    {   /* bright */
-        QEMU_RGB(0x00, 0x00, 0x00),  /* black */
-        QEMU_RGB(0xff, 0x00, 0x00),  /* red */
-        QEMU_RGB(0x00, 0xff, 0x00),  /* green */
-        QEMU_RGB(0xff, 0xff, 0x00),  /* yellow */
-        QEMU_RGB(0x00, 0x00, 0xff),  /* blue */
-        QEMU_RGB(0xff, 0x00, 0xff),  /* magenta */
-        QEMU_RGB(0x00, 0xff, 0xff),  /* cyan */
-        QEMU_RGB(0xff, 0xff, 0xff),  /* white */
-    }
-};
-
-static inline unsigned int col_expand(DisplayState *ds, unsigned int col)
-{
-    switch(ds_get_bits_per_pixel(ds)) {
-    case 8:
-        col |= col << 8;
-        col |= col << 16;
-        break;
-    case 15:
-    case 16:
-        col |= col << 16;
-        break;
-    default:
-        break;
-    }
-
-    return col;
-}
-#ifdef DEBUG_CONSOLE
-static void console_print_text_attributes(TextAttributes *t_attrib, char ch)
-{
-    if (t_attrib->bold) {
-        printf("b");
-    } else {
-        printf(" ");
-    }
-    if (t_attrib->uline) {
-        printf("u");
-    } else {
-        printf(" ");
-    }
-    if (t_attrib->blink) {
-        printf("l");
-    } else {
-        printf(" ");
-    }
-    if (t_attrib->invers) {
-        printf("i");
-    } else {
-        printf(" ");
-    }
-    if (t_attrib->unvisible) {
-        printf("n");
-    } else {
-        printf(" ");
-    }
-
-    printf(" fg: %d bg: %d ch:'%2X' '%c'\n", t_attrib->fgcol, t_attrib->bgcol, ch, ch);
-}
-#endif
-
-static void vga_putcharxy(DisplayState *ds, int x, int y, int ch,
-                          TextAttributes *t_attrib)
-{
-    uint8_t *d;
-    const uint8_t *font_ptr;
-    unsigned int font_data, linesize, xorcol, bpp;
-    int i;
-    unsigned int fgcol, bgcol;
-
-#ifdef DEBUG_CONSOLE
-    printf("x: %2i y: %2i", x, y);
-    console_print_text_attributes(t_attrib, ch);
-#endif
-
-    if (t_attrib->invers) {
-        bgcol = color_table[t_attrib->bold][t_attrib->fgcol];
-        fgcol = color_table[t_attrib->bold][t_attrib->bgcol];
-    } else {
-        fgcol = color_table[t_attrib->bold][t_attrib->fgcol];
-        bgcol = color_table[t_attrib->bold][t_attrib->bgcol];
-    }
-
-    bpp = (ds_get_bits_per_pixel(ds) + 7) >> 3;
-    d = ds_get_data(ds) +
-        ds_get_linesize(ds) * y * FONT_HEIGHT + bpp * x * FONT_WIDTH;
-    linesize = ds_get_linesize(ds);
-    font_ptr = vgafont16 + FONT_HEIGHT * ch;
-    xorcol = bgcol ^ fgcol;
-    switch(ds_get_bits_per_pixel(ds)) {
-    case 8:
-        for(i = 0; i < FONT_HEIGHT; i++) {
-            font_data = *font_ptr++;
-            if (t_attrib->uline
-                && ((i == FONT_HEIGHT - 2) || (i == FONT_HEIGHT - 3))) {
-                font_data = 0xFF;
-            }
-            ((uint32_t *)d)[0] = (dmask16[(font_data >> 4)] & xorcol) ^ bgcol;
-            ((uint32_t *)d)[1] = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol;
-            d += linesize;
-        }
-        break;
-    case 16:
-    case 15:
-        for(i = 0; i < FONT_HEIGHT; i++) {
-            font_data = *font_ptr++;
-            if (t_attrib->uline
-                && ((i == FONT_HEIGHT - 2) || (i == FONT_HEIGHT - 3))) {
-                font_data = 0xFF;
-            }
-            ((uint32_t *)d)[0] = (dmask4[(font_data >> 6)] & xorcol) ^ bgcol;
-            ((uint32_t *)d)[1] = (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol;
-            ((uint32_t *)d)[2] = (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol;
-            ((uint32_t *)d)[3] = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol;
-            d += linesize;
-        }
-        break;
-    case 32:
-        for(i = 0; i < FONT_HEIGHT; i++) {
-            font_data = *font_ptr++;
-            if (t_attrib->uline && ((i == FONT_HEIGHT - 2) || (i == FONT_HEIGHT - 3))) {
-                font_data = 0xFF;
-            }
-            ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol;
-            ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol;
-            ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol;
-            ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol;
-            ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol;
-            ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol;
-            ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol;
-            ((uint32_t *)d)[7] = (-((font_data >> 0) & 1) & xorcol) ^ bgcol;
-            d += linesize;
-        }
-        break;
-    }
-}
-
-static void text_console_resize(QemuConsole *s)
-{
-    TextCell *cells, *c, *c1;
-    int w1, x, y, last_width;
-
-    last_width = s->width;
-    s->width = s->g_width / FONT_WIDTH;
-    s->height = s->g_height / FONT_HEIGHT;
-
-    w1 = last_width;
-    if (s->width < w1)
-        w1 = s->width;
-
-    cells = g_malloc(s->width * s->total_height * sizeof(TextCell));
-    for(y = 0; y < s->total_height; y++) {
-        c = &cells[y * s->width];
-        if (w1 > 0) {
-            c1 = &s->cells[y * last_width];
-            for(x = 0; x < w1; x++) {
-                *c++ = *c1++;
-            }
-        }
-        for(x = w1; x < s->width; x++) {
-            c->ch = ' ';
-            c->t_attrib = s->t_attrib_default;
-            c++;
-        }
-    }
-    g_free(s->cells);
-    s->cells = cells;
-}
-
-static inline void text_update_xy(QemuConsole *s, int x, int y)
-{
-    s->text_x[0] = MIN(s->text_x[0], x);
-    s->text_x[1] = MAX(s->text_x[1], x);
-    s->text_y[0] = MIN(s->text_y[0], y);
-    s->text_y[1] = MAX(s->text_y[1], y);
-}
-
-static void invalidate_xy(QemuConsole *s, int x, int y)
-{
-    if (s->update_x0 > x * FONT_WIDTH)
-        s->update_x0 = x * FONT_WIDTH;
-    if (s->update_y0 > y * FONT_HEIGHT)
-        s->update_y0 = y * FONT_HEIGHT;
-    if (s->update_x1 < (x + 1) * FONT_WIDTH)
-        s->update_x1 = (x + 1) * FONT_WIDTH;
-    if (s->update_y1 < (y + 1) * FONT_HEIGHT)
-        s->update_y1 = (y + 1) * FONT_HEIGHT;
-}
-
-static void update_xy(QemuConsole *s, int x, int y)
-{
-    TextCell *c;
-    int y1, y2;
-
-    if (s == active_console) {
-        if (!ds_get_bits_per_pixel(s->ds)) {
-            text_update_xy(s, x, y);
-            return;
-        }
-
-        y1 = (s->y_base + y) % s->total_height;
-        y2 = y1 - s->y_displayed;
-        if (y2 < 0)
-            y2 += s->total_height;
-        if (y2 < s->height) {
-            c = &s->cells[y1 * s->width + x];
-            vga_putcharxy(s->ds, x, y2, c->ch,
-                          &(c->t_attrib));
-            invalidate_xy(s, x, y2);
-        }
-    }
-}
-
-static void console_show_cursor(QemuConsole *s, int show)
-{
-    TextCell *c;
-    int y, y1;
-
-    if (s == active_console) {
-        int x = s->x;
-
-        if (!ds_get_bits_per_pixel(s->ds)) {
-            s->cursor_invalidate = 1;
-            return;
-        }
-
-        if (x >= s->width) {
-            x = s->width - 1;
-        }
-        y1 = (s->y_base + s->y) % s->total_height;
-        y = y1 - s->y_displayed;
-        if (y < 0)
-            y += s->total_height;
-        if (y < s->height) {
-            c = &s->cells[y1 * s->width + x];
-            if (show && s->cursor_visible_phase) {
-                TextAttributes t_attrib = s->t_attrib_default;
-                t_attrib.invers = !(t_attrib.invers); /* invert fg and bg */
-                vga_putcharxy(s->ds, x, y, c->ch, &t_attrib);
-            } else {
-                vga_putcharxy(s->ds, x, y, c->ch, &(c->t_attrib));
-            }
-            invalidate_xy(s, x, y);
-        }
-    }
-}
-
-static void console_refresh(QemuConsole *s)
-{
-    TextCell *c;
-    int x, y, y1;
-
-    if (s != active_console)
-        return;
-
-    if (s->ds->have_text) {
-        s->text_x[0] = 0;
-        s->text_y[0] = 0;
-        s->text_x[1] = s->width - 1;
-        s->text_y[1] = s->height - 1;
-        s->cursor_invalidate = 1;
-    }
-
-    if (s->ds->have_gfx) {
-        vga_fill_rect(s->ds, 0, 0, ds_get_width(s->ds), ds_get_height(s->ds),
-                      color_table[0][COLOR_BLACK]);
-        y1 = s->y_displayed;
-        for (y = 0; y < s->height; y++) {
-            c = s->cells + y1 * s->width;
-            for (x = 0; x < s->width; x++) {
-                vga_putcharxy(s->ds, x, y, c->ch,
-                              &(c->t_attrib));
-                c++;
-            }
-            if (++y1 == s->total_height) {
-                y1 = 0;
-            }
-        }
-        console_show_cursor(s, 1);
-        dpy_gfx_update(s->ds, 0, 0, ds_get_width(s->ds), ds_get_height(s->ds));
-    }
-}
-
-static void console_scroll(int ydelta)
-{
-    QemuConsole *s;
-    int i, y1;
-
-    s = active_console;
-    if (!s || (s->console_type == GRAPHIC_CONSOLE))
-        return;
-
-    if (ydelta > 0) {
-        for(i = 0; i < ydelta; i++) {
-            if (s->y_displayed == s->y_base)
-                break;
-            if (++s->y_displayed == s->total_height)
-                s->y_displayed = 0;
-        }
-    } else {
-        ydelta = -ydelta;
-        i = s->backscroll_height;
-        if (i > s->total_height - s->height)
-            i = s->total_height - s->height;
-        y1 = s->y_base - i;
-        if (y1 < 0)
-            y1 += s->total_height;
-        for(i = 0; i < ydelta; i++) {
-            if (s->y_displayed == y1)
-                break;
-            if (--s->y_displayed < 0)
-                s->y_displayed = s->total_height - 1;
-        }
-    }
-    console_refresh(s);
-}
-
-static void console_put_lf(QemuConsole *s)
-{
-    TextCell *c;
-    int x, y1;
-
-    s->y++;
-    if (s->y >= s->height) {
-        s->y = s->height - 1;
-
-        if (s->y_displayed == s->y_base) {
-            if (++s->y_displayed == s->total_height)
-                s->y_displayed = 0;
-        }
-        if (++s->y_base == s->total_height)
-            s->y_base = 0;
-        if (s->backscroll_height < s->total_height)
-            s->backscroll_height++;
-        y1 = (s->y_base + s->height - 1) % s->total_height;
-        c = &s->cells[y1 * s->width];
-        for(x = 0; x < s->width; x++) {
-            c->ch = ' ';
-            c->t_attrib = s->t_attrib_default;
-            c++;
-        }
-        if (s == active_console && s->y_displayed == s->y_base) {
-            if (!ds_get_bits_per_pixel(s->ds)) {
-                s->text_x[0] = 0;
-                s->text_y[0] = 0;
-                s->text_x[1] = s->width - 1;
-                s->text_y[1] = s->height - 1;
-                return;
-            }
-
-            vga_bitblt(s->ds, 0, FONT_HEIGHT, 0, 0,
-                       s->width * FONT_WIDTH,
-                       (s->height - 1) * FONT_HEIGHT);
-            vga_fill_rect(s->ds, 0, (s->height - 1) * FONT_HEIGHT,
-                          s->width * FONT_WIDTH, FONT_HEIGHT,
-                          color_table[0][s->t_attrib_default.bgcol]);
-            s->update_x0 = 0;
-            s->update_y0 = 0;
-            s->update_x1 = s->width * FONT_WIDTH;
-            s->update_y1 = s->height * FONT_HEIGHT;
-        }
-    }
-}
-
-/* Set console attributes depending on the current escape codes.
- * NOTE: I know this code is not very efficient (checking every color for it
- * self) but it is more readable and better maintainable.
- */
-static void console_handle_escape(QemuConsole *s)
-{
-    int i;
-
-    for (i=0; i<s->nb_esc_params; i++) {
-        switch (s->esc_params[i]) {
-            case 0: /* reset all console attributes to default */
-                s->t_attrib = s->t_attrib_default;
-                break;
-            case 1:
-                s->t_attrib.bold = 1;
-                break;
-            case 4:
-                s->t_attrib.uline = 1;
-                break;
-            case 5:
-                s->t_attrib.blink = 1;
-                break;
-            case 7:
-                s->t_attrib.invers = 1;
-                break;
-            case 8:
-                s->t_attrib.unvisible = 1;
-                break;
-            case 22:
-                s->t_attrib.bold = 0;
-                break;
-            case 24:
-                s->t_attrib.uline = 0;
-                break;
-            case 25:
-                s->t_attrib.blink = 0;
-                break;
-            case 27:
-                s->t_attrib.invers = 0;
-                break;
-            case 28:
-                s->t_attrib.unvisible = 0;
-                break;
-            /* set foreground color */
-            case 30:
-                s->t_attrib.fgcol=COLOR_BLACK;
-                break;
-            case 31:
-                s->t_attrib.fgcol=COLOR_RED;
-                break;
-            case 32:
-                s->t_attrib.fgcol=COLOR_GREEN;
-                break;
-            case 33:
-                s->t_attrib.fgcol=COLOR_YELLOW;
-                break;
-            case 34:
-                s->t_attrib.fgcol=COLOR_BLUE;
-                break;
-            case 35:
-                s->t_attrib.fgcol=COLOR_MAGENTA;
-                break;
-            case 36:
-                s->t_attrib.fgcol=COLOR_CYAN;
-                break;
-            case 37:
-                s->t_attrib.fgcol=COLOR_WHITE;
-                break;
-            /* set background color */
-            case 40:
-                s->t_attrib.bgcol=COLOR_BLACK;
-                break;
-            case 41:
-                s->t_attrib.bgcol=COLOR_RED;
-                break;
-            case 42:
-                s->t_attrib.bgcol=COLOR_GREEN;
-                break;
-            case 43:
-                s->t_attrib.bgcol=COLOR_YELLOW;
-                break;
-            case 44:
-                s->t_attrib.bgcol=COLOR_BLUE;
-                break;
-            case 45:
-                s->t_attrib.bgcol=COLOR_MAGENTA;
-                break;
-            case 46:
-                s->t_attrib.bgcol=COLOR_CYAN;
-                break;
-            case 47:
-                s->t_attrib.bgcol=COLOR_WHITE;
-                break;
-        }
-    }
-}
-
-static void console_clear_xy(QemuConsole *s, int x, int y)
-{
-    int y1 = (s->y_base + y) % s->total_height;
-    TextCell *c = &s->cells[y1 * s->width + x];
-    c->ch = ' ';
-    c->t_attrib = s->t_attrib_default;
-    update_xy(s, x, y);
-}
-
-/* set cursor, checking bounds */
-static void set_cursor(QemuConsole *s, int x, int y)
-{
-    if (x < 0) {
-        x = 0;
-    }
-    if (y < 0) {
-        y = 0;
-    }
-    if (y >= s->height) {
-        y = s->height - 1;
-    }
-    if (x >= s->width) {
-        x = s->width - 1;
-    }
-
-    s->x = x;
-    s->y = y;
-}
-
-static void console_putchar(QemuConsole *s, int ch)
-{
-    TextCell *c;
-    int y1, i;
-    int x, y;
-
-    switch(s->state) {
-    case TTY_STATE_NORM:
-        switch(ch) {
-        case '\r':  /* carriage return */
-            s->x = 0;
-            break;
-        case '\n':  /* newline */
-            console_put_lf(s);
-            break;
-        case '\b':  /* backspace */
-            if (s->x > 0)
-                s->x--;
-            break;
-        case '\t':  /* tabspace */
-            if (s->x + (8 - (s->x % 8)) > s->width) {
-                s->x = 0;
-                console_put_lf(s);
-            } else {
-                s->x = s->x + (8 - (s->x % 8));
-            }
-            break;
-        case '\a':  /* alert aka. bell */
-            /* TODO: has to be implemented */
-            break;
-        case 14:
-            /* SI (shift in), character set 0 (ignored) */
-            break;
-        case 15:
-            /* SO (shift out), character set 1 (ignored) */
-            break;
-        case 27:    /* esc (introducing an escape sequence) */
-            s->state = TTY_STATE_ESC;
-            break;
-        default:
-            if (s->x >= s->width) {
-                /* line wrap */
-                s->x = 0;
-                console_put_lf(s);
-            }
-            y1 = (s->y_base + s->y) % s->total_height;
-            c = &s->cells[y1 * s->width + s->x];
-            c->ch = ch;
-            c->t_attrib = s->t_attrib;
-            update_xy(s, s->x, s->y);
-            s->x++;
-            break;
-        }
-        break;
-    case TTY_STATE_ESC: /* check if it is a terminal escape sequence */
-        if (ch == '[') {
-            for(i=0;i<MAX_ESC_PARAMS;i++)
-                s->esc_params[i] = 0;
-            s->nb_esc_params = 0;
-            s->state = TTY_STATE_CSI;
-        } else {
-            s->state = TTY_STATE_NORM;
-        }
-        break;
-    case TTY_STATE_CSI: /* handle escape sequence parameters */
-        if (ch >= '0' && ch <= '9') {
-            if (s->nb_esc_params < MAX_ESC_PARAMS) {
-                int *param = &s->esc_params[s->nb_esc_params];
-                int digit = (ch - '0');
-
-                *param = (*param <= (INT_MAX - digit) / 10) ?
-                         *param * 10 + digit : INT_MAX;
-            }
-        } else {
-            if (s->nb_esc_params < MAX_ESC_PARAMS)
-                s->nb_esc_params++;
-            if (ch == ';')
-                break;
-#ifdef DEBUG_CONSOLE
-            fprintf(stderr, "escape sequence CSI%d;%d%c, %d parameters\n",
-                    s->esc_params[0], s->esc_params[1], ch, s->nb_esc_params);
-#endif
-            s->state = TTY_STATE_NORM;
-            switch(ch) {
-            case 'A':
-                /* move cursor up */
-                if (s->esc_params[0] == 0) {
-                    s->esc_params[0] = 1;
-                }
-                set_cursor(s, s->x, s->y - s->esc_params[0]);
-                break;
-            case 'B':
-                /* move cursor down */
-                if (s->esc_params[0] == 0) {
-                    s->esc_params[0] = 1;
-                }
-                set_cursor(s, s->x, s->y + s->esc_params[0]);
-                break;
-            case 'C':
-                /* move cursor right */
-                if (s->esc_params[0] == 0) {
-                    s->esc_params[0] = 1;
-                }
-                set_cursor(s, s->x + s->esc_params[0], s->y);
-                break;
-            case 'D':
-                /* move cursor left */
-                if (s->esc_params[0] == 0) {
-                    s->esc_params[0] = 1;
-                }
-                set_cursor(s, s->x - s->esc_params[0], s->y);
-                break;
-            case 'G':
-                /* move cursor to column */
-                set_cursor(s, s->esc_params[0] - 1, s->y);
-                break;
-            case 'f':
-            case 'H':
-                /* move cursor to row, column */
-                set_cursor(s, s->esc_params[1] - 1, s->esc_params[0] - 1);
-                break;
-            case 'J':
-                switch (s->esc_params[0]) {
-                case 0:
-                    /* clear to end of screen */
-                    for (y = s->y; y < s->height; y++) {
-                        for (x = 0; x < s->width; x++) {
-                            if (y == s->y && x < s->x) {
-                                continue;
-                            }
-                            console_clear_xy(s, x, y);
-                        }
-                    }
-                    break;
-                case 1:
-                    /* clear from beginning of screen */
-                    for (y = 0; y <= s->y; y++) {
-                        for (x = 0; x < s->width; x++) {
-                            if (y == s->y && x > s->x) {
-                                break;
-                            }
-                            console_clear_xy(s, x, y);
-                        }
-                    }
-                    break;
-                case 2:
-                    /* clear entire screen */
-                    for (y = 0; y <= s->height; y++) {
-                        for (x = 0; x < s->width; x++) {
-                            console_clear_xy(s, x, y);
-                        }
-                    }
-                    break;
-                }
-                break;
-            case 'K':
-                switch (s->esc_params[0]) {
-                case 0:
-                    /* clear to eol */
-                    for(x = s->x; x < s->width; x++) {
-                        console_clear_xy(s, x, s->y);
-                    }
-                    break;
-                case 1:
-                    /* clear from beginning of line */
-                    for (x = 0; x <= s->x; x++) {
-                        console_clear_xy(s, x, s->y);
-                    }
-                    break;
-                case 2:
-                    /* clear entire line */
-                    for(x = 0; x < s->width; x++) {
-                        console_clear_xy(s, x, s->y);
-                    }
-                    break;
-                }
-                break;
-            case 'm':
-                console_handle_escape(s);
-                break;
-            case 'n':
-                /* report cursor position */
-                /* TODO: send ESC[row;colR */
-                break;
-            case 's':
-                /* save cursor position */
-                s->x_saved = s->x;
-                s->y_saved = s->y;
-                break;
-            case 'u':
-                /* restore cursor position */
-                s->x = s->x_saved;
-                s->y = s->y_saved;
-                break;
-            default:
-#ifdef DEBUG_CONSOLE
-                fprintf(stderr, "unhandled escape character '%c'\n", ch);
-#endif
-                break;
-            }
-            break;
-        }
-    }
-}
-
-void console_select(unsigned int index)
-{
-    QemuConsole *s;
-
-    if (index >= MAX_CONSOLES)
-        return;
-    if (active_console) {
-        active_console->g_width = ds_get_width(active_console->ds);
-        active_console->g_height = ds_get_height(active_console->ds);
-    }
-    s = consoles[index];
-    if (s) {
-        DisplayState *ds = s->ds;
-
-        if (active_console && active_console->cursor_timer) {
-            qemu_del_timer(active_console->cursor_timer);
-        }
-        active_console = s;
-        if (ds->have_gfx) {
-            ds->surface = qemu_resize_displaysurface(ds, s->g_width, s->g_height);
-            dpy_gfx_resize(ds);
-        }
-        if (ds->have_text) {
-            dpy_text_resize(ds, s->width, s->height);
-        }
-        if (s->cursor_timer) {
-            qemu_mod_timer(s->cursor_timer,
-                   qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2);
-        }
-        vga_hw_invalidate();
-    }
-}
-
-static int console_puts(CharDriverState *chr, const uint8_t *buf, int len)
-{
-    QemuConsole *s = chr->opaque;
-    int i;
-
-    s->update_x0 = s->width * FONT_WIDTH;
-    s->update_y0 = s->height * FONT_HEIGHT;
-    s->update_x1 = 0;
-    s->update_y1 = 0;
-    console_show_cursor(s, 0);
-    for(i = 0; i < len; i++) {
-        console_putchar(s, buf[i]);
-    }
-    console_show_cursor(s, 1);
-    if (s->ds->have_gfx && s->update_x0 < s->update_x1) {
-        dpy_gfx_update(s->ds, s->update_x0, s->update_y0,
-                       s->update_x1 - s->update_x0,
-                       s->update_y1 - s->update_y0);
-    }
-    return len;
-}
-
-static void kbd_send_chars(void *opaque)
-{
-    QemuConsole *s = opaque;
-    int len;
-    uint8_t buf[16];
-
-    len = qemu_chr_be_can_write(s->chr);
-    if (len > s->out_fifo.count)
-        len = s->out_fifo.count;
-    if (len > 0) {
-        if (len > sizeof(buf))
-            len = sizeof(buf);
-        qemu_fifo_read(&s->out_fifo, buf, len);
-        qemu_chr_be_write(s->chr, buf, len);
-    }
-    /* characters are pending: we send them a bit later (XXX:
-       horrible, should change char device API) */
-    if (s->out_fifo.count > 0) {
-        qemu_mod_timer(s->kbd_timer, qemu_get_clock_ms(rt_clock) + 1);
-    }
-}
-
-/* called when an ascii key is pressed */
-void kbd_put_keysym(int keysym)
-{
-    QemuConsole *s;
-    uint8_t buf[16], *q;
-    int c;
-
-    s = active_console;
-    if (!s || (s->console_type == GRAPHIC_CONSOLE))
-        return;
-
-    switch(keysym) {
-    case QEMU_KEY_CTRL_UP:
-        console_scroll(-1);
-        break;
-    case QEMU_KEY_CTRL_DOWN:
-        console_scroll(1);
-        break;
-    case QEMU_KEY_CTRL_PAGEUP:
-        console_scroll(-10);
-        break;
-    case QEMU_KEY_CTRL_PAGEDOWN:
-        console_scroll(10);
-        break;
-    default:
-        /* convert the QEMU keysym to VT100 key string */
-        q = buf;
-        if (keysym >= 0xe100 && keysym <= 0xe11f) {
-            *q++ = '\033';
-            *q++ = '[';
-            c = keysym - 0xe100;
-            if (c >= 10)
-                *q++ = '0' + (c / 10);
-            *q++ = '0' + (c % 10);
-            *q++ = '~';
-        } else if (keysym >= 0xe120 && keysym <= 0xe17f) {
-            *q++ = '\033';
-            *q++ = '[';
-            *q++ = keysym & 0xff;
-        } else if (s->echo && (keysym == '\r' || keysym == '\n')) {
-            console_puts(s->chr, (const uint8_t *) "\r", 1);
-            *q++ = '\n';
-        } else {
-            *q++ = keysym;
-        }
-        if (s->echo) {
-            console_puts(s->chr, buf, q - buf);
-        }
-        if (s->chr->chr_read) {
-            qemu_fifo_write(&s->out_fifo, buf, q - buf);
-            kbd_send_chars(s);
-        }
-        break;
-    }
-}
-
-static void text_console_invalidate(void *opaque)
-{
-    QemuConsole *s = (QemuConsole *) opaque;
-    if (!ds_get_bits_per_pixel(s->ds) && s->console_type == TEXT_CONSOLE) {
-        s->g_width = ds_get_width(s->ds);
-        s->g_height = ds_get_height(s->ds);
-        text_console_resize(s);
-    }
-    console_refresh(s);
-}
-
-static void text_console_update(void *opaque, console_ch_t *chardata)
-{
-    QemuConsole *s = (QemuConsole *) opaque;
-    int i, j, src;
-
-    if (s->text_x[0] <= s->text_x[1]) {
-        src = (s->y_base + s->text_y[0]) * s->width;
-        chardata += s->text_y[0] * s->width;
-        for (i = s->text_y[0]; i <= s->text_y[1]; i ++)
-            for (j = 0; j < s->width; j ++, src ++)
-                console_write_ch(chardata ++, s->cells[src].ch |
-                                (s->cells[src].t_attrib.fgcol << 12) |
-                                (s->cells[src].t_attrib.bgcol << 8) |
-                                (s->cells[src].t_attrib.bold << 21));
-        dpy_text_update(s->ds, s->text_x[0], s->text_y[0],
-                        s->text_x[1] - s->text_x[0], i - s->text_y[0]);
-        s->text_x[0] = s->width;
-        s->text_y[0] = s->height;
-        s->text_x[1] = 0;
-        s->text_y[1] = 0;
-    }
-    if (s->cursor_invalidate) {
-        dpy_text_cursor(s->ds, s->x, s->y);
-        s->cursor_invalidate = 0;
-    }
-}
-
-static QemuConsole *get_graphic_console(DisplayState *ds)
-{
-    int i;
-    QemuConsole *s;
-    for (i = 0; i < nb_consoles; i++) {
-        s = consoles[i];
-        if (s->console_type == GRAPHIC_CONSOLE && s->ds == ds)
-            return s;
-    }
-    return NULL;
-}
-
-static QemuConsole *new_console(DisplayState *ds, console_type_t console_type)
-{
-    QemuConsole *s;
-    int i;
-
-    if (nb_consoles >= MAX_CONSOLES)
-        return NULL;
-    s = g_malloc0(sizeof(QemuConsole));
-    if (!active_console || ((active_console->console_type != GRAPHIC_CONSOLE) &&
-        (console_type == GRAPHIC_CONSOLE))) {
-        active_console = s;
-    }
-    s->ds = ds;
-    s->console_type = console_type;
-    if (console_type != GRAPHIC_CONSOLE) {
-        s->index = nb_consoles;
-        consoles[nb_consoles++] = s;
-    } else {
-        /* HACK: Put graphical consoles before text consoles.  */
-        for (i = nb_consoles; i > 0; i--) {
-            if (consoles[i - 1]->console_type == GRAPHIC_CONSOLE)
-                break;
-            consoles[i] = consoles[i - 1];
-            consoles[i]->index = i;
-        }
-        s->index = i;
-        consoles[i] = s;
-        nb_consoles++;
-    }
-    return s;
-}
-
-static void qemu_alloc_display(DisplaySurface *surface, int width, int height,
-                               int linesize, PixelFormat pf, int newflags)
-{
-    surface->pf = pf;
-
-    qemu_pixman_image_unref(surface->image);
-    surface->image = NULL;
-
-    surface->format = qemu_pixman_get_format(&pf);
-    assert(surface->format != 0);
-    surface->image = pixman_image_create_bits(surface->format,
-                                              width, height,
-                                              NULL, linesize);
-    assert(surface->image != NULL);
-
-    surface->flags = newflags | QEMU_ALLOCATED_FLAG;
-#ifdef HOST_WORDS_BIGENDIAN
-    surface->flags |= QEMU_BIG_ENDIAN_FLAG;
-#endif
-}
-
-DisplaySurface *qemu_create_displaysurface(DisplayState *ds,
-                                           int width, int height)
-{
-    DisplaySurface *surface = g_new0(DisplaySurface, 1);
-
-    int linesize = width * 4;
-    qemu_alloc_display(surface, width, height, linesize,
-                       qemu_default_pixelformat(32), 0);
-    return surface;
-}
-
-DisplaySurface *qemu_resize_displaysurface(DisplayState *ds,
-                                           int width, int height)
-{
-    int linesize = width * 4;
-
-    trace_displaysurface_resize(ds, ds->surface, width, height);
-    qemu_alloc_display(ds->surface, width, height, linesize,
-                       qemu_default_pixelformat(32), 0);
-    return ds->surface;
-}
-
-DisplaySurface *qemu_create_displaysurface_from(int width, int height, int bpp,
-                                                int linesize, uint8_t *data)
-{
-    DisplaySurface *surface = g_new0(DisplaySurface, 1);
-
-    surface->pf = qemu_default_pixelformat(bpp);
-
-    surface->format = qemu_pixman_get_format(&surface->pf);
-    assert(surface->format != 0);
-    surface->image = pixman_image_create_bits(surface->format,
-                                              width, height,
-                                              (void *)data, linesize);
-    assert(surface->image != NULL);
-
-#ifdef HOST_WORDS_BIGENDIAN
-    surface->flags = QEMU_BIG_ENDIAN_FLAG;
-#endif
-
-    return surface;
-}
-
-void qemu_free_displaysurface(DisplayState *ds)
-{
-    trace_displaysurface_free(ds, ds->surface);
-    if (ds->surface == NULL) {
-        return;
-    }
-    qemu_pixman_image_unref(ds->surface->image);
-    g_free(ds->surface);
-}
-
-static void dumb_display_init(void)
-{
-    DisplayState *ds = g_malloc0(sizeof(DisplayState));
-    int width = 640;
-    int height = 480;
-
-    if (is_fixedsize_console()) {
-        width = active_console->g_width;
-        height = active_console->g_height;
-    }
-    ds->surface = qemu_create_displaysurface(ds, width, height);
-    register_displaystate(ds);
-}
-
-/***********************************************************/
-/* register display */
-
-void register_displaystate(DisplayState *ds)
-{
-    DisplayState **s;
-    s = &display_state;
-    while (*s != NULL)
-        s = &(*s)->next;
-    ds->next = NULL;
-    *s = ds;
-}
-
-DisplayState *get_displaystate(void)
-{
-    if (!display_state) {
-        dumb_display_init ();
-    }
-    return display_state;
-}
-
-DisplayState *graphic_console_init(vga_hw_update_ptr update,
-                                   vga_hw_invalidate_ptr invalidate,
-                                   vga_hw_screen_dump_ptr screen_dump,
-                                   vga_hw_text_update_ptr text_update,
-                                   void *opaque)
-{
-    QemuConsole *s;
-    DisplayState *ds;
-
-    ds = (DisplayState *) g_malloc0(sizeof(DisplayState));
-    ds->surface = qemu_create_displaysurface(ds, 640, 480);
-
-    s = new_console(ds, GRAPHIC_CONSOLE);
-    if (s == NULL) {
-        qemu_free_displaysurface(ds);
-        g_free(ds);
-        return NULL;
-    }
-    s->hw_update = update;
-    s->hw_invalidate = invalidate;
-    s->hw_screen_dump = screen_dump;
-    s->hw_text_update = text_update;
-    s->hw = opaque;
-
-    register_displaystate(ds);
-    return ds;
-}
-
-int is_graphic_console(void)
-{
-    return active_console && active_console->console_type == GRAPHIC_CONSOLE;
-}
-
-int is_fixedsize_console(void)
-{
-    return active_console && active_console->console_type != TEXT_CONSOLE;
-}
-
-void console_color_init(DisplayState *ds)
-{
-    int i, j;
-    for (j = 0; j < 2; j++) {
-        for (i = 0; i < 8; i++) {
-            color_table[j][i] = col_expand(ds,
-                   vga_get_color(ds, color_table_rgb[j][i]));
-        }
-    }
-}
-
-static void text_console_set_echo(CharDriverState *chr, bool echo)
-{
-    QemuConsole *s = chr->opaque;
-
-    s->echo = echo;
-}
-
-static void text_console_update_cursor(void *opaque)
-{
-    QemuConsole *s = opaque;
-
-    s->cursor_visible_phase = !s->cursor_visible_phase;
-    vga_hw_invalidate();
-    qemu_mod_timer(s->cursor_timer,
-                   qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2);
-}
-
-static void text_console_do_init(CharDriverState *chr, DisplayState *ds)
-{
-    QemuConsole *s;
-    static int color_inited;
-
-    s = chr->opaque;
-
-    chr->chr_write = console_puts;
-
-    s->out_fifo.buf = s->out_fifo_buf;
-    s->out_fifo.buf_size = sizeof(s->out_fifo_buf);
-    s->kbd_timer = qemu_new_timer_ms(rt_clock, kbd_send_chars, s);
-    s->ds = ds;
-
-    if (!color_inited) {
-        color_inited = 1;
-        console_color_init(s->ds);
-    }
-    s->y_displayed = 0;
-    s->y_base = 0;
-    s->total_height = DEFAULT_BACKSCROLL;
-    s->x = 0;
-    s->y = 0;
-    if (s->console_type == TEXT_CONSOLE) {
-        s->g_width = ds_get_width(s->ds);
-        s->g_height = ds_get_height(s->ds);
-    }
-
-    s->cursor_timer =
-        qemu_new_timer_ms(rt_clock, text_console_update_cursor, s);
-
-    s->hw_invalidate = text_console_invalidate;
-    s->hw_text_update = text_console_update;
-    s->hw = s;
-
-    /* Set text attribute defaults */
-    s->t_attrib_default.bold = 0;
-    s->t_attrib_default.uline = 0;
-    s->t_attrib_default.blink = 0;
-    s->t_attrib_default.invers = 0;
-    s->t_attrib_default.unvisible = 0;
-    s->t_attrib_default.fgcol = COLOR_WHITE;
-    s->t_attrib_default.bgcol = COLOR_BLACK;
-    /* set current text attributes to default */
-    s->t_attrib = s->t_attrib_default;
-    text_console_resize(s);
-
-    if (chr->label) {
-        char msg[128];
-        int len;
-
-        s->t_attrib.bgcol = COLOR_BLUE;
-        len = snprintf(msg, sizeof(msg), "%s console\r\n", chr->label);
-        console_puts(chr, (uint8_t*)msg, len);
-        s->t_attrib = s->t_attrib_default;
-    }
-
-    qemu_chr_generic_open(chr);
-    if (chr->init)
-        chr->init(chr);
-}
-
-CharDriverState *text_console_init(QemuOpts *opts)
-{
-    CharDriverState *chr;
-    QemuConsole *s;
-    unsigned width;
-    unsigned height;
-
-    chr = g_malloc0(sizeof(CharDriverState));
-
-    width = qemu_opt_get_number(opts, "width", 0);
-    if (width == 0)
-        width = qemu_opt_get_number(opts, "cols", 0) * FONT_WIDTH;
-
-    height = qemu_opt_get_number(opts, "height", 0);
-    if (height == 0)
-        height = qemu_opt_get_number(opts, "rows", 0) * FONT_HEIGHT;
-
-    if (width == 0 || height == 0) {
-        s = new_console(NULL, TEXT_CONSOLE);
-    } else {
-        s = new_console(NULL, TEXT_CONSOLE_FIXED_SIZE);
-    }
-
-    if (!s) {
-        g_free(chr);
-        return NULL;
-    }
-
-    s->chr = chr;
-    s->g_width = width;
-    s->g_height = height;
-    chr->opaque = s;
-    chr->chr_set_echo = text_console_set_echo;
-    return chr;
-}
-
-void text_consoles_set_display(DisplayState *ds)
-{
-    int i;
-
-    for (i = 0; i < nb_consoles; i++) {
-        if (consoles[i]->console_type != GRAPHIC_CONSOLE) {
-            text_console_do_init(consoles[i]->chr, ds);
-        }
-    }
-}
-
-void qemu_console_resize(DisplayState *ds, int width, int height)
-{
-    QemuConsole *s = get_graphic_console(ds);
-    if (!s) return;
-
-    s->g_width = width;
-    s->g_height = height;
-    if (is_graphic_console()) {
-        ds->surface = qemu_resize_displaysurface(ds, width, height);
-        dpy_gfx_resize(ds);
-    }
-}
-
-void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
-                       int dst_x, int dst_y, int w, int h)
-{
-    if (is_graphic_console()) {
-        dpy_gfx_copy(ds, src_x, src_y, dst_x, dst_y, w, h);
-    }
-}
-
-PixelFormat qemu_different_endianness_pixelformat(int bpp)
-{
-    PixelFormat pf;
-
-    memset(&pf, 0x00, sizeof(PixelFormat));
-
-    pf.bits_per_pixel = bpp;
-    pf.bytes_per_pixel = DIV_ROUND_UP(bpp, 8);
-    pf.depth = bpp == 32 ? 24 : bpp;
-
-    switch (bpp) {
-        case 24:
-            pf.rmask = 0x000000FF;
-            pf.gmask = 0x0000FF00;
-            pf.bmask = 0x00FF0000;
-            pf.rmax = 255;
-            pf.gmax = 255;
-            pf.bmax = 255;
-            pf.rshift = 0;
-            pf.gshift = 8;
-            pf.bshift = 16;
-            pf.rbits = 8;
-            pf.gbits = 8;
-            pf.bbits = 8;
-            break;
-        case 32:
-            pf.rmask = 0x0000FF00;
-            pf.gmask = 0x00FF0000;
-            pf.bmask = 0xFF000000;
-            pf.amask = 0x00000000;
-            pf.amax = 255;
-            pf.rmax = 255;
-            pf.gmax = 255;
-            pf.bmax = 255;
-            pf.ashift = 0;
-            pf.rshift = 8;
-            pf.gshift = 16;
-            pf.bshift = 24;
-            pf.rbits = 8;
-            pf.gbits = 8;
-            pf.bbits = 8;
-            pf.abits = 8;
-            break;
-        default:
-            break;
-    }
-    return pf;
-}
-
-PixelFormat qemu_default_pixelformat(int bpp)
-{
-    PixelFormat pf;
-
-    memset(&pf, 0x00, sizeof(PixelFormat));
-
-    pf.bits_per_pixel = bpp;
-    pf.bytes_per_pixel = DIV_ROUND_UP(bpp, 8);
-    pf.depth = bpp == 32 ? 24 : bpp;
-
-    switch (bpp) {
-        case 15:
-            pf.bits_per_pixel = 16;
-            pf.rmask = 0x00007c00;
-            pf.gmask = 0x000003E0;
-            pf.bmask = 0x0000001F;
-            pf.rmax = 31;
-            pf.gmax = 31;
-            pf.bmax = 31;
-            pf.rshift = 10;
-            pf.gshift = 5;
-            pf.bshift = 0;
-            pf.rbits = 5;
-            pf.gbits = 5;
-            pf.bbits = 5;
-            break;
-        case 16:
-            pf.rmask = 0x0000F800;
-            pf.gmask = 0x000007E0;
-            pf.bmask = 0x0000001F;
-            pf.rmax = 31;
-            pf.gmax = 63;
-            pf.bmax = 31;
-            pf.rshift = 11;
-            pf.gshift = 5;
-            pf.bshift = 0;
-            pf.rbits = 5;
-            pf.gbits = 6;
-            pf.bbits = 5;
-            break;
-        case 24:
-            pf.rmask = 0x00FF0000;
-            pf.gmask = 0x0000FF00;
-            pf.bmask = 0x000000FF;
-            pf.rmax = 255;
-            pf.gmax = 255;
-            pf.bmax = 255;
-            pf.rshift = 16;
-            pf.gshift = 8;
-            pf.bshift = 0;
-            pf.rbits = 8;
-            pf.gbits = 8;
-            pf.bbits = 8;
-            break;
-        case 32:
-            pf.rmask = 0x00FF0000;
-            pf.gmask = 0x0000FF00;
-            pf.bmask = 0x000000FF;
-            pf.rmax = 255;
-            pf.gmax = 255;
-            pf.bmax = 255;
-            pf.rshift = 16;
-            pf.gshift = 8;
-            pf.bshift = 0;
-            pf.rbits = 8;
-            pf.gbits = 8;
-            pf.bbits = 8;
-            break;
-        default:
-            break;
-    }
-    return pf;
-}
diff --git a/console.h b/console.h
deleted file mode 100644 (file)
index 33354e4..0000000
--- a/console.h
+++ /dev/null
@@ -1,485 +0,0 @@
-#ifndef CONSOLE_H
-#define CONSOLE_H
-
-#include "qemu-pixman.h"
-#include "qdict.h"
-#include "notify.h"
-#include "monitor.h"
-#include "trace.h"
-#include "qapi-types.h"
-#include "error.h"
-
-/* keyboard/mouse support */
-
-#define MOUSE_EVENT_LBUTTON 0x01
-#define MOUSE_EVENT_RBUTTON 0x02
-#define MOUSE_EVENT_MBUTTON 0x04
-
-/* identical to the ps/2 keyboard bits */
-#define QEMU_SCROLL_LOCK_LED (1 << 0)
-#define QEMU_NUM_LOCK_LED    (1 << 1)
-#define QEMU_CAPS_LOCK_LED   (1 << 2)
-
-/* in ms */
-#define GUI_REFRESH_INTERVAL 30
-
-typedef void QEMUPutKBDEvent(void *opaque, int keycode);
-typedef void QEMUPutLEDEvent(void *opaque, int ledstate);
-typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
-
-typedef struct QEMUPutMouseEntry {
-    QEMUPutMouseEvent *qemu_put_mouse_event;
-    void *qemu_put_mouse_event_opaque;
-    int qemu_put_mouse_event_absolute;
-    char *qemu_put_mouse_event_name;
-
-    int index;
-
-    /* used internally by qemu for handling mice */
-    QTAILQ_ENTRY(QEMUPutMouseEntry) node;
-} QEMUPutMouseEntry;
-
-typedef struct QEMUPutLEDEntry {
-    QEMUPutLEDEvent *put_led;
-    void *opaque;
-    QTAILQ_ENTRY(QEMUPutLEDEntry) next;
-} QEMUPutLEDEntry;
-
-void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
-void qemu_remove_kbd_event_handler(void);
-QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
-                                                void *opaque, int absolute,
-                                                const char *name);
-void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry);
-void qemu_activate_mouse_event_handler(QEMUPutMouseEntry *entry);
-
-QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func, void *opaque);
-void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry);
-
-void kbd_put_keycode(int keycode);
-void kbd_put_ledstate(int ledstate);
-void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
-
-/* Does the current mouse generate absolute events */
-int kbd_mouse_is_absolute(void);
-void qemu_add_mouse_mode_change_notifier(Notifier *notify);
-void qemu_remove_mouse_mode_change_notifier(Notifier *notify);
-
-/* Of all the mice, is there one that generates absolute events */
-int kbd_mouse_has_absolute(void);
-
-struct MouseTransformInfo {
-    /* Touchscreen resolution */
-    int x;
-    int y;
-    /* Calibration values as used/generated by tslib */
-    int a[7];
-};
-
-void do_mouse_set(Monitor *mon, const QDict *qdict);
-
-/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
-   constants) */
-#define QEMU_KEY_ESC1(c) ((c) | 0xe100)
-#define QEMU_KEY_BACKSPACE  0x007f
-#define QEMU_KEY_UP         QEMU_KEY_ESC1('A')
-#define QEMU_KEY_DOWN       QEMU_KEY_ESC1('B')
-#define QEMU_KEY_RIGHT      QEMU_KEY_ESC1('C')
-#define QEMU_KEY_LEFT       QEMU_KEY_ESC1('D')
-#define QEMU_KEY_HOME       QEMU_KEY_ESC1(1)
-#define QEMU_KEY_END        QEMU_KEY_ESC1(4)
-#define QEMU_KEY_PAGEUP     QEMU_KEY_ESC1(5)
-#define QEMU_KEY_PAGEDOWN   QEMU_KEY_ESC1(6)
-#define QEMU_KEY_DELETE     QEMU_KEY_ESC1(3)
-
-#define QEMU_KEY_CTRL_UP         0xe400
-#define QEMU_KEY_CTRL_DOWN       0xe401
-#define QEMU_KEY_CTRL_LEFT       0xe402
-#define QEMU_KEY_CTRL_RIGHT      0xe403
-#define QEMU_KEY_CTRL_HOME       0xe404
-#define QEMU_KEY_CTRL_END        0xe405
-#define QEMU_KEY_CTRL_PAGEUP     0xe406
-#define QEMU_KEY_CTRL_PAGEDOWN   0xe407
-
-void kbd_put_keysym(int keysym);
-
-/* consoles */
-
-#define QEMU_BIG_ENDIAN_FLAG    0x01
-#define QEMU_ALLOCATED_FLAG     0x02
-
-struct PixelFormat {
-    uint8_t bits_per_pixel;
-    uint8_t bytes_per_pixel;
-    uint8_t depth; /* color depth in bits */
-    uint32_t rmask, gmask, bmask, amask;
-    uint8_t rshift, gshift, bshift, ashift;
-    uint8_t rmax, gmax, bmax, amax;
-    uint8_t rbits, gbits, bbits, abits;
-};
-
-struct DisplaySurface {
-    pixman_format_code_t format;
-    pixman_image_t *image;
-    uint8_t flags;
-
-    struct PixelFormat pf;
-};
-
-/* cursor data format is 32bit RGBA */
-typedef struct QEMUCursor {
-    int                 width, height;
-    int                 hot_x, hot_y;
-    int                 refcount;
-    uint32_t            data[];
-} QEMUCursor;
-
-QEMUCursor *cursor_alloc(int width, int height);
-void cursor_get(QEMUCursor *c);
-void cursor_put(QEMUCursor *c);
-QEMUCursor *cursor_builtin_hidden(void);
-QEMUCursor *cursor_builtin_left_ptr(void);
-void cursor_print_ascii_art(QEMUCursor *c, const char *prefix);
-int cursor_get_mono_bpl(QEMUCursor *c);
-void cursor_set_mono(QEMUCursor *c,
-                     uint32_t foreground, uint32_t background, uint8_t *image,
-                     int transparent, uint8_t *mask);
-void cursor_get_mono_image(QEMUCursor *c, int foreground, uint8_t *mask);
-void cursor_get_mono_mask(QEMUCursor *c, int transparent, uint8_t *mask);
-
-struct DisplayChangeListener {
-    int idle;
-    uint64_t gui_timer_interval;
-
-    void (*dpy_refresh)(struct DisplayState *s);
-
-    void (*dpy_gfx_update)(struct DisplayState *s, int x, int y, int w, int h);
-    void (*dpy_gfx_resize)(struct DisplayState *s);
-    void (*dpy_gfx_setdata)(struct DisplayState *s);
-    void (*dpy_gfx_copy)(struct DisplayState *s, int src_x, int src_y,
-                         int dst_x, int dst_y, int w, int h);
-
-    void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
-    void (*dpy_text_resize)(struct DisplayState *s, int w, int h);
-    void (*dpy_text_update)(struct DisplayState *s, int x, int y, int w, int h);
-
-    void (*dpy_mouse_set)(struct DisplayState *s, int x, int y, int on);
-    void (*dpy_cursor_define)(struct DisplayState *s, QEMUCursor *cursor);
-
-    QLIST_ENTRY(DisplayChangeListener) next;
-};
-
-struct DisplayState {
-    struct DisplaySurface *surface;
-    void *opaque;
-    struct QEMUTimer *gui_timer;
-    bool have_gfx;
-    bool have_text;
-
-    QLIST_HEAD(, DisplayChangeListener) listeners;
-
-    struct DisplayState *next;
-};
-
-void register_displaystate(DisplayState *ds);
-DisplayState *get_displaystate(void);
-DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
-                                                int linesize, uint8_t *data);
-PixelFormat qemu_different_endianness_pixelformat(int bpp);
-PixelFormat qemu_default_pixelformat(int bpp);
-
-DisplaySurface *qemu_create_displaysurface(DisplayState *ds,
-                                           int width, int height);
-DisplaySurface *qemu_resize_displaysurface(DisplayState *ds,
-                                           int width, int height);
-void qemu_free_displaysurface(DisplayState *ds);
-
-static inline int is_surface_bgr(DisplaySurface *surface)
-{
-    if (surface->pf.bits_per_pixel == 32 && surface->pf.rshift == 0)
-        return 1;
-    else
-        return 0;
-}
-
-static inline int is_buffer_shared(DisplaySurface *surface)
-{
-    return !(surface->flags & QEMU_ALLOCATED_FLAG);
-}
-
-void gui_setup_refresh(DisplayState *ds);
-
-static inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl)
-{
-    QLIST_INSERT_HEAD(&ds->listeners, dcl, next);
-    gui_setup_refresh(ds);
-    if (dcl->dpy_gfx_resize) {
-        dcl->dpy_gfx_resize(ds);
-    }
-}
-
-static inline void unregister_displaychangelistener(DisplayState *ds,
-                                                    DisplayChangeListener *dcl)
-{
-    QLIST_REMOVE(dcl, next);
-    gui_setup_refresh(ds);
-}
-
-static inline void dpy_gfx_update(DisplayState *s, int x, int y, int w, int h)
-{
-    struct DisplayChangeListener *dcl;
-    int width = pixman_image_get_width(s->surface->image);
-    int height = pixman_image_get_height(s->surface->image);
-
-    x = MAX(x, 0);
-    y = MAX(y, 0);
-    x = MIN(x, width);
-    y = MIN(y, height);
-    w = MIN(w, width - x);
-    h = MIN(h, height - y);
-
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_gfx_update) {
-            dcl->dpy_gfx_update(s, x, y, w, h);
-        }
-    }
-}
-
-static inline void dpy_gfx_resize(DisplayState *s)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_gfx_resize) {
-            dcl->dpy_gfx_resize(s);
-        }
-    }
-}
-
-static inline void dpy_gfx_setdata(DisplayState *s)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_gfx_setdata) {
-            dcl->dpy_gfx_setdata(s);
-        }
-    }
-}
-
-static inline void dpy_refresh(DisplayState *s)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_refresh) {
-            dcl->dpy_refresh(s);
-        }
-    }
-}
-
-static inline void dpy_gfx_copy(struct DisplayState *s, int src_x, int src_y,
-                             int dst_x, int dst_y, int w, int h)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_gfx_copy) {
-            dcl->dpy_gfx_copy(s, src_x, src_y, dst_x, dst_y, w, h);
-        } else { /* TODO */
-            dcl->dpy_gfx_update(s, dst_x, dst_y, w, h);
-        }
-    }
-}
-
-static inline void dpy_text_cursor(struct DisplayState *s, int x, int y)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_text_cursor) {
-            dcl->dpy_text_cursor(s, x, y);
-        }
-    }
-}
-
-static inline void dpy_text_update(DisplayState *s, int x, int y, int w, int h)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_text_update) {
-            dcl->dpy_text_update(s, x, y, w, h);
-        }
-    }
-}
-
-static inline void dpy_text_resize(DisplayState *s, int w, int h)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_text_resize) {
-            dcl->dpy_text_resize(s, w, h);
-        }
-    }
-}
-
-static inline void dpy_mouse_set(struct DisplayState *s, int x, int y, int on)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_mouse_set) {
-            dcl->dpy_mouse_set(s, x, y, on);
-        }
-    }
-}
-
-static inline void dpy_cursor_define(struct DisplayState *s, QEMUCursor *cursor)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_cursor_define) {
-            dcl->dpy_cursor_define(s, cursor);
-        }
-    }
-}
-
-static inline bool dpy_cursor_define_supported(struct DisplayState *s)
-{
-    struct DisplayChangeListener *dcl;
-    QLIST_FOREACH(dcl, &s->listeners, next) {
-        if (dcl->dpy_cursor_define) {
-            return true;
-        }
-    }
-    return false;
-}
-
-static inline int ds_get_linesize(DisplayState *ds)
-{
-    return pixman_image_get_stride(ds->surface->image);
-}
-
-static inline uint8_t* ds_get_data(DisplayState *ds)
-{
-    return (void *)pixman_image_get_data(ds->surface->image);
-}
-
-static inline int ds_get_width(DisplayState *ds)
-{
-    return pixman_image_get_width(ds->surface->image);
-}
-
-static inline int ds_get_height(DisplayState *ds)
-{
-    return pixman_image_get_height(ds->surface->image);
-}
-
-static inline int ds_get_bits_per_pixel(DisplayState *ds)
-{
-    int bits = PIXMAN_FORMAT_BPP(ds->surface->format);
-    return bits;
-}
-
-static inline int ds_get_bytes_per_pixel(DisplayState *ds)
-{
-    int bits = PIXMAN_FORMAT_BPP(ds->surface->format);
-    return (bits + 7) / 8;
-}
-
-static inline pixman_format_code_t ds_get_format(DisplayState *ds)
-{
-    return ds->surface->format;
-}
-
-static inline pixman_image_t *ds_get_image(DisplayState *ds)
-{
-    return ds->surface->image;
-}
-
-static inline int ds_get_depth(DisplayState *ds)
-{
-    return ds->surface->pf.depth;
-}
-
-static inline int ds_get_rmask(DisplayState *ds)
-{
-    return ds->surface->pf.rmask;
-}
-
-static inline int ds_get_gmask(DisplayState *ds)
-{
-    return ds->surface->pf.gmask;
-}
-
-static inline int ds_get_bmask(DisplayState *ds)
-{
-    return ds->surface->pf.bmask;
-}
-
-#ifdef CONFIG_CURSES
-#include <curses.h>
-typedef chtype console_ch_t;
-#else
-typedef unsigned long console_ch_t;
-#endif
-static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
-{
-    if (!(ch & 0xff))
-        ch |= ' ';
-    *dest = ch;
-}
-
-typedef void (*vga_hw_update_ptr)(void *);
-typedef void (*vga_hw_invalidate_ptr)(void *);
-typedef void (*vga_hw_screen_dump_ptr)(void *, const char *, bool cswitch,
-                                       Error **errp);
-typedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *);
-
-DisplayState *graphic_console_init(vga_hw_update_ptr update,
-                                   vga_hw_invalidate_ptr invalidate,
-                                   vga_hw_screen_dump_ptr screen_dump,
-                                   vga_hw_text_update_ptr text_update,
-                                   void *opaque);
-
-void vga_hw_update(void);
-void vga_hw_invalidate(void);
-void vga_hw_text_update(console_ch_t *chardata);
-
-int is_graphic_console(void);
-int is_fixedsize_console(void);
-CharDriverState *text_console_init(QemuOpts *opts);
-void text_consoles_set_display(DisplayState *ds);
-void console_select(unsigned int index);
-void console_color_init(DisplayState *ds);
-void qemu_console_resize(DisplayState *ds, int width, int height);
-void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
-                       int dst_x, int dst_y, int w, int h);
-
-/* sdl.c */
-void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
-
-/* cocoa.m */
-void cocoa_display_init(DisplayState *ds, int full_screen);
-
-/* vnc.c */
-void vnc_display_init(DisplayState *ds);
-void vnc_display_open(DisplayState *ds, const char *display, Error **errp);
-void vnc_display_add_client(DisplayState *ds, int csock, int skipauth);
-char *vnc_display_local_addr(DisplayState *ds);
-#ifdef CONFIG_VNC
-int vnc_display_password(DisplayState *ds, const char *password);
-int vnc_display_pw_expire(DisplayState *ds, time_t expires);
-#else
-static inline int vnc_display_password(DisplayState *ds, const char *password)
-{
-    return -ENODEV;
-}
-static inline int vnc_display_pw_expire(DisplayState *ds, time_t expires)
-{
-    return -ENODEV;
-};
-#endif
-
-/* curses.c */
-void curses_display_init(DisplayState *ds, int full_screen);
-
-/* input.c */
-int index_from_key(const char *key);
-int index_from_keycode(int code);
-
-#endif
diff --git a/cursor.c b/cursor.c
deleted file mode 100644 (file)
index 76e262c..0000000
--- a/cursor.c
+++ /dev/null
@@ -1,211 +0,0 @@
-#include "qemu-common.h"
-#include "console.h"
-
-#include "cursor_hidden.xpm"
-#include "cursor_left_ptr.xpm"
-
-/* for creating built-in cursors */
-static QEMUCursor *cursor_parse_xpm(const char *xpm[])
-{
-    QEMUCursor *c;
-    uint32_t ctab[128];
-    unsigned int width, height, colors, chars;
-    unsigned int line = 0, i, r, g, b, x, y, pixel;
-    char name[16];
-    uint8_t idx;
-
-    /* parse header line: width, height, #colors, #chars */
-    if (sscanf(xpm[line], "%u %u %u %u",
-               &width, &height, &colors, &chars) != 4) {
-        fprintf(stderr, "%s: header parse error: \"%s\"\n",
-                __FUNCTION__, xpm[line]);
-        return NULL;
-    }
-    if (chars != 1) {
-        fprintf(stderr, "%s: chars != 1 not supported\n", __FUNCTION__);
-        return NULL;
-    }
-    line++;
-
-    /* parse color table */
-    for (i = 0; i < colors; i++, line++) {
-        if (sscanf(xpm[line], "%c c %15s", &idx, name) == 2) {
-            if (sscanf(name, "#%02x%02x%02x", &r, &g, &b) == 3) {
-                ctab[idx] = (0xff << 24) | (b << 16) | (g << 8) | r;
-                continue;
-            }
-            if (strcmp(name, "None") == 0) {
-                ctab[idx] = 0x00000000;
-                continue;
-            }
-        }
-        fprintf(stderr, "%s: color parse error: \"%s\"\n",
-                __FUNCTION__, xpm[line]);
-        return NULL;
-    }
-
-    /* parse pixel data */
-    c = cursor_alloc(width, height);
-    for (pixel = 0, y = 0; y < height; y++, line++) {
-        for (x = 0; x < height; x++, pixel++) {
-            idx = xpm[line][x];
-            c->data[pixel] = ctab[idx];
-        }
-    }
-    return c;
-}
-
-/* nice for debugging */
-void cursor_print_ascii_art(QEMUCursor *c, const char *prefix)
-{
-    uint32_t *data = c->data;
-    int x,y;
-
-    for (y = 0; y < c->height; y++) {
-        fprintf(stderr, "%s: %2d: |", prefix, y);
-        for (x = 0; x < c->width; x++, data++) {
-            if ((*data & 0xff000000) != 0xff000000) {
-                fprintf(stderr, " "); /* transparent */
-            } else if ((*data & 0x00ffffff) == 0x00ffffff) {
-                fprintf(stderr, "."); /* white */
-            } else if ((*data & 0x00ffffff) == 0x00000000) {
-                fprintf(stderr, "X"); /* black */
-            } else {
-                fprintf(stderr, "o"); /* other */
-            }
-        }
-        fprintf(stderr, "|\n");
-    }
-}
-
-QEMUCursor *cursor_builtin_hidden(void)
-{
-    QEMUCursor *c;
-
-    c = cursor_parse_xpm(cursor_hidden_xpm);
-    return c;
-}
-
-QEMUCursor *cursor_builtin_left_ptr(void)
-{
-    QEMUCursor *c;
-
-    c = cursor_parse_xpm(cursor_left_ptr_xpm);
-    return c;
-}
-
-QEMUCursor *cursor_alloc(int width, int height)
-{
-    QEMUCursor *c;
-    int datasize = width * height * sizeof(uint32_t);
-
-    c = g_malloc0(sizeof(QEMUCursor) + datasize);
-    c->width  = width;
-    c->height = height;
-    c->refcount = 1;
-    return c;
-}
-
-void cursor_get(QEMUCursor *c)
-{
-    c->refcount++;
-}
-
-void cursor_put(QEMUCursor *c)
-{
-    if (c == NULL)
-        return;
-    c->refcount--;
-    if (c->refcount)
-        return;
-    g_free(c);
-}
-
-int cursor_get_mono_bpl(QEMUCursor *c)
-{
-    return (c->width + 7) / 8;
-}
-
-void cursor_set_mono(QEMUCursor *c,
-                     uint32_t foreground, uint32_t background, uint8_t *image,
-                     int transparent, uint8_t *mask)
-{
-    uint32_t *data = c->data;
-    uint8_t bit;
-    int x,y,bpl;
-
-    bpl = cursor_get_mono_bpl(c);
-    for (y = 0; y < c->height; y++) {
-        bit = 0x80;
-        for (x = 0; x < c->width; x++, data++) {
-            if (transparent && mask[x/8] & bit) {
-                *data = 0x00000000;
-            } else if (!transparent && !(mask[x/8] & bit)) {
-                *data = 0x00000000;
-            } else if (image[x/8] & bit) {
-                *data = 0xff000000 | foreground;
-            } else {
-                *data = 0xff000000 | background;
-            }
-            bit >>= 1;
-            if (bit == 0) {
-                bit = 0x80;
-            }
-        }
-        mask  += bpl;
-        image += bpl;
-    }
-}
-
-void cursor_get_mono_image(QEMUCursor *c, int foreground, uint8_t *image)
-{
-    uint32_t *data = c->data;
-    uint8_t bit;
-    int x,y,bpl;
-
-    bpl = cursor_get_mono_bpl(c);
-    memset(image, 0, bpl * c->height);
-    for (y = 0; y < c->height; y++) {
-        bit = 0x80;
-        for (x = 0; x < c->width; x++, data++) {
-            if (((*data & 0xff000000) == 0xff000000) &&
-                ((*data & 0x00ffffff) == foreground)) {
-                image[x/8] |= bit;
-            }
-            bit >>= 1;
-            if (bit == 0) {
-                bit = 0x80;
-            }
-        }
-        image += bpl;
-    }
-}
-
-void cursor_get_mono_mask(QEMUCursor *c, int transparent, uint8_t *mask)
-{
-    uint32_t *data = c->data;
-    uint8_t bit;
-    int x,y,bpl;
-
-    bpl = cursor_get_mono_bpl(c);
-    memset(mask, 0, bpl * c->height);
-    for (y = 0; y < c->height; y++) {
-        bit = 0x80;
-        for (x = 0; x < c->width; x++, data++) {
-            if ((*data & 0xff000000) != 0xff000000) {
-                if (transparent != 0) {
-                    mask[x/8] |= bit;
-                }
-            } else {
-                if (transparent == 0) {
-                    mask[x/8] |= bit;
-                }
-            }
-            bit >>= 1;
-            if (bit == 0) {
-                bit = 0x80;
-            }
-        }
-        mask += bpl;
-    }
-}
diff --git a/cursor_hidden.xpm b/cursor_hidden.xpm
deleted file mode 100644 (file)
index 354e7a9..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* XPM */
-static const char *cursor_hidden_xpm[] = {
-    "32 32 1 1",
-    "  c None",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-};
diff --git a/cursor_left_ptr.xpm b/cursor_left_ptr.xpm
deleted file mode 100644 (file)
index 6c9ada9..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static const char *cursor_left_ptr_xpm[] = {
-    "32 32 3 1",
-    "X c #000000",
-    ". c #ffffff",
-    "  c None",
-    "X                               ",
-    "XX                              ",
-    "X.X                             ",
-    "X..X                            ",
-    "X...X                           ",
-    "X....X                          ",
-    "X.....X                         ",
-    "X......X                        ",
-    "X.......X                       ",
-    "X........X                      ",
-    "X.....XXXXX                     ",
-    "X..X..X                         ",
-    "X.X X..X                        ",
-    "XX  X..X                        ",
-    "X    X..X                       ",
-    "     X..X                       ",
-    "      X..X                      ",
-    "      X..X                      ",
-    "       XX                       ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-    "                                ",
-};
diff --git a/hmp.c b/hmp.c
index 9b31e9f8a784ce63390691c5877ecfbe1d5d2af2..f235134bb6d429d1095f6f1235f85d56618d3bdb 100644 (file)
--- a/hmp.c
+++ b/hmp.c
@@ -21,7 +21,7 @@
 #include "qmp-commands.h"
 #include "qemu_socket.h"
 #include "monitor.h"
-#include "console.h"
+#include "ui/console.h"
 
 static void hmp_handle_error(Monitor *mon, Error **errp)
 {
index 3b547f0af7767a1d1272a84ab854b8618efbcdf5..cc8ad8e0572fac0285416eee82efe32e6db38a17 100644 (file)
--- a/hw/adb.c
+++ b/hw/adb.c
@@ -23,7 +23,7 @@
  */
 #include "hw.h"
 #include "adb.h"
-#include "console.h"
+#include "ui/console.h"
 
 /* debug ADB */
 //#define DEBUG_ADB
index 2ea9e55bb5ef2057ee3cae66ed3711da665dd028..fa137e628e631c1373b51dad8b29bcfbf1b9cc61 100644 (file)
@@ -11,7 +11,7 @@
  */
 
 #include "ssi.h"
-#include "console.h"
+#include "ui/console.h"
 
 typedef struct {
     SSISlave ssidev;
index 8bedaad3108fb13ec2099d6240e791b4ccd81ecf..91e7cb3d5c53ebd674da35ff1243f2ea55412136 100644 (file)
@@ -32,7 +32,7 @@
 
 #include "hw.h"
 #include "isa.h"
-#include "console.h"
+#include "ui/console.h"
 #include "qemu-timer.h"
 
 /* #define DEBUG_SMC */
index 1b57eb5396370f4d09f25cc4b72e268459c380d8..24bde32e5afbc892cd8e79e1aa2df5017a913cdd 100644 (file)
  */
 
 #include "qemu-common.h"
-#include "console.h"
+#include "ui/console.h"
 #include "devices.h"
 #include "vga_int.h"
-#include "pixel_ops.h"
+#include "ui/pixel_ops.h"
 
 typedef void (*blizzard_fn_t)(uint8_t *, const uint8_t *, unsigned int);
 
index 8d7a3dae219d20756946e79c5eb62e6595aebcdc..0ec0c013b061b0521e7f6bdd601acbc7693ad055 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "qemu-common.h"
 #include "qemu-timer.h"
-#include "console.h"
+#include "ui/console.h"
 #include "hid.h"
 #include "bt.h"
 
index 7d021f2e1d1a96c9dc0cf027b7ced52a21e2f800..80510bc9af83b667aee8f9aedaf604ff7b5dc627 100644 (file)
@@ -28,7 +28,7 @@
  */
 #include "hw.h"
 #include "pci/pci.h"
-#include "console.h"
+#include "ui/console.h"
 #include "vga_int.h"
 #include "loader.h"
 
index a356613b063c4c3e257ef1ed76a9181c3c5f56dd..38e8164e44cd3188efcc064c616b7d993cc2b234 100644 (file)
--- a/hw/escc.c
+++ b/hw/escc.c
@@ -26,7 +26,7 @@
 #include "sysbus.h"
 #include "escc.h"
 #include "qemu-char.h"
-#include "console.h"
+#include "ui/console.h"
 #include "trace.h"
 
 /*
index f2443ca4afcb92ddc510e5eb1ee6cd6f6b0b93ce..3ef0847271d1ac6b259dd57ff5859d55902867d0 100644 (file)
@@ -25,8 +25,8 @@
 #include "qemu-common.h"
 #include "cpu-all.h"
 #include "sysbus.h"
-#include "console.h"
-#include "pixel_ops.h"
+#include "ui/console.h"
+#include "ui/pixel_ops.h"
 #include "bswap.h"
 
 /* Debug messages configuration */
index fa0f7863c4197b7649c553a99356912f2ad711bb..2a870961bc965155de650e81773c21a272a60648 100644 (file)
@@ -18,7 +18,7 @@
  */
 
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "framebuffer.h"
 
 /* Render an image from a shared memory framebuffer.  */
index 8192baf1c8df31b97cd8fc09556951f6af276e6f..b46a04460787b82b66b7b24c1026068e25f7ca8f 100644 (file)
@@ -18,8 +18,8 @@
  */
 
 #include "hw.h"
-#include "console.h"
-#include "pixel_ops.h"
+#include "ui/console.h"
+#include "ui/pixel_ops.h"
 #include "trace.h"
 #include "sysbus.h"
 
index 03761ab8b8ec591305300e07ead26ca10aaa8f86..7935998e83872700f79b31b868964516ceed334a 100644 (file)
--- a/hw/hid.c
+++ b/hw/hid.c
@@ -23,7 +23,7 @@
  * THE SOFTWARE.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "qemu-timer.h"
 #include "hid.h"
 
index 50ac067ecef40f66c9884997b75ddaacc92c13e4..49e1b631b5f52370cee9785d11568ee97a5a84a7 100644 (file)
--- a/hw/hpet.c
+++ b/hw/hpet.c
@@ -26,7 +26,7 @@
 
 #include "hw.h"
 #include "pc.h"
-#include "console.h"
+#include "ui/console.h"
 #include "qemu-timer.h"
 #include "hpet_emul.h"
 #include "sysbus.h"
index 09c77429e85364c27ba1740067ac3b932d215a6a..f4a040631e3b7ce000adb5ac0adb77cd0067f77b 100644 (file)
@@ -23,8 +23,8 @@
  */
 
 #include "qemu-common.h"
-#include "console.h"
-#include "pixel_ops.h"
+#include "ui/console.h"
+#include "ui/pixel_ops.h"
 #include "trace.h"
 #include "sysbus.h"
 
index 42291592e3cae07d95535cf628701e435f4730c7..2629775589fad923982772a09a4b280d3c6493d3 100644 (file)
@@ -29,7 +29,7 @@
 #include "hw/hw.h"
 #include "hw/pc.h"
 #include "qemu-error.h"
-#include "console.h"
+#include "ui/console.h"
 #include "hw/loader.h"
 #include "monitor.h"
 #include "range.h"
index 8e09f9bcc9643a64cfdd614b764d96e2f0329c9b..b14a089b3222239f450de37e62b240b8663e961e 100644 (file)
@@ -21,7 +21,7 @@
 #include "hw.h"
 #include "i2c.h"
 #include "qemu-timer.h"
-#include "console.h"
+#include "ui/console.h"
 
 typedef struct {
     I2CSlave i2c;
index b162b88db7a3441b33834740b14b958045688880..0743668d185514162acf27d9da566e2e1a81687c 100644 (file)
@@ -24,7 +24,7 @@
 #include "hw.h"
 #include "sysbus.h"
 #include "trace.h"
-#include "console.h"
+#include "ui/console.h"
 #include "hid.h"
 #include "qemu-error.h"
 
index 833881cc6a0d766d38f8a375c68b7b82eb201989..c3471315d312fc7b7ae23fbb3d0a08dac4cf4eb7 100644 (file)
@@ -25,9 +25,9 @@
 #include "hw.h"
 #include "sysbus.h"
 #include "trace.h"
-#include "console.h"
+#include "ui/console.h"
 #include "framebuffer.h"
-#include "pixel_ops.h"
+#include "ui/pixel_ops.h"
 #include "qemu-error.h"
 
 #define BITS 8
index 9c492a4637109cc3614599755ef1e3c1978bc757..decb1a3b5db7336fc3d6205dfeaa4805dc42149e 100644 (file)
@@ -22,9 +22,9 @@
  * THE SOFTWARE.
  */
 #include <stdlib.h>
-#include "../qemu-common.h"
-#include "../qemu-char.h"
-#include "../console.h"
+#include "qemu-common.h"
+#include "qemu-char.h"
+#include "ui/console.h"
 #include "msmouse.h"
 
 #define MSMOUSE_LO6(n) ((n) & 0x3f)
index 4e8399ab636e0da58c4376906642c64f0687a014..d16cd141a251028a6e69e1cb0193732585d6c27a 100644 (file)
 #include "ptimer.h"
 #include "block.h"
 #include "flash.h"
-#include "console.h"
+#include "ui/console.h"
 #include "i2c.h"
 #include "blockdev.h"
 #include "exec-memory.h"
+#include "ui/pixel_ops.h"
 
 #define MP_MISC_BASE            0x80002000
 #define MP_MISC_SIZE            0x00001000
@@ -492,8 +493,6 @@ SET_LCD_PIXEL(8, uint8_t)
 SET_LCD_PIXEL(16, uint16_t)
 SET_LCD_PIXEL(32, uint32_t)
 
-#include "pixel_ops.h"
-
 static void lcd_refresh(void *opaque)
 {
     musicpal_lcd_state *s = opaque;
index 2de8d21f08ff9cc4887c9be46c6c99ae8f04175e..dcd3dc97d0147502c398f2f9eb6b04862d80ffe8 100644 (file)
@@ -23,7 +23,7 @@
 #include "omap.h"
 #include "arm-misc.h"
 #include "irq.h"
-#include "console.h"
+#include "ui/console.h"
 #include "boards.h"
 #include "i2c.h"
 #include "devices.h"
index 1e83726d3b70f00c14a9a0dc95e1eeba2edc533c..ae51bdfe4114de69177c95e99fc4a1428e416a50 100644 (file)
@@ -18,7 +18,7 @@
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "omap.h"
 
 struct omap_dss_s {
index d7ae3032be2b43047192e6cf9ab3908d18326408..936850a6216ba6f3938d045795c168f4e8af45e1 100644 (file)
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "omap.h"
 #include "framebuffer.h"
+#include "ui/pixel_ops.h"
 
 struct omap_lcd_panel_s {
     MemoryRegion *sysmem;
@@ -66,8 +67,6 @@ static void omap_lcd_interrupts(struct omap_lcd_panel_s *s)
     qemu_irq_lower(s->irq);
 }
 
-#include "pixel_ops.h"
-
 #define draw_line_func drawfn
 
 #define DEPTH 8
index 21a5bbb0067340f0dcf122a407f75b489647a383..918a6f6a045c1604b7e2ed441051390990788e58 100644 (file)
@@ -26,7 +26,7 @@
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "omap.h"
 #include "boards.h"
 #include "arm-misc.h"
index 6f6f414e6e6002f0cb91e9b6ff7ee56a25e46cb1..5aaeb07460ba3b43d9038f113152cc9dd83b88ad 100644 (file)
--- a/hw/palm.c
+++ b/hw/palm.c
@@ -19,7 +19,7 @@
 #include "hw.h"
 #include "audio/audio.h"
 #include "sysemu.h"
-#include "console.h"
+#include "ui/console.h"
 #include "omap.h"
 #include "boards.h"
 #include "arm-misc.h"
diff --git a/hw/pixel_ops.h b/hw/pixel_ops.h
deleted file mode 100644 (file)
index d390adf..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-static inline unsigned int rgb_to_pixel8(unsigned int r, unsigned int g,
-                                         unsigned int b)
-{
-    return ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6);
-}
-
-static inline unsigned int rgb_to_pixel15(unsigned int r, unsigned int g,
-                                          unsigned int b)
-{
-    return ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
-}
-
-static inline unsigned int rgb_to_pixel15bgr(unsigned int r, unsigned int g,
-                                             unsigned int b)
-{
-    return ((b >> 3) << 10) | ((g >> 3) << 5) | (r >> 3);
-}
-
-static inline unsigned int rgb_to_pixel16(unsigned int r, unsigned int g,
-                                          unsigned int b)
-{
-    return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
-}
-
-static inline unsigned int rgb_to_pixel16bgr(unsigned int r, unsigned int g,
-                                             unsigned int b)
-{
-    return ((b >> 3) << 11) | ((g >> 2) << 5) | (r >> 3);
-}
-
-static inline unsigned int rgb_to_pixel24(unsigned int r, unsigned int g,
-                                          unsigned int b)
-{
-    return (r << 16) | (g << 8) | b;
-}
-
-static inline unsigned int rgb_to_pixel24bgr(unsigned int r, unsigned int g,
-                                             unsigned int b)
-{
-    return (b << 16) | (g << 8) | r;
-}
-
-static inline unsigned int rgb_to_pixel32(unsigned int r, unsigned int g,
-                                          unsigned int b)
-{
-    return (r << 16) | (g << 8) | b;
-}
-
-static inline unsigned int rgb_to_pixel32bgr(unsigned int r, unsigned int g,
-                                             unsigned int b)
-{
-    return (b << 16) | (g << 8) | r;
-}
index f869ba60d74911728062a0bac9535277bffe2530..098e335aeab12890267439bdbb46e52d62639163 100644 (file)
@@ -8,8 +8,9 @@
  */
 
 #include "sysbus.h"
-#include "console.h"
+#include "ui/console.h"
 #include "framebuffer.h"
+#include "ui/pixel_ops.h"
 
 #define PL110_CR_EN   0x001
 #define PL110_CR_BGR  0x100
@@ -109,8 +110,6 @@ static const unsigned char *idregs[] = {
     pl111_id
 };
 
-#include "pixel_ops.h"
-
 #define BITS 8
 #include "pl110_template.h"
 #define BITS 15
index f93cd24d94d5cfa7026c85747bd5c49c57cd891a..ba80089aba8a3868090bacb1a70436c2fab0c8ab 100644 (file)
--- a/hw/ps2.c
+++ b/hw/ps2.c
@@ -23,7 +23,7 @@
  */
 #include "hw.h"
 #include "ps2.h"
-#include "console.h"
+#include "ui/console.h"
 #include "sysemu.h"
 
 /* debug PC keyboard */
index 6f89c44e328635757270de28f34c86bb3c4e789d..9f8e294ad504818ad5d40ac770a09dbf9f999a22 100644 (file)
--- a/hw/puv3.c
+++ b/hw/puv3.c
@@ -10,7 +10,7 @@
  */
 
 #include "qemu-common.h"
-#include "console.h"
+#include "ui/console.h"
 #include "elf.h"
 #include "exec-memory.h"
 #include "sysbus.h"
index 257984c427faa0ab593b6fbf65335b667cc358fa..4ff04ad63b3452e707808a3ab9c0e6510ddd08ed 100644 (file)
@@ -13,7 +13,7 @@
 
 #include "hw.h"
 #include "pxa.h"
-#include "console.h"
+#include "ui/console.h"
 
 /*
  * Keypad
index b53dfaf3cf8827c2d0097713707e9b372f291452..b5efd4d426b564ae60cb93c572b425365aa73066 100644 (file)
@@ -11,9 +11,9 @@
  */
 
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "pxa.h"
-#include "pixel_ops.h"
+#include "ui/pixel_ops.h"
 /* FIXME: For graphic_rotate. Should probably be done in common code.  */
 #include "sysemu.h"
 #include "framebuffer.h"
index 41246c75540d32bd68f904bf19d93c2f54323a10..8433d1aeeaeeba3824013713e4de2790e7cbb868 100644 (file)
--- a/hw/qxl.h
+++ b/hw/qxl.h
@@ -1,6 +1,6 @@
 #include "qemu-common.h"
 
-#include "console.h"
+#include "ui/console.h"
 #include "hw.h"
 #include "pci/pci.h"
 #include "vga_int.h"
index 50324cda53bcc7bec607e3d0e9641acc66071296..714aca0492e39b2be6beb13a45704d7237ebda3f 100644 (file)
 #include <stdio.h>
 #include "hw.h"
 #include "serial.h"
-#include "console.h"
+#include "ui/console.h"
 #include "devices.h"
 #include "sysbus.h"
 #include "qdev-addr.h"
 #include "range.h"
+#include "ui/pixel_ops.h"
 
 /*
  * Status: 2010/05/07
@@ -1163,8 +1164,6 @@ static const MemoryRegionOps sm501_2d_engine_ops = {
 
 /* draw line functions for all console modes */
 
-#include "pixel_ops.h"
-
 typedef void draw_line_func(uint8_t *d, const uint8_t *s,
                            int width, const uint32_t *pal);
 
index 12e2815221df387c7441784322d92fc5621ff613..d4575d20bf13b123e9b546f160611ffb749b19b0 100644 (file)
@@ -21,7 +21,7 @@
 #include "qemu-timer.h"
 #include "devices.h"
 #include "sharpsl.h"
-#include "console.h"
+#include "ui/console.h"
 #include "block.h"
 #include "audio/audio.h"
 #include "boards.h"
index d7fd828c65ca8cdb81de01697be356ee9ccfb0b1..cbdf49af57f9fd18b4884c8fb9778dda05fb096e 100644 (file)
@@ -11,7 +11,7 @@
    implement one.  Most of the commends relating to brightness and geometry
    setup are ignored. */
 #include "i2c.h"
-#include "console.h"
+#include "ui/console.h"
 
 //#define DEBUG_SSD0303 1
 
index 4098830c2b8f256ff3dafd879c40605a514df06f..fe6f801ae7cdfb7795453dc19afb825d317606a9 100644 (file)
@@ -11,7 +11,7 @@
    implement one.  Most of the commends relating to brightness and geometry
    setup are ignored. */
 #include "ssi.h"
-#include "console.h"
+#include "ui/console.h"
 
 //#define DEBUG_SSD0323 1
 
index 68c600c04c5d76230c46d0a532eac225eecfad03..7a95c3fc8854fe98d8dde87dd20fe59bea686831 100644 (file)
@@ -8,7 +8,7 @@
  */
 #include "hw.h"
 #include "devices.h"
-#include "console.h"
+#include "ui/console.h"
 
 typedef struct {
     qemu_irq irq;
index f0320271d41367ebaf371b16eca933a64a061fe3..edf76817b5915d2978ff7078e97baaf7a6360b2a 100644 (file)
@@ -13,8 +13,8 @@
 #include "hw.h"
 #include "devices.h"
 #include "flash.h"
-#include "console.h"
-#include "pixel_ops.h"
+#include "ui/console.h"
+#include "ui/pixel_ops.h"
 #include "blockdev.h"
 
 #define IRQ_TC6393_NAND                0
index a66fbeefdb13bbcebdf8166897bf87a5e1dd72ea..185588b49ca2ad50f9fccb791667cfb7616b9286 100644 (file)
--- a/hw/tcx.c
+++ b/hw/tcx.c
@@ -23,8 +23,8 @@
  */
 
 #include "qemu-common.h"
-#include "console.h"
-#include "pixel_ops.h"
+#include "ui/console.h"
+#include "ui/pixel_ops.h"
 #include "sysbus.h"
 #include "qdev-addr.h"
 
index 9a500ebb3d284824a84cf47108ad119ea755eab4..e2326283c0753b7add1f0827d2e8508d04c158a6 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "hw.h"
 #include "qemu-timer.h"
-#include "console.h"
+#include "ui/console.h"
 #include "devices.h"
 
 #define TSC_CUT_RESOLUTION(value, p)   ((value) >> (16 - (p ? 12 : 10)))
index 3c448a6f0f5a30fabdc798d67234d4bcb3f06f6c..2b3535d4fc04c1a34a94d458e1a02ca523ccbd85 100644 (file)
@@ -22,7 +22,7 @@
 #include "hw.h"
 #include "audio/audio.h"
 #include "qemu-timer.h"
-#include "console.h"
+#include "ui/console.h"
 #include "omap.h"      /* For I2SCodec and uWireSlave */
 #include "devices.h"
 
index 0d70d8498ddfa531970684bda05b883d938e8370..ce699bdbddc206845085bada2e2c51e9b543cd1a 100644 (file)
@@ -23,7 +23,7 @@
 #include "qemu-timer.h"
 #include "i2c.h"
 #include "sysemu.h"
-#include "console.h"
+#include "ui/console.h"
 
 #define VERBOSE 1
 
index 87491284a81d7abf623aac01f16ee77997ef0636..6953f2e7104493d27ab2f652a6975ab71d67cf86 100644 (file)
@@ -23,7 +23,7 @@
  * THE SOFTWARE.
  */
 #include "hw/hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "hw/usb.h"
 #include "hw/usb/desc.h"
 #include "qemu-timer.h"
index 50af97109ba9ad36e949fc3eccf3ffecc09cfdc4..de56fea61066cbe3fd72be4238c229d5cdec1ee3 100644 (file)
@@ -13,7 +13,7 @@
 #include "hw/usb.h"
 #include "hw/usb/desc.h"
 #include "hw/scsi.h"
-#include "console.h"
+#include "ui/console.h"
 #include "monitor.h"
 #include "sysemu.h"
 #include "blockdev.h"
index f7342b08c30abb211a20b7a1d1f089ac4f26e92a..9ab368a6c5b250c37dbef7e39524ded874696221 100644 (file)
@@ -26,7 +26,7 @@
  * THE SOFTWARE.
  */
 #include "hw/hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "hw/usb.h"
 #include "hw/usb/desc.h"
 
index b4e10c12ca60446aec0ecc8362ab48ebaefea60e..e8da3221f6fe0a98e2d26a8e075424db78a00f17 100644 (file)
@@ -31,7 +31,7 @@
  */
 
 #include "qemu-common.h"
-#include "console.h"
+#include "ui/console.h"
 #include "hw/usb.h"
 #include "monitor.h"
 
index 8ef4320d0574d18e845138ece90720055da3bd4d..008703ff57151f9c0f17db74caf60009753101ef 100644 (file)
  * THE SOFTWARE.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "pc.h"
 #include "vga_int.h"
-#include "pixel_ops.h"
+#include "ui/pixel_ops.h"
 #include "qemu-timer.h"
 
 #define VGA_RAM_SIZE (8192 * 1024)
index 046602b3d267b83133b17380519a44420340f807..d1d5b118283c4d69ac36ff9faf7b7dd1a53739ba 100644 (file)
  * THE SOFTWARE.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "pc.h"
 #include "vga_int.h"
-#include "pixel_ops.h"
+#include "ui/pixel_ops.h"
 #include "qemu-timer.h"
 #include "loader.h"
 
index 0cb318eab6a8e0845c9765b8a0c55d066154c507..fe3a3d489952f7a9bb0ca8b73aa8d38a51a7bc1e 100644 (file)
  * THE SOFTWARE.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "pci/pci.h"
 #include "vga_int.h"
-#include "pixel_ops.h"
+#include "ui/pixel_ops.h"
 #include "qemu-timer.h"
 #include "loader.h"
 
index ab40d731006c34a5807bb1db9a486f2c2acbefa2..4007116859db68810bfaa28423f7552727159f8f 100644 (file)
--- a/hw/vga.c
+++ b/hw/vga.c
  */
 #include "hw.h"
 #include "vga.h"
-#include "console.h"
+#include "ui/console.h"
 #include "pc.h"
 #include "pci/pci.h"
 #include "vga_int.h"
-#include "pixel_ops.h"
+#include "ui/pixel_ops.h"
 #include "qemu-timer.h"
 #include "xen.h"
 #include "trace.h"
index 6338efa1c396d1b33c41333f0dba466a0b57ce61..d052f33f56274f7f8c97d70654046b982d44b532 100644 (file)
@@ -22,7 +22,7 @@
  * THE SOFTWARE.
  */
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "ps2.h"
 #include "pc.h"
 #include "qdev.h"
index 333ec8cebed09100c36b03efc4ce53abe151f297..b0e772f8634b647dd477ce38fbeebca475e47f76 100644 (file)
@@ -23,7 +23,7 @@
  */
 #include "hw.h"
 #include "loader.h"
-#include "console.h"
+#include "ui/console.h"
 #include "pci/pci.h"
 
 #undef VERBOSE
index 442a63a320cdf9d251881652c239cabd8cff17fd..b1122bd933f429218115eb17898f2823aaca2e15 100644 (file)
@@ -36,7 +36,7 @@
 #include <time.h>
 
 #include "hw.h"
-#include "console.h"
+#include "ui/console.h"
 #include "qemu-char.h"
 #include "xen_backend.h"
 
diff --git a/hw/z2.c b/hw/z2.c
index f62b8067bf7ccfaf6041acd1ad819484f009c2b6..d46186430f5d1b7c5535f3b598132790ba910f26 100644 (file)
--- a/hw/z2.c
+++ b/hw/z2.c
@@ -21,7 +21,7 @@
 #include "sysemu.h"
 #include "flash.h"
 #include "blockdev.h"
-#include "console.h"
+#include "ui/console.h"
 #include "audio/audio.h"
 #include "exec-memory.h"
 
diff --git a/include/ui/console.h b/include/ui/console.h
new file mode 100644 (file)
index 0000000..777881d
--- /dev/null
@@ -0,0 +1,485 @@
+#ifndef CONSOLE_H
+#define CONSOLE_H
+
+#include "ui/qemu-pixman.h"
+#include "qdict.h"
+#include "notify.h"
+#include "monitor.h"
+#include "trace.h"
+#include "qapi-types.h"
+#include "error.h"
+
+/* keyboard/mouse support */
+
+#define MOUSE_EVENT_LBUTTON 0x01
+#define MOUSE_EVENT_RBUTTON 0x02
+#define MOUSE_EVENT_MBUTTON 0x04
+
+/* identical to the ps/2 keyboard bits */
+#define QEMU_SCROLL_LOCK_LED (1 << 0)
+#define QEMU_NUM_LOCK_LED    (1 << 1)
+#define QEMU_CAPS_LOCK_LED   (1 << 2)
+
+/* in ms */
+#define GUI_REFRESH_INTERVAL 30
+
+typedef void QEMUPutKBDEvent(void *opaque, int keycode);
+typedef void QEMUPutLEDEvent(void *opaque, int ledstate);
+typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
+
+typedef struct QEMUPutMouseEntry {
+    QEMUPutMouseEvent *qemu_put_mouse_event;
+    void *qemu_put_mouse_event_opaque;
+    int qemu_put_mouse_event_absolute;
+    char *qemu_put_mouse_event_name;
+
+    int index;
+
+    /* used internally by qemu for handling mice */
+    QTAILQ_ENTRY(QEMUPutMouseEntry) node;
+} QEMUPutMouseEntry;
+
+typedef struct QEMUPutLEDEntry {
+    QEMUPutLEDEvent *put_led;
+    void *opaque;
+    QTAILQ_ENTRY(QEMUPutLEDEntry) next;
+} QEMUPutLEDEntry;
+
+void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
+void qemu_remove_kbd_event_handler(void);
+QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
+                                                void *opaque, int absolute,
+                                                const char *name);
+void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry);
+void qemu_activate_mouse_event_handler(QEMUPutMouseEntry *entry);
+
+QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func, void *opaque);
+void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry);
+
+void kbd_put_keycode(int keycode);
+void kbd_put_ledstate(int ledstate);
+void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
+
+/* Does the current mouse generate absolute events */
+int kbd_mouse_is_absolute(void);
+void qemu_add_mouse_mode_change_notifier(Notifier *notify);
+void qemu_remove_mouse_mode_change_notifier(Notifier *notify);
+
+/* Of all the mice, is there one that generates absolute events */
+int kbd_mouse_has_absolute(void);
+
+struct MouseTransformInfo {
+    /* Touchscreen resolution */
+    int x;
+    int y;
+    /* Calibration values as used/generated by tslib */
+    int a[7];
+};
+
+void do_mouse_set(Monitor *mon, const QDict *qdict);
+
+/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
+   constants) */
+#define QEMU_KEY_ESC1(c) ((c) | 0xe100)
+#define QEMU_KEY_BACKSPACE  0x007f
+#define QEMU_KEY_UP         QEMU_KEY_ESC1('A')
+#define QEMU_KEY_DOWN       QEMU_KEY_ESC1('B')
+#define QEMU_KEY_RIGHT      QEMU_KEY_ESC1('C')
+#define QEMU_KEY_LEFT       QEMU_KEY_ESC1('D')
+#define QEMU_KEY_HOME       QEMU_KEY_ESC1(1)
+#define QEMU_KEY_END        QEMU_KEY_ESC1(4)
+#define QEMU_KEY_PAGEUP     QEMU_KEY_ESC1(5)
+#define QEMU_KEY_PAGEDOWN   QEMU_KEY_ESC1(6)
+#define QEMU_KEY_DELETE     QEMU_KEY_ESC1(3)
+
+#define QEMU_KEY_CTRL_UP         0xe400
+#define QEMU_KEY_CTRL_DOWN       0xe401
+#define QEMU_KEY_CTRL_LEFT       0xe402
+#define QEMU_KEY_CTRL_RIGHT      0xe403
+#define QEMU_KEY_CTRL_HOME       0xe404
+#define QEMU_KEY_CTRL_END        0xe405
+#define QEMU_KEY_CTRL_PAGEUP     0xe406
+#define QEMU_KEY_CTRL_PAGEDOWN   0xe407
+
+void kbd_put_keysym(int keysym);
+
+/* consoles */
+
+#define QEMU_BIG_ENDIAN_FLAG    0x01
+#define QEMU_ALLOCATED_FLAG     0x02
+
+struct PixelFormat {
+    uint8_t bits_per_pixel;
+    uint8_t bytes_per_pixel;
+    uint8_t depth; /* color depth in bits */
+    uint32_t rmask, gmask, bmask, amask;
+    uint8_t rshift, gshift, bshift, ashift;
+    uint8_t rmax, gmax, bmax, amax;
+    uint8_t rbits, gbits, bbits, abits;
+};
+
+struct DisplaySurface {
+    pixman_format_code_t format;
+    pixman_image_t *image;
+    uint8_t flags;
+
+    struct PixelFormat pf;
+};
+
+/* cursor data format is 32bit RGBA */
+typedef struct QEMUCursor {
+    int                 width, height;
+    int                 hot_x, hot_y;
+    int                 refcount;
+    uint32_t            data[];
+} QEMUCursor;
+
+QEMUCursor *cursor_alloc(int width, int height);
+void cursor_get(QEMUCursor *c);
+void cursor_put(QEMUCursor *c);
+QEMUCursor *cursor_builtin_hidden(void);
+QEMUCursor *cursor_builtin_left_ptr(void);
+void cursor_print_ascii_art(QEMUCursor *c, const char *prefix);
+int cursor_get_mono_bpl(QEMUCursor *c);
+void cursor_set_mono(QEMUCursor *c,
+                     uint32_t foreground, uint32_t background, uint8_t *image,
+                     int transparent, uint8_t *mask);
+void cursor_get_mono_image(QEMUCursor *c, int foreground, uint8_t *mask);
+void cursor_get_mono_mask(QEMUCursor *c, int transparent, uint8_t *mask);
+
+struct DisplayChangeListener {
+    int idle;
+    uint64_t gui_timer_interval;
+
+    void (*dpy_refresh)(struct DisplayState *s);
+
+    void (*dpy_gfx_update)(struct DisplayState *s, int x, int y, int w, int h);
+    void (*dpy_gfx_resize)(struct DisplayState *s);
+    void (*dpy_gfx_setdata)(struct DisplayState *s);
+    void (*dpy_gfx_copy)(struct DisplayState *s, int src_x, int src_y,
+                         int dst_x, int dst_y, int w, int h);
+
+    void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
+    void (*dpy_text_resize)(struct DisplayState *s, int w, int h);
+    void (*dpy_text_update)(struct DisplayState *s, int x, int y, int w, int h);
+
+    void (*dpy_mouse_set)(struct DisplayState *s, int x, int y, int on);
+    void (*dpy_cursor_define)(struct DisplayState *s, QEMUCursor *cursor);
+
+    QLIST_ENTRY(DisplayChangeListener) next;
+};
+
+struct DisplayState {
+    struct DisplaySurface *surface;
+    void *opaque;
+    struct QEMUTimer *gui_timer;
+    bool have_gfx;
+    bool have_text;
+
+    QLIST_HEAD(, DisplayChangeListener) listeners;
+
+    struct DisplayState *next;
+};
+
+void register_displaystate(DisplayState *ds);
+DisplayState *get_displaystate(void);
+DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
+                                                int linesize, uint8_t *data);
+PixelFormat qemu_different_endianness_pixelformat(int bpp);
+PixelFormat qemu_default_pixelformat(int bpp);
+
+DisplaySurface *qemu_create_displaysurface(DisplayState *ds,
+                                           int width, int height);
+DisplaySurface *qemu_resize_displaysurface(DisplayState *ds,
+                                           int width, int height);
+void qemu_free_displaysurface(DisplayState *ds);
+
+static inline int is_surface_bgr(DisplaySurface *surface)
+{
+    if (surface->pf.bits_per_pixel == 32 && surface->pf.rshift == 0)
+        return 1;
+    else
+        return 0;
+}
+
+static inline int is_buffer_shared(DisplaySurface *surface)
+{
+    return !(surface->flags & QEMU_ALLOCATED_FLAG);
+}
+
+void gui_setup_refresh(DisplayState *ds);
+
+static inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl)
+{
+    QLIST_INSERT_HEAD(&ds->listeners, dcl, next);
+    gui_setup_refresh(ds);
+    if (dcl->dpy_gfx_resize) {
+        dcl->dpy_gfx_resize(ds);
+    }
+}
+
+static inline void unregister_displaychangelistener(DisplayState *ds,
+                                                    DisplayChangeListener *dcl)
+{
+    QLIST_REMOVE(dcl, next);
+    gui_setup_refresh(ds);
+}
+
+static inline void dpy_gfx_update(DisplayState *s, int x, int y, int w, int h)
+{
+    struct DisplayChangeListener *dcl;
+    int width = pixman_image_get_width(s->surface->image);
+    int height = pixman_image_get_height(s->surface->image);
+
+    x = MAX(x, 0);
+    y = MAX(y, 0);
+    x = MIN(x, width);
+    y = MIN(y, height);
+    w = MIN(w, width - x);
+    h = MIN(h, height - y);
+
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_gfx_update) {
+            dcl->dpy_gfx_update(s, x, y, w, h);
+        }
+    }
+}
+
+static inline void dpy_gfx_resize(DisplayState *s)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_gfx_resize) {
+            dcl->dpy_gfx_resize(s);
+        }
+    }
+}
+
+static inline void dpy_gfx_setdata(DisplayState *s)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_gfx_setdata) {
+            dcl->dpy_gfx_setdata(s);
+        }
+    }
+}
+
+static inline void dpy_refresh(DisplayState *s)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_refresh) {
+            dcl->dpy_refresh(s);
+        }
+    }
+}
+
+static inline void dpy_gfx_copy(struct DisplayState *s, int src_x, int src_y,
+                             int dst_x, int dst_y, int w, int h)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_gfx_copy) {
+            dcl->dpy_gfx_copy(s, src_x, src_y, dst_x, dst_y, w, h);
+        } else { /* TODO */
+            dcl->dpy_gfx_update(s, dst_x, dst_y, w, h);
+        }
+    }
+}
+
+static inline void dpy_text_cursor(struct DisplayState *s, int x, int y)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_text_cursor) {
+            dcl->dpy_text_cursor(s, x, y);
+        }
+    }
+}
+
+static inline void dpy_text_update(DisplayState *s, int x, int y, int w, int h)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_text_update) {
+            dcl->dpy_text_update(s, x, y, w, h);
+        }
+    }
+}
+
+static inline void dpy_text_resize(DisplayState *s, int w, int h)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_text_resize) {
+            dcl->dpy_text_resize(s, w, h);
+        }
+    }
+}
+
+static inline void dpy_mouse_set(struct DisplayState *s, int x, int y, int on)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_mouse_set) {
+            dcl->dpy_mouse_set(s, x, y, on);
+        }
+    }
+}
+
+static inline void dpy_cursor_define(struct DisplayState *s, QEMUCursor *cursor)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_cursor_define) {
+            dcl->dpy_cursor_define(s, cursor);
+        }
+    }
+}
+
+static inline bool dpy_cursor_define_supported(struct DisplayState *s)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_cursor_define) {
+            return true;
+        }
+    }
+    return false;
+}
+
+static inline int ds_get_linesize(DisplayState *ds)
+{
+    return pixman_image_get_stride(ds->surface->image);
+}
+
+static inline uint8_t* ds_get_data(DisplayState *ds)
+{
+    return (void *)pixman_image_get_data(ds->surface->image);
+}
+
+static inline int ds_get_width(DisplayState *ds)
+{
+    return pixman_image_get_width(ds->surface->image);
+}
+
+static inline int ds_get_height(DisplayState *ds)
+{
+    return pixman_image_get_height(ds->surface->image);
+}
+
+static inline int ds_get_bits_per_pixel(DisplayState *ds)
+{
+    int bits = PIXMAN_FORMAT_BPP(ds->surface->format);
+    return bits;
+}
+
+static inline int ds_get_bytes_per_pixel(DisplayState *ds)
+{
+    int bits = PIXMAN_FORMAT_BPP(ds->surface->format);
+    return (bits + 7) / 8;
+}
+
+static inline pixman_format_code_t ds_get_format(DisplayState *ds)
+{
+    return ds->surface->format;
+}
+
+static inline pixman_image_t *ds_get_image(DisplayState *ds)
+{
+    return ds->surface->image;
+}
+
+static inline int ds_get_depth(DisplayState *ds)
+{
+    return ds->surface->pf.depth;
+}
+
+static inline int ds_get_rmask(DisplayState *ds)
+{
+    return ds->surface->pf.rmask;
+}
+
+static inline int ds_get_gmask(DisplayState *ds)
+{
+    return ds->surface->pf.gmask;
+}
+
+static inline int ds_get_bmask(DisplayState *ds)
+{
+    return ds->surface->pf.bmask;
+}
+
+#ifdef CONFIG_CURSES
+#include <curses.h>
+typedef chtype console_ch_t;
+#else
+typedef unsigned long console_ch_t;
+#endif
+static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
+{
+    if (!(ch & 0xff))
+        ch |= ' ';
+    *dest = ch;
+}
+
+typedef void (*vga_hw_update_ptr)(void *);
+typedef void (*vga_hw_invalidate_ptr)(void *);
+typedef void (*vga_hw_screen_dump_ptr)(void *, const char *, bool cswitch,
+                                       Error **errp);
+typedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *);
+
+DisplayState *graphic_console_init(vga_hw_update_ptr update,
+                                   vga_hw_invalidate_ptr invalidate,
+                                   vga_hw_screen_dump_ptr screen_dump,
+                                   vga_hw_text_update_ptr text_update,
+                                   void *opaque);
+
+void vga_hw_update(void);
+void vga_hw_invalidate(void);
+void vga_hw_text_update(console_ch_t *chardata);
+
+int is_graphic_console(void);
+int is_fixedsize_console(void);
+CharDriverState *text_console_init(QemuOpts *opts);
+void text_consoles_set_display(DisplayState *ds);
+void console_select(unsigned int index);
+void console_color_init(DisplayState *ds);
+void qemu_console_resize(DisplayState *ds, int width, int height);
+void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
+                       int dst_x, int dst_y, int w, int h);
+
+/* sdl.c */
+void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
+
+/* cocoa.m */
+void cocoa_display_init(DisplayState *ds, int full_screen);
+
+/* vnc.c */
+void vnc_display_init(DisplayState *ds);
+void vnc_display_open(DisplayState *ds, const char *display, Error **errp);
+void vnc_display_add_client(DisplayState *ds, int csock, int skipauth);
+char *vnc_display_local_addr(DisplayState *ds);
+#ifdef CONFIG_VNC
+int vnc_display_password(DisplayState *ds, const char *password);
+int vnc_display_pw_expire(DisplayState *ds, time_t expires);
+#else
+static inline int vnc_display_password(DisplayState *ds, const char *password)
+{
+    return -ENODEV;
+}
+static inline int vnc_display_pw_expire(DisplayState *ds, time_t expires)
+{
+    return -ENODEV;
+};
+#endif
+
+/* curses.c */
+void curses_display_init(DisplayState *ds, int full_screen);
+
+/* input.c */
+int index_from_key(const char *key);
+int index_from_keycode(int code);
+
+#endif
diff --git a/include/ui/pixel_ops.h b/include/ui/pixel_ops.h
new file mode 100644 (file)
index 0000000..d390adf
--- /dev/null
@@ -0,0 +1,53 @@
+static inline unsigned int rgb_to_pixel8(unsigned int r, unsigned int g,
+                                         unsigned int b)
+{
+    return ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6);
+}
+
+static inline unsigned int rgb_to_pixel15(unsigned int r, unsigned int g,
+                                          unsigned int b)
+{
+    return ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
+}
+
+static inline unsigned int rgb_to_pixel15bgr(unsigned int r, unsigned int g,
+                                             unsigned int b)
+{
+    return ((b >> 3) << 10) | ((g >> 3) << 5) | (r >> 3);
+}
+
+static inline unsigned int rgb_to_pixel16(unsigned int r, unsigned int g,
+                                          unsigned int b)
+{
+    return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
+}
+
+static inline unsigned int rgb_to_pixel16bgr(unsigned int r, unsigned int g,
+                                             unsigned int b)
+{
+    return ((b >> 3) << 11) | ((g >> 2) << 5) | (r >> 3);
+}
+
+static inline unsigned int rgb_to_pixel24(unsigned int r, unsigned int g,
+                                          unsigned int b)
+{
+    return (r << 16) | (g << 8) | b;
+}
+
+static inline unsigned int rgb_to_pixel24bgr(unsigned int r, unsigned int g,
+                                             unsigned int b)
+{
+    return (b << 16) | (g << 8) | r;
+}
+
+static inline unsigned int rgb_to_pixel32(unsigned int r, unsigned int g,
+                                          unsigned int b)
+{
+    return (r << 16) | (g << 8) | b;
+}
+
+static inline unsigned int rgb_to_pixel32bgr(unsigned int r, unsigned int g,
+                                             unsigned int b)
+{
+    return (b << 16) | (g << 8) | r;
+}
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
new file mode 100644 (file)
index 0000000..3c05c83
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef QEMU_PIXMAN_H
+#define QEMU_PIXMAN_H
+
+#include <pixman.h>
+
+#include "console.h"
+
+/*
+ * pixman image formats are defined to be native endian,
+ * that means host byte order on qemu.  So we go define
+ * fixed formats here for cases where it is needed, like
+ * feeding libjpeg / libpng and writing screenshots.
+ */
+
+#ifdef HOST_WORDS_BIGENDIAN
+# define PIXMAN_BE_r8g8b8     PIXMAN_r8g8b8
+#else
+# define PIXMAN_BE_r8g8b8     PIXMAN_b8g8r8
+#endif
+
+/* -------------------------------------------------------------------- */
+
+int qemu_pixman_get_type(int rshift, int gshift, int bshift);
+pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf);
+
+pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
+                                           int width);
+void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
+                              int width, int x, int y);
+pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format,
+                                          pixman_image_t *image);
+void qemu_pixman_image_unref(pixman_image_t *image);
+
+#endif /* QEMU_PIXMAN_H */
diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h
new file mode 100644 (file)
index 0000000..5857b8a
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2010 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef QEMU_SPICE_H
+#define QEMU_SPICE_H
+
+#ifdef CONFIG_SPICE
+
+#include <spice.h>
+
+#include "qemu-option.h"
+#include "qemu-config.h"
+#include "monitor.h"
+
+extern int using_spice;
+
+void qemu_spice_init(void);
+void qemu_spice_input_init(void);
+void qemu_spice_audio_init(void);
+void qemu_spice_display_init(DisplayState *ds);
+int qemu_spice_display_add_client(int csock, int skipauth, int tls);
+int qemu_spice_add_interface(SpiceBaseInstance *sin);
+int qemu_spice_set_passwd(const char *passwd,
+                          bool fail_if_connected, bool disconnect_if_connected);
+int qemu_spice_set_pw_expire(time_t expires);
+int qemu_spice_migrate_info(const char *hostname, int port, int tls_port,
+                            const char *subject,
+                            MonitorCompletion cb, void *opaque);
+
+void do_info_spice_print(Monitor *mon, const QObject *data);
+void do_info_spice(Monitor *mon, QObject **ret_data);
+
+CharDriverState *qemu_chr_open_spice(QemuOpts *opts);
+
+#else  /* CONFIG_SPICE */
+#include "monitor.h"
+
+#define using_spice 0
+static inline int qemu_spice_set_passwd(const char *passwd,
+                                        bool fail_if_connected,
+                                        bool disconnect_if_connected)
+{
+    return -1;
+}
+static inline int qemu_spice_set_pw_expire(time_t expires)
+{
+    return -1;
+}
+static inline int qemu_spice_migrate_info(const char *h, int p, int t,
+                                          const char *s,
+                                          MonitorCompletion cb, void *opaque)
+{
+    cb(opaque, NULL);
+    return -1;
+}
+
+static inline int qemu_spice_display_add_client(int csock, int skipauth,
+                                                int tls)
+{
+    return -1;
+}
+
+#endif /* CONFIG_SPICE */
+
+#endif /* QEMU_SPICE_H */
diff --git a/include/ui/spice-display.h b/include/ui/spice-display.h
new file mode 100644 (file)
index 0000000..928e0a1
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2010 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <spice/ipc_ring.h>
+#include <spice/enums.h>
+#include <spice/qxl_dev.h>
+
+#include "qemu-thread.h"
+#include "ui/qemu-pixman.h"
+#include "sysemu.h"
+
+#define NUM_MEMSLOTS 8
+#define MEMSLOT_GENERATION_BITS 8
+#define MEMSLOT_SLOT_BITS 8
+
+#define MEMSLOT_GROUP_HOST  0
+#define MEMSLOT_GROUP_GUEST 1
+#define NUM_MEMSLOTS_GROUPS 2
+
+/*
+ * Internal enum to differenciate between options for
+ * io calls that have a sync (old) version and an _async (new)
+ * version:
+ *  QXL_SYNC: use the old version
+ *  QXL_ASYNC: use the new version and make sure there are no two
+ *   happening at the same time. This is used for guest initiated
+ *   calls
+ */
+typedef enum qxl_async_io {
+    QXL_SYNC,
+    QXL_ASYNC,
+} qxl_async_io;
+
+enum {
+    QXL_COOKIE_TYPE_IO,
+    QXL_COOKIE_TYPE_RENDER_UPDATE_AREA,
+    QXL_COOKIE_TYPE_POST_LOAD_MONITORS_CONFIG,
+};
+
+typedef struct QXLCookie {
+    int      type;
+    uint64_t io;
+    union {
+        uint32_t surface_id;
+        QXLRect area;
+        struct {
+            QXLRect area;
+            int redraw;
+        } render;
+    } u;
+} QXLCookie;
+
+QXLCookie *qxl_cookie_new(int type, uint64_t io);
+
+typedef struct SimpleSpiceDisplay SimpleSpiceDisplay;
+typedef struct SimpleSpiceUpdate SimpleSpiceUpdate;
+
+struct SimpleSpiceDisplay {
+    DisplayState *ds;
+    void *buf;
+    int bufsize;
+    QXLWorker *worker;
+    QXLInstance qxl;
+    uint32_t unique;
+    pixman_image_t *surface;
+    pixman_image_t *mirror;
+    int32_t num_surfaces;
+
+    QXLRect dirty;
+    int notify;
+
+    /*
+     * All struct members below this comment can be accessed from
+     * both spice server and qemu (iothread) context and any access
+     * to them must be protected by the lock.
+     */
+    QemuMutex lock;
+    QTAILQ_HEAD(, SimpleSpiceUpdate) updates;
+    QEMUCursor *cursor;
+    int mouse_x, mouse_y;
+};
+
+struct SimpleSpiceUpdate {
+    QXLDrawable drawable;
+    QXLImage image;
+    QXLCommandExt ext;
+    uint8_t *bitmap;
+    QTAILQ_ENTRY(SimpleSpiceUpdate) next;
+};
+
+int qemu_spice_rect_is_empty(const QXLRect* r);
+void qemu_spice_rect_union(QXLRect *dest, const QXLRect *r);
+
+void qemu_spice_destroy_update(SimpleSpiceDisplay *sdpy, SimpleSpiceUpdate *update);
+void qemu_spice_create_host_memslot(SimpleSpiceDisplay *ssd);
+void qemu_spice_create_host_primary(SimpleSpiceDisplay *ssd);
+void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd);
+void qemu_spice_vm_change_state_handler(void *opaque, int running,
+                                        RunState state);
+void qemu_spice_display_init_common(SimpleSpiceDisplay *ssd, DisplayState *ds);
+
+void qemu_spice_display_update(SimpleSpiceDisplay *ssd,
+                               int x, int y, int w, int h);
+void qemu_spice_display_resize(SimpleSpiceDisplay *ssd);
+void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd);
+void qemu_spice_cursor_refresh_unlocked(SimpleSpiceDisplay *ssd);
+
+void qemu_spice_add_memslot(SimpleSpiceDisplay *ssd, QXLDevMemSlot *memslot,
+                            qxl_async_io async);
+void qemu_spice_del_memslot(SimpleSpiceDisplay *ssd, uint32_t gid,
+                            uint32_t sid);
+void qemu_spice_create_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id,
+                                       QXLDevSurfaceCreate *surface,
+                                       qxl_async_io async);
+void qemu_spice_destroy_primary_surface(SimpleSpiceDisplay *ssd,
+                                        uint32_t id, qxl_async_io async);
+void qemu_spice_wakeup(SimpleSpiceDisplay *ssd);
+void qemu_spice_display_start(void);
+void qemu_spice_display_stop(void);
+int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd);
diff --git a/input.c b/input.c
deleted file mode 100644 (file)
index 123bb23..0000000
--- a/input.c
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * QEMU System Emulator
- *
- * Copyright (c) 2003-2008 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "sysemu.h"
-#include "monitor.h"
-#include "console.h"
-#include "error.h"
-#include "qmp-commands.h"
-#include "qapi-types.h"
-
-static QEMUPutKBDEvent *qemu_put_kbd_event;
-static void *qemu_put_kbd_event_opaque;
-static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers = QTAILQ_HEAD_INITIALIZER(led_handlers);
-static QTAILQ_HEAD(, QEMUPutMouseEntry) mouse_handlers =
-    QTAILQ_HEAD_INITIALIZER(mouse_handlers);
-static NotifierList mouse_mode_notifiers = 
-    NOTIFIER_LIST_INITIALIZER(mouse_mode_notifiers);
-
-static const int key_defs[] = {
-    [Q_KEY_CODE_SHIFT] = 0x2a,
-    [Q_KEY_CODE_SHIFT_R] = 0x36,
-
-    [Q_KEY_CODE_ALT] = 0x38,
-    [Q_KEY_CODE_ALT_R] = 0xb8,
-    [Q_KEY_CODE_ALTGR] = 0x64,
-    [Q_KEY_CODE_ALTGR_R] = 0xe4,
-    [Q_KEY_CODE_CTRL] = 0x1d,
-    [Q_KEY_CODE_CTRL_R] = 0x9d,
-
-    [Q_KEY_CODE_MENU] = 0xdd,
-
-    [Q_KEY_CODE_ESC] = 0x01,
-
-    [Q_KEY_CODE_1] = 0x02,
-    [Q_KEY_CODE_2] = 0x03,
-    [Q_KEY_CODE_3] = 0x04,
-    [Q_KEY_CODE_4] = 0x05,
-    [Q_KEY_CODE_5] = 0x06,
-    [Q_KEY_CODE_6] = 0x07,
-    [Q_KEY_CODE_7] = 0x08,
-    [Q_KEY_CODE_8] = 0x09,
-    [Q_KEY_CODE_9] = 0x0a,
-    [Q_KEY_CODE_0] = 0x0b,
-    [Q_KEY_CODE_MINUS] = 0x0c,
-    [Q_KEY_CODE_EQUAL] = 0x0d,
-    [Q_KEY_CODE_BACKSPACE] = 0x0e,
-
-    [Q_KEY_CODE_TAB] = 0x0f,
-    [Q_KEY_CODE_Q] = 0x10,
-    [Q_KEY_CODE_W] = 0x11,
-    [Q_KEY_CODE_E] = 0x12,
-    [Q_KEY_CODE_R] = 0x13,
-    [Q_KEY_CODE_T] = 0x14,
-    [Q_KEY_CODE_Y] = 0x15,
-    [Q_KEY_CODE_U] = 0x16,
-    [Q_KEY_CODE_I] = 0x17,
-    [Q_KEY_CODE_O] = 0x18,
-    [Q_KEY_CODE_P] = 0x19,
-    [Q_KEY_CODE_BRACKET_LEFT] = 0x1a,
-    [Q_KEY_CODE_BRACKET_RIGHT] = 0x1b,
-    [Q_KEY_CODE_RET] = 0x1c,
-
-    [Q_KEY_CODE_A] = 0x1e,
-    [Q_KEY_CODE_S] = 0x1f,
-    [Q_KEY_CODE_D] = 0x20,
-    [Q_KEY_CODE_F] = 0x21,
-    [Q_KEY_CODE_G] = 0x22,
-    [Q_KEY_CODE_H] = 0x23,
-    [Q_KEY_CODE_J] = 0x24,
-    [Q_KEY_CODE_K] = 0x25,
-    [Q_KEY_CODE_L] = 0x26,
-    [Q_KEY_CODE_SEMICOLON] = 0x27,
-    [Q_KEY_CODE_APOSTROPHE] = 0x28,
-    [Q_KEY_CODE_GRAVE_ACCENT] = 0x29,
-
-    [Q_KEY_CODE_BACKSLASH] = 0x2b,
-    [Q_KEY_CODE_Z] = 0x2c,
-    [Q_KEY_CODE_X] = 0x2d,
-    [Q_KEY_CODE_C] = 0x2e,
-    [Q_KEY_CODE_V] = 0x2f,
-    [Q_KEY_CODE_B] = 0x30,
-    [Q_KEY_CODE_N] = 0x31,
-    [Q_KEY_CODE_M] = 0x32,
-    [Q_KEY_CODE_COMMA] = 0x33,
-    [Q_KEY_CODE_DOT] = 0x34,
-    [Q_KEY_CODE_SLASH] = 0x35,
-
-    [Q_KEY_CODE_ASTERISK] = 0x37,
-
-    [Q_KEY_CODE_SPC] = 0x39,
-    [Q_KEY_CODE_CAPS_LOCK] = 0x3a,
-    [Q_KEY_CODE_F1] = 0x3b,
-    [Q_KEY_CODE_F2] = 0x3c,
-    [Q_KEY_CODE_F3] = 0x3d,
-    [Q_KEY_CODE_F4] = 0x3e,
-    [Q_KEY_CODE_F5] = 0x3f,
-    [Q_KEY_CODE_F6] = 0x40,
-    [Q_KEY_CODE_F7] = 0x41,
-    [Q_KEY_CODE_F8] = 0x42,
-    [Q_KEY_CODE_F9] = 0x43,
-    [Q_KEY_CODE_F10] = 0x44,
-    [Q_KEY_CODE_NUM_LOCK] = 0x45,
-    [Q_KEY_CODE_SCROLL_LOCK] = 0x46,
-
-    [Q_KEY_CODE_KP_DIVIDE] = 0xb5,
-    [Q_KEY_CODE_KP_MULTIPLY] = 0x37,
-    [Q_KEY_CODE_KP_SUBTRACT] = 0x4a,
-    [Q_KEY_CODE_KP_ADD] = 0x4e,
-    [Q_KEY_CODE_KP_ENTER] = 0x9c,
-    [Q_KEY_CODE_KP_DECIMAL] = 0x53,
-    [Q_KEY_CODE_SYSRQ] = 0x54,
-
-    [Q_KEY_CODE_KP_0] = 0x52,
-    [Q_KEY_CODE_KP_1] = 0x4f,
-    [Q_KEY_CODE_KP_2] = 0x50,
-    [Q_KEY_CODE_KP_3] = 0x51,
-    [Q_KEY_CODE_KP_4] = 0x4b,
-    [Q_KEY_CODE_KP_5] = 0x4c,
-    [Q_KEY_CODE_KP_6] = 0x4d,
-    [Q_KEY_CODE_KP_7] = 0x47,
-    [Q_KEY_CODE_KP_8] = 0x48,
-    [Q_KEY_CODE_KP_9] = 0x49,
-
-    [Q_KEY_CODE_LESS] = 0x56,
-
-    [Q_KEY_CODE_F11] = 0x57,
-    [Q_KEY_CODE_F12] = 0x58,
-
-    [Q_KEY_CODE_PRINT] = 0xb7,
-
-    [Q_KEY_CODE_HOME] = 0xc7,
-    [Q_KEY_CODE_PGUP] = 0xc9,
-    [Q_KEY_CODE_PGDN] = 0xd1,
-    [Q_KEY_CODE_END] = 0xcf,
-
-    [Q_KEY_CODE_LEFT] = 0xcb,
-    [Q_KEY_CODE_UP] = 0xc8,
-    [Q_KEY_CODE_DOWN] = 0xd0,
-    [Q_KEY_CODE_RIGHT] = 0xcd,
-
-    [Q_KEY_CODE_INSERT] = 0xd2,
-    [Q_KEY_CODE_DELETE] = 0xd3,
-#ifdef NEED_CPU_H
-#if defined(TARGET_SPARC) && !defined(TARGET_SPARC64)
-    [Q_KEY_CODE_STOP] = 0xf0,
-    [Q_KEY_CODE_AGAIN] = 0xf1,
-    [Q_KEY_CODE_PROPS] = 0xf2,
-    [Q_KEY_CODE_UNDO] = 0xf3,
-    [Q_KEY_CODE_FRONT] = 0xf4,
-    [Q_KEY_CODE_COPY] = 0xf5,
-    [Q_KEY_CODE_OPEN] = 0xf6,
-    [Q_KEY_CODE_PASTE] = 0xf7,
-    [Q_KEY_CODE_FIND] = 0xf8,
-    [Q_KEY_CODE_CUT] = 0xf9,
-    [Q_KEY_CODE_LF] = 0xfa,
-    [Q_KEY_CODE_HELP] = 0xfb,
-    [Q_KEY_CODE_META_L] = 0xfc,
-    [Q_KEY_CODE_META_R] = 0xfd,
-    [Q_KEY_CODE_COMPOSE] = 0xfe,
-#endif
-#endif
-    [Q_KEY_CODE_MAX] = 0,
-};
-
-int index_from_key(const char *key)
-{
-    int i;
-
-    for (i = 0; QKeyCode_lookup[i] != NULL; i++) {
-        if (!strcmp(key, QKeyCode_lookup[i])) {
-            break;
-        }
-    }
-
-    /* Return Q_KEY_CODE_MAX if the key is invalid */
-    return i;
-}
-
-int index_from_keycode(int code)
-{
-    int i;
-
-    for (i = 0; i < Q_KEY_CODE_MAX; i++) {
-        if (key_defs[i] == code) {
-            break;
-        }
-    }
-
-    /* Return Q_KEY_CODE_MAX if the code is invalid */
-    return i;
-}
-
-static int *keycodes;
-static int keycodes_size;
-static QEMUTimer *key_timer;
-
-static int keycode_from_keyvalue(const KeyValue *value)
-{
-    if (value->kind == KEY_VALUE_KIND_QCODE) {
-        return key_defs[value->qcode];
-    } else {
-        assert(value->kind == KEY_VALUE_KIND_NUMBER);
-        return value->number;
-    }
-}
-
-static void free_keycodes(void)
-{
-    g_free(keycodes);
-    keycodes = NULL;
-    keycodes_size = 0;
-}
-
-static void release_keys(void *opaque)
-{
-    int i;
-
-    for (i = 0; i < keycodes_size; i++) {
-        if (keycodes[i] & 0x80) {
-            kbd_put_keycode(0xe0);
-        }
-        kbd_put_keycode(keycodes[i]| 0x80);
-    }
-
-    free_keycodes();
-}
-
-void qmp_send_key(KeyValueList *keys, bool has_hold_time, int64_t hold_time,
-                  Error **errp)
-{
-    int keycode;
-    KeyValueList *p;
-
-    if (!key_timer) {
-        key_timer = qemu_new_timer_ns(vm_clock, release_keys, NULL);
-    }
-
-    if (keycodes != NULL) {
-        qemu_del_timer(key_timer);
-        release_keys(NULL);
-    }
-
-    if (!has_hold_time) {
-        hold_time = 100;
-    }
-
-    for (p = keys; p != NULL; p = p->next) {
-        /* key down events */
-        keycode = keycode_from_keyvalue(p->value);
-        if (keycode < 0x01 || keycode > 0xff) {
-            error_setg(errp, "invalid hex keycode 0x%x\n", keycode);
-            free_keycodes();
-            return;
-        }
-
-        if (keycode & 0x80) {
-            kbd_put_keycode(0xe0);
-        }
-        kbd_put_keycode(keycode & 0x7f);
-
-        keycodes = g_realloc(keycodes, sizeof(int) * (keycodes_size + 1));
-        keycodes[keycodes_size++] = keycode;
-    }
-
-    /* delayed key up events */
-    qemu_mod_timer(key_timer, qemu_get_clock_ns(vm_clock) +
-                   muldiv64(get_ticks_per_sec(), hold_time, 1000));
-}
-
-void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
-{
-    qemu_put_kbd_event_opaque = opaque;
-    qemu_put_kbd_event = func;
-}
-
-void qemu_remove_kbd_event_handler(void)
-{
-    qemu_put_kbd_event_opaque = NULL;
-    qemu_put_kbd_event = NULL;
-}
-
-static void check_mode_change(void)
-{
-    static int current_is_absolute, current_has_absolute;
-    int is_absolute;
-    int has_absolute;
-
-    is_absolute = kbd_mouse_is_absolute();
-    has_absolute = kbd_mouse_has_absolute();
-
-    if (is_absolute != current_is_absolute ||
-        has_absolute != current_has_absolute) {
-        notifier_list_notify(&mouse_mode_notifiers, NULL);
-    }
-
-    current_is_absolute = is_absolute;
-    current_has_absolute = has_absolute;
-}
-
-QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
-                                                void *opaque, int absolute,
-                                                const char *name)
-{
-    QEMUPutMouseEntry *s;
-    static int mouse_index = 0;
-
-    s = g_malloc0(sizeof(QEMUPutMouseEntry));
-
-    s->qemu_put_mouse_event = func;
-    s->qemu_put_mouse_event_opaque = opaque;
-    s->qemu_put_mouse_event_absolute = absolute;
-    s->qemu_put_mouse_event_name = g_strdup(name);
-    s->index = mouse_index++;
-
-    QTAILQ_INSERT_TAIL(&mouse_handlers, s, node);
-
-    check_mode_change();
-
-    return s;
-}
-
-void qemu_activate_mouse_event_handler(QEMUPutMouseEntry *entry)
-{
-    QTAILQ_REMOVE(&mouse_handlers, entry, node);
-    QTAILQ_INSERT_HEAD(&mouse_handlers, entry, node);
-
-    check_mode_change();
-}
-
-void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
-{
-    QTAILQ_REMOVE(&mouse_handlers, entry, node);
-
-    g_free(entry->qemu_put_mouse_event_name);
-    g_free(entry);
-
-    check_mode_change();
-}
-
-QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func,
-                                            void *opaque)
-{
-    QEMUPutLEDEntry *s;
-
-    s = g_malloc0(sizeof(QEMUPutLEDEntry));
-
-    s->put_led = func;
-    s->opaque = opaque;
-    QTAILQ_INSERT_TAIL(&led_handlers, s, next);
-    return s;
-}
-
-void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry)
-{
-    if (entry == NULL)
-        return;
-    QTAILQ_REMOVE(&led_handlers, entry, next);
-    g_free(entry);
-}
-
-void kbd_put_keycode(int keycode)
-{
-    if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) {
-        return;
-    }
-    if (qemu_put_kbd_event) {
-        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
-    }
-}
-
-void kbd_put_ledstate(int ledstate)
-{
-    QEMUPutLEDEntry *cursor;
-
-    QTAILQ_FOREACH(cursor, &led_handlers, next) {
-        cursor->put_led(cursor->opaque, ledstate);
-    }
-}
-
-void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
-{
-    QEMUPutMouseEntry *entry;
-    QEMUPutMouseEvent *mouse_event;
-    void *mouse_event_opaque;
-    int width, height;
-
-    if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) {
-        return;
-    }
-    if (QTAILQ_EMPTY(&mouse_handlers)) {
-        return;
-    }
-
-    entry = QTAILQ_FIRST(&mouse_handlers);
-
-    mouse_event = entry->qemu_put_mouse_event;
-    mouse_event_opaque = entry->qemu_put_mouse_event_opaque;
-
-    if (mouse_event) {
-        if (entry->qemu_put_mouse_event_absolute) {
-            width = 0x7fff;
-            height = 0x7fff;
-        } else {
-            width = graphic_width - 1;
-            height = graphic_height - 1;
-        }
-
-        switch (graphic_rotate) {
-        case 0:
-            mouse_event(mouse_event_opaque,
-                        dx, dy, dz, buttons_state);
-            break;
-        case 90:
-            mouse_event(mouse_event_opaque,
-                        width - dy, dx, dz, buttons_state);
-            break;
-        case 180:
-            mouse_event(mouse_event_opaque,
-                        width - dx, height - dy, dz, buttons_state);
-            break;
-        case 270:
-            mouse_event(mouse_event_opaque,
-                        dy, height - dx, dz, buttons_state);
-            break;
-        }
-    }
-}
-
-int kbd_mouse_is_absolute(void)
-{
-    if (QTAILQ_EMPTY(&mouse_handlers)) {
-        return 0;
-    }
-
-    return QTAILQ_FIRST(&mouse_handlers)->qemu_put_mouse_event_absolute;
-}
-
-int kbd_mouse_has_absolute(void)
-{
-    QEMUPutMouseEntry *entry;
-
-    QTAILQ_FOREACH(entry, &mouse_handlers, node) {
-        if (entry->qemu_put_mouse_event_absolute) {
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-MouseInfoList *qmp_query_mice(Error **errp)
-{
-    MouseInfoList *mice_list = NULL;
-    QEMUPutMouseEntry *cursor;
-    bool current = true;
-
-    QTAILQ_FOREACH(cursor, &mouse_handlers, node) {
-        MouseInfoList *info = g_malloc0(sizeof(*info));
-        info->value = g_malloc0(sizeof(*info->value));
-        info->value->name = g_strdup(cursor->qemu_put_mouse_event_name);
-        info->value->index = cursor->index;
-        info->value->absolute = !!cursor->qemu_put_mouse_event_absolute;
-        info->value->current = current;
-
-        current = false;
-
-        info->next = mice_list;
-        mice_list = info;
-    }
-
-    return mice_list;
-}
-
-void do_mouse_set(Monitor *mon, const QDict *qdict)
-{
-    QEMUPutMouseEntry *cursor;
-    int index = qdict_get_int(qdict, "index");
-    int found = 0;
-
-    if (QTAILQ_EMPTY(&mouse_handlers)) {
-        monitor_printf(mon, "No mouse devices connected\n");
-        return;
-    }
-
-    QTAILQ_FOREACH(cursor, &mouse_handlers, node) {
-        if (cursor->index == index) {
-            found = 1;
-            qemu_activate_mouse_event_handler(cursor);
-            break;
-        }
-    }
-
-    if (!found) {
-        monitor_printf(mon, "Mouse at given index not found\n");
-    }
-
-    check_mode_change();
-}
-
-void qemu_add_mouse_mode_change_notifier(Notifier *notify)
-{
-    notifier_list_add(&mouse_mode_notifiers, notify);
-}
-
-void qemu_remove_mouse_mode_change_notifier(Notifier *notify)
-{
-    notifier_remove(notify);
-}
index 37b9d20299edc8d4f4552e8b87b489531e8167fb..6546f8c30b92e66d2f287cb5cc03894b18673781 100644 (file)
--- a/monitor.c
+++ b/monitor.c
@@ -38,7 +38,7 @@
 #include "sysemu.h"
 #include "monitor.h"
 #include "readline.h"
-#include "console.h"
+#include "ui/console.h"
 #include "blockdev.h"
 #include "audio/audio.h"
 #include "disas/disas.h"
index f066ad0654df4f22c50da4397f85bdb672d57dc2..bc53d09a9bab90b70588b5299d46c707b5402ad0 100644 (file)
@@ -23,7 +23,7 @@
  */
 #include "qemu-common.h"
 #include "monitor.h"
-#include "console.h"
+#include "ui/console.h"
 #include "sysemu.h"
 #include "qemu-timer.h"
 #include "qemu-char.h"
diff --git a/qemu-pixman.c b/qemu-pixman.c
deleted file mode 100644 (file)
index e7263fb..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- */
-
-#include "qemu-pixman.h"
-
-int qemu_pixman_get_type(int rshift, int gshift, int bshift)
-{
-    int type = PIXMAN_TYPE_OTHER;
-
-    if (rshift > gshift && gshift > bshift) {
-        if (bshift == 0) {
-            type = PIXMAN_TYPE_ARGB;
-        } else {
-#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0, 21, 8)
-            type = PIXMAN_TYPE_RGBA;
-#endif
-        }
-    } else if (rshift < gshift && gshift < bshift) {
-        if (rshift == 0) {
-            type = PIXMAN_TYPE_ABGR;
-        } else {
-#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0, 16, 0)
-            type = PIXMAN_TYPE_BGRA;
-#endif
-        }
-    }
-    return type;
-}
-
-pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf)
-{
-    pixman_format_code_t format;
-    int type;
-
-    type = qemu_pixman_get_type(pf->rshift, pf->gshift, pf->bshift);
-    format = PIXMAN_FORMAT(pf->bits_per_pixel, type,
-                           pf->abits, pf->rbits, pf->gbits, pf->bbits);
-    if (!pixman_format_supported_source(format)) {
-        return 0;
-    }
-    return format;
-}
-
-pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
-                                           int width)
-{
-    pixman_image_t *image = pixman_image_create_bits(format, width, 1, NULL, 0);
-    assert(image != NULL);
-    return image;
-}
-
-void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
-                              int width, int x, int y)
-{
-    pixman_image_composite(PIXMAN_OP_SRC, fb, NULL, linebuf,
-                           x, y, 0, 0, 0, 0, width, 1);
-}
-
-pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format,
-                                          pixman_image_t *image)
-{
-    pixman_image_t *mirror;
-
-    mirror = pixman_image_create_bits(format,
-                                      pixman_image_get_width(image),
-                                      pixman_image_get_height(image),
-                                      NULL,
-                                      pixman_image_get_stride(image));
-    return mirror;
-}
-
-void qemu_pixman_image_unref(pixman_image_t *image)
-{
-    if (image == NULL) {
-        return;
-    }
-    pixman_image_unref(image);
-}
diff --git a/qemu-pixman.h b/qemu-pixman.h
deleted file mode 100644 (file)
index 3c05c83..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- */
-
-#ifndef QEMU_PIXMAN_H
-#define QEMU_PIXMAN_H
-
-#include <pixman.h>
-
-#include "console.h"
-
-/*
- * pixman image formats are defined to be native endian,
- * that means host byte order on qemu.  So we go define
- * fixed formats here for cases where it is needed, like
- * feeding libjpeg / libpng and writing screenshots.
- */
-
-#ifdef HOST_WORDS_BIGENDIAN
-# define PIXMAN_BE_r8g8b8     PIXMAN_r8g8b8
-#else
-# define PIXMAN_BE_r8g8b8     PIXMAN_b8g8r8
-#endif
-
-/* -------------------------------------------------------------------- */
-
-int qemu_pixman_get_type(int rshift, int gshift, int bshift);
-pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf);
-
-pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
-                                           int width);
-void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
-                              int width, int x, int y);
-pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format,
-                                          pixman_image_t *image);
-void qemu_pixman_image_unref(pixman_image_t *image);
-
-#endif /* QEMU_PIXMAN_H */
index 9b9585b259681a8e5ea1b406e7947e7f38b6a041..5a99403fda906f01f4f9dbaafa9a34fb2862cc48 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "sysemu.h"
 #include "monitor.h"
-#include "console.h"
+#include "ui/console.h"
 
 #include "hw/hw.h"
 
diff --git a/qemu-x509.h b/qemu-x509.h
deleted file mode 100644 (file)
index 095aec1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef QEMU_X509_H
-#define QEMU_X509_H
-
-#define X509_CA_CERT_FILE "ca-cert.pem"
-#define X509_CA_CRL_FILE "ca-crl.pem"
-#define X509_SERVER_KEY_FILE "server-key.pem"
-#define X509_SERVER_CERT_FILE "server-cert.pem"
-
-#endif /* QEMU_X509_H */
index a9e226bde4fd50e0331756de602bad542a07bea6..4b6856137d5136bea51f03470fca6c0208b3298d 100644 (file)
@@ -13,7 +13,7 @@
 #include "gdbstub.h"
 #include "helper.h"
 #include "host-utils.h"
-#include "console.h"
+#include "ui/console.h"
 
 #undef DEBUG_UC32
 
index fd339d247be98fbe73e192ef0bafd1271a1e3be2..dc8f0e46ad09fa1c74998dcdbb922544e6c3701c 100644 (file)
@@ -6,7 +6,7 @@ vnc-obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o
 vnc-obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o
 vnc-obj-y += vnc-jobs.o
 
-common-obj-y += keymaps.o
+common-obj-y += keymaps.o console.o cursor.o input.o qemu-pixman.o
 common-obj-$(CONFIG_SPICE) += spice-core.o spice-input.o spice-display.o
 common-obj-$(CONFIG_SDL) += sdl.o sdl_zoom.o x_keymap.o
 common-obj-$(CONFIG_COCOA) += cocoa.o
index 87d2e44c6901098b076d62af805ec3bd55915123..0afa6f86dd685026bc2346b779e3f09eacda1a26 100644 (file)
@@ -26,7 +26,7 @@
 #include <crt_externs.h>
 
 #include "qemu-common.h"
-#include "console.h"
+#include "ui/console.h"
 #include "sysemu.h"
 
 #ifndef MAC_OS_X_VERSION_10_4
diff --git a/ui/console.c b/ui/console.c
new file mode 100644 (file)
index 0000000..60bfb72
--- /dev/null
@@ -0,0 +1,1724 @@
+/*
+ * QEMU graphical console
+ *
+ * Copyright (c) 2004 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include "qemu-common.h"
+#include "ui/console.h"
+#include "qemu-timer.h"
+#include "qmp-commands.h"
+#include "qemu-char.h"
+
+//#define DEBUG_CONSOLE
+#define DEFAULT_BACKSCROLL 512
+#define MAX_CONSOLES 12
+#define CONSOLE_CURSOR_PERIOD 500
+
+#define QEMU_RGBA(r, g, b, a) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
+#define QEMU_RGB(r, g, b) QEMU_RGBA(r, g, b, 0xff)
+
+typedef struct TextAttributes {
+    uint8_t fgcol:4;
+    uint8_t bgcol:4;
+    uint8_t bold:1;
+    uint8_t uline:1;
+    uint8_t blink:1;
+    uint8_t invers:1;
+    uint8_t unvisible:1;
+} TextAttributes;
+
+typedef struct TextCell {
+    uint8_t ch;
+    TextAttributes t_attrib;
+} TextCell;
+
+#define MAX_ESC_PARAMS 3
+
+enum TTYState {
+    TTY_STATE_NORM,
+    TTY_STATE_ESC,
+    TTY_STATE_CSI,
+};
+
+typedef struct QEMUFIFO {
+    uint8_t *buf;
+    int buf_size;
+    int count, wptr, rptr;
+} QEMUFIFO;
+
+static int qemu_fifo_write(QEMUFIFO *f, const uint8_t *buf, int len1)
+{
+    int l, len;
+
+    l = f->buf_size - f->count;
+    if (len1 > l)
+        len1 = l;
+    len = len1;
+    while (len > 0) {
+        l = f->buf_size - f->wptr;
+        if (l > len)
+            l = len;
+        memcpy(f->buf + f->wptr, buf, l);
+        f->wptr += l;
+        if (f->wptr >= f->buf_size)
+            f->wptr = 0;
+        buf += l;
+        len -= l;
+    }
+    f->count += len1;
+    return len1;
+}
+
+static int qemu_fifo_read(QEMUFIFO *f, uint8_t *buf, int len1)
+{
+    int l, len;
+
+    if (len1 > f->count)
+        len1 = f->count;
+    len = len1;
+    while (len > 0) {
+        l = f->buf_size - f->rptr;
+        if (l > len)
+            l = len;
+        memcpy(buf, f->buf + f->rptr, l);
+        f->rptr += l;
+        if (f->rptr >= f->buf_size)
+            f->rptr = 0;
+        buf += l;
+        len -= l;
+    }
+    f->count -= len1;
+    return len1;
+}
+
+typedef enum {
+    GRAPHIC_CONSOLE,
+    TEXT_CONSOLE,
+    TEXT_CONSOLE_FIXED_SIZE
+} console_type_t;
+
+struct QemuConsole {
+    int index;
+    console_type_t console_type;
+    DisplayState *ds;
+
+    /* Graphic console state.  */
+    vga_hw_update_ptr hw_update;
+    vga_hw_invalidate_ptr hw_invalidate;
+    vga_hw_screen_dump_ptr hw_screen_dump;
+    vga_hw_text_update_ptr hw_text_update;
+    void *hw;
+    int g_width, g_height;
+
+    /* Text console state */
+    int width;
+    int height;
+    int total_height;
+    int backscroll_height;
+    int x, y;
+    int x_saved, y_saved;
+    int y_displayed;
+    int y_base;
+    TextAttributes t_attrib_default; /* default text attributes */
+    TextAttributes t_attrib; /* currently active text attributes */
+    TextCell *cells;
+    int text_x[2], text_y[2], cursor_invalidate;
+    int echo;
+    bool cursor_visible_phase;
+    QEMUTimer *cursor_timer;
+
+    int update_x0;
+    int update_y0;
+    int update_x1;
+    int update_y1;
+
+    enum TTYState state;
+    int esc_params[MAX_ESC_PARAMS];
+    int nb_esc_params;
+
+    CharDriverState *chr;
+    /* fifo for key pressed */
+    QEMUFIFO out_fifo;
+    uint8_t out_fifo_buf[16];
+    QEMUTimer *kbd_timer;
+};
+
+static DisplayState *display_state;
+static QemuConsole *active_console;
+static QemuConsole *consoles[MAX_CONSOLES];
+static int nb_consoles = 0;
+
+void vga_hw_update(void)
+{
+    if (active_console && active_console->hw_update)
+        active_console->hw_update(active_console->hw);
+}
+
+void vga_hw_invalidate(void)
+{
+    if (active_console && active_console->hw_invalidate)
+        active_console->hw_invalidate(active_console->hw);
+}
+
+void qmp_screendump(const char *filename, Error **errp)
+{
+    QemuConsole *previous_active_console;
+    bool cswitch;
+
+    previous_active_console = active_console;
+    cswitch = previous_active_console && previous_active_console->index != 0;
+
+    /* There is currently no way of specifying which screen we want to dump,
+       so always dump the first one.  */
+    if (cswitch) {
+        console_select(0);
+    }
+    if (consoles[0] && consoles[0]->hw_screen_dump) {
+        consoles[0]->hw_screen_dump(consoles[0]->hw, filename, cswitch, errp);
+    } else {
+        error_setg(errp, "device doesn't support screendump\n");
+    }
+
+    if (cswitch) {
+        console_select(previous_active_console->index);
+    }
+}
+
+void vga_hw_text_update(console_ch_t *chardata)
+{
+    if (active_console && active_console->hw_text_update)
+        active_console->hw_text_update(active_console->hw, chardata);
+}
+
+/* convert a RGBA color to a color index usable in graphic primitives */
+static unsigned int vga_get_color(DisplayState *ds, unsigned int rgba)
+{
+    unsigned int r, g, b, color;
+
+    switch(ds_get_bits_per_pixel(ds)) {
+#if 0
+    case 8:
+        r = (rgba >> 16) & 0xff;
+        g = (rgba >> 8) & 0xff;
+        b = (rgba) & 0xff;
+        color = (rgb_to_index[r] * 6 * 6) +
+            (rgb_to_index[g] * 6) +
+            (rgb_to_index[b]);
+        break;
+#endif
+    case 15:
+        r = (rgba >> 16) & 0xff;
+        g = (rgba >> 8) & 0xff;
+        b = (rgba) & 0xff;
+        color = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
+        break;
+    case 16:
+        r = (rgba >> 16) & 0xff;
+        g = (rgba >> 8) & 0xff;
+        b = (rgba) & 0xff;
+        color = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
+        break;
+    case 32:
+    default:
+        color = rgba;
+        break;
+    }
+    return color;
+}
+
+static void vga_fill_rect (DisplayState *ds,
+                           int posx, int posy, int width, int height, uint32_t color)
+{
+    uint8_t *d, *d1;
+    int x, y, bpp;
+
+    bpp = (ds_get_bits_per_pixel(ds) + 7) >> 3;
+    d1 = ds_get_data(ds) +
+        ds_get_linesize(ds) * posy + bpp * posx;
+    for (y = 0; y < height; y++) {
+        d = d1;
+        switch(bpp) {
+        case 1:
+            for (x = 0; x < width; x++) {
+                *((uint8_t *)d) = color;
+                d++;
+            }
+            break;
+        case 2:
+            for (x = 0; x < width; x++) {
+                *((uint16_t *)d) = color;
+                d += 2;
+            }
+            break;
+        case 4:
+            for (x = 0; x < width; x++) {
+                *((uint32_t *)d) = color;
+                d += 4;
+            }
+            break;
+        }
+        d1 += ds_get_linesize(ds);
+    }
+}
+
+/* copy from (xs, ys) to (xd, yd) a rectangle of size (w, h) */
+static void vga_bitblt(DisplayState *ds, int xs, int ys, int xd, int yd, int w, int h)
+{
+    const uint8_t *s;
+    uint8_t *d;
+    int wb, y, bpp;
+
+    bpp = (ds_get_bits_per_pixel(ds) + 7) >> 3;
+    wb = w * bpp;
+    if (yd <= ys) {
+        s = ds_get_data(ds) +
+            ds_get_linesize(ds) * ys + bpp * xs;
+        d = ds_get_data(ds) +
+            ds_get_linesize(ds) * yd + bpp * xd;
+        for (y = 0; y < h; y++) {
+            memmove(d, s, wb);
+            d += ds_get_linesize(ds);
+            s += ds_get_linesize(ds);
+        }
+    } else {
+        s = ds_get_data(ds) +
+            ds_get_linesize(ds) * (ys + h - 1) + bpp * xs;
+        d = ds_get_data(ds) +
+            ds_get_linesize(ds) * (yd + h - 1) + bpp * xd;
+       for (y = 0; y < h; y++) {
+            memmove(d, s, wb);
+            d -= ds_get_linesize(ds);
+            s -= ds_get_linesize(ds);
+        }
+    }
+}
+
+/***********************************************************/
+/* basic char display */
+
+#define FONT_HEIGHT 16
+#define FONT_WIDTH 8
+
+#include "vgafont.h"
+
+#define cbswap_32(__x) \
+((uint32_t)( \
+               (((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \
+               (((uint32_t)(__x) & (uint32_t)0x0000ff00UL) <<  8) | \
+               (((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >>  8) | \
+               (((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) ))
+
+#ifdef HOST_WORDS_BIGENDIAN
+#define PAT(x) x
+#else
+#define PAT(x) cbswap_32(x)
+#endif
+
+static const uint32_t dmask16[16] = {
+    PAT(0x00000000),
+    PAT(0x000000ff),
+    PAT(0x0000ff00),
+    PAT(0x0000ffff),
+    PAT(0x00ff0000),
+    PAT(0x00ff00ff),
+    PAT(0x00ffff00),
+    PAT(0x00ffffff),
+    PAT(0xff000000),
+    PAT(0xff0000ff),
+    PAT(0xff00ff00),
+    PAT(0xff00ffff),
+    PAT(0xffff0000),
+    PAT(0xffff00ff),
+    PAT(0xffffff00),
+    PAT(0xffffffff),
+};
+
+static const uint32_t dmask4[4] = {
+    PAT(0x00000000),
+    PAT(0x0000ffff),
+    PAT(0xffff0000),
+    PAT(0xffffffff),
+};
+
+static uint32_t color_table[2][8];
+
+#ifndef CONFIG_CURSES
+enum color_names {
+    COLOR_BLACK   = 0,
+    COLOR_RED     = 1,
+    COLOR_GREEN   = 2,
+    COLOR_YELLOW  = 3,
+    COLOR_BLUE    = 4,
+    COLOR_MAGENTA = 5,
+    COLOR_CYAN    = 6,
+    COLOR_WHITE   = 7
+};
+#endif
+
+static const uint32_t color_table_rgb[2][8] = {
+    {   /* dark */
+        QEMU_RGB(0x00, 0x00, 0x00),  /* black */
+        QEMU_RGB(0xaa, 0x00, 0x00),  /* red */
+        QEMU_RGB(0x00, 0xaa, 0x00),  /* green */
+        QEMU_RGB(0xaa, 0xaa, 0x00),  /* yellow */
+        QEMU_RGB(0x00, 0x00, 0xaa),  /* blue */
+        QEMU_RGB(0xaa, 0x00, 0xaa),  /* magenta */
+        QEMU_RGB(0x00, 0xaa, 0xaa),  /* cyan */
+        QEMU_RGB(0xaa, 0xaa, 0xaa),  /* white */
+    },
+    {   /* bright */
+        QEMU_RGB(0x00, 0x00, 0x00),  /* black */
+        QEMU_RGB(0xff, 0x00, 0x00),  /* red */
+        QEMU_RGB(0x00, 0xff, 0x00),  /* green */
+        QEMU_RGB(0xff, 0xff, 0x00),  /* yellow */
+        QEMU_RGB(0x00, 0x00, 0xff),  /* blue */
+        QEMU_RGB(0xff, 0x00, 0xff),  /* magenta */
+        QEMU_RGB(0x00, 0xff, 0xff),  /* cyan */
+        QEMU_RGB(0xff, 0xff, 0xff),  /* white */
+    }
+};
+
+static inline unsigned int col_expand(DisplayState *ds, unsigned int col)
+{
+    switch(ds_get_bits_per_pixel(ds)) {
+    case 8:
+        col |= col << 8;
+        col |= col << 16;
+        break;
+    case 15:
+    case 16:
+        col |= col << 16;
+        break;
+    default:
+        break;
+    }
+
+    return col;
+}
+#ifdef DEBUG_CONSOLE
+static void console_print_text_attributes(TextAttributes *t_attrib, char ch)
+{
+    if (t_attrib->bold) {
+        printf("b");
+    } else {
+        printf(" ");
+    }
+    if (t_attrib->uline) {
+        printf("u");
+    } else {
+        printf(" ");
+    }
+    if (t_attrib->blink) {
+        printf("l");
+    } else {
+        printf(" ");
+    }
+    if (t_attrib->invers) {
+        printf("i");
+    } else {
+        printf(" ");
+    }
+    if (t_attrib->unvisible) {
+        printf("n");
+    } else {
+        printf(" ");
+    }
+
+    printf(" fg: %d bg: %d ch:'%2X' '%c'\n", t_attrib->fgcol, t_attrib->bgcol, ch, ch);
+}
+#endif
+
+static void vga_putcharxy(DisplayState *ds, int x, int y, int ch,
+                          TextAttributes *t_attrib)
+{
+    uint8_t *d;
+    const uint8_t *font_ptr;
+    unsigned int font_data, linesize, xorcol, bpp;
+    int i;
+    unsigned int fgcol, bgcol;
+
+#ifdef DEBUG_CONSOLE
+    printf("x: %2i y: %2i", x, y);
+    console_print_text_attributes(t_attrib, ch);
+#endif
+
+    if (t_attrib->invers) {
+        bgcol = color_table[t_attrib->bold][t_attrib->fgcol];
+        fgcol = color_table[t_attrib->bold][t_attrib->bgcol];
+    } else {
+        fgcol = color_table[t_attrib->bold][t_attrib->fgcol];
+        bgcol = color_table[t_attrib->bold][t_attrib->bgcol];
+    }
+
+    bpp = (ds_get_bits_per_pixel(ds) + 7) >> 3;
+    d = ds_get_data(ds) +
+        ds_get_linesize(ds) * y * FONT_HEIGHT + bpp * x * FONT_WIDTH;
+    linesize = ds_get_linesize(ds);
+    font_ptr = vgafont16 + FONT_HEIGHT * ch;
+    xorcol = bgcol ^ fgcol;
+    switch(ds_get_bits_per_pixel(ds)) {
+    case 8:
+        for(i = 0; i < FONT_HEIGHT; i++) {
+            font_data = *font_ptr++;
+            if (t_attrib->uline
+                && ((i == FONT_HEIGHT - 2) || (i == FONT_HEIGHT - 3))) {
+                font_data = 0xFF;
+            }
+            ((uint32_t *)d)[0] = (dmask16[(font_data >> 4)] & xorcol) ^ bgcol;
+            ((uint32_t *)d)[1] = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol;
+            d += linesize;
+        }
+        break;
+    case 16:
+    case 15:
+        for(i = 0; i < FONT_HEIGHT; i++) {
+            font_data = *font_ptr++;
+            if (t_attrib->uline
+                && ((i == FONT_HEIGHT - 2) || (i == FONT_HEIGHT - 3))) {
+                font_data = 0xFF;
+            }
+            ((uint32_t *)d)[0] = (dmask4[(font_data >> 6)] & xorcol) ^ bgcol;
+            ((uint32_t *)d)[1] = (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol;
+            ((uint32_t *)d)[2] = (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol;
+            ((uint32_t *)d)[3] = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol;
+            d += linesize;
+        }
+        break;
+    case 32:
+        for(i = 0; i < FONT_HEIGHT; i++) {
+            font_data = *font_ptr++;
+            if (t_attrib->uline && ((i == FONT_HEIGHT - 2) || (i == FONT_HEIGHT - 3))) {
+                font_data = 0xFF;
+            }
+            ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol;
+            ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol;
+            ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol;
+            ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol;
+            ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol;
+            ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol;
+            ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol;
+            ((uint32_t *)d)[7] = (-((font_data >> 0) & 1) & xorcol) ^ bgcol;
+            d += linesize;
+        }
+        break;
+    }
+}
+
+static void text_console_resize(QemuConsole *s)
+{
+    TextCell *cells, *c, *c1;
+    int w1, x, y, last_width;
+
+    last_width = s->width;
+    s->width = s->g_width / FONT_WIDTH;
+    s->height = s->g_height / FONT_HEIGHT;
+
+    w1 = last_width;
+    if (s->width < w1)
+        w1 = s->width;
+
+    cells = g_malloc(s->width * s->total_height * sizeof(TextCell));
+    for(y = 0; y < s->total_height; y++) {
+        c = &cells[y * s->width];
+        if (w1 > 0) {
+            c1 = &s->cells[y * last_width];
+            for(x = 0; x < w1; x++) {
+                *c++ = *c1++;
+            }
+        }
+        for(x = w1; x < s->width; x++) {
+            c->ch = ' ';
+            c->t_attrib = s->t_attrib_default;
+            c++;
+        }
+    }
+    g_free(s->cells);
+    s->cells = cells;
+}
+
+static inline void text_update_xy(QemuConsole *s, int x, int y)
+{
+    s->text_x[0] = MIN(s->text_x[0], x);
+    s->text_x[1] = MAX(s->text_x[1], x);
+    s->text_y[0] = MIN(s->text_y[0], y);
+    s->text_y[1] = MAX(s->text_y[1], y);
+}
+
+static void invalidate_xy(QemuConsole *s, int x, int y)
+{
+    if (s->update_x0 > x * FONT_WIDTH)
+        s->update_x0 = x * FONT_WIDTH;
+    if (s->update_y0 > y * FONT_HEIGHT)
+        s->update_y0 = y * FONT_HEIGHT;
+    if (s->update_x1 < (x + 1) * FONT_WIDTH)
+        s->update_x1 = (x + 1) * FONT_WIDTH;
+    if (s->update_y1 < (y + 1) * FONT_HEIGHT)
+        s->update_y1 = (y + 1) * FONT_HEIGHT;
+}
+
+static void update_xy(QemuConsole *s, int x, int y)
+{
+    TextCell *c;
+    int y1, y2;
+
+    if (s == active_console) {
+        if (!ds_get_bits_per_pixel(s->ds)) {
+            text_update_xy(s, x, y);
+            return;
+        }
+
+        y1 = (s->y_base + y) % s->total_height;
+        y2 = y1 - s->y_displayed;
+        if (y2 < 0)
+            y2 += s->total_height;
+        if (y2 < s->height) {
+            c = &s->cells[y1 * s->width + x];
+            vga_putcharxy(s->ds, x, y2, c->ch,
+                          &(c->t_attrib));
+            invalidate_xy(s, x, y2);
+        }
+    }
+}
+
+static void console_show_cursor(QemuConsole *s, int show)
+{
+    TextCell *c;
+    int y, y1;
+
+    if (s == active_console) {
+        int x = s->x;
+
+        if (!ds_get_bits_per_pixel(s->ds)) {
+            s->cursor_invalidate = 1;
+            return;
+        }
+
+        if (x >= s->width) {
+            x = s->width - 1;
+        }
+        y1 = (s->y_base + s->y) % s->total_height;
+        y = y1 - s->y_displayed;
+        if (y < 0)
+            y += s->total_height;
+        if (y < s->height) {
+            c = &s->cells[y1 * s->width + x];
+            if (show && s->cursor_visible_phase) {
+                TextAttributes t_attrib = s->t_attrib_default;
+                t_attrib.invers = !(t_attrib.invers); /* invert fg and bg */
+                vga_putcharxy(s->ds, x, y, c->ch, &t_attrib);
+            } else {
+                vga_putcharxy(s->ds, x, y, c->ch, &(c->t_attrib));
+            }
+            invalidate_xy(s, x, y);
+        }
+    }
+}
+
+static void console_refresh(QemuConsole *s)
+{
+    TextCell *c;
+    int x, y, y1;
+
+    if (s != active_console)
+        return;
+
+    if (s->ds->have_text) {
+        s->text_x[0] = 0;
+        s->text_y[0] = 0;
+        s->text_x[1] = s->width - 1;
+        s->text_y[1] = s->height - 1;
+        s->cursor_invalidate = 1;
+    }
+
+    if (s->ds->have_gfx) {
+        vga_fill_rect(s->ds, 0, 0, ds_get_width(s->ds), ds_get_height(s->ds),
+                      color_table[0][COLOR_BLACK]);
+        y1 = s->y_displayed;
+        for (y = 0; y < s->height; y++) {
+            c = s->cells + y1 * s->width;
+            for (x = 0; x < s->width; x++) {
+                vga_putcharxy(s->ds, x, y, c->ch,
+                              &(c->t_attrib));
+                c++;
+            }
+            if (++y1 == s->total_height) {
+                y1 = 0;
+            }
+        }
+        console_show_cursor(s, 1);
+        dpy_gfx_update(s->ds, 0, 0, ds_get_width(s->ds), ds_get_height(s->ds));
+    }
+}
+
+static void console_scroll(int ydelta)
+{
+    QemuConsole *s;
+    int i, y1;
+
+    s = active_console;
+    if (!s || (s->console_type == GRAPHIC_CONSOLE))
+        return;
+
+    if (ydelta > 0) {
+        for(i = 0; i < ydelta; i++) {
+            if (s->y_displayed == s->y_base)
+                break;
+            if (++s->y_displayed == s->total_height)
+                s->y_displayed = 0;
+        }
+    } else {
+        ydelta = -ydelta;
+        i = s->backscroll_height;
+        if (i > s->total_height - s->height)
+            i = s->total_height - s->height;
+        y1 = s->y_base - i;
+        if (y1 < 0)
+            y1 += s->total_height;
+        for(i = 0; i < ydelta; i++) {
+            if (s->y_displayed == y1)
+                break;
+            if (--s->y_displayed < 0)
+                s->y_displayed = s->total_height - 1;
+        }
+    }
+    console_refresh(s);
+}
+
+static void console_put_lf(QemuConsole *s)
+{
+    TextCell *c;
+    int x, y1;
+
+    s->y++;
+    if (s->y >= s->height) {
+        s->y = s->height - 1;
+
+        if (s->y_displayed == s->y_base) {
+            if (++s->y_displayed == s->total_height)
+                s->y_displayed = 0;
+        }
+        if (++s->y_base == s->total_height)
+            s->y_base = 0;
+        if (s->backscroll_height < s->total_height)
+            s->backscroll_height++;
+        y1 = (s->y_base + s->height - 1) % s->total_height;
+        c = &s->cells[y1 * s->width];
+        for(x = 0; x < s->width; x++) {
+            c->ch = ' ';
+            c->t_attrib = s->t_attrib_default;
+            c++;
+        }
+        if (s == active_console && s->y_displayed == s->y_base) {
+            if (!ds_get_bits_per_pixel(s->ds)) {
+                s->text_x[0] = 0;
+                s->text_y[0] = 0;
+                s->text_x[1] = s->width - 1;
+                s->text_y[1] = s->height - 1;
+                return;
+            }
+
+            vga_bitblt(s->ds, 0, FONT_HEIGHT, 0, 0,
+                       s->width * FONT_WIDTH,
+                       (s->height - 1) * FONT_HEIGHT);
+            vga_fill_rect(s->ds, 0, (s->height - 1) * FONT_HEIGHT,
+                          s->width * FONT_WIDTH, FONT_HEIGHT,
+                          color_table[0][s->t_attrib_default.bgcol]);
+            s->update_x0 = 0;
+            s->update_y0 = 0;
+            s->update_x1 = s->width * FONT_WIDTH;
+            s->update_y1 = s->height * FONT_HEIGHT;
+        }
+    }
+}
+
+/* Set console attributes depending on the current escape codes.
+ * NOTE: I know this code is not very efficient (checking every color for it
+ * self) but it is more readable and better maintainable.
+ */
+static void console_handle_escape(QemuConsole *s)
+{
+    int i;
+
+    for (i=0; i<s->nb_esc_params; i++) {
+        switch (s->esc_params[i]) {
+            case 0: /* reset all console attributes to default */
+                s->t_attrib = s->t_attrib_default;
+                break;
+            case 1:
+                s->t_attrib.bold = 1;
+                break;
+            case 4:
+                s->t_attrib.uline = 1;
+                break;
+            case 5:
+                s->t_attrib.blink = 1;
+                break;
+            case 7:
+                s->t_attrib.invers = 1;
+                break;
+            case 8:
+                s->t_attrib.unvisible = 1;
+                break;
+            case 22:
+                s->t_attrib.bold = 0;
+                break;
+            case 24:
+                s->t_attrib.uline = 0;
+                break;
+            case 25:
+                s->t_attrib.blink = 0;
+                break;
+            case 27:
+                s->t_attrib.invers = 0;
+                break;
+            case 28:
+                s->t_attrib.unvisible = 0;
+                break;
+            /* set foreground color */
+            case 30:
+                s->t_attrib.fgcol=COLOR_BLACK;
+                break;
+            case 31:
+                s->t_attrib.fgcol=COLOR_RED;
+                break;
+            case 32:
+                s->t_attrib.fgcol=COLOR_GREEN;
+                break;
+            case 33:
+                s->t_attrib.fgcol=COLOR_YELLOW;
+                break;
+            case 34:
+                s->t_attrib.fgcol=COLOR_BLUE;
+                break;
+            case 35:
+                s->t_attrib.fgcol=COLOR_MAGENTA;
+                break;
+            case 36:
+                s->t_attrib.fgcol=COLOR_CYAN;
+                break;
+            case 37:
+                s->t_attrib.fgcol=COLOR_WHITE;
+                break;
+            /* set background color */
+            case 40:
+                s->t_attrib.bgcol=COLOR_BLACK;
+                break;
+            case 41:
+                s->t_attrib.bgcol=COLOR_RED;
+                break;
+            case 42:
+                s->t_attrib.bgcol=COLOR_GREEN;
+                break;
+            case 43:
+                s->t_attrib.bgcol=COLOR_YELLOW;
+                break;
+            case 44:
+                s->t_attrib.bgcol=COLOR_BLUE;
+                break;
+            case 45:
+                s->t_attrib.bgcol=COLOR_MAGENTA;
+                break;
+            case 46:
+                s->t_attrib.bgcol=COLOR_CYAN;
+                break;
+            case 47:
+                s->t_attrib.bgcol=COLOR_WHITE;
+                break;
+        }
+    }
+}
+
+static void console_clear_xy(QemuConsole *s, int x, int y)
+{
+    int y1 = (s->y_base + y) % s->total_height;
+    TextCell *c = &s->cells[y1 * s->width + x];
+    c->ch = ' ';
+    c->t_attrib = s->t_attrib_default;
+    update_xy(s, x, y);
+}
+
+/* set cursor, checking bounds */
+static void set_cursor(QemuConsole *s, int x, int y)
+{
+    if (x < 0) {
+        x = 0;
+    }
+    if (y < 0) {
+        y = 0;
+    }
+    if (y >= s->height) {
+        y = s->height - 1;
+    }
+    if (x >= s->width) {
+        x = s->width - 1;
+    }
+
+    s->x = x;
+    s->y = y;
+}
+
+static void console_putchar(QemuConsole *s, int ch)
+{
+    TextCell *c;
+    int y1, i;
+    int x, y;
+
+    switch(s->state) {
+    case TTY_STATE_NORM:
+        switch(ch) {
+        case '\r':  /* carriage return */
+            s->x = 0;
+            break;
+        case '\n':  /* newline */
+            console_put_lf(s);
+            break;
+        case '\b':  /* backspace */
+            if (s->x > 0)
+                s->x--;
+            break;
+        case '\t':  /* tabspace */
+            if (s->x + (8 - (s->x % 8)) > s->width) {
+                s->x = 0;
+                console_put_lf(s);
+            } else {
+                s->x = s->x + (8 - (s->x % 8));
+            }
+            break;
+        case '\a':  /* alert aka. bell */
+            /* TODO: has to be implemented */
+            break;
+        case 14:
+            /* SI (shift in), character set 0 (ignored) */
+            break;
+        case 15:
+            /* SO (shift out), character set 1 (ignored) */
+            break;
+        case 27:    /* esc (introducing an escape sequence) */
+            s->state = TTY_STATE_ESC;
+            break;
+        default:
+            if (s->x >= s->width) {
+                /* line wrap */
+                s->x = 0;
+                console_put_lf(s);
+            }
+            y1 = (s->y_base + s->y) % s->total_height;
+            c = &s->cells[y1 * s->width + s->x];
+            c->ch = ch;
+            c->t_attrib = s->t_attrib;
+            update_xy(s, s->x, s->y);
+            s->x++;
+            break;
+        }
+        break;
+    case TTY_STATE_ESC: /* check if it is a terminal escape sequence */
+        if (ch == '[') {
+            for(i=0;i<MAX_ESC_PARAMS;i++)
+                s->esc_params[i] = 0;
+            s->nb_esc_params = 0;
+            s->state = TTY_STATE_CSI;
+        } else {
+            s->state = TTY_STATE_NORM;
+        }
+        break;
+    case TTY_STATE_CSI: /* handle escape sequence parameters */
+        if (ch >= '0' && ch <= '9') {
+            if (s->nb_esc_params < MAX_ESC_PARAMS) {
+                int *param = &s->esc_params[s->nb_esc_params];
+                int digit = (ch - '0');
+
+                *param = (*param <= (INT_MAX - digit) / 10) ?
+                         *param * 10 + digit : INT_MAX;
+            }
+        } else {
+            if (s->nb_esc_params < MAX_ESC_PARAMS)
+                s->nb_esc_params++;
+            if (ch == ';')
+                break;
+#ifdef DEBUG_CONSOLE
+            fprintf(stderr, "escape sequence CSI%d;%d%c, %d parameters\n",
+                    s->esc_params[0], s->esc_params[1], ch, s->nb_esc_params);
+#endif
+            s->state = TTY_STATE_NORM;
+            switch(ch) {
+            case 'A':
+                /* move cursor up */
+                if (s->esc_params[0] == 0) {
+                    s->esc_params[0] = 1;
+                }
+                set_cursor(s, s->x, s->y - s->esc_params[0]);
+                break;
+            case 'B':
+                /* move cursor down */
+                if (s->esc_params[0] == 0) {
+                    s->esc_params[0] = 1;
+                }
+                set_cursor(s, s->x, s->y + s->esc_params[0]);
+                break;
+            case 'C':
+                /* move cursor right */
+                if (s->esc_params[0] == 0) {
+                    s->esc_params[0] = 1;
+                }
+                set_cursor(s, s->x + s->esc_params[0], s->y);
+                break;
+            case 'D':
+                /* move cursor left */
+                if (s->esc_params[0] == 0) {
+                    s->esc_params[0] = 1;
+                }
+                set_cursor(s, s->x - s->esc_params[0], s->y);
+                break;
+            case 'G':
+                /* move cursor to column */
+                set_cursor(s, s->esc_params[0] - 1, s->y);
+                break;
+            case 'f':
+            case 'H':
+                /* move cursor to row, column */
+                set_cursor(s, s->esc_params[1] - 1, s->esc_params[0] - 1);
+                break;
+            case 'J':
+                switch (s->esc_params[0]) {
+                case 0:
+                    /* clear to end of screen */
+                    for (y = s->y; y < s->height; y++) {
+                        for (x = 0; x < s->width; x++) {
+                            if (y == s->y && x < s->x) {
+                                continue;
+                            }
+                            console_clear_xy(s, x, y);
+                        }
+                    }
+                    break;
+                case 1:
+                    /* clear from beginning of screen */
+                    for (y = 0; y <= s->y; y++) {
+                        for (x = 0; x < s->width; x++) {
+                            if (y == s->y && x > s->x) {
+                                break;
+                            }
+                            console_clear_xy(s, x, y);
+                        }
+                    }
+                    break;
+                case 2:
+                    /* clear entire screen */
+                    for (y = 0; y <= s->height; y++) {
+                        for (x = 0; x < s->width; x++) {
+                            console_clear_xy(s, x, y);
+                        }
+                    }
+                    break;
+                }
+                break;
+            case 'K':
+                switch (s->esc_params[0]) {
+                case 0:
+                    /* clear to eol */
+                    for(x = s->x; x < s->width; x++) {
+                        console_clear_xy(s, x, s->y);
+                    }
+                    break;
+                case 1:
+                    /* clear from beginning of line */
+                    for (x = 0; x <= s->x; x++) {
+                        console_clear_xy(s, x, s->y);
+                    }
+                    break;
+                case 2:
+                    /* clear entire line */
+                    for(x = 0; x < s->width; x++) {
+                        console_clear_xy(s, x, s->y);
+                    }
+                    break;
+                }
+                break;
+            case 'm':
+                console_handle_escape(s);
+                break;
+            case 'n':
+                /* report cursor position */
+                /* TODO: send ESC[row;colR */
+                break;
+            case 's':
+                /* save cursor position */
+                s->x_saved = s->x;
+                s->y_saved = s->y;
+                break;
+            case 'u':
+                /* restore cursor position */
+                s->x = s->x_saved;
+                s->y = s->y_saved;
+                break;
+            default:
+#ifdef DEBUG_CONSOLE
+                fprintf(stderr, "unhandled escape character '%c'\n", ch);
+#endif
+                break;
+            }
+            break;
+        }
+    }
+}
+
+void console_select(unsigned int index)
+{
+    QemuConsole *s;
+
+    if (index >= MAX_CONSOLES)
+        return;
+    if (active_console) {
+        active_console->g_width = ds_get_width(active_console->ds);
+        active_console->g_height = ds_get_height(active_console->ds);
+    }
+    s = consoles[index];
+    if (s) {
+        DisplayState *ds = s->ds;
+
+        if (active_console && active_console->cursor_timer) {
+            qemu_del_timer(active_console->cursor_timer);
+        }
+        active_console = s;
+        if (ds->have_gfx) {
+            ds->surface = qemu_resize_displaysurface(ds, s->g_width, s->g_height);
+            dpy_gfx_resize(ds);
+        }
+        if (ds->have_text) {
+            dpy_text_resize(ds, s->width, s->height);
+        }
+        if (s->cursor_timer) {
+            qemu_mod_timer(s->cursor_timer,
+                   qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2);
+        }
+        vga_hw_invalidate();
+    }
+}
+
+static int console_puts(CharDriverState *chr, const uint8_t *buf, int len)
+{
+    QemuConsole *s = chr->opaque;
+    int i;
+
+    s->update_x0 = s->width * FONT_WIDTH;
+    s->update_y0 = s->height * FONT_HEIGHT;
+    s->update_x1 = 0;
+    s->update_y1 = 0;
+    console_show_cursor(s, 0);
+    for(i = 0; i < len; i++) {
+        console_putchar(s, buf[i]);
+    }
+    console_show_cursor(s, 1);
+    if (s->ds->have_gfx && s->update_x0 < s->update_x1) {
+        dpy_gfx_update(s->ds, s->update_x0, s->update_y0,
+                       s->update_x1 - s->update_x0,
+                       s->update_y1 - s->update_y0);
+    }
+    return len;
+}
+
+static void kbd_send_chars(void *opaque)
+{
+    QemuConsole *s = opaque;
+    int len;
+    uint8_t buf[16];
+
+    len = qemu_chr_be_can_write(s->chr);
+    if (len > s->out_fifo.count)
+        len = s->out_fifo.count;
+    if (len > 0) {
+        if (len > sizeof(buf))
+            len = sizeof(buf);
+        qemu_fifo_read(&s->out_fifo, buf, len);
+        qemu_chr_be_write(s->chr, buf, len);
+    }
+    /* characters are pending: we send them a bit later (XXX:
+       horrible, should change char device API) */
+    if (s->out_fifo.count > 0) {
+        qemu_mod_timer(s->kbd_timer, qemu_get_clock_ms(rt_clock) + 1);
+    }
+}
+
+/* called when an ascii key is pressed */
+void kbd_put_keysym(int keysym)
+{
+    QemuConsole *s;
+    uint8_t buf[16], *q;
+    int c;
+
+    s = active_console;
+    if (!s || (s->console_type == GRAPHIC_CONSOLE))
+        return;
+
+    switch(keysym) {
+    case QEMU_KEY_CTRL_UP:
+        console_scroll(-1);
+        break;
+    case QEMU_KEY_CTRL_DOWN:
+        console_scroll(1);
+        break;
+    case QEMU_KEY_CTRL_PAGEUP:
+        console_scroll(-10);
+        break;
+    case QEMU_KEY_CTRL_PAGEDOWN:
+        console_scroll(10);
+        break;
+    default:
+        /* convert the QEMU keysym to VT100 key string */
+        q = buf;
+        if (keysym >= 0xe100 && keysym <= 0xe11f) {
+            *q++ = '\033';
+            *q++ = '[';
+            c = keysym - 0xe100;
+            if (c >= 10)
+                *q++ = '0' + (c / 10);
+            *q++ = '0' + (c % 10);
+            *q++ = '~';
+        } else if (keysym >= 0xe120 && keysym <= 0xe17f) {
+            *q++ = '\033';
+            *q++ = '[';
+            *q++ = keysym & 0xff;
+        } else if (s->echo && (keysym == '\r' || keysym == '\n')) {
+            console_puts(s->chr, (const uint8_t *) "\r", 1);
+            *q++ = '\n';
+        } else {
+            *q++ = keysym;
+        }
+        if (s->echo) {
+            console_puts(s->chr, buf, q - buf);
+        }
+        if (s->chr->chr_read) {
+            qemu_fifo_write(&s->out_fifo, buf, q - buf);
+            kbd_send_chars(s);
+        }
+        break;
+    }
+}
+
+static void text_console_invalidate(void *opaque)
+{
+    QemuConsole *s = (QemuConsole *) opaque;
+    if (!ds_get_bits_per_pixel(s->ds) && s->console_type == TEXT_CONSOLE) {
+        s->g_width = ds_get_width(s->ds);
+        s->g_height = ds_get_height(s->ds);
+        text_console_resize(s);
+    }
+    console_refresh(s);
+}
+
+static void text_console_update(void *opaque, console_ch_t *chardata)
+{
+    QemuConsole *s = (QemuConsole *) opaque;
+    int i, j, src;
+
+    if (s->text_x[0] <= s->text_x[1]) {
+        src = (s->y_base + s->text_y[0]) * s->width;
+        chardata += s->text_y[0] * s->width;
+        for (i = s->text_y[0]; i <= s->text_y[1]; i ++)
+            for (j = 0; j < s->width; j ++, src ++)
+                console_write_ch(chardata ++, s->cells[src].ch |
+                                (s->cells[src].t_attrib.fgcol << 12) |
+                                (s->cells[src].t_attrib.bgcol << 8) |
+                                (s->cells[src].t_attrib.bold << 21));
+        dpy_text_update(s->ds, s->text_x[0], s->text_y[0],
+                        s->text_x[1] - s->text_x[0], i - s->text_y[0]);
+        s->text_x[0] = s->width;
+        s->text_y[0] = s->height;
+        s->text_x[1] = 0;
+        s->text_y[1] = 0;
+    }
+    if (s->cursor_invalidate) {
+        dpy_text_cursor(s->ds, s->x, s->y);
+        s->cursor_invalidate = 0;
+    }
+}
+
+static QemuConsole *get_graphic_console(DisplayState *ds)
+{
+    int i;
+    QemuConsole *s;
+    for (i = 0; i < nb_consoles; i++) {
+        s = consoles[i];
+        if (s->console_type == GRAPHIC_CONSOLE && s->ds == ds)
+            return s;
+    }
+    return NULL;
+}
+
+static QemuConsole *new_console(DisplayState *ds, console_type_t console_type)
+{
+    QemuConsole *s;
+    int i;
+
+    if (nb_consoles >= MAX_CONSOLES)
+        return NULL;
+    s = g_malloc0(sizeof(QemuConsole));
+    if (!active_console || ((active_console->console_type != GRAPHIC_CONSOLE) &&
+        (console_type == GRAPHIC_CONSOLE))) {
+        active_console = s;
+    }
+    s->ds = ds;
+    s->console_type = console_type;
+    if (console_type != GRAPHIC_CONSOLE) {
+        s->index = nb_consoles;
+        consoles[nb_consoles++] = s;
+    } else {
+        /* HACK: Put graphical consoles before text consoles.  */
+        for (i = nb_consoles; i > 0; i--) {
+            if (consoles[i - 1]->console_type == GRAPHIC_CONSOLE)
+                break;
+            consoles[i] = consoles[i - 1];
+            consoles[i]->index = i;
+        }
+        s->index = i;
+        consoles[i] = s;
+        nb_consoles++;
+    }
+    return s;
+}
+
+static void qemu_alloc_display(DisplaySurface *surface, int width, int height,
+                               int linesize, PixelFormat pf, int newflags)
+{
+    surface->pf = pf;
+
+    qemu_pixman_image_unref(surface->image);
+    surface->image = NULL;
+
+    surface->format = qemu_pixman_get_format(&pf);
+    assert(surface->format != 0);
+    surface->image = pixman_image_create_bits(surface->format,
+                                              width, height,
+                                              NULL, linesize);
+    assert(surface->image != NULL);
+
+    surface->flags = newflags | QEMU_ALLOCATED_FLAG;
+#ifdef HOST_WORDS_BIGENDIAN
+    surface->flags |= QEMU_BIG_ENDIAN_FLAG;
+#endif
+}
+
+DisplaySurface *qemu_create_displaysurface(DisplayState *ds,
+                                           int width, int height)
+{
+    DisplaySurface *surface = g_new0(DisplaySurface, 1);
+
+    int linesize = width * 4;
+    qemu_alloc_display(surface, width, height, linesize,
+                       qemu_default_pixelformat(32), 0);
+    return surface;
+}
+
+DisplaySurface *qemu_resize_displaysurface(DisplayState *ds,
+                                           int width, int height)
+{
+    int linesize = width * 4;
+
+    trace_displaysurface_resize(ds, ds->surface, width, height);
+    qemu_alloc_display(ds->surface, width, height, linesize,
+                       qemu_default_pixelformat(32), 0);
+    return ds->surface;
+}
+
+DisplaySurface *qemu_create_displaysurface_from(int width, int height, int bpp,
+                                                int linesize, uint8_t *data)
+{
+    DisplaySurface *surface = g_new0(DisplaySurface, 1);
+
+    surface->pf = qemu_default_pixelformat(bpp);
+
+    surface->format = qemu_pixman_get_format(&surface->pf);
+    assert(surface->format != 0);
+    surface->image = pixman_image_create_bits(surface->format,
+                                              width, height,
+                                              (void *)data, linesize);
+    assert(surface->image != NULL);
+
+#ifdef HOST_WORDS_BIGENDIAN
+    surface->flags = QEMU_BIG_ENDIAN_FLAG;
+#endif
+
+    return surface;
+}
+
+void qemu_free_displaysurface(DisplayState *ds)
+{
+    trace_displaysurface_free(ds, ds->surface);
+    if (ds->surface == NULL) {
+        return;
+    }
+    qemu_pixman_image_unref(ds->surface->image);
+    g_free(ds->surface);
+}
+
+static void dumb_display_init(void)
+{
+    DisplayState *ds = g_malloc0(sizeof(DisplayState));
+    int width = 640;
+    int height = 480;
+
+    if (is_fixedsize_console()) {
+        width = active_console->g_width;
+        height = active_console->g_height;
+    }
+    ds->surface = qemu_create_displaysurface(ds, width, height);
+    register_displaystate(ds);
+}
+
+/***********************************************************/
+/* register display */
+
+void register_displaystate(DisplayState *ds)
+{
+    DisplayState **s;
+    s = &display_state;
+    while (*s != NULL)
+        s = &(*s)->next;
+    ds->next = NULL;
+    *s = ds;
+}
+
+DisplayState *get_displaystate(void)
+{
+    if (!display_state) {
+        dumb_display_init ();
+    }
+    return display_state;
+}
+
+DisplayState *graphic_console_init(vga_hw_update_ptr update,
+                                   vga_hw_invalidate_ptr invalidate,
+                                   vga_hw_screen_dump_ptr screen_dump,
+                                   vga_hw_text_update_ptr text_update,
+                                   void *opaque)
+{
+    QemuConsole *s;
+    DisplayState *ds;
+
+    ds = (DisplayState *) g_malloc0(sizeof(DisplayState));
+    ds->surface = qemu_create_displaysurface(ds, 640, 480);
+
+    s = new_console(ds, GRAPHIC_CONSOLE);
+    if (s == NULL) {
+        qemu_free_displaysurface(ds);
+        g_free(ds);
+        return NULL;
+    }
+    s->hw_update = update;
+    s->hw_invalidate = invalidate;
+    s->hw_screen_dump = screen_dump;
+    s->hw_text_update = text_update;
+    s->hw = opaque;
+
+    register_displaystate(ds);
+    return ds;
+}
+
+int is_graphic_console(void)
+{
+    return active_console && active_console->console_type == GRAPHIC_CONSOLE;
+}
+
+int is_fixedsize_console(void)
+{
+    return active_console && active_console->console_type != TEXT_CONSOLE;
+}
+
+void console_color_init(DisplayState *ds)
+{
+    int i, j;
+    for (j = 0; j < 2; j++) {
+        for (i = 0; i < 8; i++) {
+            color_table[j][i] = col_expand(ds,
+                   vga_get_color(ds, color_table_rgb[j][i]));
+        }
+    }
+}
+
+static void text_console_set_echo(CharDriverState *chr, bool echo)
+{
+    QemuConsole *s = chr->opaque;
+
+    s->echo = echo;
+}
+
+static void text_console_update_cursor(void *opaque)
+{
+    QemuConsole *s = opaque;
+
+    s->cursor_visible_phase = !s->cursor_visible_phase;
+    vga_hw_invalidate();
+    qemu_mod_timer(s->cursor_timer,
+                   qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2);
+}
+
+static void text_console_do_init(CharDriverState *chr, DisplayState *ds)
+{
+    QemuConsole *s;
+    static int color_inited;
+
+    s = chr->opaque;
+
+    chr->chr_write = console_puts;
+
+    s->out_fifo.buf = s->out_fifo_buf;
+    s->out_fifo.buf_size = sizeof(s->out_fifo_buf);
+    s->kbd_timer = qemu_new_timer_ms(rt_clock, kbd_send_chars, s);
+    s->ds = ds;
+
+    if (!color_inited) {
+        color_inited = 1;
+        console_color_init(s->ds);
+    }
+    s->y_displayed = 0;
+    s->y_base = 0;
+    s->total_height = DEFAULT_BACKSCROLL;
+    s->x = 0;
+    s->y = 0;
+    if (s->console_type == TEXT_CONSOLE) {
+        s->g_width = ds_get_width(s->ds);
+        s->g_height = ds_get_height(s->ds);
+    }
+
+    s->cursor_timer =
+        qemu_new_timer_ms(rt_clock, text_console_update_cursor, s);
+
+    s->hw_invalidate = text_console_invalidate;
+    s->hw_text_update = text_console_update;
+    s->hw = s;
+
+    /* Set text attribute defaults */
+    s->t_attrib_default.bold = 0;
+    s->t_attrib_default.uline = 0;
+    s->t_attrib_default.blink = 0;
+    s->t_attrib_default.invers = 0;
+    s->t_attrib_default.unvisible = 0;
+    s->t_attrib_default.fgcol = COLOR_WHITE;
+    s->t_attrib_default.bgcol = COLOR_BLACK;
+    /* set current text attributes to default */
+    s->t_attrib = s->t_attrib_default;
+    text_console_resize(s);
+
+    if (chr->label) {
+        char msg[128];
+        int len;
+
+        s->t_attrib.bgcol = COLOR_BLUE;
+        len = snprintf(msg, sizeof(msg), "%s console\r\n", chr->label);
+        console_puts(chr, (uint8_t*)msg, len);
+        s->t_attrib = s->t_attrib_default;
+    }
+
+    qemu_chr_generic_open(chr);
+    if (chr->init)
+        chr->init(chr);
+}
+
+CharDriverState *text_console_init(QemuOpts *opts)
+{
+    CharDriverState *chr;
+    QemuConsole *s;
+    unsigned width;
+    unsigned height;
+
+    chr = g_malloc0(sizeof(CharDriverState));
+
+    width = qemu_opt_get_number(opts, "width", 0);
+    if (width == 0)
+        width = qemu_opt_get_number(opts, "cols", 0) * FONT_WIDTH;
+
+    height = qemu_opt_get_number(opts, "height", 0);
+    if (height == 0)
+        height = qemu_opt_get_number(opts, "rows", 0) * FONT_HEIGHT;
+
+    if (width == 0 || height == 0) {
+        s = new_console(NULL, TEXT_CONSOLE);
+    } else {
+        s = new_console(NULL, TEXT_CONSOLE_FIXED_SIZE);
+    }
+
+    if (!s) {
+        g_free(chr);
+        return NULL;
+    }
+
+    s->chr = chr;
+    s->g_width = width;
+    s->g_height = height;
+    chr->opaque = s;
+    chr->chr_set_echo = text_console_set_echo;
+    return chr;
+}
+
+void text_consoles_set_display(DisplayState *ds)
+{
+    int i;
+
+    for (i = 0; i < nb_consoles; i++) {
+        if (consoles[i]->console_type != GRAPHIC_CONSOLE) {
+            text_console_do_init(consoles[i]->chr, ds);
+        }
+    }
+}
+
+void qemu_console_resize(DisplayState *ds, int width, int height)
+{
+    QemuConsole *s = get_graphic_console(ds);
+    if (!s) return;
+
+    s->g_width = width;
+    s->g_height = height;
+    if (is_graphic_console()) {
+        ds->surface = qemu_resize_displaysurface(ds, width, height);
+        dpy_gfx_resize(ds);
+    }
+}
+
+void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
+                       int dst_x, int dst_y, int w, int h)
+{
+    if (is_graphic_console()) {
+        dpy_gfx_copy(ds, src_x, src_y, dst_x, dst_y, w, h);
+    }
+}
+
+PixelFormat qemu_different_endianness_pixelformat(int bpp)
+{
+    PixelFormat pf;
+
+    memset(&pf, 0x00, sizeof(PixelFormat));
+
+    pf.bits_per_pixel = bpp;
+    pf.bytes_per_pixel = DIV_ROUND_UP(bpp, 8);
+    pf.depth = bpp == 32 ? 24 : bpp;
+
+    switch (bpp) {
+        case 24:
+            pf.rmask = 0x000000FF;
+            pf.gmask = 0x0000FF00;
+            pf.bmask = 0x00FF0000;
+            pf.rmax = 255;
+            pf.gmax = 255;
+            pf.bmax = 255;
+            pf.rshift = 0;
+            pf.gshift = 8;
+            pf.bshift = 16;
+            pf.rbits = 8;
+            pf.gbits = 8;
+            pf.bbits = 8;
+            break;
+        case 32:
+            pf.rmask = 0x0000FF00;
+            pf.gmask = 0x00FF0000;
+            pf.bmask = 0xFF000000;
+            pf.amask = 0x00000000;
+            pf.amax = 255;
+            pf.rmax = 255;
+            pf.gmax = 255;
+            pf.bmax = 255;
+            pf.ashift = 0;
+            pf.rshift = 8;
+            pf.gshift = 16;
+            pf.bshift = 24;
+            pf.rbits = 8;
+            pf.gbits = 8;
+            pf.bbits = 8;
+            pf.abits = 8;
+            break;
+        default:
+            break;
+    }
+    return pf;
+}
+
+PixelFormat qemu_default_pixelformat(int bpp)
+{
+    PixelFormat pf;
+
+    memset(&pf, 0x00, sizeof(PixelFormat));
+
+    pf.bits_per_pixel = bpp;
+    pf.bytes_per_pixel = DIV_ROUND_UP(bpp, 8);
+    pf.depth = bpp == 32 ? 24 : bpp;
+
+    switch (bpp) {
+        case 15:
+            pf.bits_per_pixel = 16;
+            pf.rmask = 0x00007c00;
+            pf.gmask = 0x000003E0;
+            pf.bmask = 0x0000001F;
+            pf.rmax = 31;
+            pf.gmax = 31;
+            pf.bmax = 31;
+            pf.rshift = 10;
+            pf.gshift = 5;
+            pf.bshift = 0;
+            pf.rbits = 5;
+            pf.gbits = 5;
+            pf.bbits = 5;
+            break;
+        case 16:
+            pf.rmask = 0x0000F800;
+            pf.gmask = 0x000007E0;
+            pf.bmask = 0x0000001F;
+            pf.rmax = 31;
+            pf.gmax = 63;
+            pf.bmax = 31;
+            pf.rshift = 11;
+            pf.gshift = 5;
+            pf.bshift = 0;
+            pf.rbits = 5;
+            pf.gbits = 6;
+            pf.bbits = 5;
+            break;
+        case 24:
+            pf.rmask = 0x00FF0000;
+            pf.gmask = 0x0000FF00;
+            pf.bmask = 0x000000FF;
+            pf.rmax = 255;
+            pf.gmax = 255;
+            pf.bmax = 255;
+            pf.rshift = 16;
+            pf.gshift = 8;
+            pf.bshift = 0;
+            pf.rbits = 8;
+            pf.gbits = 8;
+            pf.bbits = 8;
+            break;
+        case 32:
+            pf.rmask = 0x00FF0000;
+            pf.gmask = 0x0000FF00;
+            pf.bmask = 0x000000FF;
+            pf.rmax = 255;
+            pf.gmax = 255;
+            pf.bmax = 255;
+            pf.rshift = 16;
+            pf.gshift = 8;
+            pf.bshift = 0;
+            pf.rbits = 8;
+            pf.gbits = 8;
+            pf.bbits = 8;
+            break;
+        default:
+            break;
+    }
+    return pf;
+}
index 5dc0b2c95f1345a4c0c89d74913736b9988431a7..5d15e9e16ee44fecf9ed559a1f40c4b35f8d393b 100644 (file)
@@ -29,7 +29,7 @@
 #endif
 
 #include "qemu-common.h"
-#include "console.h"
+#include "ui/console.h"
 #include "sysemu.h"
 
 #define FONT_HEIGHT 16
diff --git a/ui/cursor.c b/ui/cursor.c
new file mode 100644 (file)
index 0000000..2b8dd3f
--- /dev/null
@@ -0,0 +1,211 @@
+#include "qemu-common.h"
+#include "ui/console.h"
+
+#include "cursor_hidden.xpm"
+#include "cursor_left_ptr.xpm"
+
+/* for creating built-in cursors */
+static QEMUCursor *cursor_parse_xpm(const char *xpm[])
+{
+    QEMUCursor *c;
+    uint32_t ctab[128];
+    unsigned int width, height, colors, chars;
+    unsigned int line = 0, i, r, g, b, x, y, pixel;
+    char name[16];
+    uint8_t idx;
+
+    /* parse header line: width, height, #colors, #chars */
+    if (sscanf(xpm[line], "%u %u %u %u",
+               &width, &height, &colors, &chars) != 4) {
+        fprintf(stderr, "%s: header parse error: \"%s\"\n",
+                __FUNCTION__, xpm[line]);
+        return NULL;
+    }
+    if (chars != 1) {
+        fprintf(stderr, "%s: chars != 1 not supported\n", __FUNCTION__);
+        return NULL;
+    }
+    line++;
+
+    /* parse color table */
+    for (i = 0; i < colors; i++, line++) {
+        if (sscanf(xpm[line], "%c c %15s", &idx, name) == 2) {
+            if (sscanf(name, "#%02x%02x%02x", &r, &g, &b) == 3) {
+                ctab[idx] = (0xff << 24) | (b << 16) | (g << 8) | r;
+                continue;
+            }
+            if (strcmp(name, "None") == 0) {
+                ctab[idx] = 0x00000000;
+                continue;
+            }
+        }
+        fprintf(stderr, "%s: color parse error: \"%s\"\n",
+                __FUNCTION__, xpm[line]);
+        return NULL;
+    }
+
+    /* parse pixel data */
+    c = cursor_alloc(width, height);
+    for (pixel = 0, y = 0; y < height; y++, line++) {
+        for (x = 0; x < height; x++, pixel++) {
+            idx = xpm[line][x];
+            c->data[pixel] = ctab[idx];
+        }
+    }
+    return c;
+}
+
+/* nice for debugging */
+void cursor_print_ascii_art(QEMUCursor *c, const char *prefix)
+{
+    uint32_t *data = c->data;
+    int x,y;
+
+    for (y = 0; y < c->height; y++) {
+        fprintf(stderr, "%s: %2d: |", prefix, y);
+        for (x = 0; x < c->width; x++, data++) {
+            if ((*data & 0xff000000) != 0xff000000) {
+                fprintf(stderr, " "); /* transparent */
+            } else if ((*data & 0x00ffffff) == 0x00ffffff) {
+                fprintf(stderr, "."); /* white */
+            } else if ((*data & 0x00ffffff) == 0x00000000) {
+                fprintf(stderr, "X"); /* black */
+            } else {
+                fprintf(stderr, "o"); /* other */
+            }
+        }
+        fprintf(stderr, "|\n");
+    }
+}
+
+QEMUCursor *cursor_builtin_hidden(void)
+{
+    QEMUCursor *c;
+
+    c = cursor_parse_xpm(cursor_hidden_xpm);
+    return c;
+}
+
+QEMUCursor *cursor_builtin_left_ptr(void)
+{
+    QEMUCursor *c;
+
+    c = cursor_parse_xpm(cursor_left_ptr_xpm);
+    return c;
+}
+
+QEMUCursor *cursor_alloc(int width, int height)
+{
+    QEMUCursor *c;
+    int datasize = width * height * sizeof(uint32_t);
+
+    c = g_malloc0(sizeof(QEMUCursor) + datasize);
+    c->width  = width;
+    c->height = height;
+    c->refcount = 1;
+    return c;
+}
+
+void cursor_get(QEMUCursor *c)
+{
+    c->refcount++;
+}
+
+void cursor_put(QEMUCursor *c)
+{
+    if (c == NULL)
+        return;
+    c->refcount--;
+    if (c->refcount)
+        return;
+    g_free(c);
+}
+
+int cursor_get_mono_bpl(QEMUCursor *c)
+{
+    return (c->width + 7) / 8;
+}
+
+void cursor_set_mono(QEMUCursor *c,
+                     uint32_t foreground, uint32_t background, uint8_t *image,
+                     int transparent, uint8_t *mask)
+{
+    uint32_t *data = c->data;
+    uint8_t bit;
+    int x,y,bpl;
+
+    bpl = cursor_get_mono_bpl(c);
+    for (y = 0; y < c->height; y++) {
+        bit = 0x80;
+        for (x = 0; x < c->width; x++, data++) {
+            if (transparent && mask[x/8] & bit) {
+                *data = 0x00000000;
+            } else if (!transparent && !(mask[x/8] & bit)) {
+                *data = 0x00000000;
+            } else if (image[x/8] & bit) {
+                *data = 0xff000000 | foreground;
+            } else {
+                *data = 0xff000000 | background;
+            }
+            bit >>= 1;
+            if (bit == 0) {
+                bit = 0x80;
+            }
+        }
+        mask  += bpl;
+        image += bpl;
+    }
+}
+
+void cursor_get_mono_image(QEMUCursor *c, int foreground, uint8_t *image)
+{
+    uint32_t *data = c->data;
+    uint8_t bit;
+    int x,y,bpl;
+
+    bpl = cursor_get_mono_bpl(c);
+    memset(image, 0, bpl * c->height);
+    for (y = 0; y < c->height; y++) {
+        bit = 0x80;
+        for (x = 0; x < c->width; x++, data++) {
+            if (((*data & 0xff000000) == 0xff000000) &&
+                ((*data & 0x00ffffff) == foreground)) {
+                image[x/8] |= bit;
+            }
+            bit >>= 1;
+            if (bit == 0) {
+                bit = 0x80;
+            }
+        }
+        image += bpl;
+    }
+}
+
+void cursor_get_mono_mask(QEMUCursor *c, int transparent, uint8_t *mask)
+{
+    uint32_t *data = c->data;
+    uint8_t bit;
+    int x,y,bpl;
+
+    bpl = cursor_get_mono_bpl(c);
+    memset(mask, 0, bpl * c->height);
+    for (y = 0; y < c->height; y++) {
+        bit = 0x80;
+        for (x = 0; x < c->width; x++, data++) {
+            if ((*data & 0xff000000) != 0xff000000) {
+                if (transparent != 0) {
+                    mask[x/8] |= bit;
+                }
+            } else {
+                if (transparent == 0) {
+                    mask[x/8] |= bit;
+                }
+            }
+            bit >>= 1;
+            if (bit == 0) {
+                bit = 0x80;
+            }
+        }
+        mask += bpl;
+    }
+}
diff --git a/ui/cursor_hidden.xpm b/ui/cursor_hidden.xpm
new file mode 100644 (file)
index 0000000..354e7a9
--- /dev/null
@@ -0,0 +1,37 @@
+/* XPM */
+static const char *cursor_hidden_xpm[] = {
+    "32 32 1 1",
+    "  c None",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+};
diff --git a/ui/cursor_left_ptr.xpm b/ui/cursor_left_ptr.xpm
new file mode 100644 (file)
index 0000000..6c9ada9
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static const char *cursor_left_ptr_xpm[] = {
+    "32 32 3 1",
+    "X c #000000",
+    ". c #ffffff",
+    "  c None",
+    "X                               ",
+    "XX                              ",
+    "X.X                             ",
+    "X..X                            ",
+    "X...X                           ",
+    "X....X                          ",
+    "X.....X                         ",
+    "X......X                        ",
+    "X.......X                       ",
+    "X........X                      ",
+    "X.....XXXXX                     ",
+    "X..X..X                         ",
+    "X.X X..X                        ",
+    "XX  X..X                        ",
+    "X    X..X                       ",
+    "     X..X                       ",
+    "      X..X                      ",
+    "      X..X                      ",
+    "       XX                       ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+    "                                ",
+};
diff --git a/ui/input.c b/ui/input.c
new file mode 100644 (file)
index 0000000..58d3b47
--- /dev/null
@@ -0,0 +1,529 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "sysemu.h"
+#include "monitor.h"
+#include "ui/console.h"
+#include "error.h"
+#include "qmp-commands.h"
+#include "qapi-types.h"
+
+static QEMUPutKBDEvent *qemu_put_kbd_event;
+static void *qemu_put_kbd_event_opaque;
+static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers = QTAILQ_HEAD_INITIALIZER(led_handlers);
+static QTAILQ_HEAD(, QEMUPutMouseEntry) mouse_handlers =
+    QTAILQ_HEAD_INITIALIZER(mouse_handlers);
+static NotifierList mouse_mode_notifiers = 
+    NOTIFIER_LIST_INITIALIZER(mouse_mode_notifiers);
+
+static const int key_defs[] = {
+    [Q_KEY_CODE_SHIFT] = 0x2a,
+    [Q_KEY_CODE_SHIFT_R] = 0x36,
+
+    [Q_KEY_CODE_ALT] = 0x38,
+    [Q_KEY_CODE_ALT_R] = 0xb8,
+    [Q_KEY_CODE_ALTGR] = 0x64,
+    [Q_KEY_CODE_ALTGR_R] = 0xe4,
+    [Q_KEY_CODE_CTRL] = 0x1d,
+    [Q_KEY_CODE_CTRL_R] = 0x9d,
+
+    [Q_KEY_CODE_MENU] = 0xdd,
+
+    [Q_KEY_CODE_ESC] = 0x01,
+
+    [Q_KEY_CODE_1] = 0x02,
+    [Q_KEY_CODE_2] = 0x03,
+    [Q_KEY_CODE_3] = 0x04,
+    [Q_KEY_CODE_4] = 0x05,
+    [Q_KEY_CODE_5] = 0x06,
+    [Q_KEY_CODE_6] = 0x07,
+    [Q_KEY_CODE_7] = 0x08,
+    [Q_KEY_CODE_8] = 0x09,
+    [Q_KEY_CODE_9] = 0x0a,
+    [Q_KEY_CODE_0] = 0x0b,
+    [Q_KEY_CODE_MINUS] = 0x0c,
+    [Q_KEY_CODE_EQUAL] = 0x0d,
+    [Q_KEY_CODE_BACKSPACE] = 0x0e,
+
+    [Q_KEY_CODE_TAB] = 0x0f,
+    [Q_KEY_CODE_Q] = 0x10,
+    [Q_KEY_CODE_W] = 0x11,
+    [Q_KEY_CODE_E] = 0x12,
+    [Q_KEY_CODE_R] = 0x13,
+    [Q_KEY_CODE_T] = 0x14,
+    [Q_KEY_CODE_Y] = 0x15,
+    [Q_KEY_CODE_U] = 0x16,
+    [Q_KEY_CODE_I] = 0x17,
+    [Q_KEY_CODE_O] = 0x18,
+    [Q_KEY_CODE_P] = 0x19,
+    [Q_KEY_CODE_BRACKET_LEFT] = 0x1a,
+    [Q_KEY_CODE_BRACKET_RIGHT] = 0x1b,
+    [Q_KEY_CODE_RET] = 0x1c,
+
+    [Q_KEY_CODE_A] = 0x1e,
+    [Q_KEY_CODE_S] = 0x1f,
+    [Q_KEY_CODE_D] = 0x20,
+    [Q_KEY_CODE_F] = 0x21,
+    [Q_KEY_CODE_G] = 0x22,
+    [Q_KEY_CODE_H] = 0x23,
+    [Q_KEY_CODE_J] = 0x24,
+    [Q_KEY_CODE_K] = 0x25,
+    [Q_KEY_CODE_L] = 0x26,
+    [Q_KEY_CODE_SEMICOLON] = 0x27,
+    [Q_KEY_CODE_APOSTROPHE] = 0x28,
+    [Q_KEY_CODE_GRAVE_ACCENT] = 0x29,
+
+    [Q_KEY_CODE_BACKSLASH] = 0x2b,
+    [Q_KEY_CODE_Z] = 0x2c,
+    [Q_KEY_CODE_X] = 0x2d,
+    [Q_KEY_CODE_C] = 0x2e,
+    [Q_KEY_CODE_V] = 0x2f,
+    [Q_KEY_CODE_B] = 0x30,
+    [Q_KEY_CODE_N] = 0x31,
+    [Q_KEY_CODE_M] = 0x32,
+    [Q_KEY_CODE_COMMA] = 0x33,
+    [Q_KEY_CODE_DOT] = 0x34,
+    [Q_KEY_CODE_SLASH] = 0x35,
+
+    [Q_KEY_CODE_ASTERISK] = 0x37,
+
+    [Q_KEY_CODE_SPC] = 0x39,
+    [Q_KEY_CODE_CAPS_LOCK] = 0x3a,
+    [Q_KEY_CODE_F1] = 0x3b,
+    [Q_KEY_CODE_F2] = 0x3c,
+    [Q_KEY_CODE_F3] = 0x3d,
+    [Q_KEY_CODE_F4] = 0x3e,
+    [Q_KEY_CODE_F5] = 0x3f,
+    [Q_KEY_CODE_F6] = 0x40,
+    [Q_KEY_CODE_F7] = 0x41,
+    [Q_KEY_CODE_F8] = 0x42,
+    [Q_KEY_CODE_F9] = 0x43,
+    [Q_KEY_CODE_F10] = 0x44,
+    [Q_KEY_CODE_NUM_LOCK] = 0x45,
+    [Q_KEY_CODE_SCROLL_LOCK] = 0x46,
+
+    [Q_KEY_CODE_KP_DIVIDE] = 0xb5,
+    [Q_KEY_CODE_KP_MULTIPLY] = 0x37,
+    [Q_KEY_CODE_KP_SUBTRACT] = 0x4a,
+    [Q_KEY_CODE_KP_ADD] = 0x4e,
+    [Q_KEY_CODE_KP_ENTER] = 0x9c,
+    [Q_KEY_CODE_KP_DECIMAL] = 0x53,
+    [Q_KEY_CODE_SYSRQ] = 0x54,
+
+    [Q_KEY_CODE_KP_0] = 0x52,
+    [Q_KEY_CODE_KP_1] = 0x4f,
+    [Q_KEY_CODE_KP_2] = 0x50,
+    [Q_KEY_CODE_KP_3] = 0x51,
+    [Q_KEY_CODE_KP_4] = 0x4b,
+    [Q_KEY_CODE_KP_5] = 0x4c,
+    [Q_KEY_CODE_KP_6] = 0x4d,
+    [Q_KEY_CODE_KP_7] = 0x47,
+    [Q_KEY_CODE_KP_8] = 0x48,
+    [Q_KEY_CODE_KP_9] = 0x49,
+
+    [Q_KEY_CODE_LESS] = 0x56,
+
+    [Q_KEY_CODE_F11] = 0x57,
+    [Q_KEY_CODE_F12] = 0x58,
+
+    [Q_KEY_CODE_PRINT] = 0xb7,
+
+    [Q_KEY_CODE_HOME] = 0xc7,
+    [Q_KEY_CODE_PGUP] = 0xc9,
+    [Q_KEY_CODE_PGDN] = 0xd1,
+    [Q_KEY_CODE_END] = 0xcf,
+
+    [Q_KEY_CODE_LEFT] = 0xcb,
+    [Q_KEY_CODE_UP] = 0xc8,
+    [Q_KEY_CODE_DOWN] = 0xd0,
+    [Q_KEY_CODE_RIGHT] = 0xcd,
+
+    [Q_KEY_CODE_INSERT] = 0xd2,
+    [Q_KEY_CODE_DELETE] = 0xd3,
+#ifdef NEED_CPU_H
+#if defined(TARGET_SPARC) && !defined(TARGET_SPARC64)
+    [Q_KEY_CODE_STOP] = 0xf0,
+    [Q_KEY_CODE_AGAIN] = 0xf1,
+    [Q_KEY_CODE_PROPS] = 0xf2,
+    [Q_KEY_CODE_UNDO] = 0xf3,
+    [Q_KEY_CODE_FRONT] = 0xf4,
+    [Q_KEY_CODE_COPY] = 0xf5,
+    [Q_KEY_CODE_OPEN] = 0xf6,
+    [Q_KEY_CODE_PASTE] = 0xf7,
+    [Q_KEY_CODE_FIND] = 0xf8,
+    [Q_KEY_CODE_CUT] = 0xf9,
+    [Q_KEY_CODE_LF] = 0xfa,
+    [Q_KEY_CODE_HELP] = 0xfb,
+    [Q_KEY_CODE_META_L] = 0xfc,
+    [Q_KEY_CODE_META_R] = 0xfd,
+    [Q_KEY_CODE_COMPOSE] = 0xfe,
+#endif
+#endif
+    [Q_KEY_CODE_MAX] = 0,
+};
+
+int index_from_key(const char *key)
+{
+    int i;
+
+    for (i = 0; QKeyCode_lookup[i] != NULL; i++) {
+        if (!strcmp(key, QKeyCode_lookup[i])) {
+            break;
+        }
+    }
+
+    /* Return Q_KEY_CODE_MAX if the key is invalid */
+    return i;
+}
+
+int index_from_keycode(int code)
+{
+    int i;
+
+    for (i = 0; i < Q_KEY_CODE_MAX; i++) {
+        if (key_defs[i] == code) {
+            break;
+        }
+    }
+
+    /* Return Q_KEY_CODE_MAX if the code is invalid */
+    return i;
+}
+
+static int *keycodes;
+static int keycodes_size;
+static QEMUTimer *key_timer;
+
+static int keycode_from_keyvalue(const KeyValue *value)
+{
+    if (value->kind == KEY_VALUE_KIND_QCODE) {
+        return key_defs[value->qcode];
+    } else {
+        assert(value->kind == KEY_VALUE_KIND_NUMBER);
+        return value->number;
+    }
+}
+
+static void free_keycodes(void)
+{
+    g_free(keycodes);
+    keycodes = NULL;
+    keycodes_size = 0;
+}
+
+static void release_keys(void *opaque)
+{
+    int i;
+
+    for (i = 0; i < keycodes_size; i++) {
+        if (keycodes[i] & 0x80) {
+            kbd_put_keycode(0xe0);
+        }
+        kbd_put_keycode(keycodes[i]| 0x80);
+    }
+
+    free_keycodes();
+}
+
+void qmp_send_key(KeyValueList *keys, bool has_hold_time, int64_t hold_time,
+                  Error **errp)
+{
+    int keycode;
+    KeyValueList *p;
+
+    if (!key_timer) {
+        key_timer = qemu_new_timer_ns(vm_clock, release_keys, NULL);
+    }
+
+    if (keycodes != NULL) {
+        qemu_del_timer(key_timer);
+        release_keys(NULL);
+    }
+
+    if (!has_hold_time) {
+        hold_time = 100;
+    }
+
+    for (p = keys; p != NULL; p = p->next) {
+        /* key down events */
+        keycode = keycode_from_keyvalue(p->value);
+        if (keycode < 0x01 || keycode > 0xff) {
+            error_setg(errp, "invalid hex keycode 0x%x\n", keycode);
+            free_keycodes();
+            return;
+        }
+
+        if (keycode & 0x80) {
+            kbd_put_keycode(0xe0);
+        }
+        kbd_put_keycode(keycode & 0x7f);
+
+        keycodes = g_realloc(keycodes, sizeof(int) * (keycodes_size + 1));
+        keycodes[keycodes_size++] = keycode;
+    }
+
+    /* delayed key up events */
+    qemu_mod_timer(key_timer, qemu_get_clock_ns(vm_clock) +
+                   muldiv64(get_ticks_per_sec(), hold_time, 1000));
+}
+
+void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
+{
+    qemu_put_kbd_event_opaque = opaque;
+    qemu_put_kbd_event = func;
+}
+
+void qemu_remove_kbd_event_handler(void)
+{
+    qemu_put_kbd_event_opaque = NULL;
+    qemu_put_kbd_event = NULL;
+}
+
+static void check_mode_change(void)
+{
+    static int current_is_absolute, current_has_absolute;
+    int is_absolute;
+    int has_absolute;
+
+    is_absolute = kbd_mouse_is_absolute();
+    has_absolute = kbd_mouse_has_absolute();
+
+    if (is_absolute != current_is_absolute ||
+        has_absolute != current_has_absolute) {
+        notifier_list_notify(&mouse_mode_notifiers, NULL);
+    }
+
+    current_is_absolute = is_absolute;
+    current_has_absolute = has_absolute;
+}
+
+QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
+                                                void *opaque, int absolute,
+                                                const char *name)
+{
+    QEMUPutMouseEntry *s;
+    static int mouse_index = 0;
+
+    s = g_malloc0(sizeof(QEMUPutMouseEntry));
+
+    s->qemu_put_mouse_event = func;
+    s->qemu_put_mouse_event_opaque = opaque;
+    s->qemu_put_mouse_event_absolute = absolute;
+    s->qemu_put_mouse_event_name = g_strdup(name);
+    s->index = mouse_index++;
+
+    QTAILQ_INSERT_TAIL(&mouse_handlers, s, node);
+
+    check_mode_change();
+
+    return s;
+}
+
+void qemu_activate_mouse_event_handler(QEMUPutMouseEntry *entry)
+{
+    QTAILQ_REMOVE(&mouse_handlers, entry, node);
+    QTAILQ_INSERT_HEAD(&mouse_handlers, entry, node);
+
+    check_mode_change();
+}
+
+void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
+{
+    QTAILQ_REMOVE(&mouse_handlers, entry, node);
+
+    g_free(entry->qemu_put_mouse_event_name);
+    g_free(entry);
+
+    check_mode_change();
+}
+
+QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func,
+                                            void *opaque)
+{
+    QEMUPutLEDEntry *s;
+
+    s = g_malloc0(sizeof(QEMUPutLEDEntry));
+
+    s->put_led = func;
+    s->opaque = opaque;
+    QTAILQ_INSERT_TAIL(&led_handlers, s, next);
+    return s;
+}
+
+void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry)
+{
+    if (entry == NULL)
+        return;
+    QTAILQ_REMOVE(&led_handlers, entry, next);
+    g_free(entry);
+}
+
+void kbd_put_keycode(int keycode)
+{
+    if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) {
+        return;
+    }
+    if (qemu_put_kbd_event) {
+        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
+    }
+}
+
+void kbd_put_ledstate(int ledstate)
+{
+    QEMUPutLEDEntry *cursor;
+
+    QTAILQ_FOREACH(cursor, &led_handlers, next) {
+        cursor->put_led(cursor->opaque, ledstate);
+    }
+}
+
+void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
+{
+    QEMUPutMouseEntry *entry;
+    QEMUPutMouseEvent *mouse_event;
+    void *mouse_event_opaque;
+    int width, height;
+
+    if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) {
+        return;
+    }
+    if (QTAILQ_EMPTY(&mouse_handlers)) {
+        return;
+    }
+
+    entry = QTAILQ_FIRST(&mouse_handlers);
+
+    mouse_event = entry->qemu_put_mouse_event;
+    mouse_event_opaque = entry->qemu_put_mouse_event_opaque;
+
+    if (mouse_event) {
+        if (entry->qemu_put_mouse_event_absolute) {
+            width = 0x7fff;
+            height = 0x7fff;
+        } else {
+            width = graphic_width - 1;
+            height = graphic_height - 1;
+        }
+
+        switch (graphic_rotate) {
+        case 0:
+            mouse_event(mouse_event_opaque,
+                        dx, dy, dz, buttons_state);
+            break;
+        case 90:
+            mouse_event(mouse_event_opaque,
+                        width - dy, dx, dz, buttons_state);
+            break;
+        case 180:
+            mouse_event(mouse_event_opaque,
+                        width - dx, height - dy, dz, buttons_state);
+            break;
+        case 270:
+            mouse_event(mouse_event_opaque,
+                        dy, height - dx, dz, buttons_state);
+            break;
+        }
+    }
+}
+
+int kbd_mouse_is_absolute(void)
+{
+    if (QTAILQ_EMPTY(&mouse_handlers)) {
+        return 0;
+    }
+
+    return QTAILQ_FIRST(&mouse_handlers)->qemu_put_mouse_event_absolute;
+}
+
+int kbd_mouse_has_absolute(void)
+{
+    QEMUPutMouseEntry *entry;
+
+    QTAILQ_FOREACH(entry, &mouse_handlers, node) {
+        if (entry->qemu_put_mouse_event_absolute) {
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+MouseInfoList *qmp_query_mice(Error **errp)
+{
+    MouseInfoList *mice_list = NULL;
+    QEMUPutMouseEntry *cursor;
+    bool current = true;
+
+    QTAILQ_FOREACH(cursor, &mouse_handlers, node) {
+        MouseInfoList *info = g_malloc0(sizeof(*info));
+        info->value = g_malloc0(sizeof(*info->value));
+        info->value->name = g_strdup(cursor->qemu_put_mouse_event_name);
+        info->value->index = cursor->index;
+        info->value->absolute = !!cursor->qemu_put_mouse_event_absolute;
+        info->value->current = current;
+
+        current = false;
+
+        info->next = mice_list;
+        mice_list = info;
+    }
+
+    return mice_list;
+}
+
+void do_mouse_set(Monitor *mon, const QDict *qdict)
+{
+    QEMUPutMouseEntry *cursor;
+    int index = qdict_get_int(qdict, "index");
+    int found = 0;
+
+    if (QTAILQ_EMPTY(&mouse_handlers)) {
+        monitor_printf(mon, "No mouse devices connected\n");
+        return;
+    }
+
+    QTAILQ_FOREACH(cursor, &mouse_handlers, node) {
+        if (cursor->index == index) {
+            found = 1;
+            qemu_activate_mouse_event_handler(cursor);
+            break;
+        }
+    }
+
+    if (!found) {
+        monitor_printf(mon, "Mouse at given index not found\n");
+    }
+
+    check_mode_change();
+}
+
+void qemu_add_mouse_mode_change_notifier(Notifier *notify)
+{
+    notifier_list_add(&mouse_mode_notifiers, notify);
+}
+
+void qemu_remove_mouse_mode_change_notifier(Notifier *notify)
+{
+    notifier_remove(notify);
+}
diff --git a/ui/qemu-pixman.c b/ui/qemu-pixman.c
new file mode 100644 (file)
index 0000000..609335a
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "ui/qemu-pixman.h"
+
+int qemu_pixman_get_type(int rshift, int gshift, int bshift)
+{
+    int type = PIXMAN_TYPE_OTHER;
+
+    if (rshift > gshift && gshift > bshift) {
+        if (bshift == 0) {
+            type = PIXMAN_TYPE_ARGB;
+        } else {
+#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0, 21, 8)
+            type = PIXMAN_TYPE_RGBA;
+#endif
+        }
+    } else if (rshift < gshift && gshift < bshift) {
+        if (rshift == 0) {
+            type = PIXMAN_TYPE_ABGR;
+        } else {
+#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0, 16, 0)
+            type = PIXMAN_TYPE_BGRA;
+#endif
+        }
+    }
+    return type;
+}
+
+pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf)
+{
+    pixman_format_code_t format;
+    int type;
+
+    type = qemu_pixman_get_type(pf->rshift, pf->gshift, pf->bshift);
+    format = PIXMAN_FORMAT(pf->bits_per_pixel, type,
+                           pf->abits, pf->rbits, pf->gbits, pf->bbits);
+    if (!pixman_format_supported_source(format)) {
+        return 0;
+    }
+    return format;
+}
+
+pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
+                                           int width)
+{
+    pixman_image_t *image = pixman_image_create_bits(format, width, 1, NULL, 0);
+    assert(image != NULL);
+    return image;
+}
+
+void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
+                              int width, int x, int y)
+{
+    pixman_image_composite(PIXMAN_OP_SRC, fb, NULL, linebuf,
+                           x, y, 0, 0, 0, 0, width, 1);
+}
+
+pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format,
+                                          pixman_image_t *image)
+{
+    pixman_image_t *mirror;
+
+    mirror = pixman_image_create_bits(format,
+                                      pixman_image_get_width(image),
+                                      pixman_image_get_height(image),
+                                      NULL,
+                                      pixman_image_get_stride(image));
+    return mirror;
+}
+
+void qemu_pixman_image_unref(pixman_image_t *image)
+{
+    if (image == NULL) {
+        return;
+    }
+    pixman_image_unref(image);
+}
diff --git a/ui/qemu-spice.h b/ui/qemu-spice.h
deleted file mode 100644 (file)
index 5857b8a..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2010 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 or
- * (at your option) version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef QEMU_SPICE_H
-#define QEMU_SPICE_H
-
-#ifdef CONFIG_SPICE
-
-#include <spice.h>
-
-#include "qemu-option.h"
-#include "qemu-config.h"
-#include "monitor.h"
-
-extern int using_spice;
-
-void qemu_spice_init(void);
-void qemu_spice_input_init(void);
-void qemu_spice_audio_init(void);
-void qemu_spice_display_init(DisplayState *ds);
-int qemu_spice_display_add_client(int csock, int skipauth, int tls);
-int qemu_spice_add_interface(SpiceBaseInstance *sin);
-int qemu_spice_set_passwd(const char *passwd,
-                          bool fail_if_connected, bool disconnect_if_connected);
-int qemu_spice_set_pw_expire(time_t expires);
-int qemu_spice_migrate_info(const char *hostname, int port, int tls_port,
-                            const char *subject,
-                            MonitorCompletion cb, void *opaque);
-
-void do_info_spice_print(Monitor *mon, const QObject *data);
-void do_info_spice(Monitor *mon, QObject **ret_data);
-
-CharDriverState *qemu_chr_open_spice(QemuOpts *opts);
-
-#else  /* CONFIG_SPICE */
-#include "monitor.h"
-
-#define using_spice 0
-static inline int qemu_spice_set_passwd(const char *passwd,
-                                        bool fail_if_connected,
-                                        bool disconnect_if_connected)
-{
-    return -1;
-}
-static inline int qemu_spice_set_pw_expire(time_t expires)
-{
-    return -1;
-}
-static inline int qemu_spice_migrate_info(const char *h, int p, int t,
-                                          const char *s,
-                                          MonitorCompletion cb, void *opaque)
-{
-    cb(opaque, NULL);
-    return -1;
-}
-
-static inline int qemu_spice_display_add_client(int csock, int skipauth,
-                                                int tls)
-{
-    return -1;
-}
-
-#endif /* CONFIG_SPICE */
-
-#endif /* QEMU_SPICE_H */
diff --git a/ui/qemu-x509.h b/ui/qemu-x509.h
new file mode 100644 (file)
index 0000000..095aec1
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef QEMU_X509_H
+#define QEMU_X509_H
+
+#define X509_CA_CERT_FILE "ca-cert.pem"
+#define X509_CA_CRL_FILE "ca-crl.pem"
+#define X509_SERVER_KEY_FILE "server-key.pem"
+#define X509_SERVER_CERT_FILE "server-cert.pem"
+
+#endif /* QEMU_X509_H */
index 37f01b217d890ce386721ffd1bb48c1aba26c653..bcbf89daeb698f69bff33e2394f59a5b020f3fac 100644 (file)
--- a/ui/sdl.c
+++ b/ui/sdl.c
@@ -29,7 +29,7 @@
 #include <SDL_syswm.h>
 
 #include "qemu-common.h"
-#include "console.h"
+#include "ui/console.h"
 #include "sysemu.h"
 #include "x_keymap.h"
 #include "sdl_zoom.h"
index 261c6f2c11c996d50ebd3dda3a05682618b0a45d..ec925ecbb02369688619b616de5323e2227c96ab 100644 (file)
@@ -22,7 +22,7 @@
 #include "sysemu.h"
 
 #include "qemu-common.h"
-#include "qemu-spice.h"
+#include "ui/qemu-spice.h"
 #include "qemu-thread.h"
 #include "qemu-timer.h"
 #include "qemu-queue.h"
@@ -37,7 +37,7 @@
 #include "migration.h"
 #include "monitor.h"
 #include "hw/hw.h"
-#include "spice-display.h"
+#include "ui/spice-display.h"
 
 /* core bits */
 
index 6aff3368cacd805dffb194a332a8fa69b66174a9..681fe32fedee7896309227e3c8504103429f5be6 100644 (file)
  */
 
 #include "qemu-common.h"
-#include "qemu-spice.h"
+#include "ui/qemu-spice.h"
 #include "qemu-timer.h"
 #include "qemu-queue.h"
 #include "monitor.h"
-#include "console.h"
+#include "ui/console.h"
 #include "sysemu.h"
 #include "trace.h"
 
-#include "spice-display.h"
+#include "ui/spice-display.h"
 
 static int debug = 0;
 
diff --git a/ui/spice-display.h b/ui/spice-display.h
deleted file mode 100644 (file)
index 38b6ea9..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2010 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 or
- * (at your option) version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <spice/ipc_ring.h>
-#include <spice/enums.h>
-#include <spice/qxl_dev.h>
-
-#include "qemu-thread.h"
-#include "qemu-pixman.h"
-#include "sysemu.h"
-
-#define NUM_MEMSLOTS 8
-#define MEMSLOT_GENERATION_BITS 8
-#define MEMSLOT_SLOT_BITS 8
-
-#define MEMSLOT_GROUP_HOST  0
-#define MEMSLOT_GROUP_GUEST 1
-#define NUM_MEMSLOTS_GROUPS 2
-
-/*
- * Internal enum to differenciate between options for
- * io calls that have a sync (old) version and an _async (new)
- * version:
- *  QXL_SYNC: use the old version
- *  QXL_ASYNC: use the new version and make sure there are no two
- *   happening at the same time. This is used for guest initiated
- *   calls
- */
-typedef enum qxl_async_io {
-    QXL_SYNC,
-    QXL_ASYNC,
-} qxl_async_io;
-
-enum {
-    QXL_COOKIE_TYPE_IO,
-    QXL_COOKIE_TYPE_RENDER_UPDATE_AREA,
-    QXL_COOKIE_TYPE_POST_LOAD_MONITORS_CONFIG,
-};
-
-typedef struct QXLCookie {
-    int      type;
-    uint64_t io;
-    union {
-        uint32_t surface_id;
-        QXLRect area;
-        struct {
-            QXLRect area;
-            int redraw;
-        } render;
-    } u;
-} QXLCookie;
-
-QXLCookie *qxl_cookie_new(int type, uint64_t io);
-
-typedef struct SimpleSpiceDisplay SimpleSpiceDisplay;
-typedef struct SimpleSpiceUpdate SimpleSpiceUpdate;
-
-struct SimpleSpiceDisplay {
-    DisplayState *ds;
-    void *buf;
-    int bufsize;
-    QXLWorker *worker;
-    QXLInstance qxl;
-    uint32_t unique;
-    pixman_image_t *surface;
-    pixman_image_t *mirror;
-    int32_t num_surfaces;
-
-    QXLRect dirty;
-    int notify;
-
-    /*
-     * All struct members below this comment can be accessed from
-     * both spice server and qemu (iothread) context and any access
-     * to them must be protected by the lock.
-     */
-    QemuMutex lock;
-    QTAILQ_HEAD(, SimpleSpiceUpdate) updates;
-    QEMUCursor *cursor;
-    int mouse_x, mouse_y;
-};
-
-struct SimpleSpiceUpdate {
-    QXLDrawable drawable;
-    QXLImage image;
-    QXLCommandExt ext;
-    uint8_t *bitmap;
-    QTAILQ_ENTRY(SimpleSpiceUpdate) next;
-};
-
-int qemu_spice_rect_is_empty(const QXLRect* r);
-void qemu_spice_rect_union(QXLRect *dest, const QXLRect *r);
-
-void qemu_spice_destroy_update(SimpleSpiceDisplay *sdpy, SimpleSpiceUpdate *update);
-void qemu_spice_create_host_memslot(SimpleSpiceDisplay *ssd);
-void qemu_spice_create_host_primary(SimpleSpiceDisplay *ssd);
-void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd);
-void qemu_spice_vm_change_state_handler(void *opaque, int running,
-                                        RunState state);
-void qemu_spice_display_init_common(SimpleSpiceDisplay *ssd, DisplayState *ds);
-
-void qemu_spice_display_update(SimpleSpiceDisplay *ssd,
-                               int x, int y, int w, int h);
-void qemu_spice_display_resize(SimpleSpiceDisplay *ssd);
-void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd);
-void qemu_spice_cursor_refresh_unlocked(SimpleSpiceDisplay *ssd);
-
-void qemu_spice_add_memslot(SimpleSpiceDisplay *ssd, QXLDevMemSlot *memslot,
-                            qxl_async_io async);
-void qemu_spice_del_memslot(SimpleSpiceDisplay *ssd, uint32_t gid,
-                            uint32_t sid);
-void qemu_spice_create_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id,
-                                       QXLDevSurfaceCreate *surface,
-                                       qxl_async_io async);
-void qemu_spice_destroy_primary_surface(SimpleSpiceDisplay *ssd,
-                                        uint32_t id, qxl_async_io async);
-void qemu_spice_wakeup(SimpleSpiceDisplay *ssd);
-void qemu_spice_display_start(void);
-void qemu_spice_display_stop(void);
-int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd);
index af4223d44261eb82fe2830441b2865d355f6f40c..3beb8deadb50967502a747faa7a95ef86a1a74be 100644 (file)
@@ -24,8 +24,8 @@
 #include <spice/enums.h>
 
 #include "qemu-common.h"
-#include "qemu-spice.h"
-#include "console.h"
+#include "ui/qemu-spice.h"
+#include "ui/console.h"
 
 /* keyboard bits */
 
diff --git a/ui/vgafont.h b/ui/vgafont.h
new file mode 100644 (file)
index 0000000..3606dd7
--- /dev/null
@@ -0,0 +1,4611 @@
+static const uint8_t vgafont16[256 * 16] = {
+
+       /* 0 0x00 '^@' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 1 0x01 '^A' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x81, /* 10000001 */
+       0xa5, /* 10100101 */
+       0x81, /* 10000001 */
+       0x81, /* 10000001 */
+       0xbd, /* 10111101 */
+       0x99, /* 10011001 */
+       0x81, /* 10000001 */
+       0x81, /* 10000001 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 2 0x02 '^B' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0xff, /* 11111111 */
+       0xdb, /* 11011011 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xc3, /* 11000011 */
+       0xe7, /* 11100111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 3 0x03 '^C' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 4 0x04 '^D' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x7c, /* 01111100 */
+       0xfe, /* 11111110 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 5 0x05 '^E' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0xe7, /* 11100111 */
+       0xe7, /* 11100111 */
+       0xe7, /* 11100111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 6 0x06 '^F' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 7 0x07 '^G' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 8 0x08 '^H' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xe7, /* 11100111 */
+       0xc3, /* 11000011 */
+       0xc3, /* 11000011 */
+       0xe7, /* 11100111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 9 0x09 '^I' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x42, /* 01000010 */
+       0x42, /* 01000010 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 10 0x0a '^J' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xc3, /* 11000011 */
+       0x99, /* 10011001 */
+       0xbd, /* 10111101 */
+       0xbd, /* 10111101 */
+       0x99, /* 10011001 */
+       0xc3, /* 11000011 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 11 0x0b '^K' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1e, /* 00011110 */
+       0x0e, /* 00001110 */
+       0x1a, /* 00011010 */
+       0x32, /* 00110010 */
+       0x78, /* 01111000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 12 0x0c '^L' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 13 0x0d '^M' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3f, /* 00111111 */
+       0x33, /* 00110011 */
+       0x3f, /* 00111111 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x70, /* 01110000 */
+       0xf0, /* 11110000 */
+       0xe0, /* 11100000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 14 0x0e '^N' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7f, /* 01111111 */
+       0x63, /* 01100011 */
+       0x7f, /* 01111111 */
+       0x63, /* 01100011 */
+       0x63, /* 01100011 */
+       0x63, /* 01100011 */
+       0x63, /* 01100011 */
+       0x67, /* 01100111 */
+       0xe7, /* 11100111 */
+       0xe6, /* 11100110 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 15 0x0f '^O' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xdb, /* 11011011 */
+       0x3c, /* 00111100 */
+       0xe7, /* 11100111 */
+       0x3c, /* 00111100 */
+       0xdb, /* 11011011 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 16 0x10 '^P' */
+       0x00, /* 00000000 */
+       0x80, /* 10000000 */
+       0xc0, /* 11000000 */
+       0xe0, /* 11100000 */
+       0xf0, /* 11110000 */
+       0xf8, /* 11111000 */
+       0xfe, /* 11111110 */
+       0xf8, /* 11111000 */
+       0xf0, /* 11110000 */
+       0xe0, /* 11100000 */
+       0xc0, /* 11000000 */
+       0x80, /* 10000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 17 0x11 '^Q' */
+       0x00, /* 00000000 */
+       0x02, /* 00000010 */
+       0x06, /* 00000110 */
+       0x0e, /* 00001110 */
+       0x1e, /* 00011110 */
+       0x3e, /* 00111110 */
+       0xfe, /* 11111110 */
+       0x3e, /* 00111110 */
+       0x1e, /* 00011110 */
+       0x0e, /* 00001110 */
+       0x06, /* 00000110 */
+       0x02, /* 00000010 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 18 0x12 '^R' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 19 0x13 '^S' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 20 0x14 '^T' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7f, /* 01111111 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0x7b, /* 01111011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 21 0x15 '^U' */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x0c, /* 00001100 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 22 0x16 '^V' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 23 0x17 '^W' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 24 0x18 '^X' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 25 0x19 '^Y' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 26 0x1a '^Z' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0xfe, /* 11111110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 27 0x1b '^[' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xfe, /* 11111110 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 28 0x1c '^\' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 29 0x1d '^]' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x28, /* 00101000 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x28, /* 00101000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 30 0x1e '^^' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x7c, /* 01111100 */
+       0x7c, /* 01111100 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 31 0x1f '^_' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x7c, /* 01111100 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 32 0x20 ' ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 33 0x21 '!' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 34 0x22 '"' */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x24, /* 00100100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 35 0x23 '#' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 36 0x24 '$' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0x7c, /* 01111100 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x86, /* 10000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 37 0x25 '%' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc2, /* 11000010 */
+       0xc6, /* 11000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc6, /* 11000110 */
+       0x86, /* 10000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 38 0x26 '&' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 39 0x27 ''' */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 40 0x28 '(' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 41 0x29 ')' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 42 0x2a '*' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0xff, /* 11111111 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 43 0x2b '+' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 44 0x2c ',' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 45 0x2d '-' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 46 0x2e '.' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 47 0x2f '/' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x02, /* 00000010 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0x80, /* 10000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 48 0x30 '0' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 49 0x31 '1' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x38, /* 00111000 */
+       0x78, /* 01111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 50 0x32 '2' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 51 0x33 '3' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x3c, /* 00111100 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 52 0x34 '4' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x1c, /* 00011100 */
+       0x3c, /* 00111100 */
+       0x6c, /* 01101100 */
+       0xcc, /* 11001100 */
+       0xfe, /* 11111110 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x1e, /* 00011110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 53 0x35 '5' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xfc, /* 11111100 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 54 0x36 '6' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xfc, /* 11111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 55 0x37 '7' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 56 0x38 '8' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 57 0x39 '9' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7e, /* 01111110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 58 0x3a ':' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 59 0x3b ';' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 60 0x3c '<' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 61 0x3d '=' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 62 0x3e '>' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 63 0x3f '?' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 64 0x40 '@' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xde, /* 11011110 */
+       0xde, /* 11011110 */
+       0xde, /* 11011110 */
+       0xdc, /* 11011100 */
+       0xc0, /* 11000000 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 65 0x41 'A' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 66 0x42 'B' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfc, /* 11111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xfc, /* 11111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 67 0x43 'C' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc2, /* 11000010 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 68 0x44 'D' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 69 0x45 'E' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x66, /* 01100110 */
+       0x62, /* 01100010 */
+       0x68, /* 01101000 */
+       0x78, /* 01111000 */
+       0x68, /* 01101000 */
+       0x60, /* 01100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 70 0x46 'F' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x66, /* 01100110 */
+       0x62, /* 01100010 */
+       0x68, /* 01101000 */
+       0x78, /* 01111000 */
+       0x68, /* 01101000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 71 0x47 'G' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xde, /* 11011110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x66, /* 01100110 */
+       0x3a, /* 00111010 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 72 0x48 'H' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 73 0x49 'I' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 74 0x4a 'J' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1e, /* 00011110 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 75 0x4b 'K' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe6, /* 11100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x78, /* 01111000 */
+       0x78, /* 01111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 76 0x4c 'L' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf0, /* 11110000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 77 0x4d 'M' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xee, /* 11101110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xd6, /* 11010110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 78 0x4e 'N' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xe6, /* 11100110 */
+       0xf6, /* 11110110 */
+       0xfe, /* 11111110 */
+       0xde, /* 11011110 */
+       0xce, /* 11001110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 79 0x4f 'O' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 80 0x50 'P' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfc, /* 11111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 81 0x51 'Q' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xde, /* 11011110 */
+       0x7c, /* 01111100 */
+       0x0c, /* 00001100 */
+       0x0e, /* 00001110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 82 0x52 'R' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfc, /* 11111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 83 0x53 'S' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x38, /* 00111000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 84 0x54 'T' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x5a, /* 01011010 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 85 0x55 'U' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 86 0x56 'V' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 87 0x57 'W' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xfe, /* 11111110 */
+       0xee, /* 11101110 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 88 0x58 'X' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x7c, /* 01111100 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 89 0x59 'Y' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 90 0x5a 'Z' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0x86, /* 10000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc2, /* 11000010 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 91 0x5b '[' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 92 0x5c '\' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x80, /* 10000000 */
+       0xc0, /* 11000000 */
+       0xe0, /* 11100000 */
+       0x70, /* 01110000 */
+       0x38, /* 00111000 */
+       0x1c, /* 00011100 */
+       0x0e, /* 00001110 */
+       0x06, /* 00000110 */
+       0x02, /* 00000010 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 93 0x5d ']' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 94 0x5e '^' */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 95 0x5f '_' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 96 0x60 '`' */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 97 0x61 'a' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 98 0x62 'b' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe0, /* 11100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x78, /* 01111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 99 0x63 'c' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 100 0x64 'd' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1c, /* 00011100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x3c, /* 00111100 */
+       0x6c, /* 01101100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 101 0x65 'e' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 102 0x66 'f' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1c, /* 00011100 */
+       0x36, /* 00110110 */
+       0x32, /* 00110010 */
+       0x30, /* 00110000 */
+       0x78, /* 01111000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 103 0x67 'g' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x7c, /* 01111100 */
+       0x0c, /* 00001100 */
+       0xcc, /* 11001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+
+       /* 104 0x68 'h' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe0, /* 11100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x6c, /* 01101100 */
+       0x76, /* 01110110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 105 0x69 'i' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 106 0x6a 'j' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+
+       /* 107 0x6b 'k' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe0, /* 11100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x78, /* 01111000 */
+       0x78, /* 01111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 108 0x6c 'l' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 109 0x6d 'm' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xec, /* 11101100 */
+       0xfe, /* 11111110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 110 0x6e 'n' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 111 0x6f 'o' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 112 0x70 'p' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+
+       /* 113 0x71 'q' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x7c, /* 01111100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x1e, /* 00011110 */
+       0x00, /* 00000000 */
+
+       /* 114 0x72 'r' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x76, /* 01110110 */
+       0x66, /* 01100110 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 115 0x73 's' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x38, /* 00111000 */
+       0x0c, /* 00001100 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 116 0x74 't' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0xfc, /* 11111100 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x36, /* 00110110 */
+       0x1c, /* 00011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 117 0x75 'u' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 118 0x76 'v' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 119 0x77 'w' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 120 0x78 'x' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 121 0x79 'y' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7e, /* 01111110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+
+       /* 122 0x7a 'z' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xcc, /* 11001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 123 0x7b '{' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x0e, /* 00001110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 124 0x7c '|' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 125 0x7d '}' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x70, /* 01110000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x0e, /* 00001110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 126 0x7e '~' */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 127 0x7f '\7f' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 128 0x80 '\80' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc2, /* 11000010 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 129 0x81 '\81' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 130 0x82 '\82' */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 131 0x83 '\83' */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 132 0x84 '\84' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 133 0x85 '\85' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 134 0x86 '\86' */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 135 0x87 '\87' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 136 0x88 '\88' */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 137 0x89 '\89' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 138 0x8a '\8a' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 139 0x8b '\8b' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 140 0x8c '\8c' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 141 0x8d '\8d' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 142 0x8e '\8e' */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 143 0x8f '\8f' */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 144 0x90 '\90' */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x66, /* 01100110 */
+       0x62, /* 01100010 */
+       0x68, /* 01101000 */
+       0x78, /* 01111000 */
+       0x68, /* 01101000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 145 0x91 '\91' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xec, /* 11101100 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x7e, /* 01111110 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0x6e, /* 01101110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 146 0x92 '\92' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3e, /* 00111110 */
+       0x6c, /* 01101100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xfe, /* 11111110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xce, /* 11001110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 147 0x93 '\93' */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 148 0x94 '\94' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 149 0x95 '\95' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 150 0x96 '\96' */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x78, /* 01111000 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 151 0x97 '\97' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 152 0x98 '\98' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7e, /* 01111110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+
+       /* 153 0x99 '\99' */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 154 0x9a '\9a' */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 155 0x9b '\9b' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 156 0x9c '\9c' */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x64, /* 01100100 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xe6, /* 11100110 */
+       0xfc, /* 11111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 157 0x9d '\9d' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 158 0x9e '\9e' */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xf8, /* 11111000 */
+       0xc4, /* 11000100 */
+       0xcc, /* 11001100 */
+       0xde, /* 11011110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 159 0x9f '\9f' */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x1b, /* 00011011 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xd8, /* 11011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 160 0xa0 ' ' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 161 0xa1 '¡' */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 162 0xa2 '¢' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 163 0xa3 '£' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 164 0xa4 '¤' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 165 0xa5 '¥' */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xe6, /* 11100110 */
+       0xf6, /* 11110110 */
+       0xfe, /* 11111110 */
+       0xde, /* 11011110 */
+       0xce, /* 11001110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 166 0xa6 '¦' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x3e, /* 00111110 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 167 0xa7 '§' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 168 0xa8 '¨' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 169 0xa9 '©' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 170 0xaa 'ª' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 171 0xab '«' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0xe0, /* 11100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xdc, /* 11011100 */
+       0x86, /* 10000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x3e, /* 00111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 172 0xac '¬' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0xe0, /* 11100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x66, /* 01100110 */
+       0xce, /* 11001110 */
+       0x9a, /* 10011010 */
+       0x3f, /* 00111111 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 173 0xad '­' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 174 0xae '®' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x36, /* 00110110 */
+       0x6c, /* 01101100 */
+       0xd8, /* 11011000 */
+       0x6c, /* 01101100 */
+       0x36, /* 00110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 175 0xaf '¯' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xd8, /* 11011000 */
+       0x6c, /* 01101100 */
+       0x36, /* 00110110 */
+       0x6c, /* 01101100 */
+       0xd8, /* 11011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 176 0xb0 '°' */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+
+       /* 177 0xb1 '±' */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+
+       /* 178 0xb2 '²' */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+
+       /* 179 0xb3 '³' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 180 0xb4 '´' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 181 0xb5 'µ' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 182 0xb6 '¶' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf6, /* 11110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 183 0xb7 '·' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 184 0xb8 '¸' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 185 0xb9 '¹' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf6, /* 11110110 */
+       0x06, /* 00000110 */
+       0xf6, /* 11110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 186 0xba 'º' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 187 0xbb '»' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x06, /* 00000110 */
+       0xf6, /* 11110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 188 0xbc '¼' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf6, /* 11110110 */
+       0x06, /* 00000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 189 0xbd '½' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 190 0xbe '¾' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 191 0xbf '¿' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 192 0xc0 'À' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 193 0xc1 'Á' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 194 0xc2 'Â' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 195 0xc3 'Ã' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 196 0xc4 'Ä' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 197 0xc5 'Å' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 198 0xc6 'Æ' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 199 0xc7 'Ç' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x37, /* 00110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 200 0xc8 'È' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x37, /* 00110111 */
+       0x30, /* 00110000 */
+       0x3f, /* 00111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 201 0xc9 'É' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3f, /* 00111111 */
+       0x30, /* 00110000 */
+       0x37, /* 00110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 202 0xca 'Ê' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf7, /* 11110111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 203 0xcb 'Ë' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xf7, /* 11110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 204 0xcc 'Ì' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x37, /* 00110111 */
+       0x30, /* 00110000 */
+       0x37, /* 00110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 205 0xcd 'Í' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 206 0xce 'Î' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf7, /* 11110111 */
+       0x00, /* 00000000 */
+       0xf7, /* 11110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 207 0xcf 'Ï' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 208 0xd0 'Ð' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 209 0xd1 'Ñ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 210 0xd2 'Ò' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 211 0xd3 'Ó' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x3f, /* 00111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 212 0xd4 'Ô' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 213 0xd5 'Õ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 214 0xd6 'Ö' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3f, /* 00111111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 215 0xd7 '×' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xff, /* 11111111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 216 0xd8 'Ø' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 217 0xd9 'Ù' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 218 0xda 'Ú' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 219 0xdb 'Û' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 220 0xdc 'Ü' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 221 0xdd 'Ý' */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+
+       /* 222 0xde 'Þ' */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+
+       /* 223 0xdf 'ß' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 224 0xe0 'à' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xdc, /* 11011100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 225 0xe1 'á' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xd8, /* 11011000 */
+       0xcc, /* 11001100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 226 0xe2 'â' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 227 0xe3 'ã' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 228 0xe4 'ä' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 229 0xe5 'å' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 230 0xe6 'æ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+
+       /* 231 0xe7 'ç' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 232 0xe8 'è' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 233 0xe9 'é' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 234 0xea 'ê' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0xee, /* 11101110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 235 0xeb 'ë' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1e, /* 00011110 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x3e, /* 00111110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 236 0xec 'ì' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 237 0xed 'í' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x03, /* 00000011 */
+       0x06, /* 00000110 */
+       0x7e, /* 01111110 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0xf3, /* 11110011 */
+       0x7e, /* 01111110 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 238 0xee 'î' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1c, /* 00011100 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x1c, /* 00011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 239 0xef 'ï' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 240 0xf0 'ð' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 241 0xf1 'ñ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 242 0xf2 'ò' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 243 0xf3 'ó' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 244 0xf4 'ô' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 245 0xf5 'õ' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 246 0xf6 'ö' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 247 0xf7 '÷' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 248 0xf8 'ø' */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 249 0xf9 'ù' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 250 0xfa 'ú' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 251 0xfb 'û' */
+       0x00, /* 00000000 */
+       0x0f, /* 00001111 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0xec, /* 11101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x3c, /* 00111100 */
+       0x1c, /* 00011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 252 0xfc 'ü' */
+       0x00, /* 00000000 */
+       0x6c, /* 01101100 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 253 0xfd 'ý' */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x32, /* 00110010 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 254 0xfe 'þ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 255 0xff 'ÿ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+};
index 6141e88b4e969eeee2ceed3742a5554a43f20078..7ec183372a98e403d4433a727c135af0ddc4d1aa 100644 (file)
--- a/ui/vnc.h
+++ b/ui/vnc.h
@@ -30,7 +30,7 @@
 #include "qemu-common.h"
 #include "qemu-queue.h"
 #include "qemu-thread.h"
-#include "console.h"
+#include "ui/console.h"
 #include "monitor.h"
 #include "audio/audio.h"
 #include "bitmap.h"
diff --git a/vgafont.h b/vgafont.h
deleted file mode 100644 (file)
index 3606dd7..0000000
--- a/vgafont.h
+++ /dev/null
@@ -1,4611 +0,0 @@
-static const uint8_t vgafont16[256 * 16] = {
-
-       /* 0 0x00 '^@' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 1 0x01 '^A' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x81, /* 10000001 */
-       0xa5, /* 10100101 */
-       0x81, /* 10000001 */
-       0x81, /* 10000001 */
-       0xbd, /* 10111101 */
-       0x99, /* 10011001 */
-       0x81, /* 10000001 */
-       0x81, /* 10000001 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 2 0x02 '^B' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0xff, /* 11111111 */
-       0xdb, /* 11011011 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xc3, /* 11000011 */
-       0xe7, /* 11100111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 3 0x03 '^C' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 4 0x04 '^D' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x7c, /* 01111100 */
-       0xfe, /* 11111110 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 5 0x05 '^E' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0xe7, /* 11100111 */
-       0xe7, /* 11100111 */
-       0xe7, /* 11100111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 6 0x06 '^F' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 7 0x07 '^G' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 8 0x08 '^H' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xe7, /* 11100111 */
-       0xc3, /* 11000011 */
-       0xc3, /* 11000011 */
-       0xe7, /* 11100111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 9 0x09 '^I' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x42, /* 01000010 */
-       0x42, /* 01000010 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 10 0x0a '^J' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xc3, /* 11000011 */
-       0x99, /* 10011001 */
-       0xbd, /* 10111101 */
-       0xbd, /* 10111101 */
-       0x99, /* 10011001 */
-       0xc3, /* 11000011 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 11 0x0b '^K' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1e, /* 00011110 */
-       0x0e, /* 00001110 */
-       0x1a, /* 00011010 */
-       0x32, /* 00110010 */
-       0x78, /* 01111000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 12 0x0c '^L' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 13 0x0d '^M' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3f, /* 00111111 */
-       0x33, /* 00110011 */
-       0x3f, /* 00111111 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x70, /* 01110000 */
-       0xf0, /* 11110000 */
-       0xe0, /* 11100000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 14 0x0e '^N' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7f, /* 01111111 */
-       0x63, /* 01100011 */
-       0x7f, /* 01111111 */
-       0x63, /* 01100011 */
-       0x63, /* 01100011 */
-       0x63, /* 01100011 */
-       0x63, /* 01100011 */
-       0x67, /* 01100111 */
-       0xe7, /* 11100111 */
-       0xe6, /* 11100110 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 15 0x0f '^O' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xdb, /* 11011011 */
-       0x3c, /* 00111100 */
-       0xe7, /* 11100111 */
-       0x3c, /* 00111100 */
-       0xdb, /* 11011011 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 16 0x10 '^P' */
-       0x00, /* 00000000 */
-       0x80, /* 10000000 */
-       0xc0, /* 11000000 */
-       0xe0, /* 11100000 */
-       0xf0, /* 11110000 */
-       0xf8, /* 11111000 */
-       0xfe, /* 11111110 */
-       0xf8, /* 11111000 */
-       0xf0, /* 11110000 */
-       0xe0, /* 11100000 */
-       0xc0, /* 11000000 */
-       0x80, /* 10000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 17 0x11 '^Q' */
-       0x00, /* 00000000 */
-       0x02, /* 00000010 */
-       0x06, /* 00000110 */
-       0x0e, /* 00001110 */
-       0x1e, /* 00011110 */
-       0x3e, /* 00111110 */
-       0xfe, /* 11111110 */
-       0x3e, /* 00111110 */
-       0x1e, /* 00011110 */
-       0x0e, /* 00001110 */
-       0x06, /* 00000110 */
-       0x02, /* 00000010 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 18 0x12 '^R' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 19 0x13 '^S' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 20 0x14 '^T' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7f, /* 01111111 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0x7b, /* 01111011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 21 0x15 '^U' */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x0c, /* 00001100 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 22 0x16 '^V' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 23 0x17 '^W' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 24 0x18 '^X' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 25 0x19 '^Y' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 26 0x1a '^Z' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0xfe, /* 11111110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 27 0x1b '^[' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xfe, /* 11111110 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 28 0x1c '^\' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 29 0x1d '^]' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x28, /* 00101000 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x28, /* 00101000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 30 0x1e '^^' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x7c, /* 01111100 */
-       0x7c, /* 01111100 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 31 0x1f '^_' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x7c, /* 01111100 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 32 0x20 ' ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 33 0x21 '!' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 34 0x22 '"' */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x24, /* 00100100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 35 0x23 '#' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 36 0x24 '$' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0x7c, /* 01111100 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x86, /* 10000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 37 0x25 '%' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc2, /* 11000010 */
-       0xc6, /* 11000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc6, /* 11000110 */
-       0x86, /* 10000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 38 0x26 '&' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 39 0x27 ''' */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 40 0x28 '(' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 41 0x29 ')' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 42 0x2a '*' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0xff, /* 11111111 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 43 0x2b '+' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 44 0x2c ',' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 45 0x2d '-' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 46 0x2e '.' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 47 0x2f '/' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x02, /* 00000010 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0x80, /* 10000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 48 0x30 '0' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 49 0x31 '1' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x38, /* 00111000 */
-       0x78, /* 01111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 50 0x32 '2' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 51 0x33 '3' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x3c, /* 00111100 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 52 0x34 '4' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x1c, /* 00011100 */
-       0x3c, /* 00111100 */
-       0x6c, /* 01101100 */
-       0xcc, /* 11001100 */
-       0xfe, /* 11111110 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x1e, /* 00011110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 53 0x35 '5' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xfc, /* 11111100 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 54 0x36 '6' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xfc, /* 11111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 55 0x37 '7' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 56 0x38 '8' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 57 0x39 '9' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7e, /* 01111110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 58 0x3a ':' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 59 0x3b ';' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 60 0x3c '<' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 61 0x3d '=' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 62 0x3e '>' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 63 0x3f '?' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 64 0x40 '@' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xde, /* 11011110 */
-       0xde, /* 11011110 */
-       0xde, /* 11011110 */
-       0xdc, /* 11011100 */
-       0xc0, /* 11000000 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 65 0x41 'A' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 66 0x42 'B' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfc, /* 11111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xfc, /* 11111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 67 0x43 'C' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc2, /* 11000010 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 68 0x44 'D' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 69 0x45 'E' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x66, /* 01100110 */
-       0x62, /* 01100010 */
-       0x68, /* 01101000 */
-       0x78, /* 01111000 */
-       0x68, /* 01101000 */
-       0x60, /* 01100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 70 0x46 'F' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x66, /* 01100110 */
-       0x62, /* 01100010 */
-       0x68, /* 01101000 */
-       0x78, /* 01111000 */
-       0x68, /* 01101000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 71 0x47 'G' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xde, /* 11011110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x66, /* 01100110 */
-       0x3a, /* 00111010 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 72 0x48 'H' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 73 0x49 'I' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 74 0x4a 'J' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1e, /* 00011110 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 75 0x4b 'K' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe6, /* 11100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x78, /* 01111000 */
-       0x78, /* 01111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 76 0x4c 'L' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf0, /* 11110000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 77 0x4d 'M' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xee, /* 11101110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xd6, /* 11010110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 78 0x4e 'N' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xe6, /* 11100110 */
-       0xf6, /* 11110110 */
-       0xfe, /* 11111110 */
-       0xde, /* 11011110 */
-       0xce, /* 11001110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 79 0x4f 'O' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 80 0x50 'P' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfc, /* 11111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 81 0x51 'Q' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xde, /* 11011110 */
-       0x7c, /* 01111100 */
-       0x0c, /* 00001100 */
-       0x0e, /* 00001110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 82 0x52 'R' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfc, /* 11111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 83 0x53 'S' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x38, /* 00111000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 84 0x54 'T' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x5a, /* 01011010 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 85 0x55 'U' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 86 0x56 'V' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 87 0x57 'W' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xfe, /* 11111110 */
-       0xee, /* 11101110 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 88 0x58 'X' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x7c, /* 01111100 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 89 0x59 'Y' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 90 0x5a 'Z' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0x86, /* 10000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc2, /* 11000010 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 91 0x5b '[' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 92 0x5c '\' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x80, /* 10000000 */
-       0xc0, /* 11000000 */
-       0xe0, /* 11100000 */
-       0x70, /* 01110000 */
-       0x38, /* 00111000 */
-       0x1c, /* 00011100 */
-       0x0e, /* 00001110 */
-       0x06, /* 00000110 */
-       0x02, /* 00000010 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 93 0x5d ']' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 94 0x5e '^' */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 95 0x5f '_' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 96 0x60 '`' */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 97 0x61 'a' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 98 0x62 'b' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe0, /* 11100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x78, /* 01111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 99 0x63 'c' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 100 0x64 'd' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1c, /* 00011100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x3c, /* 00111100 */
-       0x6c, /* 01101100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 101 0x65 'e' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 102 0x66 'f' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1c, /* 00011100 */
-       0x36, /* 00110110 */
-       0x32, /* 00110010 */
-       0x30, /* 00110000 */
-       0x78, /* 01111000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 103 0x67 'g' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x7c, /* 01111100 */
-       0x0c, /* 00001100 */
-       0xcc, /* 11001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-
-       /* 104 0x68 'h' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe0, /* 11100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x6c, /* 01101100 */
-       0x76, /* 01110110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 105 0x69 'i' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 106 0x6a 'j' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-
-       /* 107 0x6b 'k' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe0, /* 11100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x78, /* 01111000 */
-       0x78, /* 01111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 108 0x6c 'l' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 109 0x6d 'm' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xec, /* 11101100 */
-       0xfe, /* 11111110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 110 0x6e 'n' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 111 0x6f 'o' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 112 0x70 'p' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-
-       /* 113 0x71 'q' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x7c, /* 01111100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x1e, /* 00011110 */
-       0x00, /* 00000000 */
-
-       /* 114 0x72 'r' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x76, /* 01110110 */
-       0x66, /* 01100110 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 115 0x73 's' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x38, /* 00111000 */
-       0x0c, /* 00001100 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 116 0x74 't' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0xfc, /* 11111100 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x36, /* 00110110 */
-       0x1c, /* 00011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 117 0x75 'u' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 118 0x76 'v' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 119 0x77 'w' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 120 0x78 'x' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 121 0x79 'y' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7e, /* 01111110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-
-       /* 122 0x7a 'z' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xcc, /* 11001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 123 0x7b '{' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x0e, /* 00001110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 124 0x7c '|' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 125 0x7d '}' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x70, /* 01110000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x0e, /* 00001110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 126 0x7e '~' */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 127 0x7f '\7f' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 128 0x80 '\80' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc2, /* 11000010 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 129 0x81 '\81' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 130 0x82 '\82' */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 131 0x83 '\83' */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 132 0x84 '\84' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 133 0x85 '\85' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 134 0x86 '\86' */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 135 0x87 '\87' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 136 0x88 '\88' */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 137 0x89 '\89' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 138 0x8a '\8a' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 139 0x8b '\8b' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 140 0x8c '\8c' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 141 0x8d '\8d' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 142 0x8e '\8e' */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 143 0x8f '\8f' */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 144 0x90 '\90' */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x66, /* 01100110 */
-       0x62, /* 01100010 */
-       0x68, /* 01101000 */
-       0x78, /* 01111000 */
-       0x68, /* 01101000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 145 0x91 '\91' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xec, /* 11101100 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x7e, /* 01111110 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0x6e, /* 01101110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 146 0x92 '\92' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3e, /* 00111110 */
-       0x6c, /* 01101100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xfe, /* 11111110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xce, /* 11001110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 147 0x93 '\93' */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 148 0x94 '\94' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 149 0x95 '\95' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 150 0x96 '\96' */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x78, /* 01111000 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 151 0x97 '\97' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 152 0x98 '\98' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7e, /* 01111110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-
-       /* 153 0x99 '\99' */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 154 0x9a '\9a' */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 155 0x9b '\9b' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 156 0x9c '\9c' */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x64, /* 01100100 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xe6, /* 11100110 */
-       0xfc, /* 11111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 157 0x9d '\9d' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 158 0x9e '\9e' */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xf8, /* 11111000 */
-       0xc4, /* 11000100 */
-       0xcc, /* 11001100 */
-       0xde, /* 11011110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 159 0x9f '\9f' */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x1b, /* 00011011 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xd8, /* 11011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 160 0xa0 ' ' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 161 0xa1 '¡' */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 162 0xa2 '¢' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 163 0xa3 '£' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 164 0xa4 '¤' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 165 0xa5 '¥' */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xe6, /* 11100110 */
-       0xf6, /* 11110110 */
-       0xfe, /* 11111110 */
-       0xde, /* 11011110 */
-       0xce, /* 11001110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 166 0xa6 '¦' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x3e, /* 00111110 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 167 0xa7 '§' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 168 0xa8 '¨' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 169 0xa9 '©' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 170 0xaa 'ª' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 171 0xab '«' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0xe0, /* 11100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xdc, /* 11011100 */
-       0x86, /* 10000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x3e, /* 00111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 172 0xac '¬' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0xe0, /* 11100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x66, /* 01100110 */
-       0xce, /* 11001110 */
-       0x9a, /* 10011010 */
-       0x3f, /* 00111111 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 173 0xad '­' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 174 0xae '®' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x36, /* 00110110 */
-       0x6c, /* 01101100 */
-       0xd8, /* 11011000 */
-       0x6c, /* 01101100 */
-       0x36, /* 00110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 175 0xaf '¯' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xd8, /* 11011000 */
-       0x6c, /* 01101100 */
-       0x36, /* 00110110 */
-       0x6c, /* 01101100 */
-       0xd8, /* 11011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 176 0xb0 '°' */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-
-       /* 177 0xb1 '±' */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-
-       /* 178 0xb2 '²' */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-
-       /* 179 0xb3 '³' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 180 0xb4 '´' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 181 0xb5 'µ' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 182 0xb6 '¶' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf6, /* 11110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 183 0xb7 '·' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 184 0xb8 '¸' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 185 0xb9 '¹' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf6, /* 11110110 */
-       0x06, /* 00000110 */
-       0xf6, /* 11110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 186 0xba 'º' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 187 0xbb '»' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x06, /* 00000110 */
-       0xf6, /* 11110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 188 0xbc '¼' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf6, /* 11110110 */
-       0x06, /* 00000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 189 0xbd '½' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 190 0xbe '¾' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 191 0xbf '¿' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 192 0xc0 'À' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 193 0xc1 'Á' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 194 0xc2 'Â' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 195 0xc3 'Ã' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 196 0xc4 'Ä' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 197 0xc5 'Å' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 198 0xc6 'Æ' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 199 0xc7 'Ç' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x37, /* 00110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 200 0xc8 'È' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x37, /* 00110111 */
-       0x30, /* 00110000 */
-       0x3f, /* 00111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 201 0xc9 'É' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3f, /* 00111111 */
-       0x30, /* 00110000 */
-       0x37, /* 00110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 202 0xca 'Ê' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf7, /* 11110111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 203 0xcb 'Ë' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xf7, /* 11110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 204 0xcc 'Ì' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x37, /* 00110111 */
-       0x30, /* 00110000 */
-       0x37, /* 00110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 205 0xcd 'Í' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 206 0xce 'Î' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf7, /* 11110111 */
-       0x00, /* 00000000 */
-       0xf7, /* 11110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 207 0xcf 'Ï' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 208 0xd0 'Ð' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 209 0xd1 'Ñ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 210 0xd2 'Ò' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 211 0xd3 'Ó' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x3f, /* 00111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 212 0xd4 'Ô' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 213 0xd5 'Õ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 214 0xd6 'Ö' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3f, /* 00111111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 215 0xd7 '×' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xff, /* 11111111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 216 0xd8 'Ø' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 217 0xd9 'Ù' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 218 0xda 'Ú' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 219 0xdb 'Û' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 220 0xdc 'Ü' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 221 0xdd 'Ý' */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-
-       /* 222 0xde 'Þ' */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-
-       /* 223 0xdf 'ß' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 224 0xe0 'à' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xdc, /* 11011100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 225 0xe1 'á' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xd8, /* 11011000 */
-       0xcc, /* 11001100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 226 0xe2 'â' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 227 0xe3 'ã' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 228 0xe4 'ä' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 229 0xe5 'å' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 230 0xe6 'æ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-
-       /* 231 0xe7 'ç' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 232 0xe8 'è' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 233 0xe9 'é' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 234 0xea 'ê' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0xee, /* 11101110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 235 0xeb 'ë' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1e, /* 00011110 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x3e, /* 00111110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 236 0xec 'ì' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 237 0xed 'í' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x03, /* 00000011 */
-       0x06, /* 00000110 */
-       0x7e, /* 01111110 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0xf3, /* 11110011 */
-       0x7e, /* 01111110 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 238 0xee 'î' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1c, /* 00011100 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x1c, /* 00011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 239 0xef 'ï' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 240 0xf0 'ð' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 241 0xf1 'ñ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 242 0xf2 'ò' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 243 0xf3 'ó' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 244 0xf4 'ô' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 245 0xf5 'õ' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 246 0xf6 'ö' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 247 0xf7 '÷' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 248 0xf8 'ø' */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 249 0xf9 'ù' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 250 0xfa 'ú' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 251 0xfb 'û' */
-       0x00, /* 00000000 */
-       0x0f, /* 00001111 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0xec, /* 11101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x3c, /* 00111100 */
-       0x1c, /* 00011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 252 0xfc 'ü' */
-       0x00, /* 00000000 */
-       0x6c, /* 01101100 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 253 0xfd 'ý' */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x32, /* 00110010 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 254 0xfe 'þ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 255 0xff 'ÿ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-};
diff --git a/vl.c b/vl.c
index a7eeafc26ecb54b29e70502a21da0c340595a79e..6713220905b27a7269bd464d1df0f844cbc38020 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -130,7 +130,7 @@ int main(int argc, char **argv)
 #include "net/net.h"
 #include "net/slirp.h"
 #include "monitor.h"
-#include "console.h"
+#include "ui/console.h"
 #include "sysemu.h"
 #include "gdbstub.h"
 #include "qemu-timer.h"